よしかわーるど

プログラミングで世界を変える

2018-09-06

コンピュータアーキテクチャのメモ

名称 説明
スーパコンピュータ スーパコンピュータ最新の技術により、超高性能を実現したコンピュータ。大規模な計算を高速に行う際に用いられる。
汎用コンピュータ 科学技術計算、事務処理、制御用など、ソフトウェア次第で様々な用途に利用することができる大型のコンピュータのことである。 基幹業務処理において利用されることが多い。 メインフレーム とも呼ばれる。
ワークステーション パーソナルコンピュータ (PC) と同程度か若干大きく、デスクトップに設置して使用されることが多い。専門特化したハードウェア,ソフトウェアを使用する。
マイクロコンピュータ 家電製品などに組み込まれている小型のコンピュータ

五大装置

コンピュータのハードウェアは大きく分けて、「制御装置」、「演算装置」、「記憶装置」、「入力装置」、「出力装置」の 5 つの装置から構成されている。これらの装置を五大装置と呼ぶ。

名称 役割
制御装置 各機器を制御する プロセッサ
演算装置 各種の演算を行う プロセッサ
記憶装置 プログラムやデータ、処理結果を記憶する メモリ、ハードディスクなど
入力装置 プログラムやデータを入力する キーボードなど
出力装置 処理結果を出力する ディスプレイ、プリンタなど

制御装置(Control Unit)と演算装置(Arithmetic Logic Unit)で構成される部分は、一般に*プロセッサ*(処理装置)と呼ばれる。

CPU(Central Processing Unit:中央処理装置)や MPU(Micro Processor Unit:超小型処理装置)などと呼ばれることもある。

従来

  • 一つのプロセッサ内に、中核となる処理ユニット(コア)を一つ配置するのが一般的だった。

現在

  • 高性能化や省電力化のため、一つのプロセッサ内に複数のコアを配置して、並列に処理をすすめる手法がとられる。このようなプロセッサの構成を*マルチコア*という。
  • 記憶装置は、*主記憶装置*と*補助記憶装置*に分けられ、主記憶装置のことを*メインメモリ*または単に*メモリ*と呼ぶこともあります。入力装置と出力装置のことをまとめて入出力装置と呼ぶこともある。
  • 集積回路(Integrated Circuit:IC)は、主としてシリコン単結晶などによる「半導体チップ」の表面および内部に、不純物の拡散による半導体トランジスタとして動作する構造や、アルミ蒸着とエッチングによる配線などで、複雑な機能を果たす電子回路の多数の素子が作り込まれている電子部品である。
  • 初期の集積回路はごくわずかなトランジスタを集積したものであった。これを SSI(Small Scale Integration)とするのであるが、後に MSI(Middle Scale Integration)や LSI(Large Scale Integration)が生まれる。

プロセッサの構成要素

プロセッサの構成要素を示す。アーキテクチャの設計によって要素が異なることがある。

プロセッサは、主記憶装置(メモリ)から読み込んだ命令やデータなどを*レジスタ*(プロセッサ内の高速な記憶装置)に格納して処理する。レジスタは、役割によって幾つかに分類される。各レジスタの役割を特化することで、効率の良い処理が行われる。

ここでいう”命令”は、コンピュータが直接理解して実行できる機械言語の命令のことを指す。

名称 役割
アドレスレジスタ 主記憶上のアドレスを保持するレジスタ
データレジスタ 主記憶から取り出した内容を保持するレジスタ
プログラムカウンタ 次に実行する命令のアドレスを保持するレジスタ
命令レジスタ 主記憶から取り出した命令を保持するレジスタ
インデックスレジスタ 有効アドレスの計算に用いるレジスタ。指標レジスタともいう
ベースレジスタ 有効アドレスの計算に用いるレジスタ
汎用レジスタ 処理結果の格納やインデックスレジスタ、ベースレジスタとして用いることの出来る、役割を限定しないレジスタ
フラグレジスタ 演算の正負や大小比較の結果を保持するレジスタ
デコーダ 命令を解読し、必要な機器に制御信号を送る機器
各種演算器 加算回路や補数回路など、各種の演算に用いる機器

