是否可以将函数指针传递给OpenCL 1.2中的内核?我知道它可以在C语言中完成,但是我不知道如何在OpenCL的C语言中完成。
编辑: 我想做与这篇文章中描述的相同的事情:How do you pass a function as a parameter in C?,但要对内核做。
以前,我曾使用内联函数从内核调用它们,但我希望该函数成为参数而不是硬编码。
答案 0 :(得分:1)
简短:
OpenCL的C!= C,可以将其看作是一种语法帮助,它的大部分外观类似于c,但是它并未涵盖所有语言细节,并且将其扩展到一定程度,并且没有提供(参见233页的规格) ,6.9 a:https://www.khronos.org/registry/OpenCL/specs/opencl-1.2.pdf)
因此,您不能这样做。
详细:
在C中传递函数指针是一种结构化代码以优化逻辑的方法。另一方面,内核不是结构化对象的关键,而是优化代码的每一行以使其最大可能效率的关键。最后,将所有内容组合到一个程序中,每个线程将执行该程序,并且内联您调用的每个函数(您没有像CPU那样的调用堆栈)。
因此,在这种情况下,您想要重新考虑要在C中实现的程序逻辑,以便针对一个或多个内核调用对其进行优化,从而消除了函数指针方法。针对函数指针方法进行优化会导致可读性问题,性能问题或code smell。
答案 1 :(得分:0)
U可以将任何数据传递到内核,但是您不能从内核调用该函数。