異なる種類のコンピューターアーキテクチャとは何ですか?


20

「コンピューティングシステムの要素」という本を読んでいます。この本は、コンピュータ全体をゼロから構築する方法を教えています。コンピューターアーキテクチャに関する章を参照している間、すべてがフォンノイマンアーキテクチャに焦点を合わせていることに気付きました。私は、他のアーキテクチャとは何か、いつ、どこで使用されるかについて興味がありました。

私は2つだけ知っています。1つはフォンノイマン、2つ目はハーバードです。また、AVRのuCで使用されるRISCについても知っています。


2
変更されたハーバードである3番目があります。純粋なハーバードは、同じストレージを使用してプログラムとデータの両方を保持することはできません。したがって、ハーバードのほぼすべての実装が変更され、命令メモリをデータとしてアドレス指定できるようになりました。
ゴリラ

1
素晴らしい質問です。
匿名タイプ

回答:


27

コンピュータアーキテクチャにはさまざまな種類があります。

コンピュータアーキテクチャを分類する1つの方法は、クロックごとに実行される命令の数です。多くのコンピューティングマシンは、一度に1つの命令を読み取って実行します(または、あたかも、内部的には派手なスーパースカラーやアウトオブオーダーなどを行っていても、そうします。これらのマシンはすべてフォンノイマンのボトルネックがあるため、「フォンノイマン」マシンと呼びます。このようなマシンには、CISC、RISC、MISC、TTA、およびDSPアーキテクチャが含まれます。このようなマシンには、アキュムレータマシン、レジスタマシン、スタックマシンが含まれます。他のマシンは一度に複数の命令(VLIW、スーパースカラー)を読み取って実行します。これにより、1クロックあたり1命令の制限が解除されますが、1クロックあたりの命令数がわずかに多くなるとフォンノイマンのボトルネックが発生します。さらに他のマシンは、電源投入時に一度すべての操作をプリロードしてから、それ以上の指示なしにデータを処理するため、フォンノイマンのボトルネックによる制限を受けません。このような非Von-Neumannマシンには、データフローアーキテクチャ、

コンピュータアーキテクチャを分類するもう1つの方法は、CPUとメモリ間の接続です。一部のマシンには統合メモリがあり、単一のアドレスがメモリの単一の場所に対応し、そのメモリがRAMの場合、そのアドレスを使用してデータを読み書きしたり、そのアドレスをプログラムカウンターに読み込んでコードを実行したりできます。私はこれらの機械をプリンストン機械と呼びます。他のマシンにはいくつかの個別のメモリ空間があり、どのアドレスがロードされてもプログラムカウンタは常に「プログラムメモリ」を参照し、通常の読み取りと書き込みは常に「データメモリ」に移動します。データアドレスのビットがプログラムメモリアドレスのビットと同じであっても情報。これらのマシンは「純粋なハーバード」または「

ハーバードマシンを含まない「フォンノイマンマシン」の狭い定義を使用する人もいます。あなたがそのような人なら、ハーバードとプリンストンの両方のマシンを含み、NON-VONを除外する「フォン・ノイマンのボトルネックを持つマシン」というより一般的な概念にどの用語を使用しますか?

ほとんどの組み込みシステムはハーバードアーキテクチャを使用しています。いくつかのCPUは「純粋なハーバード」であり、おそらくハードウェアに組み込む最も簡単な構成です。読み取り専用プログラムメモリへのアドレスバスは、多くの初期のMicrochip PICmicrosなどのプログラムカウンタに排他的に接続されます。加えて、一部の変更されたハーバードマシンは、プログラムメモリに定数を入れます。これは、「プログラムメモリから定数データを読み取る」命令(「データメモリから読み取る」命令とは異なる)で読み取ることができます。上記の種類のハーバードマシンで実行されているソフトウェアは、プログラムメモリを変更できません。プログラムメモリは、事実上そのソフトウェアのROMです。一部の組み込みシステムは「自己プログラム可能」であり、通常はフラッシュメモリにプログラムメモリがあり、特別な「フラッシュメモリの消去ブロック」があります。「プログラムメモリからデータを読み取る」命令に加えて、特別な「フラッシュメモリのブロックを書き込む」命令(通常の「データメモリに書き込む」命令とは異なる)。最近のいくつかのMicrochip PICmicrosとAtmel AVRは、自己プログラム可能な修正ハーバードマシンです。

CPUを分類する別の方法は、クロックによるものです。ほとんどのコンピューターは同期式であり、単一のグローバルクロックを備えています。かつて地球上で最速のスーパーコンピューターだったILLIAC IとILLIAC IIを含め、いくつかのCPUは非同期です(クロックを備えていません)。

http://en.wikibooks.org/wiki/Microprocessor_Design/Computer_Architectureで、あらゆる種類のコンピューターアーキテクチャの説明の改善にご協力ください 。


2
うわー、私が質問をした後、長い間その知識を差し控えたことについてあなたに恥をかきます。
Rick_2047

3
@Rick-その答えは作曲に長い時間がかかったようです。davidcaryがあなたの質問に答えるのに時間がかかったことに感謝してください!一部の人々はあなたと同じスケジュールで動作していません。
ケビンフェルメール

2
@reemrevnivekそれは冗談の男として意図されていました。
Rick_2047

この回答がコミュニティWikiの回答としてマークされていると便利です。
トリグヴェLaugstøl

8

CISCはRISCの「反対」です。RISCは、コンパイラーが最適化するのが簡単で、多くの場合同じサイズである単純な命令を好むのに対し、CISCはサイズの異なる複雑な命令を好みます。

例えば、CISCでポップ命令はスタックポインタを変更しますし、別のレジスタにスタックからデータを配置します。ただし、RISCプロセッサは1つの命令でデータを読み取り、2番目の命令でスタックポインターを変更します。(一般的に、スタックポインターを更新してデータをスタックにプッシュできるPowerPCなど、いくつかの例外がありますが、それは例外です)

RISC命令はすべて同じサイズであるため、逆アセンブラーの作成は簡単です。パイプラインはさまざまな命令サイズを考慮する必要がないため、プロセッサの設計も簡単です。ただし、CISCコード密度は、複雑な命令が同じ数の操作を表すために必要なバイト数が少ないためと、可変命令長により「圧縮」が可能になるため、より良い傾向があります。

VLIW / EPICなど、他のエキゾチックなアーキテクチャもあります。この種のアーキテクチャは、並列処理を考慮して設計されました。ただし、最適化のためにコンパイラに非常に大きな負担をかけるため、あまりうまくいきませんでした。一方、他のアーキテクチャには、コンパイラの最適化の負担を軽減する派手な命令ウィンドウがあります。


1
気に入ったら受け入れてください。
Kortuk

5

ええと、ENIACのようなものがあり、そこでは本質的に個々のALUがあり、1つのaluの出力をその中間変数で次の操作を実行する別のaluの入力に「プログラム」します。「レジスタ」とストレージは、alusを接続するワイヤです。

最近、「The First Computers--History and Architectures(History of Computing)」という本を購入しました。この本の一部はこの正確なトピックに焦点を当てています。この本を購入することはお勧めしませんが、これは学術論文のコレクションであり、読むのが難しく、おそらく他の場所で(無料で)出版されていると思われます。(紹介を終える前にgaveめました)

記憶が発明され実用的になったら、私たちは2つの人気のあるフォンノイマンとハーバードに落ち着きました。再配線、パンチカード、紙テープなどから実行することは実用的ではなくなりました。また、スタックベース(たとえばzpu)がありますが、これはおそらくハーバードカテゴリに属し、独自のものではないのではないかと思われます。

あるメモリインターフェイスの読み取り専用(通常の使用時)フラッシュから起動し、別のメモリインターフェイスに読み取り/書き込みデータRAMがある(場合によっては両方で同時に動作する)フォンノイマンプラットフォームについてはどうでしょうか?アドレス空間?または、複数の内部および外部メモリ/インターフェースがすべて並行して動作しているものの、同じアドレス空間にあるためにフォンノイマンであるもの。

ブートローダーを変更/アップグレードするため、またはブートローダーが実行する次のプログラムをロードするために、プロセッサがデータとして命令メモリにアクセスできないハーバードプラットフォームは何が良いでしょうか?なぜフォンノイマンアーキテクチャではないのですか?プロセッサは、同じインターフェイスの同じメモリから実行され、同じメモリ上で動作している可能性があります(命令フェッチとメモリ書き込みが同時に発生しない)。

2つの一般的なメモリベースのアーキテクチャは、現在の実装IMOで異なるよりも近いです。

GPUはどこに落ちますか?または私が働いているビジネス、ネットワークプロセッサ(NPU)。プログラムRAMのようなハーバードから実行するこれらの比較的小さな特殊目的のマイクロエンジン(プロセッサ)(アドレス指定可能ですが、パフォーマンス上の理由でそれを行いたくない)がある場合、それぞれ独自の個別のアドレススペースを持つさまざまなデータRAMを操作します(別個のプロセッサ各空間の命令)、(並列に動作するメモリ空間)、およびこれらのRAMを介して中間データを渡して、次の計算を次のマイクロエンジンによって有線alu(エニアック)のように行いますか?それを何と呼びますか?npusとgpusは、ハーバードアーキテクチャを改変しただけですか?


「プロセッサが次のプログラムをロードして実行できないハーバードプラットフォームはどれほど優れているでしょうか?」多くのCPUには、そのCPUで実行されているソフトウェアで変更できない固定プログラムがあります。この配置の利点の1つは、ランダムメモリに書き込むバグ、または悪いソフトウェアアップデート、あるいは良いソフトウェアアップデートとタイミングの悪い電源障害でシステムを「ブリック」することが不可能になることです。ソフトウェアの更新が難しくなりますが、実際には、電子レンジでソフトウェアを何回変更しましたか?
-davidcary

2
電子レンジではありませんが、私はマイクロコントローラーのコーディングにかなりの時間を費やし、1日に何度もソフトウェアをリロードします。小型でバグのないROMベースのシステムに限定されているため、ブリック問題はvon neumannを使用して簡単に解決できます。ここで説明するシステムは、ハーバードアーキテクチャのもう1つの機能である個別のバスのパフォーマンス向上にはほとんど役立ちません。だから私のポイントは、ハーバードアーキテクチャは、プログラムをロードする方法がないとうまく拡張できず、やや時代遅れになるということでした。
old_timer

1
うーん、彼らは実際にはそうではないときにcortex-m3ハーバードを呼び出します。avrと同じです(修正ハーバードとも呼ばれます)。純粋なハーバードアーキテクチャプロセッサ(PIC)があり、かつてはより純粋なフォンノイマンでしたが、ほとんどは変更されたハーバードまたは変更されたフォンノイマン(並列でのデータアクセスと命令アクセス)であり、異なるよりも同じです。私の答えで私が向かった場所は、純粋なハーバードと純粋なフォンノイマンの両方が急速に時代遅れになっています。ポスターは、他に何が存在するかを知りたがっています。
old_timer

4

フォンノイマンとハーバードの両方のアーキテクチャは、AVRやARMなどのRISCプロセッサで使用できます。AVRはハーバードを使用しますが、一部のARMチップはフォンノイマンを使用し、一部はハーバードを使用します。


-1を使用して、より興味深い回答の下に並べ替えます。
オスカースコグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.