Board logo

标题: 姗姗来迟,鱼儿大片(未删减版) [打印本页]

作者: 怖鲑鲑    时间: 2009-11-12 14:21     标题: 姗姗来迟,鱼儿大片(未删减版)

  CPU:

  1 到底什么叫做主频?

  有朋友知道主频=倍频X外频,但是主频的真正定义却并非如此,主频是指在1秒内所发射的指令(instruction)数目。

  很多朋友知道主频并不能完全表示一款CPU的性能,因为指令这种东西本身是可以并行的(下几段我们会进一步探讨这个问题),而且还有缓存(cache)等等诸多因素。

  外频和倍频的问题我请教了一些专业人员,这种技术在业内称为Multiclock Domain,其实就是将发射端口区域化(domain),为了和外部设备的频率想调和所引入的技术。

  2 cache的浅谈

  在谈cache的时候我们不得不提及内存,如果CPU需要的数据从内存中寻找,那么需要消耗的时钟周期是相当多的,这里影响的一个是发送read指令,另一个就是DDR本身的频率限制(下文会继续深入理解)造成的大量周期损失,所以为了减少这部分损失我们人为引入了cache。

  PS:这里专业的叫法称之为局部性原理,并且分为时间局部性原理和空间局部性原理。

  在谈这些东西之前我们还是得引入一些名词以便下文的深入思考。

  引用:

  组相联是cache的内存地址映射三种方式之一,另外两种映射方式为直接映射和全相联。

  直接映射(direct mapping)是最简单的方式,每条cache-line都有固定对应的若干主内存地址。 全相联(fully associative)是主内存中任何地址的数据都可以存放在cache中的任何一条cache-line里。

  组相联(Set-associative)是指数条cache-line被为安排一组,每组可以对应主内存中的若干固定地址。每组包含多少条cache-line,就是多少路相联度。

  这些羞涩难懂的名词大家肯定是不喜欢的,但是因为”cache越大命中率越高“的认识深入人心,所以不得不提及。

  如果大家仔细看CPU-Z,在cache一列中会说明某级的cache是几路的,正如上文的引用所说,这表现了cache中组相联的数量,这种相联可以增加单位容量cache的命中率(因为每组 cache line 对应的主内存地址更多),但是如果命中失效则等待的时钟周期优惠相当长

  3 并行运算如何去实现?

  说到并行,大家可能会用一般的理解方式去理解,也就是将一些数据横排,这样单位之间内通过的数据量会增多,这是一种比较简单的”并行“(parallel)概念,但是在CPU中的很多并行和这些数据并行的实现方法并非大相径庭。

  首先我们需要回顾流水线(pipeline)的知识。流水线类似于一条生产链,让机器不间断生产,工作,因为其较高的效率被引入了CPU的涉及。我们举一个例子,一个没有流水线的CPU如果发射两个指令,那么首先除了取值,解码等工作外,指令会进入CPU 的 ALU(Arithmetic and Logic Unit,逻辑运算单元)当这个指令被完全处理完时,这时候第二个指令才会进入。因为ALU的处理能力是有限的,所以一个指令需要多个ALU穿起来,然会运算,第一个ALU运算一部分,之后将数据存储到寄存器(register)再由第二个ALU进行处理,这样的话第一个ALU在之后的时间都是闲置不工作的,这就造成了浪费。

  而如果使用流水线进行处理,当第一个ALU处理完第一个指令的时候,第二个指令立刻被调用,然后再由第一个ALU处理,以此类瑞,形成流水线的工作方式。(但是其中还有很多指令具有非独立性和跳转的问题,这里不再继续讨论,似乎是很简单的东西)

  那么我们所说的并行运算,实际上就是利用流水线的特性从而将指令并行(同时发射多个指令),我们称之为co-issue技术。

  GPU:

  1 manycore

  很多人把一款显卡叫做单核心显卡,CF,SLI等技术的应用叫做双核心显卡。

  实际上GPU的内部构架遵循manycore的方式,也就是多核心,为什么这么说呢?

  首先看看单核心的CPU,单核心的CPU如果进行多任务处理的话,即使是使用乱序执行(out of order此技术的引入是为了减少指令独立所造成的流水线停顿)也必须处理完当前的任务之后才能进行下一个任务(换句话说因为线程单一所以正在处理的任务也是单一的)

  再看看我们的GPU。

  1 分离式结构

  早期的设置,在像素着色器(Pixel shader)处理时,顶点着色器(Vertex shader)是闲置的,换句话说这两个着色器并不是一个core,所以不能称之为单核心。

  2 统一结构

  在流处理器(Stream Processor)处理任务是,有部分处理顶点,有部分处理像素,那么也就是说他们的时钟发射器并不匹配,所以并非单一线程,又何来单核心之说?

  SLI,CF正确的叫法是多路,而不是多核心。

  2 R600,700的流处理器数要除5?

  很多杂志上都会说R600,R700采用超标量构架,所以流处理器的数量要除以5才可以和G80,G90相比较,其实在我看来这种观点是错误的。

  首先要说一下什么叫做超标量构架,它指的是在同一时间内可以有多条指令在跑分离的数据项。

  那么超标量在R600,R700中如何体现的呢?(其实我想贴图,但是网络上的图片多半没有表现出这种特性)

  在 R600,R700 中一组流处理器(也可以称为矩阵)包含一个4D单元和一个1D单元(这里的D代表了单元的处理能力,1D是一次开平方运算,4D就是四次,4D是矢量 vector单元,1D是标量scalar单元,D也可以理解为ALU的长度),单位周期内会发射两个指令,1个给4D单元,一个给1D单元,这两个指令是独立了,也就是超标量中的分离,从而达到了超标量的设置。

  我们反观G80,G90,它是由1D标量单元组成,1个单元对应一个发射端口,单位周期处理一个1D数据(3D,4D指令会拆分成1D指令,不过其实深入来看是将多个1D单元合并成mutil process多重处理单元也就是MP进行处理)

  在R600中一共有64个阵列,也就是64*(4+1)个相对于1D性能的处理单元,而G80是128个(其他的构架大相径庭差别仅在数量)。

  因为64个4D+1D单元的性能是标量1D单元的320倍,所以R600就被称为320个流处理器。但是如果是按照流处理器数量来看那也应该是64*(1+1),而不是那个5倍关系。

  3 G80?SIMD,MIMD?

  前段时间我一直在困扰这个问题,SIMD(Single Instruction Multiple Data单指令多数据),MIMD(Multiple Instruction Multiple Data 多指令多数据)到底如何去区分,现在通过和不少朋友讨论我稍微有一些理解了。

  首先,因为GPU的顺序结构(in order),所以单个处理单元都是SIMD,而区分SIMD和MIMD就要看这个 multi是否实现。mutil的实现有很多方式,但关键是怎么去看待,这里没有标准的区分原则,比如上文中的MP就可以理解为multi,也可以理解为单一指令(因为同一时间内MP中的流处理器跑的步骤都是一样的)。

  RAM:

  DDR内存有何特点?

  DDR2 800的实际频率是多少,可能很多DIYer告诉我是800/2=400,但实际上还忽略了其他的一些技术,其实DDR系列内存的实际频率多在200附近,这又是为什么呢?

  数据预取(Prefetch data):普通的SDRAM内存在一个时钟周期内只能进行一次操作,这个操作可以是读取(read)也可以是写入(write);而在DDR中,最大的成功之处就是引入了数据预取概念,在 DRAM的内部,假如是读的操作过程,那么从指定储存单元取得的数据必须经过两个不同的操作:一个是通过DRAM内部的数据总线往外输出数据到芯片,另一个是通过读出放大器将数据写回到DRAM,达到恢复数据的目的。DRAM在内部时钟信号的触发下,一次传送8bit的数据,再分成两路4bit数据传给放大器,由放大器(Amplifiers)将它们合并为一路数据流,然后由发送器按照在外部时钟上升沿与下降沿(DIMM,dual in-line memory module双向输出信息)分两次传输4bit的数据原则,把数据传输给北桥。这样,如果时钟频率为100MHz,那么在I/O端口处,由于是上下沿触发,那么传输频率就是200MHz。

  通过上面的解释我们可以理解,DDR内存是通过并行数据来达到高速的数据吞吐量的。

  硬盘(温式):

  1 单碟容量至上?

  很多朋友知道单碟容量是影响硬盘读取速度的影响之一,因为我们的硬盘基本都是角速度不变,如果单碟容量上升,一圈内滑过的数据量也便增多,所以从这个角度来看读取速度便会随着单碟容量的上升而上升,但是单碟容量增长并不意味着所有的性能都会上升,寻道时间就是一个比较有影响的指数,因为单碟容量的上升,数据的位置所需的精度更高,那么磁头想要读取便需要更长的时间,而我们的日常应用更多是注重寻道时间的。

  2 未来的发展和期望

  温式硬盘目前依然还有众多可以改进的地方,比如寻道算法,容量密度的提升,但是随着时间的流逝,这种传统的机械式硬盘肯定会被淘汰,但在一段时间内他依然是市场当中的活跃分子。

  硬盘(固式)

  1 SLC?MLC?

  网络上经常谈及固态硬盘,而出现最多的名词就是SLC和MLC了,那么SLC,MLC又是什么呢?固态硬盘的储存介质NAND颗粒和半导体类似,依靠栅极控制源流导通或者闭合状态,利用0,1记录数据,而MLC是一个单元4个储存空间,为了区分4个单元就必须以差值更高的电压进行控制,而SLC是两个储存单元,需要的电压差较小(所以后者寿命要长)

  2 固态硬盘的不足

  首先颗粒的寿命较短

  其次寿命成本较难控制(如果我们使用颗粒来组建大容量的固态硬盘,颗粒数量较多,那么对控制IC(简单的说是为了平摊数据的玩意)的要求就比较高了,当然也有类似冗余的 RAID,但这些都始终无法解决这个悖论,就是说容量和寿命上去了,价格会几乎程几何倍数上升,而且容量和寿命很难掌握平衡。)

  最后就是很多硬盘厂家没有较为完整的固态硬盘生产链,所以更换成本较高,甚至放弃生产,阻碍了普及

  3 未来与期望

  固态硬盘并非未来唯一的高效储存方案,还有忆阻器,赛道内存与其相互竞争。我对其未来的个人看法如下

  1 混合硬盘,集成NAND颗粒和传统物理硬盘,将一些小的,连续性的,缓存方面的放在NAND中,而主要数据依然在硬盘里

  2 MID这类需要小体积的东东。

  3 取代一般移动硬盘




欢迎光临 杰特论坛 (http://9et.cn/bbs/) Powered by Discuz! 7.1