通过更改线程数更改CUDA代码输出的说明

通过更改线程数更改CUDA代码输出的说明,cuda,nvidia,Cuda,Nvidia,我想确定有多少x^2+1形式的数字是素数,对于1=1) { 如果(tid

我想确定有多少x^2+1形式的数字是素数,对于1=1) { 如果(tid对于(int j=0;j您不能在任何当前GPU上每个块运行2048个线程:

#define THREADS 2048
...
solve<<<BLOCKS, THREADS>>>(N, dev);
                  ^
                  |
                2048 is illegal here
#定义线程2048
...
求解(N,dev);
^
|
2048在这里是非法的
您在内核调用上做得不正确,因此代码不会告诉您发生了此错误

因此,在每个块2048个线程的情况下,您的内核甚至没有执行(您的结果应该是假的)

在将线程减半的情况下,超时可能是由于内核执行时间太长,导致线程启动

我试着用
=16和
线程
=1024运行代码


当N=100000时,在我的M2050 GPU上的总执行时间约为1.5秒。当N=1000000时,执行时间约为75秒。当N=10000000时,执行时间非常长。

在任何当前GPU上,每个块不能运行2048个线程:

#define THREADS 2048
...
solve<<<BLOCKS, THREADS>>>(N, dev);
                  ^
                  |
                2048 is illegal here
#定义线程2048
...
求解(N,dev);
^
|
2048在这里是非法的
您在内核调用上做得不正确,因此代码不会告诉您发生了此错误

因此,在每个块2048个线程的情况下,您的内核甚至没有执行(您的结果应该是假的)

在将线程减半的情况下,超时可能是由于内核执行时间太长,导致线程启动

我试着用
=16和
线程
=1024运行代码

N=100000时,在M2050 GPU上的总执行时间约为1.5秒。N=1000000时,执行时间约为75秒。N=10000000时,执行时间非常长