FLOPS за цикл для песчаного моста и скважины SSE2/AVX/AVX2

Я запутался в том, сколько флопов за такт на ядро ​​можно сделать с помощью Sandy-Bridge и Haswell. Насколько я понимаю, для SSE это должно быть 4 флопа на такт на ядро ​​для SSE и 8 флопов на такт на ядро ​​для AVX/AVX2.

Кажется, это проверено здесь. Как мне достичь теоретического максимума 4 FLOP за цикл? и вот, спецификация процессора Sandy-Bridge.

Однако приведенная ниже ссылка указывает на то, что Sandy-bridge может делать 16 флопов за цикл на ядро, а Haswell 32 флопа на цикл на ядро http://www.extremetech.com/computing/136219-intels-haswell-is-an-unprecedented-threat-to-nvidia-amd.

Может кто-то объяснить это мне?

Изменить: теперь я понимаю, почему я был смущен. Я думал, что термин FLOP относится только к одной с плавающей точкой (SP). Теперь я вижу, что тест на Как я могу достичь теоретического максимума 4 FLOP за цикл? фактически на двойной плавающей запятой (DP), поэтому они достигают 4 DP FLOP / цикл для SSE и 8 DP FLOP / цикл для AVX. Было бы интересно повторить эти тесты на SP.

2 ответа

Решение

Вот подсчет FLOP для ряда последних микроархитектур процессоров и объяснение того, как их достичь:

Intel Core 2 и Nehalem:

  • 4 DP FLOPs / цикл: добавление SSE2 шириной 2 + умножение SSE2 шириной 2
  • 8 SP FLOPs/ цикл: добавление SSE 4 в ширину + умножение SSE 4 в ширину

Intel Sandy Bridge / Ivy Bridge:

  • 8 DP FLOPs / цикл: добавление AVX по 4 в ширину + умножение AVX по 4 в ширину
  • 16 SP FLOPs/ цикл: 8 AVX-добавок + 8-кратное AVX-умножение

Intel Haswell / Broadwell / Skylake / Kaby Lake:

  • 16 DP FLOPs / цикл: две инструкции FMA шириной 4 (с плавным добавлением)
  • 32 SP FLOPs/ цикл: две инструкции FMA шириной 8 (с плавным добавлением)

AMD K10:

  • 4 DP FLOPs / цикл: добавление SSE2 шириной 2 + умножение SSE2 шириной 2
  • 8 SP FLOPs/ цикл: добавление SSE 4 в ширину + умножение SSE 4 в ширину

AMD Bulldozer/Piledriver/Steamroller/Excavator, на модуль (два ядра):

  • 8 DP FLOPs / цикл: FMA шириной 4
  • 16 SP FLOPs/ цикл: FMA шириной 8

AMD Ryzen

  • 8 DP FLOPs / цикл: FMA шириной 4
  • 16 SP FLOPs/ цикл: FMA шириной 8

Intel Atom (Bonnell/45 нм, Saltwell/32 нм, Silvermont/22 нм):

  • 1.5 DP FLOPs / цикл: скалярное добавление SSE2 + скалярное умножение SSE2 через каждый второй цикл
  • 6 SP FLOPs / цикл: добавление SSE по 4 в ширину + умножение SSE по 4 в каждый второй цикл

AMD Bobcat:

  • 1.5 DP FLOPs / цикл: скалярное добавление SSE2 + скалярное умножение SSE2 через каждый второй цикл
  • 4 SP FLOPs / цикл: добавление SSE 4 в ширину каждый второй цикл + умножение SSE 4 в ширину каждый второй цикл

AMD Jaguar:

  • 3 DP FLOPs / цикл: добавление AVX по 4 в ширину каждый второй цикл + умножение AVX по 4 в четыре цикла
  • 8 SP FLOPs/ цикл: добавление AVX по 8 в ширину каждый второй цикл + умножение AVX по 8 в каждый второй цикл

ARM Cortex-A9:

  • 1.5 DP FLOPs / цикл: скалярное сложение + скалярное умножение через каждый второй цикл
  • 4 SP FLOPs / цикл: добавление NEON шириной 4 в каждый второй цикл + увеличение NEON шириной 4 в каждый второй цикл

ARM Cortex-A15:

  • 2 DP FLOPs / цикл: скалярное FMA или скалярное умножение
  • 8 SP FLOPs/ цикл: NEONv2 FMA шириной 4 или множитель NEON шириной 4

Qualcomm Krait:

  • 2 DP FLOPs / цикл: скалярное FMA или скалярное умножение
  • 8 SP FLOPs/ цикл: NEONv2 FMA шириной 4 или множитель NEON шириной 4

IBM PowerPC A2 (Blue Gene/Q) для каждого ядра:

  • 8 DP FLOPs / цикл: QPX FMA шириной 4 в каждом цикле
  • Элементы SP распространяются на DP и обрабатываются в тех же единицах

IBM PowerPC A2 (Blue Gene/Q), для каждого потока:

  • 4 DP FLOPs / цикл: QPX FMA шириной 4 для каждого второго цикла
  • Элементы SP распространяются на DP и обрабатываются в тех же единицах

Intel Xeon Phi (Рыцарский уголок), на ядро:

  • 16 DP FLOPs / цикл: 8 FMA каждый цикл
  • 32 SP FLOPs/ цикл: 16 FMA в каждом цикле

Intel Xeon Phi (Уголок рыцарей), по теме:

  • 8 DP FLOPs / цикл: FMA шириной 8 для каждого второго цикла
  • 16 SP FLOPs/ цикл: FMA шириной 16 через каждый цикл

Intel Xeon Phi (Knights Landing), на ядро:

  • 32 DP FLOPs / цикл: два FMA шириной 8 каждый цикл
  • 64 SP FLOPs/ цикл: два FMA по 16 в каждом цикле

Причина того, что для IBM Blue Gene/Q и Intel Xeon Phi (Knights Corner) есть базовые данные по потокам и ядрам, заключается в том, что эти ядра имеют более высокую скорость выдачи команд при запуске более одного потока на ядро.

Пропускная способность для Haswell ниже для сложения, чем для умножения и FMA. Есть две единицы умножения /FMA, но только одна единица добавления fp. Если ваш код содержит в основном дополнения, то вы должны заменить дополнения инструкциями FMA с множителем 1,0, чтобы получить максимальную пропускную способность.

Задержка инструкций FMA на Haswell составляет 5, а пропускная способность - 2 на такт. Это означает, что вы должны поддерживать 10 параллельных операций, чтобы получить максимальную пропускную способность. Например, если вы хотите добавить очень длинный список чисел fp, вам придется разделить его на десять частей и использовать десять регистров аккумулятора.

Это действительно возможно, но кто будет делать такую ​​странную оптимизацию для одного конкретного процессора?

Другие вопросы по тегам