IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソニー・コンピュータエンタテインメントの特許一覧

特開2023-120353後方互換性のためのアプリケーション固有動作パラメータの導出
<>
  • 特開-後方互換性のためのアプリケーション固有動作パラメータの導出 図1A
  • 特開-後方互換性のためのアプリケーション固有動作パラメータの導出 図1B
  • 特開-後方互換性のためのアプリケーション固有動作パラメータの導出 図2A
  • 特開-後方互換性のためのアプリケーション固有動作パラメータの導出 図2B
  • 特開-後方互換性のためのアプリケーション固有動作パラメータの導出 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023120353
(43)【公開日】2023-08-29
(54)【発明の名称】後方互換性のためのアプリケーション固有動作パラメータの導出
(51)【国際特許分類】
   G06F 8/36 20180101AFI20230822BHJP
   G06F 11/34 20060101ALI20230822BHJP
【FI】
G06F8/36
G06F11/34 152
【審査請求】有
【請求項の数】21
【出願形態】OL
(21)【出願番号】P 2023100706
(22)【出願日】2023-06-20
(62)【分割の表示】P 2022015570の分割
【原出願日】2017-03-23
(31)【優先権主張番号】62/315,315
(32)【優先日】2016-03-30
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/315,345
(32)【優先日】2016-03-30
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/466,759
(32)【優先日】2017-03-22
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/466,769
(32)【優先日】2017-03-22
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100105924
【弁理士】
【氏名又は名称】森下 賢樹
(72)【発明者】
【氏名】シンプソン、デイヴィッド
(72)【発明者】
【氏名】ツェルニー、マーク エヴァン
(57)【要約】      (修正有)
【課題】旧バージョンのコンピュータシステム用に設計されたアプリケーション/タイトルに後方互換性を提供するシステム及び方法を提供する。
【解決手段】アプリケーションがレガシーシステム上で動作するテスト段階中に、アプリケーション固有動作パラメータを導出する方法10であって、アプリケーションは、レガシーシステム上で実行12され、コードブロック毎14に、性能情報が記録又は導出16される。アプリケーションを実行することは、例えば、キャプチャをロードすること及び入力無しでそれを実行させることか又は特定のゲーム領域を通してプレイすることを含む。方法はさらに、性能情報を解析18し、選択される性能情報を、性能特性19のセットを判定するために結合し、保存または転送20する。
【選択図】図1A
【特許請求の範囲】
【請求項1】
レガシーアプリケーションを非レガシーシステム上で実行する方法であって、
前記レガシーアプリケーションを前記非レガシーシステム上で実行する際に前記非レガシーシステムの動作パラメータを調整するための1つまたは複数の所定のヒューリスティックに基づいて前記レガシーアプリケーションを実行する際の前記非レガシーシステムの動作パラメータを1つまたは複数の性能メトリックおよび他の性能情報から設定すること
を含む、方法。
【請求項2】
前記1つまたは複数の所定のヒューリスティックは、プログラム実行中にイベント間のクロックサイクルをカウントすることから判定される前記1つまたは複数の性能メトリックを使用する、請求項1に記載の方法。
【請求項3】
前記1つまたは複数の所定のヒューリスティックは、前記アプリケーションの実行に関連する情報を追跡する、1つまたは複数の専用プロセッサレジスタ内に記憶される値から判定される前記1つまたは複数の性能メトリックを使用する、請求項1に記載の方法。
【請求項4】
前記1つまたは複数の専用プロセッサレジスタ内に記憶される前記値が、カウンタ値を含む、請求項3に記載の方法。
【請求項5】
前記カウンタ値が、プログラムカウンタ値である、請求項4に記載の方法。
【請求項6】
前記カウンタ値が、メモリサイクル、演算論理ユニット(ALU)サイクル、またはピクセルのためのカウンタの値である、請求項4に記載の方法。
【請求項7】
前記1つまたは複数の所定のヒューリスティックは、検出されるビジーウェイトから判定される前記1つまたは複数の性能メトリックを使用する、請求項1に記載の方法。
【請求項8】
前記1つまたは複数の所定のヒューリスティックは、1秒あたりのフレーム数を含む前記1つまたは複数の性能メトリックを使用する、請求項1に記載の方法。
【請求項9】
前記1つまたは複数の所定のヒューリスティックは、プログラムカウンタ(PC)レンジにビン化される1サイクルあたりの命令数(IPC)を含む前記1つまたは複数の性能メトリックを使用する、請求項1に記載の方法。
【請求項10】
前記1つまたは複数の性能メトリックが境界範囲内になるまで前記非レガシーシステムの前記動作パラメータを繰り返し調整することをさらに含む、請求項1に記載の方法。
【請求項11】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、1サイクルあたりの命令数(IPC)が境界範囲内になるまで命令起動レートを調整することを含む、請求項1に記載の方法。
【請求項12】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、演算論理ユニット(ALU)命令の発行頻度が境界範囲内になるまでNサイクル毎のALU動作を許可しないことを含む、請求項1に記載の方法。
【請求項13】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、メモリ動作の発行頻度が境界範囲内になるまでNサイクル毎のメモリ動作を許可しないことを含む、請求項1に記載の方法。
【請求項14】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、単位時間あたりの平均ウェーブフロント占有率または平均ウェーブフロント寿命が境界範囲内になるまで汎用レジスタ(GPR)を選択的に割り当てることを含む、請求項1に記載の方法。
【請求項15】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、単位時間あたりの平均ウェーブフロント占有率または平均ウェーブフロント寿命が境界範囲内になるまでウェーブフロント起動レートを抑制することを含む、請求項1に記載の方法。
【請求項16】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、単位時間あたりの対象をレンダリングするためのピクセル出力の数が境界範囲内になるまでGPUコアのレンダーバックエンドからのピクセル出力レートを抑制することを含む、請求項1に記載の方法。
【請求項17】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、平均メモリ動作レイテンシが境界範囲内になるまでメモリ動作を終了からストールすることを含む、請求項1に記載の方法。
【請求項18】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、分岐予測の成功および失敗の数が境界範囲内になるまで前記非レガシーシステムのクロックを異なるレートで動作させることを含む、請求項1に記載の方法。
【請求項19】
前記非レガシーシステムの動作パラメータを調整するための前記1つまたは複数の所定のヒューリスティックは、分岐予測の成功および失敗の数が境界範囲内になるまでレガシーシステムの分岐予測アルゴリズムをマッチさせることを含む、請求項1に記載の方法。
【請求項20】
プロセッサ、メモリ、及び前記メモリ内で具現化されるプロセッサ実行可能命令を備えるシステムであって、前記命令が、レガシーアプリケーションを非レガシーシステム上で実行する方法を実施するように構成され、前記方法が、
前記レガシーアプリケーションを前記非レガシーシステム上で実行する際に前記非レガシーシステムの動作パラメータを調整するための1つまたは複数の所定のヒューリスティックに基づいて前記レガシーアプリケーションを実行する際の前記非レガシーシステムの動作パラメータを1つまたは複数の性能メトリックおよび他の性能情報から設定すること
を含む、システム。
【請求項21】
具現化されるコンピュータ可読命令を有する非一時的コンピュータ可読媒体であって、前記命令が、レガシーアプリケーションを非レガシーシステム上で実行する方法を実施するように構成され、前記方法が、
前記レガシーアプリケーションを前記非レガシーシステム上で実行する際に前記非レガシーシステムの動作パラメータを調整するための1つまたは複数の所定のヒューリスティックに基づいて前記レガシーアプリケーションを実行する際の前記非レガシーシステムの動作パラメータを1つまたは複数の性能メトリックおよび他の性能情報から設定すること
を含む、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
[優先権の主張]
本出願は、2016年3月30日に出願された米国仮特許出願第62/315,315号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。本出願は、また、2016年3月30日に出願された米国仮特許出願第62/315,345号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。本出願は、また、2017年3月22日に出願された米国特許出願第15/466,759号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。本出願は、また、2017年3月22日に出願された米国特許出願第15/466,769号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。
【0002】
本開示の態様は、コンピュータシステム上でのコンピュータアプリケーションの実行に関する。特に、本開示の態様は、旧バージョンのコンピュータシステム用に設計されたアプリケーション/タイトルに後方互換性を提供するシステムまたは方法に関する。
【背景技術】
【0003】
新規のコンピュータアーキテクチャがリリースされるとき、以前のバージョンのアーキテクチャ用に書かれたアプリケーションが、新規アーキテクチャ上で完璧に動作することが望ましい。このケイパビリティは、しばしば「後方互換性」と呼ばれる。後方互換性を実装することは、対象のレガシーデバイスを新規のホストアーキテクチャ上でエミュレートすることを伴い、それによって、新規アーキテクチャは、レガシーデバイス用に書かれたプログラムの命令を実行し得る。コンピュータアーキテクチャは、経時的に変化して、バス、クロック速度、プロセッサアーキテクチャ、キャッシング、標準などにおける技術的進歩を活用する。1つのコンピュータアーキテクチャが、より新しいアーキテクチャに置き換わると、古いアーキテクチャは、いわゆるレガシーアーキテクチャになる。その開発の過程にわたって、ネットワークプロトコル、ユーザインタフェース、オーディオ処理、デバイスドライバ、グラフィック処理、メッセージ、ワードプロセッサ、スプレッドシート、データベースプログラム、ゲーム、及び他のアプリケーションなどのソフトウェアアプリケーションは、レガシーアーキテクチャ用に書かれている。このようなレガシーソフトウェアは、それらが新規アーキテクチャにアップグレードする場合であっても、依然としてそのユーザには価値がある。したがって、レガシーソフトウェアを新規アーキテクチャ上で実行することが可能である必要性が存在する。
【0004】
新規デバイスとレガシーデバイスとのハードウェアコンポーネントの性能の差が、新規デバイス上での同期エラーを引き起こし得る。それは、新規デバイスアーキテクチャ上で実行しているときに、レガシーアプリケーションをクラッシュさせるか、または誤った出力を生じさせ得る。このような性能の差は、例えば、新規デバイスとレガシーデバイスとの間のハードウェアアーキテクチャの差から起こり得る。
【発明の概要】
【0005】
このような状況の中で、本開示の態様が生じる。
【図面の簡単な説明】
【0006】
図1A】本開示の態様による、アプリケーション固有動作パラメータの導出を示すフロー図である。
図1B】本開示の態様による、アプリケーション固有動作パラメータのリアルタイム調整を示すフロー図である。
図2A】本開示の態様による、後方互換モードで動作するように構成され得る中央処理装置(CPU)コアの実施例を示すブロック図である。
図2B】本開示の態様による、CPUのための可能なマルチコアアーキテクチャの実施例を示すブロック図である。
図3】本開示の態様による、後方互換モードで動作するように構成されるCPUを有するデバイスのブロック図である。
【発明を実施するための形態】
【0007】
[序論]
新規デバイス上でレガシーアプリケーションを実行する際に、ハードウェアの振る舞いの違いに起因して発生する問題に対処するために、新規ハードウェアは、レガシーアプリケーションを実行するように調節され得る。
【0008】
テスト段階の間、レガシーアプリケーションは、レガシーデバイス上でレガシーアーキテクチャを用いて実行され、性能情報が収集される。性能情報の実施例は、単位時間あたりのALU命令またはメモリ動作の数、及び平均並列処理ハードウェアスケジューリングユニット(例えば、ウェーブフロント)占有率または寿命を含む。性能情報は、レガシーデバイス上でゲーム及びアプリケーションを実行すること、ならびにカウンタを読み出すことによって、直接測定(ALU及びメモリ動作)されてもよい。代替的には、性能情報は、測定プロセスの一部として、そのようなカウンタ、または他のデータ出力を読み出すことから導出されてもよい。そのような導出の実施例として、平均ウェーブフロント占有率及び寿命が、ウェーブフロントが開始及び停止するときの測定値から導出され得る。特定のアプリケーション、例えば、特定のビデオゲームについての結合された性能データが、そのアプリケーションについての性能特性とここでは呼ばれる。テスト段階においてアプリケーションについて判定される性能特性は、後方互換性を保証するために、新規システム上で同じアプリケーションを実行するための基準値として使用され得る。
【0009】
新規デバイス上でのアプリケーションの性能は、新規デバイスの動作パラメータを調節することによって、レガシーデバイス上の同じアプリケーションの性能に密接に合致され得る。動作パラメータの実施例は、とりわけ、新規デバイスのクロック周波数、利用可能な汎用レジスタ(GPR)の数、命令起動レートなどを含む。アプリケーションは、アプリケーション固有性能特性を調整するようにその動作パラメータを調節しつつ、新規システム上で繰り返し実行され得る。新規システム上で十分な数のテストを行った後、新規システム上のアプリケーションの性能特性が、動作パラメータが変化するにつれてどのように収束するかを解析し得る。動作パラメータの新たなセットが、収束解析に基づいて生成され得る。このプロセスは、動作パラメータが、新規システム上のアプリケーションに対して最適に設定されるまで繰り返され得る。さらに最適化するために、アプリケーションが、それを機能しなくさせることなく新規ハードウェア上でより高速に実行され得るかどうかを見るために、新規ハードウェアの実行を調整し得る。
【0010】
[アプリケーション固有性能特性の判定]
図1Aは、アプリケーションがレガシーシステム上で動作するテスト段階中に、アプリケーション固有動作パラメータを導出する方法10を示している。アプリケーションは、レガシーシステム上で実行12され、コードブロック毎14に、性能情報が、記録または導出16される。アプリケーションを実行することは、例えば、キャプチャをロードすること及び入力無しでそれを実行させること、または特定のゲーム領域を通してプレイすることを含み得る。性能情報は、主要性能メトリック、及び他の性能情報を含む。主要性能メトリックは、アプリケーションが新規システム上で実行されるときに最も重要な性能情報のサブセットをいう。主要性能メトリックは、アプリケーションが新規ハードウェア上で実行されるときに満たされなければならないものである。主要性能メトリックの実施例は、1秒あたりのフレーム数(例えば、ビデオゲームなどのビデオ集中型アプリケーションの場合)、及びプログラムカウンタ(PC)レンジにビン化された1サイクルあたりの命令数(IPC)を含むが、これらに限定されない。
【0011】
他の性能情報は、PCブロックレジデンス、単位時間あたりに発行される演算論理ユニット(ALU)命令の数(CPU及びGPU)、単位時間あたりに発行されるメモリ動作の数(CPU及びGPU)、単位時間あたりの平均並列処理ハードウェアスケジューリングユニット(例えば、ウェーブフロント、ワープ、またはベクトル幅)占有率、平均並列処理ハードウェアスケジューリングユニット寿命、メモリ動作についての平均レイテンシ、単位時間あたりの対象をレンダリングするためのピクセル出力のカウント、及び、フレーム中のアクティブな総サイクル数(ALUカウントは、これの具体例)を含むが、これらに限定されない。
【0012】
性能情報は、カウンタから直接読み出される値、または、プログラム実行中にイベント間のクロックサイクルをカウントするなど、そのような値もしくは他の情報から導出される値を含んでもよい。性能情報は、18においてさらに解析されてもよく、選択される性能情報が、性能特性19のセットを判定するために結合されてもよく、それは、次いで、保存または転送20されてもよい。
【0013】
ある性能情報値は、アプリケーションの実行に関連する情報を追跡する、専用プロセッサレジスタ内に記憶され得る。このような値の実施例は、プログラムカウンタ、ならびに、中でもメモリサイクル、演算論理ユニット(ALU)サイクル、及びピクセルについてのカウンタなどのカウンタ値を含むが、これらに限定されない。プログラムカウンタ(PC)は、また、Intel x86及びItaniumマイクロプロセッサにおける命令ポインタ(IP)とも呼ばれ、命令アドレスレジスタ(IAR)、または命令カウンタと呼ばれることもあり、コンピュータがそのプログラムシーケンス内にある場所を示す、プロセッサレジスタである。
【0014】
上述のように、単位時間あたりの平均並列処理ハードウェアスケジューリングユニット(例えば、ウェーブフロント、ワープ、もしくはベクトル幅)占有率、平均並列処理ハードウェアスケジューリングユニット寿命、メモリ動作についての平均レイテンシ、単位時間あたりの対象をレンダリングするためのピクセル出力のカウントといった、ある他の性能情報が、間接的に導出され得る。限定ではなく例として、1サイクルあたりの命令数(IPC)は、最初のプログラムカウンタ値と最後のプログラムカウンタ値との差を、最初のプログラムカウンタ値と最後のプログラムカウンタ値との間のクロックサイクル数で割ることによって、導出され得る。また、平均並列処理ハードウェアスケジューリングユニット寿命を判定することは、そのようなスケジューリングユニットの起動及び完了を検出すること、ならびにその間のクロックサイクルをカウントすることを伴い得る。同様に、並列処理ハードウェアスケジューリングユニットの単位時間あたりの平均占有率を判定することは、所与の時間ウィンドウの間起動及び完了を記録すること、ならびにその時間ウィンドウ内の任意の所与の時間において平均で何回実行しているかを判定することの問題である。
【0015】
「並列処理スケジューリングユニット」という用語は、異なるプロセッサハードウェアの製造業者によって、コードの並列処理用の最小実行可能ユニットの概念を説明するために使用される、いくつかの異なる用語を包含する総称としてここでは使用される。例えば、GPUの文脈においては、並列処理スレッドは、スケジューリングの最も基本的なユニットとして、「ワープ」(NVIDIAハードウェアの場合)、または「ウェーブフロント」(AMDハードウェアの場合)と呼ばれることがあるものに束ねられる。その違いは主に、共にグルーブ化されるスレッドの数である。他の等価な定義は、「動作し得る最小実行可能ユニットコード」、または「その中のスレッドの全てにわたって単一命令により同時に処理するユニット」、または「SIMD方式で処理されるデータの最小サイズ」を含む。CPUハードウェアの場合、並列性の最も基本レベルの概念は、「ベクトル幅」(例えば、Intel及びAMDプロセッサ上でSSE命令を使用するとき)と呼ばれることが多い。単純化のため、「ウェーブフロント」という用語は、「並列処理スケジューリングユニット」の代用として、ここで使用されるものとする。ウェーブフロント内の全てのスレッドが、ロックステップで同一命令を実行し、違いは、その命令によって操作されるデータだけである。
【0016】
他の動作情報は、いくつかの異なる方法で動作レジスタ値から導出され得る。例えば、IPCは、プログラム実行時に実行されている命令の総数を含むカウンタをサンプリングすることによって導出されてもよい。例として、このカウンタは、Nサイクル毎にサンプリングされてもよい。IPC値は、(TIEi+N-TIEi)/Nからの、最初の実行済み総命令数の値(TIEi)及びNサイクル後のその後の値(TIEi+N)から導出されてもよい。実際には、アプリケーションの所与のセクション(例えば、コードのブロック)についてのIPC値が、その特定セクションのためのPCレンジによってビン化されてもよい。さらに、アプリケーション内の各PCレンジは、したがって、異なる潜在的振る舞いを有し、それに対応して異なるIPC値を有してもよい。したがって、例えば、コードブロック番号により、IPC値をプログラムコードの識別されるセクションと関連付けることは有用である。
【0017】
PCブロックレジデンスは、現在実行されているアプリケーションコードのブロックをいい、GPUは、典型的には、複数のコード部分を同時に実行するため、PCブロックレジデンスは、GPUよりもCPUにより関連し得る。PCブロックレジデンスは、Nサイクル毎にPCをサンプリングすること、及びサンプルがコードの同一ブロック内に入る回数をカウントすることによって導出され得る。
【0018】
ALUまたはメモリ動作の発行頻度は、そのような動作の発行を検出すること、及び所与の時間ウィンドウにわたって発行されるそのような動作の数をカウントすることによって、導出され得る。同様に、単位時間あたりの対象をレンダリングするためのピクセル出力のカウントは、所与の時間ウィンドウにわたるピクセル出力をカウントすることによって導出され得る。キャッシュレイテンシまたはメモリ動作レイテンシなどのレイテンシは、キャッシュ読み出し/書き込み及び/またはメモリアクセス命令の発行及び完了を検出すること、ならびに発行と完了との間のクロックサイクルをカウントすることによって、導出され得る。
【0019】
16において性能情報を記録すること/導出することは、ビジーウェイトを検出することを含み得る。ビジーウェイトは、典型的には、短いループとして実装される。カウンタの観点からは、これは、PCが非常に小さな範囲内にとどまっている(かつ繰り返している)ように見え、ループを通して毎回起こる、何らかの種類のメモリ読み出しまたはIO読み出し動作が存在することとなる。IPCは、ループのために大きくなり得ると考えられるが、より実際的には、メモリまたはIO動作の結果が返ってくるのを待機することによってループ内の時間が左右されることになるため、IPCは小さい可能性が高い。ビジーウェイトは、PCが非常に小さな範囲内にとどまる時間を探すことによって検出されてもよく、その時間は、メモリまたはIO動作が完了するのを待機することによって左右される。ビジーウェイトは、IPC及び他の性能情報測定値にずれを生じさせる傾向がある。ビジーウェイトに費やす時間が予測不可能であるため、ビジーウェイトの間に取られる測定値は、18において性能特性を判定するプロセスの一部として、性能情報から除去されてもよい。そうすることによって、動作パラメータを調整する後続のプロセスが、ビジーウェイトの存在によって影響を受けないこととなる。
【0020】
18において、記録または導出された性能情報を解析することは、概して、実行中のアプリケーションの振る舞いを大まかに特徴付ける性能特性19の有用なセットに、性能情報を絞り込むことを伴う。性能特性19は、以下で説明するように、1つまたは複数の主要性能メトリック、及び後の動作パラメータの判定に有用な他の性能情報を含むが、これらに限定されない。
【0021】
性能特性判定段階18は、例えば、多くの異なる性能情報値が、所与の動作パラメータの変化に応じて変化し得るときに、主要性能情報値及び動作パラメータの変化の間の相関関係を、多変量解析を通して判定することによって、動作パラメータを調節するためにどの性能情報値が有用であるかを判定し得る。
【0022】
[パラメータ調整プロセス]
図1Bは、アプリケーションが新規システム上で動作する際に動作パラメータを最適化するように、レガシーアプリケーションの実行を調整する方法30を説明する。新規システムは、性能特性19を使用して、レガシーアプリケーションの実行(32)時にリアルタイムで1つまたは複数の動作パラメータを調整し得る。各コードブロック34について、性能情報が、例えば上述したように導出36される。38において、1つまたは複数の主要性能メトリックが境界範囲内にない場合、それらが境界範囲内に入るまで、1つまたは複数の動作パラメータが繰り返し調整40され得る。38において、主要性能メトリックが、一旦境界範囲内に入れば、動作パラメータは、更新42され、さらなる調整40によって最適化され得る。更新/最適化された動作パラメータデータ43は、保存または転送44され得る。
【0023】
「動作パラメータ」という用語は、概して、主要性能メトリックを含む性能情報に影響を及ぼすように調整され得る、新規システム上でのアプリケーション実行の態様をいう。動作パラメータの実施例は、例えば、CPU、GPU、またはメモリのためのクロック周波数、命令の起動レート、ALU及び/またはメモリ動作の起動レート、例えば、汎用レジスタ(GPR)、ウェーブフロントスロット、読み出し及びストアキューサイズなどのリソース、特徴無効化、キャッシュパラメータ(例えば、キャッシュサイズ、ウェイの数、バンクの数、など)、ウェーブフロント起動レート、レンダーバックエンドからのピクセル出力レート、メモリ動作ストールを含んでもよいが、これらに限定されない。
【0024】
アルゴリズムマッチングは、新規システムアーキテクチャ用に書かれた新規かつ改善されたアルゴリズムの代わりに、レガシーシステムアーキテクチャからのアルゴリズムを使用して、新規システム上においてある動作を実行することをいう。このようなアルゴリズムマッチングの実施例が、レガシーシステム用の分岐予測器を使用して、新規システム上で分岐予測を実行することである。この例では、アルゴリズムマッチングパラメータは、レガシーアルゴリズムにおいて使用されるパラメータを含む。
【0025】
他の動作パラメータは、リソース制限に関連するパラメータ(例えば、参照により本明細書に組み込まれる、2015年7月27日に出願された米国特許出願第14/810,361号に記載されている)、ならびにアルゴリズムマッチング、特徴無効化、及びレイテンシまたはスループットのマッチングに関連するパラメータ(例えば、参照により本明細書に組み込まれる、2015年7月27日に出願された米国特許出願第14/810,334号に記載されている)も含み得る。
【0026】
40における動作パラメータの調整は、単純であってもよく、例えば、新規ハードウェア上の汎用レジスタ(GPR)の数を、レガシーハードウェアと同一の数に設定することであってもよい。代替的には、新規ハードウェアが、ある動作のためのレガシーアルゴリズムを使用してもよく、または、新規ハードウェアの特徴が、レガシーアプリケーションの動作のために無効化されてもよい。実行は、新規システム上のレイテンシをレガシーハードウェアのレイテンシに合致させるように調整されてもよい。
【0027】
動作パラメータの調整は、レガシーハードウェアと新規ハードウェアのアーキテクチャの差に起因して、より複雑であり得る。いくつかの場合において、例えば、わずかに大きな数のGPRを設定することによって、元のハードウェアよりも多くのリソースが、新規ハードウェア上に割り当てられ得る。
【0028】
下記の表Iは、アプリケーション固有動作パラメータ、それらの導出方法、及びそれらの調整方法の非限定的な例をリストにしたものである。
【0029】
【表1】
【0030】
結果となる更新された動作パラメータ43は、アプリケーション固有性能情報の各項目についての下限を含み得る。それより上では、レガシーハードウェア上で実行しているレガシーアプリケーションの性能メトリックが、一貫して満たされる。新規ハードウェア上でさらにテストすることで、アプリケーション固有性能情報の各項目は、上限をさらに含み得る。それより上では、レガシーアプリケーションは、もはや適切に機能しないか、または、レガシーアプリケーションの主要性能メトリックが、新規システム上ではもはや満たされない。アプリケーション固有性能情報は、下記の表IIにおける情報に対応し得る。
【0031】
【表2】
【0032】
表IIに示される実施例には、レガシープログラムにおける各コードブロックについての性能情報のための上限及び下限のセットがある。この情報は、新規ハードウェア上でのレガシーゲームの後続の動作において使用され得る。そのような後続の動作は、新規ハードウェアが最小値と最大値との間で性能情報を維持するように実行を調整して、図1Bに記載されるように進行し得る。
【0033】
動作パラメータの導出及び調整は、図2A~2B及び図3に示されるハードウェアの特徴に関連し得る。図2Aは、CPUコア100の一般化されたアーキテクチャを示す。CPUコア100は、典型的には、分岐が取られるか否かの予測を試み、かつ(分岐が取られる場合に)分岐の行先アドレスの予測も試みる、分岐予測ユニット102を含む。これらの予測が正確である限り、投機的に実行されたコードの効率が上昇することとなり、したがって、より正確性の高い分岐予測が極めて望ましい。分岐予測ユニット102は、サブルーチンからの復帰アドレスを追跡する復帰アドレススタック104、間接分岐の行先を追跡する間接ターゲットアレイ106、ならびにそれらの結果となるアドレスをより正確に予測するために分岐の過去の履歴を追跡する分岐ターゲットバッファ108及びその関連予測ロジックなどの、高度に専門化されたサブユニットを含み得る。
【0034】
CPUコア100は、典型的には、命令フェッチ及び復号ユニット110を含み、命令フェッチ及び復号ユニット110は、命令フェッチユニット112、命令バイトバッファ114、及び命令復号ユニット116を含む。CPUコア100は、典型的には、いくつかの命令関連キャッシュ及び命令変換索引バッファ(ITLB)120も含む。これらは、ページテーブルエントリ、ページディレクトリエントリなどの物理アドレス変換情報に仮想アドレスをキャッシュするITLBキャッシュ階層124を含み得る。この情報は、命令の仮想アドレスを物理アドレスへと変換するために使用され、それによって、命令フェッチユニット112が、キャッシュ階層から命令をロードすることができる。限定ではなく例として、プログラム命令は、コア内に存在するレベル1命令キャッシュ(L1 Iキャッシュ)122、及びCPUコア100外部の他のキャッシュレベル176を含むキャッシュ階層に従ってキャッシュされてもよい。命令の物理アドレスを使用して、これらのキャッシュは、まずプログラム命令について検索される。命令が見つからない場合、それらは、システムメモリ101からロードされる。アーキテクチャによっては、後述するように、復号済み命令を含むマイクロオペキャッシュ126も存在し得る。
【0035】
プログラム命令が一旦フェッチされると、それらは、典型的には、命令フェッチ及び復号ユニット110による処理を待機する命令バイトバッファ114内に配置される。復号は、非常に複雑なプロセスであり得る。各サイクルで複数の命令を復号することは困難であり、1サイクル内に復号され得る命令の数を制限する、命令アライメントまたは命令の種類についての制限が存在し得る。復号済み命令は、アーキテクチャによっては、マイクロオペキャッシュ126内に配置されてもよく(1つは、新規CPU上に存在する場合)、したがって、復号段階は、プログラム命令の後続の使用のためにバイパスされ得る。
【0036】
復号済み命令は、典型的には、ディスパッチ及びスケジューリング130のための他のユニットに渡される。これらのユニットは、リタイアキュー132を使用して、CPUパイプラインのリマインダ全体を通して命令の状態を追跡し得る。さらに、多くのCPUアーキテクチャにおいて利用可能な汎用及びSIMDレジスタの数が制限されることに起因して、レジスタリネーミングが実行されてもよく、そこでは、論理(アーキテクチャともいう)レジスタが、実行されている命令のストリームにおいて遭遇されるため、物理レジスタ140が、それらを表すために割り当てられる。物理レジスタ140は、単一命令複数データ(SIMD)レジスタバンク142及び汎用(GP)レジスタバンク144を含んでもよく、それは、特定のCPUアーキテクチャ上で利用可能な論理レジスタの数よりもかなり大きなサイズであってもよく、その結果、性能が相当に向上され得る。レジスタリネーミング134が実行された後、命令は、典型的には、スケジューリングキュー136に配置され、スケジューリングキュー136から、いくつかの命令が、実行ユニット150による実行のために(依存性に基づいて)各サイクルで選択され得る。
【0037】
実行ユニット150は、典型的には、SIMDレジスタバンク142に含まれる128ビットまたはそれ以上のSIMDレジスタに含まれる複数のデータフィールド上でいくつかの並列演算を実行するSIMDパイプ152と、GPレジスタバンク144に含まれるGPR上でいくつかの論理、算術、及び種々の演算を実行する演算論理ユニット(ALU)154と、メモリが記憶されまたはロードされるべきアドレスを計算するアドレス生成ユニット(AGU)156と、を含む。実行ユニットの各種類の複数のインスタンスが存在してもよく、インスタンスは、異なるケイパビリティを有してもよく、例えば、特定のSIMDパイプ152は、浮動小数点加算動作ではなく浮動小数点乗算動作を実行することが可能であってもよい。
【0038】
ストア及びロードは、典型的には、ストアキュー162及びロードキュー164にバッファされ、それによって、多くのメモリ動作が、並列で実行され得る。メモリ動作を支援するために、CPUコア100は、通常いくつかのデータ関連キャッシュ及びデータ変換索引バッファ(DTLB)170を含む。DTLBキャッシュ階層172は、仮想アドレスを、ページテーブルエントリ、ページディレクトリエントリなどの物理アドレス変換にキャッシュする。この情報は、メモリ動作の仮想アドレスを物理アドレスに変換するために使用され、それによって、データはシステムメモリに記憶され、またはシステムメモリからロードされ得る。データは、典型的には、コア内に存在するレベル1データキャッシュ(L1 Dキャッシュ)174、及びコア100の外部にある他のキャッシュレベル176にキャッシュされる。
【0039】
本開示のある態様によれば、CPUは、複数のコアを含んでもよい。限定ではなく例として、図2Bは、本開示の態様と併せて使用され得る、可能なマルチコアCPU200の例を示す。具体的には、CPU200のアーキテクチャは、M個のクラスタ201-1…201-Mを含んでもよく、Mは、0より大きい整数である。各クラスタは、N個のコア202-1、202-2…202-Nを有してもよく、Nは、1より大きい整数である。本開示の態様は、異なるクラスタが異なる数のコアを有する実施態様を含む。各コアは、1つまたは複数の対応する専用ローカルキャッシュ(例えば、L1命令、L1データ、またはL2キャッシュ)を含み得る。ローカルキャッシュのそれぞれは、いかなる他のコアとも共有されないという意味で、特定の対応するコア専用であり得る。各クラスタは、また、対応するクラスタ内のコア間で共有され得るクラスタレベルキャッシュ203-1…203-Mを含み得る。いくつかの実施態様では、クラスタレベルキャッシュは、異なるキャッシュに関連付けられたコアによって共有されない。さらに、CPU200は、1つまたは複数の上位レベルキャッシュ204を含んでもよく、上位レベルキャッシュ204は、クラスタ間で共有され得る。クラスタ内のコア間の通信を容易にするために、クラスタ201-1…202-Mは、コアのそれぞれ及びクラスタ用のクラスタレベルキャッシュに連結される、対応するローカルバス205-1…205-Mを含み得る。同様に、クラスタ間の通信を容易にするために、CPU200は、クラスタ201-1…201-M、及び上位レベルキャッシュ204に連結される、1つまたは複数の上位レベルバス206を含み得る。いくつかの実施態様では、上位レベルバス206は、また、他のデバイス、例えば、GPU、メモリ、またはメモリコントローラに連結され得る。さらに他の実施態様では、上位レベルバス206は、システム内の様々なデバイスに接続されるデバイスレベルバスに接続され得る。さらに他の実施態様では、上位レベルバス206は、クラスタ201-1…201-Mを上位レベルキャッシュ204に連結し得る。デバイスレベルバス208は、上位レベルキャッシュ204を他のデバイス、例えば、GPU、メモリ、またはメモリコントローラに連結し得る。限定ではなく例として、このようなデバイスレベルバス208を有する実施態様は、例えば、上位レベルキャッシュ204が、全CPUコア用のL3であるがGPU使用のためではない場合に生じ得る。
【0040】
CPU200において、OS処理は、主にあるコア、またはコアのあるサブセット上で発生し得る。同様に、アプリケーションレベルの処理は、主に特定のコア、またはコアのサブセット上で発生し得る。個々のアプリケーションスレッドは、あるコア、またはコアのあるサブセット上で動作するようにアプリケーションによって指定され得る。キャッシュ及びバスが共有されているため、所与のアプリケーションスレッドによる処理速度は、所与のアプリケーションスレッドと同一のクラスタ内で動作している他のスレッド(例えば、アプリケーションスレッド、またはOSスレッド)によって発生している処理に依存して変化し得る。CPU200の詳細に依存して、コアは、一度にただ1つのスレッドのみを実行することが可能であってもよく、または複数のスレッドを同時に実行すること(「ハイパースレッディング」)が可能であってもよい。ハイパースレッド型CPUの場合、アプリケーションは、また、どのスレッドが、他のどのスレッドと同時に実行され得るかを指定し得る。スレッドの性能は、同一コアによって実行されているいずれかの他のスレッドによって実行される、特定の処理によって影響を受ける。
【0041】
ここで図3を参照すると、本開示の態様に従って動作するように構成されるデバイス300の例示的な例が示されている。本開示の態様によれば、デバイス300は、組み込み型システム、モバイルフォン、パーソナルコンピュータ、タブレットコンピュータ、ポータブルゲームデバイス、ワークステーション、ゲームコンソールなどであり得る。
【0042】
デバイス300は、概して、図1に示し上述した種類の1つまたは複数のCPUコア323を含み得る中央処理装置(CPU)320を含む。CPU320は、図2のCPU200に示したような構成で、複数のそのようなコア323、及び1つまたは複数のキャッシュ325を含み得る。限定ではなく例として、CPU320は、単一チップ上にCPU320及びグラフィック処理ユニット(GPU)330を含む高速処理ユニット(APU)310の一部であってもよい。代替的な実施態様では、CPU320及びGPU330は、別々のチップ上の別々のハードウェアコンポーネントとして実装されてもよい。GPU330は、また、2つ以上のコア332及び2つ以上のキャッシュ334、ならびに(いくつかの実施態様では)コア及びキャッシュ及びシステムの他のコンポーネント間の通信を容易にするための1つまたは複数のバスを含み得る。バスは、APU310用の内部バス317、及び外部データバス390を含み得る。
【0043】
デバイス300は、また、メモリ340を含み得る。メモリ340は、任意で、CPU320及びGPU330にアクセス可能なメインメモリユニットを含み得る。CPU320及びGPU330は、それぞれ1つまたは複数のプロセッサコア、例えば、単一コア、2つのコア、4つのコア、8つのコア、またはそれ以上を含み得る。CPU320及びGPU330は、外部データバス390を使用して1つまたは複数のメモリユニットにアクセスするように構成されてもよく、いくつかの実施態様では、2つ以上の異なるバスを含むことがデバイス300には有用であり得る。
【0044】
メモリ340は、アドレス可能なメモリ、例えば、RAM、DRAMなどを提供する集積回路の形態の1つまたは複数のメモリユニットを含み得る。メモリは、レガシーCPU上の実行用に当初作成されたアプリケーションを実行する際、デバイス300をタイミングテストモードで動作させるように判断するための実行時に、図5の方法のような方法を実施するように構成される実行可能命令を含み得る。さらに、メモリ340は、グラフィックリソースを一時的に記憶するための専用グラフィックメモリと、グラフィックバッファと、グラフィックレンダリングパイプライン用の他のグラフィックデータと、を含み得る。
【0045】
CPU320は、CPUコードを実行するように構成されてもよく、CPUコードは、オペレーティングシステム(OS)321、またはアプリケーション322(例えば、ビデオゲーム)を含み得る。オペレーティングシステムは、ソフトウェア(例えば、アプリケーション322)からの入力/出力(I/O)要求を管理し、それらをCPU320、GPU330、またはデバイス300の他のコンポーネントのためのデータ処理命令に変換するカーネルを含み得る。OS321は、また、ファームウェアを含んでもよく、ファームウェアは、不揮発性メモリに記憶され得る。OS321は、以下で詳細に説明するように、CPU320をタイミングテストモードで動作させるある特徴を実装するように構成され得る。CPUコードは、アプリケーション322の状態に基づいて、GPU330によって実装されるプログラムへのドローコマンドまたはドローコールを発行するためのグラフィックアプリケーションプログラミングインタフェース(API)324を含み得る。CPUコードは、また、物理的シミュレーション及び他の機能を実装し得る。OS321、アプリケーション322、またはAPI324のうちの1つまたは複数のためのコードの一部は、メモリ340、CPU内部もしくは外部のキャッシュ、またはCPU320にアクセス可能な大容量記憶デバイスに記憶され得る。
【0046】
デバイス300は、メモリコントローラ315を含み得る。メモリコントローラ315は、メモリ340に向かう、またはメモリ340から来るデータの流れを管理するデジタル回路であってもよい。限定ではなく例として、メモリコントローラは、図3に示される例のように、APU310の不可欠な部分であってもよく、または別々のハードウェアコンポーネントであってもよい。
【0047】
デバイス300は、また、周知のサポート機能350を含んでもよく、サポート機能350は、例えばバス390を介して、システムの他のコンポーネントと通信し得る。このようなサポート機能は、入力/出力(I/O)素子352と、CPU320、GPU330、及びメモリ340それぞれのための別々のクロックを含み得る1つまたは複数のクロック356と、CPU320及びGPU330の外部にあり得る1つまたは複数レベルのキャッシュ358とを含んでもよいが、これらに限定されない。デバイス300は、任意で、プログラム及び/またはデータを記憶するための、ディスクドライブ、CD-ROMドライブ、フラッシュメモリ、テープドライブ、ブルーレイドライブなどの大容量記憶デバイス360を含んでもよい。1つの例では、大容量記憶デバイス360は、レガシーCPUを有するシステム上で動作するように当初設計されたレガシーアプリケーションを含む、コンピュータ可読媒体362を受け入れ得る。代替的には、レガシーアプリケーション362(またはその一部)は、メモリ340に記憶されてもよく、またはキャッシュ358に一部記憶されてもよい。
【0048】
デバイス300は、また、GPU330によって準備される、レンダリングされたグラフィック382をユーザに提示するためのディスプレイユニット380を含み得る。デバイス300は、また、システム100及びユーザ間のインタラクションを容易にするためのユーザインタフェースユニット370を含み得る。ディスプレイユニット380は、フラットパネルディスプレイ、陰極線管(CRT)スクリーン、タッチスクリーン、ヘッドマウントディスプレイ(HMD)、またはテキスト、数字、グラフィカルシンボル、もしくは画像を表示可能な他のデバイスの形態であってもよい。ディスプレイ380は、ここで説明する多様な技術に従って処理されるレンダリングされたグラフィック382を表示し得る。ユーザインタフェース370は、キーボード、マウス、ジョイスティック、ライトペン、ゲームコントローラ、タッチスクリーン、及び/またはグラフィカルユーザインタフェース(GUI)と併せて使用され得る他のデバイスなどの、1つまたは複数の周辺機器を含み得る。ある実施態様では、アプリケーション322の状態及びグラフィックの元となるコンテンツは、例えば、アプリケーション322が、ビデオゲームまたは他のグラフィック集中型アプリケーションを含む場合の、ユーザインタフェース370を通じたユーザ入力に少なくとも一部よって判断されてもよい。
【0049】
デバイス300は、また、デバイスがネットワークを介して他のデバイスと通信することを可能にするためのネットワークインタフェース372を含み得る。ネットワークは、例えば、ローカルエリアネットワーク(LAN)、インターネットなどの広域ネットワーク、Bluetooth(登録商標)ネットワークなどのパーソナルエリアネットワーク、または他の種類のネットワークであってもよい。図示及び説明したコンポーネントのうちの様々なものが、ハードウェア、ソフトウェア、もしくはファームウェア、またはそれらのうち2つ以上の何らかの組み合わせで実装されてもよい。
【0050】
下記の表IIIは、図2A図2B、及び図3に関して上述した特定ハードウェア要素が、性能情報及び対応する、調整する動作パラメータを判定するために、どのように使用され得るかの、いくつかの非限定的な例をリストにする。
【0051】
【表3】
【0052】
新規デバイス上でレガシーアプリケーションを実行しているときに記録または導出される性能情報が、レガシーデバイス上でレガシーアプリケーションを実行するための対応する性能情報を満たすか、または超えることが可能ではない場合があることに留意する。例えば、新規デバイス上の平均メモリレイテンシは、動作パラメータがどのように調整されるかに関わらず、レガシーデバイス上で測定される平均メモリレイテンシよりも高い可能性がある。新規システムについてのこの種の性能情報を知ることは、動作パラメータを調整する際に有用であり得るが、レガシー及び新規デバイス上で実行するアプリケーションの性能特性を比較する際に使用されるべきではない。1秒あたりのフレーム数(FPS)及び1サイクルあたりの命令数(IPC)に限定されないが、それらのような主要性能メトリックだけが、実際に使用されるべきである。
【0053】
レガシーデバイス上で実行される同じアプリケーションの主要性能メトリックを満たすために、アプリケーションが新規デバイス上で動作する際に動作パラメータを調整するプロセスは、ビデオゲームを含む以下の実施例から理解され得る。まず、性能データは、その主要性能メトリックを判定するために、レガシーデバイス上で実行中のゲームについて収集される。次に、ゲームは、新規デバイスの動作パラメータを調整する間、新規デバイス上で実行される。新規デバイスの性能は、レガシーデバイス上でゲームを実行したときに行われたのと同じ性能情報を新規デバイス上で収集することによって、かつ、次いで、それら2つのデバイス上で実行中のゲームの主要性能メトリックを比較することによって、測定され得る。新規デバイスについての性能情報が、レガシーデバイスからの性能データに完全に合致することは、望ましいことであり得るが、これは、実際には可能でない場合がある。新規デバイス上の性能情報が、レガシーデバイス上の性能情報に可能な限り近接して合致することで十分である。しかしながら、新規デバイス上の主要性能メトリックが、レガシーデバイス上の主要性能メトリックよりも悪いことは容認できず、クラッシュし(典型的には、同期の問題に起因する)、または誤った出力を生成する(同じ理由で)アプリケーションまたはゲームも同様である。
【0054】
ここで実際的に言うと、ゲームが新規デバイス上で実行される最初の数回、動作パラメータは、レガシーデバイス上と同一であるように設定されると考えられる。ゲームが十分に新規デバイス上で実行され、その動作パラメータが調節されたら、そのエクスペリエンス及びデータが、さらなるゲームに使用され得るヒューリスティックを構築するために使用され得る。ヒューリスティックは、新規デバイス上の動作パラメータの初期値をゲームの性能特性に基づいて設定するために使用され得る。次いで、ゲームは、新規デバイス上で実行されることとなり、動作パラメータは、主要性能メトリックにさらによく合致するように修正され得る。新規デバイス上で測定される全ての性能データが、主要性能メトリックだけではなく、動作パラメータを調整するのを助けるために使用され得る。動作パラメータに対して行われるいかなる調整も、ヒューリスティックをさらに洗練するためにも使用され得る。
図1A
図1B
図2A
図2B
図3