2

私のプログラムには2つのカーネルがあり、2番目のカーネルはすでにアップロードされた入力データと最初のカーネルからの結果を使用する必要があるため、メモリ転送を節約できます。これをどのようにアーカイブしますか?

これが私のカーネルを起動する方法です:

result = gpuarray.zeros(points, dtype=np.float32)  

kernel(
    driver.In(dataT),result,np.int32(points),
    grid = (blocks,1),
    block = (block_size, 1, 1),
)
4

1 に答える 1

1

pycuda では、明示的に要求しない限り、デバイスとの間でデータを転送しません。たとえば、次のようにメモリを割り当て、一部のデータを GPU に転送するとします。

result = float64(zeros( (height,width) )
result_device = gpuarray.to_gpu(result)

変数 result_device は、GPU 内のデータへの参照です。CPU へのメモリ転送を発生させることなく、result_device を他のカーネルに渡すことができます。この場合、次を呼び出すと、メモリ転送が再び発生します。

result = result_device.get()
于 2012-02-11T14:14:30.320 に答える