CPU的《长安十二时辰》是如何运行的?
扫描二维码
随时随地手机看文章
话说,2021年一天,临近假日,有大厂程序员却还在加班写代码调BUG,不由得对996福报心生愤懑,恰逢天降异象,火星冲日,这段代码时光倒流,反汇编印入简牍,成为一部有字天书,落入了长安皇城。当时恰逢大唐开源盛世,李隆基获得此天书,观星监告知天降祸事,圣人于是立马要求靖安司司丞李泌在《长安十二时辰》之内,解码此天书,否则提头来见。
李泌心想,都是2021年的未来之人996孽气太重,导致火星冲日,天降祸书,与我何干?但转念一想,此事干系重大,如不破译,则996孽气降临长安,八水福地不见女儿欢笑颜色,六朝古都难觅男儿威武气魄。寰宇之内,帝国盛世不再,天灾人祸,谁又能置身事外,七尺男儿,岂可袖手旁观?遂决定要仔细参详此事。李泌看完天书,丝毫没有头绪,恰好贺知章老师来访,于是与老师商议此事。老师说,此乃开源(开元)盛世,我手头有一部开源指令集,相赠于你,看能否解开此谜。李泌打开一看,心下大喜,正是RISC-V开源指令集,于是豁然开朗。
李泌通读一遍,心中粗略一算,已有丘壑,遂大喊一声:不如造一个未来人们所谓的中央处理器CPU,解码此天书,又有何难?我中华文化,博大精深,CPU不过是一个高级算盘而已,这段代码天书,我定要解出来,看究竟是在运行何解释。贺老师问他,听闻未来的CPU都是芯片设计,用硅制成,我大唐尚无此科技树点成,如何制备?李泌道:如果长安城为整个片上系统(SOC),那么我靖安司就是整个长安城的CPU。老师请看整个系统舆图:如果要解码此汇编天书,我靖安司制备一CPU仅需5人足以。完成一个CPU的任务;由我李泌,檀棋,徐宾,姚汝能,张小敬,外加一算盘可也。贺老站在一旁,看李泌安排。
李泌的靖安司CPU设计任务分工如下
李泌:负责解码未来天书汇编,并且统一指挥所有人工作;
檀棋:负责保管32个箱子,每个箱子里面有一个数值;按照李泌的指令来把任意两个箱子里面数值传递给徐宾,将徐宾计算后的值再存入对应的箱子;
徐宾:负责按照李泌的要求,把檀棋传递来的两个值,通过算盘计算后,返回给檀棋;
姚汝能:负责给李泌找到未来天书(汇编),这些未来天书存储在皇城,需要姚每次给李泌来取;
张小敬:负责按照李泌的要求,把檀棋箱子里的数值传递到长安城的任意位置,或者将长安城的任意位置的数值找到放入檀棋相应的箱子;
按照开源指令集上的指令,李泌解码成功,准备输入CPU进行运算。
靖安司准备就位,CPU可以运作,大家十分紧张,看看这新组成的CPU能不能运行这汇编天书。
首先李泌开始解码第一条指令:第1步:姚汝能去皇城(指令存储区),把一条(0x104C)汇编天书取来(0x0005a783)给李泌;第2步:李泌解码;第3步:李泌指挥张小敬,去太仓宫(数据存储区)取地址编号是a1的书简,果然是获取昨日东市存储的卖货金额;然后放到a4的箱子里面;张小敬出门上马,沿着朱雀大道一路狂奔,来到西市,拿到书简上的昨日的卖货金额,然后一路狂奔回司,交给檀棋,放入a5的箱子;第一条指令执行完毕。
第二条指令:第1步:姚汝能去皇城(指令存储区),按顺序取下一条(0x1050)汇编天书取来(0x00052703)给李泌;
第2步:李泌解码;第3步:李泌指挥张小敬,去东市地址是A1的摊位上,获取今天卖货的金额,然后放到a5的箱子里面。
第三条指令:第1步:姚汝能去皇城(指令存储区),把下一条汇编天书取来(00e787b3);给李泌;第2步:李泌边解码边对贺老说:老师且看,此句汇编天书,我已解读如下, 0000_0000_1110_0111_1000_0111_1011_0011 rs2=x14=a5; rs1=x15=a5; rd=x15=a5; opcode= 0110011 =add只不过是将两个通用寄存器的数值相加而已,所谓CPU,只不过做些小儿能做的事情罢了。贺老不住点头称是。
第3步:李泌指挥檀棋把a4,a5的箱子里面存贮的数值给徐宾;第4步:徐宾用算盘把a4,a5的数值相加,把计算结果返回给檀棋;第5步:檀棋把计算结果,存储到a5的箱子里面,覆盖原来的结果。
第四条指令:第1步:姚汝能去皇城(指令存储区),把最后一条汇编天书取来(00f30053),给李泌;第2步:李泌解码;第3步:李泌指挥张小敬,把a5箱子里面的数值,在放入太仓宫a1地址的书简里面。运行完毕,李泌和贺老师拊掌大笑,此乃雕虫小计!看来通过我靖安司的CPU的处理,这段天书就是要把今天东市售卖数量统计到太仓宫的总数里面去,这样可以获取最新的售卖数量。真是简单至极,看来未来21世纪的人类,其技术水平,也不过如此。装置即成,众人大喜,终于获知天书之意,不过是一段简单的C程序编译而已:
听闻李泌已经破解,且改造靖安司为CPU,圣人携左右来参观其原理。见靖安司众人,在李泌的指挥下,CPU运行井井有条,不仅大大称奇,啧啧赞叹道,未来人的智慧也不过如此,李泌竟能在如此短时间内,制作出如此精良的靖安司CPU,破解天书,免去996孽报,真乃大唐得力干将也。所谓CPU是高科技,也不过如此而已。众人皆诺诺称是。圣人看檀棋生的俊俏,不由多看几眼,又见其抱着32个箱子,便对李泌言道,为什么只有32个箱子,我大唐物博于天下,不能多准备些箱子吗?李泌解释说:这些箱子的学名叫做通用寄存器。未来人做设计CPU,通用寄存器一般是16个或者32个,因其是2的倍数,所以更易于编码。如果做更多,比如64或者128个,也是可以的,但是其编码就需要更多的位数,例如目前32个通用寄存器,编码占用5bit,两个源,一个目的,就占用了15bit。如果是64个或者128个,则就占用18bit或者21bit。占用更多的指令空间,陛下的书简就只能写更少的指令。如果更少,比如4个或者8个,那么用于数值的暂存,就有些腾挪不开,需要频繁的访问靖安司外部存储区(例如太仓宫),那效率就降低了。所以综合来说,以32或者16为宜。李隆基不住点头,见李泌年龄不大,但是见识深厚,他日必为我大唐栋梁之才。站在一旁的右相李林甫见状,劈头便问道:你这个CPU运行一条指令,用时几何?李泌答道,约一炷香5分钟时间。右相说,我听闻未来21世纪的CPU,每秒钟可以运行1G次甚至5G次,(1000 000 000次),你这个靖安思CPU,一炷香5分钟一次,效率太低;实在损伤我大唐颜面。另外,听闻未来CPU绝不像你这么粗鄙的做法,就类似圣人常做的曲水流觞,一殇未至,下一觞早出发已,圣人喝酒的精神,李司丞能领会吗?李泌心想,不就是还没有喝完,就再给下一杯酒吗?喝完,下一杯也到了,喝起来没完,这是嗜酒酒鬼的喝酒方法,此乃奸臣所为。回应道:流水(pipeline)的设计,也是容易的,就是姚汝能在搬运指令后,交付给我,则可以取下一条指令了,我只管译码,接下来,檀棋根据译码结果输出箱子相应的数值徐宾,徐宾计算完毕,返回值到箱子中。这个流水的做法,也是寻常的。请圣人见图示所示:
圣人见图示,说,李泌果然能理解朕的曲水流觞之意,不错不错。李泌补充说,增加流水简单,但是增加频次这个仍要商榷。太仓宫与皇宫、东市皆在我靖安司外,姚汝能/张小敬快马驰骋朱雀大街,已是不易,如今增加频次,恐力不能逮。右相李林甫道:李司丞少年英才,必有办法。传元载设鼓与靖安司,每分钟一鼓,每鼓必要能够操作一条指令,这样靖安司CPU比可为我大唐解决算力低下的问题,以后东西市每天的卖货之数等等,不一而足,都要通过靖安司的CPU的计算后,记录于太仓宫中,可以清楚明白我大唐经济运行之趋势,为圣人决策分忧。李隆基闻后心下大喜,道,右相不亏帝国柱石,每天右相所想之统计货物之算法,由贺之章贺老编制成指令天书,由靖安司负责执行。
遂下旨:
奉天承运,皇帝诏曰:为增加靖安司CPU效率;1:提升靖安司CPU的频率,每分钟执行一次指令,由元载监督敲鼓;2:仿照圣人曲水流觞,增加靖安司的流水流程。钦此
旨意下完,圣人携左右满意而归。每天,右相李林甫产生众多统计想法,由贺之章贺老编制成指令天书交给靖安司CPU来完成,任务繁杂,靖安司再无宁日。一日,姚汝能和张小敬怨声载道,与李泌言道,靖安司离皇城、太仓、东西市,路程遥远,遂千里马也难1分钟往返。你作为译码人,在靖安司里面动动嘴即可,丝毫不费力,哪管我们死活。你上面动动嘴,我们下面跑断腿,这个工作实难完成。元载听了充耳不闻,仍然是不紧不慢的每分钟一次的敲鼓。李泌心下烦躁,一时语塞,众人正说着,贺之章贺老来访,李泌把大家的怨言赘述一遍。贺老说:我听闻,未来CPU亦有类似问题,有一法可解。李泌问道,如何能解,请贺老详细道来。在靖安司设置两个缓存处(cache)解决此事,一处为姚汝能所用,用于存储指令为(icache),另一处为张小敬所用,用于存储所取数据(dcache)。这样,姚汝能可以一次取16条指令放入指令缓存处(cache line是64字节);另外,张小敬也可以如法炮制,取东市的16个地址摊位的数据,如果运气好的话,16次计算只需要跑一次即可。两人听闻,心下大喜,终于可以得到片刻的休息了。除此之外,贺老和李泌商议,又设置两个新的部分,分别在靖安司设置指令和数据紧密存储区(ICCM/DCCM),这样贺老每天写的前4096条指令,直接放入靖安司指令紧密存储区(ICCM),免去了去皇宫搬移之苦;同时,太仓宫的前4096个竹简的统计也可以直接放入靖安司数据紧密存储区(DCCM)。只有这些之外的,才需要张小敬和姚汝能来取。靖安司CPU设置完毕,运行开始,居然效率大大提升;张小敬和姚汝能也可以游刃有余的完成所任。
多日后,圣人想起靖安司一事,差人前往观之,皆高效且井井有条,不由下旨称赞。右相不知其故,元载告之,右相恨恨不已,遂告圣人曰,靖安司处理游刃有余,现长安九门多货物来往,狼卫常携带火器来往,故需靖安司统计各门进出之物,可有效护卫长安安宁。圣人曰,大善。自此以后,靖安司CPU业务日趋繁忙,工作997,众人繁忙终日,无暇休息。李泌心想,常言道:为众人抱薪者,不可使其冻毙于风雪。想我李泌设计靖安司CPU,解码天书,拯救长安于996孽报,还大唐长安盛世,不想圣人竟把我给我安排997“福报”,每分每秒都成为都要为圣人卖力,变成CPU一部分,真是作茧自缚,作法自毙,自作孽不可活也。于是陷入深深的懊悔之中(自此下令严禁后代学习此CPU技术,也不让徐宾记录在案,故年长日久,竟不为外人知晓。故中华之CPU技术淹没至今,一直落后于外国。996孽报害人不浅,需后人引以为鉴也。可惜后人哀之而不鉴之,亦使后人而复哀后人也。此乃后话,暂且不提。话说一日,靖安司CPU众人正紧密运行统计安远门货物时,杨玉环杨真人怒气冲冲走了进来,欲治罪众人。
预知后事如何请关注公众号:歪睿老哥