什么地方需要流水线?
1.需要流水线的地方一般都是时间紧、任务重。在输入端有大量待处理数据,整个任务有大量计算、传输需求的,才会用到流水线。
2.需要用到流水线的地方一般都是资源可分配的地方,你可以把手头有的大任务分解成一系列的小任务。这里有一个隐晦的问题,那就是为什么我们总能把一个大任务分解成一系列的小任务?
从计算机开天辟地之初,图灵机的时代,计算机就注定了只有两种东西组成,一个是纸带(内存),一个是控制器与读写头(函数)。到后来,不管CPU发展的再怎么迅猛,依然遵循着图灵机的基本原则,使用着内存与函数的结构。
CPU的运行原则是ISA指令集,指令集中包含了基本的内存格式与基本的函数种类。由线性代数的思想,如果一个函数的输出格式与下一个函数的输入格式相同,那么这两个函数就可以复合成一个大函数,这种复合成大函数的函数关系可以理解为一种二元关系,利用这个二元关系可以在ISA中像当初找施密特正交基一样找出一个最简函数集。让所有的其他函数都由这个函数集与二元关系生成。
这样理解有两个好处,一个是明确了函数的可分性,如果一个函数已经基础到不能再基础了,它当然就不可分(ISA所指向的最简函数集应该都不可分)。第二是,这样构造的函数空间最终可以提出一个类似于实属一样的函数顺序。具体来说,一个任务有多少个数据流,就可以写一个多少维度的内存空间,在时间维度轴线下,函数就是每一个时间切片的两个高维内存空间之间的一个映射矩阵。一段时间的内存空间映射矩阵往往由其中的许许多多的小内存空间映射矩阵复合而来,所以一个大任务常常能划分成一系列的小任务。
3.流水线的主要思路为:
首先对函数进行任务划分。每个函数执行是需要时间的,对一个大函数划分成诸个小函数。小函数与小函数之间在原来的状态下是由线来连接的,也就是由不能存储,只能传输的线连连接上一个函数的输出与下一个函数的输入。线本身的信号传递几乎不花时间,或者说,我们可以用一个等效电阻来代替说明每一段线所花的时间(一般都忽略了)。执行的器件作为函数的具象是需要花时间的,换句话说,作为与门、或门、非门这样的器件执行需要时间,作为函数从输入到输出需要时间。