我有以下matlab代码:
randarray = gpuArray(rand(N,1));
N = 1000;
tic
g=0;
for i=1:N
if randarray(i)>10
g=g+1;
end
end
toc
secondrandarray = rand(N,1);
g=0;
tic
for i=1:N
if secondrandarray(i)>10
g=g+1;
end
end
toc
Elapsed time is 0.221710 seconds.
Elapsed time is 0.000012 seconds.
Run Code Online (Sandbox Code Playgroud)
1)为什么GPU上的if子句这么慢?它减慢了我对优化的所有尝试
2)我可以做些什么来解决这个限制?
谢谢
无论你是在cpu还是在gpu上做这件事,这通常是件坏事.
以下是您正在进行的操作的好方法.
N = 1000;
randarray = gpuArray(100 * rand(N,1));
tic
g = nnz(randarray > 10);
toc
Run Code Online (Sandbox Code Playgroud)
我没有PCT,我无法验证这是否真的有效(GPU支持的功能数量相当有限).
但是,如果你有夹克,你肯定能够做到以下几点.
N = 1000;
randarray = gdouble(100 * rand(N, 1));
tic
g = nnz(randarray > 10);
toc
Run Code Online (Sandbox Code Playgroud)
完全披露:我是开发Jacket的工程师之一.