线程索引与CUDA之间的混淆

时间:2017-03-31 23:26:07

标签: cuda gpu

让我们考虑以下陈述

unsigned int tid = threadIdx.x;
data[tid]= data [tid] + data[tid+1];

假设tid = 0所以:

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

我的问题是在前面的语句中我们有2个线程(线程0和线程1)?还是只有一个?

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]

创造了竞争条件