我使用AMD SDK v2.5和ATI Catalyst驱动程序在我的计算机上实现了一个项目,因为我有一个ATI HD5570显卡。
我希望我的可执行文件在不同的平台上运行。 我希望能够检查是否可以在运行可执行文件的配置中找到可用的OpenCL平台。 当然配置可以有Nvidia显卡。
我通过互联网搜索但我无法找到问题的最终答案。通过我的搜索,我完全迷失了。是否有一种众所周知的部署安装客户端驱动程序的方法?是否有一种强有力的,组织良好的方法来满足所有这些需求? OpenCL不是太乱了吗?
谢谢和问候,
编辑: 简而言之,
我想为客户端计算机提供1)我的可执行文件2)任何必要的文件和DLL,我想保持这些支持文件最小化。那么客户端计算机是否有办法在不安装SDK的情况下运行我的代码? (客户端计算机可能有来自不同供应商的GPU设备)
编辑2:
客户端的需求/安装是否取决于开发人员使用的SDK?如果没有,为什么我的客户端收到getplatformID错误,即使他为他的nvidia gpu安装了最新的驱动程序?
编辑3:
如果他想运行在不同计算机(可能使用不同供应商)开发的OpenCL .exe,我的客户应该怎么做?
答案 0 :(得分:0)
如果您在系统上安装了多个版本的OpenCL,您将看到多个版本 平台。
调用clGetPlatformIDs以获取平台数量。计数将大于1.
再次调用clGetPlatformIDs以获取ID列表。
调用clGetPlatformInfo获取每个平台的信息。
接下来决定使用哪个平台,然后获取设备信息和属性。 然后建立OpenCL上下文并在所选平台和设备组合上排队并运行内核。
这是如何以及为何有效?有关ICD扩展详细信息,请参阅Khronos网站
http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt
答案 1 :(得分:0)
嗯IMHO你需要知道你计划运行的客户端计算机的硬件细节,没有通用的OpenCL.dll或atiocl.dll / atiocl64.dll nvcuda.dll,你可以将它与应用程序打包并希望一切正常。
即使你只运行CPU而不是GPU,你需要供应商提供的OpenCL.dll(openCL运行时)才能在客户端计算机中出现,然后才能尝试进行clGetPlatformIDs ......或类似的调用。
HTH