2012-06-19 19 views
33

मैं डेटा समांतर हास्केल में बहुत से शोध कर रहा हूं, और दो अलग समानांतर सरणी प्रकारों को मिला। [::] प्रकार शोध पत्रों में और अधिक दिखता प्रतीत होता है और यह आदर्श प्रकार लगता है, लेकिन PArray हर जगह में फंस गया प्रतीत होता है। इस विषय पर विकी पेज यह स्पष्ट करता है कि प्रकार [::] के सरणी को अनवरोधित कोड में पास नहीं किया जा सकता है। क्यूं कर? यह मध्यवर्ती PArray प्रकार क्यों है? यह मेरे लिए पूरी तरह से अनिवार्य लगता है। विकी इसे "फ्लैट सरणी" कहते हैं, लेकिन वेक्टरराइजेशन का पूरा बिंदु समांतर सरणी फ्लैट बनाना है।डेटा समांतर हास्केल में पैरे और [::] के बीच क्या अंतर है?

अपडेट: अधिक कागजात और दस्तावेज और स्रोत कोड पढ़ने के बाद मैं और भी उलझन में हूं। [::] या उसके पर्याय PArrGHC.PArr एक फ्लैट सरणी के रूप में में लागू करने की है, जबकि PArray, मध्यवर्ती प्रकार है कि कई स्थानों में कहा जाता है "फ्लैट", Data.Array.Parallel.PArray.Base में लागू और अन्य एक डेटा परिवार के रूप में वहाँ से आयात मॉड्यूल है, सपाट का उपयोग कर लगता है मैंने पढ़े गए कई कागजात में वर्णित परिवर्तन। फ्लैट सरणी फ्लैट क्यों नहीं हैं और घोंसले वाले फ्लैट फ्लैट क्यों हैं?

अद्यतन 2: अधिक शोध के बाद, मैंने पाया है कि विसर्जन पूर्ण गड़बड़ है। लगभग एक वर्ष में विकी पेज hasn't had any content updates, हैकेज दस्तावेज के विपरीत है (Data.Array.Parallel.Prelude देखें, जहां यह स्पष्ट रूप से विशेष प्रस्ताव आयात नहीं करता है), और यह आमतौर पर पुराना है। GHC Trac page भी पुराना है, उदाहरण के लिए, डीपीएच पैकेजों के लिए एक गाइड जो संकुल का उल्लेख करता है, कम से कम जहां तक ​​हैकेज का संबंध है (मैंने नहीं किया है, और अन्य जगहों पर कहीं भी नहीं देखना है), अस्तित्व में नहीं है, और डीएफ-उठाए गए vseg जैसे संकुल का उल्लेख नहीं है।

एक बेहतर टिप्पणी पर, मेरा मानना ​​है कि मैं अब पहले अद्यतन का जवाब समझते हैं, GHC.PArr में टिप्पणी के इस भाग द्वारा की ओर संकेत किया:

-- BIG UGLY HACK: The desugarer special cases this module. Despite the uses of '-XParallelArrays', 
--    the desugarer does not load 'Data.Array.Parallel' into its global state. (Hence, 
--    the present module may not use any other piece of '-XParallelArray' syntax.) 
-- 
--    This will be cleaned up when we change the internal represention of '[::]' to not 
--    rely on a wired-in type constructor. 

यह मेरा अनुमान है कि, जब vectorization सक्षम किया गया है है, वह मॉड्यूल स्वचालित रूप से किसी दूसरे प्रतिनिधित्व के साथ प्रतिस्थापित किया जाता है जो फ़्लैटनिंग रूपांतरण का उपयोग करता है। यह

type [::] = PArray 

, मेरी मूल समस्या को हल करने जैसा कुछ भी हो सकता है। हालांकि, न केवल बाद का बिंदु बहुत अधिक समझ में आता है (सदिशकरण बंद होने पर [::] को एक फ्लैट सरणी प्रकार पर क्यों सीमित करता है?), लेकिन मुझे उपर्युक्त टिप्पणी के अलावा सिद्धांत का समर्थन करने के लिए कोई सबूत नहीं मिला है। ऐसा लगता है कि जीएचसी स्रोत को देखने के लिए कुछ भी सीखने का एकमात्र विश्वसनीय तरीका है, जिसने अपना आकार और जटिलता दी है, ऐसा कुछ है जो मैं करने के लिए उत्सुक हूं, भले ही मुझे यकीन था कि मैं सफल होगा।

उत्तर

1
+2

यह आपका जवाब – Simon

+0

में लिंक का दिलचस्प हिस्सा शामिल करने के लिए बेहतर है आप कह रहे हैं कि PArray "आलसी सरणियों" से मेल खाती है और कहा कि [::] मेल खाती है "सख्त सरणी" के लिए? – gereeter

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

  • कोई संबंधित समस्या नहीं^_^