2017-05-31 39 views
0

我使用1kB .png文件(即2048x2048 numpy array)來測試我的PyCuda程序,它顯示程序花費了大約1.57s來分配數據並將其複製到設備。cuda - 在分配內存和將數據複製到設備的過程中,PyCuda比純Cuda慢嗎?

這是正常的需要如此長的時間?

我不知道PyCudaCuda C在分配和memcpy過程中是否有性能差異?

(使用PyCuda內核時依然用C寫的,內核執行時間爲0.17s,所以我覺得它的時間太長做準備。)

分配代碼和memcpy

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

不,在PyCUDA(以您使用它的方式)和「本地」CUDA之間的性能之間存在可忽略的差異。

PyCUDA驅動程序模塊是圍繞CUDA驅動程序API的非常薄的包裝,您應該期望它們執行相同的操作。上下文建立和內存分配是昂貴的操作,特別是在Windows WDDM平臺上,並且看起來您所測量的只是標準延遲和設置開銷。