JP2010113414A - マルチコアシステム、スレッドスケジューリング方法、プログラム、記憶媒体 - Google Patents
マルチコアシステム、スレッドスケジューリング方法、プログラム、記憶媒体 Download PDFInfo
- Publication number
- JP2010113414A JP2010113414A JP2008283476A JP2008283476A JP2010113414A JP 2010113414 A JP2010113414 A JP 2010113414A JP 2008283476 A JP2008283476 A JP 2008283476A JP 2008283476 A JP2008283476 A JP 2008283476A JP 2010113414 A JP2010113414 A JP 2010113414A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- core
- memory
- idle state
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Bus Control (AREA)
Abstract
【課題】バスの使用要求を抑制してバスの占有によるオーバーヘッドを低減するマルチコアシステム等を提供すること。
【解決手段】複数のCPUコア12、メモリ14及び入出力インターフェイス13が共通のバス15を介して接続され、バスの使用権をバスアービタ16が調停するマルチコアシステム100において、プログラムの実行単位であるスレッドを第1、第2のCPUコアに割り当てるスケジューラ22と、第1のCPUコアによるスレッドの実行に伴いメモリ14にアクセス中か否かのアクセス情報を提供するメモリ状態提供手段23と、アクセス情報に基づき、第2のCPUコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、第2のCPUコアによるスレッドの実行前に、1つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を第2のCPUコアに割り当てるアイドル状態挿入手段24と、を有する。
【選択図】図1
【解決手段】複数のCPUコア12、メモリ14及び入出力インターフェイス13が共通のバス15を介して接続され、バスの使用権をバスアービタ16が調停するマルチコアシステム100において、プログラムの実行単位であるスレッドを第1、第2のCPUコアに割り当てるスケジューラ22と、第1のCPUコアによるスレッドの実行に伴いメモリ14にアクセス中か否かのアクセス情報を提供するメモリ状態提供手段23と、アクセス情報に基づき、第2のCPUコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、第2のCPUコアによるスレッドの実行前に、1つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を第2のCPUコアに割り当てるアイドル状態挿入手段24と、を有する。
【選択図】図1
Description
本発明は、複数のCPUコアを備え、各CPUコアがスレッドを並行に実行するマルチコアシステム等に関し、特に、CPUコアにアイドル状態を維持させることが可能なマルチコアシステム、スレッドスケジューリング方法、プログラム及び記憶媒体に関する。
CPUやDMAが同じバスに接続されたアーキテクチャでは、それぞれの使用権を調停するためバスアービタが例えばバスの使用要求の優先順位に応じてバスの使用権を調停する。また、1つのCPUが複数のコアを備えたマルチコアシステム、複数のCPUを1つのバスに接続するマルチCPUシステムにおいてもこのようなバスの使用権の調整は必須である。
マルチタスク(マルチスレッド)型のコンピュータは、スレッド(又はタスク)と呼ばれる実行単位にプログラムを分割して実行する機能を備え、各スレッドのスケジューリング結果に応じてスレッドを実行する。したがって、複数のCPUコア又は複数のCPUはそれぞれ実行するスレッドに応じてメモリにアクセスする必要が生じ、この結果、バスアービタに負荷が集中することがある。バスアービタには十分な処理能力が割り当てられているが、使用要求が集中するとオーバーヘッドを生じスレッドの処理が遅延してしまう。
使用要求を低減するため、CPUコアのスレッドの実行を中断することが考えられる(例えば、特許文献1参照。)。特許文献1には、CPUの温度が閾値を超えるとアイドル状態となるスレッドを挿入することで、CPUの動作を停止して温度を下げる技術が開示されている。アイドル状態のスレッドはメモリにアクセスすることもないのでバスの使用要求が集中することを防止できる。
特開2005−165470号公報
しかしながら、特許文献1記載のコンピュータシステムのようにアイドル状態を特殊なスレッドで実現する場合、アイドル状態となるのはそのスレッドに制御が移ってから(そのスレッドの実行が開始されてから)となるため、時間的なロスが生じる。図17(a)は、特許文献1記載のスレッドの実行状態を例示する図である。このようにスレッドを切り替える際にはコンテキストの切り替え等も必要と考えられ、アイドル状態になるまでには時間がかかってしまう。また、アイドル状態となるスレッドを実行するためにメモリアクセスも必要なので、バスの使用要求を調停する時間も必要である。
ところで、マルチコアのシステムでは、CPUコアAがI/Oからの応答待ちをしていても、別のCPUコアBは動作可能であるため、CPU全体として見た場合にメモリへのアクセス頻度が高くなってしまう。図17(b)は、マルチコアのシステムにおける課題を説明する図の一例を示す。
CPUコアAが応答待ちしている場合、CPUコアBはメモリやI/Oへのアクセスが容易になりバスを使用する頻度も増大する。このような状態では、I/Oからの使用要求とCPUコアBとの使用要求が衝突する可能性が高まり、CPUコアAの応答待ち時間が長期化するという問題がある。したがって、一方のCPUコアAがI/O等の応答待ちをしている場合、他方のCPUコアBのバスの使用を抑制することが好ましいと言える。
この点、特許文献1記載のコンピュータシステムのようにCPUコアBにアイドル状態となるスレッドを実行させると、CPUコアBによるバスの占有は防止できるが、アイドル状態が実行用のスレッドと同程度の時間継続してしまうので、CPUコアBの処理効率が低下してしまう。
本発明は、上記課題に鑑み、バスの使用要求を抑制してバスの占有によるオーバーヘッドを低減するマルチコアシステム、スレッドスケジューリング方法、プログラム及び記憶媒体を提供することを目的とする。
上記課題に鑑み、本発明は、複数のCPUコア、メモリ及び入出力インターフェイスが共通のバスを介して接続され、バスの使用権をバスアービタが調停するマルチコアシステムにおいて、プログラムの実行単位であるスレッドを各CPUコアに割り当てるスケジューラと、第1のCPUコアによるスレッドの実行に伴いメモリにアクセス中か否かのアクセス情報を提供するメモリ状態提供手段と、アクセス情報に基づき、第2のCPUコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、第2のCPUコアによるスレッドの実行前に、1つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を第2のCPUコアに割り当てるアイドル状態挿入手段と、を有することを特徴とするマルチコアシステム。
メモリアクセス中の場合、第2のCPUコアによるスレッドの実行前に、アイドル状態を第2のCPUコアに割り当てることで、第2のCPUコアが時間的に分散したアイドル状態となるので、バスを占有することがなくなり、分散したアイドル状態を利用して第2のCPUコア等がメモリにアクセスすることができる。
バスの使用要求を抑制してバスの占有によるオーバーヘッドを低減するマルチコアシステム、スレッドスケジューリング方法、プログラム及び記憶媒体を提供することができる。
以下、本発明を実施するための最良の形態について図面を参照しながら実施例を挙げて説明する。
図1は、本実施形態のマルチコアシステム100によるスレッドのスケジューリングの概略を説明する図の一例である。
1本の(共通の)バス15(実際には複数のアドレス線、データ線からなるがここでは1本として扱う)に、CPU11、I/O13aとI/O13b(区別しない場合、I/O13という)及びメモリ14が接続されている。また、CPU11は、CPUコアA12aとCPUコアB12b(以下、CPUコアを単にコアA又はコアBという。両者を区別しない場合、単にコア12という。)を備えたマルチコア型のプロセッサである。なお、コア12は3以上でもよい。
図1は、本実施形態のマルチコアシステム100によるスレッドのスケジューリングの概略を説明する図の一例である。
1本の(共通の)バス15(実際には複数のアドレス線、データ線からなるがここでは1本として扱う)に、CPU11、I/O13aとI/O13b(区別しない場合、I/O13という)及びメモリ14が接続されている。また、CPU11は、CPUコアA12aとCPUコアB12b(以下、CPUコアを単にコアA又はコアBという。両者を区別しない場合、単にコア12という。)を備えたマルチコア型のプロセッサである。なお、コア12は3以上でもよい。
メモリ14は、CPU11がプログラムを実行する作業エリアとなる記憶素子で、例えばDRAM(Dynamic Random Access Memory)、SRAM(Static RAM)等を実体とする。CPU11はこのメモリ14の他に一次、二次キャッシュ等のキャッシュメモリを備える。
コアAはスレッド1〜nを、コアBはスレッドA〜Zをそれぞれ実行する(スレッド1〜nとスレッドA〜Zは説明上の区分に過ぎず、コアAはスレッドA〜Z、コアBがスレッド1〜nを実行することもある)。
本実施形態のマルチコアシステム100は、例えばコアAがスレッド2の実行時にI/O13又はメモリ14にアクセスする際に、例えばフラグをセットする。このフラグは、I/O13の応答又はメモリ14からの読み出しを待っていることを示すフラグである。コアBは、例えばスレッドの切り替え時にフラグを参照することでフラグの状態(コアAが待機中であること)を検出する。そして、フラグがセットされている場合、コアBはスレッドの切り替え時に一時的にアイドル状態となる。
アイドル状態について説明する。アイドル状態とは広義にはスレッドを実行していない状態をいい、具体的には、停止状態(HALT命令による停止状態)、クロック低減した状態、更にクロックを低減した状態、メモリ14の内容を保持するリフレッシュ電源のみ供給された状態、メモリ14の内容を退避しリフレッシュ電源も供給しない状態、又は、これらを適宜組み合わせた状態である。すなわち、アイドル状態の呼称は、スリープモード等でもよく、呼び方は問わない。
スレッドの切り替わり毎にアイドル状態とすることで、図示するように、アイドル状態を時間的に分散させることができる。このアイドル状態の間はコアBはバス15にアクセスすることはないので、CPU11のもう一方のコアAが待機中でも、コアBがバス15を占有することがない。コアBがアイドル状態になるとバスアービタ16の処理負荷が低減し、I/O13又はメモリ14は遅延することなくコアAにデータを送信することができる。また、アイドル状態が分散されるので、リアルタイム性が要求されるスレッドの実行時間を保証しやすくなる。すなわち、アイドル状態を連続させた場合と比較すると、単位時間当たりのアイドル状態の比率が同じでも、分散させる方がCPU11全体の処理効率を向上させやすい。
I/O13又はメモリ14へのアクセスが終了すると、コアAはフラグをリセットする。フラグリセット以降、コアBはアイドル状態になることなくスケジューリングされたスレッドを実行する。
以下、実施例にて詳細に説明する。なお、以下ではコアBがアイドル状態となるものとして説明するが、コアAもコアBがセットしたフラグに基づきアイドル状態となることができる。
図2は、マルチコアシステム100を適用したコンピュータ200の概略構成図の一例を示す。マルチコアシステム100は、複数のI/O13を介してハードディスクドライブ(HDD18)、ドライブ装置19、センサ、スイッチ素子、アクチュエータ、入力装置及び出力装置が接続されている(区別しない場合、I/Oデバイス17という場合がある)。
コンピュータ200は、例えば電子写真方式、インクジェット方式又はジェルジェット方式等の画像形成装置、デジタルカメラ等に搭載される組み込み型の情報処理装置であるが、パーソナルコンピュータに適用してもよい。
HDD18はOS(Operating System)、制御用のプログラム、アプリケーション用のプログラムなど、各種のプログラムの実体であるファイルを記憶している。HDD18は一例であって、フラッシュメモリやSSD(solid state drive)などの書き換え可能な不揮発メモリであればよい。
図1にて説明した、フラグを参照してコア12をアイドル状態とする手段は、OSがスレッドスケジューリングするスケジューラ22の一環として実装してもよく、又は、コア12がハードウェアとして実装してもよい。いずれの場合もスレッドを切り替える必要はないので遅延を回避できる。また、OSが実装した場合、スレッドスケジュールはOSのカーネルが処理することが多いので、アイドル状態とするまでの時間も短い。また、ハード的な実装とした場合、コア12は極めて短時間にアイドル状態となることができる。この点、OS以外のプログラムで実装し、スレッドとしてアイドル状態を実現する場合と大きく異なる。
なお、OSのファイルは可搬型の記憶媒体20に記憶された状態で配布されたり、不図示のサーバからネットワークを介して配布される。配布されたOSのファイルはHDD18に記憶される。
記憶媒体20は、CD、DVD、Blue−Ray等の光記憶メディア、SDカード、USBメモリなどの半導体メモリ、フロッピーディスクなどの磁気記憶メディア等である。ドライブ装置19は、記憶媒体20を装着してファイルを書き込んだり、記憶媒体20からファイルを読み出す、例えば、CDドライブ、DVDドライブ、USBインターフェイス、メモリカード装着部等である。
センサは、温度センサ、光度センサ、モータの回転数センサなどコンピュータ200が制御するために必要な対象の状態を検出するセンサであって、その種類は限定されない。スイッチ素子は、例えば制御信号をオン/オフしたり、脱着可能な部品の装着有無や扉の開閉等を検出する。アクチュエータは例えば用紙搬送用のモータであったり、インクタンク駆動用のモータ若しくはインク滴の吐出用のアクチュエータである。
入力装置は、操作パネル、キーボード、マウス、タッチパネルなどユーザの操作を入力する装置である。また、出力装置は例えば警告ランプ、液晶などのディスプレイである。
これらI/O13はDMA(Direct Memory Access)方式でメモリ14にアクセスすることができる。このためコンピュータ200は複数のDMAコントローラ(不図示)を備え、DMAコントローラの各チャネルに各I/O13が接続される。
このように、バス15はCPU11だけでなくDMAコントローラも独立に使用要求するため、図1のバスアービタ16がバス15の使用権を調停する。具体的には、CPU11及びDMAコントローラはバスアービタ16とリクエスト線で接続されており、DMAコントローラはサイクルスチール方式、インタロック方式などの手順で各チャネル(I/O13)にバス15の使用有無を問い合わせる。その際、I/O13が送信するデータがあれば、DMAコントローラはリクエスト線を介して使用要求をバスアービタ16に出力する。
バスアービタ16の調停論理には、使用要求を出力したI/Oデバイス17及びCPU11に応じて予め定められた優先順位に従う単純優先制御、全ての使用要求に順番に使用権を認めるラウンドロビン、予め定められた重み付けにしたがって順番に使用権を認める拡張型ラウンドロビン等が知られている。本実施形態のスレッドスケジューリング方法は、特に調停論理を限定しないで適用できる。
〔従来のスケジューリング手順〕
比較のため、従来のスレッドスケジューリングについて説明する。図3は、スレッドキュー21a、21bとスレッドを模式的に説明する図の一例である。スレッドを簡単に説明するとプログラムにおけるひとまとまりの実行単位であり、1つのプログラムのオブジェクトコードの一部とも言える。例えば、関数型の言語の場合、1つの関数が1つスレッドになることがある。なお、スレッドをタスクと呼ぶ場合もあるが本実施形態では区別しない。
比較のため、従来のスレッドスケジューリングについて説明する。図3は、スレッドキュー21a、21bとスレッドを模式的に説明する図の一例である。スレッドを簡単に説明するとプログラムにおけるひとまとまりの実行単位であり、1つのプログラムのオブジェクトコードの一部とも言える。例えば、関数型の言語の場合、1つの関数が1つスレッドになることがある。なお、スレッドをタスクと呼ぶ場合もあるが本実施形態では区別しない。
スレッドは、実行に必要なプログラムカウンタの値やスタックポインタをはじめとする各種レジスタ値とプログラムコード領域、スタック領域、データ領域等の情報を含んでいる。
各コア12毎にスレッドキュー21a、21bが設けられる。スレッドキュー21a、21bは、FIFO(first-in first-out)形式のデータ構造を採用し、スケジューラ22は対応するスレッドキュー内のスレッドをスレッドキュー21a、21bに格納された順に各コア12に実行させる。コアA、コアBは依存関係のない各スレッドを時間的に並行に実行可能である。スレッドキュー21a、21bへのスレッドの格納は、原則的に実行順であるが、優先順位が高いスレッドが優先されるようスケジューリングされる。優先順位は、プログラム中に記述されていることが多いが、割込みにより記述と関係なく優先順位が定められることもある。
図では、スレッドキュー21aに「スレッド1→スレッド2→スレッド3→スレッド4」、スレッドキュー21bに「スレッドA→スレッドB→スレッドC→スレッドD」のスレッドが格納されており、この順番に各スレッドは実行される。なお、スレッドキュー21a、21b及びスレッドはメモリ14に記憶されている。
マルチコアシステム100は、いわゆるプリエンプティブにスレッドを切り替えるリアルタイム処理に対応している。すなわち、タイマー割込みを利用して各スレッドに一定時間(タイムスライス)の実行を許可し、換言すると一定時間経過後は、強制的にOSに制御が移る。OSに制御が移るとスケジューラ22はスレッドが有するプログラムカウンタや各種レジスタ値等をコア12のレジスタ等に記憶するコンテキストスイッチを行い、コア12はプログラムカウンタが示すアドレスからプログラム(スレッド)を読み出し実行する。
図4は、マルチコアシステム100がスレッドをスケジュールする手順を示すフローチャート図の一例である。図4の手順はコアA、コアBに共通であるが、本実施形態ではコアBがアイドル状態となることとしたので、以下、コアBがスレッドを実行する手順を説明する。
スケジューラ22は、スレッドキュー21bを参照し、実行可能なスレッドがあるか否かを判定する(S10)。実行可能なスレッドがある場合(S10のYes)、スケジューラ22は割り込み用タイマーを設定する(S20)。S20で設定されるタイマーの値がコアBにスレッドに割り当てられる時間である。
スケジューラ22はスレッドキュー21bにあるスレッドAをコアBに割り当て、コアBはスレッドAを実行する(S30)。そして、スケジューラ22は割込みされたか否かを判定する(S40)。この割込みには、ステップS30のタイマー割込み、システム割込み、ハードウェア割込み等を含む。割り込みがあるまでは(S40のNo)、スレッドAが実行される。
一方、割込みがあると(S40のYes)、スケジューラ22は次のスレッドを実行する(S50)。したがって、コアBは例えばスレッドBを実行する。
ステップS10に戻り、実行可能なスレッドがない場合(S10のNo)、スケジューラ22は同様に割り込み用タイマーを設定する(S60)。S60で設定されるタイマーの値はコアBがアイドル状態を維持する時間である。したがって、タイマーの設定があまり長いとアイドル状態が長くなってしまい処理効率が低下する。このため、アイドル状態を維持する際にタイマーに設定される時間は、長くてもスレッド実行時間以下に設定される。また、例えば、徐々にアイドル状態を維持する時間を長くするなどして、スレッド実行時間よりも長くしてもよい。
コアBは割り込みがあるまで(S80のNo)、アイドル状態を保ち(S70)、割込みがあると(S80のYes)、スケジューラ22はステップS10の処理、すなわちスレッドキュー21bを参照し、実行可能なスレッドがあるか否かを判定する。
〔本実施例のスケジューリング手順〕
図5は、本実施例のマルチコアシステム100によるスレッドスケジューリングを模式的に説明する図の一例である。マルチコアシステム100はフラグの状態を利用して、スレッド切り替え時にアイドル状態を挿入する。説明のため、コアAはフラグAを、コアBはフラグBをそれぞれ有するように図示したが、コア12毎に有していなくても、例えば、I/O13が有していてもよい。各コア12がフラグを有する場合、メモリ14にフラグの状態が記憶されたり、コアA及びコアBからフラグの状態に応じてHi又はLowの信号が出力される。また、I/O13がフラグを備える場合、使用中の場合はフラグの状態に応じてHi又はLowの信号が出力される。
図5は、本実施例のマルチコアシステム100によるスレッドスケジューリングを模式的に説明する図の一例である。マルチコアシステム100はフラグの状態を利用して、スレッド切り替え時にアイドル状態を挿入する。説明のため、コアAはフラグAを、コアBはフラグBをそれぞれ有するように図示したが、コア12毎に有していなくても、例えば、I/O13が有していてもよい。各コア12がフラグを有する場合、メモリ14にフラグの状態が記憶されたり、コアA及びコアBからフラグの状態に応じてHi又はLowの信号が出力される。また、I/O13がフラグを備える場合、使用中の場合はフラグの状態に応じてHi又はLowの信号が出力される。
フラグAはセット状態とリセット状態を取り、コアAが実行するスレッド1〜nがI/O処理を開始するとセットされ、そのI/O処理が終了するとリセットされる。同様に、フラグBはセット状態とリセット状態を取り、コアBが実行するスレッドA〜ZがI/O処理を開始するとセットされ、そのI/O処理が終了するとリセットされる。図では、コアAが実行するスレッド2がI/O処理を開始したためフラグAがセットされ、I/O処理が終了するとフラグAがリセットされている。
コアA(及びコアB)はフラグ操作部23を有し、フラグAをセット又はリセット状態に操作する。フラグ操作部23は各スレッドが備えていてもよい。
なお、I/O処理とは、各種のI/Oデバイス17に処理を依頼し、その処理結果(データ、制御結果等)を受け取る処理をいう。I/O処理を実行したコアAは、この間、待機状態となることが多い。実際にはI/O13はDMAにより直接メモリ14にアクセスするので、I/O処理中とはI/O13がメモリ14にアクセスする動作を含む。
スケジューラ22はアイドル状態挿入部24を備える。アイドル状態挿入部24は、上記のとおり、OSの一部又はコアBがハード的に実装する機能である。スケジューラ22がコアBのスレッドを切り替える際、アイドル状態挿入部24はフラグAを参照し、I/O処理中か否かを判定する。例えば、スレッドB(I)を実行する際は、まだフラグAがリセット状態なので、スレッドBの前にアイドル状態は挿入されない。しかし、スケジューラ22がコアBの実行するスレッドをスレッドCに切り替える際はフラグAがセット状態なので、アイドル状態挿入部24はアイドル状態を挿入する(Idle1)。同様に、スレッドA(II)とスレッドB(II)の実行を開始する際、フラグAはセット状態であるので、アイドル状態挿入部24は、それぞれのスレッドの実行前にアイドル状態を挿入する(Idle2,3)。
以下では、Idle1〜3を他のアイドル状態と区別するため、強制待機アイドル状態という。
コアBが強制待機アイドル状態であれば、バスアービタ16がI/O13からのバス15の使用要求を許可できるので、スレッド2の実行時間を保証しやすくなる。また、図示するように強制待機アイドル状態を分散できるので、I/O13からの使用要求を許可できるタイミングが数多く提供される。
図6は、本実施例のマルチコアシステム100がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図6において図4と同一ステップには同一の符号を付した。
図6のフローチャート図では、ステップS110〜S140の処理が特徴的である。図6では、実行可能なスレッドがある場合(S10のYes)、スケジューラ22はI/O処理中か否かを判定する(S110)。I/O処理中でない場合(S110のNo)、コアAは待機中でないことになるので、図4と処理手順は同様である。なお、実行可能なスレッドがない場合(S10のNo)の処理手順も図4と同様である。
一方、I/O処理中の場合(S110のYes)、すなわち、フラグAがセット状態の場合、アイドル状態挿入部24は割り込み用タイマーを設定する(S120)。そして、コアBは、割り込みがあるまでは(S140のNo)、強制待機アイドル状態を保ち(S130)、割込みがあると(S140のYes)、スケジューラ22はステップS20以降の処理を実行する。すなわち、コアBはスレッドキュー21bにある次のスレッドを実行する。
ステップS120で設定されるタイマーの値(強制待機アイドル時間)は、I/O13がバス15の使用要求を出してバスアービタ16に使用が許可される程度の時間である。このような時間はシステムクロックやバスクロックにより計算し予め定めておくことができる。したがって、コアBの処理が滞らない最小限の時間を設定することができる。 したがって、ステップS120で設定されるタイマーの値は、スレッドの実行時間よりも短い(例えば、1/2〜1/100程度)。
以上説明したように、本実施例のマルチコアシステム100は、一方のコアBの処理効率の低下を最小限にして、他方のコアAの待機時間を抑制できる。強制待機アイドル状態を分散できるので、特にリアルタイム処理の実行時間を保証しやすくできる。また、バスアービタ16に使用要求が集中することも少なくなり、バスアービタ16の負荷を低減できる。
実施例1では、強制待機アイドル状態を一定時間としたが、本実施例では強制待機アイドル状態をスレッドの優先順位に応じて可変にするマルチコアシステム100について説明する。強制待機アイドル時間を可変とすることで、コアBのメモリアクセス頻度を制御できることになる。
図7は、本実施例のマルチコアシステム100によるスレッドスケジューリングを模式的に説明する図の一例である。本実施例のスケジューラ22は時間取得部25を有する。時間取得部25は、次に実行するスレッドの優先順位に応じて強制待機アイドル時間を決定する。このため、時間取得部25は、OSのファイルと共に予め記憶されている時間計算テーブル26を参照する。
図8は、時間計算テーブル26の一例を示す図である。時間計算テーブル26には、スレッドの優先順位に対応づけて、強制待機アイドル時間が登録されている(図8では優先順位が高いほど数値が小さい)。強制待機アイドル状態は、次に実行するスレッドの優先順位が高いほど短い方が好ましいので、時間計算テーブル26に登録された強制待機アイドル時間は優先順位が高いほど短い。
図9は、本実施例のマルチコアシステム100がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図9において図6と同一ステップには同一の符号を付した。
図9のフローチャート図では、I/O処理中の場合(S110のYes)に実行されるステップS115の処理が特徴となっている。I/O処理中の場合(S110のYes)、時間取得部25は強制待機アイドル時間を取得する(S115)。
図10はステップS115の処理手順(強制待機アイドル時間の取得手順)を示すフローチャート図の一例である。まず、時間取得部25は次に実行する実行可能なスレッドの優先順位を取得する(S1151)。次に実行するスレッドは、スレッドキュー21bから明らかであるが、上記のように優先順位は、ソースコードのスレッド毎に例えばSetThreadPriorityのような関数で記述されている。この優先順位はスケジューラ22から容易に参照できるようになっている。
ついで、時間取得部25は時間計算テーブル26を参照し、次に実行するスレッドの優先順位に対応づけられた強制待機アイドル時間を読み出す(S1152)。
図9のステップS115に戻り、アイドル状態挿入部24は、時間取得部25が取得した強制待機アイドル時間を割り込み用タイマーに設定する(S120)。そして、コアBは、割り込みがあるまでは(S140のNo)、強制待機アイドル状態を保ち(S130)、割込みがあると(S140のYes)、スケジューラ22はステップS20以降の処理を実行する。すなわち、コアBはスレッドキュー21bにある次のスレッドを実行する。
以上説明したように、本実施例のマルチコアシステム100は、実施例1の効果に加え、強制待機アイドル時間を制御できるのでコアBのメモリアクセス頻度を制御できる。また、強制待機アイドル時間は、スレッドの優先順位に応じて決定できるので、優先順位の高いスレッドの待ち時間は短縮できる。
実施例1,2ではコアAがI/O処理中の場合にコアBが強制待機アイドル状態を設けたが、本実施例ではコアAがメモリ14にアクセスしている場合、コアBが強制待機アイドル状態を設けるマルチコアシステム100について説明する。
I/O処理中は、I/O13がメモリ14にアクセスすることが多いので、I/O処理中とはコアAがメモリアクセス中と同義の場合がある。また、I/O13がメモリ14に記憶したデータをコアAが読み出すことも多い。したがって、I/O処理中と同様にコアAがメモリ14にアクセス中は、コアBが強制待機アイドル状態を提供することで、実施例1と同様の効果が得られる。
図11は、本実施例のマルチコアシステム100によるスレッドスケジューリングを模式的に説明する図の一例である。なお、図11において図5と同一部分には同一の符号を付しその説明は省略する。
図11では、コアAが実行するスレッド2がメモリ14にアクセスを開始する際、フラグ操作部23がメモリ占有フラグをセットし、アクセスを終了するとメモリ占有フラグをリセットする。スケジューラ22がコアBのスレッドを切り替える際、アイドル状態挿入部24はメモリ占有フラグを参照し、メモリアクセス中か否かを判定する。図では、コアBがスレッドC(I)〜B(II)を実行する際、メモリ占有フラグがセット状態なので、アイドル状態挿入部24は強制待機アイドル状態を挿入する(Idle1〜3)。なお、メモリ14にアクセスできるのは1つのコア12のみなので図11ではメモリ占有フラグを1つにしたが、複数のメモリ占有フラグを設けてもよい。
コアBが強制待機アイドル状態であれば、DAMコントローラはコアBからのバス15の使用要求を許可できるので、スレッド2の実行時間を保証しやすくなる。また、図示するように強制待機アイドル状態を分散できるので、コアAからの使用要求が許可するタイミングが数多く提供される。また、バスアービタ16に使用要求が集中することも少なくなり、バスアービタ16の負荷を低減できる。
図12は、本実施例のマルチコアシステム100がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図12において図6と同一ステップには同一の符号を付した。
図12のフローチャート図では、実行可能なスレッドがある場合の処理手順が図6と異なる。すなわち、実行可能なスレッドがある場合(S10のYes)、スケジューラ22は別のコアAがメモリアクセス中か否かを判定する(S111)。メモリアクセス中でない場合(S111のNo)、コアAは待機中でないことになるので、コアBは強制待機アイドル状態とならずにスレッドを実行する(S20〜S50)。メモリアクセス中であった場合(S111のYes)、コアBがメモリ14にアクセスしバスアービタ16に負荷が集中するおそれがあるので、コアBは強制待機アイドル状態となる(S120〜S140)。
以上説明したように、本実施例のマルチコアシステム100は、他方のコアAがメモリアクセス中にコアBを強制待機アイドル状態とすることで、実施例1と同様の効果を奏することができる。
実施例3のようにコアAがメモリ14にアクセスしている際にコアBを強制待機アイドル状態とする場合でも、強制待機アイドル時間を可変にすることができる。実施例2において説明したように、コアBは例えばスレッドの優先順位に応じて強制待機アイドル時間を制御する。
制御の方法は、実施例2と同様である。例えば、時間取得部25が時間計算テーブル26を参照して、スレッド毎に強制待機アイドル時間を決定する。
図13は、本実施例のマルチコアシステム100がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図13において図9と同一ステップには同一の符号を付した。
図13のフローチャート図では、コアAがメモリアクセス中の場合(S111のYes)、図10の手順に従い、時間取得部25は強制待機アイドル時間を取得する(S115)。すなわち、時間取得部25は次に実行する実行可能なスレッドの優先順位を取得し(S1151)、時間取得部25は時間計算テーブル26を参照し、次に実行するスレッドの優先順位に対応づけられた強制待機アイドル時間を読み出す(S1152)。
図13のステップS115に戻り、アイドル状態挿入部24は、時間取得部25が取得した強制待機アイドル時間を割り込み用タイマーに設定する(S120)。そして、コアBは、割り込みがあるまでは(S140のNo)、強制待機アイドル状態を保ち(S130)、割込みがあると(S140のYes)、スケジューラ22はステップS20以降の処理を実行する。すなわち、コアBはスレッドキュー21bにある次のスレッドを実行する。
以上説明したように、本実施例のマルチコアシステム100は、実施例3の効果に加え、強制待機アイドル時間を制御できるのでコアBのメモリアクセス頻度を制御できる。また、強制待機アイドル時間は、スレッドの優先順位に応じて決定できるので、優先順位の高いスレッドの待ち時間は短縮できる。
実施例3,4では、コアAのメモリアクセス中にコアAのスレッドは切り替わらないという前提で説明したが、タイマー割込みにて実行時間が制限されるマルチスレッド制御では、メモリアクセス中でも強制的にコアAのスレッドが切り替えられる場合がある。切り替えられた場合、次のスレッドはメモリ14にアクセスするとは限らないので、次のスレッドに切り替わったらコアBは強制待機アイドル状態になる必要はない。
そこで、本実施例では、コアAがメモリアクセス中にコアAのスレッドが切り替えられたか否かに応じて、コアBの強制待機アイドル状態への移行を制御するマルチコアシステム100について説明する。
図14は、本実施例のマルチコアシステム100によるスレッドスケジューリングを模式的に説明する図の一例である。マルチコアシステム100はメモリ占有フラグと実行フラグを利用する。メモリ占有フラグと実行フラグはスレッド毎に設けられ、スレッドと一体にメモリ14に記憶される。
メモリ占有フラグは、コアAがメモリ14にアクセス中にセット状態となる。また、実行フラグは、コアAのスレッド2がメモリ14にアクセスするとセット状態となり、メモリ14にアクセスしたままスレッド3に切り替えられると、リセット状態になる。次にコアAのスレッドがスレッド2に切り替えられると、スレッド2は実行フラグをセット状態にする。そして、メモリ14へのアクセスが終了すると、メモリ占有フラグと実行フラグをリセット状態にする。すなわち、実行フラグは、メモリ占有フラグをセットしたスレッド2が実行中か否かを示すフラグとなる。
このような、実行フラグがあれば、コアBは実行フラグがセット状態かリセット状態かに応じて強制待機アイドル状態を設ければよいことになる。図14では、コアBがスレッドC(I)を実行する際、実行フラグがセット状態なのでコアBは強制待機アイドル状態(Idle1)を設けた。また、コアBがスレッドB(II)を実行する際も、実行フラグがセット状態なのでコアBは強制待機アイドル状態(Idle2)を設ける。
しかし、コアBがスレッドA(II)を実行する際(コアAがスレッド3を実行中)、実行フラグがリセット状態なのでコアBは強制待機アイドル状態を設けない。実行フラグがリセット状態では、コアAはメモリアクセスしていないスレッド3を実行中なので、バスアービタ16に負荷が集中することがなく、強制待機アイドル状態は処理効率を低下させるおそれがあるからである。
したがって、本実施例のマルチコアシステム100は、実施例3,4と比べ、無用な強制待機アイドル状態を抑制することができる。
図15は、コアAが実行フラグを設定する手順を示すフローチャート図の一例である。このフローチャート図はコアAがスレッドを切り替える毎に実行する。
スレッドが切り替わるとスケジューラ22はまず割り込み用タイマーを設定する(S210)。タイマーに設定される時間はスレッドの実行時間である。
ついで、コアAのフラグ操作部23は、メモリ占有フラグがセット状態かリセット状態かを判定する(S220)。メモリ占有フラグがセット状態の場合、実行するそのスレッドがメモリアクセス中であるので、実行フラグをセットする(S230)。
メモリ占有フラグがリセット状態の場合、実行するそのスレッドはメモリアクセス中でないので、実行フラグをセットしないで、スケジューラ22はコアAにそのスレッドを割り当てる(S240)。
ついで、スケジューラ22は割り込みの有無を判定し(S250)、コアAは割込みがあるまでスレッドを実行する。
割込みがあると、コアAのフラグ操作部23は、メモリ占有フラグがセット状態かリセット状態かを判定する(S260)。メモリ占有フラグがセット状態の場合、実行するそのスレッドがメモリアクセス中でも、スレッドの終了によりメモリアクセセスしなくなるので、実行フラグをリセットする(S270)。
メモリ占有フラグがリセット状態の場合、実行しているスレッドがメモリアクセス中でないので、実行フラグを操作しない。スケジューラ22は、次のスレッドをコアAに割り当てる(S280)。
以上のような実行フラグの操作により、メモリアクセセス中のスレッドが実行中の場合のみ実行フラグをセットすることができ、コアBは実行フラグを参照して無駄なく強制待機アイドル状態を設けることができる。
図16は、本実施例のマルチコアシステム100がスレッドをスケジュールする手順を示すフローチャート図の一例である。なお、図16において図12と同一ステップには同一の符号を付した。
図16のフローチャート図では、実行可能なスレッドがある場合の処理手順が図6と異なる。すなわち、実行可能なスレッドがある場合(S10のYes)、スケジューラ22は実行フラグがセット状態か否かを判定する(S112)。実行フラグがセット状態でない場合(S112のNo)、コアAはメモリアクセセス中でないことになるので、コアBは強制待機アイドル状態とならずにスレッドを実行する(S20〜S50)。
実行フラグがセット状態の場合(S112のYes)、コアBがメモリ14にアクセスしバスアービタ16に負荷が集中するおそれがあるので、コアBは強制待機アイドル状態となる(S120〜S140)。強制待機アイドル状態を挿入する際、スレッドの優先順位に応じて強制待機アイドル時間を計算してもよい。
以上説明したように、本実施例のマルチコアシステム100は、実施例1の効果に加え、他方のコアAがメモリアクセス中にのみコアBを強制待機アイドル状態とすることで、無用な強制待機アイドル状態を抑制できる。
11 CPU
12、12a、12b CPUコア
13、13a〜13g I/O
14 メモリ
15 バス
16 バスアービタ
17 I/Oデバイス
18 HDD
19 ドライブ装置
20 記憶媒体
21a、21b スレッドキュー
22 スケジューラ
23 フラグ操作部
24 アイドル状態挿入部
25 時間取得部
26 時間計算テーブル
100 マルチコアシステム
12、12a、12b CPUコア
13、13a〜13g I/O
14 メモリ
15 バス
16 バスアービタ
17 I/Oデバイス
18 HDD
19 ドライブ装置
20 記憶媒体
21a、21b スレッドキュー
22 スケジューラ
23 フラグ操作部
24 アイドル状態挿入部
25 時間取得部
26 時間計算テーブル
100 マルチコアシステム
Claims (8)
- 複数のCPUコア、メモリ及び入出力インターフェイスが共通のバスを介して接続され、バスの使用権をバスアービタが調停するマルチコアシステムにおいて、
プログラムの実行単位であるスレッドを各CPUコアに割り当てるスケジューラと、
第1のCPUコアによるスレッドの実行に伴い前記メモリにアクセス中か否かのアクセス情報を提供するメモリ状態提供手段と、
前記アクセス情報に基づき、第2のCPUコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、前記第2のCPUコアによるスレッドの実行前に、1つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を前記第2のCPUコアに割り当てるアイドル状態挿入手段と、
を有することを特徴とするマルチコアシステム。 - 前記アイドル状態を割り当てる時間は可変である、
ことを特徴とする請求項1記載のマルチコアシステム。 - スレッドの優先順位に対応づけて前記アイドル状態を維持する時間を記憶したアイドル状態維持時間記憶手段と、
前記アイドル状態維持時間記憶手段に記憶された、前記第2のCPUコアが次に実行するスレッドの優先順位に対応づけられている前記アイドル状態を維持する時間を読み出すアイドル時間決定手段と、を有し、
前記アイドル状態挿入手段は、前記アイドル時間決定手段が読み出した時間だけ前記第2のCPUコアにアイドル状態を割り当てる、
ことを特徴とする請求項2記載のマルチコアシステム。 - 前記入出力インターフェイスに接続されたデバイス、又は、複数のCPUコアのいずれかが、スレッドの実行に伴いメモリにアクセスする、
ことを特徴とする請求項1〜3いずれか1項記載のマルチコアシステム。 - 前記メモリ状態提供手段は、
メモリにアクセスした前記第1のCPUコアのスレッドがメモリにアクセス中のまま次のスレッドに切り替わる際、前記第1のCPUコアのスレッドがアクセス中でないという前記アクセス情報を提供し、
再度、前記第1のCPUコアに該スレッドが割り当てられるとアクセス中であるという前記アクセス情報を提供し、
前記アイドル状態挿入手段は、前記第1のCPUコアがメモリにアクセスするスレッドを実行中の場合のみ、前記第2のCPUコアによるスレッド実行前に、前記第2のCPUコアにアイドル状態を割り当てる、
ことを特徴とする請求項1〜4いずれか1項記載のマルチコアシステム。 - 複数のCPUコア、メモリ及び入出力インターフェイスが共通のバスを介して接続されたマルチコアシステムのスレッドスケジューリング方法において、
バスの使用権をバスアービタが調停するステップと、
スケジューラが、プログラムの実行単位であるスレッドを各CPUコアに割り当てるステップと、
メモリ状態提供手段が、第1のCPUコアによるスレッドの実行に伴い前記メモリにアクセス中か否かのアクセス情報を提供するステップと、
アイドル状態挿入手段が、前記アクセス情報に基づき、第2のCPUコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、前記第2のCPUコアによるスレッドの実行前に、1つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を前記第2のCPUコアに割り当てるステップと、
を有することを特徴とするスレッドスケジューリング方法。 - 複数のCPUコア、メモリ及び入出力インターフェイスが共通のバスを介して接続され、バスの使用権をバスアービタが調停するマルチコアシステムに、
プログラムの実行単位であるスレッドを各CPUコアに割り当てるステップと、
第1のCPUコアによるスレッドの実行に伴い前記メモリにアクセス中か否かのアクセス情報を提供するステップと、
前記アクセス情報に基づき、第2のCPUコアのスレッドが切り替わる毎にメモリにアクセス中か否かを判定し、アクセス中の場合、前記第2のCPUコアによるスレッドの実行前に、1つのスレッドの実行時間よりも短い時間だけ継続するアイドル状態を前記第2のCPUコアに割り当てるステップと、
を実行させることを特徴とするプログラム。 - 請求項7記載のプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008283476A JP2010113414A (ja) | 2008-11-04 | 2008-11-04 | マルチコアシステム、スレッドスケジューリング方法、プログラム、記憶媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008283476A JP2010113414A (ja) | 2008-11-04 | 2008-11-04 | マルチコアシステム、スレッドスケジューリング方法、プログラム、記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010113414A true JP2010113414A (ja) | 2010-05-20 |
Family
ID=42301947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008283476A Pending JP2010113414A (ja) | 2008-11-04 | 2008-11-04 | マルチコアシステム、スレッドスケジューリング方法、プログラム、記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010113414A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013029873A (ja) * | 2011-07-26 | 2013-02-07 | Mitsubishi Heavy Ind Ltd | タスクおよびリソースのスケジューリング装置及びその方法並びに制御装置 |
US9830195B2 (en) | 2013-09-30 | 2017-11-28 | Fujitsu Limited | Apparatus and method for controlling execution of processes in a parallel computing system |
-
2008
- 2008-11-04 JP JP2008283476A patent/JP2010113414A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013029873A (ja) * | 2011-07-26 | 2013-02-07 | Mitsubishi Heavy Ind Ltd | タスクおよびリソースのスケジューリング装置及びその方法並びに制御装置 |
US9830195B2 (en) | 2013-09-30 | 2017-11-28 | Fujitsu Limited | Apparatus and method for controlling execution of processes in a parallel computing system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7313381B2 (ja) | ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング | |
US10152438B2 (en) | Deferred inter-processor interrupts | |
US20190065243A1 (en) | Dynamic memory power capping with criticality awareness | |
US20090172428A1 (en) | Apparatus and method for controlling power management | |
JP4408263B2 (ja) | データ転送システムおよびデータ転送方法 | |
JP5653431B2 (ja) | マルチプロセッサシステム | |
JP5498505B2 (ja) | データバースト間の競合の解決 | |
JP2008513894A (ja) | スレッドライブロックユニット | |
US11061841B2 (en) | System and method for implementing a multi-threaded device driver in a computer system | |
JP2010113414A (ja) | マルチコアシステム、スレッドスケジューリング方法、プログラム、記憶媒体 | |
JP2005092780A (ja) | リアルタイムプロセッサシステム及び制御方法 | |
JP2012084123A (ja) | メモリ制御装置、メモリ制御方法 | |
JP4327081B2 (ja) | メモリアクセス制御回路 | |
JP5376042B2 (ja) | マルチコアプロセッサシステム、スレッド切り替え制御方法、およびスレッド切り替え制御プログラム | |
US20180181508A1 (en) | Semiconductor device | |
JP2008108126A (ja) | データ転送制御装置及びそのバスアクセス調停方法 | |
JP2004118300A (ja) | Dmaコントローラ | |
JPH11175464A (ja) | 調停装置および方法 | |
JP2004118298A (ja) | データ処理制御装置 | |
JP2004220309A (ja) | マルチプロセッサシステム | |
JP2000315187A (ja) | メモリ制御装置とメモリ制御方法とその記録媒体 | |
JP2004038333A (ja) | データ転送システム | |
JP2007058424A (ja) | メモリアクセス制御装置 | |
JP2012113487A (ja) | マルチスレッド処理装置 | |
JP2008097462A (ja) | 情報処理装置及び情報処理方法 |