概述
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变量访问内存速度有较大差距。
最后
以上就是迷人眼神为你收集整理的初识GPU与认知计算的全部内容,希望文章能够帮你解决初识GPU与认知计算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复