コンピュータのパフォーマンスにおいて、命令パス長とは、コンピュータプログラムの一部を実行するために必要なマシンコード命令の数です。[ 1 ]プログラム全体の総パス長は、特定のコンピュータハードウェア上でのアルゴリズムのパフォーマンスの尺度とみなすことができます。各命令の実行時間は通常、パス長を決定する際に考慮されないため、パス長は絶対的なものではなく、相対的なパフォーマンスの指標にすぎません。
ベンチマークプログラムを実行する場合、命令パスの長さの大部分は通常、プログラムの内部ループ内にあります。
キャッシュが導入される以前は、パス長は実行時間の近似値でしたが、キャッシュを備えた最新のCPUでは、近似値としてははるかに悪くなる可能性があります。データがキャッシュにない場合、ロード命令に数百サイクルかかる場合もあれば、キャッシュにある場合は桁違いに高速になる場合もあります(ループ内の別のラウンドで同じ命令を実行する場合でも)。
アセンブリ命令とマシン命令は通常1対1の関係にあるため、命令パス長は、関数または特定のコードセクションを実行するために必要なアセンブリ命令の数としてよく用いられます。1,000個のエントリからなるソートされていないリストに対して単純なテーブルルックアップを実行する場合、平均で2,000個のマシン命令が必要になる可能性があります(入力値が均一に分布していると仮定した場合)。一方、ソートされたリストに対してバイナリサーチアルゴリズムを使用して同じルックアップを実行する場合、必要なマシン命令は約40個で済み、非常に大きな節約になります。命令パス長で表すと、この指標はこの場合50分の1にまで削減されます。これが、実際の命令タイミングよりも、パス長の短いアルゴリズムを選択することの方が重要になる理由です。
アセンブリ言語プログラムの命令パス長は、一般的にそのプログラムのソースコード行数とは大きく異なります。なぜなら、命令パス長には、特定の入力に対して実行される制御フロー内のコードのみが含まれ、特定の入力に関係のないコードや到達不可能なコードは含まれないからです。
高級言語で記述された1つのステートメントは、可変数の複数の機械語命令を生成する可能性があるため、例えばシミュレーション中に「実行された」命令の数をカウントできる命令セットシミュレータなどを用いない限り、命令パスの長さを正確に判断することは必ずしも可能ではありません。高級言語が「アセンブリリスト」をサポートし、必要に応じて生成できる場合は、このリストを調べることで命令パスの長さを推定できる場合があります。
上記から、命令パス長の知識は以下のように利用できることがわかる。