(58)【調査した分野】(Int.Cl.,DB名)
前記期間の終わりに、前記ビットベクトル内で設定されたままの前記第2のビットに基づいて、前記第1のグループ及び前記第2のグループの順位付けをすることをさらに備える請求項3に記載の方法。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して詳細に説明する。異なる図面内の同一の参照符号は、同一の要素又は類似の要素を識別し得る。また、以下の詳細な説明が本発明を制限することはない。
【0012】
概要
本明細書に記載するシステム及び/又は方法により、装置(例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ装置、手持ち装置又は携帯装置、及び/又はその他の種類のコンピュータ装置又は通信装置等のマルチコアプロセッサを有する装置)のメモリ制御装置は、1つ以上のマルチスレッドアプリケーションを識別し、マルチスレッドアプリケーション(複数可)の識別に基づいて、マルチスレッドアプリケーション(複数可)に関するメモリスケジューリングスキームを調整する、又は最適化することが出来る。このようなシステム及び/又は方法により、非効率的なメモリスケジューリングによるパフォーマンス低下(例えば、装置内の)を防ぐことが出来る。ある実施形態では、メモリ制御装置は、第1のグループに関連するマルチスレッドアプリケーションのスレッド、及び第2のグループに関連するシングルスレッドアプリケーションのスレッドを受け取ることが出来る。メモリ制御装置は、第1のグループ内及び第2のグループ内のアイドルスレッドの数を判定し、アイドルスレッドの数に基づいて第1のグループ及び第2のグループを順位付けし、高い順位のグループからのメモリ使用要求を、低い順位のグループからのメモリ使用要求よりも優先させることが出来る。
【0013】
本明細書で使用される用語「スレッド」とは、アプリケーションが一連の動作又は多数の動作を一度に実行出来るようにする、コンピュータプログラム(又は、アプリケーション)の部分(例えば、タスク)を含むと、広く解釈されることを意図される。アプリケーションにより命令を受けたとき、 各アプリケーション内のスレッドは、その命令を実行する処理を識別することが出来る。
【0014】
本明細で使用される用語「構成要素」及び「装置」とは、ハードウェア(例えば、プロセッサ、マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、チップ、メモリ装置(例えば、リード・オンリー・メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、等)等)又はハードウェア及びソフトウェアの組合せ(例えば、メモリ装置内に含まれるソフトウェアを実行するプロセッサ、マイクロプロセッサ、ASIC等)を含むと、広く解釈されることを意図される。
【0015】
メモリスケジューリング機構の例
図1は、パフォーマンス低下を招いているメモリスケジューリング機構100の例を示す説明図である。図示する通り、シングルスレッドアプリケーション(例えば、APP_A)は、マルチコアプロセッサの第1のメモリバンク(例えば、BANK1)及び第1のコア(例えば、CORE_l)に関連する、2つのメモリ使用要求を含み得る。マルチスレッドアプリケーション(例えば、APP_B)は、2つのスレッド(例えば、スレッドAPP_B1及びスレッドAPP_B2)と、同期のためのバリアと、を含み得る。ある例では、同期のためのバリアは、マルチコアプロセッサに命令して、バリアの前後に供給されるメモリ使用要求に対する順位制限を実行することが出来る。スレッドAPP_B1は、マルチコアプロセッサの第2のコア(例えば、CORE_2)に関連することが出来、バリアの後に供給される2つのメモリ使用要求と、バリアの前に供給され、第1のメモリバンクBANK1に関連する3つのメモリ使用要求と、を含み得る。スレッドAPP_B2は、マルチコアプロセッサの第3のコア(例えば、CORE_3)に関連することが出来、バリアの後に供給される2つのメモリ使用要求を含み得る。
【0016】
マルチスレッドアプリケーションAPP_Bは、スレッドAPP_B1を、第1のメモリバンクBANK1にアクセスさせ、スレッドAPP_B2を、第2のメモリバンクBANK2にアクセスすることにより、バンクレベルの並列処理を利用するよう設計され得る。バリアの周りに想定される(例えば、実行時間中に完全な負荷均衡を保つことが困難であり得るために起こり得る)負荷の不均衡により、スレッドAPP_B2は、スレッドAPP_B1より先にバリアに到達することが出来る。この負荷の不均衡により、スレッドAPP_B2に関連するメモリ使用要求の第2のメモリバンクBANK2へのアクセスを妨げ得、これにより、第3のコアCORE_3がアイドル状態になり得る。スレッドAPP_B1に関連する3つのメモリ使用要求(例えば、バリアの下に供給される)が処理されるまで、第3のコアCORE_3は、アイドル状態を維持し得る。従って、(例えば、第3の コア CORE_3は、3周期の間アイドル状態を維持するように)、スレッドAPP_B1に関連する(例えば、バリアの下に供給される)3つのメモリ使用要求は、シングルスレッドアプリケーションAPP_Aに関連するメモリ使用要求に対して優先権を与えられるべきある。
【0017】
しかし、現状のメモリスケジューリングスキームは、マルチスレッドアプリケーションを意識しないで、メモリ使用要求をスケジューリングして、マルチスレッドアプリケーションのスレッドを加速しようと試み、これにより、ある意味では同じマルチスレッドアプリケーションの別のスレッドの進行を妨げてしまう。例えば、スレッドAPP_B1は、バリアにより、スレッドAPP_B2の進行を防ぐ。FRFCFSのメモリスケジューリングスキームを機構100内で用いた場合、シングルスレッドアプリケーションAPP_Aが、スレッドAPP_B1より高い行バッファのヒット率を有するため、FRFCFSスキームは、パフォーマンス低下を起こしてしま恐れがある。FRFCFSスキームでは、行バッファにヒットするメモリ使用要求を優先させることが出来る。その結果、シングルスレッドアプリケーションAPP_Aのメモリ使用要求は、第1のメモリバンクBANK1と同じ行(例えば、ROW1)に関連し、スレッドAPP_B1のメモリ使用要求は、第1のメモリバンクBANK1と異なる行(例えば、ROW2〜4)と関連するため、シングルスレッドアプリケーションAPP_Aのメモリ使用要求をスレッドAPP_B1のメモリ使用要求よりも優先させることが出来る。これにより、第3のコアCORE_3のアイドル時間が3周期から5周期まで延び、バリアの内側での第3のコアCORE_3によるマルチスレッドアプリケーションAPP_Bの実行が妨げられてしまう可能性がある。
【0018】
PAR−BSメモリスケジューリングスキームを機構100内で用いた場合、PAR−BSスキームは、最短ジョブ優先(SJF)ポリシーにより、メモリ使用要求の待ち行列の中のもっとも少ない数のメモリ使用要求を有するスレッドのメモリ使用要求を優先させることが出来る。その結果、シングルスレッドアプリケーションAPP_Aのメモリ使用要求の数は2で、スレッドAPP_Blのメモリ使用要求の数は3のため、シングルスレッドアプリケーションAPP_Aのメモリ使用要求が、スレッドAPP_B1のメモリ使用要求より優先され得る。これにより、第3のコアCORE_3のアイドル時間を、3周期から5周期まで延ばし、バリアの内側での第3のコアCORE_3によるマルチスレッドアプリケーションAPP_Bの実行が妨げられる可能性がある。FRFCFS及びPAR−BSのメモリスケジューリングスキーム、並びにその他のメモリスケジューリングスキームは、マルチスレッドアプリケーションを意識することなく、パフォーマンス低下を引き起こし、調整されたスレッドスケジューリングに対するオペレーティングシステムの努力を無駄にしてしまう。
【0019】
これとは対照的に、本明細書に記載するシステム及び/又は方法により、装置のメモリ制御装置は、1つ以上のマルチスレッドアプリケーションを識別し、マルチスレッドアプリケーション(複数可)の識別に基づいて、マルチスレッドアプリケーション(複数可)に関するメモリスケジューリングスキームを最適化することが出来る。例えば、本明細書に記載するシステム及び/又は方法は、単に単一のスレッドに利益をもたらすメモリ使用要求よりむしろ、スレッドのグループに利益をもたらすメモリ使用要求を優先させることが出来る(例えば、スレッドAPP_B1の要求を実行することにより、スレッドAPP_B1及びスレッドAPP_B2の両方の利益になる)。
【0020】
装置の構成例
図2は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングスキームを実行可能な装置200の構成要素の例を示す説明図である。装置200は、マルチコアプロセッサ及び/又はマルチスレッドアプリケーションを用いるあらゆるコンピュータ又は通信装置を含み得る。例えば、装置200は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ装置、無線電話、パーソナル通信システム(PCS)端末、パーソナルデジタルアシスタント(PDA)、携帯電話、スマートフォン、及び/又は、その他の種類のコンピュータ又は通信装置を含み得る。
【0021】
図2に示す通り、装置200は、バス210、プロセッシングユニット220、メインメモリ230、ROM240、記憶装置250、入力装置260、出力装置270、及び/又は通信インターフェース280を含み得る。バス210は、装置200の構成要素間の通信を可能にする経路を含み得る。
【0022】
プロセッシングユニット220は、1つ以上のプロセッサ(例えば、マルチコアプロセッサ)、マイクロプロセッサ、又は命令を理解し実行可能なその他の種類のプロセッシングユニットを含み得る。ある実施形態では、プロセッシングユニット220は、マルチプルコアを含む単一のプロセッサを含み得る。メインメモリ230は、プロセッシングユニット220により実行される情報及び命令を格納可能な、RAM、ダイナミックRAM(DRAM)、及び/又は別の種類の動的記憶装置を含み得る。ROM240は、プロセッシングユニット220により使用される静的情報及び/又は命令を格納可能なROM装置又は別の種類の静的記憶装置を含み得る。記憶装置250は、磁気記録媒体及び/又は光記録媒体及びそれらに対応するドライブを含み得る。
【0023】
入力装置260には、キーボード、マウス、ペン、マイクロフォン、音声認識機構及び/又は生体測定機構、タッチスクリーン等の、操作者が情報を装置200に入力することが出来る機構が含まれ得る。出力装置270には、ディスプレイ、プリンタ、スピーカ等を含む、情報を操作者に出力する機構が含まれ得る。通信インターフェース280には、装置200と、他の装置及び/又はシステムとの間の通信を可能にするあらゆる送受信機型機構が含まれ得る。例えば、通信インターフェース280には、別の装置又はシステムとネットワークを介して通信するための機構が含まれ得る。
【0024】
本明細書に記載される装置200は、プロセッシングユニット220が、メインメモリ230等のコンピュータ可読媒体内に含まれるソフトウェア命令を実行するのに応じて、いくらかの動作を実行可能である。コンピュータ可読媒体は、物理メモリ装置、又は論理メモリ装置として定義され得る。論理メモリ装置は、単一の物理メモリ装置内に又は複数の物理メモリ装置に渡って分散してメモリ空間を含み得る。記憶装置250等の別のコンピュータ可読媒体、又は別の装置から通信インターフェース280を介して、ソフトウェア命令をメインメモリ230に読み込むことが出来る。メインメモリ230内に含まれるソフトウェア命令により、プロセッシングユニット220は、本明細書に記載する処理を行う。あるいは、ソフトウェア命令の代わりに、又はソフトウェア命令と組合せて、配線回路を使用して、本明細書に記載する処理を実行することも可能である。従って、本明細書に記載の実施形態は、あらゆる特別な組合せハードウェア回路及びソフトウェアには限定されない。
【0025】
図2には装置200の構成要素の例が示されているが、他の実施形態では、装置200は、より少ない構成要素、異なる構成要素、異なって配列される構成要素、又は
図2に示される以外の付加的な構成要素を含み得る。あるいは、又はそれに加えて、1つ以上の装置200の構成要素は、別の装置200の1つ以上の構成要素により実行可能とされる、1つ以上の他のタスクを実行することが出来る。
【0026】
図3は、装置200のプロセッシングユニット220及びメインメモリ230の構成要素の例を示す説明図である。ある実施形態では、
図3に示される構成要素は、メモリスケジューリング機構300を形成し得る。図示する通り、プロセッシングユニット220は、マルチプルコア310−1、310−2、310−3等(集合的に本明細書では「コア310」と呼ぶ)、及びメモリ制御装置320を含み得る。メインメモリ230は、マルチプルメモリバンク330−1、330−2等(集合的に本明細書では「メモリバンク330」と呼ぶ)を含み得る。
【0027】
コア310は単一の集積回路ダイ(例えば、チップ・マルチプロセッサ(CMP))上に組み込まれ得る又は単一のチップパッケージ内のマルチプルダイ上に組み込まれ得る。各コア310は、プロセッサ、マイクロプロセッサ、又は命令を理解し実行可能なその他の種類のプロセッシングユニットを含み得る。
【0028】
本明細書に記載する動作を実行するために、メモリ制御装置320は、1つ以上のプロセッサ、マイクロプロセッサ、ASIC、FPGA、命令を理解し実行可能なその他の種類の処理論理回路(例えば、メモリ制御装置320のコンピュータ可読媒体に含まれる)を含み得る。ある実施形態では、メモリ制御装置320は、メインメモリ230に行き来するデータの流れを管理するデジタル回路を含み得る。メモリ制御装置320は、独立したチップでよい、又は、プロセッシングユニット220のダイ等の別のチップに組み込むことも可能である。メモリ制御装置320は、メインメモリ230を通して電流を送ることで、メインメモリ230からの読出し、及びメインメモリ230への書込みを行うための、及びメインメモリ230の再書込みを行うための、論理回路を含み得る。メインメモリ230からの読出し、メインメモリ230への書込みは、マルチプレクサ及びデマルチプレクサを用いることにより、容易になり得る。メモリ制御装置320は、メインメモリ230の正確な行と列のアドレスを、マルチプレクサへの入力として選択することが出来る。デマルチプレクサは、メインメモリ230の正確な記憶場所を選択することが出来、その記憶場所に関連するデータを戻すことが出来る。別の実施形態では、メモリ制御装置320は、プロセッシングユニット220の機能要素でよい。
【0029】
各メモリバンク330は、メインメモリ230内に格納されるデータの個々のセクションを含み得る。ある例では、各メモリバンク330は、一時的に格納され、メモリキャッシュとして使用されるデータを含み得る。メモリバンク330は、連続して命令を受けることが出来、これにより、メインメモリ230内に格納された個々の項目への簡単なアクセスを提供することが出来る。各メモリバンク330は、別々に移動する情報を処理出来るよう設計され得るメインメモリ230の物理セクションを含み得る。
【0030】
さらに
図3に示す通り、メモリ制御装置320は、シングルスレッドアプリケーション(APP_A)340と、2つのスレッド(例えば、スレッド(APP_B1)350−1及びスレッド(APP_B2)350−2)を含むマルチスレッドアプリケーション(APP_B)350、に関するメモリスケジューリングスキームを設けることが出来る。シングルスレッドアプリケーション340は、コア310−1により実行され得、メモリバンク330−1に関連し得る。スレッド350−1は、コア310−2により実行され得、メモリバンク330−1に関連し得る。スレッド350−2は、コア310−3により実行され得、メモリバンク330−2に関連し得る。従って、
図3に示されるメモリスケジューリング機構300は、
図1に示したメモリスケジューリング機構100と類似し得る。
【0031】
しかし、従来のメモリスケジューリングスキーム(例えば上記に、
図1に関連して記載)とは異なり、マルチスレッドアプリケーションがアイドルスレッドを含む場合、メモリ制御装置320は、マルチスレッドアプリケーション(例えば、マルチスレッドアプリケーション350)のスレッド(例えば、スレッド350−1及びスレッド350−2)を優先させる、費用効率の良いメモリスケジューリングスキームを設け得る。説明のため、マルチスレッドアプリケーション350が、アイドルスレッド(例えば、スレッド350−2はアイドルでよい)を含むと仮定する。スレッドは、いくつかの理由でアイドルになり得る。例えば、上記に
図1に関連して記載する通り、バリアでの負荷の不均衡により、それ以前にバリアに到達したスレッドがアイドルになる。 別の例では、ロックにより保護される重要セクションに、マルチスレッドアプリケーションのスレッドのうちの1つだけが入ることが出来、その他の(マルチスレッドアプリケーション等の)スレッドはその重要なセクションに入るために待機しアイドルとなる。さらに別の例では、マルチスレッドアプリケーションの単一のスレッドにより、マルチスレッドアプリケーションのアルゴリズムにより並べられる領域を実行することが出来き、これにより、マルチスレッドアプリケーションの、その他のスレッドがアイドルとなる。アイドルスレッドを有するマルチスレッドアプリケーションのスレッドを優先することで、メモリ制御装置320は、アイドルスレッドが非効率的な実行段階を速やかに終了するのを助け、マルチスレッドアプリケーションを、全てのスレッドが完全に並列で実行される、実行段階に戻すことが出来る。
【0032】
ある実施形態では、メモリ制御装置320は、(例えば、オペレーティングシステムにより第1のグループに関連する)マルチスレッドアプリケーション350のスレッド350−1及び350−2と、(例えば、オペレーティングシステムにより第2のグループに関連する)シングルスレッドアプリケーション340のスレッドと、を受け取り得る。メモリ制御装置320は、第1のグループ内及び第2のグループ内のアイドルスレッド(例えば、スレッド350−2)の数を判定し、アイドルスレッドの数に基づいて、第1のグループ及び第2のグループを順位付けすることが出来る。例えば、第1のグループは、アイドルスレッド(例えば、スレッド350−2)を含み得、第2のグループは、アイドルスレッドを含み得ないため、メモリ制御装置320は、第1のグループを、第2のグループより高く順位付けることが出来る。メモリ制御装置320は、高い順位のグループからのメモリ使用要求を、低い順位のグループからのメモリ使用要求よりも優先させることが出来る。例えば、メモリ制御装置320は、第1のグループからの(例えば、スレッド350−2からの)メモリ使用要求を、第2のグループからの(例えば、シングルスレッドアプリケーション340からの)メモリ使用要求よりも優先させることが出来る。
【0033】
図3には、プロセッシングユニット220及びメインメモリ230の構成要素の例が示されているが、他の実施形態では、プロセッシングユニット220及び/又はメインメモリ230がより少ない構成要素、異なる構成要素、異なって配列される構成要素、又は
図3に示される以外の付加的な構成要素を含み得る。あるいは、又はそれに加えて、1つ以上のプロセッシングユニット220及び/又はメインメモリ230の構成要素は、別のプロセッシングユニット220及び/又はメインメモリ230の1つ以上の構成要素により実行可能とされる、1つ以上の他のタスクを実行することが出来る。
【0034】
メモリ制御装置の構成例
図4は、メモリ制御装置320の機能要素の例を示す説明図である。ある実施形態では、
図4に関連して記載された機能要素は、1つ以上のプロセッサ、マイクロプロセッサ、ASIC、FPGA、又はメモリ制御装置320内に含まれる、その他の種類の処理論理回路により実行され得る。
図4に示す通り、メモリ制御装置320は、スレッドグループ受取器400、アイドルスレッド検知器410、グループランカ420、メモリスケジューラ430を含み得る。
【0035】
スレッドグループ受取器400は、1つ以上のアプリケーションに関連する1つ以上のスレッド440を受け取り、(例えば、装置200のオペレーティングシステムにより規定される第1のスレッドグループに関する)スレッドグループ情報450−1及び(例えば、装置200のオペレーティングシステムにより規定される第2のスレッドグループに関する)スレッドグループ情報450−2を、スレッド440に関して生成し得る、ハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。例えば、スレッドグループ受取器400は、シングルスレッドアプリケーションのスレッドに関するスレッドグループ情報450−1、及びマルチスレッドアプリケーションのスレッドに関するスレッドグループ情報450−2を生成し得る。
図4に示す通り、スレッドグループ受取器400は、(例えば、第1の規定されたスレッドグループに関する)スレッドグループ情報450−1と、(例えば、第2の規定されたスレッドグループに関する)スレッドグループ情報450−2と、をアイドルスレッド検知器410及びグループランカ420に供給し得る。スレッドグループ受取器400を、例えば、
図5に関連して、以下にさらに詳細に説明する。
【0036】
アイドルスレッド検知器410は、スレッドグループ受取器400からのスレッドグループ情報450−1及び450−2と、スレッド440に関連する1つ以上のメモリ使用要求460と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。スレッドグループ情報450−1/450−2及びメモリ使用要求460に基づいて、アイドルスレッド検知器410は、スレッド440のうちのどれがアイドルなのか判定し、参照符号470で示す通り、判定されたアイドルスレッドをグループランカ420に供給することが出来る。アイドルスレッド検知器410を、例えば、
図6に関連して、以下にさらに詳細に説明する。
【0037】
グループランカ420は、スレッドグループ受取器400からのスレッドグループ情報450−1及び450−2と、アイドルスレッド検知器410からのアイドルスレッド470と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。各スレッドグループ内のアイドルスレッド470の数に基づいて、グループランカ420は、(例えば、スレッドグループ情報450−1及び450−2により規定された)スレッドグループ内のスレッドを順位付けすることが出来る。参照符号480で示す通り、グループランカ420は、スレッドグループの順位をメモリスケジューラ430に供給することが出来る。グループランカ420を、例えば、
図7に関連して、以下にさらに詳細に説明する。
【0038】
メモリスケジューラ430は、グループランカ420からのスレッドグループの順位480と、スレッド440に関連する1つ以上のメモリ使用要求460と、を受け取ることが出来る、ハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。参照符号490で示す通り、スレッドグループの順位480に基づいて、メモリスケジューラ430は、メモリ使用要求460を優先させ、この優先されたメモリ使用要求490を、装置200内で実行することが出来る。メモリスケジューラ430を、例えば、
図8に関連して、以下にさらに詳細に説明する。
【0039】
図4にはメモリ制御装置320の機能要素の例が示されているが、他の実施形態では、メモリ制御装置320は、より少ない機能要素、異なる機能要素、異なって配列される機能要素、又は
図4に示される以外の付加的な機能要素を含み得る。あるいは、又はそれに加えて、1つ以上のメモリ制御装置320の機能要素は、メモリ制御装置320の1つ以上の別の機能要素により実行可能とされる、1つ以上の他のタスクを実行することが出来る。
【0040】
図5は、メモリ制御装置320のスレッドグループ受取器400の機能要素の例を示す説明図である。ある実施形態では、
図5に関連して記載された機能要素は、1つ以上のプロセッサ、マイクロプロセッサ、ASIC、FPGA、又はメモリ制御装置320内に含まれるその他の種類の処理論理回路により、実行され得る。
図5に示す通り、スレッドグループ受取器400は、コア毎のグループ識別(ID)レジスタ500を含み得る。
【0041】
コア毎のグループIDレジスタ500は、例えば、装置200のオペレーティングシステムからのスレッド情報510及びグループID情報520を受け取ることが出来る、ハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。ある例では、同じアプリケーションのスレッドを同時に実行するとき、オペレーティングシステムが、(例えば、調整されたスレッドスケジューリングに関して)スレッド情報510を生成することが出来る。グループID情報520は、各コア上(例えば、各コア310)で実行されるスレッドのグループIDを含み得る。オペレーティングシステムが、特定のスレッドをコア上(例えば、コア310のうちの1つ)でスケジューリングするとき、オペレーティングシステムは、特定のスレッドのグループID(例えば、グループID情報520)を有するコア毎のグループIDレジスタ500更新することが出来る。
【0042】
ある例示的な実施形態では、メインスレッドがシングルスレッドアプリケーションであるかのように、オペレーティングシステムにより、マルチスレッドアプリケーションのメインスレッドを実行可能である。オペレーティングシステムは、グループ識別(ID)をメインスレッドに割り当てることが出来る。メインスレッドがより多くのスレッドを生成するとき、オペレーティングシステムは、このグループID(例えば、グループID情報520)を、生成されたスレッドに割り当てることが出来る。マルチスレッドアプリケーションのスレッドのうちの1つをスケジューリングして、特定のコア(例えば、コア310のうちの1つ)上で実行するとき、コア毎のグループIDレジスタ500は、そのスレッドを設定して、グループIDに対して実行可能である。さらに
図5に示す通り、スレッド情報510及びグループID情報520に基づいて、コア毎のグループIDレジスタ500は、スレッドグループ情報450−1及びスレッドグループ情報450−2を生成することが出来る。
【0043】
図5にはスレッドグループ受取器400の機能要素の例が示されているが、他の実施形態では、スレッドグループ受取器400は、より少ない機能要素、異なる機能要素、異なって配列される機能要素、又は
図5に示される以外の付加的な機能要素を含み得る。あるいは、又はそれに加えて、スレッドグループ受取器400の1つ以上の機能要素は、スレッドグループ受取器400の1つ以上の別の機能要素により実行可能とされる、1つ以上の他のタスクを実行することが出来る。
【0044】
図6は、メモリ制御装置320のアイドルスレッド検知器410の機能要素の例を示す説明図である。ある実施形態では、
図6に関連して記載された機能要素は、1つ以上のプロセッサ、マイクロプロセッサ、ASIC、FPGA、又はメモリ制御装置320内に含まれるその他の種類の処理論理回路により実行することが出来る。
図6に示す通り、アイドルスレッド検知器410は、1つ以上のビット610−1、・・・610−4(集合的に本明細書では「ビット610」と呼ぶ)を含み得る休止コア(inactive core)のビットベクトル600を含み得る。
【0045】
休止コアのビットベクトル600は、スレッドグループ受取器400からのスレッドグループ情報450−1及び450−2と、メモリ使用要求460と、期間620と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。スレッドグループ情報450−1及び450−2に基づいて、休止コアのビットベクトル600は各ビット610を、スレッド440のうちの1つ、及びその対応するコア(例えば、コア310のうちの1つ)に関連付けることが出来る。例えば、休止コアのビットのベクトル600は、ビット610−1をシングルスレッドアプリケーションのスレッドに関連付けることが出来、ビット610−2をマルチスレッドアプリケーションの第1のスレッドに関連付けることが出来、ビット610−3をマルチスレッドアプリケーションの第2のスレッドに関連付けることが出来る。休止コアのビットベクトル600は、期間620の始まりに周期的に各ビット610を(例えば、特定の値に)設定することが出来る。期間620は可変のパラメータでよく、メモリ制御装置320を使用する装置200の種類及び/又は装置200により実行されるアプリケーションの種類に基づいて、設定され得る。ある例では、期間620はアプリケーションの状態の変化に素早く適用するのに十分な程短くてよいが、しかしコア(例えば、コア310のうちの1つ)がアイドルでないときに、アイドルであると誤って判断することを防止するのに十分な程長くてよい。ある実施形態では、期間620は約1,000のクロックサイクルの値に設定され得る。
【0046】
対応するコア上で実行中の(例えば、スレッドグループ情報450−1及び450−2により規定された)スレッドからメモリ使用要求(例えば、メモリ使用要求460)があるとき、休止コアのビットベクトル600は、ビット610のうちの1つをリセットすることが出来る。例えば、
図6に示す通り、ビット610−1、610−2、及び610−4は、対応するコア上で実行中のスレッドからのメモリ使用要求460に関連し得る。従って、休止コアのビットベクトル600は、ビット610−1、610−2、及び610−4をリセットすることが出来る。ビット610−3は、メモリ使用要求に関連しないため、休止コアのビットベクトル600は、ビット610−3をリセットすることが出来ない。参照符号470で示す通り、ビット(例えば、ビット610−3)が、その設定を期間620の終わりに維持している場合、休止コアのビットベクトル600は、ビット610−3に対応するコア上で実行中のスレッドは、期間620の間、アイドルであると判定することが出来る。休止のビットコアベクトル600は、アイドルスレッドの印470を出力し得る。
【0047】
図6には、アイドルスレッド検知器410の機能要素の例が示されているが、他の実施形態では、アイドルスレッド検知器410は、異なる機能要素、異なって配列される機能要素、又は
図6に示される以外の付加的な機能要素を含み得る。
【0048】
図7は、メモリ制御装置320のグループランカ420の機能要素の例を示す説明図である。ある実施形態では、
図7に関連して記載された機能要素は、1つ以上のプロセッサ、マイクロプロセッサ、ASIC、FPGA、又はメモリ制御装置320内に含まれるその他の種類の処理論理回路により実行され得る。
図7に示す通り、グループランカ420は、順位機構700を含み得る。
【0049】
順位機構700は、スレッドグループ受取器400からのスレッドグループ情報450−1及び450−2(図示せず)と、アイドルスレッド検知器410からのアイドルスレッドの印470(図示せず)と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。順位機構700は、(例えば、スレッドグループ情報450−1及び450−2により規定された)1つ以上のスレッドグループ内のビット610と、1つ以上のスレッドグループに関連する(例えば、スレッドグループ情報450−1及び450−2により規定された)スレッドと、を受け取ることが出来る。例えば、
図7に示す通り、順位機構700は、スレッドグループ(g)720内のビット610−2及び610−3と、スレッドグループ(g)720に関連するスレッド730と、を(例えば、期間620の終わりに)受け取ることが出来る。スレッドグループ(g)720内のビット610−2及び610−3に基づいて、順位機構700は、スレッドグループ(g)720の順位740−1を判定することが出来る。ある実施形態では、順位機構700は、(例えば、スレッドグループ(g)720により占有されたアイドルコアに対応する)ビット610−2及び610−3の値を加えることにより、スレッドグループ(g)720の順位740−1を判定することが出来る。
【0050】
ある実施形態では、順位機構700は、スレッドグループ(g)720の順位740−1を以下の等式に従って判定することが出来る。:
但し、Rank
gはスレッドグループ(g)の順位に対応し得、Mはスレッドグループ(g)に属するスレッドの総数に対応し得、mはスレッドグループ(g)に用いられるコアに対応し得、ICはスレッドグループ(g)に占有されるアイドルコアの数に対応し得、CoreID
mはスレッドグループ(g)に使用されるm番目のコアのIDに対応し得る。従って、スレッドグループ(g)の順位は、スレッドグループにより占有されるアイドルコアの数と等しくてよい。
【0051】
スレッドグループの全てのスレッドが動作中の場合(例えば、コア310のうちの1つにより実行される)、スレッドグループの全ての対応するビット610はリセットされ得、スレッドグループの順位は0と判定され得る。1つ以上のスレッドグループのスレッド(例えば、コア310のうちの1つにより実行されていない、アイドルスレッド470等の)がアイドルの場合、スレッドグループの1つ以上のビット610が設定され得(例えば、リセットされず)、スレッドグループの順位は、0より大きいと判定され得る。例えば、
図7に示す通り、ビット610−3が設定されているため(例えば、スレッドグループ(g)が、アイドルスレッド470を含むことを示す)、順位機構700はスレッドグループ(g)の順位740−1が0より大きな値と判定することが出来る。順位機構700は、その他のスレッドグループの順位740−2及び740−3を判定し、(例えば、スレッドグループの順位480に対応出来る)順位740−1、740−2、及び740−3を出力することが出来る。さらに
図6に示す通り、順位740−2は0であり得、対応するスレッドグループの全てのスレッドが動作中であることを示す(例えば、コア310のうちの1つにより実行される)。
【0052】
図7にはグループランカ420の機能要素の例が示されているが、他の実施形態では、グループランカ420は、異なる機能要素、異なって配列される機能要素、又は
図7に示される以外の付加的な機能要素を含み得る。
【0053】
図8は、メモリ制御装置320のメモリスケジューラ430の機能要素の例を示す説明図である。ある実施形態では、
図8に関連して記載された機能要素は、1つ以上のプロセッサ、マイクロプロセッサ、ASIC、FPGA、又はメモリ制御装置320内に含まれるその他の種類の処理論理回路により実行され得る。
図8に示す通り、メモリスケジューラ430は、グループ順位規則要素800、準備完了順規則要素810、及び先着順規則要素820含み得る。
【0054】
参照符号830で示す通り、グループ順位規則要素800は、メモリ使用要求460及びスレッドグループの順位480を(例えば、グループランカ420から)受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得、スレッドグループの順位480に基づいて、メモリ使用要求460を優先させることが出来る。例えば、グループ順位規則要素800は、より高いスレッドグループ順位を有するスレッドグループからのメモリ使用要求をより低いスレッドグループ順位を有するスレッドグループからのメモリ使用要求よりも優先させることが出来る。
【0055】
グループ順位規則要素800は、(例えば、アイドルスレッドグループ及びコアに関連する)メモリ使用要求が優先されていることを保証することが出来る。アイドルスレッドグループ及びコアは、メモリ制御装置320に自己のアイドル状態(例えば、スレッドグループ順位480)を知らせることが出来、これにより、メモリ帯域幅を周辺のコアと共有しようとするアイドルコア(例えば、同じスレッドグループに占有された別のコア)をメモリ制御装置320に表示する。次に、メモリ制御装置320は、周辺のコアを優先させようと試みる。これにより、コアのアイドル時間を少なくすることで、全システムに渡って処理量を増加させる。これにより、アイドルコアにより消費され得る静的電力及び/又は漏れ電力を少なくすることで、システムの電力消費を抑えることも出来る。
【0056】
準備完了順規則要素810は、メモリ使用要求460と、メモリ使用要求460に関連する行バッファ情報840と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。行バッファ情報840は、メモリ使用要求460のうちのどれが、行バッファ(例えば、メインメモリ230)をヒットしているか、又は行バッファをヒットしていないかを表示することが出来る。参照符号850で示す通り、行バッファ情報840に基づいて、準備完了順規則要素810は、メモリ使用要求460を優先させることが出来る。例えば、準備完了順規則要素810は、行バッファをヒットしているメモリ使用要求を、行バッファをヒットしていないメモリ使用要求よりも優先させることが出来る。
【0057】
先着順規則要素820は、メモリ使用要求460と、メモリ使用要求460に関連する時間情報860と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。時間情報860は、メモリ使用要求460が(例えば、メインメモリ230に)到着した時間を表示することが出来る。参照符号870で示す通り、時間情報860に基づいて、先着順規則要素820は、メモリ使用要求460を優先させることが出来る。例えば、先着順要素820は、(例えば、メインメモリ230に)早い時間に到着したメモリ使用要求を、(例えば、メインメモリ230に)遅い時間に到着したメモリ使用要求よりも優先させることが出来る。
【0058】
さらに
図8に示す通り、グループ優先メモリ使用要求830、行バッファ優先メモリ使用要求850、及び/又は時間優先メモリ使用要求870により、優先メモリ使用要求490を形成することが出来る。ある実施形態では、1番目にグループ順位規則要素800を、2番目に準備完了順規則要素810を、3番目に先着順規則要素820を用いることにより、メモリスケジューラ430は、(例えば、優先させる)メモリ使用要求460をスケジューリングすることが出来る。
【0059】
図8にはメモリスケジューラ430の機能要素の例が示されているが、他の実施形態では、メモリスケジューラ430は、より少ない機能要素、異なる機能要素、異なって配列される機能要素、又は
図8に示される以外の付加的な機能要素を含み得る。あるいは、又はそれに加えて、メモリスケジューラ430の1つ以上の機能要素は、メモリスケジューラ430の1つ以上の別の機能要素により実行可能とされる、1つ以上の他のタスクを実行することが出来る。
【0060】
メモリ制御装置の動作例
図9A及び
図9Bは、スレッドグループ受取器400(
図4)により実行され得る例示の動作900の説明図である。
図9Aに示す通り、シングルスレッドアプリケーション910(例えば、APP_A)は、マルチコアプロセッサのコア310−1(例えば、プロセッシングユニット220)及びメモリバンク330−1(図示せず)に関連する2つのメモリ使用要求920−1及び920−2を含み得る。マルチスレッドアプリケーション(例えば、APP_B)は、2つのスレッド(例えば、APP_B1スレッド930及びAPP_B2スレッド950)と、同期のためのバリアと、を含み得る。スレッド930は、プロセッシングユニット220及びメモリバンク330−1(図示せず)のコア310−2に関連し得、バリアの後に供給される2つのメモリ使用要求940−6及び940−7と、バリアの前に供給される3つのメモリ使用要求940−3、940−4、及び940−5と、を含み得る。スレッド950は、プロセッシングユニット220及びメモリバンク330−2(図示せず)のコア310−3に関連し得、バリアの後に供給される2つのメモリ使用要求940−1及び940−2を含み得る。
【0061】
マルチスレッドのアプリケーションAPP_Bは、スレッド930をメモリバンク330−1にアクセスさせ、スレッド950をメモリバンク330−2にアクセスさせることにより、バンクレベルの並列処理を利用するよう設計され得る。説明のため、バリアの周りに想定される負荷の不均衡(例えば、実行時間に完全な負荷均衡を保つことが困難であり得るために起こり得る)により、スレッド950がスレッド930より先にバリアに到達すると仮定する。負荷の不均衡により、スレッド950に関連するメモリ使用要求940−1及び940−2が、メモリバンク330−2へのアクセスを妨げ、これにより、コア310−3はアイドル状態となる。コア310−3は、スレッド930に関連するメモリ使用要求940−3、940−4、及び940−5が処理されるまで、アイドル状態を保つことが出来る。従って、(例えば、コア310−3は5周期とは対照的にたった3周期の間だけアイドルでいるように)、スレッド930に関連するメモリ使用要求940−3、940−4、及び940−5は、シングルスレッドアプリケーション910に関連するメモリ使用要求920−1及び920−2よりも優先権を与えられるべきである。
【0062】
図9Bに示す通り、(例えば、メモリ制御装置320の)スレッドグループ受取器400は、(例えば、スレッド440に対応し得る)スレッド910、930、及び950と、スレッド情報510と、グループID情報520と、を受け取ることが出来る。例えば、スレッドグループ受取器400は、シングルスレッドアプリケーションAPP_Aのスレッド910に関するグループIDと、マルチスレッドアプリケーションAPP_Bのスレッド930及び950に関する別のグループIDと、を受け取ることが出来る。スレッド情報510及びグループID情報520に基づいて、スレッドグループ受取器400は、スレッド910、930、及び950に関するスレッドグループ情報450−1及び450−2を生成することが出来る。例えば、スレッドグループ受取器400は、(例えば、シングルスレッドアプリケーションAPP_Aのスレッド910に関する)スレッドグループ情報450−1及び(例えば、マルチスレッドアプリケーションAPP_Bのスレッド930及び950に関する)スレッドグループ情報450−2を生成することが出来る。
【0063】
図9A及び
図9Bには、スレッドグループ受取器400により実行可能な動作の例が示されているが、他の実施形態では、スレッドグループ受取器400は、より少ない動作、異なる動作、又は
図9A及び
図9Bに示される以外の付加的な動作を行うことが出来る。
【0064】
図10A及び
図10Bは、アイドルスレッド検知器410(
図6)により実行可能な例示の動作1000の説明図である。
図10Aに示す通り、バリアの周りに想定される負荷の不均衡により、スレッド950はスレッド930より先にバリアに到達し得る。参照符号1010で示す通り、この負荷の不均衡が、スレッド950に関連するメモリ使用要求940−1及び940−2の、メモリバンク330−2(図示せず)へのアクセスを妨げ得、これによりコア310−3はアイドル状態となり得、スレッド950がアイドルとなり得る。
【0065】
図10Bに示す通り、アイドルスレッド検知器410の休止コアのビットベクトル600は、(例えば、コア310−1に関する)ビット610−1、(例えば、コア310−2に関する)ビット610−2、及び(例えば、コア310−3に関する)ビット610−3を含み得る。ビット610−1は、対応するコア(例えば、コア310−1)上で実行中のスレッド(例えば、スレッド910)からのメモリ使用要求920−1及び920−1に関連し得るため、このビット610−1は、休止コアのビットベクトル600により、(例えば、0の値に)リセットされ得る。ビット610−2は、対応するコア(例えば、コア310−2)上で実行中のスレッド(例えば、スレッド930)からのメモリ使用要求940−3、940−4、及び940−5に関連し得るため、ビット610−2は、休止コアのビットベクトル600により、(例えば、0の値に)リセットされ得る。ビット610−3は、対応するコア(例えば、コア310−3)上で実行中のスレッドからのメモリ使用要求に関連しえないため、このビット610−3は、(例えば、0より大きい値に)設定され得る。参照符号1020で示す通り、ビット610−3が期間620の終わりに設定を維持している場合、休止コアのビットベクトル600は、ビット610−3に対応するコア(例えば、コア310−3)上で実行中のスレッド(例えば、スレッド950)が、期間620の間、アイドル状態であることを判定し得る。休止ビットコアベクトル600は、アイドルスレッドの印1020を出力することが出来る。
【0066】
図10A及び
図10Bには、アイドルスレッド検知器410により実行可能な動作の例が示されているが、他の実施形態では、アイドルスレッド検知器410は、より少ない動作、異なる動作、又は
図10A及び
図10Bに示される以外の付加的な動作を行うことが出来る。
【0067】
図11は、グループランカ420(
図7)により実行可能な例示の動作1100の説明図である。図示する通り、グループランカ420の順位機構700は、シングルスレッドアプリケーションAPP_Aに関するビット1110及びマルチスレッドアプリケーションAPP_Bに関するビット1120を受け取ることが出来る。上記に
図10Bに関連して記載する通り、ビット1110は、(例えば、0の値に)リセットされ得るビット610−1を含み得る。上記に
図10Bに関連して記載する通り、ビット1120は、(例えば、0の値に)リセットされ得るビット610−2と、(例えば、0より大きい値に)設定され得るビット610−3と、を含み得る。
【0068】
順位機構700は、ビット1110に関連する値に基づいて、シングルスレッドアプリケーションAPP_Aの順位1130を判定することが出来る。
図11に示す通り、ビット610−1は0の値に設定されるため、シングルスレッドアプリケーションAPP_Aの順位1130は0と判定される。順位機構700は、ビット1120に基づいて、マルチスレッドアプリケーションAPP_Bの順位1140を判定することが出来る。ある実施形態では、順位機構700は、ビット610−2及び610−3の値を加えることにより、マルチスレッドアプリケーションAPP_Bの順位1140を判定することが出来る。
図11に示す通り、ビット610−2は、0の値に設定され、且つビット610−3は0より大きい値に設定されるため、マルチスレッドアプリケーションAPP_Bの順位1140は、0より大きい値と判定することが出来る。
【0069】
図11には、グループランカ420により実行可能な動作の例が示されているが、他の実施形態では、グループランカ420は、より少ない動作、異なる動作、又は
図11に示される以外の付加的な動作を行うことが出来る。
【0070】
図12A及び
図12Bは、メモリスケジューラ430(
図8)により実行可能な例示の動作1200の説明図である。
図12Aに示す通り、(例えば、シングルスレッドアプリケーションAPP_Aの)スレッド910は、メモリバンク330−1からメモリに要求されるメモリ使用要求920−1及び920−2を含み得る。(例えば、マルチスレッドアプリケーションAPP_Bの)スレッド930は、メモリバンク330−1からメモリに要求されるメモリ使用要求940−3、940−4、及び940−5を含み得る。
【0071】
図12Bを参照すると、メモリスケジューラ430のグループ順位規則要素800は、スレッド930に関連するメモリ使用要求940−3、940−4、及び940−5を、スレッド910に関連するメモリ使用要求920−1及び920−2よりも優先させ、これにより、コア310−3は、5周期とは対照的にたった3周期の間だけアイドルを維持する。
図12Bに示す通り、グループ順位規則要素800は、シングルスレッドアプリケーションAPP_Aの順位1130と、マルチスレッドアプリケーションAPP_Bの順位1140と、を受け取ることが出来、参照符号1210で示す通り、順位1130及び1140に基づいて、マルチスレッドアプリケーションAPP_BをシングルスレッドアプリケーションAPP_Aよりも優先させることが出来る。例えば、
図12Aを参照すると、(例えば、スレッド930の)メモリ使用要求940−3、940−4、及び940−5は、メモリバンク330−1のそれぞれ指定された行1、行2、及び行3でよく、メモリ使用要求920−1及び920−2(例えば、スレッド910の)は、メモリバンク330−1の指定された行4でよい。メモリバンク330−1の行1〜行3は、メモリバンク330−1の行4よりも早く到着したため、メモリ使用要求940−3、940−4、及び940−5は、メモリ使用要求920−1及び920−2の前に処理される。
【0072】
マルチスレッドアプリケーションAPP_BをシングルスレッドアプリケーションAPP_Aよりも優先することにより、メモリ制御装置320は、マルチスレッドアプリケーションAPP_Bのアイドリング時間を5周期(例えば、FRFCFS及びPAR−BS機構の場合では)から3周期に短縮することが出来る。コア310−3が先に有用な作業を実行し始めることが出来るため、これによりシステム全般に渡って処理量を改善することが出来る。またこれにより、アイドルコア310−3により消費され得る静的電力及び/又は漏れ電力を減らすことで、システムの電力消費も抑えることが出来る。
【0073】
図12A及び
図12Bには、メモリスケジューラ430により実行可能な動作の例が示されているが、他の実施形態では、メモリスケジューラ430は、より少ない動作、異なる動作、又は
図12A及び
図12Bに示される以外の付加的な動作を行うことが出来る。
【0074】
図13〜
図15は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングに関する例示のプロセス1300を示すフローチャートである。ある実施形態では、プロセス1300は、装置200(
図2)により実行可能である。別の実施形態では、プロセス1300のいくつか又は全ては装置200の1つ以上の構成要素により、例えばメモリ制御装置320により実行可能である。
【0075】
図13に示す通り、プロセス1300は、第1のグループに関連するマルチスレッドアプリケーションのスレッドを受け取ること(ブロック1310)と、第2のグループに関連するシングルスレッドアプリケーションのスレッドを受け取ること(ブロック1320)と、を含み得る。例えば、上記に
図4に関連して記載された実施形態では、メモリ制御装置320のスレッドグループ受取器400は、1つ以上のアプリケーションに関連する1つ以上のスレッド440を受け取ることが出来、(例えば、装置200のオペレーティングシステムにより規定される第1のスレッドグループに関する)スレッド440に関するスレッドグループ情報450−1、及び(例えば、装置200のオペレーティングシステムにより規定される第2のスレッドグループに関する)スレッドグループ情報450−2を生成することが出来る。ある例では、スレッドグループ受取器400は、シングルスレッドアプリケーションのスレッドに関する、(例えば、オペレーティングシステムにより規定された)スレッドグループ情報450−1と、マルチスレッドアプリケーションのスレッドに関する、(例えば、オペレーティングシステムにより規定された)スレッドグループ情報450−2と、を生成することが出来る。
【0076】
さらに
図13に示す通り、プロセス1300は、第1のグループ内及び第2のグループ内のアイドルスレッドの数を判定すること(ブロック1330)を含み得る。例えば、上記に
図4に関連して記載された実施形態では、メモリ制御装置320のアイドルスレッド検知器410は、スレッドグループ受取器400からのスレッドグループ情報450−1及び450−2と、スレッド440に関連する1つ以上のメモリ使用要求460と、を受け取ることが出来る。参照符号470で示す通り、アイドルスレッド検知器410は、スレッドグループ情報450−1/450−2及びメモリ使用要求460に基づいて、スレッド440のうちのどれがアイドルなのかを判定し、判定されたアイドルスレッドをグループランカ420に供給することが出来る。
【0077】
図13に戻ると、プロセス1300は、判定されたアイドルスレッドの数に基づいて、第1のグループ及び第2のグループの順位付けを行うこと(ブロック1340)を含み得る。例えば、上記に
図4に関連して記載された実施形態では、メモリ制御装置320のグループランカ420は、スレッドグループ受取器400からのスレッドグループ情報450−1及び450−2と、アイドルスレッド検知器410からのアイドルスレッド470と、を受け取ることが出来る。グループランカ420は、各スレッドグループ内のアイドルスレッド470の数に基づいて、(例えば、スレッドグループ情報450−1及び450−2により規定された)スレッドグループ内のスレッドを順位付けることが出来る。参照符号480で示す通り、グループランカ420は、スレッドグループの順位をメモリスケジューラ430に供給することが出来る。
【0078】
さらに
図13に示す通り、プロセス1300は、高い順位のグループからのメモリ使用要求を、低い順位のグループからのメモリ使用要求よりも優先すること(ブロック1350)を含み得る。例えば、上記に
図4に関連して記載された実施形態では、メモリ制御装置320のメモリスケジューラ430は、グループランカ420からのスレッドグループの順位480と、スレッド440に関連する1つ以上のメモリ使用要求460と、を受け取ることが出来る。参照符号490で示す通り、メモリスケジューラ430は、スレッドグループの順位480に基づいて、メモリ使用要求460を優先させ、装置200内で優先させたメモリ使用要求490を実行することが出来る。
【0079】
プロセスブロック1330及びプロセスブロック1340は、
図14に示されるプロセスブロックを含み得る。
図14に示す通り、プロセスブロック1330及びプロセスブロック1340は、ビットベクトル内の第1のビットを第1のグループ内のスレッドの部分に関連付けること(ブロック1400)と、ビットベクトル内の第2のビットを第1のグループ内のスレッドの残りの部分に関連付けること(ブロック1410)と、ビットベクトル内の第3のビットを第2のグループ内のスレッドに関連付けること(ブロック1420)と、含み得る。例えば、上記に
図6に関連して記載された実施形態では、メモリ制御装置320の休止コアのビットベクトル600は、スレッドグループ情報450−1及び450−2に基づいて、各ビット610をスレッド440のうちの1つ及びその対応するコア(例えば、コア310のうちの1つ)に関連付けることが出来る。ある例では、休止コアのビットベクトル600は、ビット610−1をシングルスレッドアプリケーションのスレッドに関連付け、ビット610−2をマルチスレッドアプリケーションの第1のスレッドに関連付け、ビット610−3をマルチスレッドアプリケーションの第2のスレッドに関連付けることが出来る。
【0080】
さらに
図14に示す通り、プロセスブロック1330及びプロセスブロック1340は、期間の始まりに、ビットベクトル内のビットを設定すること(ブロック1430)と、リセットされるビット(複数可)に関連するスレッド(複数可)に関して、1つ以上のメモリ使用要求が受け取られたとき、ビットベクトル内の1つ以上のビットをリセットすること(ブロック1440)と、を含み得る。例えば、上記に
図6に関連して記載された実施形態では、休止コアのビットベクトル600は、期間620の始まりに、各ビット610を(例えば、特定の値に)周期的に設定することが出来る。休止コアのビットベクトル600は、対応するコア上で実行中の(例えば、スレッドグループ情報450−1及び450−2により規定された)スレッドからのメモリ使用要求(例えば、メモリ使用要求460)があるとき、ビット610のうちの1つをリセットすることが出来る。ある例では、ビット610−1、610−2、及び610−4は、対応するコア上で実行中のスレッドからのメモリ使用要求460に関連し得る。従って、休止コアのビットベクトル600は、ビット610−1、610−2、及び610−4をリセットすることが出来る。ビット610−3は、メモリ使用要求に関連しないため、休止コアのビットベクトル600は、ビット610−3をリセットすることが出来ない。
【0081】
図14に戻ると、プロセスブロック1330及びプロセスブロック1330は、期間の終わりに、ビットベクトル内に残る、設定されたビット(複数可)に基づいて、アイドルスレッドの数(複数可)を判定すること(ブロック1450)と、期間の終わりに残る、設定されたビット(複数可)の値(複数可)に基づいて、第1のグループ及び第2のグループの順位付けをすること(ブロック1460)と、含み得る。例えば、上記に
図6及び
図7に関連して記載された実施形態では、参照符号470で示す通り、ビット(例えば、ビット610−3)が、期間620の終わりに残る場合、休止コアのビットベクトル600は、ビット610−3に対応するコア上で実行中のスレッドが、期間620の間、アイドルであると判定することが出来る。休止ビットコアベクトル600は、アイドルスレッドの印470を出力することが出来る。参照符号830で示す通り、メモリ制御装置320のグループ順位規則要素800は、メモリ使用要求460及びスレッドグループの順位480を(例えば、グループランカ420から)受け取ることが出来、スレッドグループの順位480に基づいて、メモリ使用要求460を優先させることが出来る。ある例では、グループ順位規則要素800は、より高いスレッドグループ順位のスレッドグループからのメモリ使用要求を、より低いスレッドグループ順位のスレッドグループからのメモリ使用要求よりも優先させることが出来る。
【0082】
プロセスブロック1350は、
図15に示されるプロセスブロックを含み得る。
図15に示す通り、プロセスブロック1350は、メモリ使用要求に関連するグループ順位に基づいて、メモリ使用要求の第1の優先権を判定すること(ブロック1500)と、準備完了順規則に基づいて、メモリ使用要求の第2の優先権を判定すること(ブロック1510)と、先着順規則に基づいて、メモリ使用要求の第3の優先権を判定すること(ブロック1520)とを含み得る。例えば、上記に
図8に関連して記載された実施形態では、メモリ制御装置320のメモリスケジューラ430は、1番目にグループ順位規則要素800を用いて、2番目に準備完了順規則要素810を用いて、3番目に先着順規則要素820を用いて、メモリ使用要求460をスケジューリングする(例えば、優先させる)ことが出来る。
【0083】
本明細書に記載するシステム 及び/又は 方法により、装置のメモリ制御装置(例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ装置、及び/又はその他の種類のコンピュータ又は通信装置等のマルチコアプロセッサを用いる装置)は、1つ以上のマルチスレッドアプリケーションを識別し、マルチスレッドアプリケーション(複数可)の識別に基づいてマルチスレッドアプリケーション(複数可)に関するメモリスケジューリングスキームを調整又は最適化することが出来る。このようなシステム及び/又は方法により、非能率的なメモリスケジューリングによる、(例えば、装置内の)パフォーマンス低下を防ぐことが出来る。
【0084】
上述の実施形態の記述により、説明及び記載がなされたが、本明細書が包括的なものでないこと、又は開示した厳密な形態に本発明を制限することを、意図するものではない。上記の事項を踏まえると、修正及び変更は可能である、即ち本発明の実行から得ることが出来る。
【0085】
例えば、
図13〜
図15に関連して、一連のブロックを説明してきたが、他の実施形態では、ブロックの順番を変更することが可能である。さらに、非従属ブロックは、並列して実行することが出来る。別の例では、本明細書に記載する、異なるアプリケーション及びスレッドの数は説明のためだけに設けられた。
【0086】
図面に示される実施形態では、上記に記載した様態はソフトウェア、ファームウェア、及びハードウェアの様々な形で実行することが出来ることは言うまでもない。これらの様態を実行するために用いられる実際のソフトウェアコード、又は特殊制御ハードウェアは、制限と解釈されるべきではない。従って、様態の動作及び挙動の説明では、ソフトウェアコードを参照しなかったが、そのソフトウェア及び制御ハードウェアを設計して、本明細書に基づいた様態を実行出来ることは言うまでもない。このソフトウェアには、ハードウェア記述言語(HDL)、ヴェリログ、レジスタ転送レベル(RTL)、グラフィックデータベースシステム(GDS)IIのデータ又はそれらの回路及び機構に書き込むために使用される、その他のソフトウェアも含まれ得る。このようなソフトウェアは、コンピュータ可読媒体に格納することが出来、製造プロセスを設定して、本発明の様態を具体化する方法で、動作可能な実回線を作るために用いることが出来る。
【0087】
さらに、本明細書に記載のいくらかの実施形態を、1つ以上の機能を実行する「論理回路」として実行することが出来る。この論理回路には、プロセッサ、ASIC、又はFPGA、あるいはハードウェア及びソフトウェアの組合せ等の、ハードウェアが含まれ得る。
【0088】
特徴の特定の組合せが請求項に記載され及び/又は明細書に開示されてはいるが、これらの組合せは、本発明を制限することを意図するものではない。実際、請求項に明確には記載されていない、且つ/又は明細書に開示されていない方法で、多くのこれらの特徴を組み合わせることが出来る。
【0089】
本出願に使用される、いかなる要素、ブロック、又は命令も、そのような明確な定めがない限り、本発明に関して重要又は必須と解釈されるべきではない。また、本明細で使用される冠詞「a」は1つ以上の項目を含むことを意図する。たった1つの項目を意図する場合、用語「one」又は類似の言葉が使用される。さらに、フレーズ「に基づいて」とは、明確な定めがない限り、「少なくとも部分的に基づいて」を意味することを意図する。