在 OpenCL 1.2 中使用cl_arm_import_memory扩展的零复制缓冲区 - arm mali mi



我希望分配一个向量并使用它的数据指针在GPU上分配零复制缓冲区。有这个cl_arm_import_memory扩展可用于执行此操作。但我不确定它是否支持所有马里米德加德 OpenCL 驱动程序。

我正在通过这个链接,我对以下几行感到非常困惑:-

如果扩展字符串cl_arm_import_memory_host暴露,则从正常用户空间分配(例如通过 malloc 创建的分配(导入是 支持。

这些台词到底是什么意思?我专门研究瑞芯微的RK3399板。请帮忙。

如果扩展字符串cl_arm_import_memory_host公开

这意味着您需要使用clGetDeviceInfo()函数检查 OpenCL 设备的CL_DEVICE_EXTENSIONS属性。将返回的字符串拆分为扩展名(它们用空格分隔(,然后检查"cl_arm_import_memory_host"是否是这些字符串之一。

请注意,有问题的扩展由多个不同的子功能组成:


cl_arm_import_memorycl_arm_import_memory_hostcl_arm_import_memory_dma_buf

cl_arm_import_memory_protected

如果至少有一个其他扩展,将报告cl_arm_import_memory还报告了字符串。

因此,如果您的实现支持导入主机内存,它将同时列出cl_arm_import_memorycl_arm_import_memory_host

如果支持正确的功能,则可能需要获取指向扩展的指针 通过调用clGetExtensionFunctionAddressForPlatformclImportMemoryARM()函数。

然后,使用已记录的扩展功能。

最新更新