Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menentukan jika Hyper-Threading Didayakan pada Windows, Mac dan Linux?
Dalam aplikasi berbilang benang, menggunakan satu utas bagi setiap teras pemproses fizikal memastikan prestasi optimum. Untuk penentuan kiraan benang yang tepat, adalah penting untuk membezakan antara teras fizikal dan hyper-benang. Begini cara untuk mengesan sokongan hyper-threading dan status pengaktifannya pada Windows, Mac dan Linux:
Menggunakan arahan CPUID, kami boleh mengumpulkan maklumat tentang keupayaan dan konfigurasi pemproses. Proses langkah demi langkah digariskan di bawah:
Kiraan Teras Fizikal:
Berikut ialah program C yang melaksanakan kaedah ini:
<code class="cpp">#include <iostream> #include <string> 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 << 28) && cores < logicalCores) { hyperThreads = true; } // Print results std::cout << "Logical cores: " << logicalCores << std::endl; std::cout << "Cores: " << cores << std::endl; std::cout << "Hyper-threading: " << (hyperThreads ? "true" : "false") << std::endl; return 0; }</code>
Intel Core 2 Duo E8400 (tiada hyper-threading):
Logical cores: 2 Cores: 2 Hyper-threading: false
Intel Core i7-7700K (dengan hyper-threading):
Logical cores: 8 Cores: 4 hyper-threads: true
AMD Ryzen 5 2600X (dengan SMT):
Logical cores: 12 Cores: 6 hyper-threads: true
Atas ialah kandungan terperinci Bagaimana untuk Menentukan jika Hyper-Threading Didayakan pada Windows, Mac dan Linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!