解决流水线"瓶颈"问题的方法主要有两种。一种方法是将流水线的"瓶颈"部分再细分。如图8.17所示,把第二个流水段再细分为3个子流水段,分别为S2-1、S2-2、S2-3。这样,每一个流水段及子流水段的延迟时间均为Dt。
图 8.17 “瓶颈”流水段再次细分

  如果由于结构等方面的原因,瓶颈流水段不能再细分时,可以采用如图8.18的方法,通过重复设置瓶颈流水段,让多个瓶颈流水段并行工作。对于图8.17和图8.18两种情况,流水线的最大吞吐率仍然可以达到:
  采用瓶颈流水段重复设置的方法,其控制逻辑比较复杂。例如,图8.18(a)中,从流水段S1到流水段S2的各个并列流水段之间要设置一个数据分配器。从多个并列流水段S2到流水段S3之间要设置数据收集器。数据分配器的任务是:从流水段S1输出的第1个任务分配给流水段S2-1,输出的第2个任务分配给流水段S2-2,输出的第3个任务分配给流水段S2-3,以后依次重复。同样,数据收集器的任务是依次从三个流水段S2-1、S2-2和S2-3收集处理结果,并分时输入到流水段S3中。瓶颈流水段重复设置的流水线时空图如图8.18(b)所示。
  实际上,由于存在有多种原因,使流水线的实际吞吐率要低于最大吞吐率。例如,流水线存在有装入和排空时间,输入的任务往往不是连续的,程序本身存在有数据相关,多功能流水线在完成某一种功能时有的流水段不使用等。必须注意,计算流水线实际吞吐率的基本公式与在特殊情况下推导出来的公式,在使用有关公式时,要特别注意这些公式的使用条件。
图 8.18 “瓶颈”流水段重复设置的流水线