Optimize GPU code with nested pagemtimes
古いコメントを表示
Hello all,
I'm trying to speed up computation using the GPUs that are available to me. Right now I have two arrays, Q and W.
size(W) = (16 1 1000)
size(Q) = (16 16 1 2000)
I want to do a sudo-matrix multiplication M = W ' *Q*W to get size(M) = (1000 2000).
To do this I use two instances of pagemtimes which is able to utilize GPU. Here's the code
%%
tic
Sar_pm_gpu = zeros(num_psar_kept,2,size(shim_pm_gpu,3),'single','gpuArray');
for n =1:size(W,3)
inter_calc = pagemtimes(Q_gpu,shim_pm_gpu(:,1,n));
Sar_this_shim = squeeze(pagemtimes(shim_pm_gpu_left(:,:,n),inter_calc)); %in a test, this one is ~15% faster
[Sar_maxk, index_maxk] = max(Sar_this_shim);
Sar_pm_gpu(:,:,n)=[Sar_maxk,index_maxk];
end
With this code I get ~5x speedup vs running it on the cpu. However I'd expect it to be quite a bit faster than that. I then used nvidia-smi and the power consumption on the GPU was ~35W. For referance the resting power consumption is 30W so I don't think that this code is actually utilizing the GPU. If anyone sees a way to speed this up it would be much appriciated! (a explaination on why the GPU power consumption is so low with this posted code would also be much appriciated, I assume it has something to do with memory)
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で GPU Computing in MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!