打算使用所有可用的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平台是什么?

09-20 10:28