我有一个代码从CUDA示例到atomicAdd单个变量
__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);
}
Run Code Online (Sandbox Code Playgroud)
它对我有用.但我正在扩展我的代码,所以我想将数组而不是数字传递给内核
__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);
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译,错误信息是:
错误:没有重载函数"atomicAdd"匹配参数列表参数类型的实例是:(int,int)
更换:
atomicAdd(data[z],1);
Run Code Online (Sandbox Code Playgroud)
同
atomicAdd(&data[z],1);
Run Code Online (Sandbox Code Playgroud)
如果仔细观察,在第一种情况下,您将指针作为atomicAdd()的第一个参数.
| 归档时间: |
|
| 查看次数: |
2892 次 |
| 最近记录: |