图形学中有管线Pipeline的概念,不知他人如何,我刚入门时曾经深表疑惑,这个管线到底是什么路子,除了设计模式中的管道模式、NIO中出现的Pipeline以外,类似的概念就很少出现了。那么当初为什么要使用这样的概念来搭建图形渲染的基础呢?
其实pipeline本身就是流水线的意思。
在软件设计中如何提高程序运行的效率,其中一个方法是采用多线程计算。
多线程并发地同时完成一项工作,单线程的效率不变,但是理论上来说总体效率达到了N倍的提升。
例如拼装车辆,假设一个人拼装一辆车的时间是1天,那么10个人同时工作,每天的产量就提高了10倍。
这种情况我们可以称其为横向的切分并行,特点是,创建多个重复的功能模块同时运行,提升总体产量。
与之相对的另一种解决方案,就是工业生产中最伟大的发明之一流水线:
将拼装车辆的工作划分为三个独立的部分:拼装外壳,喷漆,打磨
那么我们可以由三人同时做这三样工作,
首先,A车进入了拼装外壳的厂间,甲开始拼接。此时后续车辆都在等待,而喷漆和打磨厂间都是空置状态。
随后,A车进入了喷漆车间由乙进行喷漆。注意这里,不同于原始的生产工序,B车无需等到A车完全成品出厂,而在此时即可进行第一步拼装外壳的工序。
再随后,A车进入了打磨车间,B车在喷漆车间,C车进入拼装外壳车间。
流水线对于生产力的提升不言而喻。
关键的地方在于,不同于横向并行所需的多条生产线,采用了流水线作业的方法,只是一条生产线的成本,生产力即可得到了提升。
而pipeline,流水线也是硬件芯片例如GPU最早在设计时所采用的方案。
多边形渲染,顶点渲染,像素渲染。通过将一次渲染显示过程划分为多个相对独立的模块工作,不仅实现了流水线作业的高效率,而且使我们可以针对不同模块的效率高低和功能特点分治地实行增效方案。
于是,在最早的图形学软件设计中显而易见地也便引入了如此的概念。
其实pipeline本身就是流水线的意思。
在软件设计中如何提高程序运行的效率,其中一个方法是采用多线程计算。
多线程并发地同时完成一项工作,单线程的效率不变,但是理论上来说总体效率达到了N倍的提升。
例如拼装车辆,假设一个人拼装一辆车的时间是1天,那么10个人同时工作,每天的产量就提高了10倍。
这种情况我们可以称其为横向的切分并行,特点是,创建多个重复的功能模块同时运行,提升总体产量。
与之相对的另一种解决方案,就是工业生产中最伟大的发明之一流水线:
将拼装车辆的工作划分为三个独立的部分:拼装外壳,喷漆,打磨
那么我们可以由三人同时做这三样工作,
首先,A车进入了拼装外壳的厂间,甲开始拼接。此时后续车辆都在等待,而喷漆和打磨厂间都是空置状态。
随后,A车进入了喷漆车间由乙进行喷漆。注意这里,不同于原始的生产工序,B车无需等到A车完全成品出厂,而在此时即可进行第一步拼装外壳的工序。
再随后,A车进入了打磨车间,B车在喷漆车间,C车进入拼装外壳车间。
流水线对于生产力的提升不言而喻。
关键的地方在于,不同于横向并行所需的多条生产线,采用了流水线作业的方法,只是一条生产线的成本,生产力即可得到了提升。
而pipeline,流水线也是硬件芯片例如GPU最早在设计时所采用的方案。
多边形渲染,顶点渲染,像素渲染。通过将一次渲染显示过程划分为多个相对独立的模块工作,不仅实现了流水线作业的高效率,而且使我们可以针对不同模块的效率高低和功能特点分治地实行增效方案。
于是,在最早的图形学软件设计中显而易见地也便引入了如此的概念。