(57)【要約】  一態様において本発明はシステムであり、（ａ）単一のチップ上の複数の並列プロセッサと、（ｂ）チップ上に配置されていて、かつプロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、プロセッサの各々は、プロセッサの中の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを有している。別の態様において本発明はシステムであり、（ａ）単一のチップ上の複数の並列プロセッサと、（ｂ）チップ上に配置されていて、かつプロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であり、各プロセッサは、チップ上のコンピュータメモリの内部データバスにアクセスし、内部データバスはメモリの１行の幅である。
2010532905.tif 000002
【特許請求の範囲】
【請求項１】
メモリモジュール上に搭載された複数の並列プロセッサと、
外部メモリコントローラと、
汎用中央演算処理装置とを備えていて、
前記並列プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であることを特徴とするシステム。
【請求項２】
前記並列プロセッサの各々は、de minimis命令セットを処理するように動作可能であることを特徴とする請求項１に記載のシステム。
【請求項３】
メモリモードレジスタに割り当てられる１以上のビットは、前記並列プロセッサのうちの１つ以上をイネーブルまたはディスエーブルにするように動作可能であることを特徴とする請求項１に記載のシステム。
【請求項４】
前記メモリモジュールは、デュアルインラインメモリモジュールであることを特徴とする請求項１に記載のシステム。
【請求項５】
前記プロセッサの各々は、単一のスレッドを処理するように動作可能であることを特徴とする請求項１に記載のシステム。
【請求項６】
複数のスレッドが、共有メモリを通してデータを共有することを特徴とする請求項５に記載のシステム。
【請求項７】
複数のスレッドが、１つ以上の共有変数を通してデータを共有することを特徴とする請求項５に記載のシステム。
【請求項８】
前記メモリモジュールは、ＤＲＡＭ、ＳＲＡＭ、およびフラッシュメモリのうちの１つ以上であることを特徴とする請求項１に記載のシステム。
【請求項９】
少なくとも一つの前記並列プロセッサがマスタプロセッサとみなされ、他の前記並列プロセッサはスレーブプロセッサとみなされることを特徴とする請求項１に記載のシステム。
【請求項１０】
各プロセッサは、クロック速度を有していて、前記マスタプロセッサ以外の各プロセッサは、性能または電力消費を最適化するように調整された前記プロセッサのクロック速度を有するように動作可能であることを特徴とする請求項９に記載のシステム。
【請求項１１】
各プロセッサは、マスタプロセッサまたはスレーブプロセッサとみなされるように動作可能であることを特徴とする請求項９に記載のシステム。
【請求項１２】
前記マスタプロセッサは、いくつかのスレーブプロセッサによる処理を要求し、前記いくつかのスレーブプロセッサからの出力を待ち、かつ前記出力を結合することを特徴とする請求項９に記載のシステム。
【請求項１３】
前記マスタプロセッサは、前記出力が前記いくつかのプロセッサの各々から受信されるとき、前記いくつかのプロセッサからの出力を結合することを特徴とする請求項１２に記載のシステム。
【請求項１４】
停止されるべき前記並列プロセッサのうちの１つ以上をイネーブルにすることによって、低電力消費が提供されることを特徴とする請求項１に記載のシステム。
【請求項１５】
前記並列プロセッサの各々は、プログラムカウンタを伴っていて、前記並列プロセッサが伴っているプログラムカウンタに全て１を書き込むことによって停止されるように動作可能であることを特徴とする請求項１４に記載のシステム。
【請求項１６】
ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のダイに埋め込まれた複数の並列プロセッサを備えていて、
前記複数の並列プロセッサは、外部メモリコントローラおよび外部プロセッサと通信し、
前記並列プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であることを特徴とするシステム。
【請求項１７】
前記ダイは、ＤＲＡＭピン配列を有するパッケージに入れられていることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記並列プロセッサは、デュアルインラインメモリモジュール上に搭載されていることを特徴とする請求項１６に記載のシステム。
【請求項１９】
前記システムは、前記プロセッサがＤＲＡＭモードレジスタを通してイネーブルにされる時以外は、ＤＲＡＭとして動作することを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記外部プロセッサは、関連する永久記憶装置から前記ＤＲＡＭにデータおよび命令を転送するように動作可能であることを特徴とする請求項１６に記載のシステム。
【請求項２１】
前記永久記憶装置は、フラッシュメモリであることを特徴とする請求項２０に記載のシステム。
【請求項２２】
前記外部プロセッサは、前記並列プロセッサと外部装置との間の入出力インターフェースを提供するように動作可能であることを特徴とする請求項１６に記載のシステム。
【請求項２３】
単一のチップ上の複数のプロセッサと、
前記チップ上に配置されていて、前記プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、
前記プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、かつ
前記プロセッサの各々は、前記プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを有していることを特徴とするシステム。
【請求項２４】
前記ローカルキャッシュの各々のサイズは、前記チップ上のランダムアクセスメモリの１行に等しいことを特徴とする請求項２３に記載のシステム。
【請求項２５】
各前記プロセッサは、前記チップ上のランダムアクセスメモリの内部データバスにアクセスし、前記内部データバスは、ランダムアクセスメモリの１行の幅を有していることを特徴とする請求項２３に記載のシステム。
【請求項２６】
前記内部データバスの幅は、１０２４、２０４８、４０９６、８１９２、１６３２８、または３２６５６ビットであることを特徴とする請求項２５に記載のシステム。
【請求項２７】
前記内部データバスの幅は、１０２４ビットの整数倍であることを特徴とする請求項２５に記載のシステム。
【請求項２８】
前記プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュは、１メモリ読出し又は書込みサイクルの中で満たされるか又は消去されるように動作可能であることを特徴とする請求項２３に記載のシステム。
【請求項２９】
前記de minimis命令セットは、基本的に７つの基本命令から成ることを特徴とする請求項２３に記載のシステム。
【請求項３０】
前記基本命令セットは、ＡＤＤ、ＸＯＲ、ＩＮＣ、ＡＮＤ、ＳＴＯＲＥＡＣＣ、ＬＯＡＤＡＣＣ、およびＬＯＡＤＩ命令を含むことを特徴とする請求項２９に記載のシステム。
【請求項３１】
前記de minimis命令セット内の各命令は、長さが最長でも８ビットであることを特徴とする請求項２３に記載のシステム。
【請求項３２】
前記de minimis命令セットは、プロセッサ上での命令シーケンスの実行を最適化するための複数の命令拡張を有していて、更に、このような命令拡張は、基本的に２０未満の命令から成ることを特徴とする請求項２３に記載のシステム。
【請求項３３】
各命令拡張は、長さが最長でも８ビットであることを特徴とする請求項２３に記載のシステム。
【請求項３４】
前記de minimis命令セットは、前記チップ上の複数のプロセッサを選択的に制御するための一組の命令を有していることを特徴とする請求項２３に記載のシステム。
【請求項３５】
各プロセッサ制御命令は、長さが最長でも８ビットであることを特徴とする請求項３４に記載のシステム。
【請求項３６】
複数のプロセッサは、モノリシックメモリデバイスのために設計された半導体製造プロセスを用いて前記チップ上に配置されるコンピュータメモリと共に前記チップ上に製造されることを特徴とする請求項２３に記載のシステム。
【請求項３７】
半導体製造プロセスは、４層未満のメタル相互接続を用いることを特徴とする請求項３６に記載のシステム。
【請求項３８】
半導体製造プロセスは、３層未満のメタル相互接続を用いることを特徴とする請求項３６に記載のシステム。
【請求項３９】
複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの３０％未満の増加という結果をもたらすことを特徴とする請求項２３に記載のシステム。
【請求項４０】
複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの２０％未満の増加という結果をもたらすことを特徴とする請求項２３に記載のシステム。
【請求項４１】
複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの１０％未満の増加という結果をもたらすことを特徴とする請求項２３に記載のシステム。
【請求項４２】
複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの５％未満の増加という結果をもたらすことを特徴とする請求項２３に記載のシステム。
【請求項４３】
２５０，０００個未満のトランジスタが、前記チップ上の各プロセッサを作成するために用いられることを特徴とする請求項２３に記載のシステム。
【請求項４４】
チップは、４層未満のメタル相互接続を用いる半導体製造プロセスを用いて製造されることを特徴とする請求項２３に記載のシステム。
【請求項４５】
前記プロセッサの各々は、単一のスレッドを処理するように動作可能であることを特徴とする請求項２３に記載のシステム。
【請求項４６】
アキュムレータは、インクリメント命令を除く、あらゆる基本命令のためのオペランドであることを特徴とする請求項２９に記載のシステム。
【請求項４７】
各基本命令のための宛先は、常にオペランドレジスタであることを特徴とする請求項２９に記載のシステム。
【請求項４８】
３つのレジスタは自動インクリメントであり、かつ３つのレジスタは自動デクリメントであることを特徴とする請求項２３に記載のシステム。
【請求項４９】
各基本命令は、完了するために１クロックサイクルのみを必要とすることを特徴とする請求項２９に記載のシステム。
【請求項５０】
前記命令セットは、分岐命令およびジャンプ命令を有していないことを特徴とする請求項２９に記載のシステム。
【請求項５１】
単一のマスタプロセッサが、前記並列プロセッサの各々を管理する役割を担っていることを特徴とする請求項２３に記載のシステム。
【請求項５２】
単一のチップ上の複数の並列プロセッサと、
前記チップ上に配置されていて、前記プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、
前記プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であり、かつ
各前記プロセッサは、前記チップ上のコンピュータメモリの内部データバスにアクセスし、前記内部データバスは、メモリの１行より幅が広くないことを特徴とするシステム。
【請求項５３】
前記プロセッサの各々は、de minimis命令セットを処理するように動作可能であることを特徴とする請求項５２に記載のシステム。
【請求項５４】
前記プロセッサの各々は、前記プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを有していることを特徴とする請求項５２に記載のシステム。
【請求項５５】
前記ローカルキャッシュの各々のサイズは、前記チップ上のコンピュータメモリの１行に等しいことを特徴とする請求項５４に記載のシステム。
【請求項５６】
少なくとも３つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含むことを特徴とする請求項５４に記載のシステム。
【請求項５７】
前記de minimis命令セットは、基本的に７つの基本命令から成ることを特徴とする請求項５３に記載のシステム。
【請求項５８】
前記基本命令セットは、ＡＤＤ、ＸＯＲ、ＩＮＣ、ＡＮＤ、ＳＴＯＲＥＡＣＣ、ＬＯＡＤＡＣＣ、およびＬＯＡＤＩ命令を含むことを特徴とする請求項５７に記載のシステム。
【請求項５９】
前記命令セット内の各命令は、長さが最長でも８ビットであることを特徴とする請求項５２に記載のシステム。
【請求項６０】
前記プロセッサの各々は、単一のスレッドを処理するように動作可能であることを特徴とする請求項５２に記載のシステム。
【請求項６１】
単一のマスタプロセッサが、前記並列プロセッサの各々を管理する役割を担っていることを特徴とする請求項５２に記載のシステム。
【請求項６２】
前記de minimis命令セットは、プロセッサ上での命令シーケンスの実行を最適化するための複数の命令拡張を有していて、更に、このような命令拡張は、２０未満の命令を有していることを特徴とする請求項５３に記載のシステム。
【請求項６３】
各命令拡張は、長さが最長でも８ビットであることを特徴とする請求項６２に記載のシステム。
【請求項６４】
前記de minimis命令セットは、前記チップ上の複数のプロセッサを選択的に制御するための一組の命令を有していることを特徴とする請求項５３に記載のシステム。
【請求項６５】
各プロセッサ制御命令は、長さが最長でも８ビットであることを特徴とする請求項６４に記載のシステム。
【請求項６６】
複数のプロセッサは、モノリシックメモリデバイスのために設計された半導体製造プロセスを用いて前記チップ上に配置されるコンピュータメモリと共に前記チップ上に製造されることが可能であることを特徴とする請求項５２に記載のシステム。
【請求項６７】
単一のチップ上の複数の並列プロセッサ、マスタプロセッサ、およびコンピュータメモリを利用するスレッドレベルの並列処理の方法において、前記複数のプロセッサの各々は、de minimis命令セットを処理し、かつ単一のスレッドを処理するように動作可能であり、
（ａ）ローカルキャッシュを前記複数のプロセッサの各々の中の３つの特定のレジスタの各々に割り当てるステップと、
（ｂ）単一のスレッドを処理するために複数のプロセッサのうちの１つを割り当てるステップと、
（ｃ）前記プロセッサによって各々の割り当てられたスレッドを処理するステップと、
（ｄ）前記プロセッサによって処理された各スレッドからの結果を処理するステップと、（ｅ）スレッドが処理された後に、前記複数のプロセッサのうちの１つの割り当てを解除するステップとを有していることを特徴とする方法。
【請求項６８】
de minimis命令セットは、基本的に７つの基本命令から成ることを特徴とする請求項６７に記載の方法。
【請求項６９】
前記基本命令は、ＡＤＤ、ＸＯＲ、ＩＮＣ、ＡＮＤ、ＳＴＯＲＥＡＣＣ、ＬＯＡＤＡＣＣ、およびＬＯＡＤＩ命令を有していることを特徴とする請求項６８に記載の方法。
【請求項７０】
de minimis命令セットは、複数のプロセッサを選択的に制御するための一組の命令を有していることを特徴とする請求項６７に記載の方法。
【請求項７１】
各プロセッサ制御命令は、長さが最長でも８ビットであることを特徴とする請求項７０に記載の方法。
【請求項７２】
各プロセッサが前記メモリの内部データバスを用いてコンピュータメモリにアクセスするステップを更に有していて、内部データバスは、前記チップ上のメモリの１行の幅であることを特徴とする請求項５２に記載の方法。
【請求項７３】
de minimis命令セット内の各命令は、長さが最長でも８ビットであることを特徴とする請求項６７に記載の方法。
【請求項７４】
メモリデバイスのための電子工業規格デバイスのパッケージングおよびピンレイアウトと互換性があるメモリチップの中に埋め込まれた複数のプロセッサを備えていて、
プロセッサのうちの１つ以上は、メモリチップのメモリモードレジスタに送信される情報によって起動することができ、メモリチップは、プロセッサのうちの１つ以上が前記メモリモードレジスタによって起動する場合を除き、工業規格メモリデバイスの動作と機能的に互換性があることを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドに最適化されたマルチプロセッサアーキテクチャに関する。
【背景技術】
【０００２】
コンピュータの速度は、２つの一般的な方法を用いて増加させることができる。命令実行速度を上げる、または並列により多くの命令を実行する。命令実行速度が、シリコン中の電子移動度の限界に近づくとき、並列法（parallelism）は、コンピュータの速度を上げるための最善の代替案になる。
【０００３】
並列法の以前の試みは、以下を含んでいる。
１．次の命令のフェッチング（fetching）を、現在の命令の実行とオーバーラップさせること。
２．命令のパイプライン化（pipelining）。命令パイプラインは、各命令をできるだけ多くの部分に分解し、次にシーケンシャル命令を並列実行ユニットの中にマッピングすることを試みる。理論上最高の改良は、多段階命令の非効率性、並列実行ユニットを満たされた状態に保つための十分なシーケンシャル命令を提供するための多くのソフトウェアプログラムの無能力、および、分岐、ループ、またはケース構文が実行ユニットの補充を必要とする状態に遭遇したとき、払われるかなりの時間ペナルティ（penalty）のために、めったに達成されない。
３．単一命令多重データ（Single instruction multiple data）すなわちSIMD。この種の技術は、インテルペンティアム（登録商標）３および他のプロセッサの中で実現されているように、インテルＳＳＥ命令セットの中で見つかる。この技術においては、単一の命令が複数のデータセット上で実行される。この技術は、特別なアプリケーション、例えばビデオグラフィックスレンダリングの用途にだけ役立つ。
４．ハイパーキューブ。この技術は、プロセッサおよびローカルメモリの大きな二次元アレイ（array）、時には三次元アレイを用いる。プロセッサのこれらのアレイをサポートするのに必要な通信および相互接続は、本質的に、それらを非常に専門化されたアプリケーションに限定する。
【０００４】
パイプラインは、１つの命令の実行の一部分、例えばフェッチ、デコード、実行、ストアなどを連続して実行する複数のシーケンシャルな段階から成る命令実行ユニットである。いくつかのパイプラインが並列に配置され得るので、全てのパイプラインが命令を実行している状態になるまで、プログラム命令が次々と各パイプラインに供給される。それから、満たされた命令は、最初のパイプラインで繰り返される。Ｎ個のパイプラインが命令および実行で満たされるとき、性能に対する効果は、単一の実行ユニットに対して実行速度をＮ倍増加させるのと理論的に同じである。
【０００５】
成功するパイプライン化は、以下に依存する。
１．命令の実行は、いくつかの連続した状態として定義されることが可能でなければならない。
２．各命令は、同じ数の状態を持っていなければならない。
３．命令当たりの状態の数は、並列実行ユニットの最大数を決定する。
【０００６】
パイプライン化は、並列のパイプラインの数に基づいて性能の上昇を成し遂げることができ、かつ、並列のパイプラインの数は、一命令の中の状態の数によって決定されるので、パイプラインは、複雑な複数の状態を持つ命令を助長する。
【０００７】
重度にパイプライン化されたコンピュータは、並列パイプライン実行ユニットから予想される理論的な性能の改善に近い性能を、めったに成し遂げることはない。このパイプラインペナルティ（penalty）のいくつかの理由は、以下を含んでいる。
１．ソフトウェアプログラムは、シーケンシャルな命令だけから構成されているわけではない。様々な研究は、実行フローの変化が８〜１０命令毎に起こることを示している。プログラムのフローを変化させる分岐は、パイプラインを転覆させる。パイプラインの転覆を最小限にする試みは、複雑かつそれらの緩和において不完全でありがちである。
２．全ての命令に同じ数の状態を持つことを強いることは、しばしば最小公分母（すなわち、最も遅くて最も複雑な）命令の要求を満たす実行パイプラインに導く。パイプラインのため、全命令は、それらが必要とするか否かを考えないで、同じ数の状態にされる。例えば、論理演算（例えばANDまたはOR）は、ADDより１桁速く実行されるが、両者は、しばしば、実行のために同量の時間を割り当てられる。
３．パイプラインは、複数の状態を有する複雑な命令を助長する。２状態を必要とする可能性がある命令は、通常２０状態を満たすように拡張される。なぜなら、それがパイプラインの深さであるからである。（インテルペンティアム（登録商標）４は、２０状態のパイプラインを用いている。）
４．各パイプラインの状態のために必要な時間は、特定の状態に対する設計マージンまたは許容誤差に加えて、論理回路および関連するトランジスタによる伝播遅延が原因であるにちがいない。
５．パイプラインレジスタおよび他のリソースのアクセスのための調停は、調停論理のトランジスタの伝播遅延により、しばしば性能を低下させる。
６．状態を追加すると、速度が上がるよりはむしろ、実際には実行が遅くなるということ以前に、一命令が分割され得る状態の数に対する上限が存在する。いくつかの研究は、ディジタルイクイップメントコーポレーションのアルファプロセッサの最近の世代のパイプラインアーキテクチャがその地点を越え、かつ実際に以前のより短いパイプラインのバージョンのプロセッサより実行が遅いことを示している。
【０００８】
パイプラインを別々に分割すること
ＣＰＵ設計の再考に対する１つの考え方は、複数（Ｎ個）の単純化されたプロセッサに分割された、パイプライン化された実行ユニットについて考えることである。（レジスタおよびいくつかの他のロジックは、このような設計においては複製されることが必要かもしれない。）Ｎ個の単純化されたプロセッサの各々は、上述したパイプラインアーキテクチャに勝る以下の利点がある。
１．パイプラインによる遅れがない。分岐予測が必要ない。
２．全ての命令に最も遅い命令と同じ実行時間を割り当てられるのではなく、命令に必要なだけの時間をとることができる。
３．命令は、必要な実行状態を減らすことによって単純化され、これによりパイプラインペナルティを減らすことができる。
４．パイプラインから除去される各状態によって伝播遅延を削減することができ、
かつこの状態のために必要な設計マージンを除くことができる。
５．レジスタの調停を除くことができる。
【０００９】
さらに、Ｎ個の単純化されたプロセッサを備えるシステムには、パイプライン化されたＣＰＵに勝る以下の利点がある。
１．最大パイプライン並列性の制限がない。
２．パイプライン型プロセッサとは異なり、複数の独立型プロセッサは、使用しないときに、電力消費を減らすために、選択的に電源を切ることができる。
【００１０】
並列法への現在のアプローチに関する他の課題
並列法の多くの実施態様は、アムダールの法則の制限に屈する。並列法による加速は、課題の直列不可能（non-serializable）部分に起因するオーバーヘッドによって制限される。本質的には、並列法の量が増加するにつれて、それをサポートするために必要な通信が、並列法に起因する増進を圧倒する。
【００１１】
レッドライン（Redline）にあるストップライト（Stoplight）
現在のプロセッサの他の非効率性は、即時の計算要求に応ずるためにコンピューティングパワーを拡大縮小する能力がないことである。大部分のコンピュータは、何かが起こるのを待ちつつ、それらの時間の大部分を費やしている。それらは、入出力、次の命令、メモリアクセス、または時にはヒューマンインタフェースを待っている。この待機は、コンピューティングパワーの非効率的な浪費である。さらに、待機に費やされるコンピュータの時間は、しばしば電力消費および熱の発生を増加させる結果となる。
【００１２】
待機の原則に対する例外は、エンジンコントローラ、シグナルプロセッサ、およびファイアウォールルータのようなアプリケーションである。これらのアプリケーションは、課題のセットおよび解決策のセットの予め定められた性質のために、並列法を加速するための優れた候補である。Ｎ個の独立した乗算の積を必要とする課題は、Ｎ個の乗算器を用いれば、より速く解くことができる。
【００１３】
汎用コンピュータの認められた性能は、実際にはそのピークの性能である。最近、汎用コンピュータが忙しくなり始めたのは、高速なスクリーンリフレッシュを伴うビデオゲームを走らせること、大きなソースファイルをコンパイルすること、またはデータベースを検索することによる。最適な世界において、ビデオレンダリングは、特別な目的、シェーディング、変換、およびレンダリングハードウェアを考慮に入れている。このような特定用途のハードウェアに対するプログラミングについて考える１つの方法は、「スレッド」の使用である。
【００１４】
スレッドは、独立したプログラムであり、自己完結型であり、まれにしかデータを他のスレッドに伝達しない。スレッドの一般的な使用法は、ゆっくりとしたリアルタイムの動作からデータを収集して、整理された結果を提供することである。スレッドは、ディスプレイ上の変化を描画するために用いられることもある。スレッドは、他のスレッドとの更なる相互作用を要求する前に、数千または数百万の状態を通って遷移することができる。独立したスレッドは、並列法を通して性能が増強される機会を示している。
【００１５】
多くのソフトウェアコンパイラは、ソフトウェア設計プロセスを考慮に入れるために、スレッドの生成および管理をサポートする。同じ考慮は、好ましい実施形態におけるスレッドに最適化されたマイクロプロセッサ（ＴＯＭＩ）の中で実現されるスレッドレベル並列法の技術を介して、複数のＣＰＵの並列処理をサポートする。
【００１６】
スレッドレベル並列法
スレッディングは、単一のＣＰＵ上のソフトウェアプログラムを考慮するために、よく理解された技術である。スレッドレベル並列法は、ＴＯＭＩプロセッサの使用を通してプログラムの加速を成し遂げることができる。
【００１７】
他の並列法に勝るＴＯＭＩプロセッサの１つの重要な利点は、ＴＯＭＩプロセッサが、現在のソフトウェアプログラミング技法に対して最小限の変更しか必要としないことである。新規なアルゴリズムが開発される必要はない。多くの既存のプログラムは、再コンパイルされる必要があるかもしれないが、実質的に書き直される必要はない。
【００１８】
効果的なＴＯＭＩコンピュータアーキテクチャは、多数の単純化されたプロセッサに関して構築されるべきである。異なるアーキテクチャが、異なるタイプのコンピューティング課題のために用いられ得る。
【００１９】
基本的なコンピュータの動作
汎用コンピュータにとって、頻度を下げる順として最も一般的な動作は、ロードおよびストア、シーケンシング、および数学（Math）およびロジックである。
【００２０】
ロードおよびストア
ロードおよびストアのパラメータは、ソースおよび宛先である。ロードおよびストアの力は、ソースおよび宛先の範囲である（例えば、４ギガバイトは、２５６バイトより強力な範囲である）。現在のソースおよび宛先と関連する局所性（locality）は、多くのデータセットにとって重要である。プラス１、マイナス１は最も役に立つ。現在のソースおよび宛先からのオフセットが増加するほど、次第に役立たなくなる。
【００２１】
ロードおよびストアは、メモリ階層によっても影響され得る。記憶装置からのロードは、ＣＰＵが実行することができる最も遅い動作である。
【００２２】
シーケンシング
分岐およびループは、基本的なシーケンシング命令である。テストに基づいてシーケンスが変わる命令は、コンピュータが決定を行うやり方である。
【００２３】
数学およびロジック
数学およびロジック動作は、３つの動作の中で使用が最も少ない。ロジック動作は、ＣＰＵが実行することができる最も速い動作であり、単一のロジックゲートの遅延と同じ程度に小さい遅延しか必要としない。数学動作は、より複雑である。なぜなら、上位ビットが下位ビットの演算の結果に依存するからである。３２ビットADDは、桁上げ先回り制御を用いても、少なくとも３２ゲートの遅延を必要とする。シフトおよび加算手法を用いるMULTIPLYは、３２個のADDに相当するものを必要とする。
【００２４】
命令サイズのトレードオフ
完全な命令セットは、演算コードから成り、それは、無限の可能なソース、宛先、演算、および次の命令を選択するのに十分大きい。残念なことに、完全な命令セットの演算コードは無限に幅が広く、従って命令のバンド幅はゼロである。
【００２５】
高い命令バンド幅のためのコンピュータ設計は、最少の演算コードビットで最も多くの共通ソース、宛先、演算、および次の命令を能率的に定めることができる演算コードを有する命令セットの作成を必要とする。
【００２６】
幅の広い演算コードは、高い命令バスバンド幅の要求につながり、結果として生じるアーキテクチャは、フォンノイマンボトルネックによって急速に制限され、コンピュータの性能は、メモリから命令をフェッチする速度によって制限される。
【００２７】
メモリバスが６４ビット幅である場合、各メモリサイクルの中で、単一の６４ビット命令、２つの３２ビット命令、４つの１６ビット命令、または８つの８ビット命令をフェッチすることができる。３２ビット命令は、１６ビット命令の２倍役立つべきである。なぜなら、それは半分の命令バンド幅をカットしているからである。
【００２８】
命令セット設計の主な目的は、命令の冗長性を減らすことである。一般に、最適化された効率的な命令セットは、命令およびデータの局所性を利用する。最も簡単な命令の最適化は、ずっと以前になされた。大部分のコンピュータプログラムにとって、最も見込みのある次の命令は、メモリの中のシーケンシャルな次の命令である。従って、次の命令フィールドを有するあらゆる命令の代わりに、大部分の命令は、次の命令が現在の命令＋１であると仮定する。ソースのための０ビットおよび宛先のための０ビットを有するアーキテクチャを構築することは可能である。
【００２９】
スタックアーキテクチャ
スタックアーキテクチャコンピュータは、ゼロオペランドアーキテクチャとも呼ばれる。スタックアーキテクチャは、プッシュダウンスタックの内容に基づいて、全ての動作を実行する。２オペランド動作は、スタックに両方のオペランドが存在することを必要とする。動作を実行するとき、両方のオペランドがスタックからPOPされ、動作が実行され、かつ結果がスタックにPUSHされて戻される。スタックアーキテクチャコンピュータは、非常に短い演算コードを有することができる。なぜなら、ソースおよび宛先は、スタックにあると暗示されているからである。
【００３０】
大部分のプログラムは、必要なときにスタックで必ずしも利用可能ではないグローバルレジスタの内容を必要とする。この発生を最小限にする試みは、スタックの先頭にあるオペランド以外のオペランドにアクセスすることを可能にするスタックインデクシングを含む。スタックインデクシングは、追加の演算コードビットがより大きい命令という結果をもたらすか、またはスタックインデックス値をスタック自体に配置するための追加の動作を必要とする。時には１つ以上の追加のスタックが定義される。より良好であるが最適ではない解決策は、コンビネーション  スタック/レジスタ  アーキテクチャである。
【００３１】
スタックアーキテクチャ動作は、明らかな最適化に逆らう方法で、しばしば冗長でもある。例えば、各POPおよびPUSH動作は、スタックがメモリの中で操作されるときに時間を浪費するメモリ動作を引き起こす可能性を有している。さらに、スタック動作は、次の動作のために直ちに必要となるかもしれないオペランドを消費する可能性があり、これにより、さらに別のメモリ動作の可能性によってオペランドの重複を必要とする。例えば、一次元アレイの全要素に１５を乗算する動作である。
【００３２】
１つのスタックアーキテクチャにおいて、これは以下によって実行される。
１．アレイの開始アドレスをPUSHする
２．アドレスをDUPLICATEする（それで、我々は、アレイに結果をストアするためのアドレスを持つ。）
３．アドレスをDUPLICATEする（それで、我々は、アレイから読み出すためのアドレスを持つ。）
４．PUSH INDIRECT（スタックの先頭によって示されているアレイ位置の内容をPUSHする）
５．PUSH 15
６．MULTIPLY（１５かける我々が第３行の中で読み出したアレイの内容）
７．SWAP（次の命令のためにスタックの先頭のアレイアドレスを得る。）
８．POP INDIRECT（乗算結果をPOPして、それをアレイに戻してストアする。）
９．INCREMENT（次のアレイ項目に対するポイント。）
１０．アレイが完了するまで、ステップ２へ行く。
第９行のループカウンタは、追加のパラメータを必要とする。いくつかのアーキテクチャにおいて、このパラメータは、他のスタックに格納される。
【００３３】
仮定的なレジスタ/アキュムレータ  アーキテクチャにおいて、この例は以下によって実現される。
１．アレイの開始アドレスをSTORE POINTERする
２．READ POINTER（アキュムレータに示されているアドレスの内容を読む。）
３．MULTIPLY 15
４．STORE POINTER（示されたアドレスの中へ結果をストアする。）
５．INCREMENT POINTER
６．アレイが完了するまで、第２行へ行く。
【００３４】
上記の例で、スタックアーキテクチャのための９ステップ対レジスタアーキテクチャのための５ステップを比較せよ。さらにまた、スタック動作は、スタック動作に起因して、余分のメモリアクセスのために少なくとも３回のあり得る機会を有している。仮定的なレジスタ/アキュムレータ  アーキテクチャのループ制御は、レジスタの中で容易に処理され得る。
【００３５】
スタックは、式（expression）を評価するために役立ち、ほとんどのコンパイラでこのように用いられる。スタックは、入れ子にされた動作、例えばファンクションコールのためにも役立つ。ほとんどのＣコンパイラは、ファンクションコールをスタックによって実行する。しかし、汎用記憶装置を補わないと、スタックアーキテクチャは、多くの追加データの転送および操作を必要とする。最適化のために、スタックPUSHおよびPOP動作は、また、数学およびロジック動作と区別しなければならない。しかし、上記の例から分かるように、スタックは、繰り返しデータをロードかつストアするとき、特に非効率的である。なぜならアレイアドレスがPUSH INDIRECTおよびPOP INDIRECTによって消費されるからである。
【発明の開示】
【課題を解決するための手段】
【００３６】
一態様において、本発明はシステムであり、（ａ）単一のチップ上の複数の並列プロセッサと、（ｂ）チップ上に配置されていて、プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、プロセッサの各々は、プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを備えている。
【００３７】
様々な実施形態において、（１）ローカルキャッシュの各々のサイズは、チップ上のランダムアクセスメモリの１行に等しい。（２）関連するキャッシュを有する少なくとも３つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含む。（３）de minimis命令セットは、７つの命令から成る。（４）プロセッサの各々は、単一のスレッドを処理するように動作可能である。（５）アキュムレータは、インクリメント命令を除く、あらゆる命令のためのオペランドである。（６）各命令のための宛先は、常にオペランドレジスタである。（７）３つのレジスタは自動インクリメントであり、３つのレジスタは自動デクリメントである。（８）各命令は、完了するのに１クロックサイクルしか必要としない。（９）命令セットは、BRANCH命令およびJUMP命令を備えていない。（１０）各命令は、長さが、長くても８ビットである。（１１）単一のマスタプロセッサは、並列プロセッサの各々を管理する役割を果たす。
【００３８】
別の態様において、本発明はシステムであり、（ａ）単一のチップ上の複数の並列プロセッサと、（ｂ）チップ上に配置されていて、プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能である。
【００３９】
様々な実施形態において、（１）プロセッサの各々は、de minimis命令セットを処理するように動作可能である。（２）プロセッサの各々は、プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを備えている。（３）ローカルキャッシュの各々のサイズは、チップ上のランダムアクセスメモリの１行に等しい。（４）少なくとも３つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含む。（５）de minimis命令セットは、７つの命令から成る。（６）プロセッサの各々は、単一のスレッドを処理するように動作可能である。（７）単一のマスタプロセッサは、並列プロセッサの各々を管理する役割を果たす。（８）de minimis命令セットは、プロセッサの動作を最適化してソフトウェアコンパイラの効率を促進するための命令拡張の最小限のセットを含んでいる。
【００４０】
別の態様において、本発明は、単一チップ上の複数の並列プロセッサ、マスタプロセッサ、およびコンピュータメモリを用いるスレッドレベルの並列処理方法であり、複数のプロセッサの各々は、de minimis命令セットを処理して、単一のスレッドを処理するように動作可能であり、（ａ）ローカルキャッシュを複数のプロセッサの各々の中の３つの特定のレジスタの各々に割り当てるステップと、（ｂ）単一のスレッドを処理するために、複数のプロセッサのうちの１つを割り当てるステップと、（ｃ）プロセッサによって各々の割り当てられたスレッドを処理するステップと、（ｄ）プロセッサによって処理された各スレッドからの結果を処理するステップと、（ｅ）スレッドが処理された後に、複数のプロセッサのうちの１つの割り当てを解除するステップとを有していて、（ｆ）de minimis命令セットは、プロセッサの管理を最適化するための命令の最小限のセットを含んでいる。
【００４１】
様々な実施形態において、de minimis命令セットは、７つの基本命令から成り、de minimis命令セット内の命令は、長さが最長でも８ビットである。de minimis命令セットは、７つの基本命令を越えて、一組の拡張命令を含み得る。これは、ＴＯＭＩ ＣＰＵの内部動作を最適化し、かつＴＯＭＩ ＣＰＵによって実行されるソフトウェアプログラム命令の実行を最適化するのを助け、かつＴＯＭＩ ＣＰＵのためのソフトウェアコンパイラの動作を最適化する。複数のＴＯＭＩ ＣＰＵコアを有する本発明の実施形態は、複数のＣＰＵコアを管理するために用いられるプロセッサ管理命令の限られたセットを有していてもよい。
【００４２】
別の態様において、本発明は、以下のものを備えているシステムである。（ａ）メモリモジュール上に搭載された複数の並列プロセッサと、（ｂ）外部メモリコントローラと、（ｃ）汎用中央演算処理装置。ここで、並列プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能である。
【００４３】
様々な実施形態において、（１）並列プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、（２）メモリモードレジスタ内で割り当てられた１つ以上のビットは、並列プロセッサのうちの１つ以上をイネーブルまたはディセーブルにするように動作可能であり、（３）メモリモジュールは、デュアルインラインメモリモジュールであり、（４）プロセッサの各々は、単一のスレッドを処理するように動作可能であり、（５）複数のスレッドは、共有メモリを通じてデータを共有し、（６）複数のスレッドは、１つ以上の共有変数によってデータを共有し、（７）メモリモジュールは、ＤＲＡＭ、ＳＲＡＭ、およびフラッシュメモリのうちの１つ以上であり、（８）少なくとも１つの並列プロセッサがマスタプロセッサとみなされ、他の並列プロセッサはスレーブプロセッサとみなされ、（９）各プロセッサは、クロック速度を有していて、マスタプロセッサ以外の各プロセッサは、性能または電力消費を最適化するために調整されたプロセッサのクロック速度を有するように動作可能であり、（１０）各プロセッサは、マスタプロセッサまたはスレーブプロセッサとみなされるように動作可能であり、（１１）マスタプロセッサは、いくつかのスレーブプロセッサによる処理を要求し、いくつかのスレーブプロセッサからの出力を待ち、かつ出力を結合し、（１２）マスタプロセッサは、出力が、いくつかのプロセッサの各々から受信されると、いくつかのプロセッサからの出力を結合し、（１３）１つ以上の並列プロセッサが停止されることを可能にすることによって、低電力消費が提供され、（１４）並列プロセッサの各々は、プログラムカウンタを伴っていて、並列プロセッサに伴われているプログラムカウンタに全て１を書き込むことによって停止されるように動作可能である。
【００４４】
別の態様において、本発明は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のダイの中に埋め込まれた複数の並列プロセッサを備えていて、複数の並列プロセッサは、外部メモリコントローラおよび外部プロセッサと通信し、並列プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であることを特徴とするシステムである。
【００４５】
様々な他の実施形態において、（１）ダイは、ＤＲＡＭピン配列を有するパッケージに入れられていて、（２）並列プロセッサは、デュアルインラインメモリモジュール上に搭載され、（３）システムは、プロセッサがＤＲＡＭモードレジスタによってイネーブルにされる場合を除き、ＤＲＡＭとして動作し、（４）外部プロセッサは、関連する永久記憶装置からＤＲＡＭへデータおよび命令を転送するように動作可能であり、（５）永久記憶装置は、フラッシュメモリであり、（６）外部プロセッサは、並列プロセッサと外部装置との間の入出力インターフェースを提供するように動作可能である。
【００４６】
別の態様において、本発明は、以下のようなシステムである。（ａ）単一のチップ上の複数のプロセッサと、（ｂ）チップ上に配置されていて、プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、かつプロセッサの各々は、プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを有している。
【００４７】
様々な他の実施形態において、（１）ローカルキャッシュの各々のサイズは、チップ上のランダムアクセスメモリの１行（row）に等しく、（２）各プロセッサは、チップ上のランダムアクセスメモリの内部データバスにアクセスし、内部データバスは、ランダムアクセスメモリの１行の幅を有していて、（３）内部データバスの幅は、１０２４、２０４８、４０９６、８１９２、１６３２８、または３２６５６ビットであり、（４）内部データバスの幅は、１０２４ビットの整数倍であり、（５）プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュは、１メモリ読出し又は書込みサイクル内で満たされるか又は消去されるように動作可能であり、（６）de minimis命令セットは、基本的に７つの基本命令から成り、（７）基本命令セットは、ＡＤＤ、ＸＯＲ、ＩＮＣ、ＡＮＤ、ＳＴＯＲＥＡＣＣ、ＬＯＡＤＡＣＣ、およびＬＯＡＤＩ命令を含み、（８）de minimis命令セット内の各命令は、長さが最長でも８ビットであり、（９）de minimis命令セットは、プロセッサ上での命令シーケンスの実行を最適化するための複数の命令拡張を有していて、更に、このような命令拡張は、基本的に２０未満の命令から成り、（１０）各命令拡張は、長さが最長でも８ビットであり、（１１）de minimis命令セットは、チップ上の複数のプロセッサを選択的に制御するための一組の命令を有していて、（１２）各プロセッサ制御命令は、長さが最長でも８ビットであり、（１３）複数のプロセッサは、モノリシックメモリ装置のために設計された半導体製造プロセスを用いてチップ上に配置されるコンピュータメモリと共にチップ上に製造され、（１４）半導体製造プロセスは、４層未満のメタル相互接続を用いていて、（１５）半導体製造プロセスは、３層未満のメタル相互接続を用いていて、（１６）複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの３０％未満の増加という結果をもたらし、（１７）複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの２０％未満の増加という結果をもたらし、（１８）複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの１０％未満の増加という結果をもたらし、（１９）複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの５％未満の増加という結果をもたらし、（２０）２５０，０００個未満のトランジスタが、チップ上の各プロセッサを作成するために用いられ、（２１）チップは、４層未満のメタル相互接続を用いた半導体製造プロセスを用いて製造され、（２２）プロセッサの各々は、単一のスレッドを処理するように動作可能であり、（２３）アキュムレータは、インクリメント命令を除く、あらゆる基本命令のためのオペランドであり、（２４）各基本命令のための宛先は、常にオペランドレジスタであり、（２５）３つのレジスタは自動インクリメントであり、かつ３つのレジスタは自動デクリメントであり、（２６）各基本命令は、完了するために１クロックサイクルのみを必要とし、（２７）命令セットは、ＢＲＡＮＣＨ命令およびＪＵＭＰ命令を有しておらず、（２８）単一のマスタプロセッサが、並列プロセッサの各々を管理する役割を担��ている。
【００４８】
別の態様において、本発明は、以下のようなシステムである。（ａ）単一のチップ上の複数の並列プロセッサと、（ｂ）チップ上に配置されていて、プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であり、かつ各プロセッサは、チップ上のコンピュータメモリの内部データバスにアクセスし、内部データバスは、メモリの１行より幅が広くない。
【００４９】
様々な実施形態において、（１）プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、（２）プロセッサの各々は、プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを有していて、（３）ローカルキャッシュの各々のサイズは、チップ上のコンピュータメモリの１行に等しく、（４）少なくとも３つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含み、（５）de minimis命令セットは、基本的に７つの基本命令から成り、（６）基本命令セットは、ＡＤＤ、ＸＯＲ、ＩＮＣ、ＡＮＤ、ＳＴＯＲＥＡＣＣ、ＬＯＡＤＡＣＣ、およびＬＯＡＤＩ命令を含み、（７）命令セット内の各命令は、長さが最長でも８ビットであり、（８）プロセッサの各々は、単一のスレッドを処理するように動作可能であり、（９）単一のマスタプロセッサが、並列プロセッサの各々を管理する役割を担っていて、（１０）de minimis命令セットは、プロセッサ上での命令シーケンスの実行を最適化するための複数の命令拡張を有していて、更に、このような命令拡張は、２０未満の命令を有していて、（１１）各命令拡張は、長さが最長でも８ビットであり、（１２）de minimis命令セットは、チップ上の複数のプロセッサを選択的に制御するための一組の命令を有していて、（１３）各プロセッサ制御命令は、長さが最長でも８ビットであり、（１４）複数のプロセッサは、モノリシックメモリデバイスのために設計された半導体製造プロセスを用いてチップ上に配置されるコンピュータメモリと共にチップ上に製造されることが可能である。
【００５０】
別の態様において、本発明は、単一のチップ上の複数の並列プロセッサ、マスタプロセッサ、およびコンピュータメモリを利用するスレッドレベルの並列処理の方法であり、複数のプロセッサの各々は、de minimis命令セットを処理し、かつ単一のスレッドを処理するように動作可能であり、以下のステップを有している。（ａ）ローカルキャッシュを複数のプロセッサの各々の中の３つの特定のレジスタの各々に割り当てるステップと、（ｂ）単一のスレッドを処理するために複数のプロセッサのうちの１つを割り当てるステップと、（ｃ）プロセッサによって各々の割り当てられたスレッドを処理するステップと、（ｄ）プロセッサによって処理された各スレッドからの結果を処理するステップと、（ｅ）スレッドが処理された後に、複数のプロセッサのうちの１つの割り当てを解除するステップ。
【００５１】
様々な実施形態において、（１）de minimis命令セットは、基本的に７つの基本命令から成り、（２）基本命令は、ＡＤＤ、ＸＯＲ、ＩＮＣ、ＡＮＤ、ＳＴＯＲＥＡＣＣ、ＬＯＡＤＡＣＣ、およびＬＯＡＤＩ命令を有していて、（３）de minimis命令セットは、複数のプロセッサを選択的に制御するための一組の命令を有していて、（４）各プロセッサ制御命令は、長さが最長でも８ビットであり、（５）方法は、各プロセッサがメモリの内部データバスを用いてコンピュータメモリにアクセスするステップを更に有していて、内部データバスは、チップ上のメモリの１行の幅であり、（６）de minimis命令セット内の各命令は、長さが最長でも８ビットである。
【００５２】
別の態様において、本発明は、以下のようなシステムである。（ａ）メモリデバイスのための電子工業規格デバイスのパッケージングおよびピンレイアウトと互換性があるメモリチップ内に埋め込まれた複数のプロセッサを備えていて、（ｂ）プロセッサのうちの１つ以上は、メモリチップのメモリモードレジスタに送信される情報によって起動することができ、ここで、メモリチップは、プロセッサのうちの１つ以上がメモリモードレジスタを通じて起動する場合を除き、工業規格メモリデバイスの動作と機能的に互換性がある。
【図面の簡単な説明】
【００５３】
【図１】一実施形態における例示的なＴＯＭＩアーキテクチャを示している。
【図２】例示的な命令セットを示している。
【図２Ａ】動作中の前方分岐を示している。
【図２Ｂ】例示的なＴＯＭＩ命令セットのための命令マップを示している。
【図２Ｃ】複数のＴＯＭＩプロセッサ管理命令拡張の例示的なセットを示している。
【図２Ｄ】ＴＯＭＩプロセッサのためのクロックプログラミング回路を示している。
【図２Ｅ】命令拡張の例示的なセットを示している。
【図３】様々なアドレッシングモードの有効アドレスを示している。
【図４】４〜３２ビットから如何にしてデータ経路が容易に作成されるかを示している。
【図５】例示的なローカルキャッシュを示している。
【図６】例示的なキャッシュ管理状態を示している。
【図７Ａ】幅の広いシステムＲＡＭバスを活用するために構成された追加の処理機能の一実施形態を示している。
【図７Ｂ】ＴＯＭＩプロセッサによってアクセスされる２つのメモリバンクに対するデータラインをインターリーブするための例示的な回路を示している。
【図８】例示的なメモリマップを示している。
【図９】例示的なプロセッサ稼働率テーブルを示している。
【図１０】プロセッサ割り当ての３つの構成要素を示している。
【図１０Ａ】ＤＩＭＭパッケージ上の複数のＴＯＭＩプロセッサの一実施形態を示している。
【図１０Ｂ】汎用ＣＰＵとインターフェースしているＤＩＭＭパッケージ上の複数のＴＯＭＩプロセッサの一実施形態を示している。
【図１０Ｃ】複数のＴＯＭＩプロセッサの一実施形態のための例示的なＴＯＭＩプロセッサの初期化を示している。
【図１０Ｄ】ＴＯＭＩプロセッサの初期化のためのメモリモードレジスタ５の使用を示している。
【図１０Ｅ】例示的なＴＯＭＩプロセッサ稼働状態図を示している。
【図１０Ｆ】例示的なプロセッサ間通信回路設計を示している。
【図１０Ｇ】仕事を実行するためのＴＯＭＩプロセッサを識別するための例示的なハードウェア実装を示している。
【図１０Ｈ】例示的なプロセッサ調停図を示している。
【図１１】例示的なファクタリングを示している。
【図１２】例示的なシステムＲＡＭを示している。
【図１３Ａ】６４個のプロセッサのモノリシックアレイのための例示的な平面図を示している。
【図１３Ｂ】ＴＯＭＩプロセッサのモノリシックアレイのための他の例示的な平面図を示している。
【図１４Ａ】ＴＯＭＩ周辺機器コントローラチップ（ＴＯＭＩＰＣＣ）のための例示的な平面図を示している。
【図１４Ｂ】ＴＯＭＩＰＣＣを用いている携帯電話言語翻訳ルーチンアプリケーションのための例示的な設計を示している。
【図１４Ｃ】ＴＯＭＩＰＣＣおよび複数のＴＯＭＩ ＤＩＭＭを用いているメモリ中心のデータベースアプリケーションのための例示的な設計を示している。
【図１５Ａ】３２ビットＴＯＭＩプロセッサの例示的な実施形態のための最高レベルの配線図を示している。
【図１５Ｂ】３２ビットＴＯＭＩプロセッサの例示的な実施形態のための最高レベルの配線図を示している。
【図１５Ｃ】３２ビットＴＯＭＩプロセッサの例示的な実施形態のための最高レベルの配線図を示している。
【図１５Ｄ】３２ビットＴＯＭＩプロセッサの例示的な実施形態のための最高レベルの配線図を示している。
【図１５Ｅ】図１５Ａ〜Ｄに示した配線図のための信号の説明を示している。
【発明を実施するための形態】
【００５４】
本発明の少なくとも１つの実施形態のＴＯＭＩアーキテクチャは、好ましくは、汎用コンピュータとして動作可能な最小限のロジックを用いる。最も一般的な動作には優先権が与えられる。大部分の動作は、可視的、規則的、かつコンパイラ最適化のために利用可能である。
【００５５】
一実施形態において、図１に示すように、ＴＯＭＩアーキテクチャは、アキュムレータ、レジスタ、およびスタックアーキテクチャ上での変形である。この実施形態において、
１．アキュムレータアーキテクチャと同様に、アキュムレータは、インクリメント命令を除いて、常にオペランドのうちの１つである。
２．レジスタアーキテクチャと同様に、宛先は、常にオペランドレジスタのうちの１つである。
３．アキュムレータおよびプログラムカウンタは、レジスタ空間の中にもあり、従って操作され得る。
４．３つの特別なレジスタは、自動インクリメントおよび自動デクリメントであり、入出力のスタックおよびストリームを作成するのに役立つ。
５．全ての命令は、長さが８ビットであり、命令デコードを単純化して速度を上げている。
６．分岐（BRANCH）またはジャンプ（JUMP）命令がない。
７．図２に示すように、８ビット命令から３ビットのオペレータを選択することを可能にする７つの命令しかない。
【００５６】
好ましい実施形態のいくつかの利点は、以下を含む。
１．全ての動作は、パイプラインによって必要とされるものと同等のものによって抑えられるのではなく、ロジックによって許容される最大速度で動く。論理演算は最も高速である。数学演算は次に高速である。メモリアクセスを必要とする動作は最も遅い。
２．アーキテクチャは、パッケージピン、加算器桁上げ時間、および有用性のみによって制限される任意のデータ幅に比例する。
３．アーキテクチャは、汎用コンピュータの全ての動作を実行するのに必要な最小限の可能な機能に近い。
４．アーキテクチャは、非常に透明で、非常に規則的であり、大部分の動作は、最適化コンパイラで利用可能である。
【００５７】
アーキテクチャは、単一のモノリシックチップ上で、多数回、複製されるために十分簡単に設計されている。一実施形態は、メモリとモノリシックのＣＰＵの複数のコピーを埋め込んでいる。３２ビットＣＰＵは、大部分のゲートはレジスタを定めている１，５００ゲート足らずで実現され得る。好ましい実施形態におけるほとんど１，０００個のＴＯＭＩ ＣＰＵは、単一のIntel Pentium(登録商標) 4と同数のトランジスタを用いて実現され得る。
【００５８】
ＴＯＭＩ ＣＰＵの縮小命令セットは、汎用コンピュータのために必要な動作を実行するために考慮に入れられる。１つのプロセッサのための命令セットが小さいほど、それは、より効率的に動作する。ＴＯＭＩ ＣＰＵは、最新のプロセッサアーキテクチャと比較して、非常に少ない数の命令によって設計されている。例えば、ＴＯＭＩ ＣＰＵの一実施形態が２５命令を有しているのに比べて、Intel Pentiumプロセッサは２８６命令を有していて、Intel Itanium Montecitoプロセッサは１９５命令を有していて、StrongARMプロセッサは１２７命令を有していて、IBM Cellプロセッサは４００以上の命令を有している。
【００５９】
ＴＯＭＩ ＣＰＵのための命令の基本セットは、単純化されていて、最新世代のPentiumプロセッサが必要とする３０クロックサイクルとは対照的に、単一のシステムクロックサイクルの中で実行するように設計されている。ＴＯＭＩ ＣＰＵアーキテクチャは、「パイプラインのない」アーキテクチャである。このアーキテクチャおよび単一クロックサイクル命令実行は、他の並列処理またはパイプラインアーキテクチャで見られるストール、依存および浪費されるクロックサイクルを著しく減らすか又は除去する。基本命令が、実行するために単一クロックサイクルを必要とするのみであると共に、クロック速度は増加する（クロックサイクル時間は減少する）ので、実行結果を複雑な数学的命令（例えばＡＤＤ）のために回路のトランジスタゲートを通して伝えるために必要な時間は、単一クロックサイクルの限界に達し得る。このような場合に、より速い命令の実行を減速させないために、特定の命令の実行に対して２クロックサイクルを許可することは最適であり得る。これは、ＣＰＵ設計のシステムクロック速度、製造プロセス、および回路レイアウトに対する最適化に依存する。
【００６０】
ＴＯＭＩの単純化された命令セットは、３２ビットＴＯＭＩ ＣＰＵが、５，０００より少ないトランジスタ（キャッシュを含まない）で造られることを可能にする。単一の３２ビットＴＯＭＩ ＣＰＵの一実施形態のトップレベルの回路図が、図１５Ａから１５Ｄに示されていて、信号の説明が、図１５Ｅに示されている。キャッシュおよび関連するデコードロジックを含めても、３２ビットＴＯＭＩ ＣＰＵは、４０，０００から２００，０００個のトランジスタ（ＣＰＵキャッシュのサイズによる）を用いて造ることができる。これに比べて、最新世代のIntel Pentiumマイクロプロセッサチップのためには、２５０，０００，０００個のトランジスタが必要とされる。従来のマイクロプロセッサアーキテクチャ（少し例を挙げれば、Intel Pentium、Itanium、IBM Cell、およびStrongARM）は、処理能力の増加を成し遂げるために、膨大かつ増加しつつある数のトランジスタを必要とした。ＴＯＭＩ ＣＰＵアーキテクチャは、ＣＰＵコア当たり非常に少ない数のトランジスタを使用することによって、この工業の進行を否定する。ＴＯＭＩ ＣＰＵのための少ないトランジスタ数は、多数の利点を提供する。
【００６１】
ＴＯＭＩ ＣＰＵのコンパクトなサイズのため、複数のＣＰＵを同じシリコンチップ上に造ることができる。これは、また、ＤＲＡＭチップ自体の製造費用のほかに、少しの追加製造費用で、複数のＣＰＵを、メインメモリ、例えばＤＲＡＭと同じチップ上に造ることを可能にする。従って、ＤＲＡＭチップのためのダイサイズおよび製造費用の最小限の増加のみで、複数のＴＯＭＩ ＣＰＵが、並列処理のために単一のチップ上に配置され得る。例えば、５１２ＭＢのＤＲＡＭは、ほぼ７００，０００，０００個のトランジスタを有している。６４個のＴＯＭＩ ＣＰＵ（単一のＴＯＭＩ ＣＰＵに対して２００，０００個のトランジスタを仮定する）は、いかなるＤＲＡＭ設計に対しても、１２，８００，０００個のトランジスタを加えるだけである。５１２ＭＢのＤＲＡＭに対して、６４個のＴＯＭＩ ＣＰＵは、ダイサイズを５％未満だけ増加させる。
【００６２】
ＴＯＭＩ ＣＰＵは、例えばＤＲＡＭ、ＳＲＡＭ、およびフラッシュメモリデバイスのための、既存の安価な必需品（commodity）メモリ製造プロセスを用いて製造されるように設計されている。ＴＯＭＩ ＣＰＵのための少ないトランジスタ数は、ＣＰＵが、８層以上のメタル相互接続を利用する大きなマイクロプロセッサチップ（例えばIntel Pentium）を製造するために用いられる複雑で高価な製造プロセスまたは他の論理プロセスではなく、２層のメタル相互接続による安価な半導体製造プロセスを用いて、小さい領域内に造ることができ、かつシリコン内で容易に相互接続することができることを意味する。現代のＤＲＡＭおよび他の必需品メモリチップは、より安い製造コスト、より多くの製品の生産量、及びより高い製品の歩留まりを達成するために、より少ない層（例えば２）のメタル相互接続による、より単純で、より安いコストの半導体製造プロセスを利用している。必需品メモリデバイスのための半導体製造プロセスは、通常、低い漏れ電流のデバイスの動作によって特徴付けられる。一方、最新のマイクロプロセッサを造るために用いられるプロセスは、トランジスタレベルの低い漏れ電流値よりはむしろ、高速および高性能特性のために努力する。ＤＲＡＭおよび他のメモリデバイスのために用いられるのと同じ製造プロセスによって効率的に実現されるＴＯＭＩ ＣＰＵの能力は、ＴＯＭＩ ＣＰＵが、既存のＤＲＡＭチップ（または他のメモリチップ）の中に埋め込まれて、低コスト、高い歩留まりのメモリチップ製造プロセスを利用することを可能にする。これは、また、ＴＯＭＩ ＣＰＵが、（例えば、メモリデバイスのためのＪＥＤＥＣ規格に準拠する）同じパッケージングおよびデバイスピンレイアウト、製造設備、試験設備、および現在産業界でＤＲＡＭおよび他のメモリチップのために用いる試験ベクトル（vector）を用いて製造され得るという利点を提供する。逆に、従来のマイクロプロセッサチップの中にＤＲＡＭメモリを埋め込むことは、反対方向に作用する。なぜなら、マイクロプロセッサチップは、メモリ回路を、マイクロプロセッサの動作によって生成される高レベルの電気的ノイズおよび熱にさらすことに加えて、８層以上のメタル相互接続による高価で複雑な論理製造プロセスを用いて製造されるからである。これは、次には、プロセッサチップの中に埋め込まれるメモリのタイプ、寸法、および機能に影響を及ぼす。その結果は、より高いコスト、低い歩留まり、高い電力消費、小さいメモリ、および最終的には低い性能のマイクロプロセッサである。
【００６３】
好ましい実施形態の他の利点は、ＴＯＭＩ ＣＰＵが、十分に小さい（かつ、ほとんど電力を必要としない）ので、それらが物理的にＤＲＡＭ（または他のメモリ）回路の隣に存在することができ、かつ超幅広内部ＤＲＡＭデータバスへのＣＰＵのアクセスを可能にすることである。現代のＤＲＡＭにおいて、このバスは、１０２４、４０９６、または８１９２ビット幅（またはその整数倍）であり、これは、また、通常、ＤＲＡＭ設計におけるデータバンク内の１行のデータ幅に対応する。（比べて、Intel Pentiumデータバスは６４ビットであり、Intel Itaniumバスは１２８ビット幅である。）ＴＯＭＩ ＣＰＵの内部キャッシュは、ＤＲＡＭの行サイズに合うようにサイズ設定され得るので、ＣＰＵキャッシュは、単一のＤＲＡＭメモリ読出し又は書込みサイクル内に満たされる（または消去される）ことができる。ＴＯＭＩ ＣＰＵは、ＴＯＭＩ ＣＰＵのためのデータバスとして超幅広内部ＤＲＡＭデータバスを用いる。ＴＯＭＩ ＣＰＵキャッシュは、ＴＯＭＩ ＣＰＵキャッシュへのデータ転送を含む、効率的なレイアウトおよび回路動作のために、ＤＲＡＭの行（row）および／または列（column）ラッチ回路の設計を反映するように設計されてもよい。
【００６４】
好ましい実施形態の他の利点は、少ないトランジスタ数による、ＴＯＭＩ ＣＰＵによって生成される低レベルの電気的ノイズである。なぜなら、ＣＰＵは、データのためにオフチップメモリにアクセスする常に駆動しているＩ／Ｏ回路ではなく、メモリにアクセスする超幅広内部ＤＲＡＭデータバスを利用するからである。オンチップＣＰＵキャッシュは、オフチップメモリアクセスに対する必要性を最小限にする処理のために、データへの即時のアクセスを考慮に入れている。
【００６５】
プロセッサアーキテクチャの設計目的は、処理容量および速度を最大化し、一方その処理速度を達成するために必要な電力を最小限にすることである。ＴＯＭＩ ＣＰＵアーキテクチャは、極めて低い電力消費を有する、高速プロセッサである。プロセッサの電力消費は、設計において用いられるトランジスタの数に、直接、関係している。ＴＯＭＩ ＣＰＵのための少ないトランジスタ数は、その電力消費を最小限にする。簡略化された効率的な命令セットは、更に、ＴＯＭＩ ＣＰＵが、その電力消費を減らすことを可能にする。加えて、幅広内部ＤＲＡＭデータバスを用いるＴＯＭＩ ＣＰＵキャッシュおよびオンチップメモリへのアクセスは、オフチップメモリへのアクセスのためにＩ／Ｏ回路を絶えず駆動する必要をなくす。１ＧＨｚのクロック速度で動作している単一のＴＯＭＩ ＣＰＵは、ほぼ２０から２５ミリワットの電力を消費する。対照的に、Intel Pentium 4プロセッサは２．９３ＧＨｚで１３０ワットを必要とし、Intel Itaniumプロセッサは１．６ＧＨｚで５２ワットを必要とし、StrongARMプロセッサは２００ＭＨｚで１ワットを必要とし、IBM Cellプロセッサは３．２ＧＨｚで１００ワットを必要とする。プロセッサ内での熱の発生が、プロセッサが必要とする電力の量に、直接、関係することは、よく知られている。極めて低い電力のＴＯＭＩ ＣＰＵアーキテクチャは、現在のマイクロプロセッサアーキテクチャの中で見られるファン、大きなヒートシンク、および新型の冷却メカニズムの必要をなくす。同時に、低電力ＴＯＭＩ ＣＰＵアーキテクチャは、新しい低電力電池および太陽エネルギーアプリケーションを可能にする。
【００６６】
命令セット
命令セットのうちの７つの命令が、それらのビットマッピングと共に図２に示されている。各命令は、好ましくは単一の８ビットワードから成る。
【００６７】
アドレッシングモード
図３は、様々なアドレッシングモードの有効アドレスを示している。
【００６８】
アドレッシングモードは、以下の通りである。
即値
レジスタ
レジスタ  間接
レジスタ  間接  自動インクリメント
レジスタ  間接  自動デクリメント
【００６９】
特別なケース
レジスタ０およびレジスタ１の両方は、プログラムカウンタ（ＰＣ）を指す。オペランドとしてレジスタ０（ＰＣ）を持つ演算は、全て、アキュムレータキャリービット（Ｃ）が１に等しいという条件付きである。Ｃ＝１であれば、ＰＣの旧値はアキュムレータ（ＡＣＣ）にスワップされる。オペランドとしてレジスタ１（ＰＣ）を持つ演算は、全て、無条件である。
【００７０】
代替実施形態において、宛先としてレジスタ０（ＰＣ）を有する書き込み動作は、キャリービット（Ｃ）が０に等しいという条件付きである。Ｃ＝１である場合、動作は実行されない。Ｃ＝０である場合、アキュムレータ（ＡＣＣ）の値がＰＣに書き込まれ、プログラム制御が新しいＰＣアドレスに移行する。宛先としてレジスタ１（ＰＣ）を有する書き込み動作は、無条件である。アキュムレータ（ＡＣＣ）の値がＰＣに書き込まれ、プログラム制御が新しいＰＣアドレスに移行する。
【００７１】
ソースとしてレジスタ０を有する読み出し動作は、ＰＣ＋２の値をロードする。このような方法で、ループの先頭のアドレスが、読み出されることができて、後の使用のために格納され得る。ほとんどの場合、ループアドレスは、スタック（Ｓ）にプッシュされる。ソースとしてレジスタ１を有する読み出し動作は、ＰＣによってアドレスされた次のフルワードによって指し示される値をロードする。このような方法で、３２ビット即値オペランドがロードされ得る。３２ビット即値オペランドは、ワード整列（word align）されなければならないが、ＬＯＡＤＡＣＣ命令は、３２ビット即値オペランドの直前の４バイトワードの中のいかなるバイト位置にあってもよい。読み出しの実行に続いて、ＰＣは、それが、３２ビット即値オペランドに続く最初のワード整列された命令をアドレスするようにインクリメントされる。
【００７２】
分岐がない
分岐およびジャンプ動作は、通常、ＣＰＵ設計者の課題である。なぜなら、それらが貴重な演算コード空間の多くのビットを必要とするからである。分岐機能は、LOADACC, xxを用いて所望の分岐アドレスをＡＣＣにロードして、次に、STOREACC, PC命令を用いて分岐を遂行することによって引き起こされ得る。分岐は、レジスタ０に保存したときのＣの状態次第で、なされる。
【００７３】
スキップ
スキップは、INC, PCを実行することによって引き起こされ得る。実行は２サイクルを必要とし、１つはカレントＰＣインクリメントサイクルを完了させるためであり、１つはINCのためである。スキップは、レジスタ０をインクリメントしたときのＣの状態次第で、なされる。
【００７４】
相対分岐
相対分岐は、所望のオフセットをＡＣＣにロードして、次にADD, PC命令を実行することによって引き起こされ得る。相対分岐は、レジスタ０に加算したときのＣの状態次第で、なされる。
【００７５】
前方への分岐
前方への分岐は、後方への分岐より役に立つ。なぜなら、ループのために必要な後方への分岐の位置は、初めてループの先頭を通るプログラムステップのときＰＣを保存することによって、容易に捕獲されるからである。
【００７６】
相対分岐より効率的な前方への分岐は、分岐エンドポイントの最下位ビットをＡＣＣにロードして、次にＰＣにストアすることによって、引き起こされ得る。ＰＣは、レジスタ０またはレジスタ１の使用に応じて、条件付または無条件の両方でアクセスされ得るので、前方への分岐もまた、宛先オペランドとしてのＰＣレジスタの選択（レジスタ０またはレジスタ１）に応じて、条件付または無条件となり得る。
【００７７】
例えば、
LOADI, #1C
STOREACC, PC
【００７８】
もしＡＣＣの最上位ビットがゼロであれば、最下位６ビットのみがＰＣレジスタに転送される。もし現在のＰＣレジスタの最下位６ビットがロードされるべきＡＣＣ値より小さいのであれば、レジスタの最上位ビットは不変のままである。もし現在のＰＣレジスタの最下位６ビットがロードされるべきＡＣＣ値より大きいのであれば、現在のＰＣレジスタはインクリメントされ、第７ビットでスタートする。
【００７９】
これは、効果的に分岐を３１命令前方まで可能にする。前方への分岐のこの方法は、可能な場合はいつでも用いられるべきである。なぜなら、それは、相対分岐のための３命令に対して２命令しか必要としないだけでなく、最も遅い動作のうちの１つである加算器を通る経路を必要としないからである。図２Ａは、動作中の前方への分岐を示している。
【００８０】
ループ
ループの先頭は、LOADACC, PCを用いてセーブすることができる。結果として生じるループ構文の先頭に対するポインタは、レジスタにストアされるか、またはオートインデクシングレジスタのうちの１つにプッシュされる。ループの末尾で、ポインタはLOADACC, EAによって検索され、STOREACC, PCを用いてＰＣにリストアされ、これにより後方へのループが引き起こされる。ループは、レジスタ０への保存によるＣの状態次第で、なされ、これにより条件付き後方へのループが引き起こされる。
【００８１】
自己変更（modifying）コード
STOREACC, PCを用いて自己変更コードを書くことが可能である。命令は、引き起こされ、またはＡＣＣにフェッチされ、そして、次の命令として実行されるＰＣに格納される。この技術は、ＣＡＳＥ構文を作成するために用いられ得る。
【００８２】
JUMPTABLEのＮ個のアドレスとベースアドレスとから成るメモリ内のジャンプテーブルアレイを仮定する。便宜のために、JUMPTABLEは、ローメモリ２０の中にあるので、そのアドレスは、LOADIまたは１以上の右シフトADD, ACCが続くLOADIによって生成され得る。
【００８３】
ジャンプテーブルへのインデックスが、ＡＣＣの中にあり、かつジャンプテーブルのベースアドレスが、JUMPTABLEと名付けられた汎用レジスタの中にあると仮定する。
ADD, JUMPTABLE  インデックスをジャンプテーブルのベースアドレスに加算する。
LOADACC, (JUMPTABLE)  インデックスされたアドレスをロードする
STOREACC, PC  ジャンプを実行する。
【００８４】
００００からスタートする低位メモリがシステムコールに割り当てられる場合、
各システムコールは、以下の通りに実行される。ここでSPECIAL_FUNCTIONは即値オペランド０−６３の名前である。
LOADI, SPECIAL_FUNCTION  システムコール番号をロードする
LOADACC, (ACC)  システムコールのアドレスをロードする
STOREACC, PC  関数へジャンプする
【００８５】
右シフト
基本的なアーキテクチャは、右シフト演算を想定していない。もしこのような演算が必要であれば、好ましい実施形態の解決策は、汎用レジスタのうちの１つを「右シフトレジスタ」に指定することである。STOREACC, RIGHTSHIFTは、「右シフトレジスタ」への単一の位置を右シフトしたＡＣＣをストアする。ここで、その値は、LOADACC, RIGHTSHIFTによって読むことができる。
【００８６】
アーキテクチャのスケーラビリティ
ＴＯＭＩアーキテクチャは、好ましくは８ビット命令を特徴とするが、データ幅は、制限される必要はない。図４は、いかにして４〜３２ビットの任意の幅のデータ経路が容易に作成されるかを示している。より広い幅のデータ処理を行うことは、所望の幅に対して、レジスタセット、内部データ経路、およびＡＬＵの幅を増加させることを必要とするだけである。データ経路の上限は、加算器のキャリー伝播遅延およびトランジスタの予算によって制限されるのみである。
【００８７】
好適なＴＯＭＩアーキテクチャは、説明を簡単にするため、フォンノイマンメモリ構成として実現されるが、（別々のデータおよび命令バスを有する）ハーバードアーキテクチャによって実現することも可能である。
【００８８】
共通の数学演算
２の補数の数学は、いくつかの方法でなされ得る。汎用レジスタは、全て“１s”として予め設定され、ALLONESと名付けられる。オペランドは、OPERANDと名付けられたレジスタの中にあると仮定する。
LOADACC, ALLONES
XOR, OPERAND
INC, OPERAND  “２s”の補数がOPERANDの中に残る。
【００８９】
共通のコンパイラ構造
大部分のコンピュータプログラムは、コンパイラによって生成される。従って、実用的なコンピュータアーキテクチャは、共通のコンパイラ構造に適合しているべきである。
【００９０】
Ｃコンパイラは、通常、ファンクションコールにパラメータを渡すためのスタックを維持する。Ｓ、Ｘ、またはＹレジスタをスタックポインタとして用いることができる。ファンクションコールは、例えば、STOREACC, (X)+を用いて、スタックとして動作するオートインデクシングレジスタのうちの１つにパラメータをプッシュする。関数を入力すると、パラメータは、使用のために汎用レジスタにPOPされる。
【００９１】
スタック相対アドレッシング
汎用レジスタに都合よく適合させることができるときより、ファンクションコールを通過したより多くの要素があるときがある。以下の例のために、スタックプッシュ動作がスタックをデクリメントすると仮定する。もしＳがスタックレジスタとして用いられているのであれば、スタックの先頭に対してＮ番目の項目を読むために、
LOADI, N
STOREACC, X
LOADACC, S
ADD, X
LOADACC, (X)
【００９２】
アレイへのインデクシング
アレイ関数にエントリすると、アレイのベースアドレスは、ARRAYと名付けられた汎用レジスタに置かれる。アレイの中のＮ番目の要素を読むために、
LOADI, N
STOREACC, X
LOADACC, ARRAY
ADD, X
LOADACC, (X)
【００９３】
Ｎワード要素アレイへのインデクシング
時々、アレイは、Ｎワード幅の要素に割り当てられる。アレイのベースアドレスは、ARRAYと名付けられた汎用レジスタに置かれる。５ワード幅アレイの中のＮ番目の要素の最初のワードにアクセスするために、
LOADI, N
STOREACC, X  テンポラリレジスタにストアする
ADD, ACC  ２をかける
ADD, ACC  再び２をかける＝４
ADD, X  プラス１＝５
LOADACC, ARRAY
ADD, X  アレイのベースアドレスをプラスする
LOADACC, (X)
【００９４】
命令セット拡張
本発明の他の実施形態は、図２に示した７つの基本命令の拡張を含んでいる。図２Ｅに示した命令セット拡張は、ＴＯＭＩプロセッサの内部動作、ソフトウェアプログラム命令、およびＴＯＭＩプロセッサのためのソフトウェアコンパイラを更に最適化するのを助ける。
【００９５】
SAVELOOP−この命令は、プログラムカウンタの現在の値をスタック上へプッシュする。Saveloopは、ループ構文の先頭で最も実行されそうである。ループの末尾で、保存されていたプログラムカウンタ値は、スタックからコピーされて、プログラムカウンタに格納され、ループの先頭への逆方向ジャンプを実行する。
【００９６】
SHIFTLOADBYTE−この命令は、ＡＣＣに残された８ビットを左へシフトして、命令に続く８ビットバイトを読み出し、それをＡＣＣの最下位８ビットに入れる。このような方法で、長い即値オペランドが、一連の命令を用いてロードされ得る。例えば１４ビット即値オペランドをロードするために、
LOADI, #14    ＼＼１４ビットオペランドの最上位６ビットをロードする。
SHIFTLOADBYTE    ＼＼６ビットの８位置を左へシフトして、次の８ビット値をロードする。
CONSTANT #E8    ＼＼８ビット即値オペランド。
ＡＣＣの結果としての１６進値は14E8である。
【００９７】
LOOP−この命令は、スタックの最上部をプログラムカウンタにコピーする。Loopは、ループの先頭でプログラムカウンタを格納するために、Saveloopの実行に続くループ構文の末尾で最も実行されそうである。ループ実行時、保存されていたプログラムカウンタがスタックからコピーされ、プログラムカウンタに格納され、ループの先頭への逆方向ジャンプを実行する。
【００９８】
LOOP_IF−この命令は、スタックの最上部をプログラムカウンタにコピーする。それは、Ｃの値に基づいて、条件付きループを実行する。Loop_ifは、ループの先頭でプログラムカウンタを格納するために、Saveloopの実行に続くループ構文の末尾で最も実行されそうである。Loop_if実行時に、Ｃ＝０である場合には、保存されていたプログラムカウンタが、スタックからコピーされて、プログラムカウンタに格納され、ループの先頭への逆方向ジャンプを実行する。Ｃ＝１である場合には、次の逐次命令を指し示すために、プログラムカウンタがインクリメントされる。
【００９９】
NOTACC−ＡＣＣの各ビットの補数演算を行う。ＡＣＣ＝０である場合には、Ｃを１にセットする。それ以外の場合には、Ｃを０にセットする。
【０１００】
ROTATELEFT8−ＡＣＣを８ビット左に回転させる。各回転ステップで、ＡＣＣからシフトされたＭＳＢは、ＡＣＣのＬＳＢにシフトされる。
【０１０１】
ORSTACK−ＡＣＣとスタックの最上部の値について論理和を実行する。結果をＡＣＣに入れる。ＡＣＣ＝０である場合には、Ｃを１にセットする。そうでない場合には、Ｃを０にセットする。
【０１０２】
ORSTACK+−ＡＣＣとスタックの最上部の値について論理和を実行する。結果をＡＣＣに入れる。論理演算の後に、スタックポインタＳをインクリメントする。ＡＣＣ＝０である場合には、Ｃを１にセットする。そうでない場合には、Ｃを０にセットする。
【０１０３】
RIGHTSHIFTACC−ＡＣＣを右に単一ビットだけシフトする。ＡＣＣのＬＳＢは、Ｃにシフトされる。
【０１０４】
SETMSB−ＡＣＣの最上位ビットをセットする。Ｃに対する変化はない。この命令は、符号付きの比較を実行する中で用いられる。
【０１０５】
ローカルＴＯＭＩキャッシング
キャッシュは、メインメモリと比べて、大きさにおいてより小型で、アクセスにおいてより高速なメモリである。減少されたアクセスタイムおよびプログラムおよびデータアクセスの局所性は、キャッシュ動作を可能にし、多くの動作のために好適なＴＯＭＩプロセッサの性能を増加させる。他の観点から見て、キャッシュは、ＴＯＭＩプロセッサのメインメモリからの独立性を増加させることによって、並列処理性能を増加させる。キャッシュのメインメモリに対する相対的な性能およびキャッシュに、またはキャッシュから、他のメインメモリに、ロードまたはストアを要求する前に、ＴＯＭＩプロセッサが実行可能なサイクル数は、ＴＯＭＩプロセッサ並列法による性能の上昇の量を決定する。
【０１０６】
ＴＯＭＩローカルキャッシュは、ＴＯＭＩプロセッサ並列法によって性能の上昇を強化する。図５に示すように、各ＴＯＭＩプロセッサは、好ましくは３つの関連するローカルキャッシュを備えている。
命令−PCと関連する
ソース−Ｘレジスタと関連する
宛先−Ｙレジスタと関連する
【０１０７】
キャッシュは、「データ」または「命令」フェッチよりはむしろ特定のレジスタと関係しているので、キャッシュ制御ロジックは単純化され、キャッシュ待ち時間は著しく減少する。これらのキャッシュの最適な大きさは、アプリケーションに依存する。典型的な実施形態は、各キャッシュに対して１０２４バイトを必要とする。換言すれば、１０２４の命令と、ソースおよび宛先の２５６の３２ビットワードである。少なくとも２つの要因が、キャッシュの最適サイズを決定する。第１は、他のキャッシュのロードまたはストア動作が要求される前に、ＴＯＭＩプロセッサが繰り返すことができる状態の数である。第２は、メインメモリの動作の間に可能なＴＯＭＩプロセッサ実行サイクルの数と関連するメインメモリからのキャッシュのロードまたはストア動作のコストである。
【０１０８】
ＴＯＭＩプロセッサのＲＡＭの中への埋め込み
一実施形態において、広いバスは、大きな埋め込まれたメモリをキャッシュに接続するので、キャッシュに対するロードまたはストア動作は、速く起こることができる。ＲＡＭに埋め込まれたＴＯＭＩプロセッサで、全てのキャッシュのロードまたはストアは、ＲＡＭの列に対する単一のメモリサイクルから成る。一実施形態において、埋め込まれたメモリは、６３個のＴＯＭＩプロセッサの要求に応答しているので、１つのＴＯＭＩプロセッサに対するキャッシュのロードまたはストアの応答時間は、他のＴＯＭＩプロセッサのキャッシュのロードまたはストアが完了する間、延長可能である。
【０１０９】
図６に示すように、キャッシュは、関連するメモリアドレッシングレジスタＸ，Ｙ，ＰＣの変化に基づいて、ストアおよびロードされる。例えば、ＰＣレジスタの全幅は、２４ビットであり得る。ＰＣキャッシュが１０２４バイトである場合、ＰＣの下位１０ビットは、ＰＣキャッシュの中でのアクセスを定義する。上位１４ビットの中に変化があるようにＰＣが書き込まれるとき、キャッシュロードサイクルが要求される。そのＰＣキャッシュと関連するＴＯＭＩ  ＣＰＵは、キャッシュロードサイクルが完了するまで実行を停止し、示された命令は、ＰＣキャッシュからフェッチされ得る。
【０１１０】
キャッシュダブルバッファリング
２次キャッシュは、キャッシュロード要求を予想してロードされ得る。２つのキャッシュは同一であり、ＰＣの上位１４ビットの内容に基づいて交互に選択されかつ選択から外される。上記の例では、ＰＣの上位１４ビットが、２次キャッシュの中に予め格納されたデータのそれと合うように変化するとき、２次キャッシュは、１次キャッシュとして選択されるようになる。旧１次キャッシュは、その時は２次キャッシュになる。大部分のコンピュータプログラムが線形にメモリの中で増加するので、本発明の一実施形態は、常にキャッシュの内容、現在のＰＣプラス１の上位１４ビットによって示されるメインメモリの内容をフェッチする２次キャッシュを有する。
【０１１１】
２次キャッシュの追加は、現在のキャッシュの境界線の外に移動するときに、ＴＯＭＩプロセッサが、メモリデータがメインメモリからフェッチされるのを待たなければならない時間を減らす。２次キャッシュの追加は、ＴＯＭＩプロセッサの複雑さをほとんど２倍にする。最適システムのために、複雑さが２倍になるのであれば、対応するＴＯＭＩプロセッサの性能も２倍になることで相殺されなければならない。さもないと、２次キャッシュのない２つのより簡単なＴＯＭＩプロセッサが、同じトランジスタ数で実現され得る。
【０１１２】
高速乗算、浮動小数点演算、追加の機能
整数乗算および全ての浮動小数点演算は、特別な目的のハードウェアを用いてさえ、実行するために、多くのサイクルを必要とする。従って、これらの動作は、基本的なＴＯＭＩプロセッサに含めるよりはむしろ、他のプロセッサを考慮に入れることができる。しかし、簡単な１６ビット×１６ビット乗算器が、追加の機能および多用性をＴＯＭＩ ＣＰＵアーキテクチャに提供するために、（１０００トランジスタ未満を用いる）ＴＯＭＩ ＣＰＵに加えられ得る。
【０１１３】
たとえ全乗算が多くのサイクルを必要とする可能性があっても、デジタル信号処理（ＤＳＰ）動作は、しばしばサイクル毎に結果を生じる高度にパイプライン化された乗算器を用いる。何度も同じアルゴリズムを繰り返す信号処理アプリケーションに対して、このような乗算器アーキテクチャは最適であり、ＴＯＭＩプロセッサに対する周辺プロセッサとして組み込まれ得る。しかし、それがＴＯＭＩプロセッサの中に、直接、組み込まれたとしても、それは、たぶん複雑さを増加させて全体の性能を低下させたであろう。図７Ａは、幅が広いシステムＲＡＭバスを利用するように構成された追加処理機能の一例を示している。
【０１１４】
隣接するメモリバンクへのアクセス
メモリチップ内のメモリ回路の物理的レイアウト設計は、しばしば、メモリトランジスタがメモリセルの大きいバンクの中でレイアウトされるように設計される。バンクは、通常、等しいサイズにされた矩形領域として構成され、チップ上の２以上の列の中に配置される。セルの大きいバンクの中のメモリセルのレイアウトは、メモリ読出し及び／又は書込みアクセスをスピードアップするために用いられ得る。
【０１１５】
本発明の一実施形態において、１つ以上のＴＯＭＩプロセッサが、メモリチップ内のメモリセルバンクの２列の間に配置され得る。図７Ｂに示したロジックを用いて、Select AまたはSelect Bをイネーブルにすることによって、ＴＯＭＩプロセッサがメモリバンクＡまたはメモリバンクＢにアクセスすることができるように、２つのメモリバンクの行データラインはインターリーブされ得る。このような方法で、メモリチップ内の特定のＴＯＭＩプロセッサによって直接アドレス指定が可能なメモリが、２倍になり得る。
【０１１６】
ＴＯＭＩ割り込みストラテジー
割り込みは、プロセッサの通常のシーケンシャル動作に対する外部イベントであり、それは、プロセッサに、その動作シーケンスを直ちに変えることを強いる。割り込みの例は、外部装置による動作の完了またはいくつかのハードウェアによるエラー状態である。従来のプロセッサは、通常のシーケンシャル動作を素早く停止し、現在の動作の状態をセーブし、割り込みを引き起こしたどんなイベントでも処理するために、いくつかの特別な動作の実行を開始し、特別な動作が完了されたときに以前の状態を回復し、シーケンシャル動作を続けるために、どんな事でもする。割り込み処理品質の主要な基準は、応答時間である。
【０１１７】
割り込みは、従来のプロセッサに対していくつかの課題を提起する。それらは、実行時間を不確定にする。それらは、状態をストアしてそれからリストアするプロセッササイクルを浪費する。それらは、プロセッサ設計を難しくし、あらゆるプロセッサ動作を遅くする遅延をもたらす可能性がある。
【０１１８】
即時の割り込み応答は、エラー処理および現実世界の活動に直接結びついているプロセッサを除いて、大部分のプロセッサに対しては不必要である。
【０１１９】
マルチプロセッサＴＯＭＩシステムの一実施形態において、１つのプロセッサのみが、主な割り込み機能を備えている。他の全てのプロセッサは、それらがいくつかの割り当てられた仕事を完了して、それら自身で停止するまで、中断されずに動く。または、それらがコーディネートプロセッサによって停止させられるまで動く。
【０１２０】
入出力（Ｉ/Ｏ）
ＴＯＭＩプロセッサ環境の一実施形態において、単一のプロセッサが、外部の世界に対する全てのインターフェースについて責任を負っている。
【０１２１】
ダイレクトメモリアクセス（ＤＭＡ）制御
一実施形態において、ＴＯＭＩプロセッサシステムにおける外部の世界に対する即時の応答は、ＤＭＡコントローラを介して起こる。ＤＭＡコントローラは、外部装置によって要求されるときに、外部装置からシステムＲＡＭに書き込みを行うための内部データバスにデータを転送する。同じコントローラが、また、要求されると、システムＲＡＭから外部装置にデータを転送する。ＤＭＡ要求は、内部バスアクセスに対する最高優先度を有する。
【０１２２】
ＴＯＭＩプロセッサのアレイの編成
本発明の好ましい実施形態のＴＯＭＩプロセッサは、かなりの数、複製され、かつモノリシックチップ上の追加の処理機能、非常に幅の広い内部バス、およびシステムメモリと結合されるように設計されている。このようなシステムのための例示的なメモリマップが図８に示されている。
【０１２３】
各プロセッサのためのメモリマップは、そのプロセッサ用のローカルレジスタに対して、最初の３２の位置（１６進法の１Ｆ）を費やす（図３参照）。メモリマップの残りは、それらのキャッシュレジスタを通して全てのプロセッサによってアドレス指定可能である（図６参照）。システムＲＡＭのアドレス指定能力は、ローカルキャッシュと関連している３つのレジスタＰＣ，Ｘ，およびＹの幅のみによって制限される。レジスタが２４ビット幅である場合、全アドレス指定能力は４メガバイトであるが、上限はない。
【０１２４】
一実施形態において、６４個のＴＯＭＩプロセッサは、メモリと共にモノリシックに実現される。単一のマスタプロセッサが、その他の６３個を管理する役割を果たす。スレーブプロセッサのうちの１つがアイドル状態で、クロックが動いていないとき、それは、ほとんど電力を消費しないし、ほとんど熱を発生しない。初期化時には、マスタプロセッサのみが使用可能である。マスタは、スレッドが開始すべき時間まで、フェッチングおよび実行の命令を開始する。各スレッドは、プレコンパイルされて、メモリにロードされる。スレッドを開始するために、マスタは、このスレッドをＴＯＭＩ ＣＰＵのうちの１つに割り当てる。
【０１２５】
プロセッサ稼働
好ましく仕事をするためのＴＯＭＩプロセッサの稼働のコーディネート（Coordination）は、図９に示すプロセッサ稼働テーブルによって処理される。コーディネート（マスタ）プロセッサは、好ましくは以下の機能を実行することができる。
１．スレッドの実行アドレス、ソースメモリ、および宛先メモリを含むが、これらに限られない、そのスタック上にスレーブプロセッサのためにコールしているパラメータをプッシュする。
２．スレーブプロセッサを起動する。
３．ポーリングまたは割り込みに応答することによって、スレーブプロセッサスレッド完了イベントに応答する。
【０１２６】
プロセッサ要求
コーディネートプロセッサは、稼働テーブルからプロセッサを要求することができる。available_flagが「０」にセットされた最低位のプロセッサの数が戻される。すると、コーディネートプロセッサは、利用可能なプロセッサに関するavailable_flagを「１」にセットし、これによりスレーブプロセッサを起動する。プロセッサが利用可能でない場合、要求はエラーを返す。代替案として、プロセッサは、実行されるべき要求された仕事に関する優先順位レベルに基づいて、コーディネートプロセッサによって割り当てられ得る。優先順位方式に基づいてリソースを割り当てる技術は、従来技術において周知である。図１０は、プロセッサ割り当ての３つの好適な構成要素を示している。コーディネートプロセッサを起動する動作、スレーブプロセッサの動作、および割り込み応答によるコーディネートプロセッサの結果処理。
【０１２７】
段階的にスレーブプロセッサを起動すること
１．コーディネートプロセッサは、それ自身のスタック上へ走るためにスレッドに対するパラメータをプッシュする。パラメータは、以下のものを含む。スレッドの先頭アドレス、スレッドに対するソースメモリ、スレッドに対する宛先メモリ、および最後のパラメータカウント。
２．コーディネートプロセッサは、利用可能なプロセッサを要求する。
３．プロセッサ割り当てロジックは、その関連するavailable_flagをセットし、かつその関連するdone_flagをクリアする、数値的に最低のスレーブプロセッサの番号、またはエラーを返す。
４．エラーが返されると、コーディネートプロセッサは、スレーブプロセッサが利用可能になるまで要求を再試行するか、またはエラーを処理するためのいくつかの特別な動作を実行する。
５．利用可能なプロセッサ番号が返されたら、コーディネートプロセッサは、示されたプロセッサに対するavailable_flagをクリアする。この動作は、選択されたスレーブプロセッサのスタックに、スタックパラメータのparameter_count数をプッシュする。done_flagは、ゼロにクリアされる。
６．スレーブプロセッサは、先頭スタック項目を検索し、それをスレーブプロセッサのプログラムカウンタに転送する。
７．スレーブプロセッサは、次に、命令キャッシュの中に、プログラムカウンタによって示されるメモリカラムをフェッチする。
８．スレーブプロセッサは、命令キャッシュの始めから命令を実行し始める。最初の命令は、たぶん、スタックからコールしているパラメータを検索することである。
９．スレーブプロセッサは、命令キャッシュからのスレッドを実行する。スレッドが完了すると、その関連するdone_flagの状態をチェックする。done_flagがセットされている場合には、done_flagがクリアされるまで待つ。これは、コーディネートプロセッサがいかなる以前の結果も処理したことを示している。
１０．スレーブプロセッサに関する割り込みベクトルが−１にセットされている場合には、done_flagをセットしても割り込みは発生しない。従って、コーディネートプロセッサは、done_flagがセットされるようにポーリングを行う。
【０１２８】
コーディネートプロセッサが、done_flagがセットされたことを検出すると、スレーブプロセッサの結果を処理し、かつ、おそらく、新しい仕事をするためにスレーブプロセッサを再割り当てする。スレーブプロセッサの結果が処理されると、関連するコーディネートプロセッサは、関連するdone_flagをクリアする。
【０１２９】
スレーブプロセッサに関する割り込みベクトルが−１に等しくない場合、関連するdone_flagをセットすると、コーディネートプロセッサに割り込みが発生し、かつ割り込みベクトルアドレスで割り込みハンドラを実行し始める。
【０１３０】
関連するavailable_flagもまたセットされた場合、コーディネートプロセッサは、スレーブプロセッサのスタックにプッシュされたリターンパラメータを読み取ることもできる。
【０１３１】
割り込みハンドラは、スレーブプロセッサの結果を処理し、かつ、おそらく、新しい仕事をするためにスレーブプロセッサを再割り当てする。スレーブプロセッサの結果が処理されると、コーディネートプロセッサ上で動作している割り込みハンドラは、関連するdone_flagをクリアする。
【０１３２】
１１．done_flagがクリアされると、スレーブプロセッサは、その関連するdone_flagをセットして、新しいstart_timeをセーブする。スレーブプロセッサは、仕事をし続けてもよいし、利用可能な状態に戻ってもよい。利用可能な状態に戻るために、スレーブプロセッサは、そのスタック上へリターンパラメータをプッシュし、続けてスタックカウントおよびそのavailable_flagをセットする。
【０１３３】
メモリモードレジスタを用いたＴＯＭＩプロセッサの管理
複数のＴＯＭＩプロセッサを実装して管理するための１つの技術は、図１０Ａに示したように、ＴＯＭＩプロセッサをデュアルインラインメモリモジュール（ＤＩＭＭ）上に搭載することである。ＴＯＭＩ／ＤＩＭＭは、外部メモリコントローラおよび汎用ＣＰＵ、例えばパーソナルコンピュータから成るシステムに含まれ得る。図１０Ｂは、このような構成を示している。モードレジスタは、一般に、ＤＲＡＭ、ＳＲＡＭおよびフラッシュメモリの中で見つかる。モードレジスタは、メモリアクセスとは関係ない外部メモリコントローラによって書き込まれ得る一組のラッチである。メモリモードレジスタ内のビットは、しばしば、パラメータ、例えば、タイミング、リフレッシュ制御、および出力バースト長を特定するために用いられる。
【０１３４】
１ビット以上が、ＴＯＭＩ ＣＰＵをイネーブルまたはディスエーブルにするために、メモリモードレジスタ内で割り当てられ得る。例えば、ＴＯＭＩ ＣＰＵがモードレジスタによってディスエーブルにされる時、ＴＯＭＩ ＣＰＵを含んでいるメモリは、通常のＤＲＡＭ、ＳＲＡＭまたはフラッシュメモリとして機能する。モードレジスタがＴＯＭＩ ＣＰＵ初期化をイネーブルにする時、シーケンスが、図１０Ｃの中で説明するように実行される。この実施形態の中では、単一のプロセッサが、マスタプロセッサであると定められる。リセット動作に続いて常に最初に起動するのは、このプロセッサである。初期化終了後、マスタプロセッサは、フルスピードで動作して、所望のアプリケーションプログラムを実行する。ＴＯＭＩ ＣＰＵが実行している間、ＤＲＡＭ、ＳＲＡＭ、またはフラッシュメモリはアクセス不能である。時々、メモリモードレジスタは、ＴＯＭＩ ＣＰＵの実行を停止させるために、外部メモリコントローラによって指示され得る。ＴＯＭＩ ＣＰＵが停止している時に、ＤＲＡＭ、ＳＲＡＭ、またはフラッシュの内容が、汎用ＣＰＵに接続された外部メモリコントローラによって読み出され得る。このような方法で、結果が、汎用ＣＰＵに渡され得る。そして、追加データまたは実行ファイルが、ＤＲＡＭ、ＳＲＡＭ、またはフラッシュメモリに書き込まれ得る。
【０１３５】
汎用ＣＰＵが、ＤＲＡＭ、ＳＲＡＭ、またはフラッシュメモリの読み出し又は書き込みを完了した時、外部メモリコントローラは、モードレジスタに、停止から動作へのビットを書き込み、ＴＯＭＩ ＣＰＵは、中断したところから実行を続ける。図１０Ｄは、ＤＲＡＭ、ＳＲＡＭ、またはフラッシュメモリからの典型的なメモリモードレジスタを示している。そして、そのレジスタが、ＴＯＭＩ ＣＰＵを制御するために、どのように変更されるかを示している。
【０１３６】
プロセッサクロック速度の調整
プロセッサクロック速度は、プロセッサ電力消費を決定する。ＴＯＭＩアーキテクチャは、１つのプロセッサ以外の全てを停止させることができることによって、低電力消費を可能にする。さらにまた、マスタプロセッサ以外の各プロセッサは、図２Ｄに示したロジックを用いて、性能または電力消費を最適化するように調整された、そのクロック速度を有することができる。
【０１３７】
ＴＯＭＩプロセッサ管理の他の実施形態
いくつかのコンピュータソフトウェアアルゴリズムは循環的である。換言すれば、アルゴリズムの第一の機能は、それ自体を呼ぶことである。「分割（divide）および獲得（conquer）」として知られているアルゴリズムのクラスは、しばしば循環的技術を用いて実現される。分割および獲得は、データの検索および分類、および特定の数学的機能に適用可能である。このようなアルゴリズムを、複数のプロセッサ、例えばＴＯＭＩアーキテクチャと共に利用可能なものと並行することが可能である。このようなアルゴリズムを実行するために、一つのＴＯＭＩ ＣＰＵが、他のＴＯＭＩ ＣＰＵに仕事を渡して、そのＣＰＵから結果を受け取ることが可能でなければならない。ＴＯＭＩプロセッサの他の実施形態は、任意のプロセッサがマスタプロセッサになり、かつ任意の他の利用可能なＴＯＭＩプロセッサをスレーブプロセッサとみなすことを可能にする。ＴＯＭＩプロセッサの起動および停止、プロセッサ間の通信、および独立及び従属スレッドの管理は、この実施形態のプロセッサ管理の中でサポートされる。
【０１３８】
ＴＯＭＩ ＣＰＵの停止
ＴＯＭＩ ＣＰＵは、そのＰＣに全て１を書き込むことによって停止され得る。ＴＯＭＩ ＣＰＵが停止される時、そのクロックは動いていないし、それは電力を消費していない。いかなるＴＯＭＩ ＣＰＵも、それ自身のＰＣに全て１を書き込むことができる。
【０１３９】
ＴＯＭＩ ＣＰＵの起動
ＴＯＭＩ ＣＰＵは、そのＰＣに全て１以外の値が書き込まれる時、実行を始めることができる。マスタプロセッサは、それが図１０Ｄに示したようなモードレジスタによってリセットされる時、そのＰＣに書き込まれた０の値を有している。
【０１４０】
独立プロセッサスレッド
複数のスレッドが単一の汎用プロセッサ上で実行される時、それらのスレッドは、まれに通信するのみで、非常に緩く連結され得る。実行、結果のリターン、および停止の代わりに、いくつかのスレッドは、結果を連続的かつ永久に送達することを、永遠に実行することができる。このようなスレッドの一例は、ネットワーク通信スレッドまたはマウスデバイスを読み出すスレッドである。マウススレッドは、連続的に動作して、マウス位置およびクリック情報を、ポーリングされ得る共有メモリ領域または直ちに示されるコールバックルーチンに送達する。
【０１４１】
このような独立スレッドは、主に、性能を加速するよりはむしろ、プログラミングを単純化するために用いられる。類似のスレッドは、ＴＯＭＩのようなマルチプロセッサシステム上で実行され得る。結果は、共有メモリ領域に送達され得る。場合によっては、通信は、共有変数によって達成され得る。
【０１４２】
ＴＯＭＩアーキテクチャにおいて、共有変数は、共有メモリより効率的であり得る。なぜなら、変数は、全ての行をX_cacheまたはY_cacheにロードするためのメモリＲＡＳサイクルの必要性を回避することができるからである。変数の使用の一例は、ネットワークトラフィックを監視するＴＯＭＩ ＣＰＵのための受信バッファに対する入力ポインタである。ネットワーク監視ＣＰＵは、データが受信されると、変数をインクリメントする。データ消費ＣＰＵは、時々、変数を読み出し、十分なデータがある時、メモリの行をX_cacheまたはY_cacheにロードするための動作を実行する。それから、受信されたネットワークデータは、キャッシュから共有変数によって示される値まで読み出され得る。
【０１４３】
従属プロセッサスレッド
いくつかのアルゴリズム（例えば分割および獲得として分類されるもの）は、いくつかのプロセッサ上でアルゴリズムの部分を同時に実行して、結果を結合することによって、並列処理を達成することができる。このような設計において、単一のマスタプロセッサは、いくつかのスレーブプロセッサから仕事を要求して、スレーブが並列に仕事を実行する間、待つ。このように、マスタプロセッサは、スレーブプロセッサによって完了される仕事に依存する。
【０１４４】
スレーブプロセッサの仕事が完了する時、マスタプロセッサは、部分的な結果を読み出し、それらを最終結果に結合する。この機能は、ＴＯＭＩアーキテクチャが、「分割および獲得」として知られたアルゴリズムのクラスを効率的に処理することを可能にする。より一般的で簡単な分割および獲得アルゴリズムのいくつかは、検索および分類である。
【０１４５】
マルチプロセッサ管理命令セット拡張
基本的なＴＯＭＩ命令セットに対する一連の拡張は、独立及び従属スレッド管理を可能にする。これらの命令は、図２Ｂに示したいくつかの利用可能なＮＯＯＰコードを用いて実行される。これらの管理拡張命令は、図２Ｃにまとめられている。
【０１４６】
GETNEXTPROCESSOR−この命令は、プロセッサ稼働（availability）テーブルを問い合わせ、次の利用可能なプロセッサと関連する数を有するＡＣＣをロードする。
【０１４７】
SELECTPROCESSOR−この命令は、ＡＣＣをプロセッサ選択レジスタに書き込む。プロセッサ選択レジスタは、どのプロセッサがTESTDONEおよびREADSHAREDVARIABLEによって評価されるかを選択する。
【０１４８】
STARTPROCESSOR−この命令は、プロセッサ選択レジスタによって選択されたプロセッサのＰＣに書き込む。この命令は、マスタプロセッサが、停止しているスレーブプロセッサを起動したい時に、最も実行されそうである。スレーブプロセッサは、そのＰＣが全て１である場合に、停止される。値をスレーブプロセッサのＰＣに書き込むことによって、マスタプロセッサは、スレーブプロセッサに、書き込まれたＰＣの位置でプログラムを実行し始めさせる。動作が成功した場合、ＡＣＣは、選択されたプロセッサに書き込まれるＰＣ値を含んでいる。動作が成功しなかった場合、ＡＣＣは、−１を含んでいる。失敗した動作の最も可能性がある理由は、選択されたプロセッサが利用できなかったということである。
【０１４９】
TESTDONE−この命令は、プロセッサ選択レジスタによって選択されたプロセッサのＰＣをテストして、ＰＣ＝全て１である場合に、コールしているプロセッサのＣビットを「１」にセットする。このようにＰＣをテストするループは、以下の通りに作成され得る。
LOADI, processorNumber
SELECTPROCESSOR
LOADACC, LOOPADDRESS
TOP TESTDONE
STOREACC, PC_COND    //選択されたプロセッサがＰＣ＝全て１で停止するまで、TOPへループ。
【０１５０】
TESTAVAILABLE−この命令は、プロセッサ選択レジスタによって選択されたプロセッサのためのプロセッサ割当てテーブルビットの中で「利用可能な」ビットをテストして、選択されたプロセッサが利用可能な場合に、コールしているプロセッサのＣビットをセットする。このように更なる仕事に対する可用性をテストするためのループは、以下の通りに作成され得る。
LOADI, processorNumber
SELECTPROCESSOR
LOADACC, LOOPADDRESS
TOP TESTAVAILABLE
STOREACC, PC_COND    //選択されたプロセッサが利用可能であるまで、TOPへループ。
【０１５１】
SETAVAILABLE−この命令は、プロセッサ選択レジスタによって選択されたプロセッサのためのプロセッサ割当てテーブルの中で「利用可能な」ビットをセットする。この命令は、他のプロセッサが図１０Ｅに示すように仕事をすることを要求する１つのプロセッサによって、最も実行されそうである。仕事をしているプロセッサが、その仕事を完了する時に、それは、そのＰＣを全て１にセットすることによって停止する。要求側プロセッサは、仕事をしているプロセッサに対して周期的にTESTDONEを行う。仕事をしているプロセッサが、その仕事を完了した時、要求側プロセッサは、共有メモリ位置または共有変数によって結果を読み出す。結果が読み出される時、仕事をしていたプロセッサは、他の作業を再割り当てするために利用可能である。そして、要求側プロセッサは、SETAVAILABLEを用いるので、他のプロセッサは、それが更なる仕事をすることを要求し得る。
【０１５２】
READSHAREDVARIABLE−この命令は、プロセッサ選択レジスタによって選択されるプロセッサの共有変数を読み出す。この命令は、他のプロセッサが仕事をすることを要求した１つのプロセッサによって、最も実行されそうである。共有変数は、割り当てられた仕事の進捗を判定するために、任意のプロセッサによって読み出され得る。例えば、仕事をしているプロセッサは、高速ネットワークから受け取っているプロセスデータに割り当てられる可能性がある。共有変数は、読み出されて他のプロセッサが利用可能であったデータの量を示している。各プロセッサは、共有変数を含んでいる。その共有変数は、任意の他のプロセッサによって読み出され得るが、共有変数は、それ自身のプロセッサによってのみ書き込まれ得る。
【０１５３】
STORESHAREDVARIABLE−この命令は、ＡＣＣの値を、命令を実行しているプロセッサの共有変数に書き込む。共有変数は、任意の他のプロセッサによって読み出され得る。そして、他のプロセッサに状態および結果を伝達するために用いられる。
【０１５４】
データレディ(Ready)ラッチを用いるプロセッサ間通信
図１０Ｆは、ＴＯＭＩプロセッサ間の通信の１つの可能なハードウェア実装を示している。１つのＴＯＭＩプロセッサは、SELECTPROCESSORコマンドを用いて、それ自体と他のＴＯＭＩプロセッサとの間の接続を確立することができる。この命令は、選択している、および選択されたプロセッサが、共有レジスタおよびREADSHAREDVARIABLEおよびSTORESHAREDVARIABLEコマンドを用いて、データを交換することを可能にする論理接続を確立する。
【０１５５】
図１０Ｆの上半分は、データをレディフラグレジスタによって制御される他のプロセッサに送信するプロセッサのためのロジックを示している。図１０Ｆの下半分は、レディフラグレジスタによって制御される他のプロセッサからデータを受信するプロセッサのためのロジックを示している。
【０１５６】
共有レジスタの状態は、選択している、または選択されたプロセッサのＣビットの中に読み込まれ得る。動作中に、プロセッサは、データを、その共有レジスタに書き込む。これにより、関連するデータレディフラグをセットする。接続されたプロセッサは、Ｃビットが、関連するデータレディフラグがセットされたことを示すまで、その共有レジスタを読み出す。読み出し動作はレディフラグをクリアするので、プロセスを繰り返すことができる。
【０１５７】
プロセッサ割り当ての調停
上述の通り、ＴＯＭＩプロセッサは、仕事を、可用性がGETNEXTPROCESSORによって判定された他のＴＯＭＩプロセッサに委任することができる。
【０１５８】
GETNEXTPROCESSORは、プロセッサが利用可能かどうかを判定する。利用可能なプロセッサとは、現在仕事を実行していなくて、かつ、まだREADSHAREDVARIABLEによって検索されていない以前の仕事の結果を保持していないものである。
【０１５９】
図１０Ｇは、仕事が委任され得る利用可能なプロセッサを識別するための１つのハードウェア実装を示している。図１０Ｈは、例示的なプロセッサ調停のイベントを示している。そのプロセスは以下の通りである。
１．要求側プロセッサは、GETNEXTPROCESSOR命令を実行する。これは、「次の利用可能なプロセッサ要求」ラインを調停ロジックに引き下ろす。
２．調停ロジックは、「次の利用可能なプロセッサ」ライン上のＴＯＭＩ ＣＰＵに対応する数を生成する。
３．要求側プロセッサは、SELECTPROCESSOR命令を実行する。
これは、数を、要求側プロセッサのＰＳＲ（プロセッサ選択レジスタ）の中に格納する。
４．要求側プロセッサは、それから、STARTPROCESSOR命令を実行する。これは、プロセッサ選択レジスタによって選択されたプロセッサのＰＣに書き込む。動作が成功した場合、選択されたプロセッサの数は、選択されたプロセッサが、もはや、仕事をするために割り当てられるために利用可能ではないことを示すために、更に、調停ロジックに格納される。動作が不成功の場合、その理由は、多分、選択されたプロセッサが利用可能ではないことである。要求側プロセッサは、他の利用可能なプロセッサを見つけるために、他のGETNEXTPROCESSORを実行する。
５．選択されたプロセッサが、その結果を利用可能にするために、STORESHAREDVARIABLEを実行する時、調停ロジックは、選択されたプロセッサが、読まれるのを待っている結果を持っていることを通知される。
６．選択されたプロセッサが、そのＰＣに−１を書き込むことによって停止される時、調停ロジックは、選択されたプロセッサが利用可能であることを通知される。
７．選択されたプロセッサの結果がREADSHAREDVARIABLEによって検索される時、調停ロジックは、選択されたプロセッサの結果が読み出されたことを通知される。
【０１６０】
メモリのロック
ＴＯＭＩプロセッサは、それらのキャッシュを通してシステムメモリを読み書きする。完全にキャッシュに入れられたカラムは、一度に読み書きされる。いかなるプロセッサも、システムメモリの任意の部分を読むことができる。個々のプロセッサは、その排他的な書き込みのために、メモリのカラムをロックすることができる。このロックメカニズムは、プロセッサ間でのメモリ書き込みコンフリクトを回避する。
【０１６１】
提案されたアプリケーション
並列法は、個々のプロセッサに対して仕事の独立した部分に入ると考えられるアプリケーションを効果的に加速する。うまく考えられた１つのアプリケーションは、ロボットの視覚のための画像操作である。画像操作アルゴリズムは、相関、等化、エッジ識別、および他の動作を含む。多くは、行列操作によって実行される。図１１に示すように、このアルゴリズムは、非常にしばしば、うまく考えられる。
【０１６２】
図１１に例示されたイメージマップは、全イメージマップの矩形のサブセットに対する画像データを操作するために割り当てられたプロセッサを含む、２４個のプロセッサを示している。
【０１６３】
図１２は、一実施形態において、ＴＯＭＩシステムＲＡＭが、どのように割り当てられ得るかを示している。システムＲＡＭの１つのブロックは、画像キャプチャの画素を保持し、他のブロックは、処理された結果を保持する。
【０１６４】
動作中に、コーディネートプロセッサは、一定時間毎に外部ソースから内部システムＲＡＭに画像ピクセルを転送するために、ＤＭＡチャンネルを割り当てる。画像キャプチャの一般的な速度は、１秒当たり６０画像である。
【０１６５】
コーディネートプロセッサは、次に、Ｘレジスタによって用いられるべき画像マップのアドレス、Ｙレジスタによって用いられるべき処理された画像のアドレス、２のパラメータカウント、および画像処理アルゴリズムのアドレスをプッシュすることによって、スレーブプロセッサ１をイネーブルにする。コーディネートプロセッサは、その後、同様に、プロセッサ２から２５をイネーブルにする。プロセッサは、画像処理アルゴリズムが完了するまで、それぞれ並列に実行を続ける。
【０１６６】
アルゴリズムが完了すると、各プロセッサは、プロセッサ稼働率テーブル内のその関連するdone_flagをセットする。結果は、コーディネートプロセッサによって処理される。それは、完了のためにポーリングすることであるか、または“done”イベント上での割り込みに応答することである。
【０１６７】
図１３Ａおよび１３Ｂは、オンチップシステムメモリを用いて実現される６４個のＴＯＭＩプロセッサのモノリシックアレイのための例示的な平面図である。平面図は、回路設計およびメモリ回路のレイアウトおよび全体のチップのアーキテクチャによって変化し得る。
【０１６８】
ＴＯＭＩ周辺機器コントローラチップ（ＴＯＭＩＰＣＣ）
ＴＯＭＩアーキテクチャの一実施形態は、１つ以上のＴＯＭＩ ＣＰＵを標準ＤＲＡＭダイに埋め込んでいる。結果として生じるダイは、標準ＤＲＡＭピン配列を有する標準ＤＲＡＭパッケージに入れられる。パッケージされた部品は、標準ＤＲＡＭ ＤＩＭＭ（デュアルインラインメモリモジュール）上に搭載され得る。
【０１６９】
動作中、この実施形態は、埋め込まれたＴＯＭＩ ＣＰＵがＤＲＡＭモードレジスタによってイネーブルにされる時を除き、標準ＤＲＡＭのようにふるまう。ＴＯＭＩ ＣＰＵがイネーブルにされて動作している時、それらは、外部プロセッサによってＤＲＡＭにロードされたプログラムを実行する。ＴＯＭＩ ＣＰＵの計算の結果は、共有ＤＲＡＭを通して外部プロセッサに提供される。
【０１７０】
いくつかのアプリケーションにおいて、外部プロセッサは、ＰＣによって提供される。他のアプリケーションにおいては、専門のプロセッサが、ＴＯＭＩ ＤＲＡＭチップのための以下の機能を実行するために提供され得る。図１４Ａは、このようなプロセッサ、ＴＯＭＩ周辺機器コントローラチップ（ＴＯＭＩＰＣＣ）の一実施形態を示している。このプロセッサの機能は、以下の通りである。
１．付随する永久記憶装置から使用のためのＴＯＭＩチップＤＲＡＭへデータおよび命令を転送するメカニズムを提供する。多くのシステムにおいて、永久記憶装置は、フラッシュＲＡＭであり得る。
２．ＴＯＭＩチップと、現実世界の装置、例えばディスプレイおよびネットワークとの間の入出力インターフェースを提供する。
３．ＴＯＭＩ ＣＰＵ動作を調整するのに必要なオペレーティングシステム機能の小さい一組を実行する。
【０１７１】
図１４Ｂは、ＴＯＭＩＰＣＣを用いる非常に小さいシステムを示している。セルホン言語翻訳器の例は、３チップのみから成る。すなわち、フラッシュＲＡＭ、ＴＯＭＩＰＣＣ、および単一のＴＯＭＩ ＣＰＵ／ＤＲＡＭ。この最小のアプリケーションにおいて、単一のＴＯＭＩ ＣＰＵ／ＤＲＡＭは、Ｄ０−Ｄ７と表示された標準８ビットＤＲＡＭ Ｉ／Ｏを通して通信する。
【０１７２】
フラッシュＲＡＭは、１つの形式から他の形式へ音声言語を解釈して翻訳するのに必要な命令に加えて音声言語を定義する音素および構文の辞書を含んでいる。
【０１７３】
ＴＯＭＩＰＣＣは、アナログ音声言語（またはその等価物）を受け取り、それをデジタル表現に変換して、それを、解釈および翻訳のために、ＴＯＭＩ ＤＲＡＭに提出する。結果として生じるデジタル化された音声は、ＴＯＭＩ ＤＲＡＭからＴＯＭＩＰＣＣに返され、アナログ音声表現に変換され、それからセルホンユーザに出力される。
【０１７４】
図１４Ｃは、ＴＯＭＩＰＣＣを用いる非常に大きなシステムを示している。このようなシステムの一例は、メモリ中心のデータベース機器（またはＭＣＤＢ）である。ＭＣＤＢシステムは、非常に遅いディスクまたは記憶装置内のそれのページング部分の代わりに、高速メモリ内の全データベース上で動作する。速い検索および分類は、メモリ中心のデータベースと同じチップ上にあるＴＯＭＩ ＣＰＵで実行する、いわゆる分割および獲得アルゴリズムの使用によって、ＴＯＭＩアーキテクチャで可能である。
【０１７５】
このようなシステムは、おそらく、複数のＴＯＭＩ ＣＰＵチップを組み込んでいるＴＯＭＩ ＤＩＭＭ（デュアルインラインメモリモジュール）によって構築されるであろう。標準２４０ピンＤＩＭＭに対するデータパスは６４ビットである。従って、メモリ中心のデータベースアプリケーションにおけるＴＯＭＩＰＣＣは、Ｄ０−Ｄ６３によって示されるような、６４ビット幅のデータベースを駆動する。
【０１７６】
本発明が、添付の図面を参照して例示のみのために記載されてきたこと、および、ここに記載した特定の実施形態に限定されないことは言うまでもない。当業者であれば認めるであろうが、改良および修正が、本発明の範囲または精神から逸脱することなく、ここに記載した本発明および例示的な実施形態に対してなされ得る。
【図１】
2010532905.tif 000003
【図２】
2010532905.tif 000004
【図２Ａ】
2010532905.tif 000005
【図２Ｃ】
2010532905.tif 000006
【図２Ｄ】
2010532905.tif 000007
【図２Ｅ】
2010532905.tif 000008
【図３】
2010532905.tif 000009
【図４】
2010532905.tif 000010
【図５】
2010532905.tif 000011
【図６】
2010532905.tif 000012
【図７Ａ】
2010532905.tif 000013
【図７Ｂ】
2010532905.tif 000014
【図８】
2010532905.tif 000015
【図９】
2010532905.tif 000016
【図１０】
2010532905.tif 000017
【図１０Ａ】
2010532905.tif 000018
【図１０Ｂ】
2010532905.tif 000019
【図１０Ｃ】
2010532905.tif 000020
【図１０Ｄ】
2010532905.tif 000021
【図１０Ｅ】
2010532905.tif 000022
【図１０Ｆ】
2010532905.tif 000023
【図１０Ｇ】
2010532905.tif 000024
【図１０Ｈ】
2010532905.tif 000025
【図１１】
2010532905.tif 000026
【図１２】
2010532905.tif 000027
【図１３Ａ】
2010532905.tif 000028
【図１４Ａ】
2010532905.tif 000029
【図１４Ｂ】
2010532905.tif 000030
【図１４Ｃ】
2010532905.tif 000031
【図１５Ａ】
2010532905.tif 000032
【図１５Ｂ】
2010532905.tif 000033
【図１５Ｃ】
2010532905.tif 000034
【図１５Ｄ】
2010532905.tif 000035
【図１５Ｅ−１】
2010532905.tif 000036
【図１５Ｅ−２】
2010532905.tif 000037
【図１５Ｅ−３】
2010532905.tif 000038
【図２Ｂ】
2010532905.tif 000039
【図１３Ｂ】
2010532905.tif 000040
【手続補正書】
【提出日】平成21年12月7日(2009.12.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
単一のチップ上の複数の並列プロセッサと、
前記チップ上に配置されていて、前記プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、
前記プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であり、
各前記プロセッサは、前記チップ上のコンピュータメモリの内部データバスにアクセスし、前記内部データバスは、メモリの１行より幅が広くなく、かつ
複数のプロセッサは、モノリシックメモリデバイスのために設計された半導体製造プロセスを用いて前記チップ上に配置されるコンピュータメモリと共に前記チップ上に製造されることが可能であることを特徴とするシステム。
【請求項２】
単一のチップ上の複数のプロセッサと、
前記チップ上に配置されていて、前記プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、
前記プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、かつ
前記プロセッサの各々は、前記プロセッサ内の少なくとも３つの特定のレジスタの各々専用のローカルキャッシュを有していることを特徴とするシステム。
【請求項３】
前記de minimis命令セットは、プロセッサ上での命令シーケンスの実行を最適化するための複数の命令拡張を有していて、更に、このような命令拡張は、基本的に２０未満の命令から成ることを特徴とする請求項２に記載のシステム。
【請求項４】
複数のプロセッサは、モノリシックメモリデバイスのために設計された半導体製造プロセスを用いて前記チップ上に配置されるコンピュータメモリと共に前記チップ上に製造されることを特徴とする請求項２に記載のシステム。
【請求項５】
半導体製造プロセスは、４層未満のメタル相互接続を用いることを特徴とする請求項４に記載のシステム。
【請求項６】
半導体製造プロセスは、３層未満のメタル相互接続を用いることを特徴とする請求項４に記載のシステム。
【請求項７】
複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの３０％未満の増加という結果をもたらすことを特徴とする請求項２に記載のシステム。
【請求項８】
複数のプロセッサのコンピュータメモリ回路内への集積化は、チップダイサイズの２０％未満の増加、またはチップダイサイズの１０％未満の増加、またはチップダイサイズの５％未満の増加という結果をもたらすことを特徴とする請求項２に記載のシステム。
【請求項９】
２５０，０００個未満のトランジスタが、前記チップ上の各プロセッサを作成するために用いられることを特徴とする請求項２に記載のシステム。
【請求項１０】
チップは、４層未満のメタル相互接続を用いる半導体製造プロセスを用いて製造されることを特徴とする請求項２に記載のシステム。
【請求項１１】
ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のダイに埋め込まれた複数の並列プロセッサを備えていて、
前記複数の並列プロセッサは、外部メモリコントローラおよび外部プロセッサと通信し、
前記並列プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であることを特徴とするシステム。
【請求項１２】
前記並列プロセッサは、デュアルインラインメモリモジュール上に搭載されていることを特徴とする請求項１１に記載のシステム。
【請求項１３】
メモリモジュール上に搭載された複数の並列プロセッサと、
外部メモリコントローラと、
汎用中央演算処理装置とを備えていて、
前記並列プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であることを特徴とするシステム。
【請求項１４】
前記メモリモジュールは、デュアルインラインメモリモジュールであることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記メモリモジュールは、ＤＲＡＭ、ＳＲＡＭ、およびフラッシュメモリのうちの１つ以上であることを特徴とする請求項１３に記載のシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、スレッドに最適化されたマルチプロセッサアーキテクチャに関する。
本出願は、米国特許出願第１１／７０２,９７９号の一部継続出願であって、２００７年２月５日に出願された、米国特許出願第１１／７０２,９７９号、および２００６年２月３日に出願された、米国仮特許出願第６０／７６４,９５５号に対する優先権を主張する。米国特許出願第１１／７０２,９７９号および米国仮特許出願第６０／７６４,９５５号の全ての内容は、ここでの引用により本願明細書に組み込まれるものとする。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
ＴＯＭＩ ＣＰＵは、例えばＤＲＡＭ、ＳＲＡＭ、およびフラッシュメモリデバイスのための、既存の安価な必需品（commodity）メモリ製造プロセスを用いて製造されるように設計されている。ＴＯＭＩ ＣＰＵのための少ないトランジスタ数は、ＣＰＵが、８層以上のメタル相互接続を利用する大きなマイクロプロセッサチップ（例えばIntel Pentium(登録商標)）を製造するために用いられる複雑で高価な製造プロセスまたは他の論理プロセスではなく、２層のメタル相互接続による安価な半導体製造プロセスを用いて、小さい領域内に造ることができ、かつシリコン内で容易に相互接続することができることを意味する。現代のＤＲＡＭおよび他の必需品メモリチップは、より安い製造コスト、より多くの製品の生産量、及びより高い製品の歩留まりを達成するために、より少ない層（例えば２）のメタル相互接続による、より単純で、より安いコストの半導体製造プロセスを利用している。必需品メモリデバイスのための半導体製造プロセスは、通常、低い漏れ電流のデバイスの動作によって特徴付けられる。一方、最新のマイクロプロセッサを造るために用いられるプロセスは、トランジスタレベルの低い漏れ電流値よりはむしろ、高速および高性能特性のために努力する。ＤＲＡＭおよび他のメモリデバイスのために用いられるのと同じ製造プロセスによって効率的に実現されるＴＯＭＩ ＣＰＵの能力は、ＴＯＭＩ ＣＰＵが、既存のＤＲＡＭチップ（または他のメモリチップ）の中に埋め込まれて、低コスト、高い歩留まりのメモリチップ製造プロセスを利用することを可能にする。これは、また、ＴＯＭＩ ＣＰＵが、（例えば、メモリデバイスのためのＪＥＤＥＣ規格に準拠する）同じパッケージングおよびデバイスピンレイアウト、製造設備、試験設備、および現在産業界でＤＲＡＭおよび他のメモリチップのために用いる試験ベクトル（vector）を用いて製造され得るという利点を提供する。好ましい実施形態は、従来のＤＲＡＭの中にＣＰＵを埋め込むことを記載している。これは、好都合にも、従来のマイクロプロセッサの中にＤＲＡＭを埋め込むことの代替案と対照をなす。本発明の好ましい実施形態と比較したその高いトランジスタ数のため、従来のマイクロプロセッサは、おそらく、埋め込まれたＤＲＡＭの性能および信頼性に悪影響を与え得る非常に大きなレベルの電気的ノイズおよび熱を発生する。さらに、従来のマイクロプロセッサ上に埋め込まれるＤＲＡＭは、おそらく、好ましい実施形態の２層と比較して、８層以上のメタル相互接続を有するプロセスを必要とする。比較すると、従来のマイクロプロセッサの中に埋め込まれた結果として生じるＤＲＡＭは、おそらく、より高いコスト、低い歩留まり、高い電力消費、および、最終的には、低い性能である。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】変更
【補正の内容】
【００６４】
好ましい実施形態の他の利点は、少ないトランジスタ数による、ＴＯＭＩ ＣＰＵによって生成される低レベルの電気的ノイズである。なぜなら、ＣＰＵは、データのためにオフチップメモリにアクセスする常に駆動しているＩ／Ｏ回路ではなく、メモリにアクセスする超幅広内部ＤＲＡＭデータバスを利用するからである。オンチップＣＰＵキャッシュは、処理のために、データへの即時のアクセスを考慮に入れていて、従ってオフチップメモリアクセスに対する必要性を最小限にする。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００７１
【補正方法】変更
【補正の内容】
【００７１】
ソースとしてレジスタ０を有する読み出し動作は、ＰＣ＋３の値をロードする。このような方法で、ループの先頭のアドレスが、読み出されることができて、後の使用のために格納され得る。ほとんどの場合、ループアドレスは、スタック（Ｓ）にプッシュされる。ソースとしてレジスタ１を有する読み出し動作は、ＰＣによってアドレスされた次のフルワードによって指し示される値をロードする。このような方法で、３２ビット即値オペランドがロードされ得る。３２ビット即値オペランドは、ワード整列（word align）されなければならないが、ＬＯＡＤＡＣＣ命令は、３２ビット即値オペランドの直前の４バイトワードの中のいかなるバイト位置にあってもよい。読み出しの実行に続いて、ＰＣは、それが、３２ビット即値オペランドに続く最初のワード整列された命令をアドレスするようにインクリメントされる。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００９６
【補正方法】変更
【補正の内容】
【００９６】
SHIFTLOADBYTE−この命令は、ＡＣＣを左へ８ビットシフトして、命令に続く８ビットバイトを読み出し、それをＡＣＣの最下位８ビットに入れる。このような方法で、長い即値オペランドが、一連の命令を用いてロードされ得る。例えば１４ビット即値オペランドをロードするために、
LOADI, #14    ＼＼１４ビットオペランドの最上位６ビットをロードする。
SHIFTLOADBYTE    ＼＼６ビットの８位置を左へシフトして、次の８ビット値をロードする。
CONSTANT #E8    ＼＼８ビット即値オペランド。
ＡＣＣの結果としての１６進値は14E8である。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１２３
【補正方法】変更
【補正の内容】
【０１２３】
各プロセッサのためのメモリマップは、そのプロセッサ用のローカルレジスタに対して、最初の３２の位置（１６進法の１Ｆ）を費やす（図３参照）。メモリマップの残りは、それらのキャッシュレジスタを通して全てのプロセッサによってアドレス指定可能である（図６参照）。システムＲＡＭのアドレス指定能力は、ローカルキャッシュと関連している３つのレジスタＰＣ，Ｘ，およびＹの幅のみによって制限される。レジスタが２４ビット幅である場合、全アドレス指定能力は１６メガバイトであるが、上限はない。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１５０
【補正方法】変更
【補正の内容】
【０１５０】
TESTAVAILABLE−この命令は、プロセッサ選択レジスタによって選択されたプロセッサのためのプロセッサ可用性テーブルの中で「利用可能な」ビットをテストして、選択されたプロセッサが利用可能な場合に、コールしているプロセッサのＣビットをセットする。このように更なる仕事に対する可用性をテストするためのループは、以下の通りに作成され得る。
LOADI, processorNumber
SELECTPROCESSOR
LOADACC, LOOPADDRESS
TOP TESTAVAILABLE
STOREACC, PC_COND    //選択されたプロセッサが利用可能であるまで、TOPへループ。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１５１
【補正方法】変更
【補正の内容】
【０１５１】
SETAVAILABLE−この命令は、プロセッサ選択レジスタによって選択されたプロセッサのためのプロセッサ可用性テーブルの中で「利用可能な」ビットをセットする。この命令は、他のプロセッサが図１０Ｅに示すように仕事をすることを要求する１つのプロセッサによって、最も実行されそうである。仕事をしているプロセッサが、その仕事を完了する時に、それは、そのＰＣを全て１にセットすることによって停止する。要求側プロセッサは、仕事をしているプロセッサに対して周期的にTESTDONEを行う。仕事をしているプロセッサが、その仕事を完了した時、要求側プロセッサは、共有メモリ位置または共有変数によって結果を読み出す。結果が読み出される時、仕事をしていたプロセッサは、他の作業を再割り当てするために利用可能である。そして、要求側プロセッサは、SETAVAILABLEを用いるので、他のプロセッサは、それが更なる仕事をすることを要求し得る。
【国際調査報告】
2010532905.tif 000041