Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Прочие языки программирования > Assembler
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.08.2012, 03:11
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию Определение № ядра процессора

Привет всем!
Ситуация такова: код у меня расположен на нулевом кольце, это код обработки прерывания. Процессор, предположим попался двухядрёный. Как программно узнать, какой именно из пары камней выполняет данный код?

Трамблёрить пытался, но к сожалению, почти безрезультатно, нашёл только про 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

Потом догуглил, что правильнее будет считывать базу APIC из MSR 0x0000001Bh, а только затем выдёргивать один байт по адресу BASE_APIC + 23H, ибо cpuid сбрасывает конвейера процессора в аут. В результате нарисовался код:
Код:
movl $1, %eax
cpuid
movl %ebx, cpuid_ebx 
Число ядер лежит в битах 16..23 включительно переменной cpuid_ebx, т.е. регистра ebx. В Си это число вроде выделяется так:
Код:
int procnum = (cpuid_ebx >> 16) & 0xFF;
Но наверное, ещё надо учитывать поддержку HTT. Я до сих пор так и не смог понять что енто поле означает для интеловских процев с HTT - то ли кол-во физ. ядер, то ли лог. ядер. Непонятно. С АМДой-то как то попроще будет. Прав ли я?
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter