JP5408356B2 - スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法 - Google Patents

スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法 Download PDF

Info

Publication number
JP5408356B2
JP5408356B2 JP2012528534A JP2012528534A JP5408356B2 JP 5408356 B2 JP5408356 B2 JP 5408356B2 JP 2012528534 A JP2012528534 A JP 2012528534A JP 2012528534 A JP2012528534 A JP 2012528534A JP 5408356 B2 JP5408356 B2 JP 5408356B2
Authority
JP
Japan
Prior art keywords
unset
group
thread
processor
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.)
Expired - Fee Related
Application number
JP2012528534A
Other languages
English (en)
Other versions
JPWO2012020478A1 (ja
Inventor
貴久 鈴木
浩一郎 山下
宏真 山内
康志 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012020478A1 publication Critical patent/JPWO2012020478A1/ja
Application granted granted Critical
Publication of JP5408356B2 publication Critical patent/JP5408356B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • G06F9/4887Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Description

この発明は、マルチコアプロセッサにおいてアプリケーションを実行させる際のスケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法に関する。
従来より、プロセッサの処理効率を上げるため、キャッシュを有効利用する技術が多数提供されている。あるプログラムを実行する場合、プロセッサには、タスクやスレッドなどプログラムを構成する所定の単位の処理が割り当てられる。そして、各プロセッサでは、割り当てられた処理が順次実行される。また、各プロセッサに備えられたキャッシュには、プロセッサが割り当てられた処理を実行する際に利用するデータが格納される。したがって、各プロセッサは、関連するデータを利用する処理が連続して割り当てられれば、一旦キャッシュに格納されたデータを連続して利用できる。
反対に、利用するデータが異なる処理が連続して割り当てられてしまうと、キャッシュに格納されているデータを連続して利用することができず、いわゆるキャッシュミスが発生してしまうことがあった。キャッシュミスが発生した場合、プロセッサは、処理の実行に必要なデータを外部のメモリから読み出し、必要に応じて新たなデータをキャッシュに格納するため、キャッシュを利用できた場合と比較して多くの処理時間を要してしまう。
そこで、あらかじめ、一旦キャッシュに格納したデータを使用する処理を連続して実行させるように、処理の実行順序を調整しておくことによって、キャッシュミスを削減し、プロセッサの処理性能を向上させる技術が開示されている(例えば、下記特許文献1参照。)。
さらに、プログラムを解析して、プログラム内部を複数のブロックに分割するとともに、各ブロック間のデータの入出力関係を解析することによって、利用するデータが共通する処理群を集めた処理ブロックを特定する技術も開示されている。例えば、特定された処理ブロックを実行する際に利用するデータは、関連性が高いため、一旦キャッシュに格納したデータを連続実行するようにスケジューリングされることによって、キャッシュミスの削減が期待できる(例えば、下記特許文献2,3参照。)。
特開2006−99156号公報 特開平10−134030号公報 特開2004−252728号公報
しかしながら、従来技術を利用して、キャッシュミスの発生を抑えるには限界があった。例えば、各処理ブロックの入出力関係が、1対1ではなく1つの処理ブロックに複数の処理ブロックのデータを必要とする場合は、同じ複数の処理ブロックを実行させなければならないため、同じ処理ブロックに属する処理だけを連続実行させることはできない。また、依存関係が複雑なプログラムを実行させる場合や、優先度の高い処理や外部処理の割り込みが発生する場合にも、連続実行していた処理とは異なるデータを利用する可能性が高く、キャッシュミスの発生は避けられなかった。
図23は、従来のプロセスの連続実行を示す説明図である。図23は、従来の技術を利用して各プロセスを連続実行させた場合のCPUの動作の一例を表している。従来の技術を利用して、同じ処理ブロックに属するプロセス4,8,15,19,25,29が連続実行するように設定されている。
ところが、実際には図23に例示したように、プロセス4の直後に外部割り込みが発生し(ステップS2301)、さらに、内部的な割込処理も発生してしまっている(ステップS2302)。したがって、プロセス4を実行するためにキャッシュに格納されたデータは、ステップS2301,S2302の処理によって汚されてしまい(他のデータが格納された状態)、プロセス8を実行する際にキャッシュを読み込むとキャッシュミスを起こしてしまう。
同様に、プロセス8,15の間には割込処理こそ発生していないが、同期待ちのため待機時間が発生し、待機時間には低優先度のプロセスが実行される(ステップS2303)。そして、プロセス15,19の間には、高優先度の別プロセスが横入りして実行されている(ステップS2304)。結果としてプログラムを解析して連続実行するように設定しても、実際には連続実行されないことも多く、キャッシュミスは、従来と同様に発生する可能性があった。
近年広く普及しているマルチコアプロセッサを利用した場合、図23のステップS2301〜S2304のような設定されていないプロセスを特定のプロセッサに実行させることによって、割り込みを防ぐことができる。ところが、マルチコアプロセッサの場合、1つのプログラムを効率的に実行するため、並列実行可能な処理ブロックはそれぞれ実行対象となるプロセッサに割り当てられる。
したがって、あるアプリケーションに含まれる処理1がプロセッサ#0によって実行されており、処理1に先行する他の処理の一つが別のプロセッサ(例えば、プロセッサ#1)で実行されている場合がある。そして、プロセッサ#0において、他に実行可能な処理ブロックがない状態になると、プロセッサ#0は、プロセッサ#1で実行されている先行する処理が終了するまで待機しなければならない。
通常のオペレーティングシステムでは、あるアプリケーションの実行中に実行中のアプリケーションとは無関係な複数のアプリケーションが同時に実行されていることが多い。したがって、オペレーティングシステムでは、上述のプロセッサ#0のように待機時間が発生するとプロセッサ#0の機能を有効に利用するため、他のアプリケーションの処理を行う。
上述のような場合、アプリケーション単位では、共有するデータを利用する処理が連続して実行されるように見えるが、実際には待機時間の間に別のアプリケーションの処理が実行されており、キャッシュミスが増加するという問題があった。
また、待機時間に他のアプリケーションを実行しないように設定することも可能であるが、結果として待機時間の間に無条件にプロセッサの動作を停止させることになり、システム全体の性能を低下させてしまうという問題があった。
本開示技術は、上述した従来技術による問題点を解消するため、待機時間の発生を減少させてキャッシュを効率的に利用できるスケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、本開示技術は、マルチコアプロセッサ内の特定のプロセッサが、後続処理群が共通するスケジューリングの未設定処理群を、対象プログラムを構成する処理群の中から検出し、検出された未設定処理群の未設定処理ごとに、前記未設定処理に対する先行処理群のうち、前記処理群を同一または関連するアクセス対象データを共有するグループに分類したグループ群の中の前記未設定処理の所属グループに属する先行処理を検出し、前記未設定処理ごとに、前記未設定処理を、マルチコアプロセッサの中の検出された先行処理が割り当てられているプロセッサに割り当て、前記未設定処理ごとに、前記未設定処理に対する先行処理群がすべて終了する実行終了時刻から、前記未設定処理の実行時間の経過時刻を算出し、割り当てられた未設定処理ごとに、前記未設定処理の割当先のプロセッサでの実行開始時刻を、算出された最も遅い経過時刻から前記未設定処理の実行時間分さかのぼった時刻に設定する。
本スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法によれば、待機時間の発生を減少させてキャッシュを効率的に利用できるという効果を奏する。
本実施の形態にかかるスケジューリング処理の一例を示す説明図である。 マルチコアプロセッサシステムのハードウェア構成の一例を示すブロック図である。 マルチコアプロセッサシステムによるキュー割り付け例を示す説明図である。 依存情報付きプログラムの一例を示す説明図である。 スケジューラの機能的構成の一例を示すブロック図である。 スケジューリング処理の手順を示すフローチャートである。 スケジューリング処理を利用したスケジューリング例を示す説明図である。 実施例におけるプロセッサ割当処理の手順を示すフローチャートである。 実施例におけるスケジューリング処理の手順を示すフローチャートである。 実施例におけるグループ決定処理の手順を示すフローチャートである。 実施例における遅延時間設定処理の手順を示すフローチャートである。 スレッド群その1の構成を示す説明図である。 スレッド群その1についてのキュー割り付け例を示す説明図である。 スケジューリング処理のルート例を示す説明図である。 グループ決定処理のルート例を示す説明図である。 遅延時間設定処理のルート例を示す説明図である。 スレッド群その1の実行結果(プロセッサ4つ)を示す説明図である。 スレッド群その2の構成を示す説明図である。 スレッド群その2についてのキュー割り付け例を示す説明図である。 スレッド群その2の実行結果(プロセッサ4つ)を示す説明図である。 プロセッサ数が少ない場合のスレッド群その1についてのキュー割り付け例を示す説明図である。 プロセッサ数の少ないマルチコアプロセッサにおけるスレッド群その1の実行結果(プロセッサ2つ)を示す説明図である。 従来のプロセスの連続実行を示す説明図である。
以下に添付図面を参照して、この発明にかかるスケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法の好適な実施の形態を詳細に説明する。
図1は、本実施の形態にかかるスケジューリング処理の一例を示す説明図である。本実施の形態では、従来の連続実行の間に発生していた待機時間の発生回数を削減することによって、キャッシュミスの低減とプロセッサの処理効率の維持とを両立させる。
具体的には、下記の3つの処理によってキャッシュミスの低減とプロセッサの処理効率の維持とを両立させている。
(1)実行タイミングを調整して同一プロセッサにおいて前後の処理を連続実行させる。
(2)連続実行に邪魔な処理を特定のプロセッサにまとめて実行させる。
(3)待機時間が発生しても短い時間であれば他のプロセスを実行対象に入れない。
従来の技術と同様に、本実施の形態は、マルチコアプロセッサによって実行させる対象プログラムに含まれる処理群を、事前に関連するデータを利用する処理ごとのグループに分けている。例えば、処理1〜10は、実行時に利用するデータが関連する処理ごとにグループ1〜3に分けられている。したがって、図1のように、マルチコアプロセッサシステムを構成するCPU#0〜#3の4つのプロセッサのうち、CPU#1には、グループ1に属する処理が割り当てられ、CPU#2にはグループ2に属する処理が割り当て、CPU#3にはグループ3に属する処理が割り当てられている。
本実施の形態は、さらに、各プロセッサにおいて処理を実行する際のタイミングを、前後の処理同士が連続して実行できるように調整する(上記(1)の処理)。具体的には、本実施の形態では、実行時に利用するデータが共通する処理、すなわち、一旦キャッシュに格納したデータを連続して使用できる処理の実行時間を、設計段階であらかじめ見積もっておく。さらに、本実施の形態では、各処理の実行時間と、各処理ブロックの入出力関係と、データを共有するグループの情報とに基づいて、待機時間の発生回数を極力減らすように処理を実行するタイミングを調整する。
また、本実施の形態では、外部割り込みや内部割り込みなど連続実行に邪魔な処理を特定のプロセッサにまとめることによって、スケジューラがスケジューリングした順序で各処理が実行される(上記(2)の処理)。例えば、図1の場合、CPU#0は、連続実行に邪魔な処理を実行するための専用のプロセッサとして利用される。プロセッサ#0には、外部および内部の割込処理の他に、いずれのグループにも属していない処理や、グループに関する情報が付与されていない処理が、実行対象の処理として割り当てられる。したがって、プロセッサ#1〜#3に割込処理が割り当てられるような事態を防ぎ、プロセッサ#1〜#3は、スケジューリング通りのタイミングで指定された処理を実行する。
また、本実施の形態でも、他のプロセッサによって依存関係のある処理が実行されている場合、処理が終了するまでの間、待機時間が発生することもある。しかしながら、本実施の形態の場合、従来のように待機時間に漏れなく他のアプリケーションのプロセスを実行させるのではなく、待機時間の長さが規定値よりも短いか否かを判断して他のアプリケーションの処理を実行するか否かを判断する。具体的には、プロセッサは、待機時間が短い時間であれば、他のアプリケーションのプロセスを実行させない(上記(3)の処理)。したがって、待機時間が発生しても、各プロセッサが、毎回他のプロセスを実行することはない。結果として、他のプロセスの実行によるキャッシュミスの発生回数が削減される。また、待機時間が長ければ待機時間を利用して他のプロセスを実行するため、プロセッサの処理効率を維持することもできる。
以上説明したように、本実施の形態にかかるスケジューリング処理を適用することによって、一旦キャッシュに格納したデータを利用する処理を連続して実行させるため、キャッシュミスの回数が削減される。したがって、キャッシュが有効活用され、プロセッサの処理性能を向上させることができる。以下に、本実施の形態にかかるスケジューリング処理を実現するスケジューラの具体的な構成や処理内容について説明する。
(マルチコアプロセッサシステムのハードウェア構成)
図2は、マルチコアプロセッサシステムのハードウェア構成の一例を示すブロック図である。図2において、マルチコアプロセッサシステム100は、マルチコア201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、I/F(Interface)209と、キーボード210と、マウス211と、スキャナ212と、プリンタ213と、を備えている。また、各構成部はバス220によってそれぞれ接続されている。
ここで、マルチコア201は、n個のCPU(Central Processing Unit)を備え、マルチコアプロセッサシステム100の全体の制御を司る。ROM202は、ブートプログラムや、スケジューリング処理を実現するためのスケジューラなどの各種のプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御にしたがって磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
光ディスクドライブ206は、CPU201の制御にしたがって光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)209は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク214に接続され、このネットワーク214を介して他の装置に接続される。そして、I/F209は、ネットワーク214と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F209には、例えばモデムやLANアダプタなどを採用することができる。
キーボード210は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス211は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ212は、画像を光学的に読み取り、マルチコアプロセッサシステム100内に画像データを取り込む。なお、スキャナ212は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ213は、画像データや文書データを印刷する。プリンタ213には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。
図3は、マルチコアプロセッサシステムによるキュー割り付け例を示す説明図である。図3のようにマルチコアプロセッサシステム100は、各CPUにスケジューリング処理用の専用プログラムであるスケジューラ200を用意している。そして、マルチコアプロセッサシステム100は、4つのプロセッサの中の特定のプロセッサのスケジューラ200を利用して、対象プログラムを構成する処理群を、各処理を実行させるプロセッサにそれぞれ割り付ける。
図3では、各CPUに用意されたスケジューラ200のうち、CPU#0のスケジューラ0が、対象プログラムを構成する処理群を各プロセッサに割り付けている。なお、スケジューラ0によるスケジューリング結果(どのプロセッサにおいてどのタイミングで実行するか)は、一旦、プロセッサごとのレディーキューに格納される。
図3に例示したマルチコアプロセッサシステム100の場合、共有メモリ300に各プロセッサのレディーキューが用意されている。共有メモリ300は、例えば、図2のROM202、RAM203、磁気ディスク205や光ディスク207などを用いて実現される。また、一旦レディーキューに配置された各処理は、各CPUのスケジューラ200によって実行される。
(依存情報付きプログラムのデータ構成)
図4は、依存情報付きプログラムの一例を示す説明図である。本実施の形態では、プログラムを構成する処理群の各処理に依存情報が付与されている。依存情報のデータ構成に特に限定はないが、情報の内容として、各処理が属するグループ、各処理と依存関係にある先行処理、各処理と依存関係にある後続処理、さらに、各処理の実行時間が含まれている。
図4では、処理の単位の一例としてスレッド400ごとに付与された依存情報であるスレッド情報401のデータ構成について説明する。スレッド情報401には下記の各情報が含まれている。
スレッドID:スレッドの識別情報
先行のスレッドIDリスト:依存関係のある先行スレッドの識別情報
後続のスレッドIDリスト:依存関係のある後続スレッドの識別情報
連続実行グループID:キャッシュミスなく連続実行できるグループの識別情報
推定実行時間:実行に要する時間の推定値
経過時間:実行時の経過時間(実際の実行状況に応じて変化する)
上述のようなスレッド情報401を利用することによって、スケジューラ200は、スレッドID0〜ID7の実行順序と依存関係とを特定することができる。
(スケジューラの機能的構成)
図5は、スケジューラの機能的構成の一例を示すブロック図である。スケジューラ200は、第1検出部501と、第2検出部502と、割当部503と、算出部504と、設定部505と、を含む構成である。この制御部となる機能(第1検出部501〜設定部505)は、具体的には、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをマルチコア201の中の特定のCPUに実行させることにより、または、I/F209により、その機能を実現する。また、メモリ500は、対象プログラムを格納するため、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置や外部の記憶装置によって実現する。
第1検出部501は、対象プログラムを構成する処理群の中から特定の条件を満たす処理群を検出する機能を有する。具体的には、第1検出部501は、メモリ500に格納されている対象プログラムの中から、後続処理群が共通するスケジューリングの未設定処理群を検出する。スケジューリングの未設定処理群とは、対象プログラムを構成する処理群のうち、マルチコアプロセッサシステム100によって未実行の処理とスケジューリングによって実行タイミングが設定済の処理とを除いた処理である。
例えば、ある未設定処理(処理4,5,6)について、処理4の後続処理として処理10,11が設定され、処理5の後続処理として処理10,11が設定され、処理6の後続処理として処理9,12が設定されている場合について説明する。上述のような設定がなされている場合、第1検出部501は、未設定処理群として処理4,5を検出する。なお、検出された未設定処理群は、一旦、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
第2検出部502は、第1検出部501によって検出された未設定処理群中から特定の条件を満たす処理群を検出する機能を有する。具体的には、第2検出部502は、未設定処理ごとに、同じグループに属する先行処理を検出する。
例えば、ある未設定処理(処理5)に着目した場合、依存情報には先行処理として処理1,2,3が設定されている。そして、処理5がグループ1に属している場合、第2検出部502は、処理1,2,3のうち、グループ1に属している処理を検出する。
また、未設定処理群を構成する未設定処理の内容によっては、グループ1に属している処理が複数含まれている場合もあるが、そのような場合、第2検出部502は、すべての処理を検出する。反対に、未設定処理群にグループ1に属している処理がない場合もある。そのような場合、第2検出部502は、先行処理がないという検出結果を得る。なお、検出結果は、一旦、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
割当部503は、未設定処理ごとに、各未設定処理を実行するプロセッサに割り当てる機能を有する。具体的には、割当部503は、未設定処理を、マルチコアプロセッサ201の中の各プロセッサのうち、第2検出部502によって検出された先行処理が割り当てられているプロセッサに割り当てる。
例えば、ある未設定処理(処理5)の先行処理として、第2検出部502によって同じグループ1に属する処理1が検出されたとする。すると、割当部503は、処理5を処理1と同じプロセッサによって実行させるように割当処理を行う。すなわち、処理1がプロセッサ#2に割り当てられていた場合、割当部503は、処理5をプロセッサ#2に割り当てる。
また、処理5を対象とした割当処理の際に、既に先行処理となる処理1が終了している可能性もある。したがって、割当部503は、過去の割当処理を参照して処理5を実行させるプロセッサを割り当てる。なお、割当結果は、一旦、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
算出部504は、未設定処理ごとに、実際に実行させた場合の処理終了時刻を算出する機能を有する。具体的には、算出部504は、未設定処理に対する先行処理群がすべて終了する実行終了時刻から、未設定処理の実行時間の経過時刻を算出する。
例えば、ある未設定処理(処理4,5)について処理終了時刻を算出する場合、各未設定処理の処理開始時刻は、先行処理の終了時刻のうち最も遅い時刻になる。そして、処理4の先行処理の終了時刻のうち最も遅い時刻に処理4を開始させた場合に、処理4の実行時間(例えば、図4のスレッド情報401に設定されている推定実行時間)を経過した時刻が、処理4の処理終了時刻となる。同様に、算出部504は、処理5についても処理終了時刻を算出する。なお、算出結果は、一旦、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
設定部505は、割当部503によっていずれかのプロセッサに割り当てられた未設定処理ごとに、未設定処理の割当先のプロセッサでの実行開始時刻を設定する機能を有する。具体的には、設定部505は、算出部504によって算出された最も遅い経過時刻から未設定処理の実行時間分さかのぼった時刻を未設定処理の実行開始時刻に設定する。
例えば、算出部504によって、処理4の処理終了時刻T4と処理5の処理終了時刻T5とが算出されたとする。そしてT4>T5(T4の方がより遅い時刻)の場合、処理4,5は共にT4で終了するように実行開始時刻を設定する。したがって、設定部505は、T4から処理4の実行時間分さかのぼった時刻を処理4の実行開始時刻に設定する。同様に、設定部505は、T4から処理5の実行時間分さかのぼった時刻を処理5の実行開始時刻とする。
上述の手順によって、T4の時刻には、処理4,5が同時に終了する。そして、第1検出部501の検出の条件に挙げたように、処理4,5は後続処理群が共通している。したがって、後続処理群は、先行処理が同時に終了しているため、T4の時刻に先行処理(ここでは、処理4,5)と連続して実行することができる。
すなわち、設定部505は、未設定処理の先行処理群がすべて終了する実行終了時刻(例えばT4)が存在する場合には、実行終了時刻T4を、未設定処理の実行開始時刻に設定する。
以上説明したように、設定部505は、ある未設定処理について、同一のプロセッサで実行される先行処理が終了した後、即座に実行可能となる場合には、未設定処理と先行処理が連続実行されるように上述の未設定処理の実行開始時刻を設定する。反対に、同一のプロセッサで実行される先行処理が終了した後、即座に実行可能ではない場合、設定部505は、未設定処理と後続処理とが連続実行されるように上述の未設定処理の実行開始時刻を設定する。
以上説明した設定例は、最も基本的な手順であるが、未設定処理群は、先行処理や後続処理の設定、さらに、所属するグループの設定に応じて様々な動作状況が想定される。したがって、以下には、動作状況の違いに応じた、割当部503および設定部505の処理の違いについて説明する。
まず、第2検出部502が、未設定処理の所属グループに属する先行処理を検出できないような動作状況について説明する。このような動作状況の場合、設定部503は、先行処理が検出されなかった未設定処理を、マルチコア201の中の先行処理が割り当てられていないプロセッサに割り当てる。すなわち、設定部503は、何の処理も割り当てられていない空き状態のプロセッサを割り当てる。
さらに、第2検出部502では、上述のように未設定処理の所属グループに属する先行処理が検出されず、空きのプロセッサもないような動作状況も想定される。このような動作状況の場合、設定部503は、マルチコア201のうち、割り当て済の先行処理の実行時間が最短となるプロセッサに未設定処理を割り当てる。すなわち、設定部505は、処理負荷の一番軽いプロセッサに未設定処理を割り当てる。
また、他の例として、未設定処理に実行順序に関する優先度が設定されている場合がある。優先度が設定されている場合、設定部503は、未設定処理のうち、優先度が高く設定されている未設定処理を優先的に、第2検出部502によって検出された先行処理が割り当てられているプロセッサに割り当てる。
また、他の例として、対象プログラムおよび対象プログラム以外のプログラムによって発生した割込処理が未設定処理となるような動作状況が想定される。このような動作状況の場合、設定部503は、第2検出部502によって未設定処理の所属グループに属する先行処理が検出されなかったプロセッサに割り当てる。
すなわち、割当部503は、割込処理によって発生した未設定処理を、各グループに属する先行処理が割り当てられているプロセッサとは異なるプロセッサに割り当てる。なお、設定部503は、すべてのプロセッサに各グループに属する先行処理が割り当てられている場合には、マルチコア201のうち、割り当て済の先行処理の実行時間が最短となるプロセッサに、割込処理によって発生した未設定処理を割り当てる。
割当部503は、スレッド情報401などの後続処理群および先行処理群を特定する情報が含まれていない処理を、第2検出部502によって先行処理が検出されなかったプロセッサに割り当てる。すなわち、設定部503は、先行処理の割り当てられていない、空き状態のプロセッサに、スレッド情報401が付与されていない処理を割り当てる。ここでも、空き状態のプロセッサがない場合、設定部503は、マルチコアプロセッサ201のうち、割り当て済の先行処理の実行時間が最短となるプロセッサに、スレッド情報401が付与されていない処理を割り当てる。
(スケジューリング処理の手順)
図6は、スケジューリング処理の手順を示すフローチャートである。図6のフローチャートは、スケジューラ200が、実行対象となるアプリケーションに含まれる処理群をマルチコア201の各プロセッサに実行させるタイミングを設定するまでの手順を示している。図6の各処理を実行することによって、スケジューラ200は、実行タイミングが設定されていない未設定処理を依存関係のある先行処理もしくは後続処理と連続して実行できるようなタイミングで各処理を実行させることができる。
図6において、スケジューラ200は、第1検出部501によって、メモリ500に格納された実行対象となる対象プログラムを構成する処理群の中から、未設定処理群があるか否かを判断する(ステップS601)。ステップS601において、未設定処理群があると判断されるまで待機状態とし(ステップS601:Noのループ)、未設定処理群があると判断されると(ステップS601:Yes)、スケジューラ200は、第1検出部501によって未設定処理を検出する(ステップS602)。
そして、スケジューラ200は、ステップS602において検出した未設定処理にプロセッサが割り当てられているか否かを判断する(ステップS603)。ステップS603において、未設定処理にプロセッサが割り当てられていないと判断された場合(ステップS603:No)、スケジューラ200は、未設定処理を実行させるプロセッサの割手処理を行う。具体的には、スケジューラ200は、割当部503によって実行中のプロセッサに対する第2検出部502の検出結果に応じて各処理をプロセッサに割り当てる(ステップS604)。
ステップS603において、未設定処理にプロセッサが割り当てられていると判断された場合(ステップS603:Yes)、割当部603における割当処理は必要ないため、スケジューラ200は、そのままステップS605の処理に移行する。
次に、スケジューラ200は、未設定処理の先行処理の終了時刻に基づいて、先行処理の終了後に連続実行できるか否かを判断する(ステップS605)。連続実行できるとは、同じプロセッサによって実行されている先行処理が終了した後に、待機時間を挟むことなく未設定処理を実行できる状態を意味する。すなわち、対象となるプロセッサでは、他のプロセッサによって実行されている先行処理が終了している状態である。
ステップS605において、連続実行できないと判断された場合(ステップS605:No)、スケジューラ200は、未設定処理が後続処理と連続実行できるようにスケジューリングを行う。したがって、スケジューラ200は、まず、第1検出部501によって検出された後続処理が共通する未設定処理について、算出部504によって処理終了時刻を算出する(ステップS606)。
さらに、スケジューラ200は、ステップS606において算出された処理終了時刻のうち最も遅い処理終了時刻を抽出する(ステップS607)。さらに、スケジューラ200は、ステップS607において抽出された処理終了時刻に各未設定処理が終了するような実行開始時刻を算出する(ステップS608)。
その後、スケジューラ200は、設定部505によって未設定処理に対して、ステップS608において算出された実行開始時刻に処理を開始するように設定し(ステップS609)、一連の処理を終了する。
一方、ステップS605において、連続実行できると判断された場合(ステップS605:Yes)、スケジューラ200は、未設定処理が先行処理と連続実行できるようにスケジューリングを行う。したがって、スケジューラ200は、設定部505によって未設定処理に対して、先行処理終了後に待機時間なく連続実行するように設定し(ステップS610)、一連の処理を終了する。
図7は、スケジューリング処理を利用したスケジューリング例を示す説明図である。図7のスケジューリング例701は、従来のスケジューリング処理を実行した場合を表し、スケジューリング例702は、スケジューラ200のスケジューリング処理を実行した場合を表している。なお、スケジューリング例701,702の場合も、CPU#0ではグループ1に属する処理が実行され、CPU#1ではグループ2に属する処理が実行され、CPU#2ではグループ3に属する処理が実行される。
スケジューリング例701が表す従来のスケジューリング処理の場合、他のプロセッサによって実行されている先行処理の終了時刻のうち最も遅い時刻(t1〜t4)に到達するまで、各処理には毎回待機時間が発生していた。
一方、スケジューリング例702が表すスケジューラ200のスケジューリング処理の場合、各処理は、少なくとも、先行処理、もしくは、後続処理のいずれかと連続実行するようにスケジューリングされている。したがって、同じ数の処理を実行する場合であっても、待機時間の発生回数が大幅に削減される。
さらに、待機時間が発生した場合であっても、待機時間が規定値よりも短ければ、待機時間に他のアプリケーションの処理を実行するようなスケジューリングが行われることもない。したがって、各プロセッサは、一旦キャッシュに格納されたデータを長く利用するため、それぞれ処理効率を上げることができる。
(実施例)
次に、スケジューラ200の具体的な実施例について説明する。本実施例では、処理の単位としてスレッドを実装する。スレッドとはオペレーティングシステムにおける最小の処理の管理単位である。通常、スレッドにはオペレーティングシステムが管理するための管理情報として、スレッドの識別情報や、起動時刻、稼働時間、優先順位といった情報が付与されている。
本実施例では、スレッド情報として、上述のような通常の管理情報に加えて、先行するスレッドとなる先行スレッドについての識別情報のリストと、後続のスレッドとなる後続スレッドについての識別情報のリストと、グループの識別情報と、スレッドの実行時間(例えば、予想処理時間)が付与されている。
ここで、先行スレッドとはスレッド同士の入出力関係で、このスレッドの入力となるデータを生成するスレッドであり、先行するスレッドがすべて終了すると、対象となるスレッドが実行可能になる。後続スレッドは逆にこのスレッドが生成するデータを入力とするスレッドとなる。
また、グループの識別情報は、対象プログラムを解析することによって特定された、関連データを共有するスレッドの集団を示す情報である。グループの識別情報が同じスレッドを同一のプロセッサで連続して実行することで、所定のデータが格納されたキャッシュを利用し続けることができるため、キャッシュミスを起こすことなく、キャッシュの利用効率を上げることができる。
また、スレッドの実行時間については、対象プログラムの解析結果を利用して設定してもよく、事前にスレッドを実行してその時の処理時間とキャッシュのミス率、スケジューラ200を適用することで期待できるキャッシュのミス率から求めることができる。したがって、以降の本実施例の説明では、スレッドの実行時間を「予想処理時間」と呼ぶ。
そして、本実施例では、マルチコアプロセッサシステム100によって実行するアプリケーション毎にスケジューラ200によるスケジューリング処理を適用するが、本手法が適用されていないアプリケーションでは、スレッド情報401が付与されていない従来通りのスレッドにより構成されるものとする。
一方で、スケジューラ200によるスケジューリング処理を適用したアプリケーションは、複数のスレッドで構成されているものとする。さらに、複数のスレッドのうちの幾つか、もしくは、すべてのスレッドは、先行スレッドのリストと後続スレッドのリストのいずれか、もしくは、両方と予想処理時間の情報と、所属するグループの識別情報を持つものとする。
以降、先行のスレッドのリストと後続のスレッドのリストのいずれかもしくは両方と予想処理時間の情報を持つスレッドを「依存情報を持つスレッド」とし、従来のスレッドを「依存情報を持たないスレッド」とする。また、グループの識別情報を持つスレッドをグループに属するスレッド、同一のグループ識別情報を持つスレッドを同一のグループに属するスレッドとする。
通常、マルチコアプロセッサシステム100を起動させると、オペレーティングシステムが動作してアプリケーションを起動する。さらにオペレーティングシステムは、アプリケーション内でメインとなるスレッドを起動させる。起動の際に、複数スレッドがある場合はメインとなるスレッドからスレッドを起動させる。そして、起動させたメインとなるスレッドからさらに、他のスレッドを起動といった形で順次スレッドが起動される。また、アプリケーション内に依存情報が付与されたスレッドがある場合、依存情報が付与されていないいずれかのスレッドから一括して依存情報を持つスレッドが起動される。
オペレーティングシステムは、新たにスレッドが起動されると、スレッドの割当先プロセッサを決定してそのプロセッサに対応するレディーキューという実行可能なスレッド群を格納する共有メモリ300内のデータ構造にスレッドを追加する。
依存情報を持つスレッドが新たに起動された場合、スケジューラ200は、以下の図8に示した割当処理によって同一のグループに属するスレッドを同一のプロセッサに割り当てる。また、割当処理では、同一のグループに属するスレッドを同一のプロセッサに割り当てるのみならず、各プロセッサでの処理量がなるべく均一になるようにスレッドの割当先を決定することができる。
(プロセッサの割当処理)
図8は、実施例におけるプロセッサの割当処理の手順を示すフローチャートである。図8のフローチャートは、スケジューラ200が、マルチコアプロセッサによってアプリケーションを構成するスレッドを各プロセッサに割り当てるまでの手順を示している。図8の各処理を実行することによって、グループ情報が共通するスレッドを同一のプロセッサによって実行されるように割り当てることができる。
さらに、実施例では、各グループの実行に要する時間を参照して、処理時間の長いグループに含まれるスレッドから順番に割り付けるため、効率的に各スレッドが実行できるような割り当てが可能となる。
図8において、スケジューラ200は、まず、グループ毎に予想処理時間の合計を算出する(ステップS801)。続いて、スケジューラ200は、未割り当てのグループがあるか否かを判断する(ステップS802)。
ステップS802において、未割り当てのグループがあると判断された場合(ステップS802:Yes)、スケジューラ200は、割り当てられたスレッドの予想処理時間の合計が最小のプロセッサを選択する(ステップS803)。その後、スケジューラ200は、予想処理時間の合計が最大のグループの全スレッドをステップS803において選択したプロセッサに割り当てる(ステップS804)。
以上説明したステップS802〜S804では、未割り当てのグループに対して実際の処理を実行させるためのプロセッサを割り当てるための処理を行っている。ステップS802によって未割り当てのグループがないと判断されると、次に説明するスレッドを対象として、各プロセッサに割り当てを行うための処理に移行する。
ステップS802において、未割り当てのグループがないと判断された場合(ステップS802:No)、スケジューラ200は、未割り当てのスレッドがあるか否かを判断する(ステップS805)。すなわち、スケジューラ200は、ステップS805によって、各プロセッサに割り付けられたグループに属する各スレッドについての実行対象となるプロセッサの割り当てが可能か否かの判断を行っている。
ステップS805において、未割り当てのスレッドがあると判断されると(ステップS805:Yes)、スケジューラ200は、各プロセッサの中から、割り当てられたスレッドの予想処理時間の合計が最小のプロセッサを選択する(ステップS806)。
さらに、スケジューラ200は、未割り当てのスレッドの中で予想処理時間が最大のスレッドを、ステップS806によって選択されたプロセッサに割り当てる(ステップS807)。その後、スケジューラ200は、ステップS805によって未割り当てのスレッドがあると判断されると、ステップS806,S807の処理を繰り返し、未割り当てのスレッドがないと判断されると(ステップS805:No)、一連の割当処理を終了する。
以上説明した割当処理の後、スレッドが新たにレディーキューに追加されるか、スレッドの終了などによりスレッドがレディーキューから削除されると、オペレーティングシステムではスケジューラ200によってスレッドのスケジューリング処理を実行させる。
従来のスケジューリングにおいて、スケジューラ200は、スレッドの優先順位を見て行うが、本実施例の場合、同一グループに属するスレッドをなるべく連続して実行させるため、後述する図9のスケジューリング処理を行う。なお、各プロセッサにおけるスケジューリング処理はレディーキュー毎に対応するスケジューラ200によって行われる。
また、各プロセッサには、現在実行しているグループの識別情報を格納するデータ構造(実行グループ情報)と、現在実行中のスレッドが時間調整をしたかを示すフラグ(no_waitフラグ)とがレディーキューに設定されている。
<スケジューリング処理の手順>
図9は、実施例におけるスケジューリング処理の手順を示すフローチャートである。図9のフローチャートは、スケジューラ200による各プロセッサに割り当てられたスレッドの実行タイミングの設定手順を示している。図9の各処理を実行することによって、スレッド間の待機時間の発生を軽減させることができる。
図9において、スケジューラ200は、まず、各プロセッサによって実行中のスレッドについてのグループ情報が設定されているか否かを判断する(ステップS901)。ステップS901において、グループ情報が設定されていないと判断された場合(ステップS901:No)、スケジューラ200は、レディーキューから最高優先度のスレッドを選択する(ステップS902)。そして、スケジューラ200は、ステップS902による選択スレッドに依存情報がなく、グループに属するスレッドよりも優先度が高いか否かを判断する(ステップS903)。
ステップS903において、選択スレッドに依存情報がなく、グループに属するスレッドよりも優先度が高いと判断された場合(ステップS903:Yes)、スケジューラ200は、選択スレッドを実行させて(ステップS904)、スケジューリングを終了する。一方、ステップS903において、選択スレッドに依存情報がある、または優先度が高くないと判断された場合(ステップS903:No)、スケジューラ200は、グループ内に実行可能なスレッドがあるか否かを判断する(ステップS905)。
ステップS905において、グループ内に実行可能なスレッドがあると判断された場合(ステップS905:Yes)、スケジューラ200は、実行可能なスレッドにno_waitフラグが設定されているか否かを判断する(ステップS906)。
ステップS906において、no_waitフラグが設定されていると判断された場合(ステップS906:Yes)、スケジューラ200は、no_waitフラグを解除する(ステップS907)。そして、スケジューラ200は、グループ内の実行可能なスレッドのうち、最も予想処理時間の大きなスレッドを選択して実行させ(ステップS908)、スケジューリングを終了する。
ステップS906において、no_waitフラグが設定されていないと判断された場合(ステップS906:No)、スケジューラ200は、遅延時間処理を行って(ステップS909)、遅延起動されるように設定した後、ステップS915の処理に移行する。
一方、ステップS905において、グループ内に実行可能なスレッドがないと判断された場合(ステップS905:No)、スケジューラ200は、遅延起動が設定されているスレッドがあるか否かを判断する(ステップS910)。ステップS910において、遅延起動が設定されているスレッドがあると判断された場合(ステップS910:Yes)、スケジューラ200は、ステップS915の処理に移行する。
一方、ステップS910において、遅延起動が設定されているスレッドがないと判断された場合(ステップS910:No)、スケジューラ200は、さらに、スレッドにno_waitフラグが設定されているか否かを判断する(ステップS911)。ステップS911において、no_waitフラグが設定されていると判断された場合(ステップS911:Yes)、スケジューラ200は、Idleスレッドを実行させ(ステップS912)、一連の処理を終了する。
ステップS911において、no_waitフラグが設定されていないと判断された場合(ステップS911:No)、スケジューラ200は、グループ決定処理(ステップS913)と、遅延時間設定処理を行い(ステップS914)、ステップS915の処理に移行する。
遅延時間設定処理を行った、もしくは、ステップS910において、遅延起動が設定されているスレッドがあると判断された場合、スケジューラ200は、遅延起動までの最小の時間が規定値以下か否かを判断する(ステップS915)。ステップS915において、スケジューラ200は、遅延起動までの待機時間に他のアプリケーションを構成するスレッドを実行するか否かを判断している。
ステップS915において、最小の時間が規定値以下であると判断された場合(ステップS915:Yes)、スケジューラ200は、Idleスレッドを実行させて(ステップS916)、一連の処理を終了する。一方、ステップS915において、最小の時間が規定値以下ではないと判断された場合(ステップS915:No)、スケジューラ200は、レディーキューから依存情報のない最高優先度のスレッドを選択して実行させ(ステップS917)、一連の処理を終了する。
次に、ステップS913のグループ決定処理と、ステップS909およびS914の遅延時間設定処理との詳細な手順について説明する。
<グループ決定処理の手順>
図10は、実施例におけるグループ決定処理の手順を示すフローチャートである。図10のフローチャートは、図9にて説明したスケジューリング処理のステップS913の詳細な処理内容を示している。図10の各処理を実行することによって、グループが決定されていない処理のグループを決定することができる。
図10において、スケジューラ200は、まず、レディーキュー内の依存情報付きのスレッドをすべて選択する(ステップS1001)。その後、スケジューラ200は、ステップS1001においてなんらかのスレッドが選択されたか否かを判断する(ステップS1002)。
ステップS1002において、スレッドが選択されなかった場合(ステップS1002:No)、スケジューラ200は、当プロセッサによって実行中のグループ情報を削除する(ステップS1003)。さらに、スケジューラ200は、レディーキューから優先順位が最も高いスレッドを選択して実行させ(ステップS1004)、一連の処理を終了する。
一方、ステップS1002において、スレッドが選択された場合(ステップS1002:Yes)、スケジューラ200は、選択されたスレッドの依存関係を解析して実行可能なスレッドをすべて選択する(ステップS1005)。そして、スケジューラ200は、ステップS1005において、なんらかのスレッドが選択されたか否かを判断する(ステップS1006)。
ステップS1006において、スレッドが選択されなかった場合(ステップS1006:No)、スケジューラ200は、レディーキューから依存情報のない最高優先度のスレッドを選択して実行させ(ステップS1007)、一連の処理を終了する。
一方、ステップS1006において、スレッドが選択された場合(ステップS1006:Yes)、スケジューラ200は、さらに、選択されたスレッドの中にグループに属するスレッドがあるか否かを判断する(ステップS1008)。
ステップS1008において、グループに属するスレッドがあると判断された場合(ステップS1008:Yes)、スケジューラ200は、ステップS1005において選択されたスレッドから予想処理時間の最も大きなスレッドを選択して実行させ(ステップS1009)、一連の処理を終了する。
ステップS1008において、グループに属するスレッドがないと判断された場合(ステップS1008:No)、スケジューラ200は、ステップS1005において選択されたスレッド内のスレッドが属するグループをすべて選択する(ステップS1010)。さらに、スケジューラ200は、ステップS1010において選択されたグループ毎の予想処理時間の合計を計算する(ステップS1011)。その後、スケジューラ200は、ステップS1011において計算された予想処理時間の合計が最大のグループを実行中のグループとして選択して(ステップS1012)、一連の処理を終了する。
<遅延時間設定処理の手順>
図11は、実施例における遅延時間設定処理の手順を示すフローチャートである。図11のフローチャートは、図9のステップS909,S914の遅延時間設定処理の詳細な手順を示している。図11の各処理を実行することによって、先行するスレッドの直後に実行可能とならないスレッドに対して、スレッドの終了後に即座に後続のスレッドを実行可能となるように実行開始時刻を調整するための適切な遅延時間を設定することができる。
図11において、スケジューラ200は、現在プロセッサにおいて実行中の処理が属するグループから実行可能なスレッドを選択する(ステップS1101)。その後、スケジューラ200は、ステップS1101において選択したスレッドの同グループの全後続スレッドを対象となるレディーキューから選択する(ステップS1102)。
さらに、スケジューラ200は、ステップS1102の条件に沿ったスレッドが選択されたか否かを判断する(ステップS1103)。ステップS1103において、スレッドが選択されなかった場合(ステップS1103:No)、スケジューラ200は、遅延時間を設定する必要はない。したがって、スケジューラ200は、ステップS1101において選択された実行可能なスレッドを実行させて(ステップS1104)、一連の処理を終了する。
一方、ステップS1103において、スレッドが選択された場合(ステップS1103:Yes)、スケジューラ200は、ステップS1102において選択されたスレッド群の全先行スレッドを全レディーキューから選択する(ステップS1105)。さらに、スケジューラ200は、ステップS1105において選択されたスレッドの中から未実行のスレッドをすべて選択する(ステップS1106)。
その後、スケジューラ200は、選択スレッド内に実行可能スレッドのみが存在するか否かを判断する(ステップS1107)。ステップS1107において、実行可能スレッドのみが存在すると判断された場合(ステップS1107:Yes)、スケジューラ200は、ステップS1105において選択されたスレッドの中から残りの処理時間が最大のスレッドを選択する(ステップS1108)。
さらに、スケジューラ200は、ステップS1108において選択されたスレッドの処理時間からステップS1101において選択された実行可能なスレッドの予想処理時間を引いた時間を算出する(ステップS1109)。そして、スケジューラ200は、ステップS1109によって算出された算出時間が0よりも大きい値か否かを判断する(ステップS1110)。
ステップS1110において、算出時間がよりも大きい値と判断された場合(ステップS1110:Yes)、スケジューラ200は、待機時間の設定処理に移行する。したがって、スケジューラ200は、ステップS1101によって選択された実行可能なスレッドをステップS1109の算出時間だけスリープするように設定し(ステップS1111)、一連の処理を終了する。
一方、ステップS1110において、算出時間が0よりも大きい値ではないと判断された場合(ステップS1110:No)、スケジューラ200は、待機時間を設定する必要がないため、no_waitフラグをtrueに設定する(ステップS1112)。その後、スケジューラ200は、ステップS1101において選択された実行可能なスレッドを実行させて(ステップS1113)、一連の処理を終了する。
また、ステップS1107において、実行可能スレッドのみが存在しないと判断された場合(ステップS1107:No)、スケジューラ200は、処理対象を他のグループのスレッドに移行する。したがって、スケジューラ200は、ステップS1106において選択されたスレッド内に当プロセッサに割り当てられた別グループのスレッドがあるか否かを判断する(ステップS1114)。
ステップS1114において、別グループのスレッドがあると判断された場合(ステップS1114:Yes)、スケジューラ200は、ステップS1101によって選択された実行可能なスレッドを実行させて(ステップS1104)、一連の処理を終了する。
一方、ステップS1114において、別グループのスレッドがないと判断された場合(ステップS1114:No)、スケジューラ200は、ステップS1106において選択されたスレッドの中から、予想処理時間が最大のスレッドを選択する(ステップS1115)。その後、スケジューラ200は、ステップS1115において選択されたスレッド数がステップS1101において選択された実行可能なスレッド数と等しいか否かを判断する(ステップS1116)。
ステップS1116において各スレッド数が等しいと判断された場合(ステップS1116:Yes)、スケジューラ200は、ステップS1108の処理に移行する。一方、ステップS1116において、各スレッド数が等しくないと判断された場合(ステップS1116:No)、スケジューラ200は、ステップS1115において選択されたスレッドの実行開始をステップS1101において選択された実行可能なスレッドの実行可能条件に設定し(ステップS1117)、一連の処理を終了する。
本実施例では、上述したようなスケジューリング処理を行うことによって、マルチコアプロセッサシステム100において、効率的にアプリケーションを実行させることができる。以下には、本実施例にて説明したマルチコアプロセッサシステム100によって各種アプリケーションを実行させた場合の具体的な動作例について説明する。
<実行例1>
実行例1では、まず、典型的なアプリケーションの例として、依存情報を持った10個のスレッド群(後述するスレッド群その1)を起動した場合の実行内容について説明する。なお、実行例1を実行するマルチコアプロセッサシステム100の場合、プロセッサ#0〜#3の4つのコアを備えている。そして、マルチコアプロセッサシステム100に実行させるスレッド群その1は、グループ1〜4の4つのグループに分けられている。したがって、スケジューラ200は、各プロセッサにそれぞれ異なるグループのスレッドを割り当てることができる。
図12は、スレッド群その1の構成を示す説明図である。図12に例示したように、スレッド群その1は、ID1〜ID10の10個のスレッドを含んでいる。各スレッドには、スレッドを識別するIDの他に、依存情報として下記の情報が付与されている。
先行:依存関係のある先行スレッドのIDを表す情報
後続:依存関係のある後続スレッドのIDを表す情報
グループ:スレッド実行時に対象となるデータが共通するグループ同士を表す情報
予想時間:スレッドの実行に要する時間として予想された時間を表す情報
図13は、スレッド群その1についてのキュー割り付け例を示す説明図である。スレッド群その1は、図8にて説明した割当処理を行った場合、図13のように、各プロセッサのレディーキューに配置される。具体的には、プロセッサ#0には、スレッドID1,2,6が割り当てられる。また、プロセッサ#1には、スレッドID3,7,10が割り当てられる。さらに、プロセッサ#2には、スレッドID4,8が割り当てられる。そして、プロセッサ#3には、スレッドID5,9が割り当てられる。
ここで、図14は、スケジューリング処理のルート例を示す説明図であり、図15は、グループ決定処理のルート例を示す説明図であり、図16は、遅延時間設定処理のルート例を示す説明図である。以下の実行例の説明には、図14〜16に示した各処理の実行手順を示すルートを挙げて具体的な実行内容について説明する。
スレッド群その1が各プロセッサに割り当てられると、各スケジューラ200は、各スレッドの依存情報を参照して実行タイミングを設定する。スレッド群その1の場合、まず、プロセッサ#0では、図14に示したルート1−1と、図15に示したルート2−1を経ることによって、先行スレッドのないスレッドID1が実行される。
スレッドID1が実行されている間、プロセッサ#1〜3では依存関係のあるスレッドの中に実行可能なスレッドがないため、スケジューラ200は、図14のルート1−1と図15ルート2−2を経る。したがって、プロセッサ#1〜3では、各レディーキュー内の別のアプリケーションソフトウェアのスレッドが実行される。
プロセッサ#0において、スレッドID1の実行が終了した後、従来のスケジューラでは、プロセッサ#0のみでスケジューリングが行われていた。しかしながら、本実行例の場合、スケジューラ200によって、依存関係の付いたスレッド終了時に後続のスレッドを保持するレディーキューが検索される。さらに、スケジューラ200は、レディーキューに関連づけられたプロセッサでもスケジューリングを行うようにプロセッサ#0から他のプロセッサ(プロセッサ#1〜3)にスケジューリング要求を通知する。
プロセッサ#0ではスレッドID1の終了により、スレッドID2が実行可能になる。しかしながら、スレッドID1が終了した時点ではまだ実行中グループが設定されていない。したがって、スケジューラ200は、図14のルート1−1と図15のルート2−3を経て、プロセッサ#0において、グループ1を実行中グループに決定する。
さらに、プロセッサ#0には、スレッドID2の後続スレッドでかつ同一のグループに属するスレッドID6が同じプロセッサに割り当てられている。したがって、スケジューラ200は、図16のルート3−1を経る。したがって、スレッドID6の先行スレッドのうち、まだ実行が開始されていないスレッドの実行時間が比較される。
スレッド群その1を実行した場合、スレッドID1が終了したことにより、スレッドID1の後続スレッドとなるスレッドID2〜5についてのスケジューリングは各プロセッサにおいて、ほぼ同時に実行される。したがって、上述のルート3−1が実行された瞬間は、スレッドID1が終了したことにより実行可能となるスレッドID2〜5のいずれも実行が開始されていないとすると、未実行で処理時間が最大のスレッドはスレッドID3となる。そこで、スケジューラ200は、図16のルート3−2を経てスレッドID3の実行開始をスレッドID2の実行可能条件に設定する。
プロセッサ#1のスケジューラ200は、図14のルート1−1と、図15のルート2−3と、図16のルート3−1を経る。そして、実行可能なスレッドID3が、同グループに属する後続のスレッド7の先行スレッドのうち最も予想処理時間が大きい。そこで、スケジューラ200は、図16のルート3−3を経て、スレッドID3が実行されるようにスケジューリングする。
プロセッサ#3のスケジューラ200は、スレッドID3の開始前であれば、プロセッサ#0と同様に、スレッドID3の実行開始を、スレッドID5の実行可能条件に設定する。一方、プロセッサ#3のスケジューラ200は、スレッドID3の開始後であれば、図16のルート3−4を経て遅延起動を設定する。
スケジューラ200によって起動遅延時間が設定されると、各プロセッサは、従来のスケジューリング技術を利用してスレッドの遅延起動を調整することができる。例えば、既存のオペレーティングシステムが提供しているusleepなどの機能を利用すれば容易に遅延起動を実現することができる。したがって、遅延起動の実現についての具体的な手法の説明については省略するが、遅延起動が設定されたスレッドはスリープ中として一旦レディーキューから外され、遅延時間経過後にレディーキューに戻される。
プロセッサ#2のスケジューラ200は、スケジューリング処理を行うタイミングにより実行内容が異なる。具体的には、スケジューラ200は、スケジューリング処理時に、スレッドID3が未実行なら図16のルート3−2を経てスレッドID4の実行可能条件にスレッドID3の実行開始を設定する。また、スケジューラ200は、スケジューリング処理時に、スレッドID3が実行中で、スレッドID5が未実行なら同じく図16のルート3−2を経ても、スレッドID5の実行開始をスレッドID4の実行可能条件とする。
さらに、スケジューラ200のスケジューリング処理時に、スレッドID5がスリープ中の場合、スリープ中のスレッドはレディーキューには存在しない。したがって、スレッドID4がレディーキュー内の未実行のスレッドのうち予想処理時間が最大となるため、スケジューラ200は、図16のルート3−3とルート3−4を経て、遅延時間を設定する。すなわち、スレッドID4は遅延時間分スリープさせられる。
その後、スレッドID3の実行が開始されると、スレッドID3の開始を実行可能条件に設定されていた各スレッドが再度実行可能になる。したがって、スケジューラ200は、今度は、既にグループが決まっているため図14のルート1−2を経て、遅延時間設定処理を行う。遅延時間設定処理において、スケジューラ200は、図16のルート3−1〜3−4を経る。また、スケジューラ200は、未実行のスレッドが減ってきた場合は図16のルート3−5を経て、対象となるスレッドを実行するか、スリープするか、再度別のスレッドの実行開始を実行可能条件に設定して待つかのいずれかの処理を行う。
プロセッサ#0において、スレッドID2の実行が終了すると、スケジューラ200は、再度スケジューリングを行う。このとき、対象となるスレッドのno_waitフラグがtrueであるため、同グループで実行可能なスレッドがあればスケジューラ200は、図14のルート1−3を経て、対象となるスレッドを即座に実行させる。また、no_waitフラグがtrueでなくても、近いうちに他の先行スレッドが終了するため、スケジューラ200は、図14のルート1−4を経てキャッシュを乱さないようにIdleスレッドを実行させて、先行スレッドが終了するのを待つ。以上説明した処理は、プロセッサ#1〜3のスケジューラ200においても同様に実行される。
スレッドID6〜9のスケジューリング処理が終了すると、スケジューラ200では、最後にスレッドID10を対象スレッドとしたスケジューリング処理が開始される。スレッドID10は、いずれのグループにも属さないため、先行スレッドがすべて終了すると、スケジューラ200では、終了タイミングで最早グループに属する未実行のスレッドは存在しないと判断される。そこで、スケジューラ200は、図14のルート1−5と図15のルート2−1を経て、スレッドID10を実行させる。
その後、スレッドID10が割り当てられたプロセッサ#1のスケジューラ200は、スレッドID10が終了すると、他に依存情報が設定されたスレッドが存在しないため、図14のルート1−5と図15のルート2−4を経て、実行中のグループ情報を削除する。同様に、他のプロセッサのスケジューラ200でも、それぞれ、スレッドID6,8,9が終了すると、図14のルート1−5と図15のルート2−4を経て、実行中グループ情報を削除する。
また、スケジューラ200は、対象となるスレッドがスリープ中の場合は、依存情報が設定されていないスレッドを実行させる。そして、実行されたスレッドが終了してもまだ対象となるスレッドがスリープ中の場合、スケジューラ200は、図14のルート1−6を通って別のスレッドの実行を試みる。また、依存情報の付いたアプリケーションソフトウェア実行中に、割り込みや別のアプリケーションソフトウェアなどにより優先度の高いスレッドが実行されてしまった場合、スケジューラ200は、図14のルート1−7を経て、スケジューリングを行う。
図17は、スレッド群その1の実行結果(プロセッサ4つ)を示す説明図である。実行例1のように、スレッド群その1を、プロセッサを4つ備えたマルチコアプロセッサシステム100に実行させると、図17に例示したような順序のスケジューリングが行われる。
スレッドID8の後続スレッドであるスレッドID10は、実行可能になった時刻には先行処理であるスレッドID6〜9が終了している。したがって、スレッドID10は、同じプロセッサの先行処理であるスレッドID8が終了した後、即座に実行される。
スレッドID1の後続スレッドであるスレッドID2〜5は、予即処理時間が最長のスレッドID3の実行終了時刻を基準にしてスレッドID2,4,5の実行開始時刻がスケジューリングされる。結果として、スレッドID2〜5は同時刻に終了するため、各スレッドの後続スレッドであるスレッドID6〜9は、スケジューラ200によって、待機時間を挟むことなく、連続して実行するようにスケジューリングされる。
<実行例2>
実行例2では、実行例1において実行したスレッド群その1よりも複雑な構成のスレッド群その2(図18参照)についての実行例について説明する。実行例2も、実行例1と同様に、プロセッサ#0〜#3の4つのコアを備えたマルチコアプロセッサシステム100を利用するが、実行対象となるスレッド群その2は、依存情報を持った18個のスレッド群である。
図18は、スレッド群その2の構成を示す説明図である。図18に例示したように、スレッド群その2は、ID1〜18の18個のスレッドを含んでいる。各スレッドには、スレッド群その1と同様に、スレッドを識別するIDの他に依存情報が付与されている。
図19は、スレッド群その2についてのキュー割り付け例を示す説明図である。スレッド群その2について、図8にて説明した割当処理を行った場合、図19のように、各プロセッサのレディーキューに配置される。具体的には、プロセッサ#0には、スレッドID1,2,6,10,14が割り当てられる。また、プロセッサ#1には、スレッドID3,7,11,15,18が割り当てられる。さらに、プロセッサ#2には、スレッドID4,8,12,16が割り当てられる。そして、プロセッサ#3には、スレッドID5,9,13,17が割り当てられる。
実行例2についても、図14〜16に示した各処理の実行手順を示すルートを挙げて具体的な実行内容について説明する。実行例2の場合もスレッドID1〜9までは、実行例1と同様の手順を経てスケジューリングされる。したがって、スレッドID10以降のスケジューリングについて説明する。
まず、スレッドID10〜13は、先行するスレッドの中で最も予想処理時間の大きなスレッドID8が終了したタイミングで実行可能となる。このとき、スレッドID10,11,13について、スケジューラ200は、スレッドID2〜5と同じ手順を経て、実行タイミングを設定する。一方で、スレッドID12については、同プロセッサで直前に行っていた同グループの処理の終了により実行可能となる。したがって、スケジューラ200は、図14のルート1−7を経ることによって、時間調整することなく、スレッドID12を即座に実行させることができる。
上述のようなスケジューリングの結果、スレッドID14,15,17は、no_waitフラグが設定されるため、スケジューラ200によって即座に実行される。スレッドID16は、no_waitフラグが設定されないため本来なら時間調整対象だが、スレッド群その2を実行させた場合、後続スレッドに、同グループに属するスレッドがない。したがって、スケジューラ200は、図14のルート1−5と図15のルート2−3と図16のルート3−6を経て、スレッドID16を即座に実行するようにスケジューリングする。
仮に、スレッドID16の後続スレッドとして同じグループに属するスレッドが用意されている場合であれば、スケジューラ200は、スレッドID16を処理時間の大きなスレッドID17の終了時刻に合わせて終了するように、実行開始時刻を調整する。今度はスレッドID16の後続スレッドのみno_waitフラグが設定されるため、スレッドID16は、即座に実行されることになる。
図20は、スレッド群その2の実行結果(プロセッサ4つ)を示す説明図である。実行例2のように、スレッド群その2を、プロセッサを4つ備えたマルチコアプロセッサシステム100に実行させると、図20に例示したような順序のスケジューリングが行われる。
スレッドID1〜9は、実行例1と同じタイミングで実行されるようにスケジューリングされる。その他の後続スレッドは、スレッドID13の実行終了時刻を基準にしてスレッドID10,11,13の実行開始時刻がスケジューリングされる。結果として、スレッドID10,11,13は同時刻に終了するため(スレッドID12については既に終了済)、各スレッドの後続スレッドであるスレッドID14〜17は、スケジューラ200によって、待機時間を挟むことなく、連続して実行するようにスケジューリングされる。
<実行例3>
実行例3では、1つのプロセッサに複数のグループのスレッドが割り当てられる場合の実行例について説明する。実行例1,2では、一つのプロセッサに一つのグループに属するスレッドが割り当てられた場合を説明したが、実行例3では、プロセッサ数がグループ数より少なく、一つのプロセッサに複数のグループが割り当てられた場合について説明する。具体的には、図8のような依存関係を持ったスレッドを二つのプロセッサで実行する場合について説明する。
図21は、プロセッサ数が少ない場合のスレッド群その1についてのキュー割り付け例を示す説明図である。実行例3の場合、マルチコアプロセッサシステム2100が、図8の割当処理を実行することによって、図21のように、グループ1とグループ3に属する各スレッドがプロセッサ#0に、グループ2とグループ4に属する各スレッドがプロセッサ#1に割り当てられる。
実行例3の場合、スレッドID1は、実行例1,2と同様に、先行処理としてプロセッサ#0によって実行されるようにスケジューリングされる。スレッドID1が終了すると、プロセッサ#0ではグループ1に属するスレッドID2とグループ3に属するスレッドID4の2つのスレッドが実行可能となる。
したがって、スケジューラ200は、まずプロセッサ#0によって実行するグループを選択する。具体的には、スケジューラ200は、図14のルート1−1と図15のルート2−3を経て、総実行時間の大きなグループ3を選択する。そこで、スケジューラ200は、グループ3内の実行可能なスレッドID4の遅延時間を設定する。
しなしながら、スレッドID4の同グループの後続となるスレッドID8の先行スレッドのうち、スレッドID2がスレッドID4と同じプロセッサに割り当てられている。したがって、スケジューラ200は、スレッドID4とスレッドID8はどうやっても連続に実行することはできない。そこで、スケジューラ200は、スレッドID4は図16のルート3−7を経て、遅延させずに、即座に実行させるように設定する。
スレッドID4が終了するとグループ内に実行可能なスレッドが無くなるため、スケジューラ200は、図14のルート1−5と図15のルート2−3とを経て、実行中グループがグループ1に変わった後、スレッドID2に遅延起動を設定する。なお、スレッドID2の同グループでの後続スレッドとなるスレッドID6の先行スレッドのうち、スレッドID3が未実行のスレッドの中で最大の予想処理時間となる。したがって、スケジューラ200は、スレッドID2の実行可能条件をスレッドID3の実行開始に変更する。
さらに、スレッドID3は、スレッドID5終了時に実行を開始される。したがって、スケジューラ200は、再度、スレッドID2が実行可能となるため、スレッドID3の予想処理時間−スレッドID2の予想処理時間(減算処理の結果)を遅延時間に設定する。
また、スレッドID6,7は、no_waitフラグが設定されている。したがって、スケジューラ200は、上述の各スレッドを即座に実行させることができる。さらに、スケジューラ200は、スレッドID8,9が、後続スレッドとなるスレッドID10と同一グループに属さないため、スレッドID6,7終了後すぐに、スレッドID8,9をそれぞれ実行させることができる。
図22は、プロセッサ数の少ないマルチコアプロセッサにおけるスレッド群その1の実行結果(プロセッサ2つ)を示す説明図である。実行例3のように、スレッド群その1を、プロセッサを2つ備えたマルチコアプロセッサシステム2100に実行させると、図22に例示したような順序のスケジューリングが行われる。実行例3のように、1つのプロセッサに複数のグループのスレッドが割り当てられた場合、スケジューラ200は、可能な限り、同一グループのスレッドを連続して実行させるようなスケジューリングを行う。
以上説明したように、スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法によれば、スケジューリングが済んでいない未設定処理に対して、同一のプロセッサで実行される先行処理が終了した後、即座に実行可能ではない場合には、未設定処理と後続処理とが連続実行されるように上述の未設定処理の実行開始時刻を設定することができる。したがって、未設定処理と後続処理との間の待機時間の発生するような事態が回避されるため、プロセッサの処理効率を上げることができる。
また、上記技術によれば、さらに、スケジューリングが済んでいない未設定処理に対して、同一のプロセッサで実行される先行処理が終了した後、即座に実行可能となる場合には、未設定処理と先行処理が連続実行されるように上述の未設定処理の実行開始時刻を設定することができる。したがって、未設定処理と先行処理との間の待機時間の発生するような事態が回避されるため、プロセッサの処理効率を上げることができる。
また、上記技術によれば、さらに、同一のグループに属する先行処理がない場合には、処理を実行していない空き状態のプロセッサに未設定処理を割り当てることができる。さらに、空き状態のプロセッサがない場合には、各プロセッサに割り当てられている処理の実行時間を考慮して最も負荷の軽いプロセッサに未設定処理を割り当てることができる。したがって、各プロセッサへの負荷が分散されるため、効率的な処理を実現することができる。
また、上記技術によれば、さらに、優先度順位の高い処理や、割込処理、また、先行処理や後続処理を表す依存情報が付与されていない処理などを、優先的に設定されたプロセッサに割り当てることができる。したがって、優先度が高い処理は特定のプロセッサによって実行されるため、連続実行の間の割込処理の発生を防ぎ、キャッシュミスを抑えることができる。
また、上記技術によれば、さらに、スケジューリングによって待機時間が発生した場合であっても、待機時間が規定値(任意のしきい値を設定できる)よりも短い場合には、従来のように他のプログラムの処理を実行させないように設定することもできる。したがって、待機時間の発生によってキャッシュに格納されているデータが変更になるような事態を防ぐことができる。また、待機時間が短い場合に限定することによって、プロセッサの処理効率が必要以上に低下しないように調整することができる。
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本スケジューラは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューラは、インターネットなどのネットワークを介して配布してもよい。
100 マルチコアプロセッサシステム
200 スケジューラ
300 共有メモリ
500 メモリ
501 第1検出部
502 第2検出部
503 割当部
504 算出部
505 設定部

