我希望 arm mali midgard gpus 和 arm cpus 上的 opencl 缓冲区具有零复制行为,以便向量的数据指针和 clBuffer 在其生命周期内指向相同的位置。
我尝试过的一些事情。我为向量编写了一个自定义分配器(64 字节对齐),然后我尝试使用 cl_arm_import_memory 函数并将向量的指针传递给该函数。但问题是当我查询设备 EXT 属性时,我只看到 cl_arm_import_memory 字符串而不是 cl_arm_import_memory_host 字符串。
我还尝试先分配一个 gpu 端缓冲区,然后强制一个向量指向缓冲区的位置。但是根据 Mali guide ,gpu 端缓冲区的位置可能会发生变化,因此它可能会在多个映射期间指向不同的地址。
所以,我的问题是在 std::vector 和 OpenCL 缓冲区之间实现零复制行为的最佳方法是什么。