gpt4 book ai didi

c++ - 获取 OpenCL 内核参数信息

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:43 25 4
gpt4 key购买 nike

我有一个 OpenCL 内核,它在运行时使用 clCreateProgramWithBinary 从 PTX 内核字符串构建,然后构建。现在稍后,我正在尝试设置内核参数。我在 void * 数组中检索这些参数,因此我不知道每个单独条目的大小/类型。但是,该信息存储在 PTX 内核字符串中,即。与:

.visible .entry my_kernel(
.param .u64 param_1,
.param .u32 param_2,
.param .f64 param_3
)

我可以使用

正确查询参数的数量
clGetKernelInfo(kernel, CL_KERNEL_NUM_ARGS, sizeof(cl_uint), &num_args, NULL);

但是,我还需要知道每个参数的大小,以便将其正确传递给 clSetKernelArg 调用。据我了解,我可以通过以下方式查询来获取每个参数的大小:

char name_buff[100];
clGetKernelArgInfo(kernel, current_index, CL_KERNEL_ARG_TYPE_NAME, 100 * sizeof(char), &name_buff, NULL);

但是该调用失败,错误代码为 CL_KERNEL_ARG_INFO_NOT_AVAILABLE。直觉上,这对我来说没有意义,因为该信息清楚地存储在内核中,即使我还没有专门设置这些参数。

这是正确的行为吗?除了解析 PTX 字符串之外,还有其他方法可以获取该信息吗?

最佳答案

根据 clGetKernelArgInfo仅当程序是使用 clCreateProgramWithSource 构建并使用选项 -cl-kernel-arg-info 构建时,参数信息才可用。

Kernel argument information is only available if the program objectassociated with kernel is created with clCreateProgramWithSource andthe program executable is built with the -cl-kernel-arg-info optionspecified in options argument to clBuildProgram or clCompileProgram.

也就是说,某些实现(例如 Intel HD)会在没有选项的情况下生成信息,甚至会将其保留在二进制文件中,以便 clCreateProgramWithBinary 程序也可以获取它。唉,NVidia 的驱动程序似乎没有这样做 [[ 更新:2021 年末,我注意到 NVidia 的“二进制”(实际上是 PTX 文本)中也有一些输出;比较.meta 部分 ]]: .您是否可以临时解析 PTX 以额外获取您需要的信息?

关于c++ - 获取 OpenCL 内核参数信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42854602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com