zoukankan      html  css  js  c++  java
  • OpenCL入门:(一:Intel核心显卡OpenCL环境搭建)

    组装的电脑没带独立显卡,用的是CPU自带的核显,型号是Intel HD Graphics 530,关于显卡是否可以使用OpenCL,可以下载GPU-Z软件查看。

    本文在Windows 10 64位系统上搭建OpenCL开发环境。

    一、准备文件

    将显卡驱动更新到最新版本,Windows 驱动中自动包含了OpenCL驱动,Linux系统需要另外下载OpenCL驱动。

    VS2012-VS2017任意版本。

    下载Intel SDK for OpenCL applications,注意选择Windows平台,然后注册帐号后即可下载。

    二、测试环境

    下载示例项目,解压后打开CapsBasic目录下的sln文件(高版本自动升级项目)

    上一步安装正确的话VS工具栏会有如下菜单

    image

    点击[生成]-[生成解决方案],不会有错误出现。

    image

    运行结果可能如下(不同机器输出结果不同)

    image

    三、从模板新建项目

    上面是直接下载别人已经配置好的项目,这里测试新建一个项目,打开VS,新建项目如下图:

    image

    添加一个新文件HelloOpenCL.cpp,在文件中添加如下代码:

    #include <cstdlib>
    #include <iostream>
    #include <iomanip>
    #include <cstring>
    #include <cassert>
    
    #include <CL/cl.h>
    
    /*
     * 修改自官方示例intel_ocl_caps_basic_win,用于测试手工配置项目
    */
    int main()
    {
        using namespace std;
    
        const char* required_platform_subname = "Intel";
        
        //函数返回值,CL_SUCCESS表示成功
        cl_int err = CL_SUCCESS;
    
        // 判断返回值是否正确的宏
    #define CAPSBASIC_CHECK_ERRORS(ERR)        
        if(ERR != CL_SUCCESS)                  
        {                                      
        cerr                                   
        << "OpenCL error with code " << ERR    
        << " happened in file " << __FILE__    
        << " at line " << __LINE__             
        << ". Exiting...
    ";                   
        exit(1);                               
        }
    
    
        // 遍历系统中所有OpenCL平台
        cl_uint num_of_platforms = 0;
        // 得到平台数目
        err = clGetPlatformIDs(0, 0, &num_of_platforms);
        CAPSBASIC_CHECK_ERRORS(err);
        cout << "Number of available platforms: " << num_of_platforms << endl;
    
        cl_platform_id* platforms = new cl_platform_id[num_of_platforms];
        // 得到所有平台的ID
        err = clGetPlatformIDs(num_of_platforms, platforms, 0);
        CAPSBASIC_CHECK_ERRORS(err);
    
    
        //列出所有平台
        cl_uint selected_platform_index = num_of_platforms;
    
        cout << "Platform names:
    ";
    
        for (cl_uint i = 0; i < num_of_platforms; ++i)
        {
            size_t platform_name_length = 0;
            err = clGetPlatformInfo(
                platforms[i],
                CL_PLATFORM_NAME,
                0,
                0,
                &platform_name_length
            );
            CAPSBASIC_CHECK_ERRORS(err);
    
            // 调用两次,第一次是得到名称的长度
            char* platform_name = new char[platform_name_length];
            err = clGetPlatformInfo(
                platforms[i],
                CL_PLATFORM_NAME,
                platform_name_length,
                platform_name,
                0
            );
            CAPSBASIC_CHECK_ERRORS(err);
    
            cout << "    [" << i << "] " << platform_name;
    
            if (
                strstr(platform_name, required_platform_subname) &&
                selected_platform_index == num_of_platforms // have not selected yet
                )
            {
                cout << " [Selected]";
                selected_platform_index = i;
            }
    
            cout << endl;
            delete[] platform_name;
        }
        delete[] platforms;
        return 0;
    }

    运行结果如下:

    image

    四、后续

    后续会增加GPU计算相关文章。

  • 相关阅读:
    zlib编译不过(Error A2070)解决方法(转)
    error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CStaticLink::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint) (转)
    MFC does not support WINVER less than 0x0501 解决方案(转)
    【程序打包工具 Inno Setup】转
    【Visual Studio】简单内存泄漏检测方法 解决 Detected memory leaks! 问题(转)
    各种版本QT下载地址与VS2013+QT5.3.1环境搭建过程(转)
    【Windows Message】MFC 通过F5,刷新桌面
    [bzoj]3343 教主的魔法
    NOIP2012 国王游戏
    NOIP模拟赛 路面修整
  • 原文地址:https://www.cnblogs.com/Reyzal/p/7389993.html
Copyright © 2011-2022 走看看