Снова вопрос про Hyper Threading
Цитата: Yura12 от 23.03.2020, 07:04А можно снова уточнить вот какой вопрос про Hyper Threading
Вот предположим есть процессор с одним ядром, который поддерживает Hyper Threading. Также имеется какая-то счётная программа, которая работает только в 1 поток. Запускается только 1 экземпляр этой тестовой программы.
Если Hyper Threading выключить, то диспетчер задач показывает 1 ядро и загрузку однопоточной счётной программой 100%
Если Hyper Threading включить, то диспетчер задач показывает 2 ядра и загрузку однопоточной счётной программой 50%
А в реальности во втором случае как обстоят дела? Реально процессор всё равно занят на 100% ?
И если этой однопоточной счётной программе ничего другое не мешает, хоть диспетчер задач и показывает 50% но время счёта будет таким же, как и при выключенном Hyper Threading? Так?
А можно снова уточнить вот какой вопрос про Hyper Threading
Вот предположим есть процессор с одним ядром, который поддерживает Hyper Threading. Также имеется какая-то счётная программа, которая работает только в 1 поток. Запускается только 1 экземпляр этой тестовой программы.
Если Hyper Threading выключить, то диспетчер задач показывает 1 ядро и загрузку однопоточной счётной программой 100%
Если Hyper Threading включить, то диспетчер задач показывает 2 ядра и загрузку однопоточной счётной программой 50%
А в реальности во втором случае как обстоят дела? Реально процессор всё равно занят на 100% ?
И если этой однопоточной счётной программе ничего другое не мешает, хоть диспетчер задач и показывает 50% но время счёта будет таким же, как и при выключенном Hyper Threading? Так?
Цитата: ale4316 от 23.03.2020, 09:17При включении НТ на процессорах ай от первого поколения до сенди- иви тест боинка показывает просадку производительности. И по идеи производительность однопоточной програмы может упасть, на сколько - не известно.
При включении НТ на процессорах ай от первого поколения до сенди- иви тест боинка показывает просадку производительности. И по идеи производительность однопоточной програмы может упасть, на сколько - не известно.
Цитата: hoarfrost от 24.03.2020, 06:49В случае и с Hyper-Threading, и с SMT отображаемый уровень нагрузки не соотвествует возможному выходу в виде валовой производительности. Увеличивая число потоков за счёт Hyper-Threading вдвое, валовую производительность вы увличите где-то в 1.2 раза. Для SMT этот коэффициент выше.
В случае и с Hyper-Threading, и с SMT отображаемый уровень нагрузки не соотвествует возможному выходу в виде валовой производительности. Увеличивая число потоков за счёт Hyper-Threading вдвое, валовую производительность вы увличите где-то в 1.2 раза. Для SMT этот коэффициент выше.
Цитата: SerVal от 24.03.2020, 14:31Вообще-то, Hyper-Threading - это даже не ядро, а помощник ядру, для выполнения чего-то параллельно.
То-есть то, что нам показывают как ядро - чисто программно-маркетинговая уловка. Приятно глазу и ласкает слух.
8 ядер ведь приятнее, чем 4. Основная заслуга тут не производителя процессора, а Микрософт, которая показывает загрузку вспомогательного устройства, как загрузку отдельного ядра.
Всё это вовсе не плохо. Единственное, что непонятно - на сколько ядер распараллеливать выполнение программы:
на 4 реальных ядра, или на 8?
Вообще-то, Hyper-Threading - это даже не ядро, а помощник ядру, для выполнения чего-то параллельно.
То-есть то, что нам показывают как ядро - чисто программно-маркетинговая уловка. Приятно глазу и ласкает слух.
8 ядер ведь приятнее, чем 4. Основная заслуга тут не производителя процессора, а Микрософт, которая показывает загрузку вспомогательного устройства, как загрузку отдельного ядра.
Всё это вовсе не плохо. Единственное, что непонятно - на сколько ядер распараллеливать выполнение программы:
на 4 реальных ядра, или на 8?
Цитата: hoarfrost от 27.03.2020, 22:17Hyper-Threading - это технология. Которая позволяет на 1 ядре исполнять более одного потока за счёт того, что микрооперации, на которые разбивается инструкция, исполняемая CPU, часто задействуют далеко не все блоки в ядре. И механизмы, управляющие тем, что именно делают вот эти блоки микроопераций, позволяют выполнять на одних блоках - один поток, а на других - другой. Вот и всё. Насколько это ускорит валовую производительность - зависит от того, какие операции содержит исполняемый код.
Hyper-Threading - это технология. Которая позволяет на 1 ядре исполнять более одного потока за счёт того, что микрооперации, на которые разбивается инструкция, исполняемая CPU, часто задействуют далеко не все блоки в ядре. И механизмы, управляющие тем, что именно делают вот эти блоки микроопераций, позволяют выполнять на одних блоках - один поток, а на других - другой. Вот и всё. Насколько это ускорит валовую производительность - зависит от того, какие операции содержит исполняемый код.
Цитата: mike765321 от 28.03.2020, 00:02Также существуют приложения, которые хорошо относятся к HT и которые плохо относятся к ней.
Может быть как прирост, так и падение или без изменений.
Всё зависит от конкретной программы и предугадать на 100 % не получится.
В любом случае физическое ядро остаётся одно, просто меняется алгоритм работы планировщика команд процессора внутри ядра.
Также существуют приложения, которые хорошо относятся к HT и которые плохо относятся к ней.
Может быть как прирост, так и падение или без изменений.
Всё зависит от конкретной программы и предугадать на 100 % не получится.
В любом случае физическое ядро остаётся одно, просто меняется алгоритм работы планировщика команд процессора внутри ядра.
Цитата: Yura12 от 28.03.2020, 10:35
Ну это понятно, что везде прирост разный и даже может и не быть.
Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?
В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.
Ну это понятно, что везде прирост разный и даже может и не быть.
Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?
В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.
Цитата: hoarfrost от 28.03.2020, 12:51Цитата: Yura12 от 28.03.2020, 10:35
Ну это понятно, что везде прирост разный и даже может и не быть.
Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?
В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.
Ядро всегда одно. А то, какая доля блоков, входящих в него задействуется - зависит от того, какая именно инструкция сейчас выполняется. Одна инструкция может нагрузить больше блоков, а следующая - меньше. И т.д.
Цитата: Yura12 от 28.03.2020, 10:35
Ну это понятно, что везде прирост разный и даже может и не быть.
Но изначальный вопрос был другим - а если процессор нагрузить только 1 потоком, то при включенном Hyper-Threading всё равно будет использоваться целое ядро или только его половина?
В общем в этой теме интересует случай только с 1 работающей программой и только в 1 поток.
Ядро всегда одно. А то, какая доля блоков, входящих в него задействуется - зависит от того, какая именно инструкция сейчас выполняется. Одна инструкция может нагрузить больше блоков, а следующая - меньше. И т.д.
Цитата: mike765321 от 28.03.2020, 13:38Цитата: 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 от 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 от 15.02.2022, 16:20
У меня была тут на неделе возможность немного протестировать современный Core i3-10105 (у него 4 ядра и соответственно, 8 потоков) тестировал проект TN-Grid правда, в 4 потока по ряду причин не успел протестировать. А так, посчитал, усреднял (выбрал TN-Grid так как там задания более менее примерно одинаковые).
Но вот результаты:
3 потока - усредненное время выполнения задания 7600 сек (суммарная загрузка процессора 44 процента).
5 потоков - усредненное время выполнения задания 8850 сек (суммарная загрузка процессора 71 процент).
6 потоков - усредненное время выполнения задания 9450 сек (суммарная загрузка процессора 85 процентов).
7 потоков - усредненное время выполнения задания 10000 сек (суммарная загрузка процессора 100 процентов).
У меня была тут на неделе возможность немного протестировать современный Core i3-10105 (у него 4 ядра и соответственно, 8 потоков) тестировал проект TN-Grid правда, в 4 потока по ряду причин не успел протестировать. А так, посчитал, усреднял (выбрал TN-Grid так как там задания более менее примерно одинаковые).
Но вот результаты:
3 потока - усредненное время выполнения задания 7600 сек (суммарная загрузка процессора 44 процента).
5 потоков - усредненное время выполнения задания 8850 сек (суммарная загрузка процессора 71 процент).
6 потоков - усредненное время выполнения задания 9450 сек (суммарная загрузка процессора 85 процентов).
7 потоков - усредненное время выполнения задания 10000 сек (суммарная загрузка процессора 100 процентов).