ベンチマークのMFLOPS/GFLOPSの見積もりは、STREAMのメモリ帯域幅の結果からしか得られません。あなたのCPUコアのピークMFLOPS/GFLOPS(ベクトル命令とCPU周波数のすべてのバリエーションを持つクロックサイクルあたりの最大FLOP演算としてより良い、最小、平均、最大)とGFLOPS/GBytes(フロップからフロップバイト比、算術強度)を計算します(すべてのNASベンチマーク)。
ストリームのベンチマークは、0 DP = 2つのダブルオペランドあたりのFP64フロップ=コピーでは2 * 8バイト、スケールでは16バイトごとに1フロップ、追加では1フロップ/ 24バイト、フロッピーでは2フロッTriadのバイト数)。したがって、ストリームのベンチマークは、正しい実行時(および誤った実行時のキャッシュ帯域幅)のメモリ帯域幅によって制限されます。多くのベンチマークは、このデータを高い
を有していてもよい(メモリ帯域幅、異なるベクトル化レベルの最大GFLOPS/GHzで、CPUの/最大/通常の低周波、テストの算術強度)あなたはルーフライン・パフォーマンス・モデルhttps://crd.lbl.gov/departments/computer-science/PAR/research/roofline/
の使用を開始することができます
ルーフラインでは、フロップ/バイト付きのx軸があります。 GFlop/sのy軸(両方とも対数目盛である)。 「屋根」の線は、各CPU(または機械)ごとに2つの部分で構成されています。
最初の部分は傾斜しており、低い算術強度に対応します。この部分のアプリケーションは、メモリからロードするためにデータを待たなければならないため、フルGFlop /秒のCPU速度で動作するデータはありません。テストはメモリによって制限されます。この行は、STREAMベンチマークによって定義されます。
線の第2部分は直線であり、より高い強度に対応する。ここのタスクはメモリ帯域幅に制限されず、使用可能なFLOPSによって制限されます。そして、現代のCPUのために、すべてのプだけ広いベクトル命令(命令レベルの並列処理)で利用可能であり、必ずしもすべてのタスクが最も広いのベクトルを使用することができます。
そして、どのように多くのOPSは、各メモリアクセスのために実行されていますか? OpsPerAccess * MemoryBandwidth/sec = ops/sec – enhzflep
@enhzflepどのようにしてOpsPerAccessを取得できますか?私はツールを使用して、そこにアプリケーションを使用して見つけますか? – Matrix
いいえ、考えられません。 1秒あたりのアクセス数が1つしかない場合は、これ以外の図形(メモリ帯域幅)と組み合わせて使用することができます。内部ループのサイズに応じて、私は生成されたアセンブリを見て、手で大まかにそれを計算します。当然ながら、この計算ではキャッシュミスなどの事実は考慮されません。残念ながら、あなたのアプリのパフォーマンスの漠然とした、おおよその見積もりよりはるかに優れた情報を生成するには情報が不十分だと思われます。 – enhzflep