|
ソフトウェアパイプライン(英: Software pipeline)とは、計算機科学における命令スケジューリング方法の一つで、命令パイプラインによる並列化と同じ方法でループ処理を最適化する技法である。ソフトウェアパイプラインはアウト・オブ・オーダー実行の一種であるが、命令の並べ替えがCPU ではなくコンパイラで (手動で行う場合にはアセンブリ言語を用いて)行われる点に違いがある。アーキテクチャによってはソフトウェアパイプラインをサポートするものもあり、特にインテルのIA-64アーキテクチャが著名である。 ==ソフトウェアパイプラインの例== 下記のようなループ例を考える。 for i = 1 to bignumber A(i) B(i) C(i) end この例では、 A(i) , B(i) , C(i) , がそれぞれi を操作する命令であり、互いに依存関係がある。すなわち A(i) は B(i) の開始前に完了している必要がある。例えば、A はメモリからレジスタにデータをロードし、B がデータに算術演算を行い、C がデータをメモリに書き戻す。しかし、それぞれが異なるi の値に対して依存がないと仮定すると、A(2) は A(1) が完了する前に開始することができる。ソフトウェアパイプラインを考えない場合には、コードは下記の順序で実行される。A(1) B(1) C(1) A(2) B(2) C(2) A(3) B(3) C(3) ... 各命令は完了に 3 クロックかかるとする(制御ループのコストを考えない)。また(現代的なシステムでは一般的だが)実行中の命令に対して依存関係がなければ命令を各サイクルで割り当てることができるものとする。パイプライン化しない場合には、各ループが7サイクル(3 + 3 + 1, A(i+1) は C(i) を待つ必要がないため)かかることになる。ソフトウェアパイプラインによって下記のように命令列を並べ替えると、 A(1) A(2) A(3) B(1) B(2) B(3) C(1) C(2) C(3) ... 毎サイクルで命令を割り当てることができ、全体が9サイクル、ループが平均 3 サイクルで実行できる。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「ソフトウェアパイプライン」の詳細全文を読む スポンサード リンク
|