現在、FLOPSでいくつかのコードのパフォーマンスを測定しています。このコードは、次のような算術否定命令を示します。
d = -a
ここでd
、およびa
は浮動小数点変数です。私が現在使用しているアーキテクチャには、特定の否定命令があります。FLOPSを測定するには、この種の操作を考慮する必要がありますか?FLOPSの原因となる操作はどのようなものですか?コンベンションなどはありますか?
現在、FLOPSでいくつかのコードのパフォーマンスを測定しています。このコードは、次のような算術否定命令を示します。
d = -a
ここでd
、およびa
は浮動小数点変数です。私が現在使用しているアーキテクチャには、特定の否定命令があります。FLOPSを測定するには、この種の操作を考慮する必要がありますか?FLOPSの原因となる操作はどのようなものですか?コンベンションなどはありますか?
コードを分解して、この操作がどのように実行されるかを確認してください。
命令FCHS
(符号変更)を使用する場合は、浮動小数点演算と見なすことができます。
MSVC(Visual Studio 2008)
double c = -b;
00971397 fld qword ptr [b]
0097139A fchs
0097139C fstp qword ptr [c]
fchs-わかりますか?
@Andreyが言ったように、分解されたコードを確認する必要があります。
しかし、一般的には、そうです、命令はFPUで実行される可能性があります。少し反転するだけなので、整数単位でも実行できますが、浮動小数点値を操作しているため、これらはすでにFPレジスタにロードされている可能性が高く、かなりのオーバーヘッドが発生します。それらを汎用レジスタに移動し、ビットを反転して元に戻します。
「FLOPとして数えるべきもの」に関する完全なユニバーサルガイドがあるかどうかはわかりませんが、これはFPUで実行される命令である可能性が高いため、CPU上のリソースについて他のFP命令と競合しています。 、そうです、FLOPSカウントに含めます。
LINPACKを一種の標準ベンチマークとして使用してFLOPSを計算するための一種の規則があります。