初识GPU与认知计算

1、GPU综述

GPU计算应用:

        科学计算:MPI(多进程),OpenMP(多线程)

        图像/视频加速:OpenCV(自带GPU加速库)

        深度学习:Caffe,Torch,Theano,TensorFlow   都支持GPU加速

        其他领域:经济学、生物学软件(蛋白质序列,DNA…)

        拿深度学习举例:Caffe CPU  Caffe GPU  Caffe GPU+cuDNN 

        cuDNN:Nvidia开发在GPU上优化深度学习的函数库 

2、GPU硬件架构

GPU与CPU对比(为什么比CPU算的快那么多)

1、最主要的原因是架构上原因:

        架构上:CPU控制单元占据较多,计算单元特别小,但GPU相反,控制单元占据小,计算单元占据多。而且GPU的计算的单元是直接和L2级缓存相连的,传输快。

        功能上:CPU主要为做逻辑处理和控制而设计,所以指令集很多,可以干很复杂的事情,特别是if-else分支预测;GPU不擅长此方面,主要擅长于做批量计算,其计算单元非常多,逻辑功能简单(也能做if-else,但效率低),做各种运算很快。

        CPU主要负责管理,GPU主要做运算。二者是管理与被管理的关系,通过PCIE接口通信。建议尽可能少的进行数据交互,CPU通信慢。也就是目前比较火的:异构计算(CPU和GPU共同工作去完成一件事情)。一般程序开始的时候都是CPU开始执行,然后CPU调用GPU去进行计算,最后接收GPU的计算结果,并在需要时开始下一次循环。CPU调用GPU时,可能不仅会涉及指令,还有数据的搬移以及GPU的数据返回给CPU,这个过程相对于GPU本身的数据处理是十分慢的,所以小型的数据处理或小的程序调用GPU会得不偿失,这对GPU编程也提出了较高的要求。

2、规模上的原因:

        GPU的核心数远大于CPU,内存频率大于CPU,内存的带宽也有很大优势。

3、CUDA编程

        CUDA原生支持C/C++编程,但可以通过API raper方式使之支持JAVA/Python等等。

        CUDA的框架从上到下分了三层,每一层都可以编程调用。由上到下为:

 CUDALibraries:通用计算算法库(图像处理、线性代数、深度学习等等,尽量用库)

 CUDARuntime:通用的计算API

 CUDADriver:上下文(进程)和模块管理(类似于进程调度)

        GPU计算理解举例:10维向量加法,对于CPU来说,用一个for循环10次计算10次加法,而对于GPU来说,每个加法开一个线程,然后开10个线程,并将结果存到个字相应的位置。CUDA的实现:

越往下层,执行的任务越细,编程难度越大。

                                                                         

4、CUDA实战

除了考虑算法优化,还要考虑内存访问,显卡中的global全局变量和shell变量访问内存速度有较大差距。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值