ご存知かもしれませんが、DGEMV を並行して実装するにはさまざまな方法があり (列単位またはブロック単位など)、さまざまな通信オーバーヘッドが発生します。私は、MKL と BLAS のすべてのリファレンス マニュアルの両方に目を通し、MKL(v.11) から cblas_dgemv によって一般的に呼び出されているスタイルを見つけようとしましたが、成功しませんでした。使用されているアルゴリズムまたはアルゴリズムのオーバーヘッドを文書化したリファレンスを誰かが持っていれば、私はとても幸せです。
質問する
320 次
1 に答える
0
MKL ref マニュアルは、DGEMV と他のルーチンをブラック ボックスとして保持します。
しかし、オーバーヘッド/効率を推定する方法はまだあると思います。
ご存知のように、DGEMV はメモリ帯域幅制限のある操作です。y += A*x の場合、達成されたメモリ帯域幅によって速度を測定できます。
- として 1 回の DGEMV 呼び出しの実行時間を測定し
t
ます。 - メモリの合計読み取り/書き込みサイズを計算します:
m = 2*len(y)+len(x)+len(A)
; - 実際の帯域幅
bw = m/t
; - 合計システム RAM のピーク帯域幅を確認してください
bw0
。
次にbw/bw0*100%
、アルゴリズムの実際の効率として見ることができます。
測定を行うために十分な大きさの行列/ベクトルが必要な場合があることに注意してください。また、より正確な結果を得るために測定を繰り返したい場合は、新しい反復を開始する前にキャッシュをコールドに保つ必要がある場合があります。
于 2013-01-14T20:40:42.187 に答える