(57)【要約】【課題】小さい回路規模でマルチプロセッサシステムにおけるメッセージキューの空き状況の判断を可能にすること。【解決手段】第１プロセッサ３と第２プロセッサ６とを有する共有メモリ型のマルチプロセッサシステムにおいて、第１プロセッサは、共有メモリ２へメッセージを送信するときに、メッセージキュー２１の空き位置の先頭を示す第１ヘッドポインタをインクリメントするとともに、第１ヘッドポインタと同じ値をメッセージの末尾位置を示す第２テールポインタにコピーする。【選択図】図１
2020154805.tif 000002
【特許請求の範囲】
【請求項１】
メッセージを格納可能なキューを有する共有メモリと、
前記共有メモリに前記メッセージを送信する第１プロセッサと、
前記共有メモリに格納された前記メッセージを受信する第２プロセッサと、
前記キューの空き位置の先頭を示す第１ヘッドポインタと、前記キューの空き位置の末尾を示す第１テールポインタとを含む第１ポインタを保持する第１メモリと、
前記キューに格納されている前記メッセージの先頭の位置を示す第２ヘッドポインタと、前記キューに格納されている前記メッセージの末尾の位置を示す第２テールポインタとを含む第２ポインタを保持する第２メモリと、
を有し、
前記第１プロセッサは、前記メッセージを送信するときに、前記第１ヘッドポインタをインクリメントするとともに、前記第１ヘッドポインタと同じ値を前記第２テールポインタにコピーする、
マルチプロセッサシステム。
【請求項２】
前記第２プロセッサは、前記メッセージを受信するときに、前記第２ヘッドポインタをインクリメントするとともに、前記第２ヘッドポインタと同じ値を前記第１テールポインタにコピーする、
請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記第１プロセッサは、前記第１ヘッドポインタと前記第１テールポインタの値が等しいときに前記キューがフルであると判定する、
請求項１に記載のマルチプロセッサシステム。
【請求項４】
前記第２プロセッサは、前記第２ヘッドポインタと前記第２テールポインタの値が等しいときに前記キューが空であると判定する、
請求項１に記載のマルチプロセッサシステム。
【請求項５】
前記共有メモリは、前記第１プロセッサ及び前記第２プロセッサに対するグローバルメモリであり、
前記第１メモリは、前記第１プロセッサに対するローカルメモリであり、
前記第２メモリは、前記第２プロセッサに対するローカルメモリである、
請求項１に記載のマルチプロセッサシステム。
【請求項６】
メッセージを格納可能なキューを有する共有メモリと、前記共有メモリに前記メッセージを送信する第１プロセッサと、前記共有メモリに格納された前記メッセージを受信する第２プロセッサとを有するマルチプロセッサシステムにおける共有メモリの制御方法であって、
前記第１プロセッサは、前記メッセージを送信するときに、前記キューの空き位置の先頭を示す第１ヘッドポインタをインクリメントするとともに、前記第１ヘッドポインタと同じ値をキューに格納されている前記メッセージの末尾の位置を示す第２ヘッドポインタにコピーし、
前記第２プロセッサは、前記メッセージを受信するときに、前記キューに格納されている前記メッセージの先頭の位置を示す第２ヘッドポインタをインクリメントするとともに、前記第２ヘッドポインタと同じ値を前記キューの空き位置の末尾を示す第１テールポインタにコピーする、
共有メモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、マルチプロセッサシステム及び共有メモリの制御方法に関する。
【背景技術】
【０００２】
２つ以上のプロセッサによって１つのメモリを共用することで個々のプロセッサによる並列処理等を可能にするマルチプロセッサシステムが知られている。この種のマルチプロセッサシステムでは、メッセージキューの空き状況によってそれぞれのプロセッサにおけるメッセージの送受信の可否が判断される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１８／００８１５７４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
実施形態は、小さい回路規模でマルチプロセッサシステムにおけるメッセージキューの空き状況を判断することができる、マルチプロセッサシステム及び共有メモリの制御方法を提供する。
【課題を解決するための手段】
【０００５】
実施形態のマルチプロセッサシステムは、共有メモリと、第１プロセッサと、第２プロセッサと、第１メモリと、第２メモリとを有する。共有メモリは、メッセージを格納可能なキューを有する。第１プロセッサは、共有メモリにメッセージを送信する。第２プロセッサは、共有メモリからメッセージを受信する。第１メモリは、キューの空き位置の先頭を示す第１ヘッドポインタと、キューの空き位置の末尾を示す第１テールポインタとを含む第１ポインタを保持する。第２メモリは、キューに格納されているメッセージの先頭の位置を第２ヘッドポインタと、キューに格納されているメッセージの末尾の位置を示す第２ヘッドポインタとを含む第２ポインタを保持する。第１プロセッサは、メッセージを送信するときに、第１ヘッドポインタをインクリメントするとともに、第１ヘッドポインタと同じ値を前記第２テールポインタにコピーする。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態に係るマルチプロセッサシステムの全体の構成例を示す図である。
【図２】図２は、実施形態のマルチプロセッサシステムにおけるメッセージの送信側のプロセッサによるメッセージ送信の動作を示すフローチャートである。
【図３Ａ】図３Ａは、メッセージキューがフルでないときの、第１ヘッドポインタと、第１テールポインタと、第２ヘッドポインタと、第２テールポインタとの関係を示すである。
【図３Ｂ】図３Ｂは、メッセージキューがフルであるときの、第１ヘッドポインタと、第１テールポインタと、第２ヘッドポインタと、第２テールポインタとの関係を示すである。
【図４】図４は、実施形態のマルチプロセッサシステムにおけるメッセージの受信側のプロセッサのメッセージ受信の動作を示すフローチャートである。
【図５Ａ】図５Ａは、メッセージキューが空でないときの、第１ヘッドポインタと、第１テールポインタと、第２ヘッドポインタと、第２テールポインタとの関係を示すである。
【図５Ｂ】図５Ｂは、メッセージキューが空であるときの、第１ヘッドポインタと、第１テールポインタと、第２ヘッドポインタと、第２テールポインタとの関係を示すである。
【発明を実施するための形態】
【０００７】
以下、本発明の実施形態について図面を参照して説明する。
【０００８】
［１］マルチプロセッサシステムの構成
図１は、実施形態に係るマルチプロセッサシステムの全体の構成例を示す図である。マルチプロセッサシステム１は、共有メモリ２と、第１プロセッサ３と、第１メモリ４と、第１アービタ５と、第２プロセッサ６と、第２メモリ７と、第２アービタ８とを有している。
【０００９】
共有メモリ２は、第１プロセッサ３及び第２プロセッサ６で共用されるメモリである。共有メモリ２は、第１プロセッサ３及び第２プロセッサ６の双方に対してグローバルな場所に設けられたグローバルメモリである。例えば、共有メモリ２は、マスターバス９等を介して第１プロセッサ３及び第２プロセッサ６からアクセスされるように設けられている。共有メモリ２は、例えばＲＡＭ（Random Access Memory）である。共有メモリ２は、例えば第１プロセッサ３と第２プロセッサ６の並列処理のための作業メモリとして用いられる。共有メモリ２は、ＲＡＭに限るものではない。共有メモリ２は、メッセージキュー２１を有する。メッセージキュー２１は、ＦＩＦＯ（First-In First-Out）方式のリングバッファである。メッセージキュー２１は、メッセージを格納する。メッセージキュー２１に格納されたメッセージは、受信側のプロセッサによって取り出されるまで格納される。メッセージは、制御又はデータといった、第１プロセッサ３と第２プロセッサ６との間でやり取りされ得る各種の情報を含む。
【００１０】
第１プロセッサ３は、例えばＣＰＵ（Central Processing Unit）である。第１プロセッサ３は、共有メモリ２を使用して各種のデータ処理を実行する。また、第１プロセッサ３は、必要に応じてメッセージをメッセージキュー２１に格納する。
【００１１】
第１メモリ４は、第１プロセッサ３に対してローカルな場所に設けられているローカルメモリである。例えば、第１メモリ４は、マスターバス９等を介さずに第１プロセッサ３からアクセスされるように設けられている。第１メモリ４は、共有メモリ２に比べて高速なアクセスが可能な小容量のメモリである。第１メモリ４は、ＲＡＭ４１及びＲＯＭ４２を含んでよい。
【００１２】
ＲＡＭ４１は、任意に書き込みできる半導体記憶装置である。ＲＡＭ４１には、第１ポインタ４１ａが記憶されてよい。第１ポインタ４１ａは、メッセージ送信のためのポインタである。第１ポインタ４１ａは、第１ヘッドポインタと、第１テールポインタとを含む。第１ヘッドポインタは、メッセージキュー２１における空き位置の先頭を示すポインタである。第１テールポインタは、メッセージキュー２１における空き位置の末尾を示すポインタである。
【００１３】
ＲＯＭ４２は、読み出し専用の半導体記憶装置である。ＲＯＭ４２には、第１プロセッサ３の動作のためのファームウェア等を含むプログラムが記憶されてよい。第１プロセッサ３が電源供給を受けた際、ＲＯＭ４２に格納されているファームウェアがＲＡＭ４１上に読み出される。第１プロセッサ３は、ファームウェアに従って所定の処理を実行する。また、第１プロセッサ３は、ＲＯＭ４２に記憶される各種のプログラムに従って種々の機能を実現する。この各種のプログラムは、種々のアプリケーションソフトウェア、オペレーティングシステム、ファイルシステム等を含む。
【００１４】
第１アービタ５は、第１プロセッサ３と第１メモリ４との間に設けられている回路である。第１アービタ５は、マスターバス９を介して第２アービタ８にも接続されている。第１アービタ５は、第１メモリ４へのアクセスを調停する。例えば、第１プロセッサ３と第２プロセッサ６とによる第１メモリ４へのアクセスが競合したときに、第１アービタ５は、予め定められた順序に従って、第１プロセッサ３と第２プロセッサ６とのそれぞれに第１メモリ４にアクセスするためのバスの使用権を与える。
【００１５】
第２プロセッサ６は、例えばＣＰＵである。第２プロセッサ６は、共有メモリ２を使用して各種のデータ処理を実行する。第２プロセッサ６は、第１プロセッサ３と同様の構成のプロセッサであってもよいし、同様の構成のプロセッサでなくてもよい。第２プロセッサ６は、共有メモリ２を使用して各種のデータ処理を実行する。また、第２プロセッサ６は、メッセージキュー２１に格納されているメッセージを取り出す。そして、第２プロセッサ６は、取り出したメッセージキューに応じた処理を実行する。
【００１６】
第２メモリ７は、第２プロセッサ６に対してローカルな場所に設けられているローカルメモリである。例えば、第２メモリ７は、マスターバス９等を介さずに第２プロセッサ６からアクセスされるように設けられている。第２メモリ７は、共有メモリ２に比べて高速なアクセスが可能な小容量のメモリである。第２メモリ７は、第１メモリ４と同様にＲＡＭ７１及びＲＯＭ７２を含んでよい。
【００１７】
ＲＡＭ７１は、任意に書き込みできる半導体記憶装置である。ＲＡＭ７１には、第２ポインタ７１ａが記憶されてよい。第２ポインタ７１ａは、メッセージの受信のためのポインタである。第２ポインタ７１ａは、第２ヘッドポインタと、第２テールポインタとを含む。第２ヘッドポインタは、メッセージキュー２１に格納されているメッセージの先頭の位置を示すポインタである。第２テールポインタは、メッセージキュー２１に格納されているメッセージの末尾の位置を示すポインタである。
【００１８】
ＲＯＭ７２は、読み出し専用の半導体記憶装置である。ＲＯＭ７２には、第２プロセッサ６の動作のためのファームウェア等を含むプログラムが記憶されてよい。第２プロセッサ６が電源供給を受けた際、ＲＯＭ７２に格納されているファームウェアがＲＡＭ７１上に読み出される。第２プロセッサ６は、ファームウェアに従って所定の処理を実行する。また、第２プロセッサ６は、ＲＯＭ７２に記憶される各種のプログラムに従って種々の機能を実現する。この各種のプログラムは、種々のアプリケーションソフトウェア、オペレーティングシステム、ファイルシステム等を含む。
【００１９】
第２アービタ８は、第２プロセッサ６と第２メモリ７との間に設けられている回路である。第２アービタ８は、マスターバス９を介して第１アービタ５にも接続されている。第２アービタ８は、第２メモリ７へのアクセスを調停する。例えば、第１プロセッサ３と第２プロセッサ６とによる第２メモリ７へのアクセスが競合したときに、第２アービタ８は、予め定められた順序に従って、第１プロセッサ３と第２プロセッサ６とのそれぞれに第２メモリ７にアクセスするためのバスの使用権を与える。
【００２０】
［２］  マルチプロセッサシステムの動作
まず、送信側のプロセッサの動作について説明する。図２は、実施形態のマルチプロセッサシステムにおけるメッセージの送信側のプロセッサによるメッセージ送信の動作を示すフローチャートである。ここで、図１の例では、送信側のプロセッサは、第１プロセッサ３である。
【００２１】
メッセージを送信するに当たり、ステップＳ１において、第１プロセッサ３は、メッセージを送信することができるか否かを判定する。ステップＳ１の判定は、メッセージキュー２１がフルであるか否かに応じて判定される。メッセージキュー２１がフルであるときには、メッセージを送信することができないと判定される。ステップＳ１において、メッセージを送信できないと判定されたときには（Ｓ１  ＮＯ）、ステップＳ１の判定が継続される。つまり、メッセージを送信できると判定されるまで、処理は待機される。ステップＳ１の判定と併せて他の処理が行われてもよい。また、一定時間の経過後にメッセージを送信できると判定されていないとには、図２の処理は終了されてもよい。ステップＳ１において、メッセージを送信できると判定されたときには（Ｓ１  ＹＥＳ）、第１プロセッサ３は、ステップＳ２の処理を実行する。
【００２２】
ここで、メッセージキュー２１がフルであるか否かは、第１ポインタ４１ａを用いて判定される。図３Ａは、メッセージキュー２１がフルでないときの、第１ヘッドポインタＨ１と、第１テールポインタＴ１と、第２ヘッドポインタＨ２と、第２テールポインタＴ２との関係を示すである。また、図３Ｂは、メッセージキュー２１がフルであるときの、第１ヘッドポインタＨ１と、第１テールポインタＴ１と、第２ヘッドポインタＨ２と、第２テールポインタＴ２との関係を示すである。ここで、図３Ａ及び図３Ｂのハッチングで示した位置にメッセージが格納されているとする。また、図３Ａ及び図３Ｂの例では、メッセージキュー２１のキュー深さは９である。すなわち、メッセージキュー２１は、９段のＦＩＦＯである。
【００２３】
前述したように、第１ヘッドポインタＨ１は空き位置の先頭を示す。また、第１テールポインタＴ１は空き位置の末尾を示す。つまり、第１ヘッドポインタＨ１と第１テールポインタＴ１との差がメッセージキュー２１の空きを示すことになる。したがって、図３Ａに示すように、メッセージキュー２１に空きがあるときには、第１ヘッドポインタＨ１と第１テールポインタＴ１とは一致しない。一方、図３Ｂに示すように、メッセージキュー２１がフルであるときには、第１ヘッドポインタＨ１と第１テールポインタＴ１とは一致する。
【００２４】
つまり、ステップＳ１では、第１プロセッサ３は、第１ヘッドポインタＨ１と第１テールポインタＴ１とが一致しているか否かを判定することによって、メッセージを送信することができるか否かを判定する。
【００２５】
ここで、図２の説明に戻る。ステップＳ２において、第１プロセッサ３は、共有メモリ２にメッセージを送信する。このメッセージは、共有メモリ２のメッセージキュー２１に格納される。前述したように、メッセージキュー２１は、ＦＩＦＯ方式である。したがって、メッセージは、最後に送信されたメッセージに続けてメッセージキュー２１に格納される。例えば、図３Ａの例では、送信されたメッセージは、メッセージキュー２１の“１”の位置に格納される。
【００２６】
ステップＳ３において、第１プロセッサ３は、第１メモリ４に記憶されている第１ヘッドポインタＨ１をインクリメントする。メッセージキュー２１に送信されたメッセージは、それまで第１ヘッドポインタＨ１が示していた位置に格納される。この位置は空き位置ではなくなるので、第１プロセッサ３は、第１ヘッドポインタＨ１をインクリメントする。
【００２７】
ステップＳ４において、第１プロセッサ３は、更新された第１ヘッドポインタの値を、第２メモリ７に記憶されている第２のテールポインタにコピーする。その後、図２の処理は終了する。メッセージが新たに格納されることで、メッセージの末尾位置が更新された第１ヘッドポインタＨ１の位置に変わる。したがって、第１プロセッサ３は、第１ヘッドポインタＨ１の値を第２テールポインタＴ２にコピーする。
【００２８】
次に、受信側のプロセッサの動作について説明する。図４は、実施形態のマルチプロセッサシステムにおけるメッセージの受信側のプロセッサのメッセージ受信の動作を示すフローチャートである。図１の例では、受信側のプロセッサは、第２プロセッサ６である。
【００２９】
メッセージを受信するに当たり、ステップＳ１１において、第２プロセッサ６は、メッセージを受信することができるか否かを判定する。ステップＳ１１の判定は、メッセージキュー２１が空であるか否かに応じて判定される。メッセージキュー２１が空であるときには、メッセージを受信することができないと判定される。ステップＳ１１において、メッセージを受信できないと判定されたときには（Ｓ１１  ＮＯ）、ステップＳ１１の判定が継続される。つまり、メッセージを受信できると判定されるまで、処理は待機される。ステップＳ１１の判定と併せて他の処理が行われてもよい。ステップＳ１１において、メッセージを受信できると判定されたときには（Ｓ１１  ＹＥＳ）、処理はステップＳ１２に移行する。
【００３０】
ここで、メッセージキュー２１が空であるか否かは、第２ポインタ７１ａを用いて判定される。図５Ａは、メッセージキュー２１が空でないときの、第１ヘッドポインタＨ１と、第１テールポインタＴ１と、第２ヘッドポインタＨ２と、第２テールポインタＴ２との関係を示すである。また、図５Ｂは、メッセージキュー２１が空であるときの、第１ヘッドポインタＨ１と、第１テールポインタＴ１と、第２ヘッドポインタＨ２と、第２テールポインタＴ２との関係を示すである。ここで、図５Ａ及び図５Ｂのハッチングで示した位置にメッセージが格納されているとする。
【００３１】
前述したように、第２ヘッドポインタＨ２はメッセージの先頭位置を示す。また、第２テールポインタＴ２はメッセージの末尾位置を示す。つまり、第２ヘッドポインタＨ２と第２テールポインタＴ２との差がメッセージの幅を示すことになる。したがって、図５Ａに示すように、メッセージキュー２１にメッセージが格納されているときには、第２ヘッドポインタＨ２と第２テールポインタＴ２とは一致しない。一方、図５Ｂに示すように、メッセージキュー２１が空であるときには、第２ヘッドポインタＨ２と第２テールポインタＴ２とは一致する。
【００３２】
つまり、ステップＳ１１では、第２プロセッサ６は、第２ヘッドポインタＨ２と第２テールポインタＴ２とが一致しているか否かを判定することによって、メッセージを受信することができるか否かを判定する。
【００３３】
ステップＳ１２において、第２プロセッサ６は、共有メモリ２のメッセージキュー２１からメッセージを受信する。前述したように、メッセージキュー２１は、ＦＩＦＯ方式である。したがって、メッセージは、格納された順序が古い順に受信される。例えば、図５Ａの例では、メッセージは、メッセージキュー２１の“０”の位置から第２プロセッサ６に送信される。
【００３４】
ステップＳ１３において、第２プロセッサ６は、第２メモリ４１に記憶されている第２ヘッドポインタＨ２をインクリメントする。メッセージキュー２１からメッセージが受信されることで、それまでメッセージが格納されていた位置が空き位置になる。この位置はメッセージの位置ではなくなるので、第２プロセッサ６は、第２ヘッドポインタＨ２をインクリメントする。
【００３５】
ステップＳ１４において、第２プロセッサ６は、更新された第２ヘッドポインタの値を、第１メモリ３１に記憶されている第１テールポインタにコピーする。その後、図４の処理は終了する。メッセージが無くなることで、空き位置の末尾位置が更新された第２ヘッドポインタＨ２の位置に変わる。したがって、第２プロセッサ６は、第２ヘッドポインタＨ２の値を第１テールポインタＴ１にコピーする。
【００３６】
以上説明したように実施形態では、メッセージキューの空き状況を管理するためのポインタがメッセージ送信のためのポインタと、メッセージ受信のためのポインタとに分けられている。これにより、メッセージの送信の可否判定とメッセージの受信の可否判定との双方で、ヘッドポインタとテールポインタの一致検出が用いられ得る。つまり、実施形態では、メッセージの送信の可否判定とメッセージの受信の可否判定の何れにおいてもポインタの大小比較は不要である。また、メッセージキューにリングバッファが用いられている場合、メッセージの末尾位置によってはラップアラウンド処理をしてからでないと、ポインタの大小比較をできないこともある。実施形態では、メッセージの送信の可否判定とメッセージの受信の可否判定の何れにおいてもラップアラウンド処理は不要である。このようにして、メッセージの送受信の可否判定のための構成を簡易化することができる。したがって、マルチプロセッサシステムとしての回路規模の削減が図られる。
【００３７】
また、実施形態では、ポインタの読み出しは、一致判定のためにローカルメモリからポインタを読み出すときに行われる。つまり、実施形態では、一致判定のためにローカルでないメモリからポインタが読み出される必要はない。これにより、読み出しのためのレイテンシを抑えることができる。
【００３８】
ここで、実施形態では、メッセージの送信の可否判定とメッセージの受信の可否判定は、何れもプロセッサによる処理で行われるとしている。しかしながらこれに限らない。実施形態では、メッセージの送信の可否判定とメッセージの受信の可否判定は、何れもポインタの一致検出である。このような一致検出は、例えばコンパレータといった回路を用いても行われ得る。
【００３９】
また、実施形態では、第１プロセッサ３が送信側のプロセッサとされ、第２プロセッサ６が受信側のプロセッサとされている。しかしながらこれに限らない。第２プロセッサ６が送信側のプロセッサとされ、第１プロセッサ３が受信側のプロセッサとされてもよい。
【００４０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことが出来る。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００４１】
１  マルチプロセッサシステム
２  共有メモリ
３  第１プロセッサ
４  第１メモリ
５  第１アービタ
６  第２プロセッサ
７  第２メモリ
８  第２アービタ
９  マスターバス
【図１】
2020154805.tif 000003
【図２】
2020154805.tif 000004
【図３Ａ】
2020154805.tif 000005
【図３Ｂ】
2020154805.tif 000006
【図４】
2020154805.tif 000007
【図５Ａ】
2020154805.tif 000008
【図５Ｂ】
2020154805.tif 000009