我试图向同事展示我可以用OpenCL做的事情,但执行不会在她的计算机上运行。一些libopencl.so
(或类似)文件丢失(即她没有安装OpenCL)。所以我可能相当基本(Linux)的问题是,我如何包含所有必要的so
文件,我的小C
+ OpenCL
程序也将运行在没有OpenCL的机器上?如何包含OpenCL库以生成独立应用程序?
回答
正如Damon的评论已经指出的那样,这是不可能的,因为每种设备都有自己的供应商,并且该供应商拥有自己的OpenCL实现。但是,如果您想要做的只是简单地将OpenCL应用程序的“便携”副本在大多数Linux计算机上运行,那么就有办法实现这一点。
下载AMD APP SDK(当前版本2.4)。我将假设它的64位版本,但对于32位或其他版本号应该几乎相同,只需更改相应的字符串即可。
将SDK解压缩到应用程序可执行文件的子目录中。例如,如果应用程序位于$ HOME/myapp中,那么SDK文件应该位于$ HOME/myapp/AMD-APP-SDK-v2.4-lnx64中。
将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很好,上面的脚本当然可以更好,处理程序的参数并自动找出脚本的位置。但它应该显示如何做到这一点的总体思路。
嗨Quantumboredom,感谢您付出的努力。我在NVIDIA上开发,但我会尝试将您的步骤调整到NVIDIA SDK。 – Framester 2011-04-08 17:00:58
我没有Nvidia卡,但是AFAIK Nvidia将CUDA/OpenCL运行时组件与他们的驱动程序捆绑在一起,并且由于必须安装Nvidia的驱动程序才能在Nvidia GPU上运行OpenCL,因此无法进行此操作。如果您希望应用程序在Nvidia GPU上运行,那么Nvidia的驱动程序必须正常安装。然而,使用Nvidia的OpenCL SDK开发和编译的OpenCL应用程序应该像我描述的那样在便携式解决方案上运行(但显然使用CPU来代替)。 – Quantumboredom 2011-04-08 17:22:32
- 1. Maven:如何生成独立应用程序?
- 2. 如何编写应用程序以独立于数据库?
- 3. Qt独立应用程序不生成输出文件
- 4. 如何为独立应用程序调用存储库方法?
- 5. 如何区分Web应用程序或独立应用程序?
- 6. 独立Python应用程序
- 7. 独立Web应用程序
- 8. 独立.NET应用程序
- 9. C++独立应用程序
- 10. PostgreSQL独立应用程序
- 11. 独立PHP应用程序
- 12. PHP独立应用程序
- 13. 如何打包独立的xulrunner应用程序
- 14. 如何制作VS.NET中的独立应用程序包?
- 15. 如何将Scrapy脚本打包到独立应用程序中?
- 16. Birt:如何在独立Java应用程序中从rtpdesign文件生成PDF
- 17. 使用GNU编译器生成独立MEX文件,包括库
- 18. 如何制作独立的数据库应用程序?
- 19. 如何生成“自包含”静态库?
- 20. 独立反应应用程序中的Web API调用生成CORS错误
- 21. 如何从Java执行完全独立的应用程序。像独立进程
- 22. Android:独立线程与独立应用程序
- 23. 在python应用程序中包含库
- 24. 如何在Wicket应用程序中生成独特的链接?
- 25. 在py2app生成的应用程序中包含opencv
- 26. 在应用程序生成的图像中包含字幕
- 27. 是否可以从另一款iPhone/iPad独立应用程序启动iPhone/iPad独立应用程序?
- 28. 如何从独立的* .java源文件生成包结构?
- 29. PAR包装器可以生成独立的脚本吗?
- 30. 如何包含在ASP.NET应用程序
可能没有办法做到这一点,至少不是以远程便携或可靠的方式。目标系统必须安装正确的OpenCL,因为OpenCL可以运行在多种不同的硬件组件上(并且也是异构的)。它不足以复制_some library_。通常,OpenCL作为带有显示驱动程序的“奖金安装”。如果情况并非如此,作为最后手段,您的朋友可以安装AMD免费提供的x86软件实现(搜索流SDK)。 – Damon 2011-04-08 10:50:41