你可以在GPU上使用opencl分配比设备内存更大的缓冲区吗?

时间:2011-03-09 19:38:01

标签: opencl

是否可以分配大于设备内存的缓冲区(假设是GPU)?

我很确定这个:

clCreateBuffer(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,sizeof(float) * DATA_SIZE, inputdata, NULL);

不起作用。但这不应该起作用吗?:

clCreateBuffer(context,CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR,sizeof(float) * DATA_SIZE, inputdata, NULL);

我似乎无法使用我的NVIDIA QUADRO FX 3800,但我听说其他人成功分配了比ATI卡上的设备内存更大的缓冲区。

2 个答案:

答案 0 :(得分:3)

通常,您不能分配大于CL_DEVICE_MAX_MEM_ALLOC_SIZE的缓冲区,该缓冲区通常小于CL_DEVICE_GLOBAL_MEM_SIZE。我不知道如何在不将主机内存切换成多个cl缓冲区的情况下绕过这种限制。

答案 1 :(得分:0)

这是不可能的。由于物理限制,OpenCL库无法真正分配缓冲区,OpenCL库对代码主题一无所知,需要将其拆分以进行处理,然后将其合并。您必须使用CL_DEVICE_GLOBAL_MEM_SIZE等设备的知识编写代码来自行完成。