我想学习如何使用 OpenCL API,但是我对如何“安装”用于开发的 OpenCL 有点困惑。谷歌上的各种文章相互矛盾,我怀疑有些已经过时了。
我的理解是 Khronos 集团提供规范,然后各家公司提供符合该规范的 SDK。
据我了解,您需要:
不同的 SDK 之间有区别吗?据我所知,选项是 Intel、AMD 或 Nvidia。我读过关于您使用的 SDK 是否重要的相互矛盾的信息 - 一些消息来源说 SDK 仅供开发人员使用,生成的二进制文件可以在任何支持 OpenCL 的硬件上运行,而其他消息来源说使用特定的 SDK 锁定您的应用程序成为一个供应商的硬件。是哪个?我选择使用哪个 SDK 是否重要,是否有我可以链接到的非供应商特定 OpenCL 库?
OpenCL SDK 是不同的。它们提供工具来简化开发、附加功能、示例和文档。每个制造商都会包含最适合他们硬件的东西,但在编译应用程序时它们都应该兼容。
链接到应用程序中的“.lib”“.a”OpenCL 库(SDK 中提供的库)在所有情况下都是相同的(除非它们具有不同的版本,1.1、1.2、2.0)。 这是因为库并不是真正的库,而只是真实驱动程序中真实函数的存根。这也解释了为什么标头都是相同的,它们都链接到同一个库。
所有的app,不管是什么SDK,编译后应该是一样的。
就 nVIDIA 而言,除了它们的 OpenCL.lib 之外,它们还提供了一些简化平台获取的功能(oclGetPlatformID()在 oclUtils.h 中)等,这些功能在其他驱动程序上不可用,建议不要使用它们,除非您希望最终不得不将另一个 nVIDIA 专有库打包到您的应用程序中。
但是如果你真的想成为通用的,那么你应该去动态库加载(dload(),LoadLibrary())。这将使您的应用程序即使在系统甚至没有安装 OpenCL 的情况下也能正常工作。
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |