Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP5382736B2 - トークンプロトコル - Google Patents
[go: Go Back, main page]

JP5382736B2 - トークンプロトコル - Google Patents

トークンプロトコル Download PDF

Info

Publication number
JP5382736B2
JP5382736B2 JP2010515439A JP2010515439A JP5382736B2 JP 5382736 B2 JP5382736 B2 JP 5382736B2 JP 2010515439 A JP2010515439 A JP 2010515439A JP 2010515439 A JP2010515439 A JP 2010515439A JP 5382736 B2 JP5382736 B2 JP 5382736B2
Authority
JP
Japan
Prior art keywords
token
logic
link
line
transmitting
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.)
Active
Application number
JP2010515439A
Other languages
English (en)
Other versions
JP2010532540A (ja
Inventor
デービット メイ,マイケル
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.)
Xmos Ltd
Original Assignee
Xmos 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
Priority claimed from US11/774,224 external-priority patent/US20090013331A1/en
Application filed by Xmos Ltd filed Critical Xmos Ltd
Publication of JP2010532540A publication Critical patent/JP2010532540A/ja
Application granted granted Critical
Publication of JP5382736B2 publication Critical patent/JP5382736B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • G06F13/4291Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using a clocked protocol
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Communication Control (AREA)
  • Small-Scale Networks (AREA)
  • Maintenance And Management Of Digital Transmission (AREA)

Description

