(57)【要約】      （修正有）【課題】レガシーシステム用に書かれたレガシーアプリケーションを実行するために新規システムの性能を最適化する方法を提供する。【解決手段】レガシーアプリケーションについての性能情報は、レガシーアプリケーションを新規システム上で実行中に記録され、または導出される。新規システム上で実行中のレガシーアプリケーションについての性能特性は、性能情報を解析することによって判定される。性能特性は、１つまたは複数の主要性能メトリック及び他の性能情報を含む。主要性能メトリックは、レガシーアプリケーションが新規システム上で実行されるときに満たされなければならない。他の性能情報は、新規システム上でレガシーアプリケーションを実行しているときに、新規システムの１つまたは複数の動作パラメータを調整するために有用である。１つまたは複数の主要性能メトリックが満たされるように、１つまたは複数の動作パラメータが調整される。【選択図】図１Ｂ
2020115390.tif 000002
【特許請求の範囲】
【請求項１】
レガシーシステム用に書かれたレガシーアプリケーションを実行するために新規システムの性能を最適化する方法であって、
前記レガシーアプリケーションを前記新規システム上で実行することと、
前記新規システム上で実行中の前記レガシーアプリケーションについての性能特性を判定することであって、前記性能特性が、１つまたは複数の主要性能メトリック及び他の性能情報を含み、前記１つまたは複数の主要性能メトリックは、前記レガシーアプリケーションが、前記新規システム上で実行されるときに満たされなければならない、前記判定することと、
前記１つまたは複数の主要性能メトリックが満たされるように、前記他の性能情報を用いて前記１つまたは複数の動作パラメータを調整することと、を含む、方法。
【請求項２】
前記１つまたは複数の主要性能メトリックが、１秒あたりのフレーム数を含む、請求項１に記載の方法。
【請求項３】
前記１つまたは複数の主要性能メトリックが、プログラムカウンタ（ＰＣ）レンジにビン化される１サイクルあたりの命令数（ＩＰＣ）を含む、請求項１に記載の方法。
【請求項４】
前記他の性能情報は、間接的に導出される、請求項１に記載の方法。
【請求項５】
間接的に導出される前記他の性能情報が、単位時間あたりの平均並列処理ハードウェアスケジューリングユニット占有率、平均並列処理ハードウェアスケジューリングユニット寿命、メモリ動作についての平均レイテンシ、または単位時間あたりの対象をレンダリングするためのピクセル出力のカウントを含む、請求項４に記載の方法。
【請求項６】
前記レガシーアプリケーションについての前記性能特性を判定することが、前記新規システムの動作パラメータを調節するために有用である値を判定することを含む、請求項１に記載の方法。
【請求項７】
前記新規システムの動作パラメータを調節するために有用である値を判定することが、主要性能情報値及び動作パラメータの変化の間の１つまたは複数の相関関係を判定することを含む、請求項６に記載の方法。
【請求項８】
前記新規システムの動作パラメータを調節するために有用である値を判定することが、主要性能情報値及び動作パラメータの変化の間の１つまたは複数の相関関係を、多変量解析を通して判定することを含む、請求項６に記載の方法。
【請求項９】
前記レガシーシステム及び新規システムが、ビデオゲームシステムである、請求項１に記載の方法。
【請求項１０】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、前記新規システム上の汎用レジスタ（ＧＰＲ）の数を、前記レガシーシステムと同一の数に設定することを含む、請求項１に記載の方法。
【請求項１１】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、前記新規システムのある動作のためにレガシーアルゴリズムを使用することを含む、請求項１に記載の方法。
【請求項１２】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、前記新規システムの１つまたは複数の特徴を無効化することを含む、請求項１に記載の方法。
【請求項１３】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、前記新規システム上のレイテンシを前記レガシーシステムについての対応するレイテンシに合致させるように、前記新規システム上でのレガシーアプリケーションの実行を調整することを含む、請求項１に記載の方法。
【請求項１４】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、前記レガシーシステム上よりも多くのリソースを前記新規システム上に割り当てることを含む、請求項１に記載の方法。
【請求項１５】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、命令起動レートを調整することを含む、請求項１に記載の方法。
【請求項１６】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、Ｎサイクル毎に演算論理ユニット（ＡＬＵ）動作を許可しないことであって、Ｎが、１以上の整数である、前記許可しないことを含む、請求項１に記載の方法。
【請求項１７】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、Ｎサイクル毎にメモリユニット動作を許可しないことであって、Ｎが、１以上の整数である、前記許可しないことを含む、請求項１に記載の方法。
【請求項１８】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、汎用レジスタ（ＧＰＲ）を選択的に割り当てることを含む、請求項１に記載の方法。
【請求項１９】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、並列処理ハードウェアスケジューリングユニット起動レートを抑制することを含む、請求項１に記載の方法。
【請求項２０】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、グラフィックパイプラインの下流において対象をレンダリングするためにピクセルを書き出す１つまたは複数のレンダーバックエンドからの出力レートを抑制することを含む、請求項１に記載の方法。
【請求項２１】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、１つまたは複数のメモリ動作を終了からストールすることを含む、請求項１に記載の方法。
【請求項２２】
前記１つまたは複数の主要性能メトリックが満たされるように、前記１つまたは複数の動作パラメータを調整することが、前記新規システム上のクロックを異なるレートで動作させることを含む、請求項１に記載の方法。
【請求項２３】
プロセッサ、メモリ、及び前記メモリ内で具現化されるプロセッサ実行可能命令を含むシステムであって、前記命令が、レガシーシステム用に書かれたレガシーアプリケーションを実行するために新規システムの性能を最適化する方法を実施するように構成され、前記方法が、
前記レガシーアプリケーションを前記新規システム上で実行することと、
前記新規システム上で実行中の前記レガシーアプリケーションについての性能特性を判定することであって、前記性能特性が、１つまたは複数の主要性能メトリック及び他の性能情報を含み、前記１つまたは複数の主要性能メトリックは、前記レガシーアプリケーションが、前記新規システム上で実行されるときに満たされなければならない、前記判定することと、
前記１つまたは複数の主要性能メトリックが満たされるように、前記他の性能情報を用いて前記１つまたは複数の動作パラメータを調整することと、を含む、システム。
【請求項２４】
具現化されるコンピュータ可読命令を有する非一時的コンピュータ可読媒体であって、前記命令が、新規システム上におけるレガシーアプリケーションの実行時に、動作パラメータの後続の調整のために前記レガシーアプリケーションの性能を特徴付ける方法を実施するように構成され、前記方法が、
前記レガシーアプリケーションを前記新規システム上で実行することと、
前記新規システム上で実行中の前記レガシーアプリケーションについての性能特性を判定することであって、前記性能特性が、１つまたは複数の主要性能メトリック及び他の性能情報を含み、前記１つまたは複数の主要性能メトリックは、前記レガシーアプリケーションが、前記新規システム上で実行されるときに満たされなければならない、前記判定することと、
前記１つまたは複数の主要性能メトリックが満たされるように、前記他の性能情報を用いて前記１つまたは複数の動作パラメータを調整することと、を含む、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［優先権の主張］
本出願は、２０１６年３月３０日に出願された米国仮特許出願第６２／３１５，３４５号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。本出願は、また、２０１６年３月３０日に出願された米国仮特許出願第６２／３１５，３１５号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。本出願は、また、２０１７年３月２２日に出願された米国特許出願第１５／４６６，７６９号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。本出願は、２０１７年３月２２日に出願された米国特許出願第１５／４６６，７５９号の利益を主張し、その内容全体が参照によって本明細書に組み込まれる。
【０００２】
本開示の態様は、コンピュータシステム上でのコンピュータアプリケーションの実行に関する。特に、本開示の態様は、旧バージョンのコンピュータシステム用に設計されたアプリケーション／タイトルに後方互換性を提供するシステムまたは方法に関する。
【背景技術】
【０００３】
新規のコンピュータアーキテクチャがリリースされるとき、以前のバージョンのアーキテクチャ用に書かれたアプリケーションが、新規アーキテクチャ上で完璧に動作することが望ましい。このケイパビリティは、しばしば「後方互換性」と呼ばれる。後方互換性を実装することは、対象のレガシーデバイスを新規のホストアーキテクチャ上でエミュレートすることを伴い、それによって、新規アーキテクチャは、レガシーデバイス用に書かれたプログラムの命令を実行し得る。コンピュータアーキテクチャは、経時的に変化して、バス、クロック速度、プロセッサアーキテクチャ、キャッシング、標準などにおける技術的進歩を活用する。１つのコンピュータアーキテクチャが、より新しいアーキテクチャに置き換わると、古いアーキテクチャは、いわゆるレガシーアーキテクチャになる。その開発の過程にわたって、ネットワークプロトコル、ユーザインタフェース、オーディオ処理、デバイスドライバ、グラフィック処理、メッセージ、ワードプロセッサ、スプレッドシート、データベースプログラム、ゲーム、及び他のアプリケーションなどのソフトウェアアプリケーションは、レガシーアーキテクチャ用に書かれている。このようなレガシーソフトウェアは、それらが新規アーキテクチャにアップグレードする場合であっても、依然としてそのユーザには価値がある。したがって、レガシーソフトウェアを新規アーキテクチャ上で実行することが可能である必要性が存在する。
【０００４】
新規デバイスとレガシーデバイスとのハードウェアコンポーネントの性能の差が、新規デバイス上での同期エラーを引き起こし得る。それは、新規デバイスアーキテクチャ上で実行しているときに、レガシーアプリケーションをクラッシュさせるか、または誤った出力を生じさせ得る。このような性能の差は、例えば、新規デバイスとレガシーデバイスとの間のハードウェアアーキテクチャの差から起こり得る。
【発明の概要】
【０００５】
このような状況の中で、本開示の態様が生じる。
【図面の簡単な説明】
【０００６】
【図１Ａ】本開示の態様による、アプリケーション固有動作パラメータの導出を示すフロー図である。
【図１Ｂ】本開示の態様による、アプリケーション固有動作パラメータのリアルタイム調整を示すフロー図である。
【図２Ａ】本開示の態様による、後方互換モードで動作するように構成され得る中央処理装置（ＣＰＵ）コアの実施例を示すブロック図である。
【図２Ｂ】本開示の態様による、ＣＰＵのための可能なマルチコアアーキテクチャの実施例を示すブロック図である。
【図３】本開示の態様による、後方互換モードで動作するように構成されるＣＰＵを有するデバイスのブロック図である。
【発明を実施するための形態】
【０００７】
［序論］
新規デバイス上でレガシーアプリケーションを実行する際に、ハードウェアの振る舞いの違いに起因して発生する問題に対処するために、新規ハードウェアは、レガシーアプリケーションを実行するように調節され得る。
【０００８】
テスト段階の間、レガシーアプリケーションは、レガシーデバイス上でレガシーアーキテクチャを用いて実行され、性能情報が収集される。性能情報の実施例は、単位時間あたりのＡＬＵ命令またはメモリ動作の数、及び平均並列処理ハードウェアスケジューリングユニット（例えば、ウェーブフロント）占有率または寿命を含む。性能情報は、レガシーデバイス上でゲーム及びアプリケーションを実行すること、ならびにカウンタを読み出すことによって、直接測定（ＡＬＵ及びメモリ動作）されてもよい。代替的には、性能情報は、測定プロセスの一部として、そのようなカウンタ、または他のデータ出力を読み出すことから導出されてもよい。そのような導出の実施例として、平均ウェーブフロント占有率及び寿命が、ウェーブフロントが開始及び停止するときの測定値から導出され得る。特定のアプリケーション、例えば、特定のビデオゲームについての結合された性能データが、そのアプリケーションについての性能特性とここでは呼ばれる。テスト段階においてアプリケーションについて判定される性能特性は、後方互換性を保証するために、新規システム上で同じアプリケーションを実行するための基準値として使用され得る。
【０００９】
新規デバイス上でのアプリケーションの性能は、新規デバイスの動作パラメータを調節することによって、レガシーデバイス上の同じアプリケーションの性能に密接に合致され得る。動作パラメータの実施例は、とりわけ、新規デバイスのクロック周波数、利用可能な汎用レジスタ（ＧＰＲ）の数、命令起動レートなどを含む。アプリケーションは、アプリケーション固有性能特性を調整するようにその動作パラメータを調節しつつ、新規システム上で繰り返し実行され得る。新規システム上で十分な数のテストを行った後、新規システム上のアプリケーションの性能特性が、動作パラメータが変化するにつれてどのように収束するかを解析し得る。動作パラメータの新たなセットが、収束解析に基づいて生成され得る。このプロセスは、動作パラメータが、新規システム上のアプリケーションに対して最適に設定されるまで繰り返され得る。さらに最適化するために、アプリケーションが、それを機能しなくさせることなく新規ハードウェア上でより高速に実行され得るかどうかを見るために、新規ハードウェアの実行を調整し得る。
【００１０】
［アプリケーション固有性能特性の判定］
図１Ａは、アプリケーションがレガシーシステム上で動作するテスト段階中に、アプリケーション固有動作パラメータを導出する方法１０を示している。アプリケーションは、レガシーシステム上で実行１２され、コードブロック毎１４に、性能情報が、記録または導出１６される。アプリケーションを実行することは、例えば、キャプチャをロードすること及び入力無しでそれを実行させること、または特定のゲーム領域を通してプレイすることを含み得る。性能情報は、主要性能メトリック、及び他の性能情報を含む。主要性能メトリックは、アプリケーションが新規システム上で実行されるときに最も重要な性能情報のサブセットをいう。主要性能メトリックは、アプリケーションが新規ハードウェア上で実行されるときに満たされなければならないものである。主要性能メトリックの実施例は、１秒あたりのフレーム数（例えば、ビデオゲームなどのビデオ集中型アプリケーションの場合）、及びプログラムカウンタ（ＰＣ）レンジにビン化された１サイクルあたりの命令数（ＩＰＣ）を含むが、これらに限定されない。
【００１１】
他の性能情報は、ＰＣブロックレジデンス、単位時間あたりに発行される演算論理ユニット（ＡＬＵ）命令の数（ＣＰＵ及びＧＰＵ）、単位時間あたりに発行されるメモリ動作の数（ＣＰＵ及びＧＰＵ）、単位時間あたりの平均並列処理ハードウェアスケジューリングユニット（例えば、ウェーブフロント、ワープ、またはベクトル幅）占有率、平均並列処理ハードウェアスケジューリングユニット寿命、メモリ動作についての平均レイテンシ、単位時間あたりの対象をレンダリングするためのピクセル出力のカウント、及び、フレーム中のアクティブな総サイクル数（ＡＬＵカウントは、これの具体例）を含むが、これらに限定されない。
【００１２】
性能情報は、カウンタから直接読み出される値、または、プログラム実行中にイベント間のクロックサイクルをカウントするなど、そのような値もしくは他の情報から導出される値を含んでもよい。性能情報は、１８においてさらに解析されてもよく、選択される性能情報が、性能特性１９のセットを判定するために結合されてもよく、それは、次いで、保存または転送２０されてもよい。
【００１３】
ある性能情報値は、アプリケーションの実行に関連する情報を追跡する、専用プロセッサレジスタ内に記憶され得る。このような値の実施例は、プログラムカウンタ、ならびに、中でもメモリサイクル、演算論理ユニット（ＡＬＵ）サイクル、及びピクセルについてのカウンタなどのカウンタ値を含むが、これらに限定されない。プログラムカウンタ（ＰＣ）は、また、Ｉｎｔｅｌ  ｘ８６及びＩｔａｎｉｕｍマイクロプロセッサにおける命令ポインタ（ＩＰ）とも呼ばれ、命令アドレスレジスタ（ＩＡＲ）、または命令カウンタと呼ばれることもあり、コンピュータがそのプログラムシーケンス内にある場所を示す、プロセッサレジスタである。
【００１４】
上述のように、単位時間あたりの平均並列処理ハードウェアスケジューリングユニット（例えば、ウェーブフロント、ワープ、もしくはベクトル幅）占有率、平均並列処理ハードウェアスケジューリングユニット寿命、メモリ動作についての平均レイテンシ、単位時間あたりの対象をレンダリングするためのピクセル出力のカウントといった、ある他の性能情報が、間接的に導出され得る。限定ではなく例として、１サイクルあたりの命令数（ＩＰＣ）は、最初のプログラムカウンタ値と最後のプログラムカウンタ値との差を、最初のプログラムカウンタ値と最後のプログラムカウンタ値との間のクロックサイクル数で割ることによって、導出され得る。また、平均並列処理ハードウェアスケジューリングユニット寿命を判定することは、そのようなスケジューリングユニットの起動及び完了を検出すること、ならびにその間のクロックサイクルをカウントすることを伴い得る。同様に、並列処理ハードウェアスケジューリングユニットの単位時間あたりの平均占有率を判定することは、所与の時間ウィンドウの間起動及び完了を記録すること、ならびにその時間ウィンドウ内の任意の所与の時間において平均で何回実行しているかを判定することの問題である。
【００１５】
「並列処理スケジューリングユニット」という用語は、異なるプロセッサハードウェアの製造業者によって、コードの並列処理用の最小実行可能ユニットの概念を説明するために使用される、いくつかの異なる用語を包含する総称としてここでは使用される。例えば、ＧＰＵの文脈においては、並列処理スレッドは、スケジューリングの最も基本的なユニットとして、「ワープ」（ＮＶＩＤＩＡハードウェアの場合）、または「ウェーブフロント」（ＡＭＤハードウェアの場合）と呼ばれることがあるものに束ねられる。その違いは主に、共にグルーブ化されるスレッドの数である。他の等価な定義は、「動作し得る最小実行可能ユニットコード」、または「その中のスレッドの全てにわたって単一命令により同時に処理するユニット」、または「ＳＩＭＤ方式で処理されるデータの最小サイズ」を含む。ＣＰＵハードウェアの場合、並列性の最も基本レベルの概念は、「ベクトル幅」（例えば、Ｉｎｔｅｌ及びＡＭＤプロセッサ上でＳＳＥ命令を使用するとき）と呼ばれることが多い。単純化のため、「ウェーブフロント」という用語は、「並列処理スケジューリングユニット」の代用として、ここで使用されるものとする。ウェーブフロント内の全てのスレッドが、ロックステップで同一命令を実行し、違いは、その命令によって操作されるデータだけである。
【００１６】
他の動作情報は、いくつかの異なる方法で動作レジスタ値から導出され得る。例えば、ＩＰＣは、プログラム実行時に実行されている命令の総数を含むカウンタをサンプリングすることによって導出されてもよい。例として、このカウンタは、Ｎサイクル毎にサンプリングされてもよい。ＩＰＣ値は、（ＴＩＥｉ＋Ｎ−ＴＩＥｉ）／Ｎからの、最初の実行済み総命令数の値（ＴＩＥｉ）及びＮサイクル後のその後の値（ＴＩＥｉ＋Ｎ）から導出されてもよい。実際には、アプリケーションの所与のセクション（例えば、コードのブロック）についてのＩＰＣ値が、その特定セクションのためのＰＣレンジによってビン化されてもよい。さらに、アプリケーション内の各ＰＣレンジは、したがって、異なる潜在的振る舞いを有し、それに対応して異なるＩＰＣ値を有してもよい。したがって、例えば、コードブロック番号により、ＩＰＣ値をプログラムコードの識別されるセクションと関連付けることは有用である。
【００１７】
ＰＣブロックレジデンスは、現在実行されているアプリケーションコードのブロックをいい、ＧＰＵは、典型的には、複数のコード部分を同時に実行するため、ＰＣブロックレジデンスは、ＧＰＵよりもＣＰＵにより関連し得る。ＰＣブロックレジデンスは、Ｎサイクル毎にＰＣをサンプリングすること、及びサンプルがコードの同一ブロック内に入る回数をカウントすることによって導出され得る。
【００１８】
ＡＬＵまたはメモリ動作の発行頻度は、そのような動作の発行を検出すること、及び所与の時間ウィンドウにわたって発行されるそのような動作の数をカウントすることによって、導出され得る。同様に、単位時間あたりの対象をレンダリングするためのピクセル出力のカウントは、所与の時間ウィンドウにわたるピクセル出力をカウントすることによって導出され得る。キャッシュレイテンシまたはメモリ動作レイテンシなどのレイテンシは、キャッシュ読み出し／書き込み及び／またはメモリアクセス命令の発行及び完了を検出すること、ならびに発行と完了との間のクロックサイクルをカウントすることによって、導出され得る。
【００１９】
１６において性能情報を記録すること／導出することは、ビジーウェイトを検出することを含み得る。ビジーウェイトは、典型的には、短いループとして実装される。カウンタの観点からは、これは、ＰＣが非常に小さな範囲内にとどまっている（かつ繰り返している）ように見え、ループを通して毎回起こる、何らかの種類のメモリ読み出しまたはＩＯ読み出し動作が存在することとなる。ＩＰＣは、ループのために大きくなり得ると考えられるが、より実際的には、メモリまたはＩＯ動作の結果が返ってくるのを待機することによってループ内の時間が左右されることになるため、ＩＰＣは小さい可能性が高い。ビジーウェイトは、ＰＣが非常に小さな範囲内にとどまる時間を探すことによって検出されてもよく、その時間は、メモリまたはＩＯ動作が完了するのを待機することによって左右される。ビジーウェイトは、ＩＰＣ及び他の性能情報測定値にずれを生じさせる傾向がある。ビジーウェイトに費やす時間が予測不可能であるため、ビジーウェイトの間に取られる測定値は、１８において性能特性を判定するプロセスの一部として、性能情報から除去されてもよい。そうすることによって、動作パラメータを調整する後続のプロセスが、ビジーウェイトの存在によって影響を受けないこととなる。
【００２０】
１８において、記録または導出された性能情報を解析することは、概して、実行中のアプリケーションの振る舞いを大まかに特徴付ける性能特性１９の有用なセットに、性能情報を絞り込むことを伴う。性能特性１９は、以下で説明するように、１つまたは複数の主要性能メトリック、及び後の動作パラメータの判定に有用な他の性能情報を含むが、これらに限定されない。
【００２１】
性能特性判定段階１８は、例えば、多くの異なる性能情報値が、所与の動作パラメータの変化に応じて変化し得るときに、主要性能情報値及び動作パラメータの変化の間の相関関係を、多変量解析を通して判定することによって、動作パラメータを調節するためにどの性能情報値が有用であるかを判定し得る。
【００２２】
［パラメータ調整プロセス］
図１Ｂは、アプリケーションが新規システム上で動作する際に動作パラメータを最適化するように、レガシーアプリケーションの実行を調整する方法３０を説明する。新規システムは、性能特性１９を使用して、レガシーアプリケーションの実行（３２）時にリアルタイムで１つまたは複数の動作パラメータを調整し得る。各コードブロック３４について、性能情報が、例えば上述したように導出３６される。３８において、１つまたは複数の主要性能メトリックが境界範囲内にない場合、それらが境界範囲内に入るまで、１つまたは複数の動作パラメータが繰り返し調整４０され得る。３８において、主要性能メトリックが、一旦境界範囲内に入れば、動作パラメータは、更新４２され、さらなる調整４０によって最適化され得る。更新／最適化された動作パラメータデータ４３は、保存または転送４４され得る。
【００２３】
「動作パラメータ」という用語は、概して、主要性能メトリックを含む性能情報に影響を及ぼすように調整され得る、新規システム上でのアプリケーション実行の態様をいう。動作パラメータの実施例は、例えば、ＣＰＵ、ＧＰＵ、またはメモリのためのクロック周波数、命令の起動レート、ＡＬＵ及び／またはメモリ動作の起動レート、例えば、汎用レジスタ（ＧＰＲ）、ウェーブフロントスロット、読み出し及びストアキューサイズなどのリソース、特徴無効化、キャッシュパラメータ（例えば、キャッシュサイズ、ウェイの数、バンクの数、など）、ウェーブフロント起動レート、レンダーバックエンドからのピクセル出力レート、メモリ動作ストールを含んでもよいが、これらに限定されない。
【００２４】
アルゴリズムマッチングは、新規システムアーキテクチャ用に書かれた新規かつ改善されたアルゴリズムの代わりに、レガシーシステムアーキテクチャからのアルゴリズムを使用して、新規システム上においてある動作を実行することをいう。このようなアルゴリズムマッチングの実施例が、レガシーシステム用の分岐予測器を使用して、新規システム上で分岐予測を実行することである。この例では、アルゴリズムマッチングパラメータは、レガシーアルゴリズムにおいて使用されるパラメータを含む。
【００２５】
他の動作パラメータは、リソース制限に関連するパラメータ（例えば、参照により本明細書に組み込まれる、２０１５年７月２７日に出願された米国特許出願第１４／８１０，３６１号に記載されている）、ならびにアルゴリズムマッチング、特徴無効化、及びレイテンシまたはスループットのマッチングに関連するパラメータ（例えば、参照により本明細書に組み込まれる、２０１５年７月２７日に出願された米国特許出願第１４／８１０，３３４号に記載されている）も含み得る。
【００２６】
４０における動作パラメータの調整は、単純であってもよく、例えば、新規ハードウェア上の汎用レジスタ（ＧＰＲ）の数を、レガシーハードウェアと同一の数に設定することであってもよい。代替的には、新規ハードウェアが、ある動作のためのレガシーアルゴリズムを使用してもよく、または、新規ハードウェアの特徴が、レガシーアプリケーションの動作のために無効化されてもよい。実行は、新規システム上のレイテンシをレガシーハードウェアのレイテンシに合致させるように調整されてもよい。
【００２７】
動作パラメータの調整は、レガシーハードウェアと新規ハードウェアのアーキテクチャの差に起因して、より複雑であり得る。いくつかの場合において、例えば、わずかに大きな数のＧＰＲを設定することによって、元のハードウェアよりも多くのリソースが、新規ハードウェア上に割り当てられ得る。
【００２８】
下記の表Ｉは、アプリケーション固有動作パラメータ、それらの導出方法、及びそれらの調整方法の非限定的な例をリストにしたものである。
【００２９】
【表１】
2020115390.tif 000003
【００３０】
結果となる更新された動作パラメータ４３は、アプリケーション固有性能情報の各項目についての下限を含み得る。それより上では、レガシーハードウェア上で実行しているレガシーアプリケーションの性能メトリックが、一貫して満たされる。新規ハードウェア上でさらにテストすることで、アプリケーション固有性能情報の各項目は、上限をさらに含み得る。それより上では、レガシーアプリケーションは、もはや適切に機能しないか、または、レガシーアプリケーションの主要性能メトリックが、新規システム上ではもはや満たされない。アプリケーション固有性能情報は、下記の表ＩＩにおける情報に対応し得る。
【００３１】
【表２】
2020115390.tif 000004
【００３２】
表ＩＩに示される実施例には、レガシープログラムにおける各コードブロックについての性能情報のための上限及び下限のセットがある。この情報は、新規ハードウェア上でのレガシーゲームの後続の動作において使用され得る。そのような後続の動作は、新規ハードウェアが最小値と最大値との間で性能情報を維持するように実行を調整して、図１Ｂに記載されるように進行し得る。
【００３３】
動作パラメータの導出及び調整は、図２Ａ〜２Ｂ及び図３に示されるハードウェアの特徴に関連し得る。図２Ａは、ＣＰＵコア１００の一般化されたアーキテクチャを示す。ＣＰＵコア１００は、典型的には、分岐が取られるか否かの予測を試み、かつ（分岐が取られる場合に）分岐の行先アドレスの予測も試みる、分岐予測ユニット１０２を含む。これらの予測が正確である限り、投機的に実行されたコードの効率が上昇することとなり、したがって、より正確性の高い分岐予測が極めて望ましい。分岐予測ユニット１０２は、サブルーチンからの復帰アドレスを追跡する復帰アドレススタック１０４、間接分岐の行先を追跡する間接ターゲットアレイ１０６、ならびにそれらの結果となるアドレスをより正確に予測するために分岐の過去の履歴を追跡する分岐ターゲットバッファ１０８及びその関連予測ロジックなどの、高度に専門化されたサブユニットを含み得る。
【００３４】
ＣＰＵコア１００は、典型的には、命令フェッチ及び復号ユニット１１０を含み、命令フェッチ及び復号ユニット１１０は、命令フェッチユニット１１２、命令バイトバッファ１１４、及び命令復号ユニット１１６を含む。ＣＰＵコア１００は、典型的には、いくつかの命令関連キャッシュ及び命令変換索引バッファ（ＩＴＬＢ）１２０も含む。これらは、ページテーブルエントリ、ページディレクトリエントリなどの物理アドレス変換情報に仮想アドレスをキャッシュするＩＴＬＢキャッシュ階層１２４を含み得る。この情報は、命令の仮想アドレスを物理アドレスへと変換するために使用され、それによって、命令フェッチユニット１１２が、キャッシュ階層から命令をロードすることができる。限定ではなく例として、プログラム命令は、コア内に存在するレベル１命令キャッシュ（Ｌ１  Ｉキャッシュ）１２２、及びＣＰＵコア１００外部の他のキャッシュレベル１７６を含むキャッシュ階層に従ってキャッシュされてもよい。命令の物理アドレスを使用して、これらのキャッシュは、まずプログラム命令について検索される。命令が見つからない場合、それらは、システムメモリ１０１からロードされる。アーキテクチャによっては、後述するように、復号済み命令を含むマイクロオペキャッシュ１２６も存在し得る。
【００３５】
プログラム命令が一旦フェッチされると、それらは、典型的には、命令フェッチ及び復号ユニット１１０による処理を待機する命令バイトバッファ１１４内に配置される。復号は、非常に複雑なプロセスであり得る。各サイクルで複数の命令を復号することは困難であり、１サイクル内に復号され得る命令の数を制限する、命令アライメントまたは命令の種類についての制限が存在し得る。復号済み命令は、アーキテクチャによっては、マイクロオペキャッシュ１２６内に配置されてもよく（１つは、新規ＣＰＵ上に存在する場合）、したがって、復号段階は、プログラム命令の後続の使用のためにバイパスされ得る。
【００３６】
復号済み命令は、典型的には、ディスパッチ及びスケジューリング１３０のための他のユニットに渡される。これらのユニットは、リタイアキュー１３２を使用して、ＣＰＵパイプラインのリマインダ全体を通して命令の状態を追跡し得る。さらに、多くのＣＰＵアーキテクチャにおいて利用可能な汎用及びＳＩＭＤレジスタの数が制限されることに起因して、レジスタリネーミングが実行されてもよく、そこでは、論理（アーキテクチャともいう）レジスタが、実行されている命令のストリームにおいて遭遇されるため、物理レジスタ１４０が、それらを表すために割り当てられる。物理レジスタ１４０は、単一命令複数データ（ＳＩＭＤ）レジスタバンク１４２及び汎用（ＧＰ）レジスタバンク１４４を含んでもよく、それは、特定のＣＰＵアーキテクチャ上で利用可能な論理レジスタの数よりもかなり大きなサイズであってもよく、その結果、性能が相当に向上され得る。レジスタリネーミング１３４が実行された後、命令は、典型的には、スケジューリングキュー１３６に配置され、スケジューリングキュー１３６から、いくつかの命令が、実行ユニット１５０による実行のために（依存性に基づいて）各サイクルで選択され得る。
【００３７】
実行ユニット１５０は、典型的には、ＳＩＭＤレジスタバンク１４２に含まれる１２８ビットまたはそれ以上のＳＩＭＤレジスタに含まれる複数のデータフィールド上でいくつかの並列演算を実行するＳＩＭＤパイプ１５２と、ＧＰレジスタバンク１４４に含まれるＧＰＲ上でいくつかの論理、算術、及び種々の演算を実行する演算論理ユニット（ＡＬＵ）１５４と、メモリが記憶されまたはロードされるべきアドレスを計算するアドレス生成ユニット（ＡＧＵ）１５６と、を含む。実行ユニットの各種類の複数のインスタンスが存在してもよく、インスタンスは、異なるケイパビリティを有してもよく、例えば、特定のＳＩＭＤパイプ１５２は、浮動小数点加算動作ではなく浮動小数点乗算動作を実行することが可能であってもよい。
【００３８】
ストア及びロードは、典型的には、ストアキュー１６２及びロードキュー１６４にバッファされ、それによって、多くのメモリ動作が、並列で実行され得る。メモリ動作を支援するために、ＣＰＵコア１００は、通常いくつかのデータ関連キャッシュ及びデータ変換索引バッファ（ＤＴＬＢ）１７０を含む。ＤＴＬＢキャッシュ階層１７２は、仮想アドレスを、ページテーブルエントリ、ページディレクトリエントリなどの物理アドレス変換にキャッシュする。この情報は、メモリ動作の仮想アドレスを物理アドレスに変換するために使用され、それによって、データはシステムメモリに記憶され、またはシステムメモリからロードされ得る。データは、典型的には、コア内に存在するレベル１データキャッシュ（Ｌ１  Ｄキャッシュ）１７４、及びコア１００の外部にある他のキャッシュレベル１７６にキャッシュされる。
【００３９】
本開示のある態様によれば、ＣＰＵは、複数のコアを含んでもよい。限定ではなく例として、図２Ｂは、本開示の態様と併せて使用され得る、可能なマルチコアＣＰＵ２００の例を示す。具体的には、ＣＰＵ２００のアーキテクチャは、Ｍ個のクラスタ２０１−１…２０１−Ｍを含んでもよく、Ｍは、０より大きい整数である。各クラスタは、Ｎ個のコア２０２−１、２０２−２…２０２−Ｎを有してもよく、Ｎは、１より大きい整数である。本開示の態様は、異なるクラスタが異なる数のコアを有する実施態様を含む。各コアは、１つまたは複数の対応する専用ローカルキャッシュ（例えば、Ｌ１命令、Ｌ１データ、またはＬ２キャッシュ）を含み得る。ローカルキャッシュのそれぞれは、いかなる他のコアとも共有されないという意味で、特定の対応するコア専用であり得る。各クラスタは、また、対応するクラスタ内のコア間で共有され得るクラスタレベルキャッシュ２０３−１…２０３−Ｍを含み得る。いくつかの実施態様では、クラスタレベルキャッシュは、異なるキャッシュに関連付けられたコアによって共有されない。さらに、ＣＰＵ２００は、１つまたは複数の上位レベルキャッシュ２０４を含んでもよく、上位レベルキャッシュ２０４は、クラスタ間で共有され得る。クラスタ内のコア間の通信を容易にするために、クラスタ２０１−１…２０２−Ｍは、コアのそれぞれ及びクラスタ用のクラスタレベルキャッシュに連結される、対応するローカルバス２０５−１…２０５−Ｍを含み得る。同様に、クラスタ間の通信を容易にするために、ＣＰＵ２００は、クラスタ２０１−１…２０１−Ｍ、及び上位レベルキャッシュ２０４に連結される、１つまたは複数の上位レベルバス２０６を含み得る。いくつかの実施態様では、上位レベルバス２０６は、また、他のデバイス、例えば、ＧＰＵ、メモリ、またはメモリコントローラに連結され得る。さらに他の実施態様では、上位レベルバス２０６は、システム内の様々なデバイスに接続されるデバイスレベルバスに接続され得る。さらに他の実施態様では、上位レベルバス２０６は、クラスタ２０１−１…２０１−Ｍを上位レベルキャッシュ２０４に連結し得る。デバイスレベルバス２０８は、上位レベルキャッシュ２０４を他のデバイス、例えば、ＧＰＵ、メモリ、またはメモリコントローラに連結し得る。限定ではなく例として、このようなデバイスレベルバス２０８を有する実施態様は、例えば、上位レベルキャッシュ２０４が、全ＣＰＵコア用のＬ３であるがＧＰＵ使用のためではない場合に生じ得る。
【００４０】
ＣＰＵ２００において、ＯＳ処理は、主にあるコア、またはコアのあるサブセット上で発生し得る。同様に、アプリケーションレベルの処理は、主に特定のコア、またはコアのサブセット上で発生し得る。個々のアプリケーションスレッドは、あるコア、またはコアのあるサブセット上で動作するようにアプリケーションによって指定され得る。キャッシュ及びバスが共有されているため、所与のアプリケーションスレッドによる処理速度は、所与のアプリケーションスレッドと同一のクラスタ内で動作している他のスレッド（例えば、アプリケーションスレッド、またはＯＳスレッド）によって発生している処理に依存して変化し得る。ＣＰＵ２００の詳細に依存して、コアは、一度にただ１つのスレッドのみを実行することが可能であってもよく、または複数のスレッドを同時に実行すること（「ハイパースレッディング」）が可能であってもよい。ハイパースレッド型ＣＰＵの場合、アプリケーションは、また、どのスレッドが、他のどのスレッドと同時に実行され得るかを指定し得る。スレッドの性能は、同一コアによって実行されているいずれかの他のスレッドによって実行される、特定の処理によって影響を受ける。
【００４１】
ここで図３を参照すると、本開示の態様に従って動作するように構成されるデバイス３００の例示的な例が示されている。本開示の態様によれば、デバイス３００は、組み込み型システム、モバイルフォン、パーソナルコンピュータ、タブレットコンピュータ、ポータブルゲームデバイス、ワークステーション、ゲームコンソールなどであり得る。
【００４２】
デバイス３００は、概して、図１に示し上述した種類の１つまたは複数のＣＰＵコア３２３を含み得る中央処理装置（ＣＰＵ）３２０を含む。ＣＰＵ３２０は、図２のＣＰＵ２００に示したような構成で、複数のそのようなコア３２３、及び１つまたは複数のキャッシュ３２５を含み得る。限定ではなく例として、ＣＰＵ３２０は、単一チップ上にＣＰＵ３２０及びグラフィック処理ユニット（ＧＰＵ）３３０を含む高速処理ユニット（ＡＰＵ）３１０の一部であってもよい。代替的な実施態様では、ＣＰＵ３２０及びＧＰＵ３３０は、別々のチップ上の別々のハードウェアコンポーネントとして実装されてもよい。ＧＰＵ３３０は、また、２つ以上のコア３３２及び２つ以上のキャッシュ３３４、ならびに（いくつかの実施態様では）コア及びキャッシュ及びシステムの他のコンポーネント間の通信を容易にするための１つまたは複数のバスを含み得る。バスは、ＡＰＵ３１０用の内部バス３１７、及び外部データバス３９０を含み得る。
【００４３】
デバイス３００は、また、メモリ３４０を含み得る。メモリ３４０は、任意で、ＣＰＵ３２０及びＧＰＵ３３０にアクセス可能なメインメモリユニットを含み得る。ＣＰＵ３２０及びＧＰＵ３３０は、それぞれ１つまたは複数のプロセッサコア、例えば、単一コア、２つのコア、４つのコア、８つのコア、またはそれ以上を含み得る。ＣＰＵ３２０及びＧＰＵ３３０は、外部データバス３９０を使用して１つまたは複数のメモリユニットにアクセスするように構成されてもよく、いくつかの実施態様では、２つ以上の異なるバスを含むことがデバイス３００には有用であり得る。
【００４４】
メモリ３４０は、アドレス可能なメモリ、例えば、ＲＡＭ、ＤＲＡＭなどを提供する集積回路の形態の１つまたは複数のメモリユニットを含み得る。メモリは、レガシーＣＰＵ上の実行用に当初作成されたアプリケーションを実行する際、デバイス３００をタイミングテストモードで動作させるように判断するための実行時に、図５の方法のような方法を実施するように構成される実行可能命令を含み得る。さらに、メモリ３４０は、グラフィックリソースを一時的に記憶するための専用グラフィックメモリと、グラフィックバッファと、グラフィックレンダリングパイプライン用の他のグラフィックデータと、を含み得る。
【００４５】
ＣＰＵ３２０は、ＣＰＵコードを実行するように構成されてもよく、ＣＰＵコードは、オペレーティングシステム（ＯＳ）３２１、またはアプリケーション３２２（例えば、ビデオゲーム）を含み得る。オペレーティングシステムは、ソフトウェア（例えば、アプリケーション３２２）からの入力／出力（Ｉ／Ｏ）要求を管理し、それらをＣＰＵ３２０、ＧＰＵ３３０、またはデバイス３００の他のコンポーネントのためのデータ処理命令に変換するカーネルを含み得る。ＯＳ３２１は、また、ファームウェアを含んでもよく、ファームウェアは、不揮発性メモリに記憶され得る。ＯＳ３２１は、以下で詳細に説明するように、ＣＰＵ３２０をタイミングテストモードで動作させるある特徴を実装するように構成され得る。ＣＰＵコードは、アプリケーション３２２の状態に基づいて、ＧＰＵ３３０によって実装されるプログラムへのドローコマンドまたはドローコールを発行するためのグラフィックアプリケーションプログラミングインタフェース（ＡＰＩ）３２４を含み得る。ＣＰＵコードは、また、物理的シミュレーション及び他の機能を実装し得る。ＯＳ３２１、アプリケーション３２２、またはＡＰＩ３２４のうちの１つまたは複数のためのコードの一部は、メモリ３４０、ＣＰＵ内部もしくは外部のキャッシュ、またはＣＰＵ３２０にアクセス可能な大容量記憶デバイスに記憶され得る。
【００４６】
デバイス３００は、メモリコントローラ３１５を含み得る。メモリコントローラ３１５は、メモリ３４０に向かう、またはメモリ３４０から来るデータの流れを管理するデジタル回路であってもよい。限定ではなく例として、メモリコントローラは、図３に示される例のように、ＡＰＵ３１０の不可欠な部分であってもよく、または別々のハードウェアコンポーネントであってもよい。
【００４７】
デバイス３００は、また、周知のサポート機能３５０を含んでもよく、サポート機能３５０は、例えばバス３９０を介して、システムの他のコンポーネントと通信し得る。このようなサポート機能は、入力／出力（Ｉ／Ｏ）素子３５２と、ＣＰＵ３２０、ＧＰＵ３３０、及びメモリ３４０それぞれのための別々のクロックを含み得る１つまたは複数のクロック３５６と、ＣＰＵ３２０及びＧＰＵ３３０の外部にあり得る１つまたは複数レベルのキャッシュ３５８とを含んでもよいが、これらに限定されない。デバイス３００は、任意で、プログラム及び／またはデータを記憶するための、ディスクドライブ、ＣＤ−ＲＯＭドライブ、フラッシュメモリ、テープドライブ、ブルーレイドライブなどの大容量記憶デバイス３６０を含んでもよい。１つの例では、大容量記憶デバイス３６０は、レガシーＣＰＵを有するシステム上で動作するように当初設計されたレガシーアプリケーションを含む、コンピュータ可読媒体３６２を受け入れ得る。代替的には、レガシーアプリケーション３６２（またはその一部）は、メモリ３４０に記憶されてもよく、またはキャッシュ３５８に一部記憶されてもよい。
【００４８】
デバイス３００は、また、ＧＰＵ３３０によって準備される、レンダリングされたグラフィック３８２をユーザに提示するためのディスプレイユニット３８０を含み得る。デバイス３００は、また、システム１００及びユーザ間のインタラクションを容易にするためのユーザインタフェースユニット３７０を含み得る。ディスプレイユニット３８０は、フラットパネルディスプレイ、陰極線管（ＣＲＴ）スクリーン、タッチスクリーン、ヘッドマウントディスプレイ（ＨＭＤ）、またはテキスト、数字、グラフィカルシンボル、もしくは画像を表示可能な他のデバイスの形態であってもよい。ディスプレイ３８０は、ここで説明する多様な技術に従って処理されるレンダリングされたグラフィック３８２を表示し得る。ユーザインタフェース３７０は、キーボード、マウス、ジョイスティック、ライトペン、ゲームコントローラ、タッチスクリーン、及び／またはグラフィカルユーザインタフェース（ＧＵＩ）と併せて使用され得る他のデバイスなどの、１つまたは複数の周辺機器を含み得る。ある実施態様では、アプリケーション３２２の状態及びグラフィックの元となるコンテンツは、例えば、アプリケーション３２２が、ビデオゲームまたは他のグラフィック集中型アプリケーションを含む場合の、ユーザインタフェース３７０を通じたユーザ入力に少なくとも一部よって判断されてもよい。
【００４９】
デバイス３００は、また、デバイスがネットワークを介して他のデバイスと通信することを可能にするためのネットワークインタフェース３７２を含み得る。ネットワークは、例えば、ローカルエリアネットワーク（ＬＡＮ）、インターネットなどの広域ネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）ネットワークなどのパーソナルエリアネットワーク、または他の種類のネットワークであってもよい。図示及び説明したコンポーネントのうちの様々なものが、ハードウェア、ソフトウェア、もしくはファームウェア、またはそれらのうち２つ以上の何らかの組み合わせで実装されてもよい。
【００５０】
下記の表ＩＩＩは、図２Ａ、図２Ｂ、及び図３に関して上述した特定ハードウェア要素が、性能情報及び対応する、調整する動作パラメータを判定するために、どのように使用され得るかの、いくつかの非限定的な例をリストにする。
【００５１】
【表３】
2020115390.tif 000005
【００５２】
新規デバイス上でレガシーアプリケーションを実行しているときに記録または導出される性能情報が、レガシーデバイス上でレガシーアプリケーションを実行するための対応する性能情報を満たすか、または超えることが可能ではない場合があることに留意する。例えば、新規デバイス上の平均メモリレイテンシは、動作パラメータがどのように調整されるかに関わらず、レガシーデバイス上で測定される平均メモリレイテンシよりも高い可能性がある。新規システムについてのこの種の性能情報を知ることは、動作パラメータを調整する際に有用であり得るが、レガシー及び新規デバイス上で実行するアプリケーションの性能特性を比較する際に使用されるべきではない。１秒あたりのフレーム数（ＦＰＳ）及び１サイクルあたりの命令数（ＩＰＣ）に限定されないが、それらのような主要性能メトリックだけが、実際に使用されるべきである。
【００５３】
レガシーデバイス上で実行される同じアプリケーションの主要性能メトリックを満たすために、アプリケーションが新規デバイス上で動作する際に動作パラメータを調整するプロセスは、ビデオゲームを含む以下の実施例から理解され得る。まず、性能データは、その主要性能メトリックを判定するために、レガシーデバイス上で実行中のゲームについて収集される。次に、ゲームは、新規デバイスの動作パラメータを調整する間、新規デバイス上で実行される。新規デバイスの性能は、レガシーデバイス上でゲームを実行したときに行われたのと同じ性能情報を新規デバイス上で収集することによって、かつ、次いで、それら２つのデバイス上で実行中のゲームの主要性能メトリックを比較することによって、測定され得る。新規デバイスについての性能情報が、レガシーデバイスからの性能データに完全に合致することは、望ましいことであり得るが、これは、実際には可能でない場合がある。新規デバイス上の性能情報が、レガシーデバイス上の性能情報に可能な限り近接して合致することで十分である。しかしながら、新規デバイス上の主要性能メトリックが、レガシーデバイス上の主要性能メトリックよりも悪いことは容認できず、クラッシュし（典型的には、同期の問題に起因する）、または誤った出力を生成する（同じ理由で）アプリケーションまたはゲームも同様である。
【００５４】
ここで実際的に言うと、ゲームが新規デバイス上で実行される最初の数回、動作パラメータは、レガシーデバイス上と同一であるように設定されると考えられる。ゲームが十分に新規デバイス上で実行され、その動作パラメータが調節されたら、そのエクスペリエンス及びデータが、さらなるゲームに使用され得るヒューリスティックを構築するために使用され得る。ヒューリスティックは、新規デバイス上の動作パラメータの初期値をゲームの性能特性に基づいて設定するために使用され得る。次いで、ゲームは、新規デバイス上で実行されることとなり、動作パラメータは、主要性能メトリックにさらによく合致するように修正され得る。新規デバイス上で測定される全ての性能データが、主要性能メトリックだけではなく、動作パラメータを調整するのを助けるために使用され得る。動作パラメータに対して行われるいかなる調整も、ヒューリスティックをさらに洗練するためにも使用され得る。
【図１Ａ】
2020115390.tif 000006
【図１Ｂ】
2020115390.tif 000007
【図２Ａ】
2020115390.tif 000008
【図２Ｂ】
2020115390.tif 000009
【図３】
2020115390.tif 000010