1.概要
図1は、関連技術に係るCPU(Central Processing Unit)90の構成を例示する図である。CPU90は、複数のコア、この例では、コア901〜904の4つのコアを有するプロセッサである。ここで、プロセッサの「コア」とは、プロセッサのうち命令の実行および演算を行う部分をいう。CPU90は、さらに、キャッシュメモリ911〜914およびキャッシュメモリ921〜922を有する。キャッシュメモリ911〜914は一次キャッシュ(いわゆるL1キャッシュ)であり、それぞれ、コア901〜904に専用のものである。キャッシュメモリ921および922は二次キャッシュ(いわゆるL2キャッシュ)である。キャッシュメモリ921はコア901および902で共用され、キャッシュメモリ922はコア903および904で共用される。なお一般にはL1キャッシュまで含めて「コア」という場合があるが、ここでは「コア」にL1キャッシュは含まれない。
一次キャッシュとはコアから最優先にアクセスされるキャッシュメモリをいい、二次キャッシュとは一次キャッシュの次の優先順位でアクセスされるキャッシュメモリをいう。一次キャッシュは、二次キャッシュよりも高速でかつ容量が小さい。メインメモリ(外部メモリ)へのアクセス要求が発生すると、コアはまずアクセス先のアドレスのデータが一次キャッシュに格納されているか調べる。アクセス先のアドレスのデータ(以下単に「アクセス先のデータ」という)が一次キャッシュに格納されていた場合、コアは一次キャッシュからデータを読み出す。アクセス先のデータがキャッシュメモリに格納されていることを「ヒット」といい、ヒットが発生する割合を「ヒット率」という。アクセス先のデータが一次キャッシュに格納されていなかった場合、コアは、アクセス先のデータが二次キャッシュに格納されていないか調べる。アクセス先のデータが二次キャッシュに格納されていた場合、コアは二次キャッシュからデータを読み出す。アクセス先のデータが二次キャッシュに格納されていなかった場合、コアはメインメモリからデータを読み出す。
また、CPU90は、いわゆるSMP(Symmetric Multi Processing)型のプロセッサであり、各コアの機能は同一である。マルチコア型のプロセッサには、この他、AMP(Asymmetric Multi Processing)型のプロセッサも存在するが、例えば、いわゆる複合機のように、処理すべきタスクが多く、かつ、プリント、スキャン、ファクシミリ送受信、UI処理、ネットワーク処理など、処理の組み合わせが多数ある機器においては、一般にSMP型のプロセッサが用いられる。例えば、画像処理のようにパイプラインにより連続演算を前提としたデータ処理を行う場合、キャッシュのヒット率が下がるとメインメモリへのアクセスによるコアの待ち時間が発生してプロセッサのパフォーマンスが低下してしまう。したがって、どのコアにどのタスクを割り当てるかというのは、プロセッサのパフォーマンスを左右する問題である。
図2は、関連技術に係るタスク割り当てを例示する図である。この図は、各コアが実行すべきタスクを示しており、各コアがタスクを実行する予定(スケジュール)を示すものである。この例では、タスクA〜Gがコア902〜904の4つのコアに割り当てられる。タスクAおよびC、タスクBおよびD、並びにタスクEおよびFは、それぞれデータを共有することがあらかじめ分かっている。そこで、タスクAおよびC、タスクBおよびD、並びにタスクEおよびFは、それぞれグループ化されている。この例では、同一グループのタスクを同一のコアに割り当てるという規則が適用される。
ここで、複数のタスクが、A、B、C、D、E、F、A、B、C、D、G、F、A、B、C、D、E、およびGの順番で発生する例を考える。まず最初のタスクAはコア901に割り当てられる。2番目のタスクBはコア902に割り当てられる。3番目のタスクCは、タスクAとグループ化されているのでコア901に割り当てられる。4番目のタスクDは、タスクBとグループ化されているのでコア902に割り当てられる。5番目のタスクEは、コア901および902は既に処理予定が埋まっているので、コア903に割り当てられる。6番目のタスクFは、タスクEとグループ化されているのでコア903に割り当てられる。7番目のタスクGは、どのタスクともグループ化されていないので使用率が最も低いコア904に割り当てられる。以下同様にタスクを割り当てていくと、図2のように割り当てられる。
この例では、コア903およびコア904がアイドルになる割合が高く、4つあるコアを必ずしも有効に活用できておらず、改善の余地がある。
さらに別の例を考える。ここでは、画像形成装置のように、複数のタスクが直列に接続された、いわゆるパイプライン処理が、所定の単位(例えばページまたはバンド)毎に繰り返し行われる例を用いる。
図3は、タスク構造を例示する図である。タスクA〜Eの入力データを、データa〜eという。あるタスクの出力データが次のタスクの入力データとなっている。すなわち、タスクA〜Eはパイプライン処理を構成している。例えば、パイプライン処理にデータaが入力されると、まずタスクAによりデータbが出力される。タスクBはデータbを処理し、データcを出力する。以下同様に直列的に処理が行われ、タスクEはデータfを出力する。すなわち、このパイプライン処理にデータaを入力するとデータfが得られる。
次に、タスクA〜Eに加え、パイプライン処理に含まれないタスクFおよびGをコア901〜904に割り当てる例を考える。この例では、タスクA〜Eがグループ化され、同じグループに属するタスクを、同じL2キャッシュを共有するコアに割り当てるという規則が適用される。
図4は、関連技術に係るタスク割り当てを例示する図である。この例では、タスクの割り当てはコア901および902に偏っており、コア903および904がアイドルになる割合が高い。4つあるコアを必ずしも有効に活用できておらず、改善の余地がある。
ところで、図4の例では、第1ページ、第2ページ、および第3ページのパイプライン処理は、いずれもコア901またはコア902に割り当てられている。タスクA〜Eは、図3で説明したように同一ページ内ではデータを共有しているが、ページ間ではデータを共有していない。例えば、第1ページのパイプライン処理の出力であるデータfは、第2ページのパイプライン処理の入力であるデータaとは無関係である。したがって、キャッシュのヒット率を向上させるという観点では、第1ページのパイプライン処理と第2ページのパイプライン処理とをいずれもコア901および902に割り当てることはあまり意味がなく、むしろタスク割り当ての偏りを生じさせる一因となる。
これに対し本実施形態では、より効率的にタスクを割り当てる技術を提供する。
2.構成
図5は、一実施形態に係る画像形成装置1の構成を示す図である。画像形成装置1は、画像を形成する機能を有する情報処理装置の一例であり、例えばいわゆる複合機である。画像形成装置1は、CPU10、メモリコントローラー20、主記憶装置(メインメモリ)30、IOコントローラー40、補助記憶装置41、画像読み取りユニット42、画像形成ユニット43、および通信ユニット44を有する。
CPU10は、画像形成装置1の各部を制御する制御装置(制御手段の一例)であり、各々異なる処理を実行するN個のコア(Nは2以上の自然数)を含む処理手段の一例である。この例ではN=4である。CPU10は、コア101〜104、キャッシュメモリ111〜114、およびキャッシュメモリ121〜122を有する。キャッシュメモリ111〜114は一次キャッシュ(L1キャッシュ)であり、それぞれコア101〜104に専用のものである。キャッシュメモリ121〜122は二次キャッシュ(L2キャッシュ)である。キャッシュメモリ121はコア101および102で共用され、キャッシュメモリ122はコア103および104で共用される。
以下の説明において、同じL2キャッシュを共有する複数のコアを「コア群」という。図5の例ではコア101およびコア102は同一のコア群に属し、コア103およびコア104はそれと別のコア群に属する。例えば、コア102およびコア103により構成されるコア群を、「コア101/102」と記載する。
メモリコントローラー20は、主記憶装置30に対するデータの読み書きを制御する。主記憶装置30は主記憶装置であり、例えばDRAM(Dynamic Random Access Memory)を含む。主記憶装置30は、CPU10がプログラムを実行する際のワークエリアとして機能し、種々のデータを記憶する記憶手段の一例である。
IOコントローラー40は、周辺装置をCPU10に接続して制御する装置である。この例で、IOコントローラー40には、補助記憶装置41、画像読み取りユニット42、画像形成ユニット43、および通信ユニット44が接続されている。補助記憶装置41はデータおよびプログラムを記憶する不揮発性の記憶装置であり、例えばHDD(Hard Disk Drive)を含む。画像読み取りユニット42は、原稿を光学的に読み取る装置であり、例えばいわゆるスキャナーを含む。画像形成ユニット43は、媒体(例えば紙)に画像を形成する装置であり、例えば電子写真技術またはインクジェット技術により画像形成を行う。通信ユニット44は、他の機器と通信を行うインターフェースである。
図6は、画像形成装置1の機能構成を例示する図である。補助記憶装置41は、画像形成装置1のOS(Operating System)を機能させるためのプログラム(以下「OSプログラム」という)および各種アプリケーション(コピー機能、スキャナー機能、ファクシミリ送受信機能等)を実現するためのプログラム(以下「アプリケーションプログラム」という)を記憶している。CPU10がこれらのプログラムを実行することにより、画像形成装置1にOS50およびアプリケーション61〜63が実装される。
アプリケーション61〜63は、それぞれOS50に対しタスクの実行を命令する。すなわちタスクを要求する。ここでいうタスクとは、画像形成装置1のハードウェア資源を利用した処理をいい、ジョブを構成するものをいう。ジョブとは、アプリケーション61〜63により生成されるものであって、アプリケーションに係る処理、例えば、原稿をコピーする処理、原稿を読み取ってデータ化する処理、原稿を読み取ってファクシミリ送信する処理、与えられたデータに従って画像を形成する処理をいう。例えば、原稿をコピーするジョブは、画像読み取りユニット42を用いて原稿から画像を読み取るタスク、読み取った画像に対して画像処理をするタスク、および画像形成ユニット43を用いて媒体に画像を形成するタスクに分解される。OS50は、アプリケーションにより要求されたタスクを複数のコアのうちいずれかのコアに割り当てる。コア101〜104は、OS50によってそれぞれ独立したCPUとして認識される。
アプリケーションにおいて新たなタスクの要求が発生すると、OS50は、そのタスクをどこコアに実行させるか決定する。詳細には以下のとおりである。OS50は、取得手段51、取得手段52、取得手段53、取得手段54、記憶手段55、割り当て手段56、初期化手段57、および検知手段58を有する。検知手段58は、新たなタスクが発生したことを検知する。取得手段51は、割り当て情報を取得する。割り当て情報は、複数のタスクが各々コア101〜104のうちどのコアに割り当てられたかを示す。取得手段52は、属性情報を取得する。属性情報は、複数のタスク間の関連性を示す。タスク間の関連性とは、タスク間でデータを共有することをいう。例えば、あるタスクの出力データが別のタスクの入力データとして用いられる場合、これら2つのタスクは関連性を有するという。あるいはある共通の入力データを用いて、2つのタスクが2つの異なるデータを出力する場合、これら2つのタスクは関連性を有するという。取得手段53は、優先度情報を取得する。優先度情報は、複数のタスクの優先度を示す。取得手段54は、構成情報を取得する。構成情報は、CPU10のハードウェア構成を示す。この例では、割り当て情報、属性情報、優先度情報、および構成情報は、記憶手段55に記憶されており、取得手段51〜54は、記憶手段55から各情報を取得する。属性情報は、例えば、タスクを実行するためのプログラムをコンパイルするコンパイラ(コンパイル手段の一例)により生成される。優先度情報および構成情報は、例えば、システムによりあらかじめ設定されている。割り当て手段56は、新たなタスクが発生した場合、これらの情報の少なくとも一部を参照し、そのタスクの割り当て先となるコアを決定する(すなわちあるコアに新たなタスクを割り当てる)。初期化手段57は、特にタスクがある単位(例えばページまたはバンド)で繰り返される画像処理に係るものである場合、一単位分の画像処理が完了すると、コアに割り当て済みのタスクに関する属性情報のうち完了した画像処理に関する情報を初期化する。これらの情報および割り当て方法の詳細は後述する。
なお図6の機能構成は一例であり、この一部が省略されてもよいし、これ以外の機能が追加されてもよい。以下の動作説明においては、初期化手段57の機能は省略する。
3.動作
3−1.動作フロー
図7は、画像形成装置1の動作を例示するフローチャートである。ここでは特に、タスクをコアに割り当てる処理を記載している。図7のフローは、例えば、画像形成装置1の電源が投入されたことを契機として開始される。以下の説明においてOS50等のソフトウェアを処理の主体として記載することがあるが、これは、そのソフトウェアを実行しているCPU10が他のハードウェア資源と共働して処理を実行することを意味する。
ステップS100において、OS50は、新規タスクが発生したか判断する。新規タスクとは、アプリケーション61〜63から新たに要求されたタスクをいう。新たなタスクが発生すると、アプリケーション61〜63からOS50に要求が送られるので、OS50は新たなタスクの発生を検知することができる。OS50は、例えば各タスクに識別番号を付与することにより各タスクを識別する。同じ種類のタスクが繰り返し実行される場合、例えばタスクAが2回実行される場合には、1回目のタスクAおよび2回目のタスクAにはそれぞれ別の識別番号が付与され、別のタスクとして識別される。新規タスクが発生していないと判断された場合(S100:NO)、OS50は、新規タスクが発生するまで待機する。新規タスクが発生したと判断された場合(S100:YES)、OS50は、処理をステップS101に移行する。
ステップS101において、OS50は、未割り当てのタスクがあるか判断する。未割り当てのタスクとは、そのタスクを実行するコアが決定されていないタスクをいう。OS50は、コア毎にタスクの実行予定を記述したスケジュール情報(割り当て情報の一例)を保持しており、このスケジュール情報を参照して、未割り当てのタスクがあるか判断する。未割り当てのタスクがあると判断された場合(S101:YES)、OS50は、処理をステップS102に移行する。未割り当てのタスクがないと判断された場合(S101:NO)、OS50は、処理をステップS100に移行する。
ステップS102において、OS50は、未割り当てのタスクの中から、最も優先度が高い一のタスクを選択する。ここで選択されたタスクを以下「対象タスク」という。優先度が最も高いタスクが複数ある場合、OS50は、優先度が最も高い複数のタスクの中から、他の基準に従って対象タスクを選択する。他の基準は、例えば、処理が先に行われるものを先に対象タスクとして選択するという基準である。
ステップS103において、OS50は、対象タスクが、割り当て済みのタスクと関連性を有しているか判断する。割り当て済みのタスクとは、そのタスクを実行するコアが決定されており、そのタスクの実行予定がスケジュール情報に記述されているタスクをいう。すなわち、割り当て済タスクは、まだ実行されていないタスクをいう。実行済のタスクは、スケジュール情報から削除される。OS50は、タスク間の関連性を示す属性情報を保持しており、この属性情報を参照して対象タスクが割り当て済みのタスクと関連性を有しているか判断する。対象タスクが割り当て済みのタスクと関連性を有していると判断された場合(S103:YES)、OS50は、処理をステップS104に移行する。対象タスクが割り当て済みのタスクと関連性を有していないと判断された場合(S103:NO)、OS50は、処理をステップS105に移行する。
ステップS104において、OS50は、対象タスクと関連性を有するタスクが割り当てられているコア群に、対象タスクを割り当てる。以下、対象タスクが割り当てられるコアを「割り当て先」という。割り当て先の候補となるコアが複数ある場合、OS50は、例えば以下の優先順位に従って割り当て先を決定する。
(i)割り当て済みのタスクの数が最少のコア群に属するコア。
(ii)割り当て済みのタスクの数が最少のコア。
(iii)識別番号が先のコア。
あるいは、OS50は、以下の優先順位に従って割り当て先を決定してもよい。
(i)割り当て済みのタスクの数が最少のコア群に属するコア。
(ii)割り当て済みのタスクの数が最少のコア。
(iii)関連性を有するタスクが割り当て済のコア。
(iv)より新しいタスクが割り当て済のコア。
OS50は、対象タスクと割り当て先との関係を、スケジュール情報に追加する。ステップS104の処理を終えると、OS50は、処理をステップS101に移行する。
ステップS105において、OS50は、未割り当てのタスクの中に対象タスクと関連性を有するタスクが存在するか判断する。未割り当てのタスクの中に対象タスクと関連性を有するタスクがあると判断された場合(S105:YES)、OS50は、処理をステップS106に移行する。未割り当てのタスクの中に対象タスクと関連性を有するタスクがないと判断された場合(S105:NO)、OS50は、処理をステップS107に移行する。
ステップS106において、OS50は、複数のコア群のうち、割り当て済みのタスクが最も少ないコア群に属するコアにタスクを割り当てる。どのコアとどのコアが同一のコア群に属するかは、構成情報により示される。OS50は、構成情報を保持しており、この構成情報を参照して同一のコア群に属するコアを特定する。また、OS50は、スケジュール情報を参照して割り当て済みのタスクが最も少ないコア群を特定する。割り当て済タスクが最も少ないコア群が複数ある場合、OS50は、例えば以下の優先順位に従って割り当て先の候補となるコア群を1つに絞り込む。
(1)単一のコアに割り当て済タスクの数の最大値が少ないコア群。
(2)識別番号が早いコアを含むコア群。
OS50は、特定されたコア群に含まれるコアの中から以下の優先順位に従って割り当て先を決定する。
(i)割り当て済みのタスクの数が最少のコア。
(ii)識別番号が先のコア。
OS50は、対象タスクと割り当て先との関係を、スケジュール情報に追加する。ステップS106の処理を終えると、OS50は、処理をステップS101に移行する。
ステップS107において、OS50は、コア101〜104のうち割り当て済みのタスクが最も少ないコアに対象タスクを割り当てる。割り当て済タスクが最少のコアが複数ある場合、OS50は、例えば識別番号が先のコアを割り当て先として決定する。OS50は、対象タスクと割り当て先との関係を、スケジュール情報に追加する。ステップS107の処理を終えると、OS50は、処理をステップS101に移行する。
タスクの割り当てとは独立して、OS50は、タスクを実行する。OS50は、スケジュール情報を参照して各コアに実行させるべきタスクを特定し、そのタスクを実行するよう各コアを制御する。タスクの実行が完了すると、OS50は、スケジュール情報からそのタスクに実行予定を削除する。
3−2.動作例1
以下、具体例を用いて図7のフローに係る新規タスクの割り当て処理についてより詳細に説明する。なお動作例1ないし5においては、説明を簡単にするため、タスクの実行については考えない。
図8は、コアに割り当て済みのタスクを例示する図である。この例では、タスク群801〜803の3群のタスク群がコアに割り当て済みである。タスク群801は、タスクAおよびタスクBが直列に接続された処理である。タスク群801にデータaが入力されると、最終的にタスクBからデータcが出力される。タスク群801は、例えば画像処理をするためのパイプライン処理である。タスク群802は、タスクDおよびタスクEが並列に接続された処理である。詳細には、タスク群802においてデータdが入力されると、タスクCによりデータeが出力され、さらにタスクDによりデータfが出力される。タスク群802は、例えばLUT(Look Up Table)を参照する処理である。タスク群803は、他のタスクとの関連性が無いタスクの集合である。タスク群803はタスクEおよびタスクFを含むが、両者は互いに独立しており、データを共有することはない。タスク群803は、例えば、ネットワークまたはUSB(Universal Serial Bus)などのインターフェース関連の処理である。
図9は、図8のタスクの割り当てを示すスケジュール情報を例示する図である。図9の例では、各コアに割り当て済タスクが、その実行順を示す情報と共に記録されている。この時点で、コア101にはタスクAおよびタスクEが、コア102にはタスクBおよびタスクFが、コア103にはタスクCが、コア104にはタスクDが、それぞれ割り当てられている。この図では、より上の階層に記載されているものがより先に実行される。
以上の状況において新規タスクが発生した場合に、その新規タスクがどのコアに割り当てられるか説明する。説明に先立って、まず新規タスクの構造および属性情報について説明する。
図10は、新規タスクを例示する図である。例えばアプリケーションにより新たなジョブが発生すると、アプリケーションは、このジョブを実行するため、タスク群804〜806を起動する。タスク群804は、タスクGおよびタスクHが直列に接続された処理である。タスク群804にデータaが入力されると、最終的にタスクHからデータlが出力される。タスク群805は、タスクIおよびタスクJが並列に接続された処理である。タスク群805においてデータmが入力されると、タスクIによりデータnが出力され、タスクJによりデータoが出力される。タスク群806は、他のタスク群と関連性が無いタスクの集合である。この例ではタスクG〜Lの優先度は以下のとおり設定されている。
タスクG:優先度1(最高)
タスクH:優先度1(最高)
タスクI:優先度2
タスクJ:優先度3
タスクK:優先度4
タスクL:優先度5
図11は、図10のタスクの属性情報を例示する図である。図10と図8を対比すると分かるように、タスクGはタスクAおよびタスクHと、タスクHはタスクGと、タスクIはタスクJと、タスクJはタスクIと、それぞれ関連性を有している。
コアへのタスクの割り当ての説明に移る。OS50は、図10の新規タスクが発生したことを検知する(ステップS100)。これらの新規タスクは、検出された時点では当然コアに割り当てられていない。したがって、フローはステップS101からS102に進む。OS50は、新規タスクの中から対象タスクを選択する。具体的には、OS50は、優先度が最も高いものを対象タスクとして選択する。したがって、まずはタスクGが対象タスクとして選択される(ステップS102)。処理はステップS103に進む。タスクGについて属性情報を見ると、割り当て済タスクAと関連性を有することが示されている(S103:YES)。したがって処理はステップS104に進む。タスクAが割り当て済のコア101/102が割り当て先の候補である。いまコア101およびコア102はいずれも割り当て済みのタスクの数が同じなので、識別番号が先のコア101に対象タスクが割り当てられる(ステップS104)。
次にタスクHが対象タスクとして選択される(ステップS102)。タスクHについて属性情報を見ると、タスクGと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクGが割り当てられているコア101/102が、割り当て先の候補である。いまコア102の方がコア101よりも割り当て済みのタスクの数が少ないので、コア102に対象タスクが割り当てられる(ステップS104)。
次にタスクIが対象タスクとして選択される(ステップS102)。タスクIについて属性情報を見ると、割り当て済みのタスク(タスクA〜H)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクIについて属性情報を見ると、未割り当てのタスクJと関連性を有することが示されている(S105:YES)。したがってフローはステップS106に進む。割り当て済タスクが少ないコア103/104が割り当て先の候補である。いまコア103およびコア104はいずれも割り当て済みのタスクの数が同じなので、番号が先のコア103に対象タスクが割り当てられる(ステップS106)。
次にタスクJが対象タスクとして選択される(ステップS102)。タスクJについて属性情報を見ると、タスクIと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクIが割り当て済のコア103/104が、割り当て先の候補である。いまコア104の方がコア103よりも割り当て済みのタスクの数が少ないので、コア104に対象タスクが割り当てられる(ステップS104)。
次にタスクKが対象タスクとして選択される(ステップS102)。タスクKについて属性情報を見ると、割り当て済みのタスク(タスクA〜J)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクKについて属性情報を見ると、未割り当てのタスク(タスクL)とは関連性を有さないことが示されている(S105:NO)。したがってフローはステップS107に進む。この時点で割り当て済みのタスクが最も少ないコア103およびコア104が、割り当て先の候補である。OS50は、番号が先のコア103に対象タスクを割り当てる(ステップS107)。
次にタスクLが対象タスクとして選択される(ステップS102)。タスクLについて属性情報を見ると、割り当て済みのタスク(タスクA〜K)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。この時点で未割り当てのタスクは存在しない。したがって、対象タスクは未割り当てのタスクとは関連性を有さない(S105:NO)。フローはステップS107に進む。OS50は、この時点で割り当て済みのタスクが最も少ないコア104に対象タスクを割り当てる(ステップS107)。
図12は、タスクG〜Lの割り当て結果を例示する図である。このように、本実施形態によれば、各コアにより均等にタスクが割り当てられる。引き続き、図12の状態からさらに新規タスクが発生した場合の、タスクの割り当てについて説明する。まずは、さらなる新規タスクの構造および属性情報について説明する。
図13は、さらなる新規タスクを例示する図である。タスク群807およびタスク群808が新規タスクである。タスク群807は、タスクOを含む。タスクOは、他のタスクと関連性を有さない。タスク群808は、タスクMおよびタスクNを含む。タスクMおよびタスクNは、共通の入力データを用いるタスクである。この例ではタスクM〜Oの優先度は以下のとおり設定されている。
タスクM:優先度3
タスクN:優先度2
タスクO:優先度1(最高)
図14は、タスクの属性情報を例示する図である。タスクMおよびタスクNが互いに関連性を有していることが示されている。
コアへのタスクの割り当ての説明に移る。OS50は、図13の新規タスクが発生したことを検知する(ステップS100)。これらの新規タスクは、検出された時点では当然コアに割り当てられていない。したがって、フローはステップS101からS102に進む。OS50は、新規タスクの中から対象タスクを選択する。具体的には、OS50は、優先度が最も高いものを対象タスクとして選択する。したがって、まずはタスクOが対象タスクとして選択される(ステップS102)。処理はステップS103に進む。タスクOについて属性情報を見ると、割り当て済みのタスク(タスクA〜L)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクOについて属性情報を見ると、未割り当てのタスク(タスクMおよびタスクN)とは関連性を有さないことが示されている(S105:NO)。したがってフローはステップS107に進む。この時点で各コアに割り当て済みのタスクの数は同じであるので、コア101〜104が割り当て先の候補である。OS50は、このうち番号が最先のコア101に対象タスクを割り当てる(ステップS107)。
次にタスクMが対象タスクとして選択される(ステップS102)。タスクMについて属性情報を見ると、割り当て済みのタスク(タスクA〜LおよびO)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクMについて属性情報を見ると、未割り当てのタスクNと関連性を有することが示されている(S105:YES)。したがってフローはステップS106に進む。コア101/102、およびコア103/104に割り当て済みのタスクの数を比較すると、コア103/104の方が割り当て済タスクが少ないので割り当て先の候補となる。いまコア103およびコア104はいずれも割り当て済みのタスクの数が同じなので、番号が先のコア103に対象タスクが割り当てられる(ステップS106)。
次にタスクNが対象タスクとして選択される(ステップS102)。タスクNについて属性情報を見ると、タスクMと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクMが割り当て済のコア103/104が、割り当て先の候補である。いまコア104の方がコア103よりも割り当て済みのタスクの数が少ないので、コア104に対象タスクが割り当てられる(ステップS104)。
図15は、タスクM〜Oの割り当て結果を例示する図である。このように、本実施形態によれば、各コアにより均等にタスクが割り当てられる。
3−3.動作例2
図16は、動作例2に係る割り当て済みのタスクを例示する図である。すなわち図16は、現時点でのスケジュール情報を示している。この例では、タスクA〜Gがコア101〜104に割り当てられている。この状況で、タスクHおよびタスクIが新たに発生した例を考える。
図17は、この例におけるタスクHおよびタスクIの属性情報を示す。タスクHはタスクEおよびタスクIと関連性を有しており、タスクIはタスクHと関連性を有している。新規タスクに関し、これ以外の関連性はない。新規タスクのうち、タスクHの優先度はタスクIの優先度よりも高い。
まずタスクHが対象タスクとして選択される(ステップS102)。タスクHについて属性情報を見ると、割り当て済みのタスクEと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクEが割り当てられているコア101/102が、割り当て先の候補である。いコア101およびコア102に割り当て済みのタスクの数は同じなので、識別番号が先のコア101に対象タスクが割り当てられる(ステップS104)。
図18は、この時点のスケジュール情報を示す図である。
次にタスクIが対象タスクとして選択される(ステップS102)。タスクIについて属性情報を見ると、割り当て済みのタスクHと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクHが割り当てられているコア101/102が、割り当て先の候補である。いまコア102の方がコア101よりも割り当て済みのタスクが少ない。したがって、コア102に対象タスクが割り当てられる(ステップS104)。
図19は、動作例2によるタスクの割り当て結果を示す図である。
3−4.動作例3
動作例2と同じ割り当て済みのタスク(図16)を考える。タスクA〜Gがコア101〜104に割り当てられている。この状況で、タスクHおよびタスクIが新たに発生した例を考える。
図20は、動作例3におけるタスクHおよびタスクIの属性情報を示す。タスクHはタスクIと関連性を有しており、タスクIはタスクHと関連性を有している。新規タスクに関し、これ以外の関連性はない。新規タスクのうちタスクHの優先度はタスクIの優先度よりも高い。
まずタスクHが対象タスクとして選択される(ステップS102)。タスクHについて属性情報を見ると、割り当て済みのタスク(タスクA〜G)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクHについて属性情報を見ると、未割り当てのタスクIと関連性を有することが示されている(S105:YES)。したがってフローはステップS106に進む。コア101/102とコア103/104とを比較すると、コア103/104に割り当て済みのタスクの方が少ない。したがって、コア103/コア104が割り当て先の候補である。いまコア103の方がコア104よりも割り当て済みのタスクの数が少ないので、コア103に対象タスクが割り当てられる(ステップS106)。
図21は、この時点でのスケジュール情報を示す図である。
次にタスクIが対象タスクとして選択される(ステップS102)。タスクIについて属性情報を見ると、割り当て済みのタスクHと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクHが割り当てられているコア103が属するコア103/104が割り当て先の候補である。いまコア103および104に割り当て済みのタスクの数は同じである。したがって、識別番号の早いコア103に対象タスクが割り当てられる(ステップS104)。
図22は、動作例3によるタスクの割り当て結果を示す図である。
3−5.動作例4
図23は、動作例4に係る割り当て済みのタスクを示す図である。すなわち図23は、現時点でのスケジュール情報を示している。この例では、タスクA〜GおよびJがコア101〜104に割り当てられている。この状況で、タスクHおよびタスクIが新たに発生した例を考える。タスクHおよびタスクIの属性情報は、動作例3(図20)と同じである。
まずタスクHが対象タスクとして選択される(ステップS102)。タスクHについて属性情報を見ると、割り当て済みのタスク(タスクA〜GおよびJ)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクHについて属性情報を見ると、未割り当てのタスクIと関連性を有することが示されている(S105:YES)。したがってフローはステップS106に進む。コア101/102とコア103/104とを比較すると、割り当て済みのタスクの数は同じである。コアに割り当て済みのタスクの最大数を比較すると、コア101/102が2つであり、コア103/104が3つである。したがって、コア101/102が割り当て先の候補となる。いまコア101およびコア102は割り当て済みのタスクの数が同じなので、識別番号の早いコア101に対象タスクが割り当てられる(ステップS106)。
図24は、この時点でのスケジュール情報を示す図である。
次にタスクIが対象タスクとして選択される(ステップS102)。タスクIについて属性情報を見ると、割り当て済みのタスクHと関連性を有することが示されている(S103:YES)。したがってフローはステップS104に進む。タスクHが割り当てられているコア101が属するコア103/104が割り当て先の候補である。いまコア102の方がコア101よりも割り当て済みのタスクが少ない。したがって、コア102に対象タスクが割り当てられる(ステップS104)。
図25は、動作例4によるタスクの割り当て結果を示す図である。動作例4(図22)と対比すると、新規タスクの属性情報が同じであっても、その時点で割り当て済みのタスクの状況に応じて割り当て先が変わることがわかる。
3−6.動作例5
図26は、動作例5に係る割り当て済みのタスクを例示する図である。すなわち図26は、現時点でのスケジュール情報を示している。この例では、タスクA〜GおよびJがコア101〜104に割り当てられている。タスクGは2回発生しており、いずれもコア104に割り当て済みである。この状況で、タスクHおよびタスクIが新たに発生した例を考える。
図27は、この例におけるタスクHおよびタスクIの属性情報を示す。タスクHおよびタスクIはいずれも、他のタスクと関連性を有してない。新規タスクのうち、タスクHの優先度はタスクIの優先度よりも高い。
まずタスクHが対象タスクとして選択される(ステップS102)。タスクHについて属性情報を見ると、割り当て済みのタスク(タスクA〜GおよびJ)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。タスクHについて属性情報を見ると、未割り当てのタスク(タスクI)とは関連性を有さないことが示されている(S105:NO)。したがってフローはステップS107に進む。この時点でコア103に割り当て済みのタスクの数が最も少ない。したがって、コア103に対象タスクが割り当てられる(ステップS107)。
図28は、この時点でのスケジュール情報を示す図である。
次にタスクIが対象タスクとして選択される(ステップS102)。タスクIについて属性情報を見ると、割り当て済みのタスク(タスクA〜G、J、およびH)とは関連性を有さないことが示されている(S103:NO)。したがってフローはステップS105に進む。この時点で未割り当てのタスクはない。つまり対象タスクは未割り当てのタスクとは関連性を有さない(S105:NO)。したがってフローはステップS107に進む。この時点でコア101〜103に割り当て済みのタスクの数が最も少ない。したがって、このうち識別番号が最も早いコア101に対象タスクが割り当てられる(ステップS107)。
図29は、動作例5によるタスクの割り当て結果を示す図である。
3−7.動作例6
図30は、動作例6に係るタスクを示す図である。動作例6に係るタスクは、タスクA〜Gを含む。タスクA〜Eは、一連のパイプライン処理を構成する。タスクFおよびGはそれぞれ他のタスクとは独立している。この例では、タスクA〜Eが繰り返し発生する。
図31は、動作例6に係るタスクの属性情報を示す図である。タスクAはタスクBと、タスクBはタスクAおよびCと、タスクCはタスクBおよびDと、タスクDはタスクCおよびEと、タスクEはタスクDと、それぞれ関連性を有する。タスクFおよびタスクGは他のタスクと関連性を有さない。優先度は、高い方から順に、タスクA、B、C、D、E、F、Gである。
図32〜42は、動作例6によるタスクの割り当てを示す図である。ここでは、タスクの発生、割り当て、および実行を時系列で示している。図の縦軸は、タスクの実行に要する時間を単位とする時間の経過を表している。ここでは説明を簡単にするため、各タスクの実行に要する時間は等しい例を用いる。ここでは、繰り返し発生する同種のタスクを区別するため、タスクの後に添字を付している。例えば「A1」は1回目に発生したタスクAを示している。この図には、タスク発生、タスク割り当て、およびタスク割り当て(比較例)の欄がある。タスク発生の欄には、その時刻に新たに発生したタスクが記載されている。例えば時刻t1に、タスクA1、B1、C1、D1、E1、およびF1が発生している。タスク割り当ての欄には、その時刻から次の時刻までの間に実行されるタスクが記載されている。例えば時刻t1から時刻t2の間に、タスクA1、B1、およびF1が実行される。タスク割り当て(比較例)の欄には、比較例におけるタスク実行予定が記載されている。なお比較例においては、割り当て先がタスク毎にあらかじめ決められている。また、以下においては、比較例のタスク割り当てについては特に詳細な説明はしない。
時刻t1において、タスクA1、B1、C1、D1、E1、およびF1が発生する。時刻t1以前には、どのコアにも割り当て済タスクは無い。コア101にタスクA1、D1、およびE1が、コア102にタスクB1およびC1が、コア103にタスクF1が、それぞれ割り当てられる(図32)。時刻t2になった時点で1行目のタスクは実行が完了している。時刻t2に発生するタスクは無い。
時刻t3において、タスクA2、B2、C2、D2、E2、およびG1が発生する。この時点で、コア101にタスクE1が割り当て済である。コア103/104に割り当てられているタスクがゼロなので、まずタスクA2がコア103に割り当てられる。以下、すべてのタスクの割り当てが完了すると、コア101にタスクE1が、コア102にタスクG2が、コア103にタスクA2、D2、およびE2が、コア104にタスクB2およびC2が割り当てられる(図33)。なお時刻t3において実行済のタスクはハッチングで示している。以下の図において同様である。
時刻t4において、タスクF2が発生する。この時点で、コア103にタスクD2およびE2が、コア104にタスクC2が割り当て済である。タスクF2は、コア101に割り当てられる(図34)。
時刻t5において、タスクA3、B3、C3、D3、およびE3が発生する。この時点で、コア103にタスクE2が割り当て済である。コア101にタスクA3、D3、およびE3が、コア102にタスクB3およびC3が割り当てられる(図35)。時刻t6に発生するタスクは無い。
時刻t7において、タスクA4、B4、C4、D4、E4、およびF3が発生する。この時点で、コア101にタスクE3が割り当て済である。コア102にタスクF3が、コア103にタスクA4、C4、およびE4が、コア104にタスクB4およびC4が割り当てられる(図36)。
時刻t8において、タスクG2が発生する。この時点で、コア103にタスクC4およびE4が、コア104にタスクC4が割り当て済である。コア101にタスクG2が割り当てられる(図37)。
時刻t9において、タスクA5、B5、C5、D5、E5、およびF4が発生する。この時点で、コア103にタスクE4が割り当て済である。コア101にタスクA5、D5、およびE5が、コア102にタスクB5およびC5が、コア104にタスクF4が割り当てられる(図38)。時刻t10において発生するタスクは無い。
時刻t11において、タスクA6、B6、C6、D6、およびE6が発生する。この時点で、コア101にタスクE5が割り当て済である。コア103にタスクA6、D6、およびE6が、コア104にタスクB6およびC6が割り当てられる(図39)。
時刻t12において、タスクF5およびG3が発生する。この時点で、コア103にタスクD6およびE6が、コア104にタスクC6が割り当て済である。コア101にタスクF5が、コア102にタスクG3が割り当てられる(図40)。
時刻t13において、タスクA7、B7、C7、D7、およびE7が発生する。この時点で、コア103にタスクE6が割り当て済である。コア101にタスクA7、D7、およびE7が、コア102にタスクB7およびC7が割り当てられる(図41)。時刻t14において発生するタスクは無い。
時刻t15において、タスクA8、B8、C8、D8、E8、およびF6が発生する。この時点で、コア101にタスクE7が割り当て済である。コア102にタスクF6が、コア103にタスクA8、D8、およびE8が、コア104にタスクB8およびC8が割り当てられる(図42)。
時刻t16において、タスクG4が発生する。この時点で、コア103にタスクD8およびE8が、コア104にタスクC8が割り当て済である。コア101にタスクG4が割り当てられる(図43)。
以上で割り当てられたタスクは、時刻t18にはすべて実行が完了する。一方で比較例においては、割り当てられたタスクの実行が完了するのは時刻t21である。このように、本実施形態によれば、タスクがより効率的にコアに割り当てられる。これにより、CPU10のパフォーマンスが向上する。
4.変形例
本発明は上述の実施形態に限定されるものではなく、種々の変形実施が可能である。以下、変形例をいくつか説明する。以下の変形例のうち2つ以上のものが組み合わせて用いられてもよい。
4−1.変形例1
図43は、変形例1に係る新規タスクの割り当て処理を示すフローチャートである。変形例1に係る処理は、タスクの関連性の種類およびCPUのハードウェア構成(キャッシュメモリの構成)の組み合わせによって、タスク割り当てのアルゴリズムを変更する点が図7のフローと異なっている。以下この処理を、図7のフローと対比しつつ説明する。
ステップS200において、OS50は、新規タスクが発生したか判断する。新規タスクが発生していないと判断された場合(S200:NO)、OS50は、新規タスクが発生するまで待機する。新規タスクが発生したと判断された場合(S200:YES)、OS50は、処理をステップS201に移行する。
ステップS201において、OS50は、未割り当てのタスクがあるか判断する。未割り当てのタスクがあると判断された場合(S201:YES)、OS50は、処理をステップS202に移行する。未割り当てのタスクがないと判断された場合(S201:NO)、OS50は、処理をステップS200に移行する。ステップS202において、OS50は、未割り当てのタスクの中から、最も優先度が高い一のタスクを対象タスクとして選択する。ステップS200〜S202の処理は、ステップS100〜S102の処理に相当する。
ステップS203において、OS50は、割り当て制御テーブルを読み込む。割り当て制御テーブルは、タスクの割り当てアルゴリズムを決定するための情報が記録されたテーブルである。タスクの割り当てアルゴリズムは、タスク間の関連性およびCPUのキャッシュメモリ構造に応じて決定される。
まずタスクの関連性の分類について説明する。この例では、タスクの関連性が3つのカテゴリ(カテゴリα〜γという)に分類される。カテゴリαは、いわゆるパイプライン処理における関連性に相当する分類である。これは例えばタスク群801(図8)のような構造に相当する。例えば複合機で行われる画像処理ではデータサイズが大きいため、タスク間のデータ受け渡しのレイテンシが大きいとパフォーマンスに大きな悪影響を与える。したがって、この分類の処理においてはキャッシュヒット率が高いことが期待される。
カテゴリβは、LUTを参照する処理における関連性に相当する分類であり、例えば、タスク群802(図8)のような構造に相当する。この処理は、あるデータテーブルを参照してデータを置換するような処理に用いられる。例えば複合機で行われる色空間変換の場合、参照されるLUTのデータサイズが大きく、また画像により参照するデータが異なる。そのため、カテゴリαと比較すると、キャッシュのヒット率が高いことは期待されない。
カテゴリγは、他のタスクとは独立した処理における関連性であり、例えば、タスク群803(図8)のような構造に相当する。この処理は、例えば、検知系の処理やインターフェース処理に用いられる。これらの処理ではキャッシュのヒット率が高くなることはほとんど期待されないし、その必要もない。
以上の事情を考慮すると、一般に、タスク間の関連性の強さは、α>β>γとなる。したがってこの例では、関連性の強さに応じて、タスク割り当てのアルゴリズムを変更する。例えばソフトウェアをコンパイルするときに、各タスクについて他のタスクとの関連性を、上記の分類を含む情報として抽出することができる。
図44は、分類を含むタスク間の関連性を例示する図である。この例では、例えばタスクAはタスクBとカテゴリαの関連性を有することが示されている。また、タスクJはタスクCとカテゴリαの関連性を有し、かつタスクIとカテゴリβの関連性を有することが示されている。
図45は、CPUのキャッシュメモリの構成を例示する図である。キャッシュメモリの構成は、例えばカテゴリW〜Zに分類される。カテゴリWは、L2キャッシュを2つのコアで共有する構造に相当する。カテゴリXは、L2キャッシュを4つのコアで共有する構造に相当する。カテゴリYは、L2キャッシュを2つのコアで共有し、かつL3キャッシュを4つのコアで共有する構造に相当する。カテゴリZは、L2キャッシュを4つのコアで共有し、かつL3キャッシュを4つのコアで共有する構造に相当する。
図46は、割り当て制御テーブルを例示する図である。割り当て制御テーブルには、CPUのキャッシュメモリ構造およびタスクの関連性の分類毎に、タスク割り当てのアルゴリズムを特定する情報が記録されている。この例では、タスク割り当てのアルゴリズムとして第1アルゴリズムおよび第2アルゴリズムが用いられる。第1アルゴリズムは、実施形態で説明したアルゴリズム、すなわち割り当て済タスクとの関連性を考慮したアルゴリズムである。第2アルゴリズムは、第1アルゴリズムと異なるアルゴリズムである。なお、カテゴリα〜γの分類は、適用される割り当てアルゴリズムに影響を与えているという意味において、タスク間の関連性の重みを示しているといえる。
例えば、CPU10(図5)はカテゴリWの構造を有しているので、カテゴリαの関連性を有するタスクについては第1アルゴリズムによるタスクの割り当てが、カテゴリβおよびγの関連性を有するタスクについては第2アルゴリズムによるタスクの割り当てが、それぞれ行われる。
再び図43を参照する。ステップS204において、OS50は、割り当て済タスクの中に対象タスクと第1アルゴリズムを適用する関係にあるタスクが存在するか判断する。割り当て済タスクの中に対象タスクと第1アルゴリズムを適用する関係タスクが存在すると判断された場合(S204:YES)、OS50は、処理をステップS205に移行する。割り当て済タスクの中に対象タスクと第1アルゴリズムを適用する関係にあるタスクが存在しないと判断された場合(S204:NO)、OS50は、処理をステップS206に移行する。
ステップS205において、OS50は、対象タスクと第1アルゴリズムを適用する関係にあるタスクが割り当てられているコア群に、対象タスクを割り当てる。ステップS205の処理はステップS104の処理に相当する。ステップS205の処理を終えると、OS50は、処理をステップS201に移行する。
ステップS206において、OS50は、未割り当てのタスクの中に対象タスクと第1アルゴリズムを適用する関係にあるタスクが存在するか判断する。未割り当てのタスクの中に対象タスクと第1アルゴリズムを適用する関係にあるタスクが存在すると判断された場合(S206:YES)、OS50は、処理をステップS207に移行する。未割り当てのタスクの中に対象タスクと第1アルゴリズムを適用する関係にあるタスクが存在しないと判断された場合(S206:NO)、OS50は、処理をステップS208に移行する。
ステップS207において、OS50は、複数のコア群のうち、割り当て済みのタスクが最も少ないコア群に属するコアにタスクを割り当てる。ステップS207の処理はステップS106の処理に相当する。ステップS106の処理を終えると、OS50は、処理をステップS201に移行する。
ステップS208において、OS50は、コア101〜104のうち割り当て済みのタスクが最も少ないコアに対象タスクを割り当てる。ステップS208の処理はステップS107の処理に相当する。ステップS208の処理を終えると、OS50は、処理をステップS201に移行する。
変形例1においては、CPUのキャッシュメモリ構造との関係において効果が高いことが期待されるタスクに対してのみ、タスクの関連性を考慮したタスク割り当てが行われる。
4−2.変形例2
図47は、変形例2に係る新規タスクの割り当て処理を示すフローチャートである。変形例2に係る処理は、タスク間で共有されるデータのサイズを考慮する点において図7のフローと異なっている。以下この処理を、図7のフローと対比しつつ説明する。
ステップS300において、OS50は、新規タスクが発生したか判断する。新規タスクが発生していないと判断された場合(S300:NO)、OS50は、新規タスクが発生するまで待機する。新規タスクが発生したと判断された場合(S300:YES)、OS50は、処理をステップS301に移行する。
ステップS301において、OS50は、未割り当てのタスクがあるか判断する。未割り当てのタスクがあると判断された場合(S301:YES)、OS50は、処理をステップS302に移行する。未割り当てのタスクがないと判断された場合(S301:NO)、OS50は、処理をステップS300に移行する。ステップS302において、OS50は、未割り当てのタスクの中から、最も優先度が高い一のタスクを対象タスクとして選択する。ステップS300〜S302の処理は、ステップS100〜S102の処理に相当する。
ステップS303において、OS50は、割り当て済タスクの中に対象タスクと関連性を有するタスクが存在するか判断する。割り当て済タスクの中に対象タスクと関連性を有するタスクが存在すると判断された場合(S303:YES)、OS50は、処理をステップS304に移行する。割り当て済タスクの中に対象タスクと関連性を有するタスクが存在しないと判断された場合(S304:NO)、OS50は、処理をステップS307に移行する。ステップS303の処理はステップS103の処理に相当する。
ステップS304において、OS50は、対象タスクおよび対象タスクと関連性を有するタスクとが共有するデータのサイズが、L1キャッシュのサイズより大きいか判断する。タスク間で共有するデータのサイズは、属性情報により示される。L1キャッシュのサイズは、構成情報により示される。OS50は、これらの情報を参照して判断する。共有するデータのサイズがL1キャッシュのサイズより大きいと判断された場合(S304:YES)、OS50は、処理をステップS305に移行する。共有するデータのサイズがL1キャッシュのサイズ以下であると判断された場合(S304:NO)、OS50は、処理をステップS306に移行する。
ステップS305において、OS50は、対象タスクと関連性を有するタスクが割り当て済タスク群に対象タスクを割り当てる。ステップS305の処理はステップS104の処理に相当する。ステップS305の処理を終えると、OS50は、処理をステップS301に移行する。
ステップS306において、OS50は、対象タスクと関連性を有するタスクが割り当て済タスクに対象タスクを割り当てる。ステップS306の処理を終えると、OS50は、処理をステップS301に移行する。
ステップS307において、OS50は、未割り当てのタスクの中に対象タスクと関連性を有するタスクが存在するか判断する。未割り当てのタスクの中に対象タスクと関連性を有するタスクが存在すると判断された場合(S307:YES)、OS50は、処理をステップS308に移行する。未割り当てのタスクの中に対象タスクと関連性を有するタスクが存在しないと判断された場合(S307:NO)、OS50は、処理をステップS310に移行する。ステップS307の処理はステップS105の処理に相当する。
ステップS308において、OS50は、対象タスクおよび対象タスクと関連性を有するタスクとが共有するデータのサイズが、L1キャッシュのサイズより大きいか判断する。共有するデータのサイズがL1キャッシュのサイズより大きいと判断された場合(S308:YES)、OS50は、処理をステップS309に移行する。共有するデータのサイズがL1キャッシュのサイズ以下であると判断された場合(S308:NO)、OS50は、処理をステップS310に移行する。
ステップS309において、OS50は、複数のコア群のうち、割り当て済タスクが最も少ないコア群に属するコアにタスクを割り当てる。ステップS309の処理はステップS106の処理に相当する。ステップS309の処理を終えると、OS50は、処理をステップS301に移行する。
ステップS310において、OS50は、コア101〜104のうち割り当て済みのタスクが最も少ないコアに対象タスクを割り当てる。ステップS310の処理はステップS107の処理に相当する。ステップS310の処理を終えると、OS50は、処理をステップS301に移行する。
変形例2においては、タスク間で共有されるデータのサイズがL1キャッシュのサイズ以下である場合には、これらのタスクは同じコアに割り当てられる。
4−3.変形例3
変形例1において、CPUのキャッシュメモリ構造を考慮せず、タスク間の関連性の種類に応じてタスクを割り当ててもよい。
4−4.変形例4
図48は、変形例4に係る属性情報を例示する図である。この例では、属性情報において入力データの関連性と出力データの関連性とが区別されている。この図は、図8のタスク群801〜803における属性情報を示している。タスクAの出力データがタスクBの入力データとなっているので、タスクAの「出力」の項にタスクBが記録されている。同様に、タスクBの「入力」の項にタスクAが、「出力」の項にタスクCが記録されている。
このような属性情報を用いることにより、タスク間の関連性がより詳細に定義される。この場合、図7のフローは例えば以下のとおり改変される。ステップS103において、OS50は、割り当て済タスクの中に対象タスクと入力データの関連性を有するタスクがあるか判断する。図48のタスクBが対象タスクである場合、対象タスクは、割り当て済タスクAと入力データの関連性を有すると判断される。タスクAが対象タスクであった場合、割り当て済タスクにタスクBが含まれていても、対象タスクと入力データの関連性を有する割り当て済タスクは無いと判断される。割り当て済タスクの中に対象タスクと入力データの関連性を有するタスクがあると判断された場合(S103:YES)、OS50は、処理をステップS104に移行する。割り当て済タスクの中に対象タスクと入力データの関連性を有するタスクが無いと判断された場合(S103:NO)、OS50は、処理をステップS105に移行する。
ステップS105において、OS50は、未割り当てのタスクの中に対象タスクと出力データの関連性を有するタスクがあるか判断する。図48のタスクBが対象タスクである場合、対象タスクは、未割り当てのタスクにタスクAが含まれていても、対象タスクと出力データの関連性を有するタスクは無いと判断される。タスクAが対象タスクであった場合、未割り当てのタスクBは対象タスクと出力データの関連性を有すると判断される。
4−5.変形例5
ステップS103等において対象タスクと割り当て済タスクとの関連性を判断する際に参照する属性情報は、記憶手段55に独立して記憶されているものに限定されない。「独立して記憶されている」とは、スケジュール情報等の他の情報とは別に記憶されていることをいう。スケジュール情報すなわち割り当て情報に、割り当て済タスクの属性情報を含めてもよい。具体的には以下のとおりである。
スケジュール情報に記録されていない種類のタスクを新たにスケジュール情報に記録する際、OS50は、記憶手段55に独立して記憶されている属性情報を参照して、対象タスクの属性情報を、対象タスクと割り当て先コアとの関係とともに、スケジュール情報に追加する。
図49は、変形例5におけるスケジュール情報を例示する図である。この例では、コア101にタスクAが、コア102にタスクBおよびCが、コア103にタスクDが、コア104にタスクEが、それぞれ割り当て済である。スケジュール情報には、コアとタスクとの対応関係に加え、各タスクの属性情報が含まれている。例えば、タスクEの属性情報として、タスクDおよびFと関連性を有することが記録されている。なおこの例では、入力データの関連性と出力データの関連性とは区別されていない。
図49の状態でタスクFの割り当てを考える。OS50は、スケジュール情報を参照する。すると、タスクFは割り当て済のタスクEと関連性を有することが示されている。したがって、OS50は、対象タスクが割り当て済タスクと関連性を有すると判断する(S103:YES)。実施形態においては、ステップS103の判断を行うため、スケジュール情報に加え、それとは別個の属性情報にアクセスする必要があった。これに対し変形例5においては、OS50はスケジュール情報にアクセスするだけで判断を行う。
4−6.変形例6
図50は、変形例6におけるスケジュール情報を例示する図である。スケジュール情報は、変形例5で説明したように、割り当て済タスクの属性情報も含んでいる。入力データの関連性と出力データの関連性とは区別されていない。ここでは、初期化手段57の機能の詳細について説明する。
いま、図50のようにタスクA1〜F1が割り当てられた状態で、これらのタスクが実行される前にタスクA2〜E2が発生した例を考える。まずタスクA2が対象タスクとなる。OS50は、スケジュール情報を参照し、割り当て済タスクの中に対象タスクと関連性を有するタスクが存在するか判断する。スケジュール情報にはタスクB1の属性情報として、タスクAと関連を有することが記録されている。したがって、OS50は、割り当て済タスクの中に対象タスク(タスクA2)と関連性を有するタスク(タスクB1)が存在すると判断する(S103:YES)。したがって、タスクA2はコア102に割り当てられ、以下、タスクB2〜E2もコア101/102に割り当てられる。
しかし、例えば、タスクA1〜E1が第1ページの画像処理に関するものであり、タスクA2〜E2が第2ページの画像処理に関するものである場合、共有されるデータが無いことから、キャッシュヒット率の向上という観点ではタスクA1〜E1とタスクA2〜E2とを同じコア群に割り当てる意義は無い。ところが、図50のスケジュール情報を参照してタスクA2〜E2を割り当てようとすると、タスクA2の割り当てを決定する際に、タスクAとタスクBとの関連性に引きずられ、タスクA2はタスクB1が割り当てられているコア群に割り当てられてしまう。これは、タスク割り当ての偏りを生じさせる原因となる。
変形例6において、OS50は、まず対象タスクが新たなページのタスクとなったときに、スケジュール情報に含まれている属性情報を、主記憶装置30上の記憶領域にコピーする。この例でタスクには処理の対象となるページを特定する情報が含まれており、OS50は、この情報を参照して対象タスクが新たなページのタスクとなったと判断する。
割り当て済タスクの属性情報をコピーすると、OS50は、スケジュール情報に記録されている属性情報のうち、消去フラグが「消去」を示しているものを消去すなわち初期化する。一連のパイプライン処理のうち2番目のタスク(この例ではタスクB)の属性情報のうち入力データを共有するタスク(この例ではタスクA)との関連性を示す情報の消去フラグが「消去」を示している。これ以外の属性情報の消去フラグは「消去」を示していない。
図51は、属性情報の一部が消去されたスケジュール情報を例示する図である。属性情報の消去を行った後で、OS50は、ステップS103の判断に進む。ここで、割り当て済タスクの属性情報には、タスクAとの関連性を示す情報は含まれていない(S103:NO)。したがって処理はステップS105に進む。未割り当てのタスクとの関連性を判断するときは、OS50は、スケジュール情報を参照する。あるいは、OS50は、コピーされた属性情報を参照してもよい。この例では、対象タスクは未割り当てのタスクと関連性を有すると判断される(S105:YES)ので、ステップS106において、OS50は、割り当て済タスクが最も少ないタスク群103/104に対象タスクを割り当てる。OS50は、対象タスクと割り当て先との対応関係に加え、コピーされた属性情報に含まれる関連性の情報を、スケジュール情報に書き込む。この例によれば前述の問題が解消され、より偏りの少ない割り当てが行われる。
4−7.他の変形例
CPU10の構成は図5に例示したものに限定されない。コアの数やキャッシュメモリの階層構造はあくまで例示である。CPU10は、少なくとも、第1キャッシュメモリを共用する2つのコアと、第1キャッシュメモリと別の第2キャッシュメモリを用いる少なくとも1つのコアを有して入ればよい。第1キャッシュメモリが3つ以上のコアで共用されてもよい。また、CPU10は、L2キャッシュの下層にL3キャッシュを有していてもよい。
また、CPU10は、物理的に1つのチップに複数のコアおよびキャッシュメモリを搭載したものに限定されない。複数のCPUチップで1つのキャッシュメモリを共用する情報処理装置に対し、本発明が適用されてもよい。
さらに、実施形態における「複数のコア」は物理的に異なる複数のコアに限定されない。物理的に1つのコアが、時分割で論理的に(擬似的に)複数のコアとして用いられてもよい。
本発明に係る情報処理装置は、図2に例示した画像形成装置1に限定されない。CPU10を用いて複数の処理を並列実行するものであれば、情報処理装置はどのような装置であってもよい。例えば、情報処理装置は、パーソナルコンピュータ、スマートフォン、またはタブレット端末であってもよい。
情報処理装置のソフトウェア構成は図3に例示したものに限定されない。OSおよびアプリケーションによる機能の分担はあくまで例示である。情報処理装置は、処理を発生させるソフトウェアコンポーネント、および発生した処理を実行させるコアを決定するソフトウェアコンポーネントを有していればよい。