本発明は、プロセッサ間を結ぶリンク上にトークンを送信することに関する。
プロセッサ間、特に、同じ回路基板やチップ上などに配列、すなわち多数配置されたプロセッサアレイにメッセージを送るスイッチやリンクを含む回路を有するインターコネクトシステム上でやり取りされる大量の通信をどう扱うかは、プロセッサ設計者にとって1つの課題である。
具体的には、こうした通信ではインターコネクトで電力が相当に消耗することがまず問題である。通信での電力消費を低減することが望まれる。
次いで、制御情報の通信に問題がある。インターコネクトで送られるメッセージは通常、バイト単位のデータの集合である。ただし、インターコネクトそのものを制御するための制御情報を送信する機構も必要である。この制御情報はたとえば、スイッチまたはスイッチまたはリンクのいずれかに対する制御レジスタへの読取りまたは書取り要求などにより設定されるチャネルを閉じるための「メッセージ終了」信号である。ところが、データ送信機構とうまく両立する制御機構を見つけることは問題を含んでいる。
この問題を「メッセージ終了」の例を取って説明すると、回路設計者は通常、メッセージ終了を指示し、その後スイッチ類により2つの通信プロセッサ間のチャネルを閉じるように、1メッセージ内の255バイトを制御値に割り当てる。ところが、ソフトウェア開発者がその実数値255を、チャネル閉鎖要求として誤解されることなく宛先ソフトウェアに送信させたい場合、従来、必要に応じてそのインターコネクトをこのようにトリガさせないためには、複雑なエスケープシーケンスを適宜、その転送機構内に構築しなければならなかった。
さらに、種々のアプリケーションの特定ニーズ全般に有用となる、融通性を高めた制御機構の提供も必要である。
そこで、本発明は、プロセッサ間の通信による電力消費の低減を目的とする。実施形態の一部では、この低減した電力消費を、制御情報送信機構の改良型に効率よく組み合わせることをさらなる目的とする。
本発明の一態様によると、プロセッサ間を結ぶリンクであって、ライン1およびライン0を含み、ライン1上の論理遷移が論理1を示し、ライン0上の論理遷移が論理0を示すリンク上にトークンを送信する方法が得られ、この方法は、トークンの第1の部分を送信することと、トークンの第2の部分を送信して、確実にそのトークンの論理1のビット総数を偶数、かつそのトークン内の論理0のビット総数を偶数とし、これにより、そのトークンの送信後に、そのリンクが静止状態に戻ることとを含む。
各トークンが常に、偶数個1と偶数個の0を含むため、ライン1およびライン0はそれぞれ、常に偶数の論理遷移を行う。すなわち、遷移の立ち上がりがあれば、必ず遷移の立ち下がりがある。リンクが、トークンの送信を終えるごとに確実に低電力状態に戻るということである。
一部の実施形態において、この方法はさらに、データトークンを送信するか、制御トークンを送信するかを判断することを含み、前記第1の部分は、データトークンが送信された場合のデータの運搬に用いられ、また制御トークンが送信された場合には制御情報の搬送に用いられる情報部分と、前記トークンがデータトークンであるか制御トークンであるかを示す第1の追加ビットとを含む。
前記リンクを、同一基板またはチップ内のプロセッサ間に設けることができる。
前記第1の部分は、偶数の情報ビットおよび前記第1の追加ビットを含む奇数個のビットを有し、前記第2の部分は第2の追加ビットである。前記情報部分を8ビットとすることができる。
この方法はさらに、前記第1の部分が論理1である偶数個のビットを含み、かつ論理0である奇数個のビットを含んでいるか、前記第1の部分が論理1である奇数個のビットを含み、かつ論理0である偶数個のビットを含んでいるかを判断することを含み、もし第1の部分が偶数個の論理1および奇数個の論理0を含んでいれば、第2の部分は論理0のビットであり、もし第1の部分が奇数個の論理1および偶数個の論理0を含んでいれば、第2の部分は論理1のビットである。
この方法はさらに、第1の部分についてビット毎のXOR演算を実行して、第2の部分を算出することを含んでもよい。
第1の部分が9ビットを有する実施形態では、前記プロトコルが特に有効である。というのは、情報部分を、そのトークンが制御トークンかデータトークンかを示す1つの追加ビットを含む便利な1バイト(8ビット)と、そのリンクを静止状態に戻す1つの追加ビットとで構成できるからである。この第2の追加ビットの算出には、ビット毎のXOR演算が特に有効である。
また、バイト単位ではないがさらに長いトークンを使うことにより、複雑なエスケープシーケンスを回避することができる上、データ転送機構に影響を及ぼすことなく、さまざまな制御トークン全般が利用可能となる。
トークン内の送信順序は、第1の追加ビット、情報部分、第2の追加ビットとすることができる。
前記第1の部分を、前記プロセッサのうちの1つで実行されるソフトウェアで生成し、また前記第2の部分を、リンク内ハードウェアにより生成することができる。第1の部分を、前記プロセッサの1つで実行される命令のオペランドとすることができる。
前記トークンを、アーキテクチャで定義される制御トークンとすることができ、本方法はさらに、この制御トークンを使用して前記リンクを含む回路を有するインターコネクト内で論理をトリガして、そのインターコネクトの構成要素をコントロールすることを含むことができる。本方法はさらに、ソフトウェアの機能を遂行するため、宛先プロセッサで実行されるソフトウェアを用いた、アーキテクチャで定義される制御トークンの受信を含むことができる。前記アーキテクチャで定義される制御トークンを、その宛先プロセッサで実行される特権ソフトウェアにのみアクセス可能な特権制御トークンとすることができる。
前記トークンを、ソフトウェアに定義される制御トークンとすることができる。
前記トークンを、宛先プロセッサを指定する1つまたは複数のヘッダトークンを含むメッセージで送信することができる。
前記トークンを、1アレイ内の2つ以上のプロセッサ間をつなぐ、スイッチおよびリンクのシステムを含む回路を有するインターコネクト上に送信することができる。
本発明の他の態様によれば、複数のプロセッサと、ライン1およびラインを含んで前記プロセッサ間を結ぶリンクとを含み、前記ライン1上の論理遷移が論理1を示し、前記ライン0上の論理遷移が論理0を示すデバイスが提供される。このデバイスでは、前記プロセッサの少なくとも第1のプロセッサは、トークンの第1の部分を送信し、そのトークンの第2の部分を送信して、確実にそのトークン内における論理1のビット総数を偶数とし、かつそのトークンの論理0のビット総数を偶数とし、これにより、そのトークンの末尾で、そのリンクを静止状態に戻すように構成されている。
本発明の他の態様によれば、プロセッサ間を結ぶリンクであって、ライン1およびラインを含むリンク上にトークンを送信するコンピュータプログラムであって、ライン1での論理遷移が論理1を示し、およびライン0での論理遷移が論理0を示すプログラムが得られる。このプログラムは、トークンの第1の部分を送信するステップと、トークンの第2の部分を送信して、確実にそのトークンの論理1のビット総数を偶数、かつそのトークン内の論理0のビット総数を偶数とし、これにより、確実にそのトークンの末尾で、そのリンクを静止状態に戻すステップとをプロセッサに実行させる
本発明の他の態様によれば、複数の処理手段と、前記処理手段間をリンクするリンク手段とを含むデバイスが得られる。このリンク手段は、論理遷移により論理1を示す論理1送信手段と、論理遷移により論理0を示す論理0送信手段とを含み、前記処理手段の少なくとも第1の処理手段が、トークンの第1の部分を送信する送信手段を含み、その送信手段はさらに、同じトークンの第2の部分を送信して、確実にそのトークンの論理1のビット総数を偶数、かつそのトークン内の論理0のビット総数を偶数とし、これにより、そのトークンの末尾で、そのリンクを静止状態に戻す。
本発明の他の態様によれば、プロセッサ間のリンクを介して1または複数のトークンを送信する方法であって、前記リンクは少なくとも3本のラインを含み、前記ラインは、複数のコードのうちの各コードを伝送するために用いられ、前記複数のコードのうちの各コードは、前記ラインのうちの1つのラインに対応する論理遷移によって伝送されるか、または、前記ラインのうちの複数のラインに対応する論理遷移の組み合わせによって伝送される。この方法は、前複数のコードから選択された一連のコードを前記ライン上に伝送することにより、1つまたは複数のトークンの各々を伝送することと、各ライン上の論理遷移の総数を調整することにより、前記1または複数のトークンおよび追加コードの伝送後、前記1または複数の追加コードを前記ライン上に伝送することとを含む。
リンクに5本のラインを設けてもよい。このうち4本のライン上それぞれにある論理遷移は各値を符号化し、残りの5本目のライン上にある論理遷移はエスケープコードを伝送する。前記方法はさらに、前記5本目のラインにエスケープコードを伝送せず、前記4本のライン上に伝送された一連のコードを伝送することにより、データトークンを伝送することと、前記5本目のラインを使って前記エスケープコードを伝送することを含め、前記コードから選択された一連のコードを伝送することにより、制御トークンを伝送することを含むことができる。
前記1または複数の追加コードを伝送することが、前記ラインそれぞれにある論理遷移の総数を確実に偶数にするように、前記追加コードの少なくとも1つを伝送することを含んでもよい。
前記方法はさらに、前記リンクの空き容量を示すため、前記リンクが生成するクレジットトークンを伝送することを含む。このクレジットトークンは、1対または複数対の前記コードを含み、各対の前記コードは同一コードであるため、前記ラインそれぞれにある遷移総数が偶数または0となり、前記クレジットトークンの伝送後も、前記リンクの状態に何ら影響が及ばないものである。
本発明の他の態様によれば、複数のプロセッサと、3本のラインを含んでそのプロセッサ間を結ぶリンクとを含むデバイスが得られる。前記リンクは少なくとも3本のラインを含み、前記ラインは、複数のコードのうちの各コードを伝送するために用いられ、前記複数のコードのうちの各コードは、前記ラインのうちの1つのラインに対応する論理遷移によって伝送されるか、または、前記ラインのうちの複数のラインに対応する論理遷移の組み合わせによって伝送される。このデバイスにおいて、前記プロセッサの少なくとも第1のプロセッサが、前複数のコードから選択された一連のコードを前記ライン上に伝送することにより、1つまたは複数のトークンの各々を伝送し、各ライン上の論理遷移の総数を調整することにより、前記1または複数のトークンおよび追加コードを伝送後、前記リンクを確実に静止状態に戻すために、前記ライン上にある1または複数の追加コードを伝送するように構成されている。
本発明の他の態様によれば、プロセッサ間を結ぶリンク上に1または複数のトークンを送信するコンピュータプログラムであって、前記リンクが少なくとも3本のラインを含み、前記ラインは、複数のコードのうちの各コードを伝送するために用いられ、前記複数のコードのうちの各コードは、前記ラインのうちの1つのラインに対応する論理遷移によって伝送されるか、または、前記ラインのうちの複数のラインに対応する論理遷移の組み合わせによって伝送されるプログラムが得られる。このプログラムは、前複数のコードから選択された一連のコードを前記ライン上に伝送することにより、1つまたは複数のトークンの各々を伝送するステップと、各ライン上の論理遷移の総数を調整することにより、前記1または複数のトークンおよび追加コードを伝送後、前記リンクを確実に静止状態に戻すために、前記ライン上にある1または複数の追加コードを伝送するステップとをプロセッサに実行させる。
インターフェースプロセッサの適用例を例示している。 インターフェースプロセッサの別の適用例を例示している。 インターフェースプロセッサのアーキテクチャを示す概略図である。 ポートを示す概略図である。 スレッドレジスタのセットを示す概略図である。 スレッドレジスタのセット間のインターコネクトを示す概略図である。 チャネル端を示す概略図である。 プロセッサ間のインターコネクトを示す概略図である。 トークンのフォーマットを示す。 読取り要求メッセージのフォーマットを示す。 成功した読取り応答メッセージのフォーマットを示す。 失敗した読取り応答メッセージのフォーマットを示す。
図1は、インターフェースプロセッサを携帯電話で使用した適用例である。このモバイル用アプリケーションプロセッサ2は、複数の周辺機器8と通信して機能を果たすものである。アプリケーションプロセッサ2は、バス3、CPU4、ハードドライブ(HDD)8aとインターフェースするメモリコントローラ6a、およびSDRAMメモリ8bを含み、さらに、パワーコントローラ10および無線プロセッサ12を含む。
図1の配置では、CPU4が汎用ポート7を介して外部と通信することができる。この例では、汎用ポート7aおよび7bが、カメラ類8cおよびLCDディスプレイ類8dとインターフェースし、汎用ポート7cがマイクロホン8e、スピーカ8fおよびヘッドセット8gとインターフェースし、汎用ポート7dがキーボード8h、汎用シリアルバス(USB)デバイス8i、セキュアデジタル(SD)カード8j、マルチメディアカード(MMC)8k、および汎用非同期送受信回路(UART)デバイス8lとインターフェースするように設けられている。
図1において、インターフェースプロセッサ14a、14bおよび14cは、関連ポート7の出口に配置されている。このとき、第1のインターフェースプロセッサ14aは画像装置8c〜8dと汎用ポート7a〜7bとの間に接続され、第2のインターフェースプロセッサ14bはオーディオ装置8e〜8g間に接続され、第3のインターフェースプロセッサ14bは汎用ポート7dとさまざまな接続性デバイス8h〜8mとの間に接続されている。アプリケーション専用表示、オーディオ、および接続性機能は、後述するようにインターフェースプロセッサ14a−14cが実行するため、ポート7は汎用ポートであればよい。また、FPGAから得られるはずの柔軟性および構成容易性はインターフェースプロセッサ14で得られるため、ポート7でFPGA論理を用いる必要はない。インターフェースプロセッサ14aには、ポート7aおよび7bに接続されたポート22aおよび22bと、外部デバイス8cおよび8gに接続されたポート22c、22d、22eおよび22fが設けられている。インターフェースプロセッサ14bおよび14cも、図1に示していないが、同様のポートを有する。
インターフェースプロセッサは通常、インターフェースを介したデータの転送に用いる特定のプロトコルの実施、パラレルフォーマットとシリアルフォーマットとの間のデータ変換などのデータの書式変更、そして、そのデータのコード化、圧縮、暗号化などの高次機能にまで関わるものである。
インターフェースプロセッサ14のもう1つの適用例として、図2に例示するプロセッサアレイ200の一部として用いることが挙げられる。このアレイ200は、複数のプロセッサタイル202を含み、各タイルが、アレイ内のノードを画定し、かつ1つまたは複数のプロセッサ14およびインターコネクト204を含んでいる。タイル202は、アレイ200内のタイル202間通信を支援する高性能接続部219を介し、ポート22を使って一部のプロセッサ14に接続され、アレイ200外側の他のデバイスと通信できるようになっている。このアレイは、1枚のチップ上で実装されていても、複数枚のチップを組み合わせて実装されていてもよい。
このインターフェースプロセッサは、内部通信、外部通信を問わず、通信を管理できることが大きな特徴である。これについては以下でさらに詳述する。各インターフェースプロセッサは、CPU、メモリ、および通信機能を有する。このCPUとポート類との間を直接かつ応答可能に接続するため、各プロセッサは、複数の同時実行プログラムスレッドを実施するハードウェア支援を備えている。このプログラムスレッドはそれぞれ、一連の命令を含み、命令の少なくとも一部を通信処理にあたるものとすることができる。以下でさらに詳しく説明するが、このハードウェア支援の例として次のものが挙げられる。
(1)スレッド1つに対するレジスタのセット
(2)実行すべきスレッドを動的に選択するスレッドスケジューラ
(3)入出力用ポートのセット(ポート22)
(4)スレッド間にチャネルを形成するインターコネクトシステム
各プロセッサにスレッドの小セットが設けられているため、これを使って、そのプロセッサが処理している他の保留中のタスクと同時に通信や入出力を進行させることができる。また、スレッドによって継続したり、遠隔インターフェースプロセッサとの双方向通信を待ちながら中断させたりして、インターコネクトにおける遅延を隠蔽することができる。
図3は、本発明の一実施形態によるインターフェースプロセッサ14の代表的アーキテクチャを概略的に示す。プロセッサ14は、スレッドスケジューラ18の制御下で複数の命令スレッドを実行する実行ユニット16を含む。プロセッサ14はさらに、プログラムコードおよびその他のデータを保持するランダムアクセスメモリ(RAM)24と、ブートコードなどの永続的な情報を格納するリードオンリーメモリ(ROM)(図示せず)とを含む。
スレッドスケジューラ18は、実行部16が実行すべきスレッドを動的に選択する。従来、スレッドスケジューラの機能は、プロセッサを完全な占有状態に保つよう、プログラムメモリからスレッドを選択してスケジューリングしておくだけであった。しかし、本発明によれば、スレッドスケジューラ18によるスケジューリングは、ポート22におけるアクティビティにも及ぶ。この観点から、ポートにおける入出力アクティビティによりスレッドを実行できるようになった時点での遅れを最小限に抑えるため、スレッドスケジューラをポート22に直接結合させてもよいことに留意されたい。
スレッドスケジューラ18により対象となっているmスレッドはそれぞれ、スレッドスケジューラ18がアクセスするレジスタ20のバンク内スレッドレジスタ20、…、20の各セットで表される。複数の命令バッファ(INSTR)19も、メモリ24からフェッチされた命令が、実行部16に向けて送出される前に一時的に保持するよう設けられている。チャネルを介してレジスタセット20の間におけるデータ通信を行うことができる。このレジスタおよびチャネルについては後で詳述する。
スレッドスケジューラ18は、mスレッドの中から実行可能なスレッドの1セットを維持し(以下、これを「実行セット」とする)、そこから順番に、好ましくはラウンドロビン方式で、命令を取り出す。あるスレッドが継続不可となったら、そのスレッドを実行組から除去して中断する。継続不可となる理由として、そのスレッドが次のいずれか1つまたは複数のタイプのアクティビティを待っている、などが挙げられる。
(1)実行可能となる前に、そのレジスタが初期化される
(2)用意の出来ていない、または利用可能なデータのないポートまたはチャネルから入力を試みた
(3)用意の出来ていない、またはデータを受け入れる余地のないポートまたはチャネルに出力を試みた
(4)命令を実行し、これにより、ポートまたはチャネルが入力の用意ができると生成され得る1つまたは複数のイベントを待っている
本明細書でいう用語「イベント」は、特定の動作をいい、基本的な入出力動作とは多少異なることに留意されたい。その区別については、図4および図5と合わせて以下で説明する。
好ましくは、応答時間を短縮するため、スレッドスケジューラ18と実行部16との間には直接的な配線接続部28が設けられており、これにより、スレッドスケジューラ18は、どのスレッド(単数または複数)を実行部16にフェッチおよび実行させるか制御するように構成できる。さらに、直接的な配線経路30a、30b、30cが、スレッドスケジューラ18とポート22のそれぞれとの間に、また直接的な配線経路29、…29が、スレッドスケジューラ18とレジスタ20それぞれとの間に設けられている。こうした直接的経路が制御路となって、スレッドスケジューラが各スレッドを1または複数のポート22に関連付けられることが好ましい。特に、特定のアクティビティが発生した時点でポートから用意できている指示を返送させ、これにより、プロセッサがポート22で発生したアクティビティまたは刺激に迅速に反応できることが好ましい。ポートに対するスレッドスケジューラの動作は、図4〜図6について以下で説明する。
実行部16はさらに、ポート22a〜22cのそれぞれ、およびレジスタ20〜20のそれぞれに直接的接続部27および31を介してアクセスできるため、中枢プロセッサとレジスタと外部環境との間を直接的にリンクできる。好ましくは、こうした直接的経路を制御路として、実行部がポートに条件をパスできるようにする。これについては、以下で図4を参照しながらさらに詳しく説明する。直接路27および31によりさらに、スレッドレジスタ20とポート22との間でデータの直接入出力をできるようにして、スレッドの外部環境との直接通信を可能としてもよい。例えば、データをメモリ2に書込んでからそのデータをフェッチするのではなく、データを外部装置から直接スレッドのオペランドレジスタの1つに書き込んでもよい。逆に言えば、書込み動作の後、オペランドレジスタからのデータを実行部16が取り出し、これをポート22に直接送信してもよい。これにより、反応時間が大幅に短縮される。
「直接的接続部」「直接経路」とは、実行部とプログラムメモリ24との間の接続とは別の接続部であることに留意されたい。したがって、例えば、データをメモリ24に格納してそこからフェッチしなくても、スレッドスケジューラ18および実行部16は、ポート22から入力されたデータにアクセスできる。特に、実行部16とメモリ24との間の接続部がバス13を介している場合、「直接的」な接続部または経路は、そのバスとは別のものを言う。したがって、バスを仲介させなくとも、ポート22、レジスタ20,スレッドスケジューラ18、および実行部16の間で種々の通信をすべて発生させることができ、反応時間の短縮となる。ポート22にさらに、バス13による追加接続部(図示せず)を設けてもよい。
図4は、本発明の好適な一実施形態によるポート22を概略的に示す。ポート22は、プロセッサ14との間でデータを入出力させるI/Oバッファ32を含む。また、ポート22はそれぞれ、そのポートで発生するアクティビティを監視し、アクティビティの発生を少なくとも1つのレディビットすなわちフラグ37により伝送するアクティビティ処理論理36を含む。状態フラグ37は、直接路30からスレッドスケジューラに伝送されることが好ましい。ポートが検知するアクティビティの例として以下が挙げられる。
(1)データがポートに入力された
(2)特定のデータがポートに入力された、および/または
(3)ポートが出力に利用できる状態になった
上述のアクティビティを検知しやすくするために、ポート22にはレジスタのセット38が設けられている。このレジスタには、関連スレッドの識別子を格納するスレッド識別子(TID)レジスタ、1または複数の条件を格納する制御(CTRL)レジスタ、実行が中断されたプログラム内の位置を格納する継続点ベクトル(VECTOR)レジスタ、および1つの条件に関連するあらゆるデータを格納するデータ(DATA)レジスタが含まれる。TID値が直接路30(図3の30a、30b、30c)を介してスレッドスケジューラ18によりレジスタ38に書き込まれると、VECTOR値、CTRL値、およびデータ値が実行部16により直接路31を介して書き込まれる。所望のアクティビティが検知されると、TIDは、関連スレッドの識別のため、スレッドスケジューラ18に返送される。このアクティビティ論理にはイネーブルフラグ39も含まれるが、これについては以下で詳述する。
図4では、レジスタ38はポート22内に収まっているが、プロセッサ14内であってポートに続いていれば実際にはどこにあってもよいことに留意されたい。
図5は、スレッドの表示に用いられるスレッドレジスタ20の代表的バンクを示す。バンク20は、スレッドスケジューラ18により目下の対象となっているスレッドT〜Tそれぞれに対応するレジスタの複数セットを含む。この好適な例では、各スレッドの状態が、2個の制御レジスタ、4個のアクセスレジスタ、および12個のオペランドレジスタ、合計18個のレジスタによって表示されている。その内訳は以下の通りである。
(1)制御レジスタ:
・PCは、プログラムカウンタ
・SRは、ステータスレジスタ
(2)アクセスレジスタ:
・GPは、グローバルプールポインタ
・DPは、データポインタ
・SPは、スタックポインタ
・LRは、リンクレジスタ
(3)オペランドレジスタ:
・OP1…OP12
制御レジスタは、スレッドの状態についての情報を格納するものであり、スレッド実行の制御に用いられる。具体的には、イベントまたは中断に反応するスレッドの性能が、スレッドステータスレジスタSRが保持する情報により制御されている。アクセスレジスタは、プロシージャの局所変数に用いるスタックポインタと、プロシージャ間で共有されるデータに通常用いられるデータポインタと、大きな定数およびプロシージャエントリポイントへのアクセスに用いられるコンスタントプールポインタとを含む。オペランドレジスタOP1…OP12は、命令により用いられ、算術演算および論理演算を行い、データ構造にアクセスし、サブルーチンを呼び出す。図6および図7に関連して説明するように、このプロセッサはさらに、異なるセット20のオペランドレジスタ間にチャネルを形成するインターコネクトシステム40を含む。
いくつかの命令バッファ(INSTR)19も設けられており、スレッドの実際の命令を一時的に格納する。各命令が好ましくは16ビット長として、命令バッファの長さがそれぞれ64ビットで、4つの命令に対応できると好ましい。命令は、スレッドスケジューラ18の制御下でプログラムメモリ24からフェッチされた後、一時的に命令バッファ19内に置かれる。
実行部はレジスタ20およびバッファ19のそれぞれにアクセスできる。さらに、スレッドスケジューラ18が、スレッドごとに少なくともステータスレジスタSRにアクセスできる。
上述したように、本明細書で言う「イベント」とは、特定種類の動作、またはその動作に相当するアクティビティをいう。イベントベースの動作は、基本的な入出力動作とは多少異なり、次のように作用する。イベントはまず、実行部16からの継続点ベクトルおよびスレッドスケジューラ18からのスレッド識別子が、好ましくは直接路31および30を介して、ポート22に付随するVECTORおよびTIDレジスタ38に転送されることにより、スレッドごとにセットされる。関連する条件および条件データをさらに、そのポート22のCTRLおよびデータレジスタ38に書き込んでもよい。したがって、このイベントはポートにセットされるが、必ずしもイネーブルにされなくてもよい。ポートをイネーブルにしてイベントの指示を生成させるには、ポートのイネーブルフラグ39も、好ましくは直接路30を介してスレッドスケジューラ18により、アサートしなくてはならない。さらに、そのスレッド自体をイネーブルしてイベントを許可させるため、そのスレッド用ステータスレジスタSR内にある、そのスレッドのイベントイネーブル(EE)フラグを、イベントイネーブルに設定しなくてはならない。このようにイベントをセットおよびイネーブルしたら、そのスレッドは、スレッドスケジューラ18に働きかけるイベントベースの待機命令を使って、イベントを待ちながらの保留状態でいることができる。この時点で、目下保留中の命令を関連命令バッファ19から破棄してもよい。例えば、何らかのデータが入力されたなど、イベントが発生したら、その発生を、ポート22からスレッド識別子および継続点ベクトルをそれぞれスレッドスケジューラ18および実行部16に返送することで伝送する。これにより、継続点ベクトルに識別された命令がプログラムメモリ24から命令バッファ19にフェッチされ、そのコード内の適切な時点で実行が再開される。例えば、待っているイベントが特定データの入力であれば、継続点ベクトルは、そのデータを入力する入力命令を含むコードを識別すればよい。
イベント発生後、各ステータスレジスタSR内にあるそのスレッドのEEフラグを、イベントディセーブルにセットして、その発生直後、スレッドがイベントに反応しないようにしてもよい。イベント発生時にスレッドが命令を実行した結果として、イネーブルフラグ39をディアサートしてもよい。
いくつかのポートを1または複数のポートからのイベントを待つ態勢にセットしながら、イネーブルフラグ39をアサートすることができる。ポートイネーブルフラグのセットをイネーブルする前に、スレッドのEEフラグをイベントイネーブルにセットしてもよく、この場合、用意のできた、イネーブルすべき第1のポートが、継続点ベクトルにある命令を直ちにフェッチおよび実行することにより、目下の命令を破棄し、実行を処理するイベントを生成することになる。
このポートのイネーブルフラグ39およびステータスレジスタEEフラグの利点は、イベントのイネーブルおよびディセーブルが、待機命令によりイベントのセッティングおよびスレッドの保留のどちらとも切り離されることであり、このため、特定のスレッドおよび/またはさまざまな異なるスレッド用にさまざまな入出力条件のオンオフを簡単に切り替えられる。例えば、あるイベントがディセーブルであっても、そのイベントをポート22にセットした状態にしておくことができる。したがって、スレッドでのイベントの再利用が可能となる。というのも、そのイベントはすでに一度発生したにもかかわらず、そのスレッド識別子、継続点ベクトル、および条件がポート22のTID、VECTOR、CTRL、およびデータレジスタ38にまだ格納されているからである。そのため、スレッドがそのイベントを再利用する必要があれば、そのポートのレジスタ38への再書き込みは不要であり、その代わりに、ポートのイネーブルフラグ39を再度アサートする、かつ/またはスレッド用ステータスレジスタSR内EEフラグをイベントイネーブルにリセットするだけでよい。次に待機命令が出れば、そのスレッドは同一イベントが再度発生するまで中断される。
さらに、継続点ベクトルを使用すれば、複数のイベントをスレッドごとにイネーブルにすることができる。つまり、任意のスレッドは、継続点ベクトルを1つのポート22aに転送することにより、そのポートに1つのイベントを設定し、別の継続点ベクトルを別のポート22bに転送することにより、そのポートに別のイベントを設定することができ、その他も同様である。このスレッドはまた、ポートごとに異なるイネーブルフラグ39を別々にアサートまたはディアサートすることにより、さまざまなイベントを個々にイネーブルおよびディセーブルできる。次に待機命令が出れば、そのスレッドは、イネーブルになったイベントの発生を待つ状態で中断される。
イベントとは対照的に、基本的なI/O動作は、先の待機命令は使わず、入力命令または出力命令だけを使用する。基本的なI/O動作を使用する際、スレッドスケジューラ18は、継続点ベクトルをVECTORレジスタに送信せず、またステータスレジスタSR内のポートのイネーブルフラグ39やEEフラグも使用しない。代わりに、次の保留命令が命令バッファ19に残されるだけであり、必要に応じて、入力命令または出力命令がスレッドスケジューラ18に出されて実行を停止し、状態フラグ37が示すように、データの入力または出力用ポートの利用性を待つ状態に入る。ポートがすぐに利用可能であれば、すなわち、入力命令または出力命令が実行された時点で状態フラグ37がすでにセットされていれば、そのスレッドが停止されることはない。一部の実施形態において、基本的I/Oによるスケジューリングに必要なのがTIDレジスタのみとなる。基本的I/Oは、CTRLおよびデータレジスタ内の条件を使用しても使用しなくてもよい。使用しない場合、ポートの準備ができ次第、I/Oは完了する。基本的なI/O動作はスレッドを停止または再開するが、ステータスレジスタSR内のポートのイネーブルフラグ39やEEフラグを実行することも、コントロールをイベントベクトルに転送することもない。
同様のイベントおよびI/O技術を、スレッド間、より正確には、スレッドに関連する情報を格納するスレッドレジスタセット20の間の通信に適用することができる。図6は、チャネルを形成するための回路を含むインターコネクトシステム40を示す。図をわかりやすくするため、図6では4つのスレッドレジスタセット20〜20のみを図示しており、それぞれが各スレッドT〜T用の情報を格納している。このスレッドレジスタセットはそれぞれ、インターコネクトシステム40により互いに接続されている。このシステム40は、少なくとも2つのスレッドレジスタセット20間で直接データを転送するための少なくとも1つのチャネルを形成するように動作可能な直接的なハードウェア内部結線である。この内部結線は、直接メモリアクセス(DMA)を使用せず、その転送は、RAM24などの共有メモリを介さず、バス13などのいかなる汎用システムバスを介するものでもないという意味で直接的である。チャネルは、オペランドレジスタOPとの間のデータ転送に使用されることが好ましいが、原理としては、ステータスレジスタSRなどの他の型のレジスタとの間の情報転送に使用することも可能である。スレッドスケジューラ18は、ポートについて上述したのと同様に、チャネルに発生するアクティビティに基づいてスレッドをスケジュールすることができる。ポート、チャネル、およびその他のアクティビティのソースを総括して本明細書で使用する用語は「資源」である。
インターコネクトシステム40は、スレッド間のチャネル形成に用いる複数のハードウェア端末42を含む。以下、この端末を「チャネル端」とする。各チャネル端(すなわち、チャネル端末)は、スレッドレジスタセット20のいずれにも割り当て可能であり、各チャネル端42は他のいずれのチャネル端42にもインターコネクトシステム40により接続可能である。図6では、わかりやすくするため、4つのチャネル端のみ図示しているが、この数は増減可能であり、また一般にレジスタセット20の数とチャネル端42の数は異なっていてもよいことを理解されたい。
各チャネル端42は、受信して、それが入力されるまでデータを保持するバッファを含み、そのバッファは、好ましくは、保持されているデータの量の記録も保持する。チャネル端42はまた、そのチャネルを介して出力されたデータが正しい入力バッファに書き込まれるように、別のチャネル端に接続されたかどうかの記録、そして接続されたチャネル端のアドレスの記録も保持する。このバッファおよび記録は2つのファイル、すなわちチャネル入力ファイルとチャネル出力ファイルとを用いて実行される。このチャネル入力および出力「ファイル」は、「レジスタファイル」の一部であるため、この意味から、レジスタおよびバッファを実行するためのプロセッサ14上の専用メモリの小さな1ブロックということができる。ただし、レジスタファイル内(すなわち各レジスタ)内の各エントリは特定の目的のために確保される上、レジスタへのアクセスはシステムバス13を介さないことから、このレジスタファイルは、メモリ24などの汎用RAMとは性質が異なる。
図7に示すように、チャネル端42のそれぞれは、一対のポートに似ており、スレッド間に全二重データ転送を行うための入力バッファ44と出力バッファ46とを有する(任意に、単一バッファとしてもよい)。入力バッファ44は、別のチャネル端42からのデータをスレッドのレジスタセット20に入力するように動作可能であり、出力バッファ46は、そのスレッドのレジスタセット20からのデータをその他のチャネル端42に出力するように動作可能である。各バッファが、少なくとも1ワードをバッファさせられるように十分なトークンを保持できることが好ましい。
ポート22同様、チャネルの入力バッファ44および出力バッファ46をそれぞれ、アクティビティ処理論理36’と関連づけることができる。この論理36’は、チャネルで発生するアクティビティを監視し、少なくとも1つの状態フラグ37’により(1フラグは1ビットのレジスタ)アクティビティの発生を伝送するためのものである。このアクティビティの例として、データがチャネルに入力された、チャネルが出力用に利用可能となったなどが挙げることができる。チャネルが満杯でデータを受け取ることができない時に出力命令が実行された場合、スレッドスケジューラ18がその命令を一時停止し、その命令を完遂できるほどにチャネルに余地ができた時点で再スタート、すなわち再実行させる。同様に、入力命令が実行されたが利用可能なデータが十分にない場合、十分なデータが利用可能となるまで、スレッドスケジューラ18がそのスレッドを一時停止する。チャネル端42にはカウンタ47が設けられており、これが入力バッファ44および出力バッファ46内のデータ量の記録をつけている。
スレッドレジスタの2セット間にチャネルを形成するには、2つのチャネル端の割り当ておよび接続が必要である。上述したように、各チャネル端はどのスレッドにも割り当て可能であり、各チャネル端42は他のチャネル端42のいずれとも接続可能である。チャネル端42の割り当ておよび接続を容易にするため、各端42に、その端がどのチャネル端に接続されているかを記録するチャネル端識別子レジスタCEID41と、そのチャネル端が接続されたかどうかを記録する被接続フラグ43と、そのチャネル端がスレッドにより要求されたかどうかを記録する被要求フラグ45とを含めることができる。
各チャネル端42を2つのスレッドそれぞれに割り当てるため、2つの「チャネル端獲得」命令が実行され、各命令が、スレッドの一方で使用するように1つのチャネル端42を確保する。この命令はそれぞれさらに、各チャネル端42の被要求フラグ43をアサートする。各「チャネル端獲得」命令は2つのスレッドそれぞれで実行しても、両方の「チャネル端獲得」命令を1つのマスタースレッドで実行してもよい。
次に、チャネル端を、次のようにチャネル端識別子を交換して、互いに接続する。第2のスレッドのチャネル端への出力を行うために第1のスレッドの出力命令が実行される場合、第2のスレッドのチャネル端にある被接続フラグ43を用いて、第2のスレッドのチャネル端が目下接続されているかどうかを判断する。第2のスレッドのチャネル端が接続されていなければ、そのチャネル端に供給されるデータが、第1のスレッドのチャネル端の識別子であると翻訳される。この識別子が第2のスレッドのチャネル端のCEIDレジスタ41に記録され、その結果、第2のスレッドのチャネル端の被接続フラグ43がアサートされる。これと交代に、第2のスレッドの出力命令が、第1のチャネルへの出力を行うために実行される。第1のスレッドのチャネル端の被接続フラグ43がまだアサートされていないとすると、第1のスレッドのチャネル端に供給されるデータが、第2のスレッドのチャネル端の識別子であると翻訳される。この識別子が第1のスレッドのチャネル端のCEIDレジスタ41に記録され、その結果、第1のスレッドのチャネル端の被接続フラグ43がアサートされる。
チャネル端42同士が接続されると、第2のチャネル端への出力はいずれも、第2のスレッドのチャネル端のCEIDレジスタ41内の記録から、関連する第1のチャネル端を特定する。第2の命令の入力バッファにそのデータを保持する余地があれば、そのデータは転送され、余地がなければ、第1のスレッドの出力命令は一時停止される。出力命令によるデータの第2のチャネル端への供給も、第2のスレッドが第2のチャネル端への入力を待って一時停止されていた場合は、第2のスレッドを再開して、データが取り込めるようにする。同様に、第2のチャネル端からデータを入力する第2のスレッドによって、第1のチャネル端から第1のスレッドの一時停止された出力からデータ用にスペースが得られるのであれば、第1のスレッドの出力を再開して、その実行を完了させる。この入力をイベントのトリガとしてもよい(下記参照)。各スレッドに対して、スレッドスケジューラ18は、すべての一時停止された出力命令、その関連データ、およびデータを転送しようとしているチャネル端に関する記録を保持する。
チャネルが不要となったら、「メッセージの終了」(EOM)制御トークンを出力する命令を実行して、チャネル端42同士を切り離すことができる。これでチャネル端42は他のいずれのチャネル端とも接続出来る状態となる。また、各チャネル端42は、「フリーチャネル」命令を実行すれば、スレッドからも自由になる。これにより、チャネル端42は他のいずれのスレッドが使用してもよい自由な状態となる。
チャネルレジスタファイルについて説明したように、プロセッサがチャネル端cに出力を行うと、チャネル出力ファイルのc番目のエントリがチェックされて、cが接続されているかどうかを判断する。接続されていない場合、出力データdが、その後のcへの出力が送信されるチャネル端のアドレス(すなわちID)であると翻訳される。次にそのアドレスdを調べて、同一プロセッサ上のチャネル端のアドレスかどうかを判断する。そうであれば、アドレスdはチャネル出力ファイルのc番目のエントリに書き込まれる。この後のcを介する出力はc番目のエントリにアクセスして、cに接続されたチャネル端を判断し、そして、満杯でなければ、接続されているチャネル端dの入力データに出力データを書込む。バッファが満杯であると判明した場合、出力命令は、バッファに十分な空きができるまで一時停止される。またこの場合、出力スレッドは入力命令により解放されるため、十分な空きができる。
入力がチャネル端Cで実行された場合、入力バッファファイル内C番目のエントリが読み取られて、C番目のエントリがデータを持っているかどうかを判断する。持っていれば、そのデータが取り出されて、その入力が完了する。持っていない場合、入力スレッドは一時停止され、引き続く出力命令により解放され、Cの入力バッファに十分なデータの書込みが行われる。
スレッドスケジューラ18は、各スレッドについて1つのエントリを含む「一時停止テーブル」を維持している。このテーブルは、一時停止されているチャネル端(あれば)の記録に使用するものである。チャネル端cへの入力が完了するたび、またはチャネル端cに関連するチャネルへの出力が完了するたびに、このテーブルがチェックされ、もしcのために一時停止されているスレッドがあれば、そのスレッドは解放される。
EOMトークンがcを介して出力される場合、その出力ファイル内c番目のエントリは、そのチャネル端が既に接続されていないことを記録するよう修正される。
必要となる論理量を低減するため、好ましくは、チャネルを初期化する命令は常時1つだけとし、所定の1チャネル端に動作するのに必要な通信命令も、常時1つだけにしておく。ただし、これは、複数のチャネルに対する動作の可能性を排除するものではない。
上述したチャネル端のシステムは、コード密度の面で特に効率がよい。というのも、スレッド間通信の制御および実行のために各スレッドが有する命令数が低減されて、その機能の大半はハードウェアのチャネル端で実行され、しかもDMAやメモリ24へのアクセスが不要となるからである。
再度ポート22に関して、チャネルで発生しているアクティビティの検知を容易にするために、各チャネル端42の入力バッファ24をレジスタ類38’に関連づける。レジスタ38’は、関連スレッドの識別を格納するスレッド識別子(TID)レジスタ、およびイベントの発生と同時に実行を再開すべきプログラム内の位置を格納する継続点ベクトル(VECTOR)レジスタを含む。このTIDレジスタおよびVECTORレジスタを、ポート22の場合と同様、イベントに応じてスレッドをスケジュールするため、スレッドスケジューラ18および実行部16が使用できる。つまり、レジスタは、イベントを設定するため、スレッドごとのスレッド識別子および継続点ベクトルを格納し、待機命令によりそのスレッドを中断し、イベントが発生したら、その継続点ベクトルが指定するコード内位置に戻る。この場合のイベントは、チャネル端42へのデータの入力である。VECTORレジスタを使用すれば、チャネルは割込みを生成することが可能となる。このチャネル端はまた、チャネルをイネーブルしてイベントを生成させるイネーブルフラグ39’を有する。好適な実施形態の一部において、このチャネル端42をCTRLレジスタおよびDATAレジスタに設けなくてもよいが、これは、その可能性を排除するものではない。
通信の遅延を最小限に押さえるため、有利なことに、チャネルにデータを転送する入力および出力命令をスレッドスケジューラ18に直接出せることに留意されたい。つまり、その命令は、実行部16に実行されると、そのチャネル用のレディビット37’がその時点でチャネルの準備ができていないことを示している場合、スレッドスケジューラ18に関連スレッドを実行セットから外すことで一時停止をさせる。同様に、イベントが発生していない場合、スレッドのイベントイネーブルフラグEEがスレッドのステータスレジスタSR内にセットされていない場合、かつ/またはチャネル端のイベントイネーブルフラグがアサートされていない場合、イベントベースの待機命令がスレッドスケジューラにスレッドの実行を中断させる。
チャネルは、異なるプロセッサ上のスレッド間にも形成できる。図8は、複数のプロセッサ14上に位置するスレッドレジスタ間にチャネルを形成するためのインターコネクトノード204を含むタイル202を例示している。このプロセッサ14はみな、上述したタイプのものである。このインターコネクトシステムは、ポートとは別に、同一基板またはチップ上にあるプロセッサ間に設けられた直接的なハードウェアによるリンクである。このリンクを、基板および/またはチップで使用するシリアルインターコネクトおよびパケットルーティング機構としてもよい。ただし、当業者には明らかなように、他の型のインターコネクトシステムも使用可能である。こうしたシステムは、極めて低い電力、低いピンアウト、および使いやすさを求めた構成となっていると好ましい。
各インターコネクトノード204は、図2に例示するように、システムスイッチ216と、他の同様のタイル202をアレイとして互いに接続するのに使用可能なシステムリンク218とを含む。このように接続された1つまたは複数のノード204がインターコネクトシステムを構成する。プロセッサが異なれば、そのメモリのサイズもそれぞれ目的用途に合わせることができ、同じサイズに統一する必要はない。タイル同士は、同一チップ上にあっても、異なるチップ上にあってもよい。各ノード204も、1つのプロセッサ14につき1つのプロセッサスイッチ214を含む。各プロセッサスイッチは、プロセッサリンク220を介してシステムスイッチ216と、そしてチャネルリンク222を介してプロセッサ14のチャネル端42との間を接続している。
インターコネクトシステムでの電力消費量を最小限に抑えると有益であることに留意されたい。複数の実施形態において、本発明のインターコネクトシステムは、電力排出のない静止状態を有し、受信側のクロック、位相同期回路または同期追従回路をサンプリングする必要がない。好ましくは、アレイ200などのインターコネクト24を含むシステムは、リンク218、220、222にデータが到達し始めた時点でのみ電力が供給される構成要素を用いる。
各リンク218、220、222は4本のワイヤを使用している。すなわち、各方向に1本ずつの論理1ワイヤおよび論理0ワイヤである。ビットは、「2線式非ゼロ復帰」方式で送信される。すなわち、論理1ビットの信号は、論理1ワイヤ上の遷移により伝送され、論理0ビットの信号は、論理0ワイヤ上の遷移により伝送される(すなわち、立ち上がり遷移または立ち下がり遷移がビット信号を伝える)。
プロセッサ14間の通信はトークンにより発生し、このトークンは、通信制御用の制御トークンでも、通信される実際のデータを含むデータトークンでもよい。チャネルは、データトークンおよび制御トークンで構成されるメッセージを、チャネル端からチャネル端まで運搬する。各トークンは1バイトであると好ましい。このデータトークンはデータを含み、制御トークンは、インターコネクトのさまざまな局面を制御するため、通信プロトコルのコード化に使用される。スイッチ214、216はそれぞれ、チャネルの形成、制御、および閉鎖を目的として特定の制御トークン(下記参照)に作用するよう構成されたハードウェア切り替え論理を含んでいる。
1つのメッセージは、典型的にはデータトークンと制御トークンとの双方を含む、一連のトークンで構成されている。任意に、メッセージを、特定数のメッセージのトークンをそれぞれ含む複数のパケットに分割してもよい。メッセージまたはパケットの第1のトークンはヘッダトークンであり、このヘッダトークンは、宛先ノード、宛先プロセッサ、および宛先チャネル端を識別する宛先アドレスを含んでいる。メッセージまたはパケットの末尾のトークンは「メッセージ終了」EOMまたは「パケット終了」EOPトークンである。「メッセージ終了」EODトークンも、パケット内の記述に利用可能である。ソフトウェアの開発者は、どのように選択しようとも、こうしたEOM、EOP、EODトークンを使用して、メッセージおよび/またはパケット内への通信内容配置をすることができる。このEOM、EOP、EODは、インターコネクトの切り替えの観点から、区別できない状態であることが好ましいが、ソフトウェア内で異なる使い方をすることは可能である。
プロセッサ14はそれぞれ、上記で説明したようにスレッドレジスタ20のセットを含む。それぞれのプロセッサでチャネル端に接続する場合、そのチャネルの使用方法には3つある。第1として、チャネルを単一のプロセッサ内で形成する場合と同様に「ストリーム用」チャネルを形成することができる。すなわち、各プロセッサのチャネル端を2本のスレッドそれぞれに割り当て、チャネル端IDを交換することでそのチャネル端を接続し、そのチャネルを、連続したデータストリームの転送または複数のメッセージの転送に使用するのである。これにより、2本のスレッド間に回路を有効に形成することができ、このチャネルで送信される情報は、個々のトークンのストリームそのものとなる。第2として、パケットルーティングを行うために「パケット用」チャネルを使用することが出来る。この場合、チャネルを形成してメッセージまたはメッセージパケットを開始し、EOPまたはEOM制御トークンで非接続にすることで終了する。これにより、数多くの同時実行の通信間でそのインターコネクトを共有することができる。ここで送信される情報は、出力セットが入力のマッチングセットに対応した、明確なパケット構造を有するものである。このチャネルには、未知量のバッファリングが存在することになる。第3として、「同期用」チャネルが挙げられ、これは、パケット用チャネルと同様であるが、バッファがなく、通信を行うだけでなく、スレッドが同期化されたものである。
チャネルが形成されると、同一プロセッサのチャネル同様、このチャネル上でのI/Oおよびイベントの実行が可能となる。
動作時、ヘッダトークンは、システムリンク218またはプロセッサリンク220を介してシステムスイッチ216に受信される。このシステムスイッチ216は、その宛先ノードアドレスを読取り、そのアドレスがローカルノードアドレスと一致しない場合、そのパケットを別のノードにシステムリンク218経由で発送する。一方、宛先ノードアドレスがローカルノードアドレスと一致すれば、システムスイッチ216はその宛先プロセッサアドレスを読取り、そのパケットをプロセッサリンク220経由でローカルプロセッサ14の1つに発送する。プロセッサスイッチ216は宛先チャネルアドレスを読取り、そのメッセージをチャネルリンク222およびインターコネクト40を介して正しいチャネル端42に発送する。
各リンク218、220、222は、制御レジスタ(図示せず)を含む。図2および図8を再度参照すると、ヘッドトークンが各スイッチ214および216を通過すると、ヘッダトークンによりスイッチの切替ロジックが開始されて、ソースリンクから動的に割り当てられた対象リンクまでのルートが作成される。この作成は、対象リンクアドレスを制御レジスタに書込み、ソースリンクアドレスをその対象リンク用制御レジスタに書き込むことにより行われる。ルートができると、トークンはすべてそのルートに沿って送信されるようになる。このルートは、EOP、EOM、またはEODトークンがこのルートに沿って送信された時点で非接続となる。EOP、EOM、またはEODがスイッチ216および220をパスした時点でそのルートの各段階が非接続となる。
具体的には、データdが別のプロセッサに位置する未接続のチャネル端に出力されると、リンク222の1つが動的にそのチャネルに割り当てられ、そのアドレスd(上述したように、このデータはヘッダ、すなわち宛先チャネルのアドレスである)のインターコネクトスイッチへの転送に使用される。使用したリンクの識別子は、チャネル出力ファイルにc番目のエントリに関連付けられて書き込まれる。これに引き続くc経由の出力は、c番目のエントリにアクセスして、その出力データの転送に使用すべきリンクを特定する。そのリンクのバッファが満杯であれば、出力スレッドは一時停止される。これが再度解放されるのは、そのリンクがデータを転送して、別の出力用のバッファを有するようになった時点である。これは、一時停止テーブルを用いて行われる。
データが未接続リンクに到達すると、これが宛先チャネル端dのアドレスであると翻訳され、このアドレスが、そのリンクに関連するレジスタに記録される。これに引き続きこのリンク経由のデータは、チャネル端dの入力バッファに書き込まれる。チャネル端d(すなわち、チャネル入力ファイル内のd番目のエントリ)のバッファが満杯の場合、そのリンクレベルのフロー制御が働いて、スレッドが十分なデータを入力して入力バッファに余裕ができるまで、スイッチによるその後のデータ送信を阻止する。
チャネル端dで入力が行われると、入力バッファがデータを含むかどうかを読み取られる。含む場合、そのデータは取り入れられて入力は完了する。含んでいない場合、入力スレッドは一時停止され、そのリンクがdの入力バッファに十分な新たなデータを供給した時点で解放される。
最後のEOM、EOPまたはEODトークンがc経由で出力されると、EOM、EOPまたはEODがスイッチに転送され、その出力ファイルのc番目のエントリが、そのチャネルはもう接続されていないとの記録内容に書き換えられる。そのリンクがEOM、EOPまたはEODを受信すると、これがdに転送され、リンクは非接続となる。
ここで注目すべきは、有利なことに、チャネル端の同じ機構が、同一プロセッサのスレッド間の通信にも異なるプロセッサのスレッド間にも使えることである。重要なことに、これはつまり、チャネル端のアドレス(すなわち、チャネル端ID)がシステム全体に使用可能ということである。言い換えると、各チャネル端IDは、相互接続されているプロセッサのシステム全体で、たとえばアレイ200内で、一意なのである。したがって、システム全体で資源を効率よく共有でき、プログラミングが容易となる。
複数のチャネル端およびリンクを、複数のスレッドで共有可能である。これは、1つのチャネル端を複数のスレッドからのメッセージ受信に使用できるようにするために有益である。このために、各入力チャネル端は、目下使用中であるかどうかを示す被要求フラグ43を有する。ヘッダが出力されたメッセージのスタート時点でそのチャネル端が使用中であることがわかった場合、出力スレッドは一時停止される。これが解放されるのは、EOM、EOPまたはEODが次にそのチャネル端を非接続としたとき(したがって、新たな接続に利用可能となったとき)である。同様の機構をリンク218、220、222それぞれに用いて、これらのリンクを複数の出力スレッド間で共有することができる。
これらのチャネルが双方向性であることにも留意されたい。各チャネル端に入力機能および出力機能(ステータスバッファおよびデータバッファ)があるため、入出力双方に同時に使用可能である。つまり、どのチャネルも完全に独立した単一方向性チャネルの一対として使用可能であり、異なるプロセッサにおけるスレッド間で動作する複数のチャネルの場合、その動作方向は互いに反対になる。別法として、1本のチャネルを2つのスレッド間で双方向性通信経路として使用することもできる。この場合、通信方向はスレッドの進行方向に応じて変更される。
さらに、形成後は、1つの識別子(ローカルチャネル端ID)を双方向性チャネルの識別に使用でき、ローカルチャネル端IDおよびリモートチャネル端IDの双方を使用する必要はないことにも留意されたい。チャネル端42の集合体の提供と合わせ、これにより、チャネル通信の効率が格段に向上する。単一の識別子の使用は、次の機能により簡単になる。
(1)ローカルチャネル端の宛先ヘッダを、チャネル端識別子レジスタCEID41を用いて格納する。レジスタCEID41の設定を明確にする命令を出してもよい。これを以下で説明するSETD命令としてもよい。
(2)非活動の(すなわち未接続の)チャネルに出力が行われる毎、プロセッサのスイッチ214に、レジスタCEID41から、別の命令により出力されるべきヘッダではなく、上記ヘッダをまず自動的に送信させる。非活動のチャネルとは、最後に非接続となって以来、出力を行っていないチャネルである(EOMが、応答としてなど、送信された唯一のトークンであっても、そのヘッダがまず自動的に出力される)。
(3)EOM(またはEOPかEOD)トークンにより、そのチャネルを非活動(すなわち非接続)状態に戻す。
これにより、チャネルを適時にセットすることができる。すなわち、プログラム内で宣言されたら、ローカルチャネル端アドレスだけをチャネルの識別のために巡回させればよい。これは、双方向性チャネルの場合も同じであり、スレッドは、送信にも受信にも1つの識別子を使用すればよい。
プロセッサ間の通信トークンについては、後に詳述するが、まず、ポートおよびチャネルを制御する命令について詳しく説明する。インターフェースプロセッサは、そのスレッドベース構造により、いくつかのプログラミング方法をサポートすることができる。標準入出力を行う1つの従来型プロセッサとして扱うこともできるし、あるいは、数百の通信部品の平行アレイの一部としてプログラムしてもよい。こうしたオプションを支援するものとして、命令セットが提供されている。この命令セットには、初期化、終了、開始および停止スレッドを支援し、入出力通信を提供する専用命令が含まれる。これらの入出力命令により、外部デバイスとの迅速な通信が可能となる。また、高速かつ低遅延の入出力およびハイレベルな同時実行プログラミング技術が支援される。本明細書における、この命令のポートおよびチャネルアクティビティの処理への応用については、本発明の実行に使用可能な命令の例を挙げながら、以下で詳述する。
資源は、必要な資源の種類を指定するGETR命令を用いてスレッド用に確保され、FREER命令で再度解放される。
ポートは、入力モードまたは出力モードで使用可能である。入力モードでは、スレッドをパスするデータにフィルタをかけるため、1つの条件を使用することができる。以下に説明するように、データが利用可能になると、ポートはイベントまたは割り込みを生成する。これにより、スレッドは、いくつかのポートを監視し、準備のできたポートのみを使用することができる。次いで、入出力命令INおよびOUTを用いて、準備のできたポートとの間でデータを転送する。この場合、IN命令は、nビットポートから最下位ビットを入力し、ゼロ拡張する。一方、OUT命令はn最下位ビットを出力する。
さらに2つの命令、INSHRおよびOUTSHRが、データの転送を最適化する。INSHR命令は、レジスタの内容を右にnビットシフトし、左端のnビットをnビットポートから入力されたデータを埋める。OUTSHER命令は、データのn最下位ビットをnビットポートに出力し、レジスタの内容を右にnビットシフトする。
OUTSHR port, s port ≪s[bits 0 for width(port)] ;ポートから出力
s ← s >> width(port) およびシフト

