1

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

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

如果扩展字符串 cl_arm_import_memory_host 被公开,则支持从正常的用户空间分配(例如通过 malloc 创建的那些)导入。

这些线到底是什么意思?我专门研究 Rockchip 的 RK3399 板。请帮忙。

4

1 回答 1

0

如果扩展字符串 cl_arm_import_memory_host 被暴露

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

请注意,所讨论的扩展包含多个不同的子功能:

cl_arm_import_memory
cl_arm_import_memory_host
cl_arm_import_memory_dma_buf
cl_arm_import_memory_protected

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

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

如果支持正确的功能,您可能需要 clImportMemoryARM()通过调用clGetExtensionFunctionAddressForPlatform.

然后,使用文档中的扩展功能。

于 2019-10-20T19:15:13.360 回答