我在使用非常基本的CUDA程序时遇到了一些麻烦。我有一个程序,在主机和设备上乘以两个向量,然后比较它们。这没有问题。错误的是我正在尝试测试不同数量的线程和块以用于学习目的。我有以下内核:
__global__ void multiplyVectorsCUDA(float *a,float *b, float *c, int N){
int idx = threadIdx.x;
if (idx<N)
c[idx] = a[idx]*b[idx];
}
我称之为:
multiplyVectorsCUDA <<<nBlocks, nThreads>>> (vector_a_d,vector_b_d,vector_c_d,N);
目前我已将nBLocks
修改为1,因此我只更改了矢量大小N
和线程数nThreads
。根据我的理解,每次乘法都会有一个主题,因此N
和nThreads
应该相等。
问题如下
N=16
和nThreads<16
调用内核,但这不起作用。 (没关系)N=16
和nThreads=16
调用它,效果很好。 (再次
按预期工作)N=16
和nThreads<16
调用它时,它仍然有效!我不明白为什么最后一步不会像第一步那样失败。如果我重新启动电脑,它只会再次失败。
有没有人遇到过这样的事情或者可以解释这种行为?
答案 0 :(得分:2)
答案 1 :(得分:1)
不知道是否可以回答我自己的问题,但我发现在比较主机和设备向量时我的代码中有一个错误(代码的一部分没有发布)。抱歉给你带来不便。有人可以关闭这篇文章,因为它不会让我删除它吗?