(57)【要約】【課題】バスの使用要求を抑制してバスの占有によるオーバーヘッドを低減するマルチコアシステム等を提供すること。【解決手段】複数のＣＰＵコア１２、メモリ１４及び入出力インターフェイス１３が共通のバス１５を介して接続され、バスの使用権をバスアービタ１６が調停するマルチコアシステム１００において、プログラムの実行単位であるスレッドを第１、第２のＣＰＵコアに割り当てるスケジューラ２２と、第１のＣＰＵコアによるスレッドの実行に伴いメモリ１４にアクセス中か否かのアクセス情報を提供するメモリ状態提供手段２３と、アクセス情報に基づき、第２のＣＰＵコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、第２のＣＰＵコアによるスレッドの実行前に、１つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を第２のＣＰＵコアに割り当てるアイドル状態挿入手段２４と、を有する。【選択図】図１
2010113414.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコア、メモリ及び入出力インターフェイスが共通のバスを介して接続され、バスの使用権をバスアービタが調停するマルチコアシステムにおいて、
プログラムの実行単位であるスレッドを各ＣＰＵコアに割り当てるスケジューラと、
第１のＣＰＵコアによるスレッドの実行に伴い前記メモリにアクセス中か否かのアクセス情報を提供するメモリ状態提供手段と、
前記アクセス情報に基づき、第２のＣＰＵコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、前記第２のＣＰＵコアによるスレッドの実行前に、１つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を前記第２のＣＰＵコアに割り当てるアイドル状態挿入手段と、
を有することを特徴とするマルチコアシステム。
【請求項２】
前記アイドル状態を割り当てる時間は可変である、
ことを特徴とする請求項1記載のマルチコアシステム。
【請求項３】
スレッドの優先順位に対応づけて前記アイドル状態を維持する時間を記憶したアイドル状態維持時間記憶手段と、
前記アイドル状態維持時間記憶手段に記憶された、前記第２のＣＰＵコアが次に実行するスレッドの優先順位に対応づけられている前記アイドル状態を維持する時間を読み出すアイドル時間決定手段と、を有し、
前記アイドル状態挿入手段は、前記アイドル時間決定手段が読み出した時間だけ前記第２のＣＰＵコアにアイドル状態を割り当てる、
ことを特徴とする請求項２記載のマルチコアシステム。
【請求項４】
前記入出力インターフェイスに接続されたデバイス、又は、複数のＣＰＵコアのいずれかが、スレッドの実行に伴いメモリにアクセスする、
ことを特徴とする請求項１〜３いずれか1項記載のマルチコアシステム。
【請求項５】
前記メモリ状態提供手段は、
メモリにアクセスした前記第１のＣＰＵコアのスレッドがメモリにアクセス中のまま次のスレッドに切り替わる際、前記第１のＣＰＵコアのスレッドがアクセス中でないという前記アクセス情報を提供し、
再度、前記第１のＣＰＵコアに該スレッドが割り当てられるとアクセス中であるという前記アクセス情報を提供し、
前記アイドル状態挿入手段は、前記第１のＣＰＵコアがメモリにアクセスするスレッドを実行中の場合のみ、前記第２のＣＰＵコアによるスレッド実行前に、前記第２のＣＰＵコアにアイドル状態を割り当てる、
ことを特徴とする請求項１〜４いずれか1項記載のマルチコアシステム。
【請求項６】
複数のＣＰＵコア、メモリ及び入出力インターフェイスが共通のバスを介して接続されたマルチコアシステムのスレッドスケジューリング方法において、
バスの使用権をバスアービタが調停するステップと、
スケジューラが、プログラムの実行単位であるスレッドを各ＣＰＵコアに割り当てるステップと、
メモリ状態提供手段が、第１のＣＰＵコアによるスレッドの実行に伴い前記メモリにアクセス中か否かのアクセス情報を提供するステップと、
アイドル状態挿入手段が、前記アクセス情報に基づき、第２のＣＰＵコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、前記第２のＣＰＵコアによるスレッドの実行前に、１つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を前記第２のＣＰＵコアに割り当てるステップと、
を有することを特徴とするスレッドスケジューリング方法。
【請求項７】
複数のＣＰＵコア、メモリ及び入出力インターフェイスが共通のバスを介して接続され、バスの使用権をバスアービタが調停するマルチコアシステムに、
プログラムの実行単位であるスレッドを各ＣＰＵコアに割り当てるステップと、
第１のＣＰＵコアによるスレッドの実行に伴い前記メモリにアクセス中か否かのアクセス情報を提供するステップと、
前記アクセス情報に基づき、第２のＣＰＵコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、前記第２のＣＰＵコアによるスレッドの実行前に、１つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を前記第２のＣＰＵコアに割り当てるステップと、
を実行させることを特徴とするプログラム。
【請求項８】
請求項７記載のプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵコアを備え、各ＣＰＵコアがスレッドを並行に実行するマルチコアシステム等に関し、特に、ＣＰＵコアにアイドル状態を維持させることが可能なマルチコアシステム、スレッドスケジューリング方法、プログラム及び記憶媒体に関する。
【背景技術】
【０００２】
ＣＰＵやＤＭＡが同じバスに接続されたアーキテクチャでは、それぞれの使用権を調停するためバスアービタが例えばバスの使用要求の優先順位に応じてバスの使用権を調停する。また、１つのＣＰＵが複数のコアを備えたマルチコアシステム、複数のＣＰＵを１つのバスに接続するマルチＣＰＵシステムにおいてもこのようなバスの使用権の調整は必須である。
【０００３】
マルチタスク（マルチスレッド）型のコンピュータは、スレッド（又はタスク）と呼ばれる実行単位にプログラムを分割して実行する機能を備え、各スレッドのスケジューリング結果に応じてスレッドを実行する。したがって、複数のＣＰＵコア又は複数のＣＰＵはそれぞれ実行するスレッドに応じてメモリにアクセスする必要が生じ、この結果、バスアービタに負荷が集中することがある。バスアービタには十分な処理能力が割り当てられているが、使用要求が集中するとオーバーヘッドを生じスレッドの処理が遅延してしまう。
【０００４】
使用要求を低減するため、ＣＰＵコアのスレッドの実行を中断することが考えられる（例えば、特許文献１参照。）。特許文献１には、ＣＰＵの温度が閾値を超えるとアイドル状態となるスレッドを挿入することで、ＣＰＵの動作を停止して温度を下げる技術が開示されている。アイドル状態のスレッドはメモリにアクセスすることもないのでバスの使用要求が集中することを防止できる。
【特許文献１】特開２００５−１６５４７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１記載のコンピュータシステムのようにアイドル状態を特殊なスレッドで実現する場合、アイドル状態となるのはそのスレッドに制御が移ってから（そのスレッドの実行が開始されてから）となるため、時間的なロスが生じる。図１７（ａ）は、特許文献１記載のスレッドの実行状態を例示する図である。このようにスレッドを切り替える際にはコンテキストの切り替え等も必要と考えられ、アイドル状態になるまでには時間がかかってしまう。また、アイドル状態となるスレッドを実行するためにメモリアクセスも必要なので、バスの使用要求を調停する時間も必要である。
【０００６】
ところで、マルチコアのシステムでは、ＣＰＵコアＡがＩ／Ｏからの応答待ちをしていても、別のＣＰＵコアＢは動作可能であるため、ＣＰＵ全体として見た場合にメモリへのアクセス頻度が高くなってしまう。図１７（ｂ）は、マルチコアのシステムにおける課題を説明する図の一例を示す。
【０００７】
ＣＰＵコアＡが応答待ちしている場合、ＣＰＵコアＢはメモリやＩ／Ｏへのアクセスが容易になりバスを使用する頻度も増大する。このような状態では、Ｉ／Ｏからの使用要求とＣＰＵコアＢとの使用要求が衝突する可能性が高まり、ＣＰＵコアＡの応答待ち時間が長期化するという問題がある。したがって、一方のＣＰＵコアＡがＩ／Ｏ等の応答待ちをしている場合、他方のＣＰＵコアＢのバスの使用を抑制することが好ましいと言える。
【０００８】
この点、特許文献１記載のコンピュータシステムのようにＣＰＵコアＢにアイドル状態となるスレッドを実行させると、ＣＰＵコアBによるバスの占有は防止できるが、アイドル状態が実行用のスレッドと同程度の時間継続してしまうので、ＣＰＵコアBの処理効率が低下してしまう。
【０００９】
本発明は、上記課題に鑑み、バスの使用要求を抑制してバスの占有によるオーバーヘッドを低減するマルチコアシステム、スレッドスケジューリング方法、プログラム及び記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題に鑑み、本発明は、複数のＣＰＵコア、メモリ及び入出力インターフェイスが共通のバスを介して接続され、バスの使用権をバスアービタが調停するマルチコアシステムにおいて、プログラムの実行単位であるスレッドを各ＣＰＵコアに割り当てるスケジューラと、第１のＣＰＵコアによるスレッドの実行に伴いメモリにアクセス中か否かのアクセス情報を提供するメモリ状態提供手段と、アクセス情報に基づき、第２のＣＰＵコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、第２のＣＰＵコアによるスレッドの実行前に、１つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を第２のＣＰＵコアに割り当てるアイドル状態挿入手段と、を有することを特徴とするマルチコアシステム。
【００１１】
メモリアクセス中の場合、第２のＣＰＵコアによるスレッドの実行前に、アイドル状態を第２のＣＰＵコアに割り当てることで、第２のＣＰＵコアが時間的に分散したアイドル状態となるので、バスを占有することがなくなり、分散したアイドル状態を利用して第２のＣＰＵコア等がメモリにアクセスすることができる。
【発明の効果】
【００１２】
バスの使用要求を抑制してバスの占有によるオーバーヘッドを低減するマルチコアシステム、スレッドスケジューリング方法、プログラム及び記憶媒体を提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明を実施するための最良の形態について図面を参照しながら実施例を挙げて説明する。
図１は、本実施形態のマルチコアシステム１００によるスレッドのスケジューリングの概略を説明する図の一例である。
１本の（共通の）バス１５（実際には複数のアドレス線、データ線からなるがここでは１本として扱う）に、ＣＰＵ１１、Ｉ／Ｏ１３ａとＩ／Ｏ１３ｂ（区別しない場合、Ｉ／Ｏ１３という）及びメモリ１４が接続されている。また、ＣＰＵ１１は、ＣＰＵコアＡ１２ａとＣＰＵコアＢ１２ｂ（以下、ＣＰＵコアを単にコアＡ又はコアＢという。両者を区別しない場合、単にコア１２という。）を備えたマルチコア型のプロセッサである。なお、コア１２は３以上でもよい。
【００１４】
メモリ１４は、ＣＰＵ１１がプログラムを実行する作業エリアとなる記憶素子で、例えばＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ(Static RAM)等を実体とする。ＣＰＵ１１はこのメモリ１４の他に一次、二次キャッシュ等のキャッシュメモリを備える。
【００１５】
コアＡはスレッド１〜ｎを、コアＢはスレッドＡ〜Ｚをそれぞれ実行する（スレッド１〜ｎとスレッドＡ〜Ｚは説明上の区分に過ぎず、コアＡはスレッドＡ〜Ｚ、コアＢがスレッド１〜ｎを実行することもある）。
【００１６】
本実施形態のマルチコアシステム１００は、例えばコアＡがスレッド２の実行時にＩ／Ｏ１３又はメモリ１４にアクセスする際に、例えばフラグをセットする。このフラグは、Ｉ／Ｏ１３の応答又はメモリ１４からの読み出しを待っていることを示すフラグである。コアＢは、例えばスレッドの切り替え時にフラグを参照することでフラグの状態（コアＡが待機中であること）を検出する。そして、フラグがセットされている場合、コアＢはスレッドの切り替え時に一時的にアイドル状態となる。
【００１７】
アイドル状態について説明する。アイドル状態とは広義にはスレッドを実行していない状態をいい、具体的には、停止状態（ＨＡＬＴ命令による停止状態）、クロック低減した状態、更にクロックを低減した状態、メモリ１４の内容を保持するリフレッシュ電源のみ供給された状態、メモリ１４の内容を退避しリフレッシュ電源も供給しない状態、又は、これらを適宜組み合わせた状態である。すなわち、アイドル状態の呼称は、スリープモード等でもよく、呼び方は問わない。
【００１８】
スレッドの切り替わり毎にアイドル状態とすることで、図示するように、アイドル状態を時間的に分散させることができる。このアイドル状態の間はコアＢはバス１５にアクセスすることはないので、ＣＰＵ１１のもう一方のコアＡが待機中でも、コアＢがバス１５を占有することがない。コアＢがアイドル状態になるとバスアービタ１６の処理負荷が低減し、Ｉ／Ｏ１３又はメモリ１４は遅延することなくコアＡにデータを送信することができる。また、アイドル状態が分散されるので、リアルタイム性が要求されるスレッドの実行時間を保証しやすくなる。すなわち、アイドル状態を連続させた場合と比較すると、単位時間当たりのアイドル状態の比率が同じでも、分散させる方がＣＰＵ１１全体の処理効率を向上させやすい。
【００１９】
Ｉ／Ｏ１３又はメモリ１４へのアクセスが終了すると、コアＡはフラグをリセットする。フラグリセット以降、コアＢはアイドル状態になることなくスケジューリングされたスレッドを実行する。
【００２０】
以下、実施例にて詳細に説明する。なお、以下ではコアＢがアイドル状態となるものとして説明するが、コアＡもコアＢがセットしたフラグに基づきアイドル状態となることができる。
【実施例１】
【００２１】
図２は、マルチコアシステム１００を適用したコンピュータ２００の概略構成図の一例を示す。マルチコアシステム１００は、複数のＩ／Ｏ１３を介してハードディスクドライブ（ＨＤＤ１８）、ドライブ装置１９、センサ、スイッチ素子、アクチュエータ、入力装置及び出力装置が接続されている（区別しない場合、Ｉ／Ｏデバイス１７という場合がある）。
【００２２】
コンピュータ２００は、例えば電子写真方式、インクジェット方式又はジェルジェット方式等の画像形成装置、デジタルカメラ等に搭載される組み込み型の情報処理装置であるが、パーソナルコンピュータに適用してもよい。
【００２３】
ＨＤＤ１８はＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、制御用のプログラム、アプリケーション用のプログラムなど、各種のプログラムの実体であるファイルを記憶している。ＨＤＤ１８は一例であって、フラッシュメモリやＳＳＤ(solid state drive)などの書き換え可能な不揮発メモリであればよい。
【００２４】
図１にて説明した、フラグを参照してコア１２をアイドル状態とする手段は、ＯＳがスレッドスケジューリングするスケジューラ２２の一環として実装してもよく、又は、コア１２がハードウェアとして実装してもよい。いずれの場合もスレッドを切り替える必要はないので遅延を回避できる。また、ＯＳが実装した場合、スレッドスケジュールはＯＳのカーネルが処理することが多いので、アイドル状態とするまでの時間も短い。また、ハード的な実装とした場合、コア１２は極めて短時間にアイドル状態となることができる。この点、ＯＳ以外のプログラムで実装し、スレッドとしてアイドル状態を実現する場合と大きく異なる。
【００２５】
なお、ＯＳのファイルは可搬型の記憶媒体２０に記憶された状態で配布されたり、不図示のサーバからネットワークを介して配布される。配布されたＯＳのファイルはＨＤＤ１８に記憶される。
【００２６】
記憶媒体２０は、ＣＤ、ＤＶＤ、Ｂｌｕｅ−Ｒａｙ等の光記憶メディア、ＳＤカード、ＵＳＢメモリなどの半導体メモリ、フロッピーディスクなどの磁気記憶メディア等である。ドライブ装置１９は、記憶媒体２０を装着してファイルを書き込んだり、記憶媒体２０からファイルを読み出す、例えば、ＣＤドライブ、ＤＶＤドライブ、ＵＳＢインターフェイス、メモリカード装着部等である。
【００２７】
センサは、温度センサ、光度センサ、モータの回転数センサなどコンピュータ２００が制御するために必要な対象の状態を検出するセンサであって、その種類は限定されない。スイッチ素子は、例えば制御信号をオン／オフしたり、脱着可能な部品の装着有無や扉の開閉等を検出する。アクチュエータは例えば用紙搬送用のモータであったり、インクタンク駆動用のモータ若しくはインク滴の吐出用のアクチュエータである。
【００２８】
入力装置は、操作パネル、キーボード、マウス、タッチパネルなどユーザの操作を入力する装置である。また、出力装置は例えば警告ランプ、液晶などのディスプレイである。
【００２９】
これらＩ／Ｏ１３はＤＭＡ（Direct Memory Access）方式でメモリ１４にアクセスすることができる。このためコンピュータ２００は複数のＤＭＡコントローラ（不図示）を備え、ＤＭＡコントローラの各チャネルに各Ｉ／Ｏ１３が接続される。
【００３０】
このように、バス１５はＣＰＵ１１だけでなくＤＭＡコントローラも独立に使用要求するため、図1のバスアービタ１６がバス１５の使用権を調停する。具体的には、ＣＰＵ１１及びＤＭＡコントローラはバスアービタ１６とリクエスト線で接続されており、ＤＭＡコントローラはサイクルスチール方式、インタロック方式などの手順で各チャネル（Ｉ／Ｏ１３）にバス１５の使用有無を問い合わせる。その際、Ｉ／Ｏ１３が送信するデータがあれば、ＤＭＡコントローラはリクエスト線を介して使用要求をバスアービタ１６に出力する。
【００３１】
バスアービタ１６の調停論理には、使用要求を出力したＩ／Ｏデバイス１７及びＣＰＵ１１に応じて予め定められた優先順位に従う単純優先制御、全ての使用要求に順番に使用権を認めるラウンドロビン、予め定められた重み付けにしたがって順番に使用権を認める拡張型ラウンドロビン等が知られている。本実施形態のスレッドスケジューリング方法は、特に調停論理を限定しないで適用できる。
【００３２】
〔従来のスケジューリング手順〕
比較のため、従来のスレッドスケジューリングについて説明する。図３は、スレッドキュー２１ａ、２１ｂとスレッドを模式的に説明する図の一例である。スレッドを簡単に説明するとプログラムにおけるひとまとまりの実行単位であり、１つのプログラムのオブジェクトコードの一部とも言える。例えば、関数型の言語の場合、１つの関数が１つスレッドになることがある。なお、スレッドをタスクと呼ぶ場合もあるが本実施形態では区別しない。
【００３３】
スレッドは、実行に必要なプログラムカウンタの値やスタックポインタをはじめとする各種レジスタ値とプログラムコード領域、スタック領域、データ領域等の情報を含んでいる。
【００３４】
各コア１２毎にスレッドキュー２１ａ、２１ｂが設けられる。スレッドキュー２１ａ、２１ｂは、ＦＩＦＯ（first-in first-out）形式のデータ構造を採用し、スケジューラ２２は対応するスレッドキュー内のスレッドをスレッドキュー２１ａ、２１ｂに格納された順に各コア１２に実行させる。コアＡ、コアＢは依存関係のない各スレッドを時間的に並行に実行可能である。スレッドキュー２１ａ、２１ｂへのスレッドの格納は、原則的に実行順であるが、優先順位が高いスレッドが優先されるようスケジューリングされる。優先順位は、プログラム中に記述されていることが多いが、割込みにより記述と関係なく優先順位が定められることもある。
【００３５】
図では、スレッドキュー２１ａに「スレッド１→スレッド２→スレッド３→スレッド４」、スレッドキュー２１ｂに「スレッドＡ→スレッドＢ→スレッドＣ→スレッドＤ」のスレッドが格納されており、この順番に各スレッドは実行される。なお、スレッドキュー２１ａ、２１ｂ及びスレッドはメモリ１４に記憶されている。
【００３６】
マルチコアシステム１００は、いわゆるプリエンプティブにスレッドを切り替えるリアルタイム処理に対応している。すなわち、タイマー割込みを利用して各スレッドに一定時間（タイムスライス）の実行を許可し、換言すると一定時間経過後は、強制的にＯＳに制御が移る。ＯＳに制御が移るとスケジューラ２２はスレッドが有するプログラムカウンタや各種レジスタ値等をコア１２のレジスタ等に記憶するコンテキストスイッチを行い、コア１２はプログラムカウンタが示すアドレスからプログラム（スレッド）を読み出し実行する。
【００３７】
図４は、マルチコアシステム１００がスレッドをスケジュールする手順を示すフローチャート図の一例である。図４の手順はコアＡ、コアＢに共通であるが、本実施形態ではコアＢがアイドル状態となることとしたので、以下、コアＢがスレッドを実行する手順を説明する。
【００３８】
スケジューラ２２は、スレッドキュー２１ｂを参照し、実行可能なスレッドがあるか否かを判定する（Ｓ１０）。実行可能なスレッドがある場合（Ｓ１０のＹｅｓ）、スケジューラ２２は割り込み用タイマーを設定する（Ｓ２０）。Ｓ２０で設定されるタイマーの値がコアＢにスレッドに割り当てられる時間である。
【００３９】
スケジューラ２２はスレッドキュー２１ｂにあるスレッドＡをコアＢに割り当て、コアＢはスレッドＡを実行する（Ｓ３０）。そして、スケジューラ２２は割込みされたか否かを判定する（Ｓ４０）。この割込みには、ステップＳ３０のタイマー割込み、システム割込み、ハードウェア割込み等を含む。割り込みがあるまでは（Ｓ４０のＮｏ）、スレッドＡが実行される。
【００４０】
一方、割込みがあると（Ｓ４０のＹｅｓ）、スケジューラ２２は次のスレッドを実行する（Ｓ５０）。したがって、コアＢは例えばスレッドＢを実行する。
【００４１】
ステップＳ１０に戻り、実行可能なスレッドがない場合（Ｓ１０のＮｏ）、スケジューラ２２は同様に割り込み用タイマーを設定する（Ｓ６０）。Ｓ６０で設定されるタイマーの値はコアＢがアイドル状態を維持する時間である。したがって、タイマーの設定があまり長いとアイドル状態が長くなってしまい処理効率が低下する。このため、アイドル状態を維持する際にタイマーに設定される時間は、長くてもスレッド実行時間以下に設定される。また、例えば、徐々にアイドル状態を維持する時間を長くするなどして、スレッド実行時間よりも長くしてもよい。
【００４２】
コアＢは割り込みがあるまで（Ｓ８０のＮｏ）、アイドル状態を保ち（Ｓ７０）、割込みがあると（Ｓ８０のＹｅｓ）、スケジューラ２２はステップＳ１０の処理、すなわちスレッドキュー２１ｂを参照し、実行可能なスレッドがあるか否かを判定する。
【００４３】
〔本実施例のスケジューリング手順〕
図５は、本実施例のマルチコアシステム１００によるスレッドスケジューリングを模式的に説明する図の一例である。マルチコアシステム１００はフラグの状態を利用して、スレッド切り替え時にアイドル状態を挿入する。説明のため、コアＡはフラグＡを、コアＢはフラグＢをそれぞれ有するように図示したが、コア１２毎に有していなくても、例えば、Ｉ／Ｏ１３が有していてもよい。各コア１２がフラグを有する場合、メモリ１４にフラグの状態が記憶されたり、コアＡ及びコアＢからフラグの状態に応じてＨｉ又はＬｏｗの信号が出力される。また、Ｉ／Ｏ１３がフラグを備える場合、使用中の場合はフラグの状態に応じてＨｉ又はＬｏｗの信号が出力される。
【００４４】
フラグＡはセット状態とリセット状態を取り、コアＡが実行するスレッド１〜ｎがＩ／Ｏ処理を開始するとセットされ、そのＩ／Ｏ処理が終了するとリセットされる。同様に、フラグBはセット状態とリセット状態を取り、コアＢが実行するスレッドＡ〜ＺがＩ／Ｏ処理を開始するとセットされ、そのＩ／Ｏ処理が終了するとリセットされる。図では、コアＡが実行するスレッド２がＩ／Ｏ処理を開始したためフラグＡがセットされ、Ｉ／Ｏ処理が終了するとフラグＡがリセットされている。
【００４５】
コアＡ（及びコアＢ）はフラグ操作部２３を有し、フラグＡをセット又はリセット状態に操作する。フラグ操作部２３は各スレッドが備えていてもよい。
【００４６】
なお、Ｉ／Ｏ処理とは、各種のＩ／Ｏデバイス１７に処理を依頼し、その処理結果（データ、制御結果等）を受け取る処理をいう。Ｉ／Ｏ処理を実行したコアＡは、この間、待機状態となることが多い。実際にはＩ／Ｏ１３はＤＭＡにより直接メモリ１４にアクセスするので、Ｉ／Ｏ処理中とはＩ／Ｏ１３がメモリ１４にアクセスする動作を含む。
【００４７】
スケジューラ２２はアイドル状態挿入部２４を備える。アイドル状態挿入部２４は、上記のとおり、ＯＳの一部又はコアＢがハード的に実装する機能である。スケジューラ２２がコアＢのスレッドを切り替える際、アイドル状態挿入部２４はフラグＡを参照し、Ｉ／Ｏ処理中か否かを判定する。例えば、スレッドＢ（Ｉ）を実行する際は、まだフラグＡがリセット状態なので、スレッドＢの前にアイドル状態は挿入されない。しかし、スケジューラ２２がコアＢの実行するスレッドをスレッドＣに切り替える際はフラグＡがセット状態なので、アイドル状態挿入部２４はアイドル状態を挿入する（Ｉｄｌｅ１）。同様に、スレッドＡ（II）とスレッドB（II）の実行を開始する際、フラグＡはセット状態であるので、アイドル状態挿入部２４は、それぞれのスレッドの実行前にアイドル状態を挿入する（Ｉｄｌｅ２，３）。
【００４８】
以下では、Ｉｄｌｅ１〜３を他のアイドル状態と区別するため、強制待機アイドル状態という。
【００４９】
コアＢが強制待機アイドル状態であれば、バスアービタ１６がＩ／Ｏ１３からのバス１５の使用要求を許可できるので、スレッド２の実行時間を保証しやすくなる。また、図示するように強制待機アイドル状態を分散できるので、Ｉ／Ｏ１３からの使用要求を許可できるタイミングが数多く提供される。
【００５０】
図６は、本実施例のマルチコアシステム１００がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図６において図４と同一ステップには同一の符号を付した。
【００５１】
図６のフローチャート図では、ステップＳ１１０〜Ｓ１４０の処理が特徴的である。図６では、実行可能なスレッドがある場合（Ｓ１０のＹｅｓ）、スケジューラ２２はＩ／Ｏ処理中か否かを判定する（Ｓ１１０）。Ｉ／Ｏ処理中でない場合（Ｓ１１０のＮｏ）、コアＡは待機中でないことになるので、図４と処理手順は同様である。なお、実行可能なスレッドがない場合（Ｓ１０のＮｏ）の処理手順も図４と同様である。
【００５２】
一方、Ｉ／Ｏ処理中の場合（Ｓ１１０のＹｅｓ）、すなわち、フラグＡがセット状態の場合、アイドル状態挿入部２４は割り込み用タイマーを設定する（Ｓ１２０）。そして、コアＢは、割り込みがあるまでは（Ｓ１４０のＮｏ）、強制待機アイドル状態を保ち（Ｓ１３０）、割込みがあると（Ｓ１４０のＹｅｓ）、スケジューラ２２はステップＳ２０以降の処理を実行する。すなわち、コアＢはスレッドキュー２１ｂにある次のスレッドを実行する。
【００５３】
ステップＳ１２０で設定されるタイマーの値（強制待機アイドル時間）は、Ｉ／Ｏ１３がバス１５の使用要求を出してバスアービタ１６に使用が許可される程度の時間である。このような時間はシステムクロックやバスクロックにより計算し予め定めておくことができる。したがって、コアＢの処理が滞らない最小限の時間を設定することができる。  したがって、ステップＳ１２０で設定されるタイマーの値は、スレッドの実行時間よりも短い（例えば、１／２〜１／１００程度）。
【００５４】
以上説明したように、本実施例のマルチコアシステム１００は、一方のコアＢの処理効率の低下を最小限にして、他方のコアＡの待機時間を抑制できる。強制待機アイドル状態を分散できるので、特にリアルタイム処理の実行時間を保証しやすくできる。また、バスアービタ１６に使用要求が集中することも少なくなり、バスアービタ１６の負荷を低減できる。
【実施例２】
【００５５】
実施例１では、強制待機アイドル状態を一定時間としたが、本実施例では強制待機アイドル状態をスレッドの優先順位に応じて可変にするマルチコアシステム１００について説明する。強制待機アイドル時間を可変とすることで、コアＢのメモリアクセス頻度を制御できることになる。
【００５６】
図７は、本実施例のマルチコアシステム１００によるスレッドスケジューリングを模式的に説明する図の一例である。本実施例のスケジューラ２２は時間取得部２５を有する。時間取得部２５は、次に実行するスレッドの優先順位に応じて強制待機アイドル時間を決定する。このため、時間取得部２５は、ＯＳのファイルと共に予め記憶されている時間計算テーブル２６を参照する。
【００５７】
図８は、時間計算テーブル２６の一例を示す図である。時間計算テーブル２６には、スレッドの優先順位に対応づけて、強制待機アイドル時間が登録されている（図８では優先順位が高いほど数値が小さい）。強制待機アイドル状態は、次に実行するスレッドの優先順位が高いほど短い方が好ましいので、時間計算テーブル２６に登録された強制待機アイドル時間は優先順位が高いほど短い。
【００５８】
図９は、本実施例のマルチコアシステム１００がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図９において図６と同一ステップには同一の符号を付した。
【００５９】
図９のフローチャート図では、Ｉ／Ｏ処理中の場合（Ｓ１１０のＹｅｓ）に実行されるステップＳ１１５の処理が特徴となっている。Ｉ／Ｏ処理中の場合（Ｓ１１０のＹｅｓ）、時間取得部２５は強制待機アイドル時間を取得する（Ｓ１１５）。
【００６０】
図１０はステップＳ１１５の処理手順（強制待機アイドル時間の取得手順）を示すフローチャート図の一例である。まず、時間取得部２５は次に実行する実行可能なスレッドの優先順位を取得する（Ｓ１１５１）。次に実行するスレッドは、スレッドキュー２１ｂから明らかであるが、上記のように優先順位は、ソースコードのスレッド毎に例えばSetThreadPriorityのような関数で記述されている。この優先順位はスケジューラ２２から容易に参照できるようになっている。
【００６１】
ついで、時間取得部２５は時間計算テーブル２６を参照し、次に実行するスレッドの優先順位に対応づけられた強制待機アイドル時間を読み出す（Ｓ１１５２）。
【００６２】
図９のステップＳ１１５に戻り、アイドル状態挿入部２４は、時間取得部２５が取得した強制待機アイドル時間を割り込み用タイマーに設定する（Ｓ１２０）。そして、コアＢは、割り込みがあるまでは（Ｓ１４０のＮｏ）、強制待機アイドル状態を保ち（Ｓ１３０）、割込みがあると（Ｓ１４０のＹｅｓ）、スケジューラ２２はステップＳ２０以降の処理を実行する。すなわち、コアＢはスレッドキュー２１ｂにある次のスレッドを実行する。
【００６３】
以上説明したように、本実施例のマルチコアシステム１００は、実施例１の効果に加え、強制待機アイドル時間を制御できるのでコアＢのメモリアクセス頻度を制御できる。また、強制待機アイドル時間は、スレッドの優先順位に応じて決定できるので、優先順位の高いスレッドの待ち時間は短縮できる。
【実施例３】
【００６４】
実施例１，２ではコアＡがＩ／Ｏ処理中の場合にコアＢが強制待機アイドル状態を設けたが、本実施例ではコアＡがメモリ１４にアクセスしている場合、コアＢが強制待機アイドル状態を設けるマルチコアシステム１００について説明する。
【００６５】
Ｉ／Ｏ処理中は、Ｉ／Ｏ１３がメモリ１４にアクセスすることが多いので、Ｉ／Ｏ処理中とはコアＡがメモリアクセス中と同義の場合がある。また、Ｉ／Ｏ１３がメモリ１４に記憶したデータをコアＡが読み出すことも多い。したがって、Ｉ／Ｏ処理中と同様にコアＡがメモリ１４にアクセス中は、コアＢが強制待機アイドル状態を提供することで、実施例１と同様の効果が得られる。
【００６６】
図１１は、本実施例のマルチコアシステム１００によるスレッドスケジューリングを模式的に説明する図の一例である。なお、図１１において図５と同一部分には同一の符号を付しその説明は省略する。
【００６７】
図１１では、コアＡが実行するスレッド２がメモリ１４にアクセスを開始する際、フラグ操作部２３がメモリ占有フラグをセットし、アクセスを終了するとメモリ占有フラグをリセットする。スケジューラ２２がコアＢのスレッドを切り替える際、アイドル状態挿入部２４はメモリ占有フラグを参照し、メモリアクセス中か否かを判定する。図では、コアＢがスレッドＣ（I）〜Ｂ（II）を実行する際、メモリ占有フラグがセット状態なので、アイドル状態挿入部２４は強制待機アイドル状態を挿入する（Ｉｄｌｅ１〜３）。なお、メモリ１４にアクセスできるのは１つのコア１２のみなので図１１ではメモリ占有フラグを１つにしたが、複数のメモリ占有フラグを設けてもよい。
【００６８】
コアＢが強制待機アイドル状態であれば、ＤＡＭコントローラはコアＢからのバス１５の使用要求を許可できるので、スレッド２の実行時間を保証しやすくなる。また、図示するように強制待機アイドル状態を分散できるので、コアＡからの使用要求が許可するタイミングが数多く提供される。また、バスアービタ１６に使用要求が集中することも少なくなり、バスアービタ１６の負荷を低減できる。
【００６９】
図１２は、本実施例のマルチコアシステム１００がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図１２において図６と同一ステップには同一の符号を付した。
【００７０】
図１２のフローチャート図では、実行可能なスレッドがある場合の処理手順が図６と異なる。すなわち、実行可能なスレッドがある場合（Ｓ１０のＹｅｓ）、スケジューラ２２は別のコアＡがメモリアクセス中か否かを判定する（Ｓ１１１）。メモリアクセス中でない場合（Ｓ１１１のＮｏ）、コアＡは待機中でないことになるので、コアＢは強制待機アイドル状態とならずにスレッドを実行する（Ｓ２０〜Ｓ５０）。メモリアクセス中であった場合（Ｓ１１１のＹｅｓ）、コアＢがメモリ１４にアクセスしバスアービタ１６に負荷が集中するおそれがあるので、コアＢは強制待機アイドル状態となる（Ｓ１２０〜Ｓ１４０）。
【００７１】
以上説明したように、本実施例のマルチコアシステム１００は、他方のコアＡがメモリアクセス中にコアＢを強制待機アイドル状態とすることで、実施例１と同様の効果を奏することができる。
【実施例４】
【００７２】
実施例３のようにコアＡがメモリ１４にアクセスしている際にコアＢを強制待機アイドル状態とする場合でも、強制待機アイドル時間を可変にすることができる。実施例２において説明したように、コアＢは例えばスレッドの優先順位に応じて強制待機アイドル時間を制御する。
【００７３】
制御の方法は、実施例２と同様である。例えば、時間取得部２５が時間計算テーブル２６を参照して、スレッド毎に強制待機アイドル時間を決定する。
【００７４】
図１３は、本実施例のマルチコアシステム１００がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図１３において図９と同一ステップには同一の符号を付した。
【００７５】
図１３のフローチャート図では、コアＡがメモリアクセス中の場合（Ｓ１１１のＹｅｓ）、図１０の手順に従い、時間取得部２５は強制待機アイドル時間を取得する（Ｓ１１５）。すなわち、時間取得部２５は次に実行する実行可能なスレッドの優先順位を取得し（Ｓ１１５１）、時間取得部２５は時間計算テーブル２６を参照し、次に実行するスレッドの優先順位に対応づけられた強制待機アイドル時間を読み出す（Ｓ１１５２）。
【００７６】
図１３のステップＳ１１５に戻り、アイドル状態挿入部２４は、時間取得部２５が取得した強制待機アイドル時間を割り込み用タイマーに設定する（Ｓ１２０）。そして、コアＢは、割り込みがあるまでは（Ｓ１４０のＮｏ）、強制待機アイドル状態を保ち（Ｓ１３０）、割込みがあると（Ｓ１４０のＹｅｓ）、スケジューラ２２はステップＳ２０以降の処理を実行する。すなわち、コアＢはスレッドキュー２１ｂにある次のスレッドを実行する。
【００７７】
以上説明したように、本実施例のマルチコアシステム１００は、実施例３の効果に加え、強制待機アイドル時間を制御できるのでコアＢのメモリアクセス頻度を制御できる。また、強制待機アイドル時間は、スレッドの優先順位に応じて決定できるので、優先順位の高いスレッドの待ち時間は短縮できる。
【実施例５】
【００７８】
実施例３，４では、コアＡのメモリアクセス中にコアＡのスレッドは切り替わらないという前提で説明したが、タイマー割込みにて実行時間が制限されるマルチスレッド制御では、メモリアクセス中でも強制的にコアＡのスレッドが切り替えられる場合がある。切り替えられた場合、次のスレッドはメモリ１４にアクセスするとは限らないので、次のスレッドに切り替わったらコアＢは強制待機アイドル状態になる必要はない。
【００７９】
そこで、本実施例では、コアＡがメモリアクセス中にコアＡのスレッドが切り替えられたか否かに応じて、コアＢの強制待機アイドル状態への移行を制御するマルチコアシステム１００について説明する。
【００８０】
図１４は、本実施例のマルチコアシステム１００によるスレッドスケジューリングを模式的に説明する図の一例である。マルチコアシステム１００はメモリ占有フラグと実行フラグを利用する。メモリ占有フラグと実行フラグはスレッド毎に設けられ、スレッドと一体にメモリ１４に記憶される。
【００８１】
メモリ占有フラグは、コアＡがメモリ１４にアクセス中にセット状態となる。また、実行フラグは、コアＡのスレッド２がメモリ１４にアクセスするとセット状態となり、メモリ１４にアクセスしたままスレッド３に切り替えられると、リセット状態になる。次にコアＡのスレッドがスレッド２に切り替えられると、スレッド２は実行フラグをセット状態にする。そして、メモリ１４へのアクセスが終了すると、メモリ占有フラグと実行フラグをリセット状態にする。すなわち、実行フラグは、メモリ占有フラグをセットしたスレッド２が実行中か否かを示すフラグとなる。
【００８２】
このような、実行フラグがあれば、コアＢは実行フラグがセット状態かリセット状態かに応じて強制待機アイドル状態を設ければよいことになる。図１４では、コアＢがスレッドＣ（Ｉ）を実行する際、実行フラグがセット状態なのでコアＢは強制待機アイドル状態（Ｉｄｌｅ１）を設けた。また、コアＢがスレッドＢ（II）を実行する際も、実行フラグがセット状態なのでコアＢは強制待機アイドル状態（Ｉｄｌｅ２）を設ける。
【００８３】
しかし、コアＢがスレッドＡ（II）を実行する際（コアＡがスレッド３を実行中）、実行フラグがリセット状態なのでコアＢは強制待機アイドル状態を設けない。実行フラグがリセット状態では、コアＡはメモリアクセスしていないスレッド３を実行中なので、バスアービタ１６に負荷が集中することがなく、強制待機アイドル状態は処理効率を低下させるおそれがあるからである。
【００８４】
したがって、本実施例のマルチコアシステム１００は、実施例３，４と比べ、無用な強制待機アイドル状態を抑制することができる。
【００８５】
図１５は、コアＡが実行フラグを設定する手順を示すフローチャート図の一例である。このフローチャート図はコアＡがスレッドを切り替える毎に実行する。
【００８６】
スレッドが切り替わるとスケジューラ２２はまず割り込み用タイマーを設定する（Ｓ２１０）。タイマーに設定される時間はスレッドの実行時間である。
【００８７】
ついで、コアＡのフラグ操作部２３は、メモリ占有フラグがセット状態かリセット状態かを判定する（Ｓ２２０）。メモリ占有フラグがセット状態の場合、実行するそのスレッドがメモリアクセス中であるので、実行フラグをセットする（Ｓ２３０）。
【００８８】
メモリ占有フラグがリセット状態の場合、実行するそのスレッドはメモリアクセス中でないので、実行フラグをセットしないで、スケジューラ２２はコアＡにそのスレッドを割り当てる（Ｓ２４０）。
【００８９】
ついで、スケジューラ２２は割り込みの有無を判定し（Ｓ２５０）、コアＡは割込みがあるまでスレッドを実行する。
【００９０】
割込みがあると、コアＡのフラグ操作部２３は、メモリ占有フラグがセット状態かリセット状態かを判定する（Ｓ２６０）。メモリ占有フラグがセット状態の場合、実行するそのスレッドがメモリアクセス中でも、スレッドの終了によりメモリアクセセスしなくなるので、実行フラグをリセットする（Ｓ２７０）。
【００９１】
メモリ占有フラグがリセット状態の場合、実行しているスレッドがメモリアクセス中でないので、実行フラグを操作しない。スケジューラ２２は、次のスレッドをコアＡに割り当てる（Ｓ２８０）。
【００９２】
以上のような実行フラグの操作により、メモリアクセセス中のスレッドが実行中の場合のみ実行フラグをセットすることができ、コアＢは実行フラグを参照して無駄なく強制待機アイドル状態を設けることができる。
【００９３】
図１６は、本実施例のマルチコアシステム１００がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図１６において図１２と同一ステップには同一の符号を付した。
【００９４】
図１６のフローチャート図では、実行可能なスレッドがある場合の処理手順が図６と異なる。すなわち、実行可能なスレッドがある場合（Ｓ１０のＹｅｓ）、スケジューラ２２は実行フラグがセット状態か否かを判定する（Ｓ１１２）。実行フラグがセット状態でない場合（Ｓ１１２のＮｏ）、コアＡはメモリアクセセス中でないことになるので、コアＢは強制待機アイドル状態とならずにスレッドを実行する（Ｓ２０〜Ｓ５０）。
【００９５】
実行フラグがセット状態の場合（Ｓ１１２のＹｅｓ）、コアＢがメモリ１４にアクセスしバスアービタ１６に負荷が集中するおそれがあるので、コアＢは強制待機アイドル状態となる（Ｓ１２０〜Ｓ１４０）。強制待機アイドル状態を挿入する際、スレッドの優先順位に応じて強制待機アイドル時間を計算してもよい。
【００９６】
以上説明したように、本実施例のマルチコアシステム１００は、実施例１の効果に加え、他方のコアＡがメモリアクセス中にのみコアＢを強制待機アイドル状態とすることで、無用な強制待機アイドル状態を抑制できる。
【図面の簡単な説明】
【００９７】
【図１】本実施形態のマルチコアシステムによるスレッドのスケジューリングの概略を説明する図の一例である。
【図２】マルチコアシステムを適用したコンピュータの概略構成図の一例である。
【図３】スレッドキューとスレッドを模式的に説明する図の一例である。
【図４】マルチコアシステムがスレッドをスケジュールする手順を示すフローチャート図の一例である（従来図）。
【図５】マルチコアシステムによるスレッドスケジューリングを模式的に説明する図の一例である（実施例１）。
【図６】マルチコアシステムがスレッドをスケジュールする手順を示すフローチャート図の一例である（実施例１）。
【図７】マルチコアシステムによるスレッドスケジューリングを模式的に説明する図の一例である（実施例２）。
【図８】時間計算テーブルの一例を示す図である。
【図９】マルチコアシステムがスレッドをスケジュールする手順を示すフローチャート図の一例である（実施例２）。
【図１０】強制待機アイドル時間の取得手順を示すフローチャート図の一例である。
【図１１】マルチコアシステムによるスレッドスケジューリングを模式的に説明する図の一例である（実施例３）。
【図１２】マルチコアシステムがスレッドをスケジュールする手順を示すフローチャート図の一例である（実施例３）。
【図１３】マルチコアシステムがスレッドをスケジュールする手順を示すフローチャート図の一例である（実施例４）。
【図１４】マルチコアシステムによるスレッドスケジューリングを模式的に説明する図の一例である（実施例５）。
【図１５】コアＡが実行フラグを設定する手順を示すフローチャート図の一例である。
【図１６】マルチコアシステムがスレッドをスケジュールする手順を示すフローチャート図の一例である（実施例６）。
【図１７】従来のスレッドの実行を説明する図の一例である。
【符号の説明】
【００９８】
１１      ＣＰＵ
１２、１２ａ、１２ｂ      ＣＰＵコア
１３、１３ａ〜１３ｇ      Ｉ／Ｏ
１４      メモリ
１５      バス
１６      バスアービタ
１７      Ｉ／Ｏデバイス
１８      ＨＤＤ
１９      ドライブ装置
２０      記憶媒体
２１ａ、２１ｂ  スレッドキュー
２２      スケジューラ
２３      フラグ操作部
２４      アイドル状態挿入部
２５      時間取得部
２６      時間計算テーブル
１００    マルチコアシステム
【図１】
2010113414.tif 000003
【図２】
2010113414.tif 000004
【図３】
2010113414.tif 000005
【図４】
2010113414.tif 000006
【図５】
2010113414.tif 000007
【図６】
2010113414.tif 000008
【図７】
2010113414.tif 000009
【図８】
2010113414.tif 000010
【図９】
2010113414.tif 000011
【図１０】
2010113414.tif 000012
【図１１】
2010113414.tif 000013
【図１２】
2010113414.tif 000014
【図１３】
2010113414.tif 000015
【図１４】
2010113414.tif 000016
【図１５】
2010113414.tif 000017
【図１６】
2010113414.tif 000018
【図１７】
2010113414.tif 000019