web-dev-qa-db-ja.com

GPUを使用してMATLABコードを高速化しますか?

AccelerEyesは、2012年12月に、GPUコードでMathworksと連携し、MATLAB用の製品Jacketを廃止したことを発表しました。

http://blog.accelereyes.com/blog/2012/12/12/exciting-updates-from-accelereyes/

残念ながら、彼らはもはやジャケットライセンスを販売していません。

私の知る限り、ArrayFireに基づくJacket GPU Arrayソリューションは、MATLABが提供するgpuArrayソリューションよりもはるかに高速でした。

GpuArrayを使い始めましたが、多くの関数の実装が不十分であることがわかりました。たとえば、単純な

myArray(:) = 0 

とても遅いです。私はいくつかのカスタムCUDAカーネルを作成しましたが、実装が不十分な標準のMATLAB機能は、コード全体で一貫してgpuArrayを操作している場合でも、多くのオーバーヘッドを追加します。 MATLABコードを手書きのCUDAコードに置き換えることでいくつかの問題を修正しましたが、MATLAB標準機能を再実装したくありません。

私が見逃しているもう1つの機能は、スパースGPUマトリックスです。

だから私の質問は:

MATLABによって提供される不適切に実装されたデフォルトのGPU実装をどのように高速化しますか?特に、GPUを使用してMATLABでスパース行列演算を高速化するにはどうすればよいですか?

56
Stiefel

AccelerEyesの創設者であるジョンの講演に参加できて嬉しかったです。記述が不十分なコードを削除し、あちこちで数ビット節約できるコードに置き換えただけなので、スピードアップは得られませんでした。彼らのスピードアップは主に、キャッシュの可用性を活用し、メモリ内(GPU)で多くの操作を実行することによるものでした。私が正しく覚えていれば、MatlabはGPUとCPUの間でデータを転送することに依存していたため、スピードアップはクレイジーでした。

2
dinwal

MATLABはCUDAベースのGPUをサポートします。 「ParallelComputingToolbox」からアクセスする必要があります。これらの2つのリンクも役立つことを願っています:

並列コンピューティングツールボックスの機能

主な機能

  • 複数のプロセッサでタスク並列アルゴリズムを実行するための並列forループ(parfor)
  • CUDA対応のNVIDIAGPUのサポート
  • ローカルで実行されるワーカーを介したデスクトップ上のマルチコアプロセッサのフル活用
  • コンピュータークラスターとグリッドのサポート(MATLAB Distributed Computing Serverを使用)
  • 並列アプリケーションのインタラクティブなバッチ実行
  • 大規模なデータセット処理とデータ並列アルゴリズムのための分散配列と単一プログラムの複数データ(spmd)構成

NVIDIA CUDA対応GPUのMATLABGPUコンピューティングサポート

GPUコンピューティングにMATLABを使用すると、CやFortranを使用するよりも簡単にGPUを使用してアプリケーションを高速化できます。おなじみのMATLAB言語を使用すると、GPUアーキテクチャや低レベルGPUコンピューティングライブラリの複雑さを学ぶことなく、CUDAGPUコンピューティングテクノロジーを利用できます。

以下をサポートする Parallel Computing Toolbox を介してMATLABでGPUを使用できます。

  • 計算能力2.0以上のCUDA対応NVIDIA GPU。リリース14a以前の場合、計算機能1.3で十分です。
  • GPUはMATLABから直接使用します
  • Parallel ComputingToolboxおよびMATLABDistributed Computing ServerのMATLABワーカーを使用したデスクトップおよびコンピュータークラスター上の複数のGPU
4
Re Captcha