"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > कैसे निर्धारित करें कि विंडोज़, मैक और लिनक्स पर हाइपर-थ्रेडिंग सक्षम है या नहीं?

कैसे निर्धारित करें कि विंडोज़, मैक और लिनक्स पर हाइपर-थ्रेडिंग सक्षम है या नहीं?

2024-11-23 को प्रकाशित
ब्राउज़ करें:858

How to Determine if Hyper-Threading is Enabled on Windows, Mac, and Linux?

सक्षम हाइपर-थ्रेडिंग के अस्तित्व का पता लगाना

बहु-थ्रेडेड अनुप्रयोगों में, प्रति भौतिक प्रोसेसर कोर एक थ्रेड का उपयोग इष्टतम प्रदर्शन सुनिश्चित करता है। सटीक थ्रेड गिनती निर्धारण के लिए, भौतिक और हाइपर-थ्रेडिंग कोर के बीच अंतर करना आवश्यक है। यहां विंडोज, मैक और लिनक्स पर हाइपर-थ्रेडिंग समर्थन और इसकी सक्रियण स्थिति का पता लगाने का तरीका बताया गया है:

सीपीयूआईडी निर्देश

सीपीयूआईडी निर्देश का उपयोग करके, हम प्रोसेसर की क्षमताओं और कॉन्फ़िगरेशन के बारे में जानकारी एकत्र कर सकते हैं। चरण-दर-चरण प्रक्रिया नीचे उल्लिखित है:

  1. विक्रेता का पता लगाना: सीपीयू विक्रेता (उदाहरण के लिए, इंटेल या एएमडी) की पहचान करने के लिए सीपीयूआईडी फ़ंक्शन 0 निष्पादित करें।
  2. हाइपर-थ्रेडिंग बिट चेक: सीपीयूआईडी फ़ंक्शन 1 निष्पादित करें और ईडीएक्स में बिट 28 चेक करें पंजीकरण करवाना। यह बिट हाइपर-थ्रेडिंग समर्थन को इंगित करता है।
  3. लॉजिकल कोर काउंट: सीपीयूआईडी फ़ंक्शन 1 में ईबीएक्स के बिट्स [23:16] से प्रति सीपीयू लॉजिकल कोर की संख्या प्राप्त करें। &&&]
  4. भौतिक कोर गिनती

    :

      Intel CPUs
    • : यदि विक्रेता 'जेनुइनइंटेल' है, तो बिट्स निकालकर भौतिक कोर प्लस वन की संख्या प्राप्त करने के लिए सीपीयूआईडी फ़ंक्शन 4 का उपयोग करें [31:26 ] EAX रजिस्टर का।
    • AMD CPUs
    • : यदि विक्रेता है 'ऑथेंटिकएएमडी', सीपीयूआईडी फ़ंक्शन 0x80000008 निष्पादित करता है और ईसीएक्स रजिस्टर के बिट्स [7:0] लेकर भौतिक कोर प्लस एक की संख्या प्राप्त करता है।
  5. Implementation

यहां एक सी प्रोग्राम है जो इसे लागू करता है विधि:

#include #शामिल शून्य सीपीयूआईडी (अहस्ताक्षरित i, अहस्ताक्षरित regs[4]); मुख्य प्रवेश बिंदु() { अहस्ताक्षरित regs[4]; // सीपीयूआईडी जानकारी प्राप्त करें सीपीयूआईडी(0x00, regs); सीपीयूआईडी(0x01, regs); //विक्रेता निर्धारित करें चार विक्रेता[12]; ((अहस्ताक्षरित *)विक्रेता)[0] = regs[1]; ((अहस्ताक्षरित *)विक्रेता)[1] = regs[3]; ((अहस्ताक्षरित *)विक्रेता)[2] = regs[2]; std::string cpuVendor = std::string(विक्रेता, 12); // चर अहस्ताक्षरित लॉजिकलकोर्स = (regs[1] >> 16) और 0xff; अहस्ताक्षरित कोर = तार्किक कोर; बूल हाइपरथ्रेड्स = गलत; // हाइपर-थ्रेडिंग का पता लगाएं अगर (सीपीयूवेंडर == "जेनुइनइंटेल") { सीपीयूआईडी(0x04, regs); कोर = ((regs[0] >> 26) और 0x3f) 1; } अन्यथा यदि (cpuVendor == "AuthenticAMD") { सीपीयूआईडी(0x80000008, regs); कोर = ((अहस्ताक्षरित)(regs[2] और 0xff)) 1; } यदि (regs[3] और (1 #include #include void cpuID(unsigned i, unsigned regs[4]); int main() { unsigned regs[4]; // Get CPUID information cpuID(0x00, regs); cpuID(0x01, regs); // Determine vendor char vendor[12]; ((unsigned *)vendor)[0] = regs[1]; ((unsigned *)vendor)[1] = regs[3]; ((unsigned *)vendor)[2] = regs[2]; std::string cpuVendor = std::string(vendor, 12); // Variables unsigned logicalCores = (regs[1] >> 16) & 0xff; unsigned cores = logicalCores; bool hyperThreads = false; // Detect hyper-threading if (cpuVendor == "GenuineIntel") { cpuID(0x04, regs); cores = ((regs[0] >> 26) & 0x3f) 1; } else if (cpuVendor == "AuthenticAMD") { cpuID(0x80000008, regs); cores = ((unsigned)(regs[2] & 0xff)) 1; } if (regs[3] & (1

इंटेल कोर 2 डुओ ई8400 (कोई हाइपर-थ्रेडिंग नहीं):

लॉजिकल कोर: 2 कोर: 2 हाइपर-थ्रेडिंग: गलत

Logical cores: 2
Cores: 2
Hyper-threading: false

लॉजिकल कोर: 8 कोर: 4 हाइपर-थ्रेड्स: सत्य

 Logical cores: 8
    Cores: 4
hyper-threads: true

तार्किक कोर: 12 कोर: 6 हाइपर-थ्रेड्स: सत्य

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3