我使用1kB .png
文件(即2048x2048 numpy array
)来测试我的PyCuda
计划,并显示该程序耗时 1.57s 分配数据并将其复制到设备。
这么长时间这是正常的吗?
我想知道PyCuda
和Cuda 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)
答案 0 :(得分:2)
不,PyCUDA(以你使用它的方式)和" native"之间的性能差异可以忽略不计。 CUDA。
PyCUDA驱动程序模块是一个围绕CUDA驱动程序API的非常薄的包装器,您应该期望它们执行相同的操作。上下文建立和内存分配是昂贵的操作,特别是在Windows WDDM平台上,看起来你所测量的只是标准延迟和设置开销。