INSHR port, s s ←s >> width(port);シフトおよび
port ≫ s[bits (bitsperword - width(d)) for width(d)];ポートから入力

このとき、「≫」は入力、「≪」は出力を表す。
ポートは、使用前に構成を決定しておかなければならない。この構成には、ポートのいくつかの独立したセッティングを定義するSETC命令を使う。セッティングはそれぞれデフォルトモードを持っているため、異なるモードが必要な場合にのみ構成の必要が生じる。
SETC port, mode port[ctrl] ← mode ポート制御を設定
SETCモードセッティングの効果を以下に説明する。各セッティングの第1のエントリがデフォルトモードとなる。
モード 効果
OFF ポートは非活動状態;ピンはハイインピーダンス
ON 活動状態

IN ポートが入力口
OUT ポートが出力口(ただし、入力により目下のピン値を返送)

EVENT ポートがイベントを発生させる
INTERRUPT ポートが割込みをかける
DRIVE ピンをハイおよびローに駆動
PULLDOWN ピンを0ビット用にプルダウン、それ以外はハイインピーダンス
PULLUP ピンを1ビット用にプルアップ、それ以外はハイインピーダンス

UNCOND ポートは常にレディ状態; インプットは直ちに完了
EQUAL ポートは、その値がそのデータ値と等しくなればレディ状態
NE ポートは、その値がそのデータ値と異なればレディ状態
TRANSITION ポートは、その値がそのデータ値に向けて変化するとレディ状態
GR ポートは、その値がそのデータ値を超えればレディ状態
LS ポートは、その値がそのデータ値を下回ればレディ状態
DRIVE、PULLDOWNおよびPULLUPモードは、ポート方向がOUTのときに関連するだけである。TRANSITION条件は、1ビットのポーにのみ関連し、GRおよびLS条件は、1ビットを超えるポートにのみ関連する。
各ポートは、レディビット37を有する。このビットは、データフローの制御に使われ、そのポートが入力命令または出力命令を完了できるかどうかを定義する。レディビットの設定は、ポート構成により変更可能である。SETC、SETDまたはSETVが実行されると、レディビットはクリアされる。
入力モードにあるポートを、条件付き入力を実行する構成にすることができる。その条件にあうデータのみがプログラムに返送されるよう、入力データは、この条件のフィルタにかけられる。条件が設定されたら、ポートが準備できた段階でINおよびINSHR命令を完了させるだけでよい。上述したように、準備のできていないポートに入力命令を実行するとスレッドが一時停止される。この場合、ポートは、準備ができたら、レディビットを設定する。これがスレッドスケジューラに伝送される。すると、スレッドスケジューラは、実行部16のパイプライン内にある関連命令をリスタートさせるか、その命令を再実行する、すなわち、パイプライン内に再発行することにより、スレッドを再開する。ポートの準備ができたら、データが返送され、レディビットはクリアされる。
ポートのレディビットが設定されたら、ソフトウェアがその条件に満たした値を得られるように、たとえそのポート上の値がその後変化していたとしても、条件を満たしたデータ値がキャプチャされる。INおよびINSHR命令が実行され、レディビットが設定されたら、データが返送され、レディビットがクリアされる。レディビットを設定されていない場合、レディビットが設定されるまでデータは一時停止される。条件が設定されたら、データはその条件と比較され、条件が満たされた段階でレディビットを設定するだけである。
OUTまたはOUTSHR命令が実行されたとき、レディビットがなければデータはポートに取り入れられて、レディビットが設定される。レディビットが設定されたら、これがクリアされるまで、スレッドは一時停止される。
スレッド間の通信はチャネルを使って行われる。このチャネルにより、端部間の全二重データ転送が可能となる。この場合の端部は、同一プロセッサ内にあっても、同一チップ上の複数のプロセッサ内にあっても、複数のチップ上のプロセッサ内にあってもよい。チャネルは、2つのチャネル端の間をデータトークンと制御トークンで構成されたメッセージを運搬するものである。制御トークンは、通信プロトコルの符号化に使用される。大半の制御トークンはソフトウェアで利用可能であるが、数は、インターコネクトハードウェアに使用されるプロトコルの符号化に確保されており、命令による送受信ができない。
以下で説明するように、データが利用可能となると、チャネル端をイベントおよび割込みの生成に使用することができる。これにより、スレッドはいくつかのチャネルおよび/またはポートを監視することができ、準備のできたものだけを使用する。
2つのスレッド間で通信を行うためには、2つのチャネル端それぞれを1つのスレッドに割り当てなければならない。これを、GETR CHAN命令で行う。次いで、第1のスレッド用のチャネル端の識別子を第2のスレッドに与え、逆も同様に行う。これにより、2つのスレッドは資源識別子を使って、入力命令および出力命令によるメッセージの転送ができるようになる。
OUTT d ≪ s トークン出力
OUTCT d ≪ s 制御トークン出力
INT d ≫ s トークン入力
OUT d ≪ s データワード出力
IN d ≫ s データワード入力
TESTCT d ←isctoken(s) 制御トークン用テスト
TESTWCT d ← hasctoken(s) 制御トークン用テストワード
各メッセージは、他のスレッドの資源識別子を含むヘッダを先頭としている。この次に通常、一連のデータまたは制御トークンが続き、最後に終了またはメッセージ(EOM)制御トークンがくる。OUTおよびIN命令を氏用意して、チャネル内のデータワードの送信が行われる。データのバイト送信には、OUTT、INTT、OUTTSHLおよびINTTSHL命令が使用される。OUTTSHLおよびINTTSHLは、ワードの最重要バイトで始まる通信を最適化するために使用されるシフト命令であり、主に、メッセージヘッダ内のルーティングアドレス形成に用いられる。
OUTTSHL channel, s channel ≪ s[bits (bps - 8) for 8]; チャネルから出力
s ← s << 8 およびシフト
INTSHL channel, s s ← s << 8; チャネルからシフト
channel ≫ s[bits 0 for 8] および入力
チャネル端は、少なくとも1ワードをバッファできるように、十分なトークンの保持が可能なバッファを有する。チャネルが満杯でデータを受け取れないときに出力命令が実行されると、その命令を実行されたスレッドが一時停止される。この再開は、その命令を完遂するのにチャネルに十分な余地ができたときである。同様に、その命令が実行されても利用可能なデータが十分にないときも、スレッドは一時停止され、この再開は、十分なデータが利用可能となったときである。
チャネル上への制御トークンの送信には、OUTCT命令が使用される。制御トークンは、そのチャネル内の1バイトの記憶を取り出す。受信側端部では、ソフトウェアが、TESTCT命令を使用してその次のバイトが制御トークンであるかどうかをテストし、少なくとも1トークンが利用可能となるまで待つ。TESTWCT命令を使用して、次のワードが制御トークンを含むかどうかをテストすることも可能である。この命令の場合、少なくとも1つの制御トークンが受信されるまで、またはデータワード全体が受信されるまで待つ。
トークンが制御トークンであるとテストしたら、そのトークンはINTで受信される。受信後、おそらく、それが制御トークンであったかどうかをチェックする方法はない。チャネル端がデータトークンおよび制御トークンの双方を含む場合、IN命令によりそのトークンはすべてデータとして返送される。
不要となったチャネルを、FREE CHAN命令で解放することができる。解放しない場合は、別のメッセージに使用してもよい。
1システム内のインターコネクトは、チャネルすべてで共有される。プロセッサ内では、接続性に何ら制限もないため、インターコネクトの共有のためにチャネル端を互いに非接続にする必要はない。チャネル端を非接続としなければならないのは、対象のチャネル端が別のチャネル端と共有される場合だけである。
しかし、異なるプロセッサ上のチャネル端に接続する際には、そのインターコネクトを確実に、そのシステム内で他のチャネルに効率よく共有された状態にすると有用である。これは、送信されるデータを複数のパケットおよびメッセージに分解することで行う。各パケットまたはメッセージは、ヘッダを先頭とし、終了パケット(EOP)またはEOM制御トークンを末尾とする。
イベントおよび割込みを使用すると、資源(ポートおよびチャネル)は自動的に、制御を所定のイベントハンドラに転送する。イベントや割込みを許容するスレッドの機能は、スレッドステータスレジスタSR(図4参照)内の情報で制御され、TSEおよびTSD命令で明確に制御できる。この情報には、イベントイネーブルフラグ(EE)および割込み有効フラグ(IE)が含まれる。
TSE s SR ← SR ∨ s スレッド状態イネーブル
TSD s SR ← SR ∧¬s スレッド状態ディセーブル
上記命令のオペランドは以下のうちの1つとする。
EE イベントをイネーブルまたはディセーブルする
IE 割込みをイネーブルまたはディセーブルする
イベントは、これがセッティングされた適用範囲と同じ範囲内で処理される。したがって、イベント発生時、スレッドの状態は有効であり、そのイベントに迅速に反応できる。このスレッドは、イベントを立ち上げたポートを使用して、そのイベントの一部またはすべての情報を変更しないまま、入出力動作を実行することができる。これにより、スレッドはイベントの処理を完遂し、すぐに次の同様のイベントの待機状態に入ることができる。
イベントハンドラのプログラム位置を、SETV命令を使用して、イベントをイネーブルする前に設定しなければならない。ポートには、いつイベントを生成したよいかを判断する条件があり、この条件はSETCおよびSETD命令で設定される。チャネルは、十分なデータを含んだ時点、または出力用データを受け入れる余地ができた時点で準備ができたと見なされる。
特定ポートまたはチャネルによるイベントの生成は、イベントイネーブル無条件(EEU)命令でイネーブルにされ、イベントディセーブル無条件(EDU)命令でディセーブルにされる。イベントイネーブルtrue(EET)命令により、その条件オペランドがtrueであればイベントがイネーブルにされ、trueでなければディセーブルにされる。これとは逆に、イベントイネーブルfalse(EEF)命令により、その条件オペランドがfalseであればイベントがイネーブルにされ、falseでなければディセーブルにされる。これらの命令を使用して、ガード付き入力の実行を最適化する。以下に、ポートにイベントを構成するための命令書式の数例を挙げる。同じ命令をチャネルに関しても適用可能であることを理解されたい。
SETV port, v port[vector] ← v イベントベクトル設定
SETD port, d port[data] ← d イベントデータ設定
SETC port, c port[ctrl] ← c イベント制御設定
EET port, b port[enable]← b; port[ tid] ← thread イベントイネーブルtrue
EEF port, b port[enable]← ¬b; port[tid] ← thread イベントイネーブルfalse
EDU port port[enable]← false; port[tid] ← thread イベントディセーブル
EEU port port[enable]← true; port[tid] ← thread イベントイネーブル
1つまたは複数の資源に対してイベントをイネーブルしたら、スレッドはWAITEU命令を使用して、少なくとも1つのイベントの発生を待つことができる。この結果、EE(イベントイネーブル)フラグをクリアしてイベント類をディセーブルにした後、対応するイベントベクトルに指定されたイベントハンドラに制御が転送されて即座に新たなイベントが発生する可能性がある。あるいは、イベントが発生するまでスレッドを中断してもよい。この場合、EEフラグはイベント発生とともにクリアされ、スレッドは実行を再開する。
WAITET b if b then SR[EE] ← true trueならイベント待機
WAITEF b if ¬ b then SR[EE] ← true falseならイベント待機
WAITEU SR[EE] ← true イベント待機
CLRE SR[EE] ← false; イベントすべてをディセーブル
forall port スレッド用
if port[tid] = thread then port[enable] ← false
条件がみたされて1つまたは複数のイベントが発生するのを繰り返し待つという一般的なケースを最適化するため、イベント待機命令の条件付き形式が提供されている。WAITET命令は、その条件オペランドがtrueであれば待機し、WAITEFは、その条件オペランドがfalseであれば待機する。
スレッドによってイネーブルにされたイベントはすべて、1つのCLRE命令でディセーブルにできる。この命令は、スレッドによってイネーブルにされたイベントを有していたポートすべてにおけるイベント生成をディセーブルにする。CLRE命令はまた、そのスレッドのステータスレジスタにあるイベントイネーブルのステータスをクリアする。
優先度の高い資源に対してスレッドを最適に反応させるため、TSE EE命令を使用して、ポートおよび/またはチャネルをイネーブルにすることを開示し、イベント待機命令の1つを使用する前に、まずスレッド上のイベントをイネーブルにすることができる。これにより、プロセッサは資源を優先順に走査することができる。その結果、イベントは、イネーブルにされてすぐ、直ちに処理される可能性がある。
イベントとは異なり、割込みは目下の適用範囲内では処理できないため、使用中のPCおよびSR(場合によって、他のレジスタの一部またはすべても同様)を割込みハンドラを実行する前にセーブしておかなければならない。資源rにより割込みが生成されると、以下が自動的に発生する。
SAVEPC ← PC;
SAVESR ← SR;
SR[EE] ← false;
SR[IE] ← false;
PC ← r[vector]
ハンドラの処理が完了すると、RFINT命令により、割り込まれたスレッドの実行が行われる。
RFINT PC ← SAVEPC;割込みから復帰
SR ←SAVESR
割込みは、イベントを待って中断されているスレッドに割込むことができる。
ここで、プロセッサ間通信に戻り、この通信で使用するデータトークンおよび制御トークンの詳細を説明する。上述したように、リンク218、220、222はそれぞれ4本のワイヤを使う。すなわち、各方向に1本ずつの論理1ラインおよび論理0ラインである。ビットは、2線式非ゼロ復帰方式で送信される。すなわち、論理1ビットの信号は、ライン1上の遷移により伝送され、論理0ビットの信号は、論理0ライン上の遷移により伝送される。実際のデータは、10ビットトークン内で8ビットをそれぞれ有するデータトークンで送信され、制御情報は、やはり10ビットトークン内で8ビットをそれぞれ有する制御トークンで送信される。どちらのレールも、各トークンの末尾で(エラーがなければ)、休止(ゼロ)状態に戻る。
データ(および制御)は、同時に双方向に運搬される。これらのトークンを用いて、さまざまな長さのパケットまたはメッセージを移動させることができる。制御トークンによって、物理的なリンク制御用に確保されたり、ソフトウェアリンク制御(高次層プロトコル)のためのソフトウェアに利用されたりする。
制御トークンのコーディングは、トークンの最後で必ずリンクが静止状態に戻るように設計されている。トークンは次のように、そして図9で概略を例示したように符号化される。
トークン900はいずれも、情報部分901および第1の追加ビット902で構成される第1の部分を含む。この情報部分は、好ましくは、1バイト(8ビット)であり、そのトークンが有する実際のデータまたは制御情報である。第1の追加ビットは、そのトークンがデータトークンであるか制御トークンであるかを示すものである。
したがって、第1の部分は9ビット長となり、奇数である。この奇数ビットの送信に続いて、2つの可能性がある。
(a)1つは、奇数の論理0ビットおよび偶数の論理1ビットの送信である。この場合、ライン0は奇数の遷移により高電圧となり、ライン1は偶数の遷移により低電圧となる。
(b)もう1つは、偶数の論理0ビットおよび奇数の論理1ビットが送信されることである。この場合、ライン0は偶数の遷移により低電圧となり、ライン1は偶数の遷移により高電圧となる。
そこで、確実にリンクを静止状態に戻すためには、すなわち、確実にライン0およびライン1を低電圧にするには、第2の部分、この場合は第2の追加ビット903を各トークン900に含める。上記(a)では、第2の追加ビットは論理0であり、上記(b)では、第2の追加ビットは論理1である。いずれの場合も、トークン内の0および1の総数は偶数になるため、リンクはその静止状態に戻る(ライン0もライン1も、トークンの送信前は低電圧で始動するものとする)。
第1の部分が奇数個のビット(この場合、情報ビット901および第1の追加ビット902の1バイト)を有する場合、第2の追加ビット903は、第1の部分のビットごとにXOR演算をするだけで大変効率よく算出できる。算出を高速化させるため、この演算を、ソフトウェアではなく、インターコネクト204のXOR論理回路またはプロセッサ14で行うことが好ましい。
送信の順序については、好ましくは、第1の追加ビット902をまず送信し、続いて情報部分901、第2の追加ビット903とする。
ただし、第1および第2の追加ビット902および903の位置はどこであってもあまり問題はないことに留意されたい。第1および/または第2の追加ビットがトークンの先頭、末尾、またはその間のどこかにあったとしても、受信側が各ビットの場所を把握していれば問題ない。
上記は、奇数個のビットを有する第1の部分(すなわち情報部分プラス第1の追加ビット)について説明した。しかし、第1の部分が偶数個のビットを有する場合には(例えば、第1の追加ビットがない、または奇数の情報ビットが使用されている)、リンクを静止状態に戻すため、第2の部分を2ビットとして計算できることに留意されたい。
また、各方向に2本のワイヤのみを用いる上記2線式は比較的基本的な実施形態であるため、任意方向におけるシリアル通信のみしかできない。リンクをむしろ、低速シリアルモードと高速広域モードとの間で切り替え可能とすると好ましい。広域モードでは、以下に説明するように、2本ワイヤによるシリアル方式とは異なる符号化方式を用いる。
広域モードでは、各リンク218、220、222が「5線式(one-of-five)」コードを用いる。5線式コードによると、5本のワイヤが各リンクの各方向に用意される(したがって、各リンクにつき双方向を含めると、全部で10本)。コードは、1回の送信につき、この5本のワイヤの1本に遷移を伝送することにより、そのリンク送信される。これにより、合計5つのコードがそれぞれの意味をもって対応付けられることになる(2ワイヤ方式の2つのコードとはこの点で異なる。2本による「2線式」コードでは、論理1か論理0かにそのまま対応付けられるだけである)。このコードの対応付けとして、例えば以下が挙げられる。
コード 意味
00001 値00
00010 値01
00100 値10
01000 値11
10000 エスケープ
(上記「コード」における「1」は、そのリンクの各ワイヤ上に立ち上がりまたは立ち下がり論理遷移があることを示し、「0」は論理遷移がないことを示す。)
この一連のコード、すなわち「記号」を使ってトークンを符号化する。4サイクルで、5、すなわち625トークンをコーディングできる。これはデータトークンおよび制御トークンの双方の符号化に十分である。例えば、vが記号iでの値であり、eが記号iでのエスケープコードであるとすると、以下のようになる。
トークン 使用
256個のデータトークン
64個の制御トークン 192〜255
64個の制御トークン 128〜2191
64個の制御トークン 64〜2127
64個の制御トークン 0〜263
ただし、1つ以上の記号がエスケープである追加コードがいくつかある場合もある。こうしたコードは、EOMなどの特定の制御トークンをコーディングするのに使用可能である。例えばeであれば、vでEOMを伝送し、Sを選択して、信号線すべてを0にしてリンクを静止状態に戻す。この追加記号Sは何でもよく、5本のラインのいずれかで並行している1つ以上の遷移に有効である(5本のいずれか1本のみにある単一遷移に制限されるコード値vおよびeやエスケープとは異なる)。つまり、Sの遷移は、ラインを静止状態にリセットするために必要に応じて選択されるものである。
上記の例を用いると、2つの連続したエスケープコードeによって常に、第1のワイヤ上の遷移は偶数となり、他のワイヤには遷移がない状態となる。そこで、コード値vが、第2から第5のうちの1ワイヤ上で臨時遷移となる。したがって、例えば、5本とも低電圧論理値で開始されると、eはワイヤすべてを低電圧論理値に保ち、これに続くvが、第2から第5のワイヤの1本を高電圧論理値とする。そして最後にvと同じものとしてコードSが選択されて、同じワイヤ上で別の遷移を実行し、低電圧論理値に戻す。しかし、すべてのワイヤが低電圧論理値で開始されたわけではない場合、ワイヤは全体にどの状態にあってもよく、必要に応じて5本のラインのうちいずれかまたはすべてに1つ以上の並行遷移を構成する場合など、適宜Sを選択する。
好ましくは、2ワイヤ式符号化と5ワイヤ式符号化との間のデータ変換はオンザフライで行うことが好ましい。
この5ワイヤ方式を2ワイヤ方式の代替モードとして使用すると好ましいが、5ワイヤ方式単独での使用や他のモード方式に対する代替としての使用も可能である。
例えば、別の方式として3ワイヤ方式を用いることができる。この方式では、各リンク218、220、222に各方向において3本のワイヤが使用され、データトークンおよび制御トークンの送信に「3線式」コードが用いられる。この場合、3本のワイヤのいずれか1本にのみ遷移を伝送することによりコードが送信される。一例として、複数対のコードを連続的に送信して、値およびエスケープを次のように符号化することができる。
コード1 コード2 意味
001 001 値000
010 001 値001
100 001 値010
001 010 値011
010 010 値100
100 010 値101
001 100 値110
010 100 値111
100 100 エスケープ
(再度、上記「コード」における「1」は、そのリンクの各ワイヤ上に立ち上がりまたは立ち下がり論理遷移があることを示し、「0」は論理遷移がないことを示す。)
この方式では、6回のハンドシェイクサイクルで、3トークン、すなわち729トークンをコーディングできる。この場合もやはり、データトークンおよび制御トークンの双方の符号化に十分である。また、このエスケープコードの1つを使って、例えば、すべての信号ワイヤをゼロにするためにv、v、およびvを選択したvなど、EOMなどのいくつかのゼロ復帰トークンを提供することができる。
データトークンおよび制御トークンの例をここで挙げる。このトークンは、上述した2ワイヤ、3ワイヤ、5ワイヤ方式など、適した符号化方式であればいずれを用いても符号化が可能であることを理解されたい。
従来、基板またはチップ上のプロセッサ間のインターコネクトは、ハードウェアのみで制御されるものであり、ソフトウェアには認識も対応もできるものではなかった。しかし、本発明の一部の態様によると、制御トークンを「アーキテクチャで定義される」(すなわちハードウェアで定義)ものか「ソフトウェアで定義される」されるものかに大別することができる。アーキテクチャで定義される制御トークンは、インターコネクト204内のスイッチ214、216またはリンク218、220、222の1つ以上に、トークンの値を検知し、これに反応して、インターコネクト204の一部側面を制御するように開始されるハードウェア論理が含まれるものである。つまり、アーキテクチャで定義される制御トークンの機能は、インターコネクト204内のハードウェア論理により予め定められるものである。このハードウェア論理は、トークンの宛先プロセッサ14で稼働しているソフトウェアの助けを必要とすることなく、開始され、その機能を実行する。ところが、本発明は、ソフトウェアに、アーキテクチャで定義される特定の制御トークンへのアクセスを認めるものである。すなわち、アーキテクチャで定義される特定の制御トークンは、ソフトウェア開発者が定めた追加機能を実現するために、ソフトウェアにより翻訳できるようになっている。一方、ソフトウェアで定義される制御トークンは、トークン値を検知したり、これに作用したりというハードウェア論理がなく、代わりに、受信側プロセッサ14で稼働するソフトウェアによってのみ翻訳されるものである。ソフトウェアで定義される制御トークンは、そのように定義されたロジックを含まないことから、インターコネクト204内のハードウェアで翻訳されることはない。
一部の実施形態において、制御トークンは実際には4つのグループに分けられる。アプリケーショントークン、専用トークン、特権トークン、およびハードウェアトークンである。好ましくは、制御トークンの8ビット部分901において、値0〜127を用いてアプリケーショントークンを符号化し、値128〜191を用いて専用トークンを符号化し、値192〜233を用いて特権トークンを符号化し、値224〜255を用いてハードウェアトークンを符号化する。ただし、これ以外の組み合わせも、特定用途の用件に応じて可能である。制御トークンの4種類は以下の通りである。
(1)アプリケーショントークンはハードウェアにより翻訳されることはなく、ソフトウェアで定義される。これらは、コンパイラやアプリケーションソフトウェアによる使用を目的としており、データ構造の符号化および特定用途向けプロトコルの実施を促進するものである。
(2)専用トークンは、アーキテクチャで定義され、ハードウェアまたはソフトウェアで翻訳される。一般のデータ型および構造に対する符号化標準の提供、そして、データ、プログラム、およびチャネル(例えば)の転送用プロトコルの符号に用いられる。
(3)特権トークンは、アーキテクチャで定義され、ハードウェアまたはソフトウェアで翻訳される。ハードウェア資源の共有、制御、監視、およびデバッグなどのシステム機能の遂行に用いられる。このトークンの1つでも非特権ソフトウェアとの間で転送しようとすると、例外が発生する。
(4)ハードウェアトークンは、ハードウェアによってのみ使用される。このトークンの1つでもソフトウェアとの間で転送しようとすると、例外が発生する。
本発明の一部の態様によると、制御トークンおよびデータトークンの両方を含むメッセージが、ソフトウェアで構成される。上述したように、基板またはチップ内の物理的インターコネクトの制御は従来、そのインターコネクト内の専用ハードウェアがその責任を担っていた。つまり、物理的インターコネクトを制御する信号の生成は、インターコネクト内ハードウェアが行っており、プロセッサ内のソフトウェアではなかった。このような制御例としては、スイッチおよびリンクの制御レジスタへのアクセスが挙げられる。しかし、本発明によれば、データトークンも制御トークンも、そしてアーキテクチャで定義される制御トークンもソフトウェアで定義される制御トークンも、実行部16が実行する命令(OUTCT命令)のオペランドからインターコネクト204へと出力することができる。このオペランドは、命令自体から直接読み出される即値オペランドでも、関連命令に指定されるオペランドレジスタOPから読み出されるオペランドでもよい。好ましいオプションではないが別法として、命令で指定したメモリアドレスからデータトークンまたは制御トークンを読み出すことができる。ハードウェアトークンのみ、ソフトウェアに生成されることはなく、単独でインターコネクトハードウェア回路で内部使用される。
ここで、制御トークンの種類別の例をいくつか説明する。アプリケーショントークンには所定の機能はなく、ソフトウェア開発者の選択する目的通りに使用可能である。上述したように、コンパイラやアプリケーションソフトウェアによる、データ構造の符号化および特定用途向けプロトコルの実施のための使用を想定している。
専用トークンの例は次の通りである。
EOM メッセージ終了
EOP パケット終了
EOD データ終了

