我已经有一个应用程序接收输入图像,将它们复制到GPU,然后将一些CUDA过滤器应用于该图像。所以,当我想实现一个新的过滤器时,我只编写过滤器本身(即内核),因为CPU-GPU复制逻辑已经存在。
现在我想尝试使用Halide为CUDA编写图像过滤器,我遇到一个问题,即代表输入图像的Halide :: Buffer在CPU上分配,因此我必须更改现有的复制逻辑。
是否有任何方法可以使用GPU上已有的数据初始化Halide :: Buffer,并避免额外的复制。
答案 0 :(得分:1)
是的,您可以使用Halide :: Buffer(nullptr,... sizes ...)构造函数构造一个没有正确大小的主机分配的缓冲区,然后调用Buffer :: device_wrap_native将cuda指针与它