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

标签 opencl nvidia hybrid ati

我正在开发一个混合 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来说应该是可能的。在这种情况下,我已经从 nvidia GPU SDK 测试了 oclDeviceQuery 并且它可以正常工作。只需将 Windows/System 文件夹中的“opencl.dll”复制到应用程序文件夹中即可。我不知道为什么我的应用程序在相同的情况下崩溃。

先感谢您。

最佳答案

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

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

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 平台,您的代码也会说一切正常

关于OpenCL/CPU。测试OpenCL框架是否可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548353/

相关文章:

powershell - 表达式或语句 powershell 中的意外标记 'if'

mysql - 混合 SQL 和 MongoDB 解决方案

opencl - 如何测量 OpenCL 中的寄存器使用情况

c - 不正确的结果 - Intel HD 4000 上的 OpenCL

buffer - 如何有效地交换OpenCL内存缓冲区?

c - Opencl 全局变量在线程中具有不同的值,OpenCL KERNEL

python - 更新我的 NVIDIA 版本过时错误

crash - Ubuntu 16.04 屏幕仅完全卡住鼠标移动

cuda - 指令级并行和线程级并行如何在 GPU 上工作?

c++ - 一起使用 C++ 和脚本