READ 遠隔メモリからの読み出し
WRITE 遠隔メモリへの書込み

ACK 処理が成功したことの確認
NACK エラーとなったことの確認
動的経路制御(すなわちパケット交換ルーティング)を用いる場合、接続部が1つまたは複数のヘッダトークンにより形成され、EOM、EOPまたはEODトークンにより非接続にされる。ヘッダトークンは実際にはデータトークンであるが、スイッチ218、220、222は、接続されていないチャネル端40から出力されたデータトークンをヘッダトークンであると認識するように構成された論理を含んでいることに留意されたい。
EOM、EOPおよびEODはアーキテクチャで定義される。というのは、このそれぞれが、インターコネクト204内でハードウェア論理をトリガして、宛先プロセッサ14のソフトウェアのいずれとも独立した専用機能を発揮する、すなわち、スイッチ218、220,222をトリガしてチャネルを非接続にするからである。EOM、EOPおよびEODは、インターコネクトハードウェアが関与している範囲では、互いに区別できるものではない。しかし、いずれもソフトウェアにもアクセス可能であるため、ソフトウェア開発者はEOM、EOPおよびEODを用いてソフトウェアに種々の意味を持たせることができる。例えば、ソフトウェア開発者は、EOPトークンでメッセージを複数のパケットに分割し、EODトークンを用いて1つのパケット内に記述することができる。
制御トークンの集合体を使って、データ通信およびアクセスプロトコルを提供することができる。この集合体は通常ソフトウェアにインタープリタされ、他のタイルのメモリへのアクセスに用いるREADおよびWRITEなどの動作を含むものである。アーキテクチャにより定義されるREADおよびWRITEトークンは、プロセッサ14に専用のハードウェア論理があり、トークンによりトリガされるように配置されている。これは、読取りまたは書込み機能に必要となるものである。別法として、またはこれに追加して、読取りおよび書込み型動作を、アプリケーショントークンで実行してもよい。
ACKおよびNACKトークンは、その前に受信されたメッセージまたはパケットを受けて送信され、そのメッセージまたはパケットの処理が成功したかどうかを示すものである。別法として、またはこれに追加して、応答型動作をアプリケーショントークンで実行してもよい。
一部の実施形態において、特権トークンは、システムの初期化、デバッグ、監視などに使用される。例として以下が挙げられる。
WRITEID デバイス識別番号の書込み
READID デバイス識別番号の読出し
READTY デバイス型の読出し

