मैं --physcpubind विकल्प के साथ numactl का उपयोग कर रहा था। मैनुअल का कहना है:numactl --physcpubind
--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...
मान लीजिए कि मैं 3 NUMA नोड्स, जहां उनमें से प्रत्येक के 4 कोर के साथ NUMA सिस्टम चला रहे हैं। NUMA नोड 0 में 0, 1, 2, 3 कोर संख्याओं के रूप में है। NUMA नोड 1 में 4,5,6,7 है, और NUMA नोड 2 में 8, 9, 10,11 है। मेरा प्रश्न चलो कहते हैं कि मैं इस कार्यक्रम को चलाने के रूप में निम्नानुसार जाने है:
export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program
यानी मैं 6 धागे के साथ अपने कार्यक्रम चलाएंगे और मैं उन्हें सीपीयू कोर 0,1,4,5,8 पर होने की विनती करता हूँ, 9। उदाहरण के लिए, यदि प्रोग्राम थ्रेड 0-5 के दौरान किसी बिंदु पर CPU कोर 0,1,4,5,8,9 (सेटअप 1) असाइन किया गया है। क्या यह संभव है कि प्रोग्राम निष्पादन थ्रेड 0 के दौरान किसी अन्य बिंदु पर उदाहरण के लिए सीपीयू कोर 9 पर चल रहा हो, और आगे? अर्थात। सीपीयू कोर के बीच थ्रेड माइग्रेशन होगा? या धागे विशिष्ट रूप से सीपीयू कोर (जैसे सेटअप 1 में) से बंधे हैं? धन्यवाद।
फिजप्यूबिंड [sched_setaffinity] (http://linux.die.net/man/2/sched_setaffinity) के लिए एक इंटरफेस होना चाहिए, इसलिए यह प्रक्रिया और सभी धागे के cpuset को संशोधित करता है। किसी भी थ्रेड को cpuset से किसी भी CPU पर चलाने की अनुमति है, cpuset से किसी भी cpu के बीच माइग्रेशन की अनुमति है। यदि आप सीपीयू को बांधने के थ्रेड चाहते हैं, तो प्रत्येक थ्रेड में शेड_सेटफिनिटी या pthread_setaffinity_np का उपयोग करें। या ओएमपी लाइब्रेरी के माध्यम से एफ़िनिटी सेट करें: http://stackoverflow.com/a/8325730/196561 उदा। 'निर्यात OMP_PROC_BIND = true' कमांड के साथ। – osgx
@osgx धन्यवाद। आपके पास इस सवाल का जवाब है? धन्यवाद। – tiki