打算将所有可用的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 );
所以问题是为什么它适用于指定的任何内存量?
答案 0 :(得分:2)
如果OpenCL平台具有惰性内存分配(几乎每个平台都这样做),我可能会发生这种情况。我猜一些OpenCL平台只是检查你所请求的内容是否可以在clCreateBuffer
上分配,而你的可能不会。您可能会在第一个实际使用缓冲区的OpenCL函数上遇到错误,例如clEnqueueWriteBuffer()
等。您的OpenCL平台是什么?