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 :
#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 Exemples de sortie :
Intel Core 2 Duo E8400 (pas d'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
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3