在2005年,SUN推出了一款针对server的processor:Ultrasparc T1。这款processor的特别之处在于他几乎没有使用任何的instruction level parallelism:没有branch prediction、没有multiple instruction issue、没有out-of-order、没有speculative。很难想象,都2005年了,还会有公司在server市场上发布这么“土”的CPU。
其实,T1将全部的气力都用在了thread level parallelism上,并且同时使用了multiple core和multithreading的技术。每个T1 processor包含8个core,每个core可以同时运行4个thread,所以在operating system看来,T1可以同时运行32个thread。T1的mutlithreading使用的fine-grained multithreading:每个core上的4个thread会在每个CPU cycle会发生一次thread switch,采用round-robin的调度方式,而且这个thread switch速度极快,几乎不占用任何的CPU cycle。
T1的每个core都是一个非常简单6 stage pipeline(一个经典的5 stage pipeline 加上一个thread selection的stage)。简单的pipeline很难保证高效率(所以才会有superscalar),在很多时候都会发生stall:例如load(在L1 cache hit的情况下)和branch会带来3个cycle的latency,integer的乘法和除法以及floating point的运算都无法在一个cycle内完成(如果load因为L2 cache miss而需要访问memory,将会浪费更多的cycle)。T1是依靠fine-grained multithreading来解决这个问题的:如果某个thread由于load、branch或是其他原因发生了pipeline stall,那么它的cycle就会被让给同一个core上其他的thread。只有“ready”的thread才会被调度到pipeline上,也就是说T1是利用多个thread的交替执行,来隐藏pipeline stall的。由于每个core有四个thread,T1可以充分保证pipeline的throughput。SUN声称采用这种方法后,pipeline的利用率达到了70%~80%。
可以看出T1是用response time(与superscalar相比,每个thread的latency增加了)来换取throughput。但是,请考虑T1所针对的市场,对于一个server(通常就是web、ftp和database)来说,它们的computing不是CPU bound的,throughput无疑更为重要。另外,这个领域的application有着天然的并发性,可以很容易的为CPU提供大量的thread。
大部分的主流高端processor(x86、Power和MIPS)都把大量的transistor用在了instruction level parallelism上。“Branch prediction”、“multiple instruction issue”、“out-of-order execution”、“speculative execution”,正是这些技术加上半导体工艺的不断进步,使得CPU的计算能力在过去20年内一直高速增长。
但是,在server领域,我们真的需要superscalar吗?
Intel曾经给出了一份报告指出在Enterprise Computing领域,Itanium 2有85%的CPU cycle是stall的!Itanium可是这个星球上instruction level parallelism做得最好的一款CPU(虽然clock rate不高)!连它都有这么多的stall cycle,这说明什么?只能说明instruction level parallelism在server领域发挥不了太大的作用。我想这主要是因为在server computing中,branch prediction准确率很低,访问的数据比较分散,cache miss的rate很高。
但是上面所提到的各种增加instruction level parallelism的技术却浪费了无数的transistor、占据了宝贵的die上了空间、消耗了大量的power,并且散发出很多的热量。
于是SUN另辟蹊径,放弃了instruction level parallelism:把每个core都做的非常简单,于是在一块die上便可以放下8个支持multithreading的core,这样不但可以增加throughput,还可以做到power-efficiency(现在,power-efficiency已经CPU设计的一个重要原则了)。况且如前所述,每个core上的4个thread的不停switch,不但可以继续增加throughput,还将branch prediction和memory latency这些困绕superscalar的难题一起巧妙的解决了。此外,在server computing中,bottleneck一般不会是CPU,大部分是在network IO和disk IO上(试想一下,web server和ftp server需要很多的CPU资源吗?),T1在latency上的劣势很容易从throughput的优势上弥补。
T1在TPC-C、SPECJBB05、SPECWeb05等标准的server benchmarks中表现的非常非常出色;在"performance/watt"中,更是优势明显。由于Blog篇幅有限,我就不贴出具体的数据了。:-)
文章评论(0条评论)
登录后参与讨论