Lon*_*kli 5 nvidia ati opencl hybrid
我正在开发一个混合 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;
}
Run Code Online (Sandbox Code Playgroud)
目前我收到错误:
The application was unable to start correctly (0xc000007b)...
Run Code Online (Sandbox Code Playgroud)
如果我尝试在我上面描述的情况下启动它。
注意:实际上,至少对于 nvidia 来说应该是可能的。我已经在这个场景中测试了来自 nvidia GPU SDK 的 oclDeviceQuery 并且它工作正常。只需将 Windows/System 文件夹中的“opencl.dll”复制到应用程序文件夹中。我不知道为什么我的应用程序在相同的情况下崩溃。
先感谢您。
所有实现都是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;
}
Run Code Online (Sandbox Code Playgroud)
因为即使没有安装 OpenCL 平台,您的代码也会显示一切正常
归档时间: |
|
查看次数: |
2269 次 |
最近记录: |