JP2009009549A - 一連のコンピュータでデータを処理するシステムおよび方法 - Google Patents

一連のコンピュータでデータを処理するシステムおよび方法 Download PDF

Info

Publication number
JP2009009549A
JP2009009549A JP2008114110A JP2008114110A JP2009009549A JP 2009009549 A JP2009009549 A JP 2009009549A JP 2008114110 A JP2008114110 A JP 2008114110A JP 2008114110 A JP2008114110 A JP 2008114110A JP 2009009549 A JP2009009549 A JP 2009009549A
Authority
JP
Japan
Prior art keywords
computer
data
computers
series
cpu
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
JP2008114110A
Other languages
English (en)
Inventor
W Rible John
ダブリュ.リブル ジョン
Michael B Montvelishsky
ビー.モントベリシュスキー マイケル
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
Priority claimed from US11/741,649 external-priority patent/US7555637B2/en
Application filed by Technology Properties Ltd filed Critical Technology Properties Ltd
Publication of JP2009009549A publication Critical patent/JP2009009549A/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/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/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/8053Vector processors
    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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]
    • 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Multi Processors (AREA)

Abstract

【課題】一連のコンピュータでデータを処理するシステムおよび方法を提供すること。
【解決手段】一連のコンピュータが第1コンピュータおよび最終コンピュータを含む。第1コンピュータを除く各コンピュータが前のコンピュータに先行され、最終コンピュータを除くそれぞれのコンピュータに後続のコンピュータが続く。ロジックは第1データ経路を介して新データを読取り、ロジックは第2データ経路を介して旧データを書き込む。ロジックは、新しいデータを処理して旧データを生成し、最終コンピュータを除いて、記憶素子が旧データを格納する。書き込むロジックは、読み取るロジックの後に動作し、書き込むロジックは、処理するロジックの前に動作する。
【選択図】なし

Description

