matlab if语句与CUDA

RNs*_*ost 3 matlab cuda

我有以下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)我可以做些什么来解决这个限制?

谢谢

Pav*_*ili 6

无论你是在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的工程师之一.

  • @RRs_Ghost:*特别*由于一系列原因而避免if/then与CUDA,但一般来说,避免if循环中的语句,并在Matlab中避免循环. (2认同)