Анализ производительности процессоров при параллельном выполнении - PullRequest
0 голосов
/ 11 января 2019

Недавно я провел сравнение «параллельного ускорения» между двумя компьютерами с различными характеристиками

1 - один AMD Ryzen 7 1800x, работающий на частоте 3,6 ГГц. Этот процессор имеет 8 физических ядер и 16 логических ядер ( здесь ).

2 - Dual Xeon 2695 v3 (Haswell), работающий на частоте 2,3 ГГц на одной материнской плате. Каждый процессор имеет 14 физических ядер. Таким образом, общее количество физических ядер составляет 28, а общее количество логических ядер - 56 ( здесь ).

Я запустил одну программу с разным количеством потоков в обеих системах. Я знаю, что это не может быть справедливым сравнением, так как программа также использует около 4 ГБ памяти, и я не говорил о характеристиках памяти, но диаграмма ускорения показана ниже. Обратите внимание, что для каждого процессора

speedup = (time of one thread on that CPU) / (time of N threads on that CPU)

Следовательно, для 1 нити и Ryzen, и Xeon масштабируются до 1.

enter image description here

Если кто-то смотрит на график, он может сказать, что ускорение Xeon лучше, чем Ryzen. Например, с 8 ядрами Ryzen имеет ускорение 3,4, а Xeon - 4,69.

Однако, если мы проверим данные времени, мы увидим, что для 8 потоков у них одинаковое время выполнения. Более того, Ryzen работает лучше, чем Xeon. Очевидно, что

S_ryzen = 900/263        <        S_xeon = 1188/253

enter image description here

Так что, глядя только на данные ускорения, звук вводит в заблуждение. С другой стороны, я ожидаю, что 8-поточный ризен должен иметь меньше времени выполнения, чем Xeon, например 200 секунд, поскольку он имеет лучшую производительность одного ядра.

Что можно сделать из сравнения производительности этих двух процессоров? Я знаю, что Xeon предоставляет больше ядер, но с 8 ядрами (которые оба имеют), какой процессор имеет более высокую производительность?

1 Ответ

0 голосов
/ 11 января 2019

Пусть S (U, N) обозначает ускорение, полученное в системе U, где базовая программа (числитель в формуле ускорения) использует 1 поток, а улучшенная программа использует N потоков. То есть:

S (U, N) = Время U (1) / Время U (N)

Таким образом:

S (Xeon, 8)> S (Ryzen, 8)

Это означает, что:

Время Xeon (1) / Время Xeon (8)> Время Ryzen (1) / Время Ryzen (8)

Но мы не можем сделать вывод о том, как связаны любые два времени выполнения. Мы можем только сказать, что у Xeon масштабируется лучше (т. Е. Программа смогла более эффективно использовать дополнительные ресурсы на Xeon, чем на Ryzen), но это не означает, что у него исполнено лучше с точки зрения времени исполнения. Это просто математически неверный вывод. Например, мы не можем сделать вывод, что время Xeon (8)> время Ryzen (8).

Однако мы можем наблюдать, что:

S (Xeon, 8)> S (Xeon, 4)

То есть:

Время Xeon (1) / Время Xeon (8)> Время Xeon (1) / Время Xeon (4)

Два срока Xeon (1) отменяют друг друга, и мы получаем:

Время Xeon (4)> Время Xeon (8)

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

Так как мы можем сделать одно и то же вычитание на двух разных процессорах? Используя общую базовую или справочную систему. Как правило, в качестве базовой линии выбирается какая-то старая система. Например, вы можете выбрать здесь Willamette, процессор Pentium 4, выпущенный в 2000 году. Конечно, вам нужно выбрать систему, на которой вы можете проводить эксперименты, чтобы измерить базовое время выполнения. Таким образом, ускорение может быть рассчитано следующим образом:

S ref (U, N) = Время Willamette (1) / Время U (N)

По сути, Время Willamette (1) становится общим термином. Эта формула гораздо полезнее предыдущей. Например, вы можете легко рассчитать S (U, N), учитывая только S ref (U, N), следующим образом:

S (U, N) = S ref (U, N) / S ref (U, 1)

Так что, если S ref (Xeon, 8)> S ref (Xeon, 4), то математически справедливо вывести это время Xeon (8 ) <Время <sub>Xeon (4). Также, если S ref (Xeon, 8)> S ref (Ryzen, 8), то математически справедливо вывести это время Xeon (8) <время <sub>Ryzen (8). Данное соотношение между двумя ускорениями S ref (U, N) на одном и том же или разных процессорах содержит больше информации по сравнению с использованием S (U, N).

В наборе тестов SPEC CPU этот метод используется для нормализации показателей производительности. Пакет SPEC CPU 2006 использует машину 1997 :

SPEC использует историческую систему Sun, "Ultra Enterprise 2", которая была введена в 1997 году, как эталонная машина. Эталонная машина использует процессор UltraSPARC II с частотой 296 МГц, как и эталонный компьютер для CPU2000. Но эталонные машины для двух комплектов не идентичны: референсная машина CPU2006 существенно лучше кэши, и эталонный компьютер CPU2000 не мог вместить достаточно память для запуска CPU2006.

В SPEC CPU 2017 используется более современная машина 2006 года :

Эталонный компьютер - это исторический сервер Sun Microsystems, Sun Fire V490 с 2100 МГц чипами UltraSPARC-IV +. UltraSPARC-IV + был введен в 2006 году, и является более новым, чем чип, используемый в CPU2000 и Эталонные машины CPU2006 (300 МГц, 1997 UltraSPARC II).

Нормализованные числа можно сравнивать друг с другом независимо от того, принадлежат ли они к одной и той же системе или к разным системам.

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

...