我已经有一个应用程序来获取输入图像,将其复制到GPU,然后将某些CUDA过滤器应用于该图像。因此,当我想实现一个新的过滤器时,我只写过滤器本身(即内核),因为CPU-GPU复制逻辑已经存在。
现在,我想尝试使用Halide为CUDA编写图像过滤器,并且遇到一个问题,即代表输入图像的Halide :: Buffer在CPU上分配了,因此我必须更改现有的复制逻辑。
有什么方法可以使用GPU上已经存在的数据来初始化Halide :: Buffer,并避免其他复制。
最佳答案
是的,您可以使用Halide :: Buffer(nullptr,... size ...)构造函数构造没有正确大小的主机分配的缓冲区,然后调用Buffer :: device_wrap_native来将cuda指针与其关联。