OpenCL/CPU.测试 OpenCL 框架是否可用



我正在开发一个混合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 平台也一切正常

最新更新