1

または、Parfor ループを gpuArray 操作に変換する方法は?

当面の問題: parfor を介して複数の CPU (ワーカー) に分散された大規模なデータ マトリックスに対する列単位の操作。

data = 1000 x 200 matrix
[nrows, ncols] = size(data)
parfor ix = 1:ncols
     workerData = data(:,ix);
     colwiseResult(ix) = function(workerData,params);
end

では、これを効率的に GPU を利用するにはどうすればよいでしょうか。特に、問題を 1000x1000 行列 (およびそれ以上) にスケールアップする必要があるためです。

dataGPU = gpuArray(data);

しかし、GPU で列単位の操作を行う簡単な方法が見つかりません。arrayfun や bsxfun などの関数は要素ごとに動作しますが、これは関心のあるものではありません。これらは自明な並列タスクであるため、GPU で複数のプロセッサを活用することが理想的です (& parfor などの煩わしさを回避します)。

(実際には、ワーカー内の for ループを使用して、列ベクトルの各データ ポイントに対して、行列の対角化、指数、積を段階的に行う尤度計算を実行しています)。これらすべての ops に GPU オーバーロードがあることを確認しました)

4

1 に答える 1

0

このチュートリアルを見ましたか?

http://www.mathworks.ch/videos/introduction-to-gpu-computing-with-matlab-68770.html

すべての GPU がサポートされているわけではないため、まず GPU を使用できるかどうかを確認してください。その後、変数を GPU に渡すか、次のように GPU を parfor ループに含めることができます。

parfor ix = 1:10
gd=gpuDevice;
end

結局、1 つの GPU を使用することは大きな利点ではありません。詳細については、ワークステーションの詳細をお知らせください。

于 2013-08-05T14:22:19.630 に答える