我是CUDA的初学者,并尝试获取共享内存中元素的总和,以下是我的内核
__global__ void columnaddition(DataIn data, double** shiftedData)
{
int u = blockIdx.y;
int v = threadIdx.x;
int xu = blockIdx.x;
extern __shared__ double columnShiftedData[];
columnShiftedData[v] = *(*(shiftedData + (v*data.V) + u) + xu);
}
这里基于threadIdx和blockIdx.x以及blockIdx.y我将数据加载到共享内存。根据我的理解,只有一个线程可以参与获得总和,因为它应该是顺序的。但是现在内核已经使用V(假设)线程启动了,所以我的问题是如何有效地获得总和以及块内其他线程会发生什么。