Claims (12)

  1. 複数のプロセッサを有するマルチコアプロセッサシステムの一のプロセッサに、
    後続処理群が共通するスケジューリングの未設定処理群を、対象プログラムを構成する処理群の中から検出する第1の検出工程と、
    前記第1の検出工程によって検出された未設定処理群の未設定処理ごとに、前記未設定処理に対する先行処理群のうち、前記処理群を同一または関連するアクセス対象データを共有するグループに分類したグループ群の中の前記未設定処理の所属グループに属する先行処理を検出する第2の検出工程と、
    前記未設定処理ごとに、前記未設定処理を、マルチコアプロセッサの中の前記第2の検出工程によって検出された先行処理が割り当てられているプロセッサに割り当てる割当工程と、
    前記未設定処理ごとに、前記未設定処理に対する先行処理群がすべて終了する実行終了時刻から、前記未設定処理を実行させた場合の前記未設定処理の推定実行時間が経過した経過時刻を算出する算出工程と、
    前記割当工程によって割り当てられた未設定処理ごとに、前記未設定処理の割当先のプロセッサでの実行開始時刻を、前記算出工程によって算出された最も遅い経過時刻から前記未設定処理の実行時間分さかのぼった時刻に設定する設定工程
    行させるケジューラプログラム
  2. 前記設定工程は、
    前記未設定処理の先行処理群がすべて終了する実行終了時刻に、前記第2の検出工程によって検出された前記先行処理が終了する場合、前記実行終了時刻を後続処理群の実行開始時刻に設定する請求項1に記載のスケジューラプログラム
  3. 前記割当工程は、
    前記第2の検出工程によって、前記未設定処理の所属グループに属する先行処理が検出されなかった場合、前記先行処理が検出されなかった未設定処理を、前記マルチコアプロセッサの中の前記先行処理が割り当てられていないプロセッサに割り当てる請求項1に記載のスケジューラプログラム
  4. 前記割当工程は、
    前記第2の検出工程によって、前記未設定処理の所属グループに属する先行処理が検出されず、かつ、前記マルチコアプロセッサのすべてに前記先行処理が割り当てられている場合、前記先行処理が検出されなかった未設定処理を、前記マルチコアプロセッサのうち、割り当て済の前記先行処理の実行時間が最短となるプロセッサに割り当てる請求項3に記載のスケジューラプログラム
  5. 前記割当工程は、
    前記未設定処理に実行順序に関する優先度が設定されている場合、前記未設定処理のうち、前記優先度が高く設定されている未設定処理を優先的に、マルチコアプロセッサの中の前記第2の検出工程によって検出された先行処理が割り当てられているプロセッサに割り当てる請求項1に記載のスケジューラプログラム
  6. 前記割当工程は、
    前記対象プログラムおよび前記対象プログラム以外のプログラムによって発生した割り込み処理を、前記第2の検出工程によって前記未設定処理の所属グループに属する先行処理が検出されなかったプロセッサに割り当てる請求項1に記載のスケジューラプログラム
  7. 前記割当工程は、
    前記マルチコアプロセッサのすべてに前記先行処理が割り当てられている場合、前記割り込み処理を、前記マルチコアプロセッサのうち、割り当て済の前記先行処理の実行時間が最短となるプロセッサに割り当てる請求項6に記載のスケジューラプログラム
  8. 前記割当工程は、
    象プロセッサを構成する処理群のうち、前記後続処理群および前記先行処理群を特定する情報が含まれていない処理を、前記第2の検出工程によって前記未設定処理の所属グループに属する先行処理が検出されなかったプロセッサに割り当てる請求項1に記載のスケジューラプログラム
  9. 前記割当工程は、
    前記マルチコアプロセッサのすべてに前記先行処理が割り当てられている場合、前記後続処理群および前記先行処理群を特定する情報が含まれていない処理を、前記マルチコアプロセッサのうち、割り当て済の前記先行処理の実行時間が最短となるプロセッサに割り当てる請求項8に記載のスケジューラプログラム
  10. 前記設定工程は、
    前記第2の検出工程によって検出された前記未設定処理の先行処理の終了時刻から前記設定工程によって設定された前記未設定処理の実行開始時刻までの待機時間が、しきい値以上の場合、前記未設定処理の先行処理の終了時刻を、前記対象プログラム以外の他のプログラムの処理のうち、前記待機時間以下の実行時間の処理の実行開始時刻に設定する請求項1〜9のいずれか一つに記載のスケジューラプログラム
  11. 後続処理群が共通するスケジューリングの未設定処理群を、対象プログラムを構成する処理群の中から検出する第1の検出手段と、
    前記第1の検出手段によって検出された未設定処理群の未設定処理ごとに、前記未設定処理に対する先行処理群のうち、前記処理群を同一または関連するアクセス対象データを共有するグループに分類したグループ群の中の前記未設定処理の所属グループに属する先行処理を検出する第2の検出手段と、
    前記未設定処理ごとに、前記未設定処理を、マルチコアプロセッサの中の前記第2の検出手段によって検出された先行処理が割り当てられているプロセッサに割り当てる割当手段と、
    前記未設定処理ごとに、前記未設定処理に対する先行処理群がすべて終了する実行終了時刻から、前記未設定処理を実行させた場合の前記未設定処理の推定実行時間が経過した経過時刻を算出する算出手段と、
    前記割当手段によって割り当てられた未設定処理ごとに、前記未設定処理の割当先のプロセッサでの実行開始時刻を、前記算出手段によって算出された最も遅い経過時刻から前記未設定処理の実行時間分さかのぼった時刻に設定する設定手段
    を備えるルチコアプロセッサシステム。
  12. 複数のプロセッサを有するマルチコアプロセッサシステムの一のプロセッサが、
    後続処理群が共通するスケジューリングの未設定処理群を、対象プログラムを構成する処理群の中から検出する第1の検出工程と、
    前記第1の検出工程によって検出された未設定処理群の未設定処理ごとに、前記未設定処理に対する先行処理群のうち、前記処理群を同一または関連するアクセス対象データを共有するグループに分類したグループ群の中の前記未設定処理の所属グループに属する先行処理を検出する第2の検出工程と、
    前記未設定処理ごとに、前記未設定処理を、マルチコアプロセッサの中の前記第2の検出工程によって検出された先行処理が割り当てられているプロセッサに割り当てる割当工程と、
    前記未設定処理ごとに、前記未設定処理に対する先行処理群がすべて終了する実行終了時刻から、前記未設定処理を実行させた場合の前記未設定処理の推定実行時間が経過した経過時刻を算出する算出工程と、
    前記割当工程によって割り当てられた未設定処理ごとに、前記未設定処理の割当先のプロセッサでの実行開始時刻を、前記算出工程によって算出された最も遅い経過時刻から前記未設定処理の実行時間分さかのぼった時刻に設定する設定工程
    実行するケジューリング方法。
