让我们考虑以下陈述
unsigned int tid = threadIdx.x;
data[tid]= data [tid] + data[tid+1];
假设tid = 0所以:
data[0]=data[0]+data[1]
我的问题是在前面的语句中我们有2个线程(线程0和线程1)?还是只有一个?
答案 0 :(得分:1)
正如Robert Crovella所说,您展示的代码是每个线程执行的内容。
ThreadIdx.x是一个只读寄存器,每个线程都可以读取它以获取自己的索引。这相当于c#:
Environment.CurrentThread.ManagedThreadId.
您拥有的线程数量取决于您启动内核的方式(三重支架)
在这种情况下,如果你用1个两个线程的块启动内核:
My kernel<<<1,2>>>(data)
您将执行线程0
Data[0] += data[1]
线程1执行时
Data[1] += data[2]
创造了竞争条件