Процессор Процессор
Как назначить процессор, на котором следует выполнять поток |
*
| *
|
| |
В мультипроцессорной системе (на базе нескольких процессоров или процессора с
технологией HyperThreading) можно указать системе, на каком процессоре рекомендуется
выполнять поток. Реализуется это при помощи функции API SetThreadIdealProcessor:
function SetThreadIdealProcessor(hThread: THandle; dwIdealProcessor: DWORD): BOOL;
Thread - Handle потока, для текущего потока приложения его можно узнать через GetCurrentThread
dwIdealProcessor - номер процессора (отсчет идет с 0)
Я проверял работу этой функции на мультипроцессорном сервере и моем домашнем ПК (на нем
Intel Pentium 4 Prescott 2.8 ГГц, HT) - работает отлично, приложение действительно загружает
только указанный процессор. Проверку я проводил с помощью простейшего примера:
begin
// Выбор процессора
SetThreadIdealProcessor(GetCurrentThread, 1);
// Мертвый цикл
WHILE TRUE DO ;
end;
Определение информации о процессоре |
*
| W-NT
|
| |
Получить подробную информацию о процессоре можно, проанализировав ключ реестра
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\n
где n - номер процессора (отсчет идет с 0)
В ключе есть ряд параметров:
- ~MHz - тактовая частота в МГЦ (т.е. для процессора 2.8 ГГц будет что-то вроде 2831)
- Identifier - тип процессора - строка вида "x86 Family 15 Model 3 Stepping 3"
- ProcessorNameString - наименование процессора, строка вида "Intel(R) Pentium(R) 4 CPU 2.80GHz"
- VendorIdentifier - идентификатор производителя ("GenuineIntel")
- FeatureSet - поддерживаемые возможности (битовая маска, требует расшифровки)
Аналогично можно анализировать ключ
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\FloatingPointProcessor\n для получение
информации мат. сопроцессоре (n - номер)
Определение информации о процессоре через GetSystemInfo |
*
| *
|
| |
Функция API GetSystemInfo позволяет узнать несколько параметров процессора.
Функция имеет вид:
procedure GetSystemInfo(var lpSystemInfo: TSystemInfo); stdcall;
Функция заполняет поля структуры lpSystemInfo, в частности, там есть поля:
- dwActiveProcessorMask - битовая маска, представляющая процессоры, установленные в
системе (каждый бит соответствут процессору, например, в двухпроцессорной системе
установлено два младших бита)
- dwNumberOfProcessors - количество процессоров в системе
- dwProcessorType - тип процессора
- wProcessorLevel, wProcessorRevision - характеристики процессора (их трактовка зависит
от типа)
При этом следует учесть, что процессоры с технологией HT считаются как два процессора
(при условии, что включена поддержка HT)
© Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта
необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA - Хостинг от AGAVA.ru