本発明は、一般には、処理アーキテクチャを有し、命令処理を実行する電気的コンピュータおよびデジタル処理システムに関し、より詳細には、データ転送オペレーションをサポートまたは実行する具体的な命令データの処理に関する。
コンピューティングの技術分野では、処理速度はよく要求される品質であり、より高速なコンピュータおよびプロセッサを作成する探究が進行中である。しかし、少なくとも現在周知の技術を用いると、マイクロプロセッサの速度を向上させることに関する限界に急速に近づきつつあることがこの業界では一般に知られている。したがって、複数のプロセッサを使用して、プロセッサ間でコンピュータタスクを共有することによって全体のコンピュータ速度を向上させることへの関心が高まっている。しかし、ワークロードの共有に関係する全体の効率がほぼ必然的にある程度低下することも一般に認識されている。すなわち、1人の人が杭穴を60分で掘ることができるということだけでは、必ずしも60人の人々が杭穴を1分で掘ることができることにはならないという古い格言が当てはまることになる。ほぼどんなタスクの分割にも同じ原理が当てはまり、プロセッサ間のタスクの分割は例外ではない。
もちろん、コンピュータプロセッサ間のタスクの共有をより効率的にするための努力は行われている。厳密にどのようにタスクを割り当てるべきかという問題が検討されており、プロセスが改善した。この領域での作業中に、ある状況下では、複数CPU環境で、あるCPUから別のCPUにデータを転送することは非常に厄介なものとなることがあるということが本発明者らの意見であった。例えば、データをあるCPUから別のCPUに転送しなければならず、ターゲットCPUとソースCPUとの間のあるCPUによってターゲットCPUがソースCPUから隔てられる場合、ソースCPUは、直に並ぶCPUにデータを書き込まなければならず、次いでそのCPUはデータを読み取り、次いでそれをターゲットCPUに書き込まなければならず、次いでターゲットCPUはデータを読み取らなければならない。そのようなプロセスは、多くの読取りオペレーションおよび書込みオペレーションを必要とし、大量のデータが転送されている場合、非常に多くの読取りコマンドおよび書込みコマンドがシステムオペレーションを妨げる可能性がある。
様々な異なる方向で、すなわち、同一のシステム内の様々な他のCPUのいずれかの間で、複数の読取りおよび書込みオペレーションをすべて同時に可能にするための必要を満たすために、マルチポート読取りおよび書込みオペレーションのためのシステムおよび方法が開発された。これらは上記で論じた問題の大部分に対処するが、どんな大きな進歩の場合とも同様に、これらのシステムおよび方法は新しい課題を引き起こした。例えば、CPUがパイプラインまたは多次元アレイとして配置される複数CPU環境では、CPUが後続のCPUではなく、前のCPUに書き込む反転が生じる可能性がある。これを防止するための機構を作成することができるが、こうした機構は、ハードウェア修正またはかなりのプログラミングとCPU間通信を伴う。別の例として、今日の多くの応用例はリアルタイム処理を必要とし、または単に処理速度および効率を向上させることが望ましい。そのことから、マルチポート読取りおよび書込みオペレーションの最適化が有益となるはずである。同様の趣旨で、マルチポートオペレーションが利用可能となった以上は、こうしたオペレーションのセットアップおよび性能をより柔軟にすることも有益となるはずである。
したがって、本発明の目的は、コンピュータのパイプラインおよびアレイでデータを処理する改良型のシステムおよび方法を提供することである。
簡潔には、本発明の一態様は、一連のコンピュータがデータを処理する方法である。その一連のコンピュータは、第1コンピュータおよび最終コンピュータを含み、第1コンピュータを除く各コンピュータが、前のコンピュータに先行され、最終コンピュータを除くそれぞれのコンピュータの後に、後続のコンピュータが続く。各コンピュータを現コンピュータとみなすものとしてプロセスを考えることができる。新データが(a)現コンピュータで読み取られる。次いで(b)旧データが現コンピュータで書き込まれる。次いで(c)新データが現コンピュータで処理され、次の旧データが生成される。この後、(d)現コンピュータが最終コンピュータではない場合、旧データが現コンピュータ内に保持される。ステップ(c)は、命令語中の複数の命令を実行することを含み得る。ステップ(a)および(b)は単一の命令語として実行され得る。(a)、(b)、および(c)のうちの少なくとも1つは非同期式で実行され得る。
簡潔には、本発明の別の態様は、データを処理する一連のコンピュータである。この一連のコンピュータは第1コンピュータおよび最終コンピュータを含み、第1コンピュータを除く各コンピュータが、前のコンピュータに先行され、最終コンピュータを除くそれぞれ後続のコンピュータが続く。コンピュータはそれぞれ、第1データ経路を介して新データを読み取るロジックと、第2データ経路を介して旧データを書き込むロジックと、新データを処理して次の旧データを生成するロジックとを有する。最終コンピュータを除いて、記憶素子が旧データを格納する。書き込むロジックは、読み取るロジックの後に動作し、書き込むロジックは、処理するロジックの前に動作する。前記読み取るロジックと、前記書き込むロジックは、プログラムで単一の命令語として実行し得る。読み取るロジック、書き込むロジック、および処理するロジックのうちの少なくとも1つは非同期式で実行し得る。
本発明はまた、一連のコンピュータ上で動作したときに、本発明の前記一態様の方法をその一連のコンピュータに実施させるコンピュータプログラムを提供する。プログラムはキャリア上でよい。キャリアは信号またはストアでよい。ストアは、他の例の中でもとりわけ、記録媒体またはメモリ装置でよい。
本発明の一実施形態の一利点は、高位コンピュータから低位コンピュータにデータが書き込まれる反転が生じることが回避されることである。
本発明の一実施形態の別の利点は、コンピュータのパイプラインまたはアレイを介するデータの初期送達が改善され、それによってそれぞれの処理をより早く開始できることである。
本発明の一実施形態の別の利点は、同一の初期データ値を一連のコンピュータのすべてに提供する必要がある場合の使用に特に適していることである。
本発明の一実施形態の別の利点は、非同期マルチポート読取りおよびマルチポート通信が可能なコンピュータのパイプラインまたはアレイと共に使用するのに特に適していることである。
本発明の実施形態の上記およびその他の目的および利点は、本明細書に説明され、図面の各図に示される、現在知られている本発明を実施する最良の形態の説明と、好ましい実施形態の産業上の利用可能性の説明に鑑みて、当業者にはより明らかとなるであろう。
本発明の実施形態の目的および利点は、添付の図面の各図と共に、以下の詳細な説明から明らかとなるであろう。
図面の様々な図では、同様または類似の要素またはステップを示すのに同様の参照が使用される。
目的を達成するための形態に関して本発明の一実施形態を説明するが、本発明の精神または範囲から逸脱することなく、こうした教示に鑑みて変形形態を実施できることを当業者は理解されよう。
本明細書で説明し、かつ/または図面に示される本発明の実施形態および変形形態は、例として提示されるに過ぎず、本発明の範囲に関して限定するものではない。具体的に述べるのでない限り、本発明の個々の態様および構成要素を省略または変更することができ、あるいはそれらの代わりに、周知の均等物、または将来に開発される可能性のあるような、もしくは将来に受け入れられる代用品であることが判明する可能性のあるような、まだ未知の代用品を代用することができる。潜在的な応用例の範囲が広く、本発明が多くのそのような変形形態に適合可能であることが意図されるので、特許請求される発明の精神および範囲内にとどまりながら、様々な応用例に本発明を変更することもできる。
本発明の好ましい実施形態は、コンピュータのパイプラインおよびアレイでデータを処理する改良型のシステムおよび方法である。本明細書の様々な図面、特に図12bに示されるように、本発明の好ましい実施形態が、全体参照番号1000で示される。
本発明に対する背景および基礎として、非同期コンピュータ通信の詳細なバックグラウンド例がまず提示され、次いで、そのような非同期コンピュータ通信でのマルチポート読取りオペレーションおよびマルチポート書込みオペレーションの詳細なバックグラウンド例がさらに提示される。
最初のバックグラウンド例について、コンピュータアレイが図1で示され、その中で全体参照番号10によって指定される。コンピュータアレイ10は、複数の(図示される例では24個)コンピュータ12を有する(アレイの例では「コア」または「ノード」と呼ばれることもある)。図示される例では、コンピュータ12のすべてが、単一のダイ14上に配置される。以下でより詳細に論じるが、コンピュータ12のそれぞれは、一般には独立に機能するコンピュータである。コンピュータ12は、複数の相互接続データバス16によって相互接続される(その量は、以下でより詳細に論じる)。この例では、データバス16は双方向非同期高速並列データバスであるが、この目的で他の相互接続手段を利用できることは本技術の範囲内にある。アレイ10のこの実施形態では、コンピュータ12間のデータ通信が非同期であるだけでなく、個々のコンピュータ12も内部非同期モードで動作する。これが重要な利点をもたらすことが判明した。例えば、クロック信号をコンピュータアレイ10全体にわたって配布する必要がないので、非常に多くの電力が節約される。さらに、クロック信号を配布する必要がないことにより、アレイ10のサイズを制限する可能性があり、または他の困難を引き起こす可能性のある、多くのタイミング問題が解消される。
理解しやすいように図1からは省略されている、ダイ14上の追加の構成要素があることを当業者は理解されよう。そのような追加の構成要素は、電源バス、外部接続パッド、およびマイクロプロセッサチップの他のそのような一般的な態様を含む。
コンピュータ12eは、アレイ10の縁部にないコンピュータ12のうちの1つの一例である。すなわち、コンピュータ12eは、4つの直交して隣接するコンピュータ12a、12b、12c、および12dを有する。アレイ10のコンピュータ12間の通信のより詳細な議論に関連して、このコンピュータ12aから12eのグループ化が以下で使用される。図1からわかるように、コンピュータ12eなどの内側のコンピュータは、バス16を介して直接通信することのできる4つの他のコンピュータを有する。以下の議論では、論じられる原理は、アレイ10の縁部のコンピュータ12がコンピュータ12のうちの3つのみと直接通信し、または隅のコンピュータ12の場合にはコンピュータ12の他の2つのみと直接通信することを除いて、コンピュータ12のすべてに当てはまる。
図2は、コンピュータ12の一部のみを示す、具体的にはコンピュータ12aから12eが含まれる、図1の一部のより詳細な図である。図2はまた、読取り線18、書込み線20、および複数(この例では18本)のデータ線22をそれぞれ有するデータバス16を示す。データ線22は、1つの18ビット命令語の各ビットをすべて、並列に概して同時に転送することができる。代替実施形態では、コンピュータ12の一部が隣接するコンピュータの鏡像であることに留意されたい。しかし、コンピュータ12がすべてまったく同様に配向されるか、それとも隣接するコンピュータの鏡像として配向されるかはここでは重要ではなく、本明細書ではこの潜在的な複雑さをさらには論じない。
コンピュータ12eなどのコンピュータ12は、その読取り線18の1、2、3、または4本すべてをセットすることができ、それによってそれぞれの1、2、3、または4つすべての隣接するコンピュータ12からデータを受信する準備ができる。同様に、コンピュータ12がその書込み線20の1、2、3、または4本すべてを「ハイ」にセットすることも可能である(どちらのケースも以下でより詳細に論じる)。
隣接するコンピュータ12a、12b、12c、または12dのうちの1つが、それ自体とコンピュータ12eとの間の書込み線20を「ハイ」にセットしたとき、コンピュータ12eが既に対応する読取り線18を「ハイ」にセットしている場合、ワードが、関連するデータ線22上で、コンピュータ12a、12b、12c、または12dからコンピュータ12eに転送される。次いで、送信側コンピュータ12は書込み線20を解放し、(この例では)受信側コンピュータ12eが書込み線20と読取り線18をどちらも「ロー」に引き下げる。後者の動作は、データが受信されたことを送信側コンピュータ12に対して肯定応答することになる。上記の説明は、必ずしもイベントのシーケンスを順番に示すことを意図するものではないことに留意されたい。実際には、受信側コンピュータは、送信側コンピュータ12がその書込み線20を解放する(「ハイ」に引き上げることを停止する)より少し前に、書込み線20を「ロー」にセットするように試みてもよい。そのような場合、送信側コンピュータ12がその書込み線20を解放するとすぐに、書込み線20が受信側コンピュータ12cによって「ロー」に引き下げられる。
この例では、プログラミングエラーのみが、1つのバス16の両側にある両方のコンピュータ12に、それらの間の読取り線18の両方を同時に「ハイ」にセットし、またはそれらの間の書込み線20の両方を同時に「ハイ」にセットするように試行させる。しかし、コンピュータ12のうちの1つが、その対応する書込み線20を「ハイ」にセットするために、選ばれたコンピュータ12のうちの最初の1つからのデータを待機する待ち状態となることができるように、異なる組合せの読取り線18を「ハイ」にセットすることが望ましい場合があることが現在は予想される。
上記で論じた例では、隣接するコンピュータ(コンピュータ12a、12b、12c、または12dのうちの1つまたは複数から選択された)がその書込み線20を「ハイ」にセットする前に、コンピュータ12eの読取り線18の1つまたは複数を「ハイ」にセットするものとしてコンピュータ12eを説明した。しかし、このプロセスは確かに、逆の順序で行うことができる。例えば、コンピュータ12eがコンピュータ12aに書き込むことを試みていた場合、コンピュータ12eは、コンピュータ12eとコンピュータ12aとの間の書込み線20を「ハイ」にセットする。コンピュータ12eとコンピュータ12aとの間の読取り線18がまだコンピュータ12aによって「ハイ」にセットされていない場合、コンピュータ12eは、コンピュータ12aが読取り線18を「ハイ」にセットするまで単に待機することになる。次いで、上記で論じたように、読取り線18と書込み線20の対応する対の両方が「ハイ」であるとき、データ線22上での転送を待機中のデータが転送される。その後に、送信側コンピュータ12eが書込み線20を解放するとすぐに、(この例では)受信側コンピュータ12aが、(この例では)2つのコンピュータ12eと12aの間の読取り線18と書込み線20の両方を「ロー」にセットする。
コンピュータ12eなどのコンピュータ12が書込みを予想してその書込み線20の1つを「ハイ」にセットしたときはいつでも、コンピュータ12は、データが送信されるべきコンピュータ12が既にその読取り線18を「ハイ」にセットしていない限り、適切な隣接するコンピュータ12からデータが上述のように「要求される」まで、本質的に電力を使用せずに単に待機し、データが送信されるべきコンピュータ12が既にその読取り線18を「ハイ」にセットしている場合、データが直ちに送信される。同様に、コンピュータ12が読み取りを予想してその読取り線18の1つまたは複数を「ハイ」にセットしたときはいつでも、コンピュータ12は、2つのコンピュータ12間で命令語を転送するために、選択されたコンピュータ12に接続された書込み線20が「ハイ」となるまで、本質的に電力を使用せずに単に待機する。
コンピュータ12を上述のように機能させるためのいくつかの潜在的な手段および/または方法が存在する可能性がある。しかし、この例では、コンピュータ12は(コンピュータ12間のデータの非同期式の転送に加えて)内部的に概して非同期で動作するので、コンピュータ12はそのように単純に振る舞う。すなわち、命令は順次完了する。書込み命令または読取り命令が行われるとき、その命令が完了するまで(または、恐らくは別法として、「リセット」などによってアボートされるまで)、次の動作がない可能性がある。従来技術の認識では、規則的なクロックパルスは存在しない。むしろ、実行中の命令が読取り型または書込み型命令ではないとき(読取り型または書込み型命令は別の実体による完了を必要とすると仮定すると)、または読取り型または書込み型オペレーションが実際に完了したときにのみ、次の命令を実施するためにパルスが生成される。
図3は、図1および2のコンピュータ12のうちの1つの一例の一般的レイアウトを示すブロック図である。図3からわかるように、コンピュータ12のそれぞれは、それ自体のRAM24およびROM26を有する、概して内蔵式のコンピュータ(generally self contained computer)である。この例でコンピュータ12が単一のチップ上に組み合わされると仮定すると、前述のように、コンピュータ12は、個々の「コア」と呼ばれることもある。
コンピュータ12の他の基本的構成要素は、リターンスタック28、命令エリア30、算術論理演算部(ALU32)、データスタック34、および命令を復号化する復号化論理区域36である。この例のコンピュータ12などのスタックベースのコンピュータの動作に当業者は一般に通じているであろう。コンピュータ12は、データスタック34および別々のリターンスタック28を有するデュアルスタックコンピュータである。
この実施形態では、コンピュータ12は、隣接するコンピュータ12と通信する4つの通信ポート38を有する。通信ポート38は、オフステータス、受信ステータス(信号をコンピュータ12内に駆動する)、および送信ステータス(信号をコンピュータ12の外に駆動する)を有するトライステートドライバである。もちろん、特定のコンピュータ12がコンピュータ12eの例などのようにアレイの内側にない場合(図1)、通信ポートのうちの1つまたは複数は、少なくとも本明細書に記載の目的では、その特定のコンピュータでは使用されない。命令エリア30は、いくつかのレジスタ40を含み、この例では、Aレジスタ40a、Bレジスタ40b、Pレジスタ40c、ならびにI/O制御およびステータスレジスタ(IOCSレジスタ40d)である。この例では、Aレジスタ40aおよびIOCSレジスタ40dはフル18ビットレジスタであり、Bレジスタ40bおよびPレジスタ40cは9ビットレジスタである。
本技術はこの例によって限定されるわけではないが、このコンピュータ12は、ネイティブForth言語命令を実行するように実装される。Forthコンピュータ言語に通じている人は理解するであろうが、Forth「ワード」と呼ばれる複雑なForth命令が、コンピュータ内に設計されたネイティブプロセッサ命令から構築される。Forthワードの集まりは「辞書」と呼ばれる。他の言語では、これは「ライブラリ」と呼ばれることがある。以下でより詳細に説明するように、コンピュータ12は、RAM24、ROM26、または直接的にデータバス16(図2)のうちの1つから、一度に18ビットを読み取る。しかし、Forthの大部分の命令(オペランドなし命令として知られる)は、スタック28および34から直接的にそのオペランドを得るので、一般にはわずか5ビット長のビットを生成し、それによって、グループ内の最後の命令が3ビットのみを必要とする限定された命令のセットから選択されることを条件として、最大4つの命令を単一の18ビット命令語内に含めることができる。この実施形態では、データスタック34内の上端の2つのレジスタはTレジスタ44およびSレジスタ46である。図3には、スロットシーケンサ42もブロック図形式で示されている(以下で詳細に論じる)。
図4は、命令語48の図式表現である(命令語48は、実際には命令、データ、またはその組合せを含むことができることに留意されたい)。命令語48は18ビット50からなる。これは、ビット50のそれぞれが「1」または「0」となる2進コンピュータである。本明細書で先に論じたように、18ビット幅の命令語48は、スロット0 54a、スロット1 54b、スロット2 54c、およびスロット3 54dと呼ばれる4つのスロット54内に最大で4つの命令52を含むことができる。この実施形態では、18ビット命令語48は常に全体として読み取られる。したがって、命令語48内に最大で4つの命令を有する可能性が常に存在するので、no−op(ノーオペレーション)命令が、利用可能なスロット54のすべてを使用することが不必要であるとき、さらには望ましくないときのインスタンスを与えるために、コンピュータ12の命令セット内に含まれる。特定の一実施形態によれば、交互スロット(具体的にはスロット1 54bおよびスロット3 54d)内のビット50の極性(アクティブ「ロー」に対するアクティブ「ハイ」)が反転されることに留意されたい。しかし、これは必要なものではなく、したがって、本技術をより良く説明するために、以下の議論では、この潜在的な複雑さも回避される。
図5は、図3のスロットシーケンサ42の略図表現である。図5からわかるように、スロットシーケンサ42は、環に配置された複数(この例では14個)のインバータ56と1つのNANDゲート58とを有し、それによって、信号が14個のインバータ56およびNANDゲート58を通過するときに奇数回反転される。ORゲート60への2つの入力の一方が「ハイ」となったときに、信号がスロットシーケンサ42で開始する。第1ORゲート入力62が、実行中の命令52のi4ビット66(図4)から導出される。i4ビット66が「ハイ」である場合、その特定の命令52はALU命令であり、i4ビット66は「1」である。i4ビット66が「1」である場合、第1ORゲート入力62は「ハイ」であり、スロットシーケンサ42がトリガされ、次の命令52の実行を引き起こすパルスが開始される。
第1ORゲート入力62が「ハイ」となることによって、または第2ORゲート入力64が「ハイ」となることによってスロットシーケンサ42がトリガされたとき(以下で説明する)、信号はスロットシーケンサ42を2周し、その度にスロットシーケンサ出力68で出力を生成する。信号がスロットシーケンサ出力68を通過する1回目は、「ロー」となり、2回目は、スロットシーケンサ出力68での出力は「ハイ」となる。スロットシーケンサ出力68からの比較的広い出力がパルス発生器70(ブロック図形式で示す)に供給され、パルス発生器70は、狭いタイミングパルスを出力として生成する。コンピュータ12の動作を正確に開始するために狭いタイミングパルスが望ましいことを当業者は理解するであろう。
実行中の特定の命令52が読取り命令または書込み命令であるとき、または実行中の命令52がシーケンス中の次の命令52の即時実行をトリガすることが望ましくない任意の他の命令であるとき、i4ビット66は「0」(「ロー」)であり、したがって第1ORゲート入力62も「ロー」である。コンピュータ12などの装置内のイベントのタイミングは一般に非常に重要であり、これには例外はないことを当業者は理解されよう。スロットシーケンサ42の検査時に、当該環の第2周目を開始するために、信号がNANDゲート58を通過して循環した後になるまで、ORゲート60からの出力が「ハイ」のままでなければならないことを当業者は理解されよう。その後に、望ましくない回路の発振の継続を防止するために、第2周目中にORゲート60からの出力が「ロー」となる。
上記の議論に照らして理解することができるように、i4ビット66が「0」であるとき、以下で論じる第2ORゲート入力64が「ハイ」でないと仮定すると、スロットシーケンサ42はトリガされない。
上記で論じたように、各命令52のi4ビット66は、その命令が読取り型または書込み型命令であるかどうかに従ってセットされる。命令52内の残りのビット50は、その命令に関する特定の演算コードの残りを与える。読取り型または書込み型命令の場合、データをその特定のコンピュータ12内のどこから読むべきか、またはどこに書き込むべきかを示すためにビットのうちの1つまたは複数を使用することができる。この例では、書き込むべきデータは常にTレジスタ44(データスタック34の上端)から来るが、データは、それを実行できるところからTレジスタ44または命令領域30のいずれかに選択的に読み込むことができる。これは、この特定の実施形態では、データまたは命令を本明細書に記載の方式で通信することができ、したがって必須ではないがデータバス16から命令を直接的に実行することができるからである。さらに、ポート38のうちのいずれかを読取りまたは書込みのためにセットすべきである場合にそれがポート38のうちのどれであるかを示すのに、ビット50のうちの1つまたは複数が使用される。この後者のオペレーションは、1つまたは複数のビットを使用してAレジスタ40a、Bレジスタ40bなどのレジスタ40を指定することによって任意に実施される。そのような例では、指定されたレジスタ40には、ポート38のそれぞれ(さらには、メモリ、外部通信ポートなど、コンピュータ12が通信しようと試みている可能性のある他の潜在的実体)に対応するビットを有するデータがプリロードされる。例えば、特定のレジスタ40内の4つのビットのそれぞれは、上ポート38a、右ポート38b、左ポート38c、下ポート38dに対応することができる。そのような場合、そうしたビット位置のいずれかに「1」が存在する場合、通信は、対応するポート38を介して行うようにセットされる。
すぐ後に続く例は、コンピュータ12eがコンピュータ12cに書き込むことを試みている通信を仮定するが、この例は、任意の隣接するコンピュータ12間の通信に適用可能である。書込み側コンピュータ12eで書込み命令が実行されるとき、選択された書込み線20が「ハイ」にセットされる(この例では、コンピュータ12eと12cの間の書込み線20)。対応する読取り線18が既に「ハイ」である場合、選択された位置から、選択された通信ポート38を介してデータが直ちに送られる。あるいは、対応する読取り線18がまだ「ハイ」でない場合、コンピュータ12eは、対応する読取り線18が「ハイ」になるまで動作を単に停止する。読取り型または書込み型命令が存在するときにコンピュータ12aを停止する(またはより正確には、コンピュータ12aの次のオペレーションを可能にしない)機構は、本明細書で先に論じた。簡単に言えば、命令52の演算コードは、i4ビット66位置で「0」を有し、したがってORゲート60の第1ORゲート入力62は「ロー」であり、したがってスロットシーケンサ42は、イネーブリングパルスを生成するようにトリガされない。
読取り型または書込み型命令が完了したときにコンピュータ12eの動作がどのように再開されるかに関して、それに関する機構は以下の通りである。コンピュータ12eと12cの間の読取り線18と対応する書込み線20がどちらも「ハイ」であるとき、両方の線18および20は、それを「ハイ」に保っているそれぞれのコンピュータ12によって解放される(この例では、送信側コンピュータ12eが書込み線20を「ハイ」に保っていることになり、受信側コンピュータ12cが読取り線18を「ハイ」に保っていることになる)。次いで、受信側コンピュータ12cは両方の線18および20を「ロー」に引き下げる。実際には、受信側コンピュータ12cは、送信側コンピュータ12eが書込み線20を解放する前に、線18および20を「ロー」に引き下げるのを試みることがある。しかし、線18および20が「ハイ」に引き上げられ、「ロー」に弱く保たれる(ラッチされる)だけなので、線18または20を「ハイ」にラッチしているコンピュータ12によって線18または20が解放されるまで、線18または20を「ロー」に引き下げるどんな試みも実際には成功しない。
データバス16内の両方の線18および20が「ロー」に引き下げられるとき、これが「肯定応答」条件である。肯定応答条件時に、コンピュータ12eおよび12cのそれぞれがそれ自体の内部肯定応答線72を「ハイ」にセットする。図5からわかるように、肯定応答線72は第2ORゲート入力64を供給する。ORゲート60入力62または64のいずれかへの入力がORゲート60の出力を「ハイ」にするので、これにより、本明細書で先に述べた方式でスロットシーケンサ42の動作が開始し、それによって命令語48の次のスロット54の命令52が実行される。スプリアスアドレスがアドレスバスに到達するのを防止するために、次の命令52が復号化されるまで、肯定応答線72は「ハイ」のままとどまる。
命令52が命令語48のスロット3位置で実行中であるいずれのケースでも、コンピュータ12は、もちろんi4ビット66が「0」でない限り、次の待機中の18ビット命令語48をフェッチする。実際には、フェッチが命令語48内のすべての命令52の実行の終了前に開始することができるように、命令を「プリフェッチ」する方法および装置を含めることができる。しかし、これもまた非同期データ通信には不可欠ではない。
コンピュータ12eがコンピュータ12cに書き込んでいる上記の例を詳細に説明した。上記の議論に照らして理解することができるように、コンピュータ12eがまずコンピュータ12cに書き込むことを試みるとしても、またはコンピュータ12cがまずコンピュータ12eから読み取ることを試みるとしても、動作は本質的に同じである。コンピュータ12eと12cの両方の準備ができるまで、動作は完了することができず、コンピュータ12eと12cのどちらが最初に準備ができるとしても、第1コンピュータ12は、他方のコンピュータ12eまたは12cが転送を完了するまで、単に「スリープに移る」。上述のプロセスを見る別の方法は、実際には、書込み側コンピュータ12eと受信側コンピュータ12cがそれぞれ書込み命令および読取り命令をそれぞれ実行するときにどちらもスリープに移るが、最後にトランザクションに入ったものが、読取り線18と書込み線20がどちらも「ハイ」となったときにほぼ瞬間的に覚醒するのに対して、トランザクションを開始する第1コンピュータ12は、第2コンピュータ12がプロセスを完了する準備ができるまで、ほぼ無期限にスリープのままとどまることができる。
装置間の効率的な非同期通信を可能にするために重要な機能は、何らかの種類の肯定応答信号または条件であると考えられる。従来技術では、装置間の大部分の通信がクロック同期されており、受信側装置が適切にデータを受信したことを送信側装置が知るための直接的な方法はない。データが正しく受信されたことを保証するのを試みるためにチェックサムオペレーションなどの方法を使用することもできたが、送信側装置は、動作が完了したという直接的な表示を有さない。本明細書に記載のこの方法は、装置間の非同期通信を可能にし、または少なくとも現実的にする、必要な肯定応答条件を提供する。さらに、肯定応答条件は、1つまたは複数の装置が肯定応答条件が生じるまで「スリープに移る」ことをも可能にする。もちろん、コンピュータ12間で送信されている別々の信号によってコンピュータ12間で肯定応答条件を通信することができる(データバス16を介して、または別々の信号線を介して)。しかし、通信を実際に実施するために、肯定応答のための方法がどんな追加の信号、クロックサイクル、タイミングパルスも必要とせず、説明したもの以上のそのようなどんな資源も必要としないという点で、ここではさらに節約が関係することを理解することができる。
それらを実施する手順および手段の上記の議論に照らして、以下のバックグラウンド方法の一例の簡潔な説明がここで理解される。図6は、この方法例を示すフロー図74である。「通信開始」オペレーション76では、あるコンピュータ12が命令52を実行し、命令52は、そのコンピュータ12に別のコンピュータ12と通信することを試みさせる。これは、書込みの試行でもまたは読取りの試行でもよい。「通信開始」オペレーション76と概して同時に行われる、「第1線を「ハイ」にセット」オペレーション78では、(第1コンピュータ12が読取りを試みているか、それとも書込みを試みているかに応じて)読取り線18または書込み線20が「ハイ」にセットされる。本明細書で先に詳細に説明したように、「第1線を「ハイ」にセット」オペレーション78の一部として、そのように行うコンピュータ12は、オペレーションの現在説明している実施形態に従って、オペレーションを中止する。「第2線を「ハイ」にセット」オペレーション80では、第2線(書込み線20または読取り線18)が第2コンピュータ12によって「ハイ」にセットされる。「データを通信オペレーション」82では、データ(または命令など)がデータ線22を介して送信および受信される。「線を「ロー」に引き下げ」オペレーション84では、読取り線18および書込み線20が解放され、次いで「ロー」に引き下げられる。「続行」オペレーション86では、肯定応答条件がコンピュータ12にそれらのオペレーションを再開させる。この例の場合、肯定応答条件は肯定応答信号88(図5)を引き起こし、この場合は肯定応答信号88は、単に肯定応答線72の「「ハイ」」条件である。
第2のバックグラウンド例について、図7は、図1および2のコンピュータ12のコンピュータアレイ10の区域100を示す詳細図である。しかし、区域100が第1バックグラウンド例の技術を基に構築されることを強調するために、コンピュータ(ノート、コアなど)をCPU12と呼ぶ。
図7からわかるように、中央CPU12eが、隣接するCPU12a、12b、12c、および12dにそれぞれのデータバス16を介して接続され、データバス16はそれぞれ、読取り線18、書込み線20、および18本のデータ線22を含む。しかし、CPU12では、バス16は内部的に接続され、複数のポート38(図3)を同時に読み取るべき場合、未定義のハードウェア状態を生み出すことができる。そのような状況からの回復を可能にするために、この条件はソフトウェア設計に反映されるべきである。
CPU12eは、それ自体のメモリ102(例えば図3に示されるRAM24およびROM26)を有し、メモリ102は、それ自体のソフトウェア104を含むことができる。CPU12eは、オペレーションのための操作ポインタを保有するための1組のレジスタ40も有することができる。これらは、データオペレーション用のAレジスタ40aおよびBレジスタ40bと、プログラムポインタを保持するためのPレジスタ40cと、I/O制御およびステータスレジスタ(IOCSレジスタ40d)を含む(図3も参照)。
図8a〜fは、図7の区域100のCPU12で使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。図8aは、レジスタ40内のハイアドレスビット108が「1」にセットされたときに、レジスタ40が通常はポート38のうちの1つまたは複数をアドレス指定することを示す。逆に、図示していないが、ハイアドレスビット108が「0」であるとき、レジスタ40は、メモリ102内の位置をアドレス指定している。ハイアドレスビット108が「ハイ」にセットされるとき、次の8ビットは選択ビット110として働き、次いで選択ビットは、特定のどのポート38が選択され、それを読み取るべきか、それとも書き込むべきかを指定する。したがって、CPU12e内のレジスタ40では、「Right」は、隣接する右側または東側のCPU12aを示し、「Down」は、隣接する下側または南側のCPU12bを示し、「Left」は、隣接する左側または西側のCPU12cを示し、「Up」は、隣接する上側または北側のCPU12dを示す。アクション「RR」に関してセットされる選択ビット110は、保留中の読取り要求を示し、アクション「WR」に関してセットされる選択ビット110は、保留中の書込み要求を示す。
整合性と、混乱を最小限に抑えるために、「ハイ」値または「1」が真条件を示し、「ロー」値または「0」が偽条件を示すという一般的規約を守る。しかし、これは要件ではなく、代替規約を使用することができる。例えば、CPU12の現在のところ好ましいある実施形態は、RRビット位置では真に対して「0」を使用し、WRビット位置では真に対して「1」を使用する。
ちなみに、このポートアドレス復号化手法は、ハイアドレスビット108を「1」にセットし、選択ビット110のいずれもセットしないことも可能にすることに留意されたい。有益なことに、このことを使用して、CPU12内の別の要素をアドレス指定することができる。例えば、IOCSレジスタ40dをこの方式でアドレス指定することができる。
CPU12のこの実施形態では、IOCSレジスタ40dは、ポート38の読取り線18および書込み線20の現ステータスをレポートするのに同一のポートアドレス構成を使用する。これにより、I/Oオペレーションのステータスをプログラム式にテストすることを可能にするのにIOCSレジスタ40d内のこうしたそれぞれのビットが有用なものとなる。例えば、CPU12eにCPU12bからの非同期読取りを委ねて、CPU12bがまだ共有書込み線20を「ハイ」にセットしていない場合にCPU12eがスリープに移ることになるのではなく、CPU12eは、IOCSレジスタ40d内のビット13(Down/WR)の状態(CPU12bをCPU12eに接続する書込み線20の状態を反映する)をテストし、レディデータに分岐し、CPU12bからレディデータを直ちに読み取るか、または別の命令に分岐し、別の命令を直ちに実行することができる。
図8bは単純な第1の例を示す。ここでは、Right/RRに関する選択ビット110がセットされ、ポート38bが読み取られるべきであることを示す。図8cは単純な第2の例を示す。ここでは、Right/WRに関する選択ビット110がセットされ、この場合、ポート38bが書き込まれるべきことを示す。
通常、1つの選択ビット110のみがイネーブルされ、単一ポート38および任意の所与の時間での単一動作(読取りまたは書込み)が指定される。次いで、複数のハイビットはエラー条件として復号化される。しかし、本明細書で開示される新規な手法は、この規約に従わない。むしろ、有益なことに、ポート38に関する選択ビット110のうちの複数を同時にイネーブルすることができ、複数の読取りおよび/または書込みオペレーションを要求する。そのような場合、新しいデータが存在するという信号を含むデータがそれぞれのポート38のすべてに対して提示される。
図8d〜fは、複数の読取りおよび/または書込みオペレーションの例を示す。図8dは、CPU12e内のレジスタ40がどのようにCPU12bからの読取りとCPU12aへの書込みを同時に指定することができるかを示す。図8eは、CPU12bからの読取りとCPU12cへの書込みをどのように同時に指定することができるかを示す。図8fは、CPU12bからの読取りと、CPU12aまたはCPU12cへの書込みを指定することを示す(予示として、図8d〜fを、図9およびそこでの矢印132および134で表されるデータ転送経路と比較することができる)。
実際には、複数の書込み中に、CPU12eはデータを提示し、ターゲットCPU12a、12b、12c、または12dのうちの1つまたは複数と共有するバス16上で書込み線20を「ハイ」にセットする。次いでソースCPU12eは、データが読み取られたという表示を受信するまで待機する。ある最終的な時点で、恐らくは、ターゲットCPU12a、12b、12c、または12dのうちの1つまたは複数が、CPU12eと共有するバス16上でそのそれぞれの読取り線18を「ハイ」にセットする。次いで、ターゲットCPU12はデータを正式に読み取り、CPU12eと共有するバス16上でそれぞれの読取り線18と書込み線20をどちらも「ロー」に引き下げ、したがってCPU12eからのデータの受信を肯定応答する。
図9は、図7および図8d〜fに示される複数書込み手法を1つのデータ語120内に最大で4つの命令を含める能力とどのように組み合わせることができるかを示す概略ブロック図である。各命令は通常は5ビットであり、したがって18ビット幅のデータ語120は、約4つの命令を保持することができる。その場合、最後の命令は3ビットのみとなる可能性があるが、これは多くの命令にとって十分である。この特に有益な一態様は、非常に効率的なデータ転送機構を使用することを可能にすることである。
以下では、@=fetch、!=storeであり、pが「プログラムカウンタ」またはPレジスタ40cを指す。@p+および!p+中の「+」は、レジスタ内容が別のレジスタまたはポートをアドレス指定する場合にレジスタ内容が増分されないことを除いて、実行後にレジスタ内のメモリアドレスを増分することを指す。したがって、これらの後者のケースでの「+」は、これらの命令を通常の@p命令および!p命令ではなく、「特別」なものとして区別する。
図9は、あるCPU12から別のCPU12にデータを転送する単一命令シーケンスプログラムを、データの読取りおよび書込みに使用されるPレジスタ40cのみと共にどのように18ビットデータ語120内に含めることができるかについての一例を提示する。ここで、「@p+」は、スロット0 54a内にロードされた命令122である。これは、Pレジスタ40cで指定される現アドレスから次の18ビットデータ語120をフェッチし、データ語120をデータスタック34上にプッシュするリテラルオペレーションである(かつ、一般には、Pレジスタ40c内のアドレスを増分するが、そのアドレスがレジスタまたはポートに関するものであるときにこれが行われないことを除く。またここでは、Pレジスタ40c内のハイアドレスビット108は、ポートが指定されていることを示す)。次に、「.」はスロット1 54b内にロードされた命令124である。これは、何も行わない単純なnopオペレーション(ノーオペレーション)である。次に、「!p+」は、スロット2 54cにロードされた命令126である。これは、データスタック34から上端のデータ語120をポップし、この18ビットデータ語120をPレジスタ40cで指定された現アドレスに書き込むストアオペレーションである。Pレジスタ40cで指定されたアドレスは変化しておらず、単に機能的に、別個の隣接するCPU12にアクセスさせることに留意されたい。最後に「unext」は、スロット3 54dにロードされる命令128である。これは、リターンスタック28の上端が0であるかどうかに応じて異なる仕方で動作するmicro−nextオペレーションである。リターンスタック28が0でないとき、micro−nextはリターンスタック28を減分させ、実行のために、現在キャッシュされているデータ語120のスロット0 54a内の命令(すなわちここでの例では命令122)に進む。具体的には、ここでのmicro−nextの使用は新しいデータ語120をフェッチすることを必要としないことに留意されたい。対照的に、リターンスタック28が0であるとき、micro−nextは、Pレジスタ40cで指定された現アドレスから次のデータ語120をフェッチし、新しいデータ語120のスロット0 54a内の命令で実行を開始させる。
この特定の例では、Pレジスタ40cに101100000bをロードすることができ、リターンスタック28の上端は101b(10進数の5)を含むことができる。Pレジスタ40cは101100000bを含むので(例えば、図8aおよび8dを参照)、ここでの命令122内の「@p+」は、CPU12eに(そのポート38bを介して)CPU12bから次のデータ語120を読み取り、そのデータ語120をデータスタック34上にプッシュするように命令する。しかし、Pレジスタ40c内のアドレスはポートに関するものであるので、そのアドレスは増分されない。ここでの命令124内の「.」nopは単にフィラーであり、現データ語120の18ビットを満たす働きをする。次に、Pレジスタ40cは依然として101100000bを含むので、ここでの命令126内の「!p+」は、CPU12eにデータスタック34の上端のデータ語120(命令122によってプットされたのとまさに同じデータ語120)をポップオフし、そのデータ語120を(ポート38aを介して)CPU12a書き込むように命令する。この場合も、アドレスがポートに関するものであるので、Pレジスタ40c内のアドレスは増分されない。次いで、命令128内の「unext」が、リターンスタック28を100b(10進数の4)まで減分させ、実行のために命令122に進む。命令122、124、126、および128内の単一語プログラムはこの方式で続行し、リターンスタック28を011b、010b、001b、最終的には000b(10進数の0)に減分し、CPU12bから次のデータ語120をフェッチし、この新しいデータ語120のスロット0 54a内の命令を実行する。
要約すると、ここでの例におけるPレジスタ40cには、ソースと宛先(ポート38bおよび38a、したがってCPU12bおよび12a)の両方を指定する1つのアドレス値がロードされ、リターンスタック28には反復カウント(5)がロードされる。次いで5つのデータ語120がCPU12eを介して効率的に転送され(「パイプラインされる」)、次いでCPU12eは、やはりCPU12bによって提供される第6データ語120のスロット0 54a内の命令に進む。
様々な他の利点は、この単純であるが洗練された手法の使用から生じる。例えば、Aレジスタ40aおよびBレジスタ40bを使用する必要がなく、したがって他のデータ目的でそれらをCPU12eで利用することができる。これに続いて、データ転送を実施するときにポインタスワッピング(トラッシング)も省略することができる。
例えば、データパイプライン化のための従来型ソフトウェアルーチンは、ある時点で、入力ポートからデータを読み取り、別の時点で、データを出力ポートに書き込む。この場合、使用中のそれぞれの入力ポートおよび出力ポートへのポインタに加えて、メモリへの少なくとも1つのポインタが必要となる。ポートは異なるアドレスを有するので、ここで続行するための最も直接的な方式は、スタックに対する入力ポートアドレスにリテラル命令をロードし、そのアドレスをアドレス指定レジスタにプットし、入力ポートからの読取りを実施し、次いで、スタックに対する出力ポートのアドレスにリテラル命令をロードし、そのアドレスをアドレス指定レジスタにプットし、出力ポートに対する書込みを実施することである。
この手法での2つのリテラルロードはそれぞれ4サイクルかかり、2つのレジスタセット命令はそれぞれ1サイクルかかる。これは、入力ポインタおよび出力ポインタのまさに設定時にループの内部で費やされる合計10サイクルである。さらに、そのようなポインタスワッピングが必要となるときに追加のペナルティが存在する。ループの内部でメモリの3ワードが必要となり、したがって単一の18ビットワード内部に含まれるループの使用を可能にしないからである。したがって、この例での命令ループは、メモリアクセスを伴う分岐を必要とし、それにより、4サイクルの別のオーバヘッドが加えられ、合計のポインタ交換およびループオーバヘッドが少なくとも14サイクルとなる。
しかし対照的に、CPU12ではマルチポートアドレス指定が可能であるので、入力ポート38と出力ポート38の両方を選択するアドレスをI/Oループの外部にロードし、入力と出力の両方のために使用することができる。マルチポート読取り中に1つの隣接CPUのみからのデータが読み取られ、マルチポート書込み中に1つ隣接CPUのみが読み取るので、この手法は機能する。したがって、伝統的に入力ポインタおよび出力ポインタをセットするのに費やされるループの内部の14サイクルオーバヘッドが不要となる。ループは依然として読取り命令および書込み命令を有するが、ここでは同一のポインタを共に使用することができ、それを変更する必要がない。
このことは、マルチポート書込み技法の使用により、あるタイプのI/Oループのオーバヘッドを14サイクル(またはそれ以上)削減することができることを意味する。最良のケースでは、これにより、CPU12の処理ループで23サイクルから6サイクルまで削減が可能となるということが本発明者らの意見であった。1サイクルが約1ナノ秒かかる状況では、このことは、実効プロセッサ速度が43MHzから167MHzに増加することを表し、これはかなりの改善を表す。
少しの間、次に図8fおよび再度図9に進むと、これらは、単一語プログラムであっても複数書込みをどのように実施することができるかを示す。ここでは、CPU12eはCPU12bから読み取り、CPU12aまたはCPU12cのいずれかに書き込む。実際には、ここでのパイプライン処理は、CPU12aまたはCPU12cの最初に利用可能なものに対するものである。このことは、CPU12で可能な柔軟性が加わることを示し、本発明によるCPU12が以前は非常に困難または非現実的であると感じられた方式でどのように有用であるかについての単なる1つの可能な例である。
要約すると、CPU12は、ポート38の読取りおよびポート38へのジャンピングの両方を処理しなければならない。マルチポートアドレスから読み取り、またはマルチポートアドレスにジャンピングする際に、データまたは命令がどのポート38から得られるかは、明示的コードが実行されて発見されることなしには未知である(最も高速な方式は、ポート38が両方のCPU12について同一であることに依拠する)。伝統的には、このことは、回避すべき問題と理解されるはずである。異なるデータまたはコードが異なるポートから来るからである。しかし、仮定される協調的環境では、本発明者らは、すべてを利点に変える方法を見つけ出してきた。そしてこれがそのようなケースであった。
CPU12が複数ポートアドレスから実行し、アドレス指定された隣接CPU12のすべてが協調的に(すなわち、同期して)書込み中である場合、ある隣接CPU12は命令ストリームを供給中でよく、異なるCPU12はリテラルデータを提供する。リテラルフェッチ演算コード(@p+)は、異なる隣接するCPU12によって選択的に(すべてのリテラルがこれを行う必要はない)満たすことのできるPレジスタ40c内のマルチポートアドレスからの読取りを生じさせる。このことは単に、隣接するCPU12間の広範囲の「協調」を必要とする。
しかし、パイプラインマルチポート使用では、ある隣接CPU12が読取り中であり、あるCPU12が書込み中である場合、同一のマルチポートアドレスに対する読取りおよび書込みは問題を引き起こさない。この概念は、そのようなマルチポートアドレスへのジャンピングおよびリテラルストア演算コード(!p+)の実行により、Pレジスタ40cが、まったく安全に2つのポート38をアドレス指定することが可能となることである。これにより、Aレジスタ40aとBレジスタ40bの両方がローカル使用のために解放される。
データ(実際のデータまたはデータとして転送されている命令)が伝播するときに、CPU12に他の最適化を施すこともできる。図10〜12は一例を示し、現在の発明を提示する。
図10は、上述のマルチリード/マルチライトシステムで伝播が反転しないように保証するための処理規則1000の表である。規則1は直接的なものであり、各CPUがそのソースとして前のCPUを「見る」べきであるというものである。規則2および規則3は少し理解しにくいが、液体を搬送するパイプラインをCPUのパイプラインと比較することによって全般的に理解することができる。
規則2は、CPUのパイプラインが「ボトルネック」となることを回避する。明らかに、CPUのパイプラインがそれに供給されているデータについていけない場合、リアルタイムで動作できることにはならないことになる。そのことから、前のCPUが書込みの準備ができる前、またはまさにその瞬間に、各CPUが最適に読取りの準備ができているべきであるということになる。もちろん、このことは(図12a〜bが示すように)常に可能であるわけではないが、CPUをプログラムするときに、このことを目標として念頭に置いておくことは助けになる。図11は、一連の接続されたCPU1102、1104、1106、1108を介してデータが左から右に順次転送されるときの、一連の時刻での最適化されたパイプライン1100の状態を示すことによってこのことを示すブロック図である。時刻tでは、CPU1102はCPU1104に書き込み(W)、CPU1104、1106、1108はすべて読取り中である(R)。時刻t+1では、CPU1104がデータを有し、CPU1106、1108が読取り中にCPU1104はこれをCPU1106に書き込む。時刻t+2では、CPU1106がデータを有し、CPU1108が読取り中にCPU1106はこれをCPU1108に書き込む。
規則3は、CPUのパイプラインが「中断」するのを回避する(液体を搬送するパイプラインがここである程度損傷を受けるのと類似している)。図12a〜bは、規則3に従わない場合、次いで従う場合の両方の場合に、図11のパイプライン1100内のデータの初期フローをスタイリスティックに示す略図である(時間は左から右に進む)。
図12aは、従来の読取り(R)、処理(P)、および書込み(W)の順序のオペレーションが使用された場合に、パイプライン1100を通るデータフローを示す。オペレーションのすべては、実行のための最小限の時間を要するが(話を簡単にするためにここでは同じものとして示した)、読取り(R)および書込み(W)オペレーションは、対応する書込み(W)または読取り(R)が行われるのを待機する間に、最小限を超える追加の時間を必要とする可能性がある。手元のタスクに応じて、プロセス(P)オペレーションのための時間はかなり変化し、非同期CPUでは特にそうである。したがって、実際の応用例では、プロセス(P)オペレーションは通常、ここで示すよりも長い時間がかかり、図12aと共に示されるそのような問題は悪化する可能性が高い。
図12aでは、反転1112が示される。書込みオペレーション1114がここで開始したとき、2つの読取りオペレーション1116、1118が待機中であり、CPU1108がCPU1106に書き込む。さらにパイプライン1100では、このことがさらに悪化する可能性がある。例えば、CPU1108が書込みを開始するとき、CPU1110が処理または書込みでビジーである可能性があり、次いでCPU1106のみが読取りを試みていることがある。反転1112はほぼ確実にパイプライン1100のプログラマが望むことまたは期待することではなく、計算の正確さを破壊し、またはパイプライン1100が実行中のアプリケーションをクラッシュさせる可能性が高い。
図12aはまた、反転1112が、CPU1110が作業を開始するためにデータの読取り(すなわち、待機中)に費やす時間をどれほど大幅に増すことになるかも示している。しかし、そのことについて、図12aと図12bとを比較することからわかるように、図12aのパイプライン1100全体にわたるタイミングが、他の点でも最適以下である可能性がある。
図12bは、読取り(R)、書込み(W)、およびプロセス(P)の順序のオペレーションが使用される場合の、パイプライン1100を通るデータフローを示す。ここからわかるように、反転は存在せず、CPU1102、1104、1106、1108、1110はすべて、可能な限り早く、データを受信して作業を開始する。
図12bに示す接合1120は、ここでのパイプライン1100の有用な追加の特徴を示す(これらは分岐オペレーションと混同するはずである)。CPUでの読取り(R)および書込み(W)オペレーションの後、例えばCPU1102を取り上げると、CPU1104に書き込まれたばかりのデータは必ずしもCPU1102から来たものではない。したがって、このデータは、CPU1102での後続プロセス(P)オペレーションが共に作業するために利用可能とすることができる。このことは、同一の値でCPUを初期化する(例えば、記憶位置を0にする、またはカウンタをリセットする)のに有用である。さらに、あるクラスのアルゴリズムは、このことによって益を受けることができる。例えば、単一のデータサンプルが複数のCPUに提示され、次いでそれぞれで異なる係数値に対して処理される場合である。
交替で、CPU1102、1104、1106、1108、1110のそれぞれが、パイプライン中のすべてのCPUがデータを有するまで、初期読取り(R)、書込み(W)、および単一nop命令をプロセス(P)として使用することによって異なる第1データ値を備えることができ、それを用いて、それらのCPUがすべて、実際の処理を並列に実行する。
本発明の実施形態に対して、その価値または範囲を変更することなく様々な追加の変更を行うことができる。例えば、本明細書では読取り命令および書込み命令に関して本発明を説明したが、実際には、複数の読取り型命令および/または複数の書込み型命令が存在することができる。ほんの一例として、コンピュータ12の一実施形態では、レジスタを増分する書込み命令と、レジスタを増分しない別の書込み命令が存在することができる。同様に、本明細書で先に論じたように、書込み命令は、通信ポート38などを選択するのにどのレジスタ40が使用されるかに従って変化することができる。コンピュータ12の設計者がどの変形形態を代替の読取り挙動の有用な選択肢とみなすかということのみに応じて、いくつかの異なる読取り命令も存在することができる。
同様に、本明細書では単一ダイ14上のアレイ10内のコンピュータ12間の通信に関して本発明の実施形態を説明したが、コンピュータ12とその専用メモリとの間の通信、またはアレイ10内のコンピュータ12と外部装置との間の(入力/出力ポートなどを介する)通信などの他の装置間通信を実施するのに、同じ原理および方法を使用することができ、または使用のために変更することができる。実際に、いくつかの応用例は、アレイのアレイを必要とする可能性があることが予想され、現在説明する装置間通信方法は、潜在的にアレイのアレイ間の通信に適用可能である。
コンピュータアレイ10およびコンピュータ12の特定の例と、規則1000の特定の例を本明細書で説明したが、まだ想定されていないものに対する非常に多数の応用例が存在することが予期される。実際、本発明の利点の1つは、本発明の方法および装置を非常に様々な用途に適合させることができることである。
本発明はまた、一連のコンピュータ上で実行されるときに、本明細書の上記で説明した本発明の方法をその一連のコンピュータに実施させるコンピュータプログラムを提供する。プログラムはキャリア上でよい。キャリアは信号またはストアでよい。ストアは、他の例の中でもとりわけ、記録媒体またはメモリ装置でよい。
上記のすべては、本発明の利用可能な実施形態の例のほんのいくつかに過ぎない。本発明の精神および範囲から逸脱することなく、多数の他の修正および変更を行えることを当業者は容易に観察するであろう。したがって、本明細書の開示は限定として意図されるものではなく、添付の特許請求の範囲は、本発明の範囲全体を包含するものとして解釈すべきである。
本発明によるコンピュータアレイの図である。 図1のコンピュータのサブセットを示す詳細な図と、図1の相互接続データバスの詳細な図である。 図1および2のコンピュータのうちの1つの一般的レイアウトを示すブロック図である。 図1および2のコンピュータで使用可能な命令語の図式表現である。 図3のスロットシーケンサの略図表現である。 本発明による方法の一例を示すフロー図である。 本発明による例示的実施形態を論じるのに使用される図1および2のコンピュータアレイの区域を示す詳細図である。 図7の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。 図7の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。 図7の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。 図7の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。 図7の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。 図7の区域内のコンピュータで使用可能なポートアドレス復号化の概要を示すテーブルダイアグラムである。 図7および図8d〜fに示される複数書込み手法を単一の命令語内に複数の命令を含める能力とどのように組み合わせることができるかを示す概略ブロック図である。 上述のマルチリード/マルチライトシステムで伝播が反転しないように保証するための処理規則の表である。 一連の接続されたCPUを介してデータが左から右に順次転送されるときの、一連の時刻での最適化されたパイプライン1100の状態を示すブロック図である。 図11のパイプライン中のデータの初期フローをスタイリスティックに示す略図であり、規則3に従わない場合に生じる反転を示す図である。 図11のパイプライン中のデータの初期フローをスタイリスティックに示す略図であり、規則3に従う場合に反転が発生することなくパイプラインを通るデータフローを示す図である。

