如何将原子添加到CUDA中的阵列的每个元素上
how to apply atomicAdd to each of element of an array in CUDA?
我有一个来自 CUDA
示例的代码tomicicAdd a iatomicAdd a单个变量
__global__ void myadd(int *data)
{
unsigned int x = blockIdx.x;
unsigned int y = threadIdx.x;
if ( (x%2==0) && (y%2==1) ) atomicAdd(data,1);
}
int main(void)
{
int *Hdt;
Hdt = (int*)malloc(sizeof(int));
// ... CUDA initialization here
myadd<<<20, 10>>>(Hdt);
cudaFree(Hdt);
}
它对我有用。但是我正在扩展代码,因此我想将数组而不是数字传递给内核
__global__ void myadd(int *data)
{
unsigned int x = blockIdx.x;
unsigned int y = threadIdx.x;
unsigned int z = threadIdx.y;
if ( (x%2==0) && (y%2==1) && (z>4) ) atomicAdd(data[z],1);
}
int main(void)
{
int *Hdt;
Hdt = (int*)malloc(sizeof(20*int));
// ... CUDA initialization here
myadd<<<20, dim3(10, 20)>>>(Hdt);
cudaFree(Hdt);
}
但没有编译,错误消息是:
错误:没有超载函数的实例" atomicadd"与 参数列表参数类型是:(int,int)
替换:
atomicAdd(data[z],1);
atomicAdd(&data[z],1);
如果您仔细看,在第一种情况下,您将指针作为第一个论点()。
相关文章:
- 从较小的阵列到较大的阵列的元素级转换
- 无法弄清楚为什么我的打印阵列要替换元素
- 扫描阵列特定次数,然后找出元素
- 返回C 中2D阵列的对角线元素总和
- 阵列中的元素不正常地变化
- 我有一系列阵列.可以从一个数组中阅读一些元素和另一个数组中的其他元素
- 阵列中的元素一直无意中变化
- 如果在C 中已经回荡了另一个相同值的阵列元素,请防止循环回荡
- 将阵列的元素变为结构
- 阵列操作,复制最后一个元素
- C 在指针阵列中删除第一个元素,以效应后来的元素
- 在阵列C 中删除和转移剩余的元素
- 将多维阵列甚至元素传输到一个维数阵列
- 防止C 中阵列元素的构建/初始化
- C 使用坐标结构的访问阵列元素
- 在阵列中没有覆盖元素
- 动态分配的结构阵列具有动态分配的结构阵列元素
- 均匀的缓冲阵列元素不正确
- 如何显示非对角线二维阵列元素
- 结合阵列元素Arduino