Как рассчитать общее количество FOP и производительность специальных операций с плавающей запятой (exp sin sqrt)?

При измерении алгоритма, если есть операции деления, как рассчитать общее количество FOP и производительность с плавающей запятой?

Например, умножение матриц n2, вычисление n3 * 2flops (умножение, сложение), предполагая, что, используя тот же набор данных n2, мы меняем операции умножения матрицы умножения на операции деления, как вычислить flops. То же самое с результатом умножения матриц?


person Sherry818    schedule 25.12.2016    source источник


Ответы (1)


Увы, не существует стандарта, определяющего, что такое операция с плавающей запятой.
Это связано с тем, что разные архитектуры могут иметь встроенную поддержку для разных наборов операций.
Итак. например, архитектура A1 может поддерживать все четыре основные операции, A2 — только сложение и A3 все основные операции плюс возведение в степень.

В целом термин операции с плавающей запятой сильно зависит от контекста и привязан к конкретной машине.

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

В конце у вас будет счет для всех различных операций.
Например, умножение матрицы n × m на m × k один включает n·k·m умножений и n·k·(m-1) дополнений. поэтому результат равен n·k·m MUL + n·k· (m-1) ДОБАВИТЬ.

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

Например, микроархитектура Skylake от Intel имеет очень упрощенную таблицу таймингов:

Operation             Cycles

Addition              0.5
Subtraction           0.5
Division              3
Multiplication        0.5

Если мы возьмем сложение в качестве единицы измерения для одного FLOP, мы можем сказать, что деление равно 6 сложениям, то есть это как 6 FLOP.

Operation             FLOPs

Addition              1   (By definition)
Subtraction           1
Division              6
Multiplication        1

Таким образом, приведенный выше пример сводится к n·k·(2·m - 1), так как умножение и сложение занимают всего 1 FLOP.

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

person Margaret Bloom    schedule 25.12.2016