我正在开发一个混合OpenCL应用程序,该应用程序必须在运行时决定是否使用GPU实现。
是否有一种跨平台(即英特尔、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)...
如果我尝试在上面描述的情况下启动它。
铌:实际上,至少对于英伟达来说,这应该是可能的。我已经在这种情况下从nvidia GPU SDK测试了oclDeviceQuery,它可以正常工作。只需将"opencl.dll"表单Windows/系统文件夹复制到应用程序文件夹中。我不知道为什么我的应用程序在同样的情况下崩溃。
提前谢谢你。
所有实现的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 平台也一切正常