我是靠谱客的博主 迷人眼神,最近开发中收集的这篇文章主要介绍初识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变量访问内存速度有较大差距。

最后

以上就是迷人眼神为你收集整理的初识GPU与认知计算的全部内容,希望文章能够帮你解决初识GPU与认知计算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部