2017-05-31 11 views
0

私はPyCudaプログラムをテストするために1kB .pngファイル(すなわち2048x2048 numpy array)を使用しています。このプログラムは約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プラットフォームでは高価な操作であり、測定しているのは標準の待ち時間とセットアップオーバーヘッドであるようです。

関連する問題