目前我所接触到的处理器主要有三种,通用微处理器(MPU)、数字信号处理器(DSP)和SPARC平台(来自Scalable Processor Architecture的缩写)。此外还有单片机类的处理器(分为三个阶段,SCM、MCU和SoC),不过本专业并不是搞嵌入式的,所以对这个东西了解的不多。先对前三个处理器类型做一下简介吧。
通用微处理器的代表就是大家所熟知的X86平台了(下面我就用X86来代称通用微处理器),从8086到i386、从奔腾系列再到现在的i5,无一不遵循X86体系。出于软件兼容性的考虑和历史局限性,搞得该体系结构无比的复杂。虽然它并不是最合理的体系结构,但是Wintel联盟又促成了X86成为了PC时代的实际标准,所以我们这帮“挨踢”人士还不得不学它!研究DSP后再学X86就感觉它真他**的麻烦(以下省略73个字儿)!
数字信号处理器就是平常所说的DSP,这东西就是为数学运算而生的,其强大的数字处理能力让X86同学惭愧不已,速度上的差距就像莱布尼茨同学都做完一道微分方程了,我还没读完题呢…… =_=# DSP的代表生产厂商就是大名鼎鼎的德州仪器(TI)了。
SPARC平台是首个可扩展处理器架构,它可以算上一种微处理器,但是由于其寄存器窗口和采用精简指令集的特点又使它区别于通用微处理器,所以我不知道怎么去定义它(最火大的是我查了那么多资料都没找到SPARC的类别定义)。
简介说完了,就开始说说这三者的区别吧。
适用领域
X86面向的是通用程序设计,所以要考虑到大多数应用领域,这就要求其在逻辑处理方面要比较强,如IF-ELSE分支语句的处理。
DSP面向的是数学运算且实时性较强,所以在嵌入式领域得到了广泛的应用。DSP一般都拥有一个指令周期能够完成一个乘法运算的能力,X86同学请坐下,别激动,我知道你想说你俩不是一个类型的。
SPARC也是强调运算速度,适用领域非常广,即可以用于PC也可以用于嵌入式,但是我觉得它对过程调用上的优化是SPARC最大的特点。
体系结构
X86采用的是冯·诺依曼体系,大家一定比较熟悉就不浪费口水了。
DSP和SPARC采用的是哈佛结构,该结构的主要特征是代码总线和数据总线分开,有些SPARC平台还会有DMA总线,也就是多出了两套总线。这种设计的好处就是指令和数据可以在同一个时钟周期内同时读取,所以速度上唰唰的!
SPARC的独特之处还有寄存器窗口的设计,一般的SPARC平台有160个通用寄存器(注意:并不是所有的寄存器),每个寄存器窗口独享24个寄存器,还有8个全局寄存器。所以单从成本上来说,不是所有应用领域都用得起的!
指令集
X86采用的是复杂指令集,所以译码方式上除了硬译码之外还需要软译码,所在一个指令往往需要几个时钟周期来完成。
DSP和SPARC都是精简指令集的Fans,基本上所有的译码都可以通过硬译码来完成,再加上超标量和超流水技术使得这两种处理器在速度上远远的甩开了X86。X86同学别站到桌子上,我知道你也会超标量和超流水,但是你的软译码是你的硬伤,复杂指令集的CPU伤不起啊……
速度上的差距成因
DSP的超快速度主要还是因为它的乘法器,该乘法器通过硬件来运算乘法,所以X86需要几十条时钟周期来运算的一个乘法,DSP只需要一个指令一个时钟周期就可以完成。再加上超标量技术,一个时钟周期可以并行N个指令,这样就能一个时钟周期内完成N*N矩阵与N维向量乘法,几十倍于X86,怎么能不快!
X86同学又站起来了……我还没说完呢,虽然DSP在数学运算指令并行处理上优势很明显,但是需要程序指令之间没有依赖性,如N*N矩阵与N维向量的乘法,这种运算对矩阵和微量来说每一行每一列的运算是没有依赖的,这种情况下才能充分发挥DSP指令并行处理的优势。如果程序指令之间有逻辑上的依赖性,那么X86就有明显的优势了,如IF-ELSE分支语句,对于现在的X86超标量技术来说,同一个时钟周期内可以取N个分支的指令并行执行,再根据判断条件来选择执行结果,这时DSP就跑不过X86了。X86同学就不要跳舞了,MJ活过来会被雷到的。
不过现在很多X86平台都配备了一些协处理器来加快运算,也就是说当遇到数学运算的时候将控制权交给协处理器,运算结束之后CPU直接读取结果。就像CPU和GPU(也就是通常我们所说的显卡)的关系,当遇到复杂的数学运算的时候CPU就会让GPU去处理,所以显卡对游戏才会如此的重要