Ответ 1
Вот теоретические максимальные числа FLOP (на ядро) для ряда последних микроархитектур процессоров и объяснение того, как их достичь.
В общем, чтобы рассчитать это, посмотрите пропускную способность инструкции FMA, например, на https://agner.org/optimize/ или любом другом результате микробенчмарка, и умножьте (FMAs per clock) * (vector elements/instruction) * 2 (FLOPs/FMA)
.
Обратите внимание, что для достижения этого в реальном коде требуется очень тщательная настройка (например, развертывание цикла), и почти нулевое отсутствие кеша, и никаких узких мест ни в чем другом. Современные процессоры обладают такой высокой пропускной способностью FMA, что нет других возможностей для других инструкций хранить результаты или вводить их. например, 2 загрузки SIMD за такт - это также предел для большинства процессоров x86, поэтому точечный продукт будет узким местом при 2 нагрузках на 1 FMA. Тем не менее, тщательно настроенное умножение плотных матриц может приблизиться к достижению этих чисел.
Если ваша рабочая нагрузка включает в себя какие-либо ADD/SUB или MUL, которые нельзя заключить в FMA, теоретические максимальные числа не являются подходящей целью для вашей рабочей нагрузки. У Haswell/Broadwell есть умножение SIMD FP на 2 такта (для блоков FMA), но только 1 добавление SIMD FP на такт (на отдельном векторном блоке FP с меньшей задержкой). Skylake отбросил отдельный сумматор SIMD FP, выполнив add/mul/fma то же самое с задержкой 4c, пропускной способностью 2 на такт для любой ширины вектора.
Intel
Обратите внимание, что версии последних микроархитектур Celeron/Pentium не поддерживают инструкции AVX или FMA, только SSE4.2.
Intel Core 2 и Nehalem (SSE/SSE2):
- 4 DP FLOPs/цикл: добавление SSE2 шириной 2 + умножение SSE2 шириной 2
- 8 SP FLOPs/цикл: добавление SSE 4 в ширину + умножение SSE 4 в ширину
Intel Sandy Bridge/Ivy Bridge (AVX1):
- 8 DP FLOPs/цикл: добавление AVX по 4 в ширину + умножение AVX по 4 в ширину
- 16 SP FLOPs/цикл: добавление AVX по всей ширине + умножение AVX по всей ширине
Intel Haswell/Broadwell/Skylake/Kaby Lake/Кофе/... (AVX + FMA3):
- 16 DP FLOPs/цикл: две инструкции FMA (с многократным сложением)
- 32 SP FLOPs/цикл: две инструкции FMA шириной 8 (с плавным добавлением)
- (Использование 256-битных векторных инструкций может снизить максимальную тактовую частоту на некоторых процессорах.)
Intel Skylake-X/Skylake-EP/Каскадное озеро/и т.д. (AVX512F) с 1 блоком FMA: немного Xeon, бронза/серебро
- 16 DP FLOPs/цикл: одна инструкция FMA (с умножением и сложением) шириной 8
- 32 SP FLOPs/цикл: одна 16-кратная инструкция FMA (с плавным сложением)
- Та же пропускная способность вычислений, что и для более узких 256-битных инструкций, но ускорения все еще возможны с AVX512 для более широких загрузок/хранилищ, нескольких векторных операций, которые не выполняются на блоках FMA, таких как побитовые операции, и более широких перемешиваний.
- (Наличие 512-битных векторных инструкций в полете отключает вектор ALU на порту 1. Также снижает максимальную частоту турбо тактовой частоты, поэтому "циклы" не являются постоянными в ваших расчетах производительности.)
Intel Skylake-X/Skylake-EP/Cascade Lake/etc (AVX512F) с 2 модулями FMA: чипы Xeon Gold/Platinum и i7/i9 high-end для настольных ПК (HEDT).
- 32 DP FLOPs/цикл: две инструкции FMA (с умножением и сложением) шириной 8
- 64 SP FLOPs/цикл: две 16-разрядные инструкции FMA (с плавным сложением)
- (Наличие 512-битных векторных инструкций в полете отключает вектор ALU на порту 1. Также снижает максимальную частоту турбо тактовой частоты.)
Будущее. Ожидается, что Intel Cooper Lake (преемник Cascade Lake) представит Brain Float, формат float16 для рабочих нагрузок нейронной сети, с поддержкой для него фактических вычислений SIMD, в отличие от текущего расширения F16C, которое поддерживает только загрузку/хранение с преобразование в float32. Это должно удвоить пропускную способность FLOP/цикл по сравнению с одинарной точностью на одном и том же оборудовании.
Текущие чипы Intel имеют фактические вычисления непосредственно на стандартном float16 в iGPU.
AMD
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
х86 малой мощности
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 POWER
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 MIC/Xeon Phi
Intel Xeon Phi (Рыцарский уголок), на ядро:
- 16 DP FLOPs/цикл: 8 FMA в каждом цикле
- 32 SP FLOPs/цикл: FMA шириной 16 в каждом цикле
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) существует базовая информация о потоках и ядрах, заключается в том, что эти ядра имеют более высокую скорость выдачи команд при запуске более одного потока на ядро.