Форум

Пожалуйста или Регистрация для создания записей и тем.

Снова вопрос про Hyper Threading

Страница 1 из 2Далее

А можно снова уточнить вот какой вопрос про Hyper Threading

Вот предположим есть процессор с одним ядром, который поддерживает Hyper Threading. Также имеется какая-то счётная программа, которая работает только в 1 поток. Запускается только 1 экземпляр этой тестовой программы.

Если Hyper Threading выключить, то диспетчер задач показывает 1 ядро и загрузку однопоточной счётной программой 100%

Если Hyper Threading включить, то диспетчер задач показывает 2 ядра и загрузку однопоточной счётной программой 50%

А в реальности во втором случае как обстоят дела? Реально процессор всё равно занят на 100% ?

И если этой однопоточной счётной программе ничего другое не мешает, хоть диспетчер задач и показывает 50% но время счёта будет таким же, как и при выключенном Hyper Threading? Так?

При включении НТ на процессорах ай от первого поколения до сенди- иви тест боинка показывает просадку производительности. И по идеи производительность однопоточной програмы может упасть, на сколько - не известно.

В случае и с Hyper-Threading, и с SMT отображаемый уровень нагрузки не соотвествует возможному выходу в виде валовой производительности. Увеличивая число потоков за счёт Hyper-Threading вдвое, валовую производительность вы увличите где-то в 1.2 раза. Для SMT этот коэффициент выше.

Вообще-то, Hyper-Threading - это даже не ядро, а помощник ядру, для выполнения чего-то параллельно.

То-есть то, что нам показывают как ядро - чисто программно-маркетинговая уловка. Приятно глазу и ласкает слух.

8 ядер ведь приятнее, чем 4. Основная заслуга тут не производителя процессора, а Микрософт, которая показывает загрузку вспомогательного устройства,  как загрузку отдельного ядра.

Всё это вовсе не плохо. Единственное, что непонятно - на сколько ядер распараллеливать выполнение программы:

на 4 реальных ядра, или на 8?

Hyper-Threading - это технология. Которая позволяет на 1 ядре исполнять более одного потока за счёт того, что микрооперации, на которые разбивается инструкция, исполняемая CPU, часто задействуют далеко не все блоки в ядре. И механизмы, управляющие тем, что именно делают вот эти блоки микроопераций, позволяют выполнять на одних блоках - один поток, а на других - другой. Вот и всё. Насколько это ускорит валовую производительность  - зависит от того, какие операции содержит исполняемый код.

PinkFloyd отреагировал на эту запись.
PinkFloyd

Также существуют приложения, которые хорошо относятся к HT и которые плохо относятся к ней.

Может быть как прирост, так и падение или без изменений.

Всё зависит от конкретной программы и предугадать на 100 % не получится.

В любом случае физическое ядро остаётся одно, просто меняется алгоритм работы планировщика команд процессора внутри ядра.

 

Ну это понятно, что везде прирост разный и даже может и не быть.

Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?

В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.

 

Цитата: Yura12 от 28.03.2020, 10:35

 

Ну это понятно, что везде прирост разный и даже может и не быть.

Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?

В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.

 

Ядро всегда одно. А то, какая доля блоков, входящих в него задействуется - зависит от того, какая именно инструкция сейчас выполняется. Одна инструкция может нагрузить больше блоков, а следующая - меньше. И т.д.

Цитата: Yura12 от 28.03.2020, 10:35

Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?

В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.

А) Допустим HT включён. И запускаете 1 программу.

ядро 1 - 100%, ядро 2 - 0 %  (или ядро 1 - 0%, ядро 2 - 100 %)

Процессор (физический) загружен на 100 %

Б) HT включён. И запускаем 2-е программы.

ядро 1 - 100 %, ядро 2 - 100 %

Процессор (физ.) загружен также на 100 %. Но темп выполнения программ снизится в 2 раза.

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

Если физ.ядер много (4 например), то можно попробовать запустить 5 программ. Но если все они с интенсивными вычислениями прироста скорее не будет.

В любом случае помимо программы 1 выполняется ещё ОС и её службы.

Вы можете не выключать HT, просто ограничить нагрузку на "количество процессоров %" 50 % например, в настройках Boinc manager. Планировщик Windows уже давно научился работать с этой технологией, и вначале распределяет программы по физическим ядрам, а потом по их HT двойникам.

Yura12 отреагировал на эту запись.
Yura12

 

У меня была тут на неделе возможность немного протестировать современный Core i3-10105  (у него 4 ядра и соответственно, 8 потоков) тестировал проект TN-Grid  правда, в 4 потока по ряду причин не успел протестировать.  А так, посчитал, усреднял (выбрал TN-Grid так как там задания более менее примерно одинаковые).

Но вот результаты:

3 потока - усредненное время выполнения задания 7600 сек (суммарная загрузка процессора 44 процента).

5 потоков - усредненное время выполнения задания 8850 сек (суммарная загрузка процессора 71 процент).

6 потоков - усредненное время выполнения задания 9450 сек (суммарная загрузка процессора 85 процентов).

7 потоков - усредненное время выполнения задания 10000 сек (суммарная загрузка процессора 100 процентов).

 

 

Страница 1 из 2Далее
BOINC.RU