Dans les applications multithread, l'utilisation d'un thread par cœur de processeur physique garantit des performances optimales. Pour une détermination précise du nombre de threads, il est essentiel de faire la distinction entre les cœurs physiques et hyper-threading. Voici comment détecter la prise en charge de l'hyper-threading et son état d'activation sous Windows, Mac et Linux :
En utilisant l'instruction CPUID, nous pouvons recueillir des informations sur les capacités et la configuration du processeur. Un processus étape par étape est décrit ci-dessous :
Nombre de cœurs physiques :
Voici un programme C qui implémente cette méthode :
<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 (sans hyper-threading) :
Logical cores: 2 Cores: 2 Hyper-threading: false
Intel Core i7-7700K (avec hyper-threading) :
Logical cores: 8 Cores: 4 hyper-threads: true
AMD Ryzen 5 2600X (avec SMT) :
Logical cores: 12 Cores: 6 hyper-threads: true
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!