JP2012528534A 2010-08-10 2010-08-10 スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法 Expired - Fee Related JP5408356B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/063588 WO2012020478A1 (ja) 2010-08-10 2010-08-10 スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法

Publications (2)

Publication Number Publication Date
JPWO2012020478A1 JPWO2012020478A1 (ja) 2013-10-28
JP5408356B2 true JP5408356B2 (ja) 2014-02-05

Family

ID=45567458

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012528534A Expired - Fee Related JP5408356B2 (ja) 2010-08-10 2010-08-10 スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法

Country Status (3)

Country Link
US (1) US9262209B2 (ja)
JP (1) JP5408356B2 (ja)
WO (1) WO2012020478A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513966B2 (en) * 2011-02-17 2016-12-06 Siemens Aktiengesellschaft Parallel processing in human-machine interface applications
US9401869B1 (en) * 2012-06-04 2016-07-26 Google Inc. System and methods for sharing memory subsystem resources among datacenter applications
JP6156379B2 (ja) * 2012-08-13 2017-07-05 日本電気株式会社 スケジューリング装置、及び、スケジューリング方法
TWI606418B (zh) * 2012-09-28 2017-11-21 輝達公司 圖形處理單元驅動程式產生內插的圖框之電腦系統及方法
US9984430B2 (en) * 2013-04-15 2018-05-29 Intel Corporation Ordering threads as groups in a multi-threaded, multi-core graphics compute system
JPWO2015015756A1 (ja) * 2013-08-02 2017-03-02 日本電気株式会社 不揮発性メモリ搭載サーバの省電力制御システム、制御装置、制御方法および制御プログラム
GB2521151B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
GB2521155B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
US9785481B2 (en) * 2014-07-24 2017-10-10 Qualcomm Innovation Center, Inc. Power aware task scheduling on multi-processor systems
US9552223B2 (en) * 2014-09-30 2017-01-24 International Business Machines Corporation Post-return asynchronous code execution
CA2993832A1 (en) * 2015-08-18 2017-02-23 Wal-Mart Stores, Inc. Bandwidth throttling
CN106775975B (zh) * 2016-12-08 2020-02-14 青岛海信移动通信技术股份有限公司 进程调度方法及装置
CN109426553A (zh) * 2017-08-21 2019-03-05 上海寒武纪信息科技有限公司 任务切分装置及方法、任务处理装置及方法、多核处理器
US10817341B1 (en) * 2019-04-10 2020-10-27 EMC IP Holding Company LLC Adaptive tuning of thread weight based on prior activity of a thread
JP7456437B2 (ja) * 2019-04-17 2024-03-27 株式会社デンソー プロセッサおよびプログラム
US20220121485A1 (en) * 2020-10-20 2022-04-21 Micron Technology, Inc. Thread replay to preserve state in a barrel processor

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0830562A (ja) * 1994-07-19 1996-02-02 Nec Corp マルチプロセッサシステム
JPH09231183A (ja) * 1995-10-26 1997-09-05 Hitachi Ltd リアルタイム分散処理システム
JP2005049922A (ja) * 2003-07-29 2005-02-24 Hitachi Ltd ジョブ実行計画の評価システム
JP2005258920A (ja) * 2004-03-12 2005-09-22 Fujitsu Ltd マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10134030A (ja) 1996-05-22 1998-05-22 Fujitsu Ltd マルチメディアデータ・プレゼンテーションシステムおよび方法
US6687257B1 (en) * 1999-08-12 2004-02-03 Rockwell Automation Technologies, Inc. Distributed real-time operating system providing dynamic guaranteed mixed priority scheduling for communications and processing
AU2134301A (en) * 1999-12-08 2001-06-18 University Of British Columbia, The Weighted fair queuing scheduler
US6957432B2 (en) * 2000-03-21 2005-10-18 Microsoft Corporation Real-time scheduler
US6938252B2 (en) * 2000-12-14 2005-08-30 International Business Machines Corporation Hardware-assisted method for scheduling threads using data cache locality
JP4177681B2 (ja) 2003-02-20 2008-11-05 学校法人早稲田大学 コンパイル方法、コンパイラ、およびコンパイル装置
US7206950B2 (en) * 2004-06-16 2007-04-17 Matsushita Electric Industrial Co., Ltd. Processor system, instruction sequence optimization device, and instruction sequence optimization program
JP2006099156A (ja) 2004-09-28 2006-04-13 Sony Corp 情報処理装置および方法、並びにプログラム
JP4074296B2 (ja) * 2005-03-25 2008-04-09 株式会社東芝 スケジューリング可能性判定方法、リアルタイムシステム及びプログラム
US8156495B2 (en) * 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0830562A (ja) * 1994-07-19 1996-02-02 Nec Corp マルチプロセッサシステム
JPH09231183A (ja) * 1995-10-26 1997-09-05 Hitachi Ltd リアルタイム分散処理システム
JP2005049922A (ja) * 2003-07-29 2005-02-24 Hitachi Ltd ジョブ実行計画の評価システム
JP2005258920A (ja) * 2004-03-12 2005-09-22 Fujitsu Ltd マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置

