cuda - 在分配内存和将数据复制到设备的过程中,PyCuda是否比纯Cuda慢?

时间:2017-05-31 06:23:32

标签: cuda pycuda

我使用1kB .png文件(即2048x2048 numpy array)来测试我的PyCuda计划,并显示该程序耗时 1.57s 分配数据并将其复制到设备。

这么长时间这是正常的吗?

我想知道PyCudaCuda C在分配和memcpy过程中是否有性能差异?

(由于内核在使用PyCuda时仍然用C编写,内核执行时间约为0.17秒,所以我觉得做准备花了太长时间。)

分配和记忆的代码

img_gpu = cuda.mem_alloc(img.nbytes)
cuda.memcpy_htod(img_gpu, img)

result_gpu = cuda.mem_alloc(result.nbytes)
cuda.memcpy_htod(result_gpu, result)

disX = np.array(disX).astype(np.int32)
disY = np.array(disY).astype(np.int32)

disX_gpu = cuda.mem_alloc(disX.nbytes)
cuda.memcpy_htod(disX_gpu, disX)

disY_gpu = cuda.mem_alloc(disY.nbytes)
cuda.memcpy_htod(disY_gpu, disY)

1 个答案:

答案 0 :(得分:2)

不,PyCUDA(以你使用它的方式)和" native"之间的性能差异可以忽略不计。 CUDA。

PyCUDA驱动程序模块是一个围绕CUDA驱动程序API的非常薄的包装器,您应该期望它们执行相同的操作。上下文建立和内存分配是昂贵的操作,特别是在Windows WDDM平台上,看起来你所测量的只是标准延迟和设置开销。