Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > програмно вкл/выкл Hyper Threading


Автор: ksili 18.10.2007, 06:02
Люди, поделитесь, кто знает... Как можно программно включать-выключать режим Hyper Threading'а на Pentium 4? Какие там флаги за это отвечают?

Автор: MAKCim 18.10.2007, 08:41
имхо, он не выключается
его можно использовать, а можно и не использовать

Автор: ksili 18.10.2007, 08:45
А "использовать/не использовать" действует сразу на всю систему или на отдельную программу, которая его использует/не использует? И как можно задать прораммно используется он или нет?


Цитата(MAKCim @  18.10.2007,  13:41 Найти цитируемый пост)
имхо, он не выключается

А в BIOS'е "Hyper-Threading -----  Enable/Disable" это случайно не вкл/выкл?


Автор: MAKCim 18.10.2007, 09:01
Цитата(ksili @  18.10.2007,  08:45 Найти цитируемый пост)
А в BIOS'е "Hyper-Threading -----  Enable/Disable" это случайно не вкл/выкл?

нет
есть так называемая MP спецификация, которая предусматривает создание кодом BIOS MP таблиц в случае, если процессор поддерживает MP в том или ином виде (multi core, hyper-threading и т. д)
Enable/Disable позволяет разрешить/запретить формирование MP таблиц
SMP ОС использует (если это правильная ОС  smile) эти таблицы для определения различных MP параметров (идентификаторы логических процессоров и т. д) и в целом для определения поддержки MP системой
если таблицы не сформированы, отсюда следует, что ОС не будет использовать ту или иную MP технологию
в твоем случае hyper-threading
Цитата(ksili @  18.10.2007,  08:45 Найти цитируемый пост)
А "использовать/не использовать" действует сразу на всю систему или на отдельную программу, которая его использует/не использует? И как можно задать прораммно используется он или нет?

на всю систему

Автор: ksili 18.10.2007, 09:27
так может ли программа (не ОС) на время включить hyper-threading (напрмер, для выполнения участка кода, где это будет полезно с т.зр. увеличения эффективности), а потом выключить. ЕСли да, то как?

Если всё же нельзя, то как можно проверить включена эта опция всё-таки в BIOS'е или нет?

Автор: MAKCim 18.10.2007, 09:43
Цитата(ksili @  18.10.2007,  09:27 Найти цитируемый пост)
так может ли программа (не ОС) на время включить hyper-threading (напрмер, для выполнения участка кода, где это будет полезно с т.зр. увеличения эффективности), а потом выключить. ЕСли да, то как?

можно, но сложно
писать драйвер придется
не проще ли включить hyper-threading в BIOS и поставить MP ОС?
потом запустить нужный код в отдельном потоке

Автор: ksili 18.10.2007, 09:50
понятно... Я не думал, что это так сложно. Вон в защищённый и реальный режим зайти/выйти можно установкой/сбросом бита...

А в SSE3 (которое появилось как раз в Pentium 4 HT) присутствуют две команды для синхронизации потоков. Они имеют отношение к hyper-threading? Или не связаны с ним?

Автор: MAKCim 18.10.2007, 10:03
ksili, 
а в какой ты среде работаешь и что за код, который тебе надо запустить?
если поддержка MP отключена, то BIOS не проводит MP инициализацию и второе логическое ядро (AP) находится в состоянии wait SIPI
чтобы его "разбудить", нужно:
1. самостоятельно провести MP инициализацию
2. пропатчить IDT с целью создания шлюза для вызова процедур на втором логическом ядре

Добавлено через 33 секунды
Цитата(ksili @  18.10.2007,  09:50 Найти цитируемый пост)
А в SSE3 (которое появилось как раз в Pentium 4 HT) присутствуют две команды для синхронизации потоков. Они имеют отношение к hyper-threading? Или не связаны с ним? 

что за команды?

Автор: ksili 18.10.2007, 10:33
Цитата(MAKCim @  18.10.2007,  15:03 Найти цитируемый пост)
что за команды? 

да я не помню, читал в интеловском мануале. Сейчас под рукой нет.
Цитата(MAKCim @  18.10.2007,  15:03 Найти цитируемый пост)
а в какой ты среде работаешь и что за код, который тебе надо запустить?

