部署OpenCL应用程序?

时间:2014-02-28 14:43:05

标签: c++ opencl

我目前正在学习OpencL,并且发现它有点难以理解它是如何工作的。 我正在使用MinGW编译器和ATI APP SDK。 当我运行目标时,我收到错误消息

enter image description here

我没有将任何OpenCL.dll放在与我的应用程序相同的文件夹中。 现在在Windows上搜索一下我可以在

中找到这个dll
C:/Windows/SysWOW64
C:/Windows/System32/DriverStore/...
C:/Windows/System32
C:/Program Files(x86)/AMD APP SDK /...

所以我的问题是我应该如何部署我的应用程序? 我应该在我的应用程序中分发OpenCL.dll吗?

4 个答案:

答案 0 :(得分:5)

反对意见:您应该从不在您的应用程序中重新分发OpenCL.dll!它属于系统文件夹,只能由来自平台提供商(Apple,NVIDIA,AMD,Intel等)的OpenCL驱动程序安装。如果您的系统没有安装它,那么将自己的应用程序与您的应用程序一起发送将不会使它运行得更好,因为您没有OpenCL平台可以找到它。

答案 1 :(得分:3)

您的应用程序无法找到clReleaseDevice的原因是您将应用程序编写到OpenCL 1.2标头,但您的计算机上只有一个OpenCL 1.1运行时。您无法在OpenCL 1.1运行时调用OpenCL 1.2 API。我建议使用OpenCL 1.1标头,除非您只在OpenCL 1.2设备上运行。它将使您的代码在OpenCL 1.1平台和设备上运行时保持安全。

答案 2 :(得分:2)

是的,您应该在应用中分发所有非标准dll。您可以将其放在与应用程序相同的文件夹中,这样可以轻松卸载应用程序,只需删除该文件夹即可。或者,如果您使用安装程序,则将其放在目标系统的系统文件夹(使用安装程序)中。通常,一个好的安装程序应该能够确定系统目标文件夹。

Windows将首先在可执行路径中搜索dll,然后在系统路径中搜索。你可以阅读here。所以它通常对你的应用程序没有区别。除了你的应用程序加载会延长一点点。

答案 3 :(得分:2)

是的,根据SDK documentation中的“hello world”示例,您应该在路径上的某个位置安装OpenCL.dll。它需要将软件调用连接到设备上运行的内核。

请注意,一般情况下,Windows根据PATH environment variable查找.dll文件(查看当前目录/系统目录后)