cudafree()耗时的疑惑!
小弟写了个小程序,程序中的某个kernel函数是要在某个循环里执行,而kernel函数里申请了很多用于中间计算的gmem,这些gmem在每次循环时都要发生数值的变化,然后在每次循环之后都要释放显存,如下:
for()
{
kernel();
}
kernel()
{
double* d_a ;... ...
cudamalloc();... ...
cudamemset();... ...
cudamemcpy();
......
cudafree();... ...
}
问题是我在测试kernel耗时的时候发现时间几乎全部耗在了第一个调用的cudafree()上面,数据量很大的时候,这部分耗时及其可观。(其他的cudafree()耗时几乎全部为零)
请问有没有那位碰到过类似的额问题,应该怎样解决才好???
另外我自己试着在循环之外申请内存,这样在所有的循环结束之后再释放显存,但是又出现一个问题,就是每次的cudamemcpy()的耗时突然变大,而这在修改之前几乎是不耗时的。
感谢高手指点!!!!!!!!!