アルゴリズムを測定するとき、除算がある場合、FOP と浮動小数点のパフォーマンスの合計数を計算する方法は?
たとえば、n2 行列乗算、n3 * 2flops の計算 (乗算、加算)、同じデータセット n2 を使用すると仮定して、行列乗算の乗算演算を除算演算に変更すると、どのように flops を計算します。行列の掛け算の結果と同じですか?
残念ながら、浮動小数点演算とは何かを指定する標準はありません。
これは、さまざまなアーキテクチャがさまざまな操作セットをネイティブにサポートしている可能性があるためです。
したがって、たとえば、アーキテクチャA 1は 4 つの基本演算すべてをサポートし、A 2は加算のみをサポートし、A 3はすべての基本演算とべき乗をサポートします。
一般に、浮動小数点演算という用語は高度に文脈化されており、特定のマシンに関連付けられています。
ただし、すべての種類の操作を個別にカウントすることで、マシンに依存しない優れた分析を行うことができます。
これには少しの専門知識とブードゥーが必要です。たとえば、加算と減算はハードウェアにとって基本的に同じ操作であるため、一緒にカウントされます。
乗算と除算は、より複雑な演算 (べき乗、三角関数など) と同様に、別々にカウントされます。
最終的に、すべての異なる操作のカウントが得られます。
たとえば、n × m の行列にm × kの行列を掛けるには、 n · k · m回の乗算とn · k ·( m -1) 回の加算が必要です。したがって、結果はn · k · m MUL + n · k ·( m -1) ADD です。
この「完全な情報」式から、通常はそれ自体で良い結果が得られます。参照マシンと測定単位を選択することで、「浮動小数点演算」の数の概算を得ることができます。
たとえば、Intel の Skylake マイクロアーキテクチャには、次の非常に単純化されたタイミング テーブルがあります。
Operation Cycles
Addition 0.5
Subtraction 0.5
Division 3
Multiplication 0.5
加算を 1 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サポートがあります)。
とにかく、さまざまな種類の操作に関する表現はマシンに依存せず、後で特定のケースを作成するときに単一の数値に変換できます。