WRITEC 構成の書込み
READC 構成の読出し

START デバイスを開始
STOP デバイスを停止

QSTATUS デバイス状態の問合わせ
WRITEIDトークンおよびREADIDトークンは、スイッチ214、216の制御レジスタとの間で識別番号の書込みおよび読出しをするためのものである。READTYトークンは、その制御レジスタからスイッチ214、216の型を読出すためのものである。この型により、そのスイッチがシステムスイッチ216であるかプロセッサスイッチ214であるかがわかる。スイッチ214、216はそれぞれ、その識別番号および型からアレイ200内で一意に識別される。
WRITECトークンおよびREADCトークンは、スイッチ214、216の制御レジスタとの間で構造情報の書込みおよび読出しをするためのものである。この構造情報は、例えば、スイッチが使用するルーティング表や、タイルアドレスに関するものであり、この2つのトークンは、アレイ200の初期設定などに使用可能である。
STARTトークンおよびSTOPトークンは、スイッチ214、216のイネーブルおよびディセーブルに使用する。
QSTATUSトークンは、リンク218、220、222の制御レジスタにその状態判断のために問合わせをするものであり、例えば、リンクが使用中であるかどうか(もし使用中であればどの方向か)の判断に使用する。
ハードウェアトークンは、通信リンク220、222の動作の制御に使用される。その例として以下が挙げられる。
CREDIT データの送信を可能にする
LRESET リンクをリセットする
CREDIT制御トークンは、受信側リンク220または222から生成されて送信側リンク220または222へと送信されて、受信側がトークンを受け入れ可能であることを示し、また、その受信側リンクで利用可能な、トークン分のスペース数を示す。
リンク220および222のリスタートは、エラー後、リンクがLRESETトークンを生成し送信すると可能となる。この送信に対して、リンクは、LRESETトークンを返送することで応じる。両方のリンクともがLRESETトークンを送信および受信した後でのみリセットされる。LRSETを両方のリンクが同時に送信しようとしても問題ないことに留意されたい。
上述した5ワイヤ方式を用いる特に有利な一実施形態において、CREDITトークンは、エスケープ、値、別のエスケープ、再度同じ値として、例えばvをvと同じ値とするeとして符号化される。こうして、CREDITトークンは、どのワイヤの状態も変更することのないものとして保証される。というのは、2つのエスケープ記号は常に同一ワイヤ上の2つの反対方向の遷移となり、同様に2つの値記号も常に同一ワイヤ上の2つの反対方向の遷移となって、リンクを、CREDITトークンの送信前と同じ状態に保つからである。したがって、もしリンクが他の値を有していると、その値はCREDITトークンによる影響を受けないことになる。このCREDITトークンは、こうした値を有効に「パス」させられる。これは、リンク上のソフトウェアトークンや他の値との干渉を懸念せずとも、インターコネクト内ハードウェアによりCREDITトークンをパスさせられるため、有用である。インターコネクトハードウェアによるCREDITトークンの送信は、完全な自律操作とすることができる。
リンク状態への影響がまったくないトークンを構成できるのであれば、同様の概念を、3ワイヤ方式および他の方式におけるCREDITトークンに適用することができる。
ソフトウェアメッセージの構成例を、図10を見ながら説明する。図10は、1つのプロセッサ14(送信元プロセッサ)により、別のプロセッサ14(宛先プロセッサ)のメモリ24を読み取るために出力された読み取りメッセージ101を例示している。
動作時、送信元プロセッサ14で実行されているコードが、まず宛先プロセッサに出力するヘッダ102を生成する。このヘッダ102は、上述したようにチャネルを形成するため、宛先プロセッサのアドレスを指定するものである。この例において、ヘッダは、2つのデータトークンを含む。続いて、ヘッダ102の生成後、そのソフトウェアは、宛先プロセッサのメモリ読み取りを要求するため、READ制御トークン104を生成する。このREAD制御トークンは、送信元プロセッサが実行したOUTCT命令のオペランドから生成される。この制御トークンは宛先ソフトウェアがどの機能を実行せねばならないかを通知するものである。READトークンの生成後、送信元ソフトウェアは、アドレス部分106とリターンヘッダ部分108とを生成する。この例ではアドレス部分106が4トークン長、リターンヘッダ部分108が2トークン長であり、これもそれぞれOUTT命令により出力される。これらの部分106および108により、要求の実行に必要な情報、すなわち、ロードすべきワードのアドレスと、そのデータを返信すべきプロセッサのアドレスとが得られる。読み取りアドレス106およびリターンヘッダ108の生成後、そのソフトウェアにより、チャネルを閉鎖するEOM制御トークン110が生成される。
上記メッセージのフォーマットには、アドレスをワード単位で位置調整しているか、ローカルメモリにオフセットを有するかなど、何ら制限はないことに留意されたい。フォーマットは、そのメッセージを扱うソフトウェアに依存する。
図11に例示するように、うまく読み取られる応答メッセージ111は、メッセージ読取り要求101に供給されたリターンヘッダ108を先頭としている。次に、肯定応答制御トークンACK112が続いて、読み取りが成功したことを送信元プロセッサに示す。ACK制御トークン112の生成後、宛先ソフトウェアは、リターンデータ部分114を生成する。このデータ部分114は、アドレス部分106に指定された宛先プロセッサのメモリのアドレスから出力されるものである。ACK112の生成後、同じソフトウェアでEOM制御トークン116が生成され、このチャネルが閉じられる。
図12に例示するように、読み取りが不成功に終わる返信メッセージ121もメッセージ読取り要求101に供給されたリターンヘッダ108が先頭となる。次に、否定応答制御トークンNACK118が続いて、アドレス部分106に指定されたアドレスが存在しなかったなどの理由で読み取りが不成功だったこと、すなわちエラーがあることを送信元プロセッサに示す。このようなエラーが発生した場合、データの返送は必要なく、NACK118の次に、EOM制御トークン116が生成され、このチャネルが閉じられる。
上述したように、チャネルの使用法には3つあり、ストリーム用、パケット用、同期用である(同期されたチャネルはパケット用チャネルの1種)。以下、この通信の効率化のためにトークンおよび命令セットをさらに改良することについて説明する。
第1の改良点は、スイッチ214および216のルートを閉鎖するが、受信側プロセッサ14には見えない(少なくとも、受信側プロセッサで実行される入力命令には無視される)PAUSE制御トークンを提供することである。このPAUSEトークンは、ハードウェアトークンの性質も専用トークンの性質も持つ特殊なものであり、ハードウェアトークンのように、しかし専用トークンとは異なり、受信側プロセッサのソフトウェアにアクセスできない。しかし、ハードウェアとは異なり、そして専用トークンのように、送信側プロセッサのソフトウェアにより生成可能なものである。つまり、ストリームは一時停止可能であり、そのインターコネクトルートは、受信側の専用コードがなくても一時的に解放される。継続するには、送信側がトークンの送信を開始すればよい。PAUSEは、宛先チャネル端が同一プロセッサ上にある場合には無効である。PAUSEをEOPトークンの代わりに使用することもできる。
第2の改良点は、EOMトークンの送信およびチェックを迅速にすることである。これは、1つのアドレスOUTEOMおよびCHKEOM命令を使用することで実現できる。OUTEOMはEOMトークンを出力する。CHKEOMは、次に受信されるトークンがEOMトークンでなければトラップする。INTおよびIN命令は、EOMトークンで使用されるとトラップする。トラップは割り込みと同様の効果があるが、トラップは特定のエラー条件で自動的に生成されるものであり、特定トラップベクトルを転送する。トラップの原理は、当業者には周知であろう。
第3の改良点は、OUTPAUSE命令を提供して、PAUSEトークンの別途コード化を不要とする。
チャネルのセッティングおよび制御用のコードシーケンスの例を以下に挙げる。同一プロセッサ上2つのスレッド間におけるチャネルのセッティングは以下のようになる。
GETR CHAN c1
GETR CHAN c2
SETD c1, c2
SETD c2, c1
チャネル端識別子c1またはc2を、初期化した後、別のスレッドにパスさせることができる。
以下を実行して遠隔プロセッサ、すなわち2つの異なるプロセッサ間のスレッド間をブートして、遠隔プロセッサを形成することができる。
GETR CHAN, c1
次に、以下を含むブートストラッププログラムを送信し、