Claims (15)

  1. データを処理する一連のコンピュータのための方法において、前記一連のコンピュータは第1コンピュータおよび最終コンピュータを含み、前記第1コンピュータを除く前記コンピュータのそれぞれが前のコンピュータに先行され、前記最終コンピュータを除く前記コンピュータのそれぞれに後続のコンピュータが続く方法であって、
    現コンピュータと考えられる前記コンピュータのそれぞれで、
    (a)前記現コンピュータで新データを読み取ること、
    (b)前記(a)の後、現コンピュータで旧データを書き込むこと、
    (c)前記(b)の後、前記現コンピュータで前記新データを処理し、前記旧データを生成すること、
    (d)前記(c)の後、前記現コンピュータが前記最終コンピュータではない場合、前記現コンピュータ内に前記旧データを保持すること
    を備えることを特徴とする方法。
  2. 前記(a)は、前記前のコンピュータから前記旧データを前記新データとして読み取ることを含み、または前記第1コンピュータの場合、前記一連のコンピュータの外部からデータを前記新データとして読み取ることを含むことを特徴とする請求項1に記載の方法。
  3. 前記(b)は、前記旧データを前記後続のコンピュータに書き込むことを含み、または前記最終コンピュータの場合、前記旧データを前記一連のコンピュータの外部に書き込むことを含むことを特徴とする請求項1または2に記載の方法。
  4. 前記一連のコンピュータは、相互通信のために2つ以上の次元でデータ経路と接続されたコンピュータのアレイであることを特徴とする請求項1、2または3に記載の方法。
  5. プログラム式にセット可能なビットで少なくとも前記前のコンピュータおよび前記後続のコンピュータに対して前記データ経路をアドレス指定し、それによって前記現コンピュータは、前記ビットのどれが同時にセットされているかに基づいて、前記データ経路を介して通信することができること
    をさらに備えることを特徴とする請求項4に記載の方法。
  6. 前記(a)は、前記ビットによって同時に指定されている複数の前記コンピュータのうちの1つから前記新データを読み取ることを含むことを特徴とする請求項5に記載の方法。
  7. 前記(b)は、前記ビットによって同時に指定されている複数の前記コンピュータのうちの1つに前記旧データを書き込むことを含むことを特徴とする請求項5または6に記載の方法。
  8. 前記(a)は、スタックに対して前記新データをプッシュすることを含み、
    前記(b)は、スタックから前記旧データをポップオフすることを含む
    ことを特徴とする請求項1乃至7のいずれか一項に記載の方法。
  9. データを処理する一連のコンピュータであって、
    前記一連のコンピュータは、第1コンピュータおよび最終コンピュータを含み、前記第1コンピュータを除く前記コンピュータのそれぞれが前のコンピュータに先行され、前記最終コンピュータを除く前記コンピュータのそれぞれに後続のコンピュータが続き、前記コンピュータはそれぞれ、
    第1データ経路を介して新データを読み取るロジックと、
    第2データ経路を介して旧データを書き込むロジックと、
    前記新データを処理して前記旧データを生成するロジックと、
    前記最終コンピュータを除いて、前記旧データを格納する記憶素子と
    を備え、
    前記書き込むロジックは、前記読み取るロジックの後に動作し、前記書き込むロジックは、前記新データを処理して旧データを生成するロジックの前に動作することを特徴とする一連のコンピュータ。
  10. 前記読み取るロジックは、前記前のコンピュータから前記旧データを前記新データとして読み取り、または第1コンピュータの場合、前記一連のコンピュータの外部からデータを前記新データとして読み取ることを特徴とする請求項9に記載の一連のコンピュータ。
  11. 前記書き込むロジックは、前記旧データを前記後続のコンピュータに書き込み、または前記最終コンピュータの場合、前記旧データを前記一連のコンピュータの外部に書き込むことを特徴とする請求項9または10に記載の一連のコンピュータ。
  12. 前記一連のコンピュータは、前記第1データ経路のうちの複数および前記第2データ経路のうちの複数と、2つ以上の次元で接続されたコンピュータのアレイであることを特徴とする請求項9、10または11に記載の一連のコンピュータ。
  13. 前記データ経路のそれぞれをアドレス指定するようにプログラム式にセット可能であるビットを有するレジスタをさらに備え、それによって前記コンピュータは、前記ビットのどれが同時にセットされているかに基づいて、前記データ経路のうちの複数を介して通信することができ、それによって前記レジスタ内の単一アドレスが、前記データに対するソースおよび宛先のどちらも表すことを可能にすることを特徴とする請求項12に記載の一連のコンピュータ。
  14. 前記読み取るロジックは、スタックに対して前記新データをプッシュし、
    前記書き込むロジックは、前記スタックから前記旧データをポップオフする
    ことを特徴とする請求項9乃至13のいずれか一項に記載の一連のコンピュータ。
  15. 一連のコンピュータ上で実行されたとき、請求項1から8のうちの一項の方法を前記一連のコンピュータに実施させることを特徴とするコンピュータプログラム。
