Определите, есть ли у процессора AMD модули

Некоторые процессоры 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


person Z boson    schedule 15.07.2014    source источник
comment
Это недостаточно полно, чтобы ответить на ваш вопрос, но раздел E5 (Multiple Core Calculation) в том 3 руководства программиста архитектуры AMD упоминает, как узнать, сколько ядер у процессора. Поскольку Bulldozer - это микроархитектура, а не сама архитектура, это может быть Лучше всего, что вы можете сделать, чтобы узнать, выглядит ли процессор AMD так, как будто он использует Bulldozer. (В руководстве, которое я связал, по крайней мере, нет экземпляров Bulldozer.)   -  person bouteillebleu    schedule 15.07.2014


Ответы (1)


Вы можете использовать идентификаторы вычислительных единиц cpuid Fn8000_001E. Биты 15: 8 из EBX (т.е. BH) содержат CoresPerComputeUnit: количество ядер на вычислительную единицу. Ценность: зависит от продукта. Количество ядер на вычислительную единицу - CoresPerComputeUnit + 1.

См. Руководство разработчика AMD Bios и ядра.

person Jester    schedule 15.07.2014
comment
Для этого я добавил непроверенный код. Не совсем уверен насчет наличия Fn8000_001E. У меня нет системы AMD, на которой можно это проверить. - person Z boson; 16.07.2014
comment
Прекрасно работает на моем FX-8350. - person Jester; 16.07.2014
comment
Вы проверили мою функцию, и она дает cores = 2? - person Z boson; 17.07.2014
comment
Спасибо за проверку! - person Z boson; 17.07.2014