2011-08-03 13 views
5

में समानांतर में कोशिकाओं का मूल्यांकन करना मेरे पास कई सैकड़ों सेल लंबी गणित फ़ाइल हैं और मैं समांतर मूल्यांकन का उपयोग करना चाहता हूं। मेरे पास 16 जीबी मेमोरी वाला प्रत्येक मशीन 2 प्रोसेसर एक्स 4 कोर है। मेरा गणित लाइसेंस मुझे मास्टर के 1 मास्टर कर्नेल के साथ अधिकतम 2 मास्टर कर्नेल चलाने की इजाजत देता है, जिसमें 4 गुलाम कर्नेल हो सकते हैं (यह थोड़ी देर के लिए इसके साथ खेला जाने वाला यह मेरी व्याख्या है)।गणित

मैं दो अलग-अलग नोटबुक में दो मास्टर कर्नेल में अपना कोड चलाता था। चीजों को आगे बढ़ाने के लिए, मैंने कुछ कोशिकाओं को ParallelEvaluate[] के साथ encapsulate करने की कोशिश की और यह काम लग रहा था। तब मेरे पास मेरे कोड की 4 प्रतियां भी मास्टर कर्नेल में से एक के माध्यम से एक-दूसरे से अनजान चल रही हैं, जो ठीक है। (मैं मूल रूप से यथासंभव समानांतर में अपने कोड/गणित के कई प्रतियों को चलाने की कोशिश कर रहा हूं। मैं अभी तक वास्तव में समानांतर के लिए शूटिंग नहीं कर रहा हूं)।

चूंकि मेरा कोड बहुत लंबा और जटिल है, इसलिए मैं उन्हें समानांतर में मूल्यांकन करने के लिए हर सेल को फिर से संपादित नहीं करना चाहता हूं। क्या मेरे नोटबुक की शुरुआत में कुछ भी जादुई है जो कि उसके बाद मूल्यांकन किया जा सकता है, इसके बाद प्रत्येक सेल का मूल्यांकन डिफ़ॉल्ट रूप से ParallelEvaluate[ ... cell contents.... ] होगा?

+1

तुम सच में विश्वास है कि आप करने के लिए 'ParallelEvaluate []' सब अपनी कोशिकाओं चाहते हैं? क्या आपने पहले से ही अपने कोड पर इसका प्रयोग किया था? संकेत: आपको शायद सूचियां मिलेंगी जहां आपको एक परिणाम मिल रहा है ... –

+0

हाँ मुझे टेबल की सूचियां मिल रही हैं और यह ठीक है। मैं मैन्युअल रूप से मास्टर कर्नेल में उन तालिकाओं को जोड़ दूंगा और परिणामों का विश्लेषण करूंगा। मैं सिर्फ गणना के लिए सभी गणित का उपयोग करने का सबसे आसान तरीका जानने की कोशिश कर रहा हूं। – Hsn

+0

मैं $ Pre = parallelEvaluate के साथ प्रयोग करने की कोशिश कर रहा था, लेकिन मैं अभी मामा का उपयोग नहीं कर सकता (एचडब्ल्यू समस्याएं) शायद आप इसे –

उत्तर

2

बेलीसियस द्वारा सुझाए गए अनुसार, $ Pre = समानांतर मूल्यांकन वास्तव में वही करता है जो मैं चाहता हूं। एक समस्या यह थी कि जब मैं इसे बंद करने के लिए $ pre = पहचान करता हूं तो मैं अपने मास्टर कर्नेल पर वापस जा सकता हूं, गणित अभी भी मास्टर के बजाय दास कर्नेल में मूल्यांकन करने और विफल होने का प्रयास करने की कोशिश करता है। मैंने इसे निम्नानुसार हल कर दिया: SetSharedVariable [समानांतर नियंत्रण]; समानांतर नियंत्रण = समानांतर मूल्यांकन; $ प्री: = समानांतर नियंत्रण; ... यहां सब कुछ गुलामों में मूल्यांकन किया जाता है ...; समानांतर नियंत्रण = पहचान; .... सब कुछ वापस जाने के लिए मास्टर पर मूल्यांकन किया जाना ही ... यहाँ जो 2 कोर होने पर अपने लैपटॉप पर एक नमूना रन है:

LaunchKernels[] 

{KernelObject [1, "स्थानीय"], KernelObject [2, "स्थानीय"]}

$KernelID 
ParallelEvaluate[$KernelID] 

{1, 2}

SetSharedVariable[parcontrol]; $Pre := parcontrol; parcontrol = ParallelEvaluate 

अशक्त [ParallelEvaluate]

$KernelID 

{1, 2}

parcontrol = Identity 

{पहचान, पहचान}

$KernelID 
parcontrol = ParallelEvaluate 

ParallelEvaluate

$KernelID 

{1, 2}