コード順序の厳密性
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/02/10 20:03 UTC 版)
「スタックマシン」の記事における「コード順序の厳密性」の解説
最近のコンピュータでは、データをフェッチするのにかかる時間は、ALUで演算を行うのにかかる時間よりも長い。したがって、メモリ上のデータが実際に必要になるよりも十分前にフェッチを開始すれば、命令パイプラインをストールさせることなく高速に処理を継続できる。アウト・オブ・オーダー実行方式では、複数の命令をプロセッサが調べてそのような動作をしている。アウト・オブ・オーダー方式でなくともレジスタマシンであれば、コンパイラが賢ければそのようなコードを生成することができる。この命令スケジューリングには使っていないレジスタがなければならない。従って純粋なスタックマシンにはこのような命令の並べ替えは不可能である。例えば A - B という式があるとき、スタックマシンではAとBをロードしてスタックにプッシュしてから即座に減算を行う。途中に別の命令を挟もうとしても、スタックマシンの命令は基本的にスタックをいじるので、ほとんど何もできない。スタックマシンでは、メモリからのロード遅延を隠蔽できるほど深いパイプラインでアウト・オブ・オーダー実行を行うか、ハードウェアマルチスレッディングでスレッドを切り換えてロード遅延を隠蔽するしかない。ユニシスのA9システムでは後者の方式を実装している。最近では計算負荷の並列性が高まっており、この欠点は過去のものとなりつつある。
※この「コード順序の厳密性」の解説は、「スタックマシン」の解説の一部です。
「コード順序の厳密性」を含む「スタックマシン」の記事については、「スタックマシン」の概要を参照ください。
- コード順序の厳密性のページへのリンク