GETR CHAN, c2
SETD c2, c1
OUT c2, c1 //チャネル端識別子を出力

最後に、以下を実行する。
IN c1, c2 //チャネル端識別子を入力
SETD c1, c2
上記どちらの例においても、チャネルの一端の識別子を使うだけで通信ができるようになる。
ここで、3種類のチャネル、すなわちストリーム用、パケット用、同期用チャネルをセッティングおよび制御するコード例について説明する。
ストリーム用チャネルcは、出力および入力を用いるだけで操作することができる。「pause(c)」(チャネルの一時停止)命令も、PAUSEトークンの生成に利用可能であり、この一時停止は、転送を中断するためにいつでも実行することできるが、入力側スレッドにこれは見えない。高水準において、ストリーム用チャネルでトークンを受信するコードは以下のようになる。
switch c=>> s
case ct1… //制御トークン1が…の場合
case ct2… //制御トークン2が…の場合

default control…
case dt1 //データトークン1が…の場合
case dt2 //データトークン2が…の場合
default data…
これをコンパイルすると以下のようになる。
TESTCT c, flag
IN c, s
BFF flag, data //データトークンの場合「data」に分岐
[code for control tokens…]
BFU end //「end」に分岐
data:
[code for data tokens…]
end:
パケット用チャネルc上の単方向通信に対して、送信側プロセッサPの高水準コードは、
out (c) {…} // cへの出力を含む命令シーケンス
であり、これをコンパイルすると以下となる。
OUTT c, token1
OUTT c, token2

OUTEOM c
(好適な実施形態では、上述したように、未接続のチャネル端42に出力される際にCEIDレジスタ41から自動的にヘッダが送信されるため、OUTTでヘッダを出力する必要はないことに留意されたい。)
受信側プロセッサQの高水準コードは、
in (c) {…} // cへの入力を含む命令シーケンス
であり、これをコンパイルすると以下となる。
INT c, token 1
INT c, token 2

CHKEOM c
ただし、Pがトークンを送信しすぎると、QのCHKEOMがトラップし、Pが送信するトークンが少なすぎると、Qの入力の1つがトラップする。したがって、CHKEOM命令によって、プロセッサ間の通信のパケット構造を強化する。
同期用チャネルc(パケット用チャネルの1種)上の単方向通信に対して、送信側プロセッサPのコードは、
out (c) {…} // cへの出力を含む命令シーケンス
であり、これをコンパイルすると以下となる。
OUTT c, token 1
OUTT c, token 2

OUTEOM c
CHKEOM c
受信側プロセッサQの高水準コードは、
in (c) {…} // cへの入力を含む命令シーケンス
であり、これをコンパイルすると以下となる。
INT c, token 1
INT c, token 2

CHKEOM c
OUTEOM c
この場合も、ただし、Pがトークンを送信しすぎると、QのCHKEOMがトラップし、Pが送信するトークンが少なすぎると、Qの入力の1つがトラップする。また、PがそのEOMを送信するまでQは処理できず、QがそのEOMを送信するまでPは処理できない。このためPおよびQは同期化される。つまり、QのCHKEOMは、QがPからパケット全体を受信するまで応答できないことを保証し、PのCHKEOMは、PがQからリターンEOMを含む応答パケット全体を受信するまで、続きの通信を継続できないことを保証するものである。
パケット用通信、同期用通信の双方において、PおよびQが双方向に通信すると、上記命令が使用されて、適切な数のトークンを各方向に送信することができる。
上記実施形態は実施例としてのみ記載したものであることを理解されたい。この他の実施形態では、別のレジスタおよび命令セットも、チップの仕様に応じて使用可能である。イベントバッファ38’も、入力バッファ44の代替として、またはこれに追加するものとして、チャネル端42の出力バッファ46用に使用可能である。スレッドのスケジュールは、ポートおよびチャネルの他に、他の発信元からのアクティビティを基準にしてもよい。チャネル端は上記では入力バッファおよび出力バッファを有するが、単方向チャネル端も使用可能である。プロセッサのさまざまな部品間に、さまざまな接続を設けることも、かつ/または、プロセッサ間および/またはタイル202間にインターコネクト204をさまざまに配置することも可能である。データトークンおよび/または制御トークンの生成かつ/または構成もさまざまな順序で可能である。ヘッダ、メッセージ、アドレス、および/またはトークンにさまざまな長さを持たせることも、これらをさまざまな品質のデータに用いることも可能である。さらに、本発明は、端末用アプリケーションプロセッサを備えたモバイル端末での仕様に特定されるものではない。他の用途および構成も、当業者には明白であろう。本発明の範囲は上記実施形態に限定されるものではなく、以下の請求の範囲によってのみ限定されるものである。

