我试图将代码的内核部分存储在3""" ,在另一个文件中。我尝试将其保存为文本文件和bin文件,并将其读入,但我没有找到它的成功。它开始给我一个错误说"""缺少,或)缺失。 "但是,如果我只是将内核代码复制粘贴到cl.Program中(它可以工作。
那么,有没有办法将长内核代码抽象到另一个文件中?这是python特有的,谢谢!
#Kernel function
prg = cl.Program(ctx, """
__kernel void sum(__global double *a, __global double *b, __global double *c)
{
int gid = get_global_id(0);
c[gid] = 1;
}
""").build()
所以内部的所有内容""" """,cl.Program()函数的第二个参数,我不想进入另一个文件。
答案 0 :(得分:2)
只需将内核代码放在纯文本文件中,然后使用open(...).read()
获取内容:
<强> foo.cl 强>
__kernel void sum(__global double *a, __global double *b, __global double *c)
{
int gid = get_global_id(0);
c[gid] = 1;
}
Python代码
prg = cl.Program(ctx, open('foo.cl').read()).build()
答案 1 :(得分:1)
如果将内核代码拆分为多个文件,则还必须将选项传递给cl.Program.build()函数。
因此,例如,如果您的内核名为“ kernel.cl”并且其中包含“ functions.h”,则OpenCL编译器将退出,并显示错误消息,即找不到“ functions.h”。要通过以下方法将build-)传递的“ -I”选项修复:
kernel_location = dirname(__file__)
kernel = open(join(kernel_location, 'kernel.cl').read()
program = cl.Program(context, kernel).build(options=['-I', kernels_location])
这假定您的python代码“ kernel.cl”和“ functions.h”位于同一目录中。
答案 2 :(得分:0)
内核代码也可以 foo.c 存储在 .c 文件中。 这样在xcode等编辑器中编辑更容易。 它可以用同样的方式阅读
prg = cl.Program(ctx, open('foo.c').read()).build()