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工具栏会有如下菜单
点击[生成]-[生成解决方案],不会有错误出现。
运行结果可能如下(不同机器输出结果不同)
三、从模板新建项目
上面是直接下载别人已经配置好的项目,这里测试新建一个项目,打开VS,新建项目如下图:
添加一个新文件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...\n"; \ 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:\n"; 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; }运行结果如下:
四、后续
后续会增加GPU计算相关文章。