При измерении алгоритма, если есть операции деления, как рассчитать общее количество FOP и производительность с плавающей запятой?
Например, умножение матрицы n2, вычисление n3 * 2 флопс (умножение, сложение), предполагая, что, используя тот же набор данных n2, мы меняем операции умножения умножения матриц на операции деления, как вычислять флопы. То же самое с результатом умножения матриц?
Увы, нет стандарта, который определяет, что операция с плавающей точкой является.
Это связано с тем, что разные архитектуры могут иметь встроенную поддержку для различного набора операций.
Так, например, архитектура 1 может поддерживать все четыре основные операции, 2 только сложение и 3 все основные операции плюс возведение в степень.
В общем термин операции с плавающей точкой очень контекстуализирован и привязан к конкретной машине.
Однако вы можете провести хороший независимый от машины анализ, считая каждый вид операций отдельно.
Это требует немного опыта и вуду, например, сложение и вычитание считаются вместе, потому что это в основном одна и та же операция для аппаратного обеспечения.
Умножения и деления учитываются отдельно, как и более сложные операции (возведение в степень, тригонометрические функции и т. Д.).
В конце концов у вас будет счет для всех различных операций.
Например, умножение N × м матрица м × К один включает N·К·м умножения и N·К· (м-1) дополнения. так что результат N·К·м MUL + N·К· (м-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·К· (2 ·м — 1) поскольку для умножения и сложения требуется всего 1 FLOP.
Это упрощенный вид, реальные машины намного сложнее (например, у Skylake есть векторные единицы и FMA поддержка, которая может изменить единицу измерения и время).
В любом случае, выражение в терминах различных видов операций не зависит от машины и может быть преобразовано в одно число позже при создании конкретного случая.
Других решений пока нет …