聊聊FPGA/GPCPU/PCIE/Cache-Coherency/CAPI1.0
2015-05-28 冬瓜哥 大话存储
看到Intel最近发布了QPI直连FPGA的架构,冬瓜哥回想起几个月前写的一篇文章,现在重新分享给大家。从中你可以了解为何需要FPGA,FPGA是怎么被连接到系统里的,怎么被使用的。
闲话少说,今天我们说一说 IBM 搞的 CAPI , CAPI 是 OpenPower 体系里的一个技术,其目的是让 FPGA 更好更方便的融入现有的系统。那么现有的 FPGA 是怎么被使用的呢?不如先说说什么是 FPGA ,要弄清楚什么是 FPGA ,就得先说说什么是 CPU 。可笑, CPU 大家都知道,冬瓜哥这逼格咋降低了?笑而不语。
· 通用 CPU 是怎么运算的?
我们都知道所谓 GPCPU (通用目的 CPU ),也就是什么都能算,但又什么都算不快的 CPU ,所以其 “ 通用 ” ,比如 Intel x86 , AMD x86 , Power , PowerPC , MIPS , ARM , DragonSon/GodSon (国产)等。而 FPGA 就是专门为了某种某类计算而专门优化其内部的逻辑电路的一种专用 CPU 。 GPCPU 内部的 ALU 包含多种运算器比如加减乘除以及逻辑(比如 xor , and , or , not )运算以及整数和浮点运算,我们开始菜单计算器,算加减法,代码指令便会把对应的数据导入到 CPU 的寄存器, CPU 收到之后便会将操作数输入到运算器的输入端,并在下一个时钟周期获取到计算结果并输出到寄存器,然后写回到主存。当然, GPCPU 内部花费了大量的资源(逻辑电路)去做优化,包括缓存管理、流水线、多发射、分支预测、乱序执行等等,一条指令要最终得到执行,都要经过这些关卡的一层层处理,所以,对于那些遵纪守法的代码(比如,顺着来没有任何判断跳转)来讲其时延无疑会增加,但是目前随着业务越来越复杂,应用程序的判断条件越来越多,所以这些优化会增加最终性能,虽然时延相对上提高了,但是性能绝对上是增加了,因为如果误判了一个分支,那么整个流水线已经预读入的代码就会被冲刷走重新读入,这个时延反而会更大。
有人问了,我不打开计算器,就运行个 QQ ,难道还要算加减法么?如果没有什么加减乘除运算, CPU 运行 QQ 到底是运行了些什么东西?这问题问得好,问的逼格高,一般人是根本不去想 QQ 运行时候底层都做了什么的。其实 GPCPU 大多时候还真没有在算加减乘除,而更多地是做协调工作了,也就是把内存里某段数据读出来,稍加改动或者根本不动,又写到内存其他地方去。这不闲的么, CPU 就干这个?是的。比如 QQ 要发送一句话给某个好友,其需要调用 TCP 协议栈顶上的 soket API ,后者就是一段常驻内存的 OS 内核代码,那么 QQ.exe 如何将这句话传递给这段代码? QQ.exe 会让 CPU 把这句话在当前内存的地址告诉 socket API 代码,其会将这个地址以及其他参数写入到某个 CPU 寄存器,对应机器指令就是 “mov 内存地址寄存器 A” 类似这种,然后 QQ.ex