Em aplicativos multithread, a utilização de um thread por núcleo do processador físico garante desempenho ideal. Para uma determinação precisa da contagem de threads, é essencial distinguir entre núcleos físicos e hyper-threading. Veja como detectar o suporte a hyper-threading e seu status de ativação no Windows, Mac e Linux:
Utilizando a instrução CPUID, podemos coletar informações sobre os recursos e configuração do processador. Um processo passo a passo é descrito abaixo:
Contagem de núcleos físicos:
Aqui está um programa C que implementa este método:
#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 Exemplos de saída:
Intel Core 2 Duo E8400 (sem hyper-threading):
Logical cores: 2
Cores: 2
Hyper-threading: false
Intel Core i7-7700K (com hyper-threading):
Logical cores: 8
Cores: 4
hyper-threads: true
AMD Ryzen 5 2600X (com SMT):
Logical cores: 12
Cores: 6
hyper-threads: true
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3