コード密度
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/19 08:08 UTC 版)
初期のコンピュータでは、メモリは高価で容量が少なかったため、メモリ上のプログラムのサイズを削減することが重要な課題であった。そのため、ある作業をするのに要する命令列のサイズを「コード密度; code density」と呼び、命令セットの重要な特性の1つとしていた。コード密度の高い命令セットでは、1つの命令で一度にいくつもの機能を実行できるようになっている。そのような複雑な命令セットを持つコンピュータ (CISC) では、基本的な操作(加算、乗算、サブルーチンへの分岐など)に加えて、メモリアクセス、レジスタのインクリメントといった操作を同時に行う。ソフトウェア実装の命令セットではさらに複雑な命令も存在する。 RISCは、メモリの低価格化に伴って登場した考え方であり、命令セットを単純化することでコード密度は低下する。RISCでは、各命令はレジスタ同士の加算などといった単純な操作しか行わない。 MISC (Minimal Instruction Set Computer) はスタックマシンの一種であり、命令数は非常に少なく(16から64種)、1ワードに複数の命令を格納可能となっている。MISCの実装にはチップ面積はごく小さくて済み、FPGA やマルチコアでの実装に適している。コード密度はRISCと同程度である(メモリ当たりの命令密度は増加しているが、命令数が少ないため、より多くの命令実行を必要とする)。例えば、FORTH言語を実装したチップがある。 命令セットの分類方法として、最も複雑な命令のオペランド数で分類する方法がある(以下で、a、b、c はメモリアドレス、reg1 などはレジスタを意味する)。 0オペランド(ゼロアドレスマシン) - スタックマシンとも呼ばれ、全てのオペランドをスタックから取り出して使用する。2つの数を加算する処理は4命令 (push a, push b, add, pop c) で行われる。 1オペランド - 初期のコンピュータでよく使われたモデルで、1つのオペランドを使って処理をし、結果をアキュムレータに格納する。2つの数を加算する処理は3命令 (load a, add b, store c) で行われる。 2オペランド - RISCマシンのほとんどはここに分類される。CISCマシンもここに分類されるものが多い。RISCの場合、2つの数を加算する処理は4命令 (load a,reg1, load b,reg2, add reg1,reg2, store reg2,b) で行われる。 3オペランド - 一部のCISCと、RISC の中ではごく一部に過ぎないがRISCの特徴を最も良く表すとされる、RISC I、MIPS、RSIC-Vがここに分類される。CISCの場合、2つの数を加算する処理は1命令 (add a,b,c) で行われるか、より一般的には(3つのオペランドがあっても、メモリを指定できるのはそのうち2つであることが多いため)2命令 (move a,reg1, add reg1,b,c) で行われる。RISCの場合、オペランドが3つであってもメモリアクセスと加算は別命令となるため、さらにロード命令とストア命令が必要になる。レジスタが32本なら、3つのオペランドを指定するのに15ビット必要となり、必然的に命令サイズは32ビットかそれ以上でなければならない。 4以上 - 一部のCISCでは3つ以上のレジスタを指定してメモリアクセスを行う命令が存在する。 コード密度を改善する機構として実行ファイル圧縮が研究されてきた。関連する数学上の概念としてコルモゴロフ複雑性がある。
※この「コード密度」の解説は、「命令セット」の解説の一部です。
「コード密度」を含む「命令セット」の記事については、「命令セット」の概要を参照ください。
- コード密度のページへのリンク