または、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 オーバーロードがあることを確認しました)