FLOPSまたはIOPSを測定するにはどうすればよいですか? 普通の浮動小数点の足し算・掛け算の時間を計ったらFLOPS相当ですか?
5 に答える
FLOPS は、1 秒あたりの浮動小数点演算です。FLOPS を測定するには、まずそのような操作を実行するコードが必要です。そのようなコードがある場合、測定できるのはその実行時間です。また、すべての浮動小数点演算を合計または推定 (測定ではありません!) し、それを測定された壁時間で割る必要があります。足し算、引き算、掛け算、割り算などのすべての通常の操作をカウントする必要があります (そうです、遅くて避けた方がよいとはいえ、それでも FLOP です..)。数え方に注意!ソース コードに表示されるものは、すべての最適化の後にコンパイラが生成するものではない可能性が最も高いです。確実にするには、おそらくアセンブリを確認する必要があります..
FLOPS は、1 秒あたりの操作数と同じではありません。そのため、一部のアーキテクチャには 1 つの MAD (乗算と加算) 命令がありますが、それでも 2 つの FLOP としてカウントされます。同様に、SSE 命令。それらは複数の FLOP を実行しますが、1 つの命令としてカウントします。
FLOPS は完全に無意味というわけではありませんが、FLOPS を sb と比較するときは注意が必要です。そうでなければ FLOPS、特にハードウェア ベンダー。たとえば、NVIDIA は、MAD 操作を想定して、カードのピーク FLOPS パフォーマンスを提供します。したがって、コードにそれらがない限り、このパフォーマンスは得られません。アルゴリズムを再考するか、ハードウェア FLOPS のピーク値を正しい係数で変更してください。これは、独自のアルゴリズムで把握する必要があります。たとえば、コードが乗算のみを実行する場合は、それを 2 で除算します。正しくカウントすると、コードを 1 行も変更せずに、コードが最適ではない状態から非常に効率的な状態になる可能性があります。
CPUパフォーマンスカウンターを使用して、CPU自体に、特定のプログラムに使用する浮動小数点演算の数をカウントさせることができます。次に、これを実行時間で割るのは簡単なことです。Linuxでは、perfツールを使用すると、これを非常に簡単に行うことができます。これについての詳細は、ブログにあります。
通常、よく知られたベンチマークを使用します。MIPS や megaFLOPS のようなものは、最初はあまり意味がありません。特定のベンチマークに制限しないと、そのわずかな意味さえ失われます。
通常、たとえば、整数速度は「drystone MIPS」で引用され、浮動小数点は「Linpack megaFLOPS」で引用されます。これらの「drystone」と「Linpack」は、測定に使用されたベンチマークの名前です。
IOPS は I/O 操作です。これらはほとんど同じですが、この場合、どのベンチマークを使用するかについてはあまり合意がありません (ただし、SPC-1 はかなり人気があるようです)。
これは非常にアーキテクチャ固有の質問です。ナイーブ/基本/開始の開始については、特定のハードウェアで操作 1 の乗算が何回行われるかを調べてから、大きな行列乗算を実行し、かかる時間を確認することをお勧めします。次に、特定のハードウェアのFLOPを簡単に推定できます
フロップを測定する業界標準は、よく知られているLinpackまたはHPL 高性能 linpack です。ソースを参照するか、自分で実行してみてください。
また、この回答を優れたリファレンスとして参照します
FLOP は明確に定義されていません。mul FLOPS は add FLOPS とは異なります。独自の定義を考え出すか、よく知られたベンチマークから定義を取得する必要があります。