アキュムレータ

演算対象となるデータや、一連の演算における途中結果などを保持するための「演算用のデータレジスタ」のことを、アキュムレータとよぶ。

命令の形式と実行

命令(機械語)の形式の詳細は各コンピュータのアーキテクチャによって異なるが、基本的には次のような「命令部+オペランド部」という構成をとる。

命令部には命令の種類を、オペランド部には処理対象を指定する。

  1. 命令フェッチ(命令の取り出し) 実行する命令を、プロセッサ内部の命令レジスタに取り込む。 実行すべき命令の番地(メモリ格納位置)は、プログラムカウンタに保持されている。 プロセッサはプログラムカウンタの内容が指す番地にアクセスし、そこに格納されている命令を読み出して、命令レジスタに格納する。 なお、命令の実行後は、次の命令を実行する準備として、プログラムカウンタの値を増やしておく。
  2. 命令解読 命令を解読(デコード)する。
  3. オペランド読み出し オペランドが主記憶上のデータを表す場合は、主記憶へアクセスし、その内容をプロセッサ側に取り込む必要がある。 まず、有効アドレス(実効アドレス)の計算を行います。有効アドレスとは、処理対象となるデータが格納されているアドレス。 オペランド部で指定したアドレス(アドレス定数)がそのまま有効アドレスになる場合もあれば、アドレス定数と各種レジスタの内容を元に有効アドレスを計算する場合もある。
  4. 命令実行 読み込んだオペランドなどの内容を用いて、命令部で指定された内容の演算処理を実行する。
  5. 結果の格納 もし必要であれば、結果をメモリやレジスタに格納する。

ROM と RAM

主記憶装置は半導体メモリで構成されている。半導体メモリは、ROM と RAM に大きく分類される。

  • ROM(Read Only Memory)
    • 原則として読み出し専用
    • コンピュータの基本設定や BIOS の記録に用いられる
    • 不揮発性
  • RAM(Random Access Memory)
    • 読み出し、書込み可能なメモリ
    • プログラム実行や作業領域として用いられる
    • 揮発性

ROM は「読み出し専用」メモリで、通常の利用では書き換えることのないコンピュータの基本設定や BIOS などを記録する。 BIOS はキーボードなどの周辺機器を制御するプログラム。 電源が投入されると、コンピュータは ROM から BIOS を読み込んでハードウェアのチェックを行う。 ROM に記録された内容は、コンピュータの電源を切っても失われることはない。このような性質を不揮発性とよぶ。 RAM は「読み書きが可能」なメモリ。一般的なプログラムはすべて RAM に読み込まれて実行される。通常用いられるメモリという言葉は、多くの場合 RAM を指す。RAM に記録されたないようは電源を切ると同時に失われる。このような性質を揮発性とよぶ。

ROM の種類

名称 ユーザによる書き込み 内容の消去
マスク ROM 不可能(内容は製造時に決定) 不可能
PROM 一度だけ可能 不可能
EPROM 複数回可能 可能(紫外線照射)
EEPROM 複数回可能 可能(高電圧をかける)

EEPROM(Electrically Erasable Programmable Read-Only Memory)は、電気的に内容の消去/再書き込みを行うので、内容の更新に ROM をコンピュータから取り出す必要がない。多くのコンピュータは EEPROM を用いている。デジタルカメラや携帯用オーディオの記憶媒体に用いられるフラッ sy メモリも EEPROM の一種。フラッシュメモリは、データをブロック単位で読み書きする性質を持つ EEPROM であり、USB メモリ、SD カードやコンパクトフラッシュといった外部記憶媒体に利用されている。

RAM の種類

RAM には DRAM と SRAM がある。

  • DRAM(Dynamic Random Access Memory)
    • 内容の保持のため定期的なリフレッシュが必要
    • (SRAM と比べて)低速・大容量
    • 主記憶に用いられる
  • SRAM(Static Random Access Memory)
    • フリップフロップにより内容の保持=>リフレッシュ不要
    • (DRAM と比べて)高速・小容量
    • 主にキャッシュメモリに用いられる

