我正在使用 OpenCL C++ API 绑定,又名
cl.hpp
。我有一个缓冲区,即 cl::buffer。缓冲区是通过传递大小来构造的,并且它不应该只是一些原始指针。我期待 Buffer::size()
或 Buffer::num_bytes()
作为一种方法,但这根本不存在。
那么,如何获取缓冲区的大小?
OpenCL 缓冲区使用不透明的手柄固定在引擎盖下;并且可以使用某种查询机制请求有关缓冲区的信息。这有点麻烦,不幸的是 -
Buffer.cpp
的实现还有一些不足之处 - 因为它使用了一个输出参数。
考虑编写一个小辅助函数:
size_t size_in_bytes(cl::Buffer const & buffer) {
size_t size = 0;
cl_int result = buffer.getInfo(CL_MEM_SIZE, &soize);
if (err != CL_SUCCESS) throw cl::Error(err, __func__);
return result;
}
如果您想知道幕后发生了什么,那就是:(非 C++,底层)OpenCL API 函数
clGetMemObjectInfo
:
extern CL_API_ENTRY cl_int CL_API_CALL
clGetMemObjectInfo(
cl_mem memobj,
cl_mem_info param_name,
size_t param_value_size,
void * param_value,
size_t * param_value_size_ret);
在您的情况下,param_name 将为
CL_MEM_SIZE
,返回参数为 param_value
。