Nsight调试问题

我的程序是有一个大的for循环里面会多次调用到kernel和cudaMemcpy,我用Nsight看运行时间的时候结果是这样的:、
首先,程序总共运行时间:
[attach]3418[/attach]

kernel函数用nsight查看的结果:

[attach]3417[/attach]

cudaMemcpy用nsight查看的结果:

[attach]3416[/attach]

这样看来,我把kernel图片里面红框的地方那个Device Time理解为kernel被循环调用3223次总共的运行时间,这样的话kernel函数的总共运行时间和cudaMemcpy的运行时间都与程序总共运行时间差不多,我理解的kernel那张图片里面的Device Time的意思对吗?这个现象如何解释?

LZ您好:

建议使用visual profiler来profile您的的程序,该工具将提供图形化的Time line统计,一目了然。

祝您好运~

用profiler得到的结果很诡异,程序前40s在时间轴上只有cudaMemcpy的时间,从40s之后才有的kernel的执行时间以及时间线,所以我才改用了Nsight工具,下面是Nsight的timeline截图,可以看到一开始就是kernel和cudaMemcpy在并行的,可是实际上,程序中没有用到流,还是说这个是我理解的不对,不能看到时间是差不多一起开始一起结束的,就看成是并行的,那么这个timeline应该怎么看呢?下面这种截图是程序一开始的部分,接下来的60余秒钟一直是以这种方式呈现在时间轴上的。

[attach]3420[/attach]

还有,程序循环调用的顺序大致是:
for()
{
cudaMemcpyHToD;
kernel;
cudaMemcpyDToH;
cudaMemcpyDToH;
}

发代码,口说无凭。

以及,一般情况下nsight和visual profiler给出的时间轴不会矛盾的。

谢谢。