2012-04-11 16 views
5

में किसी फ़ंक्शन के लिए वर्तमान एचईसी की पहचान करना मैं रणनीतियों का उपयोग करके समानांतर हास्केल प्रोग्राम लिख रहा हूं। यह ऐसा नहीं कर रहा है जो इसे करना है, और मैं यह जांचना चाहता हूं कि कौन सा हास्केल निष्पादन संदर्भ (एचईसी) एक फ़ंक्शन निष्पादित किया गया है।हास्केल

क्या कोई डीईईसी कॉल या ऐसा कुछ है जिसे मैं अपने डीबग आउटपुट में उपयोग कर सकता हूं?

उत्तर

4

आप यह पता लगा सकते हैं कि Control.Concurrent से threadCapability पर कॉल करके आप कौन सी क्षमता (यानी सीपीयू कोर) एक हास्केल थ्रेड चल रहा है।

आप +RTS -N के साथ अपने कार्यक्रम चला रहे हैं, वहाँ एक ओएस स्तर के धागे (एचईसी) प्रति कोर पैदा की है, इसलिए क्षमता threadCapability द्वारा लौटाए गए नंबर आपको बता देंगे जो ओएस धागे अपने forkIO हरे धागे पर चल रहा है। यदि, हालांकि, आप स्पष्ट रूप से +RTS -Nn के साथ ओएस थ्रेड्स की संख्या निर्दिष्ट कर रहे हैं, जहां n आपके सिस्टम पर कोर की संख्या के अलावा कुछ पूर्णांक है, तो यह शायद आपके लिए कम उपयोगी होगा।

आपको समानांतर प्रोग्रामों के निष्पादन को डीबग करने और विज़ुअलाइज़ करने के लिए उपयोगी होने के लिए ThreadScope भी मिल सकता है।

+0

यह वही है जो मैं चाहता था। धन्यवाद! – Jonatan

+1

मुझे एक और बात का उल्लेख करना चाहिए था: ध्यान रखें कि ओएस अलग-अलग कोरों पर धागे को फिर से निर्धारित करने के लिए स्वतंत्र है, इसलिए उसी हस्केल थ्रेड में दो बार बुलाए गए थ्रेड कैपेबिलिटी के पास अलग-अलग मूल्यों को वापस करने का एक छोटा सा मौका है, और अधिक समय होने की संभावना है कॉल के बीच elapses। यदि आप 'फोर्कियो' के बजाय 'फोर्कऑन' के साथ धागे को बढ़ाकर किसी थ्रेड को किसी विशेष कोर पर लॉक करते हैं, तो आप डिबगिंग उद्देश्यों के लिए इससे बच सकते हैं। – bitbucket