2011-11-30 13 views

उत्तर

13

हाँ, नामित कॉल धागा आत्मीयता स्थापित करने के लिए काम करेंगे। एकमात्र समस्या थ्रेड नंबर को ठीक करना और सही धागे में सही संबंध स्थापित करना है (आप for लूप ज्ञात संख्या के लिए लूप के स्थिर शेड्यूलिंग का उपयोग करने का प्रयास कर सकते हैं)।

जैसा कि मुझे पता है, लगभग हर openmp पर्यावरण के माध्यम से संबंध स्थापित करने की अनुमति देता है। पर्यावरण चर का नाम भिन्न होता है (यह कुछ समय पहले स्टैंडराइज्ड नहीं था)। मैं ओपनएमपी कार्यान्वयन खोजने के लिए http://www.spec.org/omp2001/results/omp2001.html पृष्ठ का उपयोग करता हूं और विशिष्ट पर्यावरण परिवर्तनीय नाम की खोज करेगा। एफ़िनिटी specomP परिणामों के आधा में सेट है। परिणाम में कुछ अतिरिक्त ओपनएमपी प्रदर्शन-ट्यूनिंग सेटिंग्स भी हैं।

उदा। For intel compiler चर रहा है

export KMP_AFFINITY=compact,0 

For sun compiler:

export SUNW_MP_PROCBIND=TRUE 

For gcc (pre-openmp 3.1)

export GOMP_CPU_AFFINITY=0-63 

है, जहां 63 अधिकतम सीपीयू संख्या (जब 0 से गिना)

और newer OpenMP Standard, version 3.1 को परिभाषित करता है वातावरण चर OMP_PROC_BIND (सेक्टि देखें 4.4 पर) जो ओपनएमपी में एफ़िनिटी सेट करने का मानकीकृत तरीका है। उपयोग है:

export OMP_PROC_BIND=true 
+0

धन्यवाद! भाषा-स्तर पर कुछ भी नहीं, जैसे 'pthread_attr_setaffinity_np'? –

+0

नहीं, openmp मानक में कोई थ्रेड बाध्यकारी प्रगति या कार्य नहीं है। एकमात्र तरीका (और अनुशंसित एक) पर्यावरण चर, कंपाइलर-विशिष्ट या openmp3.1 के माध्यम से धागे बांधना है। मुख्य सेटिंग शुरू करने से पहले, यह सेटिंग जल्दी ही की जानी चाहिए। – osgx

+0

तो, कड़ाई से बोलते हुए, आपका उत्तर "नहीं" से शुरू होना चाहिए :) –

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