Also Published As

Publication number Publication date
WO2012020478A1 (ja) 2012-02-16
US9262209B2 (en) 2016-02-16
US20130160023A1 (en) 2013-06-20
JPWO2012020478A1 (ja) 2013-10-28

Similar Documents

Publication Publication Date Title
JP5408356B2 (ja) スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法
US11507420B2 (en) Systems and methods for scheduling tasks using sliding time windows
JP5650952B2 (ja) マルチコア/スレッドのワークグループ計算スケジューラ
KR101644800B1 (ko) 컴퓨팅 시스템 및 방법
KR101812583B1 (ko) 태스크 할당 장치, 태스크 할당 방법 및 컴퓨터로 읽을 수 있는 저장 매체
JP4621786B2 (ja) 情報処理装置、並列処理最適化方法およびプログラム
JP2008065713A (ja) マルチプロセッサシステム及び割込み制御方法
EP2562644A1 (en) Systems and methods for bounding processing times on multiple processing units
EP2613257B1 (en) Systems and methods for use in performing one or more tasks
JP5765423B2 (ja) マルチコアプロセッサシステム、およびスケジューリング方法
CN109840149B (zh) 任务调度方法、装置、设备及存储介质
JP5321748B2 (ja) マルチコアプロセッサシステム、スレッド制御方法、およびスレッド制御プログラム
JP2022509170A (ja) プロセッサにおける余裕認識(laxity-aware)型動的優先度変更
KR20130137503A (ko) 리소스 모니터링을 이용한 동적 데이터 처리 장치 및 그 방법
JP6372262B2 (ja) 印刷装置、およびプログラム
JP5158576B2 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
JP5737298B2 (ja) スケジューリング方法およびスケジューリングシステム
KR101271211B1 (ko) 다중 쓰레드의 비동기 입출력 처리 장치 및 그 방법
WO2019187719A1 (ja) 情報処理装置、および情報処理方法、並びにプログラム
JP6428557B2 (ja) 並列化方法、並列化ツール
JP6524733B2 (ja) 並列演算装置、並列演算システム、およびジョブ制御プログラム
JP2010182199A (ja) ジョブスケジューリングシステム、方法、及びプログラム
JP2017107486A (ja) 処理リソース制御プログラム、処理リソース制御装置、および処理リソース制御方法
JP6537372B2 (ja) 画像形成装置、画像形成装置の制御方法、及びプログラム
JP3951230B2 (ja) プログラム割当制御方法とプログラムおよびプログラム割当制御システム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130909

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131008

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131021

LAPS Cancellation because of no payment of annual fees