以下に、本願の開示する情報処理装置、情報処理システム及び割込装置制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システム及び割込装置制御方法が限定されるものではない。
図1を参照して、情報処理システムの一例を説明する。図1は、ノード間メッセージ通信を行う情報処理システムのシステム構成図である。図1に示す例では、情報処理システムは、複数のノード1及びグローバルXB(crossbar)2を有する。
ノード1は、1つの独立したOSが走行する単位であり、OSが走行するための最低限の装置を含む。各ノード1は、グローバルXB2と接続され、インターコネクトを介して相互に接続される。
ノード1は、CPU11、メモリ12及びローカルXB13を有する。また、ノード1は、それぞれ独立してOSを実行する。
CPU11は、メモリ12及びローカルXB13とバスで接続される。CPU11は、ローカルXB13を介してグローバルXB2に接続する。CPU11は、メモリアクセスのリクエストであるメモリアクセス要求をローカルXB13に出力することで、他のノード1にメモリアクセス要求を転送する。
図2は、CPUの概略を表す構成図である。CPU11は、コア21、キャッシュ22、メッセージ送信回路23及びメッセージ受信回路24を有する。ここで、図2では、CPU11が、1つのコアを有する場合で説明したが、コアは2つ以上あってもよい。
コア21は、メッセージ送信回路23にメッセージの送信のための命令として、レジスタ読出要求をメッセージ送信回路23へ出力する。そして、コア21は、レジスタ読出要求の応答をメッセージ送信回路23から受信する。コア21は、メッセージの送受信において、キャッシュ22に一時的に格納する場合がある。
また、コア21は、レジスタ読出要求又は書込要求をメッセージ受信回路24へ出力する。そして、コア21は、レジスタ読出要求又は書込要求に対する応答をメッセージ受信回路24から受信する。
また、コア21は、割込要求をメッセージ受信回路24から取得する。コア21は、割込要求をメッセージ受信回路24から取得すると、割込要求にしたがって処理を行う。割込要求で指示される処理には、特に制限はなく、例えば、演算処理やデータの書き込みや読み込みの処理などがある。特に、割込要求が、割込要因の刈取の割込み要求の場合、コア21は、割込要因の刈取処理を行う。
メッセージ送信回路23は、レジスタ読出要求をコア21から受信する。そして、メッセージ送信回路23は、レジスタ読出要求で指定されたメッセージを指定された他のノード1のメッセージ受信回路24へ送信する。また、メッセージ送信回路23は、メッセージ送信の結果を応答としてコア21へ送信する。
また、メッセージ送信回路23は、他のノード1からメッセージ送信に対する応答を受信する。そして、メッセージ送信回路23は、応答で示されるメッセージの送信結果を基にレジスタ読出要求又は書込要求に対する応答を生成しコア21へ出力する。
メッセージ受信回路24は、レジスタ読出要求又は書込要求をコア21から受信する。そして、メッセージ受信回路24は、受信した要求にしたがって自己が有する受信レジスタに対する処理を実行する。例えば、メッセージ受信回路24は、コア21から受信レジスタ読出要求を受けた場合、レジスタからデータを読み出し、コア21へ読み出したデータを送信する。
また、メッセージ受信回路24は、コア21が割込要因の刈取処理を実行する場合に、割込要因の刈取処理のためのレジスタリード命令をコア21から受信する。以下では、割込要因の刈取処理のためのレジスタリード命令を単に「刈取レジスタリード命令」という。刈取レジスタリード命令を受けると、メッセージ受信回路24は、順レジスタのレジスタセットから割込要因の有無を示すペンディングビットの値を所定数連続して読み出し、コア21へ応答する。その後、メッセージ受信回路24は、受信レジスタから割込要因を読み出しクリアする。
次に、メッセージ送信回路23及びメッセージ受信回路24の詳細について説明する。図3は、メッセージ送信回路の詳細を表すブロック図である。図3に示すように、メッセージ送信回路23は、送信レジスタ31、メッセージ生成部32、メッセージ応答受信部33及び応答生成部34を有する。
送信レジスタ31は、レジスタバス25を介してコア21から出力されたレジスタ読出要求を受信する。そして、送信レジスタ31は、受信したレジスタ読出要求を格納する。さらに、送信レジスタ31は、レジスタ読出要求の格納処理の結果を応答生成部34へ出力する。
メッセージ生成部32は、レジスタ読出要求が送信レジスタ31に格納されたことを確認する。そして、メッセージ生成部32は、格納されたレジスタ読出要求にしたがいメッセージを生成する。そして、メッセージ生成部32は、生成したメッセージをローカルXB13へ出力し、メッセージの送信先のノード1へ向けて送信する。以下では、メッセージの送信先のノード1を「受信側ノード」といい、メッセージの送信元のノード1を「送信側ノード」という場合がある。この送信側ノードが、「第1情報処理装置」の一例にあたり、受信側ノードが、「第2情報処理装置」の一例にあたる。
メッセージ応答受信部33は、メッセージ生成部32が出力したメッセージの受信結果を示す受信側ノードからの応答を、ローカルXB13を介して受信する。そして、メッセージ応答受信部33は、受信した応答を応答生成部34へ出力する。
応答生成部34は、レジスタ読出要求の格納処理の結果の入力を送信レジスタ31から受ける。そして、応答生成部34は、レジスタ読出要求の格納処理の結果を表す応答を生成する。その後、応答生成部34は、生成したレジスタ読出要求の格納処理の結果を表す応答をレジスタバス25へ出力し、コア21へ向けて送信する。
また、応答生成部34は、受信側ノードからのメッセージの受信結果を示す応答の入力をメッセージ応答受信部33から受ける。そして、応答生成部34は、受信側ノードのメッセージの受信結果を示す応答を生成する。その後、応答生成部34は、生成した受信側ノードのメッセージの受信結果を示す応答をレジスタバス25へ出力し、コア21へ向けて送信する。
図4は、実施例1に係るメッセージ受信回路の詳細を表すブロック図である。図4に示すように、メッセージ受信回路24は、リクエスト調停部101、RAM(Random Access Memory)アクセス制御部102、受信レジスタ103、データ整形部104を有する。さらに、メッセージ受信回路24は、メッセージ受信部105、メッセージ応答生成部106及び割込要求生成部107を有する。
受信レジスタ103は、レジスタセット300を有する。レジスタセット300は、アドレスレジスタ、リードポインタ及びライトポインタを有する。レジスタセット300は、送信側ノードのコアの数及びコアが並列処理できる処理数にしたがって、用いる数が決定される。また、CPU11に搭載されたレジスタセット300の内の所定数を使用するとして、使用するレジスタセット300の数が決定される場合もある。
レジスタセット300は、図5に示す項目のエントリを格納する。図5は、レジスタセットのエントリ情報の一例を表す図である。図5に示すように、エントリの項目は、例えば、レジスタセット300に格納される各エントリの情報及びそのエントリに用いるビット数である。このレジスタセット300が、「記憶部」の一例にあたる。
受信側空き通知割込フラグは、ノード1において空き通知割込を使用するか否かを示すフラグである。空き通知割込とは、ノード1にメッセージを受信可能なレジスタセット300が確保できた場合に、メッセージが受信可能になったことをコア21に知らせる割り込みである。例えば、空き通知割込は、予め決められた数以上のレジスタセット300がメッセージを格納できる状態になった場合に発行される。受信側空き通知割込フラグは、予め操作者からの指示を受けて設定される。本実施例では、受信側空き通知割込フラグがイネーブルに設定された場合で説明する。
受信メッセージ数は、ノード1が受信したメッセージの数を表す。受信メッセージ数は、図5に示す4bitの情報で受信したメッセージの数を表す。
割込発行条件メッセージ空き数は、空き通知割込を発行する条件となるメッセージの数を表す。
メッセージ受信割込フラグは、メッセージ受信割込を使用するか否かを表すフラグである。メッセージ受信割込フラグがディセーブルの場合、ノード1は、ポーリング監視によりメッセージ受信の検知を行う。また、メッセージ割込フラグがイネーブルであれば、ノード1は、メッセージ受信によりメッセージ受信の検知を行う。メッセージ受信割込フラグは、予め操作者からの指示を受けて設定される。本実施例では、メッセージ受信割込フラグがイネーブルに設定された場合で説明する。
空き通知割込ペンディングフラグは、レジスタセット300に空き通知割込の情報が格納されたか否かを表すフラグである。
メッセージ受信割込ペンディングフラグは、レジスタセット300にメッセージ受信割込の情報が格納されたか否かを表すフラグである。このメッセージ受信割込ペンディングフラグが「特定情報」の一例にあたる。以下では、このメッセージ受信割込ペンディングフラグを、単に「ペンディングフラグ」といい、ペンディングフラグを格納するビットを、「ペンディングビット」という。ペンディングフラグは「1」であれば、オンであり、「0」であればオフである。
受信データ記録場所情報は、受信したメッセージに含まれるデータを格納したメモリのアドレスの情報である。
さらに、本実施例に係るレジスタセット300では、図6に示すように、ペンディングビットをまとめて、ペンディングレジスタが生成される。図6は、ペンディングレジスタを説明するための図である。
レジスタセット300は、各エントリに1ビットのペンディングビット301を有する。そして、ペンディングビット301を全エントリに亘って抽出すると、ペンディングビット301の集合であるペンディングビット群302が取得される。そして、このペンディングビット群から番号の若いレジスタに含まれるペンディングビット301の順に予め決められた数を抽出してまとめることで、ペンディングレジスタ303が生成される。
例えば、図6では、全エントリ数が16384個として、レジスタセット300に含まれる各エントリをレジスタ#0〜#16383として表す。
ここで、本実施例では、ペンディングレジスタ303のサイズを、リードデータのバス幅と一致させた。例えば、8byteのリードデータのバス幅を持つシステムであれば、ペンディングレジスタ303は64ビットとなる。そして、ペンディングレジスタ303が64ビットの場合、ペンディングレジスタ303は、図6に示すようにペンディングレジスタ#0〜#255の256個生成される。ここで、各ペンディングレジスタ303の上に#に数字を付加した情報は、ペンディングビット群302の先頭からの位置を表す。
図7は、ペンディングレジスタを表す図である。ここでは、1つのペンディングレジスタ303のビット数がnの場合で説明する。Nは、0から全エントリ数をnで除算した値から1を引いた数までの整数である。また、レジスタセット300に含まれる各レジスタを#の後ろに番号を付して表す。この場合、ペンディングレジスタ303の最初の値は、レジスタ#((n×N)+0)のペンディングビットの値となる。さらに、ペンディングレジスタ303の2番目の値は、レジスタ#((n×N)+1)のペンディングビットの値となる。このように、ペンディングレジスタ303の次の値は、1つ前の値を有するレジスタの次のレジスタのペンディングビットの値となる。そして、ペンディングレジスタ303の最後の値は、レジスタ#((n×N)+n−1)のペンディングビットの値となる。
図4に戻って説明を続ける。メッセージ受信部105は、送信側ノードからメッセージを受信する。そして、メッセージ受信部105は、受信したメッセージに含まれる受信データを取得してメモリ12に格納する。その後、メッセージ受信部105は、受信データのメモリ12における格納場所の情報とともにメッセージをリクエスト調停部101へ出力する。その後、メッセージ受信部105は、メッセージ受信完了をメッセージ応答生成部104に通知する。
リクエスト調停部101は、受信データの格納場所の情報とともにメッセージの入力をメッセージ受信部105から受ける。また、リクエスト調停部101は、コア21から出力されたメッセージ受信割込及び空き通知割込のリクエストを含むメッセージ受信回路24内で発生したリクエストの入力を受ける。また、リクエスト調停部101は、刈取レジスタリード命令であるリクエストの入力も受ける。そして、リクエスト調停部101は、受信したリクエストを自己が有するキューに格納する。次に、リクエスト調停部101は、入力されたリクエストに対して、LRU(Least Recently Used)又はラウンドロビンなどを用いた調停を行う。そして、リクエスト調停部101は、調停で選択したリクエストをRAMアクセス制御部102へ出力する。
また、一般にレジスタアクセスのリクエストにはレジスタアドレスが含まれる。一旦レジスタアクセスが開始されると、移行のレジスタセット300へのアクセスはしばらく中断される可能性がある。例えば、RAMのリードモディファイライトなどがその例である。そのような調停参加抑止型条件の下では、リクエスト調停部101は、調停を行わずキューから外へリクエストを発行しない。
ここで、リクエスト調停部101は、調停により刈取レジスタリード命令を選択した場合、他のリクエストの調停参加を抑止する。そして、リクエスト調停部101は、レジスタセット300に含まれる各レジスタのペンディングビットの読出リクエストをRAMアクセス制御部102へ出力する。そして、リクエスト調停部101は、RAMアクセス制御部102がペンディングレジスタのビット数分の読み出しを行った後に、調停を再開する。
ここで、図8を参照して、リクエスト調停部101を実現する回路の一例について説明する。図8は、リクエスト調停部の一例の回路図である。リクエスト調停部101は、図8に示すように、リクエストキュー111、リクエスト出力回路112、調停回路113、連続リード入力ライン114、参加抑止信号入力ライン115及び参加抑止信号出力回路116を有する。
リクエストキュー111は、複数存在する。そして、リクエストキュー111は例えばLRUなどを用いて蓄積されたリクエストの中から1つリクエストを選択し、リクエスト出力回路112へ出力する。
連続リード入力ライン114は、後述するペンディングビットの値の連続読み出しを行う場合、RAMアクセス制御部102から出力指示信号が入力され、それ以外の場合、出力停止信号が入力される。参加抑止信号入力ライン115には、参加抑止信号が入力される。
参加抑止信号出力回路116は、連続リード入力ライン114からの入力信号及び参加抑止信号入力ライン115からの入力信号の入力を受ける。連続リード入力ライン114から出力指示信号が入力された場合、参加抑止信号出力回路116は、参加抑止信号をリクエスト出力回路112へ出力する。また、連続リード入力ライン114から出力指示信号の入力が無い場合、参加抑止信号出力回路116は、参加抑止信号のリクエスト出力回路112へ出力を停止する。すなわち、RAMアクセス制御部102がペンディングビットの値の連続読み出しを行う場合、参加抑止信号出力回路116は、参加抑止信号を出力する。
リクエスト出力回路112は、リクエストキュー111に1対1で対応するように配置される。リクエスト出力回路112は、リクエストキュー111からの入力信号と参加抑止信号出力回路116からの入力信号との入力を受ける。そして、リクエスト出力回路112は、参加抑止信号出力回路116から参加抑止信号の入力が無い場合、調停回路113へリクエストキュー111から入力されたリクエストを出力する。これに対して、参加抑止信号出力回路116から参加抑止信号が入力された場合、リクエスト出力回路112は、リクエストの出力を停止する。
調停部113は、リクエストの入力を各リクエスト出力回路112から受ける。そして、調停部113は、入力されたリクエストに対して調停を行い1つのリクエストを選択し、選択したリクエストを出力する。
図4に戻って説明を続ける。RAMアクセス制御部102は、調停により選択されたリクエストの入力をリクエスト調停部101から受ける。RAMアクセス制御部102は、取得したリクエストを基にRAMで構成されたレジスタセット300へのアクセス信号を生成する。RAMアクセス制御部102は、取得したリクエストからレジスタセット識別IDを取得する。
RAMアクセス制御部102は、リクエストに応じた読み出し又は書き込み制御信号を生成し、受信レジスタ103へ出力することで、レジスタセット300からのデータの読み出し又はレジスタセット300への情報の格納を行う。ここで、書込リクエストの場合、RAMアクセス制御部102は、一度レジスタセット300の内容を読み出してからデータを編集し、レジスタセット300に再度書き戻すリードモディファイライトの制御を行う。
また、例えば、メッセージ受信割込のリクエストを受けた場合、RAMアクセス制御部102は、レジスタセット300のメッセージ受信割込フラグを確認する。次に、RAMアクセス制御部102は、レジスタセット識別IDを有するレジスタセット300に受信割込の情報を格納する。また、RAMアクセス制御部102は、レジスタセット300における各エントリの登録を行う。さらに、メッセージ受信割込フラグがイネーブルであれば、RAMアクセス制御部102は、レジスタセット300の空き通知割込ペンディングフラグ及びメッセージ受信割込ペンディングフラグをオフにする。このメッセージ受信割込のリクエストが、「所定処理情報」の一例にあたる。そして、メッセージ受信割込で示されるメッセージの読み出し処理が、「所定処理」の一例にあたる。さらに、メッセージ受信割込リクエストを含む、コア21から出力される各種リクエストが、「処理情報」の一例にあたる。
そして、RAMアクセス制御部102は、レジスタセット300に格納されたエントリの数が所定数を超えるなどの予め決められた割込要求発行条件を満たしたか否かを判定する。割込要求発行条件が満たされた場合、RAMアクセス制御部102は、割込要求生成部107にメッセージ受信割込要求の生成を指示する。これに対して、割込要求発行条件が満たされていない場合、メッセージ受信部105は、割込要求生成部107に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
また、刈取レジスタリード命令の入力を受けた場合、RAMアクセス制御部102は、刈取レジスタリード命令に含まれるペンディングレジスタのアドレスを取得する。次に、RAMアクセス制御部102は、取得したペンディングレジスタのアドレスに対応する初期値をセットする。そして、RAMアクセス制御部102は、アドレスを初期値から1つずつインクリメントしながらn回連続で、ペンディングレジスタにおける各ペンディングビットの値をデータ整形部104へ出力するように受信レジスタ103を制御することを繰り返す。
ここで、nは、1つのペンディングレジスタのビット数である。さらに、RAMアクセス制御部102は、次に刈取レジスタリード命令の入力をリクエスト調停部から受けた場合、初期値を変更して上述したn回連続でのペンディングビットの値の出力を受信レジスタ103に繰り返し行わせる。RAMアクセス制御部102は、レジスタセット300の全てのエントリからペンディングビットの読み出しが行われるように、順次初期値を変更する。
ここで、レジスタセット300の全エントリ数をmとした場合、RAMアクセス制御部102は、n回連続でのペンディングビットの値の出力をm/n回受信レジスタ103に行わせる。一般に、nの数は、リードデータのバス幅と一致する。例えば、8byteのリードデータのバス幅を持つシステムであれば、n=64となる。すなわち、各エントリを1回ずつ割込要求により読み出す場合に比べて、刈取レジスタリード命令をトリガとするレジスタの読み出しの回数を1/64に減らすことができる。
ここで、図9を参照して、RAMアクセス制御部102を実現する回路の一例について説明する。図9は、RAMアクセス制御部の一例の回路図である。RAMアクセス制御部102は、デコーダ121、選択回路122、加算回路123、同期信号入力ライン124、インクリメント条件出力回路125、カウンタ126、判定回路127、クリア条件出力回路128及び選択回路129を有する。
デコーダ121は、刈取レジスタリード命令の場合、リクエスト調停部101から入力された刈取レジスタリード命令からペンディングビットのアドレスを取得する。そして、デコーダ121は、取得したアドレスをデコードして選択回路122へ出力する。また、デコーダ121は、刈取レジスタリード命令を選択回路129へ出力する。
選択回路122は、レジスタセット300の全エントリ数を連続読み出しの回数で除算した数の初期値220を有する。例えば、レジスタセットの全エントリ数がmであり、連続読出しの回数がnの場合、選択回路122は、m/n個の初期値220を有する。各初期値220は、各ペンディングレジスタの先頭のアドレスを表す。
選択回路122は、デコードされたペンディングビットのアドレスをデコーダ121から取得する。次に、選択回路122は、デコーダ121から取得したペンディングビットのアドレスに対応する初期値220を選択する。そして、選択回路122は、選択した初期値220を加算回路123へ出力する。
加算回路123は、初期値220の入力を選択回路122から受ける。また、加算回路123は、カウンタ値の入力をカウンタ126から受ける。そして、加算回路123は、初期値220にカウンタ値を加算する。その後、加算回路123は、加算結果を選択回路129へ出力する。
インクリメント条件出力回路125は、連続読み出しの期間中にリクエスト調停部101から有効信号の入力を受ける。さらに、インクリメント条件出力回路125は、同期信号の入力を同期信号入力ライン124から受ける。ここで、同期信号は、レジスタセット300のデータを読み出すタイミングを示す信号であり、レジスタセット300を構成するRAMの特性に応じて生成される。インクリメント条件出力回路125は、有効信号の入力期間、すなわち、連続読み出しの期間中に、同期信号に同期させてインクリメント信号を出力する。
判定回路127は、カウンタ126から出力されたカウント値の入力を受ける。そして、判定回路127は、カウント値が連続読み出しの回数が上限に達したか否かを判定する。カウント値が連続読み出しの回数が上限に達した場合、判定回路127は、クリア条件出力回路128へ信号を出力する。
クリア条件出力回路128は、同期信号の入力を同期信号入力ライン124から受ける。さらに、クリア条件出力回路128は、連続読み出しの回数が上限に達した場合、判定回路127から信号の入力を受ける。そして、クリア条件出力回路128は、判定回路127から信号の入力を受けた場合、同期信号に同期させてクリア信号をカウンタ126へ出力する。
カウンタ126は、連続読み出しの期間中、インクリメント条件出力回路125からインクリメント信号の入力を受ける。そして、カウンタ126は、前回のカウント値に1を加えてカウントアップする。そして、カウンタ126は、カウント値を加算回路123、判定回路127、リクエスト調停部101及びデータ整形部104へ出力する。そして、連続読み出しの回数の上限までのカウントアップを行った後に、カウンタ126は、クリア条件出力回路128からクリア信号の入力を受ける。クリア信号の入力を受けて、カウンタ126は、カウント値を0にリセットする。
加算回路123は、刈取レジスタリード命令に対応する初期値220の入力を選択回路122から受ける。さらに、加算回路123は、カウンタ値の入力をカウンタ126から受ける。加算回路123は、連続読み出しの期間中、1つずつインクリメントされたカウント値の入力をカウンタ126から受ける。すなわち、加算回路123は、初期値220から連続読み出しの回数の上限まで連続したアドレスの入力を順次受ける。
そして、加算回路123は、初期値220にカウンタ値を加算する。その後、加算回路123は、加算結果を選択回路129へ出力する。
選択回路129は、刈取レジスタリード命令の入力をデコーダ121から受ける。刈取レジスタリード命令の入力を受けた場合、選択回路129は、加算回路123から取得したアドレスからペンディングビットを読み出しを受信レジスタ103に行わせる。この場合、選択回路129は、連続読み出しの回数の上限まで、アドレスをインクリメントしながら、ペンディングビットを読み出しを受信レジスタ103に繰り返させる。
また、選択回路129は、刈取レジスタリード命令以外のリクエストの入力をリクエスト調停部101から受ける。その場合、選択回路129は、受信したリクエストにしたがい、受信レジスタ103に処理を行わせる。
図4に戻って説明を続ける。刈取レジスタリード命令の入力があった場合、RAMアクセス制御部102は、後述するデータ整形部104に読み出されたペンディングビットを有するエントリをレジスタセット300から読み出す。
データ整形部104は、受信レジスタ103から出力されるRAM出力データを出力データバスフォーマットに成形する回路である。データ整形部104は、中間バッファ140を有する。データ整形部104は、中間バッファ140に格納するために、RAM出力データの内の所定の情報に対して第1データ整形を行う。そして、データ整形部104は、第1データ整形を施したRAM出力データを中間バッファ140に格納する。
次に、データ整形部104は、中間バッファ140に格納されたデータに対して第2データ整形を施し、出力データバスフォーマットに変換する。また、データ整形部104は、出力データバスフォーマットにしたがったヘッダ生成を行う。そして、データ整形部104は、出力データバスフォーマットにしたがったデータ出力タイミングの制御を行い、レジスタバス25へRAM出力データを出力し、コア21へ向けて送信する。
ここで、割込要求の場合、データ整形部104は、RAM出力データとしてn個のエントリのペンディングビットの値の入力を連続で受ける。具体的には、データ整形部104は、自己が有するカウンタでカウントを行い、カウンタの値がnとなるまでペンディングビットの値の入力を受ける。言い換えれば、データ整形部104は、1つのペンディングレジスタが有する値の入力を受ける。
ここで、ペンディングビットの値が1bitで有る場合で説明する。データ整形部104は、1〜n回目のどのリードかを認識し、中間バッファ140に読出しの順番に格納する。例えば、データ整形部104は、1回目の読み出しの値は中間バッファ140のビット0、2回目の読み出しの値は中間バッファのビット1、3回目の読み出しの値は中間バッファ140のビット3というように、中間バッファ140へ格納する。すなわち、データ整形部104は、レジスタセット300のアドレスで定義されたペンディングビットをビットスライスして横に格納する処理を行う。
その後、データ整形部104は、カウンタがnに達すると、ヘッダ、データの順に出力バスフォーマットにしたがったパケットを出力する。ここで、連続読み出しの回数であるnが、「所定単位」の一例にあたる。
ここで、図10を参照して、データ整形部104を実現する回路の一例について説明する。図10は、データ整形部の一例の回路図である。データ整形部104は、中間バッファ140、デコーダ141、カウント値出力回路142、判定部143、読出制御部144及び選択部145を有する。また、データ整形部104は、ペンディングビット取出部146、選択回路147、ヘッダ生成部148及び選択回路149を有する。また、データ整形部104は、ペンディングビット取出部146の他に、他のレジスタビットを取り出すxxレジスタビット取出部及びyyレジスタビット取出部などを有する。
デコーダ141は、カウンタ値の入力をRAMアクセス制御部102から受ける。そして、デコーダ141は、カウンタ値をデコードしてカウント値出力回路142へ出力する。
カウント値出力回路142は、RAM読出タイミングの入力をリクエスト調停部101から受ける。さらに、カウント値出力回路142は、デコードされたカウント値の入力をデコーダ141から受ける。そして、カウント値出力回路142は、RAM読出タイミングに合わせて、カウント値を判定部143へ出力する。
判定部143は、カウント値が連続読出し回数の上限に達したか否かを判定する。上限に達した場合、判定部143は、読出開始命令を読出制御部144へ出力する。
読出制御部144は、読出開始命令の入力を判定部143から受ける。そして、読出制御部144は、読出開始を選択回路150へ指示する。また、読出制御部144は、他のレジスタのデータの出力条件の入力をRAMアクセス制御部102から受ける。そして、読出制御部144は、受信したデータの出力条件にしたがって、読出開始を選択回路150へ指示する。
選択部145は、レジスタ種情報の入力をリクエスト調停部101から受ける。そして、選択部145は、レジスタ種情報にしたがって、選択するレジスタビットを選択回路147に指示する。ここで、割込要求の場合、選択部145は、レジスタ種情報としてペンディングレジスタの情報を取得し、選択回路147に対してペンディングビットの選択を選択回路147へ指示する。
ペンディングビット取出部146は、ペンディングビットの値を受信レジスタ103から取得する。さらに、ペンディングビット取出部146は、RAMアクセス制御部102からカウンタ値の入力を受ける。ペンディングビット取出部146は、カウンタ値とともにレジスタ値を選択回路147へ出力する。
選択回路147は、選択部145からペンディングビットの選択の指示を受けると、ペンディングビット取出部146からの出力を中間バッファ140へ出力する。
中間バッファ140は、読出タイミングの入力をRAMアクセス制御部102から受ける。そして、中間バッファ140は、読出タイミングで選択回路147からの出力を取得し蓄積する。ここで、刈取レジスタリード命令の場合、中間バッファ140は、カウンタ値に応じて順番にペンディングビットの値を蓄積する。そして、中間バッファ140は、例えば、上位ビットと下位ビットに分けて、蓄積したデータを選択回路149へ出力する。
ヘッダ生成部148は、出力するデータに応じてヘッダを生成する。そして、ヘッダ生成部148は、生成したヘッダを選択回路149へ出力する。
選択回路149は、ヘッダ生成部148から入力されたヘッダとともに、中間バッファ140から出力されたデータをメッセージ応答生成部106へ出力し、コア21へ送信する。
図4に戻って説明を続ける。メッセージ応答生成部106は、メッセージ受信完了の通知をメッセージ受信部105から受ける。そして、メッセージ応答生成部106は、受信した通知にしたがって、送信側のノード1のメッセージの送信に対する応答を生成する。その後、メッセージ応答生成部106は、生成した応答をローカルXB13へ出力し、送信側のノード1に向けて送信する。
割込要求生成部107は、レジスタセット300の使用状況を監視し、メッセージが格納されていないレジスタセット300の数を取得する。ここで、割込要求生成部107は、メッセージの格納に用いるレジスタセット300の総数を記憶していてもよい。そして、割込要求生成部107は、レジスタセット300に登録された割込発行条件メッセージ空き数と取得したメッセージが格納されていないレジスタセット300の数とを比較して、空き通知割込の発行条件を満たしたか否かを判定する。
空き通知割込の発行条件を満たす場合、割込要求生成部107は、レジスタセット300の受信側空き通知割込フラグを確認する。
受信側空き通知割込フラグがディセーブルであれば、割込要求生成部107は、空き通知割込要求の格納処理を終了する。受信側空き通知割込フラグがイネーブルであれば、割込要求生成部107は、空き通知割込を格納するレジスタセット300を特定する。
そして、割込要求生成部107は、特定したレジスタセット300の空き通知割込ペンディングフラグをオンにする。さらに、割込要求生成部107は、レジスタセット300における各エントリの登録を行う。
その後、割込要求生成部107は、空き通知割込要求を生成する。そして、割込要求生成部107は、生成した空き通知割込要求をコア21へ送信する。
また、割込要求生成部107は、メッセージ受信割込要求の生成の指示をRAMアクセス制御部102から受ける。そして、割込要求生成部107は、メッセージ受信割込要求を生成する。その後、割込要求生成部107は、生成したメッセージ受信割込要求をレジスタバス25へ出力し、コア21へ送信する。このメッセ時受信割込要求及び空き通知割込み要求が、割込リクエストとなる。この割込リクエストが発行されることで、割込要因の刈取処理が行われる。
このように、RAMアクセス制御部102及び割込要求生成部107は、割込要求発行条件が満たされていれば、メッセージ受信割込要求を発行するが、満たされていない場合、メッセージ受信割込要求を発行しない。ただし、割込要求発行条件の充足又は非充足にかかわらず、メッセージ受信部105及び割込要求生成部107は、割込要因の格納は行っていく。すなわち、例えメッセージ受信割込要求の発行が行われなくても、レジスタセット300には割込要因が格納されていく。
コア21は、OSを動作させる。また、コア21は、OS上でアプリケーションなどを実行しユーザプロセスを動作させる。コア21は、OS又はユーザプロセスのいずれかもしくは双方が動作主体になることがある。
コア21は、空き通知割込やメッセージ受信割込などの割込要因をレジスタバス25を介してメッセージ受信回路24へ送信する。また、コア21は、割込要求生成部107から空き通知割込要求を受信すると、空き通知割込みのレジスタリード命令をメッセージ受信回路24へ発行する。
また、コア21は、メッセージ受信割込要求を割込要求生成部107から受信する。そして、コア21は、割込要因の刈取処理を開始する。例えば、コア21がメッセージ受信割込要求を受けると、OSは、コンテキストスイッチを実行しプロセスを切り替え、ユーザプロセスに割込要因の刈取処理を指示する。OSによるコンテキストスイッチが行われると、ユーザプロセスは、割込要因の刈取処理を開始する。そして、ユーザプロセスは、刈取レジスタリード命令をメッセージ受信回路に送信する。このようにして、割込み刈取処理が開始される。
次に、図11を参照して、プロセス間通信によるメッセージの送受信の流れについて説明する。図11は、情報処理システムによるメッセージの送受信のフローチャートである。
送信側ノードのコア21が、送信レジスタ31にメッセージを書き込む(ステップS1)。次に、コア21がメッセージ送信回路23へメッセージ送信リクエストを出力する(ステップS2)。
送信側ノードのメッセージ送信回路23が、メッセージチェック後、受信側ノードへメッセージを発行する(ステップS3)。
受信側ノードのメッセージ受信回路24は、メッセージを受信する。そして、メッセージ受信回路24は、メッセージチェック後、メモリ12へメッセージを書き込む(ステップS4)。ただし、このフローでは1つのメッセージの送受信のように記載したが、実際には、後述するステップS5に移行する前に複数のメッセージに対してステップS1〜4が行われる場合もある。
メッセージ受信回路24は、メモリ12からの応答を受け取る。そして、メッセージ受信回路24は、メッセージ受信のステータスを送信側ノードのメッセージ送信回路23へ送信する(ステップS5)。
送信側ノードのメッセージ送信回路23は、メッセージ受信のステータスを受信側ノードのメッセージ受信回路24から受信する。そして、メッセージ送信回路23は、受信したステータスを保持する。その後、送信側ノードのコア21からの要求に応じて、メッセージ送信回路23は、ステータスをコア21へ返す(ステップS6)。
受信側ノードのメッセージ受信回路24は、割込要求発行条件を充足したか否かを判定する(ステップS7)。割込要求発行条件を充足していない場合(ステップS7:否定)、処理はステップS1に戻り、割込発行要求条件を充足するまで、送信側ノード及び受信側ノードはステップS1〜S6を繰り返す。
これに対して、割込要求発行条件を充足された場合(ステップS7:肯定)、受信側ノードのメッセージ受信回路24は、受信側ノードのコア21により動作するOSのインタラプトハンドラへメッセージ受信割込による割り込みを上げる(ステップS8)。すなわち、メッセージ受信回路24は、メッセージ受信割込要求をインタラプトハンドラへ送信する。
インタラプトハンドラからの指示を受けて、すなわち、インタラプトハンドラから刈取レジスタリード命令の入力を受けて、メッセージ時受信回路24は、レジスタをリードし、リード結果をインタラプトハンドラへ出力する。インタラプトハンドラは、リード結果の入力を受けて、レジスタセット300内の割込要因を確認する(ステップS9)。
インタラプトハンドラは、受信側ノードのコア21により動作する受信側のユーザプロセスに対して、割込要因を含むメッセージIDを通知する(ステップS10)。
受信側のユーザプロセスは、割込要因を含むメッセージIDをインタラプトハンドラから取得する。そして、受信側のユーザプロセスは、メッセージ受信回路24にメッセージIDに対応するレジスタセット300に格納されたエントリの読み出しを指示する。メッセージ受信回路24は、メッセージIDに対応するレジスタセット300内のエントリから情報を読み出し、受信側のユーザプロセスへ出力する。そして、受信側のユーザプロセスは、メッセージ受信回路24から情報を受信して、メッセージステータス、ベースアドレス及びポインタなどを確認する(ステップS11)。
次に、受信側のプロセスは、確認した情報を基に、メモリ12上のメッセージを読み込む(ステップS12)。
その後、受信側のユーザプロセスは、メッセージ受信回路24にレジスタセット300のステータスの更新を指示する。メッセージ受信回路24は、受信側のユーザプロセスからの指示を受けて、レジスタセット300に新たに情報を書き込みステータスを更新する(ステップS13)。この時、例えば、メッセージ受信回路24は、リードモディファイライトを行って、ペンディングフラグを「0」にする。
さらに、図12を参照して、本実施例に係る情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理の全体的な流れを説明する。図12は、情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理のシーケンス図である。ここでは、送信側ノードでは、コア21によりユーザプロセス211及びOS212が実行されており、受信側ノードでは、コア21により、ユーザプロセス221及びOS222が実行される場合で説明する。
ユーザプロセス221は、操作者からの指示を受けて、レジスタセット300の設定を行う(ステップS21)。具体的には、ユーザプロセス221は、操作者からの指示にしたがい受信側空き通知割込フラグ、割込発行条件メッセージ空き数及びメッセージ受信割込フラグを設定する。ここでは、ユーザプロセス221は、受信側空き通知割込フラグ及びメッセージ受信割込フラグをいずれもイネーブルにする。また、ユーザプロセス221は、全てのレジスタセット300の空き通知ペンディングフラグ及びメッセージ受信割込ペンディングフラグをオフ、すなわちペンディングビットを「0」に設定する。メッセージ受信回路24は、ユーザプロセス221からの指示を受けて、レジスタセット300の設定を行う。
そして、ユーザプロセス221は、メッセージが送信側ノードから送られてくるまでメッセージの受信処理を待機する(ステップS22)。ただし、この間、ユーザプロセス221は、他の処理を実行してもよい。
メッセージの送信処理を行う場合、送信側ノードのユーザプロセス211は、メッセージ送信依頼をOS212に要求する(ステップS23)。
OS212は、メッセージ送信依頼をユーザプロセス211から受ける。そして、OS212は、メッセージの送信をメッセージ送信回路23に指示する(ステップS24)。
メッセージ送信回路23は、メッセージの送信の指示をOS212から受ける。そして、メッセージ送信回路23は、メッセージを含むパケットを生成する。その後、メッセージ送信回路23は、生成したパケットを受信側ノードのメッセージ受信回路24へ送信する(ステップS25)。
メッセージ受信回路24は、メッセージを含むパケットを送信側ノードのメッセージ送信回路23から取得する。そして、メッセージ受信回路24のメッセージ受信部105は、受信したパケットに含まれるメッセージを受信する(ステップS26)。
そして、メッセージ受信回路24のメッセージ受信部105は、受信したメッセージをメモリ12に格納する(ステップS27)。また、メッセージ受信回路24のRAMアクセス制御部102は、メッセージ受信割込の情報をレジスタセット300に格納する。その後、メッセージ受信回路24のメッセージ応答生成部106は、メッセージ受信の完了応答を送信側ノードのメッセージ送信回路23へ送信する(ステップS28)。
送信側ノードのメッセージ送信回路23は、完了応答を受信側ノードのメッセージ受信回路24から受信する。そして、メッセージ送信回路23は、ユーザプロセス211に完了応答を送信する。ユーザプロセス211は、受信した完了応答からメッセージ送信のステータスを読み出す(ステップS29)。
その後、受信側ノードのメッセージ受信回路24のRAMアクセス制御部102は、割込要求発行条件が充足されると、メッセージ受信割込要求の生成を割込要求生成部107に指示する。そして、メッセージ受信回路24の割込要求生成部107は、メッセージ受信割込要求を生成し、OS222に送信する(ステップS30)。
OS222は、メッセージ受信割込要求をメッセージ受信回路24の割込要求生成部107から受信すると、コンテキストスイッチを実行する(ステップS31)。
ユーザプロセス221は、コンテキストスイッチの実行を受けて、割り込み処理を開始し、刈取レジスタリード命令をメッセージ受信回路24へ送信する(ステップS32)。
メッセージ受信回路24のRAMアクセス制御部102は、刈取レジスタリード命令をユーザプロセス221から受けて、ペンディングビットの連続読み出しを実行する。そして、RAMアクセス制御部102は、読み出したペンディングビット群をユーザプロセス221へ送信する。その後、RAMアクセス制御部102は、読み出したペンディングビットを基に指定された割込要因をユーザプロセス221へ送信する(ステップS33)。この時、RAMアクセス制御部102は、読み出した割込要因を格納していたレジスタセット300から割込要因のエントリを削除しクリアし、ペンディングビットをオフにする。
ユーザプロセス221は、取得した割込要因が指定するアドレスからのメッセージの読み出しをメモリ12に要求する(ステップS34)。
メモリ12は、指定されたアドレスに格納されたメッセージをユーザプロセス221へ出力する(ステップS35)。
次に、図13を参照して、本実施例に係るメッセージ受信回路24による割込要因の刈取処理の流れについて説明する。図13は、実施例1に係るメッセージ受信回路による割込要因の刈取処理のフローチャートである。
RAMアクセス制御部102、コア21から送信された割込要求をレジスタバス25及びリクエスト調停部101を介して受信する(ステップS101)。
RAMアクセス制御部102は、リードポインタが示すレジスタセット300のエントリからペンディングビットを読み出す(ステップS102)。
次に、RAMアクセス制御部102は、読出し回数が連続読出し回数の上限に達したか否かを判定する(ステップS103)。連続読み出し回数の上限に達していない場合(ステップS103:否定)、RAMアクセス制御部102は、ステップS102へ戻る。
これに対して、連続読み出し回数の上限に達した場合(ステップS103:肯定)、RAMアクセス制御部102は、読み出したペンディングビットの情報を用いて、割込要因の情報を読み込み、読み込んだエントリを削除する(ステップS104)。この場合、RAMアクセス制御部102は、ペンディングビットの値をオンにする。
その後、RAMアクセス制御部102は、レジスタセット300の全てのエントリの読み出しが完了したか否かを判定する(ステップS105)。読み出していないエントリが存在する場合(ステップS105:否定)、RAMアクセス制御部102は、ステップS102へ戻り連続読み出しを繰り返す。
これに対して、全てのエントリの読み出しが完了した場合(ステップS105:肯定)、RAMアクセス制御部102は、割込要因の読み出しを完了する(ステップS106)。これにより、割込要因の刈取処理が終了する。
次に、図14を参照して、本実施例に係るメッセージ受信回路24によるレジスタセット300からのペンディングビットの取得の詳細を、ハードウェアの観点から説明する。図14は、メッセージ受信回路によるレジスタセットからのペンディングビットの取得処理のフローチャートである。図14は、図13におけるレジスタセット300からペンディングビットを取得する処理をハードウェアの観点から詳細に表したフローチャートである。
リクエスト調停部101は、リクエストをコア21から受信する。そして、リクエスト調停部101は、リクエストを調停してRAMアクセス制御部102へリクエストを出力する(ステップS111)。
RAMアクセス制御部102は、リクエストの入力をリクエスト調停部101から受ける。そして、RAMアクセス制御部102は、受信したリクエストが指定するレジスタ種がペンディングレジスタか否か、すなわち刈取レジスタリード命令か否かを判定する(ステップS112)。
レジスタ種がペンディングレジスタの場合(ステップS112:肯定)、RAMアクセス制御部102は、カウンタ126を起動する(ステップS113)。
RAMアクセス制御部102は、リクエストで指定されたアドレスから初期値220を取得する。そして、RAMアクセス制御部102は、初期値220及びカウンタ値により指定されたアドレスの読出信号を受信レジスタ103へ発行する(ステップS114)。
受信レジスタ103は、アドレスの読出信号をRAMアクセス制御部102から受ける。そして、受信レジスタ103は、読出信号で指定されたアドレスのデータをデータ整形部104へ出力する(ステップS115)。
RAMアクセス制御部102は、読み出しを連続読出し回数の上限まで実行したか否かを判定する(ステップS116)。読み出しを連続読出し回数の上限まで実行していない場合(ステップS116:否定)、RAMアクセス制御部102は、カウント値を1つインクリメントする(ステップS117)。そして、RAMアクセス制御部102は、ステップS114へ戻る。
読み出しを連続読出し回数の上限まで実行した場合(ステップS116:肯定)、RAMアクセス制御部102は、カウンタを停止する(ステップS118)。
これに対して、レジスタ種がペンディングレジスタでない場合(ステップS112:否定)、RAMアドレス制御部102は、アドレスの読出信号を受信レジスタ103へ発行する(ステップS119)。
次に、受信レジスタ103は、アドレスの読出信号をRAMアクセス制御部102から受ける。そして、受信レジスタ103は、読出信号で指定されたアドレスのデータをデータ整形部104へ出力する(ステップS120)。
データ整形部104は、データをレジスタセット300から取得する。そして、データ整形部104は、レジスタ種に応じてデータを整形する(ステップS121)。
その後、データ整形部104は、整形したデータをレジスタバス25へ出力し、コア21へ向けて送信する(ステップS122)。
さらに、図15を参照して本実施例に係る情報処理システムによる割込要因の読み出しの効果について説明する。図15は、情報処理システムによる割込要因の刈取処理の効果を説明するための図である。
読出状態401は、従来の割込要因の読み出し方式を表す。また読出状態402は、本実施例に係る情報処理システムによる割込要因の読み出し方式を表す。
従来の割込要因の読み出し方式では、読出状態401に示すように、コア21が刈取レジスタリード命令をメッセージ受信回路24に送信する。そして、メッセージ受信回路24は、1回の刈取レジスタリード命令に応じて、1つのエントリをレジスタセット300から読み出し、中間バッファ140へ格納する。そして、メッセージ受信回路24は、中間バッファ140に格納したエントリから1ビットのペンディングビットの値を取得しコア21へ送信する。レジスタセット300が有する全てのエントリのペンディングビットの値をコア21へ送信するには、全エントリ数をmとすると、メッセージ受信回路24は、上述の処理をm回繰り返す。
これに対して、本実施例に係る割込要因の読み出し方式では、読出状態402に示すように、コア21は、刈取レジスタリード命令をメッセージ受信回路24へ送信する。メッセージ受信回路24は、1回の刈取レジスタリード命令に応じて、カウンタ126を用いて、n回連続して各エントリのペンディングビットの値だけをレジスタセット300から取得し、中間バッファ140へ格納する。そして、メッセージ受信回路24は、中間バッファ140に格納された値をコア21へ送信することで、n個のエントリ分のペンディングビットの値をコア21へ送信する。すなわち、レジスタセット300が有する全てのエントリのペンディングビットの値をコア21へ送信するには、全エントリ数をmとすると、メッセージ受信回路24は、上述の処理をm/n回繰り返す。したがって、従来の割込要因の読み出し方式に比べて、本実施例に係る割込要因の読み出し方式は、処理回数がn分の1となる。連続読み出しの回数nをデータバス幅に合わせた場合、64bitバスを有する情報処理システムであれば、n=64となり、従来の割込要因の読み出し方式に比べて、本実施例に係る割込要因の読み出し方式は、1/64にアクセス時間を短縮できる。
以上に説明したように、本実施例に係る情報処理システムは、1回の割込要求に対して所定数のペンディングビットをコアに通知する。これにより、割込要因の刈取処理におけるレジスタセットアクセス数を低減でき、割込要因を保持するレジスタセットのエントリ数が大量である場合でも、割込要因の刈取処理を高速に短時間で行うことができる。したがって、メッセージ通信を高速化することが可能となる。また、他のトランザクション、例えばキャッシャブルなトランザクションを阻害する要因を減らすことができ、情報処理システム全体の性能を向上させることができる。
ここで、本実施例では、1ビットであるメッセージ受信割込ペンディングビットを用いて、連続読み出しによる割込要因の刈取処理を行ったが、ペンディングビットはこれに限らない。例えば、ペンディングビットが複数ビット存在してもよい。また、複数のビットの論理和を求めて1ビットにしてペンディングビットとして用いてもよい。具体的には、空き通知割込みペンディングビットとメッセージ受信割込ペンディングビットを用いて、連続読み出しによる割込要因の刈取処理を行ってもよい。
図16は、実施例2に係るメッセージ受信回路のブロック図である。
割込レジスタ311は、割込レジスタライトフラグ及び割り込みキューFULLフラグを有する。
割込レジスタライトフラグは、割込要求の発行を許可するか否かを表すフラグである。このフラグがディセーブルの場合、受信側ノードにおける割込要求の発行が禁止される。逆にこのフラグがイネーブルであれば、受信側ノードにおける割込要求の発行が許可される。本実施例では、割込レジスタライトフラグの値が、「0」であればディセーブルを表し、「1」であればイネーブルを表す。
割込キューFULLフラグは、割込キュー312におけるエントリが満杯であることを示す。本実施例では、割込キューFULLフラグが「0」の場合、割込キュー312は、満杯でなく、エントリを格納できる領域を有することを表す。また、割込キューFULLフラグが「1」の場合、割込キュー312は、満杯であり、エントリを格納できる領域が余っていないことを表す。
割込キュー312は、例えばFIFO(First In First Out)構造を有する。割込キュー312が格納できるエントリ数は、割込要求の発生頻度や設置スペースなどのノードの運用状態から決定されることが好ましい。割込キュー312の各エントリには、レジスタセット識別ID及びメッセージ受信フラグが格納される。この割込キュー312が、「優先記憶部」の一例にあたる。
レジスタセット識別IDは、割込キュー312に格納されたメッセージ受信割込みの情報に対応するメッセージを示すレジスタセット識別IDである。
メッセージ受信フラグは、メッセージを受信したことを示すフラグである。メッセージ受信フラグが「1」であれば、割込キュー312がメッセージ受信割込の情報を格納したことを表す。また、メッセージ受信フラグが「0」であれば、割込キュー312がメッセージ受信割込の情報を格納していないことを表す。
RAMアクセス制御部102は、メッセージ受信部105がメッセージを受信すると、メッセージ受信部105から受信したメッセージから取得したレジスタセット識別IDを取得する。そして、RAMアクセス制御部102は、取得したレジスタセットIDを割込キュー312に登録する。次に、RAMアクセス制御部102は、割込キュー312のメッセージ受信フラグをオンにする。さらに、RAMアクセス制御部102は、受信したメッセージから取得したレジスタセット識別IDを有するレジスタセット300の受信データ記録場所情報にメッセージを格納したメモリ12のアドレスを登録する。また、RAMアクセス制御部102は、レジスタセット300における各エントリの登録を行う。この場合、RAMアクセス制御部102は、レジスタセット300のメッセージ受信割込ペンディングフラグをオフにする。
その後、RAMアクセス制御部102は、割込キュー312の割込キューFULLフラグを確認する。割込キューFULLフラグが「0」であれば、RAMアクセス制御部102は、割込キュー312に格納された割込キューの数を取得する。割込キュー312に格納された割込キューの数が上限値から1を減算した数(以下では、「FULL−1」という。)であれば、RAMアクセス制御部102は、割込レジスタ311の割込キューFULLフラグを「1」に設定する。これに対して、割込キュー312に格納された割込キューの数が「FULL−1」以下であれば、RAMアクセス制御部102は、割込キューFULLフラグを「0」のまま維持する。
その後、RAMアクセス制御部102は、割込レジスタ311の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、RAMアクセス制御部102は、割込要求生成部107に割込要求の生成を指示する。これに対して、割込レジスタライトフラグがディセーブルであれば、RAMアクセス制御部102は、割込要求生成部107に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
一方、割込キューFULLフラグが「1」であれば、RAMアクセス制御部102は、メッセージに格納されたレジスタセット識別IDを取得し、メッセージ受信割込の情報を格納したレジスタセット300を特定する。そして、RAMアクセス制御部102は、特定したレジスタセット300のメッセージ受信割込ペンディングフラグをオンにする。また、RAMアクセス制御部102は、受信したメッセージから取得したレジスタセット識別IDを有するレジスタセット300の受信データ記録場所情報にメッセージを格納したメモリ12のアドレスを登録する。さらに、RAMアクセス制御部102は、レジスタセット300における各エントリの登録を行う。
その後、RAMアクセス制御部102は、割込レジスタ311の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、RAMアクセス制御部102は、割込要求生成部107に割込要求の生成を指示する。これに対して、割込レジスタライトフラグがディセーブルであれば、RAMアクセス制御部102は、割込要求生成部107に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
さらに、割込み刈取処理について説明する。RAMアクセス制御部102は、割込要求を受信すると、割込レジスタ311の割込レジスタライトフラグを「0」、すなわちディセーブルに設定する。これにより、RAMアクセス制御部102は、刈取処理の間の新たな割込要求の発行を抑制する。
次に、RAMアクセス制御部102は、割込要因の情報が割込キュー312に格納されたか否かを判定する。割込要因の情報が割込キュー312にある場合、RAMアクセス制御部102は、割込キュー312の先頭の割込要因を読み出し、割込キュー312から削除する。
そして、RAMアクセス制御部102は、割込キュー312の全エントリを読み出し終えたかを判定する。読み出していないエントリが割込キュー312に存在する場合、RAMアクセス制御部102は、割込キュー312からのエントリの読み出し及び削除を、エントリがなくなるまで繰り返す。
割込キュー312に読み出すエントリがなくなった場合、RAMアクセス制御部102は、割込レジスタ311の割込キューFULLフラグが「1」か否かを判定する。割込キューFULLフラグが「0」であれば、割込キュー312にエントリを格納する余裕があるので、レジスタセット300にはエントリが格納されていないといえる。そのため、割込キューFULLフラグが「0」の場合、RAMアクセス制御部102は、レジスタセット300からの割込要因の刈込は行わなくてよい。そこで、RAMアクセス制御部102は、割込レジスタ311の割込レジスタライトフラグを「1」、すなわちイネーブルに設定する。これにより、割込要因のレジスタセット300及び割込キュー312への割込要因の情報の書込みの禁止が解除され、メッセージの受信や空き通知割込の発行などが再開される。そして、RAMアクセス制御部102は、割込要因の刈取処理を終了する。
これに対して、割込キューFULLフラグが「1」であれば、割込キュー312にエントリ格納の余裕が無いので、レジスタセット300にはエントリが格納されたことが考えられる。そこで、RAMアクセス制御部102は、レジスタセット300からの割込要因の刈取処理を実行する。
この場合、RAMアクセス制御部102は、割込キューFULLフラグを「0」にする。次に、RAMアクセス制御部102は、レジスタセット300からのペンディングビットの連続読み出しを開始する。そして、RAMアクセス制御部102は、レジスタセット300から全てのエントリのペンディングビットを読み出すまで、連続読み出しを繰り返す。
レジスタセット300から全てのエントリを読み出した場合、RAMアクセス制御部102は、割込レジスタ311の割込レジスタライトフラグを「1」、すなわちイネーブルに設定する。そして、RAMアクセス制御部102は、割込要因の刈取処理を終了する。
割込要求生成部107は、空き通知割込の発行条件を満たしたか否かを判定する。そして、空き通知割込の発行条件を満たした場合、割込要求生成部107は、レジスタセット300の受信側空き通知割込フラグを確認する。受信側空き通知割込フラグがディセーブルであれば、割込要求生成部107は、空き通知割込要求の格納処理を終了する。
一方、受信側空き通知割込フラグがイネーブルであれば、割込要求生成部107は、割込キューFULLフラグが「1」であるか否かを判定する。割込キューFULLフラグが「1」でない場合、割込キュー312の空き通知割込フラグをオンにする。
その後、割込要求生成部107は、割込キュー312に格納されたキューの数を取得する。割込キュー312に格納されたキューの数が「FULL−1」であれば、割込要求生成部107は、割込レジスタ311の割込キューFULLフラグを「1」に設定する。これに対して、割込キュー312に格納されたキューの数が「FULL−1」以下であれば、割込要求生成部107は、割込キューFULLフラグを「0」のまま維持する。
その後、割込要求生成部107は、割込レジスタ311の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、割込要求生成部107は、空き通知割込要求を生成する。そして、割込要求生成部107は、生成した空き通知割込要求をコア21に送信する。これに対して、割込レジスタライトフラグがディセーブルであれば、割込要求生成部107は、空き通知割込要求の生成を行わずに割込要因の格納処理を終了する。
一方、割込キューFULLフラグが「1」であれば、割込要求生成部107は、空き通知割込要求を格納するレジスタセット300を特定する。そして、割込要求生成部107は、特定したレジスタセット300の空き通知割込ペンディングフラグをオンにする。さらに、割込要求生成部107は、レジスタセット300における各エントリの登録を行う。
その後、割込要求生成部107は、割込レジスタ311の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、割込要求生成部107は、空き通知割込要求を生成する。そして、割込要求生成部107は、生成した空き通知割込要求をコア21に送信する。これに対して、割込レジスタライトフラグがディセーブルであれば、割込要求生成部107は、空き通知割込要求の生成を行わずに割込要因の格納処理を終了する。
次に、図17を参照して、本実施例に係る情報処理装置による割込要因の刈取処理について説明する。図17は、実施例2に係る情報処理装置による割込要因の刈取処理のフローチャートである。
RAMアクセス制御部102、コア21から送信された割込要求をレジスタバス25及びリクエスト調停部101を介して受信する(ステップS201)。
RAMアクセス制御部102は、割込レジスタ311の割込レジスタライトフラグを「0」、すなわちディセーブルにする(ステップS202)。
RAMアクセス制御部102は、割込キュー312からエントリを読み出す(ステップS203)。
RAMアクセス制御部102は、割込キュー312に割込要因があるか否かを判定する(ステップS204)。
割込要因がある場合(ステップS204:肯定)、RAMアクセス制御部102は、割込要因を読み出し、読み出した割込要因を削除しペンディングビットをオンにしてエントリをクリアする(ステップS205)。
次に、RAMアクセス制御部102は、割込キュー312に格納された全てのエントリの読み出しが完了したか否かを判定する(ステップS206)。読み出していないエントリが存在する場合(ステップS206:否定)、RAMアクセス制御部102は、ステップS203へ戻る。
これに対して、全てのエントリの読み出しが完了した場合(ステップS206:肯定)、RAMアクセス制御部102は、割込レジスタ311の割込キューFULLフラグが「1」か否かを判定する(ステップS207)。割込キューFULLフラグ≠1の場合(ステップS207:否定)、RAMアクセス制御部102は、ステップS203へ戻る。
これに対して、割込キューFULLフラグ=1の場合(ステップS207:肯定)、RAMアクセス制御部102は、割込キューFULLフラグを「0」に設定する(ステップS208)。
そして、RAMアクセス制御部102は、リードポインタが示すレジスタセット300のエントリからペンディングビットを読み出す(ステップS209)。
次に、RAMアクセス制御部102は、読出し回数が連続読出し回数の上限に達したか否かを判定する(ステップS210)。連続読み出し回数の上限に達していない場合(ステップS210:否定)、RAMアクセス制御部102は、ステップS209へ戻る。
これに対して、連続読み出し回数の上限に達した場合(ステップS210:肯定)、RAMアクセス制御部102は、読み出したペンディングビットの情報を用いて、割込要因の情報を読み込み、読み込んだエントリを削除する(ステップS211)。この場合、RAMアクセス制御部102は、ペンディングビットの値をオンにする。
その後、RAMアクセス制御部102は、レジスタセット300の全てのエントリの読み出しが完了したか否かを判定する(ステップS212)。読み出していないエントリが存在する場合(ステップS212:否定)、RAMアクセス制御部102は、ステップS209へ戻り連続読み出しを繰り返す。
これに対して、全てのエントリの読み出しが完了した場合(ステップS212:肯定)、RAMアクセス制御部102は、ステップ203へ戻る。
一方、割込キュー312に割込要因が無い場合(ステップS204:否定)、RAMアクセス制御部102は、割込レジスタ302の割込レジスタライトフラグを「1」、すなわちイネーブルに設定する(ステップS214)。
そして、RAMアクセス制御部102は、割込要因の読み出しを完了する(ステップS215)。これにより、割込要因の刈取処理が終了する。
以上に説明したように、本実施例に係る情報処理装置は、FIFOの割込キューを設け、割込キューに空きが有る場合、割込キューに割込要因を格納し、割込キューに空きが無ければ、レジスタセットに割込要因を格納する。そして、本実施例に係る情報処理装置は、割込キューから先に割込要因の刈取処理を行い、その後、レジスタセットに割込要因が有れば所定数連続でペンディングビットを読み込み、読み込んだペンディングビットの値を基に割込み要因の刈取処理を行う。このように、割込キューに収まる数以内の割り込み数であれば、レジスタセットを読み込まずに割込要因の刈取処理を行うことができ、割込刈取処理の時間を短縮して割込刈取処理を高速に行うことができる。また、割込キューに格納しきれない割込要因については、レジスタセットに格納しておき、割込キューからの割込要因の読み出し後に連続読み出しを行うことで、高速で割込要因の刈取処理を行うことができる。