OpenCL与CNN篇一:搭建在VS的OpenCL运行环境

原创 2017年06月07日 21:16:47

一、关于OpenCL的VS2012项目环境配置

1、首先安装AMD APP SDK,百度搜索这个好像第一条就是官网的下载连接,之后安装目录任意你开心就好;这步之前必须强调一定要安装好显卡驱动,不然之后写OpenCL程序是检测不到平台的。我的本本CPU是i5-2450M,已经不被英特尔抛弃了,显卡是A卡还好AMD有可用的SDK。《OpenCL编程指南》有说安装ATI Stream SDK可我感觉然并栾。安装完系统环境变量如下图,环境变量打开方式:我的电脑-->属性-->高级系统设置-->环境变量。

    image


2、我的参考课本是《OpenCL编成指南》,在VS2012中建立工程,导入第一个示例HelloWorld,主要是后两个文件,打开看一下找到main(),之后顺着慢慢理解,或者我在写一篇我的OpenCL初始化详解。

    image

3.1、项目属性---C/C++ 常规---附加包含目录 添加$(AMDAPPSDKROOT)include;

3.2、项目属性---链接器 输入---附加依赖项 添加 OpenCL.lib;

3.3、项目属性---链接器 常规---附加库目录 添加$(AMDAPPSDKROOT)lib\x86;

3.4、上面完了,找个例程编译一下,如果通过就OK了,后面的内容仅是一些奇葩情况,以及我的解决办法,希望你们不要碰到

        如果编写面向64位操作平台的程序,此处记得更改库目录 $(AMDAPPSDKROOT)lib\x86_64;

    image

4、你或许想找个例程验证一下,这个在本系列的篇三,只要能查询到平台就说明成功;算了这个还是给一个简单的例程吧:

#include "stdafx.h"
#include 
#include 
#include 
using namespace std;

#pragma warning( disable : 4996 )   

cl_platform_id   platform;     
cl_context       context;        
cl_device_id     device;

