打算为我的算法使用所有可用的 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 平台是什么?
我是一名优秀的程序员,十分优秀!