神经网络加速器顶层接口与工作流程

< --="" -="">的开源神经网络加速器已经在上面存在两个多月的时间了,而距离软件 的开源也差不多提上了日程。近期,的代码库中已经更新了 平台和,为更为便捷快速的软件仿真也提供了支撑。< ="--">< ="--">< ="--">< ="--">< -="">对于的层与外界的接口以及工作流程,这里做一下总结。目前开源的软件代码和测试例都只是针对_模式,目前已经更新为_模式。的顶层接口包括控制总线,数据总线以及时钟复位和中断信号,比较简洁。控制总线遵循简单地握手协议,而数据总线则采用简化版的.协议。< ="--">< ="--">< ="--">< ="--">< -="飞狗">控制总线,即,主要包括请求通道,读数据通道和写响应通道,包括组信号线,具体信号线个数与所选择的总线位宽有关。< ="--">< ="--">< ="--">< ="--">< -="_">请求通道, ,主要完成 对的读写操作。其支持简单的/握手协议,地址位宽固定为比特,数据位宽固定为比特,且不支持操作,各个读写命令之间相互独立,不支持乱序完成和发射。< ="--">< ="--">< ="--">< ="--">< -="">读数据通道,,主要返回 读请求命令的数据,为高时,数据有效。也不支持乱序响应。< ="--">< ="--">< ="--">< ="--">< -="">写响应通道,,也遵循协议,针对-模式,返回写响应信号,同时也不支持乱序响应。< ="--">< ="--">< ="--">< ="--">< -="-">下图是一个简单的两写两读的时序图,第二个写操作为-模式。< ="--">< ="--">< ="--">< ="--">< -="">提供的中 支持的指令有条(一代支持条指令),主要完成寄存器和存储器的读写操作,以及大片数据的加载和卸载操作等,还有一条指令,等待中断的完成。< ="--">< ="--">< ="--">< ="--">< -="-">的存储器接口比较简单,采用了简化版的.协议,比如支持的类型仅为类型,且也与数据位宽对齐,保持一致等。< ="--">< ="--">< ="--">< ="--">< -="-">同时为了隐藏配置寄存器带来的延迟和增加的神经网络处理时间,采用了-寄存器模式,在寄存器工作的同时, 可以配置下一层的寄存器。这里需要注意的是,为了简化硬件设计,子模块间的工作时序以及启动的依赖关系,都是由软件负责,这也与相类似。可见,仅流片,是没有任何实际意义的。< ="--">< ="--">< ="--">< ="--">< -="">这里以一个简单的全连接层测试例介绍一下的工作流程以及所需要的文件。程序文件类似于普通的高级语言编写的代码文件,输入数据和权值,都是的输入,都需要从模块外面导入到加速器内部。目前没有开源软件框架,只提供了一个脚本,将源程序文件转换成可执行的二进制代码,同时将数据文件转换成存储形式。依次配置完成响应子模块并使能,等待中断返回。工作流程都还算直接,只是目前阶段还无法自己设计程序和测试例。< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< ="--">< -=""> _的功耗,矩阵尺寸为,大致可以作为参考,功耗的绝大部分在于时钟网络,综合结果是在@下的典型库单元获得的,这里只包括动态功耗。< -="">目前只能等待的软件框架和工具链开源,~~~。< ="--">< -="">欢迎讨论交流< -="">研究领域包括集成电路、无线通信等,涉及深度学习加速器、设计空间探索、多核任务调度和新一代无线通信系统实现;具有、成功流片经验,在研项目包括、等。< -="">中国科学院自动化研究所国家专用集成设计工程技术研究中心

Powered by epic加速器 @2013-2022 RSS地图 HTML地图