2011-04-08 47 views
3

我试图向同事展示我可以用OpenCL做的事情,但执行不会在她的计算机上运行。一些libopencl.so(或类似)文件丢失(即她没有安装OpenCL)。所以我可能相当基本(Linux)的问题是,我如何包含所有必要的so文件,我的小C + OpenCL程序也将运行在没有OpenCL的机器上?如何包含OpenCL库以生成独立应用程序?

+2

可能没有办法做到这一点,至少不是以远程便携或可靠的方式。目标系统必须安装正确的OpenCL,因为OpenCL可以运行在多种不同的硬件组件上(并且也是异构的)。它不足以复制_some library_。通常,OpenCL作为带有显示驱动程序的“奖金安装”。如果情况并非如此,作为最后手段,您的朋友可以安装AMD免费提供的x86软件实现(搜索流SDK)。 – Damon 2011-04-08 10:50:41

回答

2

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

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

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

  3. 将ICD文件从icd-registration.tgz存档解压缩到名为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很好,上面的脚本当然可以更好,处理程序的参数并自动找出脚本的位置。但它应该显示如何做到这一点的总体思路。

+0

嗨Quantumboredom,感谢您付出的努力。我在NVIDIA上开发,但我会尝试将您的步骤调整到NVIDIA SDK。 – Framester 2011-04-08 17:00:58

+1

我没有Nvidia卡,但是AFAIK Nvidia将CUDA/OpenCL运行时组件与他们的驱动程序捆绑在一起,并且由于必须安装Nvidia的驱动程序才能在Nvidia GPU上运行OpenCL,因此无法进行此操作。如果您希望应用程序在Nvidia GPU上运行,那么Nvidia的驱动程序必须正常安装。然而,使用Nvidia的OpenCL SDK开发和编译的OpenCL应用程序应该像我描述的那样在便携式解决方案上运行(但显然使用CPU来代替)。 – Quantumboredom 2011-04-08 17:22:32

相关问题