我的 cuda 内核会在块执行结束时生成一些馈送到主机的内容。
骨架如下。
写入数据的 host_data 被分配为主机映射内存。
host_data_count 也是映射内存,表示产生的数据数量。
我使用的 GPU 是带有 Fermi 架构和 CC 2.0 的 GTX 580。
__global__ void kernel(host_data, host_data_count)
{
__shared__ int shd_data[1024];
__shared__ int shd_cnt;
int i;
if (threadIdx.x == 0)
shd_cnt = 0;
__syncthreads();
while ( ... )
{
if (something happens)
{
i = atomicAdd(&shd_cnt, 1);
shd_data[i] = d;
}
}
__syncthreads();
if (threadIdx.x == 0)
{
i = atomicAdd(host_data_count, shd_cnt);
memcpy(&host_data[i], shd_data, shd_cnt * 4);
}
}
我在这个内核代码中缺少什么?
有人可以帮忙吗?