Мне интересно, каково теоретическое ускорение от гиперпоточных процессоров. Предполагая 100% распараллеливание и 0 коммуникаций - два процессора дадут ускорение в 2. Как насчет гиперпоточного процессора?
источник
Мне интересно, каково теоретическое ускорение от гиперпоточных процессоров. Предполагая 100% распараллеливание и 0 коммуникаций - два процессора дадут ускорение в 2. Как насчет гиперпоточного процессора?
Как уже говорили другие, это полностью зависит от задачи.
Чтобы проиллюстрировать это, давайте посмотрим на реальный тест:
Это было взято из моей магистерской диссертации (в настоящее время недоступно в Интернете).
Это показывает относительное ускорение 1 алгоритмов сопоставления строк (каждый цвет - это отдельный алгоритм). Алгоритмы были выполнены на двух четырехъядерных процессорах Intel Xeon X5550 с гиперпоточностью. Другими словами: всего было восемь ядер, каждое из которых может выполнять два аппаратных потока (= «гиперпотоки»). Таким образом, тест производительности тестирует ускорение до 16 потоков (это максимальное количество одновременных потоков, которые может выполнить эта конфигурация).
Два из четырех алгоритмов (синий и серый) масштабируются более или менее линейно по всему диапазону. То есть он извлекает выгоду из гиперпоточности.
Два других алгоритма (красный и зеленый; неудачный выбор для дальтоников) линейно масштабируются до 8 потоков. После этого они застаиваются. Это ясно указывает на то, что эти алгоритмы не выигрывают от гиперпоточности.
Причина? В данном конкретном случае это загрузка памяти; первые два алгоритма требуют больше памяти для расчетов и ограничены производительностью шины основной памяти. Это означает, что пока один аппаратный поток ожидает память, другой может продолжить выполнение; основной вариант использования для аппаратных потоков.
Другие алгоритмы требуют меньше памяти и не должны ждать шины. Они почти полностью связаны с вычислениями и используют только целочисленную арифметику (фактически, битовые операции). Следовательно, нет возможности для параллельного выполнения и нет пользы от параллельных конвейеров инструкций.
1 Т.е. коэффициент ускорения 4 означает, что алгоритм работает в четыре раза быстрее, чем если бы он был выполнен только с одним потоком. По определению каждый алгоритм, выполняемый в одном потоке, имеет относительный коэффициент ускорения 1.
Проблема в том, что это зависит от задачи.
Идея гиперпоточности заключается в том, что все современные процессоры имеют более одной проблемы с выполнением. Обычно ближе к дюжине или около того сейчас. Делится на Integer, с плавающей точкой, SSE / MMX / Streaming (как бы это ни называлось сегодня).
Кроме того, каждая единица имеет разные скорости. Т.е. для обработки чего-либо может потребоваться целочисленный математический блок 3 цикла, но 64-разрядное деление с плавающей запятой может занять 7 циклов. (Это мифические цифры, не основанные ни на чем).
Внеочередное исполнение помогает во многих отношениях поддерживать как можно более полные единицы.
Однако ни одна задача не будет использовать каждую единицу выполнения каждый момент. Даже разделение потоков не может помочь полностью.
Таким образом, теория состоит в том, чтобы притворяться, что есть второй ЦП, на котором может выполняться другой поток, используя доступные неиспользуемые исполнительные блоки, скажем, ваше транскодирование аудио, что составляет 98% SSE / MMX, а модули int и float полностью простаивает, за исключением некоторых вещей.
Для меня это имеет больше смысла в мире с одним ЦП, поскольку имитация второго ЦП позволяет потокам легче преодолевать этот порог с небольшим (если вообще) дополнительным кодированием для обработки этого поддельного второго ЦП.
В мире ядра 3/4/6/8 с процессорами 6/8/12/16 это помогает? Не знаю. Столько? Зависит от поставленных задач.
Таким образом, чтобы фактически ответить на ваши вопросы, это будет зависеть от задач в вашем процессе, какие исполнительные модули он использует, а в вашем ЦП, какие исполнительные блоки простаивают / недоиспользуются и доступны для этого второго поддельного ЦП.
Говорят, что некоторые «классы» вычислительных ресурсов выигрывают (в общих чертах). Но нет жесткого и быстрого правила, и для некоторых классов оно замедляет ход событий.
источник
У меня есть несколько неопровержимых доказательств, которые можно добавить к ответу geoffc: у меня фактически есть процессор Core i7 (4-ядерный) с гиперпоточностью, и я немного поиграл с транскодированием видео, что является задачей, требующей определенного объема связи и синхронизации, но достаточной параллелизм, что вы можете эффективно загрузить систему.
Мой опыт работы с тем, сколько процессоров назначено для выполнения задачи, обычно с использованием 4-х сверхпоточных «дополнительных» ядер, эквивалентно эквивалентному приблизительно 1 дополнительному процессору на вычислительную мощность. Дополнительные 4 «гиперпоточных» ядра добавили примерно столько же полезной вычислительной мощности, что и переход от 3 до 4 «реальных» ядер.
Конечно, это не совсем честный тест, поскольку все потоки кодирования, скорее всего, будут конкурировать за одни и те же ресурсы в ЦП, но для меня это действительно показало, по крайней мере, незначительное увеличение общей вычислительной мощности.
Единственный реальный способ показать, действительно ли это действительно помогает, - это запустить несколько разных тестов типа Integer / Floating Point / SSE одновременно в системе с включенной и отключенной гиперпоточностью и посмотреть, сколько вычислительной мощности доступно в управляемой среда.
источник
Это сильно зависит от процессора и рабочей нагрузки, как говорили другие.
Intel говорит :
(Мне это кажется немного консервативным.)
И есть еще одна более длинная статья (которую я еще не прочитал) с большим количеством номеров здесь . Один интересный вывод из этой статьи заключается в том, что гиперпоточность может замедлить работу некоторых задач.
Архитектура AMD Bulldozer может быть интересной . Они описывают каждое ядро как эффективно 1,5 ядра. Это своего рода экстремальная гиперпоточность или нестандартный многоядерный процесс, в зависимости от того, насколько вы уверены в его возможной производительности. Числа в этой части предполагают ускорение комментариев от 0,5x до 1,5x.
Наконец, производительность также зависит от операционной системы. Надеемся, что ОС будет отправлять процессы на реальные процессоры, отдавая предпочтение гиперпотокам, которые просто маскируются под процессоры. В противном случае в двухъядерной системе у вас может быть один незанятый процессор и одно очень загруженное ядро с двумя процессорами. Кажется, я вспоминаю, что это произошло с Windows 2000, хотя, конечно, все современные ОС способны на это.
источник