clCreateBuffer()永远不会失败

时间:2017-06-21 18:00:59

标签: c++ c memory opencl gpgpu

打算将所有可用的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 );

所以问题是为什么它适用于指定的任何内存量?

1 个答案:

答案 0 :(得分:2)

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