В многопоточных приложениях использование одного потока на каждое физическое ядро процессора обеспечивает оптимальную производительность. Для точного определения количества потоков важно различать физические ядра и ядра с гиперпоточностью. Вот как определить поддержку Hyper-Threading и статус ее активации в Windows, Mac и Linux:
Используя инструкцию CPUID, мы можем собрать информацию о возможностях и конфигурации процессора. Пошаговый процесс описан ниже:
Физическое ядро Count:
Вот программа на C, которая реализует это метод:
#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 Примеры вывода:
Intel Core 2 Duo E8400 (без гиперпоточности):
Logical cores: 2
Cores: 2
Hyper-threading: false
Intel Core i7-7700K (с гиперпоточностью):
Logical cores: 8
Cores: 4
hyper-threads: true
AMD Ryzen 5 2600X (с SMT):
Logical cores: 12
Cores: 6
hyper-threads: true
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3