web-dev-qa-db-ja.com

プロセッサの各コアのメモリ帯域幅を見つける

こんにちは私はPETSc(PDESを数値的に並列に解くためのソフトウェア)を学んでいます、そして私は [〜#〜] faq [〜#〜] でこの一節に来ました

CPUあたりの高いメモリパフォーマンスが必要です。 各CPU(マルチコアシステムのコア)には、約2ギガバイト/秒以上の独自のメモリ帯域幅が必要です。たとえば、標準のデュアルプロセッサ「PC」は、2番目のプロセッサを使用した場合、パフォーマンスが向上しません。つまり、notの場合、速度が向上します。 2番目のプロセッサを使用しています。これは、スパース行列の計算速度が、CPUの速度ではなく、メモリの速度によってほぼ完全に決定されるためです

コンピューターでDebianLinuxおよびUbuntuLinuxシステムを使用しています。 CPUのGb/s単位のメモリ帯域幅を確認するにはどうすればよいですか?このためのLinuxコマンドはありますか?.

2
smilingbuddha

Linuxには 利用可能なメモリ帯域幅ベンチマーク があります。これはオープンソースであり、X86とArmで動作します。

これにより、メモリの生のパフォーマンスと、メモリを使用したシステムパフォーマンスが得られます。ただし、リアルタイムの帯域幅は提供されません。

memtopツール もあります。帯域幅よりも使用量が重要です。 PETScの実行中にシステムを監視して、使用されている帯域幅を確認するために使用できます。

CPUパフォーマンスカウンターを読み取るプログラム もあり、ページフォールトと組み合わせて使用​​できます。

そして最後に、いつでもPETScを実行してみることができます。 2つのコアを使用したときにパフォーマンスが2倍になる場合は、帯域幅に余裕があります。速度が上がるまで繰り返し停止します。最もエレガントな方法ではありませんが、可能な限り最良の実用的なソリューションです。

4
Hennes

メモリ帯域幅について話す通常の方法は、スレッドバージョンで利用可能なStreamベンチマークを使用することです。特定のシステムの理論上の帯域幅(チャネル数*幅*クロック)の間には密接な関係があります。これは計算が簡単なため、知っておくと便利です。

sys    memory                      BW*   stream  stream/core
R      2s x 2ch x PC3200  (numa)   12.8  6.5     3.2
S      2s   2ch x pc5400  (uma)    10.8  6.1     .76
O      2s x 4ch x pc10660 (numa)   85    51      2.1

最近のマシン、特にデスクトップは、これらの古いサーバーシステムよりも多くのものを提供する傾向があります。上記の数値はすべて、従来の方法でコンパイルされた、調整されていないストリームの実行です。熱狂的なサイトは、ハードウェアの理論値に近づくWindowsベースの調整された疑似ストリーム番号を報告する傾向があります。 Memtest86はラムパターンテスターであり、実際にはベンチマークではないため、Memtest86の値は使用しません。

また、一般に、数値コードは、純粋なメモリ帯域幅への依存を軽減するためにブロッキングを有益に使用できます。 PETScのコメントは、メモリがオンチップFLOPSでスケーリングされていないため、ブロックされていないことを示しています。これは残念なことです。

1
markhahn