clCreateBuffer() 永远不会失败

clCreateBuffer() never fails

打算为我的算法使用所有可用的 GPU 内存,因此检索它的数量:

clGetDeviceInfo( ..., CL_DEVICE_GLOBAL_MEM_SIZE, ... );

这是 536543232 字节,然后在 GPU 上分配它:

clCreateBuffer( gpuContext, CL_MEM_READ_WRITE, 536543232, NULL, & errcode_ret );

想知道为什么它会起作用,如果尝试分配更多内存它是否会失败?尝试了 100 场演出,它仍然有效!

clCreateBuffer( gpuContext, CL_MEM_READ_WRITE, 100000000000, NULL, & errcode_ret );

所以问题是为什么它可以在指定的任何内存量下工作?

如果 OpenCL 平台有惰性内存分配(几乎每个平台都这样做),我可能会发生这种情况。我想有些 OpenCL 平台只是检查您请求的内容是否可以在 clCreateBuffer 上分配,而您的平台可能不会。您可能会在实际使用缓冲区的第一个 OpenCL 函数上遇到错误,例如 clEnqueueWriteBuffer() 等。您的 OpenCL 平台是什么?