跨操作系统设置OpenCL环境

时间:2015-07-07 10:17:11

标签: linux windows macos opencl

我们有一个相当大的代码库,由十几个程序员在linux,windows和mac上工作。我们正在添加一些opencl代码(最初针对intel haswell),并且正在寻找如何以最小的中断对团队进行此操作的想法。我们如何安排事情,以便他们可以愉快地编译正确的opencl头文件和库?换句话说,我们可以安全地假设他们的环境允许我们设置代码库以便为每个人开箱即用?

2 个答案:

答案 0 :(得分:2)

可以做很多事情,但我写的是标准的:

在不同的操作系统上创建opencl内核的离线标准可移植中间表示(SPIR)并进行分发。 SPIR的主要目标是使应用程序开发人员能够避免以源代码形式运送内核,同时保持供应商和设备之间的可移植性。

请参阅此处以获取更多详细信息: https://software.intel.com/en-us/articles/using-spir-for-fun-and-profit-with-intel-opencl-code-builder

答案 1 :(得分:2)

不同操作系统上的OpenCL安装之间存在很多差异。处理它的最好方法是从跨平台构建系统开始 - 我个人使用CMake。最新版本的CMake包含一个用于查找标题和库的模块,因此从理论上讲,您不需要做任何特殊的事情。但是,根据我的经验,该模块编写得不够好,无法支持所有可能的SDK和操作系统。我必须添加更多位置才能查找相关文件。

找到标题和库后,您需要将opencl.lib包含在您的构建中,您应该能够通过所选的构建系统以平台独立的方式进行构建。

最后一部分是如何在代码中包含标头。基本上,cl.h在Windows和Linux与OS X之间存在差异。如果你看一下任何OpenCL示例,你会看到我的意思。你需要有一些#ifdef,我建议你隔离你自己的包含文件。

您还需要决定如何处理内核。对于任何体面的内核,您都希望将源保存在单独的文件中。我将我的内核保存在.cl文件中,然后使用STRINGIFY宏将源代码直接包含在我的CPP代码中的字符串变量中。

我希望这足以让你开始。