本帖最后由 古月 于 2013-5-27 17:10 编辑
for(int i=0;i<=(T-1)/2;i++)
{
//////////////////////////判断可见性,在CPU上执行///////////////////////////
cout<<"计算 ib="<<i<<" 时角系数,网格总数2626"<<endl;
cout<<"计算 ib="<<Mb01-1-i<<" 时角系数,网格总数2626"<<endl;
soild_jxs_panduan(i);
soild_jxs_panduan(Mb01-1-i);
virtual_jxs_panduan(i);
virtual_jxs_panduan(Mb01-1-i);
////////////////////判断可见性,在cpu上执行//////////////////
/////////////////////////计算角系数,在GPU上执行//////////////////////////////
checkCudaErrors(cudaMemcpy(nd_jx11+T*i,jx11[0]+T*i , sizeof(float)*T,
cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(nd_jx11+T*(T-1-i),jx11[0]+T*(T-1-i) , sizeof(float)*T,
cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(nd_jx11+T*i,jx11[0]+T*i , sizeof(float)*T,
cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(nd_jx12+G*(T-1-i),jx12[0]+G*(T-1-i) , sizeof(float)*G,
cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy(nd_jx12+G*i,jx12[0]+G*i , sizeof(float)*G,
cudaMemcpyHostToDevice));
solid_jxs_jisuan<<<grid1,threads1>>>(i,d_jaj);
solid_jxs_jisuan<<<grid1,threads1>>>(T-1-i,d_jaj);
virtual_jxs_jisuan<<<grid2,threads2>>>(i,d_jaj);
virtual_jxs_jisuan<<<grid2,threads2>>>(T-1-i,d_jaj);
//////////////////////////计算角系数,在Gpu上执行///////////
}
我感觉这个例子能实现cpu与GPU的异步计算,cpu判断逻辑的能力好,所以判断可见性由他计算,gpu计算的能力强,所以他计算角系数。gpu在算 ib=i时的角系数时,cpu在判断ib=i+1时的可见性吗,还是此时cpu在等待gpu返回?
|