linux - 跨操作系统设置 OpenCL 环境

标签 linux windows macos opencl

我们有一个相当大的代码库,由两打程序员在 linux、windows 和 mac 上工作。我们正在添加一些 opencl 代码(最初针对 intel haswell),并且正在寻找如何在对团队造成最小干扰的情况下执行此操作的想法。我们如何安排事情才能让它们都能愉快地针对正确的 opencl 头文件和库进行编译?换句话说,我们可以安全地假设他们的环境是什么,以允许我们设置代码库以开箱即用地为每个人工作?

最佳答案

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

找到 header 和库后,您需要将 opencl.lib 包含到您的构建中,您应该能够通过您选择的构建系统以独立于平台的方式执行此操作。

最后一部分是如何在您的代码中包含 header 。基本上,cl.h 在 Windows 和 Linux 与 OS X 上的位置有所不同。如果您查看任何 OpenCL 示例,您就会明白我的意思。您需要围绕它设置一些 #ifdef,我建议您将其隔离到您自己的包含文件中。

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

我希望这足以让您开始。

关于linux - 跨操作系统设置 OpenCL 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31265797/

相关文章:

css - Google 字体无法在 Windows 浏览器中加载,但会在 Mac 浏览器中加载

c++ - OpenGL 不会绘制三角形,遵循精确的格式

macos - 如何在 OS X 中将带有 JPEG 数据的 NSData 对象转换为 CVPixelBufferRef?

linux - openwrt中几万条规则的ip规则

c++ - 无法从 ffmpeg 示例运行 transcode.c

c++ - 来自 cudaGetErrorString(err) 的未知错误

windows - 如何在 Windows 7/8/8.1(尤其是 64 位)上使用未签名的驱动程序

macos - PostgreSQL 用户配置如何在 MacOSX 上工作?

linux - gammu 不保存已发送的消息

python - 如何在python上分离latlon数据的两个区域