我正在研究混合OpenCL应用程序,该应用程序必须在运行时决定是否使用GPU实现。
是否存在跨平台(即针对intel,nvidia和ati)的方式,无论运行应用程序的计算机是否具有opencl框架支持,而不会崩溃应用程序?一开始我只为Windows平台开发。
#include <CL/cl.h>
#include <iostream>
int main()
{
std::cout << "Start cross paltform testing" << std::endl;
cl_platform_id platform[1];
clGetPlatformIDs(1, platform, 0);
std::cout << "End cross paltform testing" << std::endl;
return 0;
}
目前我收到错误:
The application was unable to start correctly (0xc000007b)...
如果我尝试在上述情况下启动它。
NB: 实际上,至少对于nvidia应该是可能的。我在这个场景中测试了来自nvidia GPU SDK的oclDeviceQuery,它可以正常工作。只需将“opencl.dll”格式的Windows / System文件夹复制到应用程序文件夹中即可。我不知道为什么我的应用程序在相同的情况下崩溃。
提前谢谢。
答案 0 :(得分:3)
OpenCL.dll
对于所有实现都是相同的,因此不是手动将库加载为@talonmies建议(这是更好但更复杂),您可以随身携带一个。它只提供了访问已安装平台的接口。
要检查是否安装了任何平台,您应该使用
int main()
{
std::cout << "Start cross paltform testing" << std::endl;
int num_platforms;
cl_platform_id *platform;
clGetPlatformIDs(0, NULL, &num_platforms);
std::cout << "End cross paltform testing: " << num_platforms << " found" << std::endl;
// Get platform IDs (not necessary right now, for future use)
platform = new cl_platform_id[num_platforms];
clGetPlatformIDs(num_platforms, platform, NULL);
// ........
delete platform;
return 0;
}
因为即使没有安装OpenCL平台,您的代码也会说一切正常