2010-01-26 22 views
10

अगर मैं एक मल्टी-प्रोसेसर बोर्ड है कि cache-coherentnon-uniform memory access (NUMA), यानी अलग "northbridges" प्रत्येक प्रोसेसर के लिए अलग से रैम के साथ, किसी भी संकलक पता है स्वचालित रूप से इस तरह के स्थानीय सूत्र पर काम प्रक्रियाओं ज्यादातर पुन: प्राप्त करने कर रहे हैं कि विभिन्न स्मृति सिस्टम में डेटा का प्रसार करने के लिए कैसे है प्रोसेसर से जुड़े राम से उनका डेटा थ्रेड चल रहा है?क्या जीसीसी, आईसीसी, या माइक्रोसॉफ्ट के सी/सी ++ कंपाइलर समर्थन या NUMA के बारे में कुछ भी पता है?

मेरे पास एक सेटअप है जहां प्रोसेसर 0 से 1 जीबी जुड़ा हुआ है, 1 जीबी प्रोसेसर 1, एटी सी से जुड़ा हुआ है। 4 प्रोसेसर तक। coherent memory space में पहली प्रोसेसर पर रैम के लिए भौतिक स्मृति 0 से 1 जीबी -1 है। दूसरे प्रोसेसर के लिए यह 1 जीबी से 2 जीबी -1 है, और इसी तरह।

क्या कोई कंपाइलर, या शायद malloc विशेष रूप से, उस कोर से जुड़े भौतिक RAM के लिए एक विशिष्ट कोर पर एक प्रक्रिया द्वारा आवंटित नई मेमोरी को जोड़ देगा?

+0

ब्याज से, बोर्ड निर्माता कौन है? –

+0

मैंने इस तरह का सवाल उठाया, लेकिन मेरी मूल समस्या को 1 मरने पर कई कोर और विभिन्न मेमोरी क्षेत्रों के लिए चिप के विभिन्न हिस्सों में कोर के लिए मेमोरी एक्सेस करने की लागत है। –

उत्तर

7

लिनक्स कर्नेल NUMA बारे में जानता है और वर्तमान CPU करने के लिए स्थानीय स्मृति से अपनी प्रक्रिया पृष्ठों देने की कोशिश करेंगे (स्रोत:। U. Drepper, "What Every Programmer Should Know About Memory")

+5

.. और वास्तव में यह * कर्नेल में * करने की ज़रूरत है, क्योंकि सामान्य उपयोगकर्तास्थान प्रक्रियाओं में यह नियंत्रित नहीं होता है कि उनके रैखिक पते भौतिक पते पर कैसे मानचित्र करते हैं, क्योंकि उनके पास उनके पृष्ठ सारणी का नियंत्रण नहीं है। – caf

4

एमएस प्लेटफ़ॉर्म के लिए, कंपाइलर को NUMA से अवगत नहीं है। हालांकि, सिस्टम NUMA जागरूक है और उसी नोड में स्मृति आवंटित करने का प्रयास करेगा।

कुछ और विवरणों के लिए http://code.msdn.microsoft.com/64plusLP देखें कि विंडोज के हाल के संस्करण NUMA को कैसे संभालते हैं।

5

NUMA- परिचित स्मृति आवंटन संकलन समय पर नहीं किया जाता है। पोर्टेबिलिटी के लिए इस तरह की धारणा बनाना बुरा होगा।

लिनक्स पर, यह एक कर्नेल फ़ंक्शन है, हालांकि आप numactl या set_mempolicy या libnuma के साथ रनटाइम पर इसे नियंत्रित कर सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^