2017-03-17 43 views
1

我在OpenCL的內核下面的代碼:OpenCL中內核指針工作

char* read_data(char* data) { 
    return data; 
} 

__kernel void some_function(__global char* source_data, __global char* output_data) { 
    char *ptr = read_data(source_data); // <--- doesn't work 
    char *ptr2; 
    ptr = read_data(ptr2); // <--- works 
} 

當我叫它爲source_data,我得到錯誤-11(CL_BUILD_PROGRAM _FAILURE)功能read_data不工作時我使用clBuildProgram來構建它。 如果我寫

global char *ptr3 = source_data; 

直接在內核函數,它的工作原理,但停止時,我刪除global工作。但是,將global添加到read_data函數並沒有幫助。

我使用的是OpenCl 1.2,所以它應該允許使用char *(不像1.0)。

任何想法如何使它工作?

+1

使函數參數__global和名稱的函數read_global_data。也使ptr __global –

+0

@huseyintugrulbuyukisik謝謝你,讓ptr全球幫助! – vgeclair

回答

1

所以,我能夠做3件事全球解決這個問題:

  1. 功能read_data
  2. 此功能
  3. ,而我將返回的值的變量參數

以下工作正常:

global char* read_data(global char* data) { 
    return data; 
} 

__kernel void some_function(__global char* source_data, __global char* output_data) { 
    global char *ptr = read_data(source_data); 
}