命令レベルの並列性
条件分岐によるパイプラインストールを減らす。パイプラインが深い場合は特に有効だが、ハードウェアリソースを増大させる。
例として以下のようなプログラムを考える。
処理3は、処理1と処理2の結果に依存している。したがって、処理3は処理1と処理2が完了してからでないと計算を開始できない。 しかし、処理1と処理2は何にも依存していないので並列して実行できる。 それぞれの処理にかかる時間が同じだとして、それを1とすると、これら3命令が完了するのにかかる時間は2となり、結局ILPは3/2となる。
コンパイラとCPUの設計者の目標のひとつは、可能な限りILPを高めることである。通常のプログラムは逐次実行モデルで書かれており、命令はプログラマが記した順に実行されることが前提となっている。ILP はコンパイラやプロセッサが複数の命令を同時に実行することを可能にしたり、順番を全く変えて実行することを可能にする。
プログラム内の命令レベルの並列性は、個々のアプリケーションによって異なる。グラフィックスや科学技術計算といった特定の分野では、計算量は多いが単純計算の繰り返しが多く、命令レベルの並列性は大きいことが多い。しかし、暗号などの処理では条件判定を多用するため結果の分岐次第でプログラムルーチンが変化してしまい、並列性は小さい。
ILPを利用するアーキテクチャ上の技法としては、以下のようなものがある。