从显存分批导入数据到共享存储器出

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

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

首先是global里面的第二次的数据就不对了,其次是第二次拷贝到共享存储器的又和第二次global里的的不一样

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

__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--global--%f--%f--%f\n",j,pos[j].x,pos[j].y,pos[j].z);
  //从这一句输出显存里的数据,
printf("%d--shared--%f--%f--%f\n",j,Sh_pos[j].x,Sh_pos[j].y,Sh_pos[j].z);
//从这一句输出共享存储器里面的数据,

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

第一次数据的截图[attach]663169[/attach]
第二次数据[attach]663170[/attach]

[ 本帖最后由 hnuzhoulin 于 2010-5-5 20:37 编辑 ]