我在使用非常基本的CUDA程序时遇到了一些麻烦。我有一个程序在主机和设备上乘以两个向量,然后比较它们。这工作没有问题。什么是错误的是,我试图测试不同数量的线程和块为学习目的。我有以下的内核:向量乘法程序中奇怪的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
它仍然工作!
我不明白为什么最后一步不会失败像第一个。如果我重新启动我的电脑,它只会再次失败。
有没有人遇到以前这样的事情,也可以解释这种现象?
只需将此响应标记为答案,然后即可关闭。 – 2010-07-03 20:12:13
ok,ty,现在可以关闭了。 – kirbuchi 2010-07-05 20:27:37