控制单元控制 CPU 周围的数据流。控制单元还向不同组件发送控制信号,指示它们执行哪些操作,例如读取、写入、添加、减去。控制单元解码指令(转换为操作码和操作数)。控制单元控制操作的时间(时钟速度)。算术逻辑单元 (ALU) 执行执行指令所需的计算,包括加法和减法。ALU 还执行逻辑运算,如比较。ALU 有一个内置寄存器,用于存储计算的临时结果
摘要 — 低位宽量化神经网络 (QNN) 通过减少内存占用,支持在受限设备(如微控制器 (MCU))上部署复杂的机器学习模型。细粒度非对称量化(即,在张量基础上为权重和激活分配不同的位宽)是一种特别有趣的方案,可以在严格的内存约束下最大限度地提高准确性 [1]。然而,SoA 微处理器缺乏对子字节指令集架构 (ISA) 的支持,这使得很难在嵌入式 MCU 中充分利用这种极端量化范式。对子字节和非对称 QNN 的支持需要许多精度格式和大量的操作码空间。在这项工作中,我们使用基于状态的 SIMD 指令来解决这个问题:不是显式编码精度,而是在核心状态寄存器中动态设置每个操作数的精度。我们提出了一种基于开源 RI5CY 核心的新型 RISC-V ISA 核心 MPIC(混合精度推理核心)。我们的方法能够完全支持混合精度 QNN 推理,具有 292 种不同的操作数组合,精度为 16 位、8 位、4 位和 2 位,而无需添加任何额外的操作码或增加解码阶段的复杂性。我们的结果表明,与 RI5CY 上的基于软件的混合精度相比,MPIC 将性能和能效提高了 1.1-4.9 倍;与市售的 Cortex-M4 和 M7 微控制器相比,它的性能提高了 3.6-11.7 倍,效率提高了 41-155 倍。索引术语 —PULP 平台、嵌入式系统、深度神经网络、混合精度、微控制器
我第一次接触计算机是在 1966 年,当时我参加了埃文斯维尔学院(印第安纳州南部的一所小型私立学校)的一门(为期一季度)二年级数学课程(因为当时还没有计算机科学系)。这台机器是 IBM 1620,配备了(当时很现代的!)晶体管和正好 20,000 个十进制数字的磁芯存储器。它是用机器语言(不是汇编语言!)编写的,使用两个十进制数字操作码、十进制地址和通过标记内存位置内容定义的字段。它没有寄存器,也没有硬件十进制算术指令(算术是由软件完成的,存储乘法表并进行查找!)。所有 I/O 都是通过 80 列 IBM 打孔卡、行式打印机和只有学院管理部门才能访问的旋转磁盘进行的。我用低级机器语言编写代码没有问题,但使用 IBM 026/029 打卡机时却遇到了很大困难,它经常卡住、损坏卡片,并且随机无法在卡片顶部打印打卡的字符。我记得花在将程序打到卡片上的时间比编写程序的时间还多!下一季度的计算课程是关于数值方法(更多的是数学而不是计算机科学),使用非常早期的(NCE FORTRAN)编译器,更像现代计算,但有一个很大的区别——20,000 个十进制数字内存和唯一的输入设备是读卡器。任何严肃的数值计算都必须分阶段进行,中间结果打入卡片,然后读回以供下一阶段使用。请注意,加载所有
我第一次接触计算机是在 1966 年,当时我参加了埃文斯维尔学院(印第安纳州南部的一所小型私立学校)的一门(为期一季度)二年级数学课程(因为当时还没有计算机科学系)。这台机器是 IBM 1620,配备了(当时很现代的!)晶体管和正好 20,000 个十进制数字的磁芯存储器。它是用机器语言(不是汇编语言!)编写的,使用两个十进制数字操作码、十进制地址和通过标记内存位置内容定义的字段。它没有寄存器,也没有硬件十进制算术指令(算术是由软件完成的,存储乘法表并进行查找!)。所有 I/O 都是通过 80 列 IBM 打孔卡、行式打印机和只有学院管理部门才能访问的旋转磁盘进行的。我用低级机器语言编写代码没有问题,但使用 IBM 026/029 打卡机时却遇到了很大困难,它经常卡住、损坏卡片,并且随机无法在卡片顶部打印打卡的字符。我记得花在将程序打到卡片上的时间比编写程序的时间还多!下一季度的计算课程是关于数值方法(更多的是数学而不是计算机科学),使用非常早期的(NCE FORTRAN)编译器,更像现代计算,但有一个很大的区别——20,000 个十进制数字内存和唯一的输入设备是读卡器。任何严肃的数值计算都必须分阶段进行,中间结果打入卡片,然后读回以供下一阶段使用。请注意,加载所有
我第一次接触计算机是在 1966 年,当时我在印第安纳州南部的一所小型私立学校埃文斯维尔学院上了一门(为期一季度)二年级数学课(因为当时还没有计算机科学系)。这台机器是 IBM 1620,配备了(当时很现代的!)晶体管和正好 20,000 个十进制数字的磁芯存储器。它是用机器语言(不是汇编语言!)编写的,使用两个十进制数字操作码、十进制地址和通过标记内存位置内容定义的字段。它没有寄存器,也没有硬件十进制算术指令(算术是由软件完成的,存储乘法表并进行查找!)。所有 I/O 都是通过 80 列 IBM 打孔卡、行式打印机和只有学院管理部门才能访问的旋转磁盘进行的。我用低级机器语言编写代码没有问题,但使用 IBM 026/029 打卡机时却遇到了很大困难,它经常卡住、损坏卡片,并且随机无法在卡片顶部打印打卡的字符。我记得花在将程序打到卡片上的时间比编写程序的时间还多!下一季度的计算课程是关于数值方法(更多的是数学而不是计算机科学),使用非常早期的(NCE FORTRAN)编译器,更像现代计算,但有一个巨大的区别——20,000 个十进制数字内存和唯一的输入设备是读卡器。任何严肃的数值计算都必须进行