8 कोर के साथ एक मशीन को मानना। हास्केल में, आप threaded
विकल्प का उपयोग करके संकलित कर सकते हैं, फिर रनटाइम के दौरान उपयोग किए जाने वाले कोर की संख्या निर्दिष्ट करने के लिए +RTS -Nx
का उपयोग करें। जैसेस्पीडअप प्राप्त करने के लिए एफ # माप कैसे लें
$ myprg args // sequential run
$ myprg args +RTS -N1 // parallel run on 1..8 cores
$ myprg args +RTS -N2
$ myprg args +RTS -N4
$ myprg args +RTS -N8
इस से, आप कोर, जिसे फिर आप speedups प्राप्त करने के लिए इस्तेमाल करते हैं और एक ग्राफ प्लॉट कर सकते हैं की बढ़ती संख्या का उपयोग कर runtimes मिलता है।
आप एफ # में यह कैसे करेंगे, मान लें कि मेरे पास समानांतर प्रोग्राम है। कोड में समानांतर मानचित्र का उपयोग कर?
संपादित करें: मैंने पाया ParallelOptions जैसे देखते हैं MaxDegreeOfParallelism
जो हो सकता है जो मुझे चाहिए लेकिन इसके सटीक व्यवहार के बारे में निश्चित नहीं है, और मुझे इसे प्रोग्रामेटिक रूप से उपयोग करना होगा, जब तक यह अपेक्षित व्यवहार करता है यानी MaxDegreeOfParallelism
= कोर प्रोग्राम के num का उपयोग करना चाहिए, और समांतर 'कार्य नहीं करना चाहिए 'या धागे।
संपादित करें: ProcessorAffinity
वास्तव में कोर का उपयोग करने की संख्या को सीमित लेकिन ऐसा लगता है कि यह ठीक से मोनो में लागू नहीं है। मैंने विंडोज़ पर जांच की और ऐसा लगता है कि यह काम करता है। हालांकि यह वास्तव में उपयोग करने के लिए एक अच्छा विचार नहीं है। रनटाइम सिस्टम बेहतर निर्णय लेने में सक्षम होना चाहिए कि कार्य कैसे प्रबंधित करें और शेड्यूल करें। इसके अलावा, MaxDegreeOfParallelism
"समांतरता स्तर" के बारे में है जो मूल रूप से उत्पन्न कार्यों की संख्या निर्धारित करता है, इस प्रकार ग्रैनुलरिटी को बदलने के लिए उपयोग किया जा सकता है।
यदि आप विंडोज का उपयोग कर रहे हैं, तो आप केवल एक कार्य प्रबंधक में सीपीयू की संख्या निर्धारित कर सकते हैं: http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an -प्लिकेशंस-इन-विंडोज/ –
मैं लिनक्स/मोनो का उपयोग कर रहा हूं। क्या लिनक्स के तहत एक ही काम करने का कोई तरीका है? – vis
एफ # एक मूल .NET असेंबली बनाता है। एक असेंबली रनटाइम (सीएलआर) के लिए निर्दिष्ट नियमों का पालन करती है जो डिफ़ॉल्ट रूप से सभी सीपीयू कोर पर संबंध रखते हैं। आप 'System.Diagnostics.Process.GetCurrentProcess() प्रोसेसरएफ़िनिटी 'सेट करके कोर के _fewer_ संख्या के लिए सीएलआर को सीमित कर सकते हैं। – bytebuster