在arm mali midgard gpus上的零复制缓冲区分配?

问题描述 投票:0回答:1

我希望对arm mali midgard gpus和arm cpus上的opencl缓冲区具有零复制行为,以便向量的数据指针和clBuffer在其生命周期内指向同一位置。

我尝试过的一些东西。我为向量编写了一个自定义分配器(64字节对齐),然后尝试使用cl_arm_import_memory函数并将向量的指针传递给该函数。但是问题是当我查询设备的EXT属性时,我只看到cl_arm_import_memory字符串,而不是cl_arm_import_memory_host字符串。

我还尝试过先分配一个gpu侧缓冲区,然后强制向量指向该缓冲区的位置。但是根据《马里指南》,gpu侧缓冲区的位置可能会更改,从而可能在多次映射期间指向单独的地址。

所以,我的问题是在std :: vector和OpenCL缓冲区之间实现零复制行为的最佳方法是什么。

我希望对arm mali midgard gpus和arm cpus上的opencl缓冲区具有零复制行为,以便向量的数据指针和clBuffer在其生命周期内指向相同的位置。某些...

opencl gpgpu hpc mali
1个回答
0
投票

我认为您正在混合两个不相关的概念,零拷贝和共享虚拟内存。零拷贝不能保证物理内存在CPU和GPU的同一地址上都可见-它们可以在CPU和GPU的虚拟地址空间中以不同的方式映射。如果希望物理内存在GPU和CPU中具有相同的虚拟地址,则需要共享虚拟内存(SVM)。这需要OpenCL 2.x并通过clSVMAlloc()分配缓冲区。如果您的供应商不只提供OpenCL 2.x 1.x,那么您就不走运了-您可以拥有零个复制缓冲区,但不能拥有SVM。

© www.soinside.com 2019 - 2024. All rights reserved.