Сколько ускорения дает гиперссылка? (в теории)


38

Мне интересно, каково теоретическое ускорение от гиперпоточных процессоров. Предполагая 100% распараллеливание и 0 коммуникаций - два процессора дадут ускорение в 2. Как насчет гиперпоточного процессора?

Ответы:


59

Как уже говорили другие, это полностью зависит от задачи.

Чтобы проиллюстрировать это, давайте посмотрим на реальный тест:

введите описание изображения здесь

Это было взято из моей магистерской диссертации (в настоящее время недоступно в Интернете).

Это показывает относительное ускорение 1 алгоритмов сопоставления строк (каждый цвет - это отдельный алгоритм). Алгоритмы были выполнены на двух четырехъядерных процессорах Intel Xeon X5550 с гиперпоточностью. Другими словами: всего было восемь ядер, каждое из которых может выполнять два аппаратных потока (= «гиперпотоки»). Таким образом, тест производительности тестирует ускорение до 16 потоков (это максимальное количество одновременных потоков, которые может выполнить эта конфигурация).

Два из четырех алгоритмов (синий и серый) масштабируются более или менее линейно по всему диапазону. То есть он извлекает выгоду из гиперпоточности.

Два других алгоритма (красный и зеленый; неудачный выбор для дальтоников) линейно масштабируются до 8 потоков. После этого они застаиваются. Это ясно указывает на то, что эти алгоритмы не выигрывают от гиперпоточности.

Причина? В данном конкретном случае это загрузка памяти; первые два алгоритма требуют больше памяти для расчетов и ограничены производительностью шины основной памяти. Это означает, что пока один аппаратный поток ожидает память, другой может продолжить выполнение; основной вариант использования для аппаратных потоков.

Другие алгоритмы требуют меньше памяти и не должны ждать шины. Они почти полностью связаны с вычислениями и используют только целочисленную арифметику (фактически, битовые операции). Следовательно, нет возможности для параллельного выполнения и нет пользы от параллельных конвейеров инструкций.


1 Т.е. коэффициент ускорения 4 означает, что алгоритм работает в четыре раза быстрее, чем если бы он был выполнен только с одним потоком. По определению каждый алгоритм, выполняемый в одном потоке, имеет относительный коэффициент ускорения 1.


Лучший ответ :-)
Sklivvz

1
Каковы фактические скорости алгоритмов, построенные в зависимости от количества ядер? Т.е. каков прирост скорости для самого быстрого алгоритма в этих тестах? Просто интересуюсь :).
crazy2be

@ crazy2be Для синей линии ( алгоритм Хорспула ) время выполнения сокращается с 4,16 секунды до 0,35 секунды с 16 потоками. Таким образом, ускорение составляет 11,74. Тем не менее, это с гиперпоточностью. В зависимости от количества ядер скорость этого алгоритма составляет 7,17 на 8 ядрах.
Конрад Рудольф

5
Единственная проблема с этим ответом - я могу только проголосовать один раз. Это потрясающе объективный ответ на субъективный вопрос;)
Мастер-подмастерье


20

Проблема в том, что это зависит от задачи.

Идея гиперпоточности заключается в том, что все современные процессоры имеют более одной проблемы с выполнением. Обычно ближе к дюжине или около того сейчас. Делится на Integer, с плавающей точкой, SSE / MMX / Streaming (как бы это ни называлось сегодня).

Кроме того, каждая единица имеет разные скорости. Т.е. для обработки чего-либо может потребоваться целочисленный математический блок 3 цикла, но 64-разрядное деление с плавающей запятой может занять 7 циклов. (Это мифические цифры, не основанные ни на чем).

Внеочередное исполнение помогает во многих отношениях поддерживать как можно более полные единицы.

Однако ни одна задача не будет использовать каждую единицу выполнения каждый момент. Даже разделение потоков не может помочь полностью.

Таким образом, теория состоит в том, чтобы притворяться, что есть второй ЦП, на котором может выполняться другой поток, используя доступные неиспользуемые исполнительные блоки, скажем, ваше транскодирование аудио, что составляет 98% SSE / MMX, а модули int и float полностью простаивает, за исключением некоторых вещей.

Для меня это имеет больше смысла в мире с одним ЦП, поскольку имитация второго ЦП позволяет потокам легче преодолевать этот порог с небольшим (если вообще) дополнительным кодированием для обработки этого поддельного второго ЦП.

В мире ядра 3/4/6/8 с процессорами 6/8/12/16 это помогает? Не знаю. Столько? Зависит от поставленных задач.

