clCreateBuffer() 永远不会失败

clCreateBuffer() never fails

本文关键字:失败 永远 clCreateBuffer      更新时间:2023-10-16

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