我有一個OpenCL內核,它在運行時從一個PTX內核字符串與clCreateProgramWithBinary
構建,然後構建。現在在稍後的時間,我正在嘗試設置內核參數。我在void *
的數組中檢索這些參數,所以我不知道每個條目的大小/類型。但是,該信息存儲在PTX內核字符串中,即。搭配:獲取OpenCL Kernel參數信息
.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字符串?