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