线程索引与CUDA之间的混淆 让我们考虑下面的语句 unsigned int tid = threadIdx.x; data[tid]= data [tid] + data[tid+1];
假设tid=0,则:线程索引与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
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]