Microsoft の Parallel Programming ホワイトペーパーでは、さまざまな FLOPS しきい値の下で最適な状況が説明されており、FLOPS レートは、特定の実装をいつ使用する必要があるかを決定するポイントであると説明されています。
アプリケーションで FLOPS を測定するにはどうすればよいですか?
Microsoft の Parallel Programming ホワイトペーパーでは、さまざまな FLOPS しきい値の下で最適な状況が説明されており、FLOPS レートは、特定の実装をいつ使用する必要があるかを決定するポイントであると説明されています。
アプリケーションで FLOPS を測定するにはどうすればよいですか?
FLOPS は 1 秒あたりの浮動小数点演算数を意味し、それらの測定は、実行された浮動小数点演算の数をカウントし、それらを実行するのにかかった時間で割るのと同じくらい簡単です。時間の測定は簡単な部分です。演算のカウントはトリッキーで、通常はハードウェア プラットフォームと使用するコンパイラに依存します。通常、加算、減算、乗算などの単純な演算は非常に高速です。分割は少し遅くなります。平方根を取るのはさらに遅くなります。スペクトルの最も遅い部分には、サイン、コサイン、べき乗、対数を取るなどの超越関数があります。これらはすべて連続して展開され、収束が達成されるまで繰り返し計算されます。現在の世代のほとんどの CPU は、融合乗算および加算 (FMA) 操作をサポートしています。つまり、A*B+C は単一サイクルで実行されます。
以上のことから、絶対的な FLOPS 値を与えることは非常に困難です。コードが単純な操作のみを実行する場合、高い FLOPS カウントが得られます。多くの超越を行う場合、FLOPS カウントははるかに低くなります (最大で 100 倍低くなります)。また、フェッチ/計算比率 (メイン メモリにアクセスする頻度) と、コンパイラがレイテンシ隠蔽の恩恵を受けるコードを生成する能力にも依存します。
標準の FLOPS ベンチマークは、密な線形方程式系を解く LINPACK テストです。単純な算術演算のみを使用し (超越演算は使用しません)、より複雑な演算で CPU のパフォーマンスがどれほど優れているかを示すには十分ではありませんが、それでもTop500でスーパーコンピューターをランク付けするために使用されています。