[CU] BLASの場合、CUDAツールキット(src / fortran_thunking。{c、h})に「thunking」と呼ばれるラッパーがあり、CPUメモリからポインターを受け取り、すべてのGPU割り当て/コピーを実行します。次のようなプリプロセッサステートメントを使用して、コードにプラグインできます。
#define ZGEMV CUBLAS_ZGEMV
#define ZGEMM CUBLAS_ZGEMM
...
LAPACKの場合、Magmaはその機能のすべてではないにしてもほとんどがCPU側のインターフェースを持っているため(最初に実装される傾向がある)、サンクと同様に、呼び出しを交換するだけです。場合によっては、インターフェイスまたはワークスペースの要件が少し異なる可能性があるため、サンクよりも少し注意する必要があります。
必要な免責事項は無料の昼食がないことです。少なくともメモリコピーを明示的に処理するつもりがない場合、パフォーマンスは高い計算強度(フロップ/バイト)の大きな問題に制限されます。問題が小さい場合やバッチ処理されている場合は、メモリコピーをストリーミングするための制御コードと、メモリコピーと計算をオーバーラップするためのライブラリ呼び出しを書くことを強くお勧めします。カーネルを書く必要がないので、これはAPIほどではなく、実際にはCUDAではありません。CUBLASとMagmaはどちらも、ストリームを指定するためのAPI呼び出しを提供します。