2013-04-12 9 views
11

मैं एसटी-मोनाड में समानांतर में दो गणनाओं को चलाने का एक तरीका ढूंढ रहा हूं। मैं एक बड़ा सरणी बना रहा हूं (STUArray का उपयोग करके) और मैं इसे समानांतर में करना चाहता हूं।हास्केल में एक समानांतर मोनड मानचित्र? पैरामैम की तरह कुछ?

अब तक मैंने पाया this और this क्यू & एक यहाँ stackoverflow पर, फिर भी पहले मेरे मामले में लागू नहीं होता है, क्योंकि यह केवल शुद्ध कोड और आईओ इकाई के साथ दूसरे सौदों के साथ संबंधित है - लेकिन मैं में हूँ एक राज्य थ्रेड।

मुझे monad-parallel पैकेज भी मिला है, लेकिन इसके लिए मुझे एसटी के लिए 'मोनाडपेरल' का उदाहरण होना आवश्यक है। इसके अलावा monad-par पैकेज केवल शुद्ध गणना या आईओ monad का समर्थन करता है।

क्या एसटी के अंदर समानांतर monadic गणना करने का कोई तरीका है?

+1

समानांतर ध्वनियों में एक बड़ी सरणी बनाना जैसे एसटी के बजाय शुद्ध कोड में सबसे अच्छा किया गया। मुझे नहीं लगता कि आप प्रत्येक सेल में क्या रखना चाहते हैं और आप एसटी का उपयोग क्यों करना चाहते हैं, इसके बारे में थोड़ी अधिक जानकारी दे सकते हैं? उदाहरण के लिए, यदि आप प्रत्येक सेल के लिए एसटी मोनैड में अलग-अलग कार्रवाइयां चला रहे हैं तो यह वास्तव में आसानी से समानांतर नहीं बनाया जा सकता है (आईओ के विपरीत) एसटी वास्तव में धागे के बीच संचार के लिए प्राइमेटिव प्रदान नहीं करता है। – DarkOtter

उत्तर

7

सबसे पहले, आपके प्रश्न से केवल दो शब्द: समानांतर और सरणी - मुझे आपको repa पर एक नज़र डालने की सलाह देनी चाहिए। इसके अलावा आपको Data Parallel Haskell की जांच करनी चाहिए, क्योंकि यह हास्केल की सड़क पर एक बड़ा विशाल मील का पत्थर होने का वादा करता है और इस परियोजना के साथ some great people involved हैं।

अपने विशिष्ट प्रश्न के संबंध में, वहाँ वास्तव में क्या करने के लिए आप के लिए क्या पूछना सक्षम पुस्तकालय हैं सिर्फ एक IO इकाई के साथ, पहले से ही monad-parallel और async with mapConcurrently नाम दिया है। क्या आपने IO में भागने के लिए stToIO का उपयोग करने पर विचार किया है?

वहाँ भी है एक lifted-async पुस्तकालय, जो MonadBaseControl, जो ST का एक उदाहरण है के साथ काम करने मानक संस्करण फैलता है, तो आप शायद कम से कम mapConcurrently के अपने संस्करण का उपयोग कर सकते हैं या एक प्रेरणा के रूप में इसका इस्तेमाल अपने खुद के लागू करने के लिए।

3

मुझे यकीन नहीं है कि क्या आप एक एसटी मोनैड को सुरक्षित रूप से समानांतर कर सकते हैं या यदि यह भी समझ में आता है, आमतौर पर, राज्य मोनैड में गणना राज्य पर निर्भर करती है, जो पिछले गणनाओं का परिणाम है।

हालांकि आप क्या कर सकते हैं, सूची से सरणी बनाना होगा, और सूची निर्माण आसानी से समानांतर बना दिया जाएगा। parMap जैसे parallel पैकेज से कुछ।

हमें सरणी डेटा बनाने के बारे में कुछ और विवरण देने से आपको बेहतर उत्तर देने में मदद मिल सकती है।

+0

आप निश्चित रूप से इसे समानांतर बना सकते हैं, आप केवल प्रोग्रामर पर भरोसा करते हैं ताकि गैर-निर्धारणवाद स्वयं को संभाला जा सके –

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