2016-07-12 4 views
0

アプリケーションを実行しないでHPCアプリケーション(NASベンチマーク)のmflops(プロセッサあたりの操作数百万回)を計算します。 Stream Benchmarkを使用して私のシステム(スーパーコンピュータ)の各コアのメモリ帯域幅を測定しました。私はコアのメモリ帯域幅情報を持つことで、アプリケーションのプロセッサごとにmflopsを得る方法が不思議です。 私のノードには、すべての物理コアを使用して、64GiBメモリ(16コア-2ソケットを含む)と58 GiB/s集約帯域幅があります。私のコアのメモリ帯域幅は、NUMAアーキテクチャのために必要なトライアド機能の場合、2728.1204 MB/sから10948.8962 MB/sまで変化します。メモリ帯域幅情報を使用してHPCアプリケーションのmflop/sを計算する

助けていただければ幸いです。

+0

そして、どのように多くのOPSは、各メモリアクセスのために実行されていますか? OpsPerAccess * MemoryBandwidth/sec = ops/sec – enhzflep

+0

@enhzflepどのようにしてOpsPerAccessを取得できますか?私はツールを使用して、そこにアプリケーションを使用して見つけますか? – Matrix

+0

いいえ、考えられません。 1秒あたりのアクセス数が1つしかない場合は、これ以外の図形(メモリ帯域幅)と組み合わせて使用​​することができます。内部ループのサイズに応じて、私は生成されたアセンブリを見て、手で大まかにそれを計算します。当然ながら、この計算ではキャッシュミスなどの事実は考慮されません。残念ながら、あなたのアプリのパフォーマンスの漠然とした、おおよその見積もりよりはるかに優れた情報を生成するには情報が不十分だと思われます。 – enhzflep

答えて

1

ベンチマークの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のために、すべてのプだけ広いベクトル命令(命令レベルの並列処理)で利用可能であり、必ずしもすべてのタスクが最も広いのベクトルを使用することができます。

Roofline model; Gflops ILP limited part

関連する問題