是否可以分配大于设备内存的缓冲区(假设是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卡上的设备内存更大的缓冲区。
答案 0 :(得分:3)
通常,您不能分配大于CL_DEVICE_MAX_MEM_ALLOC_SIZE的缓冲区,该缓冲区通常小于CL_DEVICE_GLOBAL_MEM_SIZE。我不知道如何在不将主机内存切换成多个cl缓冲区的情况下绕过这种限制。
答案 1 :(得分:0)
这是不可能的。由于物理限制,OpenCL库无法真正分配缓冲区,OpenCL库对代码主题一无所知,需要将其拆分以进行处理,然后将其合并。您必须使用CL_DEVICE_GLOBAL_MEM_SIZE等设备的知识编写代码来自行完成。