神经网络推理加速入门——指令流水线

简介: 指令流水线到底是如何工作的呢?

大家好啊,我是董董灿。

前言

刚毕业的时候在青岛某信任职,做嵌入式软件开发,需要调试电路板。公司有个要求是所有新入职的员工,都要去公司自己的加工厂上两周的班,亲自组装生产电路板,体验产品生产的过程。

于是,刚毕业的我,光荣的成为了一名流水线工人,虽然只有两周的时间。这期间,我和同事一起,完成过一天组装3万片电路板的成就,也完成过一天往电路板上插装不计其数电阻、电容的操作,白班夜班倒,记忆犹新。

当时的我,坐在流水线的椅子上,满脑子就一个想法:“我今天就是个螺丝钉”——真拧螺丝。也正是这一次流水线的工作体验,让我明白了一个道理——

一个产线或团队的工作效率,取决于整条流水线上动作最慢的那个人,而不是最快的那个人。一旦动作慢导致产品在你那积压,最常见的就是带小红帽的组长过来噼里啪啦说一顿。不过好在我当时手脚勤快,没有拖后腿。

在流水线上,人就是个机器,机械的执行着每一个动作。直到后来开始做芯片开发,开始给指令排流水,才恍然大悟,原来,每条指令都是流水线工人。

指令流水

上一篇计算和存储的分离说到,在冯诺依曼架构的计算体系中,计算和存储是分离的。分离的结果就是,我们可以将计算和存储分别看做两个工人,而不是一个,每个工人只负责干自己的事儿。

—— 【计算】这名工人只负责计算,【存储】这名工人只负责存储。

计算好比在厨房做菜,存储好比从厨房冰箱里将菜拿出来。这个比喻很重要,能帮你很通俗的理解流水。

那么问题来了,【一个人从冰箱里拿菜洗菜然后去做菜】和【两个人,一个专门拿菜洗菜,一个专门做菜】,哪种做饭效率高?

做过饭的同学肯定知道,当然两个人配合快了。

比如做西红柿鸡蛋,一个人需要先从冰箱拿出鸡蛋,记需要花费 A 的时间,然后炒鸡蛋需要花费B的时间,然后回去拿出西红柿,需要花费C的时间,然后将西红柿和鸡蛋一起炒,需要花费D的时间。总共花费 A + B + C + D的时间。

而两个人的话,第一个人从冰箱里拿出鸡蛋,记A的时间,第二个人炒鸡蛋,花费B的时间,而此时,在第二个人炒鸡蛋的同时,第一个人可以同时去拿出西红柿,需要花费C的时间,然后第二个人抄完鸡蛋后,接过第一个人的西红柿一起炒,需要花费D的时间。总共花费 A + MAX(B,C) + D 的时间。

两个一比较,肯定两个人做饭时间花的少吧。

而两个人做饭时,B,C同时进行,就像流水线上的工人一样,你负责你的事,我负责我的事,我做完就给下一个人,下一个人动作快的话,可以立刻接过去,动作慢的话,就会导致产品积压。

在计算机的体系结构中,计算指令和存储指令,一般都是两条独立的指令,并且在硬件部件上,是两个独立的硬件部件,比如计算是ALU单元,存储是DMA或load/store单元等。
image.png

独立的硬件部件和独立的指令设计,天然的保证了两条指令之间可以排流水,就像流水线上的工人一样工作。

还是拿卷积算法举例子,我先计算上半张图片,同时你就可以搬运下半张图片的数据,整体的AI计算开销,就会少很多。

从而起到了推理加速的作用。

不仅如此,在指令集设计或硬件设计时,一般都会考虑流水线的设计,从而完成更高效的计算和访存操作。

可进行流水操作的指令,也绝不仅仅只有计算指令和存储指令等,不同的计算单元之间,也是可以排流水的。

比如卷积层后面接一个池化层,那么在计算第二部分卷积的同时,可以计算第一部分池化。

流水线的发明对于制造业来说是一次技术变革。早期的手工制造业是靠大量人工完成的,这种工作方式要求每个工作者要了解整个成品的完整制造过程,要快速的制造出一个成品需要对整个工序、流程非常熟悉,无形中提高了对工人素质的要求。而流水线的出现,不需要工人了解整个流程,为手工制造业实现了半自动化,加快了加工速度。

好啦,本篇就简单介绍了一种推理优化的常见方式,那就是通过对指令排流水的方式,可以完成指令加速,从而完成推理优化。

后面会继续深入的讨论更多推理优化加速的方法,敬请关注。

本文为作者原创,请勿转载,如需转载,请于作者联系

相关文章
|
1天前
|
人工智能 监控 网络协议
【网络技术】心跳机制(入门讲解)
【网络技术】心跳机制(入门讲解)
|
1天前
|
机器学习/深度学习 存储 人工智能
深度学习第1天:深度学习入门-Keras与典型神经网络结构
深度学习第1天:深度学习入门-Keras与典型神经网络结构
36 0
|
1天前
|
网络协议 安全 Linux
网络入门基础
网络入门基础
7 0
|
1天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
1天前
|
存储 监控 安全
【亮剑】指导初学者如何搭建和使用网络视频监控系统。
【4月更文挑战第30天】本文指导初学者如何搭建和使用网络视频监控系统。核心设备包括摄像头(如固定、PTZ、多目、夜视)、存储选项(NVR、DVR、云存储)及网络交换机等。安装配置步骤涉及规划布局、安装摄像头、设置存储设备和软件配置。实时监控包括实时查看、接收警报和录像回放。理解设备功能、合理布局并细心操作,就能建立稳定监控体系。随着技术进步,未来监控系统将更智能、高效,保障安全。
|
1天前
|
机器学习/深度学习 Python
【深度学习入门】- 神经网络
【深度学习入门】- 神经网络
|
1天前
|
存储 NoSQL Linux
Redis入门到通关之Redis5种网络模型详解
Redis入门到通关之Redis5种网络模型详解
32 1
|
1天前
|
NoSQL Ubuntu 关系型数据库
Redis入门到通关之Redis网络模型-用户空间和内核态空间
Redis入门到通关之Redis网络模型-用户空间和内核态空间
22 1
|
1天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
1天前
|
关系型数据库 MySQL 数据库
Python从入门到精通:2.3.1数据库操作与网络编程:使用Python连接和操作数据库
Python从入门到精通:2.3.1数据库操作与网络编程:使用Python连接和操作数据库

热门文章

最新文章