プロセッサの設計と高速化

プロセッサの設計思想や高速化技法を理解する。

名称 説明
命令パイプライン CPU 高速化の基礎となる技法。1 プロセッサの中で複数の命令を並列実行する
ハザード 命令パイプラインを阻害する要因
スーパパイプライン 命令パイプラインを高度化し、並列度を上げる技法
クロック周波数 プロセッサの動作テンポ
CPI 1 命令の実効に必要な平均クロック数
スーパスカラ 1CPU の中に複数の実行ユニットを設けて並列動作させる技法
VLIW 複数の実行ユニットを設けて、長形式命令を実行させる技法

RISC と CISC

プロセッサの設計思想について。プロセッサ設計に関する大きな流れには、大きく RISC と CISC がある。 RISC

  • 縮小命令セットコンピュータ(Reduced Instruction Set Computer)
    • 実行する命令を使用頻度の高い命令に限定
    • 命令の解読をワイヤーロジック方式で行うことが多い

CISC

  • 複合命令セットコンピュータ(Complex Instruction Set Computer)
    • 単純な命令から高機能命令まで用意
    • 命令の解読をマイクロプログラム制御方式で行うことが多い

ワイヤードロジック方式は、命令の解読をハードウェアで行う方式。命令解読は高速だが、複雑な命令の実現や拡張に対応するのが困難という特徴がある。 マイクロプログラム制御方式は、プロセッサ内部に小さなプログラム(マイクロプログラム)を用意し、これを実行して命令を解読するもの。ワイヤードロジック方式と比べると。速度は不利だが、命令の追加や拡張に柔軟に対応できるという特徴がある。

単純な命令だけを用意する RISC ではワイヤードロジック方式が、複雑な命令を多数用意する CISC ではマイクロプログラム方式が採用されることが多くなっている。

クロック周波数と CPI

プロセッサの高速化は、クロック周波数と CPI が重要な要素となる。 クロックとは、コンピュータ内で発している周期的な信号。また、クロック周波数とは、単位時間あたりのクロックが発せられる回数であり、プロセッサの動作テンポを表す。プロセッサや各装置は、クロックに同期して(タイミングを合わせて)動作する。 このため、アーキテクチャが同じプロセッサであれば、クロック周波数が高いほど性能が高い(高速である)といえる。ただし、アーキテクチャが異なるプロセッサの場合は、1 クロックあたりに行える処理の内容が異なるため、一概にクロック周波数だけでの性能比較は出来ない。 クロックの周波数の単位は Hz(ヘルツ)。たとえば、「1GHz で動作する」ということは、「プロセッサが 1 秒間に 1,000,000,000 回のテンポを刻む」ということ。 CPI(Cycles Per Instruction)は、1 命令の実行に要するクロック数のこと。たとえば、1GHz のプロセッサで CPI=10 の命令は、実行に 10 ナノ秒を要する計算になる。CPI を減らせれば、それだけ少ないクロック数で命令実行を行えると考えられる。

命令パイプライン

プロセッサの高速化の基礎となる技法が、命令パイプライン。 1 命令の実行は、たとえば、 命令フェッチ=>命令解読=>オペランド読み出し=>命令実行=>結果の格納 といったように複数の段階(ステージ)から構成され、各段階ごとに別々の実行ユニット(演算器、演算ユニットともいう)が使うのが一般的。単純な制御では 1 命令のすべての段階を終了してから次の命令に取り掛かることになりますが、「IF 用演算器は、1 個目の命令の IF を実行したら、すぐに 2 個目の命令の IF にとりかかる」ようにすれば、段階を 1 つずつずらしながら、複数の命令を並列に実行させるということも可能。複数の命令を並列に実行するということが、命令パイプラインの考え方。

RISC と命令パイプライン

一般的に単純な命令なほど、命令パイプラインの各ステージの処理時間が均質化し、パイプラインの段数(並列度)を高くしやすい。つまり、RISC と命令パイプラインは相性がいい。