वर्तमान OpenMP मानक चर OMP_PROC_BIND
एक बूलियन वातावरण है कि OpenMP धागे के बंधन नियंत्रण के परिभाषित करता है। यदि true
पर सेट किया गया है, उदा।
shell$ OMP_PROC_BIND=true OMP_NUM_THREADS=12 ./app.x
तो ओपनएमपी निष्पादन वातावरण प्रोसेसर के बीच धागे को स्थानांतरित नहीं करना चाहिए। दुर्भाग्यवश कुछ और कहा नहीं जाता है कि उन धागे को कैसे बंधना चाहिए और ओपनएमपी भाषा समिति में एक विशेष कार्यकारी समूह अभी संबोधित कर रहा है। ओपनएमपी 4.0 नए एनविरिएशन वैरिएबल और क्लॉज के साथ आएगा जो किसी को थ्रेड वितरित करने के लिए निर्दिष्ट करने की अनुमति देगा। बेशक, कई ओपनएमपी कार्यान्वयन अपने non-standard methods to control binding प्रदान करते हैं।
अभी भी अधिकांश ओपनएमपी रनटाइम NUMA से अवगत नहीं हैं। वे खुशी से किसी भी उपलब्ध सीपीयू को थ्रेड भेज देंगे और आपको यह सुनिश्चित करना होगा कि प्रत्येक थ्रेड केवल उस डेटा तक पहुंच सके जो उससे संबंधित है। इस दिशा में कुछ सामान्य संकेत दिए हैं:
- समानांतर
for
(C/C++)/DO
(फोरट्रान) लूप के लिए dynamic
निर्धारण का उपयोग न करें।
- उसी थ्रेड में डेटा को प्रारंभ करने का प्रयास करें जो बाद में इसका उपयोग करेगा। यदि आप दो सीपारे समानांतर
for
लूप को एक ही टीम के आकार और उसी संख्या के साथ लोड करते हैं, static
दोनों लूपों के शेड्यूलिंग चंक 0 को थ्रेड 0, खंड 1 - थ्रेड 1 द्वारा निष्पादित किया जाएगा, और इसी तरह।
- यदि ओपनएमपी कार्यों का उपयोग करते हैं, तो कार्य निकाय में डेटा को शुरू करने का प्रयास करें, क्योंकि अधिकांश ओपनएमपी रनटाइम कार्य चोरी को कार्यान्वित करते हैं - निष्क्रिय धागे अन्य धागे की कार्य कतारों से कार्यों को चुरा सकते हैं।
- NUMA- जागरूक स्मृति आवंटक का उपयोग करें।
मेरा कुछ सहयोगियों को अच्छी तरह से अलग OpenMP runtimes के NUMA behavious का मूल्यांकन किया है और विशेष रूप से इंटेल के कार्यान्वयन के NUMA जागरूकता में देखा है, लेकिन लेख अभी तक प्रकाशित नहीं कर रहे हैं तो मैं एक लिंक के साथ आप प्रदान नहीं कर सकते।
एक शोध परियोजना है, जिसे ForestGOMP कहा जाता है, जिसका उद्देश्य libgomp
के लिए NUMA- जागरूक ड्रॉप-इन प्रतिस्थापन प्रदान करना है। हो सकता है कि आपको इसे देखना चाहिए।
स्रोत
2012-08-15 19:09:12
कृपया, परिभाषित करें कि "NUMA मशीन पर चलने पर लाभ" में आपका किस प्रकार का लाभ है। ओपनएमपी वर्तमान में NUMA से अवगत नहीं है, लेकिन ओपनएमपी 4.0 संभावित रूप से बेहतर थ्रेड बाध्यकारी के प्रावधान लाएगा। –
मैंने सवाल अपडेट किया है, मुख्य रूप से आपने जो बताया है। 'टास्कसेट' के बारे में क्या? क्या यह थ्रेड को बांधने में मदद करेगा ताकि प्रति थ्रेड निजी डेटा स्थानीय रखा जा सके? – labotsirc