0
我剛剛開始使用OpenCL,並且希望移植我在CUDA中使用的應用程序。我現在面臨的問題是內核的問題。 在CUDA中,我將所有內核函數都放在同一個文件中,相反,OpenCL要求用內核源代碼讀取文件,然後再做其他一些操作。3種不同內核的OpenCL應用程序
我的問題是:我可以有一個單一的文件與我所有的內核功能,然後在OpenCL生成程序或我必須爲我的每個內核函數有一個文件?
如果你舉一個小例子,這將是很好的。
我剛剛開始使用OpenCL,並且希望移植我在CUDA中使用的應用程序。我現在面臨的問題是內核的問題。 在CUDA中,我將所有內核函數都放在同一個文件中,相反,OpenCL要求用內核源代碼讀取文件,然後再做其他一些操作。3種不同內核的OpenCL應用程序
我的問題是:我可以有一個單一的文件與我所有的內核功能,然後在OpenCL生成程序或我必須爲我的每個內核函數有一個文件?
如果你舉一個小例子,這將是很好的。
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");
超!我正要問如何區分內核A和B. – BRabbit27 2013-05-14 14:53:49