正如标题中提到的,我发现函数cudaMallocPitch()
消耗大量时间,也cudaMemcpy2D()
消耗相当多的时间。
这是我正在使用的代码:
cudaMallocPitch((void **)(&SrcDst), &DeviceStride, Size.width * sizeof(float), Size.height);
cudaMemcpy2D(SrcDst, DeviceStride * sizeof(float),
ImgF1, StrideF * sizeof(float),
Size.width * sizeof(float), Size.height,
cudaMemcpyHostToDevice);
实现时Size.width
和Size.height
都是4800,耗时cudaMallocPitch()
约150-160ms(以防万一多次测试),cudaMemcpy2D()
耗时约50ms。
CPU和GPU之间的内存带宽似乎不可能如此有限,但是我看不到代码中的任何错误,那是什么原因呢?
顺便说一句,我使用的硬件是 Intel I7-4770K CPU 和 Nvidia Geforce GTX 780(相当不错的硬件,没有错误)。