アプリケーションが決定したスケジューリングによる効率的なキャッシュの再利用
【課題】マルチプロセッサコンピュータシステにおいて効率的なキャッシュの再利用を図る。
【解決手段】コンピュータシステム100においてタスクを実行すべく複数のスレッドからスレッドを決定する方法が開示される。複数のスレッドは、コンピュータシステムのキャッシュメモリと関連付けられた少なくとも1つのサブセットにグループ化される。タスクは、命令の集合により決定された型を有する。方法は、複数のスレッドのサブセットの実行履歴を取得し、命令の集合及びデータの集合毎にタスク型に依存する重み付けを決定する。次に、実行履歴及び決定された重み付けに基づいてタスクを実行するスレッドのサブセットの適合性が決定される。決定されたスレッドのサブセットの適合性を条件として、スレッドのサブセットと関連付けられたキャッシュメモリの内容を使用してタスクを実行すべくスレッドのサブセットからスレッドを決定する方法が開示される。
【解決手段】コンピュータシステム100においてタスクを実行すべく複数のスレッドからスレッドを決定する方法が開示される。複数のスレッドは、コンピュータシステムのキャッシュメモリと関連付けられた少なくとも1つのサブセットにグループ化される。タスクは、命令の集合により決定された型を有する。方法は、複数のスレッドのサブセットの実行履歴を取得し、命令の集合及びデータの集合毎にタスク型に依存する重み付けを決定する。次に、実行履歴及び決定された重み付けに基づいてタスクを実行するスレッドのサブセットの適合性が決定される。決定されたスレッドのサブセットの適合性を条件として、スレッドのサブセットと関連付けられたキャッシュメモリの内容を使用してタスクを実行すべくスレッドのサブセットからスレッドを決定する方法が開示される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータベースのシステムに関し、特にアプリケーションプログラム内の処理スケジューリングによりキャッシュヒット率の向上に関するものである。
【背景技術】
【0002】
コンピュータシステムにおけるキャッシュメモリは、中央処理装置(CPU)が容易に且つ高速にアクセスするために、主記憶場所からの命令又はオペランドであるデータ項目のコピーを格納するために使用される。キャッシュの再利用は、メモリアクセス時間を短縮することにより殆どのソフトウェアアプリケーションにとって大幅な実行時間の短縮につながるため、非常に望ましい。処理(又はマルチスレッドアプリケーションにおけるスレッド)内の効率的なキャッシュの再利用は、アプリケーションプログラムコードの品質に依存し、処理間及びスレッド間の効率的なキャッシュの再利用は、キャッシュに既にロードされているものを追跡すること、並びにキャッシュ内容の再利用を考慮して次に実行するための後続の処理/スレッドを選択することを含む。
【0003】
キャッシュ内容を追跡することは、一般に、ハードウェア手段又はソフトウェア技術を採用することで当技術分野において実現される。多くの場合、収集されたキャッシュ内容情報の正確度とその処理専用の時間及びリソースの量との間にはトレードオフの関係がある。キャッシュの再利用方法は、一般化されることによりあらゆるプログラム又は処理に対して適用可能なものもあるが、より特化されるものもある。
【0004】
また、データキャッシュ内容の再利用を目標とする方法もあるが、命令キャッシュ内容の再利用を目標とする方法もある。場合によっては、方法は、特にどちらかを目標とすることなく、データ及び命令の双方に対して適用可能である。
【0005】
従来技術において既知であるデータキャッシュの再利用に対する1つの手法は以下の通りである。データを全く共有しない処理は、マルチプロセッサシステムにおいて可能であれば種々のプロセッサ上でスケジュールされる。また、依存関係のために同時に実行されないが、互いに共通データを共有する処理は、それらがキャッシュ内容を共有できるような方法でCPU上でスケジュールされる。方法は、特定のアプリケーションにおいて動作可能なアルゴリズムの詳細な知識を必要とし、データの再利用のみを考慮する。
【0006】
他の従来技術は、同一のプロセッサ上で同一の処理をスケジュールすることで命令データの局所性を向上することを目的とする。命令の再利用のみを考慮する。
【0007】
いくつかの従来技術の方法の主な欠点は、それらがデータの再利用又は命令の再利用を簡略化するように設計されるが、双方を考慮しないことである。
【0008】
他には、より一般的な従来技術の手法は、所定の処理に対してキャッシュ内容の「キャッシュウォーム(cache warmth)」を測定することにより、ハードウェア手段又はソフトウェア技術を用いて命令の再利用及びデータの再利用の双方を簡略化することである。キャッシュウォームは、キャッシュにおいて見つけられた特定の処理のデータの古さを示すために使用される場合がある用語であり、処理毎に各プロセッサの要求の数をカウントする方法又はキャッシュのサブセクションに対するキャッシュミスを追跡する方法、あるいはライン毎のキャッシュの利用を追跡する方法等を含む従来技術における種々の方法で測定される。CPUがキャッシュにおいてデータ項目を見つけられない場合にキャッシュミスが発生する。これにより、関連付けられた性能ペナルティでより低いレベルのキャッシュ又は主記憶からデータ項目を取り出すことが必要になる。
【0009】
キャッシュ内容の再利用に対するこれらのより一般的な従来技術の手法の主な欠点は、それらの複雑性及びその複雑性がプログラム実行に対して課すオーバヘッドにある。それらは、実現するために専用ハードウェアを更に必要とすることが多い。
【発明の概要】
【0010】
本発明の目的は、従来技術の構成の1つ以上の欠点を実質的に克服するかあるいは少なくとも改善することである。
【0011】
本発明によれば、アプリケーションの内部知識を有するスケジューラは、重い処理オーバヘッドを課さずにコンピュータシステムにおいてコンテキストを切り替える結果発生するキャッシュミスを減少することでキャッシュミス率を最小限にするように配置される。
【0012】
多くのグループ内のスレッドの総合的な実行又は処理の履歴及び実行されるタスクの特徴の双方に基づいて、タスクを実行するスレッドのこれらのグループのうちの1つにプリファレンスが与えられる構成が開示される。
【0013】
本発明の一態様によれば、マルチプロセッサのコンピュータシステムにおいて、タスクを実行すべく複数のスレッドから1つのスレッドを決定する方法であって、複数のスレッドはコンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化されており、タスクは命令の集合により決定される型を有しており、当該方法は、複数のスレッドのサブセットの実行履歴を取得するステップと、命令の集合及びデータの集合の各々に対し、タスクの型に依存している重み付けを決定するステップと、実行履歴と決定された重み付けとに基づいて、タスクを実行すべく複数のスレッドのサブセットの適合性を決定するステップと、複数のスレッドのサブセットの決定された適合性を条件として、複数のスレッドのサブセットに関連付けられたキャッシュメモリの内容を使用して、タスクを実行すべく複数のスレッドのサブセットから1つのスレッドを決定するステップと、を含む方法が提供される。
【0014】
使用される複数のスレッドのサブセットの適合性を決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することが望ましい。複数のスレッドのサブセットの適合性を決定するステップは、命令に対する重み付けがデータに対する重み付けより大きい場合に、タスクを実行すべく複数のスレッドのサブセットの適合性を決定するために、データ履歴の前にタスク履歴を検査するサブステップと、データに対する重み付けが命令に対する重み付けより大きい場合に、タスクを実行すべく複数のスレッドのサブセットの適合性を決定するために、タスク履歴の前にデータ履歴を検査するサブステップと、を含むことが望ましい。
【0015】
重み付けは、複数のスレッドのサブセットの実行履歴に基づいて決定されることが好適である。あるいは、重み付けは、ルックアップテーブルを使用して決定され得る。
【0016】
一般に、キャッシュメモリのサイズに依存したサイズを有する。あるいは、実行履歴は、複数のスレッドにより実行されるタスクの集合に関連して最も多く実行された命令のサイズに依存したサイズを有する。更に別の方法において、実行履歴は、複数のスレッドにより実行されるタスクの集合により使用されたデータに依存したサイズを有する。
【0017】
本発明の他の態様によれば、マルチプロセッサのコンピュータシステムにおいて、印刷タスクを処理するためのキャッシュメモリのキャッシュ再利用を管理する方法であって、キャッシュメモリは複数のスレッドのサブセットと関連付けられており、印刷タスクは該印刷タスクのための命令の集合により決定される型を有しており、当該方法は、複数のスレッドのサブセットの実行履歴を取得するステップと、命令の集合及びデータの集合の各々に対し、印刷タスクの型に依存している重み付けを決定するステップと、実行履歴と決定された重み付けとに基づいて、印刷タスクを実行すべく複数のスレッドのサブセットの適合性を決定するステップと、印刷タスクを処理するサブセットから1つのスレッドを決定することにより複数のスレッドのサブセットが適切であると決定される場合に、キャッシュメモリを再利用するステップと、を含む方法が提供される。
【0018】
本発明の更に他の態様によれば、マルチプロセッサのコンピュータシステムにおいて、スレッドによる実行のために複数のタスクから1つのタスクを決定する方法であって、スレッドはコンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化される複数のスレッドの1つであり、タスクは命令の集合により決定される型を有しており、当該方法は、スレッドの実行履歴を取得し、対応するキャッシュメモリを識別するステップと、実行のために利用可能なタスクを識別し、命令の集合及びデータの集合の各々に対し、識別されたタスクの型に依存している重み付けを決定するステップと、実行履歴と決定された重み付けとに基づいて、スレッドで実行すべく識別されたタスクの適合性を決定するステップと、複数のスレッドのサブセットの決定された適合性を条件として、対応するキャッシュメモリの内容に基づいて、複数のタスクからスレッドで実行される1つの識別されたタスクを決定するステップと、を含む方法が提供される。
【0019】
重み付けが、使用されるタスクを決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することが望ましい。スレッドによる実行のために複数のタスクから1つのタスクの適合性を決定するステップは、タスクの命令に対する重み付けがデータに対する重み付けより大きい場合に、スレッドにより実行されるタスクの適合性を決定するために、データ履歴の前にタスク履歴を検査するサブステップと、タスクのデータに対する重み付けが命令に対する重み付けより大きい場合に、スレッドにより実行されるタスクの適合性を決定するために、タスク履歴の前にデータ履歴を検査するサブステップと、を含むことが望ましい。
【0020】
他の態様も更に開示する。
【0021】
次に、以下の図面を参照して本発明の少なくとも1つの実施形態を説明する。
【図面の簡単な説明】
【0022】
【図1】説明される構成が実現される例示的なコンピュータシステムの一部を示す概略ブロック図である。
【図2】図1のコンピュータシステムの処理装置及びメモリ装置の一例を示す概略ブロック図である。
【図3】図1の制御プログラム130に対する例示的なアーキテクチャを示す概略ブロック図である。
【図4】図3のEXECUTION−REGISTER380格納構成要素のメモリレイアウトを示す図である。
【図5】受信したMATCH_THREADメッセージ及びMATCH_TASKメッセージに応答してタスクをスレッドに一致させる処理を示すデータフローチャートである。
【図6】所定のスレッド上で実行するためにREADY_TASK_QUEUEからタスクを選択する処理を示すデータフローチャートである。
【図7A】所定のタスクを実行するためにAVAILABLE_THREADS_LISTからスレッドを選択する処理を示すデータフローチャートである。
【図7B】データの再利用が重要である場合に所定のタスクを実行するためにAVAILABLE_THREADS_LISTからスレッドを選択する処理を示すデータフローチャートである。
【図7C】命令の再利用が重要である場合に所定のタスクを実行するためにAVAILABLE_THREADS_LISTからスレッドを選択する処理を示すデータフローチャートである。
【図8】マルチスレッドソフトウェアプログラムの実行の所定の時点におけるEXECUTION_REGISTER380データ構造(図4のメモリレイアウトに従う)のメモリ内容を示す図である。
【図9】所定のスレッド上で実行するためにタスクを選択する図6に示されたデータフローチャートに対する別の手法を示すデータフローチャートである。
【図10A】L2及びL3のキャッシュ最適化に対する例示的な構成を示す図である。
【図10B】L2及びL3のキャッシュ最適化に対する例示的な構成を示す図である。
【図11A】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【図11B】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【図11C】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【図11D】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【発明を実施するための形態】
【0023】
コンピュータシステムにおいてマルチプロセッサアーキテクチャを使用することで性能速度の高速化を実現する傾向は、近年広範に使用されるようになってきている。マルチプロセッサアーキテクチャにより、1つ以上の処理に属する多くのスレッドが多くの中央処理装置(CPU)を介して並列に実行できるため、実行時間全体が短縮される。
【0024】
CPUの数及び速度と共に、コンピュータシステムのメモリ構成は、処理速度に大きく影響する。階層的記憶構造は、キャッシュと呼ばれるより小型で高速なメモリをCPUにより近接させた近年のメモリシステムに対して一般に受け入れられたアーキテクチャである。記憶階層において同一の深度に配置されたキャッシュは、同一のキャッシュレベルであると言われる。キャッシュメモリは、容易でより高速なアクセスのためにCPUにより近接する主記憶内容のサブセットを格納するために使用される。
【0025】
レベル1(L1)キャッシュは、CPUに最近接し、同一のハードウェアチップ上に配置又は構成される。L1キャッシュは小型で非常に高速である。レベル2(L2)キャッシュはL1キャッシュより大きい。L2は、一般にCPUチップ上の最後のキャッシュである。レベル3(L3)キャッシュは、存在する場合により大きいために上位レベルのキャッシュより低速であるが、依然として主記憶よりはるかに高速である。一般にCPUのすぐ隣のコンピュータマザーボード上に配置されたL3キャッシュは、CPUと直接専用に相互接続していることが多い。一般にL3キャッシュは、単にサイズがより大きいためにL1キャッシュ及びL2キャッシュよりキャッシュミスの発生が少ない。
【0026】
各レベルにおいて、キャッシュは、物理的に独立したデータキャッシュ及び命令キャッシュ又はデータ及び命令の双方に対するユニファイドキャッシュから形成される。双方の場合において、データ及び命令は個別に考えられる。本発明において開示される構成は、双方の場合に対して使用される。
【0027】
項目(命令又はオペランド(データ))が初めてCPUにより要求されると、項目が属する主記憶ブロックの内容は、キャッシュラインにおいてキャッシュにロードされる。同一の項目又は同一のブロックからの項目に対する後続の要求は、そのキャッシュラインにアクセスすることで満たされる。要求された項目がキャッシュにおいて見つけられる場合、当技術分野においてキャッシュヒットとして既知であるイベント、すなわち要求された項目へのアクセスは、キャッシュミス上で発生する要求された項目が主記憶から取り出されなければならない時よりはるかに高速である。キャッシュにロードされるものは全てあらゆる種類のデータであるが、プログラムコードが動作するプログラムコード(命令)とオペランド(データ)との間で区別されることが多い。この説明において、前者を「命令」と呼び、後者を単に「データ」と呼ぶ。アプリケーションを実行するために使用されているプロセッサは、キャッシュが命令又はデータを含むかを決定し、且つ万が一キャッシュミスの場合にキャッシュラインをロードする処理を実行する。本発明において開示される構成は、命令及びデータのキャッシュを管理する全ての一般的な方法に対して適用可能である。
【0028】
マルチプロセッサシステムにおいて並列性を利用するために、一般に処理は、タスクとして既知である本明細書の目的で、並列に実行される動作の独立単位に大きく細分される。プログラムの実行には1つ以上のタスクを完了する必要がある。各タスクは、並列に実行される場合にスレッド上で実行される。
【0029】
本発明において開示される構成の好適な実現例において、タスクとスレッドとの間で一対一対応が維持される。すなわち、タスクは一度に1つのスレッドのみにおいて実行される。タスクの例には、グラフィックイメージ作成プログラムにおけるレンダリング処理及びスプレッドシートアプリケーションにおいて数値データの列に帰された数学演算子が含まれる。従って、タスクのサイズ及び複雑性が変動し、これは、アプリケーションプログラムが符号化されるかあるいは実行されることが望まれる方法に従う。
【0030】
スケジューリングの観点から、タスクは、動作の最小のスケジュール可能な単位であり、常に完了する。タスクは、その型(TASK_ID)及びタスクが処理するデータ(DATASET_ID)により規定される。TASK_IDは、関連付けられたタスクが実行される場合に実行されると予想される命令の集合を識別する。DATASET_IDは、タスクの実行中に読み出されるか又は書き込まれると予想されるか、あるいはそれら双方を予想される記憶場所の集合を識別する。タスク型は命令の集合により規定される。
【0031】
種々のタスク型は種々の特徴を有する。その特徴のうちの1つは、命令及びデータの使用パターンである。従って、データ及び命令の再利用の相対的な重要度は種々のタスク毎に異なる。本発明において開示される構成において、2つの重み値は、各タスク型、すなわちwi及びwdと関連付けられる。重みwiはそのタスクに対する命令の再利用の重要度を反映し、重みwdはそのタスクに対するデータの再利用の重要度を反映する。wdより高いwiを含むタスクは命令を再利用することからより多くの利益を得、wdより低いwiを含むタスクはデータを再利用することからより多くの利益を得る。重みを比較することにより、考えられる最適なキャッシュの再利用のために、スレッドをタスクに一致させる方法又はタスクをスレッドに一致させる方法を決定することが可能である。例えば、タスクTに対してwi=10及びwd=5である場合、そのタスクTに対して命令の再利用はデータの再利用より重要である。
【0032】
これらの重み値は、静的又は動的に設定される。重み値の静的決定は演繹的に行われ、プログラムにおけるタスク型に対する重みの動的決定は、実行時に行われ、コンピューティングシステムの現在の状態を反映するように変化する。例えばより大きなデータセットは、命令の再利用が一般により重要なものとして考えられるタスクに対してデータの再利用の重み値wdの増加を保証する。
【0033】
そのようなスレッド−タスクのペアリングがキャッシュの再利用につながる可能性が高い場合、スレッドは所定のタスクを実行するのに適していると仮定され、タスクは所定のスレッド上で実行されるのに適していると仮定される。
【0034】
2つ以上のCPUが同一のキャッシュユニットを共有する場合、これらのCPU上で実行されたスレッドを本明細書において計算グループ(CG)と呼ぶ。CGにおける全てのスレッドは、対応するCPUにより物理的に共有されたキャッシュへの同等のアクセスを有する。例示的な一実現例は、特に図10Aに示されるようにL2キャッシュに適用されるものとして説明される。しかし、本明細書において開示された手法は、図10BのL3最適化等のあらゆるキャッシュレベルに適用されてよい。
【0035】
一般に、1つ以上のスレッドがCPUに割り当てられるが、好適な一実現例において、1つのスレッドだけがCPUに割り当てられる。所定のスレッドが常に同一のCPU上で動作するため、このような割り当てにより、実行中にスレッドの親和性として当技術分野において既知である概念を変更しない。
【0036】
本発明において開示される構成は、タスクレベルでタスクをスレッドにスケジュールすることで従来技術の主な欠点に対処する。タスクがスレッドに割り当てられる結果、その特定のタスクに対して最も重要な種類のキャッシュされた内容(命令又はデータ)を再利用する。このため、命令及びデータのタスクの潜在的な再利用を示すタスク型が重要である。逆に、従来技術は、多くの場合キャッシュラインの使用を厳密に監視することにより、機械語レベルでキャッシュされた内容を再利用する。従って、従来技術は、本明細書において開示される構成より多くのオーバヘッドをプログラム実行に対して課し、多くの場合専用のハードウェアを更に必要とする。
【0037】
図1は、本発明において開示される構成が実現されるメモリの少なくとも1つのレベルを含むマルチプロセッサコンピュータシステム100を示す概略ブロック図である。コンピュータシステム100は、スタンドアロンコンピュータ、例えばIBM−PC及びその互換のコンピュータシステム、Sun社のSPARC(商標)コンピュータシステム又はApple社のMac(商標)コンピュータシステム等に類似する近年のデスクトップコンピュータである。あるいはコンピュータシステム100は、例えばプリンタ、撮像システム又は制御システム等の特殊機能装置を部分的に又は完全に実現する。各処理デバイス又は各チップ上のCPUの数、キャッシュ及びそれらの階層的組織の数、並びに他のコンピュータシステムの構成要素は、広範に変動する。コンピュータシステム100は、多くの処理装置150、メモリ120、周辺装置インタフェース190、ハードディスクドライブシステム(HDD)192及び読み出し専用メモリ(ROM)194を有する。示されるように、それらは全てバス140、並びに関連付けられたそれぞれの接続141、142、143、144及び145を介して相互接続される。周辺装置インタフェース190により、コンピュータシステム100は、オプションの接続195を介して通信ネットワークを含む他のシステム、他のコンピュータ、プリンタ及び表示装置等のデバイス、並びにキーボード及びマウスポインティングデバイス(不図示)等の制御デバイスと相互接続できる。処理装置150及びメモリ120は、バス140とは別の専用の接続145を有する。図1に示されたようなメモリ120は、一般的なコンピュータシステムにおいて使用された種々のメモリの構成要素と種類との混合物を示す。従って、メモリ120は、マイクロプロセッサデバイス/マイクロコントローラデバイスに組み込まれたL1キャッシュ及びL2キャッシュ、そのようなデバイスに直接結合されたL3キャッシュ、並びにいわゆる「主」記憶を含む。それらは全て、一般に、専用のランダムアクセスメモリ(RAM)デバイスとして処理装置150と一体化されない半導体ベースのRAMを使用して実現される。コンピュータシステム100は、HDDシステム192、ROMメモリ120、並びに光ディスクドライブ、PCMCIAドライブ及びUSBドライブ等の他のデバイスにより示されている他のメモリを含む。それらは、明確にするために示されず、従来独占的にバス140に結合し、処理装置150に直接結合しない。
【0038】
一般的なコンピュータシステムにおいて、ROM194は、一般に処理装置150により実行されるためにHDD192の永久記憶装置からのオペレーティングシステム122をメモリ120にコピーすることにより、コンピュータ100のオペレーティングシステム122をブートすることを含む基本動作処理をコンピュータ100が開始及び実行できるようにする基本処理を格納する。オペレーティングシステム122は、キャッシュメモリ管理がその一部を形成するメモリ管理等の低レベルの動作機能を含むコンピュータの機能の基本制御を提供する。従って、コンピュータシステム上で実行する(高次レベルの)アプリケーションは、オペレーティングシステムにより与えられたデフォルトメモリ管理機能を利用する。しかし、一般に特定のアプリケーションに最適化された性能又は適した性能を実現するために、低レベルの動作よりも自身の制御の影響を行使することを好む(高次レベルの)アプリケーションもある。そのようなアプリケーションは、高次レベルのアプリケーションにより所望されるようにコンピュータシステム100の低レベルの動作を変形するように構成された特定のソフトウェアアプリケーションをそのように提供するか、あるいはそれを伴う。
【0039】
通常、図1に示されるように、一般に制御プログラム130は、HDD192に格納されてHDD192からコピーされ、メモリ120に常住する。その結果、制御プログラム130は、処理装置150のCPU171、172、181及び182と関連付けられたスレッドのうちの1つ以上において実行可能である。本発明において、一般に制御プログラム130は、特定の目的のためにコンピュータシステム100上で実行可能なアプリケーションプログラムであり、キャッシュミス率を低下させるためにコンピュータシステム100のキャッシュメモリを管理し且つキャッシュの再利用を最適化するように別の手法を実現するために本発明に従って構成されたソフトウェアコンポーネントを含む。そのような実現例において、本発明において説明するキャッシュ管理処理は、オペレーティングシステム122内のデフォルト処理として組み込まれる。制御プログラム130の特定の目的は、広範に変動するが、レンダリング、ラスタリング及び合成等の画像処理アプリケーション、並びに印刷アプリケーションにより生成された印刷タスクを含む。他のアプリケーションは、特に、ワードプロセシングアプリケーション及びデスクトップパブリッシングアプリケーション、金融アプリケーション、ゲーム、通信、データ処理、モニタリング、制御システムを含む。
【0040】
図1の例に示されるように、処理装置150のCPU171、172、181及び182は、2つの計算グループ(CG)、すなわちCG160及びCG165に分けられる。
【0041】
図2は、図1の処理装置150及びメモリ120の階層的構成の例示的な構成200を示す。この特定の構成200において、CGは、同一のL2キャッシュを使用するCPUと関連付けられたスレッドから構成され、L1キャッシュが一般に同一の半導体デバイス上の対応するCPUで構成される図10Aの構成によりミラーリングされる。従って、図2は、2つのCG、すなわち、L2キャッシュ210を共有するCPU171及びCPU181のスレッドに対するCG160、並びにL2キャッシュ220を共有するCPU172及びCPU182のスレッドに対するCG165を示す。この構成において、説明される構成の実現例は、L2キャッシュの最適化を提供する。
【0042】
図1に示された各CPUは、ユニファイドキャッシュであるか、あるいは専用のデータキャッシュ及び命令キャッシュの2つの独立した物理ユニットから構成される対応する専用L1キャッシュを有する。図2は、L1キャッシュ231を有するCPU171、L1キャッシュ232を有するCPU181、L1キャッシュ233を有するCPU172及びL1キャッシュ234を有するCPU182を示す。
【0043】
同様に、L2キャッシュ210及びL2キャッシュ220は、統合されるか、あるいは専用のデータキャッシュ及び命令キャッシュの物理的に独立したハードウェアユニットを有する。本発明において説明する種々の実現例において、L2キャッシュ210及び220は、物理的配列に拘らず、各々が1つの論理キャッシュユニットとして見なされる。低位メモリレベル230構成要素は、この例示的なハードウェア構成においてL3キャッシュ及び主メモリである残りの記憶階層を示す。図2の構成の一般的な実現例において、各L1キャッシュは、対応するCPUと同一の集積回路チップ上に物理的に配置され、各L2は、対応するCPUデバイスに直接物理的に接続された専用のキャッシュメモリ素子であり、L3キャッシュは、コンピュータシステム100の主半導体ランダムアクセスメモリ(RAM)内で物理的に区分された仮想場所のグループである。
【0044】
図3は、エグゼクティブスレッド305構成要素及びワーカースレッド310構成要素を含む制御プログラム130の一実現例を示す。エグゼクティブスレッド305構成要素は、制御プログラム130の実行を開始及び監督する。ワーカースレッド310構成要素は、複数のスレッド(スレッド0、スレッド1、スレッド2...)を含み、エグゼクティブスレッド305構成要素により指示されたようにこれらのスレッド上でタスクを実行する。例えば、制御プログラム130がレンダリング及び合成等の関連付けられた印刷タスクを有するプリンタドライバである場合、エグゼクティブスレッド305は、レンダリング等の特定のタスク、並びに/あるいは縁端の追跡及び合成等のそれらの重要な構成要素を実現するワーカースレッド310により実行される実際の印刷処理を実施するキャッシュ管理を含むプリンタドライバの管理動作を示す。
【0045】
本発明において説明する構成は、全てが特定の計算グループ(CG)内で実行するように制限される特定のスレッドに特定のタスクを一致させることに基づく。これは、スレッドとタスクとの組合せが各通話に対して同一のキャッシュメモリと実質的に関連付けられることにより、キャッシュミス率を潜在的に減少させることを提供する。
【0046】
エグゼクティブスレッド305は、処理を実行するためにタスクを作成すること及び実行するためにこれらのタスクをワーカースレッド310にディスパッチすることを担うタスク生成器及びディスパッチャ335を備える。作成の際、タスクは、他の属性のうち、実行される命令の集合を識別する型(TASK_ID)、タスクが処理しているデータを識別するDATASET_ID及びタスクスケジューリング優先順位を割り当てられる。
【0047】
処理メッセージ330構成要素は、制御プログラム130内で渡された全てのメッセージを処理することを担い、スケジューラ345は、実行するためにタスクをスケジュールすることを担う。スケジューラ345は、詳細に後述される機能であるタスクをスレッドに一致させることを担うタスク−スレッド選択器340を有する。
【0048】
エグゼクティブスレッド305は、以下の格納構成要素、すなわちREADY_TASK_QUEUE355、AVAILABLE_THREADS_LIST360、MESSAGES315及びEXECUTION_REGISTER380を更に有する。次に、それらの各々の機能及び内容を順番に説明する。
【0049】
READY_TASK_QUEUE355は、実行するためにディスパッチ可能な状態にある制御プログラム130において全てのタスクを含むキューデータ構造である。
【0050】
AVAILABLE_THREADS_LIST360は、制御プログラム130に割り当てられたスレッドのアイデンティティ(ID)のリストを格納する。リスト360におけるスレッドは、現在アイドル状態である制御プログラム130と関連付けられた全てのワーカースレッド310のサブセットを示すため、タスクの実行に割り当てられない。このリスト360は、実行中のあらゆる所定の時間において制御プログラム130に対して使用可能な計算リソースを追跡するために保持される。
【0051】
MESSAGES315記憶装置は、制御プログラム130の構成要素間で渡されたメッセージを格納する。各メッセージは、その目的を示すMATCH_THREAD、MATCH_TASK、START_TASK及びTASK_FINISHED等のタイプを有する。MESSAGE記憶装置315は、MATCH_THREAD又はMATCH_TASKのメッセージタイプである処理メッセージ330構成要素からタスク−スレッド選択器340に渡されるメッセージを提供する。
【0052】
EXECUTION_REGISTER380は、CGにおいてスレッドの総合的な実行履歴を追跡する。図4に示されるように、記憶装置380は3つの構造を有することが好ましい。構造CG_TO_THREAD_LOOKUP_TABLE410は、多くのレコード425においてCG ID及び各CGにおけるスレッドのIDを含む。従って、テーブル410は、対応するCG、すなわち対応するキャッシュメモリと関連付けられたスレッドのサブセットを示す。レコード425は、CG IDを格納するフィールド412、そのCGにおけるスレッドの数を格納するフィールド414を有し、レコード416、418及び420における残りのフィールドは、スレッドをそのCGに格納することを示す。
【0053】
EXECUTION_REGISTER380における第2の構造は、CG毎に個々のレコード445に記録されるCG毎の実行履歴を格納するEXECUTION_HISTORY440構造である。
【0054】
各レコード445は、対応するCGにおいてスレッド上で最後に実行されたタスクのタスクIDを含むキューデータ構造であるTASK_HISTORY_QUEUE490を有するため、CGのタスク履歴を示す。各レコード445は、CGにおいてスレッド上で最後に実行されたタスクのデータセットIDを含むキューデータ構造であり、CGのデータ履歴を示すDATA_HISTORY_QUEUE495を更に有する。要約すれば、EXECUTION_HISTORY440構造は、最後に使用された主記憶領域を識別する情報を格納する。
【0055】
レコード445のフィールド442はCG IDを格納する。フィールド446、448及び450は、TASK_HISTORY_QUEUE490の符号化を示す。フィールド454、456及び458は、DATA_HISTORY_QUEUE495の符号化を示す。フィールド444及び452は、それぞれ、TASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495におけるエントリの数を格納する。総合的にスレッドの実行履歴を示すこれらのキューの深度は、最適化されるために使用されるキャッシュのサイズ及び制御プログラム130におけるタスクの特徴の双方に依存する。制御プログラム130におけるタスクの特徴の例は、タスクの平均コードサイズ及びタスクのコードにおいて最も頻繁に実行された命令の平均サイズである。制御プログラム130におけるタスクの特徴、例えばタスクのコードサイズは、キューの深度を事前に決定するため又は制御プログラム130の実行中にキュー深度を変更するために使用される。従って、一実現例において、実行履歴は、スレッドにより実行されたタスクと関連付けられた最も一般的に実行された命令のコードサイズに依存するサイズを有する。別の実現例において、実行履歴は、スレッドにより実行されたタスクにより使用されたデータのサイズに依存するサイズを有する。そのキュー深度値は、キュー及び/又はCG毎に異なり、制御プログラム130を開始する前に設定されるかあるいは制御プログラム130の実行中に動的に変動される。CG_TO_THREAD_LOOKUP_TABLE410構造及びEXECUTION_HISTORY440構造の双方は、CG毎に1つのレコードを含む。
【0056】
EXECUTION_REGISTER380における第3の構造は、スレッドに対応するレコード485において、フィールド482におけるスレッドIDからフィールド484においてスレッドが属するCGにルックアップテーブルを格納するTHREAD_TO_CG_LOOKUP_TABLE480構造である。構造480は、制御プログラム130のワーカースレッド310構成要素におけるスレッドの数であるN個のレコードを含む。構造480は、上述のテーブル410の基本的な態様を補完する。
【0057】
スケジューラ345構成要素は、実行するためにタスクをスレッド上でスケジュールすることを担い、メッセージチャネル390を介してタスク生成器及びディスパッチャ335から生成されたタスクの規格を受信する。スケジューラ345は、採用されたスケジューリングアルゴリズムにより決定された順番でREADY_TASK_QUEUE355を保持する。当技術分野において既知であるあらゆる適切なスケジューリングアルゴリズムは、スケジューラ345により採用される。好適な実現例によれば、READY_TASK_QUEUE355におけるタスクは、降順のタスク優先順位で保持される。すなわち、高優先度タスクはキューの前方にあり、低優先度タスクはキューの後方にある。タスク優先順位は、タスク作成の際に割り当てられ、実行中に後で前後する。タスク−スレッド選択器340構成要素は、実行可能な状態にあるタスクをAVAILABLE_THREADS_LIST360からのスレッドと一致させる。次に、図5を参照してタスク−スレッド選択器340の機能性を詳細に説明する。
【0058】
図5は、それぞれ、所定のタスクが使用可能なスレッドと一致されるか又は所定のスレッドがタスクを実行可能な状態にあるかを決定するスケジューラ345により実行された処理500を示す。最初に、MESSAGE315は、ディスパッチャ335からスケジューラ345に渡される。MATCH_THREADタイプ又はMATCH_TASKタイプのみがディスパッチャ335の処理メッセージ330構成要素からスケジューラ345のタスク−スレッド選択器340構成要素に渡されるため、MESSAGE315はこれらの2つのメッセージタイプのいずれかである。MESSAGE315は、メッセージタイプ及び一致されなければならないスレッド又はタスクを含む。例えば、(MATCH_THREAD、「0」)は、ID「0」を含むスレッドを実行可能な状態にある適切なタスクと一致させるメッセージ要求である。例えば、メッセージ要求(MATCH_TASK、[DL、7])は、要求により示された型「DL」により規定されたタスク及びスレッドにより処理されるデータセット「7」を実行するのに適したスレッドを見つける要求である。
【0059】
スケジューラ345は、判断ステップ505において、MESSAGE315がMATCH_THREADタイプであるかを決定する。MESSAGE315がMATCH_THREADタイプである場合、処理500はステップ510を介して進み、MESSAGE315において渡されたスレッド上で実行するのに適したタスクを決定する。MESSAGE315がMATCH_THREADタイプではない場合、すなわちMATCH_TASKタイプである場合、処理は、MESSAGE315において渡されたタスクを実行するのに適したスレッドを選択することにより、ステップ520を介して継続する。次に、これらの2つの例を順番に説明する。
【0060】
スケジューラ345は、判断ステップ505においてMESSAGE315がMATCH_THREADタイプであると決定する場合、判断ステップ510に進む。ステップ510において、スケジューラ345は、READY_TASK_QUEUE355が空であるかをチェックする。READY_TASK_QUEUE355が空である場合、スケジューラ345は、処理ステップ515に進み、ブールパラメータMATCHEDを「偽」に設定する。次にスケジューラ345は、ステップ555において、図3に示されるようにタスク又はスレッドの選択を要求したMESSAGE315への応答としてエグゼクティブスレッド305の処理メッセージ330構成要素に送出されるメッセージMATCHED_MESSAGE325を作成する。
【0061】
MATCHED_MESSAGE325は、MESSAGEの値及び対(THREAD、TASK)を含む。ステップ515が生じる場合、一致が不可能であるため、所定のTHREADに対するTASKの値は、MATCHED_MESSAGE325においてヌルに設定される。処理500はステップ555で終了する。
【0062】
ステップ510においてテストされるようなREADY_TASK_QUEUE355において少なくとも1つのタスクがある場合、THREADは、ステップ525においてMESSAGE315から取り出される。次に、THREAD上で実行するためのタスクは、図6を参照して詳細に後述される処理535において選択される。処理はステップ545に進む。
【0063】
ステップ505においてMESSAGE315がMATCH_THREADタイプではないと処理装置150におけるスレッド305のスケジューラ345が決定する場合、処理500は、AVAILABLE_THREADS_LIST360が空であるかをスケジューラ345がチェックする判断ステップ520に継続する。AVAILABLE_THREADS_LIST360が空である場合、ブールパラメータMATCHEDは、ステップ515において「偽」に設定される。次にスケジューラ345は、ステップ555においてメッセージMATCHED_MESSAGE325を作成する。MATCHED_MESSAGE325は、タスク又はスレッドの選択を要求したMESSAGE315への応答として処理メッセージ330構成要素に送出される。この場合、再度、一致が不可能であるため、所定のTASKに対するTHREADの値はMATCHED_MESSAGE325においてヌルに設定され、処理500はステップ555で終了する。
【0064】
ステップ520に戻り、少なくとも1つの使用可能なスレッドがある場合、処理は、ステップ530においてMESSAGE315からTASKを取り出すことを継続する。次にスケジューラ345は、図7A〜図7Cを参照して詳細に後述されるように、TASKを実行するためのスレッドを選択する処理540を実行する。
【0065】
それぞれメッセージタイプMATCH_THREAD及びMATCH_TASKに対して実行された処理535及び540の双方は、常に結果として対(THREAD、TASK)を取得する。従って、後続のステップ545において、ブールパラメータMATCHEDは「真」に設定され、次にステップ550において、EXECUTION_REGISTER380は、EXECUTION_HISTORY440構造においてTHREADのCGに対するTASKのTASK_ID及びDATASET_IDを実行履歴キュー490及び495に追加することで更新される。TASKのTASK_ID及びDATASET_IDは、それぞれキュー490及び495の前方に追加され、他の全てのエントリは、各キューの最後のエントリ(最も古い)が削除された状態でキューの末尾へ移行される。
【0066】
処理500は、MATCHED_MESSAGEがブールパラメータMATCHEDの値(ステップ545から後続する場合に値「真」を有する)及び対(THREAD、TASK)で作成されるステップ555で終了する。
【0067】
図6は、所定のスレッド、すなわちTHREAD605上で実行するためにREADY_TASK_QUEUE355からタスクを選択する処理535を示す。処理535は、スケジューラ345がTHREAD605のCGの履歴を取得するステップ610から開始する。これは、THREAD_TO_CG_LOOKUP_TABLE480からTHREAD605に対するレコードにアクセスし、THREAD605が属するCGIDを特定するフィールド484を取得することで実現される。次に、EXECUTION_HISTORY440構造から、そのCGに対するTASK_HISTORY_QUEUE490から読み出されたタスク履歴及びDATA_HISTORY_QUEUE495から読み出されたデータ履歴を含む実行履歴は、ステップ610でアクセスされる。取得ステップ615において、スケジューラ345は、THREAD605上で実行するのに適したタスクが見つけられるまでREADY_TASK_QUEUE355においてエントリを繰り返す処理を開始する。ステップ615において、READY_TASK_QUEUE355の先頭から開始し、タスクTは、タスク生成器及びディスパッチャ335により取得される。ステップ617において、タスクTに対して命令の集合の重み付けwi及びデータの集合の重み付けwdを決定する。重み付けは、タスクに対する命令の再利用又はデータの再利用の重要度を決定する。この重みは種々の方法で決定される。種々の方法のうちの1つは、メモリ120に格納された制御プログラム130において全てのタスク型に対するwi及びwdの所定の値のルックアップテーブルを使用することであるが、それに限定されない。次にスケジューラ345は、判断ステップ620においてwiがwdより大きいかをチェックする。wiがwdより大きい場合、タスクTに対して命令の再利用はデータの再利用より重要であり、処理535は、TASKのTASK_IDがTHREAD605のCGのTASK_HISTORY_QUEUE490にあるかをチェックする判断ステップ625に継続する。TASKのTASK_IDがTHREAD605のCGのTASK_HISTORY_QUEUE490にある場合、タスクTは適している。ステップ645において、スケジューラ345はTASKをTに設定し、処理535が終了する。
【0068】
ステップ620においてwiがwdより大きくないと決定する場合、タスクTに対して命令の再利用はデータの再利用と同様に重要ではなく、タスクTと関連付けられたDATASET_IDがTHREAD605のCGに対するDATA_HISTORY_QUEUE495にあるかをチェックするステップ630に後続する。タスクTと関連付けられたDATASET_IDがTHREAD605のCGのDATA_HISTORY_QUEUE495において見つけられる場合、タスクTは適切なタスクであり、スケジューラ345がTASKをTに設定するステップ645に後続し、処理535が終了する。
【0069】
図6においてREADY_TASK_QUEUE355からタスクTを取得し、且つタスクTのTASK_ID又はDATASET_IDがTHREAD605のCGに対する実行履歴にあるかをチェックする処理は、ステップ635においてテストされたように、TASK_ID(ステップ625)又はDATASET_ID(ステップ630)を一致させるタスクが見つけられるまで、あるいはキューの後方に到達するまでREADY_TASK_QUEUE355においてタスク毎に繰り返される。
【0070】
READY_TASK_QUEUE355においてこれ以上タスクがない場合、ステップ615及び635により形成された処理ループは、TASKをREADY_TASK_QUEUE355における最初のタスクに設定するステップ640に進む。キューの先頭のタスクは最も優先度の高いタスクであり、キャッシュ内容の再利用を実現できない場合、キューの先頭のタスクは実行するためにディスパッチされる。ステップ640の後、処理535は終了する。
【0071】
図7Aは、所定のタスク、すなわちTASK715を実行するためにスレッドを選択する処理540を示す。処理540は、CG IDのリスト(CG_ID)が実行履歴440から作成されることでCGを形成するスレッドのサブセットの実行履歴を示すステップ705から開始する。CG_LISTにおける各エントリは、少なくとも1つの使用可能なスレッドを有する。CG_LISTを繰り返す繰返し子は、ステップ705において更に設定される。ステップ710において、スケジューラ345は、TASK715に対して命令の集合の重み付けwi及びデータの集合の重み付けwdを決定する。これは種々の方法で決定される。種々の方法のうちの1つは、制御プログラム130において全てのタスク型に対するwi及びwdの所定の値のルックアップテーブルを使用することであるが、それに限定されない。判断ステップ720は、wiがwdより大きいかをチェックする。wiがwdより大きい場合、図7Cを参照して詳細に後述するように、TASK715に対して命令の再利用はデータの再利用より重要であり、処理は処理730に継続する。
【0072】
次に図7Bを参照して詳細に説明されるように、スケジューラ345がステップ720においてwiがwdより大きくないと決定する場合、TASK715に対して命令の再利用はデータの再利用と同様に重要でないため、処理は処理725に継続する。
【0073】
図7B及び図7Cに示されたステップ725及び730の処理は、スレッドの実行履歴、並びにタスクと関連付けられた命令及びデータに対して決定された重み付け(wi、wd)に基づいてTASK715を実行するのに適した全てのアイドル(使用可能な)スレッドのサブセットから特定のスレッドを選択する。
【0074】
図7Bは、TASK715に対してデータの再利用が命令の再利用より重要である場合にTASK715を実行するのに適したスレッドを選択する処理725を示す。従って、処理725は、TASK715と関連付けられたデータ履歴に依存し、双方がステップ705において前に作成された繰返し子を使用してスケジューラ345がCG_LISTからCG IDを取得するステップ750から開始する。次にスケジューラ345は、ステップ752においてそのCGに対するデータ履歴を取得する。これは、そのCGに対するDATA_HISTORY_QUEUE495にアクセスするためにCG IDを使用することで実現される。
【0075】
処理725は、TASK715と関連付けられたDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられるかをスケジューラ345が決定する判断ステップ754に継続する。TASK715と関連付けられたDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられる場合、次にステップ766において、TASK715を実行するために使用されるCGから使用可能なスレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。
【0076】
TASK715に割り当てられたDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられなかったことがステップ754において決定された場合、処理は判断ステップ756に進む。ステップ756において、データ履歴がまだチェックされていないCG_LISTにより多くのCGがあるかを決定する。CG_LISTにより多くのCGがある場合、TASK715のDATASET_IDがCG_LISTのCGに対するDATA_HISTORY_QUEUE495において見つけられるまで又はCG_LISTにおいてチェックすべきエントリがなくなるまでステップ750、752及び754は繰り返される。
【0077】
ステップ756において決定されたようにチェックすべきエントリがこれ以上CG_LISTに残っていない場合、処理725は、現在使用可能なあらゆるスレッド上でTASK715に対してデータの再利用を実現できないため、CG_LIST繰返し子を再設定することでCG_LISTの繰り返しが最初から開始されるステップ758に進む。CG_LISTのCG IDのTASK_HISTORY_QUEUE490におけるエントリは、命令の再利用を実現することを考慮してTASK715のTASK_IDに対してチェックされる。
【0078】
ステップ760において、スケジューラ345はCG_LISTからCG IDを取得する。ステップ761において、スケジューラ345は、そのグループのスレッドが実行した命令の集合に関するそのCGのタスク履歴を取得する。これは、そのCGに対するEXECUTION_HISTORY440構造においてTASK_HISTORY_QUEUE490にアクセスすることで実現される。
【0079】
判断ステップ762において、スケジューラ345は、TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUE490において見つけられるかをチェックする。TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUE490において見つけられる場合を条件として、スケジューラ345は、ステップ766においてTASK715を実行するために使用されるCGに割り当てられたワーカースレッド310から使用可能なワーカースレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。
【0080】
ステップ762においてTASK_IDがそのCGに対するTASK_HISTORY_QUEUE490において見つけられない場合、TASK_IDがCG_LISTのCGに対するTASK_HISTORY_QUEUE490において見つけられるまで又は判断ステップ764において決定されたようにCG_LISTにおいてチェックすべきエントリがなくなるまでステップ764、760、761及び762は繰り返される。チェックすべきエントリがこれ以上残っていない場合、THREADは、ステップ768においてAVAILABLE_THREADS_LIST360で示されたサブセットにより識別されたワーカースレッド310からのあらゆるアイドルワーカースレッドに設定される。アイドルスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。処理725は、ステップ768で終了し、TASK715に対してデータの再利用が命令の再利用より重要である場合にTASK715を処理するのに適したスレッドをリスト360のサブセットから選択することを実証する。上述したように、スレッドのサブセットの選択は、スレッドの実行履歴及びタスクと関連付けられた命令の再利用又はデータの再利用に対して決定された重み付けに基づく。
【0081】
図7Cは、TASK715に対して命令の再利用が重要である場合に図7Aにおいて示されたようにTASK715を実行するのに適したスレッドを選択する処理730を示す。従って、処理730は、TASK715と関連付けられた命令履歴に依存し、ステップ705において作成されたCG_LISTからCG IDを取得するステップ770から開始する。ステップ772において、そのグループのスレッドが最近実行した命令に関するそのCGに対する履歴を取得する。これは、そのCGに対するTASK_HISTORY_QUEUE490にアクセスするためにCG IDを使用することにより実現される。
【0082】
処理730は、TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUEにおいて見つけられるかをスケジューラ345が決定する判断ステップ774に継続する。TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUEにおいて見つけられる場合、スケジューラ345は、ステップ786においてTASK715を実行するために使用されるCGに割り当てられたワーカースレッド310から使用可能なワーカースレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。
【0083】
TASK715のTASK_IDがそのCGのTASK_HISTORY_QUEUE490において見つけられない場合、処理は、命令履歴がまだチェックされていないCG_LISTにより多くのCGがあるかをスケジューラ345が決定する判断ステップ776に到達する。CG_LISTにより多くのCGがある場合、TASK715のTASK_IDがCG_LISTのCGに対するTASK_HISTORY_QUEUE490において見つけられるまで又はCG_LISTにおいてチェックすべきエントリがなくなるまでステップ770、772及び774は繰り返される。
【0084】
チェックすべきエントリがこれ以上CG_LISTにない場合(判断ステップ776)、処理は、現在使用可能なあらゆるスレッド上でTASK715に対して命令の再利用を実現できないため、データを再利用しようとすることでCG_LISTの繰り返しが最初から開始されるステップ778に進む。再利用を実現するために、CG_LISTにおけるCGのDATA_HISTORY_QUEUE495は、TASK715のDATASET_IDに対してチェックされる。ステップ780において、CG_LISTからCG IDを取得する。
【0085】
ステップ781において、スケジューラ345はそのCGに対するデータ履歴を取得する。これは、データ実行履歴が格納されるEXECUTION_HISTORY440構造、DATA_HISTORY_QUEUE495にアクセスするためにCG IDを使用することで実現される。
【0086】
判断ステップ782において、スケジューラ345は、TASK715のDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられるかをチェックする。TASK715のDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられる場合、スケジューラ345は、ステップ786においてTASK715を実行するために使用される計算グループCGから使用可能なワーカースレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。処理730はステップ786で終了する。
【0087】
DATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられない場合、DATASET_IDがCG_LISTのCGに対するDATA_HISTORY_QUEUE495において見つけられるまで又は判断ステップ784により決定されたようにCG_LISTにおいてチェックすべきエントリがなくなるまでステップ784、780、781及び782は繰り返される。チェックすべきエントリがこれ以上残っていない場合、THREADは、ステップ788においてAVAILABLE_THREADS_LIST360からのあらゆるスレッドに設定され、処理730は終了する。AVAILABLE_THREADS_LIST360からのアイドルスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。処理730は、TASK715に対して命令の再利用が重要である場合にTASK715を処理するのに適したスレッドをAVAILABLE_THREADS_LIST360から選択することを更に実証する。同様に、AVAILABLE_THREADS_LIST360におけるスレッドのサブセットの選択は、スレッドの実行履歴及びタスクと関連付けられた命令の再利用又はデータの再利用に対して決定された重み付けに基づく。
【0088】
本発明において説明する処理構成は、同一の計算グループのCPU上で実行されたタスク間でキャッシュ内容を最大限再利用するためにスレッドをタスクに適切に一致させるようにメモリ120に格納された制御プログラム130により作成及び実行されたタスクの特徴の知識を使用する。行われなければならない判断の簡潔性及び保持された限られた実行履歴により、タスク−スレッド選択器340が招くオーバヘッドを最小限にできる。
【0089】
次に、図4の構造に類似する構造を示す図8を参照して3つの例を説明する。印刷システムにおいて使用されたラスタイメージプロセッサ(RIP)アプリケーションプログラムは、以下の例を説明するために使用される。RIPアプリケーションプログラムは、制御プログラム130の一部を形成する。一般にRIPは、ページの高レベルな記述を印刷記述言語(PDL)からラスタ表現に変換する必要がある。ページの高レベルPDL記述は、テキスト、ライン、フィル領域及び画像データ等のグラフィックオブジェクト、並びにこれらのグラフィックオブジェクトがラスタ表現にレンダリングされる順番を含む。この順番は、一般にzオーダーとして当技術分野において既知である。ページのラスタ表現は色画素データから構成される。次にプリンタエンジンは、一般に、ページのラスタ表現を用紙等の印刷媒体上に印刷する。ラスタ表現を生成する前、RIPは、ページの中間ページ表現を生成する。ページの中間ページ表現は、一般にラスタ表現より小型であるが、迅速かつ容易にラスタ表現に変換される。
【0090】
次に、図11A〜図11Dを参照して、「フィルマップ」として既知である中間ページ表現の一例を説明する。図11Aはページ表現1100を示す。ページ1100は、白色の背景を有し、2つのグラフィックオブジェクト1101及び1102を含む。第1のグラフィックオブジェクト1101は、灰色の平坦なフィルを含む不透明な「T」形のオブジェクトである。第2のグラフィックオブジェクト1102は、陰影をつけられたフィルを含む透明な正方形である。他のフィルの例は、直線的に変動する色を表す混合、ビットマップ画像又はタイル型の(すなわち、繰り返された)画像である。第2のグラフィックオブジェクト1102は、部分的に第1のグラフィックオブジェクト1101に重複する。
【0091】
図11Bは、画素格子1120に従ってページ1100のグラフィックオブジェクト1101及び1102を画素整列ラフィックオブジェクトの縁端、レベル、並びにフィルに分解することを示す。グラフィックオブジェクトは、2つ以上の画素整列オブジェクトの縁端、単一のレベル及び1つ以上のフィルに分解される。画素整列グラフィックオブジェクトの縁端は、ラスタ化中のレベルの起動又は停止を規定する。従って、画素整列グラフィックオブジェクトの縁端は、それらが導出されるオブジェクトのレベルを示す。第1のグラフィックオブジェクト1101は、2つの画素整列グラフィックオブジェクトの縁端1121及び1122、並びに灰色の平坦なフィルから構成されるレベル1132に分解される。画素整列グラフィックオブジェクトの縁端1121及び1122は、第1のグラフィックオブジェクト1101のレベル1132を示す。第2のグラフィックオブジェクト1102は、2つの画素整列グラフィックオブジェクトの縁端1123及び1124、並びに透明な陰影をつけられたフィルから構成されるレベル1133に分解される。画素整列グラフィックオブジェクトの縁端1123及び1124は、第2のグラフィックオブジェクト1102のレベル1133を示す。背景1125は、白色のフィルから構成されるレベル1131を有する。
【0092】
図11Cは、図11Aに示されたページ1100のフィルマップ表現1140を示す。フィルマップ表現1140は、5つの画素整列フィルマップの縁端から構成される。画素整列フィルマップの縁端の各々は、その画素整列フィルマップの縁端により起動された各画素の色を決定するために使用されるフィルシーケンスを示す。画素整列フィルマップの縁端がアクティブである所定のあらゆる走査線上において、画素整列フィルマップの縁端は、次の画素整列フィルマップの縁端又はページ境界に遭遇するまで画素整列フィルマップの縁端のすぐ右にある画素を起動する。第1の画素整列フィルマップの縁端1141は、ページの左手の境界を追跡し、背景フィルを使用して充填される単一の不透明なレベルを含むフィルシーケンス1151を示す。第2の画素整列フィルマップの縁端1142は、第1のグラフィックオブジェクト1101の左手の境界を追跡し、不透明であり且つ灰色の平坦なフィルを使用して充填される単一のレベルを含むフィルシーケンス1152を示す。第3の画素整列フィルマップの縁端1143は、第1の画素整列フィルマップの縁端1141と同一のフィルシーケンス1151を示す。第4の画素整列フィルマップの縁端1144は、第2のオブジェクト1102が白色の背景に重複する領域の左手の境界を追跡する。第4の画素整列フィルマップの縁端1144は、2つのレベルを含むフィルシーケンス1154を示す。一番上のレベルは、透明であり、陰影をつけられたフィルを使用して充填される。一番下のレベルは、不透明であり、背景フィルを使用して充填される。第5の画素整列フィルマップの縁端145は、第2のグラフィックオブジェクト1102が第1のグラフィックオブジェクト1101に重複する領域の左手の境界を追跡する。第5の画素整列フィルマップの縁端1145は、2つのレベルを含むフィルシーケンス1153を示す。一番上のレベルは、透明であり、陰影をつけられたフィルを使用して充填される。一番下のレベルは、不透明であり、灰色の平坦なフィルを使用して充填される。
【0093】
ページのフィルマップ表現1140に含まれた画素整列フィルマップの縁端により示されたフィルシーケンス1151、1152、1153及び1154を含むフィルシーケンスのテーブルは、ページのフィルマップ表現1140を伴う。
【0094】
図11Dは、図11Aに示されたページのタイル型のフィルマップ表現1160を示す。タイル型のフィルマップは、4つのタイル1165、1170、1175及び1180を含む。各タイルは、8個の画素の高さ及び幅を有する。ページのタイル型のフィルマップ表現1160を生成するために、元のフィルマップ表現1140の画素整列フィルマップの縁端は、フィルマップタイル境界にわたり分裂されている。例えば、図11Cに示された非タイル型のフィルマップ表現1140においてページの左手の境界を追跡する画素整列フィルマップの縁端1141は、2つの画素整列フィルマップの縁端1166及び1176に分割されている。第1の画素整列フィルマップの縁端1166は、左上のタイル1165の画素を起動し、第2の画素整列フィルマップの縁端1176は、左下のタイル1175の画素を起動する。また、新しい画素整列フィルマップの縁端は、画素が常駐するタイルの左に対してタイルにおいて画素整列フィルマップの縁端により前に起動された各タイルの最も左の画素を起動するようにタイル境界上に挿入されている。例えば、右上のタイル1170において、新しい画素整列フィルマップの縁端1171は、図11Cに示された元のフィルマップ表現1140において第1のグラフィックオブジェクト1101の左手の境界を追跡する画素整列フィルマップの縁端1142により起動された画素を起動するように挿入されている。
【0095】
以下の例を説明するために使用されたRIPアプリケーションは、4つの型のタスク、すなわち表示リスト生成(DL)、フィルマップ生成(FG)、フィルマップマージング(FM)及びフィルマップレンダリング(FR)から構成される。DLタスクは、PDL文書からzオーダーのグラフィックオブジェクトのシーケンスを読み出し、表示リストを作成する。一般に表示リストは、グラフィックオブジェクトのyソートリストから構成され、一般に当技術分野において既知である。印刷される所定のページに対して、いくつかのDLタスクは、zオーダーのグラフィックオブジェクトの種々のシーケンスを処理する必要がある。各シーケンスはz帯として既知であり、そのようなシーケンスに対してDLタスクにより生成された表示リストは、z帯表示リストとして既知である。z帯表示リスト毎に、FGタスクは、z帯フィルマップとして既知であるフィルマップ表現を生成する。図11A〜図11Dを参照してフィルマップ表現を上述した。FMタスクは、2つ以上のz帯フィルマップを受信し、それらを単一のフィルマップにマージする。より多くのz帯フィルマップがページに対して残っている場合、更なるFMタスクは、z帯フィルマップをマージする必要がある。マージすべきz帯フィルマップがこれ以上残っていない場合、FMタスクにより生成されたフィルマップは、ページ上に全てのグラフィックオブジェクトを示す。次にFRタスクは、フィルマップを印刷可能な状態にあるラスタ表現に変換するために使用される。
【0096】
図8は、制御プログラム130の実行中の所定の時間におけるEXECUTION_REGISTER380の状態800を示す。図8に示された例において、第1の構造820に示されたようにEXECUTION_REGISTER380のCG_TO_THREAD_LOOKUP_TABLEの例を示す2つのCG、すなわちCG0(821)及びCG1(822)がある。CG0821は2つのスレッド(フィールド823に示されたような)を含み、CG1は2つのスレッド(フィールド824に示されたような)を更に含む。フィールド825及び826にそれぞれ示されるように、CG0は、スレッド「0」及びスレッド「1」を含む。フィールド827及び828にそれぞれ示されるように、CG1は、スレッド「2」及びスレッド「3」を含む。
【0097】
EXECUTION_REGISTER380の第2の構造840は、CG0及びCG1のEXECUTION_HISTORYテーブルの例を含む。CG0(821)に対するTASK_HISTORY_QUEUE860は、フィールド842〜844に示された3つのエントリ(フィールド841において特定されたような)を有する。CG0(821)のDATA_HISTORY_QUEUE861は、フィールド846〜848に示された3つのエントリ(フィールド845において特定されたような)を有する。CG1(822)に対するTASK_HISTORY_QUEUE862は、フィールド852〜854に示された3つのエントリ(フィールド851において特定されたような)を有する。CG1(822)に対するDATA_HISTORY_QUEUE863は、フィールド856〜858に示された3つのエントリ(フィールド855において特定されたような)を有する。
【0098】
図4を参照して上述したように、TASK_HISTORY_QUEUEは、各計算グループ上で実行されたタスク型の履歴を含む。従って、TASK_HISTORY_QUEUE860及び862は、RIPアプリケーションの例において4つのタスク型に対応するDL、FG、FM又はFR(FRはこの例において示されない)である値を含む。これらの値は、潜在的に将来のタスクにより再利用されるキャッシュされた命令を示す。同様に、DATA_HISTORY_QUEUEは、各計算グループ上で実行されたタスクにより使用されたデータの履歴を含む。RIPアプリケーションの例において、所定のタスクに対して処理されているページの数は、処理されているデータを示す。従って、DATA_HISTORY_QUEUE861及び863はページ数を含む。ページの数は、潜在的に将来のタスクにより再利用されるキャッシュされたデータを示す。
【0099】
後続の例において、EXECUTION_REGISTER380の一部を形成する重み行列890は、所定のタスクを処理する場合に命令及びデータの相対的な重要度を決定するために使用される。命令及びデータの相対的な重要度は、所定のタスクを実行するのに適したスレッド又は所定のスレッド上で実行されるのに適したタスクを選択するために使用される。以下の例において使用された重みを図8の重み行列890において示す。実行される4つの型のタスク、すなわちDL(891)、FG(892)、FM(893)及びFR(894)があり、wi及びwdの値は、重み行列890においてタスク型毎に与えられたタスクに依存することが好ましい。重み行列890における重みは、制御プログラム130の前の実行において取得された履歴データを解析すること及びプログラムコードの複雑性の解析等の種々の方法で決定される。換言すると、重み付けは、スレッドのサブセットの実行履歴に基づいて決定される。別の実現例において、重み付けは、タスクの知識に基づいて事前に決定され、メモリ120のルックアップテーブルに格納される。
【0100】
RIPアプリケーションの例において、DL(表示リスト生成)タスクは、命令の適切に規定されたシーケンスを実行し、各DLタスクは、グラフィックオブジェクトの別個のシーケンスを処理する。従って、DLタスクの場合、wiはwdより高い値を与えられる。データの別個のz帯を更に処理するFG(フィルマップ生成)タスクに対して、同一の推論が適用可能である。また、RIPアプリケーションの例において、FGタスクは、通常DLタスクに対して別個のスレッド上で実行されるため、DLタスクにより生成された表示リストデータを利用できないことが多い。従って、FGタスクの場合、wiはwdより高い値を更に与えられる。FM(フィルマップマージング)タスクは、多数のFGタスクにより生成されたフィルマップデータを受信する。このフィルマップデータが大量のメモリを消費するため、可能な場合は常にキャッシュに格納されたフィルマップデータを再利用することが有益である。従って、FMタスクの場合、wdはwiより高い値を与えられる。各FR(フィルマップレンダリング)タスクは、印刷されている別個のページからのフィルマップを処理する。従って、FRタスク間でのデータの再利用の機会は殆どない。従って、FRタスクの場合、wiはwdより高い値を与えられる。命令の再利用及びデータの再利用に対してタスク及びそれらの挙動のこのような知識を有することは、重み付けがタスク型に基づくことを意味する。
【0101】
例1
次に、所定のスレッドに対してタスクを選択する一例を説明する。タスク[DL、6]を処理した後にスレッド「0」が使用可能になったと仮定する。タスク[FM、2]は、降順の優先順位で配置されて実行可能な状態にある他のタスクが後続したREADY_TASK_QUEUE355の先頭にある。READY_TASK_QUEUE355の状態は以下の通りである。
[FM、2][DL、7][DL、8][FG、3][FG、4][FG、5]
【0102】
図3を参照して上述したように、MESSAGE315はタスク−スレッド選択器340に送出される。例1において、MESSAGE315は、MATCH_THREADタイプであり、スレッドID「0」(825)を含む。従って、図6を参照して上述した処理535が実行されることにより、スレッド「0」上で実行するのに適したタスクをREADY_TASK_QUEUE355から選択する。スレッド「0」のCGがCG0(821)であるため、CG0の実行履歴は、スレッド「0」上で実行すべきタスクを決定するために使用される。
【0103】
スケジューラ345は、処理535において、READY_TASK_QUEUE355からこの例においてはタスク[FM、2]である第1のタスクを選択する。タスクのFM型であるため、重み行列890に従って、タスク[FM、2]は、wi=5及びwd=10を有する。これは、タスク[FM、2]に対してデータの再利用が命令の再利用より重要であることを意味する。
【0104】
従って、処理535は、DATASET_ID=2がステップ630においてDATA_HISTORY_QUEUE861にあるかを決定する。DATA_HISTORY_QUEUE861は、DATASET_ID=2を含まない。従って、処理535は、例1においてはタスク[DL、7]であるREADY_TASK_QUEUE355において次のタスクに進む。
【0105】
タスク[DL、7]は、DL型であり、重み行列890に従ってwi=10及びwd=5を有する。これは、DLタスク型に対して命令の再利用より重要であることを意味する。従って、処理535は、ステップ625においてTASK_ID=DLがスレッド「0」のCG0のTASK_HISTORY_QUEUE860にあるかを決定する。スレッド「0」CG0のTASK_HISTORY_QUEUE860は、TASK_ID=DLを含む。従って、処理535は、タスク[DL、7]がスレッド「0」により実行されるのに適していると決定する。処理535は終了し、ブールパラメータMATCHEDが「真」に設定されるステップ545、EXECUTION_REGISTER380におけるCG0の実行履歴が更新されるステップ550、並びにMATCHEDの値及びスレッド−タスク対(「0」、[DL、7])を含むMATCHED_MESSAGEが作成されるステップ555が実行される。
【0106】
例2
次に、所定のタスクに対するスレッドを選択する一例を説明する。実行されるタスク[FM、2]に対して要求されると仮定する。AVAILABLE_THREADS_LIST360の状態は以下の通りである。
{「0」、「3」}
【0107】
図3を参照して上述したように、MESSAGE315はタスク−スレッド選択器340に送出される。例2において、MESSAGE315は、タスク[FM、2]に対するMATCH_TASKタイプである。従って、図7Aを参照して上述した処理540が実行されることにより、タスク[FM、2]を実行するのに適したスレッドをAVAILABLE_THREADS_LIST360から選択する。双方のCGが少なくとも1つのアイドルスレッドを有するため、ステップ705において作成されたCG_LISTは、{CG0、CG1}である。
【0108】
タスク[FM、2]はFM型であり、重み行列890に従って、wi=5及びwd=10を有する。これは、タスク[FM、2]に対してデータの再利用がより重要であることを意味する。従って、処理540はデータの再利用に対するスレッドを選択する。従って、図7Bを参照して上述した処理725が実行される。
【0109】
処理725は、使用可能なスレッドを含むCGのリスト、すなわちCG_LISTからこの例においてはCG0である第1のCGを選択する。データの再利用が処理725の目的であるため、処理725は、タスク[FM、2]と関連付けられたDATASET_ID=2がCG0のDATA_HISTORY_QUEUE861にあるかを決定する。TASK_HISTORY_QUEUE860は「FM」を含むが、DATA_HISTORY_QUEUE861はDATASET_ID=2を含まない。従って、処理725は、CG_LISTにおいて使用可能なスレッドを含む例2においてはCG1である次のCGに進む。
【0110】
DATA_HISTORY_QUEUE863は、DATASET_ID=2を含む。従って、スケジューラ345は、処理725においてCG1から使用可能なスレッドがタスク[FM、2]を実行するのに適しているかを決定する。処理725は、CG1から使用可能なスレッド「3」を選択する。次に、ブールパラメータMATCHEDが「真」に設定されるステップ545、EXECUTION_REGISTER380におけるCG1の実行履歴が更新されるステップ550、並びにMATCHEDの値及びスレッド−タスク対(「3」、[FM、2])を含むMATCHED_MESSAGEが作成されるステップ555が実行される。
【0111】
例3
次に、所定のスレッドを選択する別の例を説明する。例3は、所定のタスクに対して命令の再利用が重要である場合の例を示すが、いずれの使用可能なスレッドによっても満たされない。タスク[FR、1]が実行されるのを待っていると仮定する。AVAILABLE_THREADS_LIST360の状態は以下の通りである。
{「0」、「3」}
【0112】
図3を参照して上述したように、MESSAGE315はタスク−スレッド選択器340に送出される。この例において、MESSAGE315は、タスク[FR、1]に対するMATCH_TASKタイプである。従って、図7Aを参照して上述した処理540が実行されることにより、タスク[FR、1]を実行するのに適したスレッドをAVAILABLE_THREADS_LIST360から選択する。双方のCGが少なくとも1つのアイドルスレッド、すなわち使用可能なスレッドを有するため、ステップ705において作成されたCG_LISTは{CG0、CG1}である。
【0113】
タスク[FM、1]はFM型であり、重み行列890に従って、wi=10及びwd=5を有する。これは、[FR、1]に対して命令の再利用がより重要であることを意味する。従って、処理540は、命令の再利用に対するスレッドを選択することを判断する。従って、図7Cを参照して上述した処理730が実行される。
【0114】
スケジューラ345は、処理730において使用可能なスレッドを含むCGのリスト、すなわちCG_LISTからこの例においてはCG0である第1のCGを選択する。命令の再利用が処理730の目的であるため、処理730は、タスク[FR、1]と関連付けられたTASK_ID=FRがCG0のTASK_HISTORY_QUEUE860において見つけられるかを決定する。TASK_HISTORY_QUEUE860はTASK_ID=FRを含まない。従って、処理730は、CG_LISTにおいて使用可能なスレッドを含む本発明の例においてはCG1である次のCGに進む。処理730は、CG1と関連付けられたTASK_HISTORY_QUEUE860がTASK_ID=FRを含まないことを更に決定する。従って、処理730は、データの再利用に対して適切なスレッドを見つけることに進む。
【0115】
処理730は、タスク[FR、1]と関連付けられたDATASET_ID=1がCG0のDATA_HISTORY_QUEUE861にあるかを決定する。DATA_HISTORY_QUEUE861は、DATASET_ID=1を含む。従って、処理730は、CG0からの使用可能なスレッドがタスク[FR、1]を実行するのに適していると決定する。処理730は、CG0からスレッド「0」を選択する。その後、スレッド「0」はタスク[FR、1]の実行に進む。
【0116】
次に、ブールパラメータMATCHEDが「真」に設定されるステップ545、EXECUTION_REGISTER380におけるCG0の実行履歴が更新されるステップ550、並びにMATCHEDの値及びスレッド−タスク対(「0」、[FR、1])を含むMATCHED_MESSAGEが作成されるステップ555が実行される。
【0117】
次に、図9に示されるように所定のTHREAD上で実行するのに適したタスクを選択する処理900を参照して、別の実現例を説明する。処理900は、図6に示されたような処理535の代わりに使用されてもよい。この実現例において、EXECUTION_HISTORY440構造に保持された命令及びデータの履歴は、TASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495の2つのキューにおけるより最近のものでない項目の前にチェックされたTHREAD905のCGに対するこれらの双方のキューにおけるより最近の項目と組み合わされる。
【0118】
処理900は、THREAD905のCGに対するTASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495から作成されたリスト構造COMBINED_HISTORYを使用する。リスト構造は、一般にシーケンスのタプルをタプルのシーケンスにマッピングするコンボリューション(又はジップ)として当技術分野において既知である処理において形成される。この場合、TASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495のそれぞれの項目Hi及びHdは、COMBINED_HISTORYリストに保持された対のシーケンスを形成する。履歴キューが他のキューより短い場合、他のキューからの相対物を有さないエントリは、値ヌルと対にされる。例えば、そのCGに対してTASK_HISTORY_QUEUE490が3つのエントリを有し、DATA_HISTORY_QUEUE495が5つのエントリを有する場合、所定のCGに対するCOMBINED_HISTORYリストは以下のように見える。
{(DL、6)、(DL、5)、(DL、4)、(Null、3)、(Null、2)}
【0119】
次に、処理900を説明する。処理900は、スケジューラ345がTHREAD905のCGの履歴を取得し、そのCGに対するCOMBINED_HISTORYリストを作成したステップ910から開始する。これは、THREAD_TO_CG_LOOKUP_TABLE480からTHREAD905に対するレコードにアクセスし、THREAD905が属し、その後格納されるCG IDフィールド484を取得することで実現される。次に、EXECUTION_HISTORY440構造において、そのCGに対するTASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495を含む実行履歴がアクセスされ、対のCOMBINED_HISTORYリストが上述したように作成される。ステップ912において、履歴エントリの第1の対(Hi、Hd)を取得することでCOMBINED_HISTORYリストのエントリを繰り返す処理が開始する。
【0120】
ステップ915において、スケジューラ345は、THREAD605上で実行するのに適したタスクが見つけられるまでREADY_TASK_QUEUE355においてエントリを繰り返す処理を開始する。ステップ915において、READY_TASK_QUEUE355の先頭から開始し、タスクTを取得する。ステップ917において、スケジューラ345は、タスクTに対して重みwi及びwdを決定する。この重みは種々の方法で決定される。種々の方法のうちの1つは、制御プログラム130において全てのタスク型に対するwi及びwdの所定の値のルックアップテーブルを使用することであるが、それに限定されない。判断ステップ920において、スケジューラ345はwiがwdより大きいかをチェックする。wiがwdより大きい場合、タスクTに対して命令の再利用はデータの再利用より重要であり、処理は、TASKのTASK_IDがステップ912において取得した履歴エントリの対(Hi、Hd)からのタスク型Hiと同一であるかをチェックする判断ステップ925に継続する。TASKのTASK_IDがステップ912において取得された履歴エントリの対(Hi、Hd)からのタスク型Hiと同一である場合、タスクTは適切であるため、ステップ945においてTASKをTに設定し、処理900が終了する。
【0121】
ステップ920において、wiがwdより大きくないとスケジューラ345が決定する場合、タスクTに対して命令の再利用はデータの再利用と同様に重要ではなく、ステップ930において、タスクTと関連付けられたDATASET_IDがステップ912において取得された履歴エントリの対(Hi、Hd)からのDATASET_ID=Hdと同一であるかをチェックする。タスクTと関連付けられたDATASET_IDがステップ912において取得された履歴エントリの対(Hi、Hd)からのDATASET_ID=Hdと同一である場合、タスクTは適切なタスクであるため、ステップ945においてTASKをTに設定し、処理900が終了する。
【0122】
READY_TASK_QUEUE355からタスクTを取得し、且つTASK_ID又はDATASET_IDがCOMBINED_HISTORYリストにあるかをチェックする処理は、ステップ935においてテストされたように、Hi又はHdを一致させるタスクが見つけられるまで、あるいはキューの後方に到達するまでREADY_TASK_QUEUE355においてタスク毎に繰り返される。
【0123】
チェック、判断ステップ935において決定すべきタスクがこれ以上READY_TASK_QUEUE355にない場合、スケジューラ345がまだチェックされていないより多くのエントリがCOMBINED_HISTORYリストにあるかをチェックするステップ937に進む。まだチェックされていないより多くのエントリがCOMBINED_HISTORYリストにある場合、ステップ936において、COMBINED_HISTORYリストにおける次のエントリに対する適合性に対して最初からREAD_TASK_QUEUE355におけるタスクをチェックし始めるためにREADY_TASK_QUEUE355繰返し子を再設定する。その後処理は、履歴エントリの次の対がCOMBINED_HISTORYリストから取得されるステップ912に戻る。
【0124】
判断ステップ937において、チェックすべきエントリがこれ以上COMBINED_HISTORYリストにないとスケジューラ345が決定する場合、処理900は、TASKをREADY_TASK_QUEUE355における第1のタスクに設定するステップ940に進む。キューの先頭のタスクは最も優先度の高いタスクであり、キャッシュ内容の再利用を実現できない場合、READY_TASK_QUEUE355における第1のタスクは、実行するためにディスパッチされたタスクである。処理900はステップ940で終了する。
【0125】
実行履歴キューTASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495、並びにREADY_TASK_QUEUE355において双方のエントリを繰り返す複雑性が増加したことによる何らかの余分なオーバヘッドを含むキャッシュ内容の再利用の機会を改善するために、処理900は、図5の処理535の代わりに使用されてもよい。
【産業上の利用可能性】
【0126】
説明した構成は、コンピュータ産業及びデータ処理産業、並びに特にキャッシュの再利用を増進するキャッシュメモリに対して適用可能である。
【0127】
上記の記述は本発明のいくつかの実施形態のみを説明し、本発明の範囲及び趣旨から逸脱せずに、変形及び/又は変更がいくつかの実施形態に対して行なわれてもよい。実施形態は、限定するものではなく例示するものである。例えば、説明した好適な構成は、各計算グループを対応するL2キャッシュと関連付けることでL2キャッシュを最適化する計算グループの動的構成に注目したが、同一の原理は、図10Bに示されたようなL3キャッシュ等の他のキャッシュレベルを最適化するために適用されてもよい。図10Bにおいて、L3最適化のためのL3キャッシュに対応する計算グループCGが形成される。
【技術分野】
【0001】
本発明は、コンピュータベースのシステムに関し、特にアプリケーションプログラム内の処理スケジューリングによりキャッシュヒット率の向上に関するものである。
【背景技術】
【0002】
コンピュータシステムにおけるキャッシュメモリは、中央処理装置(CPU)が容易に且つ高速にアクセスするために、主記憶場所からの命令又はオペランドであるデータ項目のコピーを格納するために使用される。キャッシュの再利用は、メモリアクセス時間を短縮することにより殆どのソフトウェアアプリケーションにとって大幅な実行時間の短縮につながるため、非常に望ましい。処理(又はマルチスレッドアプリケーションにおけるスレッド)内の効率的なキャッシュの再利用は、アプリケーションプログラムコードの品質に依存し、処理間及びスレッド間の効率的なキャッシュの再利用は、キャッシュに既にロードされているものを追跡すること、並びにキャッシュ内容の再利用を考慮して次に実行するための後続の処理/スレッドを選択することを含む。
【0003】
キャッシュ内容を追跡することは、一般に、ハードウェア手段又はソフトウェア技術を採用することで当技術分野において実現される。多くの場合、収集されたキャッシュ内容情報の正確度とその処理専用の時間及びリソースの量との間にはトレードオフの関係がある。キャッシュの再利用方法は、一般化されることによりあらゆるプログラム又は処理に対して適用可能なものもあるが、より特化されるものもある。
【0004】
また、データキャッシュ内容の再利用を目標とする方法もあるが、命令キャッシュ内容の再利用を目標とする方法もある。場合によっては、方法は、特にどちらかを目標とすることなく、データ及び命令の双方に対して適用可能である。
【0005】
従来技術において既知であるデータキャッシュの再利用に対する1つの手法は以下の通りである。データを全く共有しない処理は、マルチプロセッサシステムにおいて可能であれば種々のプロセッサ上でスケジュールされる。また、依存関係のために同時に実行されないが、互いに共通データを共有する処理は、それらがキャッシュ内容を共有できるような方法でCPU上でスケジュールされる。方法は、特定のアプリケーションにおいて動作可能なアルゴリズムの詳細な知識を必要とし、データの再利用のみを考慮する。
【0006】
他の従来技術は、同一のプロセッサ上で同一の処理をスケジュールすることで命令データの局所性を向上することを目的とする。命令の再利用のみを考慮する。
【0007】
いくつかの従来技術の方法の主な欠点は、それらがデータの再利用又は命令の再利用を簡略化するように設計されるが、双方を考慮しないことである。
【0008】
他には、より一般的な従来技術の手法は、所定の処理に対してキャッシュ内容の「キャッシュウォーム(cache warmth)」を測定することにより、ハードウェア手段又はソフトウェア技術を用いて命令の再利用及びデータの再利用の双方を簡略化することである。キャッシュウォームは、キャッシュにおいて見つけられた特定の処理のデータの古さを示すために使用される場合がある用語であり、処理毎に各プロセッサの要求の数をカウントする方法又はキャッシュのサブセクションに対するキャッシュミスを追跡する方法、あるいはライン毎のキャッシュの利用を追跡する方法等を含む従来技術における種々の方法で測定される。CPUがキャッシュにおいてデータ項目を見つけられない場合にキャッシュミスが発生する。これにより、関連付けられた性能ペナルティでより低いレベルのキャッシュ又は主記憶からデータ項目を取り出すことが必要になる。
【0009】
キャッシュ内容の再利用に対するこれらのより一般的な従来技術の手法の主な欠点は、それらの複雑性及びその複雑性がプログラム実行に対して課すオーバヘッドにある。それらは、実現するために専用ハードウェアを更に必要とすることが多い。
【発明の概要】
【0010】
本発明の目的は、従来技術の構成の1つ以上の欠点を実質的に克服するかあるいは少なくとも改善することである。
【0011】
本発明によれば、アプリケーションの内部知識を有するスケジューラは、重い処理オーバヘッドを課さずにコンピュータシステムにおいてコンテキストを切り替える結果発生するキャッシュミスを減少することでキャッシュミス率を最小限にするように配置される。
【0012】
多くのグループ内のスレッドの総合的な実行又は処理の履歴及び実行されるタスクの特徴の双方に基づいて、タスクを実行するスレッドのこれらのグループのうちの1つにプリファレンスが与えられる構成が開示される。
【0013】
本発明の一態様によれば、マルチプロセッサのコンピュータシステムにおいて、タスクを実行すべく複数のスレッドから1つのスレッドを決定する方法であって、複数のスレッドはコンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化されており、タスクは命令の集合により決定される型を有しており、当該方法は、複数のスレッドのサブセットの実行履歴を取得するステップと、命令の集合及びデータの集合の各々に対し、タスクの型に依存している重み付けを決定するステップと、実行履歴と決定された重み付けとに基づいて、タスクを実行すべく複数のスレッドのサブセットの適合性を決定するステップと、複数のスレッドのサブセットの決定された適合性を条件として、複数のスレッドのサブセットに関連付けられたキャッシュメモリの内容を使用して、タスクを実行すべく複数のスレッドのサブセットから1つのスレッドを決定するステップと、を含む方法が提供される。
【0014】
使用される複数のスレッドのサブセットの適合性を決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することが望ましい。複数のスレッドのサブセットの適合性を決定するステップは、命令に対する重み付けがデータに対する重み付けより大きい場合に、タスクを実行すべく複数のスレッドのサブセットの適合性を決定するために、データ履歴の前にタスク履歴を検査するサブステップと、データに対する重み付けが命令に対する重み付けより大きい場合に、タスクを実行すべく複数のスレッドのサブセットの適合性を決定するために、タスク履歴の前にデータ履歴を検査するサブステップと、を含むことが望ましい。
【0015】
重み付けは、複数のスレッドのサブセットの実行履歴に基づいて決定されることが好適である。あるいは、重み付けは、ルックアップテーブルを使用して決定され得る。
【0016】
一般に、キャッシュメモリのサイズに依存したサイズを有する。あるいは、実行履歴は、複数のスレッドにより実行されるタスクの集合に関連して最も多く実行された命令のサイズに依存したサイズを有する。更に別の方法において、実行履歴は、複数のスレッドにより実行されるタスクの集合により使用されたデータに依存したサイズを有する。
【0017】
本発明の他の態様によれば、マルチプロセッサのコンピュータシステムにおいて、印刷タスクを処理するためのキャッシュメモリのキャッシュ再利用を管理する方法であって、キャッシュメモリは複数のスレッドのサブセットと関連付けられており、印刷タスクは該印刷タスクのための命令の集合により決定される型を有しており、当該方法は、複数のスレッドのサブセットの実行履歴を取得するステップと、命令の集合及びデータの集合の各々に対し、印刷タスクの型に依存している重み付けを決定するステップと、実行履歴と決定された重み付けとに基づいて、印刷タスクを実行すべく複数のスレッドのサブセットの適合性を決定するステップと、印刷タスクを処理するサブセットから1つのスレッドを決定することにより複数のスレッドのサブセットが適切であると決定される場合に、キャッシュメモリを再利用するステップと、を含む方法が提供される。
【0018】
本発明の更に他の態様によれば、マルチプロセッサのコンピュータシステムにおいて、スレッドによる実行のために複数のタスクから1つのタスクを決定する方法であって、スレッドはコンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化される複数のスレッドの1つであり、タスクは命令の集合により決定される型を有しており、当該方法は、スレッドの実行履歴を取得し、対応するキャッシュメモリを識別するステップと、実行のために利用可能なタスクを識別し、命令の集合及びデータの集合の各々に対し、識別されたタスクの型に依存している重み付けを決定するステップと、実行履歴と決定された重み付けとに基づいて、スレッドで実行すべく識別されたタスクの適合性を決定するステップと、複数のスレッドのサブセットの決定された適合性を条件として、対応するキャッシュメモリの内容に基づいて、複数のタスクからスレッドで実行される1つの識別されたタスクを決定するステップと、を含む方法が提供される。
【0019】
重み付けが、使用されるタスクを決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することが望ましい。スレッドによる実行のために複数のタスクから1つのタスクの適合性を決定するステップは、タスクの命令に対する重み付けがデータに対する重み付けより大きい場合に、スレッドにより実行されるタスクの適合性を決定するために、データ履歴の前にタスク履歴を検査するサブステップと、タスクのデータに対する重み付けが命令に対する重み付けより大きい場合に、スレッドにより実行されるタスクの適合性を決定するために、タスク履歴の前にデータ履歴を検査するサブステップと、を含むことが望ましい。
【0020】
他の態様も更に開示する。
【0021】
次に、以下の図面を参照して本発明の少なくとも1つの実施形態を説明する。
【図面の簡単な説明】
【0022】
【図1】説明される構成が実現される例示的なコンピュータシステムの一部を示す概略ブロック図である。
【図2】図1のコンピュータシステムの処理装置及びメモリ装置の一例を示す概略ブロック図である。
【図3】図1の制御プログラム130に対する例示的なアーキテクチャを示す概略ブロック図である。
【図4】図3のEXECUTION−REGISTER380格納構成要素のメモリレイアウトを示す図である。
【図5】受信したMATCH_THREADメッセージ及びMATCH_TASKメッセージに応答してタスクをスレッドに一致させる処理を示すデータフローチャートである。
【図6】所定のスレッド上で実行するためにREADY_TASK_QUEUEからタスクを選択する処理を示すデータフローチャートである。
【図7A】所定のタスクを実行するためにAVAILABLE_THREADS_LISTからスレッドを選択する処理を示すデータフローチャートである。
【図7B】データの再利用が重要である場合に所定のタスクを実行するためにAVAILABLE_THREADS_LISTからスレッドを選択する処理を示すデータフローチャートである。
【図7C】命令の再利用が重要である場合に所定のタスクを実行するためにAVAILABLE_THREADS_LISTからスレッドを選択する処理を示すデータフローチャートである。
【図8】マルチスレッドソフトウェアプログラムの実行の所定の時点におけるEXECUTION_REGISTER380データ構造(図4のメモリレイアウトに従う)のメモリ内容を示す図である。
【図9】所定のスレッド上で実行するためにタスクを選択する図6に示されたデータフローチャートに対する別の手法を示すデータフローチャートである。
【図10A】L2及びL3のキャッシュ最適化に対する例示的な構成を示す図である。
【図10B】L2及びL3のキャッシュ最適化に対する例示的な構成を示す図である。
【図11A】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【図11B】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【図11C】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【図11D】印刷処理の一部であるフィルマップ表現の形成を示す図である。
【発明を実施するための形態】
【0023】
コンピュータシステムにおいてマルチプロセッサアーキテクチャを使用することで性能速度の高速化を実現する傾向は、近年広範に使用されるようになってきている。マルチプロセッサアーキテクチャにより、1つ以上の処理に属する多くのスレッドが多くの中央処理装置(CPU)を介して並列に実行できるため、実行時間全体が短縮される。
【0024】
CPUの数及び速度と共に、コンピュータシステムのメモリ構成は、処理速度に大きく影響する。階層的記憶構造は、キャッシュと呼ばれるより小型で高速なメモリをCPUにより近接させた近年のメモリシステムに対して一般に受け入れられたアーキテクチャである。記憶階層において同一の深度に配置されたキャッシュは、同一のキャッシュレベルであると言われる。キャッシュメモリは、容易でより高速なアクセスのためにCPUにより近接する主記憶内容のサブセットを格納するために使用される。
【0025】
レベル1(L1)キャッシュは、CPUに最近接し、同一のハードウェアチップ上に配置又は構成される。L1キャッシュは小型で非常に高速である。レベル2(L2)キャッシュはL1キャッシュより大きい。L2は、一般にCPUチップ上の最後のキャッシュである。レベル3(L3)キャッシュは、存在する場合により大きいために上位レベルのキャッシュより低速であるが、依然として主記憶よりはるかに高速である。一般にCPUのすぐ隣のコンピュータマザーボード上に配置されたL3キャッシュは、CPUと直接専用に相互接続していることが多い。一般にL3キャッシュは、単にサイズがより大きいためにL1キャッシュ及びL2キャッシュよりキャッシュミスの発生が少ない。
【0026】
各レベルにおいて、キャッシュは、物理的に独立したデータキャッシュ及び命令キャッシュ又はデータ及び命令の双方に対するユニファイドキャッシュから形成される。双方の場合において、データ及び命令は個別に考えられる。本発明において開示される構成は、双方の場合に対して使用される。
【0027】
項目(命令又はオペランド(データ))が初めてCPUにより要求されると、項目が属する主記憶ブロックの内容は、キャッシュラインにおいてキャッシュにロードされる。同一の項目又は同一のブロックからの項目に対する後続の要求は、そのキャッシュラインにアクセスすることで満たされる。要求された項目がキャッシュにおいて見つけられる場合、当技術分野においてキャッシュヒットとして既知であるイベント、すなわち要求された項目へのアクセスは、キャッシュミス上で発生する要求された項目が主記憶から取り出されなければならない時よりはるかに高速である。キャッシュにロードされるものは全てあらゆる種類のデータであるが、プログラムコードが動作するプログラムコード(命令)とオペランド(データ)との間で区別されることが多い。この説明において、前者を「命令」と呼び、後者を単に「データ」と呼ぶ。アプリケーションを実行するために使用されているプロセッサは、キャッシュが命令又はデータを含むかを決定し、且つ万が一キャッシュミスの場合にキャッシュラインをロードする処理を実行する。本発明において開示される構成は、命令及びデータのキャッシュを管理する全ての一般的な方法に対して適用可能である。
【0028】
マルチプロセッサシステムにおいて並列性を利用するために、一般に処理は、タスクとして既知である本明細書の目的で、並列に実行される動作の独立単位に大きく細分される。プログラムの実行には1つ以上のタスクを完了する必要がある。各タスクは、並列に実行される場合にスレッド上で実行される。
【0029】
本発明において開示される構成の好適な実現例において、タスクとスレッドとの間で一対一対応が維持される。すなわち、タスクは一度に1つのスレッドのみにおいて実行される。タスクの例には、グラフィックイメージ作成プログラムにおけるレンダリング処理及びスプレッドシートアプリケーションにおいて数値データの列に帰された数学演算子が含まれる。従って、タスクのサイズ及び複雑性が変動し、これは、アプリケーションプログラムが符号化されるかあるいは実行されることが望まれる方法に従う。
【0030】
スケジューリングの観点から、タスクは、動作の最小のスケジュール可能な単位であり、常に完了する。タスクは、その型(TASK_ID)及びタスクが処理するデータ(DATASET_ID)により規定される。TASK_IDは、関連付けられたタスクが実行される場合に実行されると予想される命令の集合を識別する。DATASET_IDは、タスクの実行中に読み出されるか又は書き込まれると予想されるか、あるいはそれら双方を予想される記憶場所の集合を識別する。タスク型は命令の集合により規定される。
【0031】
種々のタスク型は種々の特徴を有する。その特徴のうちの1つは、命令及びデータの使用パターンである。従って、データ及び命令の再利用の相対的な重要度は種々のタスク毎に異なる。本発明において開示される構成において、2つの重み値は、各タスク型、すなわちwi及びwdと関連付けられる。重みwiはそのタスクに対する命令の再利用の重要度を反映し、重みwdはそのタスクに対するデータの再利用の重要度を反映する。wdより高いwiを含むタスクは命令を再利用することからより多くの利益を得、wdより低いwiを含むタスクはデータを再利用することからより多くの利益を得る。重みを比較することにより、考えられる最適なキャッシュの再利用のために、スレッドをタスクに一致させる方法又はタスクをスレッドに一致させる方法を決定することが可能である。例えば、タスクTに対してwi=10及びwd=5である場合、そのタスクTに対して命令の再利用はデータの再利用より重要である。
【0032】
これらの重み値は、静的又は動的に設定される。重み値の静的決定は演繹的に行われ、プログラムにおけるタスク型に対する重みの動的決定は、実行時に行われ、コンピューティングシステムの現在の状態を反映するように変化する。例えばより大きなデータセットは、命令の再利用が一般により重要なものとして考えられるタスクに対してデータの再利用の重み値wdの増加を保証する。
【0033】
そのようなスレッド−タスクのペアリングがキャッシュの再利用につながる可能性が高い場合、スレッドは所定のタスクを実行するのに適していると仮定され、タスクは所定のスレッド上で実行されるのに適していると仮定される。
【0034】
2つ以上のCPUが同一のキャッシュユニットを共有する場合、これらのCPU上で実行されたスレッドを本明細書において計算グループ(CG)と呼ぶ。CGにおける全てのスレッドは、対応するCPUにより物理的に共有されたキャッシュへの同等のアクセスを有する。例示的な一実現例は、特に図10Aに示されるようにL2キャッシュに適用されるものとして説明される。しかし、本明細書において開示された手法は、図10BのL3最適化等のあらゆるキャッシュレベルに適用されてよい。
【0035】
一般に、1つ以上のスレッドがCPUに割り当てられるが、好適な一実現例において、1つのスレッドだけがCPUに割り当てられる。所定のスレッドが常に同一のCPU上で動作するため、このような割り当てにより、実行中にスレッドの親和性として当技術分野において既知である概念を変更しない。
【0036】
本発明において開示される構成は、タスクレベルでタスクをスレッドにスケジュールすることで従来技術の主な欠点に対処する。タスクがスレッドに割り当てられる結果、その特定のタスクに対して最も重要な種類のキャッシュされた内容(命令又はデータ)を再利用する。このため、命令及びデータのタスクの潜在的な再利用を示すタスク型が重要である。逆に、従来技術は、多くの場合キャッシュラインの使用を厳密に監視することにより、機械語レベルでキャッシュされた内容を再利用する。従って、従来技術は、本明細書において開示される構成より多くのオーバヘッドをプログラム実行に対して課し、多くの場合専用のハードウェアを更に必要とする。
【0037】
図1は、本発明において開示される構成が実現されるメモリの少なくとも1つのレベルを含むマルチプロセッサコンピュータシステム100を示す概略ブロック図である。コンピュータシステム100は、スタンドアロンコンピュータ、例えばIBM−PC及びその互換のコンピュータシステム、Sun社のSPARC(商標)コンピュータシステム又はApple社のMac(商標)コンピュータシステム等に類似する近年のデスクトップコンピュータである。あるいはコンピュータシステム100は、例えばプリンタ、撮像システム又は制御システム等の特殊機能装置を部分的に又は完全に実現する。各処理デバイス又は各チップ上のCPUの数、キャッシュ及びそれらの階層的組織の数、並びに他のコンピュータシステムの構成要素は、広範に変動する。コンピュータシステム100は、多くの処理装置150、メモリ120、周辺装置インタフェース190、ハードディスクドライブシステム(HDD)192及び読み出し専用メモリ(ROM)194を有する。示されるように、それらは全てバス140、並びに関連付けられたそれぞれの接続141、142、143、144及び145を介して相互接続される。周辺装置インタフェース190により、コンピュータシステム100は、オプションの接続195を介して通信ネットワークを含む他のシステム、他のコンピュータ、プリンタ及び表示装置等のデバイス、並びにキーボード及びマウスポインティングデバイス(不図示)等の制御デバイスと相互接続できる。処理装置150及びメモリ120は、バス140とは別の専用の接続145を有する。図1に示されたようなメモリ120は、一般的なコンピュータシステムにおいて使用された種々のメモリの構成要素と種類との混合物を示す。従って、メモリ120は、マイクロプロセッサデバイス/マイクロコントローラデバイスに組み込まれたL1キャッシュ及びL2キャッシュ、そのようなデバイスに直接結合されたL3キャッシュ、並びにいわゆる「主」記憶を含む。それらは全て、一般に、専用のランダムアクセスメモリ(RAM)デバイスとして処理装置150と一体化されない半導体ベースのRAMを使用して実現される。コンピュータシステム100は、HDDシステム192、ROMメモリ120、並びに光ディスクドライブ、PCMCIAドライブ及びUSBドライブ等の他のデバイスにより示されている他のメモリを含む。それらは、明確にするために示されず、従来独占的にバス140に結合し、処理装置150に直接結合しない。
【0038】
一般的なコンピュータシステムにおいて、ROM194は、一般に処理装置150により実行されるためにHDD192の永久記憶装置からのオペレーティングシステム122をメモリ120にコピーすることにより、コンピュータ100のオペレーティングシステム122をブートすることを含む基本動作処理をコンピュータ100が開始及び実行できるようにする基本処理を格納する。オペレーティングシステム122は、キャッシュメモリ管理がその一部を形成するメモリ管理等の低レベルの動作機能を含むコンピュータの機能の基本制御を提供する。従って、コンピュータシステム上で実行する(高次レベルの)アプリケーションは、オペレーティングシステムにより与えられたデフォルトメモリ管理機能を利用する。しかし、一般に特定のアプリケーションに最適化された性能又は適した性能を実現するために、低レベルの動作よりも自身の制御の影響を行使することを好む(高次レベルの)アプリケーションもある。そのようなアプリケーションは、高次レベルのアプリケーションにより所望されるようにコンピュータシステム100の低レベルの動作を変形するように構成された特定のソフトウェアアプリケーションをそのように提供するか、あるいはそれを伴う。
【0039】
通常、図1に示されるように、一般に制御プログラム130は、HDD192に格納されてHDD192からコピーされ、メモリ120に常住する。その結果、制御プログラム130は、処理装置150のCPU171、172、181及び182と関連付けられたスレッドのうちの1つ以上において実行可能である。本発明において、一般に制御プログラム130は、特定の目的のためにコンピュータシステム100上で実行可能なアプリケーションプログラムであり、キャッシュミス率を低下させるためにコンピュータシステム100のキャッシュメモリを管理し且つキャッシュの再利用を最適化するように別の手法を実現するために本発明に従って構成されたソフトウェアコンポーネントを含む。そのような実現例において、本発明において説明するキャッシュ管理処理は、オペレーティングシステム122内のデフォルト処理として組み込まれる。制御プログラム130の特定の目的は、広範に変動するが、レンダリング、ラスタリング及び合成等の画像処理アプリケーション、並びに印刷アプリケーションにより生成された印刷タスクを含む。他のアプリケーションは、特に、ワードプロセシングアプリケーション及びデスクトップパブリッシングアプリケーション、金融アプリケーション、ゲーム、通信、データ処理、モニタリング、制御システムを含む。
【0040】
図1の例に示されるように、処理装置150のCPU171、172、181及び182は、2つの計算グループ(CG)、すなわちCG160及びCG165に分けられる。
【0041】
図2は、図1の処理装置150及びメモリ120の階層的構成の例示的な構成200を示す。この特定の構成200において、CGは、同一のL2キャッシュを使用するCPUと関連付けられたスレッドから構成され、L1キャッシュが一般に同一の半導体デバイス上の対応するCPUで構成される図10Aの構成によりミラーリングされる。従って、図2は、2つのCG、すなわち、L2キャッシュ210を共有するCPU171及びCPU181のスレッドに対するCG160、並びにL2キャッシュ220を共有するCPU172及びCPU182のスレッドに対するCG165を示す。この構成において、説明される構成の実現例は、L2キャッシュの最適化を提供する。
【0042】
図1に示された各CPUは、ユニファイドキャッシュであるか、あるいは専用のデータキャッシュ及び命令キャッシュの2つの独立した物理ユニットから構成される対応する専用L1キャッシュを有する。図2は、L1キャッシュ231を有するCPU171、L1キャッシュ232を有するCPU181、L1キャッシュ233を有するCPU172及びL1キャッシュ234を有するCPU182を示す。
【0043】
同様に、L2キャッシュ210及びL2キャッシュ220は、統合されるか、あるいは専用のデータキャッシュ及び命令キャッシュの物理的に独立したハードウェアユニットを有する。本発明において説明する種々の実現例において、L2キャッシュ210及び220は、物理的配列に拘らず、各々が1つの論理キャッシュユニットとして見なされる。低位メモリレベル230構成要素は、この例示的なハードウェア構成においてL3キャッシュ及び主メモリである残りの記憶階層を示す。図2の構成の一般的な実現例において、各L1キャッシュは、対応するCPUと同一の集積回路チップ上に物理的に配置され、各L2は、対応するCPUデバイスに直接物理的に接続された専用のキャッシュメモリ素子であり、L3キャッシュは、コンピュータシステム100の主半導体ランダムアクセスメモリ(RAM)内で物理的に区分された仮想場所のグループである。
【0044】
図3は、エグゼクティブスレッド305構成要素及びワーカースレッド310構成要素を含む制御プログラム130の一実現例を示す。エグゼクティブスレッド305構成要素は、制御プログラム130の実行を開始及び監督する。ワーカースレッド310構成要素は、複数のスレッド(スレッド0、スレッド1、スレッド2...)を含み、エグゼクティブスレッド305構成要素により指示されたようにこれらのスレッド上でタスクを実行する。例えば、制御プログラム130がレンダリング及び合成等の関連付けられた印刷タスクを有するプリンタドライバである場合、エグゼクティブスレッド305は、レンダリング等の特定のタスク、並びに/あるいは縁端の追跡及び合成等のそれらの重要な構成要素を実現するワーカースレッド310により実行される実際の印刷処理を実施するキャッシュ管理を含むプリンタドライバの管理動作を示す。
【0045】
本発明において説明する構成は、全てが特定の計算グループ(CG)内で実行するように制限される特定のスレッドに特定のタスクを一致させることに基づく。これは、スレッドとタスクとの組合せが各通話に対して同一のキャッシュメモリと実質的に関連付けられることにより、キャッシュミス率を潜在的に減少させることを提供する。
【0046】
エグゼクティブスレッド305は、処理を実行するためにタスクを作成すること及び実行するためにこれらのタスクをワーカースレッド310にディスパッチすることを担うタスク生成器及びディスパッチャ335を備える。作成の際、タスクは、他の属性のうち、実行される命令の集合を識別する型(TASK_ID)、タスクが処理しているデータを識別するDATASET_ID及びタスクスケジューリング優先順位を割り当てられる。
【0047】
処理メッセージ330構成要素は、制御プログラム130内で渡された全てのメッセージを処理することを担い、スケジューラ345は、実行するためにタスクをスケジュールすることを担う。スケジューラ345は、詳細に後述される機能であるタスクをスレッドに一致させることを担うタスク−スレッド選択器340を有する。
【0048】
エグゼクティブスレッド305は、以下の格納構成要素、すなわちREADY_TASK_QUEUE355、AVAILABLE_THREADS_LIST360、MESSAGES315及びEXECUTION_REGISTER380を更に有する。次に、それらの各々の機能及び内容を順番に説明する。
【0049】
READY_TASK_QUEUE355は、実行するためにディスパッチ可能な状態にある制御プログラム130において全てのタスクを含むキューデータ構造である。
【0050】
AVAILABLE_THREADS_LIST360は、制御プログラム130に割り当てられたスレッドのアイデンティティ(ID)のリストを格納する。リスト360におけるスレッドは、現在アイドル状態である制御プログラム130と関連付けられた全てのワーカースレッド310のサブセットを示すため、タスクの実行に割り当てられない。このリスト360は、実行中のあらゆる所定の時間において制御プログラム130に対して使用可能な計算リソースを追跡するために保持される。
【0051】
MESSAGES315記憶装置は、制御プログラム130の構成要素間で渡されたメッセージを格納する。各メッセージは、その目的を示すMATCH_THREAD、MATCH_TASK、START_TASK及びTASK_FINISHED等のタイプを有する。MESSAGE記憶装置315は、MATCH_THREAD又はMATCH_TASKのメッセージタイプである処理メッセージ330構成要素からタスク−スレッド選択器340に渡されるメッセージを提供する。
【0052】
EXECUTION_REGISTER380は、CGにおいてスレッドの総合的な実行履歴を追跡する。図4に示されるように、記憶装置380は3つの構造を有することが好ましい。構造CG_TO_THREAD_LOOKUP_TABLE410は、多くのレコード425においてCG ID及び各CGにおけるスレッドのIDを含む。従って、テーブル410は、対応するCG、すなわち対応するキャッシュメモリと関連付けられたスレッドのサブセットを示す。レコード425は、CG IDを格納するフィールド412、そのCGにおけるスレッドの数を格納するフィールド414を有し、レコード416、418及び420における残りのフィールドは、スレッドをそのCGに格納することを示す。
【0053】
EXECUTION_REGISTER380における第2の構造は、CG毎に個々のレコード445に記録されるCG毎の実行履歴を格納するEXECUTION_HISTORY440構造である。
【0054】
各レコード445は、対応するCGにおいてスレッド上で最後に実行されたタスクのタスクIDを含むキューデータ構造であるTASK_HISTORY_QUEUE490を有するため、CGのタスク履歴を示す。各レコード445は、CGにおいてスレッド上で最後に実行されたタスクのデータセットIDを含むキューデータ構造であり、CGのデータ履歴を示すDATA_HISTORY_QUEUE495を更に有する。要約すれば、EXECUTION_HISTORY440構造は、最後に使用された主記憶領域を識別する情報を格納する。
【0055】
レコード445のフィールド442はCG IDを格納する。フィールド446、448及び450は、TASK_HISTORY_QUEUE490の符号化を示す。フィールド454、456及び458は、DATA_HISTORY_QUEUE495の符号化を示す。フィールド444及び452は、それぞれ、TASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495におけるエントリの数を格納する。総合的にスレッドの実行履歴を示すこれらのキューの深度は、最適化されるために使用されるキャッシュのサイズ及び制御プログラム130におけるタスクの特徴の双方に依存する。制御プログラム130におけるタスクの特徴の例は、タスクの平均コードサイズ及びタスクのコードにおいて最も頻繁に実行された命令の平均サイズである。制御プログラム130におけるタスクの特徴、例えばタスクのコードサイズは、キューの深度を事前に決定するため又は制御プログラム130の実行中にキュー深度を変更するために使用される。従って、一実現例において、実行履歴は、スレッドにより実行されたタスクと関連付けられた最も一般的に実行された命令のコードサイズに依存するサイズを有する。別の実現例において、実行履歴は、スレッドにより実行されたタスクにより使用されたデータのサイズに依存するサイズを有する。そのキュー深度値は、キュー及び/又はCG毎に異なり、制御プログラム130を開始する前に設定されるかあるいは制御プログラム130の実行中に動的に変動される。CG_TO_THREAD_LOOKUP_TABLE410構造及びEXECUTION_HISTORY440構造の双方は、CG毎に1つのレコードを含む。
【0056】
EXECUTION_REGISTER380における第3の構造は、スレッドに対応するレコード485において、フィールド482におけるスレッドIDからフィールド484においてスレッドが属するCGにルックアップテーブルを格納するTHREAD_TO_CG_LOOKUP_TABLE480構造である。構造480は、制御プログラム130のワーカースレッド310構成要素におけるスレッドの数であるN個のレコードを含む。構造480は、上述のテーブル410の基本的な態様を補完する。
【0057】
スケジューラ345構成要素は、実行するためにタスクをスレッド上でスケジュールすることを担い、メッセージチャネル390を介してタスク生成器及びディスパッチャ335から生成されたタスクの規格を受信する。スケジューラ345は、採用されたスケジューリングアルゴリズムにより決定された順番でREADY_TASK_QUEUE355を保持する。当技術分野において既知であるあらゆる適切なスケジューリングアルゴリズムは、スケジューラ345により採用される。好適な実現例によれば、READY_TASK_QUEUE355におけるタスクは、降順のタスク優先順位で保持される。すなわち、高優先度タスクはキューの前方にあり、低優先度タスクはキューの後方にある。タスク優先順位は、タスク作成の際に割り当てられ、実行中に後で前後する。タスク−スレッド選択器340構成要素は、実行可能な状態にあるタスクをAVAILABLE_THREADS_LIST360からのスレッドと一致させる。次に、図5を参照してタスク−スレッド選択器340の機能性を詳細に説明する。
【0058】
図5は、それぞれ、所定のタスクが使用可能なスレッドと一致されるか又は所定のスレッドがタスクを実行可能な状態にあるかを決定するスケジューラ345により実行された処理500を示す。最初に、MESSAGE315は、ディスパッチャ335からスケジューラ345に渡される。MATCH_THREADタイプ又はMATCH_TASKタイプのみがディスパッチャ335の処理メッセージ330構成要素からスケジューラ345のタスク−スレッド選択器340構成要素に渡されるため、MESSAGE315はこれらの2つのメッセージタイプのいずれかである。MESSAGE315は、メッセージタイプ及び一致されなければならないスレッド又はタスクを含む。例えば、(MATCH_THREAD、「0」)は、ID「0」を含むスレッドを実行可能な状態にある適切なタスクと一致させるメッセージ要求である。例えば、メッセージ要求(MATCH_TASK、[DL、7])は、要求により示された型「DL」により規定されたタスク及びスレッドにより処理されるデータセット「7」を実行するのに適したスレッドを見つける要求である。
【0059】
スケジューラ345は、判断ステップ505において、MESSAGE315がMATCH_THREADタイプであるかを決定する。MESSAGE315がMATCH_THREADタイプである場合、処理500はステップ510を介して進み、MESSAGE315において渡されたスレッド上で実行するのに適したタスクを決定する。MESSAGE315がMATCH_THREADタイプではない場合、すなわちMATCH_TASKタイプである場合、処理は、MESSAGE315において渡されたタスクを実行するのに適したスレッドを選択することにより、ステップ520を介して継続する。次に、これらの2つの例を順番に説明する。
【0060】
スケジューラ345は、判断ステップ505においてMESSAGE315がMATCH_THREADタイプであると決定する場合、判断ステップ510に進む。ステップ510において、スケジューラ345は、READY_TASK_QUEUE355が空であるかをチェックする。READY_TASK_QUEUE355が空である場合、スケジューラ345は、処理ステップ515に進み、ブールパラメータMATCHEDを「偽」に設定する。次にスケジューラ345は、ステップ555において、図3に示されるようにタスク又はスレッドの選択を要求したMESSAGE315への応答としてエグゼクティブスレッド305の処理メッセージ330構成要素に送出されるメッセージMATCHED_MESSAGE325を作成する。
【0061】
MATCHED_MESSAGE325は、MESSAGEの値及び対(THREAD、TASK)を含む。ステップ515が生じる場合、一致が不可能であるため、所定のTHREADに対するTASKの値は、MATCHED_MESSAGE325においてヌルに設定される。処理500はステップ555で終了する。
【0062】
ステップ510においてテストされるようなREADY_TASK_QUEUE355において少なくとも1つのタスクがある場合、THREADは、ステップ525においてMESSAGE315から取り出される。次に、THREAD上で実行するためのタスクは、図6を参照して詳細に後述される処理535において選択される。処理はステップ545に進む。
【0063】
ステップ505においてMESSAGE315がMATCH_THREADタイプではないと処理装置150におけるスレッド305のスケジューラ345が決定する場合、処理500は、AVAILABLE_THREADS_LIST360が空であるかをスケジューラ345がチェックする判断ステップ520に継続する。AVAILABLE_THREADS_LIST360が空である場合、ブールパラメータMATCHEDは、ステップ515において「偽」に設定される。次にスケジューラ345は、ステップ555においてメッセージMATCHED_MESSAGE325を作成する。MATCHED_MESSAGE325は、タスク又はスレッドの選択を要求したMESSAGE315への応答として処理メッセージ330構成要素に送出される。この場合、再度、一致が不可能であるため、所定のTASKに対するTHREADの値はMATCHED_MESSAGE325においてヌルに設定され、処理500はステップ555で終了する。
【0064】
ステップ520に戻り、少なくとも1つの使用可能なスレッドがある場合、処理は、ステップ530においてMESSAGE315からTASKを取り出すことを継続する。次にスケジューラ345は、図7A〜図7Cを参照して詳細に後述されるように、TASKを実行するためのスレッドを選択する処理540を実行する。
【0065】
それぞれメッセージタイプMATCH_THREAD及びMATCH_TASKに対して実行された処理535及び540の双方は、常に結果として対(THREAD、TASK)を取得する。従って、後続のステップ545において、ブールパラメータMATCHEDは「真」に設定され、次にステップ550において、EXECUTION_REGISTER380は、EXECUTION_HISTORY440構造においてTHREADのCGに対するTASKのTASK_ID及びDATASET_IDを実行履歴キュー490及び495に追加することで更新される。TASKのTASK_ID及びDATASET_IDは、それぞれキュー490及び495の前方に追加され、他の全てのエントリは、各キューの最後のエントリ(最も古い)が削除された状態でキューの末尾へ移行される。
【0066】
処理500は、MATCHED_MESSAGEがブールパラメータMATCHEDの値(ステップ545から後続する場合に値「真」を有する)及び対(THREAD、TASK)で作成されるステップ555で終了する。
【0067】
図6は、所定のスレッド、すなわちTHREAD605上で実行するためにREADY_TASK_QUEUE355からタスクを選択する処理535を示す。処理535は、スケジューラ345がTHREAD605のCGの履歴を取得するステップ610から開始する。これは、THREAD_TO_CG_LOOKUP_TABLE480からTHREAD605に対するレコードにアクセスし、THREAD605が属するCGIDを特定するフィールド484を取得することで実現される。次に、EXECUTION_HISTORY440構造から、そのCGに対するTASK_HISTORY_QUEUE490から読み出されたタスク履歴及びDATA_HISTORY_QUEUE495から読み出されたデータ履歴を含む実行履歴は、ステップ610でアクセスされる。取得ステップ615において、スケジューラ345は、THREAD605上で実行するのに適したタスクが見つけられるまでREADY_TASK_QUEUE355においてエントリを繰り返す処理を開始する。ステップ615において、READY_TASK_QUEUE355の先頭から開始し、タスクTは、タスク生成器及びディスパッチャ335により取得される。ステップ617において、タスクTに対して命令の集合の重み付けwi及びデータの集合の重み付けwdを決定する。重み付けは、タスクに対する命令の再利用又はデータの再利用の重要度を決定する。この重みは種々の方法で決定される。種々の方法のうちの1つは、メモリ120に格納された制御プログラム130において全てのタスク型に対するwi及びwdの所定の値のルックアップテーブルを使用することであるが、それに限定されない。次にスケジューラ345は、判断ステップ620においてwiがwdより大きいかをチェックする。wiがwdより大きい場合、タスクTに対して命令の再利用はデータの再利用より重要であり、処理535は、TASKのTASK_IDがTHREAD605のCGのTASK_HISTORY_QUEUE490にあるかをチェックする判断ステップ625に継続する。TASKのTASK_IDがTHREAD605のCGのTASK_HISTORY_QUEUE490にある場合、タスクTは適している。ステップ645において、スケジューラ345はTASKをTに設定し、処理535が終了する。
【0068】
ステップ620においてwiがwdより大きくないと決定する場合、タスクTに対して命令の再利用はデータの再利用と同様に重要ではなく、タスクTと関連付けられたDATASET_IDがTHREAD605のCGに対するDATA_HISTORY_QUEUE495にあるかをチェックするステップ630に後続する。タスクTと関連付けられたDATASET_IDがTHREAD605のCGのDATA_HISTORY_QUEUE495において見つけられる場合、タスクTは適切なタスクであり、スケジューラ345がTASKをTに設定するステップ645に後続し、処理535が終了する。
【0069】
図6においてREADY_TASK_QUEUE355からタスクTを取得し、且つタスクTのTASK_ID又はDATASET_IDがTHREAD605のCGに対する実行履歴にあるかをチェックする処理は、ステップ635においてテストされたように、TASK_ID(ステップ625)又はDATASET_ID(ステップ630)を一致させるタスクが見つけられるまで、あるいはキューの後方に到達するまでREADY_TASK_QUEUE355においてタスク毎に繰り返される。
【0070】
READY_TASK_QUEUE355においてこれ以上タスクがない場合、ステップ615及び635により形成された処理ループは、TASKをREADY_TASK_QUEUE355における最初のタスクに設定するステップ640に進む。キューの先頭のタスクは最も優先度の高いタスクであり、キャッシュ内容の再利用を実現できない場合、キューの先頭のタスクは実行するためにディスパッチされる。ステップ640の後、処理535は終了する。
【0071】
図7Aは、所定のタスク、すなわちTASK715を実行するためにスレッドを選択する処理540を示す。処理540は、CG IDのリスト(CG_ID)が実行履歴440から作成されることでCGを形成するスレッドのサブセットの実行履歴を示すステップ705から開始する。CG_LISTにおける各エントリは、少なくとも1つの使用可能なスレッドを有する。CG_LISTを繰り返す繰返し子は、ステップ705において更に設定される。ステップ710において、スケジューラ345は、TASK715に対して命令の集合の重み付けwi及びデータの集合の重み付けwdを決定する。これは種々の方法で決定される。種々の方法のうちの1つは、制御プログラム130において全てのタスク型に対するwi及びwdの所定の値のルックアップテーブルを使用することであるが、それに限定されない。判断ステップ720は、wiがwdより大きいかをチェックする。wiがwdより大きい場合、図7Cを参照して詳細に後述するように、TASK715に対して命令の再利用はデータの再利用より重要であり、処理は処理730に継続する。
【0072】
次に図7Bを参照して詳細に説明されるように、スケジューラ345がステップ720においてwiがwdより大きくないと決定する場合、TASK715に対して命令の再利用はデータの再利用と同様に重要でないため、処理は処理725に継続する。
【0073】
図7B及び図7Cに示されたステップ725及び730の処理は、スレッドの実行履歴、並びにタスクと関連付けられた命令及びデータに対して決定された重み付け(wi、wd)に基づいてTASK715を実行するのに適した全てのアイドル(使用可能な)スレッドのサブセットから特定のスレッドを選択する。
【0074】
図7Bは、TASK715に対してデータの再利用が命令の再利用より重要である場合にTASK715を実行するのに適したスレッドを選択する処理725を示す。従って、処理725は、TASK715と関連付けられたデータ履歴に依存し、双方がステップ705において前に作成された繰返し子を使用してスケジューラ345がCG_LISTからCG IDを取得するステップ750から開始する。次にスケジューラ345は、ステップ752においてそのCGに対するデータ履歴を取得する。これは、そのCGに対するDATA_HISTORY_QUEUE495にアクセスするためにCG IDを使用することで実現される。
【0075】
処理725は、TASK715と関連付けられたDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられるかをスケジューラ345が決定する判断ステップ754に継続する。TASK715と関連付けられたDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられる場合、次にステップ766において、TASK715を実行するために使用されるCGから使用可能なスレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。
【0076】
TASK715に割り当てられたDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられなかったことがステップ754において決定された場合、処理は判断ステップ756に進む。ステップ756において、データ履歴がまだチェックされていないCG_LISTにより多くのCGがあるかを決定する。CG_LISTにより多くのCGがある場合、TASK715のDATASET_IDがCG_LISTのCGに対するDATA_HISTORY_QUEUE495において見つけられるまで又はCG_LISTにおいてチェックすべきエントリがなくなるまでステップ750、752及び754は繰り返される。
【0077】
ステップ756において決定されたようにチェックすべきエントリがこれ以上CG_LISTに残っていない場合、処理725は、現在使用可能なあらゆるスレッド上でTASK715に対してデータの再利用を実現できないため、CG_LIST繰返し子を再設定することでCG_LISTの繰り返しが最初から開始されるステップ758に進む。CG_LISTのCG IDのTASK_HISTORY_QUEUE490におけるエントリは、命令の再利用を実現することを考慮してTASK715のTASK_IDに対してチェックされる。
【0078】
ステップ760において、スケジューラ345はCG_LISTからCG IDを取得する。ステップ761において、スケジューラ345は、そのグループのスレッドが実行した命令の集合に関するそのCGのタスク履歴を取得する。これは、そのCGに対するEXECUTION_HISTORY440構造においてTASK_HISTORY_QUEUE490にアクセスすることで実現される。
【0079】
判断ステップ762において、スケジューラ345は、TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUE490において見つけられるかをチェックする。TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUE490において見つけられる場合を条件として、スケジューラ345は、ステップ766においてTASK715を実行するために使用されるCGに割り当てられたワーカースレッド310から使用可能なワーカースレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。
【0080】
ステップ762においてTASK_IDがそのCGに対するTASK_HISTORY_QUEUE490において見つけられない場合、TASK_IDがCG_LISTのCGに対するTASK_HISTORY_QUEUE490において見つけられるまで又は判断ステップ764において決定されたようにCG_LISTにおいてチェックすべきエントリがなくなるまでステップ764、760、761及び762は繰り返される。チェックすべきエントリがこれ以上残っていない場合、THREADは、ステップ768においてAVAILABLE_THREADS_LIST360で示されたサブセットにより識別されたワーカースレッド310からのあらゆるアイドルワーカースレッドに設定される。アイドルスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。処理725は、ステップ768で終了し、TASK715に対してデータの再利用が命令の再利用より重要である場合にTASK715を処理するのに適したスレッドをリスト360のサブセットから選択することを実証する。上述したように、スレッドのサブセットの選択は、スレッドの実行履歴及びタスクと関連付けられた命令の再利用又はデータの再利用に対して決定された重み付けに基づく。
【0081】
図7Cは、TASK715に対して命令の再利用が重要である場合に図7Aにおいて示されたようにTASK715を実行するのに適したスレッドを選択する処理730を示す。従って、処理730は、TASK715と関連付けられた命令履歴に依存し、ステップ705において作成されたCG_LISTからCG IDを取得するステップ770から開始する。ステップ772において、そのグループのスレッドが最近実行した命令に関するそのCGに対する履歴を取得する。これは、そのCGに対するTASK_HISTORY_QUEUE490にアクセスするためにCG IDを使用することにより実現される。
【0082】
処理730は、TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUEにおいて見つけられるかをスケジューラ345が決定する判断ステップ774に継続する。TASK715のTASK_IDがそのCGに対するTASK_HISTORY_QUEUEにおいて見つけられる場合、スケジューラ345は、ステップ786においてTASK715を実行するために使用されるCGに割り当てられたワーカースレッド310から使用可能なワーカースレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。
【0083】
TASK715のTASK_IDがそのCGのTASK_HISTORY_QUEUE490において見つけられない場合、処理は、命令履歴がまだチェックされていないCG_LISTにより多くのCGがあるかをスケジューラ345が決定する判断ステップ776に到達する。CG_LISTにより多くのCGがある場合、TASK715のTASK_IDがCG_LISTのCGに対するTASK_HISTORY_QUEUE490において見つけられるまで又はCG_LISTにおいてチェックすべきエントリがなくなるまでステップ770、772及び774は繰り返される。
【0084】
チェックすべきエントリがこれ以上CG_LISTにない場合(判断ステップ776)、処理は、現在使用可能なあらゆるスレッド上でTASK715に対して命令の再利用を実現できないため、データを再利用しようとすることでCG_LISTの繰り返しが最初から開始されるステップ778に進む。再利用を実現するために、CG_LISTにおけるCGのDATA_HISTORY_QUEUE495は、TASK715のDATASET_IDに対してチェックされる。ステップ780において、CG_LISTからCG IDを取得する。
【0085】
ステップ781において、スケジューラ345はそのCGに対するデータ履歴を取得する。これは、データ実行履歴が格納されるEXECUTION_HISTORY440構造、DATA_HISTORY_QUEUE495にアクセスするためにCG IDを使用することで実現される。
【0086】
判断ステップ782において、スケジューラ345は、TASK715のDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられるかをチェックする。TASK715のDATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられる場合、スケジューラ345は、ステップ786においてTASK715を実行するために使用される計算グループCGから使用可能なワーカースレッドを選択する。現在アイドル状態であるあらゆるスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。処理730はステップ786で終了する。
【0087】
DATASET_IDがそのCGに対するDATA_HISTORY_QUEUE495において見つけられない場合、DATASET_IDがCG_LISTのCGに対するDATA_HISTORY_QUEUE495において見つけられるまで又は判断ステップ784により決定されたようにCG_LISTにおいてチェックすべきエントリがなくなるまでステップ784、780、781及び782は繰り返される。チェックすべきエントリがこれ以上残っていない場合、THREADは、ステップ788においてAVAILABLE_THREADS_LIST360からのあらゆるスレッドに設定され、処理730は終了する。AVAILABLE_THREADS_LIST360からのアイドルスレッドは、当技術分野において既知であるあらゆる負荷分散アルゴリズムを適用することを含むがそれに限定されない手段により選択される。処理730は、TASK715に対して命令の再利用が重要である場合にTASK715を処理するのに適したスレッドをAVAILABLE_THREADS_LIST360から選択することを更に実証する。同様に、AVAILABLE_THREADS_LIST360におけるスレッドのサブセットの選択は、スレッドの実行履歴及びタスクと関連付けられた命令の再利用又はデータの再利用に対して決定された重み付けに基づく。
【0088】
本発明において説明する処理構成は、同一の計算グループのCPU上で実行されたタスク間でキャッシュ内容を最大限再利用するためにスレッドをタスクに適切に一致させるようにメモリ120に格納された制御プログラム130により作成及び実行されたタスクの特徴の知識を使用する。行われなければならない判断の簡潔性及び保持された限られた実行履歴により、タスク−スレッド選択器340が招くオーバヘッドを最小限にできる。
【0089】
次に、図4の構造に類似する構造を示す図8を参照して3つの例を説明する。印刷システムにおいて使用されたラスタイメージプロセッサ(RIP)アプリケーションプログラムは、以下の例を説明するために使用される。RIPアプリケーションプログラムは、制御プログラム130の一部を形成する。一般にRIPは、ページの高レベルな記述を印刷記述言語(PDL)からラスタ表現に変換する必要がある。ページの高レベルPDL記述は、テキスト、ライン、フィル領域及び画像データ等のグラフィックオブジェクト、並びにこれらのグラフィックオブジェクトがラスタ表現にレンダリングされる順番を含む。この順番は、一般にzオーダーとして当技術分野において既知である。ページのラスタ表現は色画素データから構成される。次にプリンタエンジンは、一般に、ページのラスタ表現を用紙等の印刷媒体上に印刷する。ラスタ表現を生成する前、RIPは、ページの中間ページ表現を生成する。ページの中間ページ表現は、一般にラスタ表現より小型であるが、迅速かつ容易にラスタ表現に変換される。
【0090】
次に、図11A〜図11Dを参照して、「フィルマップ」として既知である中間ページ表現の一例を説明する。図11Aはページ表現1100を示す。ページ1100は、白色の背景を有し、2つのグラフィックオブジェクト1101及び1102を含む。第1のグラフィックオブジェクト1101は、灰色の平坦なフィルを含む不透明な「T」形のオブジェクトである。第2のグラフィックオブジェクト1102は、陰影をつけられたフィルを含む透明な正方形である。他のフィルの例は、直線的に変動する色を表す混合、ビットマップ画像又はタイル型の(すなわち、繰り返された)画像である。第2のグラフィックオブジェクト1102は、部分的に第1のグラフィックオブジェクト1101に重複する。
【0091】
図11Bは、画素格子1120に従ってページ1100のグラフィックオブジェクト1101及び1102を画素整列ラフィックオブジェクトの縁端、レベル、並びにフィルに分解することを示す。グラフィックオブジェクトは、2つ以上の画素整列オブジェクトの縁端、単一のレベル及び1つ以上のフィルに分解される。画素整列グラフィックオブジェクトの縁端は、ラスタ化中のレベルの起動又は停止を規定する。従って、画素整列グラフィックオブジェクトの縁端は、それらが導出されるオブジェクトのレベルを示す。第1のグラフィックオブジェクト1101は、2つの画素整列グラフィックオブジェクトの縁端1121及び1122、並びに灰色の平坦なフィルから構成されるレベル1132に分解される。画素整列グラフィックオブジェクトの縁端1121及び1122は、第1のグラフィックオブジェクト1101のレベル1132を示す。第2のグラフィックオブジェクト1102は、2つの画素整列グラフィックオブジェクトの縁端1123及び1124、並びに透明な陰影をつけられたフィルから構成されるレベル1133に分解される。画素整列グラフィックオブジェクトの縁端1123及び1124は、第2のグラフィックオブジェクト1102のレベル1133を示す。背景1125は、白色のフィルから構成されるレベル1131を有する。
【0092】
図11Cは、図11Aに示されたページ1100のフィルマップ表現1140を示す。フィルマップ表現1140は、5つの画素整列フィルマップの縁端から構成される。画素整列フィルマップの縁端の各々は、その画素整列フィルマップの縁端により起動された各画素の色を決定するために使用されるフィルシーケンスを示す。画素整列フィルマップの縁端がアクティブである所定のあらゆる走査線上において、画素整列フィルマップの縁端は、次の画素整列フィルマップの縁端又はページ境界に遭遇するまで画素整列フィルマップの縁端のすぐ右にある画素を起動する。第1の画素整列フィルマップの縁端1141は、ページの左手の境界を追跡し、背景フィルを使用して充填される単一の不透明なレベルを含むフィルシーケンス1151を示す。第2の画素整列フィルマップの縁端1142は、第1のグラフィックオブジェクト1101の左手の境界を追跡し、不透明であり且つ灰色の平坦なフィルを使用して充填される単一のレベルを含むフィルシーケンス1152を示す。第3の画素整列フィルマップの縁端1143は、第1の画素整列フィルマップの縁端1141と同一のフィルシーケンス1151を示す。第4の画素整列フィルマップの縁端1144は、第2のオブジェクト1102が白色の背景に重複する領域の左手の境界を追跡する。第4の画素整列フィルマップの縁端1144は、2つのレベルを含むフィルシーケンス1154を示す。一番上のレベルは、透明であり、陰影をつけられたフィルを使用して充填される。一番下のレベルは、不透明であり、背景フィルを使用して充填される。第5の画素整列フィルマップの縁端145は、第2のグラフィックオブジェクト1102が第1のグラフィックオブジェクト1101に重複する領域の左手の境界を追跡する。第5の画素整列フィルマップの縁端1145は、2つのレベルを含むフィルシーケンス1153を示す。一番上のレベルは、透明であり、陰影をつけられたフィルを使用して充填される。一番下のレベルは、不透明であり、灰色の平坦なフィルを使用して充填される。
【0093】
ページのフィルマップ表現1140に含まれた画素整列フィルマップの縁端により示されたフィルシーケンス1151、1152、1153及び1154を含むフィルシーケンスのテーブルは、ページのフィルマップ表現1140を伴う。
【0094】
図11Dは、図11Aに示されたページのタイル型のフィルマップ表現1160を示す。タイル型のフィルマップは、4つのタイル1165、1170、1175及び1180を含む。各タイルは、8個の画素の高さ及び幅を有する。ページのタイル型のフィルマップ表現1160を生成するために、元のフィルマップ表現1140の画素整列フィルマップの縁端は、フィルマップタイル境界にわたり分裂されている。例えば、図11Cに示された非タイル型のフィルマップ表現1140においてページの左手の境界を追跡する画素整列フィルマップの縁端1141は、2つの画素整列フィルマップの縁端1166及び1176に分割されている。第1の画素整列フィルマップの縁端1166は、左上のタイル1165の画素を起動し、第2の画素整列フィルマップの縁端1176は、左下のタイル1175の画素を起動する。また、新しい画素整列フィルマップの縁端は、画素が常駐するタイルの左に対してタイルにおいて画素整列フィルマップの縁端により前に起動された各タイルの最も左の画素を起動するようにタイル境界上に挿入されている。例えば、右上のタイル1170において、新しい画素整列フィルマップの縁端1171は、図11Cに示された元のフィルマップ表現1140において第1のグラフィックオブジェクト1101の左手の境界を追跡する画素整列フィルマップの縁端1142により起動された画素を起動するように挿入されている。
【0095】
以下の例を説明するために使用されたRIPアプリケーションは、4つの型のタスク、すなわち表示リスト生成(DL)、フィルマップ生成(FG)、フィルマップマージング(FM)及びフィルマップレンダリング(FR)から構成される。DLタスクは、PDL文書からzオーダーのグラフィックオブジェクトのシーケンスを読み出し、表示リストを作成する。一般に表示リストは、グラフィックオブジェクトのyソートリストから構成され、一般に当技術分野において既知である。印刷される所定のページに対して、いくつかのDLタスクは、zオーダーのグラフィックオブジェクトの種々のシーケンスを処理する必要がある。各シーケンスはz帯として既知であり、そのようなシーケンスに対してDLタスクにより生成された表示リストは、z帯表示リストとして既知である。z帯表示リスト毎に、FGタスクは、z帯フィルマップとして既知であるフィルマップ表現を生成する。図11A〜図11Dを参照してフィルマップ表現を上述した。FMタスクは、2つ以上のz帯フィルマップを受信し、それらを単一のフィルマップにマージする。より多くのz帯フィルマップがページに対して残っている場合、更なるFMタスクは、z帯フィルマップをマージする必要がある。マージすべきz帯フィルマップがこれ以上残っていない場合、FMタスクにより生成されたフィルマップは、ページ上に全てのグラフィックオブジェクトを示す。次にFRタスクは、フィルマップを印刷可能な状態にあるラスタ表現に変換するために使用される。
【0096】
図8は、制御プログラム130の実行中の所定の時間におけるEXECUTION_REGISTER380の状態800を示す。図8に示された例において、第1の構造820に示されたようにEXECUTION_REGISTER380のCG_TO_THREAD_LOOKUP_TABLEの例を示す2つのCG、すなわちCG0(821)及びCG1(822)がある。CG0821は2つのスレッド(フィールド823に示されたような)を含み、CG1は2つのスレッド(フィールド824に示されたような)を更に含む。フィールド825及び826にそれぞれ示されるように、CG0は、スレッド「0」及びスレッド「1」を含む。フィールド827及び828にそれぞれ示されるように、CG1は、スレッド「2」及びスレッド「3」を含む。
【0097】
EXECUTION_REGISTER380の第2の構造840は、CG0及びCG1のEXECUTION_HISTORYテーブルの例を含む。CG0(821)に対するTASK_HISTORY_QUEUE860は、フィールド842〜844に示された3つのエントリ(フィールド841において特定されたような)を有する。CG0(821)のDATA_HISTORY_QUEUE861は、フィールド846〜848に示された3つのエントリ(フィールド845において特定されたような)を有する。CG1(822)に対するTASK_HISTORY_QUEUE862は、フィールド852〜854に示された3つのエントリ(フィールド851において特定されたような)を有する。CG1(822)に対するDATA_HISTORY_QUEUE863は、フィールド856〜858に示された3つのエントリ(フィールド855において特定されたような)を有する。
【0098】
図4を参照して上述したように、TASK_HISTORY_QUEUEは、各計算グループ上で実行されたタスク型の履歴を含む。従って、TASK_HISTORY_QUEUE860及び862は、RIPアプリケーションの例において4つのタスク型に対応するDL、FG、FM又はFR(FRはこの例において示されない)である値を含む。これらの値は、潜在的に将来のタスクにより再利用されるキャッシュされた命令を示す。同様に、DATA_HISTORY_QUEUEは、各計算グループ上で実行されたタスクにより使用されたデータの履歴を含む。RIPアプリケーションの例において、所定のタスクに対して処理されているページの数は、処理されているデータを示す。従って、DATA_HISTORY_QUEUE861及び863はページ数を含む。ページの数は、潜在的に将来のタスクにより再利用されるキャッシュされたデータを示す。
【0099】
後続の例において、EXECUTION_REGISTER380の一部を形成する重み行列890は、所定のタスクを処理する場合に命令及びデータの相対的な重要度を決定するために使用される。命令及びデータの相対的な重要度は、所定のタスクを実行するのに適したスレッド又は所定のスレッド上で実行されるのに適したタスクを選択するために使用される。以下の例において使用された重みを図8の重み行列890において示す。実行される4つの型のタスク、すなわちDL(891)、FG(892)、FM(893)及びFR(894)があり、wi及びwdの値は、重み行列890においてタスク型毎に与えられたタスクに依存することが好ましい。重み行列890における重みは、制御プログラム130の前の実行において取得された履歴データを解析すること及びプログラムコードの複雑性の解析等の種々の方法で決定される。換言すると、重み付けは、スレッドのサブセットの実行履歴に基づいて決定される。別の実現例において、重み付けは、タスクの知識に基づいて事前に決定され、メモリ120のルックアップテーブルに格納される。
【0100】
RIPアプリケーションの例において、DL(表示リスト生成)タスクは、命令の適切に規定されたシーケンスを実行し、各DLタスクは、グラフィックオブジェクトの別個のシーケンスを処理する。従って、DLタスクの場合、wiはwdより高い値を与えられる。データの別個のz帯を更に処理するFG(フィルマップ生成)タスクに対して、同一の推論が適用可能である。また、RIPアプリケーションの例において、FGタスクは、通常DLタスクに対して別個のスレッド上で実行されるため、DLタスクにより生成された表示リストデータを利用できないことが多い。従って、FGタスクの場合、wiはwdより高い値を更に与えられる。FM(フィルマップマージング)タスクは、多数のFGタスクにより生成されたフィルマップデータを受信する。このフィルマップデータが大量のメモリを消費するため、可能な場合は常にキャッシュに格納されたフィルマップデータを再利用することが有益である。従って、FMタスクの場合、wdはwiより高い値を与えられる。各FR(フィルマップレンダリング)タスクは、印刷されている別個のページからのフィルマップを処理する。従って、FRタスク間でのデータの再利用の機会は殆どない。従って、FRタスクの場合、wiはwdより高い値を与えられる。命令の再利用及びデータの再利用に対してタスク及びそれらの挙動のこのような知識を有することは、重み付けがタスク型に基づくことを意味する。
【0101】
例1
次に、所定のスレッドに対してタスクを選択する一例を説明する。タスク[DL、6]を処理した後にスレッド「0」が使用可能になったと仮定する。タスク[FM、2]は、降順の優先順位で配置されて実行可能な状態にある他のタスクが後続したREADY_TASK_QUEUE355の先頭にある。READY_TASK_QUEUE355の状態は以下の通りである。
[FM、2][DL、7][DL、8][FG、3][FG、4][FG、5]
【0102】
図3を参照して上述したように、MESSAGE315はタスク−スレッド選択器340に送出される。例1において、MESSAGE315は、MATCH_THREADタイプであり、スレッドID「0」(825)を含む。従って、図6を参照して上述した処理535が実行されることにより、スレッド「0」上で実行するのに適したタスクをREADY_TASK_QUEUE355から選択する。スレッド「0」のCGがCG0(821)であるため、CG0の実行履歴は、スレッド「0」上で実行すべきタスクを決定するために使用される。
【0103】
スケジューラ345は、処理535において、READY_TASK_QUEUE355からこの例においてはタスク[FM、2]である第1のタスクを選択する。タスクのFM型であるため、重み行列890に従って、タスク[FM、2]は、wi=5及びwd=10を有する。これは、タスク[FM、2]に対してデータの再利用が命令の再利用より重要であることを意味する。
【0104】
従って、処理535は、DATASET_ID=2がステップ630においてDATA_HISTORY_QUEUE861にあるかを決定する。DATA_HISTORY_QUEUE861は、DATASET_ID=2を含まない。従って、処理535は、例1においてはタスク[DL、7]であるREADY_TASK_QUEUE355において次のタスクに進む。
【0105】
タスク[DL、7]は、DL型であり、重み行列890に従ってwi=10及びwd=5を有する。これは、DLタスク型に対して命令の再利用より重要であることを意味する。従って、処理535は、ステップ625においてTASK_ID=DLがスレッド「0」のCG0のTASK_HISTORY_QUEUE860にあるかを決定する。スレッド「0」CG0のTASK_HISTORY_QUEUE860は、TASK_ID=DLを含む。従って、処理535は、タスク[DL、7]がスレッド「0」により実行されるのに適していると決定する。処理535は終了し、ブールパラメータMATCHEDが「真」に設定されるステップ545、EXECUTION_REGISTER380におけるCG0の実行履歴が更新されるステップ550、並びにMATCHEDの値及びスレッド−タスク対(「0」、[DL、7])を含むMATCHED_MESSAGEが作成されるステップ555が実行される。
【0106】
例2
次に、所定のタスクに対するスレッドを選択する一例を説明する。実行されるタスク[FM、2]に対して要求されると仮定する。AVAILABLE_THREADS_LIST360の状態は以下の通りである。
{「0」、「3」}
【0107】
図3を参照して上述したように、MESSAGE315はタスク−スレッド選択器340に送出される。例2において、MESSAGE315は、タスク[FM、2]に対するMATCH_TASKタイプである。従って、図7Aを参照して上述した処理540が実行されることにより、タスク[FM、2]を実行するのに適したスレッドをAVAILABLE_THREADS_LIST360から選択する。双方のCGが少なくとも1つのアイドルスレッドを有するため、ステップ705において作成されたCG_LISTは、{CG0、CG1}である。
【0108】
タスク[FM、2]はFM型であり、重み行列890に従って、wi=5及びwd=10を有する。これは、タスク[FM、2]に対してデータの再利用がより重要であることを意味する。従って、処理540はデータの再利用に対するスレッドを選択する。従って、図7Bを参照して上述した処理725が実行される。
【0109】
処理725は、使用可能なスレッドを含むCGのリスト、すなわちCG_LISTからこの例においてはCG0である第1のCGを選択する。データの再利用が処理725の目的であるため、処理725は、タスク[FM、2]と関連付けられたDATASET_ID=2がCG0のDATA_HISTORY_QUEUE861にあるかを決定する。TASK_HISTORY_QUEUE860は「FM」を含むが、DATA_HISTORY_QUEUE861はDATASET_ID=2を含まない。従って、処理725は、CG_LISTにおいて使用可能なスレッドを含む例2においてはCG1である次のCGに進む。
【0110】
DATA_HISTORY_QUEUE863は、DATASET_ID=2を含む。従って、スケジューラ345は、処理725においてCG1から使用可能なスレッドがタスク[FM、2]を実行するのに適しているかを決定する。処理725は、CG1から使用可能なスレッド「3」を選択する。次に、ブールパラメータMATCHEDが「真」に設定されるステップ545、EXECUTION_REGISTER380におけるCG1の実行履歴が更新されるステップ550、並びにMATCHEDの値及びスレッド−タスク対(「3」、[FM、2])を含むMATCHED_MESSAGEが作成されるステップ555が実行される。
【0111】
例3
次に、所定のスレッドを選択する別の例を説明する。例3は、所定のタスクに対して命令の再利用が重要である場合の例を示すが、いずれの使用可能なスレッドによっても満たされない。タスク[FR、1]が実行されるのを待っていると仮定する。AVAILABLE_THREADS_LIST360の状態は以下の通りである。
{「0」、「3」}
【0112】
図3を参照して上述したように、MESSAGE315はタスク−スレッド選択器340に送出される。この例において、MESSAGE315は、タスク[FR、1]に対するMATCH_TASKタイプである。従って、図7Aを参照して上述した処理540が実行されることにより、タスク[FR、1]を実行するのに適したスレッドをAVAILABLE_THREADS_LIST360から選択する。双方のCGが少なくとも1つのアイドルスレッド、すなわち使用可能なスレッドを有するため、ステップ705において作成されたCG_LISTは{CG0、CG1}である。
【0113】
タスク[FM、1]はFM型であり、重み行列890に従って、wi=10及びwd=5を有する。これは、[FR、1]に対して命令の再利用がより重要であることを意味する。従って、処理540は、命令の再利用に対するスレッドを選択することを判断する。従って、図7Cを参照して上述した処理730が実行される。
【0114】
スケジューラ345は、処理730において使用可能なスレッドを含むCGのリスト、すなわちCG_LISTからこの例においてはCG0である第1のCGを選択する。命令の再利用が処理730の目的であるため、処理730は、タスク[FR、1]と関連付けられたTASK_ID=FRがCG0のTASK_HISTORY_QUEUE860において見つけられるかを決定する。TASK_HISTORY_QUEUE860はTASK_ID=FRを含まない。従って、処理730は、CG_LISTにおいて使用可能なスレッドを含む本発明の例においてはCG1である次のCGに進む。処理730は、CG1と関連付けられたTASK_HISTORY_QUEUE860がTASK_ID=FRを含まないことを更に決定する。従って、処理730は、データの再利用に対して適切なスレッドを見つけることに進む。
【0115】
処理730は、タスク[FR、1]と関連付けられたDATASET_ID=1がCG0のDATA_HISTORY_QUEUE861にあるかを決定する。DATA_HISTORY_QUEUE861は、DATASET_ID=1を含む。従って、処理730は、CG0からの使用可能なスレッドがタスク[FR、1]を実行するのに適していると決定する。処理730は、CG0からスレッド「0」を選択する。その後、スレッド「0」はタスク[FR、1]の実行に進む。
【0116】
次に、ブールパラメータMATCHEDが「真」に設定されるステップ545、EXECUTION_REGISTER380におけるCG0の実行履歴が更新されるステップ550、並びにMATCHEDの値及びスレッド−タスク対(「0」、[FR、1])を含むMATCHED_MESSAGEが作成されるステップ555が実行される。
【0117】
次に、図9に示されるように所定のTHREAD上で実行するのに適したタスクを選択する処理900を参照して、別の実現例を説明する。処理900は、図6に示されたような処理535の代わりに使用されてもよい。この実現例において、EXECUTION_HISTORY440構造に保持された命令及びデータの履歴は、TASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495の2つのキューにおけるより最近のものでない項目の前にチェックされたTHREAD905のCGに対するこれらの双方のキューにおけるより最近の項目と組み合わされる。
【0118】
処理900は、THREAD905のCGに対するTASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495から作成されたリスト構造COMBINED_HISTORYを使用する。リスト構造は、一般にシーケンスのタプルをタプルのシーケンスにマッピングするコンボリューション(又はジップ)として当技術分野において既知である処理において形成される。この場合、TASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495のそれぞれの項目Hi及びHdは、COMBINED_HISTORYリストに保持された対のシーケンスを形成する。履歴キューが他のキューより短い場合、他のキューからの相対物を有さないエントリは、値ヌルと対にされる。例えば、そのCGに対してTASK_HISTORY_QUEUE490が3つのエントリを有し、DATA_HISTORY_QUEUE495が5つのエントリを有する場合、所定のCGに対するCOMBINED_HISTORYリストは以下のように見える。
{(DL、6)、(DL、5)、(DL、4)、(Null、3)、(Null、2)}
【0119】
次に、処理900を説明する。処理900は、スケジューラ345がTHREAD905のCGの履歴を取得し、そのCGに対するCOMBINED_HISTORYリストを作成したステップ910から開始する。これは、THREAD_TO_CG_LOOKUP_TABLE480からTHREAD905に対するレコードにアクセスし、THREAD905が属し、その後格納されるCG IDフィールド484を取得することで実現される。次に、EXECUTION_HISTORY440構造において、そのCGに対するTASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495を含む実行履歴がアクセスされ、対のCOMBINED_HISTORYリストが上述したように作成される。ステップ912において、履歴エントリの第1の対(Hi、Hd)を取得することでCOMBINED_HISTORYリストのエントリを繰り返す処理が開始する。
【0120】
ステップ915において、スケジューラ345は、THREAD605上で実行するのに適したタスクが見つけられるまでREADY_TASK_QUEUE355においてエントリを繰り返す処理を開始する。ステップ915において、READY_TASK_QUEUE355の先頭から開始し、タスクTを取得する。ステップ917において、スケジューラ345は、タスクTに対して重みwi及びwdを決定する。この重みは種々の方法で決定される。種々の方法のうちの1つは、制御プログラム130において全てのタスク型に対するwi及びwdの所定の値のルックアップテーブルを使用することであるが、それに限定されない。判断ステップ920において、スケジューラ345はwiがwdより大きいかをチェックする。wiがwdより大きい場合、タスクTに対して命令の再利用はデータの再利用より重要であり、処理は、TASKのTASK_IDがステップ912において取得した履歴エントリの対(Hi、Hd)からのタスク型Hiと同一であるかをチェックする判断ステップ925に継続する。TASKのTASK_IDがステップ912において取得された履歴エントリの対(Hi、Hd)からのタスク型Hiと同一である場合、タスクTは適切であるため、ステップ945においてTASKをTに設定し、処理900が終了する。
【0121】
ステップ920において、wiがwdより大きくないとスケジューラ345が決定する場合、タスクTに対して命令の再利用はデータの再利用と同様に重要ではなく、ステップ930において、タスクTと関連付けられたDATASET_IDがステップ912において取得された履歴エントリの対(Hi、Hd)からのDATASET_ID=Hdと同一であるかをチェックする。タスクTと関連付けられたDATASET_IDがステップ912において取得された履歴エントリの対(Hi、Hd)からのDATASET_ID=Hdと同一である場合、タスクTは適切なタスクであるため、ステップ945においてTASKをTに設定し、処理900が終了する。
【0122】
READY_TASK_QUEUE355からタスクTを取得し、且つTASK_ID又はDATASET_IDがCOMBINED_HISTORYリストにあるかをチェックする処理は、ステップ935においてテストされたように、Hi又はHdを一致させるタスクが見つけられるまで、あるいはキューの後方に到達するまでREADY_TASK_QUEUE355においてタスク毎に繰り返される。
【0123】
チェック、判断ステップ935において決定すべきタスクがこれ以上READY_TASK_QUEUE355にない場合、スケジューラ345がまだチェックされていないより多くのエントリがCOMBINED_HISTORYリストにあるかをチェックするステップ937に進む。まだチェックされていないより多くのエントリがCOMBINED_HISTORYリストにある場合、ステップ936において、COMBINED_HISTORYリストにおける次のエントリに対する適合性に対して最初からREAD_TASK_QUEUE355におけるタスクをチェックし始めるためにREADY_TASK_QUEUE355繰返し子を再設定する。その後処理は、履歴エントリの次の対がCOMBINED_HISTORYリストから取得されるステップ912に戻る。
【0124】
判断ステップ937において、チェックすべきエントリがこれ以上COMBINED_HISTORYリストにないとスケジューラ345が決定する場合、処理900は、TASKをREADY_TASK_QUEUE355における第1のタスクに設定するステップ940に進む。キューの先頭のタスクは最も優先度の高いタスクであり、キャッシュ内容の再利用を実現できない場合、READY_TASK_QUEUE355における第1のタスクは、実行するためにディスパッチされたタスクである。処理900はステップ940で終了する。
【0125】
実行履歴キューTASK_HISTORY_QUEUE490及びDATA_HISTORY_QUEUE495、並びにREADY_TASK_QUEUE355において双方のエントリを繰り返す複雑性が増加したことによる何らかの余分なオーバヘッドを含むキャッシュ内容の再利用の機会を改善するために、処理900は、図5の処理535の代わりに使用されてもよい。
【産業上の利用可能性】
【0126】
説明した構成は、コンピュータ産業及びデータ処理産業、並びに特にキャッシュの再利用を増進するキャッシュメモリに対して適用可能である。
【0127】
上記の記述は本発明のいくつかの実施形態のみを説明し、本発明の範囲及び趣旨から逸脱せずに、変形及び/又は変更がいくつかの実施形態に対して行なわれてもよい。実施形態は、限定するものではなく例示するものである。例えば、説明した好適な構成は、各計算グループを対応するL2キャッシュと関連付けることでL2キャッシュを最適化する計算グループの動的構成に注目したが、同一の原理は、図10Bに示されたようなL3キャッシュ等の他のキャッシュレベルを最適化するために適用されてもよい。図10Bにおいて、L3最適化のためのL3キャッシュに対応する計算グループCGが形成される。
【特許請求の範囲】
【請求項1】
マルチプロセッサのコンピュータシステムにおいて、タスクを実行すべく複数のスレッドから1つのスレッドを決定する方法であって、前記複数のスレッドは前記コンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化されており、前記タスクは命令の集合により決定される型を有しており、前記方法は、
複数のスレッドのサブセットの実行履歴を取得するステップと、
命令の集合及びデータの集合の各々に対し、前記タスクの型に依存している重み付けを決定するステップと、
前記実行履歴と前記決定された重み付けとに基づいて、前記タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するステップと、
前記複数のスレッドの前記サブセットの前記決定された適合性を条件として、前記複数のスレッドの前記サブセットに関連付けられた前記キャッシュメモリの内容を使用して、前記タスクを実行すべく前記複数のスレッドの前記サブセットから1つのスレッドを決定するステップと、
を含むことを特徴とする方法。
【請求項2】
前記重み付けは、使用される複数のスレッドのサブセットの適合性を決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することを特徴とする請求項1に記載の方法。
【請求項3】
前記複数のスレッドの前記サブセットの適合性を決定する前記ステップは、
命令に対する重み付けがデータに対する重み付けより大きい場合に、前記タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するために、前記データ履歴の前に前記タスク履歴を検査するサブステップと、
データに対する重み付けが命令に対する重み付けより大きい場合に、前記タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するために、前記タスク履歴の前に前記データ履歴を検査するサブステップと、
を含む
ことを特徴とする請求項2に記載の方法。
【請求項4】
前記重み付けは、前記複数のスレッドの前記サブセットの実行履歴に基づいて決定されることを特徴とする請求項1に記載の方法。
【請求項5】
前記重み付けは、ルックアップテーブルを使用して決定されることを特徴とする請求項1に記載の方法。
【請求項6】
前記実行履歴は、前記キャッシュメモリのサイズに依存したサイズを有することを特徴とする請求項1に記載の方法。
【請求項7】
前記実行履歴は、前記複数のスレッドにより実行されるタスクの集合に関連して最も多く実行された命令のサイズに依存したサイズを有することを特徴とする請求項1に記載の方法。
【請求項8】
前記実行履歴は、前記複数のスレッドにより実行されるタスクの集合により使用されたデータに依存したサイズを有することを特徴とする請求項1に記載の方法。
【請求項9】
マルチプロセッサのコンピュータシステムにおいて、印刷タスクを処理するためのキャッシュメモリのキャッシュ再利用を管理する方法であって、前記キャッシュメモリは複数のスレッドのサブセットと関連付けられており、前記印刷タスクは該印刷タスクのための命令の集合により決定される型を有しており、前記方法は、
複数のスレッドのサブセットの実行履歴を取得するステップと、
命令の集合及びデータの集合の各々に対し、前記印刷タスクの型に依存している重み付けを決定するステップと、
前記実行履歴と前記決定された重み付けとに基づいて、前記印刷タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するステップと、
前記印刷タスクを処理する前記サブセットから1つのスレッドを決定することにより前記複数のスレッドの前記サブセットが適切であると決定される場合に、前記キャッシュメモリを再利用するステップと、
を含むことを特徴とする方法。
【請求項10】
マルチプロセッサのコンピュータシステムにおいて、スレッドによる実行のために複数のタスクから1つのタスクを決定する方法であって、前記スレッドは前記コンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化される複数のスレッドの1つであり、前記タスクは命令の集合により決定される型を有しており、前記方法は、
前記スレッドの実行履歴を取得し、対応するキャッシュメモリを識別するステップと、
実行のために利用可能なタスクを識別し、命令の集合及びデータの集合の各々に対し、前記識別されたタスクの型に依存している重み付けを決定するステップと、
前記実行履歴と前記決定された重み付けとに基づいて、前記スレッドで実行すべく前記識別されたタスクの適合性を決定するステップと、
前記複数のスレッドのサブセットの前記決定された適合性を条件として、前記対応するキャッシュメモリの内容に基づいて、前記複数のタスクから前記スレッドで実行される1つの前記識別されたタスクを決定するステップと、
を含むことを特徴とする方法。
【請求項11】
前記重み付けは、使用されるタスクを決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することを特徴とする請求項10に記載の方法。
【請求項12】
スレッドによる実行のために複数のタスクから1つのタスクの適合性を決定する前記ステップは、
前記タスクの命令に対する重み付けがデータに対する重み付けより大きい場合に、前記スレッドにより実行される前記タスクの適合性を決定するために、前記データ履歴の前に前記タスク履歴を検査するサブステップと、
前記タスクのデータに対する重み付けが命令に対する重み付けより大きい場合に、前記スレッドにより実行される前記タスクの適合性を決定するために、前記タスク履歴の前に前記データ履歴を検査するサブステップと、
を含む
ことを特徴とする請求項10に記載の方法。
【請求項13】
コンピュータシステムに請求項1に記載の方法を実行させるためのプログラムを格納したコンピュータ可読の記憶媒体。
【請求項14】
コンピュータシステムに請求項9に記載の方法を実行させるためのプログラムを格納したコンピュータ可読の記憶媒体。
【請求項15】
コンピュータシステムに請求項10に記載の方法を実行させるためのプログラムを格納したコンピュータ可読の記憶媒体。
【請求項16】
請求項1に記載の方法を実行するように構成されたコンピュータシステム。
【請求項17】
請求項9に記載の方法を実行するように構成されたコンピュータシステム。
【請求項18】
請求項10に記載の方法を実行するように構成されたコンピュータシステム。
【請求項19】
複数のプロセッサと該複数のプロセッサに関連付けられたキャッシュメモリとを有し、少なくとも該複数のプロセッサと該キャッシュメモリとの間の命令を用いてアプリケーション・プログラムを実行するように構成されたコンピュータシステムであって、該コンピュータシステムは、該コンピュータシステムにおいて、複数のスレッドから前記アプリケーション・プログラムのタスクを実行する1つのスレッドを決定するスケジューラを含み、前記複数のスレッドは前記キャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化されており、前記タスクは命令の集合により決定される型を有しており、前記スケジューラは、
複数のスレッドのサブセットの実行履歴を取得し、
命令の集合及びデータの集合の各々に対し、前記タスクの型に依存した重み付けを決定し、
前記実行履歴と前記決定された重み付けとに基づいて、前記タスクを実行する前記複数のスレッドの前記サブセットの適合性を決定し、
前記複数のスレッドの前記サブセットの前記決定された適合性を条件として、前記複数のスレッドの前記サブセットに関連付けられた前記キャッシュメモリの内容を使用して、前記複数のスレッドの前記サブセットから前記タスクを実行する1つのスレッドを決定する、
よう動作することを特徴とするコンピュータシステム。
【請求項1】
マルチプロセッサのコンピュータシステムにおいて、タスクを実行すべく複数のスレッドから1つのスレッドを決定する方法であって、前記複数のスレッドは前記コンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化されており、前記タスクは命令の集合により決定される型を有しており、前記方法は、
複数のスレッドのサブセットの実行履歴を取得するステップと、
命令の集合及びデータの集合の各々に対し、前記タスクの型に依存している重み付けを決定するステップと、
前記実行履歴と前記決定された重み付けとに基づいて、前記タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するステップと、
前記複数のスレッドの前記サブセットの前記決定された適合性を条件として、前記複数のスレッドの前記サブセットに関連付けられた前記キャッシュメモリの内容を使用して、前記タスクを実行すべく前記複数のスレッドの前記サブセットから1つのスレッドを決定するステップと、
を含むことを特徴とする方法。
【請求項2】
前記重み付けは、使用される複数のスレッドのサブセットの適合性を決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することを特徴とする請求項1に記載の方法。
【請求項3】
前記複数のスレッドの前記サブセットの適合性を決定する前記ステップは、
命令に対する重み付けがデータに対する重み付けより大きい場合に、前記タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するために、前記データ履歴の前に前記タスク履歴を検査するサブステップと、
データに対する重み付けが命令に対する重み付けより大きい場合に、前記タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するために、前記タスク履歴の前に前記データ履歴を検査するサブステップと、
を含む
ことを特徴とする請求項2に記載の方法。
【請求項4】
前記重み付けは、前記複数のスレッドの前記サブセットの実行履歴に基づいて決定されることを特徴とする請求項1に記載の方法。
【請求項5】
前記重み付けは、ルックアップテーブルを使用して決定されることを特徴とする請求項1に記載の方法。
【請求項6】
前記実行履歴は、前記キャッシュメモリのサイズに依存したサイズを有することを特徴とする請求項1に記載の方法。
【請求項7】
前記実行履歴は、前記複数のスレッドにより実行されるタスクの集合に関連して最も多く実行された命令のサイズに依存したサイズを有することを特徴とする請求項1に記載の方法。
【請求項8】
前記実行履歴は、前記複数のスレッドにより実行されるタスクの集合により使用されたデータに依存したサイズを有することを特徴とする請求項1に記載の方法。
【請求項9】
マルチプロセッサのコンピュータシステムにおいて、印刷タスクを処理するためのキャッシュメモリのキャッシュ再利用を管理する方法であって、前記キャッシュメモリは複数のスレッドのサブセットと関連付けられており、前記印刷タスクは該印刷タスクのための命令の集合により決定される型を有しており、前記方法は、
複数のスレッドのサブセットの実行履歴を取得するステップと、
命令の集合及びデータの集合の各々に対し、前記印刷タスクの型に依存している重み付けを決定するステップと、
前記実行履歴と前記決定された重み付けとに基づいて、前記印刷タスクを実行すべく前記複数のスレッドの前記サブセットの適合性を決定するステップと、
前記印刷タスクを処理する前記サブセットから1つのスレッドを決定することにより前記複数のスレッドの前記サブセットが適切であると決定される場合に、前記キャッシュメモリを再利用するステップと、
を含むことを特徴とする方法。
【請求項10】
マルチプロセッサのコンピュータシステムにおいて、スレッドによる実行のために複数のタスクから1つのタスクを決定する方法であって、前記スレッドは前記コンピュータシステムのキャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化される複数のスレッドの1つであり、前記タスクは命令の集合により決定される型を有しており、前記方法は、
前記スレッドの実行履歴を取得し、対応するキャッシュメモリを識別するステップと、
実行のために利用可能なタスクを識別し、命令の集合及びデータの集合の各々に対し、前記識別されたタスクの型に依存している重み付けを決定するステップと、
前記実行履歴と前記決定された重み付けとに基づいて、前記スレッドで実行すべく前記識別されたタスクの適合性を決定するステップと、
前記複数のスレッドのサブセットの前記決定された適合性を条件として、前記対応するキャッシュメモリの内容に基づいて、前記複数のタスクから前記スレッドで実行される1つの前記識別されたタスクを決定するステップと、
を含むことを特徴とする方法。
【請求項11】
前記重み付けは、使用されるタスクを決定するために使用されるタスク履歴及びデータ履歴のうちの一方を決定することを特徴とする請求項10に記載の方法。
【請求項12】
スレッドによる実行のために複数のタスクから1つのタスクの適合性を決定する前記ステップは、
前記タスクの命令に対する重み付けがデータに対する重み付けより大きい場合に、前記スレッドにより実行される前記タスクの適合性を決定するために、前記データ履歴の前に前記タスク履歴を検査するサブステップと、
前記タスクのデータに対する重み付けが命令に対する重み付けより大きい場合に、前記スレッドにより実行される前記タスクの適合性を決定するために、前記タスク履歴の前に前記データ履歴を検査するサブステップと、
を含む
ことを特徴とする請求項10に記載の方法。
【請求項13】
コンピュータシステムに請求項1に記載の方法を実行させるためのプログラムを格納したコンピュータ可読の記憶媒体。
【請求項14】
コンピュータシステムに請求項9に記載の方法を実行させるためのプログラムを格納したコンピュータ可読の記憶媒体。
【請求項15】
コンピュータシステムに請求項10に記載の方法を実行させるためのプログラムを格納したコンピュータ可読の記憶媒体。
【請求項16】
請求項1に記載の方法を実行するように構成されたコンピュータシステム。
【請求項17】
請求項9に記載の方法を実行するように構成されたコンピュータシステム。
【請求項18】
請求項10に記載の方法を実行するように構成されたコンピュータシステム。
【請求項19】
複数のプロセッサと該複数のプロセッサに関連付けられたキャッシュメモリとを有し、少なくとも該複数のプロセッサと該キャッシュメモリとの間の命令を用いてアプリケーション・プログラムを実行するように構成されたコンピュータシステムであって、該コンピュータシステムは、該コンピュータシステムにおいて、複数のスレッドから前記アプリケーション・プログラムのタスクを実行する1つのスレッドを決定するスケジューラを含み、前記複数のスレッドは前記キャッシュメモリに関連付けられた少なくとも1つのサブセットにグループ化されており、前記タスクは命令の集合により決定される型を有しており、前記スケジューラは、
複数のスレッドのサブセットの実行履歴を取得し、
命令の集合及びデータの集合の各々に対し、前記タスクの型に依存した重み付けを決定し、
前記実行履歴と前記決定された重み付けとに基づいて、前記タスクを実行する前記複数のスレッドの前記サブセットの適合性を決定し、
前記複数のスレッドの前記サブセットの前記決定された適合性を条件として、前記複数のスレッドの前記サブセットに関連付けられた前記キャッシュメモリの内容を使用して、前記複数のスレッドの前記サブセットから前記タスクを実行する1つのスレッドを決定する、
よう動作することを特徴とするコンピュータシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図7C】
【図8】
【図9】
【図10A】
【図10B】
【図11A】
【図11B】
【図11C】
【図11D】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図7C】
【図8】
【図9】
【図10A】
【図10B】
【図11A】
【図11B】
【図11C】
【図11D】
【公開番号】特開2013−47950(P2013−47950A)
【公開日】平成25年3月7日(2013.3.7)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−181172(P2012−181172)
【出願日】平成24年8月17日(2012.8.17)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年3月7日(2013.3.7)
【国際特許分類】
【出願番号】特願2012−181172(P2012−181172)
【出願日】平成24年8月17日(2012.8.17)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]