For indexing in gpuArray, how can I improve my code?
1 回表示 (過去 30 日間)
古いコメントを表示
function dists = compute_distances(obj,X)%X is a matrix with 10000 X 1024
num_test=size(X, 1);
num_train=size(obj.x_train,1);
temp_dists=double(zeros(num_test,num_train));
gpu_X=gpuArray(X);
gpu_xtrain=gpuArray(obj.x_train);%obj.x_train is a matrix with 1000 X 1024
for i = 1:num_test
for j =1:num_train
tmp=X(i,:)-obj.x_train(j,:);
temp_dists(i,j)=sqrt(sum(tmp.*tmp));
end
end
dists=temp_dists;
end
My CPU code executed in 5 mins.
The GPU code executed in 25mins.
I am trying to calculate the distance, but I noticed that I can use gpuArray to improve the speed.
I have no idea why it doesn't work.
0 件のコメント
採用された回答
Joss Knight
2021 年 3 月 18 日
編集済み: Joss Knight
2021 年 3 月 18 日
Secondly, say no to loops:
Y = reshape(obj.x_train',1,[],num_train);
delta = X-Y;
dists = squeeze(sqrt(sum(delta.*delta,2)));
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で GPU Computing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!