Некоторые процессоры Intel имеют гиперпоточность, которую я могу обнаружить, прочитав бит 28 в регистре EDX из CPUID. В процессорах AMD нет гиперпоточности, но у некоторых из них есть модули с двумя целочисленными единицами и одной единицей с плавающей запятой. Есть ли способ, например, с помощью CPUID, определить, есть ли у ЦП модули?
Изменить: на основе ответа Джестера я придумал следующую непроверенную функцию (у меня нет доступа к процессору AMD) для определения количества ядер на «вычислительную единицу» (также известный как модуль).
// input: eax = functionnumber, ecx = 0
// output: eax = output[0], ebx = output[1], ecx = output[2], edx = output[3]
//static inline void cpuid (int output[4], int functionnumber)
void coresPerComputeUnit() {
int abcd[4];
int cores = 1;
cpuid(abcd,0x80000000);
if(abcd[0]<0x8000001E) return; // Fn8000_001E not available
cpuid(abcd,0x8000001E);
cores += (abcd[1] & 0xff00) >> 8; //ebx bit 15:8 CoresPerComputeUnit
}
http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/42301_15h_Mod_00h-0Fh_BKDG1.pdf