CUDA怎么处理while循环?

shimiaoCN 2018-05-03 08:48:48

初学CUDA,对以下代码并行化,只会处理for循环,不知道怎么处理while循环,求帮助。

源代码:

double e;
#define Data 820
void trainNetwork(){

int i,c=0,j;
do{
e=0;
for (i = 0; i < Data; ++i){
computO(i);
e+=fabs((OutputData[0]-d_out[i][0])/d_out[i][0]);
backUpdate(i);
}
printf("%d %lf\n",c,e/Data);
c++;
}while(c<TrainC && e/Data>0.001);
}


处理for循环之后,while循环并行化不知道怎么处理:

__global__ static void trainNetwork(){
__shared__ double gpu_e;
__shared__ int c ;
do{
gpu_e=0;
int index = threadIdx.x;
computO(index);
gpu_e+=fabs((gpu_OutputData[0]-gpu_d_out[index][0])/gpu_d_out[index][0]);
backUpdate(index);
printf("%d %lf\n",c,gpu_e/Data);
c++;
}while(c<TrainC && gpu_e/Data>0.001);
// __syncthreads();
}


...全文
961 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

580

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