2011-12-19 48 views
5

पर CPUID मैं अपने शौक ओएस के लिए सीपीयू पहचान और सामान्य पर्यावरण पहचान कोड पर काम कर रहा हूं। क्या ऐसा कोई मामला है जहां सीपीयूआईडी को कई बार बुलाया जाना चाहिए? ऐसा है कि सिस्टम में एकाधिक कोर हैं, क्या ओएस को प्रत्येक कोर पर CPUID को कॉल करने की आवश्यकता है? NUMA के लिए वही।एकाधिक कोर/NUMA

AMD और Intel दोनों CPUID मैनुअल इस पर अस्पष्ट हैं। ओएसडीवी विकी पर एक लेख है जिसमें सीपीयूआईडी को Detecting CPU Topology कहा जाता है, लेकिन मेरे पढ़ने के लिए यह स्पष्ट नहीं था कि सीपीयूआईडी को कितनी बार कॉल किया जाना चाहिए।

+0

मुझे लगता है कि एक ऐसी स्थिति जहां सीपीयूआईडी असामान्य रूप से कार्य कर सकती है वह एएमडी फ्यूजन है, जिसमें एक ही चिप पर एक सीपीयू और जीपीयू दोनों शामिल हैं। आपको अधिक जानकारी के लिए प्रलेखन पर एक नज़र रखना होगा। इसके अलावा, मुझे नहीं लगता कि कोई भी आंतरिक सीपीयू कोर एक और कोर की तुलना में एक अलग CPUID क्यों दिखाएगा। – Polynomial

+0

दिए गए उत्तर के अलावा, प्रदर्शन माप के लिए rdtsc निर्देश का उपयोग करते समय CPUID को कई बार कॉल करने का एक अन्य कारण है। आप आमतौर पर सीपीयूआईडी का उपयोग करते हैं क्योंकि सीपीयूइड एक 'धारावाहिक' निर्देश है और पाइपलाइनिंग को रोकता है, लेकिन सीपीयूआईडी में पहले कुछ बार इसे निष्पादित करने के लिए अधिक समय लेने की गंदी आदत है (जिसे rdtsc पर पुराने इंटेल मैनुअल के अनुसार), तो यह सामान्य है स्टार्टअप पर इसे कुछ बार कॉल करें, यह सुनिश्चित करने के लिए कि यह बढ़ गया है, फिर अपने सभी rdtsc कॉल से पहले इसका इस्तेमाल करें। –

उत्तर

3

चूंकि यह लगभग एक सप्ताह रहा है और कोई भी इसका उत्तर देने में सक्षम नहीं है (शायद छुट्टियों के कारण), मैं वैसे भी इसका उत्तर देने का प्रयास करूंगा।

मुझे लगता है कि उत्तर हाँ है। आपको प्रत्येक कोर पर CPUID पर कॉल करने की आवश्यकता हो सकती है। इसका एक कारण यह है कि आज सभी (यहां तक ​​कि x86) सिस्टम समरूप नहीं हैं।

उदाहरण के लिए, मैंने एक ओवरक्लॉकिंग फ़ोरम (मुझे लिंक नहीं मिल रहा है) पर पढ़ा है कि दो डुएल-सॉकेट सर्वर बोर्डों पर दो विभिन्न प्रोसेसर मॉडल मिश्रण करना संभव है। व्यक्ति के पास दो अलग-अलग स्पीड प्रोसेसर के साथ दोहरी-सॉकेट 1366 प्रणाली थी। (और विभिन्न मॉडल # एस)

इसलिए इस मामले में, CPUID पर कॉल करना इस बात पर निर्भर करेगा कि थ्रेड किस प्रोसेसर पर था - इसलिए आपको प्रत्येक प्रोसेसर को सभी जानकारी प्राप्त करने के बाद इसे कॉल करने की आवश्यकता होगी।

मेरे सर्वर-मदरबोर्ड में से किसी एक के मैनुअल में, यह भी बताता है कि आपको विभिन्न मॉडलों के प्रोसेसर (कुछ प्रतिबंधों के साथ) मिश्रण करने की अनुमति है। और निश्चित रूप से, एक ही प्रोसेसर मॉडल के दो अलग steppings मिश्रण करना संभव है।


अकेला यही कारण है (विषम टोपोलॉजी), पहले से ही प्रत्येक कोर पर CPUID कॉल करने की आवश्यकता करने के लिए कारण है।

+0

लंबे समय से जवाब देने के लिए खेद है, लेकिन हाँ मुझे विश्वास है कि यह सही है। मरने पर प्रत्येक सीपीयू को सीपीयूआईडी जानकारी निकालने और संग्रहीत करने की आवश्यकता होती है। – nixeagle

+0

तो क्या होता है यदि आप प्रत्येक सीपीयू के प्रत्येक कोर पर सीपीयूआईडी को विभिन्न निर्देश सेट के साथ सफलतापूर्वक कॉल करते हैं; यानी एक सीपीयू में एसएसएसई 3, एक और एसएसएसई 4.2 है। फिर आप एसएसई 4.2 निर्देशों का उपयोग करने वाले कोड का एक टुकड़ा दर्ज करने का निर्णय लेने के लिए इस जानकारी का उपयोग करते हैं। इस कोड को निष्पादित करने के बीच में ओएस आपके थ्रेड को स्वैप कर देता है, और इसके बाद यह निर्धारित होता है कि यह केवल सीएसईई 3 तक समर्थित सीपीयू पर है। फिर कोड एसएसई 4.1 निर्देश निष्पादित करता है। तो यह एकाधिक कोर पर CPUID को कॉल करने के लिए पर्याप्त नहीं है, ऐसा करने के बाद किसी को थ्रेड एफ़िनिटी भी सेट करनी होगी। क्या ये सही है? – Apriori

+0

@ एप्रीरी जो बेहद असंभव लगता है। मुझे एक इंटेल या एएमडी x86 कॉन्फ़िगरेशन से अवगत है जो आपको अलग-अलग पीढ़ियों से अलग-अलग निर्देशों के साथ अलग-अलग CPUs इंस्टॉल करने देगा। लेकिन अगर आप अत्यधिक सावधान रहना चाहते थे, हाँ, आप ऐसा कर सकते हैं। मुझे लगता है कि हालांकि यह अधिक है। – Mysticial