cudaFree函数对于cuda流并行的影响

有一段代码,大致框架如下(伪码中的函数省略了部分参数):

cudaStream_t stream[MAXSTREAM];
for(int i = 0; i < n; i ++)
{
   int *h_toDevice;
   cudaMallocHost((void **)&h_toDevive);
   memset(h_toDevive);

   int *d_toDevice;
   cudaMalloc(&d_toDevice);

   cudaMemcpyAsync(d_toDevice,h_toDevive,stream[i%MAXSTREAM]);

   kernelFunc<<<stream[i%MAXSTREAM]>>>();

   cudaFreeHost(h_toDevice);
   cudaFree(d_toDevice);
}

我想用若干个流并行处理一些任务。然而这样做效果很不理想,而且我发现,如果去掉cudaFree和cudaFreeHost函数,程序的运行时间会缩短到原来的十分之一以上(从100多秒缩减到10秒以内)。我怀疑是这两个函数影响了流的并行,于是我将MAXSTREAM由原来的10设置成1,也就是不存在流的并行,那么删不删这两个函数运行时间就相差无几了,都是100多s。上面的程序有什么问题呢,为什么这两个函数会阻碍流的并行呢,求大神解答!

可以尝试把内存申请和释放的时间排除在运行时间之外再测试一下。