work में Gibbs sampling
के साथ, मैं RVar
का बहुत अच्छा उपयोग कर रहा हूं, जो मेरे विचार में यादृच्छिक संख्या पीढ़ी के लिए एक आदर्श आदर्श इंटरफ़ेस प्रदान करता है। अफसोस की बात है, मैं नक्शे में monadic कार्यों का उपयोग करने में असमर्थता के कारण रेपा का उपयोग करने में असमर्थ रहा हूं।रेपा एरे पर समानांतर मानचित्र एम
RVar
एक इकाई जहां प्रभाव सुरक्षित रूप से parallelized किया जा सकता (कम से कम सिद्धांत रूप में कम से कम एक उदाहरण हो सकता है कि मुझे लगता है
, मैं के साथ बहुत परिचित नहीं हूँ RVar
की आंतरिक कार्यप्रणाली)। अर्थात्, मैं, निम्नलिखित की तरह कुछ लिखना चाहते हैं
drawClass :: Sample -> RVar Class
drawClass = ...
drawClasses :: Array U DIM1 Sample -> RVar (Array U DIM1 Class)
drawClasses samples = A.mapM drawClass samples
जहां A.mapM
कुछ ऐसा दिखाई देगा,
mapM :: ParallelMonad m => (a -> m b) -> Array r sh a -> m (Array r sh b)
जबकि स्पष्ट रूप से यह कैसे काम करेगा RVar
के कार्यान्वयन और उसके अंतर्निहित RandomSource
पर महत्वपूर्ण निर्भर करता है, सिद्धांत रूप में कोई यह सोचता है कि इसमें प्रत्येक थ्रेड के लिए एक नया यादृच्छिक बीज तैयार करना और सामान्य रूप से आगे बढ़ना शामिल होगा।
Intuitively, ऐसा लगता है कि यह एक ही विचार कुछ अन्य monads को सामान्य हो सकता है।
तो, मेरा सवाल यह है कि: क्या कोई मोनैड के ParallelMonad
वर्ग का निर्माण कर सकता है जिसके लिए प्रभाव सुरक्षित रूप से समांतर किया जा सकता है (संभवतः कम से कम RVar
) में निवास किया जा सकता है?
यह कैसा दिख सकता है? इस वर्ग में कौन से अन्य मठवासी रह सकते हैं? क्या दूसरों ने रिपै में काम करने की संभावना पर विचार किया है?
अंत में, यदि समानांतर monadic कार्यों की इस धारणा को सामान्यीकृत नहीं किया जा सकता, किसी को भी RVar
(जहां यह बहुत उपयोगी हो जाएगा) के विशिष्ट मामले में यह काम करने के लिए किसी भी अच्छा तरीका देखना है? समांतरता के लिए RVar
देना बहुत मुश्किल व्यापार-बंद है।
मुझे लगता है कि चिपकने वाला बिंदु "प्रत्येक थ्रेड के लिए एक नया यादृच्छिक बीज खींच रहा है" - यह कदम कैसे काम करना चाहिए, और सभी थ्रेड लौटने के बाद बीज को फिर से कैसे विलय किया जाना चाहिए? –
आरवीआर इंटरफ़ेस को निश्चित रूप से किसी दिए गए बीज के साथ एक नए जनरेटर को बढ़ाने के लिए कुछ अतिरिक्त जोड़ों की आवश्यकता होगी। माना जाता है कि यह स्पष्ट नहीं है कि इस काम के यांत्रिकी और यह काफी 'रैंडमसोर्स' विशिष्ट प्रतीत होता है। बीज बनाने में मेरा निष्पक्ष प्रयास कुछ सरल और संभवतः बहुत गलत करना होगा जैसे कि तत्वों का वेक्टर ('एमडब्ल्यूसी-यादृच्छिक' के मामले में) और पहले तत्व के लिए बीज बनाने के लिए प्रत्येक तत्व में 1 जोड़ें, दूसरे कार्यकर्ता के लिए 2 जोड़ें, आदि। अगर आपको क्रिप्टोग्राफिक-गुणवत्ता एन्ट्रॉपी की आवश्यकता होती है तो अपर्याप्त अपर्याप्त; उम्मीद है कि अगर आपको सिर्फ यादृच्छिक चलना चाहिए तो ठीक है। – bgamari
मैं 'fillChunkedIOP' का उपयोग करने के लिए जो कुछ पूछ रहा हूं उसके समान कुछ करने में सक्षम हूं। – kosmikus