2012-01-18 13 views
5

मेरे पास एक PHP स्क्रिप्ट है जो अब सरणी के सेट के संयोजन के माध्यम से लूपिंग कर रही है। मैं एक साधारण PHP स्क्रिप्ट के साथ 1 घंटे में 500 ट्रिलियन कुल संयोजनों के 6.1 बिलियन का परीक्षण कर सकता हूं। क्या आज के औसत पीसी पर चल रही किसी भी भाषा में एक प्रोग्राम लिखना संभव है जो ~ 6 घंटे से कम समय में एकाधिक सरणी के सभी 500 ट्रिलियन संयोजनों का परीक्षण करने में सक्षम होगा?निष्पादन समय के 6 घंटे से कम समय में 500 ट्रिलियन संयोजनों का परीक्षण कैसे करें

इसके अलावा, मेरे पास इस कार्य के लिए वितरित या क्लस्टर कंप्यूटिंग का उपयोग करने के लिए संसाधन नहीं हैं। कोड को मल्टीथ्रेड किए गए जावा/सी # में परिवर्तित करने के लिए मुझे किस प्रकार के लाभ की उम्मीद थी?

धन्यवाद

+2

क्या यह हैक करने के लिए एक WPA 48 बिट्स है? ;) – Nabab

+0

यह उस विधि पर निर्भर करता है जिसका उपयोग आप उन सरणी तत्वों को संसाधित करने के लिए करते हैं और आप 500 ट्रिलियन संयोजनों को बचाने के लिए कितना राम बर्बाद कर रहे हैं। सिद्धांत रूप में हां, बहुप्रचारित भाषाएं CPU को बेहतर तरीके से उपयोग कर सकती हैं। –

+0

यदि यह एक महान कारण के लिए है, तो आप "दान सीपीयू समय" पृष्ठ बना सकते हैं और अपने ब्राउज़र में उपयोगकर्ताओं द्वारा किए गए समाधान के ब्लॉक एकत्रित करके वायरल जा सकते हैं ... जो आपके संसाधनों की समस्या का समाधान करेगा ... –

उत्तर

5

चलिए सरल शुरू करते हैं। क्या आप थ्रेडिंग का उपयोग करते हैं? यदि नहीं - एक आधुनिक उच्च अंत इंटेल में आज प्रति प्रोसेसर 12 हार्डवेयर धागे हैं। इसका मतलब है कि आपको थ्रेडिंग से 12 का कारक मिलता है।

अगर किसी के लिए सर्वर विशिष्ट हो जाता है तो उसे अपेक्षाकृत कम लागत के लिए आसानी से 24-32 हार्डवेयर धागे मिल सकते हैं।

यदि सरणी अर्ध स्थिर हैं और आप अदभुत ग्राफिक्स कार्ड मानते हैं, तो आप 800 से 3000 प्रोसेसर कोरों को एक विशाल समय बचतकर्ता मिल सकते हैं। कुछ भी यह नहीं धड़कता है - और यहां तक ​​कि औसत सीपीयू के पास इन चिप्स या ग्राफिक्स कार्ड में कुछ कोर क्षमताएं हैं।

+0

मैं टॉमटॉम से सहमत हूं - जीपीजीपीयू-कंप्यूटिंग निश्चित रूप से ऐसे मामलों में जाने का तरीका है और यदि आपके पास क्लस्टरिंग या इसी तरह के संसाधन नहीं हैं। – ChrFin

+0

भले ही। इस वजह से सुपरमिक्रो 6 रैक यूनिट सर्वर बेचता है जिसमें 6 एनवीडिया टेस्ला कार्ड के लिए जगह है। कुछ भी paralellizable संचालन के लिए जीपीयू धड़कता है। मुझे पता है कि अमेरिकी शेयर बाजारों में एक व्यक्ति के साथ एक मशीन के साथ विकल्प बनाने का विश्लेषण - हर सेकेंड, सभी शेयर। इसके लिए 6 9 0 9 का कूपल उपयोग करता है। – TomTom

+0

@ टॉमटॉम एक विशिष्ट प्रकार के समांतर संचालन के लिए जीपीजीपीयू को कुछ भी नहीं धड़कता है। इस मामले में हाँ यह काफी अच्छा होना चाहिए। – Voo

2

यदि आपके पास संसाधन नहीं हैं तो मुझे कहने की डर है कि आप जिन नंबरों को चाहते हैं, आप खराब हैं।

आपको PHP डेटा या किसी अन्य भाषा का उपयोग करके समय सीमा के भीतर अपनी पहेली को पूरा करने का कोई मौका पाने के लिए उन पर काम कर रहे डेटा संरचनाओं और एल्गोरिदम पर पुनर्विचार करना होगा।

0

मुझे उस प्रक्रिया के बारे में कुछ नहीं पता है जिसे आप चलाना चाहते हैं और शायद आपके वर्तमान संसाधनों के साथ अपने लक्ष्यों को प्राप्त करने का कोई तरीका नहीं है, लेकिन चूंकि आप एक भाषा मांग रहे हैं, और यह सच है कि PHP सबसे अच्छा नहीं है paralelism से निपटने, मुझे कहना चाहिए कि Erlang इस तरह की उपलब्धियों के लिए प्रसिद्ध है।

3
500 trillion comparisons in 6 hours 
= 
83.3 trillion comparisons in 1 hour 
= 
1.4 trillion comparisons per minute 
= 
23.1 billion comparisons per second 

मान लें कि आप एक इंटेल कोर i7-2600 सीपीयू (3.4GHz) है, जो 4 कोर + हाइपरथ्रेडिंग = 8 कोर है मिल गया है, तो आप

23.1/6 = 3.9GHz 
की एक प्रति-कोर गति आवश्यकता होगी

जो बुनियादी ओवरक्लिंग के लिए संभावना के चरम अंत में है।

एक बार जब आप अन्य ओवरहेड में कारक बनाते हैं, तो आप जो चाहते हैं वह संभव नहीं है। आपका सीपीयू कुछ भी नहीं कर सकता लेकिन तुलना करता है।

+0

ओवरहेड के लिए 2 कोर आरक्षित? – Mikeb

+1

मुझे यह भी यकीन नहीं है कि इस तरह के कार्य के साथ एचटी। और फिर यहां खाता कुछ खो रहा है: 3.9 बिलियन तुलना सीधे 1 चक्र/तुलना में मैप नहीं करती है। वास्तविक कोड के आधार पर हमें अगले आवश्यक संयोजन, ओवरहेड लूपिंग आदि के लिए बहुत कुछ चाहिए। अगर हम प्रति पुनरावृत्ति कम से कम सौ चक्र से कम प्राप्त करेंगे तो मुझे आश्चर्य होगा – Voo

संबंधित मुद्दे