JP2002530736A5 - - Google Patents
Download PDFInfo
- Publication number
- JP2002530736A5 JP2002530736A5 JP2000582884A JP2000582884A JP2002530736A5 JP 2002530736 A5 JP2002530736 A5 JP 2002530736A5 JP 2000582884 A JP2000582884 A JP 2000582884A JP 2000582884 A JP2000582884 A JP 2000582884A JP 2002530736 A5 JP2002530736 A5 JP 2002530736A5
- Authority
- JP
- Japan
- Prior art keywords
- job
- memory
- speculation
- pointer
- signal
- 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.)
- Granted
Links
- UIIMBOGNXHQVGW-UHFFFAOYSA-M buffer Substances [Na+].OC([O-])=O UIIMBOGNXHQVGW-UHFFFAOYSA-M 0.000 description 89
- 230000000875 corresponding Effects 0.000 description 30
- 238000004891 communication Methods 0.000 description 20
- 238000000034 method Methods 0.000 description 13
- 230000005540 biological transmission Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 5
- 229920002803 Thermoplastic polyurethane Polymers 0.000 description 4
- 241000135164 Timea Species 0.000 description 2
- 230000001276 controlling effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006011 modification reaction Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 241000687904 Soa Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000903 blocking Effects 0.000 description 1
- 238000011030 bottleneck Methods 0.000 description 1
- 230000003111 delayed Effects 0.000 description 1
- 230000001419 dependent Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000002093 peripheral Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003068 static Effects 0.000 description 1
- 230000001360 synchronised Effects 0.000 description 1
- 230000001702 transmitter Effects 0.000 description 1
Images
Description
【書類名】 明細書
【発明の名称】 多重処理システムにおける改良結果処理方法
【特許請求の範囲】
【請求項1】 プロセッサ・システムにおいて、
‐入出力装置(10)と、
‐複数のジョブを投機的に実行する多数のプロセッサ(30)と、
‐前記多数のプロセッサ(30)と前記入出力装置(10)とによって共有される共有メモリ(40、12)と、
‐複数のジョブに対し、一度には1つのジョブでコミット優先順位を割り当てる手段と、
‐投機的に実行したジョブの結果を保持するためにプライベート・メモリ・バッファを前記共有メモリ(40、12)に投機的に割り付ける手段と、
‐コミット優先順位が前記投機的に実行したジョブに割り当てられたときは、前記割り付けられたプライベート・メモリ・バッファを指示するポインタを前記入出力装置(10)に転送する手段と
を備えた処理システム。
【請求項2】 投機的に実行したジョブの結果は、通信メッセージの形式、オペレーティング・システム・コールの形式又は新しいジョブを表すジョブ信号の形式である請求項1記載の処理システム。
【請求項3】 前記入出力装置(10)は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラである請求項1記載の処理システム。
【請求項4】 前記プライベート・メモリ・バッファは、前記入出力装置(10)が前記転送されたポインタにより前記結果をアクセスできるように、前記処理システムのメイン・メモリ(40)内、又はプロセッサ(30)と前記入出力装置(10)によって共有される他のメモリ内、に存在する請求項1記載の処理システム。
【請求項5】 各プロセッサは、自己プライベート・プール(45)のバッファを有し、このプライベート・プールに対して、複数のメモリ・バッファを割り付ける、又は割り付け解除する請求項1記載の処理システム。
【請求項6】 更に、前記プライベート・プール(45)におけるバッファのハイ又はローレベルの利用に応じて、プライベート・プール(45)のバッファを共通プールのバッファからの更なるバッファで補充し、かつ前記プライベート・プール(45)からバッファを前記共通プールに開放する手段を備えている請求項5記載の処理システム。
【請求項7】 各プロセッサは、プール(45)のメモリ・バッファ内に空きメモリ・バッファに対するポインタの自己リスト(32)を有し、かつ前記バッファ割り付け手段は、前記対応するプロセッサのリストの先頭からポインタをフェッチすることにより、投機的に実行したジョブの結果を保持するためのメモリ・バッファを割り付ける請求項1記載の処理システム。
【請求項8】 更に、
‐前記投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出する手段(35)と、
‐検出された依存性に応答して前記投機的に割り付けられたメモリ・バッファを割り付け解除する手段と
を備えた請求項1記載の処理システム。
【請求項9】 前記転送する手段は、前記投機的に実行したジョブにコミット優先順位を割り当てるときは、メモリ手段(46)に前記ポインタを書き込み、前記入出力装置(10)によりポインタについて前記メモリ手段をチェックする手段を備えている請求項1記載の処理システム。
【請求項10】 前記入出力装置(10)は、ポインタについて前記メモリ手段(46)を定期的にポーリングするネットワーク・コントローラであり、前記ネットワーク・コントローラは、ポインタを見出したときは、前記ポインタに関連した前記プライベート・メモリ・バッファから取り出した通信メッセージを送出する請求項9記載の処理システム。
【請求項11】 前記メモリ手段(46)は、前記処理システムのメイン・メモリ(40)に割り付けられたリング構造であり、かつ前記ポインタは、前記リング構造(46)の位置に書き込まれる請求項9記載の処理システム。
【請求項12】 更に、前記ポインタをメモリ手段(WO)に投機的に書き込む手段を備え、かつ前記転送手段は、コミット優先順位が前記投機的に実行したジョブに割り当てられたときに、前記メモリ手段(WO)から前記入出力装置(10)に前記ポインタを転送する請求項1記載の処理システム。
【請求項13】 前記メモリ手段(WO)は、前記処理システムのメイン・メモリ(40)にハードウェア・キューとして実施された、又は割り付けられた、書き込みキューである請求項12記載の処理システム。
【請求項14】 ‐前記入出力装置(10)は、前記多数のプロセッサにより処理するジョブ信号スケジューラ・スケジューリング・ジョブ信号であり、
‐前記割り付け手段は、プライベート・メモリ・バッファをジョブ信号メモリ(12)を投機的に割り付けて投機的に実行したジョブにより発生した新しいジョブ信号を保持し、前記対応するポインタは、メモリ手段(WO)に投機的に書き込まれ、
‐前記転送手段は、コミット優先順位が前記投機的に実行したジョブに割り当てられたときは、前記メモリ手段(WO)から前記入出力装置(10)に転送して前記新しいジョブ信号のスケジューリングを可能にさせる
請求項1記載の処理システム。
【請求項15】 各ジョブ信号及びその対応するポインタは、優先順位レベル情報に関連され、かつ前記入出力装置(10)は、
‐到着の順序及び前記優先順位レベル情報に従って複数のポインタをストアしてスケジューリング順序を得るポインタ・メモリ(13)と、
‐前記ポインタ・メモリ(13)におけるスケジューリング順序に従い前記多数のプロセッサ(30)により処理するために、前記ジョブ信号メモリ(12)からのジョブ信号を転送する手段と
を備えた請求項14記載の処理システム。
【請求項16】 前記転送手段は、前記ポインタ・メモリ(13)に前記ポインタを転送して前記ポインタを前記スケジューリング順序に配置する請求項15記載の処理システム。
【請求項17】 処理システムにおける結果を処理する方法において、
‐多数のプロセッサ(30)によって、並列に複数のジョブを投機的に実行するステップ(101)と、
‐複数のジョブに対し、一度には1つのジョブで優先順位を割り付けるステップと、
‐投機的に実行したジョブの結果を保持するために、プロセッサ(30)と前記処理システムの入出力装置(10)によって共有されるメモリ内に、プライベート・メモリ・バッファを投機的に割り付けるステップ(102)と、
‐コミット優先順位が投機的に実行したジョブに割り付けられたときに、入出力装置(10)に割り付けメモリ・バッファを指示するポインタを転送し、前記入出力装置が転送されたポインタにより前記対応する割り付けメモリ・バッファをアクセスするステップ(105)と
を備えた結果を処理する方法。
【請求項18】 更に、
‐投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出するステップ(104)と、
‐投機的に実行したジョブについて依存性が検出されたときは、前記対応する投機的に割り付けられたメモリ・バッファを割り付け解除するステップ(106)と
を備えた請求項17記載の結果を処理する方法。
【請求項19】 前記投機的に実行したジョブの結果は、通信メッセージ、オペレーティング・システム・コール又は新しいジョブを表すジョブ信号の形式である請求項17記載の結果を処理する方法。
【請求項20】 前記入出力装置(10)は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラである請求項17記載の結果を処理する方法。
【請求項21】 前記転送する手段は、前記投機的に実行したジョブにコミット優先順位を割り当てるときは、メモリ手段に前記ポインタを書き込み、前記入出力装置によりポインタについて前記メモリ手段をチェックするステップを備えている請求項17記載の結果を処理する方法。
【請求項22】 更に、前記ポインタをメモリ手段(WO)に投機的に書き込むステップを備え、かつ前記転送ステップ(105)は、前記投機的に実行したジョブにコミット優先順位を割り当てられたときは、前記メモリ手段(WO)から前記入出力装置(10)に前記ポインタを転送することを含む請求項17記載の結果を処理する方法。
【請求項23】 前記投機的に実行したジョブは、多数のプロセッサ(30)により実行され、かつ前記方法は、更に、各プロセッサを自己プライベート・プール(45)のバッファと関連させるステップを備え、前記プロセッサは、このプライベート・プールに対して、メモリ・バッファを割り付ける、又は割り付け解除する請求項17記載の結果を処理する方法。
【請求項24】 処理システムにおいて、
‐複数のジョブを投機的に実行する多数のプロセッサ(30)と、
‐複数のジョブに対し、一度には1つのジョブでコミット優先順位を割り当てる手段と、
‐前記処理システムの前記メイン・メモリ(40)内にプライベート・メモリ・バッファを投機的に割り付けて、前記投機的に実行したジョブにコミット優先順位を割り当てられたときは、投機的に実行したジョブにより発生した新しい記録又はオブジェクトが前記メイン・メモリ(40)内の所定位置にあるように、投機的に実行したジョブにより発生した前記新しい記録又はオブジェクトを保持する手段と、
前記投機的に実行したジョブにコミット優先順位を割り当てたときは、前記割り付けられたプライベート・メモリ・バッファを指示するポインタを共有メモリに渡す手段と、
を備えた処理システム。
【請求項25】 更に、
‐前記投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出する手段(35)と、
‐検出された依存性に応答して前記投機的に割り付けられたメモリ・バッファを割り付け解除する手段と
を備えた請求項24記載の処理システム。
【発明の詳細な説明】
【0001】
(発明の技術分野)
本発明は、概して処理技術に関し、特に、多数のプロセッサ又は複数の処理ユニットを有する処理システムに関する。
【0002】
(発明の背景)
コンピュータ・システム又は処理システムにおける処理能力の改善に対する絶え間のない要求により、より高速かつより効率的なプロセッサが要求されている。処理能力を増大させる通常的なアプローチは、ますます高くした周波数及び高速のメモリを使用することによっている。
【0003】
特に、アプリケーション・ソフトウェアを変更することなく、処理システムの処理能力を増加させる通常的な方法は、隣接する命令間で見出される密並列性(fine−grained parallelism)を検出するいわゆるスーパースケーラを使用することである。スーパースケーラでは、いくつかの命令を並列に同時実行するようにプロセッサ内の機能ユニットを構成する。これは、しばしば命令レベルの並列性(instruction−level parallelism)と呼ばれる。
【0004】
処理能力を増加させる他の方法は、処理システムを多数のプロセッサシステム、即ち並列に動作する多数のプロセッサを有するプロセッサ・システムとして構築することである。いくつかの処理システムは、対称型マルチ・プロセッサ(Symmetrical Multi Processor:SMP)として知られたアーキテクチャーにより高いパフォーマンス処理を達成する。スーパースケーラ・プロセッサにより達成される密並列性(fine−grained parallelism)に対して、SMPアーキテクチャーは、現在のプログラミング原理により設計されたプログラムにおいて明確に指定された、又はコンパイル中に単一プロセッサ・システムによる逐次な実行用に設計されたプログラムから取り出される粗並列性(coarse−grained parallelism)を検出する。SMPアーキテクチャーでは、複数のタスクのそれぞれを複数のプロセッサのうちの対応するものによりを実行する。これらのタスクは、互に同時的な複数処理、即ち複数スレッド(thread)である。
【0005】
ソヒ(Sohi)、ブリーチ(Breach)及びビジャイクマル(Vijaykumar)によるマルチスカラー・プロセッサの論文(イタリア、サンタ・マルゲリータにおけるコンピュータ・アーキテクチャーに関する第22回年国際シンポジュウム)において、いわゆるマルチスカラー・プロセッサが説明されている。マルチスカラー・モデルの実行では、制御依存性の観点からスタティック・プログラムを表す制御フロー・グラフ(CFG:control flow graph)を複数のタスクに分割し、マルチスカラー・プロセッサがCFGを投機的に通り、タスク・サイズの複数ステップを取り込み、絶えずタスク内のあらゆる命令を調べる。タスクの初期プログラム・カウンタを処理ユニットに渡すことにより、実行する複数の処理ユニットの集合のうちの1つに一つのタスクが割り付けられる。そこで、多数のタスクが複数の処理ユニットにより並列に実行可能となり、1サイクル当たりの多数命令の総合実行率に帰結する。マルチスカラー・ハードウェアの機能は、CFGを通って、複数の処理ユニットに複数のタスクを割り付け、かつ逐次的に実行する形式により、これらのタスクを実行する。必要により、付加的なハードウェアを設けて投機的なメモリ動作を保持し、メモリ依存性の違反を検出し、訂正措置を開始する。先頭にあるタスクは、非投機的であると保証されたタスクのみであるから、先頭を除き、全てのユニットにより実行されるメモリ動作は、投機的である。
【0006】
米国特許第5,832,262号は、概して1スケジューリング・プロセッサとの連係により作動して1以上の他のプロセッサにより実行されるべき多数のタスクを管理するリアル・タイム・ハードウェア・スケジューラに関連する。このスケジューラは、2つのリアル・タイム・ハードウェア・スケジューリング・ユニットにより共有メモリ内の循環FIFOキュー管理し、そのうちの一つは、実行待ちタスクを管理し、その他は完了したタスクを管理する。スケジューリング・プロセッサは、新しいタスクをスケジュールする要求に基づいて、タスク制御ブロックを構築して、特定の共有メモリにおけるメモリ位置にそのブロックをストアすることにより、動作する。次いで、スケジューリング・プロセッサによって、その位置に対するポインタがリアル・タイム・ハードウェア・スケジューラに送信される。スレーブ・プロセッサは、実行待機タスクの共有メモリ内の位置に対するポインタを取り出すことができる。そこで、スレーブ・プロセッサは、ポインタを使用して実際のタスクを取り出し、そのタスクを実行し、スケジューラにタスク完了を通告する。従って、以上の特許は、通常のマルチタスク・システムにおける間接信号処理に関する。
【0007】
米国特許第5,781,763号は、複数の命令を投機的に実行するプロセッサを開示している。プロセッサは、命令レベルでの並列性が得られるように所定の複数動作に割り付けられた多数のスーパースケーラ実行ユニットを有する。
【0008】
米国特許第5,560,029号は、マルチ・スレディング(multi−threading)目的に使用される同期コプロセッサを有するデータ処理システムを開示している。
【0009】
米国特許第5,195,181号は、概してメッセージの処理に関し、特に複数のポインタを使用することにより、個別的な受信プロセッサと送信プロセッサとの間でメッセージを転送する方法に関する。
【0010】
しかしながら、より効率的な処理システムに対する一般的な要求が依然として存在する。
【0011】
(発明の概要)
本発明は、概して、複数のジョブが投機的に並列に実行される多重処理システムに関する。高度の並列性は、更なる粗並列性、いわゆるジョブ・レベルの並列性の存在を投機すると共に、複数ジョブの並列実行を阻止する依存性が検出される場合にのみ、逐次実行を支援することにより、引き出すことが可能とされる。このアプローチは、異なる複数のプロセッサにより複数のジョブを並列に実行可能にするが、実行される複数のジョブは、順にコミットされ、即ち、リタイアさせる必要があり、複数の投機的に実行したジョブ(speculatively executed jobs)がメモリの書き込み及び信号送出をコミットするための優先順位を待機する。
【0012】
ジョブの投機的な実行は、一般的に、投機的に実行したジョブの結果を保持する機構と共に、投機が成功したか否かを判断するための依存性を検出する機構を必要とする。投機が成功したときは、結果が最終的にコミットされ、また投機が失敗したときは、結果はフラッシュされ、かつ対応するジョブを再開させる。通常、投機的に実行したジョブの結果は、中間メモリ位置に保持され、コミットの際に、これらの結果は、中間メモリ位置からメイン・メモリ内の実位置に、及び/又は外部ユニットに転送される。代替として、「実位置」から古いデータは、履歴ログに記録され、かつ投機結果は、実位置に書き込まれる。投機が失敗したときは、実位置は、履歴ログを使用して古いデータを修復することにより、復元される。投機が成功したときは、投機データは、実位置内の正しい位置に既に存在している。
【0013】
このような処理システムの展開中では、投機そのものがシステム・パフォーマンスを増加させる非常に効率的な方法であっても、投機結果を処理する機構は、パフォーマンスの更なる改善に対するボトルネックを構成することが認識されていた。
【0014】
本発明は、このような問題と共に関連する他の問題を効率的な方法により克服する。
【0015】
本発明の概要的な目的は、高度の並列処理を提供できる効率的な多重処理システムを提供することにある。
【0016】
本発明の他の目的は、多重処理システムにおいて結果を処理する効率的な方法を提供することにある。
【0017】
これらの目的及び他の目的は、添付する特許請求の範囲により定義されている本発明により達成される。
【0018】
本発明による概要的な概念が、投機的に実行したジョブの結果を保持するためのプライベート・メモリ・バッファを投機的に割り付け、かつこれらの結果を割り付けたメモリ・バッファに直接、投機的に書き込む。投機的に実行したジョブにコミット優先順位を割り当てると、割り付けメモリ・バッファを指示するポインタのみが入出力装置に転送され、この入出力装置が転送されたポインタによってメモリ・バッファから結果をアクセスすることが可能となる。この機構は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラのような入出力装置によってアクセス可能なプライベート・メモリ・バッファに、通信メッセージ、オペレーティング・システム・コール及びジョブ信号を投機的に書き込むのをサポートする。これは、対応するジョブの実行が投機的だけでなく、メモリ・バッファに対する割り付け及び書き込みも実行されるので、それ自体、更なる並列性を取り出せることを意味する。
【0019】
本発明は、ポインタを復元することを必要とするだけで、個々のデータの復元は必要でないので、依存性を検出したときは、更に、急速な復帰も可能にする。
【0020】
プロセッサは、投機モードにおいて通信メッセージ、オペレーティング・システム・コール又は新しいジョブ信号に関する全ての情報を転送し、これによって時間上でデータ転送を拡大させて、帯域幅要求を軽減させることができる。
【0021】
特殊なハードウェアを使用してハードウェア実施の投機の場合に、変数の投機状態を保持するために使用されるハードウェア・キューを通って割り付けられたメモリ・バッファに書き込み、これらのハードウェア・キューに対する圧力を軽減させる必要はない。
【0022】
標準的なオフ・ザ・シェルフ(off−the−shelf)マイクロプロセッサを使用してソフトウェア実施の投機の場合には、投機書き込みを行うためのコードが実質的に圧縮される。
【0023】
更に、メイン・メモリ内に割り付けたプライベート・メモリ・バッファに新しい記録及び対象を直接、投機的に書き込むことをサポートできることも認識されていた。投機的に実行したジョブにより発生した新しい記録又は対象は、プライベート・メモリ・バッファが投機的に割り付けられ、また投機的に実行したジョブに対してコミット優先順位が割り当てられたときは、メイン・メモリ内の所定の位置に新しい記録及び対象が既に配置されており、更なる転送は必要でない。
【0024】
しかしながら、本発明による機構は、変数の非投機的な状態の位置がプライベート・メモリ位置ではあり得ないが、共有メモリ位置でなければならないので、変数の投機書き込みのために通常、カスタマイズされることはない。
【0025】
本発明は、下記の効果を提供する。
‐高度の並列性を提供する。
‐投機的な実行のためのオーバーヘッドが最小化され‐投機割り付けメモリ・バッファに対するアクセスがロール・バック及び依存性チェックをサポートする必要がない。
‐帯域幅要求が軽減される。
‐書き込みキュー内のメモリ領域が節約され、処理ユニットがストールするのを防止する。
‐複数のポインタのみを転送するので、コミット優先順位においてオフ・ローディングが速い。
‐発生した通信メッセージ及びジョブ信号を一回書き込むだけである。
【0026】
本発明により提供される他の効果は、本発明の実施例の下記説明を読むことにより明らかとなる。
【0027】
本発明は、その更なる目的及び効果と共に、添付する図面と共に行う下記説明を参照することにより、最も良く理解される。
【0028】
(発明の実施例の詳細な説明)
図の全般にわたり、対応する又は同一の要素に対して同一の参照文字を使用する。
【0029】
本発明を良く理解するために、以下、図1を参照して本発明により処理する投機結果に対する概要的な原理を簡単に説明する。
【0030】
図1は、本発明による概要的な処理システムの簡単な図である。この処理システムは、入出力(I/O)装置10、ジョブ分配器20、多数のプロセッサ又はプロセッサ・ユニット30−1〜30−N、依存性チェッカ35及びメイン・メモリ40を備えている。
【0031】
I/O装置10は、信号及びメッセージを受信して送出する。ジョブ分配器20は、I/O装置10から複数のジョブ信号を受信し、かつこれらのジョブ信号をジョブの並列実行用のプロセッサ30−1〜30−Nに割り当てる。並列実行中に、ジョブのうちの1つは、割り付けられたコミット優先順位であり、非投機的に実行されるのに対して、他のジョブは投機的に実行される。プロセッサ30は、商業的に対称的なマルチプロセッサからハードウェアにより全て実現された実行パイプラインの範囲まで、任意の種類の処理ユニットが可能である。依存性チェッカ35は、投機的に実行したジョブとコミット優先順位を有するジョブとの間のデータ依存性を検出して投機的な実行が成功したか否かを判断するように構成されている。実行中は、チェッカ35がデータ・アクセスについて依存性チェックを行って読み出し及び書き込みのプログラム順序が保持されていることをチェックする。依存性チェックは、多数の方法のうちのいずれかにより実現可能とされる。例えば、以下で説明するように、アドレス比較方法又は可変マーカ方法による。
【0032】
本発明によれば、通信メッセージ、オペレーティング・システム(OS)コール及び投機的に実行したジョブにより発生した新しいジョブ信号のような結果に対してメイン・メモリ40内に多数のメモリ・バッファを割り付ける。メモリ・バッファは、好ましくは、プール45−1〜45−Nのバッファに分割されて、各プロセッサ30はそれ自体のプール45のバッファを有する。都合よいことに、各プールのバッファは、図1に示すように、メイン・メモリ内のリンク・リストとして、実施される。
【0033】
投機的に実行したジョブにより発生した通信メッセージ等は、対応するプロセッサ30にプール45の割り付けバッファにプライベート・メモリ・バッファを投機的に割り付けられ、かつメッセージは、図1に示すように割り付けられたプライベート・バッファに投機的に書き込まれる。投機的な実行は、メッセージの実際的な送出を含むべきでない。これは、対応するジョブがコミット優先順位を獲得するまで、割り付けバッファから通信チャネルにメッセージを手渡してはならないことを意味する。投機的に実行したジョブにコミット優先順位を割り当てると、割り付けメモリ・バッファに対するポインタは、I/O装置10に転送される。メイン・メモリ40は、I/O装置10が転送したポインタにより通信メッセージを取り出せるように、I/O装置10及びプロセッサ30−1〜30−Nにより共有される。
【0034】
ポインタは、多数の方法のうちの任意のものによりI/O装置に転送されてもよい。例えば、ポインタをI/O装置に転送する3つの基本的な手順を以下に概説する。
i)コミット時に、関連プロセッサからI/O装置にポインタを直接、書き込む。
ii)コミット時に、メモリ手段にポインタを書き込み、これをI/O装置によるポインタについてチェックする。
iii)中間メモリ位置にポインタを投機的に書き込み、かつコミット時に、中間メモリ位置からI/O装置にポインタを転送する。
【0035】
投機が失敗したことを示す依存性が検出されたときは、割り付けメモリ・バッファが単純に割り付け解除され、高速の修復を可能にする。
【0036】
投機的な実行のみならず、通信メッセージ、新しいジョブ信号及びOSコールに対するバッファの投機割り付けもサポートすることにより、並列性が更に促進される。
【0037】
更に、本発明は、機能プログラミング言語による新しい記録、又はオブジェクト・オリエンテッド・プログラミング言語による新しいオブジェクトの投機書き込みに適用可能である。この場合、投機的に実行したジョブにより発生した新しい記録即ちオブジェクトがメイン・メモリ内のプライベート・メモリ・バッファが投機的に割り付けられて、プライベート・メモリ・バッファに書き込まれる。投機が失敗であれば、専用バッファは、単純に割り付け解除される。他方、投機が成功であれば、コミット時に、新しい記録即ちオブジェクトが既にメイン・メモリの所定の位置にあって、それ以上の転送は必要でない。新しい記録/オブジェクトは、共有メモリに対応するポインタ上で処理することにより、例えばポインタを共有メモリにおける変数に書き込むことにより、使用されてもよい。記録/オブジェクトは、実行において使用されてもよく、それ以上必要でないときは、単純に無視されて、対応するメモリ・バッファが割り付け解除される。このポインタは、更に外部ユニットに転送されてもよい。
【0038】
オブジェクト及び記録は、しばしば、通信メッセージ及びジョブ信号より大きな変動サイズがあり、記録/オブジェクト用のメモリ・バッファは、「ヒープ(heap)」と呼ばれるメモリ領域から便宜的に割り付けられる。通常のプログラミング・モデルのときに、例えば、ユニックス(Unix)システム上で実行するCプログラムの場合に、異なるプログラムが相互にデータを破壊できないように、通常、処理当たり1ヒープが存在する。そこで、各メモリ・バッファは、それが割り付けられたヒープに復帰する必要がある。
【0039】
本発明による機構は、メモリ・バッファが割り付けられたときに空きであって(プライベート)、従って破壊される恐れのあるバッファが活性状態でないということを使用することである。
【0040】
本発明は、非投機的に実行したジョブが共有メモリ位置に保持された変数の状態を変更できる必要があるので、通常、変数に対してカスタマイズされないことを理解すべきである。従って、通常、変数の投機状態は、中間位置に一時的にストアされ、かつこれらがコミット時に非中間位置に変換される際に、中間位置から実位置に転送される。
【0041】
投機的に実行したジョブが、新しいメッセージ、信号又は記録/オブジェクトのみを除き、どのような変数状態も発生しないときは、依存性チェックを実行する何らかの機構を省略することができる。これは、割り付けを投機的に行うとしても、メモリ・バッファを一度に1ジョブのみに割り付けることができるためである。これは、通常、付加コードを有する読み出し及び書き込み命令を備えることにより、依存性チェックを行うソフトウェア実現の投機のために重要である。
【0042】
シングル・プロセッサ・システム用に書かれたアプリケーション・ソフトウェアを標準的なマルチプロセッサ環境に移行して再使用しようとするときは、再コンパイル等によりアプリケーション・ソフトウェアを変換してもよい。例えば、逐次的にプログラムされたアプリケーション・ソフトウェアは、依存性チェック用のコード、及びジョブの適正なフラッシュ即ちロール・バックを可能にするように変更した変数のコピーをストアし、次いでソフトウェアを再コンパイルするコードを含め、投機的な実行をサポートする適当なコードを付加することにより、自動的に変更されてもよい。更に、標準的なマルチプロセッサ・システムのオペレーティング・システム又は仮想マシンは、投機的な実行をサポートするように変更されてもよい。例えば、依存性チェック用のコードを実行しているときに依存性を検出した場合は、関連するジョブをフラッシュするオペレーティング・システム/仮想マシンに制御を渡してもよい。
【0043】
図2は、本発明による投機的に実行したジョブにより発生した結果を処理する方法の概要フロー・チャートである。以下のシーケンスのステップは、コンピュータ即ちプロセッサ・システムの要素により、実行可能とされる。種々のステップは、特殊化されたハードウェアにより、複数のプロセッサにより実行されるプログラム命令により、又は両者の組み合わせにより、実行され得ることを認識すべきである。ステップ101において、複数のジョブを投機的に並列に実行し、かつプログラミング・モデルにより許容される順序に従い、コミット優先順位を連続的に複数のジョブに、一度に1つにより、割り当てる。例えば、全体的な生成順序に従って、ジョブがコミットされ、即ちリタイヤされる。ステップ102において、投機的に実行したジョブの結果を保持するためにプライベート・メモリ・バッファを投機的に割り付け、またステップ103において、投機結果を割り付けメモリ・バッファに書き込む。ステップ104に示されているように、実行中、データ変数アクセスについて依存性チェックを行う。投機的に実行したジョブに関して依存性が検出されず(N)、投機的に実行したジョブに最終的なコミット優先順位を割り当てているときは、I/O装置に、対応するメモリ・バッファに対するポインタを転送する(ステップ105)。他方、依存性が検出されたときは(Y)、対応するジョブをフラッシュすると共に、割り付けメモリ・バッファを割り付け解除して(ステップ106)、ジョブの実行を再び開始する(101に戻る)。
【0044】
図3は、本発明の好ましい実施例による簡単な処理システムを示す概要図である。この処理システムは、ネットワーク・コントローラ10の形式にあるI/O装置、実行パイプライン30−1〜30−2、依存性チェッカ35及びメイン・メモリ40を備えている。標準的なネットワーク・コントローラ10の1例は、AMD PC net−FASTチップ(AM79C971)のようなイサーネット・コントローラである。ネットワーク・コントローラ10は、通常、着信メッセージ、発信メッセージ及び信号を処理する送信機部及び受信機部を有する。受信機部は、着信メッセージをストアする多数の受信バッファ41、及びこれらのバッファに対するポインタをストアするように対応する受信メモリ・リング42を含む、即ち関連される。通常、ジョブは、プロセッサのうちの一つにおいて、定期的に、又は新しいメッセージが到着したときの割り込み時に、起動されて、ネットワーク・コントローラ10により受信バッファ41に書き込まれたメッセージに対するポインタについて受信リング42をチェックする。メッセージに対するポインタが発見されたときは、ジョブ信号を生成し、かつプロセッサのうちの1つによる実行のために、他のジョブ信号と共に、スケジュールする。図3には2プロセッサのみを示しているが、並列ジョブ処理のために2プロセッサ以上を使用することが可能なことは、明らかとすべきである。
【0045】
投機メッセージの「送出」のために、好ましくは、メイン・メモリ40内に共通プールのプライベート・メモリ・バッファが存在し、これらのバッファは、投機的に実行したジョブ、及びフリー・バッファに対する(通常、メモリ・アドレスの形式にある)ポインタの中央リストにより発生した他の信号と共に、メッセージを保持するために使用される。都合のよいことに、各プロセッサ30は、共通プールにおけるフリー・バッファに対するそれ自身のいわゆる複数のポインタの「フリー・リスト」32を有し、従って共通プールのバッファを、多数の小さなプライベート・プール45−1及び45ー2のいわゆる送信バッファに論理的に分割する。小専用プール45−1及び45−2は、フリー・リスト及びポインタの中央リストを適当に変化させることにより、小プール内のハイ又はローによるウォータマーク(watermark)により、開放バッファから共通バッファに、より多くのバッファを満たすことが可能とされる。
【0046】
フリー・リスト32−1及び32−2は、それぞれプロセッサ30−1〜30−2内の、又はメイン・メモリ40に割り付けられた物理リストである。
【0047】
投機的に実行したジョブにより発生した新しいメッセージ用のメモリ・バッファの投機的な割り付けは、対応するプロセッサ30に関連したポインタのフリー・リスト32の先頭を考慮して行うことが可能とされる。フリー・リスト32の先頭エントリにストアされたポインタは、割り付けられたメモリ・バッファを指示し、またメッセージは、割り付けられたバッファに投機的に書き込まれる。いわゆる「次のポインタ」は、フリー・リストにおける次のエントリを指示に対するポインタに進められる。
【0048】
投機が失敗のときは、フリー・リストの先頭に対する「次のポインタ」を戻すことにより、割り付けられたメモリ・バッファを割り付け解除する。投機が成功のときは、フリー・リストの先頭エントリにストアされたポインタは、コミット時に、フリー・リスト32からメイン・メモリ40内の送信メモリ・リング46に転送され、次いで「次のポインタ」により指示されたエントリがフリー・リストの新しい先頭となるように、リストから移動される。
【0049】
メモリ・リング46は、都合よいことに、プロセッサ30及びネットワーク・コントローラ10により共有されたメモリに割り付けられたデスクリプタ・リングとして構築される。実際のメッセージ送出は、コミット時に対応するプロセス30のフリー・リスト32からデスクリプタ・リング46にデスクリプタを転送することにより、開始される。各デスクリプタは、好ましくは、a)メッセージ・バッファ(実際のポインタ)に対するアドレス、b)メモリ・バッファの長さ、及びc)バッファの状態を表示するステータス情報を含む。例えば、ネットワーク・コントローラ10は、有効なデスクリプタ用のデスクリプタ・リングを定期的にポーリングする。ネットワーク・コントローラ10は、有効なデスクリプタを見付けると、デスクリプタのアドレス・フィールドにより指示されたメモリ・バッファにストアされているメッセージを送出する。
【0050】
デスクリプタ・リングを使用してバッファ管理上の一般的な情報のために、AMD PCnet−FASTチップAM79C971のデータ・シート58〜63頁を参照する。
【0051】
プロセッサ当たり1プールを使用することは、フラッシュ時にバッファを復帰させる非常に簡単な手順−バッファの割り付けを与える最適化であり、またバッファの復帰は、並列にいくつかのプロセッサにより実行可能とされ、また同期は、共通プールをアクセスするために必要とされない。加えて、復帰したバッファは、同一プロセッサにより再使用され、プロセッサ当たり1データが存在するときに、高いキャッシュ・ヒット率に帰結する。
【0052】
図4は、本発明の他の好ましい実施例による処理システムを示す概要図である。この処理システムは、基本的に、ジョブ信号スケジューラの形式にあるI/O装置10、及び処理ユニット50を備えている。
【0053】
ジョブ信号スケジューラ10は、入出力ユニット11、ジョブ信号メモリ12、ポインタ・メモリ13、メモリ・インターフェース14、TPUユニット(プロセッサ・ユニットへの)15、FPUユニット(処理ユニットからの)16及び制御ユニット17を含む。ジョブ信号スケジューラ10は、処理ユニット50からと共に外部ユニットからのジョブ信号を受け取り、処理のためにジョブ信号をスケジュールする。
【0054】
入出力ユニット11は、地域プロセッサ(regional processors)及び他の周辺装置のような外部ユニットからジョブ信号を受け取って、これらをメモリ・インターフェース14を介してジョブ信号メモリ12に分配する。外部ユニットからのジョブ信号は、通常、外部事象を発生源としているので、システムは事象駆動されていると、みなしてもよい。ジョブ信号メモリ12は、特殊目的メモリか、又は処理ユニットのメイン・メモリ40に割り付けられる。いずれの場合も、ジョブ信号メモリは、スケジューラ10及び処理ユニット50により共有される。ジョブ信号メモリは、ジョブ信号、及び外部ユニットに向けられた通信メッセージをストアする1プールのメモリ・エレメントに適合する。ジョブ信号スケジューラ10は、好ましくは、信号そのものに代わって、ジョブ信号及び通信メッセージに対するポインタ上でその動作の大部分を実行する。従って、各ジョブ信号は、ジョブ信号メモリ12内のメモリ・エレメントに対するポインタに関連され、対応するジョブ信号をジョブ信号メモリ12に書き込むときは、対応するポインタをメモリ・インターフェース14を介してポインタ・メモリ13に送出する。
【0055】
図4において、単線は、概要的にポインタ信号Pを表し、また二重線はジョブ信号/通信メッセージS又はデータ信号Dを表す。
【0056】
ポインタ・メモリ13は、通常、多数のメモリ・キュー(図4に点線により表す)に分割される。単なる一つの代わりに、いくつかのキューを使用することにより、複数の優先順位を処理することが可能であり、異なる優先順位レベルを有するポインタを異なるメモリ・キューにストアする。ジョブ信号スケジューラ10に新しいジョブ信号が到達すると、ジョブ信号のヘッダに含まれる優先順位レベル情報を解析して、対応するポインタを配置すべきメモリ・キューを認識する。次に、ジョブ信号メモリ12にジョブ信号Sを書き込み、かつポインタ・メモリ13に選択したキューにポインタPを配置する。通常、ポインタ・メモリ13内のキューは、優先順位の順序によりサービスするファースト・イン・ファースト・アウト(FIFO)として編成される。
【0057】
到着の順にあるポインタPを優先順位レベル情報に従ってストアすることにより、スケジューリング順序がポインタ・メモリ13内に得られる。処理ユニット50が新しいジョブ信号を受け取ることができるときは、最高の優先順位レベルのメモリ・キューの中で最も古いポインタPがTPUユニット15に転送されることを制御ユニット17が確認する。TPUユニット15は、関連ジョブをフェッチするためポインタPにより表すジョブ信号メモリ12内のメモリ・エレメントを読み出し、取り出したジョブ信号Sを処理ユニット50に送出する。このように、ジョブ信号メモリ12内のジョブ信号をポインタ・メモリ13内のスケジューリング順序に従って処理ユニット20に転送する。
【0058】
ジョブ信号メモリ12及びポインタ・メモリ13は、好ましくは、共通メモリ、例えばメイン・メモリ40内に実施される。
【0059】
ジョブ信号スケジューラ10から処理ユニット50に高い優先順位レベルのジョブ信号を送出するのであれば、ジョブ信号スケジューラ10における割り込み処理は、好ましくは、処理ユニット50におけるジョブの割り込みを開始できる必要がある。
【0060】
処理ユニット50は、好ましくは、一度に1優先順位レベルのみのジョブ信号を処理する。ジョブ信号スケジューラ10からの高い優先順位レベルの信号は、それより低いレベルの信号に割り込みをする。例えば、ジョブ信号スケジューラ10は、割り込み要求を処理ユニット50に送出することによって割り込みを開始することができ、そこで処理ユニットは、現在実行中のジョブに割り込みをすることになる。
【0061】
処理ユニット50は、ジョブ信号キュー20、複数の処理エレメント/プロセッサ30−1〜30−4、データの依存性を処理して投機的に実行したジョブの結果を一時的にストアする組み合わせ依存性チェッカ及び書き込みキュー配列装置35、そしてプログラム・ストア43及びデータ・ストア44に分割されたメモリ・システム40を含む。この例では、プロセッサ・エレメント30−1〜30−4は、好ましくは、実行パイプラインの形式にある。従って、以下、処理エレメントを実行パイプラインと呼ぶ。
【0062】
ジョブ信号スケジューラ10からのジョブ信号は、ジョブ信号をストアするために多数のメモリ位置を有するジョブ・キュー20にバッファリングされる。各ジョブ信号は、ジョブ・キュー20のそれぞれのストア位置に追加的な情報と共にストアされる。
【0063】
一般的に、各ジョブ信号は、ヘッダ及び信号本体を備えている。ヘッダは、通常、管理情報に加えて、プログラム・ストア43内のソフトウェア・コードに対するポインタを含み、ジョブ信号の本体は、対応するジョブの実行に必要な入力オぺランドを含み、これによって、一般的に、内蔵されたジョブ信号を作成する。ソフトウェア・コードは、好ましくは、1以上のテーブル・ルックアップを介して指示される。これは、一般的に、ポインタがルックアップ・テーブル・エントリを実際に指示し、これがまたソフトウェア・コードを指示することを意味する。この信号本体は、地域プロセッサ又は他のプロセッサのような外部ユニットからの信号メッセージであってもよい。
【0064】
一つのジョブは、信号ヘッダにより指定された命令ストリームと定義されてもよく、かつこのジョブは、ジョブ信号の受け取りにより開始し、エンド・ジョブ・ルーチンの呼び出しにより終了する。しかしながら、ジョブ信号そのものは、通常、プログラム・ストア43にストアされるソフトウェア・コードの命令、及びこれらの命令の実行に必要とされるオぺランドに対する単なるポインタのみであって、いかなる命令も含まないことに注意すべきである。
【0065】
実行パイプライン30−1〜30−4は、好ましくは、ジョブ・キュー20内の異なるメモリ位置からジョブ信号を「フェッチ」して異なる複数ジョブを並列に独立的に実行する。実行パイプラインが空きであり、新しいジョブを実行し始めるときは、ジョブ・キュー20を調べて未割り付けジョブ信号を見つけ出し、未割り付けジョブ信号をパイプラインに割り付ける。次いで、ジョブ信号を実行パイプラインにより処理し、対応するジョブを実行する。並列ジョブを実行中の全期間で、ジョブ・キュー20における1ジョブ信号のみがコミット位置にあって、ジョブ信号を割り当てた実行パイプラインが対応するジョブをコミット又はリタイアするのを可能にする。他の実行パイプラインにあるジョブは、投機的に実行され、依存性チェッカ35によりデータ依存性が検出されるときは、フラッシュされてもよい。
【0066】
プロトコルにより情報フローを管理するシステムに対する概要的な必要条件は、関連するいくつかの事象を受け取った順序により処理しなければならないことである。これはシステムに不変であって、どのようにシステムを実施するかは問題ではない。ジョブ間のコミット順序は、通常、処理コアへの到着により定義され、概して変更されることはない。しかしながら、異なる優先順位レベルにある複数のジョブ信号を処理する処理システムでは、処理ユニット50に対する到着によって同一優先順位レベルにある複数ジョブ間のコミット順序を定義するように、低い優先順位のジョブ信号の前に、高い優先順位レベルのジョブ信号を置くことが有用と思われる。
【0067】
一般的に、各実行パイプラインは、プログラム・ストアから複数の命令をフェッチし、これらの命令を実行し、かつメモリの書き戻し及び信号送出を実行する回路を備えている。本発明により使用可能な特定の実行パイプラインの1例は、エリクソンAXEディジタル・スイッチング・システム(Ericsson AXE Digital Switching System)におけるパイプラインである。
【0068】
ジョブ・キュー20は、適当な制御ソフトウェア又はハードウェアとの組み合わせにより、実行パイプライン30−1〜30−4にジョブ信号を割り当て、投機的に実行して完了したジョブのトラッキングを確保し、コミット優先順位をジョブ信号に連続的に割り当て、かつコミットしたジョブ信号を除くために必要とされるプロトコルを管理する。
【0069】
ジョブ・キュー20は、通常、多数のストレージ位置を有する通常のキューである。1例として、ジョブ・キュー20は、メモリの所定部分をそれぞれ固有の自己メモリ・アドレスを有する多数のストレージ位置に論理的に分割することにより、共通メモリに実施可能である。一般的に、ジョブ・キュー20における各ストレージ位置を、例えば下記の表1に説明しているような多数のフィールドに分割する。
【0070】
【表1】
【0071】
フィールド「Valid」は、ストレージ位置が有効なジョブ信号を含む否かを表示するために使用される。ジョブ信号スケジューラ10からジョブ信号を受け取ったときは、これをジョブ・キュー20の最初の空き位置、即ち有効フラグがセットされていない位置に配置する。次いで、有効フラグをセットして「信号」フィールドが現在有効なジョブ信号を含み、かつその位置が占有されていることを表示する。
【0072】
フィールド「済み(Taken)」は、ジョブ信号をパイプラインに割り当てたか否かを表示するために使用され、ジョブ・キュー20内のストレージ位置におけるジョブ信号が実行パイプラインに割り当てられたときは、その位置に対する「済み」フラグがセットされてジョブ信号が割り当てられたことを表示する。
【0073】
フィールド「終了(Finished)」は、ジョブを投機的に実行して完了したことを表示するために使用され、かつそのフィールド「パイプid」及び「ジョブid」は、そのパイプにおけるパイプの識別、及びジョブ信号及び/又は対応するジョブの識別を与えたことを表示するために使用される。パイプラインが最初のジョブに対するジョブ終了ルーチンを実行したときは、ジョブを実行して完了し、かつコミットするべくレディー(準備完了状態)であることを知らせるために、「終了」フラグをセットする。必要ならば、ここでパイプラインは、第2のジョブ信号をフェッチするべくレディーとなる。最初のジョブは、問題とするパイプのジョブid「1」に割り当てられ、またパイプにおいて実行されるべき第2のジョブは、ジョブid「2」に割り当てられる。パイプがコミット優先順位を受け取る前に、第2のジョブを終了すれば、第3の投機ジョブが実行可能となり、以下同様となる。一般的に、パイプ当たりのジョブ数と複雑さとの間の妥協点が作成され、実際では、パイプ当たりのジョブ数が制限される。しかしながら、以下では、各パイプラインは、一度に1ジョブのみを処理するとみなされる。
【0074】
投機的な実行用に適応された処理システムにおいて、ジョブは、一般的に下記の状態、即ち「開始していない」、「開始した」及び「終了した」であり得る。これらの状態は、ジョブ・キュー20において異なる方法により符号化可能とされると共に、表1のフィールド「有効」、「済み」及び「終了」は、これらのジョブ状態を符号化する1方法の単なる例であることを理解すべきである。
【0075】
ジョブ・キュー20は、好ましくは、ジョブ・キュー20におけるどのストレージ位置がコミット位置にあるのかを指示するポインタに関連される。コミット位置にあるジョブ信号は、コミット優先順位を有し、このジョブ信号を処理する実行パイプラインを動作可能状態にしてメモリ書き戻し及び信号送出のコミットを実行する。ジョブ信号がコミット位置に移行すると、対応するパイプラインは、全て書き込み動作及びジョブのための信号送出をコミットし始める。ジョブを実行して完了し、かつ全ての書き込み及び信号送出をコミットしたときは、「有効」フラグをクリアすることにより、その位置を開放し、かつ通常の手段によりジョブ・キュー20をステップしてコミット位置を新しい位置に移動し、これによって、コミット優先順位をジョブ・キュー内のジョブ信号に連続的に割り当てる。
【0076】
例えば、情報をジョブ・キュー・フィールドに書き込み、かつコミット優先順位をジョブ信号に連続的に割り当てるように、ジョブ・キュー20を処理する機能は、好ましくは、例えばマイクロ・コード命令プログラム又はアッセンブラ・プログラムの形式にあるソフトウェアにより、制御される。更に、フラッシュを処理すること、書き込みキュー配列を制御すること、及びスケジューリング機構を制御することのように、処理システムにおける他の機能は、ソフトウェアにより実施されてもよい。
【0077】
依存性チェッカ35は、概要的に、実行パイプライン30−1〜30−4に関連した1以上の読み出しバッファRBを使用することにより、実施される。パイプラインがデータ・ストア44からデータをフェッチするときは、アドレス又は複数アドレスの読み出しは、対応する読み出しバッファにバッファされる。コミット優先順位により実行パイプラインがデータ・ストア44に可変データDの書き戻しを実行するときは、データ・ストアに対する書き込みアドレスを読み出しバッファRB内の読み出しアドレスとアドレスと比較してジョブ間にデータの依存性があるか否かを調べる。この比較は、概してアドレス比較器により実行される。投機的に実行したジョブにより読み出されたデータがジョブのコミットにより変更されているときは、データ依存性が存在しており、投機的に実行した、又は実行しているジョブをフラッシュし、かつ再び開始する必要がある。
【0078】
投機的に実行したジョブにより提案されたデータ・ストアの変更は、書き込みキュー配列35にログ記録されるが、しかしジョブがコミット優先順位を獲得するまで、データ・ストア44に書き込みはしない。書き込みキュー配列35は、好ましくは、多数の個別的な書き込みキューを備えており、1書き込みキューWQが実行パイプライン30−1〜30−4のそれぞれに割り付けられる。高いパフォーマンスのために、書き込みキューは、高速だが、比較的に小さなメモリであるキャッシュ・メモリとして、通常、実施される。一般的に、投機的なジョブがコミット優先順位を獲得するときは、問題とするジョブに属する書き込みキュー・エントリは、データ・ストア44に直ちに書き込まれる。しかしながら、実行中のコミット・ジョブは、一般的に、その書き込みキューにそのデータをストアしないが、しかし依存性チェックを可能にするように、対応するメモリ・アドレスをアドレス比較器に単純に転送する。
【0079】
代替として、書き込みキュー配列35は、例えば、組み合わせ依存性チェッカ及び書き込みキューを開示している国際特許出願WO 88/02513に説明されているように、全実行パイプラインに共通する単一中央化書き込みキューの形式にある。
【0080】
ジョブ信号は、ラウンド・ロビン形式により実行パイプラインに概して割り当てられることを理解すべきである。ラウンド・ロビンでは、パイプラインが段階的に横行する円形ループに配列されているとみなし得る。例えば、この配列は、パイプライン及び書き込みキュー側でコミット位置の管理を非常に簡単化する。ジョブ・キュー20における次のジョブ信号をコミット位置に移動するときは、前のコミット・パイプラインと比較されるループ内の次のパイプラインとして、対応する実行パイプラインを単純に認識し、認識したパイプライン専用の書き込みキューWQにストアされた結果をコミットする。
【0081】
本発明によれば、投機的に発生したジョブ信号及び通信メッセージは、FPUユニット16及びメモリ・インターフェース14を介してジョブ信号メモリ12に直接書き込まれる。対応するジョブ信号及びメッセージを見付けることができるジョブ信号メモリ12内のメモリ領域に対するポインタのみを書き込みキューWQに一時的にストアし、コミット時にFPUユニット16及びメモリ・インターフェース14を介してポインタ・メモリ13に転送する。
【0082】
抽出された特別の並列性に加えて、高価な書き込みキュー・キャッシュにおけるメモリ領域を節約する。更に、実行パイプラインは、投機モードにおいて発生したジョブ信号及び通信メッセージを転送することができる。これは、ジョブ信号データの送信を時間上で引き延ばし、処理ユニット50とジョブ信号スケジューラ10との間のインターフェースに対する帯域幅要求を低くする結果となることを意味する。更に、ポインタのみを転送するので、コミット時に書き込みキューが高速にオフ・ロードされる。
【0083】
ジョブ信号スケジューラ10は、ジョブ信号メモリ12内の空きメモリ・エレメントに対するポインタを処理ユニット50に送出して、1プールの空きポインタを構築する。実行パイプライン30−1〜30−4のそれぞれは、概してこのような多数の空きポインタEPが割り付けられる。各実行パイプラインは、割り付けられたポインタにより指示されたメモリ・エレメントのうちの1つに投機的に、投機的に実行したジョブにより発生した新しいジョブ信号/通信メッセージSを書き込み、実行パイプラインに接続された書き込みキューWQに、ジョブ信号/通信メッセージSを書き込むメモリ・エレメントを指示するポインタPをストアする。信号送出をコミットするために実行パイプラインに優先順位を割り当てると、書き込みキューWQからポインタ・メモリ13内の適当なメモリ・キューに又は外部ユニットに転送するために入出力ユニット11に、ポインタPを転送する。新しいジョブ信号の場合に、対応するジョブ信号Sにおける優先順位レベル情報に基づいてポインタ・メモリ13内の適当なメモリ・キューを認識し、かつジョブ信号と同一の優先順位レベルのメモリ・キューにポインタPを書き込む。ポインタ・メモリ13内のメモリ・キューは、FIFOキューとして構成され、またスケジューリング順序は、優先順位の順序によりサービスされるので、ポインタ・メモリにスケジューリング順序が確立される。
【0084】
ジョブ信号スケジューラ10は、スケジューラがそれ以上ポインタを必要としなければ直ちに、ポインタFPをTPUユニット15を介して処理ユニット50に送出することにより、空きポインタのプールをフルに保持する。
【0085】
1回で完全なジョブ信号又は完全な通信メッセージを書き込む必要性はない。大きな信号は、例えば、処理ユニット50とジョブ信号スケジューラ10との間のバス・インターフェースのブロッキングを防ぐために、複数の断片により書き込まれてもよい。そのときは、処理ユニット50は、バースト間のアドレスを増加して、各バーストの開始で増加したアドレスを送出する必要がある。
【0086】
以上、実行パイプラインは、それぞれ命令実行用の自己専用のリソースを有する個別的な構成要素であるとして説明した。しかしながら、一般的に、命令実行において、実行パイプラインにおける多くのリソースがフルに使用されることはない。そこで、リソースが複数のパイプ間で共有可能となり、要求又は時多重化方式により、リソースに対する実行パイプ・アクセスを実行する。高度のリソース共有を実施する技術は、同時マルチ・スレッディングである。同時マルチスレッディングでは、殆ど全てのリソースが共有され、各パイプライン専用のリソースは、プライベート・プログラム・カウンタと、命令レジスタ、及び物理レジスタにおける論理レジスタ・ナンバー間のプライベート・マッピングとに限定される。
【0087】
更に、ポインタは、ジョブ信号メモリ内のメモリ・エレメントを直接、参照する必要はないが、しかし、1以上のテーブル・ルックアップによりジョブ信号メモリ領域を参照することができることも理解すべきである。
【0088】
更に、アドレス比較方法を参照して依存性チェックを説明した。しかしながら、代替として、依存性チェックは、各処理ユニットがメイン・メモリ内の変数の使用をマークし、かつ依存性の衝突がマーキングに基づいて検出されるマーカ方法により、達成されてもよい。
【0089】
以上で説明した実施例は、例として単に説明され、本発明は、これに限定されないことを理解すべきである。更なる修正、変更、及び開示され、かつ特許請求された基本的に内在する原理を保持する改良は、本発明の範囲内である。
【図面の簡単な説明】
【図1】
本発明による概要的な処理システムの簡単な図である。
【図2】
本発明による投機的に実行したジョブにより発生した結果を処理する方法の概要フロー・チャートである。
【図3】
本発明の好ましい実施例による処理システムを示す概要図である。
【図4】
本発明の他の好ましい実施例による処理システムを示す概要図である。
【発明の名称】 多重処理システムにおける改良結果処理方法
【特許請求の範囲】
【請求項1】 プロセッサ・システムにおいて、
‐入出力装置(10)と、
‐複数のジョブを投機的に実行する多数のプロセッサ(30)と、
‐前記多数のプロセッサ(30)と前記入出力装置(10)とによって共有される共有メモリ(40、12)と、
‐複数のジョブに対し、一度には1つのジョブでコミット優先順位を割り当てる手段と、
‐投機的に実行したジョブの結果を保持するためにプライベート・メモリ・バッファを前記共有メモリ(40、12)に投機的に割り付ける手段と、
‐コミット優先順位が前記投機的に実行したジョブに割り当てられたときは、前記割り付けられたプライベート・メモリ・バッファを指示するポインタを前記入出力装置(10)に転送する手段と
を備えた処理システム。
【請求項2】 投機的に実行したジョブの結果は、通信メッセージの形式、オペレーティング・システム・コールの形式又は新しいジョブを表すジョブ信号の形式である請求項1記載の処理システム。
【請求項3】 前記入出力装置(10)は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラである請求項1記載の処理システム。
【請求項4】 前記プライベート・メモリ・バッファは、前記入出力装置(10)が前記転送されたポインタにより前記結果をアクセスできるように、前記処理システムのメイン・メモリ(40)内、又はプロセッサ(30)と前記入出力装置(10)によって共有される他のメモリ内、に存在する請求項1記載の処理システム。
【請求項5】 各プロセッサは、自己プライベート・プール(45)のバッファを有し、このプライベート・プールに対して、複数のメモリ・バッファを割り付ける、又は割り付け解除する請求項1記載の処理システム。
【請求項6】 更に、前記プライベート・プール(45)におけるバッファのハイ又はローレベルの利用に応じて、プライベート・プール(45)のバッファを共通プールのバッファからの更なるバッファで補充し、かつ前記プライベート・プール(45)からバッファを前記共通プールに開放する手段を備えている請求項5記載の処理システム。
【請求項7】 各プロセッサは、プール(45)のメモリ・バッファ内に空きメモリ・バッファに対するポインタの自己リスト(32)を有し、かつ前記バッファ割り付け手段は、前記対応するプロセッサのリストの先頭からポインタをフェッチすることにより、投機的に実行したジョブの結果を保持するためのメモリ・バッファを割り付ける請求項1記載の処理システム。
【請求項8】 更に、
‐前記投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出する手段(35)と、
‐検出された依存性に応答して前記投機的に割り付けられたメモリ・バッファを割り付け解除する手段と
を備えた請求項1記載の処理システム。
【請求項9】 前記転送する手段は、前記投機的に実行したジョブにコミット優先順位を割り当てるときは、メモリ手段(46)に前記ポインタを書き込み、前記入出力装置(10)によりポインタについて前記メモリ手段をチェックする手段を備えている請求項1記載の処理システム。
【請求項10】 前記入出力装置(10)は、ポインタについて前記メモリ手段(46)を定期的にポーリングするネットワーク・コントローラであり、前記ネットワーク・コントローラは、ポインタを見出したときは、前記ポインタに関連した前記プライベート・メモリ・バッファから取り出した通信メッセージを送出する請求項9記載の処理システム。
【請求項11】 前記メモリ手段(46)は、前記処理システムのメイン・メモリ(40)に割り付けられたリング構造であり、かつ前記ポインタは、前記リング構造(46)の位置に書き込まれる請求項9記載の処理システム。
【請求項12】 更に、前記ポインタをメモリ手段(WO)に投機的に書き込む手段を備え、かつ前記転送手段は、コミット優先順位が前記投機的に実行したジョブに割り当てられたときに、前記メモリ手段(WO)から前記入出力装置(10)に前記ポインタを転送する請求項1記載の処理システム。
【請求項13】 前記メモリ手段(WO)は、前記処理システムのメイン・メモリ(40)にハードウェア・キューとして実施された、又は割り付けられた、書き込みキューである請求項12記載の処理システム。
【請求項14】 ‐前記入出力装置(10)は、前記多数のプロセッサにより処理するジョブ信号スケジューラ・スケジューリング・ジョブ信号であり、
‐前記割り付け手段は、プライベート・メモリ・バッファをジョブ信号メモリ(12)を投機的に割り付けて投機的に実行したジョブにより発生した新しいジョブ信号を保持し、前記対応するポインタは、メモリ手段(WO)に投機的に書き込まれ、
‐前記転送手段は、コミット優先順位が前記投機的に実行したジョブに割り当てられたときは、前記メモリ手段(WO)から前記入出力装置(10)に転送して前記新しいジョブ信号のスケジューリングを可能にさせる
請求項1記載の処理システム。
【請求項15】 各ジョブ信号及びその対応するポインタは、優先順位レベル情報に関連され、かつ前記入出力装置(10)は、
‐到着の順序及び前記優先順位レベル情報に従って複数のポインタをストアしてスケジューリング順序を得るポインタ・メモリ(13)と、
‐前記ポインタ・メモリ(13)におけるスケジューリング順序に従い前記多数のプロセッサ(30)により処理するために、前記ジョブ信号メモリ(12)からのジョブ信号を転送する手段と
を備えた請求項14記載の処理システム。
【請求項16】 前記転送手段は、前記ポインタ・メモリ(13)に前記ポインタを転送して前記ポインタを前記スケジューリング順序に配置する請求項15記載の処理システム。
【請求項17】 処理システムにおける結果を処理する方法において、
‐多数のプロセッサ(30)によって、並列に複数のジョブを投機的に実行するステップ(101)と、
‐複数のジョブに対し、一度には1つのジョブで優先順位を割り付けるステップと、
‐投機的に実行したジョブの結果を保持するために、プロセッサ(30)と前記処理システムの入出力装置(10)によって共有されるメモリ内に、プライベート・メモリ・バッファを投機的に割り付けるステップ(102)と、
‐コミット優先順位が投機的に実行したジョブに割り付けられたときに、入出力装置(10)に割り付けメモリ・バッファを指示するポインタを転送し、前記入出力装置が転送されたポインタにより前記対応する割り付けメモリ・バッファをアクセスするステップ(105)と
を備えた結果を処理する方法。
【請求項18】 更に、
‐投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出するステップ(104)と、
‐投機的に実行したジョブについて依存性が検出されたときは、前記対応する投機的に割り付けられたメモリ・バッファを割り付け解除するステップ(106)と
を備えた請求項17記載の結果を処理する方法。
【請求項19】 前記投機的に実行したジョブの結果は、通信メッセージ、オペレーティング・システム・コール又は新しいジョブを表すジョブ信号の形式である請求項17記載の結果を処理する方法。
【請求項20】 前記入出力装置(10)は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラである請求項17記載の結果を処理する方法。
【請求項21】 前記転送する手段は、前記投機的に実行したジョブにコミット優先順位を割り当てるときは、メモリ手段に前記ポインタを書き込み、前記入出力装置によりポインタについて前記メモリ手段をチェックするステップを備えている請求項17記載の結果を処理する方法。
【請求項22】 更に、前記ポインタをメモリ手段(WO)に投機的に書き込むステップを備え、かつ前記転送ステップ(105)は、前記投機的に実行したジョブにコミット優先順位を割り当てられたときは、前記メモリ手段(WO)から前記入出力装置(10)に前記ポインタを転送することを含む請求項17記載の結果を処理する方法。
【請求項23】 前記投機的に実行したジョブは、多数のプロセッサ(30)により実行され、かつ前記方法は、更に、各プロセッサを自己プライベート・プール(45)のバッファと関連させるステップを備え、前記プロセッサは、このプライベート・プールに対して、メモリ・バッファを割り付ける、又は割り付け解除する請求項17記載の結果を処理する方法。
【請求項24】 処理システムにおいて、
‐複数のジョブを投機的に実行する多数のプロセッサ(30)と、
‐複数のジョブに対し、一度には1つのジョブでコミット優先順位を割り当てる手段と、
‐前記処理システムの前記メイン・メモリ(40)内にプライベート・メモリ・バッファを投機的に割り付けて、前記投機的に実行したジョブにコミット優先順位を割り当てられたときは、投機的に実行したジョブにより発生した新しい記録又はオブジェクトが前記メイン・メモリ(40)内の所定位置にあるように、投機的に実行したジョブにより発生した前記新しい記録又はオブジェクトを保持する手段と、
前記投機的に実行したジョブにコミット優先順位を割り当てたときは、前記割り付けられたプライベート・メモリ・バッファを指示するポインタを共有メモリに渡す手段と、
を備えた処理システム。
【請求項25】 更に、
‐前記投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出する手段(35)と、
‐検出された依存性に応答して前記投機的に割り付けられたメモリ・バッファを割り付け解除する手段と
を備えた請求項24記載の処理システム。
【発明の詳細な説明】
【0001】
(発明の技術分野)
本発明は、概して処理技術に関し、特に、多数のプロセッサ又は複数の処理ユニットを有する処理システムに関する。
【0002】
(発明の背景)
コンピュータ・システム又は処理システムにおける処理能力の改善に対する絶え間のない要求により、より高速かつより効率的なプロセッサが要求されている。処理能力を増大させる通常的なアプローチは、ますます高くした周波数及び高速のメモリを使用することによっている。
【0003】
特に、アプリケーション・ソフトウェアを変更することなく、処理システムの処理能力を増加させる通常的な方法は、隣接する命令間で見出される密並列性(fine−grained parallelism)を検出するいわゆるスーパースケーラを使用することである。スーパースケーラでは、いくつかの命令を並列に同時実行するようにプロセッサ内の機能ユニットを構成する。これは、しばしば命令レベルの並列性(instruction−level parallelism)と呼ばれる。
【0004】
処理能力を増加させる他の方法は、処理システムを多数のプロセッサシステム、即ち並列に動作する多数のプロセッサを有するプロセッサ・システムとして構築することである。いくつかの処理システムは、対称型マルチ・プロセッサ(Symmetrical Multi Processor:SMP)として知られたアーキテクチャーにより高いパフォーマンス処理を達成する。スーパースケーラ・プロセッサにより達成される密並列性(fine−grained parallelism)に対して、SMPアーキテクチャーは、現在のプログラミング原理により設計されたプログラムにおいて明確に指定された、又はコンパイル中に単一プロセッサ・システムによる逐次な実行用に設計されたプログラムから取り出される粗並列性(coarse−grained parallelism)を検出する。SMPアーキテクチャーでは、複数のタスクのそれぞれを複数のプロセッサのうちの対応するものによりを実行する。これらのタスクは、互に同時的な複数処理、即ち複数スレッド(thread)である。
【0005】
ソヒ(Sohi)、ブリーチ(Breach)及びビジャイクマル(Vijaykumar)によるマルチスカラー・プロセッサの論文(イタリア、サンタ・マルゲリータにおけるコンピュータ・アーキテクチャーに関する第22回年国際シンポジュウム)において、いわゆるマルチスカラー・プロセッサが説明されている。マルチスカラー・モデルの実行では、制御依存性の観点からスタティック・プログラムを表す制御フロー・グラフ(CFG:control flow graph)を複数のタスクに分割し、マルチスカラー・プロセッサがCFGを投機的に通り、タスク・サイズの複数ステップを取り込み、絶えずタスク内のあらゆる命令を調べる。タスクの初期プログラム・カウンタを処理ユニットに渡すことにより、実行する複数の処理ユニットの集合のうちの1つに一つのタスクが割り付けられる。そこで、多数のタスクが複数の処理ユニットにより並列に実行可能となり、1サイクル当たりの多数命令の総合実行率に帰結する。マルチスカラー・ハードウェアの機能は、CFGを通って、複数の処理ユニットに複数のタスクを割り付け、かつ逐次的に実行する形式により、これらのタスクを実行する。必要により、付加的なハードウェアを設けて投機的なメモリ動作を保持し、メモリ依存性の違反を検出し、訂正措置を開始する。先頭にあるタスクは、非投機的であると保証されたタスクのみであるから、先頭を除き、全てのユニットにより実行されるメモリ動作は、投機的である。
【0006】
米国特許第5,832,262号は、概して1スケジューリング・プロセッサとの連係により作動して1以上の他のプロセッサにより実行されるべき多数のタスクを管理するリアル・タイム・ハードウェア・スケジューラに関連する。このスケジューラは、2つのリアル・タイム・ハードウェア・スケジューリング・ユニットにより共有メモリ内の循環FIFOキュー管理し、そのうちの一つは、実行待ちタスクを管理し、その他は完了したタスクを管理する。スケジューリング・プロセッサは、新しいタスクをスケジュールする要求に基づいて、タスク制御ブロックを構築して、特定の共有メモリにおけるメモリ位置にそのブロックをストアすることにより、動作する。次いで、スケジューリング・プロセッサによって、その位置に対するポインタがリアル・タイム・ハードウェア・スケジューラに送信される。スレーブ・プロセッサは、実行待機タスクの共有メモリ内の位置に対するポインタを取り出すことができる。そこで、スレーブ・プロセッサは、ポインタを使用して実際のタスクを取り出し、そのタスクを実行し、スケジューラにタスク完了を通告する。従って、以上の特許は、通常のマルチタスク・システムにおける間接信号処理に関する。
【0007】
米国特許第5,781,763号は、複数の命令を投機的に実行するプロセッサを開示している。プロセッサは、命令レベルでの並列性が得られるように所定の複数動作に割り付けられた多数のスーパースケーラ実行ユニットを有する。
【0008】
米国特許第5,560,029号は、マルチ・スレディング(multi−threading)目的に使用される同期コプロセッサを有するデータ処理システムを開示している。
【0009】
米国特許第5,195,181号は、概してメッセージの処理に関し、特に複数のポインタを使用することにより、個別的な受信プロセッサと送信プロセッサとの間でメッセージを転送する方法に関する。
【0010】
しかしながら、より効率的な処理システムに対する一般的な要求が依然として存在する。
【0011】
(発明の概要)
本発明は、概して、複数のジョブが投機的に並列に実行される多重処理システムに関する。高度の並列性は、更なる粗並列性、いわゆるジョブ・レベルの並列性の存在を投機すると共に、複数ジョブの並列実行を阻止する依存性が検出される場合にのみ、逐次実行を支援することにより、引き出すことが可能とされる。このアプローチは、異なる複数のプロセッサにより複数のジョブを並列に実行可能にするが、実行される複数のジョブは、順にコミットされ、即ち、リタイアさせる必要があり、複数の投機的に実行したジョブ(speculatively executed jobs)がメモリの書き込み及び信号送出をコミットするための優先順位を待機する。
【0012】
ジョブの投機的な実行は、一般的に、投機的に実行したジョブの結果を保持する機構と共に、投機が成功したか否かを判断するための依存性を検出する機構を必要とする。投機が成功したときは、結果が最終的にコミットされ、また投機が失敗したときは、結果はフラッシュされ、かつ対応するジョブを再開させる。通常、投機的に実行したジョブの結果は、中間メモリ位置に保持され、コミットの際に、これらの結果は、中間メモリ位置からメイン・メモリ内の実位置に、及び/又は外部ユニットに転送される。代替として、「実位置」から古いデータは、履歴ログに記録され、かつ投機結果は、実位置に書き込まれる。投機が失敗したときは、実位置は、履歴ログを使用して古いデータを修復することにより、復元される。投機が成功したときは、投機データは、実位置内の正しい位置に既に存在している。
【0013】
このような処理システムの展開中では、投機そのものがシステム・パフォーマンスを増加させる非常に効率的な方法であっても、投機結果を処理する機構は、パフォーマンスの更なる改善に対するボトルネックを構成することが認識されていた。
【0014】
本発明は、このような問題と共に関連する他の問題を効率的な方法により克服する。
【0015】
本発明の概要的な目的は、高度の並列処理を提供できる効率的な多重処理システムを提供することにある。
【0016】
本発明の他の目的は、多重処理システムにおいて結果を処理する効率的な方法を提供することにある。
【0017】
これらの目的及び他の目的は、添付する特許請求の範囲により定義されている本発明により達成される。
【0018】
本発明による概要的な概念が、投機的に実行したジョブの結果を保持するためのプライベート・メモリ・バッファを投機的に割り付け、かつこれらの結果を割り付けたメモリ・バッファに直接、投機的に書き込む。投機的に実行したジョブにコミット優先順位を割り当てると、割り付けメモリ・バッファを指示するポインタのみが入出力装置に転送され、この入出力装置が転送されたポインタによってメモリ・バッファから結果をアクセスすることが可能となる。この機構は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラのような入出力装置によってアクセス可能なプライベート・メモリ・バッファに、通信メッセージ、オペレーティング・システム・コール及びジョブ信号を投機的に書き込むのをサポートする。これは、対応するジョブの実行が投機的だけでなく、メモリ・バッファに対する割り付け及び書き込みも実行されるので、それ自体、更なる並列性を取り出せることを意味する。
【0019】
本発明は、ポインタを復元することを必要とするだけで、個々のデータの復元は必要でないので、依存性を検出したときは、更に、急速な復帰も可能にする。
【0020】
プロセッサは、投機モードにおいて通信メッセージ、オペレーティング・システム・コール又は新しいジョブ信号に関する全ての情報を転送し、これによって時間上でデータ転送を拡大させて、帯域幅要求を軽減させることができる。
【0021】
特殊なハードウェアを使用してハードウェア実施の投機の場合に、変数の投機状態を保持するために使用されるハードウェア・キューを通って割り付けられたメモリ・バッファに書き込み、これらのハードウェア・キューに対する圧力を軽減させる必要はない。
【0022】
標準的なオフ・ザ・シェルフ(off−the−shelf)マイクロプロセッサを使用してソフトウェア実施の投機の場合には、投機書き込みを行うためのコードが実質的に圧縮される。
【0023】
更に、メイン・メモリ内に割り付けたプライベート・メモリ・バッファに新しい記録及び対象を直接、投機的に書き込むことをサポートできることも認識されていた。投機的に実行したジョブにより発生した新しい記録又は対象は、プライベート・メモリ・バッファが投機的に割り付けられ、また投機的に実行したジョブに対してコミット優先順位が割り当てられたときは、メイン・メモリ内の所定の位置に新しい記録及び対象が既に配置されており、更なる転送は必要でない。
【0024】
しかしながら、本発明による機構は、変数の非投機的な状態の位置がプライベート・メモリ位置ではあり得ないが、共有メモリ位置でなければならないので、変数の投機書き込みのために通常、カスタマイズされることはない。
【0025】
本発明は、下記の効果を提供する。
‐高度の並列性を提供する。
‐投機的な実行のためのオーバーヘッドが最小化され‐投機割り付けメモリ・バッファに対するアクセスがロール・バック及び依存性チェックをサポートする必要がない。
‐帯域幅要求が軽減される。
‐書き込みキュー内のメモリ領域が節約され、処理ユニットがストールするのを防止する。
‐複数のポインタのみを転送するので、コミット優先順位においてオフ・ローディングが速い。
‐発生した通信メッセージ及びジョブ信号を一回書き込むだけである。
【0026】
本発明により提供される他の効果は、本発明の実施例の下記説明を読むことにより明らかとなる。
【0027】
本発明は、その更なる目的及び効果と共に、添付する図面と共に行う下記説明を参照することにより、最も良く理解される。
【0028】
(発明の実施例の詳細な説明)
図の全般にわたり、対応する又は同一の要素に対して同一の参照文字を使用する。
【0029】
本発明を良く理解するために、以下、図1を参照して本発明により処理する投機結果に対する概要的な原理を簡単に説明する。
【0030】
図1は、本発明による概要的な処理システムの簡単な図である。この処理システムは、入出力(I/O)装置10、ジョブ分配器20、多数のプロセッサ又はプロセッサ・ユニット30−1〜30−N、依存性チェッカ35及びメイン・メモリ40を備えている。
【0031】
I/O装置10は、信号及びメッセージを受信して送出する。ジョブ分配器20は、I/O装置10から複数のジョブ信号を受信し、かつこれらのジョブ信号をジョブの並列実行用のプロセッサ30−1〜30−Nに割り当てる。並列実行中に、ジョブのうちの1つは、割り付けられたコミット優先順位であり、非投機的に実行されるのに対して、他のジョブは投機的に実行される。プロセッサ30は、商業的に対称的なマルチプロセッサからハードウェアにより全て実現された実行パイプラインの範囲まで、任意の種類の処理ユニットが可能である。依存性チェッカ35は、投機的に実行したジョブとコミット優先順位を有するジョブとの間のデータ依存性を検出して投機的な実行が成功したか否かを判断するように構成されている。実行中は、チェッカ35がデータ・アクセスについて依存性チェックを行って読み出し及び書き込みのプログラム順序が保持されていることをチェックする。依存性チェックは、多数の方法のうちのいずれかにより実現可能とされる。例えば、以下で説明するように、アドレス比較方法又は可変マーカ方法による。
【0032】
本発明によれば、通信メッセージ、オペレーティング・システム(OS)コール及び投機的に実行したジョブにより発生した新しいジョブ信号のような結果に対してメイン・メモリ40内に多数のメモリ・バッファを割り付ける。メモリ・バッファは、好ましくは、プール45−1〜45−Nのバッファに分割されて、各プロセッサ30はそれ自体のプール45のバッファを有する。都合よいことに、各プールのバッファは、図1に示すように、メイン・メモリ内のリンク・リストとして、実施される。
【0033】
投機的に実行したジョブにより発生した通信メッセージ等は、対応するプロセッサ30にプール45の割り付けバッファにプライベート・メモリ・バッファを投機的に割り付けられ、かつメッセージは、図1に示すように割り付けられたプライベート・バッファに投機的に書き込まれる。投機的な実行は、メッセージの実際的な送出を含むべきでない。これは、対応するジョブがコミット優先順位を獲得するまで、割り付けバッファから通信チャネルにメッセージを手渡してはならないことを意味する。投機的に実行したジョブにコミット優先順位を割り当てると、割り付けメモリ・バッファに対するポインタは、I/O装置10に転送される。メイン・メモリ40は、I/O装置10が転送したポインタにより通信メッセージを取り出せるように、I/O装置10及びプロセッサ30−1〜30−Nにより共有される。
【0034】
ポインタは、多数の方法のうちの任意のものによりI/O装置に転送されてもよい。例えば、ポインタをI/O装置に転送する3つの基本的な手順を以下に概説する。
i)コミット時に、関連プロセッサからI/O装置にポインタを直接、書き込む。
ii)コミット時に、メモリ手段にポインタを書き込み、これをI/O装置によるポインタについてチェックする。
iii)中間メモリ位置にポインタを投機的に書き込み、かつコミット時に、中間メモリ位置からI/O装置にポインタを転送する。
【0035】
投機が失敗したことを示す依存性が検出されたときは、割り付けメモリ・バッファが単純に割り付け解除され、高速の修復を可能にする。
【0036】
投機的な実行のみならず、通信メッセージ、新しいジョブ信号及びOSコールに対するバッファの投機割り付けもサポートすることにより、並列性が更に促進される。
【0037】
更に、本発明は、機能プログラミング言語による新しい記録、又はオブジェクト・オリエンテッド・プログラミング言語による新しいオブジェクトの投機書き込みに適用可能である。この場合、投機的に実行したジョブにより発生した新しい記録即ちオブジェクトがメイン・メモリ内のプライベート・メモリ・バッファが投機的に割り付けられて、プライベート・メモリ・バッファに書き込まれる。投機が失敗であれば、専用バッファは、単純に割り付け解除される。他方、投機が成功であれば、コミット時に、新しい記録即ちオブジェクトが既にメイン・メモリの所定の位置にあって、それ以上の転送は必要でない。新しい記録/オブジェクトは、共有メモリに対応するポインタ上で処理することにより、例えばポインタを共有メモリにおける変数に書き込むことにより、使用されてもよい。記録/オブジェクトは、実行において使用されてもよく、それ以上必要でないときは、単純に無視されて、対応するメモリ・バッファが割り付け解除される。このポインタは、更に外部ユニットに転送されてもよい。
【0038】
オブジェクト及び記録は、しばしば、通信メッセージ及びジョブ信号より大きな変動サイズがあり、記録/オブジェクト用のメモリ・バッファは、「ヒープ(heap)」と呼ばれるメモリ領域から便宜的に割り付けられる。通常のプログラミング・モデルのときに、例えば、ユニックス(Unix)システム上で実行するCプログラムの場合に、異なるプログラムが相互にデータを破壊できないように、通常、処理当たり1ヒープが存在する。そこで、各メモリ・バッファは、それが割り付けられたヒープに復帰する必要がある。
【0039】
本発明による機構は、メモリ・バッファが割り付けられたときに空きであって(プライベート)、従って破壊される恐れのあるバッファが活性状態でないということを使用することである。
【0040】
本発明は、非投機的に実行したジョブが共有メモリ位置に保持された変数の状態を変更できる必要があるので、通常、変数に対してカスタマイズされないことを理解すべきである。従って、通常、変数の投機状態は、中間位置に一時的にストアされ、かつこれらがコミット時に非中間位置に変換される際に、中間位置から実位置に転送される。
【0041】
投機的に実行したジョブが、新しいメッセージ、信号又は記録/オブジェクトのみを除き、どのような変数状態も発生しないときは、依存性チェックを実行する何らかの機構を省略することができる。これは、割り付けを投機的に行うとしても、メモリ・バッファを一度に1ジョブのみに割り付けることができるためである。これは、通常、付加コードを有する読み出し及び書き込み命令を備えることにより、依存性チェックを行うソフトウェア実現の投機のために重要である。
【0042】
シングル・プロセッサ・システム用に書かれたアプリケーション・ソフトウェアを標準的なマルチプロセッサ環境に移行して再使用しようとするときは、再コンパイル等によりアプリケーション・ソフトウェアを変換してもよい。例えば、逐次的にプログラムされたアプリケーション・ソフトウェアは、依存性チェック用のコード、及びジョブの適正なフラッシュ即ちロール・バックを可能にするように変更した変数のコピーをストアし、次いでソフトウェアを再コンパイルするコードを含め、投機的な実行をサポートする適当なコードを付加することにより、自動的に変更されてもよい。更に、標準的なマルチプロセッサ・システムのオペレーティング・システム又は仮想マシンは、投機的な実行をサポートするように変更されてもよい。例えば、依存性チェック用のコードを実行しているときに依存性を検出した場合は、関連するジョブをフラッシュするオペレーティング・システム/仮想マシンに制御を渡してもよい。
【0043】
図2は、本発明による投機的に実行したジョブにより発生した結果を処理する方法の概要フロー・チャートである。以下のシーケンスのステップは、コンピュータ即ちプロセッサ・システムの要素により、実行可能とされる。種々のステップは、特殊化されたハードウェアにより、複数のプロセッサにより実行されるプログラム命令により、又は両者の組み合わせにより、実行され得ることを認識すべきである。ステップ101において、複数のジョブを投機的に並列に実行し、かつプログラミング・モデルにより許容される順序に従い、コミット優先順位を連続的に複数のジョブに、一度に1つにより、割り当てる。例えば、全体的な生成順序に従って、ジョブがコミットされ、即ちリタイヤされる。ステップ102において、投機的に実行したジョブの結果を保持するためにプライベート・メモリ・バッファを投機的に割り付け、またステップ103において、投機結果を割り付けメモリ・バッファに書き込む。ステップ104に示されているように、実行中、データ変数アクセスについて依存性チェックを行う。投機的に実行したジョブに関して依存性が検出されず(N)、投機的に実行したジョブに最終的なコミット優先順位を割り当てているときは、I/O装置に、対応するメモリ・バッファに対するポインタを転送する(ステップ105)。他方、依存性が検出されたときは(Y)、対応するジョブをフラッシュすると共に、割り付けメモリ・バッファを割り付け解除して(ステップ106)、ジョブの実行を再び開始する(101に戻る)。
【0044】
図3は、本発明の好ましい実施例による簡単な処理システムを示す概要図である。この処理システムは、ネットワーク・コントローラ10の形式にあるI/O装置、実行パイプライン30−1〜30−2、依存性チェッカ35及びメイン・メモリ40を備えている。標準的なネットワーク・コントローラ10の1例は、AMD PC net−FASTチップ(AM79C971)のようなイサーネット・コントローラである。ネットワーク・コントローラ10は、通常、着信メッセージ、発信メッセージ及び信号を処理する送信機部及び受信機部を有する。受信機部は、着信メッセージをストアする多数の受信バッファ41、及びこれらのバッファに対するポインタをストアするように対応する受信メモリ・リング42を含む、即ち関連される。通常、ジョブは、プロセッサのうちの一つにおいて、定期的に、又は新しいメッセージが到着したときの割り込み時に、起動されて、ネットワーク・コントローラ10により受信バッファ41に書き込まれたメッセージに対するポインタについて受信リング42をチェックする。メッセージに対するポインタが発見されたときは、ジョブ信号を生成し、かつプロセッサのうちの1つによる実行のために、他のジョブ信号と共に、スケジュールする。図3には2プロセッサのみを示しているが、並列ジョブ処理のために2プロセッサ以上を使用することが可能なことは、明らかとすべきである。
【0045】
投機メッセージの「送出」のために、好ましくは、メイン・メモリ40内に共通プールのプライベート・メモリ・バッファが存在し、これらのバッファは、投機的に実行したジョブ、及びフリー・バッファに対する(通常、メモリ・アドレスの形式にある)ポインタの中央リストにより発生した他の信号と共に、メッセージを保持するために使用される。都合のよいことに、各プロセッサ30は、共通プールにおけるフリー・バッファに対するそれ自身のいわゆる複数のポインタの「フリー・リスト」32を有し、従って共通プールのバッファを、多数の小さなプライベート・プール45−1及び45ー2のいわゆる送信バッファに論理的に分割する。小専用プール45−1及び45−2は、フリー・リスト及びポインタの中央リストを適当に変化させることにより、小プール内のハイ又はローによるウォータマーク(watermark)により、開放バッファから共通バッファに、より多くのバッファを満たすことが可能とされる。
【0046】
フリー・リスト32−1及び32−2は、それぞれプロセッサ30−1〜30−2内の、又はメイン・メモリ40に割り付けられた物理リストである。
【0047】
投機的に実行したジョブにより発生した新しいメッセージ用のメモリ・バッファの投機的な割り付けは、対応するプロセッサ30に関連したポインタのフリー・リスト32の先頭を考慮して行うことが可能とされる。フリー・リスト32の先頭エントリにストアされたポインタは、割り付けられたメモリ・バッファを指示し、またメッセージは、割り付けられたバッファに投機的に書き込まれる。いわゆる「次のポインタ」は、フリー・リストにおける次のエントリを指示に対するポインタに進められる。
【0048】
投機が失敗のときは、フリー・リストの先頭に対する「次のポインタ」を戻すことにより、割り付けられたメモリ・バッファを割り付け解除する。投機が成功のときは、フリー・リストの先頭エントリにストアされたポインタは、コミット時に、フリー・リスト32からメイン・メモリ40内の送信メモリ・リング46に転送され、次いで「次のポインタ」により指示されたエントリがフリー・リストの新しい先頭となるように、リストから移動される。
【0049】
メモリ・リング46は、都合よいことに、プロセッサ30及びネットワーク・コントローラ10により共有されたメモリに割り付けられたデスクリプタ・リングとして構築される。実際のメッセージ送出は、コミット時に対応するプロセス30のフリー・リスト32からデスクリプタ・リング46にデスクリプタを転送することにより、開始される。各デスクリプタは、好ましくは、a)メッセージ・バッファ(実際のポインタ)に対するアドレス、b)メモリ・バッファの長さ、及びc)バッファの状態を表示するステータス情報を含む。例えば、ネットワーク・コントローラ10は、有効なデスクリプタ用のデスクリプタ・リングを定期的にポーリングする。ネットワーク・コントローラ10は、有効なデスクリプタを見付けると、デスクリプタのアドレス・フィールドにより指示されたメモリ・バッファにストアされているメッセージを送出する。
【0050】
デスクリプタ・リングを使用してバッファ管理上の一般的な情報のために、AMD PCnet−FASTチップAM79C971のデータ・シート58〜63頁を参照する。
【0051】
プロセッサ当たり1プールを使用することは、フラッシュ時にバッファを復帰させる非常に簡単な手順−バッファの割り付けを与える最適化であり、またバッファの復帰は、並列にいくつかのプロセッサにより実行可能とされ、また同期は、共通プールをアクセスするために必要とされない。加えて、復帰したバッファは、同一プロセッサにより再使用され、プロセッサ当たり1データが存在するときに、高いキャッシュ・ヒット率に帰結する。
【0052】
図4は、本発明の他の好ましい実施例による処理システムを示す概要図である。この処理システムは、基本的に、ジョブ信号スケジューラの形式にあるI/O装置10、及び処理ユニット50を備えている。
【0053】
ジョブ信号スケジューラ10は、入出力ユニット11、ジョブ信号メモリ12、ポインタ・メモリ13、メモリ・インターフェース14、TPUユニット(プロセッサ・ユニットへの)15、FPUユニット(処理ユニットからの)16及び制御ユニット17を含む。ジョブ信号スケジューラ10は、処理ユニット50からと共に外部ユニットからのジョブ信号を受け取り、処理のためにジョブ信号をスケジュールする。
【0054】
入出力ユニット11は、地域プロセッサ(regional processors)及び他の周辺装置のような外部ユニットからジョブ信号を受け取って、これらをメモリ・インターフェース14を介してジョブ信号メモリ12に分配する。外部ユニットからのジョブ信号は、通常、外部事象を発生源としているので、システムは事象駆動されていると、みなしてもよい。ジョブ信号メモリ12は、特殊目的メモリか、又は処理ユニットのメイン・メモリ40に割り付けられる。いずれの場合も、ジョブ信号メモリは、スケジューラ10及び処理ユニット50により共有される。ジョブ信号メモリは、ジョブ信号、及び外部ユニットに向けられた通信メッセージをストアする1プールのメモリ・エレメントに適合する。ジョブ信号スケジューラ10は、好ましくは、信号そのものに代わって、ジョブ信号及び通信メッセージに対するポインタ上でその動作の大部分を実行する。従って、各ジョブ信号は、ジョブ信号メモリ12内のメモリ・エレメントに対するポインタに関連され、対応するジョブ信号をジョブ信号メモリ12に書き込むときは、対応するポインタをメモリ・インターフェース14を介してポインタ・メモリ13に送出する。
【0055】
図4において、単線は、概要的にポインタ信号Pを表し、また二重線はジョブ信号/通信メッセージS又はデータ信号Dを表す。
【0056】
ポインタ・メモリ13は、通常、多数のメモリ・キュー(図4に点線により表す)に分割される。単なる一つの代わりに、いくつかのキューを使用することにより、複数の優先順位を処理することが可能であり、異なる優先順位レベルを有するポインタを異なるメモリ・キューにストアする。ジョブ信号スケジューラ10に新しいジョブ信号が到達すると、ジョブ信号のヘッダに含まれる優先順位レベル情報を解析して、対応するポインタを配置すべきメモリ・キューを認識する。次に、ジョブ信号メモリ12にジョブ信号Sを書き込み、かつポインタ・メモリ13に選択したキューにポインタPを配置する。通常、ポインタ・メモリ13内のキューは、優先順位の順序によりサービスするファースト・イン・ファースト・アウト(FIFO)として編成される。
【0057】
到着の順にあるポインタPを優先順位レベル情報に従ってストアすることにより、スケジューリング順序がポインタ・メモリ13内に得られる。処理ユニット50が新しいジョブ信号を受け取ることができるときは、最高の優先順位レベルのメモリ・キューの中で最も古いポインタPがTPUユニット15に転送されることを制御ユニット17が確認する。TPUユニット15は、関連ジョブをフェッチするためポインタPにより表すジョブ信号メモリ12内のメモリ・エレメントを読み出し、取り出したジョブ信号Sを処理ユニット50に送出する。このように、ジョブ信号メモリ12内のジョブ信号をポインタ・メモリ13内のスケジューリング順序に従って処理ユニット20に転送する。
【0058】
ジョブ信号メモリ12及びポインタ・メモリ13は、好ましくは、共通メモリ、例えばメイン・メモリ40内に実施される。
【0059】
ジョブ信号スケジューラ10から処理ユニット50に高い優先順位レベルのジョブ信号を送出するのであれば、ジョブ信号スケジューラ10における割り込み処理は、好ましくは、処理ユニット50におけるジョブの割り込みを開始できる必要がある。
【0060】
処理ユニット50は、好ましくは、一度に1優先順位レベルのみのジョブ信号を処理する。ジョブ信号スケジューラ10からの高い優先順位レベルの信号は、それより低いレベルの信号に割り込みをする。例えば、ジョブ信号スケジューラ10は、割り込み要求を処理ユニット50に送出することによって割り込みを開始することができ、そこで処理ユニットは、現在実行中のジョブに割り込みをすることになる。
【0061】
処理ユニット50は、ジョブ信号キュー20、複数の処理エレメント/プロセッサ30−1〜30−4、データの依存性を処理して投機的に実行したジョブの結果を一時的にストアする組み合わせ依存性チェッカ及び書き込みキュー配列装置35、そしてプログラム・ストア43及びデータ・ストア44に分割されたメモリ・システム40を含む。この例では、プロセッサ・エレメント30−1〜30−4は、好ましくは、実行パイプラインの形式にある。従って、以下、処理エレメントを実行パイプラインと呼ぶ。
【0062】
ジョブ信号スケジューラ10からのジョブ信号は、ジョブ信号をストアするために多数のメモリ位置を有するジョブ・キュー20にバッファリングされる。各ジョブ信号は、ジョブ・キュー20のそれぞれのストア位置に追加的な情報と共にストアされる。
【0063】
一般的に、各ジョブ信号は、ヘッダ及び信号本体を備えている。ヘッダは、通常、管理情報に加えて、プログラム・ストア43内のソフトウェア・コードに対するポインタを含み、ジョブ信号の本体は、対応するジョブの実行に必要な入力オぺランドを含み、これによって、一般的に、内蔵されたジョブ信号を作成する。ソフトウェア・コードは、好ましくは、1以上のテーブル・ルックアップを介して指示される。これは、一般的に、ポインタがルックアップ・テーブル・エントリを実際に指示し、これがまたソフトウェア・コードを指示することを意味する。この信号本体は、地域プロセッサ又は他のプロセッサのような外部ユニットからの信号メッセージであってもよい。
【0064】
一つのジョブは、信号ヘッダにより指定された命令ストリームと定義されてもよく、かつこのジョブは、ジョブ信号の受け取りにより開始し、エンド・ジョブ・ルーチンの呼び出しにより終了する。しかしながら、ジョブ信号そのものは、通常、プログラム・ストア43にストアされるソフトウェア・コードの命令、及びこれらの命令の実行に必要とされるオぺランドに対する単なるポインタのみであって、いかなる命令も含まないことに注意すべきである。
【0065】
実行パイプライン30−1〜30−4は、好ましくは、ジョブ・キュー20内の異なるメモリ位置からジョブ信号を「フェッチ」して異なる複数ジョブを並列に独立的に実行する。実行パイプラインが空きであり、新しいジョブを実行し始めるときは、ジョブ・キュー20を調べて未割り付けジョブ信号を見つけ出し、未割り付けジョブ信号をパイプラインに割り付ける。次いで、ジョブ信号を実行パイプラインにより処理し、対応するジョブを実行する。並列ジョブを実行中の全期間で、ジョブ・キュー20における1ジョブ信号のみがコミット位置にあって、ジョブ信号を割り当てた実行パイプラインが対応するジョブをコミット又はリタイアするのを可能にする。他の実行パイプラインにあるジョブは、投機的に実行され、依存性チェッカ35によりデータ依存性が検出されるときは、フラッシュされてもよい。
【0066】
プロトコルにより情報フローを管理するシステムに対する概要的な必要条件は、関連するいくつかの事象を受け取った順序により処理しなければならないことである。これはシステムに不変であって、どのようにシステムを実施するかは問題ではない。ジョブ間のコミット順序は、通常、処理コアへの到着により定義され、概して変更されることはない。しかしながら、異なる優先順位レベルにある複数のジョブ信号を処理する処理システムでは、処理ユニット50に対する到着によって同一優先順位レベルにある複数ジョブ間のコミット順序を定義するように、低い優先順位のジョブ信号の前に、高い優先順位レベルのジョブ信号を置くことが有用と思われる。
【0067】
一般的に、各実行パイプラインは、プログラム・ストアから複数の命令をフェッチし、これらの命令を実行し、かつメモリの書き戻し及び信号送出を実行する回路を備えている。本発明により使用可能な特定の実行パイプラインの1例は、エリクソンAXEディジタル・スイッチング・システム(Ericsson AXE Digital Switching System)におけるパイプラインである。
【0068】
ジョブ・キュー20は、適当な制御ソフトウェア又はハードウェアとの組み合わせにより、実行パイプライン30−1〜30−4にジョブ信号を割り当て、投機的に実行して完了したジョブのトラッキングを確保し、コミット優先順位をジョブ信号に連続的に割り当て、かつコミットしたジョブ信号を除くために必要とされるプロトコルを管理する。
【0069】
ジョブ・キュー20は、通常、多数のストレージ位置を有する通常のキューである。1例として、ジョブ・キュー20は、メモリの所定部分をそれぞれ固有の自己メモリ・アドレスを有する多数のストレージ位置に論理的に分割することにより、共通メモリに実施可能である。一般的に、ジョブ・キュー20における各ストレージ位置を、例えば下記の表1に説明しているような多数のフィールドに分割する。
【0070】
【表1】
【0071】
フィールド「Valid」は、ストレージ位置が有効なジョブ信号を含む否かを表示するために使用される。ジョブ信号スケジューラ10からジョブ信号を受け取ったときは、これをジョブ・キュー20の最初の空き位置、即ち有効フラグがセットされていない位置に配置する。次いで、有効フラグをセットして「信号」フィールドが現在有効なジョブ信号を含み、かつその位置が占有されていることを表示する。
【0072】
フィールド「済み(Taken)」は、ジョブ信号をパイプラインに割り当てたか否かを表示するために使用され、ジョブ・キュー20内のストレージ位置におけるジョブ信号が実行パイプラインに割り当てられたときは、その位置に対する「済み」フラグがセットされてジョブ信号が割り当てられたことを表示する。
【0073】
フィールド「終了(Finished)」は、ジョブを投機的に実行して完了したことを表示するために使用され、かつそのフィールド「パイプid」及び「ジョブid」は、そのパイプにおけるパイプの識別、及びジョブ信号及び/又は対応するジョブの識別を与えたことを表示するために使用される。パイプラインが最初のジョブに対するジョブ終了ルーチンを実行したときは、ジョブを実行して完了し、かつコミットするべくレディー(準備完了状態)であることを知らせるために、「終了」フラグをセットする。必要ならば、ここでパイプラインは、第2のジョブ信号をフェッチするべくレディーとなる。最初のジョブは、問題とするパイプのジョブid「1」に割り当てられ、またパイプにおいて実行されるべき第2のジョブは、ジョブid「2」に割り当てられる。パイプがコミット優先順位を受け取る前に、第2のジョブを終了すれば、第3の投機ジョブが実行可能となり、以下同様となる。一般的に、パイプ当たりのジョブ数と複雑さとの間の妥協点が作成され、実際では、パイプ当たりのジョブ数が制限される。しかしながら、以下では、各パイプラインは、一度に1ジョブのみを処理するとみなされる。
【0074】
投機的な実行用に適応された処理システムにおいて、ジョブは、一般的に下記の状態、即ち「開始していない」、「開始した」及び「終了した」であり得る。これらの状態は、ジョブ・キュー20において異なる方法により符号化可能とされると共に、表1のフィールド「有効」、「済み」及び「終了」は、これらのジョブ状態を符号化する1方法の単なる例であることを理解すべきである。
【0075】
ジョブ・キュー20は、好ましくは、ジョブ・キュー20におけるどのストレージ位置がコミット位置にあるのかを指示するポインタに関連される。コミット位置にあるジョブ信号は、コミット優先順位を有し、このジョブ信号を処理する実行パイプラインを動作可能状態にしてメモリ書き戻し及び信号送出のコミットを実行する。ジョブ信号がコミット位置に移行すると、対応するパイプラインは、全て書き込み動作及びジョブのための信号送出をコミットし始める。ジョブを実行して完了し、かつ全ての書き込み及び信号送出をコミットしたときは、「有効」フラグをクリアすることにより、その位置を開放し、かつ通常の手段によりジョブ・キュー20をステップしてコミット位置を新しい位置に移動し、これによって、コミット優先順位をジョブ・キュー内のジョブ信号に連続的に割り当てる。
【0076】
例えば、情報をジョブ・キュー・フィールドに書き込み、かつコミット優先順位をジョブ信号に連続的に割り当てるように、ジョブ・キュー20を処理する機能は、好ましくは、例えばマイクロ・コード命令プログラム又はアッセンブラ・プログラムの形式にあるソフトウェアにより、制御される。更に、フラッシュを処理すること、書き込みキュー配列を制御すること、及びスケジューリング機構を制御することのように、処理システムにおける他の機能は、ソフトウェアにより実施されてもよい。
【0077】
依存性チェッカ35は、概要的に、実行パイプライン30−1〜30−4に関連した1以上の読み出しバッファRBを使用することにより、実施される。パイプラインがデータ・ストア44からデータをフェッチするときは、アドレス又は複数アドレスの読み出しは、対応する読み出しバッファにバッファされる。コミット優先順位により実行パイプラインがデータ・ストア44に可変データDの書き戻しを実行するときは、データ・ストアに対する書き込みアドレスを読み出しバッファRB内の読み出しアドレスとアドレスと比較してジョブ間にデータの依存性があるか否かを調べる。この比較は、概してアドレス比較器により実行される。投機的に実行したジョブにより読み出されたデータがジョブのコミットにより変更されているときは、データ依存性が存在しており、投機的に実行した、又は実行しているジョブをフラッシュし、かつ再び開始する必要がある。
【0078】
投機的に実行したジョブにより提案されたデータ・ストアの変更は、書き込みキュー配列35にログ記録されるが、しかしジョブがコミット優先順位を獲得するまで、データ・ストア44に書き込みはしない。書き込みキュー配列35は、好ましくは、多数の個別的な書き込みキューを備えており、1書き込みキューWQが実行パイプライン30−1〜30−4のそれぞれに割り付けられる。高いパフォーマンスのために、書き込みキューは、高速だが、比較的に小さなメモリであるキャッシュ・メモリとして、通常、実施される。一般的に、投機的なジョブがコミット優先順位を獲得するときは、問題とするジョブに属する書き込みキュー・エントリは、データ・ストア44に直ちに書き込まれる。しかしながら、実行中のコミット・ジョブは、一般的に、その書き込みキューにそのデータをストアしないが、しかし依存性チェックを可能にするように、対応するメモリ・アドレスをアドレス比較器に単純に転送する。
【0079】
代替として、書き込みキュー配列35は、例えば、組み合わせ依存性チェッカ及び書き込みキューを開示している国際特許出願WO 88/02513に説明されているように、全実行パイプラインに共通する単一中央化書き込みキューの形式にある。
【0080】
ジョブ信号は、ラウンド・ロビン形式により実行パイプラインに概して割り当てられることを理解すべきである。ラウンド・ロビンでは、パイプラインが段階的に横行する円形ループに配列されているとみなし得る。例えば、この配列は、パイプライン及び書き込みキュー側でコミット位置の管理を非常に簡単化する。ジョブ・キュー20における次のジョブ信号をコミット位置に移動するときは、前のコミット・パイプラインと比較されるループ内の次のパイプラインとして、対応する実行パイプラインを単純に認識し、認識したパイプライン専用の書き込みキューWQにストアされた結果をコミットする。
【0081】
本発明によれば、投機的に発生したジョブ信号及び通信メッセージは、FPUユニット16及びメモリ・インターフェース14を介してジョブ信号メモリ12に直接書き込まれる。対応するジョブ信号及びメッセージを見付けることができるジョブ信号メモリ12内のメモリ領域に対するポインタのみを書き込みキューWQに一時的にストアし、コミット時にFPUユニット16及びメモリ・インターフェース14を介してポインタ・メモリ13に転送する。
【0082】
抽出された特別の並列性に加えて、高価な書き込みキュー・キャッシュにおけるメモリ領域を節約する。更に、実行パイプラインは、投機モードにおいて発生したジョブ信号及び通信メッセージを転送することができる。これは、ジョブ信号データの送信を時間上で引き延ばし、処理ユニット50とジョブ信号スケジューラ10との間のインターフェースに対する帯域幅要求を低くする結果となることを意味する。更に、ポインタのみを転送するので、コミット時に書き込みキューが高速にオフ・ロードされる。
【0083】
ジョブ信号スケジューラ10は、ジョブ信号メモリ12内の空きメモリ・エレメントに対するポインタを処理ユニット50に送出して、1プールの空きポインタを構築する。実行パイプライン30−1〜30−4のそれぞれは、概してこのような多数の空きポインタEPが割り付けられる。各実行パイプラインは、割り付けられたポインタにより指示されたメモリ・エレメントのうちの1つに投機的に、投機的に実行したジョブにより発生した新しいジョブ信号/通信メッセージSを書き込み、実行パイプラインに接続された書き込みキューWQに、ジョブ信号/通信メッセージSを書き込むメモリ・エレメントを指示するポインタPをストアする。信号送出をコミットするために実行パイプラインに優先順位を割り当てると、書き込みキューWQからポインタ・メモリ13内の適当なメモリ・キューに又は外部ユニットに転送するために入出力ユニット11に、ポインタPを転送する。新しいジョブ信号の場合に、対応するジョブ信号Sにおける優先順位レベル情報に基づいてポインタ・メモリ13内の適当なメモリ・キューを認識し、かつジョブ信号と同一の優先順位レベルのメモリ・キューにポインタPを書き込む。ポインタ・メモリ13内のメモリ・キューは、FIFOキューとして構成され、またスケジューリング順序は、優先順位の順序によりサービスされるので、ポインタ・メモリにスケジューリング順序が確立される。
【0084】
ジョブ信号スケジューラ10は、スケジューラがそれ以上ポインタを必要としなければ直ちに、ポインタFPをTPUユニット15を介して処理ユニット50に送出することにより、空きポインタのプールをフルに保持する。
【0085】
1回で完全なジョブ信号又は完全な通信メッセージを書き込む必要性はない。大きな信号は、例えば、処理ユニット50とジョブ信号スケジューラ10との間のバス・インターフェースのブロッキングを防ぐために、複数の断片により書き込まれてもよい。そのときは、処理ユニット50は、バースト間のアドレスを増加して、各バーストの開始で増加したアドレスを送出する必要がある。
【0086】
以上、実行パイプラインは、それぞれ命令実行用の自己専用のリソースを有する個別的な構成要素であるとして説明した。しかしながら、一般的に、命令実行において、実行パイプラインにおける多くのリソースがフルに使用されることはない。そこで、リソースが複数のパイプ間で共有可能となり、要求又は時多重化方式により、リソースに対する実行パイプ・アクセスを実行する。高度のリソース共有を実施する技術は、同時マルチ・スレッディングである。同時マルチスレッディングでは、殆ど全てのリソースが共有され、各パイプライン専用のリソースは、プライベート・プログラム・カウンタと、命令レジスタ、及び物理レジスタにおける論理レジスタ・ナンバー間のプライベート・マッピングとに限定される。
【0087】
更に、ポインタは、ジョブ信号メモリ内のメモリ・エレメントを直接、参照する必要はないが、しかし、1以上のテーブル・ルックアップによりジョブ信号メモリ領域を参照することができることも理解すべきである。
【0088】
更に、アドレス比較方法を参照して依存性チェックを説明した。しかしながら、代替として、依存性チェックは、各処理ユニットがメイン・メモリ内の変数の使用をマークし、かつ依存性の衝突がマーキングに基づいて検出されるマーカ方法により、達成されてもよい。
【0089】
以上で説明した実施例は、例として単に説明され、本発明は、これに限定されないことを理解すべきである。更なる修正、変更、及び開示され、かつ特許請求された基本的に内在する原理を保持する改良は、本発明の範囲内である。
【図面の簡単な説明】
【図1】
本発明による概要的な処理システムの簡単な図である。
【図2】
本発明による投機的に実行したジョブにより発生した結果を処理する方法の概要フロー・チャートである。
【図3】
本発明の好ましい実施例による処理システムを示す概要図である。
【図4】
本発明の他の好ましい実施例による処理システムを示す概要図である。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
SE9803901-9 | 1998-11-16 | ||
SE9803901A SE9803901D0 (sv) | 1998-11-16 | 1998-11-16 | a device for a service network |
SE9902373A SE9902373D0 (sv) | 1998-11-16 | 1999-06-22 | A processing system and method |
SE9902373-1 | 1999-06-22 | ||
PCT/SE1999/002063 WO2000029941A1 (en) | 1998-11-16 | 1999-11-12 | Improved result handling in a multiprocessing system |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002530736A JP2002530736A (ja) | 2002-09-17 |
JP2002530736A5 true JP2002530736A5 (ja) | 2010-10-14 |
JP4608100B2 JP4608100B2 (ja) | 2011-01-05 |
Family
ID=26663436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000582884A Expired - Lifetime JP4608100B2 (ja) | 1998-11-16 | 1999-11-12 | 多重処理システムにおける改良結果処理方法 |
Country Status (9)
Country | Link |
---|---|
EP (1) | EP1131702B1 (ja) |
JP (1) | JP4608100B2 (ja) |
KR (1) | KR100437227B1 (ja) |
AU (1) | AU1437200A (ja) |
BR (1) | BR9915369A (ja) |
CA (1) | CA2350466A1 (ja) |
DE (1) | DE69940784D1 (ja) |
SE (1) | SE9902373D0 (ja) |
WO (1) | WO2000029941A1 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003263331A (ja) * | 2002-03-07 | 2003-09-19 | Toshiba Corp | マルチプロセッサシステム |
AU2003287319B2 (en) * | 2002-10-31 | 2010-06-24 | Lockheed Martin Corporation | Pipeline coprocessor |
GB2401748B (en) * | 2003-05-14 | 2005-04-13 | Motorola Inc | Apparatus and method of memory allocation therefor |
KR100957060B1 (ko) * | 2007-12-12 | 2010-05-13 | 엠텍비젼 주식회사 | 명령어 병렬 스케줄러, 방법 및 그 기록매체 |
US8572359B2 (en) | 2009-12-30 | 2013-10-29 | International Business Machines Corporation | Runtime extraction of data parallelism |
US9696995B2 (en) | 2009-12-30 | 2017-07-04 | International Business Machines Corporation | Parallel execution unit that extracts data parallelism at runtime |
US8683185B2 (en) | 2010-07-26 | 2014-03-25 | International Business Machines Corporation | Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set |
US9086909B2 (en) * | 2011-05-17 | 2015-07-21 | Oracle International Corporation | System and method for supporting work sharing muxing in a cluster |
US9846673B2 (en) | 2011-11-04 | 2017-12-19 | Waseda University | Processor, accelerator, and direct memory access controller within a processor core that each reads/writes a local synchronization flag area for parallel execution |
KR101603429B1 (ko) * | 2014-09-03 | 2016-03-14 | (주)솔투로 | 빅데이터의 멀티프로세스 분배를 통한 멀티 출력 장치 및 그 방법 |
US10042773B2 (en) * | 2015-07-28 | 2018-08-07 | Futurewei Technologies, Inc. | Advance cache allocator |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287467A (en) * | 1991-04-18 | 1994-02-15 | International Business Machines Corporation | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit |
US5511172A (en) * | 1991-11-15 | 1996-04-23 | Matsushita Electric Co. Ind, Ltd. | Speculative execution processor |
US5740393A (en) * | 1993-10-15 | 1998-04-14 | Intel Corporation | Instruction pointer limits in processor that performs speculative out-of-order instruction execution |
ES2138051T3 (es) * | 1994-01-03 | 2000-01-01 | Intel Corp | Metodo y aparato para la realizacion de un sistema de resolucion de bifurcaciones en cuatro etapas en un procesador informatico. |
US5875326A (en) * | 1997-04-25 | 1999-02-23 | International Business Machines Corporation | Data processing system and method for completing out-of-order instructions |
US5870597A (en) * | 1997-06-25 | 1999-02-09 | Sun Microsystems, Inc. | Method for speculative calculation of physical register addresses in an out of order processor |
US6240509B1 (en) * | 1997-12-16 | 2001-05-29 | Intel Corporation | Out-of-pipeline trace buffer for holding instructions that may be re-executed following misspeculation |
-
1999
- 1999-06-22 SE SE9902373A patent/SE9902373D0/xx unknown
- 1999-11-12 DE DE69940784T patent/DE69940784D1/de not_active Expired - Lifetime
- 1999-11-12 JP JP2000582884A patent/JP4608100B2/ja not_active Expired - Lifetime
- 1999-11-12 KR KR10-2001-7006200A patent/KR100437227B1/ko not_active IP Right Cessation
- 1999-11-12 BR BR9915369-6A patent/BR9915369A/pt not_active Application Discontinuation
- 1999-11-12 WO PCT/SE1999/002063 patent/WO2000029941A1/en active IP Right Grant
- 1999-11-12 AU AU14372/00A patent/AU1437200A/en not_active Abandoned
- 1999-11-12 EP EP99972322A patent/EP1131702B1/en not_active Expired - Lifetime
- 1999-11-12 CA CA002350466A patent/CA2350466A1/en not_active Abandoned
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10261835B2 (en) | Hardware thread scheduling | |
US11275590B2 (en) | Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory | |
US5574939A (en) | Multiprocessor coupling system with integrated compile and run time scheduling for parallelism | |
US8145884B2 (en) | Apparatus, method and instruction for initiation of concurrent instruction streams in a multithreading microprocessor | |
US7650602B2 (en) | Parallel processing computer | |
KR101355496B1 (ko) | 복수의 병렬 클러스터들을 포함하는 계층 프로세서의스케쥴링 메카니즘 | |
US20020083373A1 (en) | Journaling for parallel hardware threads in multithreaded processor | |
US20030018684A1 (en) | Multi-thread execution method and parallel processor system | |
US9213677B2 (en) | Reconfigurable processor architecture | |
JPH09120359A (ja) | プロセッサ内の資源割当て追跡方法及びそのシステム | |
RU2312388C2 (ru) | Способ организации многопроцессорной эвм | |
WO2003038602A2 (en) | Method and apparatus for the data-driven synchronous parallel processing of digital data | |
EP1133725B1 (en) | A job parallel processing system for a service network | |
JP4608100B2 (ja) | 多重処理システムにおける改良結果処理方法 | |
JP2002530736A5 (ja) | ||
EP1131701B1 (en) | Multiple job signals per processing unit in a multiprocessing system | |
JP2002530735A5 (ja) | ||
Loikkanen et al. | A fine-grain multithreading superscalar architecture | |
US7748003B2 (en) | Hard real-time response | |
JP2002163121A (ja) | 仮想マルチスレッドプロセッサ及びスレッド実行方法 | |
JPH10187464A (ja) | マルチスカラ・プログラムを作成する方法およびシステム | |
US12112169B2 (en) | Register freeing latency | |
JP2002229780A (ja) | 大規模データパス・アーキテクチャの実行機構 | |
CN108536474B (zh) | 延迟缓冲器 | |
US9141438B2 (en) | Logic for synchronizing multiple tasks |