Таким образом, чтобы фактически ответить на ваши вопросы, это будет зависеть от задач в вашем процессе, какие исполнительные модули он использует, а в вашем ЦП, какие исполнительные блоки простаивают / недоиспользуются и доступны для этого второго поддельного ЦП.

Говорят, что некоторые «классы» вычислительных ресурсов выигрывают (в общих чертах). Но нет жесткого и быстрого правила, и для некоторых классов оно замедляет ход событий.


2
Хотя я искал что-то вроде «ускорения в 1,7 раза», этот ответ очень хорош, поскольку он не дает чёрно-белого взгляда на эту проблему.
Михаил

@Mikhail: Дело в том, что не существует простого фактора - это зависит, как часто в жизни :-).
слеске

4
Суть права. Однако есть одно замечание: нет априорной причины, по которой одно ядро ​​должно получить большую выгоду от гиперпоточности, чем многоядерные. За неправильную задачу ни прибыли. Для правильной задачи обе прибыли на один и тот же фактор.
Конрад Рудольф

@Konrad: Я думаю, что я понял, что разница между одним ядром и двумя ядрами может быть более ценной, чем разница между 4 и 8 или 2 и 4. Т.е. наличие второго ядра для плохопоточного приложения может помочь еще немного.
Geoffc

«Для приложения с плохой резьбой» - это важный момент. Но на самом деле поддержка многопоточности большинства приложений оставляет желать лучшего.
Конрад Рудольф

5

У меня есть несколько неопровержимых доказательств, которые можно добавить к ответу geoffc: у меня фактически есть процессор Core i7 (4-ядерный) с гиперпоточностью, и я немного поиграл с транскодированием видео, что является задачей, требующей определенного объема связи и синхронизации, но достаточной параллелизм, что вы можете эффективно загрузить систему.

Мой опыт работы с тем, сколько процессоров назначено для выполнения задачи, обычно с использованием 4-х сверхпоточных «дополнительных» ядер, эквивалентно эквивалентному приблизительно 1 дополнительному процессору на вычислительную мощность. Дополнительные 4 «гиперпоточных» ядра добавили примерно столько же полезной вычислительной мощности, что и переход от 3 до 4 «реальных» ядер.

Конечно, это не совсем честный тест, поскольку все потоки кодирования, скорее всего, будут конкурировать за одни и те же ресурсы в ЦП, но для меня это действительно показало, по крайней мере, незначительное увеличение общей вычислительной мощности.

Единственный реальный способ показать, действительно ли это действительно помогает, - это запустить несколько разных тестов типа Integer / Floating Point / SSE одновременно в системе с включенной и отключенной гиперпоточностью и посмотреть, сколько вычислительной мощности доступно в управляемой среда.


1
Хорошо ясный момент - это зависит от приложения. Я уверен, что высокоскоростные вычисления могут быть ускорены, поскольку ядро ​​0 и ядро ​​0-h будут связываться через один и тот же кеш, без использования медленной оперативной памяти.
Михаил

1
@ Михаил, тогда проблема в том, что если обоим потокам требуется большой объем вычислительной мощности, то они оба будут конкурировать за одни и те же ресурсы, и им будет гораздо выгоднее обмениваться данными через общий кэш L3 ЦП (i7 имеет кэш L1 и L2). на ядро ​​и общий кэш L3) или даже системную память и выполняют свои задачи отдельно. Это все массовые качели-и-карусели упражнение ...
Mokubai

3

Это сильно зависит от процессора и рабочей нагрузки, как говорили другие.

Intel говорит :

Измеренная производительность на процессоре Intel® Xeon® MP с технологией Hyper-Threading показывает увеличение производительности до 30% по сравнению с обычными тестами серверных приложений для этой технологии.

(Мне это кажется немного консервативным.)

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

Архитектура AMD Bulldozer может быть интересной . Они описывают каждое ядро ​​как эффективно 1,5 ядра. Это своего рода экстремальная гиперпоточность или нестандартный многоядерный процесс, в зависимости от того, насколько вы уверены в его возможной производительности. Числа в этой части предполагают ускорение комментариев от 0,5x до 1,5x.

Наконец, производительность также зависит от операционной системы. Надеемся, что ОС будет отправлять процессы на реальные процессоры, отдавая предпочтение гиперпотокам, которые просто маскируются под процессоры. В противном случае в двухъядерной системе у вас может быть один незанятый процессор и одно очень загруженное ядро ​​с двумя процессорами. Кажется, я вспоминаю, что это произошло с Windows 2000, хотя, конечно, все современные ОС способны на это.


1
ОС должна убедиться, что потоки не блокируют часы друг друга :)
Михаил
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.