1

私は科学アプリケーションでいくつかのパフォーマンステストを実行しており、アプリケーションのパフォーマンスに影響を与える可能性のあるすべての要素を考慮しようとしています(キャッシュサイズ階層、CPU速度、キャッシュラインなど、パフォーマンスに関係するもの)。ばかげた質問かもしれませんが、この質問が頭に浮かびますが、はっきりさせておきたいと思います。

*質問: *

私が正しくない場合は、お願いします.intとfloatまたはdouble値の処理コストはプロセッサで異なります。これは、CPU浮動小数点ユニット(浮動小数点値を計算するため)を使用しているためです。ここで、2 つの 2D 行列を同じ float または double 値で埋めて乗算するか、ランダムな float または double 値で埋めてから乗算するかの間に違いがあるかどうかを知りたいと思います。線量コンパイラは、すべての要素が同じ値を持つ行列に対してキャッシュを使用しますか?.

A と B のサイズが処理時間 (乗算など) に影響を与えるかどうかにかかわらず、 A と B は桁数が異なる数値にすることができる( AB ) のような浮動小数点値を処理します。また、投与量に違いがある場合、それを考慮するかどうかは重要ですか? . パフォーマンス カウンター ライブラリを使用してアプリケーションのパフォーマンスを測定できますが、使用するライブラリのオーバーヘッドのため、命令/フロップの変動がランダム値または I/D キャッシュ ミス、キャッシュ サイズ、問題サイズなどの他のパラメーターによるものであると断言することはできません。または他のパラメータ。

中古機 intel E4500 です。コンパイラ g++ 4.7.

ありがとう

4

1 に答える 1

2

整数と浮動小数点の算術コストが異なることは正しいですが、想定できるほど多くはありません。これは、計算に使用されるプロセッサ ユニットに大きく依存します。特に Intel プロセッサの場合は、 http://www.intel.com/products/processor/manuals/で入手できる「Optimization Reference Manual」で役立つ情報を見つけることができます。付録 C には、すべての命令の命令レイテンシがリストされています。

特定の質問に対して、行列乗算の計算時間が2つの行列のエントリに同一の値またはランダムな値が含まれているかどうかに依存している場合、答えは「いいえ」です。命令の量と順序、および計算実行時のメモリ アクセス パターンを見ると、どちらの場合も同じです。行列の乗算はすべての可能なケースをカバーする必要があるため、コンパイラは通常、行列がすべて同じエントリで構成されているという事実を利用することもできません。(わかりました、行列のエントリと乗算自体をすべて1つの関数に詰め込み、エイリアシングなどのすべての副作用を排除しない限り、非常に賢いコンパイラはおそらくそれから何かを作ることができますが、それについては話していません、 右?)

また、桁数(10進数を指していると思います)は問題ではありません。各行列エントリは、単精度浮動小数点数の場合は 32 ビット (倍精度の場合は 64 ビット) のすべてで表されます。

于 2013-01-03T16:06:39.043 に答える