Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6323
Последний выпуск: 19.06.2015

Программное определение номера ядра процессора

26K
31 марта 2012 года
mudBit
224 / / 30.05.2011
Ситуация такова: код у меня расположен в 0 кольце, это код обработки прерывания. Процессор, предположим, двухъядерный. Как программно узнать, какой именно из двух процессоров выполняет данный код?

Гуглить пробовал, к сожалению, почти безрезультатно.
260
31 марта 2012 года
Ramon
1.1K / / 16.08.2003
Local APIC ID
316
31 марта 2012 года
Alm3n
889 / / 29.05.2009
 
Код:
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
252
01 апреля 2012 года
koderAlex
1.4K / / 07.09.2005
правильнее считать базу APIC из MSR 0x0000001Bh , а затем считать один байт по адресу BASE_APIC + 23H .
cpuid сбрасывает конвейеры процессора .
78K
31 марта 2012 года
drfaust
20 / / 19.03.2012
Хм. Присоединяюсь к вопросу - меня он тоже интересует.
67K
31 марта 2012 года
NoXCode
64 / / 11.03.2012
Не может быть Local APIC ID зарезервировано и равно 0. http://ru.osdev.wikia.com/wiki/Local_APIC#Local_APIC
26K
31 марта 2012 года
mudBit
224 / / 30.05.2011
Спасибо, парни.
Поискав в подсказанном вами направлении, нашел информацию, которая была бы интересна таким как я. Как узнать, сколько ядер имеет проц? Выполнить код:
 
Код:
movl $1, %eax
cpuid
movl %ebx, cpuid_ebx
Количество ядер находятся в битах 16-23 включительно переменной cpuid_ebx, то есть регистра ebx. В С это число выделяется так:
 
Код:
int procnum = (cpuid_ebx >> 16) & 0xFF;
316
31 марта 2012 года
Alm3n
889 / / 29.05.2009
Неожиданно.
26K
01 апреля 2012 года
mudBit
224 / / 30.05.2011
Цитата: Alm3n
Неожиданно.


Все как раз закономерно - о такой команде я раньше не знал, как узнал(благодаря вам), нашел ее спецификацию. Подумал, что вопрос о количестве ядер есть связанный с данной темой, и кто-нибудь да и заинтересуется. Вот я и выложил решение наперед. И еще раз спасибо, мужики :)

78K
05 апреля 2012 года
drfaust
20 / / 19.03.2012
Цитата:
Количество ядер находятся в битах 16-23 включительно переменной cpuid_ebx, то есть регистра ebx. В С это число выделяется так:


Не совсем верно. Надо учитывать поддержку HTT. Я до сих пор не смог понять что енто поле означает для интеловских процов с HTT, то ли кол-во физ ядер, то ли кол-во лог. ядер. С АМДой, то понятно.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог