(57)【要約】開示される装置は、マルチスレッドアプリケーションを識別するメモリ制御装置を含むことが出来、マルチスレッドアプリケーションの識別に基づいて、マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整する。【選択図】図４
2013528305.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ装置により、マルチスレッドアプリケーションを識別することと、
前記マルチスレッドアプリケーションの識別に基づいて、前記コンピュータ装置により、前記マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整することと、を備えるコンピュータ装置により実行される方法 。
【請求項２】
前記マルチスレッドアプリケーションは、第１のグループに関連し、
前記マルチスレッドアプリケーションを識別することには、前記第１のグループに関連する、前記マルチスレッドアプリケーションのスレッドを受け取ることが含まれ、
第２のグループに関連する、シングルスレッドアプリケーションのスレッドを受け取ることをさらに備える請求項１に記載のコンピュータ装置により実行される方法。
【請求項３】
前記メモリスケジューリングスキームを調整することは、
前記第１のグループ内及び前記第２のグループ内のアイドルスレッドの数を判定することと、
前記第１のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記第１のグループの順位付けをすることと、
前記第２のグループ内の判定された数のアイドルスレッドに基づいて、前記第２のグループの順位付けをすることと、
前記第１のグループ又は前記第２のグループのうちの、より高く順位付けされた一方に関連するメモリ使用要求を、前記第１のグループ又は前記第２のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求よりも優先することと、を備える、請求項２に記載のコンピュータ装置により実行される方法。
【請求項４】
前記アイドルスレッドの数を判定することは、
ビットベクトル内の第１のビットを、前記第１のグループ内の第１のスレッドに関連付けることと、
前記ビットベクトル内の第２のビットを、前記第１のグループ内の第２のスレッドに関連付けることと、
前記ビットベクトル内の第３のビットを、前記第２のグループ内の前記スレッドに関連付けることと、
期間の始まりに、前記ビットベクトル内の前記第１のビット、前記第２のビット、及び前記第３のビットを設定することと、
前記第１のビット、前記第２のビット、又は前記第３のビットのうちのリセットされる１つ以上のビットに関連する１つ以上のスレッドに関して、１つ以上のメモリ使用要求が受け取られたとき、前記ビットベクトル内の前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上のビットをリセットすることと、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットに基づいて、前記第１のグループ内及び前記第２のグループ内のアイドルスレッドの数を判定することと、を備える、請求項３に記載のコンピュータ装置により実行される方法。
【請求項５】
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットに基づいて、前記第１のグループ及び前記第２のグループの順位付けをすることをさらに備える請求項４に記載のコンピュータ装置により実行される方法。
【請求項６】
前記メモリ使用要求を優先することは、
前記メモリ使用要求に関連する、グループの順位に基づいて、前記メモリ使用要求の第１の優先権を判定することと、
準備完了順規則に基づいて、前記メモリ使用要求の第２の優先権を判定することと、
先着順規則に基づいて、前記メモリ使用要求の第３の優先権を判定することと、を備える、請求項３に記載のコンピュータ装置により実行される方法。
【請求項７】
装置のメモリ制御装置であって、
処理論理回路を備え、前記処理論理回路が、
グループに関連する、マルチスレッドアプリケーションのスレッドを受け取り、
別のグループに関連する、シングルスレッドアプリケーションのスレッドを受け取り、
前記グループ内及び前記別のグループ内のアイドルスレッドの数を判定し、
前記グループ内の前記判定されたアイドルスレッドの数に基づいて、前記グループを順位付けし、
前記別のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記別のグループを順位付けし、
前記グループ又は前記別のグループのうちのより高く順位付けされた一方に関連するメモリ使用要求を、前記グループ又は前記別のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求より優先させる、メモリ制御装置。
【請求項８】
前記アイドルスレッドの数を判定するとき、前記処理論理回路がさらに、
ビットベクトル内の第１のビットを、前記グループ内の第１のスレッドに関連付け、
前記ビットベクトル内の第２のビットを、前記グループ内の第２のスレッドに関連付け、
前記ビットベクトル内の第３のビットを、前記別のグループ内の前記スレッドに関連付け、
期間の始まりに、前記ビットベクトル内の前記第１のビット、前記第２のビット、及び前記第３のビットを、０より大きい値に設定し、
前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上の前記リセットされるビットに関連する１つ以上のスレッドに関して、１つ以上のメモリ使用要求が受け取られるとき、前記ビットベクトル内の前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上のビットを、０の値にリセットし、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットの値に基づいて、前記グループ内及び前記別のグループ内の前記アイドルスレッドの数を判定する、請求項７に記載のメモリ制御装置。
【請求項９】
前記処理論理回路がさらに、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットの値に基づいて、前記グループ及び前記別のグループの順位付けをする、請求項８に記載のメモリ制御装置。
【請求項１０】
前記メモリ使用要求を優先するとき、前記処理論理回路がさらに、
前記メモリ使用要求に関連する、グループの順位に基づいて、前記メモリ使用要求の第１の優先権を判定し、
準備完了順規則に基づいて、前記メモリ使用要求の第２の優先権を判定し、
先着順規則に基づいて、前記メモリ使用要求の第３の優先権を判定する、請求項７に記載のメモリ制御装置。
【請求項１１】
マルチスレッドアプリケーションを識別し、
前記マルチスレッドアプリケーションの識別に基づいて、前記マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整するメモリ制御装置を備える装置。
【請求項１２】
前記メモリ制御装置が、
コア毎のグループ識別レジスタを含み、
前記コア毎のグループ識別レジスタが、
第１のグループに関連する、前記マルチスレッドアプリケーションのスレッドを受け取り、
第２のグループに関連する、シングルスレッドアプリケーションのスレッドを受け取る、請求項１１に記載の装置。
【請求項１３】
前記メモリ制御装置が、
前記第１のグループ内及び前記第２のグループ内のアイドルスレッドの数を判定するアイドルスレッド検知器をさらに含む、請求項１２に記載の装置。
【請求項１４】
前記アイドルスレッド検知器がさらに、 
ビットベクトル内の第１のビットを、前記第１のグループ内の第１のスレッドに関連付け、
前記ビットベクトル内の第２のビットを、前記第１のグループ内の第２のスレッドに関連付け、
前記ビットベクトル内の第３のビットを、前記第２のグループ内の前記スレッドに関連付け、
期間の始まりに、前記ビットベクトル内の前記第１のビット、前記第２のビット、及び前記第３のビットを、０より大きい値に設定し、
前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上の前記リセットされるビットに関連する１つ以上のスレッドに関して、１つ以上のメモリ使用要求が受け取られたとき、前記ビットベクトル内の前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上のビットを、０の値にリセットし、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットの値に基づいて、前記第１のグループ内及び前記第２のグループ内の前記アイドルスレッドの数を判定する、請求項１３に記載の装置。
【請求項１５】
前記メモリ制御装置が、
2013528305.tif 000004
に従ってグループ（ｇ）を順位付けるグループランカをさらに含み、
Ｒａｎｋｇは、前記グループ（ｇ）の順位に対応し、Ｍは、前記グループ（ｇ）に属するスレッドの総数に対応し、ｍは、前記グループ（ｇ）に用いられるコアプロセッサに対応し、ＩＣは、前記グループ（ｇ）に占有されるアイドルコアプロセッサの数に対応し、ＣｏｒｅＩＤｍは、前記グループ（ｇ）に使用されるｍ番目のコアプロセッサの識別に対応する、請求項１３に記載の装置。
【請求項１６】
前記メモリ制御装置が、
グループランカをさらに含み、前記グループランカが、
前記第１のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記第１のグループを順位付けし、
前記第２のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記第２のグループを順位付けする、請求項１３に記載の装置。
【請求項１７】
前記メモリ制御装置が、
前記第１のグループ又は前記第２のグループのうちのより高く順位付けされた一方に関連するメモリ使用要求を、前記第１のグループ又は前記第２のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求よりも優先させるメモリスケジューラをさらに含む、請求項１６に記載の装置。
【請求項１８】
前記メモリスケジューラがさらに、
前記メモリ使用要求に関連する、グループの順位に基づいて、前記メモリ使用要求の第１の優先権を判定し、
準備完了順規則に基づいて、前記メモリ使用要求の第２の優先権を判定し、
先着順規則に基づいて、前記メモリ使用要求の第３の優先権を判定する、請求項１７に記載の装置。
【請求項１９】
マルチコアプロセッサ及びマルチスレッドアプリケーションを使用するコンピュータ装置又は通信装置を含む、請求項１１に記載の装置。
【請求項２０】
１つ以上のコンピュータにより実行可能な命令を格納するコンピュータ可読メモリ装置であって、
複数の別のアプリケーションから、マルチスレッドアプリケーションを識別するための１つ以上の命令と、
前記マルチスレッドアプリケーションの識別に基づいて、前記マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整するための１つ以上の命令と、を備えるコンピュータ可読メモリ装置。
【請求項２１】
プロセッシングユニットのメモリ制御装置内に設けられる請求項２０に記載のコンピュータ可読メモリ装置。
【請求項２２】
前記マルチスレッドアプリケーションを識別するための１つ以上の命令が、
前記マルチスレッドアプリケーションのスレッドを受け取るための１つ以上の命令を含み、
前記マルチスレッドアプリケーションは、第１のグループに関連し、
前記コンピュータ可読メモリ装置が、
第２のグループに関連する、シングルスレッドアプリケーションのスレッドを受け取るための１つ以上の命令をさらに備える、請求項２０に記載のコンピュータ可読メモリ装置。
【請求項２３】
前記メモリスケジューリングスキームを調整するための１つ以上の命令が、
前記第１のグループ内及び前記第２のグループ内のアイドルスレッドの数を判定するための１つ以上の命令と、
前記第１のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記第１のグループを順位付けするための１つ以上の命令と、 
前記第２のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記第２のグループを順位付けするための１つ以上の命令と、
前記第１のグループ又は前記第２のグループのうちの、より高く順位付けされた一方に関連するメモリ使用要求を、前記第１のグループ又は前記第２のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求よりも優先させるための１つ以上の命令と、を含む、請求項２２に記載のコンピュータ可読メモリ装置。
【請求項２４】
前記アイドルスレッドの数を判定するための１つ以上の命令が、
ビットベクトル内の第１のビットを、前記第１のグループ内の第１のスレッドに関連付けるための１つ以上の命令と、
前記ビットベクトル内の第２のビットを、前記第１のグループ内の第２のスレッドに関連付けるための１つ以上の命令と、
前記ビットベクトル内の第３のビットを、前記第２のグループ内の前記スレッドに関連付けるための１つ以上の命令と、
期間の始まりに、前記ビットベクトル内の前記第１のビット、前記第２のビット、及び前記第３のビットを、０より大きい値に設定するための１つ以上の命令と、
前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上の、前記リセットされるビットに関連する、１つ以上のスレッドに関して、１つ以上のメモリ使用要求が受け取られたとき、前記ビットベクトル内の前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上のビットを、０の値にリセットするための１つ以上の命令と、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットに基づいて、前記第１のグループ内及び前記第２のグループ内の前記アイドルスレッドの数を判定するための１つ以上の命令と、を含む、請求項２３に記載のコンピュータ可読メモリ装置。
【請求項２５】
前記期間は、約１，０００クロックサイクルとほぼ同じである、請求項２４に記載のコンピュータ可読メモリ装置。
【請求項２６】
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットに基づいて、前記第１のグループ及び前記第２のグループを順位付けするための１つ以上の命令をさらに備える、請求項２４に記載のコンピュータ可読メモリ装置。
【請求項２７】
前記メモリ使用要求を優先させるための１つ以上の命令が、
前記メモリ使用要求に関連する、グループの順位に基づいて、第１のメモリ使用要求の優先権を判定するための１つ以上の命令と、
前記第１の優先権を判定した後、準備完了順規則に基づいて、第２のメモリ使用要求の優先権を判定するための１つ以上の命令と、
前記第２の優先権を判定した後、先着順規則に基づいて、第３のメモリ使用要求の優先権を判定するための１つ以上の命令と、を含む、請求項２３に記載のコンピュータ可読メモリ装置。
【発明の詳細な説明】
【背景技術】
【０００１】
マルチプルコア／メニーコア（マルチコア）プロセッサへの移行により、クライアントのプラットホーム及びサーバのプラットホーム両方において、マルチスレッドアプリケーションが広まってきた。このようなアプリケーションの高いスレッドレベルの並列処理（ＴＬＰ）では、マルチコアプロセッサ（例えば、チップ・マルチプロセッサ（ＣＭＰ）システム）によりサポートされるハードウェアの並列処理を効率的に利用している。アプリケーションのスレッドを同時に実行する、オペレーティングシステムが行う調整されたスレッドスケジューリング等のマルチスレッドアプリケーションの動作を速くするためのソフトウェア及びハードウェアが提案されている。しかし、メモリスケジューリング（例えば、メモリ制御装置による）における、著しいパフォーマンス低下の可能性のあるマルチスレッドアプリケーションに関するパフォーマンスの課題には、それに取り組む提案はなされていない。
【０００２】
準備完了順・先着順（ＦＲＦＣＦＳ）機構、及び並列アウェア・バッチスケジューリング（ＰＡＲ−ＢＳ）機構等のいくつかの機構では、メモリ制御装置のパフォーマンスを改善する試みがなされている。例えば、ＦＲＦＣＦＳ機構では、メモリバンクの行バッファにアクセスしてメモリ使用要求をスケジューリングすることにより、メモリ制御装置のパフォーマンスを改善している。ＰＡＲ−ＢＳ機構では、メモリ使用要求をバッチにまとめて、バッチ単位でメモリ使用要求を実行し、最短ジョブ優先（ＳＪＦ）スケジューリングを各バッチに適用することにより、メモリ制御装置のパフォーマンスを改善している。しかし、これら両方の機構では、シングルスレッドアプリケーションに対するメモリのスケジューリングの最適化だけを行い、マルチスレッドアプリケーションに関するメモリのスケジューリングの最適化は行わない。
【発明の概要】
【課題を解決するための手段】
【０００３】
ある実施形態による、コンピュータ装置により実行される方法は、コンピュータ装置により、マルチスレッドアプリケーションを識別することと、コンピュータ装置により、マルチスレッドアプリケーションの識別に基づいて、マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整することと、を含み得る。
【０００４】
ある様態によると、マルチスレッドアプリケーションは、第１のグループに関連し得、マルチスレッドアプリケーションを識別することは、第１のグループに関連するマルチスレッドアプリケーションのスレッドを受け取ることを含み、この方法は、第２のグループに関連するシングルスレッドアプリケーションのスレッドを受け取ることをさらに含み得る。
【０００５】
別の様態によると、メモリスケジューリングスキームを調整することには、第１のグループ内及び第２のグループ内のアイドルスレッドの数を判定することと、第１のグループ内の判定されたアイドルスレッドの数に基づいて、第１のグループを順位付けすることと、第２のグループ内の判定された数のアイドルスレッドに基づいて、第２のグループを順位付けすることと、第１のグループ又は第２のグループのうちのより高く順位付けされた一方に関連するメモリ使用要求を、第１のグループ又は第２のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求より優先させることと、が含まれ得る。
【０００６】
別の実施形態によると、装置のメモリ制御装置は、グループに関連するマルチスレッドアプリケーションのスレッド、及び別のグループに関連するシングルスレッドアプリケーションのスレッドを受け取るための処理論理回路を含み得る。この処理論理回路は、グループ内及び別のグループ内のアイドルスレッドの数を判定し、グループ内の判定されたアイドルスレッドの数に基づいて、グループを順位付けし、別のグループ内の判定されたアイドルスレッドの数に基づいて、別のグループを順位付けすることが出来る。処理論理回路は、さらにグループ又は別のグループのうちのより高く順位付けされた一方のグループに関連するメモリ使用要求をグループ又は別のグループのうちのより低く順位付けされた一方のグループに関連するメモリ使用要求より優先させることが出来る。
【０００７】
さらに別の実施形態によると、装置は、マルチスレッドアプリケーションを識別し、このマルチスレッドアプリケーションの識別に基づいて、マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整するためのメモリ制御装置を含み得る。
【０００８】
追加的な実施形態によると、コンピュータ可読メモリ装置は、１つ以上のコンピュータにより実行可能な命令を格納することが出来、マルチスレッドアプリケーションを別のアプリケーションのグループから識別するための１つ以上の命令と、このマルチスレッドアプリケーションの識別に基づいて、マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整するための１つ以上の命令と、を含み得る。
【０００９】
本明細書に組み込まれ、その一部を構成する添付図面は、本明細書に記載の１つ以上の実施形態を示し、本明細書と共に、これらの実施形態を説明するものである。以下に図面を説明する。
【図面の簡単な説明】
【００１０】
【図１】図１は、パフォーマンス低下を招いているメモリスケジューリング機構の例を示す説明図である。
【図２】図２は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングスキームを実行可能な装置の構成要素の例を示す説明図である。
【図３】図３は、図２に示される装置のプロセッシングユニット及びメインメモリの構成要素の例を示す説明図である。
【図４】図４は、図３に示されるプロセッシングユニットのメモリ制御装置の機能要素の例を示す説明図である。
【図５】図５は、図４に示されるメモリ制御装置のスレッドグループ受取器の機能要素の例を示す説明図である。
【図６】図６は、図４に示されるメモリ制御装置のアイドルスレッド検知器の機能要素の例を示す説明図である。
【図７】図７は、図４に示されるメモリ制御装置のグループランカの機能要素の例を示す説明図である。
【図８】図８は、図４に示されるメモリ制御装置のメモリスケジューラの機能要素の例を示す説明図である。
【図９Ａ】図９Ａは、図５に示されるスレッドグループ受取器により実行され得る動作例を示す説明図である。
【図９Ｂ】図９Ｂは、図５に示されるスレッドグループ受取器により実行され得る動作例を示す説明図である。
【図１０Ａ】図１０Ａは、図６に示されるアイドルスレッド検知器により実行され得る動作例を示す説明図である。
【図１０Ｂ】図１０Ｂは、図６に示されるアイドルスレッド検知器により実行され得る動作例を示す説明図である。
【図１１】図１１は、図７に示されるグループランカにより実行され得る動作例を示す説明図である。
【図１２Ａ】図１２Ａは、図８に示されるメモリスケジューラにより実行され得る動作例を示す説明図である。
【図１２Ｂ】図１２Ｂは、図８に示されるメモリスケジューラにより実行され得る動作例を示す説明図である。
【図１３】図１３は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングに関するプロセスの例を示すフローチャートである。
【図１４】図１４は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングに関するプロセスの例を示すフローチャートである。
【図１５】図１５は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングに関するプロセスの例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して詳細に説明する。異なる図面内の同一の参照符号は、同一の要素又は類似の要素を識別し得る。また、以下の詳細な説明が本発明を制限することはない。
【００１２】
概要 
本明細書に記載するシステム及び／又は方法により、装置（例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ装置、手持ち装置又は携帯装置、及び／又はその他の種類のコンピュータ装置又は通信装置等のマルチコアプロセッサを有する装置）のメモリ制御装置は、１つ以上のマルチスレッドアプリケーションを識別し、マルチスレッドアプリケーション（複数可）の識別に基づいて、マルチスレッドアプリケーション（複数可）に関するメモリスケジューリングスキームを調整する、又は最適化することが出来る。このようなシステム及び／又は方法により、非効率的なメモリスケジューリングによるパフォーマンス低下（例えば、装置内の）を防ぐことが出来る。ある実施形態では、メモリ制御装置は、第１のグループに関連するマルチスレッドアプリケーションのスレッド、及び第２のグループに関連するシングルスレッドアプリケーションのスレッドを受け取ることが出来る。メモリ制御装置は、第１のグループ内及び第２のグループ内のアイドルスレッドの数を判定し、アイドルスレッドの数に基づいて第１のグループ及び第２のグループを順位付けし、高い順位のグループからのメモリ使用要求を、低い順位のグループからのメモリ使用要求よりも優先させることが出来る。
【００１３】
本明細書で使用される用語「スレッド」とは、アプリケーションが一連の動作又は多数の動作を一度に実行出来るようにする、コンピュータプログラム（又は、アプリケーション）の部分（例えば、タスク）を含むと、広く解釈されることを意図される。アプリケーションにより命令を受けたとき、 各アプリケーション内のスレッドは、その命令を実行する処理を識別することが出来る。
【００１４】
本明細で使用される用語「構成要素」及び「装置」とは、ハードウェア（例えば、プロセッサ、マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、チップ、メモリ装置（例えば、リード・オンリー・メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、等）等）又はハードウェア及びソフトウェアの組合せ（例えば、メモリ装置内に含まれるソフトウェアを実行するプロセッサ、マイクロプロセッサ、ＡＳＩＣ等）を含むと、広く解釈されることを意図される。
【００１５】
メモリスケジューリング機構の例
図１は、パフォーマンス低下を招いているメモリスケジューリング機構１００の例を示す説明図である。図示する通り、シングルスレッドアプリケーション（例えば、ＡＰＰ＿Ａ）は、マルチコアプロセッサの第１のメモリバンク（例えば、ＢＡＮＫ１）及び第１のコア（例えば、ＣＯＲＥ＿ｌ）に関連する、２つのメモリ使用要求を含み得る。マルチスレッドアプリケーション（例えば、ＡＰＰ＿Ｂ）は、２つのスレッド（例えば、スレッドＡＰＰ＿Ｂ１及びスレッドＡＰＰ＿Ｂ２）と、同期のためのバリアと、を含み得る。ある例では、同期のためのバリアは、マルチコアプロセッサに命令して、バリアの前後に供給されるメモリ使用要求に対する順位制限を実行することが出来る。スレッドＡＰＰ＿Ｂ１は、マルチコアプロセッサの第２のコア（例えば、ＣＯＲＥ＿２）に関連することが出来、バリアの後に供給される２つのメモリ使用要求と、バリアの前に供給され、第１のメモリバンクＢＡＮＫ１に関連する３つのメモリ使用要求と、を含み得る。スレッドＡＰＰ＿Ｂ２は、マルチコアプロセッサの第３のコア（例えば、ＣＯＲＥ＿３）に関連することが出来、バリアの後に供給される２つのメモリ使用要求を含み得る。
【００１６】
マルチスレッドアプリケーションＡＰＰ＿Ｂは、スレッドＡＰＰ＿Ｂ１を、第１のメモリバンクＢＡＮＫ１にアクセスさせ、スレッドＡＰＰ＿Ｂ２を、第２のメモリバンクＢＡＮＫ２にアクセスすることにより、バンクレベルの並列処理を利用するよう設計され得る。バリアの周りに想定される（例えば、実行時間中に完全な負荷均衡を保つことが困難であり得るために起こり得る）負荷の不均衡により、スレッドＡＰＰ＿Ｂ２は、スレッドＡＰＰ＿Ｂ１より先にバリアに到達することが出来る。この負荷の不均衡により、スレッドＡＰＰ＿Ｂ２に関連するメモリ使用要求の第２のメモリバンクＢＡＮＫ２へのアクセスを妨げ得、これにより、第３のコアＣＯＲＥ＿３がアイドル状態になり得る。スレッドＡＰＰ＿Ｂ１に関連する３つのメモリ使用要求（例えば、バリアの下に供給される）が処理されるまで、第３のコアＣＯＲＥ＿３は、アイドル状態を維持し得る。従って、（例えば、第３の コア ＣＯＲＥ＿３は、３周期の間アイドル状態を維持するように）、スレッドＡＰＰ＿Ｂ１に関連する（例えば、バリアの下に供給される）３つのメモリ使用要求は、シングルスレッドアプリケーションＡＰＰ＿Ａに関連するメモリ使用要求に対して優先権を与えられるべきある。
【００１７】
しかし、現状のメモリスケジューリングスキームは、マルチスレッドアプリケーションを意識しないで、メモリ使用要求をスケジューリングして、マルチスレッドアプリケーションのスレッドを加速しようと試み、これにより、ある意味では同じマルチスレッドアプリケーションの別のスレッドの進行を妨げてしまう。例えば、スレッドＡＰＰ＿Ｂ１は、バリアにより、スレッドＡＰＰ＿Ｂ２の進行を防ぐ。ＦＲＦＣＦＳのメモリスケジューリングスキームを機構１００内で用いた場合、シングルスレッドアプリケーションＡＰＰ＿Ａが、スレッドＡＰＰ＿Ｂ１より高い行バッファのヒット率を有するため、ＦＲＦＣＦＳスキームは、パフォーマンス低下を起こしてしま恐れがある。ＦＲＦＣＦＳスキームでは、行バッファにヒットするメモリ使用要求を優先させることが出来る。その結果、シングルスレッドアプリケーションＡＰＰ＿Ａのメモリ使用要求は、第１のメモリバンクＢＡＮＫ１と同じ行（例えば、ＲＯＷ１）に関連し、スレッドＡＰＰ＿Ｂ１のメモリ使用要求は、第１のメモリバンクＢＡＮＫ１と異なる行（例えば、ＲＯＷ２〜４）と関連するため、シングルスレッドアプリケーションＡＰＰ＿Ａのメモリ使用要求をスレッドＡＰＰ＿Ｂ１のメモリ使用要求よりも優先させることが出来る。これにより、第３のコアＣＯＲＥ＿３のアイドル時間が３周期から５周期まで延び、バリアの内側での第３のコアＣＯＲＥ＿３によるマルチスレッドアプリケーションＡＰＰ＿Ｂの実行が妨げられてしまう可能性がある。
【００１８】
ＰＡＲ−ＢＳメモリスケジューリングスキームを機構１００内で用いた場合、ＰＡＲ−ＢＳスキームは、最短ジョブ優先（ＳＪＦ）ポリシーにより、メモリ使用要求の待ち行列の中のもっとも少ない数のメモリ使用要求を有するスレッドのメモリ使用要求を優先させることが出来る。その結果、シングルスレッドアプリケーションＡＰＰ＿Ａのメモリ使用要求の数は２で、スレッドＡＰＰ＿Ｂｌのメモリ使用要求の数は３のため、シングルスレッドアプリケーションＡＰＰ＿Ａのメモリ使用要求が、スレッドＡＰＰ＿Ｂ１のメモリ使用要求より優先され得る。これにより、第３のコアＣＯＲＥ＿３のアイドル時間を、３周期から５周期まで延ばし、バリアの内側での第３のコアＣＯＲＥ＿３によるマルチスレッドアプリケーションＡＰＰ＿Ｂの実行が妨げられる可能性がある。ＦＲＦＣＦＳ及びＰＡＲ−ＢＳのメモリスケジューリングスキーム、並びにその他のメモリスケジューリングスキームは、マルチスレッドアプリケーションを意識することなく、パフォーマンス低下を引き起こし、調整されたスレッドスケジューリングに対するオペレーティングシステムの努力を無駄にしてしまう。
【００１９】
これとは対照的に、本明細書に記載するシステム及び／又は方法により、装置のメモリ制御装置は、１つ以上のマルチスレッドアプリケーションを識別し、マルチスレッドアプリケーション（複数可）の識別に基づいて、マルチスレッドアプリケーション（複数可）に関するメモリスケジューリングスキームを最適化することが出来る。例えば、本明細書に記載するシステム及び／又は方法は、単に単一のスレッドに利益をもたらすメモリ使用要求よりむしろ、スレッドのグループに利益をもたらすメモリ使用要求を優先させることが出来る（例えば、スレッドＡＰＰ＿Ｂ１の要求を実行することにより、スレッドＡＰＰ＿Ｂ１及びスレッドＡＰＰ＿Ｂ２の両方の利益になる）。
【００２０】
装置の構成例
図２は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングスキームを実行可能な装置２００の構成要素の例を示す説明図である。装置２００は、マルチコアプロセッサ及び／又はマルチスレッドアプリケーションを用いるあらゆるコンピュータ又は通信装置を含み得る。例えば、装置２００は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ装置、無線電話、パーソナル通信システム（ＰＣＳ）端末、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、スマートフォン、及び／又は、その他の種類のコンピュータ又は通信装置を含み得る。
【００２１】
図２に示す通り、装置２００は、バス２１０、プロセッシングユニット２２０、メインメモリ２３０、ＲＯＭ２４０、記憶装置２５０、入力装置２６０、出力装置２７０、及び／又は通信インターフェース２８０を含み得る。バス２１０は、装置２００の構成要素間の通信を可能にする経路を含み得る。
【００２２】
プロセッシングユニット２２０は、１つ以上のプロセッサ（例えば、マルチコアプロセッサ）、マイクロプロセッサ、又は命令を理解し実行可能なその他の種類のプロセッシングユニットを含み得る。ある実施形態では、プロセッシングユニット２２０は、マルチプルコアを含む単一のプロセッサを含み得る。メインメモリ２３０は、プロセッシングユニット２２０により実行される情報及び命令を格納可能な、ＲＡＭ、ダイナミックＲＡＭ（ＤＲＡＭ）、及び／又は別の種類の動的記憶装置を含み得る。ＲＯＭ２４０は、プロセッシングユニット２２０により使用される静的情報及び／又は命令を格納可能なＲＯＭ装置又は別の種類の静的記憶装置を含み得る。記憶装置２５０は、磁気記録媒体及び／又は光記録媒体及びそれらに対応するドライブを含み得る。
【００２３】
入力装置２６０には、キーボード、マウス、ペン、マイクロフォン、音声認識機構及び／又は生体測定機構、タッチスクリーン等の、操作者が情報を装置２００に入力することが出来る機構が含まれ得る。出力装置２７０には、ディスプレイ、プリンタ、スピーカ等を含む、情報を操作者に出力する機構が含まれ得る。通信インターフェース２８０には、装置２００と、他の装置及び／又はシステムとの間の通信を可能にするあらゆる送受信機型機構が含まれ得る。例えば、通信インターフェース２８０には、別の装置又はシステムとネットワークを介して通信するための機構が含まれ得る。
【００２４】
本明細書に記載される装置２００は、プロセッシングユニット２２０が、メインメモリ２３０等のコンピュータ可読媒体内に含まれるソフトウェア命令を実行するのに応じて、いくらかの動作を実行可能である。コンピュータ可読媒体は、物理メモリ装置、又は論理メモリ装置として定義され得る。論理メモリ装置は、単一の物理メモリ装置内に又は複数の物理メモリ装置に渡って分散してメモリ空間を含み得る。記憶装置２５０等の別のコンピュータ可読媒体、又は別の装置から通信インターフェース２８０を介して、ソフトウェア命令をメインメモリ２３０に読み込むことが出来る。メインメモリ２３０内に含まれるソフトウェア命令により、プロセッシングユニット２２０は、本明細書に記載する処理を行う。あるいは、ソフトウェア命令の代わりに、又はソフトウェア命令と組合せて、配線回路を使用して、本明細書に記載する処理を実行することも可能である。従って、本明細書に記載の実施形態は、あらゆる特別な組合せハードウェア回路及びソフトウェアには限定されない。
【００２５】
図２には装置２００の構成要素の例が示されているが、他の実施形態では、装置２００は、より少ない構成要素、異なる構成要素、異なって配列される構成要素、又は図２に示される以外の付加的な構成要素を含み得る。あるいは、又はそれに加えて、１つ以上の装置２００の構成要素は、別の装置２００の１つ以上の構成要素により実行可能とされる、１つ以上の他のタスクを実行することが出来る。
【００２６】
図３は、装置２００のプロセッシングユニット２２０及びメインメモリ２３０の構成要素の例を示す説明図である。ある実施形態では、図３に示される構成要素は、メモリスケジューリング機構３００を形成し得る。図示する通り、プロセッシングユニット２２０は、マルチプルコア３１０−１、３１０−２、３１０−３等（集合的に本明細書では「コア３１０」と呼ぶ）、及びメモリ制御装置３２０を含み得る。メインメモリ２３０は、マルチプルメモリバンク３３０−１、３３０−２等（集合的に本明細書では「メモリバンク３３０」と呼ぶ）を含み得る。
【００２７】
コア３１０は単一の集積回路ダイ（例えば、チップ・マルチプロセッサ（ＣＭＰ））上に組み込まれ得る又は単一のチップパッケージ内のマルチプルダイ上に組み込まれ得る。各コア３１０は、プロセッサ、マイクロプロセッサ、又は命令を理解し実行可能なその他の種類のプロセッシングユニットを含み得る。
【００２８】
本明細書に記載する動作を実行するために、メモリ制御装置３２０は、１つ以上のプロセッサ、マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、命令を理解し実行可能なその他の種類の処理論理回路（例えば、メモリ制御装置３２０のコンピュータ可読媒体に含まれる）を含み得る。ある実施形態では、メモリ制御装置３２０は、メインメモリ２３０に行き来するデータの流れを管理するデジタル回路を含み得る。メモリ制御装置３２０は、独立したチップでよい、又は、プロセッシングユニット２２０のダイ等の別のチップに組み込むことも可能である。メモリ制御装置３２０は、メインメモリ２３０を通して電流を送ることで、メインメモリ２３０からの読出し、及びメインメモリ２３０への書込みを行うための、及びメインメモリ２３０の再書込みを行うための、論理回路を含み得る。メインメモリ２３０からの読出し、メインメモリ２３０への書込みは、マルチプレクサ及びデマルチプレクサを用いることにより、容易になり得る。メモリ制御装置３２０は、メインメモリ２３０の正確な行と列のアドレスを、マルチプレクサへの入力として選択することが出来る。デマルチプレクサは、メインメモリ２３０の正確な記憶場所を選択することが出来、その記憶場所に関連するデータを戻すことが出来る。別の実施形態では、メモリ制御装置３２０は、プロセッシングユニット２２０の機能要素でよい。
【００２９】
各メモリバンク３３０は、メインメモリ２３０内に格納されるデータの個々のセクションを含み得る。ある例では、各メモリバンク３３０は、一時的に格納され、メモリキャッシュとして使用されるデータを含み得る。メモリバンク３３０は、連続して命令を受けることが出来、これにより、メインメモリ２３０内に格納された個々の項目への簡単なアクセスを提供することが出来る。各メモリバンク３３０は、別々に移動する情報を処理出来るよう設計され得るメインメモリ２３０の物理セクションを含み得る。
【００３０】
さらに図３に示す通り、メモリ制御装置３２０は、シングルスレッドアプリケーション（ＡＰＰ＿Ａ）３４０と、２つのスレッド（例えば、スレッド（ＡＰＰ＿Ｂ１）３５０−１及びスレッド（ＡＰＰ＿Ｂ２）３５０−２）を含むマルチスレッドアプリケーション（ＡＰＰ＿Ｂ）３５０、に関するメモリスケジューリングスキームを設けることが出来る。シングルスレッドアプリケーション３４０は、コア３１０−１により実行され得、メモリバンク３３０−１に関連し得る。スレッド３５０−１は、コア３１０−２により実行され得、メモリバンク３３０−１に関連し得る。スレッド３５０−２は、コア３１０−３により実行され得、メモリバンク３３０−２に関連し得る。従って、図３に示されるメモリスケジューリング機構３００は、図１に示したメモリスケジューリング機構１００と類似し得る。
【００３１】
しかし、従来のメモリスケジューリングスキーム（例えば上記に、図１に関連して記載）とは異なり、マルチスレッドアプリケーションがアイドルスレッドを含む場合、メモリ制御装置３２０は、マルチスレッドアプリケーション（例えば、マルチスレッドアプリケーション３５０）のスレッド（例えば、スレッド３５０−１及びスレッド３５０−２）を優先させる、費用効率の良いメモリスケジューリングスキームを設け得る。説明のため、マルチスレッドアプリケーション３５０が、アイドルスレッド（例えば、スレッド３５０−２はアイドルでよい）を含むと仮定する。スレッドは、いくつかの理由でアイドルになり得る。例えば、上記に図１に関連して記載する通り、バリアでの負荷の不均衡により、それ以前にバリアに到達したスレッドがアイドルになる。 別の例では、ロックにより保護される重要セクションに、マルチスレッドアプリケーションのスレッドのうちの１つだけが入ることが出来、その他の（マルチスレッドアプリケーション等の）スレッドはその重要なセクションに入るために待機しアイドルとなる。さらに別の例では、マルチスレッドアプリケーションの単一のスレッドにより、マルチスレッドアプリケーションのアルゴリズムにより並べられる領域を実行することが出来き、これにより、マルチスレッドアプリケーションの、その他のスレッドがアイドルとなる。アイドルスレッドを有するマルチスレッドアプリケーションのスレッドを優先することで、メモリ制御装置３２０は、アイドルスレッドが非効率的な実行段階を速やかに終了するのを助け、マルチスレッドアプリケーションを、全てのスレッドが完全に並列で実行される、実行段階に戻すことが出来る。
【００３２】
ある実施形態では、メモリ制御装置３２０は、（例えば、オペレーティングシステムにより第１のグループに関連する）マルチスレッドアプリケーション３５０のスレッド３５０−１及び３５０−２と、（例えば、オペレーティングシステムにより第２のグループに関連する）シングルスレッドアプリケーション３４０のスレッドと、を受け取り得る。メモリ制御装置３２０は、第１のグループ内及び第２のグループ内のアイドルスレッド（例えば、スレッド３５０−２）の数を判定し、アイドルスレッドの数に基づいて、第１のグループ及び第２のグループを順位付けすることが出来る。例えば、第１のグループは、アイドルスレッド（例えば、スレッド３５０−２）を含み得、第２のグループは、アイドルスレッドを含み得ないため、メモリ制御装置３２０は、第１のグループを、第２のグループより高く順位付けることが出来る。メモリ制御装置３２０は、高い順位のグループからのメモリ使用要求を、低い順位のグループからのメモリ使用要求よりも優先させることが出来る。例えば、メモリ制御装置３２０は、第１のグループからの（例えば、スレッド３５０−２からの）メモリ使用要求を、第２のグループからの（例えば、シングルスレッドアプリケーション３４０からの）メモリ使用要求よりも優先させることが出来る。
【００３３】
図３には、プロセッシングユニット２２０及びメインメモリ２３０の構成要素の例が示されているが、他の実施形態では、プロセッシングユニット２２０及び／又はメインメモリ２３０がより少ない構成要素、異なる構成要素、異なって配列される構成要素、又は図３に示される以外の付加的な構成要素を含み得る。あるいは、又はそれに加えて、１つ以上のプロセッシングユニット２２０及び／又はメインメモリ２３０の構成要素は、別のプロセッシングユニット２２０及び／又はメインメモリ２３０の１つ以上の構成要素により実行可能とされる、１つ以上の他のタスクを実行することが出来る。
【００３４】
メモリ制御装置の構成例
図４は、メモリ制御装置３２０の機能要素の例を示す説明図である。ある実施形態では、図４に関連して記載された機能要素は、１つ以上のプロセッサ、マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はメモリ制御装置３２０内に含まれる、その他の種類の処理論理回路により実行され得る。図４に示す通り、メモリ制御装置３２０は、スレッドグループ受取器４００、アイドルスレッド検知器４１０、グループランカ４２０、メモリスケジューラ４３０を含み得る。
【００３５】
スレッドグループ受取器４００は、１つ以上のアプリケーションに関連する１つ以上のスレッド４４０を受け取り、（例えば、装置２００のオペレーティングシステムにより規定される第１のスレッドグループに関する）スレッドグループ情報４５０−１及び（例えば、装置２００のオペレーティングシステムにより規定される第２のスレッドグループに関する）スレッドグループ情報４５０−２を、スレッド４４０に関して生成し得る、ハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。例えば、スレッドグループ受取器４００は、シングルスレッドアプリケーションのスレッドに関するスレッドグループ情報４５０−１、及びマルチスレッドアプリケーションのスレッドに関するスレッドグループ情報４５０−２を生成し得る。図４に示す通り、スレッドグループ受取器４００は、（例えば、第１の規定されたスレッドグループに関する）スレッドグループ情報４５０−１と、（例えば、第２の規定されたスレッドグループに関する）スレッドグループ情報４５０−２と、をアイドルスレッド検知器４１０及びグループランカ４２０に供給し得る。スレッドグループ受取器４００を、例えば、図５に関連して、以下にさらに詳細に説明する。
【００３６】
アイドルスレッド検知器４１０は、スレッドグループ受取器４００からのスレッドグループ情報４５０−１及び４５０−２と、スレッド４４０に関連する１つ以上のメモリ使用要求４６０と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。スレッドグループ情報４５０−１／４５０−２及びメモリ使用要求４６０に基づいて、アイドルスレッド検知器４１０は、スレッド４４０のうちのどれがアイドルなのか判定し、参照符号４７０で示す通り、判定されたアイドルスレッドをグループランカ４２０に供給することが出来る。アイドルスレッド検知器４１０を、例えば、図６に関連して、以下にさらに詳細に説明する。
【００３７】
グループランカ４２０は、スレッドグループ受取器４００からのスレッドグループ情報４５０−１及び４５０−２と、アイドルスレッド検知器４１０からのアイドルスレッド４７０と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。各スレッドグループ内のアイドルスレッド４７０の数に基づいて、グループランカ４２０は、（例えば、スレッドグループ情報４５０−１及び４５０−２により規定された）スレッドグループ内のスレッドを順位付けすることが出来る。参照符号４８０で示す通り、グループランカ４２０は、スレッドグループの順位をメモリスケジューラ４３０に供給することが出来る。グループランカ４２０を、例えば、図７に関連して、以下にさらに詳細に説明する。
【００３８】
メモリスケジューラ４３０は、グループランカ４２０からのスレッドグループの順位４８０と、スレッド４４０に関連する１つ以上のメモリ使用要求４６０と、を受け取ることが出来る、ハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。参照符号４９０で示す通り、スレッドグループの順位４８０に基づいて、メモリスケジューラ４３０は、メモリ使用要求４６０を優先させ、この優先されたメモリ使用要求４９０を、装置２００内で実行することが出来る。メモリスケジューラ４３０を、例えば、図８に関連して、以下にさらに詳細に説明する。
【００３９】
図４にはメモリ制御装置３２０の機能要素の例が示されているが、他の実施形態では、メモリ制御装置３２０は、より少ない機能要素、異なる機能要素、異なって配列される機能要素、又は図４に示される以外の付加的な機能要素を含み得る。あるいは、又はそれに加えて、１つ以上のメモリ制御装置３２０の機能要素は、メモリ制御装置３２０の１つ以上の別の機能要素により実行可能とされる、１つ以上の他のタスクを実行することが出来る。
【００４０】
図５は、メモリ制御装置３２０のスレッドグループ受取器４００の機能要素の例を示す説明図である。ある実施形態では、図５に関連して記載された機能要素は、１つ以上のプロセッサ、マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はメモリ制御装置３２０内に含まれるその他の種類の処理論理回路により、実行され得る。図５に示す通り、スレッドグループ受取器４００は、コア毎のグループ識別（ＩＤ）レジスタ５００を含み得る。
【００４１】
コア毎のグループＩＤレジスタ５００は、例えば、装置２００のオペレーティングシステムからのスレッド情報５１０及びグループＩＤ情報５２０を受け取ることが出来る、ハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。ある例では、同じアプリケーションのスレッドを同時に実行するとき、オペレーティングシステムが、（例えば、調整されたスレッドスケジューリングに関して）スレッド情報５１０を生成することが出来る。グループＩＤ情報５２０は、各コア上（例えば、各コア３１０）で実行されるスレッドのグループＩＤを含み得る。オペレーティングシステムが、特定のスレッドをコア上（例えば、コア３１０のうちの１つ）でスケジューリングするとき、オペレーティングシステムは、特定のスレッドのグループＩＤ（例えば、グループＩＤ情報５２０）を有するコア毎のグループＩＤレジスタ５００更新することが出来る。
【００４２】
ある例示的な実施形態では、メインスレッドがシングルスレッドアプリケーションであるかのように、オペレーティングシステムにより、マルチスレッドアプリケーションのメインスレッドを実行可能である。オペレーティングシステムは、グループ識別（ＩＤ）をメインスレッドに割り当てることが出来る。メインスレッドがより多くのスレッドを生成するとき、オペレーティングシステムは、このグループＩＤ（例えば、グループＩＤ情報５２０）を、生成されたスレッドに割り当てることが出来る。マルチスレッドアプリケーションのスレッドのうちの１つをスケジューリングして、特定のコア（例えば、コア３１０のうちの１つ）上で実行するとき、コア毎のグループＩＤレジスタ５００は、そのスレッドを設定して、グループＩＤに対して実行可能である。さらに図５に示す通り、スレッド情報５１０及びグループＩＤ情報５２０に基づいて、コア毎のグループＩＤレジスタ５００は、スレッドグループ情報４５０−１及びスレッドグループ情報４５０−２を生成することが出来る。
【００４３】
図５にはスレッドグループ受取器４００の機能要素の例が示されているが、他の実施形態では、スレッドグループ受取器４００は、より少ない機能要素、異なる機能要素、異なって配列される機能要素、又は図５に示される以外の付加的な機能要素を含み得る。あるいは、又はそれに加えて、スレッドグループ受取器４００の１つ以上の機能要素は、スレッドグループ受取器４００の１つ以上の別の機能要素により実行可能とされる、１つ以上の他のタスクを実行することが出来る。
【００４４】
図６は、メモリ制御装置３２０のアイドルスレッド検知器４１０の機能要素の例を示す説明図である。ある実施形態では、図６に関連して記載された機能要素は、１つ以上のプロセッサ、マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はメモリ制御装置３２０内に含まれるその他の種類の処理論理回路により実行することが出来る。図６に示す通り、アイドルスレッド検知器４１０は、１つ以上のビット６１０−１、・・・６１０−４（集合的に本明細書では「ビット６１０」と呼ぶ）を含み得る休止コア（ｉｎａｃｔｉｖｅ  ｃｏｒｅ）のビットベクトル６００を含み得る。
【００４５】
休止コアのビットベクトル６００は、スレッドグループ受取器４００からのスレッドグループ情報４５０−１及び４５０−２と、メモリ使用要求４６０と、期間６２０と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。スレッドグループ情報４５０−１及び４５０−２に基づいて、休止コアのビットベクトル６００は各ビット６１０を、スレッド４４０のうちの１つ、及びその対応するコア（例えば、コア３１０のうちの１つ）に関連付けることが出来る。例えば、休止コアのビットのベクトル６００は、ビット６１０−１をシングルスレッドアプリケーションのスレッドに関連付けることが出来、ビット６１０−２をマルチスレッドアプリケーションの第１のスレッドに関連付けることが出来、ビット６１０−３をマルチスレッドアプリケーションの第２のスレッドに関連付けることが出来る。休止コアのビットベクトル６００は、期間６２０の始まりに周期的に各ビット６１０を（例えば、特定の値に）設定することが出来る。期間６２０は可変のパラメータでよく、メモリ制御装置３２０を使用する装置２００の種類及び／又は装置２００により実行されるアプリケーションの種類に基づいて、設定され得る。ある例では、期間６２０はアプリケーションの状態の変化に素早く適用するのに十分な程短くてよいが、しかしコア（例えば、コア３１０のうちの１つ）がアイドルでないときに、アイドルであると誤って判断することを防止するのに十分な程長くてよい。ある実施形態では、期間６２０は約１，０００のクロックサイクルの値に設定され得る。
【００４６】
対応するコア上で実行中の（例えば、スレッドグループ情報４５０−１及び４５０−２により規定された）スレッドからメモリ使用要求（例えば、メモリ使用要求４６０）があるとき、休止コアのビットベクトル６００は、ビット６１０のうちの１つをリセットすることが出来る。例えば、図６に示す通り、ビット６１０−１、６１０−２、及び６１０−４は、対応するコア上で実行中のスレッドからのメモリ使用要求４６０に関連し得る。従って、休止コアのビットベクトル６００は、ビット６１０−１、６１０−２、及び６１０−４をリセットすることが出来る。ビット６１０−３は、メモリ使用要求に関連しないため、休止コアのビットベクトル６００は、ビット６１０−３をリセットすることが出来ない。参照符号４７０で示す通り、ビット（例えば、ビット６１０−３）が、その設定を期間６２０の終わりに維持している場合、休止コアのビットベクトル６００は、ビット６１０−３に対応するコア上で実行中のスレッドは、期間６２０の間、アイドルであると判定することが出来る。休止のビットコアベクトル６００は、アイドルスレッドの印４７０を出力し得る。
【００４７】
図６には、アイドルスレッド検知器４１０の機能要素の例が示されているが、他の実施形態では、アイドルスレッド検知器４１０は、異なる機能要素、異なって配列される機能要素、又は図６に示される以外の付加的な機能要素を含み得る。
【００４８】
図７は、メモリ制御装置３２０のグループランカ４２０の機能要素の例を示す説明図である。ある実施形態では、図７に関連して記載された機能要素は、１つ以上のプロセッサ、マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はメモリ制御装置３２０内に含まれるその他の種類の処理論理回路により実行され得る。図７に示す通り、グループランカ４２０は、順位機構７００を含み得る。
【００４９】
順位機構７００は、スレッドグループ受取器４００からのスレッドグループ情報４５０−１及び４５０−２（図示せず）と、アイドルスレッド検知器４１０からのアイドルスレッドの印４７０（図示せず）と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。順位機構７００は、（例えば、スレッドグループ情報４５０−１及び４５０−２により規定された）１つ以上のスレッドグループ内のビット６１０と、１つ以上のスレッドグループに関連する（例えば、スレッドグループ情報４５０−１及び４５０−２により規定された）スレッドと、を受け取ることが出来る。例えば、図７に示す通り、順位機構７００は、スレッドグループ（ｇ）７２０内のビット６１０−２及び６１０−３と、スレッドグループ（ｇ）７２０に関連するスレッド７３０と、を（例えば、期間６２０の終わりに）受け取ることが出来る。スレッドグループ（ｇ）７２０内のビット６１０−２及び６１０−３に基づいて、順位機構７００は、スレッドグループ（ｇ）７２０の順位７４０−１を判定することが出来る。ある実施形態では、順位機構７００は、（例えば、スレッドグループ（ｇ）７２０により占有されたアイドルコアに対応する）ビット６１０−２及び６１０−３の値を加えることにより、スレッドグループ（ｇ）７２０の順位７４０−１を判定することが出来る。
【００５０】
ある実施形態では、順位機構７００は、スレッドグループ（ｇ）７２０の順位７４０−１を以下の等式に従って判定することが出来る。：
2013528305.tif 000003
但し、Ｒａｎｋｇはスレッドグループ（ｇ）の順位に対応し得、Ｍはスレッドグループ（ｇ）に属するスレッドの総数に対応し得、ｍはスレッドグループ（ｇ）に用いられるコアに対応し得、ＩＣはスレッドグループ（ｇ）に占有されるアイドルコアの数に対応し得、ＣｏｒｅＩＤｍはスレッドグループ（ｇ）に使用されるｍ番目のコアのＩＤに対応し得る。従って、スレッドグループ（ｇ）の順位は、スレッドグループにより占有されるアイドルコアの数と等しくてよい。
【００５１】
スレッドグループの全てのスレッドが動作中の場合（例えば、コア３１０のうちの１つにより実行される）、スレッドグループの全ての対応するビット６１０はリセットされ得、スレッドグループの順位は０と判定され得る。１つ以上のスレッドグループのスレッド（例えば、コア３１０のうちの１つにより実行されていない、アイドルスレッド４７０等の）がアイドルの場合、スレッドグループの１つ以上のビット６１０が設定され得（例えば、リセットされず）、スレッドグループの順位は、０より大きいと判定され得る。例えば、図７に示す通り、ビット６１０−３が設定されているため（例えば、スレッドグループ（ｇ）が、アイドルスレッド４７０を含むことを示す）、順位機構７００はスレッドグループ（ｇ）の順位７４０−１が０より大きな値と判定することが出来る。順位機構７００は、その他のスレッドグループの順位７４０−２及び７４０−３を判定し、（例えば、スレッドグループの順位４８０に対応出来る）順位７４０−１、７４０−２、及び７４０−３を出力することが出来る。さらに図６に示す通り、順位７４０−２は０であり得、対応するスレッドグループの全てのスレッドが動作中であることを示す（例えば、コア３１０のうちの１つにより実行される）。
【００５２】
図７にはグループランカ４２０の機能要素の例が示されているが、他の実施形態では、グループランカ４２０は、異なる機能要素、異なって配列される機能要素、又は図７に示される以外の付加的な機能要素を含み得る。
【００５３】
図８は、メモリ制御装置３２０のメモリスケジューラ４３０の機能要素の例を示す説明図である。ある実施形態では、図８に関連して記載された機能要素は、１つ以上のプロセッサ、マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はメモリ制御装置３２０内に含まれるその他の種類の処理論理回路により実行され得る。図８に示す通り、メモリスケジューラ４３０は、グループ順位規則要素８００、準備完了順規則要素８１０、及び先着順規則要素８２０含み得る。
【００５４】
参照符号８３０で示す通り、グループ順位規則要素８００は、メモリ使用要求４６０及びスレッドグループの順位４８０を（例えば、グループランカ４２０から）受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得、スレッドグループの順位４８０に基づいて、メモリ使用要求４６０を優先させることが出来る。例えば、グループ順位規則要素８００は、より高いスレッドグループ順位を有するスレッドグループからのメモリ使用要求をより低いスレッドグループ順位を有するスレッドグループからのメモリ使用要求よりも優先させることが出来る。
【００５５】
グループ順位規則要素８００は、（例えば、アイドルスレッドグループ及びコアに関連する）メモリ使用要求が優先されていることを保証することが出来る。アイドルスレッドグループ及びコアは、メモリ制御装置３２０に自己のアイドル状態（例えば、スレッドグループ順位４８０）を知らせることが出来、これにより、メモリ帯域幅を周辺のコアと共有しようとするアイドルコア（例えば、同じスレッドグループに占有された別のコア）をメモリ制御装置３２０に表示する。次に、メモリ制御装置３２０は、周辺のコアを優先させようと試みる。これにより、コアのアイドル時間を少なくすることで、全システムに渡って処理量を増加させる。これにより、アイドルコアにより消費され得る静的電力及び／又は漏れ電力を少なくすることで、システムの電力消費を抑えることも出来る。
【００５６】
準備完了順規則要素８１０は、メモリ使用要求４６０と、メモリ使用要求４６０に関連する行バッファ情報８４０と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。行バッファ情報８４０は、メモリ使用要求４６０のうちのどれが、行バッファ（例えば、メインメモリ２３０）をヒットしているか、又は行バッファをヒットしていないかを表示することが出来る。参照符号８５０で示す通り、行バッファ情報８４０に基づいて、準備完了順規則要素８１０は、メモリ使用要求４６０を優先させることが出来る。例えば、準備完了順規則要素８１０は、行バッファをヒットしているメモリ使用要求を、行バッファをヒットしていないメモリ使用要求よりも優先させることが出来る。
【００５７】
先着順規則要素８２０は、メモリ使用要求４６０と、メモリ使用要求４６０に関連する時間情報８６０と、を受け取ることが出来るハードウェア、又はハードウェア及びソフトウェアの組合せを含み得る。時間情報８６０は、メモリ使用要求４６０が（例えば、メインメモリ２３０に）到着した時間を表示することが出来る。参照符号８７０で示す通り、時間情報８６０に基づいて、先着順規則要素８２０は、メモリ使用要求４６０を優先させることが出来る。例えば、先着順要素８２０は、（例えば、メインメモリ２３０に）早い時間に到着したメモリ使用要求を、（例えば、メインメモリ２３０に）遅い時間に到着したメモリ使用要求よりも優先させることが出来る。
【００５８】
さらに図８に示す通り、グループ優先メモリ使用要求８３０、行バッファ優先メモリ使用要求８５０、及び／又は時間優先メモリ使用要求８７０により、優先メモリ使用要求４９０を形成することが出来る。ある実施形態では、１番目にグループ順位規則要素８００を、２番目に準備完了順規則要素８１０を、３番目に先着順規則要素８２０を用いることにより、メモリスケジューラ４３０は、（例えば、優先させる）メモリ使用要求４６０をスケジューリングすることが出来る。
【００５９】
図８にはメモリスケジューラ４３０の機能要素の例が示されているが、他の実施形態では、メモリスケジューラ４３０は、より少ない機能要素、異なる機能要素、異なって配列される機能要素、又は図８に示される以外の付加的な機能要素を含み得る。あるいは、又はそれに加えて、メモリスケジューラ４３０の１つ以上の機能要素は、メモリスケジューラ４３０の１つ以上の別の機能要素により実行可能とされる、１つ以上の他のタスクを実行することが出来る。
【００６０】
メモリ制御装置の動作例
図９Ａ及び図９Ｂは、スレッドグループ受取器４００（図４）により実行され得る例示の動作９００の説明図である。図９Ａに示す通り、シングルスレッドアプリケーション９１０（例えば、ＡＰＰ＿Ａ）は、マルチコアプロセッサのコア３１０−１（例えば、プロセッシングユニット２２０）及びメモリバンク３３０−１（図示せず）に関連する２つのメモリ使用要求９２０−１及び９２０−２を含み得る。マルチスレッドアプリケーション（例えば、ＡＰＰ＿Ｂ）は、２つのスレッド（例えば、ＡＰＰ＿Ｂ１スレッド９３０及びＡＰＰ＿Ｂ２スレッド９５０）と、同期のためのバリアと、を含み得る。スレッド９３０は、プロセッシングユニット２２０及びメモリバンク３３０−１（図示せず）のコア３１０−２に関連し得、バリアの後に供給される２つのメモリ使用要求９４０−６及び９４０−７と、バリアの前に供給される３つのメモリ使用要求９４０−３、９４０−４、及び９４０−５と、を含み得る。スレッド９５０は、プロセッシングユニット２２０及びメモリバンク３３０−２（図示せず）のコア３１０−３に関連し得、バリアの後に供給される２つのメモリ使用要求９４０−１及び９４０−２を含み得る。
【００６１】
マルチスレッドのアプリケーションＡＰＰ＿Ｂは、スレッド９３０をメモリバンク３３０−１にアクセスさせ、スレッド９５０をメモリバンク３３０−２にアクセスさせることにより、バンクレベルの並列処理を利用するよう設計され得る。説明のため、バリアの周りに想定される負荷の不均衡（例えば、実行時間に完全な負荷均衡を保つことが困難であり得るために起こり得る）により、スレッド９５０がスレッド９３０より先にバリアに到達すると仮定する。負荷の不均衡により、スレッド９５０に関連するメモリ使用要求９４０−１及び９４０−２が、メモリバンク３３０−２へのアクセスを妨げ、これにより、コア３１０−３はアイドル状態となる。コア３１０−３は、スレッド９３０に関連するメモリ使用要求９４０−３、９４０−４、及び９４０−５が処理されるまで、アイドル状態を保つことが出来る。従って、（例えば、コア３１０−３は５周期とは対照的にたった３周期の間だけアイドルでいるように）、スレッド９３０に関連するメモリ使用要求９４０−３、９４０−４、及び９４０−５は、シングルスレッドアプリケーション９１０に関連するメモリ使用要求９２０−１及び９２０−２よりも優先権を与えられるべきである。
【００６２】
図９Ｂに示す通り、（例えば、メモリ制御装置３２０の）スレッドグループ受取器４００は、（例えば、スレッド４４０に対応し得る）スレッド９１０、９３０、及び９５０と、スレッド情報５１０と、グループＩＤ情報５２０と、を受け取ることが出来る。例えば、スレッドグループ受取器４００は、シングルスレッドアプリケーションＡＰＰ＿Ａのスレッド９１０に関するグループＩＤと、マルチスレッドアプリケーションＡＰＰ＿Ｂのスレッド９３０及び９５０に関する別のグループＩＤと、を受け取ることが出来る。スレッド情報５１０及びグループＩＤ情報５２０に基づいて、スレッドグループ受取器４００は、スレッド９１０、９３０、及び９５０に関するスレッドグループ情報４５０−１及び４５０−２を生成することが出来る。例えば、スレッドグループ受取器４００は、（例えば、シングルスレッドアプリケーションＡＰＰ＿Ａのスレッド９１０に関する）スレッドグループ情報４５０−１及び（例えば、マルチスレッドアプリケーションＡＰＰ＿Ｂのスレッド９３０及び９５０に関する）スレッドグループ情報４５０−２を生成することが出来る。
【００６３】
図９Ａ及び図９Ｂには、スレッドグループ受取器４００により実行可能な動作の例が示されているが、他の実施形態では、スレッドグループ受取器４００は、より少ない動作、異なる動作、又は図９Ａ及び図９Ｂに示される以外の付加的な動作を行うことが出来る。
【００６４】
図１０Ａ及び図１０Ｂは、アイドルスレッド検知器４１０（図６）により実行可能な例示の動作１０００の説明図である。図１０Ａに示す通り、バリアの周りに想定される負荷の不均衡により、スレッド９５０はスレッド９３０より先にバリアに到達し得る。参照符号１０１０で示す通り、この負荷の不均衡が、スレッド９５０に関連するメモリ使用要求９４０−１及び９４０−２の、メモリバンク３３０−２（図示せず）へのアクセスを妨げ得、これによりコア３１０−３はアイドル状態となり得、スレッド９５０がアイドルとなり得る。
【００６５】
図１０Ｂに示す通り、アイドルスレッド検知器４１０の休止コアのビットベクトル６００は、（例えば、コア３１０−１に関する）ビット６１０−１、（例えば、コア３１０−２に関する）ビット６１０−２、及び（例えば、コア３１０−３に関する）ビット６１０−３を含み得る。ビット６１０−１は、対応するコア（例えば、コア３１０−１）上で実行中のスレッド（例えば、スレッド９１０）からのメモリ使用要求９２０−１及び９２０−１に関連し得るため、このビット６１０−１は、休止コアのビットベクトル６００により、（例えば、０の値に）リセットされ得る。ビット６１０−２は、対応するコア（例えば、コア３１０−２）上で実行中のスレッド（例えば、スレッド９３０）からのメモリ使用要求９４０−３、９４０−４、及び９４０−５に関連し得るため、ビット６１０−２は、休止コアのビットベクトル６００により、（例えば、０の値に）リセットされ得る。ビット６１０−３は、対応するコア（例えば、コア３１０−３）上で実行中のスレッドからのメモリ使用要求に関連しえないため、このビット６１０−３は、（例えば、０より大きい値に）設定され得る。参照符号１０２０で示す通り、ビット６１０−３が期間６２０の終わりに設定を維持している場合、休止コアのビットベクトル６００は、ビット６１０−３に対応するコア（例えば、コア３１０−３）上で実行中のスレッド（例えば、スレッド９５０）が、期間６２０の間、アイドル状態であることを判定し得る。休止ビットコアベクトル６００は、アイドルスレッドの印１０２０を出力することが出来る。
【００６６】
図１０Ａ及び図１０Ｂには、アイドルスレッド検知器４１０により実行可能な動作の例が示されているが、他の実施形態では、アイドルスレッド検知器４１０は、より少ない動作、異なる動作、又は図１０Ａ及び図１０Ｂに示される以外の付加的な動作を行うことが出来る。
【００６７】
図１１は、グループランカ４２０（図７）により実行可能な例示の動作１１００の説明図である。図示する通り、グループランカ４２０の順位機構７００は、シングルスレッドアプリケーションＡＰＰ＿Ａに関するビット１１１０及びマルチスレッドアプリケーションＡＰＰ＿Ｂに関するビット１１２０を受け取ることが出来る。上記に図１０Ｂに関連して記載する通り、ビット１１１０は、（例えば、０の値に）リセットされ得るビット６１０−１を含み得る。上記に図１０Ｂに関連して記載する通り、ビット１１２０は、（例えば、０の値に）リセットされ得るビット６１０−２と、（例えば、０より大きい値に）設定され得るビット６１０−３と、を含み得る。
【００６８】
順位機構７００は、ビット１１１０に関連する値に基づいて、シングルスレッドアプリケーションＡＰＰ＿Ａの順位１１３０を判定することが出来る。図１１に示す通り、ビット６１０−１は０の値に設定されるため、シングルスレッドアプリケーションＡＰＰ＿Ａの順位１１３０は０と判定される。順位機構７００は、ビット１１２０に基づいて、マルチスレッドアプリケーションＡＰＰ＿Ｂの順位１１４０を判定することが出来る。ある実施形態では、順位機構７００は、ビット６１０−２及び６１０−３の値を加えることにより、マルチスレッドアプリケーションＡＰＰ＿Ｂの順位１１４０を判定することが出来る。図１１に示す通り、ビット６１０−２は、０の値に設定され、且つビット６１０−３は０より大きい値に設定されるため、マルチスレッドアプリケーションＡＰＰ＿Ｂの順位１１４０は、０より大きい値と判定することが出来る。
【００６９】
図１１には、グループランカ４２０により実行可能な動作の例が示されているが、他の実施形態では、グループランカ４２０は、より少ない動作、異なる動作、又は図１１に示される以外の付加的な動作を行うことが出来る。
【００７０】
図１２Ａ及び図１２Ｂは、メモリスケジューラ４３０（図８）により実行可能な例示の動作１２００の説明図である。図１２Ａに示す通り、（例えば、シングルスレッドアプリケーションＡＰＰ＿Ａの）スレッド９１０は、メモリバンク３３０−１からメモリに要求されるメモリ使用要求９２０−１及び９２０−２を含み得る。（例えば、マルチスレッドアプリケーションＡＰＰ＿Ｂの）スレッド９３０は、メモリバンク３３０−１からメモリに要求されるメモリ使用要求９４０−３、９４０−４、及び９４０−５を含み得る。
【００７１】
図１２Ｂを参照すると、メモリスケジューラ４３０のグループ順位規則要素８００は、スレッド９３０に関連するメモリ使用要求９４０−３、９４０−４、及び９４０−５を、スレッド９１０に関連するメモリ使用要求９２０−１及び９２０−２よりも優先させ、これにより、コア３１０−３は、５周期とは対照的にたった３周期の間だけアイドルを維持する。図１２Ｂに示す通り、グループ順位規則要素８００は、シングルスレッドアプリケーションＡＰＰ＿Ａの順位１１３０と、マルチスレッドアプリケーションＡＰＰ＿Ｂの順位１１４０と、を受け取ることが出来、参照符号１２１０で示す通り、順位１１３０及び１１４０に基づいて、マルチスレッドアプリケーションＡＰＰ＿ＢをシングルスレッドアプリケーションＡＰＰ＿Ａよりも優先させることが出来る。例えば、図１２Ａを参照すると、（例えば、スレッド９３０の）メモリ使用要求９４０−３、９４０−４、及び９４０−５は、メモリバンク３３０−１のそれぞれ指定された行１、行２、及び行３でよく、メモリ使用要求９２０−１及び９２０−２（例えば、スレッド９１０の）は、メモリバンク３３０−１の指定された行４でよい。メモリバンク３３０−１の行１〜行３は、メモリバンク３３０−１の行４よりも早く到着したため、メモリ使用要求９４０−３、９４０−４、及び９４０−５は、メモリ使用要求９２０−１及び９２０−２の前に処理される。
【００７２】
マルチスレッドアプリケーションＡＰＰ＿ＢをシングルスレッドアプリケーションＡＰＰ＿Ａよりも優先することにより、メモリ制御装置３２０は、マルチスレッドアプリケーションＡＰＰ＿Ｂのアイドリング時間を５周期（例えば、ＦＲＦＣＦＳ及びＰＡＲ−ＢＳ機構の場合では）から３周期に短縮することが出来る。コア３１０−３が先に有用な作業を実行し始めることが出来るため、これによりシステム全般に渡って処理量を改善することが出来る。またこれにより、アイドルコア３１０−３により消費され得る静的電力及び／又は漏れ電力を減らすことで、システムの電力消費も抑えることが出来る。
【００７３】
図１２Ａ及び図１２Ｂには、メモリスケジューラ４３０により実行可能な動作の例が示されているが、他の実施形態では、メモリスケジューラ４３０は、より少ない動作、異なる動作、又は図１２Ａ及び図１２Ｂに示される以外の付加的な動作を行うことが出来る。
【００７４】
図１３〜図１５は、本明細書に記載の実施形態による、マルチスレッドアプリケーション・アウェア・メモリスケジューリングに関する例示のプロセス１３００を示すフローチャートである。ある実施形態では、プロセス１３００は、装置２００（図２）により実行可能である。別の実施形態では、プロセス１３００のいくつか又は全ては装置２００の１つ以上の構成要素により、例えばメモリ制御装置３２０により実行可能である。
【００７５】
図１３に示す通り、プロセス１３００は、第１のグループに関連するマルチスレッドアプリケーションのスレッドを受け取ること（ブロック１３１０）と、第２のグループに関連するシングルスレッドアプリケーションのスレッドを受け取ること（ブロック１３２０）と、を含み得る。例えば、上記に図４に関連して記載された実施形態では、メモリ制御装置３２０のスレッドグループ受取器４００は、１つ以上のアプリケーションに関連する１つ以上のスレッド４４０を受け取ることが出来、（例えば、装置２００のオペレーティングシステムにより規定される第１のスレッドグループに関する）スレッド４４０に関するスレッドグループ情報４５０−１、及び（例えば、装置２００のオペレーティングシステムにより規定される第２のスレッドグループに関する）スレッドグループ情報４５０−２を生成することが出来る。ある例では、スレッドグループ受取器４００は、シングルスレッドアプリケーションのスレッドに関する、（例えば、オペレーティングシステムにより規定された）スレッドグループ情報４５０−１と、マルチスレッドアプリケーションのスレッドに関する、（例えば、オペレーティングシステムにより規定された）スレッドグループ情報４５０−２と、を生成することが出来る。
【００７６】
さらに図１３に示す通り、プロセス１３００は、第１のグループ内及び第２のグループ内のアイドルスレッドの数を判定すること（ブロック１３３０）を含み得る。例えば、上記に図４に関連して記載された実施形態では、メモリ制御装置３２０のアイドルスレッド検知器４１０は、スレッドグループ受取器４００からのスレッドグループ情報４５０−１及び４５０−２と、スレッド４４０に関連する１つ以上のメモリ使用要求４６０と、を受け取ることが出来る。参照符号４７０で示す通り、アイドルスレッド検知器４１０は、スレッドグループ情報４５０−１／４５０−２及びメモリ使用要求４６０に基づいて、スレッド４４０のうちのどれがアイドルなのかを判定し、判定されたアイドルスレッドをグループランカ４２０に供給することが出来る。
【００７７】
図１３に戻ると、プロセス１３００は、判定されたアイドルスレッドの数に基づいて、第１のグループ及び第２のグループの順位付けを行うこと（ブロック１３４０）を含み得る。例えば、上記に図４に関連して記載された実施形態では、メモリ制御装置３２０のグループランカ４２０は、スレッドグループ受取器４００からのスレッドグループ情報４５０−１及び４５０−２と、アイドルスレッド検知器４１０からのアイドルスレッド４７０と、を受け取ることが出来る。グループランカ４２０は、各スレッドグループ内のアイドルスレッド４７０の数に基づいて、（例えば、スレッドグループ情報４５０−１及び４５０−２により規定された）スレッドグループ内のスレッドを順位付けることが出来る。参照符号４８０で示す通り、グループランカ４２０は、スレッドグループの順位をメモリスケジューラ４３０に供給することが出来る。
【００７８】
さらに図１３に示す通り、プロセス１３００は、高い順位のグループからのメモリ使用要求を、低い順位のグループからのメモリ使用要求よりも優先すること（ブロック１３５０）を含み得る。例えば、上記に図４に関連して記載された実施形態では、メモリ制御装置３２０のメモリスケジューラ４３０は、グループランカ４２０からのスレッドグループの順位４８０と、スレッド４４０に関連する１つ以上のメモリ使用要求４６０と、を受け取ることが出来る。参照符号４９０で示す通り、メモリスケジューラ４３０は、スレッドグループの順位４８０に基づいて、メモリ使用要求４６０を優先させ、装置２００内で優先させたメモリ使用要求４９０を実行することが出来る。
【００７９】
プロセスブロック１３３０及びプロセスブロック１３４０は、図１４に示されるプロセスブロックを含み得る。図１４に示す通り、プロセスブロック１３３０及びプロセスブロック１３４０は、ビットベクトル内の第１のビットを第１のグループ内のスレッドの部分に関連付けること（ブロック１４００）と、ビットベクトル内の第２のビットを第１のグループ内のスレッドの残りの部分に関連付けること（ブロック１４１０）と、ビットベクトル内の第３のビットを第２のグループ内のスレッドに関連付けること（ブロック１４２０）と、含み得る。例えば、上記に図６に関連して記載された実施形態では、メモリ制御装置３２０の休止コアのビットベクトル６００は、スレッドグループ情報４５０−１及び４５０−２に基づいて、各ビット６１０をスレッド４４０のうちの１つ及びその対応するコア（例えば、コア３１０のうちの１つ）に関連付けることが出来る。ある例では、休止コアのビットベクトル６００は、ビット６１０−１をシングルスレッドアプリケーションのスレッドに関連付け、ビット６１０−２をマルチスレッドアプリケーションの第１のスレッドに関連付け、ビット６１０−３をマルチスレッドアプリケーションの第２のスレッドに関連付けることが出来る。
【００８０】
さらに図１４に示す通り、プロセスブロック１３３０及びプロセスブロック１３４０は、期間の始まりに、ビットベクトル内のビットを設定すること（ブロック１４３０）と、リセットされるビット（複数可）に関連するスレッド（複数可）に関して、１つ以上のメモリ使用要求が受け取られたとき、ビットベクトル内の１つ以上のビットをリセットすること（ブロック１４４０）と、を含み得る。例えば、上記に図６に関連して記載された実施形態では、休止コアのビットベクトル６００は、期間６２０の始まりに、各ビット６１０を（例えば、特定の値に）周期的に設定することが出来る。休止コアのビットベクトル６００は、対応するコア上で実行中の（例えば、スレッドグループ情報４５０−１及び４５０−２により規定された）スレッドからのメモリ使用要求（例えば、メモリ使用要求４６０）があるとき、ビット６１０のうちの１つをリセットすることが出来る。ある例では、ビット６１０−１、６１０−２、及び６１０−４は、対応するコア上で実行中のスレッドからのメモリ使用要求４６０に関連し得る。従って、休止コアのビットベクトル６００は、ビット６１０−１、６１０−２、及び６１０−４をリセットすることが出来る。ビット６１０−３は、メモリ使用要求に関連しないため、休止コアのビットベクトル６００は、ビット６１０−３をリセットすることが出来ない。
【００８１】
図１４に戻ると、プロセスブロック１３３０及びプロセスブロック１３３０は、期間の終わりに、ビットベクトル内に残る、設定されたビット（複数可）に基づいて、アイドルスレッドの数（複数可）を判定すること（ブロック１４５０）と、期間の終わりに残る、設定されたビット（複数可）の値（複数可）に基づいて、第１のグループ及び第２のグループの順位付けをすること（ブロック１４６０）と、含み得る。例えば、上記に図６及び図７に関連して記載された実施形態では、参照符号４７０で示す通り、ビット（例えば、ビット６１０−３）が、期間６２０の終わりに残る場合、休止コアのビットベクトル６００は、ビット６１０−３に対応するコア上で実行中のスレッドが、期間６２０の間、アイドルであると判定することが出来る。休止ビットコアベクトル６００は、アイドルスレッドの印４７０を出力することが出来る。参照符号８３０で示す通り、メモリ制御装置３２０のグループ順位規則要素８００は、メモリ使用要求４６０及びスレッドグループの順位４８０を（例えば、グループランカ４２０から）受け取ることが出来、スレッドグループの順位４８０に基づいて、メモリ使用要求４６０を優先させることが出来る。ある例では、グループ順位規則要素８００は、より高いスレッドグループ順位のスレッドグループからのメモリ使用要求を、より低いスレッドグループ順位のスレッドグループからのメモリ使用要求よりも優先させることが出来る。
【００８２】
プロセスブロック１３５０は、図１５に示されるプロセスブロックを含み得る。図１５に示す通り、プロセスブロック１３５０は、メモリ使用要求に関連するグループ順位に基づいて、メモリ使用要求の第１の優先権を判定すること（ブロック１５００）と、準備完了順規則に基づいて、メモリ使用要求の第２の優先権を判定すること（ブロック１５１０）と、先着順規則に基づいて、メモリ使用要求の第３の優先権を判定すること（ブロック１５２０）とを含み得る。例えば、上記に図８に関連して記載された実施形態では、メモリ制御装置３２０のメモリスケジューラ４３０は、１番目にグループ順位規則要素８００を用いて、２番目に準備完了順規則要素８１０を用いて、３番目に先着順規則要素８２０を用いて、メモリ使用要求４６０をスケジューリングする（例えば、優先させる）ことが出来る。
【００８３】
本明細書に記載するシステム 及び／又は 方法により、装置のメモリ制御装置（例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ装置、及び／又はその他の種類のコンピュータ又は通信装置等のマルチコアプロセッサを用いる装置）は、１つ以上のマルチスレッドアプリケーションを識別し、マルチスレッドアプリケーション（複数可）の識別に基づいてマルチスレッドアプリケーション（複数可）に関するメモリスケジューリングスキームを調整又は最適化することが出来る。このようなシステム及び／又は方法により、非能率的なメモリスケジューリングによる、（例えば、装置内の）パフォーマンス低下を防ぐことが出来る。
【００８４】
上述の実施形態の記述により、説明及び記載がなされたが、本明細書が包括的なものでないこと、又は開示した厳密な形態に本発明を制限することを、意図するものではない。上記の事項を踏まえると、修正及び変更は可能である、即ち本発明の実行から得ることが出来る。
【００８５】
例えば、図１３〜図１５に関連して、一連のブロックを説明してきたが、他の実施形態では、ブロックの順番を変更することが可能である。さらに、非従属ブロックは、並列して実行することが出来る。別の例では、本明細書に記載する、異なるアプリケーション及びスレッドの数は説明のためだけに設けられた。
【００８６】
図面に示される実施形態では、上記に記載した様態はソフトウェア、ファームウェア、及びハードウェアの様々な形で実行することが出来ることは言うまでもない。これらの様態を実行するために用いられる実際のソフトウェアコード、又は特殊制御ハードウェアは、制限と解釈されるべきではない。従って、様態の動作及び挙動の説明では、ソフトウェアコードを参照しなかったが、そのソフトウェア及び制御ハードウェアを設計して、本明細書に基づいた様態を実行出来ることは言うまでもない。このソフトウェアには、ハードウェア記述言語（ＨＤＬ）、ヴェリログ、レジスタ転送レベル（ＲＴＬ）、グラフィックデータベースシステム（ＧＤＳ）ＩＩのデータ又はそれらの回路及び機構に書き込むために使用される、その他のソフトウェアも含まれ得る。このようなソフトウェアは、コンピュータ可読媒体に格納することが出来、製造プロセスを設定して、本発明の様態を具体化する方法で、動作可能な実回線を作るために用いることが出来る。
【００８７】
さらに、本明細書に記載のいくらかの実施形態を、１つ以上の機能を実行する「論理回路」として実行することが出来る。この論理回路には、プロセッサ、ＡＳＩＣ、又はＦＰＧＡ、あるいはハードウェア及びソフトウェアの組合せ等の、ハードウェアが含まれ得る。
【００８８】
特徴の特定の組合せが請求項に記載され及び／又は明細書に開示されてはいるが、これらの組合せは、本発明を制限することを意図するものではない。実際、請求項に明確には記載されていない、且つ／又は明細書に開示されていない方法で、多くのこれらの特徴を組み合わせることが出来る。
【００８９】
本出願に使用される、いかなる要素、ブロック、又は命令も、そのような明確な定めがない限り、本発明に関して重要又は必須と解釈されるべきではない。また、本明細で使用される冠詞「ａ」は１つ以上の項目を含むことを意図する。たった１つの項目を意図する場合、用語「ｏｎｅ」又は類似の言葉が使用される。さらに、フレーズ「に基づいて」とは、明確な定めがない限り、「少なくとも部分的に基づいて」を意味することを意図する。
【図１】
2013528305.tif 000005
【図２】
2013528305.tif 000006
【図３】
2013528305.tif 000007
【図４】
2013528305.tif 000008
【図５】
2013528305.tif 000009
【図６】
2013528305.tif 000010
【図７】
2013528305.tif 000011
【図８】
2013528305.tif 000012
【図９Ａ】
2013528305.tif 000013
【図９Ｂ】
2013528305.tif 000014
【図１０Ａ】
2013528305.tif 000015
【図１０Ｂ】
2013528305.tif 000016
【図１１】
2013528305.tif 000017
【図１２Ａ】
2013528305.tif 000018
【図１２Ｂ】
2013528305.tif 000019
【図１３】
2013528305.tif 000020
【図１４】
2013528305.tif 000021
【図１５】
2013528305.tif 000022
【手続補正書】
【提出日】平成25年2月18日(2013.2.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータ装置により、マルチスレッドアプリケーションを識別することと、
前記マルチスレッドアプリケーションの識別に基づいて、前記コンピュータ装置により、前記マルチスレッドアプリケーションに関するメモリスケジューリングスキームを調整することと、を備えるコンピュータ装置により実行される方法 。
【請求項２】
前記マルチスレッドアプリケーションは、第１のグループに関連し、
前記マルチスレッドアプリケーションを識別することには、前記第１のグループに関連する、前記マルチスレッドアプリケーションのスレッドを受け取ることが含まれ、
第２のグループに関連する、シングルスレッドアプリケーションのスレッドを受け取ることをさらに備える請求項１に記載のコンピュータ装置により実行される方法。
【請求項３】
前記メモリスケジューリングスキームを調整することは、
前記第１のグループ内及び前記第２のグループ内のアイドルスレッドの数を判定することと、
前記第１のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記第１のグループの順位付けをすることと、
前記第２のグループ内の判定された数のアイドルスレッドに基づいて、前記第２のグループの順位付けをすることと、
前記第１のグループ又は前記第２のグループのうちの、より高く順位付けされた一方に関連するメモリ使用要求を、前記第１のグループ又は前記第２のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求よりも優先することと、を備える、請求項２に記載のコンピュータ装置により実行される方法。
【請求項４】
前記アイドルスレッドの数を判定することは、
ビットベクトル内の第１のビットを、前記第１のグループ内の第１のスレッドに関連付けることと、
前記ビットベクトル内の第２のビットを、前記第１のグループ内の第２のスレッドに関連付けることと、
前記ビットベクトル内の第３のビットを、前記第２のグループ内の前記スレッドに関連付けることと、
期間の始まりに、前記ビットベクトル内の前記第１のビット、前記第２のビット、及び前記第３のビットを設定することと、
前記第１のビット、前記第２のビット、又は前記第３のビットのうちのリセットされる１つ以上のビットに関連する１つ以上のスレッドに関して、１つ以上のメモリ使用要求が受け取られたとき、前記ビットベクトル内の前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上のビットをリセットすることと、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットに基づいて、前記第１のグループ内及び前記第２のグループ内のアイドルスレッドの数を判定することと、を備える、請求項３に記載のコンピュータ装置により実行される方法。
【請求項５】
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットに基づいて、前記第１のグループ及び前記第２のグループの順位付けをすることをさらに備える請求項４に記載のコンピュータ装置により実行される方法。
【請求項６】
前記メモリ使用要求を優先することは、
前記メモリ使用要求に関連する、グループの順位に基づいて、前記メモリ使用要求の第１の優先権を判定することと、
準備完了順規則に基づいて、前記メモリ使用要求の第２の優先権を判定することと、
先着順規則に基づいて、前記メモリ使用要求の第３の優先権を判定することと、を備える、請求項３に記載のコンピュータ装置により実行される方法。
【請求項７】
装置のメモリ制御装置であって、
処理論理回路を備え、前記処理論理回路が、
グループに関連する、マルチスレッドアプリケーションのスレッドを受け取り、
別のグループに関連する、シングルスレッドアプリケーションのスレッドを受け取り、
前記グループ内及び前記別のグループ内のアイドルスレッドの数を判定し、
前記グループ内の前記判定されたアイドルスレッドの数に基づいて、前記グループを順位付けし、
前記別のグループ内の前記判定されたアイドルスレッドの数に基づいて、前記別のグループを順位付けし、
前記グループ又は前記別のグループのうちのより高く順位付けされた一方に関連するメモリ使用要求を、前記グループ又は前記別のグループのうちのより低く順位付けされた一方に関連するメモリ使用要求より優先させる、メモリ制御装置。
【請求項８】
前記アイドルスレッドの数を判定するとき、前記処理論理回路がさらに、
ビットベクトル内の第１のビットを、前記グループ内の第１のスレッドに関連付け、
前記ビットベクトル内の第２のビットを、前記グループ内の第２のスレッドに関連付け、
前記ビットベクトル内の第３のビットを、前記別のグループ内の前記スレッドに関連付け、
期間の始まりに、前記ビットベクトル内の前記第１のビット、前記第２のビット、及び前記第３のビットを、０より大きい値に設定し、
前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上の前記リセットされるビットに関連する１つ以上のスレッドに関して、１つ以上のメモリ使用要求が受け取られるとき、前記ビットベクトル内の前記第１のビット、前記第２のビット、又は前記第３のビットのうちの１つ以上のビットを、０の値にリセットし、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットの値に基づいて、前記グループ内及び前記別のグループ内の前記アイドルスレッドの数を判定する、請求項７に記載のメモリ制御装置。
【請求項９】
前記処理論理回路がさらに、
前記期間の終わりに、前記ビットベクトル内に残る、前記設定されたビットの値に基づいて、前記グループ及び前記別のグループの順位付けをする、請求項８に記載のメモリ制御装置。
【請求項１０】
前記メモリ使用要求を優先するとき、前記処理論理回路がさらに、
前記メモリ使用要求に関連する、グループの順位に基づいて、前記メモリ使用要求の第１の優先権を判定し、
準備完了順規則に基づいて、前記メモリ使用要求の第２の優先権を判定し、
先着順規則に基づいて、前記メモリ使用要求の第３の優先権を判定する、請求項７に記載のメモリ制御装置。
【国際調査報告】
2013528305.tif 000023
2013528305.tif 000024