冬瓜哥和存储界的朋友们有个无声的约定,那就是,想知道产品 / 技术背后的奥秘,了解底层,剥掉厂商包装忽悠的外壳,那关注冬瓜哥是没错的,底层通,一通百通,逼格秒涨!冬瓜哥没有太多精力和兴趣去搜罗业界八卦并分析,聊八卦一向不是冬瓜哥的强项,虽然属于 MKT 的角色,但是身在曹营心在汉,你和咱说市场,咱就和你论技术,忽悠死你,哈哈 ~~ 。冬瓜哥认为,底层技术是终生受用的武器,冬瓜哥看任何产品或者说 “ 事物 ” ,都要看透其底层才可罢休,否则冬瓜哥会感觉很不爽。
闲话少说,今天我们说一说 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 内核代码,那么