2011-07-04 20 views
5

मैं समानांतर में किसी सरणी में आइटम्स का मूल्यांकन करने की रणनीति लिखना चाहता हूं। ऐसा करने के लिए पुरानी रणनीतियों में parArr था (see here)। लेकिन यह नए नियंत्रण में नहीं मिला है। Parallel.Strategies मॉड्यूल।हास्केल सरणी रणनीतियों को कैसे लिखें

उदा। समानांतर सूची मूल्यांकन: amap f myArr `using` parArr rdeepseq, जहां amap Data.Array.Base से है और तत्वों (क्रमिक रूप से) से प्रत्येक के लिए एक समारोह लागू होता है: map f myList `using` parList rdeepseq

मैं की तरह कुछ करने के लिए सक्षम होने के लिए चाहते हैं।

निम्नलिखित काम करने लगता है लेकिन मुझे आश्चर्य है कि यह सही कर रहा है, और जानना चाहता हूं कि मैं अपना खुद का parArr कैसे परिभाषित कर सकता हूं।

यह काम करता है: amap ((+1) `using` rpar) $ Array.array (0,4) [(0,10),(1,20),(2,30),(3,40),(4,50)]

+0

@ डेव 4420: संपादन के लिए धन्यवाद :-) – vis

+3

क्या आप वाकई काम करते हैं? क्योंकि 'rpar'' का उपयोग करके '' (+1)' काफी अजीब है। यह समानांतर में '(+1)' अभिव्यक्ति का मूल्यांकन करेगा, जो अधिक समझ में नहीं आता है क्योंकि '(+1) 'एक लैम्ब्डा-अभिव्यक्ति है, इस प्रकार यह पहले से ही डब्ल्यूएचएनएफ में है और मूल्यांकन के लिए कुछ भी नहीं बचा है। हो सकता है कि आप 'amap ((' 'rpar का उपयोग कर) हो। (+ 1))' ', नहीं? – Rotsor

+4

क्यों 'रेपा' या 'वेक्टर' का उपयोग न करें, जिसमें पहले से ही समांतर रणनीतियां हैं, और सामान्य रूप से अधिक लचीली हैं? –

उत्तर

4

एक previous question के लिए, मैं वेक्टर पैकेज के लिए एक समानांतर मूल्यांकन रणनीति लिखा था। यह शुरू करने के लिए एक अच्छी जगह होना चाहिए। vector-strategies पैकेज में आप see the code on hackage कर सकते हैं।

मेरे पास पूर्ण उत्तर देने का समय नहीं है - शायद मैं इसे बाद में संपादित करूंगा। अतिरिक्त प्रश्नों और दिशाओं के साथ टिप्पणी करने के लिए स्वतंत्र महसूस करें।

+0

इसने मुझे रणनीतियों को लिखने के बारे में एक अच्छा विचार दिया है। जिथब के लिए एक लिंक भी है जो दिखाता है कि सादे सरणी पर 'parTraversable' का उपयोग कैसे करें। मेरे मामले में, यह उस व्यवहार को देना चाहिए जिसकी मुझे उम्मीद थी। – vis

2

दी गई सभी अच्छी सलाह के अलावा: parArr अब कोई कारण नहीं है कि इसे अधिक सामान्य parTraversable द्वारा प्रतिस्थापित किया गया है। बस कहें:

amap f myArr `using` parTraversable rdeepseq 

इससे आपको वह व्यवहार देना चाहिए जो आपने मांगा था।

+0

धन्यवाद पीटर, मुझे यह एहसास करने के लिए कि 'parTraversable' सिर्फ' parArr' करने की अपेक्षा करेगा। +1 – vis

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