线程索引与CUDA之间的混淆 让我们考虑下面的语句 unsigned int tid = threadIdx.x; data[tid]= data [tid] + data[tid+1];

线程索引与CUDA之间的混淆 让我们考虑下面的语句 unsigned int tid = threadIdx.x; data[tid]= data [tid] + data[tid+1];,cuda,gpu,Cuda,Gpu,假设tid=0,则: data[0]=data[0]+data[1] 我的问题是在前面的陈述中我们有两个线程(线程0和线程1)?还是只有一个?正如Robert Crovella所说,您显示的代码是每个线程执行的代码 x是一个只读寄存器,每个线程都可以读取它以获得自己的索引。它相当于c#´´s: Environment.CurrentThread.ManagedThreadId. 线程的数量取决于启动内核的方式(三方括号) 在您的情况下,如果您使用两个线程组成的1块启动内核: My kernel

假设tid=0,则:

data[0]=data[0]+data[1]

我的问题是在前面的陈述中我们有两个线程(线程0和线程1)?还是只有一个?

正如Robert Crovella所说,您显示的代码是每个线程执行的代码

x是一个只读寄存器,每个线程都可以读取它以获得自己的索引。它相当于c#´´s:

Environment.CurrentThread.ManagedThreadId.

线程的数量取决于启动内核的方式(三方括号)

在您的情况下,如果您使用两个线程组成的1块启动内核:

My kernel<<<1,2>>>(data)
线程1执行时

Data[1] += data[2]

它创建了竞争条件

如果启动2个(或更多)线程,您将有2个线程。如果只启动1个线程,则将有1个线程。您显示的代码是每个线程将执行的代码。
Data[1] += data[2]