运行时(Runtime)抽象出计算模型,提供更通用的接口,进一步屏蔽硬件细节。 在深度学习硬件加速系统中,如果仅依赖驱动接口,业务层/编译层代码中仍然要编入硬件相关代码,需要管理设备,记录内存,整理数据等,耦合较重,迁移困难。 在驱动之上封装一层runtime有利于进一步提供代码复用程度,将硬件实现和上层应用完...
驱动是对硬件接口的抽象和封装,设计时需要充分考虑分层和解耦。 Linux系统将设备1抽象为文件,比如字符设备、块设备和网络接口,保持和文件一致的读写接口。 拓展卡类型的FPGA加速卡使用GPIO和PCIe相连,内置PCIe Controller和DMA提供统一寻址。DMA提供多组AXI总线(通常与DDR空间对应...
没有软件支持的硬件就是一块砖,围绕硬件编写通用且易用的软件栈所需的资源以及重要性不亚于硬件开发。 在硬件工程师主导的团队中,可能会忽视软件的作用以及开发工作量。 因为从硬件的角度来看,软硬件接口的抽象非常明确: 寄存器表 数据 指令 后端硬件通常暴露一组控制寄存器,上层软件通过驱动读写寄存器,完成初始化,复...
这里说的性能优化不是计算性能优化,比如脉动阵列的优化,而是如何使硬件设计在FPGA后端流程中时序尽量不违例。 FPGA的好处挺多的,可以芯片的价格也是美丽的。资源越多,价格越贵,而且还有不同资源配比,满足不同需要。 一般来说,FPGA中的关键资源包括: DSP(乘加单元),代表了绝对算力,也是有一段短暂的时间...
仿真不是真,只不过是现实世界的一个有限切面。但仿真又是在进入现实世界前的必经试炼。 仿真(Emulation)用来从底层机制层面模拟硬件运行性能,测试功能正确性,评估性能是否达到设计标准。 # 层级 项目启动阶段重心放在硬件功能开发上,而验证流程可能处于刀耕火种阶段: C++写Test Case,dump输入...
语言只是手段,不是目的。自然语言如此,软件编程语言如此,硬件描述语言也如此。 软件编程语言定义了一系列面向人类可读性的字符语法。人类使用软件编程语言编写描述机器如何处理信息的步骤的文本,简称为软件代码。使用编译软件使用指定指令集翻译成机器具体处理信息的指令,简称为程序。🤓 类似的,在硬件设计中,硬件的结构决定...
定制计算硬件的一个重要任务是确定指令集1。对于深度学习模型,则要首先确定模型集,继而确定算子集,最后统计出指令集。 # 划分 总体上看,指令按计算密度分为计算密集型算子指令与长尾算子指令。 计算密集型算子指令通常就是指矩阵乘加计算,其他密集型算子(比如深度学习定义的卷积运算)可以通过变换转化为矩阵乘加。 因此矩...
机器学习系统通常使用定制硬件后端执行计算密集型算子。训练模型中包含大量训练专用的反向梯度算子,相比之下推理模型结构更简单,算子集更小。因此定制硬件通常从推理模型入手。 # 分类 如果采用异构计算系统的定义,硬件后端可以大致分为: CPU 对应最通用的计算设备,可以执行所有计算,灵活性最高,计算性能通常不够高...
Page 13 / 14