【问题标题】:How to include the OpenCL libraries to produce a stand alone application?如何包含 OpenCL 库以生成独立的应用程序?
【发布时间】:2011-08-01 09:59:12
【问题描述】:

我试图向一位同事展示我可以用 OpenCL 做哪些花哨的事情,但这位高管无法在她的计算机上运行。缺少一些 libopencl.so(或类似的)文件(即她没有安装 OpenCL)。所以我可能相当基本的(Linux)问题是,我如何包含所有必要的so 文件,我的小C + OpenCL 程序也将在没有 OpenCL 的机器上运行?

【问题讨论】:

  • 可能没有办法做到这一点,至少不是以远程便携或可靠的方式。目标系统必须正确安装 OpenCL,因为 OpenCL 可以在多种不同的硬件组件上运行(而且,也可以在异构上运行)。复制 some library 是不够的。通常,OpenCL 作为显示驱动程序的“附加安装”提供。如果不是这种情况,作为最后的手段,您的朋友可以安装 AMD 免费提供的 x86 软件实现(搜索 stream SDK)。

标签: linux linker opencl


【解决方案1】:

正如 Damon 的评论已经指出的那样,这是不可能的,因为每种设备都有自己的供应商,并且该供应商有自己的 OpenCL 实现。但是,如果您只想拥有一个可在大多数 Linux 计算机上运行的 OpenCL 应用程序的“便携式”副本,那么有一种方法可以实现。

  1. 下载 AMD APP SDK(当前版本 2.4)。我假设它是 64 位版本,但对于 32 位或其他版本号应该几乎相同,只需更改相应的字符串即可。

  2. 将 SDK 解压缩到应用程序可执行文件的子目录中。例如,如果应用程序在 $HOME/myapp 中,那么 SDK 文件应该在 $HOME/myapp/AMD-APP-SDK-v2.4-lnx64 中。

  3. 从 icd-registration.tgz 存档中提取 ICD 文件到名为 icd 的文件夹中。所以我们应该有 $HOME/myapp/AMD-APP-SDK-v2.4-lnx64/icd/amdocl32.icd(和 amdocl64.icd)。

现在我们有了 AMD APP SDK 的便携式安装的工作原理,它应该可以在大多数 x86 处理器上运行。我们只需要在启动应用程序之前设置适当的环境变量。由于我不是 GNU/Linux 人员并且不太了解 bash,因此我已经硬编码了我们可移植目录的路径。想必能以某种方式自动获取当前位置,这样显然会好很多。

#!/bin/bash
DIRECTORY=$HOME/myapp
export OPENCL_VENDOR_PATH=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64/icd
export AMDAPPSDKROOT=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64
export LD_LIBRARY_PATH=$AMDAPPSDKROOT/lib/x86_64:$LD_LIBRARY_PATH
./myapp

上面的脚本应该放在你应用程序的根目录下,即$HOME/myapp/scriptname。因此,我们可以通过执行 ./scriptname 来启动可移植应用程序。正如我所说,因为我不太了解 bash,所以上面的脚本肯定会更好,处理程序的参数并自动找出脚本的位置。但它应该显示如何做到这一点的一般想法。

【讨论】:

  • 嗨 Quantumboredom,感谢您的努力。我在 NVIDIA 上开发,但我会尽量让您的步骤适应 NVIDIA SDK。
  • 我没有 Nvidia 卡,但是 AFAIK Nvidia 将 CUDA/OpenCL 运行时组件与其驱动程序捆绑在一起,并且由于必须安装 Nvidia 的驱动程序才能使 OpenCL 在 Nvidia GPU 上运行,所以没有以便携的方式做到这一点。如果您希望应用程序在 Nvidia GPU 上运行,则必须正常安装 Nvidia 的驱动程序。然而,使用 Nvidia 的 OpenCL SDK 开发和编译的 OpenCL 应用程序应该像我描述的那样在便携式解决方案上运行(但显然要使用 CPU)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 2019-08-19
  • 2015-09-26
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多