Перемешивание / смешивание на значениях FP не считаются FLOP. Они просто накладывают расходы на использование SIMD не только для «вертикальных» задач , либо для проблем с ветвлением, которые вы выполняете без блендирования с помощью смеси.
Также нет FP И / ИЛИ / XOR. Вы можете попытаться оправдать подсчет абсолютного значения FP, используя andps
(_mm_and_ps
), но обычно оно не учитывается. FP abs не требует рассмотрения показателя степени / значимости или нормализации результата или каких-либо вещей, которые делают исполнительные блоки FP дорогими. abs (AND) / sign-flip (XOR) или сделать отрицательным (OR) являются тривиальными побитовыми операциями, а также не нужны
FMA обычно считается как две операции с плавающей запятой (mul и add), даже если это одна инструкция с одинаковой (или схожей) производительностью для SIMD FP add или mul. Самая важная проблема, с которой сталкиваются узкие места в raw FLOP/s
, - это matmul, который нуждается в равном смешивании mul и add и может в полной мере использовать преимущества FMA.
Таким образом, FLOP / s ядра Haswell составляет
- его ширина вектора SIMD (8
float
элементов на вектор)
- раз SIMD FMA за такт (2)
- раз FLOPs на FMA (2)
- тактовая частота (максимальная одноядерная турбина, которую он может выдержать при максимальном использовании обоих модулей FMA; длительный период зависит от охлаждения, кратковременный зависит только от пределов мощности).
Для целого ЦП, а не только для одного ядра: умножьте на количество ядер и используйте максимальную поддерживаемую тактовую частоту, когда все ядра заняты, обычно ниже, чем одноядерный турбо на процессорах, которые вообще имеют турбо.)
Intel и другие производители процессоров не учитывают тот факт, что их процессоры могут также поддерживать vandps
параллельно с 2 vfma132ps
инструкциями в такт, потому что FP abs не является сложной операцией.
См. Также Как мне достичь теоретического максимума 4 FLOP за цикл? . (На самом деле это больше, чем 4 на современных процессорах: P)
Пиковые FLOPS (FP операций в секунду или FLOP / s) недостижимы, если у вас много других служебных данных, занимающих полосу пропускания внешнего интерфейса или создающих другие узкие места. Метрика - это просто количество математики, которое вы можете использовать при работе по прямой, а не по какой-либо конкретной практической проблеме.
Хотя люди и думают, что глупо, если теоретические пиковые провалы намного выше, чем когда-либо тщательно подобранные вручную матмулы или Мандельброт, даже для задач с постоянным временем компиляции. например если передний конец не может идти в ногу с какими-либо магазинами, а также FMA. например если бы у Haswell было четыре исполнительных блока FMA, то он мог поддерживать только максимальные FLOP, если буквально каждая инструкция была FMA. Операнды в источнике памяти могут слиться воедино для нагрузок, но не будет места для хранения без ущерба для пропускной способности.
Причина, по которой у Intel нет даже 3 модулей FMA, заключается в том, что большинство реальных кодов испытывают проблемы с насыщением 2 модулей FMA, особенно только с 2 портами загрузки и 1 портом хранилища. Они будут потрачены впустую почти все время, а 256-битный модуль FMA требует много транзисторов.