GPUシステムでのBLAS / LAPACKまたはその他の線形代数ルーチンの最速の実装は何ですか?


11

たとえば、nVidiaにはCUBLASがあり、7-14倍の高速化が約束されています。簡単に言えば、これはnVidiaのGPUカードの理論的なスループットに近いものではありません。GPUでの線形代数の高速化における課題は何ですか?また、より高速な線形代数のルーティングが既に利用可能ですか?

回答:


9

他の実装に関する限り、あなたの質問の後半に答えることはできませんが、課題に関する洞察を提供することはできます。参考までに、ベンチマーク用に2GBのメモリを搭載したnVidia GTX 560 TiでViennaCLを個人的に使用しました。

ミッドレンジi5のシリアルコードでは、約40倍の密行列乗算の高速化が見られました。ベクトル-スカラー乗算などの演算では、1000倍もの高速化が見られました。ただし、部屋にある800ポンドのゴリラはメモリ帯域幅です。ほとんどの商用GPUでは、PCIeのようなものを使用することになり、スループットが約6GB / sに制限されます。私の場合、計算は40倍高速でしたが、3つのマトリックスコピー(2つはGPUに、1つは逆)にはそれぞれ、CPUで計算を行うのと同じくらいの時間がかかりました。

GPU線形代数の一般的なライブラリの問題は、GPU上でオブジェクトを実際に再利用できないことです。なぜなら、彼らはあなたがそれらで何をしようとしているかわからないからです。そのため、計算カーネルを呼び出すたびに、GPUにコピーしてから結果をコピーする必要があります。これにより、ゲインの大部分が消費されます。

マトリックスなどのオブジェクトを再利用できる場合は、より多くのメモリ管理を回避するために、より高いレベルのアルゴリズムを作成できますが、ライブラリを効率的に行うことは困難です。

これが役立つことを願っており、これにもっと経験を積んだ他の人がいると確信していますが、これらはGPUコンピューティングへの短い進出の間に得た経験と印象です。


3
これが、CPUに熱心にコピーバックされるのではなく、GPUに長期間存在するオブジェクトが必要な理由です。たとえば、PETScマトリックスとベクトルには、CPUやGPUが最新かどうかを示すフラグが含まれています。GPUでの操作はCPUバージョンをダーティとしてマークし、その逆も同様です。汚れた場所でメモリを要求した場合、コピーは透過的に行われますが、大きなデータ構造に触れるすべてのアルゴリズムコンポーネントが同じ場所で実行できる場合はまれです。
ジェドブラウン

5

CUDAとBLASのみに焦点を当てましょう。

ホストBLAS実装の高速化は、あまりにも多くの要因に依存するため、スループットを評価するのに適した指標ではありませんが、通常は高速化が重要であることに同意します。

NVIDIAが公開しているベンチマークを見て、Tesla M2090が1331ギガフロップス(単精度)および665ギガフロップス(二重精度)のピークパフォーマンスを持っていることを考慮すると、SGEMMおよびDGEMMのスループットがほぼ測定されていることがわかります理論値の60%。これはかなり良いです。

2mnkm×kk×n

持続的な浮動小数点スループットに関しては、データと結果の転送時間を考慮せずにフロップを計算する必要があると思います。これにより、比較の高速化が難しくなります。さらに、最大のパフォーマンスは大きなマトリックスであるため、マトリックスサイズを考慮する必要があります。

要するに、GPUの初期化、データ転送時間などを考慮する必要があるため、実際のアプリケーションの高速化は、線形代数ルーチンのピーク測定パフォーマンスとは大きく異なる場合があります。

したがって、正確なメトリックと問題が定義されていない限り、質問は意味をなさないため、最速のライブラリに関するあなたの質問には答えません。これはすべて言った、cuBLASMAGMAは非常に良い出発点だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.