2011-09-14 23 views
2

同じデータセットでいくつかの独立した解析を実行する必要があります。 具体的には、私は100グラム(一般化線形モデル)の分析を束ねる必要があり、ビデオカード(GTX580)を活用しようと考えていました。MatlabとGPU/CUDAプログラミング

MatlabとParallel Computing Toolbox(私はC++にはうまくいきません)にアクセスできたので、私はそれを試してみることにしました。

1つのGLMが並列計算には理想的ではないことを理解していますが、100-200を並列に実行する必要があるため、parforを使用することが解決策になると思いました。

私の問題は、どのアプローチを従わせるべきか私には明らかではないということです。私はMATLAB関数glmfitのgpuArray版を書いたが、parforを使うと標準の "for"ループよりも利点がない。

これは、matlabpoolの設定と関係がありますか?これをGPUカードに「見る」ように設定する方法は私には明らかではありません。デフォルトでは、間違っていなければ、CPUのコア数(私の場合は4)に設定されています。 私はアプローチに完全に間違っていますか?

どのような提案も高く評価されます。

編集

感謝。私はGPUmatとJacketを知っているので、あまり努力することなくCで書くことができますが、皆さんがMatlabまたはRを使用する部門のGPUコンピューティングの可能性をテストしています。最終目標はC2050 Matlab Distribution Server(または少なくともこれが最初のプロジェクトでした)。 MathworksからADを読む私は、Cスキルがなくても並列計算が可能だったという印象を受けました。私の部門の研究者にCを学ばせることは不可能なので、限られていてglmのようないくつかの一般的なルーチンへのサポートは存在しないとしても、GPUmatとJacketがより良い解決策であると推測しています。

クラスタとどのようにインターフェイスできるか?彼らはいくつかの就職活動システムで働いていますか?

答えて

4

Parallel Computing Toolboxではなく、GPUMat(無料)またはAccelerEyes Jacket(購入は無料ですが)をお試しください。ツールボックスには多くの機能がありません。

パフォーマンスを最大限に引き出すには、CU(C++は不要)とCUDAのコードを自分で学習することができます。これらの高度なツールの多くは、メモリ転送をどのように管理するかについては十分スマートではないかもしれません(PCI-Eバス上のデータを不必要にシャッフルすることによる計算上のメリットをすべて失う可能性があります)。

+0

ジャケットへのポインタありがとうございます。これには、PCI-E転送の最小化とカード上のメモリ転送の両方を含む、メモリ転送を最小限にするランタイムシステムが含まれています。 JacketがPCTよりも優れている方法の詳細については、http://accelereyes.com/compareをご覧ください。 – arrayfire

2

Parforは、複数のGPUを利用するのに役立ちますが、1つのGPUは使用できません。一つのGPUは一度に一つのことしかできないので、一つのGPU上のparforや一つのGPU上のparforはまったく同じ効果を(あなたが見ているように)達成します。

ジャケットは、複数の操作を組み合わせてより効率的に実行し、より多くの機能を備えているため、より効率的ですが、ほとんどの部門ではすでにジャケットではなく並列コンピューティングツールボックスが使用されています。あなたはデモを試してみることができます。

gpumatに関する経験はありません。

パラレルコンピューティングツールボックスはますます向上していますが、必要なのは大きなマトリックス操作です。GPUは同じことを何回もうまくやっているので、コードを何らかの形で1つの操作にまとめるか、各操作を十分大きくする必要があります。 1e4行列の集合ではなく、少なくとも1e4の要素を持つ大きな行列ではありますが、少なくとも並列の〜10000ものの必要性について話しています。

私は、並列コンピューティングツールボックスを使用すると、かなりのインラインCUDAコードが有効であることがわかります(まだかなり限られています)。カーネルをインライン化し、matlabコードをカーネルに変換する方が良いでしょう。