ステージ間のバッファ

[] [] []


ここまで、あるパイプラインの例についてシングルバッファとダブルバッファの場合のステージ間の転送を詳細に書いたが、もうすこし一般化して考えてみる。

(1) 転送単位が1ワードの場合

バッファの個数(nBANK)を増やしたければ、深さnBANKFIFOを入れるのが簡単である。バッファリングする長さが伸び縮みするのでエラスティックバッファelastic bufferと呼ばれる。当然、nBANKを増やすほど、処理時間のより大きな変化に対応できるようになる。

ただ、ステージ間の転送単位が1ワードでステージの処理時間が可変なパイプラインの例というのは、CPU内の命令処理ぐらいしか思い当たらず、あまり一般的な例ではないかもしれない。

(2) ステージ間の転送単位がパケット(nPACKETワード)で、1パケット分がそろわないと次のステージの処理が開始できないという場合

この場合は1パケット分を蓄えられるメモリをバッファにする必要がある。バッファに読み書きするだけでも時間がかかるので、シングルバッファだと書き込み終わってから読み出し始めることになりオーバーヘッドが大きい。そこで、少なくともダブルバッファにするのが普通である。


[] [] []