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