如何获取 OpenCL 缓冲区的大小(以字节为单位)?

问题描述 投票:0回答:1

我正在使用 OpenCL C++ API 绑定,又名

cl.hpp
。我有一个缓冲区,即 cl::buffer。缓冲区是通过传递大小来构造的,并且它不应该只是一些原始指针。我期待
Buffer::size()
Buffer::num_bytes()
作为一种方法,但这根本不存在。

那么,如何获取缓冲区的大小?

shell command-line graphviz dot
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.