详细程序注解学OpenCL一 环境配置和入门程序
2013-11-03 11:07
441 查看
本专栏是通过注解程序的方法学习OpenCL,我觉得一个一个地去抠原理也不是办法,干脆直接学习程序,然后把相关原理都直接注解到程序语句当中。
原创地址:/article/1624008.html
2. 还是在nvidia网站下载好CUDA开发包,安装好
3. 如果默认安装路径的话,路径应该是在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0
4. 打开这个目录会发现里面有include和lib文件夹,这就是我们需要配置在visual studio中的文件
5. 打开visual studio(版本基本都无关系,我用的是vs2012),新建一个win32空项目。按下alt+F7打开项目属性,也可以点击项目文件右键,选择属性。
6. 在属性页里面找到“C/C++”的“常规”项,点击,右边有“附加包含目录”,然后编辑,添加目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include
7.在属性页里面找到“连接器”,点击其“常规”项,右边有“附加库目录”,然后也是编辑,添加目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\Win32,如果是64位系统可以是:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64。
8. 在属性页里找到“常规”项, 右边“附加依赖项”,编辑,添加lib文件:OpenCL.lib
9. 然后就可以新建源文件,在源文件里面添加相关的OpenCl程序,就可以调试OpenCL程序了。
下面就可以开始学习程序了。
每个电脑的输出结果不一样的,我电脑的输出结果是:
原创地址:/article/1624008.html
一开始要配置好环境,我的是nvidia,所以就按照我的电脑举例,AMD应该也差不多。
1. 首先要到nvidia网站下载适合你显卡的最新驱动,安装好2. 还是在nvidia网站下载好CUDA开发包,安装好
3. 如果默认安装路径的话,路径应该是在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0
4. 打开这个目录会发现里面有include和lib文件夹,这就是我们需要配置在visual studio中的文件
5. 打开visual studio(版本基本都无关系,我用的是vs2012),新建一个win32空项目。按下alt+F7打开项目属性,也可以点击项目文件右键,选择属性。
6. 在属性页里面找到“C/C++”的“常规”项,点击,右边有“附加包含目录”,然后编辑,添加目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include
7.在属性页里面找到“连接器”,点击其“常规”项,右边有“附加库目录”,然后也是编辑,添加目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\Win32,如果是64位系统可以是:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64。
8. 在属性页里找到“常规”项, 右边“附加依赖项”,编辑,添加lib文件:OpenCL.lib
9. 然后就可以新建源文件,在源文件里面添加相关的OpenCl程序,就可以调试OpenCL程序了。
下面就可以开始学习程序了。
下面是个入门程序,已经注释好了,注释包括了基本原理的解析,可以通过直接阅读和调试程序学习OpenCL了。
本程序是读取电脑中的支持OpenCL的硬件nvidia和intel和AMD等信息,然后显示在屏幕上。#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #ifdef MAC #include <OpenCL/cl.h> #else #include <CL/cl.h> #endif int main() { /* Host data structures */ cl_platform_id *platforms; //每一个cl_platform_id 结构表示一个在主机上的OpenCL执行平台,就是指电脑中支持OpenCL的硬件,如nvidia显卡,intel CPU和显卡,AMD显卡和CPU等 cl_uint num_platforms; cl_int i, err, platform_index = -1; /* Extension data */ char* ext_data; size_t ext_size; const char icd_ext[] = "cl_khr_icd"; //要使platform工作,需要两个步骤。1 需要为cl_platform_id结构分配内存空间。2 需要调用clGetPlatformIDs初始化这些数据结构。一般还需要步骤0:询问主机上有多少platforms /* Find number of platforms */ //返回值如果为-1就说明调用函数失败,如果为0标明成功 //第二个参数为NULL代表要咨询主机上有多少个platform,并使用num_platforms取得实际flatform数量。 //第一个参数为1,代表我们需要取最多1个platform。可以改为任意大如:INT_MAX整数最大值。但是据说0,否则会报错,实际测试好像不会报错。下面是步骤0:询问主机有多少platforms err = clGetPlatformIDs(5, NULL, &num_platforms); if(err < 0) { perror("Couldn't find any platforms."); exit(1); } printf("I have platforms: %d\n", num_platforms); //本人计算机上显示为2,有intel和nvidia两个平台 /* Access all installed platforms */ //步骤1 创建cl_platform_id,并分配空间 platforms = (cl_platform_id*) malloc(sizeof(cl_platform_id) * num_platforms); //步骤2 第二个参数用指针platforms存储platform clGetPlatformIDs(num_platforms, platforms, NULL); /* Find extensions of all platforms */ //获取额外的平台信息。上面已经取得了平台id了,那么就可以进一步获取更加详细的信息了。 //一个for循环获取所有的主机上的platforms信息 for(i=0; i<num_platforms; i++) { /* Find size of extension data */ //也是和前面一样,先设置第三和第四个参数为0和NULL,然后就可以用第五个参数ext_size获取额外信息的长度了。 err = clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS, 0, NULL, &ext_size); if(err < 0) { perror("Couldn't read extension data."); exit(1); } printf("The size of extension data is: %d\n", ext_size);//我的计算机显示224. /* Access extension data */ //这里的ext_data相当于一个缓存,存储相关信息。 ext_data = (char*)malloc(ext_size); //这个函数就是获取相关信息的函数,第二个参数指明了需要什么样的信息,如这里的CL_PLATFORM_EXTENSIONS表示是opencl支持的扩展功能信息。我计算机输出一大串,机器比较新(专门为了学图形学而购置的电脑),支持的东西比较多。 clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS, ext_size, ext_data, NULL); printf("Platform %d supports extensions: %s\n", i, ext_data); //这里是输出生产商的名字,比如我显卡信息是:NVIDIA CUDA char *name = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME, ext_size, name, NULL); printf("Platform %d name: %s\n", i, name); //这里是供应商信息,我显卡信息:NVIDIA Corporation char *vendor = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, ext_size, vendor, NULL); printf("Platform %d vendor: %s\n", i, vendor); //最高支持的OpenCL版本,本机显示:OpenCL1.1 CUDA 4.2.1 char *version = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION, ext_size, version, NULL); printf("Platform %d version: %s\n", i, version); //这个只有两个值:full profile 和 embeded profile char *profile = (char*)malloc(ext_size); clGetPlatformInfo(platforms[i], CL_PLATFORM_PROFILE, ext_size, profile, NULL); printf("Platform %d full profile or embeded profile?: %s\n", i, profile); /* Look for ICD extension */ //如果支持ICD这一扩展功能的platform,输出显示,本机的Intel和Nvidia都支持这一扩展功能 if(strstr(ext_data, icd_ext) != NULL) platform_index = i; std::cout<<"Platform_index = "<<platform_index<<std::endl; /* Display whether ICD extension is supported */ if(platform_index > -1) printf("Platform %d supports the %s extension.\n", platform_index, icd_ext); std::cout<<std::endl; //释放空间 free(ext_data); free(name); free(vendor); free(version); free(profile); } if(platform_index <= -1) printf("No platforms support the %s extension.\n", icd_ext); /* Deallocate resources */ free(platforms); return 0; }
每个电脑的输出结果不一样的,我电脑的输出结果是:
相关文章推荐
- 详细程序注解学OpenCL一 环境配置和入门程序
- 详细程序注解学OpenCL一 环境配置和入门程序
- springMVC入门程序-非注解开发环境配置
- springMVC入门程序-注解开发环境配置
- 【Android】简单详细的安卓开发环境配置及运行第一个程序Helloworld
- Win10操作系统下,Java环境变量的配置&&Java入门小程序“hello,world”的编译
- Java入门-第一节-jdk的安装,环境变量的配置及第一个程序的编写。
- 32位(x86)与64位(x64)程序中详细配置OpenGL环境小白教程
- 图文解说OpenCV开发一 - 环境配置和入门程序详解
- Java入门-第一节(JDK的安装、环境变量的配置和第一个java程序)
- 基于CUDA的OpenCL开发环境搭建与入门程序示例
- AngularJS学习(一)——基本的入门程序(配置环境)
- Win10操作系统下,Java环境变量的配置和Java入门小程序“hello,world”的编译
- Java入门(JDK的安装、环境变量的配置、第一个Java程序)
- 【python】python入门篇:python安装和环境配置、pycharm安装、第一个python程序hello world
- 微信小程序 Nginx环境配置详细介绍
- Java入门—第一节(1)(JDK的安装、环境变量的配置和第一个java程序)
- Hibernate+Junit-史上最详细图解教程-从环境配置到入门
- 【Qt5】Windows下配置程序的产品、公司、版权、版本号等详细信息
- 关于Eclipse3.0+EclipseME0.6.1+j2sdk1.42开发J2me程序的环境配置!