高性能CPU设计

CPU从出现到现在,已有几十年历史,经过多次迭代改进,由原始的五级流水扩展到现在的N级流水,从一次只能执行一条指令到现在的多核超标量处理器,CPU的性能得到巨大提升。

当前,提升CPU的性能主要有两个方向:
第一,努力提升CPU单核core的性能,采用超标量技术,支持同时多线程;
第二,扩展多核并行计算技术;

下面结合笔者的工作经验,多谈谈关于提升单核性能的看法。

考核CPU的性能,就不得不考虑不同的使用场合。不同的使用场合,不同的数据类型,对CPU的要求是不一样的,也因此,从CPU衍生出各种更加专业的处理器,比如GPU。

单核CPU,只有一个内核core,core内部分为IFU(Instruction fetch Unit)、ISU(Instruction issue Unit)、FXU(Fix-point Unit)、FPU(Floating-point Unit)、LSU(Load-Store Unit)等模块。

鉴于目前处理数据的发展趋势,浮点数据的计算越来越多,而浮点数据的计算往往是最复杂的模块,所以浮点单元的设计也是最核心的。目前国内公司向国外先进公司引进的CPU内核的浮点单元都不强,或者直接就不给浮点单元的代码。

所以,高性能浮点单元的设计,是我国自主设计高性能CPU难以逾越却又不得不攻克的难关。

说道这里不得不吐槽一下!
网上很多键盘侠,只知道喷:花了那么多钱,还是设计不出自主的CPU,辣鸡!!
光动嘴不动手的人,都是看人挑担不累的货色,那么多优秀的硕士博士这么多年都搞不定的东西,你以为是简单的东西?
笔者花了快半年时间,也就敢说对浮点单元的功能有了一小部分的认识。
浮点单元的复杂程度,已经远远超出一般人的理解范畴。
那么放大到整个core,甚至多个core组成的SOC,那又是什么概念!!

在学习过程中发现,代码中用到的许多算法,根本没有推导过程,只有一个最终结果。而为了彻底掌握这些公式的推导,往往一行代码就需要耗费数周的时间,而实际设计中的代码往往是多少万行!!
不相信?
相信看这篇博客的读者都经历过高考吧。就好比做高考数学的证明题。代码中用到的公式必然是对的,这点不用去质疑。然后就是想方设法去证明。
但是,这些公式在网上或者能轻易找到的资料上,经常只有浅显的说明,推导都算不上。然后就是自己想各种可能和假设去试着证明。
有时候突然有了灵感,可以很快搞定一行代码的证明。
有时候没有灵感,困扰几周都是可能的。

好了,废话不多说,咱言归正传,下面就把最近掌握的一点东西写一些出来,与同样试图攻克内核设计的做交流吧。当然,涉及到保密问题,文章只会探讨网上能够查到的东西,至于查不到的,那就恕无可奉告了。

内容或许比较初级,让诸位贱笑了!

1、CPU原理
CPU的工作是根据指令去运算,并在一定时间后给出计算结果。
指令,一般都是32位的。包含的信息有:指令操作类型,操作数据,操作的寄存器等。
CPU如何处理一条指令呢?
一般包括五个步骤:取指、译码、执行、访存、写回。
五个步骤用到的逻辑电路功能不同,所以一条指令执行到哪一步,那一部分的逻辑就会工作,其他部分的就都闲置,在一边打麻将消遣。
这就给提高CPU工作效率留下了突破口。
那能不能让所有步骤的逻辑都同时工作,不浪费时间及资源呢?
当然有!
这就不得不提流水线。流水线就是把工作划分成多个步骤,顺序执行,然后安排不同的模块去做不同的事,同时大家都不闲着。

2、CPU性能
如果CPU是一个吃货,那么指令就是CPU的食物。
如何评价一个吃货的能力呢?
容易想到,多久吃一口及一口吃多少。
同理,简单评价吃货CPU的能力如下:
CPU性能 = 每1秒有多少周期 * 一周期处理多少指令 = 一秒钟处理多少指令
一秒钟有多少周期,这个就是指CPU的时钟频率,主要由工艺决定,另外流水线的划分也至关重要。
一周期处理多少指令,这个指CPU的并行度,这个参数越大,代表CPU一个周期处理的指令越多,但是同时意味着需要的逻辑资源越多,功耗越大。最起初的CPU,一周期只执行一条指令。但是,现实的需求远远比这个巨大,所以,目前的CPU往往一周期处理多条指令,比如IBM的POWER8每周期最多可同时处理8条指令。
有人要问了,那么为什么不大量增加每周期处理指令的数量呢?比如,增加到80条,800条?
嗯,有道理。
太有道理了。
不过,这就涉及到人有多大胆地有多大产的问题了。
因为涉及到许多专业知识,比较冷门,所以就不深入了,简单来说就是,单纯增加每周期处理指令的数量,必然需要按照同样规模增大芯片运算逻辑,造成芯片面积大、功耗高,控制变得复杂,这些都会导致设计复杂度大幅度增加。同时,芯片面积增大,导致信号传播延迟增大,对时钟频率的提升是巨大挑战。所以,优秀英雄的设计人员经过各种折中后,每周期处理的指令数量并未有大幅提升。

3、如何提高性能?
上面介绍了CPU的工作原理及性能的定义,那么就可以对症下药,去提高CPU性能。

一、浮点乘加部件MAF(multiply-add-fused)
顾名思义,该单元实现浮点数据的乘加操作指令,同时可以支持浮点的乘法、加法、减法、乘减指令,并且支持部分定点指令,以及定点和浮点的vector及scalar指令。
MAF是浮点单元的一个子模块,即subunit。

你可能感兴趣的:(CPU,cpu)