int main()
{
	printf("\n\nOpenCL_Initing .....");

	cl_int           errNum;
	// 查询平台
	cl_uint          numPlatforms =1;
	cl_platform_id  *platformIds;
	errNum = clGetPlatformIDs( 1, NULL, &numPlatforms);  
	platformIds =(cl_platform_id*)malloc(sizeof(cl_platform_id)*numPlatforms);
	errNum = clGetPlatformIDs( numPlatforms, platformIds, NULL); 
	assert(errNum==CL_SUCCESS);
	/*---------------------------------*/ platform = platformIds[0];

	// 这里选择从平台中查询设备
	cl_uint       numDevices =1;
	cl_device_id  *deviceIds;
	errNum = clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU, 0, NULL, &numDevices);
	deviceIds =(cl_device_id*)malloc(sizeof(cl_device_id)*numDevices);
	errNum = clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU, numDevices, deviceIds, NULL);
	assert(errNum==CL_SUCCESS);
	/*---------------------------------*/ device = deviceIds[0];

	//打印设备信息
	char deviceinfo[100];
	
	for(cl_uint i=0; i

5、这里有可能会存在一个奇葩的问题,就是经过的目录配置之后,VS还找不到路径:

   错误1:cl_main.cpp(13): fatal error C1083: 无法打开包括文件:“CL/cl.h”: No such file or directory

   错误2:LINK : fatal error LNK1104: 无法打开文件“OpenCL.lib”

   可能要在附加包含目录的路径加个"\"   $(AMDAPPSDKROOT)\include

   或者附加库目录的路径加一个"\"      $(AMDAPPSDKROOT)\lib\x86

   不记得我是这样还是重启解决的,不过一般你们的电脑不会像我的那么挫,应该不会有奇葩的反应;而且后来好像这样也不得行,我就干脆把系统变量改成了绝对路径,笑Cry····

    image 

6、不过3.1~3.3的配置是只是用于单个项目;对于一个解决方案我们多个项目,需要相同配置,这就需要全局配置(百度搜索这个有很多教程啊):

     即 通过属性管理器配置(可在视图内打开):然后选择下图一中任一个标记的位置都可以打开MicrosoftCpp.Win32.user进行属性配置(同3.1~3.3),这个配置对新建所有项目可用,应该是这样哈,弄完了检查一下就晓得了。

    image image

二、一些其他的错误

1、关于VS在x64调试,可能会出现“远程调试监视器MSVSMON.EXE似乎没有在远程计算机上运行”的问题

      我只想说也不用先着急着搜索解决办法,或许重启一下就解决了,反正我搜到的办法没怎么有用。至于小伙伴说“关闭防火墙”,好像有时候可以解决一点问题;不过我不敢这么搞,电脑重要资料较多,不想被“Wanna Cry”。

2、直接编译会有报错:helloworld.cpp(119): error C4996: 'clCreateCommandQueue': 被声明为已否决

      解决方法:需要在vs里代码里定义一个宏加入#pragma warning( disable : 4996 )

      问题说明:在OpenCL2.0clCreateCommandQueue()已经被弃用了;

   Explain: The clCreateCommandQueue function was deprecated as of OpenCL 2.0, and replaced with clCreateCommandQueueWithProperties. If you are only targeting devices that support OpenCL 2.0 (some recent Intel and AMD processors at the time of writing), you can safely use this new function.
   If you need your code to run on devices that don't yet support OpenCL 2.0, you can continue using the deprecated clCreateCommandQueue function by using the preprocessor macros that the OpenCL headers provide, e.g:
  
   #define CL_USE_DEPRECATED_OPENCL_1_2_APIS
    #include <CL/cl.h>

3、安装AMP CodeXL并使用VS CodeXL工具调试(Shift+Alt+F5)后,再使用Visual Studio自带的的调试(F5),可能会出现“无可用的源代码”

      解决方法:如下图,在 CodeXL->Breakpoints->New CodeXL Breakpoints 中的 Active BreakPoints中取消所有的中断点,即可使用VS的调试(F5)。

        image

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ShiAokai/article/details/72904032

OpenCL与CNN篇二:OpenCL基础API介绍

本篇介绍几个OpenCL基础API,涉及平台、设备等初始化必备函数 其次介绍几个关于缓冲区操作以及工作空间划分的API 建议阅读参考书籍,我的推荐是《OpenCL编程指南》和《OpenCL异构计算》...
  • ShiAokai
  • ShiAokai
  • 2017年06月08日 21:58
  • 535

OpenCL与CNN篇四:CNN从入门到使用

记录我从零到实现一个具体CNN网络中最有用的知识干货。 以细节为切入点,分享我对CNN网络的简洁。 本文致力于让你一篇文章理解CNN的具体实现与训练方法。 涉及理论不一一追述背景,主要讲解其如何应用。...
  • ShiAokai
  • ShiAokai
  • 2017年06月10日 01:08
  • 1092

OpenCl加速矩阵运算

OpenCl运用并行的方法加速矩阵运算,在业界得到广泛运用,博主也试了一试,挺好玩的。 注意:1、OpenCl针对的数据量越大,加速效果越明显...
  • samylee
  • samylee
  • 2017年06月21日 21:57
  • 1137

深度卷积神经网络CNNs的多GPU并行框架及其应用

摘要:本文是腾讯深度学习系列文章之一,主要聚焦于腾讯深度学习平台(Tencent Deep Learning Platform)中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框架。 ...
  • szu030606
  • szu030606
  • 2014年08月20日 21:07
  • 968

卷积神经网络CNN

CNN综述 卷积神经网络CNN是对BP神经网络的改进,与BP一样,都采用了前向传播计算输出值,反向传播调整权重和偏置,卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子...
  • dcrmg
  • dcrmg
  • 2017年06月27日 23:02
  • 2245

OpenCL 优化后的卷积代码

自己修改过的 可以直接运行 卷积模板
  • chao56789
  • chao56789
  • 2016年01月07日 19:49
  • 1215

OpenCL 学习step by step (2) 一个简单的OpenCL的程序

转自:http://www.cnblogs.com/mikewolf2002/archive/2012/09/05/2671261.html 作者:迈克老狼2012 现在,我们开始写一个简...
  • lucky_greenegg
  • lucky_greenegg
  • 2013年08月15日 22:28
  • 2356

卷积神经网络(CNN)基础介绍

卷积神经网络(CNN)基础介绍
  • fengbingchun
  • fengbingchun
  • 2016年01月16日 20:31
  • 96835

【VS2013】OpenCl环境搭建&helloworld

前面几步都比较简单,最后一步需要如下3小步: 1.项目属性->VC++目录->包含目录(include),C:\Program Files (x86)\AMD APP SDK\2.9\include。...
  • hermittt
  • hermittt
  • 2016年02月15日 15:56
  • 5302

详细程序注解学OpenCL一 环境配置和入门程序

本专栏是通过注解程序的方法学习OpenCL,我觉得一个一个地去抠原理也不是办法,干脆直接学习程序,然后把相关原理都直接注解到程序语句当中。 一开始要配置好环境,我的是nvidia,所以就按照我的电脑举...
  • kenden23
  • kenden23
  • 2013年11月03日 11:07
  • 10298
收藏助手
不良信息举报
您举报文章:OpenCL与CNN篇一:搭建在VS的OpenCL运行环境
举报原因:
原因补充:

(最多只允许输入30个字)