关于global函数调用的问题

请问为什么两次调用gather函数,第一次结果不正确,而第二次却正确呢?而验证显示每次调用均为no error……难道同一个global函数不能频繁调用?
main()
{
gather<<<BLOCK_NUM,THREAD_NUM>>>(dev_rhoe,&dev_np[0],dev_x_e,dev_pos_e);
cudaDeviceSynchronize();
printf(“gather %s\n”,cudaGetErrorString(cudaGetLastError()));
printf(“Sync: %s\n”, cudaGetErrorString(cudaThreadSynchronize()));
gather<<<BLOCK_NUM,THREAD_NUM>>>(dev_rhoi,&dev_np[1],dev_x_i,dev_pos_i);
cudaDeviceSynchronize();
printf(“gather %s\n”,cudaGetErrorString(cudaGetLastError()));
printf(“Sync: %s\n”, cudaGetErrorString(cudaThreadSynchronize()));
cudaMemcpy(rhoe,dev_rhoe,ngsizeof(float),cudaMemcpyDeviceToHost);
cudaMemcpy(rhoi,dev_rhoi,ng
sizeof(float),cudaMemcpyDeviceToHost);
for (int j=0; j<=nc; j++)
{
rhoh[j] += rhoe[j]q[0]/dx+rhoi[j]q[1]/dx;
printf(“%f\t%f\n”,rhoe[j],rhoi[j]);
}
}
global void gather(float
rho,int
np,floatx,intpos)
{
int i=threadIdx.x+blockIdx.x*blockDim.x;
rho[i]=0;
if(i<*np)
{
int k=pos[i];
atomicAdd(&rho[k],1.0-x[i]);
atomicAdd(&rho[k+1],x[i]);
}
__syncthreads();
}

内核函数可以反复调用,所以问题应该出现在程序是不是某个地方有错误,还请仔细检查代码!

问题解决了,谢谢!

问题解决了,谢谢!