【有奖问答】从显存分批导入数据到共享存储器出错

我模拟的数据量可能有点大,共享存储器不够,所以我想分block导入,逐个计算。。

目前还只是分两个block也就是分两次导入,第一次导入的时候数据和从内存拷贝到显存的一致,但是第二次导入的时候就有问题了,数据发生了变化。。

代码如下,还望帮忙看看啊,我找不到什么问题

++]__global__ static void GPU(float4* pos,float4* vel,int n)
{
__shared__ float4 Sh_pos[N];//added
__shared__ float4 Sh_vel[N];//added

const int tid=threadIdx.x;
const int bid=blockIdx.x;
const int gtid=bid*blockDim.x+tid;
float3 acc = {0.0f, 0.0f, 0.0f};
float4 myPosition = pos[gtid];

int i,tile;

for (i = 0, tile = 0; i < n; i += blockDim.x, tile++) 
{
int idx = tile * blockDim.x + threadIdx.x;

Sh_pos[threadIdx.x] = pos[idx];
Sh_vel[threadIdx.x] = vel[idx];

//Sh_pos[threadIdx.x].x = pos[idx].x;
//Sh_pos[threadIdx.x].y = pos[idx].y;
//Sh_pos[threadIdx.x].z = pos[idx].z;
//Sh_vel[threadIdx.x].x = vel[idx].x;
//Sh_vel[threadIdx.x].y = vel[idx].y;
//Sh_vel[threadIdx.x].z = vel[idx].z;
__syncthreads();

int j=threadIdx.x;

printf("%d--Host--%f--%f--%f\n",j,pos[j].x,pos[j].y,pos[j].z);

acc = calculate(myPosition, Sh_pos,acc, n);//****************************edit
__syncthreads();
}

你用的模拟模式?
模拟模式不能处理好__syncthreads()的