JP2008114110A 2007-04-27 2008-04-24 一連のコンピュータでデータを処理するシステムおよび方法 Pending JP2009009549A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/741,659 US20080270751A1 (en) 2007-04-27 2007-04-27 System and method for processing data in a pipeline of computers
US11/741,649 US7555637B2 (en) 2007-04-27 2007-04-27 Multi-port read/write operations based on register bits set for indicating select ports and transfer directions

Publications (1)

Publication Number Publication Date
JP2009009549A true JP2009009549A (ja) 2009-01-15

Family

ID=39642737

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008114110A Pending JP2009009549A (ja) 2007-04-27 2008-04-24 一連のコンピュータでデータを処理するシステムおよび方法

Country Status (6)

Country Link
US (1) US20080270751A1 (ja)
EP (1) EP1986094A1 (ja)
JP (1) JP2009009549A (ja)
KR (1) KR20080096485A (ja)
TW (1) TW200849027A (ja)
WO (1) WO2008133979A2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937557B2 (en) 2004-03-16 2011-05-03 Vns Portfolio Llc System and method for intercommunication between computers in an array
US7966481B2 (en) 2006-02-16 2011-06-21 Vns Portfolio Llc Computer system and method for executing port communications without interrupting the receiving computer
US9684632B2 (en) * 2009-06-04 2017-06-20 Micron Technology, Inc. Parallel processing and internal processors
US10372636B2 (en) * 2016-11-18 2019-08-06 International Business Machines Corporation System for changing rules for data pipeline reading using trigger data from one or more data connection modules
US11960438B2 (en) 2020-09-08 2024-04-16 Rambus Inc. Methods and circuits for streaming data to processing elements in stacked processor-plus-memory architecture

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3868677A (en) * 1972-06-21 1975-02-25 Gen Electric Phase-locked voltage-to-digital converter
US4215401A (en) * 1978-09-28 1980-07-29 Environmental Research Institute Of Michigan Cellular digital array processor
US4593351A (en) * 1981-06-12 1986-06-03 International Business Machines Corporation High speed machine for the physical design of very large scale integrated circuits
US4665494A (en) * 1982-12-17 1987-05-12 Victor Company Of Japan, Limited Spectrum display device for audio signals
US4739474A (en) * 1983-03-10 1988-04-19 Martin Marietta Corporation Geometric-arithmetic parallel processor
US4672331A (en) * 1983-06-21 1987-06-09 Cushing Vincent J Signal conditioner for electromagnetic flowmeter
US4742511A (en) * 1985-06-13 1988-05-03 Texas Instruments Incorporated Method and apparatus for routing packets in a multinode computer interconnect network
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
US4789927A (en) * 1986-04-07 1988-12-06 Silicon Graphics, Inc. Interleaved pipeline parallel processing architecture
US4868745A (en) * 1986-05-30 1989-09-19 Hewlett-Packard Company Data processing system and method for the direct and indirect execution of uniformly structured object types
US5222237A (en) * 1988-02-02 1993-06-22 Thinking Machines Corporation Apparatus for aligning the operation of a plurality of processors
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
JPH0457068A (ja) * 1990-06-27 1992-02-24 Minolta Camera Co Ltd 画像形成装置
US5765015A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Slide network for an array processor
US5434989A (en) * 1991-02-19 1995-07-18 Matsushita Electric Industrial Co., Ltd. Cache memory for efficient access with address selectors
CA2073516A1 (en) * 1991-11-27 1993-05-28 Peter Michael Kogge Dynamic multi-mode parallel processor array architecture computer system
JPH0713945A (ja) * 1993-06-16 1995-01-17 Nippon Sheet Glass Co Ltd 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造
JP3308770B2 (ja) * 1994-07-22 2002-07-29 三菱電機株式会社 情報処理装置および情報処理装置における計算方法
US5630154A (en) * 1994-10-11 1997-05-13 Hughes Aircraft Company Programmable systolic array system arranged in a found arrangement for passing data through programmable number of cells in a time interleaved manner
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
US6353880B1 (en) * 1998-07-22 2002-03-05 Scenix Semiconductor, Inc. Four stage pipeline processing for a microcontroller
EP0992896A1 (en) * 1998-10-06 2000-04-12 Texas Instruments Inc. Pipeline protection
WO2003019356A1 (en) 2001-08-22 2003-03-06 Adelante Technologies B.V. Pipelined processor and instruction loop execution method
US7581081B2 (en) * 2003-03-31 2009-08-25 Stretch, Inc. Systems and methods for software extensible multi-processing
US7162573B2 (en) * 2003-06-25 2007-01-09 Intel Corporation Communication registers for processing elements
US7257560B2 (en) * 2003-07-31 2007-08-14 Cisco Technology, Inc. Cost minimization of services provided by multiple service providers
US20050206648A1 (en) * 2004-03-16 2005-09-22 Perry Ronald N Pipeline and cache for processing data progressively
US7937557B2 (en) * 2004-03-16 2011-05-03 Vns Portfolio Llc System and method for intercommunication between computers in an array
EP1821211A3 (en) * 2006-02-16 2008-06-18 Technology Properties Limited Cooperative multitasking method in a multiprocessor system
US7904615B2 (en) * 2006-02-16 2011-03-08 Vns Portfolio Llc Asynchronous computer communication

Also Published As

Publication number Publication date
WO2008133979A2 (en) 2008-11-06
US20080270751A1 (en) 2008-10-30
TW200849027A (en) 2008-12-16
KR20080096485A (ko) 2008-10-30
EP1986094A1 (en) 2008-10-29
WO2008133979A3 (en) 2009-02-12

Similar Documents

Publication Publication Date Title
US7904615B2 (en) Asynchronous computer communication
US7904695B2 (en) Asynchronous power saving computer
JP2009009550A (ja) データの通信
EP1990718A1 (en) Method and apparatus for loading data and instructions into a computer
US20100281238A1 (en) Execution of instructions directly from input source
JP2009009549A (ja) 一連のコンピュータでデータを処理するシステムおよび方法
US8468323B2 (en) Clockless computer using a pulse generator that is triggered by an event other than a read or write instruction in place of a clock
US7934075B2 (en) Method and apparatus for monitoring inputs to an asyncrhonous, homogenous, reconfigurable computer array
EP1821199A1 (en) Microloop computer instructions
US20100325389A1 (en) Microprocessor communications system
EP1821217B1 (en) Asynchronous computer communication
WO2007098024A2 (en) Allocation of resources among an array of computers