2017-03-17 30 views
0

我有一個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字符串?

回答

0

隨着你告訴我們你到底在想什麼,它很難弄清楚發生了什麼。我的代表不允許我評論你的帖子...所以如果我想幫忙,我不得不發表一個答案。

讓我們回顧一下https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/clGetKernelArgInfo.html

它清楚地表明此錯誤代碼無關索引超出範圍或其他問題。因此不能找到內核參數信息。你是否嘗試過每個索引0-> 2?請嘗試clSetKernelArg(...),然後查看是否有幫助,如果發生clSetKernelArg錯誤,則會更接近爲什麼不起作用,否則請嘗試先用clSetKernelArg做同樣的事情。

https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clSetKernelArg.html

找不到2.0+文檔此功能,但我還沒有與它注意到迴歸。