(57)【要約】【課題】マルチコアプロセッサ上でセマフォを実施する方法を提供し、システムパフォーマンスの低下を防止すること。【解決手段】マルチコアプロセッサは、その各コアが接続された中央調停ユニット（central arbitration unit（ＣＡＵ））を含む。本方式は、各コアについて、コアからＣＡＵに対して、演算を実行するための共通資源へのアクセスを要求する第１の信号を出力することと、ＣＡＵからの第２の信号の受信に応じて、コアが演算を実行する。【選択図】図１
2004062910.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアプロセッサでセマフォを実施し、共通資源へのアクセスを制御する方法であって、
　前記マルチコアプロセッサは各コアに接続された中央調停ユニット（ＣＡＵ）を備え、それぞれのコアについて、
　複数のコアの１つから前記ＣＡＵに第１の信号を出力し、演算を実行するために前記共通資源へのアクセスを要求することと、
　前記ＣＡＵからの第２の信号の受信に応じて、前記１つのコアが前記演算を実行することと、を含む方法。
【請求項２】
前記ＣＡＵからの第３の信号の受信に応じて、前記1つのコアが、前記ＣＡＵからの前記第２の信号の受信を待ち続けることをさらに含む請求項１記載の方法。
【請求項３】
前記第１の信号の出力に応じて、前記ＣＡＵが、前記複数コアの他方が前記共通資源の制御を有しているか否かを判断することと、
　前記複数コアの他方が前記共通資源の制御を有している場合、前記ＣＡＵが前記1つのコアに対し前記第３の信号を出力することと、
　前記複数コアの他方が前記共通資源の制御を有していない場合、前記ＣＡＵが前記1つのコアに対し前記第２の信号を出力することと
をさらに含む請求項２に記載の方法。
【請求項４】
前記マルチコアプロセッサの各コアについて、前記実行の完了時に、前記1つのコアが前記ＣＡＵに対して第４の信号を出力することをさらに含む請求項２または３に記載の方法。
【請求項５】
前記第１の信号の出力に応じて、前記ＣＡＵが、前記コアの他方が前記ＣＡＵに対し第１の信号を出力しているか否かを判断することと、
　前記複数コアの他方が前記ＣＡＵに対して第１の信号を出力している場合、前記ＣＡＵが前記1つのコアに対して第３の信号を出力することと、
　前記複数コアの他方が前記ＣＡＵに第１の信号を出力していない場合、前記ＣＡＵが前記1つのコアに対して第２の信号を出力することと
をさらに含む、請求項１から４のいずれか１つに記載の方法。
【請求項６】
前記ＣＡＵは、最初に前記1つのコアに対し第３の信号を出力することをさらに含む請求項１から５のいずれか１つに記載の方法。
【請求項７】
マルチコアプロセッサ集積回路(「IC」)チップでセマフォを実施し、共通資源に対するアクセスを制御する方法であって、
　前記ＩＣチップは該ＩＣチップの各コアに接続された中央調停ユニット（ＣＡＵ）を含み、前記ＩＣチップの各コアは、許可フィールド（Ｇ１、Ｇ２）と要求フィールド（Ｒ１、Ｒ２）とを備えた制御レジスタを含み、前記ＩＣチップのそれぞれのコアについて、
　複数コアの１つは、前記要求フィールド（Ｒ１、Ｒ２）に対して第１の値を書き込むことにより前記共通資源へのアクセスを要求し、その時前記オンチップＣＡＵが前記1つのコアに対し第２の値を出力することにより、該コアに対し前記共通資源へのアクセスを許可するか、または第３の値を出力することにより、該コアに対する前記共通資源へのアクセスを拒絶することと、
　前記１つのコアは、前記要求フィールド（Ｒ１、Ｒ２）に第４の値を書込んで０にすることにより、前記共通資源の制御を放棄することと、を含む方法。
【請求項８】
前記ＩＣチップの各コアについて、
　前記要求フィールド（Ｒ１、Ｒ２）に対する前記第１の値の書込みに応じて、前記ＣＡＵは、前記複数コアの他方が前記共通資源の制御を有するか否かを判断し、
　前記複数コアの他方が前記共通資源の制御を有することに応じて、前記ＣＡＵは前記コアに対して第３の値を出力することと、
　前記複数コアの他方が前記共通資源の制御を有していないことに応じて、前記ＣＡＵは前記1つのコアに対して第２の値を出力することと
をさらに含む請求項７に記載の方法。
【請求項９】
前記ＩＣチップの各コアについて、
　前記要求フィールド（Ｒ１、Ｒ２）に対する前記第１の値の書込みに応じて、前記ＣＡＵは、前記複数コアの他方がその要求フィールド（Ｒ１、Ｒ２）に格納された第１の値を有しているか否かを判断することと、
　前記複数コアの他方がその要求フィールド（Ｒ１、Ｒ２）に格納された第１の値を有することに応じて、前記ＣＡＵは前記コアに対して第３の値を出力することと、
　前記複数コアの他方がその要求フィールド（Ｒ１、Ｒ２）に格納された第４の値を有することに応じて、前記ＣＡＵは前記コアに対して第２の値を出力することと、をさらに有する請求項７または８に記載の方法。
【請求項１０】
前記ＩＣチップの各コアについて、前記ＣＡＵは、最初に前記1つのコアに対し第３の値を出力することをさらに含む請求項７から９のいずれか１つに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、概してコンピュータシステムに関する。より詳細には、限定するものではないが、本発明は、複数のプロセッサコアを含む集積回路チップ上でオンチップセマフォを具現化する方法および装置に関する。
【背景技術】
【０００２】
　マルチプロセッサコンピュータシステムでは、一般に、複数のプロセッサが、同時に共通のハードウェアまたはソフトウェア資源に対するアクセスを要求する状況が発生する。場合によっては、かかる資源に対し複数のプロセッサが同時にアクセス可能である。一方、資源が「共有不可能」とみなされ、そのため一度に１つのプロセッサしかアクセス可能でない場合もある。この問題の１つの解決法は、セマフォを利用するというものである。概して、セマフォは、複数のプロセスによって共有資源へのアクセスを制御するために使用されるカウンタである。セマフォは、一般に、プロセスが、他のプロセスが演算を実行している特定の資源に対しアクセスしないようにする、ロッキング機構として使用される。
【０００３】
　ここで、セマフォの一般的な従来技術による実施態様を、すべてシステムバスを介して相互接続される、複数のプロセッサと、共通Ｉ／Ｏ資源と、システムメモリとを含む例示的なコンピュータシステムに関連して説明する。動作時、プロセッサのうちの１つがＩ／Ｏ資源にアクセスしたい場合、そのプロセッサは最初に、Ｉ／Ｏ資源に関連しシステムメモリに格納されたセマフォに対し、システムバスを介して読出しコマンドを送信することにより、資源のステータスをチェックしなければならない。セマフォは、要求プロセッサに対しステータス情報を返す。資源が利用可能である場合、要求プロセッサは、セマフォに対し、セマフォのステータスを利用可能から利用不可能に変更する書込みコマンドを送信する。
【０００４】
　上述したようなマルチプロセッサシステムでは、プロセッサは、セマフォに対し読出しコマンドを送信する前に、読出し／書込みサイクルが完了するまでシステムバスをロックする。これにより、他のプロセスまたはプロセッサが要求プロセッサと同時にセマフォのステータスをチェックすることがない。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
　理解されるように、バスをロックすることによって、読出し／書込み動作中に他のプロセスまたはプロセッサがセマフォにアクセスできなくなる上、他のプロセッサがシステムバス上の他の装置と通信できなくなる。それによってシステムパフォーマンスが低下する。明らかに、これは望ましくない結果である。
【０００６】
　システムメモリセマフォを使用することで、上述した問題に加えて他にも問題がある。特に保護されたオペレーティングシステムでは、実行にあたりメモリ空間をばらばらにして、ばらばらになったメモリ空間を複数の装置に割当てる。したがって、複数のプロセスが通信するための共通の領域を、フラグを設定することによって生成することは問題がある場合がある。標準的な保護の方法では、特定のプロセスは特定のメモリ領域にしかアクセスすることができないからである。複数のプロセッサおよびプロセスはメモリセマフォにアクセスしなければならないが、これによりメモリセマフォの使用が妨げられる。
【０００７】
　さらに、システムメモリセマフォにアクセスしそれを変更する際に固有の何らかのレイテンシがある。さらに、システムメモリセマフォを利用するためには、システムメモリを最初に初期化しなければならない。初期化することは、環境によっては、常に都合がよいか効率的であるとは限らない。
【０００８】
　本発明の目的は、マルチコアプロセッサ上でセマフォを実施する方法および装置を提供し上述の問題点が解決することである。
【課題を解決するための手段】
【０００９】
　一実施形態では、マルチコアプロセッサは、その各コアが接続された中央調停ユニット（central arbitration unit（ＣＡＵ））を含む。本方式は、各コアについて、コアからＣＡＵに対して、演算を実行するための共通資源へのアクセスを要求する第１の信号を出力することと、ＣＡＵからの第２の信号の受信に応じて、コアが演算を実行することとを含む。
【００１０】
　本発明を、添付図面と併せて以下の詳細な説明を参照することにより、より完全に理解することができる。
【発明を実施するための最良の形態】
【００１１】
　図面において、そのうちのいくつかの図を通して、同様の要素または類似の要素が同じ参照数字で示されており、示されているあらゆる要素は必ずしも一定の比率で描かれていない。
【００１２】
　図１は、マルチコアプロセッサ集積回路（「ＩＣ」）チップ１０２を含むコンピュータシステム実施形態１００の一部のシステムブロック図である。例示的な実施形態では、ＩＣチップ１０２は、２つのコア１０４（１）および１０４（２）（ＩＣチップ１０２が３つ以上のコアを含むことができる）と、図１では３つの共有資源１０５（１）、１０５（２）、および１０５（３）によって表されている、複数の共有資源とを含む。共有資源１０５（１）、１０５（２）、１０５（３）はまた、ＩＣチップ１０２上にも存在することができる。コア１０４（１）、１０４（２）の各々は、それぞれ制御レジスタ１０６（１）、１０６（２）を含むかまたは他の方法で関連付けられ、レジスタの２つのビットはセマフォ制御に割付けられる。それぞれＲ［１］およびＲ［２］で示す、ビットのこれらのペアの各々のうちの第１のビット（すなわち、要求フィールド）は、それぞれのコア１０４（１）、１０４（２）に対してそれぞれの要求ライン（参照数字１０８（１）で示すＲｅｑｕｅｓｔ［１］と参照数字１０８（２）で示すＲｅｑｕｅｓｔ［２］）に接続され、それぞれＧ［１］およびＧ［２］で示す、各ペアの残りのビット（すなわち、許可フィールド）は、それぞれのコア１０４（１）、１０４（２）に対して許可ライン（参照数字１０９（１）で示すＧｒａｎｔ［１］および参照数字１０９（２）で示すＧｒａｎｔ［２］）に接続される。
【００１３】
　要求および許可ライン１０８（１）、１０８（２）、１０９（１）、および１０９（２）は、中央調停ユニット（central arbitrating unit（「ＣＡＵ」））１１０に接続されており、ＣＡＵ１１０は、同様にＩＣチップ１０２に配置される。ＣＡＵ１１０が備える調停ロジックには、一度に１つのコアのみセマフォが許可され、従って共有資源１０５（１）〜１０５（３）にアクセスできることが保証される。動作時、許可ビット（たとえば、Ｇ［１］またはＧ［２］）を論理０または論理１に設定することにより、対応する許可ライン（たとえば、Ｇｒａｎｔ［１］１０９（１）またはＧｒａｎｔ［２］１０９（２））がそれぞれローまたはハイに駆動される。同様に、要求ライン（たとえば、Ｒｅｑｕｅｓｔ［１］１０８（１）またはＲｅｑｕｅｓｔ［２］１０８（２））をローまたはハイに駆動することにより、対応する要求ビット（Ｒ［１］またはＲ［２］）がそれぞれ論理０かまたは論理１に設定される。
【００１４】
　図１に示す実施形態では、単一セマフォが、複数の共有資源に対するアクセスを制御するが、代替実施形態では、２つ以上のセマフォを使用して複数の共有資源へのアクセスを制御することができる。なお、実施される各セマフォの各コアに対し、別々の要求／許可ビットペアと対応するラインとが要求される。ＩＣチップ１０２は、図１のバス１１２で示される１つまたは複数のバスを介して、従来の方法で、システムメモリ１１４および他のＩ／Ｏ装置１１６に接続される。
【００１５】
　図２は、一度にコア１０４（１）、１０４（２）のうちの一方のみに対しセマフォの許可を保証するＣＡＵ１１０の、例示的な動作のフローチャートである。なお図２に示す調停は、２つのコアのみに対するものであるが、それを、３つ以上のコア間で調停するように同様に拡張することができる。さらに、任意の数の要求エンティティ間での競合を解決するために、いかなる既知のまたはこれまで未知である調停技法をＣＡＵの一部として実施できる。
【００１６】
　ブロック２００において、コア１０４（１）がセマフォを要求したことを示す、Ｒｅｑｕｅｓｔ［１］ライン１０８（１）がハイであるか否かの判断がなされる。特に、一実施形態では、ビットＲ［１］が１（すなわち「ハイ」または「真（ＴＲＵＥ）」）に設定されているか否かが判断される。設定されている場合ブロック２０２に進み、そこでセマフォが目下コア１０４（１）に対して許可されているか否か（すなわち、コア１０４（１）がセマフォの現被許可者であるか否か）の判断がなされる。設定されていない場合、ブロック２０４に進み、セマフォが目下コア１０４（２）に対して許可されているか（すなわち、コア１０４（２）がセマフォの現被許可者であるか否か）の判断がなされる。許可されていない場合、実行はブロック２０６に進む。同様に、ブロック２０２において、コア１０４（１）に対して目下セマフォが許可されていると判断される場合、ブロック２０６に進む。ブロック２０６において、Ｇｒａｎｔ［１］ライン１０９（１）はハイに駆動され、Ｇｒａｎｔ［２］ラインはローに駆動される。特に、一実施形態では、これにより、ビットＧ［１］は１に設定され、Ｇ［２］ビットは０（または「ロー」または「偽（ＦＡＬＳＥ）」）に設定される。
【００１７】
　ブロック２０４で肯定の判断がなされた場合、ブロック２０８に進む。同様に、ブロック２００において否定の判断がなされた場合も、ブロック２０８に進む。ブロック２０８において、コア１０４（２）によってセマフォに対する要求がなされたことを示す、Ｒｅｑｕｅｓｔ［２］ライン１０８（２）がハイであるか否かの判断がなされる。特に、一実施形態では、ビットＲ［２］が１に設定されているか否かに関する判断がなされる。設定されている場合、ブロック２１０に進み、そこでセマフォが目下コア１０４（２）に対して許可されているか否かの判断がなされる。設定されていない場合、実行はブロック２１４に進む。
【００１８】
　ブロック２１４において、セマフォが目下コア１０４（１）に対して許可されているか否かの判断がなされる。そうでない場合、ブロック２１６に進み、そこで、Ｒｅｑｕｅｓｔ［１］ライン１０８（１）がハイであるか否かの判断がなされる。特に、一実施形態では、ビットＲ［１］が０に設定されているか否かの判断がなされる。そうでない場合、実行はブロック２１８に進む。同様に、ブロック２１０において、セマフォが目下コア１０４（２）に対して許可されていると判断された場合、実行はブロック２１８に進む。ブロック２１８において、Ｇｒａｎｔ［１］ライン１０９（１）はローに駆動され、Ｇｒａｎｔ［２］ライン１０９（２）はハイに駆動される。特に、一実施形態では、これにより、ビットＧ［１］が０に設定され、Ｇ［２］ビットが１に設定される結果となる。
【００１９】
　ブロック２０８において否定の判断がなされたか、またはブロック２１４または２１６のいずれかにおいて肯定の判断がなされた場合、実行はブロック２２２に進み、そこでＧｒａｎｔ［１］ライン１０９（１）とＧｒａｎｔ［２］ライン１０９（２）とがローに駆動される。特に、一実施形態では、この結果、許可ビットＧ［１］とＧ［２］とがともに０に設定される。ブロック２０６、２１８、または２２２のいずれかの完了時に、実行はブロック２２４に進み、そこでセマフォの現被許可者（すなわち、コア１０４（１）、コア１０４（２）もしくはいずれでもない）が更新され、その後ブロック２００に戻る。
【００２０】
　図２を参照して例示し説明した調停ロジックを実施する一例としての擬似コードを、以下に示す。
入力
　ｒｅｑｕｅｓｔ［１］：コア１から調停ロジックへの要求ライン
　ｒｅｑｕｅｓｔ［２］：コア２から調停ロジックへの要求ライン
出力
　ｇｒａｎｔ［１］：コア１に対して許可されたセマフォ
　ｇｒａｎｔ［２］：コア２に対して許可されたセマフォ
状態
　ｇｒａｎｔ＿ｌａｓｔ［１］：コア１に対しセマフォが許可された
　ｇｒａｎｔ＿ｌａｓｔ［２］：コア２に対しセマフォが許可された
　ｇｒａｎｔ＿ｌａｓｔ［１］＝ＦＡＬＳＥ；
　ｇｒａｎｔ＿ｌａｓｔ［２］＝ＦＡＬＳＥ；
ｗｈｉｌｅ（ＴＲＵＥ）
　｛
　　　ｉｆ（ｒｅｑｕｅｓｔ［１］　ＡＮＤ　ｇｒａｎｔ＿ｌａｓｔ［１］
　　　ＯＲ
　　　（ｒｅｑｕｅｓｔ［１］　ＡＮＤ　（ＮＯＴ　ｇｒａｎｔ＿ｌａｓｔ［２］）））
　　｛
　　　　ｇｒａｎｔ［１］＝ＴＲＵＥ；
　　　　ｇｒａｎｔ［２］＝ＦＡＬＳＥ；
　　　｝
　　ｅｌｓｅ　ｉｆ（（ｒｅｑｕｅｓｔ［２］　ＡＮＤ　ｇｒａｎｔ＿ｌａｓｔ［２］）／／実行まで許可を維持／／
　　ＯＲ
　　（ｒｅｑｕｅｓｔ［２］　ＡＮＤ　（ＮＯＴ　ｒｅｑｕｅｓｔ［１］）　ＡＮＤ　（ＮＯＴ　ｇｒａｎｔ＿ｌａｓｔ［１］）））
　　｛
　　　　ｇｒａｎｔ［１］＝ＦＡＬＳＥ；
　　　　ｇｒａｎｔ［２］＝ＴＲＵＥ；
　　　｝
　　　ｅｌｓｅ
　　　｛
　　　　　ｇｒａｎｔ［１］＝ＦＡＬＳＥ；
　　　　　ｇｒａｎｔ［２］＝ＦＡＬＳＥ；
　　　　｝
　　　　ｇｒａｎｔ＿ｌａｓｔ［１］＝ｇｒａｎｔ［１］；
　　　　ｇｒａｎｔ＿ｌａｓｔ［２］＝ｇｒａｎｔ［２］；
　｝
【００２１】
　図３は、セマフォにアクセスする各コアの動作のフローチャートである。図３に示す動作は、コアによってセマフォへのアクセスが望まれる場合に、各コア１０４（１）および１０４（２）において独立して実施される。例示および簡単のために、図３に示す動作を、コア１０４（１）に関連して説明する。コア１０４（１）がセマフォへのアクセスを望んでいると判断された後に、実行はブロック３００で開始する。ブロック３００において、要求ライン１０８（１）に対して第１の信号が出力される。特に、コア１０４（１）の要求ビット、すなわち要求ビットＲ［１］が１に設定される（およびＲｅｑｕｅｓｔ［１］ライン１０８（１）がハイに駆動される）。図２に関して上述した調停ロジックが、第１の信号の受信（すなわち、Ｒｅｑｕｅｓｔ［１］ライン１０８（１）のハイへの駆動）を検出し、それにしたがって、要求を許可するか（Ｇｒａｎｔ［１］ライン１０９（１）に第２の信号を送信する（すなわち、Ｇｒａｎｔ［１］ライン１０９（１）をハイに駆動し、それによって許可ビットＧ［１］を１に設定する）ことにより）、または要求を効果的に拒絶する（Ｇｒａｎｔ［１］ライン１０９（１）に第３の信号を送信する（すなわち、Ｇｒａｎｔ［１］ライン１０９（１）をローに駆動し、それによって許可ビットＧ［１］を０に設定する））ことによって応答する。ブロック３０２において、コア１０４（１）は、許可ビットＧ［１］を読み出す。ブロック３０４において、許可ビットＧ［１］が０に設定されているか否かの判断がなされる。そうである場合、実行はブロック３００に戻り、そうでない場合、実行はブロック３０６に進む。ブロック３０６において、セマフォが許可されており、セマフォを要求した動作が実行される。動作が完了すると、実行はブロック３０８に進み、そこでＲｅｑｕｅｓｔ［１］ライン１０８（１）に第４の信号が送信される。特に、Ｒｅｑｕｅｓｔ［１］ライン１０８（１）はローに駆動され、それによって要求ビットＲ［１］が０に設定され、セマフォが解放される。
【００２２】
　このように、本明細書で説明した本発明の実施形態は、マルチコアプロセッサと接続して使用するオンチップセマフォを提供し、それによりシステムメモリセマフォを実施する際に固有のレイテンシおよび固有の他の問題が軽減される。本発明をいくつかの実施態様に関して説明したが、示し説明する発明の形態は、例示的な実施形態としてのみ扱われるべきである、ということが理解されなければならない。たとえば、上述したように、本明細書で説明したオンチップセマフォを、いかなる数のコアを有するマルチコアプロセッサで実施してもよく、調停ロジックはそれにしたがって変更される。さらに、複数の共有資源へのアクセスを制御する際に使用するために、複数のセマフォを実施することができる。したがって、かかるすべての変更形態、拡張形態、変形形態、修正形態、追加形態、削除形態、置換形態、結合形態等が、本特許請求の範囲によってのみ適用範囲が画定される本発明の範囲内にあるとみなされる。
【図面の簡単な説明】
【００２３】
【図１】本発明の一実施形態によるマルチコアオンチップセマフォを実施するコンピュータシステムの一形態のシステムブロック図。
【図２】図１に示すマルチコアオンチップセマフォを実施する例示的な調停ロジックの一形態のフローチャート。
【図３】図１のコンピュータシステムの各コアによりそのマルチコアオンチップセマフォにアクセスするために実施されるロジックの一形態のフローチャート。
【図１】
2004062910.tif 000003
【図２】
2004062910.tif 000004
【図３】
2004062910.tif 000005