新年开始,一起学习了解一下CUDA的知识,做机器学习的,或者说研究机器学习深度学习算法的人如果只会用算法还是远远不够的,最好能够把一些基本的算法动手实践一下,这样对以后的算法设计,工程结构设计,代码设计都有很大帮助,千万不能做“小学生玩原子弹”的事。
介绍CUDA之前先来下学习处理器结构,当然只是简单的介绍
集群层次最典型的结构如下:
介绍GPU结构之前,先来看IBM的Cell处理器芯片布局,因为他和现在的GPU相似度非常高:
包括SM(处理器簇)L1,L2缓存(更详细的结构预计在第三天给出简介),多个GPU之间通过PCI-E总线连接,相比于上面的计算机群的网络通信,PCI-E的数据传输速度是非常快速的。
而每个GPU内又能完成大规模的并行,因为GPU内部有大规模的用于计算的“核”(SP)。
异构计算简单理解就是通过不同的结构完成计算,比如CPU+GPU,CPU+FPGA,ARM+DSP等多种类型的计算单元组合,有些适合做控制,有些用于做计算,各自发挥自己的所长,完成高速计算,而ARM+DSP或者ARM+FPGA多封装在一个片子里,GPU则是通过PCI-E连接在外部,更像是一个外挂设备,或者叫做协处理器,从外观看也更像计算机群的结构。
处理器的能力主要局限于:计算能力,控制能力和数据吞吐量(带宽)。
计算能力:主要参数是处理器时钟周期,和单个指令需要的周期,例如一个工人A能完成工作1,用1个步骤,而另一个工人B能完成工作1,用2个步骤,但是A一个步骤用1秒,但B一个步骤是0.5秒,那么他们的工作效率是一致的,所以对于同一个工作,步骤越少同时完成一个步骤时间越短的处理器计算能力越强。而且工人越多完成的工作也会越多越快。
控制能力:这个主要是分支预测等数据传输控制算法的设计和结构设计。
数据吞吐量:从内存读取数据到运算核心的过程类似于货车运货,货车的速度和马路的宽度。
I7 Nehalem处理器带宽,理论带宽和单核带宽
CPU是传统的计算的处理器,拥有复杂的指令控制体系,而GPU则是依靠大量的简单计算核心完成大规模并行计算的处理器,能够在有些计算密集型程序中发挥重要作用,也是计算机视觉,机器学习的重要工具。
原文:http://blog.csdn.net/tonyshengtan/article/details/50655535