(57)【特許請求の範囲】
【請求項１】
プロセッサ・システムにおいて、
‐入出力装置（１０）と、
‐複数のジョブを投機的に実行する多数のプロセッサ（３０）と、
‐前記多数のプロセッサ（３０）と前記入出力装置（１０）とによって共有される共有メモリ（４０、１２）と、
‐複数のジョブに対し、一度には１つのジョブでコミット優先順位を割り当てる手段と、
‐投機的に実行したジョブの結果を保持するためにプライベート・メモリ・バッファを前記共有メモリ（４０、１２）に投機的に割り付ける手段と、
‐コミット優先順位が前記投機的に実行したジョブに割り当てられたときは、前記割り付けられたプライベート・メモリ・バッファを指示するポインタを前記入出力装置（１０）に転送する手段と
を備えた処理システム。
【請求項２】
投機的に実行したジョブの結果は、通信メッセージの形式、オペレーティング・システム・コールの形式又は新しいジョブを表すジョブ信号の形式である請求項１記載の処理システム。
【請求項３】
前記入出力装置（１０）は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラである請求項１記載の処理システム。
【請求項４】
前記プライベート・メモリ・バッファは、前記入出力装置（１０）が前記転送されたポインタにより前記結果をアクセスできるように、前記処理システムのメイン・メモリ（４０）内、又はプロセッサ（３０）と前記入出力装置（１０）によって共有される他のメモリ内、に存在する請求項１記載の処理システム。
【請求項５】
各プロセッサは、自己プライベート・プール（４５）のバッファを有し、このプライベート・プールに対して、複数のメモリ・バッファを割り付ける、又は割り付け解除する請求項１記載の処理システム。
【請求項６】
更に、前記プライベート・プール（４５）におけるバッファのハイ又はローレベルの利用に応じて、プライベート・プール（４５）のバッファを共通プールのバッファからの更なるバッファで補充し、かつ前記プライベート・プール（４５）からバッファを前記共通プールに開放する手段を備えている請求項５記載の処理システム。
【請求項７】
各プロセッサは、プール（４５）のメモリ・バッファ内に空きメモリ・バッファに対するポインタの自己リスト（３２）を有し、かつ前記バッファ割り付け手段は、前記対応するプロセッサのリストの先頭からポインタをフェッチすることにより、投機的に実行したジョブの結果を保持するためのメモリ・バッファを割り付ける請求項１記載の処理システム。
【請求項８】
更に、
‐前記投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出する手段（３５）と、
‐検出された依存性に応答して前記投機的に割り付けられたメモリ・バッファを割り付け解除する手段と
を備えた請求項１記載の処理システム。
【請求項９】
前記転送する手段は、前記投機的に実行したジョブにコミット優先順位を割り当てるときは、メモリ手段（４６）に前記ポインタを書き込み、前記入出力装置（１０）によりポインタについて前記メモリ手段をチェックする手段を備えている請求項１記載の処理システム。
【請求項１０】
前記入出力装置（１０）は、ポインタについて前記メモリ手段（４６）を定期的にポーリングするネットワーク・コントローラであり、前記ネットワーク・コントローラは、ポインタを見出したときは、前記ポインタに関連した前記プライベート・メモリ・バッファから取り出した通信メッセージを送出する請求項９記載の処理システム。
【請求項１１】
前記メモリ手段（４６）は、前記処理システムのメイン・メモリ（４０）に割り付けられたリング構造であり、かつ前記ポインタは、前記リング構造（４６）の位置に書き込まれる請求項９記載の処理システム。
【請求項１２】
更に、前記ポインタをメモリ手段（ＷＯ）に投機的に書き込む手段を備え、かつ前記転送手段は、コミット優先順位が前記投機的に実行したジョブに割り当てられたときに、前記メモリ手段（ＷＯ）から前記入出力装置（１０）に前記ポインタを転送する請求項１記載の処理システム。
【請求項１３】
前記メモリ手段（ＷＯ）は、前記処理システムのメイン・メモリ（４０）にハードウェア・キューとして実施された、又は割り付けられた、書き込みキューである請求項１２記載の処理システム。
【請求項１４】
‐前記入出力装置（１０）は、前記多数のプロセッサにより処理するジョブ信号スケジューラ・スケジューリング・ジョブ信号であり、
‐前記割り付け手段は、プライベート・メモリ・バッファをジョブ信号メモリ（１２）を投機的に割り付けて投機的に実行したジョブにより発生した新しいジョブ信号を保持し、前記対応するポインタは、メモリ手段（ＷＯ）に投機的に書き込まれ、
‐前記転送手段は、コミット優先順位が前記投機的に実行したジョブに割り当てられたときは、前記メモリ手段（ＷＯ）から前記入出力装置（１０）に転送して前記新しいジョブ信号のスケジューリングを可能にさせる
請求項１記載の処理システム。
【請求項１５】
各ジョブ信号及びその対応するポインタは、優先順位レベル情報に関連され、かつ前記入出力装置（１０）は、
‐到着の順序及び前記優先順位レベル情報に従って複数のポインタをストアしてスケジューリング順序を得るポインタ・メモリ（１３）と、
‐前記ポインタ・メモリ（１３）におけるスケジューリング順序に従い前記多数のプロセッサ（３０）により処理するために、前記ジョブ信号メモリ（１２）からのジョブ信号を転送する手段と
を備えた請求項１４記載の処理システム。
【請求項１６】
前記転送手段は、前記ポインタ・メモリ（１３）に前記ポインタを転送して前記ポインタを前記スケジューリング順序に配置する請求項１５記載の処理システム。
【請求項１７】
処理システムにおける結果を処理する方法において、
‐多数のプロセッサ（３０）によって、並列に複数のジョブを投機的に実行するステップ（１０１）と、
‐複数のジョブに対し、一度には１つのジョブで優先順位を割り付けるステップと、
‐投機的に実行したジョブの結果を保持するために、プロセッサ（３０）と前記処理システムの入出力装置（１０）によって共有されるメモリ内に、プライベート・メモリ・バッファを投機的に割り付けるステップ（１０２）と、
‐コミット優先順位が投機的に実行したジョブに割り付けられたときに、入出力装置（１０）に割り付けメモリ・バッファを指示するポインタを転送し、前記入出力装置が転送されたポインタにより前記対応する割り付けメモリ・バッファをアクセスするステップ（１０５）と
を備えた結果を処理する方法。
【請求項１８】
更に、
‐投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出するステップ（１０４）と、
‐投機的に実行したジョブについて依存性が検出されたときは、前記対応する投機的に割り付けられたメモリ・バッファを割り付け解除するステップ（１０６）と
を備えた請求項１７記載の結果を処理する方法。
【請求項１９】
前記投機的に実行したジョブの結果は、通信メッセージ、オペレーティング・システム・コール又は新しいジョブを表すジョブ信号の形式である請求項１７記載の結果を処理する方法。
【請求項２０】
前記入出力装置（１０）は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラである請求項１７記載の結果を処理する方法。
【請求項２１】
前記転送する手段は、前記投機的に実行したジョブにコミット優先順位を割り当てるときは、メモリ手段に前記ポインタを書き込み、前記入出力装置によりポインタについて前記メモリ手段をチェックするステップを備えている請求項１７記載の結果を処理する方法。
【請求項２２】
更に、前記ポインタをメモリ手段（ＷＯ）に投機的に書き込むステップを備え、かつ前記転送ステップ（１０５）は、前記投機的に実行したジョブにコミット優先順位を割り当てられたときは、前記メモリ手段（ＷＯ）から前記入出力装置（１０）に前記ポインタを転送することを含む請求項１７記載の結果を処理する方法。
【請求項２３】
前記投機的に実行したジョブは、多数のプロセッサ（３０）により実行され、かつ前記方法は、更に、各プロセッサを自己プライベート・プール（４５）のバッファと関連させるステップを備え、前記プロセッサは、このプライベート・プールに対して、メモリ・バッファを割り付ける、又は割り付け解除する請求項１７記載の結果を処理する方法。
【請求項２４】
処理システムにおいて、
‐複数のジョブを投機的に実行する多数のプロセッサ（３０）と、
‐複数のジョブに対し、一度には１つのジョブでコミット優先順位を割り当てる手段と、
‐前記処理システムの前記メイン・メモリ（４０）内にプライベート・メモリ・バッファを投機的に割り付けて、前記投機的に実行したジョブにコミット優先順位を割り当てられたときは、投機的に実行したジョブにより発生した新しい記録又はオブジェクトが前記メイン・メモリ（４０）内の所定位置にあるように、投機的に実行したジョブにより発生した前記新しい記録又はオブジェクトを保持する手段と、
前記投機的に実行したジョブにコミット優先順位を割り当てたときは、前記割り付けられたプライベート・メモリ・バッファを指示するポインタを共有メモリに渡す手段と、
を備えた処理システム。
【請求項２５】
更に、
‐前記投機的に実行したジョブとコミット優先順位を有するジョブとの間の依存性を検出する手段（３５）と、
‐検出された依存性に応答して前記投機的に割り付けられたメモリ・バッファを割り付け解除する手段と
を備えた請求項２４記載の処理システム。
【発明の詳細な説明】
【０００１】
（発明の技術分野）
本発明は、概して処理技術に関し、特に、多数のプロセッサ又は複数の処理ユニットを有する処理システムに関する。
【０００２】
（発明の背景）
コンピュータ・システム又は処理システムにおける処理能力の改善に対する絶え間のない要求により、より高速かつより効率的なプロセッサが要求されている。処理能力を増大させる通常的なアプローチは、ますます高くした周波数及び高速のメモリを使用することによっている。
【０００３】
特に、アプリケーション・ソフトウェアを変更することなく、処理システムの処理能力を増加させる通常的な方法は、隣接する命令間で見出される密並列性（ｆｉｎｅ−ｇｒａｉｎｅｄ  ｐａｒａｌｌｅｌｉｓｍ）を検出するいわゆるスーパースケーラを使用することである。スーパースケーラでは、いくつかの命令を並列に同時実行するようにプロセッサ内の機能ユニットを構成する。これは、しばしば命令レベルの並列性（ｉｎｓｔｒｕｃｔｉｏｎ−ｌｅｖｅｌ  ｐａｒａｌｌｅｌｉｓｍ）と呼ばれる。
【０００４】
処理能力を増加させる他の方法は、処理システムを多数のプロセッサシステム、即ち並列に動作する多数のプロセッサを有するプロセッサ・システムとして構築することである。いくつかの処理システムは、対称型マルチ・プロセッサ（Ｓｙｍｍｅｔｒｉｃａｌ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｏｒ：ＳＭＰ）として知られたアーキテクチャーにより高いパフォーマンス処理を達成する。スーパースケーラ・プロセッサにより達成される密並列性（ｆｉｎｅ−ｇｒａｉｎｅｄ  ｐａｒａｌｌｅｌｉｓｍ）に対して、ＳＭＰアーキテクチャーは、現在のプログラミング原理により設計されたプログラムにおいて明確に指定された、又はコンパイル中に単一プロセッサ・システムによる逐次な実行用に設計されたプログラムから取り出される粗並列性（ｃｏａｒｓｅ−ｇｒａｉｎｅｄ  ｐａｒａｌｌｅｌｉｓｍ）を検出する。ＳＭＰアーキテクチャーでは、複数のタスクのそれぞれを複数のプロセッサのうちの対応するものによりを実行する。これらのタスクは、互に同時的な複数処理、即ち複数スレッド（ｔｈｒｅａｄ）である。
【０００５】
ソヒ（Ｓｏｈｉ）、ブリーチ（Ｂｒｅａｃｈ）及びビジャイクマル（Ｖｉｊａｙｋｕｍａｒ）によるマルチスカラー・プロセッサの論文（イタリア、サンタ・マルゲリータにおけるコンピュータ・アーキテクチャーに関する第２２回年国際シンポジュウム）において、いわゆるマルチスカラー・プロセッサが説明されている。マルチスカラー・モデルの実行では、制御依存性の観点からスタティック・プログラムを表す制御フロー・グラフ（ＣＦＧ：ｃｏｎｔｒｏl  ｆｌｏｗ  ｇｒａｐｈ）を複数のタスクに分割し、マルチスカラー・プロセッサがＣＦＧを投機的に通り、タスク・サイズの複数ステップを取り込み、絶えずタスク内のあらゆる命令を調べる。タスクの初期プログラム・カウンタを処理ユニットに渡すことにより、実行する複数の処理ユニットの集合のうちの１つに一つのタスクが割り付けられる。そこで、多数のタスクが複数の処理ユニットにより並列に実行可能となり、１サイクル当たりの多数命令の総合実行率に帰結する。マルチスカラー・ハードウェアの機能は、ＣＦＧを通って、複数の処理ユニットに複数のタスクを割り付け、かつ逐次的に実行する形式により、これらのタスクを実行する。必要により、付加的なハードウェアを設けて投機的なメモリ動作を保持し、メモリ依存性の違反を検出し、訂正措置を開始する。先頭にあるタスクは、非投機的であると保証されたタスクのみであるから、先頭を除き、全てのユニットにより実行されるメモリ動作は、投機的である。
【０００６】
米国特許第５,８３２,２６２号は、概して１スケジューリング・プロセッサとの連係により作動して１以上の他のプロセッサにより実行されるべき多数のタスクを管理するリアル・タイム・ハードウェア・スケジューラに関連する。このスケジューラは、２つのリアル・タイム・ハードウェア・スケジューリング・ユニットにより共有メモリ内の循環ＦＩＦＯキュー管理し、そのうちの一つは、実行待ちタスクを管理し、その他は完了したタスクを管理する。スケジューリング・プロセッサは、新しいタスクをスケジュールする要求に基づいて、タスク制御ブロックを構築して、特定の共有メモリにおけるメモリ位置にそのブロックをストアすることにより、動作する。次いで、スケジューリング・プロセッサによって、その位置に対するポインタがリアル・タイム・ハードウェア・スケジューラに送信される。スレーブ・プロセッサは、実行待機タスクの共有メモリ内の位置に対するポインタを取り出すことができる。そこで、スレーブ・プロセッサは、ポインタを使用して実際のタスクを取り出し、そのタスクを実行し、スケジューラにタスク完了を通告する。従って、以上の特許は、通常のマルチタスク・システムにおける間接信号処理に関する。
【０００７】
米国特許第５,７８１,７６３号は、複数の命令を投機的に実行するプロセッサを開示している。プロセッサは、命令レベルでの並列性が得られるように所定の複数動作に割り付けられた多数のスーパースケーラ実行ユニットを有する。
【０００８】
米国特許第５,５６０,０２９号は、マルチ・スレディング（ｍｕｌｔｉ−ｔｈｒｅａｄｉｎｇ）目的に使用される同期コプロセッサを有するデータ処理システムを開示している。
【０００９】
米国特許第５,１９５,１８１号は、概してメッセージの処理に関し、特に複数のポインタを使用することにより、個別的な受信プロセッサと送信プロセッサとの間でメッセージを転送する方法に関する。
【００１０】
しかしながら、より効率的な処理システムに対する一般的な要求が依然として存在する。
【００１１】
（発明の概要）
本発明は、概して、複数のジョブが投機的に並列に実行される多重処理システムに関する。高度の並列性は、更なる粗並列性、いわゆるジョブ・レベルの並列性の存在を投機すると共に、複数ジョブの並列実行を阻止する依存性が検出される場合にのみ、逐次実行を支援することにより、引き出すことが可能とされる。このアプローチは、異なる複数のプロセッサにより複数のジョブを並列に実行可能にするが、実行される複数のジョブは、順にコミットされ、即ち、リタイアさせる必要があり、複数の投機的に実行したジョブ（ｓｐｅｃｕｌａｔｉｖｅｌｙ  ｅｘｅｃｕｔｅｄ  ｊｏｂｓ）がメモリの書き込み及び信号送出をコミットするための優先順位を待機する。
【００１２】
ジョブの投機的な実行は、一般的に、投機的に実行したジョブの結果を保持する機構と共に、投機が成功したか否かを判断するための依存性を検出する機構を必要とする。投機が成功したときは、結果が最終的にコミットされ、また投機が失敗したときは、結果はフラッシュされ、かつ対応するジョブを再開させる。通常、投機的に実行したジョブの結果は、中間メモリ位置に保持され、コミットの際に、これらの結果は、中間メモリ位置からメイン・メモリ内の実位置に、及び／又は外部ユニットに転送される。代替として、「実位置」から古いデータは、履歴ログに記録され、かつ投機結果は、実位置に書き込まれる。投機が失敗したときは、実位置は、履歴ログを使用して古いデータを修復することにより、復元される。投機が成功したときは、投機データは、実位置内の正しい位置に既に存在している。
【００１３】
このような処理システムの展開中では、投機そのものがシステム・パフォーマンスを増加させる非常に効率的な方法であっても、投機結果を処理する機構は、パフォーマンスの更なる改善に対するボトルネックを構成することが認識されていた。
【００１４】
本発明は、このような問題と共に関連する他の問題を効率的な方法により克服する。
【００１５】
本発明の概要的な目的は、高度の並列処理を提供できる効率的な多重処理システムを提供することにある。
【００１６】
本発明の他の目的は、多重処理システムにおいて結果を処理する効率的な方法を提供することにある。
【００１７】
これらの目的及び他の目的は、添付する特許請求の範囲により定義されている本発明により達成される。
【００１８】
本発明による概要的な概念が、投機的に実行したジョブの結果を保持するためのプライベート・メモリ・バッファを投機的に割り付け、かつこれらの結果を割り付けたメモリ・バッファに直接、投機的に書き込む。投機的に実行したジョブにコミット優先順位を割り当てると、割り付けメモリ・バッファを指示するポインタのみが入出力装置に転送され、この入出力装置が転送されたポインタによってメモリ・バッファから結果をアクセスすることが可能となる。この機構は、入出力プロセッサ、ネットワーク・コントローラ、イサーネット回路又はジョブ信号スケジューラのような入出力装置によってアクセス可能なプライベート・メモリ・バッファに、通信メッセージ、オペレーティング・システム・コール及びジョブ信号を投機的に書き込むのをサポートする。これは、対応するジョブの実行が投機的だけでなく、メモリ・バッファに対する割り付け及び書き込みも実行されるので、それ自体、更なる並列性を取り出せることを意味する。
【００１９】
本発明は、ポインタを復元することを必要とするだけで、個々のデータの復元は必要でないので、依存性を検出したときは、更に、急速な復帰も可能にする。
【００２０】
プロセッサは、投機モードにおいて通信メッセージ、オペレーティング・システム・コール又は新しいジョブ信号に関する全ての情報を転送し、これによって時間上でデータ転送を拡大させて、帯域幅要求を軽減させることができる。
【００２１】
特殊なハードウェアを使用してハードウェア実施の投機の場合に、変数の投機状態を保持するために使用されるハードウェア・キューを通って割り付けられたメモリ・バッファに書き込み、これらのハードウェア・キューに対する圧力を軽減させる必要はない。
【００２２】
標準的なオフ・ザ・シェルフ（ｏｆｆ−ｔｈｅ−ｓｈｅｌｆ）マイクロプロセッサを使用してソフトウェア実施の投機の場合には、投機書き込みを行うためのコードが実質的に圧縮される。
【００２３】
更に、メイン・メモリ内に割り付けたプライベート・メモリ・バッファに新しい記録及び対象を直接、投機的に書き込むことをサポートできることも認識されていた。投機的に実行したジョブにより発生した新しい記録又は対象は、プライベート・メモリ・バッファが投機的に割り付けられ、また投機的に実行したジョブに対してコミット優先順位が割り当てられたときは、メイン・メモリ内の所定の位置に新しい記録及び対象が既に配置されており、更なる転送は必要でない。
【００２４】
しかしながら、本発明による機構は、変数の非投機的な状態の位置がプライベート・メモリ位置ではあり得ないが、共有メモリ位置でなければならないので、変数の投機書き込みのために通常、カスタマイズされることはない。
【００２５】
本発明は、下記の効果を提供する。
‐高度の並列性を提供する。
‐投機的な実行のためのオーバーヘッドが最小化され‐投機割り付けメモリ・バッファに対するアクセスがロール・バック及び依存性チェックをサポートする必要がない。
‐帯域幅要求が軽減される。
‐書き込みキュー内のメモリ領域が節約され、処理ユニットがストールするのを防止する。
‐複数のポインタのみを転送するので、コミット優先順位においてオフ・ローディングが速い。
‐発生した通信メッセージ及びジョブ信号を一回書き込むだけである。
【００２６】
本発明により提供される他の効果は、本発明の実施例の下記説明を読むことにより明らかとなる。
【００２７】
本発明は、その更なる目的及び効果と共に、添付する図面と共に行う下記説明を参照することにより、最も良く理解される。
【００２８】
（発明の実施例の詳細な説明）
図の全般にわたり、対応する又は同一の要素に対して同一の参照文字を使用する。
【００２９】
本発明を良く理解するために、以下、図１を参照して本発明により処理する投機結果に対する概要的な原理を簡単に説明する。
【００３０】
図１は、本発明による概要的な処理システムの簡単な図である。この処理システムは、入出力（Ｉ／Ｏ）装置１０、ジョブ分配器２０、多数のプロセッサ又はプロセッサ・ユニット３０−１〜３０−Ｎ、依存性チェッカ３５及びメイン・メモリ４０を備えている。
【００３１】
Ｉ／Ｏ装置１０は、信号及びメッセージを受信して送出する。ジョブ分配器２０は、Ｉ／Ｏ装置１０から複数のジョブ信号を受信し、かつこれらのジョブ信号をジョブの並列実行用のプロセッサ３０−１〜３０−Ｎに割り当てる。並列実行中に、ジョブのうちの１つは、割り付けられたコミット優先順位であり、非投機的に実行されるのに対して、他のジョブは投機的に実行される。プロセッサ３０は、商業的に対称的なマルチプロセッサからハードウェアにより全て実現された実行パイプラインの範囲まで、任意の種類の処理ユニットが可能である。依存性チェッカ３５は、投機的に実行したジョブとコミット優先順位を有するジョブとの間のデータ依存性を検出して投機的な実行が成功したか否かを判断するように構成されている。実行中は、チェッカ３５がデータ・アクセスについて依存性チェックを行って読み出し及び書き込みのプログラム順序が保持されていることをチェックする。依存性チェックは、多数の方法のうちのいずれかにより実現可能とされる。例えば、以下で説明するように、アドレス比較方法又は可変マーカ方法による。
【００３２】
本発明によれば、通信メッセージ、オペレーティング・システム（ＯＳ）コール及び投機的に実行したジョブにより発生した新しいジョブ信号のような結果に対してメイン・メモリ４０内に多数のメモリ・バッファを割り付ける。メモリ・バッファは、好ましくは、プール４５−１〜４５−Ｎのバッファに分割されて、各プロセッサ３０はそれ自体のプール４５のバッファを有する。都合よいことに、各プールのバッファは、図１に示すように、メイン・メモリ内のリンク・リストとして、実施される。
【００３３】
投機的に実行したジョブにより発生した通信メッセージ等は、対応するプロセッサ３０にプール４５の割り付けバッファにプライベート・メモリ・バッファを投機的に割り付けられ、かつメッセージは、図１に示すように割り付けられたプライベート・バッファに投機的に書き込まれる。投機的な実行は、メッセージの実際的な送出を含むべきでない。これは、対応するジョブがコミット優先順位を獲得するまで、割り付けバッファから通信チャネルにメッセージを手渡してはならないことを意味する。投機的に実行したジョブにコミット優先順位を割り当てると、割り付けメモリ・バッファに対するポインタは、Ｉ／Ｏ装置１０に転送される。メイン・メモリ４０は、Ｉ／Ｏ装置１０が転送したポインタにより通信メッセージを取り出せるように、Ｉ／Ｏ装置１０及びプロセッサ３０−１〜３０−Ｎにより共有される。
【００３４】
ポインタは、多数の方法のうちの任意のものによりＩ／Ｏ装置に転送されてもよい。例えば、ポインタをＩ／Ｏ装置に転送する３つの基本的な手順を以下に概説する。
ｉ）コミット時に、関連プロセッサからＩ／Ｏ装置にポインタを直接、書き込む。
ｉｉ）コミット時に、メモリ手段にポインタを書き込み、これをＩ／Ｏ装置によるポインタについてチェックする。
ｉｉｉ）中間メモリ位置にポインタを投機的に書き込み、かつコミット時に、中間メモリ位置からＩ／Ｏ装置にポインタを転送する。
【００３５】
投機が失敗したことを示す依存性が検出されたときは、割り付けメモリ・バッファが単純に割り付け解除され、高速の修復を可能にする。
【００３６】
投機的な実行のみならず、通信メッセージ、新しいジョブ信号及びＯＳコールに対するバッファの投機割り付けもサポートすることにより、並列性が更に促進される。
【００３７】
更に、本発明は、機能プログラミング言語による新しい記録、又はオブジェクト・オリエンテッド・プログラミング言語による新しいオブジェクトの投機書き込みに適用可能である。この場合、投機的に実行したジョブにより発生した新しい記録即ちオブジェクトがメイン・メモリ内のプライベート・メモリ・バッファが投機的に割り付けられて、プライベート・メモリ・バッファに書き込まれる。投機が失敗であれば、専用バッファは、単純に割り付け解除される。他方、投機が成功であれば、コミット時に、新しい記録即ちオブジェクトが既にメイン・メモリの所定の位置にあって、それ以上の転送は必要でない。新しい記録／オブジェクトは、共有メモリに対応するポインタ上で処理することにより、例えばポインタを共有メモリにおける変数に書き込むことにより、使用されてもよい。記録／オブジェクトは、実行において使用されてもよく、それ以上必要でないときは、単純に無視されて、対応するメモリ・バッファが割り付け解除される。このポインタは、更に外部ユニットに転送されてもよい。
【００３８】
オブジェクト及び記録は、しばしば、通信メッセージ及びジョブ信号より大きな変動サイズがあり、記録／オブジェクト用のメモリ・バッファは、「ヒープ（ｈｅａｐ）」と呼ばれるメモリ領域から便宜的に割り付けられる。通常のプログラミング・モデルのときに、例えば、ユニックス（Ｕｎｉｘ）システム上で実行するＣプログラムの場合に、異なるプログラムが相互にデータを破壊できないように、通常、処理当たり１ヒープが存在する。そこで、各メモリ・バッファは、それが割り付けられたヒープに復帰する必要がある。
【００３９】
本発明による機構は、メモリ・バッファが割り付けられたときに空きであって（プライベート）、従って破壊される恐れのあるバッファが活性状態でないということを使用することである。
【００４０】
本発明は、非投機的に実行したジョブが共有メモリ位置に保持された変数の状態を変更できる必要があるので、通常、変数に対してカスタマイズされないことを理解すべきである。従って、通常、変数の投機状態は、中間位置に一時的にストアされ、かつこれらがコミット時に非中間位置に変換される際に、中間位置から実位置に転送される。
【００４１】
投機的に実行したジョブが、新しいメッセージ、信号又は記録／オブジェクトのみを除き、どのような変数状態も発生しないときは、依存性チェックを実行する何らかの機構を省略することができる。これは、割り付けを投機的に行うとしても、メモリ・バッファを一度に１ジョブのみに割り付けることができるためである。これは、通常、付加コードを有する読み出し及び書き込み命令を備えることにより、依存性チェックを行うソフトウェア実現の投機のために重要である。
【００４２】
シングル・プロセッサ・システム用に書かれたアプリケーション・ソフトウェアを標準的なマルチプロセッサ環境に移行して再使用しようとするときは、再コンパイル等によりアプリケーション・ソフトウェアを変換してもよい。例えば、逐次的にプログラムされたアプリケーション・ソフトウェアは、依存性チェック用のコード、及びジョブの適正なフラッシュ即ちロール・バックを可能にするように変更した変数のコピーをストアし、次いでソフトウェアを再コンパイルするコードを含め、投機的な実行をサポートする適当なコードを付加することにより、自動的に変更されてもよい。更に、標準的なマルチプロセッサ・システムのオペレーティング・システム又は仮想マシンは、投機的な実行をサポートするように変更されてもよい。例えば、依存性チェック用のコードを実行しているときに依存性を検出した場合は、関連するジョブをフラッシュするオペレーティング・システム／仮想マシンに制御を渡してもよい。
【００４３】
図２は、本発明による投機的に実行したジョブにより発生した結果を処理する方法の概要フロー・チャートである。以下のシーケンスのステップは、コンピュータ即ちプロセッサ・システムの要素により、実行可能とされる。種々のステップは、特殊化されたハードウェアにより、複数のプロセッサにより実行されるプログラム命令により、又は両者の組み合わせにより、実行され得ることを認識すべきである。ステップ１０１において、複数のジョブを投機的に並列に実行し、かつプログラミング・モデルにより許容される順序に従い、コミット優先順位を連続的に複数のジョブに、一度に１つにより、割り当てる。例えば、全体的な生成順序に従って、ジョブがコミットされ、即ちリタイヤされる。ステップ１０２において、投機的に実行したジョブの結果を保持するためにプライベート・メモリ・バッファを投機的に割り付け、またステップ１０３において、投機結果を割り付けメモリ・バッファに書き込む。ステップ１０４に示されているように、実行中、データ変数アクセスについて依存性チェックを行う。投機的に実行したジョブに関して依存性が検出されず（Ｎ）、投機的に実行したジョブに最終的なコミット優先順位を割り当てているときは、Ｉ／Ｏ装置に、対応するメモリ・バッファに対するポインタを転送する（ステップ１０５）。他方、依存性が検出されたときは（Ｙ）、対応するジョブをフラッシュすると共に、割り付けメモリ・バッファを割り付け解除して（ステップ１０６）、ジョブの実行を再び開始する（１０１に戻る）。
【００４４】
図３は、本発明の好ましい実施例による簡単な処理システムを示す概要図である。この処理システムは、ネットワーク・コントローラ１０の形式にあるＩ／Ｏ装置、実行パイプライン３０−１〜３０−２、依存性チェッカ３５及びメイン・メモリ４０を備えている。標準的なネットワーク・コントローラ１０の１例は、ＡＭＤ  ＰＣ  ｎｅｔ−ＦＡＳＴチップ（ＡＭ７９Ｃ９７１）のようなイサーネット・コントローラである。ネットワーク・コントローラ１０は、通常、着信メッセージ、発信メッセージ及び信号を処理する送信機部及び受信機部を有する。受信機部は、着信メッセージをストアする多数の受信バッファ４１、及びこれらのバッファに対するポインタをストアするように対応する受信メモリ・リング４２を含む、即ち関連される。通常、ジョブは、プロセッサのうちの一つにおいて、定期的に、又は新しいメッセージが到着したときの割り込み時に、起動されて、ネットワーク・コントローラ１０により受信バッファ４１に書き込まれたメッセージに対するポインタについて受信リング４２をチェックする。メッセージに対するポインタが発見されたときは、ジョブ信号を生成し、かつプロセッサのうちの１つによる実行のために、他のジョブ信号と共に、スケジュールする。図３には２プロセッサのみを示しているが、並列ジョブ処理のために２プロセッサ以上を使用することが可能なことは、明らかとすべきである。
【００４５】
投機メッセージの「送出」のために、好ましくは、メイン・メモリ４０内に共通プールのプライベート・メモリ・バッファが存在し、これらのバッファは、投機的に実行したジョブ、及びフリー・バッファに対する（通常、メモリ・アドレスの形式にある）ポインタの中央リストにより発生した他の信号と共に、メッセージを保持するために使用される。都合のよいことに、各プロセッサ３０は、共通プールにおけるフリー・バッファに対するそれ自身のいわゆる複数のポインタの「フリー・リスト」３２を有し、従って共通プールのバッファを、多数の小さなプライベート・プール４５−１及び４５ー２のいわゆる送信バッファに論理的に分割する。小専用プール４５−１及び４５−２は、フリー・リスト及びポインタの中央リストを適当に変化させることにより、小プール内のハイ又はローによるウォータマーク（ｗａｔｅｒｍａｒｋ）により、開放バッファから共通バッファに、より多くのバッファを満たすことが可能とされる。
【００４６】
フリー・リスト３２−１及び３２−２は、それぞれプロセッサ３０−１〜３０−２内の、又はメイン・メモリ４０に割り付けられた物理リストである。
【００４７】
投機的に実行したジョブにより発生した新しいメッセージ用のメモリ・バッファの投機的な割り付けは、対応するプロセッサ３０に関連したポインタのフリー・リスト３２の先頭を考慮して行うことが可能とされる。フリー・リスト３２の先頭エントリにストアされたポインタは、割り付けられたメモリ・バッファを指示し、またメッセージは、割り付けられたバッファに投機的に書き込まれる。いわゆる「次のポインタ」は、フリー・リストにおける次のエントリを指示に対するポインタに進められる。
【００４８】
投機が失敗のときは、フリー・リストの先頭に対する「次のポインタ」を戻すことにより、割り付けられたメモリ・バッファを割り付け解除する。投機が成功のときは、フリー・リストの先頭エントリにストアされたポインタは、コミット時に、フリー・リスト３２からメイン・メモリ４０内の送信メモリ・リング４６に転送され、次いで「次のポインタ」により指示されたエントリがフリー・リストの新しい先頭となるように、リストから移動される。
【００４９】
メモリ・リング４６は、都合よいことに、プロセッサ３０及びネットワーク・コントローラ１０により共有されたメモリに割り付けられたデスクリプタ・リングとして構築される。実際のメッセージ送出は、コミット時に対応するプロセス３０のフリー・リスト３２からデスクリプタ・リング４６にデスクリプタを転送することにより、開始される。各デスクリプタは、好ましくは、ａ）メッセージ・バッファ（実際のポインタ）に対するアドレス、ｂ）メモリ・バッファの長さ、及びｃ）バッファの状態を表示するステータス情報を含む。例えば、ネットワーク・コントローラ１０は、有効なデスクリプタ用のデスクリプタ・リングを定期的にポーリングする。ネットワーク・コントローラ１０は、有効なデスクリプタを見付けると、デスクリプタのアドレス・フィールドにより指示されたメモリ・バッファにストアされているメッセージを送出する。
【００５０】
デスクリプタ・リングを使用してバッファ管理上の一般的な情報のために、ＡＭＤ  ＰＣｎｅｔ−ＦＡＳＴチップＡＭ７９Ｃ９７１のデータ・シート５８〜６３頁を参照する。
【００５１】
プロセッサ当たり１プールを使用することは、フラッシュ時にバッファを復帰させる非常に簡単な手順−バッファの割り付けを与える最適化であり、またバッファの復帰は、並列にいくつかのプロセッサにより実行可能とされ、また同期は、共通プールをアクセスするために必要とされない。加えて、復帰したバッファは、同一プロセッサにより再使用され、プロセッサ当たり１データが存在するときに、高いキャッシュ・ヒット率に帰結する。
【００５２】
図４は、本発明の他の好ましい実施例による処理システムを示す概要図である。この処理システムは、基本的に、ジョブ信号スケジューラの形式にあるＩ／Ｏ装置１０、及び処理ユニット５０を備えている。
【００５３】
ジョブ信号スケジューラ１０は、入出力ユニット１１、ジョブ信号メモリ１２、ポインタ・メモリ１３、メモリ・インターフェース１４、ＴＰＵユニット（プロセッサ・ユニットへの）１５、ＦＰＵユニット（処理ユニットからの）１６及び制御ユニット１７を含む。ジョブ信号スケジューラ１０は、処理ユニット５０からと共に外部ユニットからのジョブ信号を受け取り、処理のためにジョブ信号をスケジュールする。
【００５４】
入出力ユニット１１は、地域プロセッサ（ｒｅｇｉｏｎａｌ  ｐｒｏｃｅｓｓｏｒｓ）及び他の周辺装置のような外部ユニットからジョブ信号を受け取って、これらをメモリ・インターフェース１４を介してジョブ信号メモリ１２に分配する。外部ユニットからのジョブ信号は、通常、外部事象を発生源としているので、システムは事象駆動されていると、みなしてもよい。ジョブ信号メモリ１２は、特殊目的メモリか、又は処理ユニットのメイン・メモリ４０に割り付けられる。いずれの場合も、ジョブ信号メモリは、スケジューラ１０及び処理ユニット５０により共有される。ジョブ信号メモリは、ジョブ信号、及び外部ユニットに向けられた通信メッセージをストアする１プールのメモリ・エレメントに適合する。ジョブ信号スケジューラ１０は、好ましくは、信号そのものに代わって、ジョブ信号及び通信メッセージに対するポインタ上でその動作の大部分を実行する。従って、各ジョブ信号は、ジョブ信号メモリ１２内のメモリ・エレメントに対するポインタに関連され、対応するジョブ信号をジョブ信号メモリ１２に書き込むときは、対応するポインタをメモリ・インターフェース１４を介してポインタ・メモリ１３に送出する。
【００５５】
図４において、単線は、概要的にポインタ信号Ｐを表し、また二重線はジョブ信号／通信メッセージＳ又はデータ信号Ｄを表す。
【００５６】
ポインタ・メモリ１３は、通常、多数のメモリ・キュー（図４に点線により表す）に分割される。単なる一つの代わりに、いくつかのキューを使用することにより、複数の優先順位を処理することが可能であり、異なる優先順位レベルを有するポインタを異なるメモリ・キューにストアする。ジョブ信号スケジューラ１０に新しいジョブ信号が到達すると、ジョブ信号のヘッダに含まれる優先順位レベル情報を解析して、対応するポインタを配置すべきメモリ・キューを認識する。次に、ジョブ信号メモリ１２にジョブ信号Ｓを書き込み、かつポインタ・メモリ１３に選択したキューにポインタＰを配置する。通常、ポインタ・メモリ１３内のキューは、優先順位の順序によりサービスするファースト・イン・ファースト・アウト（ＦＩＦＯ）として編成される。
【００５７】
到着の順にあるポインタＰを優先順位レベル情報に従ってストアすることにより、スケジューリング順序がポインタ・メモリ１３内に得られる。処理ユニット５０が新しいジョブ信号を受け取ることができるときは、最高の優先順位レベルのメモリ・キューの中で最も古いポインタＰがＴＰＵユニット１５に転送されることを制御ユニット１７が確認する。ＴＰＵユニット１５は、関連ジョブをフェッチするためポインタＰにより表すジョブ信号メモリ１２内のメモリ・エレメントを読み出し、取り出したジョブ信号Ｓを処理ユニット５０に送出する。このように、ジョブ信号メモリ１２内のジョブ信号をポインタ・メモリ１３内のスケジューリング順序に従って処理ユニット２０に転送する。
【００５８】
ジョブ信号メモリ１２及びポインタ・メモリ１３は、好ましくは、共通メモリ、例えばメイン・メモリ４０内に実施される。
【００５９】
ジョブ信号スケジューラ１０から処理ユニット５０に高い優先順位レベルのジョブ信号を送出するのであれば、ジョブ信号スケジューラ１０における割り込み処理は、好ましくは、処理ユニット５０におけるジョブの割り込みを開始できる必要がある。
【００６０】
処理ユニット５０は、好ましくは、一度に１優先順位レベルのみのジョブ信号を処理する。ジョブ信号スケジューラ１０からの高い優先順位レベルの信号は、それより低いレベルの信号に割り込みをする。例えば、ジョブ信号スケジューラ１０は、割り込み要求を処理ユニット５０に送出することによって割り込みを開始することができ、そこで処理ユニットは、現在実行中のジョブに割り込みをすることになる。
【００６１】
処理ユニット５０は、ジョブ信号キュー２０、複数の処理エレメント／プロセッサ３０−１〜３０−４、データの依存性を処理して投機的に実行したジョブの結果を一時的にストアする組み合わせ依存性チェッカ及び書き込みキュー配列装置３５、そしてプログラム・ストア４３及びデータ・ストア４４に分割されたメモリ・システム４０を含む。この例では、プロセッサ・エレメント３０−１〜３０−４は、好ましくは、実行パイプラインの形式にある。従って、以下、処理エレメントを実行パイプラインと呼ぶ。
【００６２】
ジョブ信号スケジューラ１０からのジョブ信号は、ジョブ信号をストアするために多数のメモリ位置を有するジョブ・キュー２０にバッファリングされる。各ジョブ信号は、ジョブ・キュー２０のそれぞれのストア位置に追加的な情報と共にストアされる。
【００６３】
一般的に、各ジョブ信号は、ヘッダ及び信号本体を備えている。ヘッダは、通常、管理情報に加えて、プログラム・ストア４３内のソフトウェア・コードに対するポインタを含み、ジョブ信号の本体は、対応するジョブの実行に必要な入力オぺランドを含み、これによって、一般的に、内蔵されたジョブ信号を作成する。ソフトウェア・コードは、好ましくは、１以上のテーブル・ルックアップを介して指示される。これは、一般的に、ポインタがルックアップ・テーブル・エントリを実際に指示し、これがまたソフトウェア・コードを指示することを意味する。この信号本体は、地域プロセッサ又は他のプロセッサのような外部ユニットからの信号メッセージであってもよい。
【００６４】
一つのジョブは、信号ヘッダにより指定された命令ストリームと定義されてもよく、かつこのジョブは、ジョブ信号の受け取りにより開始し、エンド・ジョブ・ルーチンの呼び出しにより終了する。しかしながら、ジョブ信号そのものは、通常、プログラム・ストア４３にストアされるソフトウェア・コードの命令、及びこれらの命令の実行に必要とされるオぺランドに対する単なるポインタのみであって、いかなる命令も含まないことに注意すべきである。
【００６５】
実行パイプライン３０−１〜３０−４は、好ましくは、ジョブ・キュー２０内の異なるメモリ位置からジョブ信号を「フェッチ」して異なる複数ジョブを並列に独立的に実行する。実行パイプラインが空きであり、新しいジョブを実行し始めるときは、ジョブ・キュー２０を調べて未割り付けジョブ信号を見つけ出し、未割り付けジョブ信号をパイプラインに割り付ける。次いで、ジョブ信号を実行パイプラインにより処理し、対応するジョブを実行する。並列ジョブを実行中の全期間で、ジョブ・キュー２０における１ジョブ信号のみがコミット位置にあって、ジョブ信号を割り当てた実行パイプラインが対応するジョブをコミット又はリタイアするのを可能にする。他の実行パイプラインにあるジョブは、投機的に実行され、依存性チェッカ３５によりデータ依存性が検出されるときは、フラッシュされてもよい。
【００６６】
プロトコルにより情報フローを管理するシステムに対する概要的な必要条件は、関連するいくつかの事象を受け取った順序により処理しなければならないことである。これはシステムに不変であって、どのようにシステムを実施するかは問題ではない。ジョブ間のコミット順序は、通常、処理コアへの到着により定義され、概して変更されることはない。しかしながら、異なる優先順位レベルにある複数のジョブ信号を処理する処理システムでは、処理ユニット５０に対する到着によって同一優先順位レベルにある複数ジョブ間のコミット順序を定義するように、低い優先順位のジョブ信号の前に、高い優先順位レベルのジョブ信号を置くことが有用と思われる。
【００６７】
一般的に、各実行パイプラインは、プログラム・ストアから複数の命令をフェッチし、これらの命令を実行し、かつメモリの書き戻し及び信号送出を実行する回路を備えている。本発明により使用可能な特定の実行パイプラインの１例は、エリクソンＡＸＥディジタル・スイッチング・システム（Ｅｒｉｃｓｓｏｎ  ＡＸＥ  Ｄｉｇｉｔａｌ  Ｓｗｉｔｃｈｉｎｇ  Ｓｙｓｔｅｍ）におけるパイプラインである。
【００６８】
ジョブ・キュー２０は、適当な制御ソフトウェア又はハードウェアとの組み合わせにより、実行パイプライン３０−１〜３０−４にジョブ信号を割り当て、投機的に実行して完了したジョブのトラッキングを確保し、コミット優先順位をジョブ信号に連続的に割り当て、かつコミットしたジョブ信号を除くために必要とされるプロトコルを管理する。
【００６９】
ジョブ・キュー２０は、通常、多数のストレージ位置を有する通常のキューである。１例として、ジョブ・キュー２０は、メモリの所定部分をそれぞれ固有の自己メモリ・アドレスを有する多数のストレージ位置に論理的に分割することにより、共通メモリに実施可能である。一般的に、ジョブ・キュー２０における各ストレージ位置を、例えば下記の表１に説明しているような多数のフィールドに分割する。
【００７０】
【表１】
0004608100.tif 000002
【００７１】
フィールド「Ｖａｌｉｄ」は、ストレージ位置が有効なジョブ信号を含む否かを表示するために使用される。ジョブ信号スケジューラ１０からジョブ信号を受け取ったときは、これをジョブ・キュー２０の最初の空き位置、即ち有効フラグがセットされていない位置に配置する。次いで、有効フラグをセットして「信号」フィールドが現在有効なジョブ信号を含み、かつその位置が占有されていることを表示する。
【００７２】
フィールド「済み（Ｔａｋｅｎ）」は、ジョブ信号をパイプラインに割り当てたか否かを表示するために使用され、ジョブ・キュー２０内のストレージ位置におけるジョブ信号が実行パイプラインに割り当てられたときは、その位置に対する「済み」フラグがセットされてジョブ信号が割り当てられたことを表示する。
【００７３】
フィールド「終了（Ｆｉｎｉｓｈｅｄ）」は、ジョブを投機的に実行して完了したことを表示するために使用され、かつそのフィールド「パイプｉｄ」及び「ジョブｉｄ」は、そのパイプにおけるパイプの識別、及びジョブ信号及び／又は対応するジョブの識別を与えたことを表示するために使用される。パイプラインが最初のジョブに対するジョブ終了ルーチンを実行したときは、ジョブを実行して完了し、かつコミットするべくレディー（準備完了状態）であることを知らせるために、「終了」フラグをセットする。必要ならば、ここでパイプラインは、第２のジョブ信号をフェッチするべくレディーとなる。最初のジョブは、問題とするパイプのジョブｉｄ「１」に割り当てられ、またパイプにおいて実行されるべき第２のジョブは、ジョブｉｄ「２」に割り当てられる。パイプがコミット優先順位を受け取る前に、第２のジョブを終了すれば、第３の投機ジョブが実行可能となり、以下同様となる。一般的に、パイプ当たりのジョブ数と複雑さとの間の妥協点が作成され、実際では、パイプ当たりのジョブ数が制限される。しかしながら、以下では、各パイプラインは、一度に１ジョブのみを処理するとみなされる。
【００７４】
投機的な実行用に適応された処理システムにおいて、ジョブは、一般的に下記の状態、即ち「開始していない」、「開始した」及び「終了した」であり得る。これらの状態は、ジョブ・キュー２０において異なる方法により符号化可能とされると共に、表１のフィールド「有効」、「済み」及び「終了」は、これらのジョブ状態を符号化する１方法の単なる例であることを理解すべきである。
【００７５】
ジョブ・キュー２０は、好ましくは、ジョブ・キュー２０におけるどのストレージ位置がコミット位置にあるのかを指示するポインタに関連される。コミット位置にあるジョブ信号は、コミット優先順位を有し、このジョブ信号を処理する実行パイプラインを動作可能状態にしてメモリ書き戻し及び信号送出のコミットを実行する。ジョブ信号がコミット位置に移行すると、対応するパイプラインは、全て書き込み動作及びジョブのための信号送出をコミットし始める。ジョブを実行して完了し、かつ全ての書き込み及び信号送出をコミットしたときは、「有効」フラグをクリアすることにより、その位置を開放し、かつ通常の手段によりジョブ・キュー２０をステップしてコミット位置を新しい位置に移動し、これによって、コミット優先順位をジョブ・キュー内のジョブ信号に連続的に割り当てる。
【００７６】
例えば、情報をジョブ・キュー・フィールドに書き込み、かつコミット優先順位をジョブ信号に連続的に割り当てるように、ジョブ・キュー２０を処理する機能は、好ましくは、例えばマイクロ・コード命令プログラム又はアッセンブラ・プログラムの形式にあるソフトウェアにより、制御される。更に、フラッシュを処理すること、書き込みキュー配列を制御すること、及びスケジューリング機構を制御することのように、処理システムにおける他の機能は、ソフトウェアにより実施されてもよい。
【００７７】
依存性チェッカ３５は、概要的に、実行パイプライン３０−１〜３０−４に関連した１以上の読み出しバッファＲＢを使用することにより、実施される。パイプラインがデータ・ストア４４からデータをフェッチするときは、アドレス又は複数アドレスの読み出しは、対応する読み出しバッファにバッファされる。コミット優先順位により実行パイプラインがデータ・ストア４４に可変データＤの書き戻しを実行するときは、データ・ストアに対する書き込みアドレスを読み出しバッファＲＢ内の読み出しアドレスとアドレスと比較してジョブ間にデータの依存性があるか否かを調べる。この比較は、概してアドレス比較器により実行される。投機的に実行したジョブにより読み出されたデータがジョブのコミットにより変更されているときは、データ依存性が存在しており、投機的に実行した、又は実行しているジョブをフラッシュし、かつ再び開始する必要がある。
【００７８】
投機的に実行したジョブにより提案されたデータ・ストアの変更は、書き込みキュー配列３５にログ記録されるが、しかしジョブがコミット優先順位を獲得するまで、データ・ストア４４に書き込みはしない。書き込みキュー配列３５は、好ましくは、多数の個別的な書き込みキューを備えており、１書き込みキューＷＱが実行パイプライン３０−１〜３０−４のそれぞれに割り付けられる。高いパフォーマンスのために、書き込みキューは、高速だが、比較的に小さなメモリであるキャッシュ・メモリとして、通常、実施される。一般的に、投機的なジョブがコミット優先順位を獲得するときは、問題とするジョブに属する書き込みキュー・エントリは、データ・ストア４４に直ちに書き込まれる。しかしながら、実行中のコミット・ジョブは、一般的に、その書き込みキューにそのデータをストアしないが、しかし依存性チェックを可能にするように、対応するメモリ・アドレスをアドレス比較器に単純に転送する。
【００７９】
代替として、書き込みキュー配列３５は、例えば、組み合わせ依存性チェッカ及び書き込みキューを開示している国際特許出願ＷＯ  ８８／０２５１３に説明されているように、全実行パイプラインに共通する単一中央化書き込みキューの形式にある。
【００８０】
ジョブ信号は、ラウンド・ロビン形式により実行パイプラインに概して割り当てられることを理解すべきである。ラウンド・ロビンでは、パイプラインが段階的に横行する円形ループに配列されているとみなし得る。例えば、この配列は、パイプライン及び書き込みキュー側でコミット位置の管理を非常に簡単化する。ジョブ・キュー２０における次のジョブ信号をコミット位置に移動するときは、前のコミット・パイプラインと比較されるループ内の次のパイプラインとして、対応する実行パイプラインを単純に認識し、認識したパイプライン専用の書き込みキューＷＱにストアされた結果をコミットする。
【００８１】
本発明によれば、投機的に発生したジョブ信号及び通信メッセージは、ＦＰＵユニット１６及びメモリ・インターフェース１４を介してジョブ信号メモリ１２に直接書き込まれる。対応するジョブ信号及びメッセージを見付けることができるジョブ信号メモリ１２内のメモリ領域に対するポインタのみを書き込みキューＷＱに一時的にストアし、コミット時にＦＰＵユニット１６及びメモリ・インターフェース１４を介してポインタ・メモリ１３に転送する。
【００８２】
抽出された特別の並列性に加えて、高価な書き込みキュー・キャッシュにおけるメモリ領域を節約する。更に、実行パイプラインは、投機モードにおいて発生したジョブ信号及び通信メッセージを転送することができる。これは、ジョブ信号データの送信を時間上で引き延ばし、処理ユニット５０とジョブ信号スケジューラ１０との間のインターフェースに対する帯域幅要求を低くする結果となることを意味する。更に、ポインタのみを転送するので、コミット時に書き込みキューが高速にオフ・ロードされる。
【００８３】
ジョブ信号スケジューラ１０は、ジョブ信号メモリ１２内の空きメモリ・エレメントに対するポインタを処理ユニット５０に送出して、１プールの空きポインタを構築する。実行パイプライン３０−１〜３０−４のそれぞれは、概してこのような多数の空きポインタＥＰが割り付けられる。各実行パイプラインは、割り付けられたポインタにより指示されたメモリ・エレメントのうちの１つに投機的に、投機的に実行したジョブにより発生した新しいジョブ信号／通信メッセージＳを書き込み、実行パイプラインに接続された書き込みキューＷＱに、ジョブ信号／通信メッセージＳを書き込むメモリ・エレメントを指示するポインタＰをストアする。信号送出をコミットするために実行パイプラインに優先順位を割り当てると、書き込みキューＷＱからポインタ・メモリ１３内の適当なメモリ・キューに又は外部ユニットに転送するために入出力ユニット１１に、ポインタＰを転送する。新しいジョブ信号の場合に、対応するジョブ信号Ｓにおける優先順位レベル情報に基づいてポインタ・メモリ１３内の適当なメモリ・キューを認識し、かつジョブ信号と同一の優先順位レベルのメモリ・キューにポインタＰを書き込む。ポインタ・メモリ１３内のメモリ・キューは、ＦＩＦＯキューとして構成され、またスケジューリング順序は、優先順位の順序によりサービスされるので、ポインタ・メモリにスケジューリング順序が確立される。
【００８４】
ジョブ信号スケジューラ１０は、スケジューラがそれ以上ポインタを必要としなければ直ちに、ポインタＦＰをＴＰＵユニット１５を介して処理ユニット５０に送出することにより、空きポインタのプールをフルに保持する。
【００８５】
１回で完全なジョブ信号又は完全な通信メッセージを書き込む必要性はない。大きな信号は、例えば、処理ユニット５０とジョブ信号スケジューラ１０との間のバス・インターフェースのブロッキングを防ぐために、複数の断片により書き込まれてもよい。そのときは、処理ユニット５０は、バースト間のアドレスを増加して、各バーストの開始で増加したアドレスを送出する必要がある。
【００８６】
以上、実行パイプラインは、それぞれ命令実行用の自己専用のリソースを有する個別的な構成要素であるとして説明した。しかしながら、一般的に、命令実行において、実行パイプラインにおける多くのリソースがフルに使用されることはない。そこで、リソースが複数のパイプ間で共有可能となり、要求又は時多重化方式により、リソースに対する実行パイプ・アクセスを実行する。高度のリソース共有を実施する技術は、同時マルチ・スレッディングである。同時マルチスレッディングでは、殆ど全てのリソースが共有され、各パイプライン専用のリソースは、プライベート・プログラム・カウンタと、命令レジスタ、及び物理レジスタにおける論理レジスタ・ナンバー間のプライベート・マッピングとに限定される。
【００８７】
更に、ポインタは、ジョブ信号メモリ内のメモリ・エレメントを直接、参照する必要はないが、しかし、１以上のテーブル・ルックアップによりジョブ信号メモリ領域を参照することができることも理解すべきである。
【００８８】
更に、アドレス比較方法を参照して依存性チェックを説明した。しかしながら、代替として、依存性チェックは、各処理ユニットがメイン・メモリ内の変数の使用をマークし、かつ依存性の衝突がマーキングに基づいて検出されるマーカ方法により、達成されてもよい。
【００８９】
以上で説明した実施例は、例として単に説明され、本発明は、これに限定されないことを理解すべきである。更なる修正、変更、及び開示され、かつ特許請求された基本的に内在する原理を保持する改良は、本発明の範囲内である。
【図面の簡単な説明】
【図１】  本発明による概要的な処理システムの簡単な図である。
【図２】  本発明による投機的に実行したジョブにより発生した結果を処理する方法の概要フロー・チャートである。
【図３】  本発明の好ましい実施例による処理システムを示す概要図である。
【図４】  本発明の他の好ましい実施例による処理システムを示す概要図である。
【図１】
0004608100.tif 000003
【図２】
0004608100.tif 000004
【図３】
0004608100.tif 000005
【図４】
0004608100.tif 000006