Détermination du nombre de processeurs physiques et de cœurs avec des considérations sur l'hyper-threading
La détection du nombre de processeurs physiques et de cœurs est cruciale pour optimiser le multithread applications pour fonctionner efficacement. Pour déterminer avec précision ces chiffres, envisagez les dépendances hyper-threading potentiellement activées.
Processus étape par étape :
Distinguer le nombre de cœurs physiques :
Implémentation C :
Le programme C suivant illustre ces étapes :
<code class="c++">#include <iostream> #include <string> void cpuID(unsigned i, unsigned regs[4]); int main() { unsigned regs[4]; char vendor[12]; // Get vendor cpuID(0, regs); ((unsigned *)vendor)[0] = regs[1]; ((unsigned *)vendor)[1] = regs[3]; ((unsigned *)vendor)[2] = regs[2]; string cpuVendor = string(vendor, 12); // Get CPU features cpuID(1, regs); unsigned cpuFeatures = regs[3]; // Logical core count per CPU cpuID(1, regs); unsigned logical = (regs[1] >> 16) & 0xff; cout << " logical cpus: " << logical << endl; unsigned cores = logical; if (cpuVendor == "GenuineIntel") { // Get DCP cache info cpuID(4, regs); cores = ((regs[0] >> 26) & 0x3f) + 1; } else if (cpuVendor == "AuthenticAMD") { // Get NC: Number of CPU cores - 1 cpuID(0x80000008, regs); cores = ((unsigned)(regs[2] & 0xff)) + 1; } cout << " cpu cores: " << cores << endl; // Detect hyper-threads bool hyperThreads = cpuFeatures & (1 << 28) && cores < logical; cout << "hyper-threads: " << (hyperThreads ? "true" : "false") << endl; return 0; }</code>
En adhérant Grâce à ces étapes et en utilisant le programme C fourni, les développeurs peuvent déterminer avec précision le nombre de processeurs physiques et de cœurs, en tenant compte des nuances des configurations hyper-threading sur différentes plates-formes.
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!