2012-02-03 4 views
2

Моя программа имеет два ядра, а второе ядро ​​должно использовать уже загруженные входные данные и результаты из первого ядра, поэтому я могу сохранить передачи памяти. Как мне это сделать?Как сообщить PyCUDA повторно использовать память из более раннего ядра?

Это, как я запускаю мои ядра:

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

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

ответ

1

В PyCuda вы не будете передавать данные и из устройства, если явно не потребуете. Например, если выделить память и передать некоторые данные в GPU с:

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

Переменная result_device является ссылкой на данные в GPU. Вы можете передать result_device в любое другое ядро ​​без переноса памяти обратно в CPU. В этом случае передача памяти произойдет еще раз, когда вы звоните:

result = result_device.get()