JP2007272895A - コンピュータプロセッサアレイの操作方法および装置 - Google Patents

コンピュータプロセッサアレイの操作方法および装置 Download PDF

Info

Publication number
JP2007272895A
JP2007272895A JP2007086857A JP2007086857A JP2007272895A JP 2007272895 A JP2007272895 A JP 2007272895A JP 2007086857 A JP2007086857 A JP 2007086857A JP 2007086857 A JP2007086857 A JP 2007086857A JP 2007272895 A JP2007272895 A JP 2007272895A
Authority
JP
Japan
Prior art keywords
computer
computers
forthlet
instruction
array
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007086857A
Other languages
English (en)
Other versions
JP2007272895A5 (ja
Inventor
Charles H Moore
エイチ.ムーア チャールズ
Jeffrey Arthur Fox
アーサー フォックス ジェフリー
John W Rible
ダヴリュ.リブル ジョン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Technology Properties Ltd
Original Assignee
Technology Properties Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Technology Properties Ltd filed Critical Technology Properties Ltd
Publication of JP2007272895A publication Critical patent/JP2007272895A/ja
Publication of JP2007272895A5 publication Critical patent/JP2007272895A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Multi Processors (AREA)
  • Microcomputers (AREA)

Abstract

【課題】先行技術のコンピュータにおいて、命令を実行前に読出して格納しなければならない点を解消する。
【解決手段】プログラムとデータとを、複数コンピュータ(12)の1つと前記複数コンピュータの別の1つとの間で分配するメカニズムを備える。
【選択図】図1

Description

本発明はコンピュータおよびコンピュータプロセッサの領域に関し、特に、コンピュータ間の一意なタイプの対話方法および手段に関する。現存の独創的なコンピュータアレイの使用例で現状有力なものは、単一マイクロチップ上で複数コンピュータを組み合わせることである。本発明はさらなる特殊性をもってコンピュータおよびコンピュータプロセッサの領域に関し、特に、スタックコンピュータプロセッサ内のスタックをより効率的に使用するための方法および手段に関する。
先行技術において、協調する複数のコンピュータプロセッサを使用して、タスクを遂行することが知られている。マルチスレッディングおよびいくつかの他のスキームが、プロセッサを協調させることを可能にするために使用されてきた。しかしながら、当該領域において改善できる余地は大量にあると一般的に認識されている。さらに、数個のプロセッサを単一チップ上で組み合わせるのが現在の傾向であり、それが問題を悪化させ、コンピュータを効率的な方法で協調させる解決法の発見の緊急性を高める。いくつかの理由により、多数のアプリケーションに対する複数プロセッサの最適な配置は、それぞれが処理機能と少なくとも数個の専用メモリを有する多数のコンピュータから成るアレイであることが考えられる。上記の例において、コンピュータの各々はそれ自身特に強力ではなく、計算能力はコンピュータの緊密な協調を通して達成される。
同時係属出願において上記コンピュータアレイの多くの独創的な態様が説明および特許請求されており、上記コンピュータの配置方法と上記コンピュータ間の通信チャネルの発生方法とに関するいくつかの詳細が含まれる。しかしながら、最高の効率性で動作するようにコンピュータアレイの比較的新規の概念を実装するためには、さらなる革新が必要である。
明らかに、コンピュータアレイの配置、コンピュータアレイ間の通信、コンピュータアレイ間のタスク分割、およびコンピュータアレイの他の使用の最適な方法に関して解決すべき問題が多数ある。これらの問題のいくつかは解決済みかも知れないが、おそらく既存の解決方法に対してさえも改善余地があるだろう。他の場合においては、先行技術に存在しなかった新規の問題を解決するために、先例なき問題に取り組む必要があるかも知れない。
スタックマシンは、複合命令セットコンピュータ(CISC)よりも非常に低いプロセッサの複雑度を提供し、縮小命令セットコンピュータ(RISC)マシンまたはCISCマシンのいずれかよりも低いシステム全体の複雑度を提供する。スタックマシンは、良好なパフォーマンスを得るための複雑なコンパイラまたはキャッシュ制御ハードウェアを必要とせずに、これを行う。スタックマシンはさらに、大部分のプログラミング環境において競争力のある生のパフォーマンスと優位なパフォーマンスを所与の価格で実現する。スタックマシンが最初に成功した応用領域はリアルタイムな組込み制御環境であり、その領域ではスタックマシンは他のシステム設計アプローチより大幅に優れている。スタックは主にプログラムメモリに以前は保存されたが、最近のスタックマシンはスタックに対し、別個のメモリチップまたはオンチップメモリの領域を保持する。これらのスタックマシンは、非常に高速なサブルーチン呼出し能力と、割り込み処理およびタスク切り替えに対して優位なパフォーマンスとを提供する。
Zahlr等(USPN6,367,005)はレジスタスタックエンジンを開示しており、レジスタスタックエンジンは、レジスタスタックの十分なレジスタをメモリに保存して、スタックオーバフロー発生時に、より多くの利用可能なレジスタを提供する。レジスタスタックエンジンはさらに、スタックアンダーフロー発生時に適切な数のレジスタを復元できるまで、マイクロプロセッサを停止させる。
Story(USPN6,219,685)は動作結果を閾値と比較する方法を開示している。しかしながら、このアプローチは閾値に切り下げた結果(これは、オーバフロー例外を発生させる)と、ちょうど閾値と偶然に一致した結果とを区別しない。Storyが開示した別の方法は、ハードウェアフラグを読み書きしてオーバフローまたはアンダーフロー条件を識別する。
メモリ内でスタックを使用すると、オーバフローまたはアンダーフローは、スタック項目を上書きするか、またはスタックの一部として意図していないスタック項目(スタックアイテム)を使用するであろう。スタック内のオーバフローおよびアンダーフローを低減または削除する改善された方法が必要である。
フォースシステム(Forth system)は2つ以上の同時実行「スレッド(thread)」を有することができ、これはしばしば協調ラウンドロビンと呼ばれる。中央処理装置(CPU)を使用してスレッドが順番を取得する順序は固定され、例えば、スレッド4は常にその順番をスレッド3の後およびスレッド5の前に取得する。各スレッドは所望の時間だけCPUを保持することができ、その後CPUを自発的に放棄する。スレッドはPAUSEの語を呼び出すことでこれを行う。元のタスクを復元するためには少数のデータ項目のみをPAUSE関数の実行中に保存する必要があり、割り込み関数の実行中は多数のコンテキストを保存する必要がある。
各スレッドは行うべき作業を有しても有しなくてもよい。タスク4が行うべき作業を有し、ラウンドロビン内のタスク4の前のタスク(タスク3)がPAUSEを呼び出す場合、タスク4が起動し、タスク4はタスク3がPAUSEを再度呼び出すまで実行する。行うべき作業をタスク4が有しない場合、タスク4は制御をタスク5に渡す。タスクが入出力関数を実行する語を呼び、従って入出力の完了を待つ必要があるとき、PAUSEは入出力呼出しに組み込まれる。
PAUSEが予測可能であれば、非常に効率的なコードを書くことができる。しばしば、フォースベースの協調ラウンドロビンは、そのCPUで順番を有する全てのスレッドをプリエンプティブのマルチタスカーよりも短時間で与え、次にCPUを取得するタスクを決定することができる。
しかしながら、特定のタスクはCPUを圧倒または上回る傾向にある場合がある。さらに、PAUSE関数を1つのCPUを超えて拡張させるのが有利である。
簡潔に述べると、本発明は複数のコンピュータのアレイを含み、各コンピュータは自身のメモリを有し、独立した計算機能を実行することができる。タスクを協調的に遂行するため、コンピュータはデータおよび/または命令を互いに渡さなければならない。可能な構成の1つは、直角に隣接したコンピュータ間の接続データ経路(connection data path)をコンピュータが有し、各コンピュータは4つもの「近傍(neighbors)」と直接通信できるようなものである。コンピュータが、直接の近傍でない別のコンピュータと通信することが望ましい場合、通信は他のコンピュータを通して所望の宛先に導かれる。
説明した環境によると、4つもの命令を含むデータ語を並列に、コンピュータ間および各コンピュータの内部メモリを行き来して渡すことができるので、単一データ語内のミニプログラムの1つのタイプを本発明ではマイクロループと称する。プロセッサの大規模なアレイにおいては大規模なタスクは複数の小規模なタスクに分割され、小規模なタスクの各々は幾分制限された能力を有するプロセッサにより容易に実行できるのが理想的であることは覚えておくべきである。従って、4つの命令ループが非常に有効であると考えられる。この事実は、次の関連事実によりさらに注目すべきものとなる。即ち、コンピュータは限られた設備を有するため、そのコンピュータがしばしば近傍から設備を「借りる」ことが好都合であるという事実である。これはマイクロループの使用に関する理想的な機会を与える。コンピュータが処理パワー等を近傍から借りる必要がある一方で、そのコンピュータは近傍からいくらかのメモリを借り、それを自身の内部メモリと幾分同じ方法で使用する別の可能性もある。マイクロループを近傍に渡して、近傍に一連のデータを読み書きするよう命令することで、上記のメモリ借り入れを容易に達成することができる。上記のマイクロループは例えば、特定の内部メモリ位置からの書き出し、その位置の増加、および所定回数の反復繰り返しの命令を含むことができる。マイクロループは単一語なので、マイクロループは2回以上命令メモリフェッチを実行することはできない。
マイクロループを近傍へ渡す上記の例は、本発明のさらなる別の態様の例であり、現在「フォースレット(Forthlets)」と称されている。そのように称される理由は、それらが現在フォースコンピュータ言語で実装されているからである。しかしながら、本発明の適用は、フォースによる使用例に厳密に制限されるわけではない。フォースレットは、実行用コンピュータに直接送信できるミニプログラムである。マイクロループとは対照的に、フォースレットは2語以上の語であり、複数のメモリフェッチを実行することができる。先行技術のコンピュータにおいては、命令を実行前に読出して格納しなければならないが、本明細書の詳細な説明から分かるように、本発明によればそれは不要である。実際、本発明の重要な態様は、コンピュータがフォースレットを生成してそれを別の実行用コンピュータに渡すことができることであると期待される。フォースレットはプログラマが「予め書込み」、格納して使用することができる。実際、フォースレットを必要に応じて、使用するために「ライブラリ」に蓄積することができる。しかしながら、予めプログラムされた基準に従って、フォースレットをコンピュータ内部で生成することができることも本発明の範囲内である。
例として、本発明の実施形態において、I/Oレジスタはメモリアドレスとして扱われ、このことは、メモリを読み書きする同一(または同様)の命令はI/O動作も実行できることを意味する。マルチコアチップの場合、I/O構造に対してこれを選択すると強力な効果がある。コアプロセッサは自身のローカルのROMおよびRAMから命令を読出して実行できるだけでなく、I/Oポートまたはレジスタ上に与えられた命令を読出して実行することもできる。データ送信するタイトなループという概念は非常に強力になる。この概念により、命令ストリームはコアにI/Oポートで提供され、I/Oポートから直接実行される。従って、あるコアはコードオブジェクトを、それを直接実行可能な隣接コアプロセッサに送信することができる。コードオブジェクトをコア間で渡すことができ、コアはコアオブジェクトをレジスタで実行する。各コードは本質的に完全に自身のローカルアドレス空間内で、コード命令送信に費やす見掛け時間なしに動作するため、コードオブジェクトは非常に高速で到着する。
上述のように、各命令フェッチは複数(今説明した実施形態においては4つ)の命令をコアプロセッサに運ぶ。この種の組み込み「キャッシュ」は確かに小さいが、命令自身がキャッシュを利用するとき、組込みキャッシュは非常に効果的である。例えば、ミクロなfor−nextループを構築することができる。このfor−nextループは、限界である単一の18ビット命令語に完全に含まれる。これらのタイプの構成は、I/Oレジスタに組み込んだ自動状態信号送信と結合されるときに理想的である。なぜならば、それは大きなデータブロックを単一の命令フェッチだけで送信可能であることを意味するからである。この種の命令パッキングにより、近傍のプロセッサコアから共有I/Oレジスタ上に提供された命令を実行する概念は新しい能力を得る。なぜならば、そのレジスタに現れる各語は、1つではなく4つの命令を表すからである。マルチコアチップにおけるこれらのタイプのソフトウェア/ハードウェア構造およびパフォーマンスに対するその驚異的な影響は、従来の言語に対しては絶対に利用可能ではない。それらは、複数の命令が単一語に包含され、完全なループをその語の内部から実行できるような命令セットにおいてのみ可能である。
本明細書内で説明した装置において、従来のデータスタックとリターンスタックとは、巡回の繰り返しパターンで機能するレジスタアレイにより置換される。データスタックはTレジスタ、Sレジスタ、および交差パターンで電気的に相互接続した8つのハードワイヤードレジスタを備える。これらの8つのハードワイヤードレジスタは、巡回の繰り返しパターンで機能するように相互接続される。この構成は、スタックの外部からの読出しを防止し、意図しない空のレジスタ値の読出しを防止する。
データスタックと同様、リターンスタックはRレジスタ、および交差パターンで電気的に相互接続した8つのハードワイヤードレジスタを含む。これらの8つのハードワイヤードレジスタは、巡回の繰り返しパターンで機能するように相互接続される。この構成は、スタックの外部からの読出しを防止し、意図しない空のレジスタ値の読出しを防止する。
上述の2相スタックプロセッサは独立に機能するプロセッサとして機能できるか、または相互接続コンピュータアレイにおいて数個の他の同様または異なるプロセッサとともに使用することができる。
本明細書内で説明し、数個の図面で示すように、本発明を実行する形態の説明と本発明の産業的な応用とを考慮すると、本発明は当技術分野の技術者に対して明らかであるであろう。列挙した目的と利点は、本発明の全ての可能な利点の完全なリストではない。さらに本発明は、適用する際に1つまたは複数の意図した目的および/または利点が欠如するかまたは要求されないときでさえ、実践することができるであろう。
さらに当技術分野の技術者は、本発明の様々な実施形態が、必ずしも全てではないが1つまたは複数の上述の目的および/または利点を達成可能であることを認識するであろう。従って、本明細書内で説明した目的および/または利点は本発明の本質的な要素ではなく、制限事項として解釈されるべきではない。
本発明のコンピュータアレイ10、10aおよび関連方法は、非常に広範囲の種類のコンピュータアプリケーションにおいて使用されるよう意図されている。それらは、非常に多数の、異なるが関連する関数が遂行される必要のあるコンピュータ集約アプリケーションにおいて特に有用であることが期待されている。本発明のコンピュータアレイ10、10a、および関連方法に関する最良の応用例のいくつかは、他のコンピュータのものとほぼ等しい計算上の要件をコンピュータ12の各々が有するように必要なタスクを分割できる場合であることが期待されている。しかしながら、コンピュータ12のいくつかが時々、または常に、その最大能力をかなり下回って動作する場合でも、本発明者はコンピュータアレイ10、10aの全体の効率性および速度は、タスクを動的に割り当てる先行技術のコンピュータアレイの効率性および速度を一般的に上回ることを発見している。
コンピュータアレイ10、10aを2つ以上有することが有利であるような多くのアプリケーションがありうることは注意すべきである。多くの上記の可能な例の1つは、デジタル無線がGPS入力を要求する場合であろう。上記の例においては、無線は1つのコンピュータアレイ10により実装され、GPSの機能を遂行するよう構成した別個のコンピュータアレイ10から入力を受信する。
コンピュータ12は上記の例で述べたように個々のタスクを行うよう最適化できるが、タスクが特定のアプリケーションで必要ない場合、コンピュータ12は何らかの他のタスクを実行するように簡単にプログラムすることができ、それはプログラマの想像によってのみ制限されることはさらに注意すべきである。
この本発明のコンピュータアレイ10、10aはフォースコンピュータ言語を使用して最も良く実装され、フォースコンピュータ言語は必要に応じて本質的にセグメント化されてタスクを容易に分割し、本発明を実装することが想定されている。カラーフォースはフォース言語の近年の変形であり、等しく適用可能である。
本発明のコンピュータアレイ10、10aおよびコンピュータアレイ方法36を容易に生成し、既存のタスク、入出力デバイス等と統合することができ、本明細書内で説明した利点が与えられるため、それらは産業界に容易に受け入れられることが期待されている。これらおよび他の理由から、本発明の実用性および産業的適用可能性の両方は、持続期間の範囲と、持続期間が長期に渡ることとにおいて重要であることが期待されている。
本発明の実践方法を、図を参照した以下の記述で説明する。図においては、同じ番号は同一または同様な要素を表す。本発明は、本発明の目的を達成する形態に関して説明されており、これらの教示を考慮して、本発明の精神または範囲から逸脱することなく変更を行うことができることは、当技術分野の技術者により理解されるであろう。
本明細書内で説明したおよび/または図で示す本発明の実際形態および変形形態は、例としてのみ与えられ、本発明の範囲を制限しない。特に述べない限り、本発明の個々の態様および構成要素を省略または修正するか、あるいは従って公知の均等物を代用するか、あるいは将来開発されるかまたは将来受け入れ可能な代用物と認められるような未知の代用物で代用することができる。本発明は、請求した発明の精神と範囲に留まりつつ様々な応用に対して修正することもできる。なぜならば、可能な応用範囲は広く、本発明は上記の多くの変形形態に対して適応可能であるよう意図されているからである。
以下の実施形態は、コンピュータ間の非同期通信と、個々に非同期的に動作するコンピュータとの両方を有するコンピュータアレイの例を使用して説明され、本発明の応用は決してその内容に制限されることはない。
本発明は複数の個別のコンピュータの1つのアレイを含む。本発明のコンピュータアレイを図1の線図に示し、図内では一般的な参照番号10で指定する。コンピュータアレイ10は複数(示した例においては24個)のコンピュータ12(アレイの例においては時々、「コア」または「ノード」とも称する)を有する。示した例において、コンピュータ12の全ては単一のダイ(die)14上に位置する。コンピュータ12の各々は、一般的に独立に機能するコンピュータであり、以下に詳細に説明する。コンピュータ12は複数(その量は、以下でより詳細に説明する)の相互接続データバス16により相互接続される。この例において、データバス16は双方向の非同期高速並列データバスであるが、他の相互接続手段をその目的に採用することができることも本発明の範囲内である。アレイ10の本実施形態において、コンピュータ12間のデータ通信が非同期であるだけでなく、個々のコンピュータ12は内部的に非同期モードでも動作する。本発明者は、これは重要な利点を与えると理解している。例えば、クロック信号がコンピュータアレイ10全体に渡って分散される必要がないため、大量の電力が節約される。さらに、クロック信号を分散させる必要がないため、アレイ10の大きさを制限する多くのタイミング問題または他の公知の難点の原因となる多くのタイミング問題が除去される。24個のコンピュータのアレイは制限事項でなく、チップ製造がより精緻になるとコンピュータ数が増加し、実際にスケーラビリティがこの構成の本質であることが期待される。
当技術分野の技術者は、明確にするため図1から省略されたダイ14上の追加要素があることを認識するであろう。上記の追加要素は、電力バス、外部接続パッド、およびマイクロプロセッサチップの他の上記の一般的態様を含む。
コンピュータ12eは、アレイ10の周辺上にないコンピュータ12の1つの例である。即ち、コンピュータ12eは垂直に隣接する4つのコンピュータ12a、12b、12cおよび12dを有する。コンピュータ12aから12eへのこのグループ化は、アレイ10のコンピュータ12間の通信をより詳細に説明することに関して、以下で使用する。図1で分かるように、コンピュータ12eなどの内部のコンピュータは4つの他のコンピュータ12を有し、その4つの他のコンピュータ12とバス16経由で直接通信できる。以下の説明において、説明する原理はコンピュータ12の全てに適用されるが、アレイ10の周辺上にあるコンピュータ12は3つのコンピュータ12とのみ直接通信すること、または、隅のコンピュータ12の場合は他の2つのコンピュータ12とのみ直接通信することを除く。
図2は図1の一部をより詳細に示す図であり、コンピュータ12のうち数個、特にコンピュータ12aから12eを示す。図2は、データバス16の各々が読出し線18、書込み線20および複数(この例では18個)のデータ線22を有することも示す。データ線22は、18ビット命令語の全ビットを一般に同時に並列で送信することができる。本発明の一実施形態において、コンピュータ12の中には隣接コンピュータの鏡像であるものがあることに注意すべきである。しかしながら、コンピュータ12が全て理想的に方向づけられるか、または隣接コンピュータの鏡像であるかは、今説明した本発明の一態様ではない。従って、本発明をより良く説明するため、この可能性のある複雑性は本明細書内でさらに説明しない。
本発明の方法によれば、コンピュータ12eなどのコンピュータ12は、1つ、2つ、3つまたは4つ全ての読出し線18を設定し、各々の1つ、2つ、3つまたは4つ全ての隣接コンピュータ12からデータを受信する準備が整うようにすることができる。同様に、コンピュータ12が1つ、2つ、3つまたは4つ全ての書込み線20を高に設定することも可能である。ここでは2つ以上のコンピュータ12の書込み線20を一度に高に設定することを述べないが、そうすることは本発明の範囲外ではない。なぜならば、例えばマルチポートアドレスに書き込むなど、これが望ましいことが何度かある場合、上記の動作を使用することがあり得るからである。
隣接コンピュータ12a,12b、12cまたは12dのうち1つが、それ自身とコンピュータ12eとの間の書込み線20を高に設定するとき、コンピュータ12eが既に対応する読出し線18を高に設定している場合、語がコンピュータ12a,12b、12cまたは12dからコンピュータ12eへ関連データ線22上で送信される。その後、送信コンピュータ12は書込み線20を解放し、受信コンピュータ(この例では12e)は書込み線20および読出し線18の両方を低にする。後者の動作は送信コンピュータ12に対して、データが受信されたことを応答する。上述の説明は、イベント列の順序を示すことを必ずしも意図していないことに注意する。実際に実施する際は、この例において受信コンピュータは、送信コンピュータ12がその書込み線20を解放する(高に設定することを止める)前に、書込み線20を少しだけ低に設定することを試みることができる。上記の事例において、送信コンピュータ12が自身の書込み線20を解放するとすぐに、書込み線20は受信コンピュータ12eにより低に設定される。
この例において、プログラミングの誤りのみが、バス16の1つの両端上にあるコンピュータ12の両方がそれらの間の読出し線18を高に設定しようと試みる原因となる。さらに、バス16の1つの対向端上にあるコンピュータ12の両方がそれらの間の読出し線18を同時に高に設定しようと試みることは誤りである。同様に、上述のように、単一のコンピュータ12に自身の4つの書込み線20のうち2つ以上を高に設定させることが望ましいとは今は期待されていない。しかしながら、次のことが望ましい場合があることは期待されている。即ち、読出し線18の相違なる組み合わせを高に設定して、コンピュータ12の1つが待機状態にあり、対応する自身の書込み線20を高に設定するために、選択したコンピュータ12の最初のものからのデータを待機できるようにすることが望ましい場合があるということである。
上述の例において、(1つまたは複数のコンピュータ12a、12b、12cまたは12dから選択した)隣接コンピュータが自身の書込み線20を高に設定する前に、コンピュータ12eが1つまたは複数の自身の読出し線18を高に設定するとして説明した。しかしながら、このプロセスは逆の順序で生じる場合もある。例えば、コンピュータ12eがコンピュータ12aに書き込もうとする場合、コンピュータ12eはコンピュータ12eとコンピュータ12aとの間の書込み線20を高に設定する。コンピュータ12eとコンピュータ12aとの間の読出し線18が、その後コンピュータ12aにより既に高に設定されていない場合、コンピュータ12eはコンピュータ12aがその読出し線18を高に設定するまで単に待機するだけである。その後、上述のように、読出し線18と書込み線20に対応する組の両方が高のとき、データ線22上で送信を待機するデータが送信される。その後、受信コンピュータ12(この例ではコンピュータ12a)は、2つのコンピュータ(この例では12eと12a)間の読出し線18と書込み線20との両方を、送信コンピュータ12eがそれを解放するとすぐに、低に設定する。
コンピュータ12eなどのコンピュータ12が、書込みを期待してその書込み線20の1つを高に設定する場合、コンピュータ12は本質的に何ら電力を使用せずに、データが上述のように適切な隣接コンピュータ12から「要求」されるまで単に待機する。これは、データが送信されるコンピュータ12がその読出し線18を高に設定しない場合にそうであり、この場合データは即座に送信される。同様に、コンピュータ12が、読出しを期待して1つまたは複数のその読出し線18を高に設定する場合、コンピュータ12は本質的に何ら電力を使用せずに、選択したコンピュータ12に接続された書込み線20が高になり命令語を2つのコンピュータ12間で送信するまで、単に待機する。
コンピュータ12を上述のように機能させることが可能な手段および/または方法がいくつかあるかもしれない。しかしながら、この例において、コンピュータ12がそのように振舞うのは、単にそれらが(説明した非同期な方法で、データをそれらの間で送信することに加えて)一般に非同期に内部で動作しているからである。即ち、命令は逐次的に完了する。書込みまたは読出し命令のいずれかが発生すると、その命令が完了するまで(または、おそらく「リセット」等によりそれが中止されるまで)、さらなる動作はない。先行技術の意味での通常のクロックパルスはない。むしろ、実行されている命令が読出し系または書込み系の命令のいずれでもないときのみ(読出し系または書込み系の命令は別のエンティティによって完了される必要があると仮定する)、あるいは読出し系または書込み系の動作が実際に完了したときに、次の命令を遂行するためにパルスが生成される。
図3は、図1および2のコンピュータ12の1つの例の一般的な配置を示すブロック図である。図3において分かるように、コンピュータ12の各々は、自身のRAM24およびROM26を有する一般的な内蔵型コンピュータである。前述のように、コンピュータ12は、この例においてそれらが単一チップ上で結合される場合、個々の「コア」とも称されることがある。
コンピュータ12の他の基本的な構成要素は、リターンスタック28、命令領域30、演算論理装置(「ALU」)32、データスタック34、および命令をデコードするためのデコード論理部36である。当技術分野の技術者は一般的に、この例のコンピュータ12などのスタックベースのコンピュータの動作を熟知しているであろう。コンピュータ12は、データスタック34と、独立したリターンスタック28とを有する2相スタックコンピュータである。
本発明のこの実施形態において、コンピュータ12は、隣接コンピュータ12と通信する4つの通信ポートを有する。通信ポート38は、3つの状態を持つドライバであり、オフ状態、(信号をコンピュータ12に与える)受信状態、および(信号をコンピュータ12から引き出す)送信状態を有する。勿論、特定のコンピュータ12がコンピュータ12eの例のようなアレイ内部(図1)にない場合、1つまたは複数の通信ポートは、少なくとも本明細書内で説明した目的では、その特定のコンピュータにおいて使用されないであろう。ダイの縁に隣接するこれらの通信ポート38は追加の回路を有することができ、その回路は上記のコンピュータ12に組み込まれるか、またはコンピュータ12の外部にあってそれと関連付けるかのいずれかであり、上記の通信ポート38を外部I/Oポート39(図1)として動作させる。上記の外部I/Oポート39の例は、これらに限らないが、USB(ユニバーサルシリアルバス)ポート、RS232シリアルバスポート、並列通信ポート、アナログデジタルおよび/またはデジタルアナログ変換ポート、および多くの他の可能な変形形態を含む。図1において、外部I/Oポート39を介して外部装置82と通信するインタフェース回路80と関連付けて、「縁の」コンピュータ12fを示す。命令領域30はいくつかのレジスタ40を含み、この例においては、Aレジスタ40a、Bレジスタ40bおよびPレジスタ40cを含む。この例において、Aレジスタ40aは完全な18ビットレジスタであり、Bレジスタ40bとPレジスタ40cは9ビットレジスタである。
計算結果の正確性を保証するため、プロセッサは各操作をチェックして、操作が例外条件を発生させたかどうかを判定する。例えば、算術演算はオーバフローおよびアンダーフロー例外を受ける。オーバフロー例外は、計算後の数値が、その数値に対して指定したフォーマットで表現可能な最大数より大きいときに生じる。アンダーフロー例外は、計算後の数値が、その数値に対して指定したフォーマットで表現可能な最小数より大きいときに生じる(二項演算操作に対するIEEE754−1985基準)。
本発明はスタックコンピュータのプロセッサを開示し、そのプロセッサ内でスタックは相互接続されたレジスタのアレイを備え、レジスタは巡回のパターンで機能する。データスタックおよびリターンスタックは、先行技術のコンピュータの多くに見られるような、スタックポインタがアクセスするメモリ内のアレイではない。
図4は命令語48の図表示である(命令語48は実際に命令、データ、またはその組合せのいくつかを含むことができることに注意する)。命令語48は18個のビット50から構成される。これはバイナリコンピュータであり、ビット50の各々は「1」または「0」である。前述のように、18ビット幅の命令語48は、スロット0 54a、スロット1 54b、スロット2 54cおよびスロット3 54dと呼ばれる4つのスロット54内に4つまでの命令52を含むことができる。本発明のこの実施形態において、18ビットの命令語48は常に全体として読み出される。従って、命令語48内に4つまでの命令を有する可能性が常にあるので、利用可能なスロット54の全てを使用することが不必要または望ましくないとき、無演算(動作なし)命令をコンピュータ12の命令セットに含めて、インスタンスを与える。本発明のある特定の実施形態によると、代替スロット(詳細には、スロット1 54bおよびスロット3 54c)内のビット50の極性(アクティブローと比べてアクティブハイ)が反転されることに注意する。しかしながら、これは今説明した本発明の必要な態様ではなく、従って、本発明をより良く説明するため、この可能性のある複雑性は以下の説明では避けることにする。
図5は図3のスロットシーケンサ42の略図である。図5において分かるように、スロットシーケンサ42は、環状に配置した複数(この例では14個)のインバータ56および1つのNANDゲート58を有し、信号が14個のインバータ56とNANDゲート58を通過するときその信号は奇数回数反転される。ORゲート60に対する2個の入力のいずれかが高になると、信号がスロットシーケンサ42内で初期化される。第1のORゲートの入力62は、実行中の命令52のビットi466(図4)から導出される。ビットi4が高である場合、その特定の命令52はALU命令であり、i4ビット66は「1」である。i4ビットが「1」のとき、第1のORゲート入力62は高であり、スロットシーケンサ42がトリガされ、次の命令52を実行させるパルスを初期化する。
高になる第1のORゲート入力62、または高になる第2のORゲート入力64(以降説明する)のいずれかによりスロットシーケンサ42がトリガされるとき、信号はスロットシーケンサ42の周りを2度通過し、出力をスロットシーケンサ出力68で毎回生成する。信号がスロットシーケンサ出力68を最初に通過するとき、出力は低であり、2回目はスロットシーケンサ出力68での出力は高になる。スロットシーケンサ出力68からの比較的広範囲の出力は、出力として狭いタイミングパルスを生成するパルス生成器70(ブロック図の形で示す)に与えられる。当技術分野の技術者は、狭いタイミングパルスは、コンピュータ12の動作を正確に初期化するために望ましいことを認識するであろう。
実行中の特定の命令52が読出しまたは書込み命令、または実行中の命令52がシーケンス内の次の命令52の即時実行をトリガするのが望ましくないような任意の他の命令であるとき、i4ビット66は「0」(低)であり、第1のORゲート入力62も従って低である。当技術分野の技術者は、コンピュータ12などの装置におけるイベントのタイミングが一般に非常に重要であり、これは例外でないことを認識するであろう。スロットシーケンサ42を検証すると、当技術分野の技術者は、ORゲート60からの出力は、信号がNANDゲート58を巡回して輪の第2「ラップ」を開始するまで、高でなければならないことを認識するであろう。その後、ORゲート60からの出力はその第2の「ラップ」中に低になり、回路が不必要に連続的に振動することを防止する。
上の説明から理解できるように、第2のORゲート入力66が以下に説明するように高でないと仮定すると、i4ビット66が「0」のときスロットシーケンサ42はトリガされない。
上述のように、各命令52のi4ビット66が、その命令が読出し系または書込み系の命令であるか否かに従って設定される。命令52内の残りのビット50は、その命令に対する特定のオペコードの残りを与える。読出し系または書込み系の命令の場合、1つまたは複数のビットを使用して、特定のコンピュータ12においてどこからデータを読出すか、またはどこに書込むかを示すことができる。本発明のこの例において、書込みデータは常にTレジスタ44(データスタック34の最上部)から来るが、データは、Tレジスタ44または命令領域30のいずれかに選択的に読込むことができ、命令領域30からそのデータを実行することができる。この理由は、本発明のこの特定の実施形態においては、データまたは命令のいずれかを本明細書内で説明した方法で通信でき、命令は従って、これは本発明の必要な態様ではないが、データバス16から直接実行することができるからである。さらに、1つまたは複数のビット50は、ポート38があるならば、どのポート38が読出しまたは書込みに設定されるべきかを示すために使用される。この後者の動作は、1つまたは複数のビットを使用してAレジスタ40a、Bレジスタ等のレジスタ40を指定することで任意に遂行することができる。上記の例において、指定したレジスタ40は、ポート38(および、さらに、メモリ、外部通信ポートなどの、コンピュータ12が通信を試みる可能性のある任意の他の可能なエンティティ)の各々に対応するビットを有するデータを予めロードする。例えば、特定のレジスタ40内の4つのビット各々は、上ポート38a、右ポート38b、左ポート38cまたは下ポート38dの各々に対応することができる。上記の場合、任意のビット位置に「1」がある場合、対応するポート38を介して通信が進むよう設定される。前述のように、本発明のこの実施形態において、読出しオペコードは通信用に2つ以上のポート38を単一命令で設定することができるが、書込みオペコードが通信用に2つ以上のポート38を単一命令で設定することは、可能ではあるが期待されていない。
すぐ下の例は、コンピュータ12eがコンピュータ12cへの書込みを試みる通信を仮定するが、この例は任意の隣接コンピュータ12間の通信に適用可能である。書込み命令が書込み中のコンピュータ12e内で実行されるとき、選択された書込み線20(この例においては、コンピュータ12eおよび12cの間の書込み線20)が高に設定され、対応する読出し線18が既に高である場合、データは選択した通信ポート38を介して選択した位置から即座に送信される。あるいは、対応する読出し線18が既に高ではない場合、コンピュータ12eは単に、その対応する読出し線18が高になるまで動作を停止する。読出し系または書込み系の命令があるときのコンピュータ12aの停止(または、より正確には、コンピュータ12aのさらなる動作を不可にすること)のメカニズムは前述した。要するに、命令52のオペコードはビット位置i4 66の位置に「0」を有し、従ってORゲート60の第1のORゲート入力62は低であり、従ってスロットシーケンサ42は許可パルスを生成するようにトリガされない。
読出し系または書込み系の命令の完了時にコンピュータ12eの動作が再び起動される方法に関して、そのメカニズムは以下の通りである。コンピュータ12eと12cの間の読出し線18および対応する書込み線20の両方が高のとき、線18と20の両方は、それを高に保持するそれぞれのコンピュータ12により解放される(この例において、送信コンピュータ12eは書込み線18を高に保持し、受信コンピュータ12cは読出し線20を高に保持する)。その後、受信コンピュータ12cは線18および20を低にする。実際の実施においては、受信コンピュータ12cは線18および20を、送信コンピュータ12eが書込み線18を解放する前に、低にしようと試みる。しかしながら、線18および20は高にされ、弱く低に保持(ラッチ)されるのみであるので、線18または20を低にする試みは実際には、線18または20がそれを高にラッチしているコンピュータ20により解放されるまで、成功しない。
データバス16内の線18と20の両方が低になるとき、これは“肯定応答”状態である。コンピュータ12eと12cの各々は、肯定応答状態において、自身の内部の肯定応答線72を高に設定する。図5から分かるように、肯定応答線72は第2のORゲート入力64を提供する。ORゲート60の入力62または64のいずれかに対する入力がORゲート60の出力を高にするため、この入力はスロットシーケンサ42の動作を前述の方法で初期化し、命令語48の次のスロット54内の命令52が実行される。肯定応答線72は、次の命令52がデコードされるまで高であり、誤ったアドレスがアドレスバスに到着することを防止する。
実行中の命令52が命令語48のスロットの3つの位置にあるときはどんな場合でも、勿論ビットi466が「0」でなければ、コンピュータ12は次の待機中の18ビット命令語48をフェッチする。実際の実施においては、本発明のメカニズムは、命令を「プリフェッチ」する方法と装置を含み、命令語48内の命令52全ての実行が終了する前にフェッチを開始することができる。しかしながらこれも、非同期データ通信に対する本発明の方法および装置の必要な態様ではない。
コンピュータ12eがコンピュータ12cに書き込む上述の例を、詳細に説明する。上述の説明から理解できるように、コンピュータ12eがコンピュータ12cに最初に書き込むことを試みようとなかろうと、またはコンピュータ12cがコンピュータ12eから読み出すことを最初に試みようとなかろうと、動作は本質的に同じである。コンピュータ12eまたは12cのどちらが最初に準備できようとも、コンピュータ12および12cの両方が準備できるまで動作は完了することができず、その最初のコンピュータ12は他のコンピュータ12eまたは12cが送信を完了するまで「スリープ状態になる」だけである。上述のプロセスを別の観点から見ると、書込みコンピュータ12eと受信コンピュータ12cの両方が、それぞれ書込みおよび読出し命令を実行するときに実際にスリープ状態になるが、トランザクションに最後に入ったものは、読出し線18と書込み線20の両方が高になるときほぼ同時に再起動され、トランザクションを開始する第1のコンピュータは、第2のコンピュータ12がプロセスを完了する準備ができるまで、ほぼ無制限にスリープ状態でいることができる。
装置間の効率的な非同期通信を可能とする方法は、ある種の肯定応答信号または状態である。本明細書で説明するように、この方法は必要な肯定応答状態を提供し、この肯定応答状態により装置間の非同期通信が可能、または少なくとも現実的になる。さらに、肯定応答状態により、1つまたは複数の装置が、肯定応答状態が発生するまで「スリープ状態になる」ことも可能となる。勿論、肯定応答状態は、コンピュータ12間で(相互接続データバス16上または別個の信号線上のいずれかで)送信中の別個の信号により、コンピュータ12間で通信される。上記の肯定応答信号は本発明の態様の範囲内である。しかしながら、本明細書で説明した本発明の実施形態によると、肯定応答の方法が実際に通信に影響する信号、クロック周期、タイミングパルス、または説明した以外の任意のリソースの追加を一切要求しないという意味で、さらに経済的である。
本発明に対して、その価値または範囲を変更することなく、様々な修正を加えることができる。例えば、本発明を読出し命令および書込み命令の点で説明したが、実際の実施においては、2つ以上の読出し系の命令および/または2つ以上の書込み系の命令が存在することができる。唯一の例として、本発明の1実施形態において、レジスタを増加させる書込み命令と、レジスタを増加させない他の書込み命令がある。同様に、書込み命令は、前述のようにレジスタ40を使用して通信ポート38を選択することに従って変化することができる。ただコンピュータ12の設計者が代替的な読出しの振舞いとしてどの変形形態を有用な選択と考えるかによって、いくつかの異なる読出し命令も存在することができる。
同様に、本発明を、単一のダイ14上のアレイ10におけるコンピュータ12間の通信に関して本明細書内で説明したが、同じ原理と方法を使用、または使用するために修正して、コンピュータ12とその専用メモリ間の通信、またはアレイ10内のコンピュータ12と外部デバイス間の(入力/出力ポート等を介した)通信などの他のデバイス間通信を実現することができる。実際、いくつかの応用例は、アレイのアレイ間の通信に適用可能な、今説明した装置間通信方法とともに、アレイのアレイを要求することができると期待される。
図1のコンピュータ12gなどのコンピュータがコードを実行して、主要な割当てタスクを遂行するとき、プログラマは、12fおよび12gなどの2つのコンピュータ間の不定期の相互作用が望ましいと決定することができる。プログラマは、「入力探索」動作166で示されるように、コンピュータ12gが不定期に停止して1つまたは複数のその近傍が通信を試みるかどうかを見ることを規定しているであろう。通信が、コンピュータ12fが開始するコンピュータ12gへの書込みなどの、「入力か?」決定動作168で示されるように待機している場合、コンピュータ12gは「他から受信」動作170で通信を完了する。そうでない場合、コンピュータ12gは図9に示すように、割り当てられた機能の実行に戻る。「他から受信」動作170の後、コンピュータ12gは、「入力に従って実行」動作172で受信した入力に従って動作する。コンピュータ12gは命令が入力の中にあることを期待し、この場合にコンピュータ12gはその命令を実行することを、プログラマは規定することができる。あるいは、コンピュータ12gを、動作の拠り所となるデータを期待するようプログラムすることができる。
「入力に従って実行」動作172に従い、コンピュータ12gはその主要な機能に戻る。即ち、それは「主要機能を実行」動作162に戻る。しかしながら、さらにより複雑な例の可能性が確実に存在する。例えば、コンピュータ12fから受信したある入力により、コンピュータ12fが以前割り当てられた主要機能を中止して新しい機能を始めるか、またはコンピュータ12fが単純にさらなる入力を一時的に停止および待機するようにプログラミングすることができる。当技術分野の技術者は理解するであろうが、ここでの動作に対する様々な可能性は、プログラマの想像によってのみ制限される。
本明細書内で説明した本発明の実施形態によると、別に割込みを要求する可能性のある入力監視および入力処理のタスクを別のコンピュータ12が割り当てられているため、所与のコンピュータ12はそれがタスクを実行している間は割り込まれる必要がないことに注意すべきである。しかしながら、別のタスクの処理中であるコンピュータ12を、コンピュータ12がその入力用ポート38を見るようプログラミングされていない場合、またはそのようにプログラミングされるまで、妨害することもできないことにも注意する。従って、コンピュータ12を停止させて他の入力を探すこともしばしば望ましいであろう。
本発明の実例となるのは、PAUSE命令の動作である。ここで説明されているものは、数個のプロセッサ間の「協調的マルチタスキング」である。タスクのセットがノードまたは複数ノード上に存在する。PAUSEは、全てのノードまたはポートを逐次的に検査して、到着する実行可能コードを求める。ウェイクアップまたはウォームスタートの前に、4つの無演算命令(....)が先行する。PAUSE命令はリターン(;)命令で終わり、その後次のスレッドがポーリングされる。検査された最後のポートは、4つの無演算命令から成る2つのセットを使用する。コールドスタートがリセット後に発生する。
入出力ピン39を有するエッジプロセッサ12aまたはコーナープロセッサ12fもPAUSEによりポーリングされ、例えば外部装置82によるタスクを実行する。PAUSEは、開始条件の一部としてROM内に位置することもできる。初期化ルーチンは停止命令にジャンプし、隣接プロセッサの4点読出し命令に行く。フォースを参照して複数プロセッサ間のPAUSE機能を本明細書内で開示しているが、複数プロセッサ間のPAUSE機能の全ての概念は、他のプログラミング言語に同様に適用することができる。
4つの命令52を命令語48に含むことができるため、および、本発明によると命令語48の全体をコンピュータ12の間で一度に通信できるため、これは非常に小さなプログラムを1つの動作で送信するための理想的な機会を与える。例えば、小さな「For/Next」ループの大部分を単一の命令語48の内部に実装することができる。図6はマイクロループ100の図表示である。マイクロループ100は、他の先行技術のループとは異なり、FOR命令102とNEXT命令104を有する。命令語48(図4)は4つもの命令52を含むので、命令語48は単一の命令語48の内部に3つの動作命令106を含むことができる。動作命令106は、プログラマがマイクロループ100に含むことを欲する本質的に任意の利用可能な命令であることができる。あるコンピュータ12から別のコンピュータ12へ送信できるマイクロループ100の典型的な例は、第2のコンピュータ12のRAM24からの読出し命令、またはRAM24への書込み命令のセットであり、第1のコンピュータ12は利用可能なRAM24の容量を「借りる」ことができる。
FOR命令102は値をリターンスタック28にプッシュし、その値は所望の繰り返し数を表す。即ち、データスタック34の最上部にあるTレジスタ44の値は、リターンスタック28のRレジスタ29にPUSHされる。FOR命令102は、命令語48のスロット3 54dにしばしば位置するが、実際は、任意のスロット54に位置することができる。FOR命令102がスロット3 54dに位置しない場合、その命令語48内の内部にある残りの命令52はマイクロループ100に行く前に実行され、一般的に次にロードされる命令語48となる。
本発明の今説明した実施形態によると、図6に示すNEXT命令104は特別な種類のNEXT命令104である。これは、NEXT命令104がスロット3 54d(図4)に位置するからである。本発明のこの実施形態によると、「通常の」NEXT命令(図示せず)に続く特定の命令語40内のデータ全てはアドレス(for/nextループが開始するアドレス)であることが仮定される。NEXT命令104に対するオペコードは、4つのスロット54のうちどのスロットの中にそれがあろうと、同じである(本明細書内で前述したように、スロット3 54dの場合、最初の2つの数字が推測され、明確に書き込まれないという明らかな例外はある)。しかしながら、NEXT命令104がスロット3 54d内にあるとき、NEXT命令104に続くアドレスデータは存在しえないため、スロット3 54d内のNEXT命令104はMICRO−NEXT命令104aであることも推測される。MICRO−NEXT命令104aは戻り先アドレスとして第1の命令52のアドレスを使用し、MICRO−NEXT命令104aが位置する同じ命令語48のスロット0 54a内に位置する。MICRO−NEXT命令104aはさらに(FOR命令102によりRレジスタ29に最初にPUSHされた)値をRレジスタ29から取得し、それを1だけ減じ、それをRレジスタ29に戻す。Rレジスタ29上の値が(0などの)所定の値に達するとき、MICRO−NEXT命令は次の命令語48をロードし、本明細書内で前述したように継続する。しかしながら、MICRO−NEXT命令104aが、所定の値より大きい値をRレジスタ29から読出すとき、MICRO−NEXT命令は自身の命令語48のスロット0 54aで動作を再開し、その命令を含めて、スロット0から3に位置する3つの命令52を実行する。即ち、本発明のこの実施形態において、MICRO−NEXT命令104aは常に3つの動作命令106を実行する。なぜならば、いくつかのインスタンスにおいて、3つの潜在的に利用可能な命令52を使用することは望ましくなく、「無演算」命令を必要に応じて1つまたは2つのスロット54を埋めるのに利用可能であるからである。
マイクロループ100は単一のコンピュータ12内で完全に使用することができることは注意すべきである。実際、利用可能な機械語命令のセット全体は、動作命令106として使用するために利用可能であり、マイクロループの適用および使用はプログラマの想像によってのみ制限される。しかしながら、マイクロループ100全体を単一の命令語48の内部で実行する能力が、コンピュータ12に命令語48を近傍コンピュータ12に送信させてその中の命令52をデータバス16から本質的に直接実行させることを可能にする能力と結合されるとき、これは、コンピュータ12にその近傍のリソースを利用させることを可能とする強力な手段となる。
小さなマイクロループ100は単一のデータ語48の内部に全て含まれ、そのマイクロループ100をコンピュータ12間で通信することができ、ここで説明したように、命令語48に含まれる任意の他の命令セットのように、受信コンピュータ12の通信ポート38から直接実行することができる。この種の「マイクロループ」100に対する多数の使用例があり、典型的には、あるコンピュータ12で何らかのデータを近傍コンピュータ12のメモリに格納したい場合に使用する。例えば、コンピュータ12は最初に命令をその近傍コンピュータに送信し、近傍コンピュータに対し、着信データ語を特定メモリアドレスに格納し、そのアドレスを増加させ、規定反復回数だけ繰り返す(データ語の数が送信される)よう指示することができる。データを読み戻すため、第1のコンピュータは第2のコンピュータ(記憶用に使用されるもの)に、同様なマイクロループを使用して格納データを第1のコンピュータに書き戻すよう指示するだけである。
マイクロループ100の構造を本明細書内で説明した直接実行の態様と併せて使用することで、コンピュータ12は待機中の近傍コンピュータ12を使用して、個々のコンピュータ12の各々に組込まれた相対的に小さな容量をデータ格納要求が上回るときに、超過分のデータを記憶することができる。この例はデータ記憶の観点で説明したが、同様な技術を同様に使用することで、コンピュータ12はその近傍に自身の計算リソースを共有させることができる。これは、他のコンピュータ12に何らかの動作、結果の記憶、および所定回数の繰り返しを実行させるマイクロループ100を作成することで行われる。理解できるように、本発明のマイクロループ100の構造を使用できる方法の数はほぼ無限である。
前述したように、本発明の説明した実施形態において、データまたは命令のいずれかを本明細書内で説明した方法で通信することができ、従って、命令はデータバス16から本質的に直接実行することができる。即ち、命令をRAM24に格納してそれを実行前に再呼び出しする必要はない。代わりに、本発明のこの態様によると、通信ポート38上で受信された命令語48は、RAM24またはROM26から再呼び出しされるのと本質的に異なって扱われることはない。この相違性の欠如は、コンピュータ12の説明した動作に関する前述の説明において明らかであり、命令語48がフェッチされ使用される以下のより詳細な説明は本発明の理解の手助けとなるであろう。
利用可能な機械語命令の1つはFETCH命令である。FETCH命令はAレジスタ40a上のアドレスを使用して、18ビット語をどこからフェッチするかを決定する。勿論、プログラムは正確なアドレスをAレジスタ40aに置くよう規定していなければならないであろう。前述のように、Aレジスタ40aは18ビットのレジスタであり、フェッチが生じうる任意の潜在的な源を区別可能な十分な範囲の利用可能なアドレスデータがある。即ち、ROMに割り当てたアドレス範囲とRAMに割り当てた異なるアドレス範囲とがあり、ポート38の各々と外部I/Oポート39とに対して固有なアドレスがある。FETCH命令は常に、フェッチする18ビットをTレジスタ44上に置く。
対照的に、前述のように、(データとは反対の)実行可能命令は一時的に命令レジスタ30aに格納される。18ビット命令語48を命令レジスタ30aに「フェッチ」する特定の命令はない。代わりに、命令レジスタ30aにもう実行可能命令が残されていないとき、コンピュータは自動的に「次の」命令語48をフェッチする。その「次の」命令語が位置する場所は「プログラムカウンタ」(Pレジスタ40c)により決定される。命令語48の列がRAM24またはROM26からフェッチされる場合のように、Pレジスタ40cはしばしば自動的に増加される。しかしながら、この一般規則にはいくつかの例外がある。例えば、JUMPまたはCALL命令によりPレジスタ40cが、増加されるのではなく、JUMPまたはCALL命令の後に現在ロードされている命令語48の残りにあるデータが指定するアドレスでロードされる。Pレジスタ40cがその後に1つまたは複数のポート38に対応するアドレスでロードされるとき、次の命令語48はポート38から命令レジスタ30aにロードされる。Pレジスタ40cは、命令語48がポート38から命令レジスタ30aにちょうど抽出されたとき、やはり増加しない。むしろ、Pレジスタ40cは、特定のJUMPまたはCALL命令が実行されてPレジスタ40cを変更するまで、同じポートアドレスを保持する。即ち、一度コンピュータ12がポート38からの次の命令を求めるよう指示されると、次の命令語48に対してメモリ(RAM24またはROM26)に戻るといったように、別の場所を見るよう指示されるまで、コンピュータ12は同じポート38(またはポート38)から命令を求め続ける。
上述のように、コンピュータ12は、現在の命令語48に実行可能命令がもう残されていないとき、フェッチした次の18ビットが命令レジスタ30aに置かれることを認識する。デフォルトでは、JUMPまたはCALL命令の後(またはここで詳細に述べない一定の他の命令の後)の現在の命令語48に残存する実行可能命令はもうない。なぜならば、定義により、JUMPまたはCALL命令に続く18ビットの命令語の残りは、JUMPまたはCALL命令により参照されるアドレス専用であるからである。これを別の方法で述べると、上述のプロセスは多くの方法において一意であり、これらに限定されないが、JUMPまたはCALL命令がメモリアドレス等だけに対してではなく、任意にポート38に対して存在できる。
前述のように、コンピュータ12は次の命令をあるポート38から、またはポート38の任意のグループから求めることができることは覚えておくべきである。従って、アドレスは、様々な組合せのポート38に対応するように与えられる。例えば、コンピュータが命令をポート38のグループからフェッチするよう指示されるとき、コンピュータは選択したポート38の任意のものから、第1の利用可能な命令語48を受け入れる。これらのポート38の任意のものに書き込むことを既に試みた近傍コンピュータ12がない場合、問題のコンピュータ12は上で詳述したように、近傍が選択したポート38に書き込むまで、「スリープ状態になる」。
図7は上述の直接実行方法120の例を示すフロー図である。「通常の」動作フローは、前述のように、命令レジスタ30aに実行可能命令がもう残存しないときに開始する。上述の時点で、コンピュータ12は、「語をフェッチ」動作122により示した別の命令語(ここで「フェッチ」という用語は、実際のFETCH命令を使用しない。一般の意味で使用される。)を「フェッチ」する。その動作は、(図7のフロー図における「アドレス」決定動作124で示される)Pレジスタ40c内のアドレスに従って実行される。Pレジスタ40c内のアドレスがRAM24またはROM26のアドレスである場合、次の命令語48は指定メモリ位置から「メモリからフェッチ」動作126で抽出される。他方で、Pレジスタ40c内のアドレスがポート38またはポート(複数)38のアドレス(メモリアドレスではない)である場合、次の命令語48は指定メモリ位置から「ポートからフェッチ」動作128で抽出される。いずれの場合も、抽出される命令語48は「命令語を抽出」命令130で命令レジスタ30cに置かれる。「命令語を実行」動作132において、命令語48のスロット54内の命令は、前述のように逐次に実行される。
「ジャンプ」決定動作134において、命令語48内の動作の1つがJUMP命令であるか否か、または前述のように継続した「通常の」進行から動作を分岐させる他の命令であるか否かが判定される。もしそうならば、JUMP(または他のそのようなもの)命令の後に命令語48内に与えられたアドレスは、「Pレジスタをロード」動作136においてPレジスタ40cに与えられ、図7に示されるように、命令列が「語をフェッチ」動作122で再開される。もしそうでなければ、「ポートアドレス」決定動作138で示されるように、次の動作は、最後の命令フェッチがポート38からかまたはメモリアドレスかによって決まる。最後の命令フェッチがポート38からである場合、Pレジスタ30aは変更されず、命令列は「語をフェッチ」動作122で開始して繰り返される。他方で、最後の命令フェッチがメモリアドレス(RAM24またはROM26)からである場合、図7の「Pレジスタを増加」動作140で示されるように、Pレジスタ30aのアドレスは「語をフェッチ」動作122が実行される前に増加される。
上述の説明は、実際の動作ステップを表すよう意図されていない。むしろ、上の説明は、様々な決定とそこから生じる動作の図であり、その図は本発明の説明した実施形態に従って実行される。実際、このフロー図は、説明および示した各動作が別個の異なる逐次ステップを要求することを意味するとは理解すべきでない。実際、図7のフロー図で説明した動作の多くは、実際には、一般に同時に実行される。
図8は、コンピュータに警告を発する本発明の改善方法の例を示すフロー図である。前述のように、説明した実施形態のコンピュータ12は、入力を待つ間「スリープ状態になる」。上記の入力は、図1から5に関連して説明した実施形態にあるように、近傍のコンピュータ12から来ることができる。あるいは、やはり前述のように、ダイ14の縁に隣接する通信ポート38を有するコンピュータ12は追加の回路を有することができ、この回路は、上記のコンピュータ12内に設計されるか、またはコンピュータ12の外部にあるがそれと関連付けられるかのいずれかであり、上記の通信ポート38を外部I/Oポート39として動作させる。いずれの場合も、本発明の組み合わせは、「スリープしている」コンピュータ12を停止させ、再起動の準備をさせて、入力が受信されるときに何らかの規定動作に移らせることができるというさらなる利点がある。従って、本発明は、上記の入力が外部入力装置から来ようと、またはアレイ10内の別のコンピュータ12から来ようと、入力を処理するための割り込みの使用に対して代替手段も与える。
コンピュータ12に実行中の作業を停止(または一時停止)させて割り込みを処理させる代わりに、本明細書内で説明した本発明の組み合わせにより、コンピュータ12は上述のように「スリープだが警戒」状態にあることができる。従って、1つまたは複数のコンピュータ12を、一定の入力を受信およびその入力に基づいて動作するように、割り当てることができる。この特徴を使用する数多くの方法があり、上述の「コンピュータ警告方法」のちょうど1つを示す例を図8に示し、その中で参照番号150により列挙する。図8の図において分かるように、「警戒状態に入る」動作152において、コンピュータ12は「スリープ状態」になり、コンピュータ12は近傍コンピュータ12、または2つ以上(4つ全部)の近傍コンピュータからの入力、または「縁の」コンピュータ12の場合は外部入力、または外部入力の何らかの組み合わせおよび/または近傍コンピュータ12からの入力を待つ。前述のように、コンピュータ12は「スリープ状態」になり、読出しまたは書込み動作のいずれかの完了を待つことができる。この例において説明したように、コンピュータ12が何らかの可能な「入力」を待機するために使用される場合、その待機コンピュータが自身の読出し線18を高に設定して、近傍または外部源からの「書込み」を待機すると仮定するのが自然であろう。実際、これは有用な条件であること現在期待されている。しかしながら、待機コンピュータ12が自身の書込み線20を高に設定し、従って、近傍または外部源がそこから「読出す」とき、待機コンピュータ12は再起動されることは本発明の範囲内である。
「再起動」動作154において、スリープしているコンピュータ12は、近傍コンピュータ12または外部装置39が待機中のトランザクションを完了したので、動作を再開する。待機されているトランザクションが、実行されるべき命令語48の受け手である場合、コンピュータ12はその中でその命令を実行開始する。待機されているトランザクションがデータの受け手である場合、コンピュータ12は待ち行列内の次の命令を実行開始し、その命令は、現在の命令語48内の次のスロット54における命令であり、または次の命令語48はロードされ、次の命令はその命令語48のスロット0に存在する。いずれの場合も、説明した方法で使用され、次の命令は、ちょうど受信した入力を処理する1つまたは複数の命令列を開始する。上記の入力を処理する選択肢には、予め定義された機能のいくつかを内部的に実行するために反応すること、アレイ10内の1つまたは複数の他のコンピュータ12と通信すること、または(従来の先行技術の割り込みが規定条件下で無視されるように)入力を無視することを含むことができる。その選択肢は、「入力に基づいて実行」動作156として図8の図に示されている。いくつかのインスタンスにおいては、入力の内容は重要でなくともよいことに注意すべきである。例えば、いくつかの場合において、着目している通信を外部装置が試みたということだけが事実だけでもよい。
コンピュータ12が図8に示した方法で「警告」コンピュータとして動作するタスクを割り当てられる場合、コンピュータ12は一般的に図8に示すように「スリープだが警戒」状態に戻る。しかしながら、監視されている特定の入力または入力(複数)を監視する必要がこれ以上ないとき、またはそのタスクをアレイ内のいくつかのコンピュータ12に送信することがより便利なときのように、コンピュータ12に何らかの他のタスクを割り当てる選択肢が常に可能である。
当技術分野の技術者は、この上述の動作モードは、割り込みの従来の使用例に対するより効率的な代替手段として有用であることを理解するであろう。コンピュータ12が、高に設定された1つまたは複数の読出し線18(または書込み線20)を有するとき、「警戒」状態と呼ぶことができる。警戒状態において、コンピュータ12は、高に設定した読出し線または読出し線(複数)18に対応するデータバス16上でコンピュータ12に送信された任意の命令を即座に実行する準備ができているか、あるいはデータバス16上で送信されるデータに基づいて動作する準備ができている。利用可能なコンピュータ12のアレイがある場合、1つまたは複数のコンピュータ12を上述の警戒条件にあるように任意の所与の時点で使用して、任意の規定の入力のセットがコンピュータ12を動作させるようトリガすることができる。これは、従来の割り込み技術を使用してコンピュータの「注意を引く」ために望ましい。なぜならば、割り込みによりコンピュータは、割り込み要求に応答して、一定のデータを格納する、一定のデータをロードする等をしなければならないからである。対照的に、本発明によると、コンピュータを警戒状態に置くことができ、着目している入力を待機するというタスクをコンピュータに割り当てることができ、その結果、その入力により与えられた命令の実行開始において命令周期を無駄にすることがない。この場合も、今説明した実施形態において、警戒状態にあるコンピュータは実際に「スリープだが警戒」であり、これは、そのコンピュータは本質的に電力を使用しないという意味で「スリープ」だが、入力により即座に動作にトリガされるという点で「警戒」であるという意味であることに注意する。しかしながら、コンピュータが「スリープ」でない場合でも「警戒」状態をコンピュータに埋め込むことができることは本発明の範囲内である。説明した警戒状態は、従来の先行技術の割り込み(ハードウェア割り込みまたはソフトウェア割り込み)を別の方法で使用してきた本質的に任意の状況で、使用することができる。
本発明はこの例に制限されないが、現在のコンピュータ12はネイティブなフォース言語の命令を実行するよう実装されている。フォースコンピュータ言語に詳しい者は理解するであろうが、フォース“語”として知られる複雑なフォース命令は、コンピュータに設計されたネイティブプロセッサ命令から構築される。フォース語の集合は「ディクショナリ」として知られる。他の言語では、これは「ライブラリ」として知られるかもしれない。以下でさらに詳細に説明するように、コンピュータ12は18ビットを一度にRAM24、ROM26から、またはデータバス16(図2)の1つから直接、読み出す。フォースにおいて、(オペランド不要命令として知られる)大部分の命令はそのオペランドをスタック28および34から直接取得するので、それらの命令は一般的に5ビットのみの長さであり、4つまでの命令を、そのグループ内の最後の命令が3ビットのみを必要とする制限付き命令のセットから選択されるという条件で、単一の18ビットの命令語に含むことができる。スロットシーケンサ42を、図3においてブロック図の形式で示す。本発明のこの実施形態において、データスタック34内の最上部にある2つのレジスタは、Tレジスタ44およびSレジスタ46である。
その方法はフォースレットの使用を含む。フォースレットは、正確な表現ではないが、アプレットとフォースを組み合わせて作った用語である。フォースは1970年代初期に開発されたコンピュータプログラミング言語である。フォースレットはコードのラッパであり、従ってコードをデータとして扱うことができる。または、フォースレットはラッパにつつまれた機械実行コードの文字列であると定義できるであろう。ラッパは、ヘッダおよびテイルから構成されるか、またはヘッダ単体で構成されることができる。
フォースレットは、スケーラブルエンベデッドアレイスタイルの並列プロセッサの並列プログラミングを支援する部分およびツールである。フォースレットは、ファイルのプロパティのいくつかを有する。そのプロパティには、名前、型、アドレス、長さ、および後述の様々なさらに任意な型領域を含む。フォースレットは、ツールまたはコンパイラによってソースコードまたはテンプレートから構築されるものに対するラッパである。フォースレットはコードおよびデータに対するラッパであり、他のフォースレットをラップすることもできる。フォースレットは、プログラムおよびデータを配布するメカニズム、構築補助のメカニズムおよびプログラムのデバッグのメカニズムである。
これらのハードウェア機能は、単純で高速なリモートプロシージャコールおよびミューテックスを与える。ミューテックスは、スレッド間の相互排他を調整するプログラムオブジェクトに対する共通な名前であり、この理由でミューテックスはしばしばロックと呼ばれる。スケーラブルエンベデッドアレイプロセッサを単純な並列プログラムに適したものにするスケーラブルエンベデッドアレイの特性の1つは、それらがハードウェアチャネルにより接続されるということである。そのハードウェアチャネルは、ペンディングメッセージ交換が完了するまでプロセッサを超低電力スリープ状態に設定することでプロセッサとプロセスを同期させる。
本発明が上述の環境で使用するソフトウェアの1つの特性は、そのソフトウェアが従来のフォーススタイルの協調マルチタスカーを古典的な方法で使用し、ローカルメモリ空間内のプログラムの実行とその実行チャネルにストリーム化されたプログラムの実行との間で各プロセッサをマルチタスクすることである。これは、ハードウェア内のマルチポートアドレス選択ロジックと組み合わせて、並列ハードウェアおよびソフトウェアの単純な組み合わせを与え、マルチタスキングのプログラミングから真の並列マルチプロセッシングのプログラミングへの移行を簡単にする。
2番目の特性は、これらの同期通信チャネルはプロセッサのアドレス空間内の同じ場所に存在し、ポインタを使用したデータ読出しおよび書込みに使用することができ、あるいいはプロセッサのプログラムカウンタに分岐またはプログラムカウンタから呼出および読出されることで実行することができるということである。
3番目の特性は、複数の通信チャネルを、これらの通信ポートのアドレス範囲にあるアドレス内の個々のビットが個々のチャネルを選択するとき、プロセッサによる読出しまたは書込み用に選択できるということである。
ブートフォースレットは、アプリケーション全体のラッパである。これは、従来のx86プロセッサにより代表される従来のコンピュータの動作とは異なる。従来のマイクロプロセッサにおいて、命令は、最初にC++やC#などの高レベルコンピュータ言語で記述され、ソースコードと呼ばれる。ソースコードはその後、オブジェクトコードとも呼ばれる機械語に変換される。この変換プロセスはコンパイルと称され、このプロセスを遂行するプログラムまたは機械はコンパイラと呼ばれる。オブジェクトコードはその後プロセッサにより実行される。対照的に、フォースレットは直接実行可能である。しかしながら、本発明は直接実行可能なフォースレットに限定されない。なぜならば、同一のプロセスおよび関数は、フォースレットの全てのプロセスを実行する機械語に高レベルコマンドをコンパイルすることで、実行することができるからである。
ブートフォースレットは、最も基本的なタイプのフォースレットで、分岐を持たずに実行可能である。次に最も複雑なタイプのフォースレットであるストリーム実行可能フォースレットは、呼出しを含み、その呼出しはアドレスをリターンスタック28上に置く。呼出しが生成されると、PC内のアドレスがリターンスタックにプッシュされる。メモリにおいて、PCは予め増加され、その結果PCは常に呼出しに続くメモリ内の次の逐次命令を指す。従ってリターン命令がスタック上のアドレスに戻るとき、リターン命令は呼出しに続くオペコードに戻る。以下は、機械フォースで書かれた低レベルフォースレットの例である。このフォースレットは、単純な1語ポート実行可能フォースレットである。
例1
target
Forthlet port−forthlet
!p+!p+@p+@p+
Fend
この最初の行は環境をセットアップし、2番目の行はプログラムの名前をport−forthletと宣言する。3番目の行は、最上部の2つのスタック項目をこのプログラムが実行しているポートに送信し、そのポートから2つのスタック項目を読み戻す。フォースレットはその後ポート上でスリープ状態に戻り、誰かが次のフォースレットをこのポートに書き込むのを待機する。最後の行はフォースレットをラップし、それをサーバ上に置き、その結果port−forthletという名前がそのパケットのアドレスを返す。
呼出しがポートから生成されるとき、PC内のアドレスはそのポートである。ポートアドレスは自動で増加されず、むしろ何らかの他のプロセッサがポートを書き換えるのを待機し、アドレスは増加せず、ポートアドレスは同一のポートアドレスを再度読み、ポートが書き込まれるまでスリープする。従って、ポート内で実行しているコードが異なるポートを呼び出すか、あるいはRAMまたはROMを呼び出す場合、呼出しを生成するポートのリターンアドレスは、呼び出しが生成されるときにリターンスタック上に置かれる。リターン命令が生じるとき、リターン命令は呼出しポートに返る。なぜならば、それがPCに戻るアドレスであるからである。
フォースレットの第3のタイプはメモリ実行可能フォースレットである。メモリ実行可能フォースレットは、ラッパとしてブートフォースレットまたはストリーム実行可能フォースレットのいずれかを使用する。メモリ実行可能フォースレットは例えば、メモリノード0アドレス0(rev7ノード0、rev9$200)を占有する。メモリ実行可能フォースレットはメモリ内の所与のアドレスで実行する。メモリ実行可能フォースレットは、任意のノード上のアドレス0または1または$Dまたは$34で実行してもよい。また、ノード0またはノード1またはノード2上で実行してもよい。
第4のタイプのフォースレットはノード実行可能フォースレットである。ノード実行可能フォースレットも、ラッパとしてブートフォースレットまたはストリーム実行可能フォースレットのいずれかを使用する。ノード実行可能フォースレットは任意のノードから実行する。ノード実行可能フォースレットは、メモリの場所を見る。
5番目のタイプのフォースレット、可変実行可能アドレスフォースレットも、ラッパとしてブートフォースレットまたはストリーム実行可能フォースレットのいずれかを使用する。可変実行可能アドレスフォースレットは、可変ノードから動作する。
例2は、直接ポートストリームオペコード実行を含むフォースレットを示す。
例2
target
$14 org:dosample \getbitはRAM内のルーチン
\前もって定義されてない場合、
\語にgetbitの意味を与える
forthlet call−from−stream
{$12345}#dosample
fend
この例は「call−from−stream」と呼ばれるフォースレットをコンパイルする。この例はリテラルロードで開始し、このリテラルロードは、実行されるときリテラル$12345をTにロードして「dosample」と呼ばれるサブルーチンを呼び出す。リテラルロード命令、サンプル、RAM内のサブルーチンに対する呼び出しはフォースレットにラップされ、ノードに書き込まれる場合、フォースレットにロードを実行させ、RAM内のルーチンに対する呼出しを実行させる。そのルーチンが返るとき、フォースレットは、さらなるコードを呼び出したポートに返る。
直接ポートストリームオペコード実行は、5ビットの命令へのアクセスを与える。この5ビットの命令は、フォース言語の大部分の原始的な動作を表し、コンパイラによってプログラムにインラインされる。これらのフォースレットはプロセッサの通信チャネルにストリームされ、1語1語実行される。これらのフォースレットは全く、分岐を持たず、アドレスまたはノードに固有でない。これらのフォースレットは句を形成し、その句は他のフォースレットをデータとしてメッセージにつなぎ合わせる。プログラムカウンタは、ポートを選択するアドレスに留まり、4つまでのc18オペコードを含む語の実行後にプログラムカウンタは増加されない。ストリーム化したコード語の実行完了後、プロセッサは、次のストリーム化した命令語が到着するまでスリープ状態になる。ほとんどの場合、このタイプのフォースレットはリターン命令で終了する。このリターン命令は、ポートを呼び出すルーチン、おそらくPAUSEマルチタスカーに対して実行を返す。
例3は、RAM/ROM内のコードに対する呼出しを有するコードストリームのポート実行を含むフォースレットを示す。
例3
target
forthlet ram−based−spi−driver
5 node! \これがノード5に対してのみであることを指定
0 org \これはノード5のアドレス0に存在
:spi−code

ordinary−code
fend
この例は「ram−based−spi−driver」という名前のフォースレットを詳細に説明している。このフォースレットは、このフォースレットがノード5に対して一意なピンを要求し、使用中はノード5に存在しなければならないというコードを有する。このフォースレットはさらに、その内部で定義した語により指定される特定アドレスに束縛される。語「spi−code」は呼出しをアドレス0に対してコンパイルする。このフォースレットが実行されるとき、コードはノード5上のアドレス0にロードされ、そこで実行される。
ストリーム化されたフォースレットは、ROMまたはRAM内のルーチンに対する呼出しを含むことができる。呼出されるべきルーチンのアドレスは、コンパイラによりそれらの名前から生成される。RAM内のルーチンは、それらが呼ばれる前にロードされなければならない。RAMまたはROM内のルーチンがポートから呼ばれる場合、大概、命令ストリームを運ぶプロセッサは、実行用の次のストリーム化された語をポートに提供し、プロセッサがRAMまたはROM内の呼ばれたルーチンを実行する間、スリープ状態になる。メッセージのルーティングはポート実行可能ストリームの送信を含み、そのストリームはプロセッサを再起動してそれらにROM内の自身のルーティング語を呼ばせる。順にこれらの語は、より多くの命令ストリームを読出し、ストリームをその目的地に向かって次のプロセッサ上にルーティングする。
例4はram実行フォースレットの開始を示す。
例4
target
forthlet0 runs−on−ram−server
ordinary−code、other−forthlet−execution等
fend
このフォースレットは、ノード上でアドレス0で実行するよう設計され、「runs−on−ram−server」フォースレットのアドレスを「X0」コマンド呼出しに渡すことで、ノード0にロードし、ノード0で実行することができる。そこからロードするためにパッケージ化され、そこから外部RAMをRAMサーバで使用するためにパッケージ化されたアプリケーションは、そのコマンドによりフォースレット0タイプのフォースレットとしてパッケージ化される。アプリケーションは他のフォーマットで配置することもできる。そのフォーマットには例えば、フォーマットがRAMサーバで使用されるフォーマットと異なるときにSPIまたは非同期シリアルインタフェースからロードするよう要求されるものがある。このタイプのフォースレットは、RAMの底部に位置するプログラムである。ramの底部に何らかのアドレスまでロードされた後、フォースレットは実行される。ram実行フォースレットはRAM内で実行するため、ram実行フォースレットは分岐命令を有すること、およびRAM、ROMまたは通信ポート内のアドレスにジャンプすること、そのアドレスを呼出すこと、またはそのアドレスに返ることができる。これらのフォースレットはDOSにおける.com実行可能ファイルと類似している。これらのフォースレットはメモリの最初で開始し、長さを有する。これらのフォースレットはロードされて実行される。これらのフォースレットは、ロードされた後に再度呼出すことができる。
例5は、他のRAMアドレス、コードまたはデータオーバレイでロード、またはロードかつ実行される、ロードされたフォースレットを示す。
例5
target
0 node!
forthlet ram−based−anynode
0 org
:do−something

ordinary−code
fend
この例は、アドレス0で実行されるが、フォースレットラッパの内部でどの特定ノードにも束縛されないコードを詳細に説明する。このフォースレットは任意のノード上のアドレス0で実行できる。
これらのロードされたフォースレットは、コードおよびデータオーバレイ向けである。コードまたはデータはノード上の任意のアドレスにロードすることができる。同一コードをいくつかのノード上のアドレス範囲にロードすることができ、そのアドレスがRAMの開始点であった場合、これらのロードされたフォースレットは図8のものと同様なram実行フォースレットであることができる。コードまたはデータがRAMの開始点以外のアドレスにロードされるとき、そのコードまたはデータは、メモリの開始点にあるコードまたはデータとともにしばしば使用することができる。プログラム内のいくつかの頻繁に使用されるサブルーチンを高メモリにロードし、低メモリ内のオーバレイされた異なるコードルーチンがそれを呼ぶことができる。簡単に、コードを低メモリにロードしてそこに残し、高メモリにロードされたコードオーバレイによって繰り返し呼出すことができる。同一コードがいくつかのノード上の同一アドレスに置かれるが、グループ内の各ノードが、コードがデータ操作用にセットアップしたアドレスにある一意なデータのオーバレイを取得する場合に、この例の1つを使用できる。
例6は特定ノードに束縛されたフォースレットを示す。
例6
target
forthlet0 runs−on−ram−server
ordinary−code other−forthlet−execution等
fend
このフォースレットは、ノード0上でアドレス0で実行するよう設計され、「runs−on−ram−server」フォースレットのアドレスを「X0」コマンド呼出しに渡すことで、ノード0にロードし、ノード0で実行することができる。そこからロードするためにパッケージ化され、そこから外部RAMをRAMサーバで使用するためにパッケージ化されたアプリケーションは、そのコマンドによりフォースレット0タイプのフォースレットとしてパッケージ化される。
例7はIO回路の特定フォースレットを示す。
例7
target
0 node!
forthlet2p ram−based−sync−serial−driver
0 org
:sync−code
ordinary−code
fend
この例は、フォースレットが実行するノードは少なくとも2つのピンを有するという要件に束縛されるフォースレットを生成する。これはIOノードに特有である。0または1つのピンを有するノードはこのフォースレットを実行できない。なぜならば、このフォースレットはビット17で読み出されるピンと、IOCSレジスタのビット1で読み出されるピンとを読み書きする必要があるからである。
これらのフォースレットは、一定のノードに一意なIO回路を読出し、または書込みするコードを含む。SPI接続、A/D、D/A、またはリセット回路などの物理回路はソフトウェアドライバを有し、このソフトウェアドライバは、これらのフォースレットを実行するハードウェア特性にマッチするノードに対して適切であるのみである。
X0フォースレットはノード0上で実行し、上記のネイティブフォースレットはRAMサーバのノード0で実行する。これらのフォースレットは、外部メモリから直接ロードされ、外部メモリからプログラムを読み出すCPUによって実行されるという意味で、大部分のシステムにおける通常のプログラムのように機能する。プロセッサの中にはメモリから一度に1語を読出して実行するものがあり、外部メモリのブロックを実行前にローカルキャッシュメモリに読み込むものがある。キャッシュしたメモリのローカルアドレスを外部メモリアドレスに透過的にマップせず、プロセッサは外部メモリをキャッシュからのみ実行するようなハードウェアにおいて、これらのフォースレットは有用である。このフォースレットは、RAMまたはROM内に既にあるプログラムを実行することで明確にコードを外部メモリからローカルメモリにロードし、その後、既にロードされたコードに分岐する。任意のノードはRAMサーバのノード0にメッセージを送信することができ、そのノード0にネイティブフォースレットのアドレスを与え、RAMサーバ上のローカルRAMの開始点でロードおよび実行する。任意のプロセッサは単純にアドレスを自身のスタックに置いてX0関数を呼出し、X0メッセージはRAMサーババッファノードを介してRAMサーバに送信され、フォースレットをRAMサーバのアドレスで実行する。その後に生じるのは、サーバ上で実行されるネイティブフォースレットの内容次第である。
最も基本的なデータ送信フォースレットはfsendである。ネイティブフォースレットをRAMサーバ上でロードおよび実行するプロセスは、ROMのBIOS内のルーチン、またはRAM内のルーチンを呼出すことを含む。そのルーチンは、外部メモリから読出し、X0フォースレットをそのローカルRAMにロードして実行するのに使用される。RAMサーバ上で実行するフォースレットは、他のフォースレットを外部メモリからロードするが、それらをパイプに送信する。ポート実行可能なフォースレット句はメモリ実行可能なフォースレットと結合されて、やはりフォースレットでありうるデータをある位置から別の位置に送信する。SPIまたはI2Cなどの何らかのプロトコル経由で、またはワイヤレスソフトウェアリンクを介してチップ上またはチップ外でデータ送信するドライバは、チップ上またはチップ外のデータ送信を処理し、データ送信フォースレットはチップ上のノード間でのデータ移動を処理する。コンパイラはアプリケーションを構成して、RAMサーバ経由、またはシリアルフラッシュに接続したSPIポートから、またはシリアルリンクをプロセッサに送信するPC開発システムから、外部メモリ外で実行させることができる。広範囲な外部RAM、ROM、またはフラッシュ装置に接続したRAMサーバとしてノード0を使用することを保証するのに十分な外部メモリが必要なアプリケーションは、コンパイラによりRAMサーバ上のフォースレットにパッケージされているアプリケーションに依存する。上述のフォースレットタイプを使用して、アプリケーションは協調し、コードオーバレイをロードし、データを互いおよびRAMサーバと交換する。イベントにより周辺プロセッサノードを起動することができ、周辺プロセッサノードは、起動された他のノードと協調してデータを処理することができる。
例9は、特定ノードに束縛されない再配置可能フォースレットを示す。
例9
target
0 node!
0 org
forthletr ram−based−relocatable−word
:mycode
if...then...
mycode―;
begin...until...
ordinary−code
fend
この例は、ノードに束縛されないが、アドレス依存の内部分岐を有するフォースレットを有する。特定アドレスにロードされるとき、分岐の分岐領域は、特定のアドレスで実行させるためにルーチンを再配置するよう設定される。
これらのフォースレットはメモリから実行され、分岐命令を含むことができる。しかし、異なる実行アドレスに必要に応じて再配置されるノード上にロードされるとき、これらのフォースレットにメッセージを送信することができる。これらはDLLと同様なメカニズムを与え、呼出し可能な関数群の何らかの組合せを異なるように実行時に配置し、なおコンパイラフォースレットを安全に呼び出すことができる。コンパイラは、異なる原始的フォースレットのタイプを組合せてフォースレットの構築を支援し、より複雑な機能性を与えることができる。フォースレット句のストリーミングは他の既にコンパイルしたフォースレットとコンパイラにより組合せられ、より複雑なフォースレットのタイプを安全に構築する。コンパイラとプログラマは、フォースレットの特性を、より洗練されたオブジェクト操作を可能とするフォースレットに割り当てることができる。これらはまたプログラマに、数学的に証明可能な特性を有するフォースレットのオブジェクトを生成し、安全なプログラム構築を支援するツールを提供する。
送信フォースレットは、コンパイラによりプログラマに対して構築される。送信フォースレットは、ある位置から別の位置へ特定の経路を使用して別のフォースレットを送信させるフォースレットのタイプである。プログラマは送信タイプのフォースレットを例10に示すようなコマンドFSENDを使用して構築する。
例10
dataforthlet myroute fsend myforthlet
この句は「myforthlet」という名前の新しい送信タイプのフォースレットを生成し、「myforthlet」は実行時に「dataforthlet」を、経路記述子「myroute」が記述する経路に沿って送信する。コンパイラにより経路記述子を、経路を記述し、経路を描くことによって、または開始および終了ノードを指定することによって、一連のステップとして構築することができる。
図13は実行フォースレットを示す。実行フォースレットは、コンパイラによりプログラマに対して構築される。実行フォースレットは、ある位置から別の位置へ特定の経路を使用してRAM実行フォースレットを送信させ、RAM実行フォースレットをRAMの開始点から実行させるフォースレットのタイプである。プログラマは実行タイプのフォースレットを例11に示すようにコマンドFRUNを使用して構築する。
例11
app2 route1−21 frun run−app2
この句は「run−app2」という名前の新しい実行タイプのフォースレットを生成し、「run−app2」は実行時に「app2」を、経路記述子「route1−21」が記述する経路に沿って送信する。
いくつかのフォースレットは送信フォースレットと同様である。取得フォースレットは、逆の意味で送信フォースレットと類似している。取得フォースレットは、それが開けたパイプ内のフォースレットを送信するのではなく、経路を開け、フォースレットを引き出す。ブロードキャストフォースレットはコンパイラにより構築され、1つのフォースレットを複数の位置に送信する。収集および集積フォースレットはコンパイラにより構築され、データを複数の位置から単一の位置に収集または集積する。分配フォースレットはコンパイラにより構築され、収集したデータの一部を1つの位置から複数の位置へ分配する。
上述の単純なフォースレットに加え、いくつかの中間レベルのフォースレットオブジェクトがある。中間レベルのフォースレットオブジェクトは、プログラマおよびコンパイラが設定し、より高レベルのフォースレットが使用するオブジェクト特性を有し、このオブジェクト特性はプログラマを支援する。
例12はテンプレートフォースレットを示す。
例12
target
0 node!
0 org
forthletr clipper \データストリームを符号なしfmax#にクリップ
ioport# la \未設定の入出力ポートアドレスを特定
fmax# \未設定のクリッピング用最大値を特定
:clip
・・・ \様々な方法でコーディング
@b Cntmsg# and \未設定の制御メッセージ用ポートを特定
・・・
clip―;
fend
この例は、再配置可能フォースレットとしてのデータクリッパの定義を示す。「ioport#」および「fmax#」および「Cntmsg#」という名前を使用することで、このフォースレットがフォースレット内部に相対アドレスを有する3つの領域を有し、テンプレートがインスタンス化されるときその領域はインスタンス変数を含むことが指定される。再配置可能フォースレット内で3つの名前を使用することで、このフォースレットのコピーを作成できること、フォースレットのコピーをメモリ内の適合する任意のノードおよびアドレスに再配置できること、および既知の特性を有するインスタンス化すべき3つの領域をフォースレットのコピーが有することを、コンパイラに伝える。コンパイラは、再配置可能フォースレットの構築時にこれらのキーワードを認識し、2つの近傍アドレスの組み合わせを[ioport#]領域が含むことを理解する。その2つの近傍アドレスの組み合わせから、2つのデータサンプルがこのフォースレットにより読み書きされる。その領域の内容は、このプログラムのインスタンスがアレイ内の位置に置かれて現実のプログラム内のデータサンプルを処理するとき、2つのポートの組合せアドレスを適切な近傍に対して設定する。
コンパイラは、到着する制御メッセージに対してチェックされるポートのアドレスを[Cntmsg#]領域が指定すること、およびこのクリッパによりストリームに渡される最大値である値を[fmax#]領域が含むことも理解する。コンパイラは、このフォースレットが3つのポートを要求するという特性をこのフォースレットがさらに有することを判定し、従ってこのフォースレットを2つのポートしか有さない隅のノードに置くことはできない。ソフトウェアは、従ってテンプレート化されたプログラムをアレイに置き、アレイの各ノードを通るメッセージおよび制御パスが正しくてフローデッドロックが存在しないことを数学的に証明できるようにする。
テンプレートフォースレットはある特性を有する実行可能フォースレットのタイプであり、その特性はテンプレート種類に関連付けられ、テンプレートフォースレットがそのテンプレート種類である。これらのオブジェクト特性領域は、フォースレットの汎用関数は何か、およびそのフォースレットが安全に操作できる特性は何かをコンパイラとプログラマに伝える。FIRフィルタ要素テンプレートが例となるであろう。多段FIRフィルタを、各ノードがフィルタ関数の一部を実行するノードの作業グループ上で構築することができる。全体のフィルタ関数は、カスケード化されたフィルタ要素の各段階上で特定の設定により判定される。各フィルタ要素内のコードはタップフィードバックに対する遅延、各タップでフィードバックされるデータを乗ずる定数、およびデータが次のフィルタ段階において読み込まれ、次のフィルタ段階に書込まれるポートを除いて同じである。テンプレートフォースレットはこのコードから構成され、このコードは、操作可能なパラメータの場所とそれらのパラメータが何を表すかの仕様を有する。
コンパイラによって安全に関数にマップされる予め定義した関数テンプレートを使用することで、多くの問題を解決することができる。これらの特性を、プログラマに対してグラフィカルに表すこともでき、可視化により設計を支援し、設計の正確性を確認することができる。より高レベルなフォースレットは、これらのテンプレートフォースレット特性の領域を使用して、モジュールが近傍モジュールとマッチする部分で構築され、デッドロックを許すようにモジュールが接続する場合のコード構築を防止することを保証する。
高レベルフォースレットはフォースレットウィザードとも呼ばれ、要望どおりに高レベルであることができる。高レベルフォースレットはコンパイラの一部であり、プログラマがコードを設計、構築、検証することを支援する。高レベルフォースレットはフォースレットのオブジェクト特性を使用して、プログラマ用のオブジェクトを構築する。フォースレットライブラリ内にいくつかのフォースレットウィザードがあり、交互にフォースレットウィザードが使用して新しいフォースレットウィザードの構築を支援できる付属文書がある。
FIRフィルタテンプレートフォースレットの前例において、フィルタビルダウィザードフォースレットは、フィルタの高レベル記述を受け入れることができ、各ノードが並列分散多段階FIRフィルタをノードグループ上で生成するために必要な、遅延、タップ、定数、およびポートの向きを決定する計算を実行することができる。フィルタビルダウィザードフォースレットは、FIRフィルタフォースレットを各ノードに対してインスタンス化し、ソフトウェアをロードおよび開始するのに必要なフォースレットラッパをノードの作業グループ全体に追加することができる。
上述のウィザードは、アナログコンポーネントオブジェクト、R/Fコンポーネントオブジェクトの構築において支援することができる。R/Fコンポーネントは、トランスミッタ、レシーバ、フィルタ、プロトコルトランスレータ、またはライブラリに追加される任意のものを含むことができる。
診断フォースレットはプロセッサのポート上で実行し、そのプロセッサの状態の完全なビュー、またはその状態に関する任意の特定情報を、PC上の開発システムなどのいくつかの他の位置に対して、または無線リンク上で遠隔地に対しても、返すことができる。
フォースレットインタプリタは、それがフォースレットアドレスの一覧からフォースレットを実行するという点で、従来のフォースシステムと非常に類似する。その一覧は外部メモリに存在し、1つのアドレスが1度にその一覧から読出される。このアドレスはその後、X0を有するRAMサーバ上で実行される。内部の詳細は、従来のスレッド化したフォースシステムに非常に類似する。分岐は、フォースレットインタプリタポインタ等のram実行をリセットする。このように動作するフォースレットインタプリタは、従来のプロセッサのようにあたかも非常に大きなアドレス空間から動作する非常に大きなプログラムを書かせる。フォース語の大きさは、我々のローカルノードの1つの上にあるメモリサイズに制限されないが、外部メモリのサイズにより制限される。フォースレットインタプリタの使用により、我々は、コンパイル時に生じるとして前述した多くのことを実行時に行うことができる。フォースレットの構築および配布に関してコンパイラができる高性能な点は、実行時に任意に行うことができることである。動的フィルタビルダタイプのプログラムが例となるであろう。動的フィルタビルダタイプのプログラムは、実行時に組込みチップ上で実行し、それにより分散プロセッサ上でロードおよび実行されるフォースレットコードを圧縮できる方法を利用する。ランタイムフォースレットインタプリタオブジェクトとして含まれるテンプレートおよびインスタンス化プログラムは、各時点でフィルタ要素が複製されるインスタンス化ノードの完全なセットよりも、小さい場合もある。
動的フォースレットディスパッチャは高レベルフォースレットである。動的ランタイム負荷調整が、実行可能なフォースレットおよびフォースレットの作業グループを動的にディスパッチするフォースレットを使用して、いくつかのアプリケーションに対して達成される。この動的なディスパッチは、その時点で利用可能なノード数、あるいは物理またはR/Fリンクを使用してネットワーク化されたチップの数に基づく。
高レベルフォースレットは、可視化ツールおよびプロファイラとして動作することもできる。高レベルフォースレットはコンパイルされたフォースレットのオブジェクト特性を検査し、アプリケーションの配布、利用、および効率性の有用な可視化を提供することができる。可視化ツールおよびプロファイラは、従来のフォースコマンドインタプリタとして振舞う完全に対話的な環境を含むことができる。従来のフォースコマンドインタプリタは、プロセッサおよびコードとライブベースで対話する能力を有する全てのコア上で実行する。このことはフォースに関する従来の強みであり、アプリケーションを素早くデバッグするのに必要な煩わしく目障りなインサーキットエミュレーションハードウェアの必要がなくなる。
本発明のコンピュータアレイ10およびコンピュータ12の特定の例を本明細書内で説明してきたが、まだ想定していない非常に多くのアプリケーションがこれらに対して存在するであろう。実際、本発明の方法および装置を非常に様々な用途に対して適用可能であることが、本発明の利点の一つである。
上記の全ては、本発明の利用可能な実施形態の例のいくつかでしかない。当技術分野の技術者は、本発明の精神および範囲から逸脱することなく多数の他の修正および変更が可能であることに容易に気づくであろう。従って、本開示は制限事項として意図しておらず、付属請求項が本発明の範囲全体を網羅するとして理解されるべきである。
構成要素のリスト
10 コンピュータアレイ
12 コンピュータ
12a メモリ制御コンピュータ
14 ダイ
16 データ線
18 フラッシュメモリ
20 RAM
22 シリアルデータ線
24 並列データバス
26aから26p 入出力回路
28 プロセッサ
30 ROM
32 コンピュータRAM
34 計算コア
36 コンピュータアレイの方法
38 相互接続されたコンピュータを提供する
40 コンピュータをタスクに対して構成する
42 タスクをコンピュータに割り当てる
44 コンピュータを初期化する
本発明のコンピュータアレイの線図である。 図1のコンピュータのサブセットを示す詳細図であり、図1の相互接続データバスのより詳細な図である。 図1および図2のコンピュータの1つの一般的な配置を示すブロック図である。 命令語48の図表示である。 図3のスロットシーケンサ42の略図である。 本発明のマイクロループの例を示すフロー図である。 ポートからの命令を実行する本発明の方法の例を示すフロー図である。 コンピュータに警告を発する本発明の改善した方法の例を示すフロー図である。 コンピュータ12fおよび12gの動作を示す図である。
符号の説明
24 ランダムアクセスメモリ(RAM)
26 読み取り専用メモリ(ROM)
38a 上ポート
38c 左ポート
38b 右ポート
38d 下ポート
28 リターンスタック
30 命令
32 演算論理装置
34 データ
72 肯定応答線

Claims (27)

  1. 複数のコンピュータ、
    前記コンピュータを接続する複数のデータパス、および
    プログラムとデータとを、前記複数コンピュータの1つと前記複数コンピュータの別の1つとの間で分配するメカニズム
    を備えることを特徴とするコンピュータアレイシステム。
  2. 前記メカニズムは、ラッパをさらに備え、該ラッパは、前記ラッパが前記複数コンピュータの前記1つに遭遇するとき取るべき動作を、少なくとも1つの前記複数コンピュータに指示すること
    を特徴とする請求項1に記載のコンピュータアレイシステム。
  3. 前記ラッパは、前記少なくとも数個のコンピュータの前記1つに指示して、前記ラッパに続くデータをロードさせること
    を特徴とする請求項2に記載のコンピュータアレイシステム。
  4. 前記ラッパは、前記少なくとも数個のコンピュータの前記1つに指示して、前記ラッパに続く命令をロードさせること
    を特徴とする請求項2に記載のコンピュータアレイシステム。
  5. 前記ラッパは、前記少なくとも数個のコンピュータの前記1つに指示して、別の前記コンピュータにキャリアを送信させること
    を特徴とする請求項2に記載のコンピュータアレイシステム。
  6. 前記ラッパはポートで直接実行可能であることを特徴とする請求項2に記載のコンピュータアレイシステム。
  7. 前記ラッパはポートで直接実行可能であることを特徴とする請求項2に記載のコンピュータアレイシステム。
  8. 前記ラッパは呼出しを含み、前記呼出しはアドレスをリターンスタック上のアドレスに置き、その後に戻ること
    を特徴とする請求項2に記載のコンピュータアレイシステム。
  9. 前記ラッパは、前記ラッパの長さを示すカウンタをさらに備えることを特徴とする請求項2に記載のコンピュータアレイ。
  10. 前記コンピュータは5行5列のアレイに物理的に配置されることを特徴とする請求項1に記載のコンピュータアレイ。
  11. 少なくとも数個のコンピュータは4行6列のアレイに物理的に配置されることを特徴とする請求項1に記載のコンピュータアレイ。
  12. アレイの各側面に沿ったコンピュータの数は偶数であることを特徴とする請求項1に記載のコンピュータアレイ。
  13. 少なくとも1つの前記コンピュータは、外部メモリ源と直接通信することを特徴とする請求項1に記載のコンピュータアレイ。
  14. 少なくとも1つの前記コンピュータは、データを前記外部メモリ源から少なくとも数個の前記複数コンピュータに通信すること
    を特徴とする請求項1に記載のコンピュータアレイ。
  15. コンピュータ化されたジョブを実行する方法であって、
    複数コンピュータを提供すること、および
    異なるタスクを少なくとも数個の前記コンピュータに割り当てること
    を備えることを特徴とする前記方法。
  16. 少なくとも1つの前記コンピュータが割り当てられ、フラッシュメモリと通信することを特徴とする請求項15に記載の方法。
  17. 少なくとも1つの前記コンピュータが割り当てられ、ランダムアクセスメモリと通信することを特徴とする請求項15に記載の方法。
  18. 少なくとも1つの前記コンピュータが割り当てられ、入出力機能を遂行することを特徴とする請求項15に記載の方法。
  19. 前記コンピュータの1つは、割り当てを前記コンピュータの残りにルーティングすることを特徴とする請求項15に記載の方法。
  20. 複数のコンピュータ、および
    前記コンピュータ間の複数のデータ接続
    を備えるコンピュータアレイであって、
    少なくとも数個の前記コンピュータは異なる機能を実行するようプログラムされること
    を特徴とするコンピュータアレイ。
  21. 前記の異なる機能は、共同で動作してタスクを遂行することを特徴とする請求項20に記載のコンピュータアレイ。
  22. 前記機能の各々は、前記コンピュータアレイが初期化されるとき、前記各々のコンピュータにプログラムされることを特徴とする請求項20に記載のコンピュータアレイ。
  23. 前記コンピュータ間の通信は非同期であることを特徴とする請求項20に記載のコンピュータアレイ。
  24. 複数コンピュータを使用してタスクを遂行する方法であって、
    タスクを動作コンポーネントに分割して、前記動作コンポーネントの各々を前記コンピュータの1つに割り当てること、
    少なくとも数個の前記コンピュータをプログラムして、前記動作コンポーネントの各々を遂行すること
    を備えることを特徴とする前記方法。
  25. 前記動作コンポーネントは、全地球測位システムレシーバを遂行するために使用される動作群であること
    を特徴とする請求項24に記載のタスク遂行方法。
  26. 前記タスクが開始される前に、前記コンピュータをプログラムして、前記動作コンポーネントの各々を遂行すること
    を特徴とする請求項24に記載のタスク遂行方法。
  27. 前記コンピュータは、コンピュータアレイに配置されることを特徴とする請求項24に記載のタスク遂行方法。
JP2007086857A 2006-03-31 2007-03-29 コンピュータプロセッサアレイの操作方法および装置 Pending JP2007272895A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US78826506P 2006-03-31 2006-03-31

Publications (2)

Publication Number Publication Date
JP2007272895A true JP2007272895A (ja) 2007-10-18
JP2007272895A5 JP2007272895A5 (ja) 2010-05-13

Family

ID=38283039

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007086857A Pending JP2007272895A (ja) 2006-03-31 2007-03-29 コンピュータプロセッサアレイの操作方法および装置

Country Status (7)

Country Link
US (1) US20070250682A1 (ja)
EP (1) EP1840742A3 (ja)
JP (1) JP2007272895A (ja)
KR (1) KR20070098760A (ja)
CN (1) CN101051301A (ja)
TW (1) TW200817925A (ja)
WO (1) WO2007117414A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018022524A (ja) * 2013-05-17 2018-02-08 コーヒレント・ロジックス・インコーポレーテッド マルチプロセッサ組込みシステム上でのアプリケーションの動的再構成

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080126472A1 (en) * 2006-08-28 2008-05-29 Tableau, Llc Computer communication
US20080052525A1 (en) * 2006-08-28 2008-02-28 Tableau, Llc Password recovery
US20080052490A1 (en) * 2006-08-28 2008-02-28 Tableau, Llc Computational resource array
WO2008064882A2 (en) * 2006-11-28 2008-06-05 Nokia Corporation Robust remote reset for networks
US20080282062A1 (en) * 2007-05-07 2008-11-13 Montvelishsky Michael B Method and apparatus for loading data and instructions into a computer
GB2454996B (en) * 2008-01-23 2011-12-07 Ibm Method for balanced handling of initiative in a non-uniform multiprocessor computing system
US20090254886A1 (en) * 2008-04-03 2009-10-08 Elliot Gibson D Virtual debug port in single-chip computer system
TWI384374B (zh) * 2008-05-27 2013-02-01 Nat Univ Tsing Hua 具資料串流功能之多核心遠端程序呼叫方法
US20100023730A1 (en) * 2008-07-24 2010-01-28 Vns Portfolio Llc Circular Register Arrays of a Computer
US20100158076A1 (en) * 2008-12-19 2010-06-24 Vns Portfolio Llc Direct Sequence Spread Spectrum Correlation Method for a Multiprocessor Array
US8185898B2 (en) 2009-10-01 2012-05-22 National Tsing Hua University Method of streaming remote procedure invocation for multi-core systems
KR101738641B1 (ko) 2010-12-17 2017-05-23 삼성전자주식회사 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법
US9588881B2 (en) 2011-05-16 2017-03-07 Cypress Semiconductor Corporation Stack processor using a ferroelectric random access memory (F-RAM) for code space and a portion of the stack memory space having an instruction set optimized to minimize processor stack accesses
US9910823B2 (en) * 2011-05-16 2018-03-06 Cypress Semiconductor Corporation Stack processor using a ferroelectric random access memory (F-RAM) having an instruction set optimized to minimize memory fetch
RU2530285C1 (ru) * 2013-08-09 2014-10-10 Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования "Саратовский Государственный Университет Имени Н.Г. Чернышевского" Активный аппаратный стек процессора
TWI594131B (zh) * 2016-03-24 2017-08-01 Chunghwa Telecom Co Ltd Cloud batch scheduling system and batch management server computer program products
GB2580165B (en) 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
CN112559440B (zh) * 2020-12-30 2022-11-25 海光信息技术股份有限公司 多小芯片系统中实现串行业务性能优化的方法及装置

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4215401A (en) * 1978-09-28 1980-07-29 Environmental Research Institute Of Michigan Cellular digital array processor
US4739474A (en) * 1983-03-10 1988-04-19 Martin Marietta Corporation Geometric-arithmetic parallel processor
DE3533800C1 (de) * 1985-09-21 1987-02-05 Hans-Werner Lang Verfahren zum Betreiben eines hochintegrierten Wellenfront-Feldrechners sowie entsprechender Wellenfront-Feldrechner
US5021947A (en) * 1986-03-31 1991-06-04 Hughes Aircraft Company Data-flow multiprocessor architecture with three dimensional multistage interconnection network for efficient signal and data processing
US5222237A (en) * 1988-02-02 1993-06-22 Thinking Machines Corporation Apparatus for aligning the operation of a plurality of processors
US5257395A (en) * 1988-05-13 1993-10-26 International Business Machines Corporation Methods and circuit for implementing and arbitrary graph on a polymorphic mesh
CA2019299C (en) * 1989-06-22 2002-01-15 Steven Frank Multiprocessor system with multiple instruction sources
US5440749A (en) * 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
DE4019040A1 (de) 1990-06-14 1991-12-19 Philips Patentverwaltung Multirechnersystem
US5765015A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Slide network for an array processor
JPH0713945A (ja) * 1993-06-16 1995-01-17 Nippon Sheet Glass Co Ltd 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造
US5832291A (en) * 1995-12-15 1998-11-03 Raytheon Company Data processor with dynamic and selectable interconnections between processor array, external memory and I/O ports
EP0840223B1 (en) * 1996-10-31 2002-05-15 STMicroelectronics Limited Microcomputer capable of accessing an external memory
US6895452B1 (en) * 1997-06-04 2005-05-17 Marger Johnson & Mccollom, P.C. Tightly coupled and scalable memory and execution unit architecture
US6292822B1 (en) * 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
SE514785C2 (sv) 1999-01-18 2001-04-23 Axis Ab Processor och metod för att exekvera instruktioner från flera instruktionskällor
US6966002B1 (en) * 1999-04-30 2005-11-15 Trymedia Systems, Inc. Methods and apparatus for secure distribution of software
US6691219B2 (en) * 2000-08-07 2004-02-10 Dallas Semiconductor Corporation Method and apparatus for 24-bit memory addressing in microcontrollers
US20060248360A1 (en) * 2001-05-18 2006-11-02 Fung Henry T Multi-server and multi-CPU power management system and method
US20030005168A1 (en) * 2001-06-29 2003-01-02 Leerssen Scott Alan System and method for auditing system call events with system call wrappers
US7069372B1 (en) * 2001-07-30 2006-06-27 Cisco Technology, Inc. Processor having systolic array pipeline for processing data packets
US7249357B2 (en) * 2001-08-20 2007-07-24 Silicon Graphics, Inc. Transparent distribution and execution of data in a multiprocessor environment
US6959372B1 (en) * 2002-02-19 2005-10-25 Cogent Chipware Inc. Processor cluster architecture and associated parallel processing methods
US7415594B2 (en) * 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US7237045B2 (en) * 2002-06-28 2007-06-26 Brocade Communications Systems, Inc. Apparatus and method for storage processing through scalable port processors
US7657861B2 (en) * 2002-08-07 2010-02-02 Pact Xpp Technologies Ag Method and device for processing data
JP3987784B2 (ja) * 2002-10-30 2007-10-10 Necエレクトロニクス株式会社 アレイ型プロセッサ
US7353501B2 (en) * 2002-11-18 2008-04-01 Microsoft Corporation Generic wrapper scheme
US7673118B2 (en) * 2003-02-12 2010-03-02 Swarztrauber Paul N System and method for vector-parallel multiprocessor communication
US7581081B2 (en) * 2003-03-31 2009-08-25 Stretch, Inc. Systems and methods for software extensible multi-processing
US7937557B2 (en) 2004-03-16 2011-05-03 Vns Portfolio Llc System and method for intercommunication between computers in an array
US7269805B1 (en) * 2004-04-30 2007-09-11 Xilinx, Inc. Testing of an integrated circuit having an embedded processor
US7484041B2 (en) * 2005-04-04 2009-01-27 Kabushiki Kaisha Toshiba Systems and methods for loading data into the cache of one processor to improve performance of another processor in a multiprocessor system
US20080282062A1 (en) * 2007-05-07 2008-11-13 Montvelishsky Michael B Method and apparatus for loading data and instructions into a computer

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018022524A (ja) * 2013-05-17 2018-02-08 コーヒレント・ロジックス・インコーポレーテッド マルチプロセッサ組込みシステム上でのアプリケーションの動的再構成

Also Published As

Publication number Publication date
KR20070098760A (ko) 2007-10-05
EP1840742A3 (en) 2008-11-26
TW200817925A (en) 2008-04-16
US20070250682A1 (en) 2007-10-25
CN101051301A (zh) 2007-10-10
EP1840742A2 (en) 2007-10-03
WO2007117414A3 (en) 2008-11-20
WO2007117414A2 (en) 2007-10-18

Similar Documents

Publication Publication Date Title
JP2007272895A (ja) コンピュータプロセッサアレイの操作方法および装置
US5752071A (en) Function coprocessor
Caspi et al. A streaming multi-threaded model
US8533433B2 (en) Microprocessor for executing byte compiled java code
US8667252B2 (en) Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation
US20060026578A1 (en) Programmable processor architecture hirarchical compilation
EP0330836A2 (en) Method for multiprocessor system having self-allocating processors
JP2019079529A (ja) マルチタイル処理アレイにおける同期化
JP2009064411A (ja) データおよび命令をコンピュータにロードするための方法および装置
Sakai et al. Super-threading: Architectural and software mechanisms for optimizing parallel computation
KR20040086462A (ko) 컴퓨터 명령들의 멀티프로세싱 실행을 위한 방법들 및 장치
JP2009009550A (ja) データの通信
Forsell et al. An extended PRAM-NUMA model of computation for TCF programming
US6327648B1 (en) Multiprocessor system for digital signal processing
CN116670644A (zh) 通用计算核上的交错处理的方法
JP2009009549A (ja) 一連のコンピュータでデータを処理するシステムおよび方法
CN111656337B (zh) 用于执行指令的系统和方法
JP2006215592A (ja) 再構成可能な、命令レベルのハードウェアによる高速化のためにマイクロプロセッサとともにfpgaテクノロジを使用する方法および装置
JP7495030B2 (ja) プロセッサ、処理方法、および関連デバイス
Chandy et al. Hardware parallelism vs. software parallelism
Jesshope SVP and µTC-A dynamic model of concurrency and its implementation as a compiler target
Maximo et al. Unleashing the power of the playstation 3 to boost graphics programming
Berkovich et al. XMT-M: A scalable decentralized processor
Wan et al. Core-Based Parallelism
KR100279744B1 (ko) 동기화 전용 레지스터 파일을 갖는 단일칩 다중처리 마이크로프로세서

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20081104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20081104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100329

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100329

A072 Dismissal of procedure [no reply to invitation to correct request for examination]

Free format text: JAPANESE INTERMEDIATE CODE: A073

Effective date: 20110805