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