Если честно, то реально я этого делать в ближайшее время не собираюсь. Хотел узнать насколько это сложно. А вообще интересно было под WinXP (я думал это от оси не очень зависит - главное чтобы она поддерживала HT)

Цитата(MAKCim @  18.10.2007,  15:03 Найти цитируемый пост)
1. самостоятельно провести MP инициализацию
2. пропатчить IDT с целью создания шлюза для вызова процедур на втором логическом ядре

1. Если ось поддерживает SMT и соответствующая настройка включена в BIOS'е, то надо ли выполнять первый шаг?
2. почему IDT? Все потоки, которые выполняются на втором логическом ядре, вызывается через шлюзовый механизм, через шлюз задачи?

Добавлено через 8 минут и 52 секунды
Я читал когда-то в одной статье, что из-за бесполезности hyper-threading для большинства случаев (когда обычный юзер запустил несколько офисных приложений), Intel предоставила программистам возможность вкл/выкл hyper-threading. То есть если он считает, что на данном отрезке кода полезен hyper-threading, он его включает и система пашет на двух ядрах, затем, если он бесполезен, его можно отключить. Вот мне и стало интересно, реально ли это и там гон был. 
Вообще насколько, я понял из ваших объяснений MAKCim, то если в BIOS'е включена соответствующая настройка, то hyper-threading жёстко включен и нельзя его временно отключить. Если наоборот, то его использовать можно, но при этом придётся делать кучу вспомогательных действий (формировать MP-таблицы и т.д.). В общем наверно те заявления Intel наверно были чисто рекламными и на практике это использовать очень затруднительно...

Автор: MAKCim 18.10.2007, 11:14
Цитата(ksili @  18.10.2007,  10:33 Найти цитируемый пост)
я думал это от оси не очень зависит - главное чтобы она поддерживала HT

я же уже говорил
если есть MP ОС, то не надо ничего придумывать, запускай код в отдельном потоке и будет тебе счастье
Цитата(ksili @  18.10.2007,  10:33 Найти цитируемый пост)
1. Если ось поддерживает SMT и соответствующая настройка включена в BIOS'е, то надо ли выполнять первый шаг?

тогда вообще ничего делать не надо (см. выше)
Цитата(ksili @  18.10.2007,  10:33 Найти цитируемый пост)
2. почему IDT? Все потоки, которые выполняются на втором логическом ядре, вызывается через шлюзовый механизм, через шлюз задачи?

я о другом
подробно описывать то, что я имел в виду, очень долго
сейчас нет времени

Цитата(ksili @  18.10.2007,  10:33 Найти цитируемый пост)
Вообще насколько, я понял из ваших объяснений MAKCim, то если в BIOS'е включена соответствующая настройка, то hyper-threading жёстко включен и нельзя его временно отключить. Если наоборот, то его использовать можно, но при этом придётся делать кучу вспомогательных действий (формировать MP-таблицы и т.д.). В общем наверно те заявления Intel наверно были чисто рекламными и на практике это использовать очень затруднительно... 

HP включен всегда, если процессор его поддерживает
нет такого понятия как включение/выключение HT
все дело в ОС и в BIOS
если в BIOS он отключен, вся система работает на одном ядре
включить второе ядро можно, но сложно (см. выше)
если BIOS он включен и ОС поддерживает MP, то используется 2 ядра
если ОС не поддерживает MP, то будет использовано одно ядро вне зависимости от настроек BIOS

Автор: ksili 18.10.2007, 11:22
Спасибо. Будем считать вопрос закрытым

Автор: ksili 22.10.2007, 05:57
Те две инструкции из SSE3 называются MWAIT и MONITOR. Прочитал я про них в интеловском документе "IA-32 Intel® Architecture Software Developer’s Manual. Volume 1: Basic Architecture" от 2004 года. Вот что там конкретно про них пишется:
Код

12.3.6. Two Thread Synchronization Instructions
The MONITOR instruction sets up an address range that is used to monitor write-back-stores.
MWAIT enables a logical processor to enter into an optimized state while waiting for a writeback-
store to the address range set up by MONITOR. MONITOR and MWAIT require the use
of general purpose registers for its input. The registers used by MONITOR and MWAIT must
be initialized properly; register content is not modified by these instructions.

Чуть ниже там ещё пишется, как проверить что проц поддерживает эти две инструкции. В этом описании нет ни слова про HT. Так что, думаю, они не связаны

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)