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

我正在研究混合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)...

如果我尝试在上面描述的情况下启动它.

注意:
实际上,至少对于nvidia应该是可能的.我在这个场景中测试了来自nvidia GPU SDK的oclDeviceQuery,它可以正常工作.只需将“opencl.dll”格式的Windows / System文件夹复制到应用程序文件夹中即可.我不知道为什么我的应用程序在相同的情况下崩溃.

先感谢您.

解决方法

OpenCL.dll对于所有实现都是一样的,所以不要手动加载库@beonmies提出(这是更好但更复杂),你可以随身携带一个.它只提供访问已安装平台的界面.

要检查是否安装了任何平台,您应该使用

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,NULL);
    // ........
    delete platform;
    return 0;
}

因为即使没有安装OpenCL平台,您的代码也会说一切正常

相关文章

tag,untag以及交换机的各种端口模式是网络工程技术人员调试交换机时接触最多的概念了,然而笔者发现在...
预备知识:Tag,untag以及交换机的各种端口模式是网络工程技术人员调试交换机时接触最多的概念了,然而...
交换机三种端口模式Access、Hybrid和Trunk的理解       untag就是普通的ethernet报文,普通PC机的网...
华为:Access、Hybrid和Trunk三种模式的理解预备知识: Tag,untag以及交换机的各种端口模式是网络工程...
转自 http://blog.sina.com.cn/s/blog_3fcc38fc010007w4.html 1. Access端口 (1)收到一个二层帧 (2)...
    一,Access、Hybrid和Trunk三种模式的理解 Tag,untag以及交换机的各种端口模式是 网络工程技术人...