【发布时间】:2017-04-05 18:07:48
【问题描述】:
我是 OpenCL 方面的新手。
编译 OpenCL 项目的最佳方法是什么?
-
使用受支持的编译器(
GCC或Clang):当我们使用编译器时 像
gcc或clang,我们如何控制这些选项?他们是 必须在源代码中设置,或者,同样是正常的 编译流程我们可以在命令行上传递它们。查看Khornos-Manual-1.2,有几个options为cl_int clBuildProgram提供优化。 :gcc|clang -O3 -I<INCLUDES> OpenCL_app.c -framework OpenCL OPTION -lm其实,我试过这个并收到一个错误:
gcc: error: unrecognized command line option '<OPTION>' -
或者,使用
openclc:我见过有人使用
openclc编译器使用 Makefile。
我想知道哪种方法最好(如果 实际上有两种不同的方式),以及我们如何控制 使用不同的编译时选项。
【问题讨论】:
-
您的意思是之前完成的另一个内核编译的二进制输出吗?它缩短了编译时间,尤其是对于 fpgas。你在第一个问题中问什么?是否需要添加其他 C 程序的头文件?
-
@huseyintugrulbuyukisik。我的问题很笼统。编译opencl应用程序(主机+内核)的正确方法是什么。是使用 gcc/llvm 和 opencl 库还是使用 openclc。
-
您需要包含来自操作系统的 opencl lib-dll 文件,以便 C++ 绑定工作和编译。 opencl 内核编译只需给 cl 程序和 cl 内核对象一个字符串并在运行时而不是编译时编译即可完成。如果你有二进制文件,那么你可以从一开始就准备好 opencl。如果安装了 gpu 驱动程序,您可以在某些文件夹中找到它们,但我不记得了。
-
那么
openclc有什么用呢? -
它在您的程序之外编译,因此您可以使用它的结果文件在您的程序中运行内核,而无需进行 opencl 编译。例如,我没有使用它,因此在我的计算机中编译 3 个设备需要 10-20 秒(在运行时),因为我将内核程序作为字符串和 opencl.dll 提供了必要的函数,它在我想要的时候编译那个字符串,但一个 fpga 需要几个小时来编译,所以他们预先编译一次并发布它,这样用户就不用等待几个小时来计算
标签: gcc opencl llvm compiler-options opencl-c