Программное определение номера ядра процессора
Гуглить пробовал, к сожалению, почти безрезультатно.
Local APIC ID
Код:
mov eax, 01h
cpuid
; get APIC ID from EBX[31:24]
shr ebx, 24
and ebx, 0ffh; not really necessary but makes the code nice
cpuid
; get APIC ID from EBX[31:24]
shr ebx, 24
and ebx, 0ffh; not really necessary but makes the code nice
cpuid сбрасывает конвейеры процессора .
Хм. Присоединяюсь к вопросу - меня он тоже интересует.
Не может быть Local APIC ID зарезервировано и равно 0.
Поискав в подсказанном вами направлении, нашел информацию, которая была бы интересна таким как я. Как узнать, сколько ядер имеет проц? Выполнить код:
Код:
movl $1, %eax
cpuid
movl %ebx, cpuid_ebx
cpuid
movl %ebx, cpuid_ebx
Код:
int procnum = (cpuid_ebx >> 16) & 0xFF;
Неожиданно.
Цитата: Alm3n
Неожиданно.
Все как раз закономерно - о такой команде я раньше не знал, как узнал(благодаря вам), нашел ее спецификацию. Подумал, что вопрос о количестве ядер есть связанный с данной темой, и кто-нибудь да и заинтересуется. Вот я и выложил решение наперед. И еще раз спасибо, мужики :)
Цитата:
Количество ядер находятся в битах 16-23 включительно переменной cpuid_ebx, то есть регистра ebx. В С это число выделяется так:
Не совсем верно. Надо учитывать поддержку HTT. Я до сих пор не смог понять что енто поле означает для интеловских процов с HTT, то ли кол-во физ ядер, то ли кол-во лог. ядер. С АМДой, то понятно.