(57)【特許請求の範囲】
【請求項１】
タイマーカウンタを有する複数のプロセッサが実行する割込み処理を同期させる割込み処理同期装置であって、
任意のプロセッサから呼び出され、前記複数のプロセッサが有するタイマーカウンタを初期化させるタイマー同期部と、
前記割込み処理を実行させる周期を指定した指定時間と、前記割込み処理を指定する指定処理との複数の組み合わせを複数のスロットへ保存する割込みテーブルと、
前記指定時間と前記指定処理とがオペレーティングシステムから通知され、前記割込みテーブルの複数のスロットへ前記指定時間が小さい順にスロット番号の小さいスロットに保存されるように、指定時間と前記指定処理との組み合わせを登録する登録部と、
前記タイマーカウンタが発生させる一定間隔の割込みに応じて各プロセッサによって呼び出され、前記割込みテーブルに登録された割込み処理のうち、呼び出されたプロセッサの識別番号と一致するスロット番号のスロット、または、前記プロセッサの識別番号に前記複数のプロセッサの台数の倍数を加算した値のスロット番号のスロットを選択し、選択したスロットの前記指定時間が割込み処理の実行を示す場合に、前記選択したスロットの指定処理を、前記呼び出されたプロセッサに実行させる実行部と、を備える割込み処理同期装置。
【請求項２】
前記タイマー同期部は、前記複数のプロセッサそれぞれが有するタイマーカウンタの値をゼロに初期化させ、
前記登録部は、前記指定時間をｅｔｉｍｅ、タイマーカウンタがカウントしている経過時間をＴＲとすると、補正後の指定時間＝ｅｔｉｍｅ−（ＴＲ％ｅｔｉｍｅ）の補正式で補正後の指定時間を算出し、前記補正後の指定時間を前記指定時間として、前記割込みテーブルへ登録することを特徴とする請求項１記載の割込み処理同期装置。
【請求項３】
前記実行部は、前記各プロセッサから呼び出されると、前記選択されたスロットの前記指定時間を１デクリメントし、前記指定時間が０になった指定処理を前記呼び出されたプロセッサに実行させることを特徴とする請求項１または２に記載の割込み処理同期装置。
【請求項４】
タイマーカウンタを有する複数のプロセッサが実行する割込み処理を同期させる割込み同期装置が実施する割込み処理同期方法であって、
所定のタイミングで、前記複数のプロセッサが有するタイマーカウンタを初期化させ、
前記割込み処理を実行させる周期を指定した指定時間と、前記割込み処理を指定する指定処理との複数の組み合わせとがオペレーティングシステムから通知されると、割込みテーブルの複数のスロットへ前記指定時間が小さい順にスロット番号の小さいスロットに保存されるように、指定時間と前記指定処理との組み合わせを登録し、
前記タイマーカウンタが発生させる一定間隔の割込みに応じて、前記割込み同期装置が各プロセッサから呼び出されると、前記割込みテーブルに登録された割込み処理のうち、前記呼び出しをしたプロセッサの識別番号と一致するスロット番号のスロット、または、前記プロセッサの識別番号に前記複数のプロセッサの台数の倍数を加算した値のスロット番号のスロットを選択し、選択したスロットの前記指定時間が割込み処理の実行を示す場合に、前記選択したスロットの指定処理を、前記呼び出しをしたプロセッサに実行させる割込み処理同期方法。
【請求項５】
タイマーカウンタを有する複数のプロセッサが実行する割込み処理を同期させる割込み同期装置が実施する手順を計算機に実行させるプログラムであって、
所定のタイミングで、前記複数のプロセッサが有するタイマーカウンタを初期化させる手順と、
前記割込み処理実行させる周期を指定した指定時間と、前記割込み処理を指定する指定処理との複数の組み合わせとがオペレーティングシステムから通知されると、割込みテーブルの複数のスロットへ前記指定時間が小さい順にスロット番号の小さいスロットに保存されるように、指定時間と前記指定処理との組み合わせを登録する手順と、
前記タイマーカウンタが発生させる一定間隔の割込みに応じて、前記割込み同期装置が各プロセッサから呼び出されると、前記割込みテーブルに登録された割込み処理のうち、前記呼び出しをしたプロセッサの識別番号と一致するスロット番号のスロット、または、前記プロセッサの識別番号に前記複数のプロセッサの台数の倍数を加算した値のスロット番号のスロットを選択し、選択したスロットの前記指定時間が割込み処理の実行を示す場合に、前記選択したスロットの指定処理を、前記呼び出しをしたプロセッサに実行させる手順と、を備えるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ計算機において、周期的に発生する割込み処理を同期させる割込み処理同期装置及び方法に関する。
【背景技術】
【０００２】
マルチプロセッサ計算機システム上で並列プログラムを実行する場合、プログラム中のスレッド間のインバランスが性能劣化の大きな要因となる。このため、仕事量の同じスレッドを同期してディスパッチする必要がある。例えば、特許文献１にユーザプログラムを同期させる方式が開示されている。特許文献１に開示された技術では、非常に大規模なマルチプロセッサ計算機システム上で巨大な並列プログラムを実行する場合、オペレーティングシステム（ＯＳ）自身の動作（割込み処理）が並列プログラムにとって外乱となる。このため、結果的にスレッドのインバランスを引き起こして、バリア同期の遅延が拡大し、性能を劣化させてしまっていた。これを解決するためには、オペレーティングシステムの割込み処理を、同じタイミングで実行する必要がある。
【０００３】
また、特許文献２には、割込み処理を特別なハードウェア機構によってプロセッサ間の同期的な手続きを利用し、割込み処理が発生する度に同期させる技術が開示されている。あるいは各プロセッサ上で同時に割込みを実行させるような専用のスケジューリング機構を導入して、割込み処理を動作させるなどの方式がとられていた。この他にも、同時に実行できる並列プログラムの制限方法（特許文献３）、周期的に実行されるプロセスの間隔を一定に保つ方式（特許文献４）、及びマルチプロセッサ上でのプロセスの移動の制御方式（特許文献５）などの技術が開示されている。
【０００４】
さらに、オペレーティングシステムが発生させる割込み処理には、（１）非同期的に発生する間欠的な割込み処理と（２）定期的に発生する周期的な割込み処理の２種類が存在している。（１）の間欠的な割込み処理はオペレーティングシステム外に起因する処理で、例えば、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）割込みや例外処理などの実行の即時性が重要な割込みである。これに対して（２）の周期的な割込みはオペレーティングシステム内に起因する処理であり、システムの維持や監視などのために必要な間隔が一定である事が重要な割込みである。並列プログラムの性能に影響を与えるのは（１）の間欠的な割込み処理ではなく（２）の周期的な割込み処理である。このうち、並列プログラムのバリア同期待ちを遅延させる主な原因としては、オペレーティングシステムの割込み処理が大きく影響していると考えられる。
【特許文献１】特開２００２−２５８９８０号公報
【特許文献２】特表昭６１−５０１６６１号公報
【特許文献３】特開平０８−３２８８８０号公報
【特許文献４】特開平０９−３１９５９７号公報
【特許文献５】特開２０００−２１５０７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方式では、割込み処理を間欠的な割込みと周期的な割込みとに区別せず、全ての割込み処理について同期させる方式を取ろうとしていた。このため、プロセッサ間で同期を取るためのオーバーヘッドが生じたり、特別なハードウェア機構が必要になったりしていた。また、同期を取る事により割込み処理自体が遅延してしまうなどの問題があった。さらに、特別なハードウェア機構のようなコストの高いプロセッサ間の同期的な手続きを導入する必要が生じたりしていた。
【０００６】
本発明は、このような事情に鑑みてなされたものであり、オペレーティングシステム内に起因する周期的な割込みの同期をとる割込み同期装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る割込み処理同期装置の一態様は、タイマーカウンタを有する複数のプロセッサが実行する割込み処理を同期させる割込み処理同期装置であって、任意のプロセッサから呼び出され、前記複数のプロセッサが有するタイマーカウンタを初期化させるタイマー同期部と、割込み処理を保存する割込みテーブルと、前記タイマーカウンタが発生させる割込みによって各プロセッサが実行する割込み処理を受け付け、前記割込みテーブルへ登録する登録部と、前記タイマーカウンタが発生させる割込みに基づいて、前記割込みテーブルに登録された割込み処理を各プロセッサに実行させる実行部と、を備える。
【０００８】
本発明に係る割込み処理同期方法の一態様は、タイマーカウンタを有する複数のプロセッサが実行する割込み処理を同期させる割込み処理同期方法であって、所定のタイミングで、前記複数のプロセッサが有するタイマーカウンタを初期化させ、前記タイマーカウンタが発生させる割込みによって各プロセッサが実行する割込み処理を受け付け、受け付けた割込み処理を割込みテーブルへ登録し、前記タイマーカウンタが発生させる割込みに基づいて、前記割込みテーブルに登録された割込み処理を各プロセッサに実行させる。
【０００９】
本発明に係る割込み処理同期装置方式を実現するプログラムの一態様は、タイマーカウンタを有する複数のプロセッサが実行する割込み処理を同期させるプログラムであって、所定のタイミングで、前記複数のプロセッサが有するタイマーカウンタを初期化させる手順と、前記タイマーカウンタが発生させる割込みによって各プロセッサが実行する割込み処理を受け付け、受け付けた割込み処理を割込みテーブルへ登録する手順と、前記タイマーカウンタが発生させる割込みに基づいて、前記割込みテーブルに登録された割込み処理を各プロセッサに実行させる手順と、を計算機に実行させる、を計算機に実行させる。
【発明の効果】
【００１０】
本発明によれば、オペレーティングシステム内に起因する周期的な割込みの同期をとる割込み同期装置及び方法を提供することが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。各図面において同一の構成または機能を有する構成要素および相当部分には、同一の符号を付し、その説明は省略する。
また、本明細書では、同じ構成要素が複数存在し、それぞれを区別する場合に、符号に"−ｎ"（ｎ＞０の整数）付加して、複数の構成要素それぞれを区別するものとする。例えば、図１では、複数のＣＰＵ１２０−１、１２０−２・・・１２０−Ｎを示している。例えば、図１を用いて説明する場合、ＣＰＵ１２０は、複数のＣＰＵ１２０−１〜１２０−Ｎのいずれか一つまたは複数を示すものとし、ＣＰＵ１２０−１（あるいは、ＣＰＵ１２０−２など）は、複数のＣＰＵそれぞれを区別して示すものとする。
【００１２】
本発明では、まず、オペレーティングシステムが発生させる割込み処理を（１）非同期的に発生する間欠的な割込み処理と（２）定期的に発生する周期的な割込み処理の２種類に分類する。そして、（１）は頻度が少なく即時性が求められる不可避な割込み処理であるため、（２）の周期的な割込み処理に着目し、周期的な割込み処理を同期させる手段を提供する。具体的には、プロセッサに内蔵されたタイマーレジスタを利用する。そして、この周期的な割込み処理の要求が発生した際に、最初の一回目の割込みが発生するタイミングを補正して割込み処理を同期して実行させる。以下、図面を参照して実施例を説明する。
【実施例１】
【００１３】
図１の構成図を参照して本発明の実施例１の割込み処理同期方式について詳細に説明する。図１に示す計算機システム１００は、主記憶（ＭＭ）１１０、プロセッサ（ＣＰＵ）１２０、タイマーレジスタ（ＴＭ）１２１、及びプロセッサ間通信装置（ＩＰＣ）１３０を備えた、共有メモリ型マルチプロセッサ計算機システムである。オペレーティングシステムは、主記憶１１０に記憶され、ＣＰＵ１２０によって、オペレーティングシステムの各命令がフェッチされ、実行される。オペレーティングシステムは、本実施例の割込み同期装置を含む。
【００１４】
計算機システム１００は、一つの主記憶１１０と一つのプロセッサ間通信装置１３０と複数（Ｎ台）のプロセッサ１２０（ＣＰＵ１２０−１〜ＣＰＵ１２０−Ｎ）から構成され、主記憶１１０とプロセッサ間通信装置１３０は複数のプロセッサ１２０から共有されている。また、各プロセッサにはタイマーレジスタ１２１（ＴＭ１２１−１〜ＴＭ１２１−Ｎ）が内蔵されている。
【００１５】
タイマーレジスタ１２１は一定間隔でインクリメントされながら同時に自プロセッサに割込みを発生させる。本明細書では、タイマーレジスタ１２１が発生させる割込みをタイマー割込みと呼び、タイマー割込みの間隔をティック（ｔｉｃｋ）と表記する。すなわちタイマー割込みはティック単位の一定間隔で発生する。これに対して、プロセッサ間通信装置１３０は全てのプロセッサ１２０に同時に割込みを発生させる。プロセッサ間通信装置１３０が発生させる割込みをブロードキャスト割込みと呼び、任意の時点で任意のプロセッサにより発生させる事が出来る。
【００１６】
本計算機システム１００上で動作するオペレーティングシステムは、各タイマーレジスタ１２１を同期させるタイマー同期部２００と、指定時間（ｅｔｉｍｅ）経過後に指定処理（ｅｆｕｎｃ）を起動するコールアウト部３００とを有している。ここで、指定時間は、割込み処理を実行させる周期を指定する時間である。本実施例では、タイマー同期部２００とコールアウト部３００とによって、割込み処理同期装置４００を実現する。
【００１７】
コールアウト部３００は、一組の指定時間と指定処理｛ｅｔｉｍｅ，ｅｆｕｎｃ｝で構成された構造体を要素とする配列のコールアウトテーブル（割込みテーブル）３１０と、指定時間と指定処理｛ｅｔｉｍｅ、ｅｆｕｎｃ｝をコールアウトテーブルに登録するためのコールアウト登録部（登録部）３２０と、タイマー割込みの延長で動作し登録された処理（ｅｆｕｎｃ）を実行するコールアウト実行部（実行部）３３０の、３つから構成されている。また、コールアウト登録部３２０は、指定時間を補正するコールアウト時間補正部（補正部）３２１を含んでいる。
【００１８】
コールアウトテーブル３１０は、一組の指定時間と指定処理を一つのスロットに保存する記録領域である。コールアウトテーブル３１０は、システムが同時に要求し得るコールアウト部３００の最大数を登録するのに十分な大きさのスロットの配列を備え、溢れる事はない。図１では、０〜ＭまでのＭ＋１個のスロットを有するコールアウトテーブル３１０の例を示している。また、コールアウトテーブル３１０には指定時間ｅｔｉｍｅが小さな値から順番に登録されている。なにも登録されていない空きスロットは時間ｅｔｉｍｅが０となっている。以降の説明では、スロットの配列の番号をＳ（Ｓ≧０）で表す。［Ｓ］は、Ｓ番目のスロットであり、［Ｓ］．ｅｔｉｍｅ、［Ｓ］．ｅｆｕｎｃはそれぞれＳ番目のスロットの指定時間と指定処理を表す。
【００１９】
次に、図２から図４を用いて、割込み処理同期装置の動作について説明する。割込み処理同期装置４００は、システム立ち上げ時にタイマー同期部２００を実行し、その後割込み処理が発生したときにコールアウト部３００を実行する。図２は、実施例１のタイマー同期部の動作例を示すフローチャートである。タイマー同期部２００は、システム立上げ時に任意のプロセッサ１２０から一度だけ呼び出され、プロセッサ間通信装置１３０を使用して全てのプロセッサ１２０にブロードキャスト割込みを発生させる（Ｓ１１）。各プロセッサ１２０はブロードキャスト割込みを受信する（Ｓ１２）。各プロセッサ１２０はブロードキャスト割込み処理によって、各タイマーレジスタ１２１を０に設定する（Ｓ１３）。点線で囲んだ処理はブロードキャスト割込みである。これにより、以後全てのプロセッサ１２０で同時刻にタイマーレジスタ１２１のインクリメントとタイマー割込みの発生が、ティック間隔で定期的に発生し続ける状態となる。
【００２０】
このように、タイマー同期部２００によれば、システムのある基準時刻（通常は立ち上げ時）にプロセッサ間の同期手続きを利用して一度だけタイマーレジスタ１２１の同期をとる。以後、タイマーレジスタ１２１の値を基準として動作する割込みは自動的に同じタイミングで動作する。これにより、各プロセッサ１２０間で割込み処理を同期して動作させる事が可能になる。従って、特別なハードウェア機構などによるコストの高いプロセッサ間の同期手続きをすることなく、プロセッサ１２０間の同期をとることができる。
【００２１】
次にコールアウト部３００の動作について説明する。コールアウト部３００は、オペレーティングシステムにより一定時間後に実行したい処理が発生した場合に任意のプロセッサ１２０上から呼び出される。コールアウト部３００は、コールアウト登録部３２０によって、オペレーティングシステムから指定された指定時間（ｅｔｉｍｅ）と関数へのポインタ（ｅｆｕｎｃ）をコールアウトテーブル３１０に登録する。また、コールアウト部３００は、コールアウト実行部３３０を利用して、指定された指定時間経過後に指定された関数を起動する。図２において、点線で囲んだ処理はブロードキャスト割込みによって実施される。
【００２２】
図３は、実施例１のコールアウト登録部の動作例を示すフローチャートである。コールアウト登録部３２０は、指定時間ｅｔｉｍｅ（ティック単位）と指定処理ｅｆｕｎｃ（関数へのポインタ）をオペレーティングシステムから通知される。コールアウト登録部３２０は、コールアウト時間補正部３２１を使用して指定時間ｅｔｉｍｅを予め補正し（Ｓ２１）、スロットの配列の番号を示すＳを初期化する（Ｓ２２）。具体的には、コールアウト時間補正部３２１は指定時間ｅｔｉｍｅを以下の補正式（１）を用いて補正する。ＴＲは、タイマーカウンタ１２１がカウントしている経過時間である。左辺のｅｔｉｍｅは、補正後のｅｔｉｍｅである。
ｅｔｉｍｅ＝ｅｔｉｍｅ−（ＴＲ％ｅｔｉｍｅ）・・・補正式（１）
【００２３】
次に、コールアウト登録部３２０は、コールアウトテーブル３１０を先頭から探索し、これから登録しようとしている時間ｅｔｉｍｅよりも大きな時間が登録されているスロット（［Ｓ］．ｅｔｉｍｅ＞ｅｔｉｍｅ）又は空きスロット（［Ｓ］．ｅｔｉｍｅ＝０）の位置に、指定された｛ｅｔｉｍｅ，ｅｆｕｎｃ｝を挿入する。具体的には、Ｓ番目のスロットに登録された指定時間と今回通知された割込み処理の指定時間とを比較する（Ｓ２３）。Ｓ番目のスロットの時間のほうが大きいかまたは空きスロットである場合（Ｓ２３でＹｅｓ）、コールアウト登録部３２０は、Ｓ番目のスロットの位置に今回通知された割込み処理を挿入する（Ｓ２４）。Ｓ番目のスロットの時間のほうが小さいかまたはスロットが空いてない場合（Ｓ２３でＮｏ）、Ｓをカウントアップし（Ｓ２５）、ステップＳ２３からの処理を繰り返す。コールアウト登録部３２０は、登録するスロットが検出できるまで、ステップＳ２３、Ｓ２５の処理を繰り返す。
【００２４】
図４は、実施例１のコールアウト実行部の動作例を示すフローチャートである。コールアウト実行部３３０は、各プロセッサ上からタイマー割込みの延長で呼び出され（Ｓ３１）、変数Ｓに自プロセッサ番号ｐｒｃｎを設定する（Ｓ３２）。スロットＳに指定時間が登録されている場合、すなわち、［Ｓ］．ｅｔｉｍｅ≠０の場合（Ｓ３３でＹｅｓ）、ｅｔｉｍｅを１デクリメントする（Ｓ３４）。この結果ｅｔｉｍｅが０になったスロットは（Ｓ３５でＹｅｓ）削除し、対応するｅｆｕｎｃを実行する（Ｓ３６）。プロセッサ台数Ｎと自プロセッサ番号ｐｒｃｎとコールアウトテーブルのスロット番号Ｓの各値を元に、Ｓの値を更新する（Ｓ３７）。このように、プロセッサ台数Ｎと自プロセッサ番号ｐｒｃｎとコールアウトテーブルのスロット番号Ｓの各値を元に、Ｓ％Ｎ＝ｐｒｃｎを満たす各スロットに関してステップＳ３３からＳ３７を繰り返す。すなわち、各プロセッサに付与されている識別番号（自プロセッサ番号）に基づいてコールアウトテーブル３１０から読み出す指定時間及びポインタを決定している。これにより、各プロセッサ１２０が、［自プロセッサの番号＋（プロセッサ台数の倍数）］、に一致するスロットの指定時間を検索することになる。従って、一つのプロセッサ１２０に割込み処理が集中することもなくなる。
【００２５】
また、スロットＳに指定時間が登録されてない場合（Ｓ３３でＮｏ）、処理を終了する。これは、コールアウト登録部３２０が指定時間の小さい順にコールアウトテーブル３１０に割込み処理を登録するため、指定時間が０になるまで検索すれば登録されている全割込み処理を検索することになるからである。なお、図４において、点線で囲んだ処理は、タイマー割込みによって実施される。
【００２６】
なお、コールアウト登録部３２０とコールアウト実行部３３０による、コールアウトテーブル３１０への一連のアクセス、｛ｅｔｉｍｅ，ｅｆｕｎｅ｝の参照と登録／参照と削除は、排他制御により逐次的に動作する事が保障される。以上がコールアウト部３００の動作例の概略説明である。
【００２７】
例えば、処理Ｅを周期Ｔで定期的に実行したい場合、オペレーティングシステムは、コールアウト登録部３２０を｛ｅｔｉｍｅ，ｅｆｕｎｃ｝＝｛Ｔ，Ｅ｝で呼び出す。指定時間経過後コールアウト実行部３３０によって処理Ｅが起動される。起動された処理Ｅの延長で再度コールアウト登録部３２０を｛ｅｔｉｍｅ，ｅｆｕｎｃ｝＝｛Ｔ，Ｅ｝で呼び出す。これにより、同じ周期の同じ処理が再度コールアウトテーブル３１０に登録される。コールアウト登録部３２０は、処理Ｅが起動される度に再度コールアウトテーブル３１０へ処理Ｅを登録することを繰り返す。このようにして、一定の周期Ｔで処理Ｅが繰り返し実行されることになる。更に補正式（１）を導入する事により、周期Ｔの処理ＥはＴＭがＴの整数倍となるタイマー割込みの延長でしか実行されないようになり、同一周期の処理は同一時刻に実行され、異なる周期の処理は各周期の最小公倍数の整数倍の間隔で同一時刻に実行される事になる。
【００２８】
なお、再度コールアウト登録部３２０を｛ｅｔｉｍｅ，ｅｆｕｎｃ｝＝｛Ｔ，Ｅ｝で呼び出す場合、指定時間Ｔと指定処理Ｅとは、呼び出された割込み処理を構成する命令列自体に記述されており、この記述された値が使用される。あるいは、指定時間Ｔと指定処理Ｅとは、予めコールアウト部３００のいずれかに備えられる記録領域に保存していてもよいし、コールアウトテーブル３１０にデクリメントする指定時間ｅｔｉｍｅ以外に周期Ｔを保存し、スロットのデータを削除する際に、コールアウト実行部３３０が周期Ｔと指定処理Ｅとを一時的に保持しておき、コールアウト登録部を呼び出してもよい。また、本実施例では、コールアウト実行部３３０が割込み処理を実行した後、指定時間を更新するのではなく、再度コールアウト登録部３２０を呼び出して割込み処理をコールアウトテーブル３１０に登録する。これにより、登録するタイミングが遅れ、割込み処理の実行から１ティックより長い時間が経ってから登録された場合であっても、割込み処理に指定された周期以内の期間に登録すれば、補正式（１）によって、時刻０から周期の倍数のタイミングで割込み処理が実行されることになる。
【００２９】
このように、タイマーレジスタ１２１の値である経過時間ＴＲと、周期的に発生させる割込み処理の周期Ｔに着目し、コールアウト部３００によって、経過時間ＴＲが周期Ｔの整数倍に一致する時刻に限定して割込み処理が行われるように予め設定する。これにより、同一周期の割込み処理が同一時刻に発生する事、異なる周期の割込み処理が各周期の最小公倍数の整数倍の間隔で同時に発生する事が保障される。この結果、様々な異なる周期の割込み処理が可能な限り同一の時刻で発生する事となり、並列プログラムのバリア同期待ちへの影響を最小限に抑える事ができる。
【００３０】
次に、割込み処理同期装置の動作を図２から図６を用いて説明する。図５は、割込み同期処理の具体例を示すタイムチャートであり、図６は、図５のタイムチャートの動作に伴うコールアウトテーブル３１０の遷移を示す図である。まず、システムの立上げ時に任意のプロセッサ１２０上でタイマー同期部２００が実行される（Ｓ１１）。タイマー同期部２００では、全てのプロセッサ１２０のタイマーレジスタ１２１が同時刻に０に設定される（Ｓ１２、Ｓ１３）。以下この状態を前提として動作例を説明する。なお以下では「タイマーレジスタの値がＨ」のときの時刻を「時刻Ｈ」と表記する。図５のＴＭの数値は、時刻Ｈがとる各時刻を示している。また、点線の○印は、登録時のタイミングを示し、実線の○、△、□の印は、実行及びその後の登録時のタイミングを示す。また、図５では、周期の違いを、○（周期２）、△（周期３）、□（周期４）の形状を用いて表している。図６では、上段から、コールアウト実行時、コールアウト再登録時、コールアウト初登録時それぞれのタイミングのコールアウトテーブル３１０の状態を示している。各タイミングにおいて太枠で囲んだ割込み処理がそれぞれ実行または登録の対象となっているものである。
【００３１】
次に、時刻０以上１未満（タイマーレジスタの値が０になった時点から１になる直前まで）の時点で周期２ティックの処理Ｅ１が発生したと仮定する。すると、時刻０以上１未満の時点でコールアウト登録部３２０が｛２、Ｅ１｝で呼び出される。コールアウト登録部３２０はコールアウト時間補正部３２１において指定時間２ティックを２−（０％２）＝２で２ティックに補正し（Ｓ２１）、コールアウトテーブル３１０に｛２、Ｅ１｝を登録する（Ｓ２２〜Ｓ２５）。時刻１の時点でコールアウト実行部３３０が呼び出され（Ｓ３３）、コールアウト実行部３３０がスロットのｅｔｉｍｅを１デクリメントすることによりコールアウトテーブル３１０が｛１、Ｅ１｝となる（Ｓ３４、Ｓ３５でＮｏ）。次に、時刻２の時点でコールアウト実行部３３０が呼び出され（Ｓ３３）、コールアウト実行部３３０がスロットのｅｔｉｍｅを１デクリメントする（Ｓ３４）。
【００３２】
これによりコールアウトテーブル３１０が｛０、Ｅ１｝となるため（Ｓ３５でＹｅｓ）、｛０、Ｅ１｝が削除されて関数Ｅ１が実行される（Ｓ３６）。関数Ｅ１の延長でコールアウト登録部３２０が再度｛２、Ｅ１｝で呼び出される。コールアウト登録部３２０はコールアウト時間補正部３２１において補正式（１）を用いて２ティックを２−（２％２）＝２で２ティックに補正して（Ｓ２１）、コールアウトテーブル３１０に｛２、Ｅ１｝を登録する（Ｓ２２からＳ２５）。以降、上記処理の繰り返しで関数Ｅ１が時刻２、４、６、８、１０、１２、１４、１６、・・・と周期２ティックの整数倍の時刻に定期的に起動され続ける。
【００３３】
次に、時刻３以上４未満の時点で周期２ティックの処理Ｅ２が発生したと仮定する。すると、時刻３以上４未満の時点でコールアウト登録部３２０が｛２、Ｅ２｝で呼び出される。コールアウト登録部３２０はコールアウト時間補正部３２１において指定時間２ティックを２−（３％２）＝１で１ティックに補正して（Ｓ２１）、コールアウトテーブル３１０に｛１、Ｅ２｝を登録する（Ｓ２２からＳ２５）。この結果コールアウトテーブル３１０は｛１、Ｅ１｝｛１、Ｅ２｝となる。時刻４の時点でコールアウト実行部３３０が二つのプロセッサから呼び出され（Ｓ３３）、コールアウト実行部３３０がスロットのｅｔｉｍｅを１デクリメントすることによりコールアウトテーブル３１０が｛０、Ｅ１｝｛０、Ｅ２｝となる（Ｓ３４、Ｓ３５でＹｅｓ）。このため｛０、Ｅ１｝と｛０、Ｅ２｝が削除されて関数Ｅ１と関数Ｅ２が異なるプロセッサ上で同時に実行される（Ｓ３６）。関数Ｅ１と関数Ｅ２の延長でコールアウト登録部３２０が再度｛２、Ｅ１｝｛２、Ｅ２｝で呼び出される。以降、上記の繰り返しで関数Ｅ１とＥ２が時刻４、６、８、１０、１２、１４、１６、・・・と周期２ティックの整数倍の時刻に定期的に起動され続ける。
【００３４】
次に、時刻４以上５未満の時点で周期３ティックの処理Ｅ３が発生したと仮定する。すると、時刻４以上５未満の時点でコールアウト登録部３２０が｛３、Ｅ３｝で呼び出される。コールアウト登録部３２０はコールアウト時間補正部３２１において指定時間３ティックを３−（４％３）＝２ティックに補正し（Ｓ２１）、コールアウトテーブル３１０に｛２、Ｅ３｝を登録する（Ｓ２２〜Ｓ２５）。この結果コールアウトテーブル３１０は｛２、Ｅ１｝｛２、Ｅ２｝｛２、Ｅ３｝となる。時刻５の時点でコールアウト実行部３３０が呼び出され（Ｓ３３）、コールアウトテーブル３１０が｛１、Ｅ１｝｛１、Ｅ２｝｛１、Ｅ３｝となる（Ｓ３４、Ｓ３５でＮｏ）。時刻６の時点でコールアウト実行部３３０が呼び出され（Ｓ３３）、コールアウトテーブル３１０が｛０、Ｅ１｝｛０、Ｅ２｝｛０、Ｅ３｝となるため（Ｓ３５でＹｅｓ）、｛０、Ｅ１｝｛０、Ｅ２｝｛０、Ｅ３｝が削除されて関数Ｅ１、Ｅ２、Ｅ３が異なるプロセッサ上で同時に実行される（Ｓ３６）。関数Ｅ１、Ｅ２、Ｅ３の延長でコールアウト登録部３２０が再度｛２、Ｅ２｝｛２、Ｅ２｝｛３、Ｅ３｝で呼び出される。この結果コールアウトテーブル３１０が｛２、Ｅ１｝｛２、Ｅ２｝｛３、Ｅ３｝となる（Ｓ２１〜Ｓ２５）。以降、上記の処理の繰り返しで関数Ｅ３が時刻６、９、１２、１５、・・・と周期３ティックの整数倍の時刻に定期的に起動され続ける。
【００３５】
次に、時刻６以上７未満の時点で周期４ティックの処理Ｅ４が発生したと仮定する。すると、時刻６以上７未満の時点でコールアウト登録部３２０が｛４、Ｅ４｝で呼び出される。コールアウト登録部３２０はコールアウト時間補正部３２１において指定時間４ティックを４−（６％４）＝２で２ティックに補正し（Ｓ２１）、｛２、Ｅ４｝をコールアウトテーブルに登録する（Ｓ２２〜Ｓ２５）。この結果コールアウトテーブル３１０は｛２、Ｅ１｝｛２、Ｅ２｝｛２、Ｅ４｝｛３、Ｅ３｝となる。時刻７の時点でコールアウトテーブル３１０が｛１、Ｅ１｝｛１、Ｅ２｝｛１、Ｅ４｝｛２、Ｅ３｝となる。時刻８の時点でコールアウトテーブル３１０が｛０、Ｅ１｝｛０、Ｅ２｝｛０、Ｅ４｝｛１、Ｅ３｝となるため｛０、Ｅ１｝｛０、Ｅ２｝｛０、Ｅ４｝が削除されて関数Ｅ１、Ｅ２、Ｅ４が実行される（Ｓ３６）。関数Ｅ１、関数Ｅ２、関数Ｅ４の延長でコールアウト登録部３２０が再度｛２、Ｅ１｝｛２、Ｅ２｝｛４、Ｅ４｝で呼ばれる。この結果コールアウトテーブル３１０が｛１、Ｅ３｝｛２、Ｅ１｝｛２、Ｅ２｝｛４、Ｅ４｝となる（Ｓ２１〜Ｓ２５）。以降、上記の処理の繰り返しで関数Ｅ４が時刻８、１２、１６、・・・と周期４ティックの整数倍の時刻に定期的に起動され続ける。
【００３６】
次に、時刻８以上９未満の時点で周期５ティックの処理Ｅ５が発生したと仮定する。すると、前記で述べたアルゴリズムにしたがって、図５に示すとおりにコールアウトテーブル３１０が遷移し、関数Ｅ５が時刻１０、１５、・・・と周期５ティックの整数倍の時刻に定期的に起動され続ける。
【００３７】
図７は、割込み処理の具体例を示す図であり、（ａ）は本発明を適用した場合、（ｂ）は本発明を適用しない場合を示している。図７では、周期の違いを、○（周期２）、△（周期３）、□（周期４）の形状を用いて表している図７（ａ）に示すように、本発明を適用した場合、割込みが周期の整数倍の時刻で発生している。これに対して、図７（ｂ）に示すように、本発明を適用しない場合、様々な割込みが無秩序に発生している。
【００３８】
本実施例で説明したように、任意の時刻に発生した周期Ｔの間隔で実行することを前提とした処理は、プロセッサ間の同期的な手続きを必要とせずに、全て周期Ｔの整数倍の時刻に実行されるようになる。この結果、同一周期の処理は同一時刻に実行され、異なる周期の処理は各周期の最小公倍数の整数倍の間隔で同一時刻に実行されるようになる。以上の動作により、オペレーティングシステムの周期的な割込み処理が、並列プログラムのバリア同期遅延に与える影響を最小限に抑える事ができる。
【実施例２】
【００３９】
実施例１で説明した割込み処理同期装置は、プログラムによって実現することが可能である。プログラムは、実施例１で説明した各処理が複数の命令によって実現されるものであり、プロセッサ１２０によって命令がフェッチされ実行される。また、プログラムは、計算機が読み取り可能な記録媒体に記録することが可能である。例えば、タイマーレジスタ１２１を有する複数のプロセッサ１２０を備える計算機において、次の手順を計算機に実行させる。（１）所定のタイミングで、複数のプロセッサが有するタイマーカウンタを初期化させる手順、（２）タイマーカウンタ１２１が発生させる割込みによって各プロセッサ１２０が実行する割込み処理を受け付け、受け付けた割込み処理をコールアウトテーブル３１０へ登録する手順、（３）タイマーカウンタ１２１が発生させる割込みに基づいて、コールアウトテーブル３１０に登録された割込み処理を各プロセッサ１２０に実行させる手順。
【００４０】
以上説明したように、本発明の好適な実施例によれば、一般的なマルチプロセッサ計算機システムとそのオペレーティングシステムにおいて、特別なハードウェア機構などによるコストの高いプロセッサ間の同期的な手続きという手段を使用せずに、周期的な割込みを同じタイミングで発生させる事で、並列プログラムのバリア同期遅延に与える影響を抑えられる。このように出来る理由は、各プロセッサに内蔵されたタイマーレジスタの同期を行うタイマー同期部２００を導入し、これをシステム立上げ時に一度だけ呼び出すことで、その後の各プロセッサ上のタイマー割込みを契機とする動作が自動的に同期するからである。
【００４１】
また、一般的なマルチプロセッサ計算機システムとそのオペレーティングシステムにおいて、同一周期の割込み処理は同一時刻に実行され、異なる周期の割込み処理は各周期の最小公倍数の整数倍の間隔で同一時刻に実行される事で、並列プログラムのバリア同期遅延に与える影響を最小限に抑えられる。このように出来る理由は、コールアウト時間補正部３２１を導入することで、周期Ｔの割込み処理が、周期Ｔの整数倍の時刻でのみ実行されるからである。
【００４２】
本発明は、共有メモリ型マルチプロセッサ計算機システム上で、オペレーティングシステム起因の様々な周期的動作を、コールアウト部を利用して同期させる用途に適用できる。また分散メモリ型のマルチプロセッサ計算機システム上で、オペレーティングシステム起因の様々な周期的動作をコールアウト部を利用して同期させる用途に適用できる。また、共有メモリ型及び分散メモリ型のマルチプロセッサ計算機システム上で、ユーザプロセス起因の様々な周期的動作を、オペレーティングシステムが提供するコールアウト部を利用することで同期させる用途に適用できる。
【００４３】
なお、本発明は上記に示す実施形態に限定されるものではない。本発明の範囲において、上記実施形態の各要素を、当業者であれば容易に考えうる内容に変更、追加、変換することが可能である。
【図面の簡単な説明】
【００４４】
【図１】本発明の実施例１に係る割込み処理同期方式を適用した計算機システムの構成例を示すブロック図である。
【図２】実施例１のタイマー同期部の動作例を示すフローチャートである。
【図３】実施例１のコールアウト登録部の動作例を示すフローチャートである。
【図４】実施例１のコールアウト実行部の動作例を示すフローチャートである。
【図５】割込み同期処理の具体例を示すタイムチャートである。
【図６】図５のタイムチャートの動作に伴うコールアウトテーブルの遷移を示す図である。
【図７】割込み処理の具体例を示す図であり、（ａ）は本発明を適用した場合、（ｂ）は本発明を適用しない場合を示している。
【符号の説明】
【００４５】
１００  計算機システム、１１０  主記憶、１２０  プロセッサ（ＣＰＵ１２０−１〜ＣＰＵ１２０−Ｎ）、１２１  タイマーレジスタ（ＴＭ１２１−１〜ＴＭ１２１−Ｎ）、１３０  プロセッサ間通信装置、２００  タイマー同期部、３００  コールアウト部、３１０  コールアウトテーブル、３２０  コールアウト登録部、３２１  コールアウト時間補正部、３３０  コールアウト実行部
【図１】
0004605191.tif 000002
【図２】
0004605191.tif 000003
【図３】
0004605191.tif 000004
【図４】
0004605191.tif 000005
【図５】
0004605191.tif 000006
【図６】
0004605191.tif 000007
【図７】
0004605191.tif 000008