2017-06-15 31 views
0

我目前正在分发OpenCL程序(在线编译)的过程中。OpenCL构建:串联内核代码的优势

现在我的内核代码位于内核编译期间读取的*.cl文件中。我认为也可以将内核源代码转换为字符串文字,这可以直接读取,而不是为了相同的目的而读取。

我的问题是:stringfying内核代码的优势是什么?

+0

有可能是像'@ replace_me @'部件和一个可以与动态地改变的值替换它们并重新编译使用不同的参数,例如局部数组大小相同的代码(本地阵列大小必须保持不变,以便您可以在需要本地数组的不同大小时重新编译)。 '__local float data [@replace_me _ @];' –

+0

我建议你把代码放在代码中的字符串中。它比打开文件更容易使用。 – DarkZeros

+0

@huseyintugrulbuyukisik:使用编译器定义传输那些常量基元('-DSIZE = NUM​​')?会不会更好? –

回答

1

优点:

  • 无需处理IO。如果你必须支持多个文件系统,这可能会很痛苦(Windows,Linux等)。
  • 更容易为用户,可执行文件只有1个文件。
  • 如果有人编辑.cl文件,则可能会出现问题。
  • 更容易编译和发货。

实施例:

const char *KernelSource = "\n" \ 
"__kernel void square(     \n" \ 
" __global float* input,     \n" \ 
" __global float* output,    \n" \ 
" const unsigned int count)    \n" \ 
"{           \n" \ 
" int i = get_global_id(0);    \n" \ 
" if(i < count)       \n" \ 
"  output[i] = input[i] * input[i]; \n" \ 
"}           \n"; 

program = clCreateProgramWithSource(context, 1, (const char **) &KernelSource, NULL, &err); 
+2

缺点是,如果你使用字符串,每当你改变你的内核源代码时,你必须重新编译你的主机程序。如果你在文件上有内核,它可以独立编译。 – Ruyk