首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL/CPU。测试OpenCL框架是否可用

OpenCL/CPU。测试OpenCL框架是否可用
EN

Stack Overflow用户
提问于 2012-05-11 16:54:44
回答 1查看 2.3K关注 0票数 5

我正在开发一个混合的OpenCL应用程序,它必须在运行时决定是否使用GPU实现。

有没有一种跨平台(即intel、nvidia和ati)的方法来dermine,无论运行应用程序的计算机是否支持opencl框架,而不会导致应用程序崩溃?一开始,我只为Windows平台进行开发。

代码语言:javascript
复制
#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;
}

目前我得到的错误是:

代码语言:javascript
复制
The application was unable to start correctly (0xc000007b)...

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

注:实际上,至少对于nvidia来说,这应该是可能的。在这种情况下,我测试了nvidia GPU SDK中的oclDeviceQuery,它工作正常。只需将"opencl.dll“从Windows/System文件夹复制到应用程序文件夹中即可。我不知道为什么我的应用程序会在同样的情况下崩溃。

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-11 23:11:16

OpenCL.dll对于所有的实现都是相同的,所以你可以随身携带一个,而不是像@talonmies建议的那样手动加载库(这更好,但更复杂)。它只是提供了一个接口来访问已安装的平台。

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

代码语言:javascript
复制
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平台,您的代码也会显示一切正常

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10548353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档