2013-05-14 64 views
0

我剛剛開始使用OpenCL,並且希望移植我在CUDA中使用的應用程序。我現在面臨的問題是內核的問題。 在CUDA中,我將所有內核函數都放在同一個文件中,相反,OpenCL要求用內核源代碼讀取文件,然後再做其他一些操作。3種不同內核的OpenCL應用程序

我的問題是:我可以有一個單一的文件與我所有的內核功能,然後在OpenCL生成程序我必須爲我的每個內核函數有一個文件?

如果你舉一個小例子,這將是很好的。

回答

1

OpenCL和CUDA之間唯一的區別就是CUDA允許在同一個源文件中將設備與主機代碼混合,而OpenCL則要求您將程序源作爲外部字符串加載並在運行。

但是,將許多內核函數放入單個OpenCL程序甚至放入單個OpenCL程序源字符串中絕對沒有問題。然後使用它們各自的函數名稱從程序對象中提取內核(比如C API內核對象)。

僞簡化的OpenCL的醜陋C接口:

單OpenCL的文件:

__kernel void a(...) {} 
__kernel void b(...) {} 

C文件:

source = read_cl_file(); 
program = clCreateProgramWithSource(source); 
clBuildProgram(program); 
kernel_a = clCreateKernel(program, "a"); 
kernel_b = clCreateKernel(program, "b"); 
+0

超!我正要問如何區分內核A和B. – BRabbit27 2013-05-14 14:53:49