通常、BLAS サブルーチンは、特定の固有の操作に対して定義されます。例えば、
DAXPY
必然的にy <-- ax + y
DSCAL
は必ずx = ax
。
私が達成したいことは次のとおりです。
z = ax+by
とy = ax
。
BLAS のサブルーチンを「拡張」して、上記のことができるようにするにはどうすればよいですか? (これらの操作は必ずしも相互に続くわけではありません)
私が試してみました:
ダミーを宣言して
DCOPY
から、ダミーを目的のベクトルに ing します。お気に入り、DCOPY(dummy,x); DSCAL(a,dummy),DCOPY(y,dummy)
独自の OpenMP 実装の作成
DCOPY(y,a*x)
y=axの場合、次のようなトリックを使用します
しかし問題は、これらの方法のどれもが、この問題を回避する最善の方法であるという決定的な答えを私に与えてくれないようだということです. 質問するよりも「プロファイル、プロファイル、プロファイル」の方がよいことはわかっていますが、すべて試してみましたが、ベクターを少し変更するたびに、以前の最良の方法が突然最悪の方法になったり、その逆になったりします。
また、
- 私の意図は、可能な限り最高のパフォーマンスをもたらすことです。
- これらの操作を最適化しても、おそらくパフォーマンスが大幅に向上しないことはわかっていますが、できる限りピコ秒ごとに節約しようとしています。
- FWIW、インテル MKL にリンクしています