Halide::Буфер на GPU

У меня уже есть приложение, которое берет входные изображения, копирует их в GPU, а затем к этому изображению применяются некоторые фильтры CUDA. Итак, когда я хочу реализовать новый фильтр, я пишу только сам фильтр (т.е. ядро), так как логика копирования CPU-GPU уже есть.

Теперь я хочу попробовать Halide для написания фильтров изображений для CUDA, и я столкнулся с проблемой, что Halide::Buffer, который представляет входное изображение, выделяется на ЦП, поэтому мне придется изменить существующую логику копирования.

Есть ли способ инициализировать Halide::Buffer данными, которые уже находятся на GPU, и избежать дополнительного копирования.


person 9cvele3    schedule 12.06.2018    source источник


Ответы (1)


Да, вы можете создать буфер без выделения хоста правильного размера с помощью конструктора Halide::Buffer(nullptr, ... размеры ...), а затем вызвать Buffer::device_wrap_native, чтобы связать с ним указатель cuda.

person Andrew Adams    schedule 13.06.2018
comment
Любые подсказки о том, как получить параметр uint64_t handle для функции device_wrap_native из простого указателя устройства CUDA float* dev_a. - person 9cvele3; 14.06.2018
comment
Решил это с помощью и (uintptr_t) cast. - person 9cvele3; 18.06.2018