OpenCL allcoation标志CL_MEM_USE_HOST_PTR用法不引用我的指针

时间:2016-05-17 13:25:03

标签: opencl gpu intel

我试图将标志CL_MEM_USE_HOST_PTR与OpenCL函数clCreateBuffer()一起使用,以避免多个内存分配。经过一些研究(逆向工程),我发现无论我使用什么标志,框架都会调用操作系统分配函数。

也许我的观念错了?但是从文档来看,它应该使用DMA来访问主机内存,而不是分配新内存。

我在Intel设备(HD5500)上使用opencl 1.2

1 个答案:

答案 0 :(得分:2)

在英特尔GPU上,确保分配的主机指针是页面对齐的,页面长度为*。实际上我认为缓冲区大小实际上可以是偶数个缓存行,但我总是向上舍入。

使用类似:

void *host_ptr = _aligned_malloc(align_to(size,4096),4096));

Here's a good article for this: 在“关键要点”中。

  

如果您已有数据并希望将数据加载到OpenCL中   缓冲区对象,然后使用CL_MEM_USE_HOST_PTR和分配的缓冲区   一个4096字节的边界(与页面和缓存行边界对齐)和a   总大小是64字节的倍数(缓存行大小)。

您也可以使用CL_MEM_ALLOC_HOST_PTR并让驱动程序处理分配。但要获得指针,您必须映射并取消映射(但不需要复制)。