14 | 乘法器:如何像搭乐高一样搭电路(下)?
14 | 乘法器:如何像搭乐高一样搭电路(下)?
讲述:徐文浩
时长12:51大小11.75M
顺序乘法的实现过程
并行加速方法
电路并行
总结延伸
推荐阅读
课后思考
赞 43
提建议
精选留言(49)
- 一步2019-06-02最后一个的展开电路图,没有看懂
编辑回复: 这里想要解决的问题是,如果电路的“层数”太深,意味着一次运算需要的时钟循环数会太多,这样CPU就会“慢”,所以我们就把原先的电路尽量展开到比较少的层数,虽然这可能意味着电路的晶体管数量的增加。 具体到这里的加法,是把两个4位的二进制数相加,一个数A,从高位到低位是 A3A2A1A0,第二个数B,从高位到低位是 B3B2B1B0 我们加完之后的和,应该是 C4C3C2C1C0,变成5位,最高位的C4是代表这两个数相加之后是否会溢出一位需要进位。 不展开的情况下,我们计算C4,需要先算出A0和B0的和,以及是否进位,然后把是否进位,再和A1和B1相加,在看是否进位,这样一层层上来,这样的话,整个计算就需要至少5层(现在图里的是3层) 但是实际上我们可以把整个电路图展开,C4这个进位,只有这几种情况: 1. A3+B3 需要进位(两个都是1) 2. A3+B3是1(通过一个一个异或门)并且 A2+B2 进位。这里前面的这个就是图里第二列第一行的P3,后面是同一个节点里面的G2 3. A3+B3是1,并且 A2+B2 是1,并且 A1+B1进位。对应的就是第二列第二行的 P3,P2,G1 4. A3+B3是1,并且 A2+B2 是1,并且 A1+B1是1,并且A0+B0进位。对应的就是第二列第三行的 P3,P2,P1,G1 5. A3+B3是1,并且 A2+B2 是1,并且 A1+B1是1,并且A0+B0是1,并且下面进位上来的标志C0是1,对应的就是第二列第四行的P3,P2,P1,P0,C0 这5个结果就是图里面的第二列的电路,都是与门。然后任意一个条件满足,C4就需要进位,所以C4是这五个 与门 并联之后的 或门。
共 11 条评论80 - 旺旺2019-05-27从加法到乘法,先是计算过程变得复杂了,步骤变得更多,可以像人一样,逐位计算,但线性带来时间复杂度高。从而可以考虑通过增加线路/硬件复杂度,从空间换时间的思路,加快乘法速度。 空间 vs 时间。 但CPU毕竟也是很珍贵的资源,晶体管也不宜太多,这中间需要相互平衡。
作者回复: 总结得很好,其实这也可以认为是CISC和RISC的路线之争最朴素的由来
共 2 条评论37 - Dylan2020-02-25CPU做除法时和做乘法时是相反的,乘法是右移,除法是左移,乘法做的是加法,除法做的是减法。除数右移,商左移,商左移后最右位补0还是1取决于,本次余数和除数相减后余数最高位,最高位1则,回退;0那么商左移后最右位补1。共 1 条评论14
- 活的潇洒2019-05-27“这之间的权衡,其实就是计算机体系结构中的RISC和CISC的经典历史路线之争” 这句才是重点,day14 笔记:https://www.cnblogs.com/luoahong/p/10929985.html
作者回复: 👍
共 3 条评论13 - WB2019-05-27最后一张图片中的加法器是一个与门和一个或门?? 加法器不是由一个与门和一个异或门组成的吗?
作者回复: WB同学你好, 最后一张图是表示如果我们不希望有太多的门延迟的情况下,我们怎么让加法器里面高位的是否获得进位,不用等待前面低位的全加器的计算结果。而不是一个完整的加法器。 我们重新复习一下 13 和 14 两讲的内容 完整的加法器可以由很多个全加器串联起来 全加器由两个半加器外加一个或门组成 半加器由一个与门和一个异或门组成 半加器只是整个加法器中最基础的一个零件
11 - -W.LI-2019-06-16老师好!前面的意思大概看懂了,最后那个优化版本的加法器看不懂了。。。共 1 条评论5
- 愤怒的虾干2019-05-27老师好,最近在看您推荐的计算机组成公开课,x86保护模式下会使用全局符号描述表寻址,同时操作系统又是使用页表来分配地址、映射物理和逻辑地址。我想问全局符号描述表和页表在寻址上有什么区别与联系?
作者回复: 全局符号表是虚拟内存内的内存寻址和跳转。 页表是虚拟内存和物理内存之间的映射关系。
5 - 冰凉的咖啡2021-03-13晶体管的增加,意味着功耗的增加吧,这也就是为什么移动端的ARM架构的CPU采用的精简指令集,而PC的X86架构却采用的是复杂指令集。3
- DreamItPossible2019-08-14除法器算法实现描述: 步骤1 从余数寄存器中减去除数寄存器中的值,将结果保存在除数寄存器中; 步骤2 测试余数是否小于0 如果余数小于0,则执行步骤2b; 否则,执行步骤2a; 步骤2a 将商寄存器左移,且最低位设置为1; 步骤2b 将余数寄存器的值跟除数寄存器的值相加,结果存放在余数寄存器中;将商寄存器左移,最低位设置为0; 步骤3 将除数寄存器右移1位 步骤4 测试是否第N+1次执行 如果是,则结束;否则,跳转到步骤1执行;展开3
- Become a architect2019-12-18我想现在并发编程的思想起源于此吧。效率确实高了,但是编程的复杂度变高了。
作者回复: Become a architect同学, 你好,并发的思路是一个很直观的思路,并不是发源于乘法器,反而是乘法器设计的时候,可以去想想并发的思路。 而且这里最后的乘法器,前后的计算其实有依赖关系,我们只是通过分析电路,让部分前后的计算依赖关系解耦合,通过一个更复杂的电路来实现。
2 - 木心2019-09-274位加法器的最大门延迟是进位,是2*4+1 9个门延迟
作者回复: 木心同学, 你好,这是一个问题么?电路并行这部分我已经写了,可以做到没有那么多门延迟的。
共 2 条评论2 - J.D.Chi2019-09-21“把结果加到刚才的结果上”,想起了编程语言里的 sum = sum + i 之类的语句。
作者回复: J.D.同学, 你好,是很像的
2 - X2022-08-04 来自上海这章看的好吃力了,已经过了两遍了,继续加油。 不言放弃,这次要补回大学欠下的东西。1
- 苏格拉没底2021-05-13就是时间与空间的互换,和软件中的算法一样1
- 李二木2021-04-18可以配套看视频https://www.bilibili.com/video/BV1VE411o7nx?p=211
- 花仙子2019-07-03对于最后那个优化版本的加法器,我的理解是这样的:每一位都是又全加器组成,而每个全加器由两个半加器和一个或门电路组成,其中一个半加器是计算每个位相加的和进位信息无关,所以这个半加器在各个位上可以同时并行计算,同时计算后每个位会得出相加结果Y和进位信息U,Y与上一位的进位信息W0用另一个半加器相加后得到结果Z和进位信息V,Z为此位最终相加结果,U和V通过或门电路计算可得出最终进位信息W提供给下一位进行同样的计算。这样看来似乎第二个半加器和或门电路计算还是要依赖上一位同样的计算得出的进位信息,貌似这里无法并行。但是真的就此结束了吗?看老师给出的图我的理解是这样的:每一位的运算公式是这样的:W=U||V,Z=(Y+W0)1,V=(Y+W0)2,(请允许我这里用+表示半加器,后缀1表示半加器得到的相加结果,后缀2代表半加器得到的进位信息),而W0=U0||V0,所以有Z=(Y+(U0||V0))1,W=U||(Y+W0)2,这样以来即便是最高位也能得到一个基于各位第一个半加器计算结果的逻辑表达式,对于人类来解这个表达式似乎也没有优化效果,但是正如老师所说电路的天然并行行,我们将这个很长的表达式展开,硬件就可以并行计算很多小步骤,从而得到空间换时间的巨大效率提升。展开1
- Ethan New2022-11-03 来自浙江是用更少更简单的电路,但是需要更长的门延迟和时钟周期;还是用更复杂的电路,但是更短的门延迟和时钟周期来计算一个复杂的指令,这之间的权衡,其实就是计算机体系结构中 RISC 和 CISC 的经典历史路线之争。
- 张无忌2022-10-11 来自浙江1个半加器有2个门电路:异或门+与门,1个全加器由2个半加器和1个或门组成,也就是一个全加器共有5个门,所以没太明白为什么全加器的门延迟是3T,而不是5T。希望老师解答,谢谢!
- 张无忌2022-10-10 来自浙江“把被乘数左移一位,把乘数右移一位”,那他们两个岂不是错开两位?共 1 条评论
- X2022-08-05 来自上海弄懂了7788了吧,顺序乘法器、并行乘法器,引出了门延迟和时钟频率带来的性能影响。使用“牺牲空间,追求时间”的方法,提升更多的晶体管,复杂电路的方式,追求更好的计算性能。