Claims (44)

  1. プロセッサ間を結ぶリンクであって、ライン1およびライン0を含み、かつ前記ライン1上の論理遷移が論理1を示し、前記ライン0上の論理遷移が論理0を示すリンク上にトークンを送信する方法であって、
    トークンの第1の部分を送信することと、
    前記トークンの第2の部分を送信して、確実に前記トークンの論理1のビットの総数を偶数、かつ前記トークンの論理0のビット総数を偶数として、前記トークンの末尾で、前記リンクを静止状態に戻すこととを含む方法。
  2. データトークンを送信するか、制御トークンを送信するか判断することをさらに含み、
    前記第1の部分が、データトークンを送信する場合にはデータの運搬、制御トークンを送信する場合には制御情報の運搬に用いられる情報部分と、前記トークンがデータトークンであるか制御トークンであるかを示す第1の追加ビットとを含む、請求項1に記載の方法。
  3. 前記リンクが同一基板またはチップ上にあるプロセッサ間を結んでいる、
    請求項1に記載の方法。
  4. 前記第1の部分が、偶数個の情報ビットと前記第1の追加ビットとを含む奇数個のビットを有し、前記第2の部分が第2の追加ビットである、請求項2に記載の方法。
  5. 前記第1の部分が論理1に偶数個のビットを、かつ論理0に奇数個のビットを含んでいるか、または前記第1の部分が論理1に奇数個のビットを、かつ論理0に偶数個のビットを含んでいるかを判断することをさらに含み、
    もし前記第1の部分が偶数個の論理1および奇数個の論理0を含んでいれば、前記第2の部分は論理0のビットであり、
    もし前記第1の部分が奇数個の論理1および偶数個の論理0を含んでいれば、前記第2の部分は論理1のビットである、請求項4に記載の方法。
  6. 前記第1の部分についてビット毎XOR演算を実行して、前記第2の部分を算出することさらに含む、請求項5に記載の方法。
  7. 前記情報部分が8ビットである、請求項2に記載の方法。
  8. 前記トークン内の送信が、前記第1の追加ビット、前記情報部分、そして前記第2の追加ビットの順に行われる、請求項4に記載の方法。
  9. 前記第1の部分が、上記プロセッサのうちの1つで実行されるソフトウェアにより生成され、前記第2の部分が、前記リンク内ハードウェアにより生成される、請求項1に記載の方法。
  10. 前記第1の部分が、上記プロセッサのうちの1つで実行される命令のオペランドである、請求項9に記載の方法。
  11. 前記トークンが、アーキテクチャで定義される制御トークンであり、前記方法が、前記制御トークンを使用して前記リンクを含む回路を有するインターコネクト内で論理をトリガして、前記インターコネクトの構成要素をコントロールすることをさらに含む、請求項2に記載の方法。
  12. ソフトウェアの機能を遂行するため、宛先プロセッサで実行されるソフトウェアを用いて、前記アーキテクチャで定義された制御トークンを受信することをさらに含む、請求項11に記載の方法。
  13. 前記アーキテクチャで定義された制御トークンは、前記宛先プロセッサで実行される特権ソフトウェアにのみアクセス可能な特権制御トークンである、請求項12に記載の方法。
  14. 前記トークンが、ソフトウェアに定義される制御トークンである、請求項2に記載の方法。
  15. 前記トークンが、宛先プロセッサを指定する1つまたは複数のヘッダトークンを含むメッセージで送信される、請求項1に記載の方法。
  16. 前記トークンが、1アレイ内の2つ以上のプロセッサ間をつなぐ、スイッチおよびリンクのシステムを含む回路を有するインターコネクト上に送信される、請求項1に記載の方法。
  17. 複数のプロセッサと、ライン1およびライン0を含んで前記プロセッサ間を結ぶリンクとを含み、前記ライン1上の論理遷移が論理1を示し、前記ライン0上の論理遷移が論理0を示すデバイスであって、
    前記プロセッサの少なくとも第1のプロセッサが、トークンの第1の部分を送信し、
    前記トークンの第2の部分を送信して、確実に前記トークンの論理1のビット総数を偶数とし、かつ前記トークンの論理0のビット総数を偶数とし、これにより、前記トークンの末尾で、前記リンクを静止状態に戻すように構成されている、デバイス。
  18. 前記第1のプロセッサが、データトークンを送信するか、制御トークンを送信するかを判断するように構成されており、
    前記第1の部分が、データトークンを送信する場合にはデータの運搬、制御トークンを送信する場合には制御情報の運搬に用いられる情報部分と、前記トークンがデータトークンであるか制御トークンであるかを示す第1の追加ビットとを含む、請求項17に記載のデバイス。
  19. 前記デバイスが同一基板またはチップ内に位置している、請求項17に記載のデバイス。
  20. 前記第1の部分が、偶数個の情報ビットと前記第1の追加ビットとを含む奇数個のビットを有し、
    前記第2の部分が第2の追加ビットである、請求項18に記載のデバイス。
  21. 前記第1のプロセッサが、前記第1の部分が論理1に偶数個のビットを、かつ論理0に奇数個のビットを含んでいるか、前記第1の部分が論理1に奇数個のビットを、かつ論理0に偶数個のビットを含んでいるかを判断するように構成されており、
    もし前記第1の部分が偶数個の論理1および奇数個の論理0を含んでいれば、前記第2の部分は論理0のビットであり、
    もし前記第1の部分が奇数個の論理1および偶数個の論理0を含んでいれば、前記第2の部分は論理1のビットである、請求項20に記載のデバイス。
  22. 前記第1の部分についてビット毎XOR演算を実行して、前記第2の部分を算出するように構成された論理回路をさらに含む、請求項21に記載のデバイス。
  23. 前記情報部分が8ビットである、請求項18に記載のデバイス。
  24. 前記トークン内の送信が、前記第1の追加ビット、前記情報部分、そして前記第2の追加ビットの順に行われる、請求項20に記載のデバイス。
  25. 前記第1の部分が、前記第1のプロセッサで実行されるソフトウェアにより生成され、前記第2の部分が、前記リンク内ハードウェアにより生成される、請求項17に記載のデバイス。
  26. 前記第1の部分が、前記第1のプロセッサで実行される命令のオペランドである、請求項25に記載のデバイス。
  27. 前記デバイスが前記リンクを含む回路を有するインターコネクトをさらに備え、前記トークンが、アーキテクチャで定義される制御トークンであり、前記インターコネクトが、前記インターコネクトの構成要素をコントロールするために、前記制御トークンによりトリガされるように構成された論理を含む、請求項18に記載のデバイス。
  28. 前記プロセッサのうち第2のプロセッサが、ソフトウェアの機能を遂行するため、前記前記第2のプロセッサで実行されるソフトウェアを用いて、前記アーキテクチャで定義された制御トークンを受信するように構成されている、請求項27に記載のデバイス。
  29. 前記アーキテクチャで定義された制御トークンは、前記第2のプロセッサで実行される特権ソフトウェアにのみアクセス可能な特権制御トークンである、
    請求項28に記載のデバイス。
  30. 前記トークンが、ソフトウェアに定義される制御トークンである、請求項18に記載のデバイス。
  31. 前記第1のプロセッサが、宛先プロセッサを指定する1つまたは複数のヘッダトークンを含むメッセージで前記トークンを送信するように構成されている、請求項17に記載のデバイス。
  32. 1アレイ内の2つ以上のプロセッサ間をつなぐ、スイッチおよびリンクを含む回路を有するインターコネクトシステムをさらに備える、請求項17に記載のデバイス。
  33. プロセッサ間を結ぶリンクであって、ライン1およびライン0を含み、前記ライン1上の論理遷移が論理1を示し、前記ライン0上の論理遷移が論理0を示すリンク上にトークンを送信するコンピュータプログラムであって、
    トークンの第1の部分を送信するステップと、
    前記トークンの第2の部分を送信して、確実に前記トークンの論理1のビット総数を偶数、かつ前記トークン内の論理0のビット総数を偶数とし、これにより、前記トークンの末尾で、そのリンクを静止状態に戻すステップと、
    をプロセッサに実行させる、プログラム。
  34. 複数の処理手段と、前記処理手段間をリンクし、かつ論理遷移により論理1を示す論理1送信手段と、論理遷移により論理0を示す論理0送信手段とを含むリンク手段とを含むデバイスであって、前記処理手段の少なくとも第1の処理手段が、トークンの第1の部分を送信する送信手段であって、前記トークンの第2の部分を送信して、確実に前記トークンの論理1のビット総数を偶数、かつそのトークン内の論理0のビット総数を偶数とし、これにより、前記トークンの末尾で、そのリンクを静止状態に戻す送信手段を含むデバイス。
  35. プロセッサ間を結ぶリンク上に1つまたは複数のトークンを送信する方法であって、
    前記リンクは少なくとも3本のラインを含み、
    前記ラインは、複数のコードのうちの各コードを伝送するために用いられ、
    前記複数のコードのうちの各コードは、前記ラインのうちの1つのラインに対応する論理遷移によって伝送されるか、または、前記ラインのうちの複数のラインに対応する論理遷移の組み合わせによって伝送され
    複数のコードから選択された一連のコードを前記ライン上に伝送することにより、1つまたは複数のトークンの各々を伝送することと、
    各ライン上の論理遷移の総数を調整することにより、前記1つまたは複数のトークンおよび追加コードを伝送した後、前記リンクを確実に静止状態に戻すために、1つまたは複数の追加コードを前記ライン上に伝送することと、
    を含む方法。
  36. 前記リンクが5本のラインを含み、前記ラインのうち4本のライン上それぞれにある論理遷移は各値を符号化し、前記ラインのうち残りの5本目のライン上にある論理遷移はエスケープコードを伝送するものであり、
    前記方法がさらに、
    前記5本目のラインにエスケープコードを伝送することなく、前記4本のライン上に伝送された一連のコードを伝送することにより、データトークンを伝送することと、
    前記5本目のラインを使って前記エスケープコードを伝送することを含め、前記複数のコードから選択された一連のコードを伝送することにより、制御トークンを伝送することと、
    を含む、請求項35に記載の方法。
  37. 前記1つまたは複数の追加コードを伝送することが、上記ラインそれぞれにある論理遷移の総数を確実に偶数にするように、前記追加コードの少なくとも1つを伝送することを含む、請求項35に記載の方法。
  38. 前記リンクの空き容量を示すために前記リンクが生成するクレジットトークンであって、1対または複数対の前記コードを含み、各対に含まれる前記コードが同一コードであるため、前記ラインそれぞれにある遷移総数が偶数または0となり、前記クレジットトークンの伝送後も、前記リンクの状態に何ら影響を及ぼさないクレジットトークンを伝送することをさらに含む、請求項35に記載の方法。
  39. 複数のプロセッサと、3本のラインを含んでそのプロセッサ間を結ぶリンクとを含むデバイスであって、
    前記リンクは少なくとも3本のラインを含み、
    前記ラインは、複数のコードのうちの各コードを伝送するために用いられ、
    前記複数のコードのうちの各コードは、前記ラインのうちの1つのラインに対応する論理遷移によって伝送されるか、または、前記ラインのうちの複数のラインに対応する論理遷移の組み合わせによって伝送され、
    前記プロセッサの少なくとも第1のプロセッサが
    複数のコードから選択された一連のコードを前記ライン上に伝送することにより、1つまたは複数のトークンの各々を伝送し、
    各ライン上の論理遷移の総数を調整することにより、前記1つまたは複数のトークンおよび追加コードを伝送した後、前記リンクを確実に静止状態に戻すために、前記ライン上にある1つまたは複数の追加コードを伝送するように構成されている、デバイス。
  40. 前記リンクが5本のラインを含み、前記ラインのうち4本のライン上それぞれにある論理遷移は各値を符号化し、前記ラインのうち残りの5本目のライン上にある論理遷移はエスケープコードを伝送するものであり、
    前記第1のプロセッサが、
    前記5本目のラインにエスケープコードを伝送することなく、前記4本のライン上に伝送された一連のコードを伝送することにより、データトークンを伝送し、
    前記5本目のラインを使って前記エスケープコードを伝送することを含め、前記複数のコードから選択された一連のコードを伝送することにより、制御トークンを伝送するように構成されている、請求項39に記載のデバイス。
  41. 前記第1のプロセッサが、前記追加コードの少なくとも1つを伝送する際に、前記ラインそれぞれにある論理遷移の総数を確実に偶数にするように、前記1つまたは複数の追加コードを伝送するように構成されている、請求項39に記載のデバイス。
  42. 前記リンクが、前記リンクの空き容量を示すクレジットトークンであって、1対または複数対の前記コードのみを含み、各対に含まれる前記2つのコードが同一コードであるため、前記ラインそれぞれにある遷移総数が偶数または0となり、前記クレジットトークンの伝送後も、前記リンクの状態に何ら影響を及ぼさないクレジットトークンを生成するように構成されている、請求項39に記載のデバイス。
  43. プロセッサ間を結ぶリンク上に1つまたは複数のトークンを送信するコンピュータプログラムであって、
    前記リンクが少なくとも3本のラインを含み、
    前記ラインは、複数のコードのうちの各コードを伝送するために用いられ、
    前記複数のコードのうちの各コードは、前記ラインのうちの1つのラインに対応する論理遷移によって伝送されるか、または、前記ラインのうちの複数のラインに対応する論理遷移の組み合わせによって伝送され、
    前記プログラムが
    複数のコードから選択された一連のコードを前記ライン上に伝送することにより、1つまたは複数のトークンの各々を伝送するステップと、
    各ライン上の論理遷移の総数を調整することにより、前記1つまたは複数のトークンおよび追加コードを伝送した後、前記リンクを確実に静止状態に戻すために、前記ライン上にある1つまたは複数の追加コードを伝送するステップとをプロセッサに実行させる、プログラム。
  44. 複数の処理手段と、前記複数の処理手段間をリンクするリンク手段とを含み、
    前記リンク手段が少なくとも3つの送信手段を含み、
    前記送信手段は、複数のコードのうちの各コードを伝送するためのものであって、
    前記複数のコードのうちの各コードは、前記送信手段のうちの1つの送信手段に対応する論理遷移によって伝送されるか、または、前記送信手段のうちの複数の送信手段に対応する論理遷移の組み合わせによって伝送され、
    前記処理手段の少なくとも第1の処理手段が
    複数のコードから選択された一連のコードを前記送信手段上に伝送することにより、1つまたは複数のトークンの各々を伝送し、
    送信手段上の論理遷移の総数を調整することにより、前記1つまたは複数のトークンおよび追加コードを伝送した後、前記リンク手段を確実に静止状態に戻すために、前記送信手段上にある1つまたは複数の追加コードを伝送する、デバイス。
JP2010515439A 2007-07-06 2008-05-27 トークンプロトコル Active JP5382736B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US11/774,224 US20090013331A1 (en) 2007-07-06 2007-07-06 Token protocol
US11/774,224 2007-07-06
US12/027,567 US8139601B2 (en) 2007-07-06 2008-02-07 Token protocol
US12/027,567 2008-02-07
PCT/EP2008/056499 WO2009007172A1 (en) 2007-07-06 2008-05-27 Token protocol

Publications (2)

Publication Number Publication Date
JP2010532540A JP2010532540A (ja) 2010-10-07
JP5382736B2 true JP5382736B2 (ja) 2014-01-08

Family

ID=39711973

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010515439A Active JP5382736B2 (ja) 2007-07-06 2008-05-27 トークンプロトコル

Country Status (8)

Country Link
US (1) US8139601B2 (ja)
EP (1) EP2188726B1 (ja)
JP (1) JP5382736B2 (ja)
KR (1) KR101501182B1 (ja)
CN (1) CN101689159B (ja)
AT (1) ATE494583T1 (ja)
DE (1) DE602008004362D1 (ja)
WO (1) WO2009007172A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105245235A (zh) * 2015-10-30 2016-01-13 南京理工大学 一种基于时钟调相的串并转换电路
CN105306058A (zh) * 2015-10-30 2016-02-03 南京理工大学 一种基于时钟调相的高速数字信号采集系统
KR101899247B1 (ko) * 2017-05-31 2018-09-14 한양대학교 산학협력단 동시 스위칭 잡음을 제거하는 송신기 및 이에 있어서 데이터 전송 방법
WO2020009989A1 (en) 2018-07-05 2020-01-09 Mythic, Inc. Systems and methods for implementing an intelligence processing computing architecture
US11288072B2 (en) * 2019-09-11 2022-03-29 Ceremorphic, Inc. Multi-threaded processor with thread granularity
CN111538580B (zh) * 2020-04-23 2024-01-05 苏州大学 一种嵌入式实时操作系统的线程信号操作方法与系统

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2288957B (en) * 1994-03-24 1998-09-23 Discovision Ass Start code detector
GB9011700D0 (en) * 1990-05-25 1990-07-18 Inmos Ltd Communication interface
US5784631A (en) * 1992-06-30 1998-07-21 Discovision Associates Huffman decoder
GB9924312D0 (en) 1999-10-15 1999-12-15 Univ Manchester Delay insensitive communication
KR100438057B1 (ko) * 2001-11-14 2004-07-01 에스케이 텔레콤주식회사 이동 통신 시스템에서 패킷 유실 노드 또는 링크 탐지 방법
US7298739B1 (en) * 2001-12-14 2007-11-20 Applied Micro Circuits Corporation System and method for communicating switch fabric control information
US7599287B2 (en) * 2002-11-15 2009-10-06 Cisco Technology, Inc. Tokens in token buckets maintained among primary and secondary storages
US7218255B1 (en) * 2002-12-04 2007-05-15 Marvell International Ltd. Methods and apparatus for improving minimum Hamming weights of a sequence
JP3819872B2 (ja) * 2003-05-23 2006-09-13 株式会社東芝 論理演算装置
JP2005354431A (ja) * 2004-06-11 2005-12-22 Sony Corp 順序論理回路
US20090013331A1 (en) * 2007-07-06 2009-01-08 Xmos Limited Token protocol
US8224884B2 (en) * 2007-07-06 2012-07-17 XMOS Ltd. Processor communication tokens
US20090013397A1 (en) * 2007-07-06 2009-01-08 Xmos Limited Processor communication tokens

Also Published As

Publication number Publication date
KR101501182B1 (ko) 2015-03-10
US8139601B2 (en) 2012-03-20
KR20100068365A (ko) 2010-06-23
EP2188726B1 (en) 2011-01-05
CN101689159A (zh) 2010-03-31
EP2188726A1 (en) 2010-05-26
JP2010532540A (ja) 2010-10-07
ATE494583T1 (de) 2011-01-15
WO2009007172A1 (en) 2009-01-15
DE602008004362D1 (de) 2011-02-17
CN101689159B (zh) 2012-08-29
US20090010260A1 (en) 2009-01-08

Similar Documents

Publication Publication Date Title
EP2165253B1 (en) Data transfer between thread register sets
EP2165254B1 (en) Synchronisation in a multithreaded processor
US10942737B2 (en) Method, device and system for control signalling in a data path module of a data stream processing engine
US9594720B2 (en) Interface between a bus and a inter-thread interconnect
US20090013397A1 (en) Processor communication tokens
JP4128956B2 (ja) デュアル・インライン・メモリモジュール・フォーマットにおいて一連のマルチアダプティブプロセッサを採用したクラスタ型コンピュータ用スイッチ/ネットワークアダプタポート
US9405552B2 (en) Method, device and system for controlling execution of an instruction sequence in a data stream accelerator
EP2165265B1 (en) Processor communication tokens
JP5382736B2 (ja) トークンプロトコル
US20090013331A1 (en) Token protocol
JP5271287B2 (ja) インタフェース・プロセッサ
JP2010521730A5 (ja)
CN120994606A (zh) 数据传输方法、装置、电子设备及存储介质
US7254667B2 (en) Data transfer between an external data source and a memory associated with a data processor
US9830154B2 (en) Method, apparatus and system for data stream processing with a programmable accelerator
US7613905B2 (en) Partial register forwarding for CPUs with unequal delay functional units
JP2003330873A (ja) 情報処理装置及び入出力方法並びにプログラム
EP2137613B1 (en) Processor register architecture
May XMOS XS1 Architecture
CN102043755A (zh) 可重组态处理装置及其系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110526

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130220

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130305

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130604

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130625

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130903

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130917

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130925

R150 Certificate of patent or registration of utility model

Ref document number: 5382736

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250