怎么将一个过长的Kernel分次运行?

qq_26793325 2016-11-10 02:13:31
请教各位大神:
我现在有一个kernel,里面每一个thread要做迭代运算。当迭代次数过大的时候,我的程序结果就会完全出错(全零,说明kernel完全没有工作),并且我给kernel计时得到的结果是0.
我之前遇到the launch time out and was terminated的错误,但是这个并没有报错,而是直接给了我一个错误的结果。
然后我就想把这个kernel分成多次运行,减少每一次的迭代次数,像这样:
kernel1<<<1,tn>>>(d_state, obsval, d_initval, d_funpara, d_inv, d_C);
cudaThreadSynchronize();
printf("first kernel finished. Take a break here\n");
kernel2<<<1,tn>>>(d_state, d_mcmc_arr_total, obsval, d_initval, d_funpara, d_inv, d_C);
kernel2继续kernel1的结果。按道理这样的话我也可以再叠加第三个kernel,但是我加了第三个之后又遇到相同的问题,运行时间为0,结果错误。我的问题是:
1.我这样分割kernel运行的做法可行吗?
2.我在第一次kernel运行中得到的一个迭代结果,在没有cudafree掉的情况下是不是仍旧储存在device中,让我的第二个kernel可以直接使用它?
谢谢!
...全文
551 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_40640783 2017-10-15
  • 打赏
  • 举报
回复
是的,会存在DEVICE内

580

社区成员

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

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