(57)【要約】      （修正有）【課題】タイミングを中断させるモードにおけるソフトウェアの後方互換性テストを提供する。【解決手段】デバイスを、タイミングテストモードで動作させる方法であって、デバイスは、タイミングテストモードにおいて、１つまたは複数のプロセッサでアプリケーションを動作させている間に、１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させる。アプリケーションは、デバイスがタイミングテストモードで動作している間に、エラーについてテストされる。【選択図】図５
2020113302.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサに連結されるメモリと、
前記１つまたは複数のプロセッサの少なくともサブセット上で動作するように構成される、前記メモリに記憶されたオペレーティングシステム（ＯＳ）と、を備えるデバイスであって、前記オペレーティングシステムが、通常モードまたはタイミングテストモードで選択的に動作するように構成され、前記タイミングテストモードにおいて、前記１つまたは複数のプロセッサでアプリケーションを動作させ、前記デバイスが前記タイミングテストモードで動作中、デバイスハードウェアコンポーネントおよび／またはソフトウェアコンポーネントの同期におけるエラーについて前記アプリケーションをテストしている間に、前記デバイスが、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成され、
前記１つまたは複数のプロセッサが、中央処理装置（ＣＰＵ）を含み、
前記タイミングテストモードにおいて、前記デバイスが、前記１つまたは複数のプロセッサ上でアプリケーションを動作させている間に、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることにより、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成される、デバイス。
【請求項２】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、キューのサイズを減少させることを含む、請求項１に記載のデバイス。
【請求項３】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、ストアキューのサイズを減少させることを含む、請求項２に記載のデバイス。
【請求項４】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、ロードキューのサイズを減少させることを含む、請求項２に記載のデバイス。
【請求項５】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、スケジューリングキューのサイズを減少させることを含む、請求項２に記載のデバイス。
【請求項６】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、リタイアキューのサイズを減少させることを含む、請求項２に記載のデバイス。
【請求項７】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、キャッシュのサイズを減少させることを含む、請求項１に記載のデバイス。
【請求項８】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、レベル１命令キャッシュのサイズを減少させることを含む、請求項７に記載のデバイス。
【請求項９】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、レベル１データキャッシュのサイズを減少させることを含む、請求項７に記載のデバイス。
【請求項１０】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、上位レベルキャッシュのサイズを減少させることを含む、請求項７に記載のデバイス。
【請求項１１】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、テーブル索引バッファ（ＴＬＢ）のサイズを減少させることを含む、請求項１に記載のデバイス。
【請求項１２】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、命令変換索引バッファ（ＩＴＬＢ）のサイズを減少させることを含む、請求項１１に記載のデバイス。
【請求項１３】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、データ変換索引バッファ（ＤＴＬＢ）のサイズを減少させることを含む、請求項１１に記載のデバイス。
【請求項１４】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、１つまたは複数の命令パイプの実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項１５】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、１つまたは複数の命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項１６】
前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＣＰＵによって実行される全ての命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項１７】
前記ＣＰＵが、演算論理ユニット（ＡＬＵ）を含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＡＬＵによって実行される１つまたは複数の特定の命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項１８】
前記ＣＰＵが、演算論理ユニット（ＡＬＵ）を含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＡＬＵによって実行される全ての命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項１９】
前記ＣＰＵが、アドレス生成ユニット（ＡＧＵ）を含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＡＧＵによって実行される１つまたは複数の特定の命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項２０】
前記ＣＰＵが、アドレス生成ユニット（ＡＧＵ）を含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＡＧＵによって実行される全ての命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項２１】
前記ＣＰＵが、単一命令複数データ（ＳＩＭＤ）ユニットを含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＳＩＭＤユニットによって実行される１つまたは複数の特定の命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項２２】
前記ＣＰＵが、単一命令複数データ（ＳＩＭＤ）ユニットを含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記ＳＩＭＤユニットによって実行される全ての命令の実行レートを減少させることを含む、請求項１に記載のデバイス。
【請求項２３】
前記ＣＰＵが、１つまたは複数のプロセッサコアを含み、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることが、前記１つまたは複数のプロセッサコアのうちの１つまたは複数の個々のプロセッサコアを先取りすることを含む、請求項１に記載のデバイス。
【請求項２４】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサに連結されるメモリと、を備えるデバイスであって、
前記デバイスが、通常モードまたはタイミングテストモードで選択的に動作するように構成され、前記タイミングテストモードにおいて、前記１つまたは複数のプロセッサでアプリケーションを動作させ、前記デバイスが前記タイミングテストモードで動作中、デバイスハードウェアコンポーネントおよび／またはソフトウェアコンポーネントの同期におけるエラーについて前記アプリケーションをテストしている間に、前記デバイスが、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成され、
前記１つまたは複数のプロセッサが、中央処理装置（ＣＰＵ）を含み、
前記タイミングテストモードにおいて、前記デバイスが、前記１つまたは複数のプロセッサ上でアプリケーションを動作させている間に、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることにより、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成される、前記デバイス。
【請求項２５】
１つまたは複数のプロセッサと、前記１つまたは複数のプロセッサに連結されるメモリとを有するデバイスにおける方法であって、
前記デバイスをタイミングテストモードで動作させることであって、前記タイミングテストモードにおいて、前記デバイスが、前記１つまたは複数のプロセッサでアプリケーションを動作させている間に、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成される、前記動作させることと、
前記デバイスが前記タイミングテストモードで動作している間に、デバイスハードウェアコンポーネントおよび／またはソフトウェアコンポーネントの同期におけるエラーについて前記アプリケーションをテストすることと、を含み、
前記１つまたは複数のプロセッサが、中央処理装置（ＣＰＵ）を含み、
前記タイミングテストモードにおいて、前記デバイスが、前記１つまたは複数のプロセッサ上でアプリケーションを動作させている間に、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることにより、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成される、前記方法。
【請求項２６】
具現化されたコンピュータ可読実行可能命令を有する非一時的コンピュータ可読媒体であって、前記命令が、プロセッサ及びメモリを有するデバイスに前記命令の実行時に方法を実施させるように構成され、前記方法が、
前記デバイスをタイミングテストモードで動作させることであって、前記タイミングテストモードにおいて、前記デバイスが、１つまたは複数のプロセッサでアプリケーションを動作させている間に、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成される、前記動作させることと、
前記デバイスが前記タイミングテストモードで動作している間に、デバイスハードウェアコンポーネントおよび／またはソフトウェアコンポーネントの同期におけるエラーについて前記アプリケーションをテストすることと、を含み、
前記１つまたは複数のプロセッサが、中央処理装置（ＣＰＵ）を含み、
前記タイミングテストモードにおいて、前記デバイスが、前記１つまたは複数のプロセッサ上でアプリケーションを動作させている間に、前記アプリケーションを動作させるのに利用可能な前記ＣＰＵのリソースを減少させることにより、前記１つまたは複数のプロセッサ上で行われる処理のタイミングを中断させるように構成される、前記非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、本発明の譲受人に譲渡された、２０１５年１１月０２日に出願された米国非仮出願第１４／９３０，４０８号の優先権の利益を主張し、その内容全体が参照により本明細書に組み込まれる。
【０００２】
本開示の態様は、コンピュータシステム上でのコンピュータアプリケーションの実行に関する。特に、本開示の態様は、コンピュータシステムの旧バージョン向けのアプリケーション／タイトルに後方互換性を提供するシステムまたは方法に関する。
【背景技術】
【０００３】
現代のコンピュータシステムは、異なるコンピューティングタスクのためにいくつかの異なるプロセッサを使用することがよくある。例えば、現在のコンピュータは、いくつかの中央処理装置（ＣＰＵ）に加えて、グラフィックスパイプラインにおけるある計算タスク専用のグラフィック処理ユニット（ＧＰＵ）、またはオーディオ用のデジタル信号処理専用のユニットを有することがあり、その全てが、潜在的に、他のユニットも含み得る高速処理ユニット（ＡＰＵ）の一部である。これらのプロセッサは、ＡＰＵの内部にあるか、またはコンピュータのマザーボード上に外部的に位置し得るバスを使用して多様な種類のメモリに接続される。
【０００４】
アプリケーションのセットがビデオゲームコンソールまたはスマートフォン（「レガシーデバイス」）などのコンピュータシステムのために作成されていることは一般的であり、コンピュータシステムの変化形、またはより高度なバージョン（「新規デバイス」）がリリースされるとき、レガシーデバイスのアプリケーションが、再コンパイル、または新規デバイスの特性を考慮したいかなる修正もなしに、新規デバイス上で完全に動作することが望ましい。そのハードウェアアーキテクチャ、ファームウェア、及びオペレーティングシステムに含まれる新規デバイスのこの態様は、「後方互換性」と呼ばれることがよくある。
【０００５】
後方互換性は、しばしばバイナリ互換性を通じて達成され、そこでは、新規デバイスが、レガシーデバイス用に作成されたプログラムを実行することが可能である。一方、デバイスのカテゴリのリアルタイム動作が、その動作に重要であるとき、ビデオゲームコンソールまたはスマートフォンの場合と同様に、新規デバイスの動作速度の著しい差異によって、それがレガシーデバイスに対して後方互換性を有することができない場合がある。新規デバイスが、レガシーデバイスよりも低い性能のものである場合、後方互換を妨げる問題が発生し得る。これは、レガシーデバイスと比較したときに、新規デバイスがより高い性能のものであるか、または異なる性能特性を有する場合にも当てはまる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このような状況の中で、本開示の態様が生じる。
【課題を解決するための手段】
【０００７】
本開示の教示は、添付図面と併せて以下の詳細な説明を考察することによって容易に理解され得る。
【図面の簡単な説明】
【０００８】
【図１】本開示の態様による、後方互換モードで動作するように構成され得る中央処理装置（ＣＰＵ）コアの例を示すブロック図である。
【図２】本開示の態様による、ＣＰＵのための可能なマルチコアアーキテクチャの例を示すブロック図である。
【図３】本開示の態様による、後方互換モードで動作するように構成されるＣＰＵを有するデバイスのブロック図である。
【図４】「スキュー」の概念を示すタイミング図である。
【図５】本開示の態様による、タイミングテストモードにおけるデバイスの動作を示すフロー図である。
【発明を実施するための形態】
【０００９】
序論
新規デバイスのＣＰＵが、レガシーデバイスとバイナリ互換性を有する（即ち、レガシーデバイス用に作成されたプログラムを実行可能である）場合であっても、新規デバイスのＣＰＵとレガシーデバイスのＣＰＵとの性能特性の差異が、レガシーアプリケーションにおいてエラーを引き起こすことがあり、結果として、新規デバイスは、後方互換性を有しないこととなる。
【００１０】
新規デバイスのＣＰＵが、レガシーデバイスのＣＰＵよりも低い性能を有する場合、レガシーアプリケーションにおける多くのエラーは、表示タイミング、オーディオストリームアウトなどによって課されるリアルタイムデッドラインを満たすことができないことに起因して起こり得る。新規デバイスのＣＰＵが、レガシーデバイスのＣＰＵよりも実質的に高い性能を有する場合、レガシーアプリケーションにおける多くのエラーは、そのような高速動作のテストされていない結果に起因して起こり得る。例えば、生産者−消費者モデルにおいて、データの消費者（例えば、ＣＰＵ）が当初の予想よりも高速で動作する場合、消費者は、データ生産者（例えば、コンピュータの何らかの他のコンポーネント）がそれを利用可能にする前に、データにアクセスしようとすることがある。あるいは、データの生産者（例えば、ＣＰＵ）が、当初の予想よりも高速で動作する場合、データ消費者（例えば、コンピュータの何らかの他のコンポーネント）によってまだ使用されているデータを、生産者が上書きすることがある。
【００１１】
さらに、ＣＰＵによるコードの実行速度は、実行されている特定のコードの特性に依存するため、レガシーデバイスに対する新規デバイスのＣＰＵの性能向上度が、実行されている特定のコードに依存する可能性がある。これは、上述した生産者−消費者モデルにおける問題につながりことがあり、その場合に生産者及び消費者の双方がＣＰＵであるが、レガシーハードウェア上で遭遇しない相対速度でレガシーアプリケーションのコードを実行している。
【００１２】
実施形態
本開示の態様は、デバイス用に書かれたアプリケーションが、（第１のデバイス用に書かれたプログラムが第２のデバイス上で実行するという点において）バイナリ互換性があるが（第１のデバイス用に書かれたプログラムが第２のデバイス上で異なるレートで実行し、したがって動作中にエラーが生じ得るという点において）異なるタイミング特性を有する第２のデバイス上で動作しているときに、高度な後方互換性を有することを可能にし得る、コンピュータシステム及び方法を説明する。第２のデバイスは、潜在的に第１のデバイスの変化形またはより高度なバージョンであり、第２のデバイスの特徴及びケイパビリティが第１のデバイスにより近づく「後方互換モード」で、潜在的に構成され得る。
【００１３】
本開示の実施態様では、タイミングテストモードは、第１のデバイスのために作成される。このモードは、デバイス上では見つからない（または典型的に見つからない）タイミングを作成し、その結果、アプリケーションがこのモードで動作するときに、ハードウェアコンポーネント（ＣＰＵ、ＧＰＵ、オーディオ及びビデオハードウェアなど）間、またはソフトウェアコンポーネント（アプリケーション処理、もしくはＯＳ処理など）間の同期のエラーが、デバイス上において可能ではない、または一般的でないやり方で、通常動作中に発生する。これらの同期におけるエラーが一度検出されると、アプリケーションソフトウェアは、それらを除去し、または緩和するように修正され、アプリケーションが第２のデバイス上で異なるタイミング特性で適切に実行する可能性を増加させる。即ち、アプリケーションは、第１のデバイスに対してより高度な後方互換性を第２のデバイス上で有することとなる。第２のデバイスのケイパビリティが既知でない場合がある（例えば、それが、まだ存在していない将来のデバイスである場合がある）ため、タイミングテストモードにおいて利用可能なタイミングに大きな多様性を有することは有益である。
【００１４】
本開示の実施態様では、タイミングテストモードにおいて、オペレーティングシステムは、ある状態で（例えば、デバイスの通常動作では見つからない特定の動作周波数で）ハードウェアを構成してもよい。さらに、タイミングテストモードにおいて、オペレーティングシステムは、アプリケーションが動作している時にハードウェア構成を変更してもよく、またはアプリケーションが動作している時に多様な処理（例えば、システムリソースについて計算する、もしくはアプリケーション処理を先取りするプロセス）を実行してもよい。
【００１５】
本開示の実施態様では、テストは、デバイスとは異なるハードウェア上で実行されてもよい。例えば、消費者デバイスよりも大きな動作範囲で動作するように選択されたＩＣを使用することによって、テストモードが消費者デバイス上で利用できないこととなる。
【００１６】
図１は、ＣＰＵコア１００の一般化されたアーキテクチャを示す。ＣＰＵコア１００は、典型的には、分岐がとられるか否かを予測しようとし、さらに（分岐が取られる場合に）分岐の行先アドレスを予測しようとする、分岐予測ユニット１０２を含む。これらの予測が正確である限り、投機的に実行されたコードの効率が上昇することとなり、したがって、より正確性の高い分岐予測が極めて望ましい。分岐予測ユニット１０２は、サブルーチンからの復帰アドレスを追跡する復帰アドレススタック１０４、間接分岐の行先を追跡する間接ターゲットアレイ１０６、ならびにそれらの結果となるアドレスをより正確に予測するために分岐の過去の履歴を追跡する分岐ターゲットバッファ１０８及びその関連予測ロジックなどの高度に専門化されたサブユニットを含み得る。
【００１７】
ＣＰＵコア１００は、典型的には、命令フェッチ及び復号ユニット１１０を含み、命令フェッチ及び復号ユニット１１０は、命令フェッチユニット１１２、命令バイトバッファ１１４、及び命令復号ユニット１１６を含む。ＣＰＵコア１００は、さらに典型的には、いくつかの命令関連キャッシュ及び命令変換索引バッファ（ＩＴＬＢ）１２０を含む。これらは、ページテーブルエントリ、ページディレクトリエントリなどの物理アドレス変換情報に仮想アドレスをキャッシュするＩＴＬＢキャッシュ階層１２４を含み得る。この情報は、命令の仮想アドレスを物理アドレスへと変換するために使用され、それによって、命令フェッチユニット１１２が、キャッシュ階層から命令をロードすることができる。限定ではなく例として、プログラム命令は、コア内に存在するレベル１命令キャッシュ（Ｌ１  Ｉキャッシュ）１２２、及びＣＰＵコア１００の外部の他のキャッシュレベル１７６を含むキャッシュ階層に従ってキャッシュされてもよい。命令の物理アドレスを使用して、これらのキャッシュは、まずプログラム命令について検索される。命令が見つからない場合、それらは、システムメモリ１０１からロードされる。アーキテクチャによっては、後述するように、復号済み命令を含むマイクロオペキャッシュ１２６も存在し得る。
【００１８】
プログラム命令が一旦フェッチされると、それらは、典型的には、命令フェッチ及び復号ユニット１１０による処理を待機する命令バイトバッファ１１４内に配置される。復号は、非常に複雑なプロセスであり得る。各サイクルで複数の命令を復号することは困難であり、１サイクル内に復号され得る命令の数を制限する、命令の整列または命令の種類についての制限が存在し得る。復号済み命令が、アーキテクチャによっては、マイクロオペキャッシュ１２６内に配置され得る（１つは、新規のＣＰＵ上に存在する場合）。したがって、復号段階は、プログラム命令の後ほどの使用のためにバイパスされ得る。
【００１９】
復号済み命令は、典型的には、ディスパッチ及びスケジューリング１３０のための他のユニットに渡される。これらのユニットは、リタイアキュー１３２を使用して、ＣＰＵパイプラインのリマインダ全体を通して命令の状態を追跡し得る。さらに、多くのＣＰＵアーキテクチャにおいて利用可能な汎用及びＳＩＭＤレジスタの数が制限されることに起因して、レジスタリネーミングが実行されてもよく、そこでは、論理（アーキテクチャともいう）レジスタが、実行されている命令のストリームにおいて遭遇されるため、物理レジスタ１４０が、それらを表すために割り当てられる。物理レジスタ１４０は、単一命令複数データ（ＳＩＭＤ）レジスタバンク１４２及び汎用（ＧＰ）レジスタバンク１４４を含んでもよく、それは、特定のＣＰＵアーキテクチャ上で利用可能な論理レジスタの数よりもかなり大きなサイズであってもよく、その結果、性能が相当に向上され得る。レジスタリネーミング１３４が実行された後、命令は、典型的には、スケジューリングキュー１３６に配置され、スケジューリングキュー１３６から、いくつかの命令が、実行ユニット１５０による実行のために（依存性に基づいて）各サイクルで選択され得る。
【００２０】
実行ユニット１５０は、典型的には、ＳＩＭＤレジスタバンク１４２に含まれる１２８ビットまたはそれ以上のＳＩＭＤレジスタに含まれる複数のデータフィールド上でいくつかの並列演算を実行するＳＩＭＤパイプ１５２と、ＧＰレジスタバンク１４４に含まれるＧＰＲ上でいくつかの論理、算術、及び種々の演算を実行する算術論理演算ユニット（ＡＬＵ）１５４と、メモリが記憶されまたはロードされるべきアドレスを計算するアドレス生成ユニット（ＡＧＵ）１５６と、を含む。実行ユニットの各種類の複数のインスタンスが存在してもよく、インスタンスは、異なるケイパビリティを有してもよく、例えば、特定のＳＩＭＤパイプ１５２は、浮動小数点加算動作ではなく浮動小数点乗算動作を実行することが可能であってもよい。
【００２１】
ストア及びロードは、典型的には、ストアキュー１６２及びロードキュー１６４にバッファされ、それによって、多くのメモリ動作が、並列で実行され得る。メモリ動作を支援するために、ＣＰＵコア１００は、通常いくつかのデータ関連キャッシュ及びデータ変換索引バッファ（ＤＴＬＢ）１７０を含む。ＤＴＬＢキャッシュ階層１７２は、仮想アドレスを、ページテーブルエントリ、ページディレクトリエントリなどの物理アドレス変換にキャッシュする。この情報は、メモリ動作の仮想アドレスを物理アドレスに変換するために使用され、それによって、データはシステムメモリに記憶され、またはシステムメモリからロードされ得る。データは、典型的には、コア内に存在するレベル１データキャッシュ（Ｌ１  Ｄキャッシュ）１７４、及びコア１００の外部にある他のキャッシュレベル１７６にキャッシュされる。
【００２２】
開示のある態様によれば、ＣＰＵは、複数のコアを含み得る。限定ではなく例として、図２は、本開示の態様と併せて使用され得る、可能なマルチコアＣＰＵ２００の例を示す。具体的には、ＣＰＵ２００のアーキテクチャは、Ｍ個のクラスタ２０１−１、．．．２０１−Ｍを含んでもよく、Ｍは、０より大きい整数である。各クラスタは、Ｎ個のコア２０２−１、２０２−２、．．．２０２−Ｎを有してもよく、Ｎは、１より大きい整数である。本開示の態様は、異なるクラスタが異なる数のコアを有する実施態様を含む。各コアは、１つまたは複数の対応する専用ローカルキャッシュ（例えば、Ｌ１命令、Ｌ１データ、またはＬ２キャッシュ）を含み得る。ローカルキャッシュのそれぞれは、いかなる他のコアとも共有されないという意味で、特定の対応するコア専用であり得る。各クラスタは、また、対応するクラスタ内のコア間で共有され得るクラスタレベルキャッシュ２０３−１、．．．２０３−Ｍを含み得る。いくつかの実施態様では、クラスタレベルキャッシュは、異なるキャッシュに関連付けられたコアによって共有されない。さらに、ＣＰＵ２００は、１つまたは複数の上位レベルキャッシュ２０４を含んでもよく、上位レベルキャッシュ２０４は、クラスタ間で共有され得る。クラスタ内のコア間の通信を容易にするために、クラスタ２０１−１、．．．２０２−Ｍは、コアのそれぞれ及びクラスタ用のクラスタレベルキャッシュに連結される、対応するローカルバス２０５−１、．．．２０５−Ｍを含み得る。同様に、クラスタ間の通信を容易にするために、ＣＰＵ２００は、クラスタ２０１−１、．．．２０１−Ｍ、及び上位レベルキャッシュ２０４に連結される、１つまたは複数の上位レベルバス２０６を含み得る。いくつかの実施態様では、上位レベルバス２０６は、また、他のデバイス、例えば、ＧＰＵ、メモリ、またはメモリコントローラに連結され得る。さらに他の実施態様では、上位レベルバス２０６は、システム内の様々なデバイスに接続されるデバイスレベルバスに接続され得る。さらに他の実施態様では、上位レベルバス２０６は、クラスタ２０１−１、．．．２０１−Ｍを上位レベルキャッシュ２０４に連結し得る。デバイスレベルバス２０８は、上位レベルキャッシュ２０４を他のデバイス、例えば、ＧＰＵ、メモリ、またはメモリコントローラに連結し得る。限定ではなく例として、このようなデバイスレベルバス２０８を有する実施態様は、例えば、上位レベルキャッシュ２０４が、全ＣＰＵコア用のＬ３であるがＧＰＵ使用のためではない場合に生じ得る。
【００２３】
ＣＰＵ２００において、ＯＳ処理は、あるコア、またはコアのあるサブセット上で主に発生し得る。同様に、アプリケーションレベルの処理は、特定のコア、またはコアのサブセット上で主に発生し得る。個々のアプリケーションスレッドは、あるコア、またはコアのあるサブセット上で動作するようにアプリケーションによって指定され得る。キャッシュ及びバスが共有されているため、所与のアプリケーションスレッドによる処理速度は、所与のアプリケーションスレッドと同一のクラスタ内で動作している他のスレッド（例えば、アプリケーションスレッド、またはＯＳスレッド）によって発生している処理に依存して変化し得る。ＣＰＵ２００の詳細に依存して、コアは、一度にただ１つのスレッドのみを実行することが可能であってもよく、または複数のスレッドを同時に実行すること（「ハイパースレッディング」）が可能であってもよい。ハイパースレッド型ＣＰＵの場合、アプリケーションは、また、どのスレッドが、他のどのスレッドと同時に実行され得るかを指定し得る。スレッドの性能は、同一コアによって実行されているいずれかの他のスレッドによって実行される、特定の処理によって影響を受ける。
【００２４】
ここで図３を参照すると、本開示の態様に従って動作するように構成されるデバイス３００の例示的な例が示されている。本開示の態様によれば、デバイス３００は、組み込み型システム、モバイルフォン、パーソナルコンピュータ、タブレットコンピュータ、ポータブルゲームデバイス、ワークステーション、ゲームコンソールなどであり得る。
【００２５】
デバイス３００は、概して、図１に示し上述した種類の１つまたは複数のＣＰＵコア３２３を含み得る中央処理装置（ＣＰＵ）３２０を含む。ＣＰＵ３２０は、図２のＣＰＵ２００に示したような構成で、複数のそのようなコア３２３、及び１つまたは複数のキャッシュ３２５を含み得る。限定ではなく例として、ＣＰＵ３２０は、単一チップ上にＣＰＵ３２０及びグラフィック処理ユニット（ＧＰＵ）３３０を含む高速処理ユニット（ＡＰＵ）３１０の一部であってもよい。代替的な実施態様では、ＣＰＵ３２０及びＧＰＵ３３０は、別々のチップ上の別々のハードウェアコンポーネントとして実装されてもよい。ＧＰＵ３３０は、また、２つ以上のコア３３２及び２つ以上のキャッシュ３３４、ならびに（いくつかの実施態様では）コア及びキャッシュ及びシステムの他のコンポーネント間の通信を容易にするための１つまたは複数のバスを含み得る。バスは、ＡＰＵ３１０用の内部バス３１７、及び外部データバス３９０を含み得る。
【００２６】
デバイス３００は、また、メモリ３４０を含み得る。メモリ３４０は、任意で、ＣＰＵ３２０及びＧＰＵ３３０にアクセス可能なメインメモリユニットを含み得る。ＣＰＵ３２０及びＧＰＵ３３０は、それぞれ１つまたは複数のプロセッサコア、例えば、単一コア、２つのコア、４つのコア、８つのコア、またはそれ以上を含み得る。ＣＰＵ３２０及びＧＰＵ３３０は、外部データバス３９０を使用して１つまたは複数のメモリユニットにアクセスするように構成されてもよく、いくつかの実施態様では、２つ以上の異なるバスを含むことがデバイス３００には有用であり得る。
【００２７】
メモリ３４０は、アドレス可能なメモリ、例えば、ＲＡＭ、ＤＲＡＭなどを提供する集積回路の形態の１つまたは複数のメモリユニットを含み得る。メモリは、レガシーＣＰＵ上の実行用に当初作成されたアプリケーションを動作させる際、デバイス３００をタイミングテストモードで動作させることを判断するための実行時に、図５の方法のような方法を実施するように構成される実行可能命令を含み得る。さらに、メモリ３４０は、グラフィックリソースを一時的に記憶するための専用グラフィックメモリと、グラフィックバッファと、グラフィックレンダリングパイプライン用のグラフィックデータと、を含み得る。
【００２８】
ＣＰＵ３２０は、ＣＰＵコードを実行するように構成されてもよく、ＣＰＵコードは、オペレーティングシステム（ＯＳ）３２１、またはアプリケーション３２２（例えば、ビデオゲーム）を含み得る。オペレーティングシステムは、ソフトウェア（例えば、アプリケーション３２２）からの入力／出力（Ｉ／Ｏ）リクエストを管理し、それらをＣＰＵ３２０、ＧＰＵ３３０、またはデバイス３００の他のコンポーネントのためのデータ処理命令に変換するカーネルを含み得る。ＯＳ３２１は、また、ファームウェアを含んでもよく、ファームウェアは、不揮発性メモリに記憶され得る。ＯＳ３２１は、以下の詳細で説明するように、ＣＰＵ３２０をタイミングテストモードで動作させることの、ある特徴を実装するように構成され得る。ＣＰＵコードは、アプリケーション３２２の状態に基づいて、ＧＰＵ３３０によって実装されるプログラムへのドローコマンドまたはドローコールを発行するためのグラフィックアプリケーションプログラミングインタフェース（ＡＰＩ）３２４を含み得る。ＣＰＵコードは、また、物理的シミュレーション及び他の機能を実装し得る。ＯＳ３２１、アプリケーション３２２、またはＡＰＩ３２４のうちの１つまたは複数のためのコードの一部は、メモリ３４０、ＣＰＵ内部もしくは外部のキャッシュ、またはＣＰＵ３２０にアクセス可能な大容量記憶デバイスに記憶され得る。
【００２９】
デバイス３００は、メモリコントローラ３１５を含み得る。メモリコントローラ３１５は、メモリ３４０に向かう、またはメモリ３４０から来るデータの流れを管理するデジタル回路であってもよい。限定ではなく例として、メモリコントローラは、図３に示される例のように、ＡＰＵ３１０の不可欠な部分であってもよく、または別々のハードウェアコンポーネントであってもよい。
【００３０】
デバイス３００は、また、周知のサポート機能３５０を含んでもよく、サポート機能３５０は、例えばバス３９０を介して、システムの他のコンポーネントと通信し得る。このようなサポート機能は、入力／出力（Ｉ／Ｏ）エレメント３５２と、ＣＰＵ３２０、ＧＰＵ３３０、及びメモリ３４０それぞれのための別々のクロックを含み得る１つまたは複数のクロック３５６と、ＣＰＵ３２０及びＧＰＵ３３０の外部にあり得る１つまたは複数レベルのキャッシュ３５８とを含んでもよいが、これらに限定されない。デバイス３００は、任意で、プログラム及び／またはデータを記憶するための、ディスクドライブ、ＣＤ−ＲＯＭドライブ、フラッシュメモリ、テープドライブ、ブルーレイドライブなどの大容量記憶デバイス３６０を含んでもよい。１つの例では、大容量記憶デバイス３６０は、レガシーＣＰＵを有するシステム上で動作するように当初設計されたレガシーアプリケーションを含む、コンピュータ可読媒体３６２を受け入れ得る。代替的には、レガシーアプリケーション３６２（またはその一部）は、メモリ３４０に記憶されてもよく、またはキャッシュ３５８に一部記憶されてもよい。
【００３１】
デバイス３００は、また、ＧＰＵ３３０によって準備されたレンダリングされたグラフィック３８２をユーザに提示するためのディスプレイユニット３８０を含み得る。デバイス３００は、また、システム１００とユーザ間のインタラクションを容易にするためのユーザインタフェースユニット３７０を含み得る。ディスプレイユニット３８０は、フラットパネルディスプレイ、陰極線管（ＣＲＴ）スクリーン、タッチスクリーン、ヘッドマウントディスプレイ（ＨＭＤ）、またはテキスト、数字、グラフィカルシンボル、もしくは画像を表示可能な他のデバイスの形態であってもよい。ディスプレイ３８０は、本明細書で説明する多様な技術に従って処理されるレンダリングされたグラフィック３８２を表示し得る。ユーザインタフェース３７０は、キーボード、マウス、ジョイスティック、ライトペン、ゲームコントローラ、タッチスクリーン、及び／またはグラフィカルユーザインタフェース（ＧＵＩ）と併せて使用され得る他のデバイスなどの、１つまたは複数の周辺機器を含み得る。ある実施態様では、アプリケーション３２２の状態及びグラフィックの元となるコンテンツは、例えば、アプリケーション３２２が、ビデオゲームまたは他のグラフィック集中型アプリケーションを含む場合の、ユーザインタフェース３７０を通じたユーザ入力によって少なくとも部分的に判断されてもよい。
【００３２】
デバイス３００は、また、デバイスがネットワークを介して他のデバイスと通信することを可能にするためのネットワークインタフェース３７２を含み得る。ネットワークは、例えば、ローカルエリアネットワーク（ＬＡＮ）、インターネットなどの広域ネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）ネットワークなどのパーソナルエリアネットワーク、または他の種類のネットワークであってもよい。図示及び説明したコンポーネントのうちの多様なものが、ハードウェア、ソフトウェア、もしくはファームウェア、またはそれらのうち２つ以上のある組み合わせで実装されてもよい。
【００３３】
本開示の態様は、レガシーシステム用に書かれたプログラムを、より強力な、または異なる構成の新規システム上で動作させる際にタイミングの差異の結果として生じる、後方互換での問題を克服する。タイミングテストモードでデバイス３００を動作させることによって、開発者は、レガシーシステム用に書かれたソフトウェアが、新規システム上で動作される際どのように実行するかを判断することができる。
【００３４】
本開示の態様によれば、デバイス３００は、タイミングテストモードで動作するように構成され得る。このような動作モードの有用性を理解するために、図４のタイミング図を考察する。図４において、アプリケーションの動作時に、異なるコンピューティングエレメント（例えば、ＣＰＵコア）Ａ、Ｂ、Ｃ、Ｄは、平行四辺形Ａ１．．．Ａ４、Ｂ１．．．Ｂ４、Ｃ１．．．Ｃ４、Ｄ１．．．Ｄ４によって示される異なるタスクを実行し得る。あるタスクが、他のタスクによって消費されるためのデータを生成する必要があり、他のタスクは、必要なデータが生成されるまで、作業を開始することができない。例えば、タスクＡ２は、タスクＡ１によって生成されるデータを必要とし、タスクＢ２は、タスクＡ１及びＢ１によって生成されるデータを必要とすると仮定する。適切な動作を確実にするために、典型的には、アプリケーションは、タスク間でセマフォまたは他の同期戦略を用いるものとし、例えば、タスクＢ２の実行開始に先立って、（タスクＢ２に必要なソースデータを生成する）タスクＡ１及びＢ１が完了に至るまで実行されたことをチェックすべきである。さらに、図４に示されるタイミングは、レガシーデバイス上で実装されるものとしてこれらのタスクのタイミングを表していると仮定する。タイミングは、新規デバイス（例えば、コアＢにおいてより強力な処理ケイパビリティを有するもの）上で異なっていてもよく、その結果、タスクＡ１がタスクＢ２によって必要なデータを生成する前に、タスクＢ１が終了することがある。異なるプロセッサ上のタスクの相対的なタイミングのシフトは、本明細書において「スキュー」と呼ばれる。このようなスキューは、新規デバイス上でのみ出現する、または新規デバイス上で出現頻度が増加する、アプリケーション中のソフトウェアエラーをさらけ出し得る。例えば、レガシーデバイス上で、タスクＡ１がタスクＢ２の前に終了することが保証された場合、タスクＡ１がタスクＢ２の前に終了することを確保する同期コードは決してテストされることはなく、同期コードが、不適切に実装された場合、このことは、新規デバイス上でのアプリケーション動作時にしか分からないこととなる可能性がある。例えば、タスクＡ１がタスクＢ２によって必要とされるデータを生成する前にタスクＢ２が実行を開始し、潜在的にアプリケーション中の致命的なエラーにつながる可能性がある。さらに、新規デバイス上で動作させるために書かれたアプリケーションが、より能力の低いレガシーデバイス上で動作されるときに、類似の問題が生じ得る。これらの問題に対処するために、３００などのデバイスは、タイミングテストモードで動作され得る。タイミングテストモードでは、スキューが、例えばＣＰＵスレッド間、またはＣＰＵ３２０及びＧＰＵ３３０間、またはＧＰＵ３３０上で動作しているプロセス間、またはこれらのいずれかとリアルタイムクロックとの間で、計画的に作成され得る。このモードでのテストは、アプリケーションが将来のハードウェア上で適切に動作する可能性を増大させ得る。
【００３５】
本開示の態様によれば、タイミングテストモードにおいて、ＣＰＵコアは、デバイスの通常動作用とは異なる（より高い、またはより低い）周波数で動作されるように構成され、または、ＯＳ３２１は、ＣＰＵコアの周波数を絶えずもしくは時折、修正し得る。これは、ＣＰＵコアが全て互いに対して同一の周波数で動作するやり方で、またはＣＰＵコアが互いとは異なる周波数で動作するやり方で、またはいくつかがある周波数で動作し、その他が別の周波数で動作し得るやり方で、行われてもよい。
【００３６】
限定ではなく例として、レガシーデバイス上に、消費者デバイス上その典型的な動作モードにおいて１ＧＨｚで動作する４つのコアが存在する場合に、タイミングテストモードでは、連続する１０秒の期間中、コアは、８００ＭＨｚで動作するようにランダムに選択され得る。その結果、選択されたコア上で動作しているプロセスは、より低速で動作し、選択されたコアにより準備されるデータを、そのデータが完全に準備できる前に他のコアが使用しようとするときに、そのコアと他のコアとの間の同期ロジックにおいて起こり得るエラーをさらけ出す。
【００３７】
現在の開示の態様では、タイミングテストモードにおいて、ＣＰＵコアに含まれないキャッシュのクロックレートは、それらの通常動作周波数とは異なる（より高い、もしくはより低い）周波数、またはＣＰＵコアの通常動作周波数とは異なる周波数で動作するように構成され得る。そのようなやり方で構成され得る複数のキャッシュが存在する場合、それらは、互いに対して同じレートで、互いに対して異なる周波数で、または、いくつかはある周波数でその他は別の周波数で、動作するように構成され得る。
【００３８】
現在の開示の態様では、タイミングテストモードにおいて、ＣＰＵリソースは、アプリケーションコードの実行タイミングに影響を与えるようなやり方で制限されるように構成され得る。キュー、例えば、ストア及びロードキュー、リタイアキュー、及びスケジューリングキューは、サイズが減少されるように構成され得る（例えば、リソースの使用可能部分が制限され得る）。Ｌ１  Ｉキャッシュ及びＤキャッシュ、ＩＴＬＢ及びＤＴＬＢキャッシュ階層、ならびに上位レベルキャッシュなどのキャッシュは、サイズが減少されてもよい（例えば、完全なアソシアティブキャッシュに記憶され得る値の数は減少されてもよく、またはウェイの数が制限されたキャッシュについて利用可能なバンクカウントもしくはウェイカウントが減少されてもよい）。ＡＬＵ、ＡＧＵ、またはＳＩＭＤパイプ上で動作している全ての命令または特定の命令の実行レートが、減少されてもよい（例えば、レイテンシが増加し、及び／またはスループットが減少する）。
【００３９】
現在の開示の態様では、タイミングテストモードにおいて、ＯＳは、アプリケーションスレッドを一時的に先取り（一時停止）し得る。限定ではなく例として、個々のアプリケーションスレッドが先取りされてもよく、または複数のスレッドが同時に先取りされてもよく、または全スレッドが同時に先取りされてもよい。先取りタイミングは、ランダムであってもよく、系統的であってもよい。先取りの数及びその長さは、リアルタイムデッドライン（表示タイミングまたはオーディオストリームアウトなどのための）が、アプリケーションによって満たされ得る可能性を増大させるように調整され得る。
【００４０】
現在の開示の態様では、タイミングテストモードにおいて、ＯＳがアプリケーションによってリクエストされる処理（例えば、アロケーションなどのサービス）を実行するとき、または、ＯＳがアプリケーションリクエストから独立した処理（ハードウェア割り込みのサービス提供）を実行するときに、ＯＳによってかかる時間及びＯＳによって使用されるプロセッサ（例えば、ＣＰＵコア）は、デバイスの動作の通常モードにおいてかかる時間及び使用されるＣＰＵコアとは異なり得る。限定ではなく例として、メモリアロケーションを実行するためにＯＳによってかかる時間が増加し、またはＯＳが、デバイスの通常動作時にアプリケーションによって排他的に使用されるＣＰＵコアを使用して、ハードウェア割り込みをサービス提供し得る。
【００４１】
現在の開示の態様では、タイミングテストモードにおいて、アプリケーションスレッドは、アプリケーションによって指定されるものとは異なるＣＰＵコア上で実行され得る。限定ではなく例として、それぞれが２つのコアを有する２つのクラスタ（クラスタ「Ａ」及びクラスタ「Ｂ」）を有するシステムにおいて、クラスタＡのコア０上での実行用に指定された全てのスレッドが、代わりにクラスタＢのコア０上で実行され、クラスタＢのコア０上での実行用に指定された全てのスレッドが、代わりにクラスタＡのコア０上で実行され得る。その結果、クラスタ上位レベルキャッシュをデバイスの通常動作時とは異なるスレッドと共有することによって、スレッド処理の実行タイミングが異なることとなる。
【００４２】
現在の開示の態様では、タイミングテストモードにおいて、ＯＳ３２１は、ランダムにまたは系統的に、ＣＰＵキャッシュを書き戻しもしくは無効化してもよく、または命令及びデータＴＬＢを無効化してもよい。限定ではなく例として、ＯＳは、全てのＣＰＵコアのキャッシュ階層をランダムに無効化及び書き戻しし得る。その結果、無効化及び書き戻し中のスレッド実行における遅延、及びキャッシュ階層において通常見つかるスレッドリクエストデータとしての遅延をもたらし、その結果、デバイスの通常動作中に遭遇しないタイミングをもたらす。
【００４３】
現在の開示の態様では、タイミングテストモードにおいて、別々の構成可能な周波数でのＧＰＵ及び任意のＧＰＵサブユニットが、デバイスの通常動作とは異なる周波数で動作するように構成され、またはＯＳが、ＧＰＵ及びその別々に構成可能なサブユニットのうちのいずれかの周波数を絶えずもしくは時折修正し得る。
【００４４】
さらに、Ｌ１  Ｉキャッシュ及びＤキャッシュ、ＩＴＬＢ及びＤＴＬＢキャッシュ階層、ならびに上位レベルキャッシュなどの１つまたは複数のキャッシュの他の動作が、タイミングテストモードにおいてタイミングを中断させるようにして修正され得る。キャッシュ動作修正のこのような変更の１つの非限定的な例は、特定のキャッシュが排他的であるか、または包括的であるかを変更することである。通常モードにおいて包括的であるキャッシュは、タイミングテストモードにおいて排他的であるように構成されてもよく、またはその逆も同様である。
【００４５】
キャッシュ動作修正の別の非限定的な例は、キャッシュルックアップ動作を伴う。タイミングテストモードにおいて、キャッシュルックアップは、通常モードとは異なるようにして行われ得る。新規なハードウェアが、キャッシュルックアップ前に仮想アドレスから物理アドレスへ変換し、古いハードウェアがそうでない場合、ある新規なプロセッサハードウェアについてのメモリアクセスは、古いハードウェアと比較して実際には減速され得る。物理アドレスによって記憶されるキャッシュエントリの場合、マルチコアＣＰＵキャッシュ３２５について通常行われるのと同様に、仮想アドレスは、常に、（例えば、Ｌ１及びＬ２において）キャッシュルックアップを実行する前に物理アドレスに変換される。常にいかなるキャッシュルックアップを実行する前にも仮想アドレスを物理アドレスに変換することによって、特定のメモリ位置に書き込むコアが、その位置に書き込まないように他のコアに通知することが可能となる。対称的に、仮想アドレスに従って記憶されたキャッシュエントリ（例えば、ＧＰＵキャッシュ３３４）についてのキャッシュルックアップは、アドレスを変換する必要なしに実行され得る。アドレス変換が、キャッシュミスの場合、即ち、エントリがキャッシュ内になく、メモリ３４０内がルックアップされなければならない場合にしか実行される必要がないために、これはより高速である。例えば、古いＧＰＵハードウェアが、仮想アドレスによってキャッシュエントリを記憶し、新規なＧＰＵハードウェアが、物理アドレスによってキャッシュエントリを記憶している場合に、キャッシュ動作間の差異によって、新規なハードウェアにおいて５〜１０００サイクルの遅延がもたらされ得る。キャッシュルックアップ動作の差異から生じるエラーについてアプリケーション３２２をテストするために、タイミングテストモードにおいて、１つまたは複数のキャッシュ（例えば、ＧＰＵキャッシュ３３４）についてのキャッシング及びキャッシュルックアップ動作が、仮想アドレスに基づくことから物理アドレスに基づくことへと変更されてもよく、またはその逆も同様である。
【００４６】
動作修正のさらに別の非限定的な例は、タイミングテストモードにおけるＩキャッシュのプリフェッチ機能を、通常モードにおいて有効なこのような機能を有する１つまたは複数のＩキャッシュについて、無効にすることである。
【００４７】
現在の開示の態様では、タイミングテストモードにおいて、タイミングテストモードにおいて、ＯＳは、ＧＰＵファームウェアが存在している場合、それをデバイスの通常動作とは異なるタイミングを有するファームウェアと置換し得る。限定ではなく例として、タイミングテストモードにおいて、ファームウェアは、処理される各オブジェクトについてのより高いオーバヘッドを有するファームウェアによって、または同時に処理され得るオブジェクトのより低いカウントをサポートするファームウェアによって、置換することができ、その結果、デバイスの通常動作中に遭遇されないタイミングを生じる。
【００４８】
現在の開示の態様では、タイミングテストモードにおいて、ＧＰＵリソースは、アプリケーションリクエストの処理タイミングに影響を与えるようなやり方で制限されるように構成され得る。ＧＰＵキャッシュ３３４は、サイズが減少されてもよい（例えば、完全なアソシアティブキャッシュに記憶され得る値の数が減少されてもよく、またはウェイの数が制限されたキャッシュについて利用可能なバンクカウントもしくはウェイカウントが減少されてもよい）。ＧＰＵコア３３２上で動作している全ての命令または特定の命令の実行レートが、減少されてもよい（例えば、レイテンシが増加し、及び／またはスループットが減少する）。
【００４９】
現在の開示の態様では、タイミングテストモードにおいて、ＯＳ３２１は、アプリケーション３２２がその処理のために利用可能な残りのリソースを減少させる処理を実行するようにＧＰＵ３３０にリクエストし得る。これらのリクエストは、そのタイミングがランダムまたは系統的のいずれかであり得る。限定ではなく例として、ＯＳ３２１は、より優先度の高いグラフィカルオブジェクトのレンダリングをリクエストしてもよく、またはより優先度の低いアプリケーションレンダリングまたは他の計算に取って替え得るシェーダを計算してもよい。または、ＯＳ３２１は、その処理が特定のＧＰＵコア３３２上で発生するように要求してもよく、それによってそれらのＧＰＵコア上で発生しているように指定されるアプリケーション処理に不均一に影響を与え得る。
【００５０】
現在の開示の態様では、タイミングテストモードにおいて、ＯＳ３２１は、ＧＰＵ３３０がそのキャッシュを書き戻しもしくは無効化し、または命令及びデータＴＬＢを無効化するように、ランダムに、または系統的に要求し得る。
【００５１】
本開示の態様によれば、ＡＰＵ３１０は、内部バス３１７のための内部クロック３１６を含み得る。内部クロック３１６は、本明細書において「内部バスクロック」と呼ばれる特定のクロックレートまたはレートのセットで動作する。内部バス３１７は、メモリコントローラ３１５に接続し、メモリコントローラ３１５は、外部メモリ３４０に接続される。メモリコントローラ３１５からメモリ３４０への通信は、本明細書で「メモリクロック」と呼ばれる別の特定のクロックレートで発生し得る。
【００５２】
本開示の態様によれば、デバイス３００が、タイミングテストモードで動作するとき、メモリクロック及び／もしくは内部バスクロックは、デバイスの通常動作中にそれらが動作するのとは異なる（例えば、より高い、もしくはより低い）周波数で動作するように構成されてもよく、またはＯＳ３２１が、メモリクロック及び／もしくは内部バスクロックの周波数を絶えずもしくは時折修正し得る。
【００５３】
現在の開示の態様では、タイミングテストモードにおいて、メモリコントローラ３１５は、外部メモリから適切にデータを読み出す、メモリコントローラによって実行される一定種類のメモリアクセスのレイテンシを増加させる、またはデバイスの通常動作中に使用される優先順位とは異なる、様々な種類のメモリアクセス間の優先順位を使用するための偶発故障をシミュレートするように構成され得る。ＯＳ３２１は、タイミングテストモードにおいてこれらの構成を絶えずまたは時折修正し得る。
【００５４】
本開示の態様によれば、タイミングテストモードにおいて、アドレスラインが変更される、例えば、通常１つのアドレスライン上に配置される信号が、別のアドレスライン上に配置される信号と交換され得るように、メモリコントローラ３１５が構成されてもよい。限定ではなく例として、アドレスラインＡが、列情報を外部メモリ３１５に送信するために使用され、アドレスラインＢが、行情報を外部メモリ３４０に送信するために使用され、タイミングテストモードにおいて、アドレスラインＡ及びＢに送信された信号が交換された場合、結果は、デバイスの通常動作中に見つかるものとは非常に異なるタイミングであることとなる。
【００５５】
上述のようにハードウェアを構成すること及び動作を実行すること（例えば、異なる周波数で動作するようにＣＰＵコアを構成すること）は、同期ロジック内のエラーをさらけ出し得るが、デバイスのリアルタイム動作が重要である場合、タイミングテストモード自体が、例えば、ビデオゲームコンソールの場合に、動作中のエラー、低速ＣＰＵコアが表示タイミング、オーディオストリームアウトなどによって課されるリアルタイムデッドラインを満たすことができないことに起因するエラーを引き起こし得る。本開示の態様によれば、タイミングテストモードにおいて、デバイス３００は、標準動作速度よりも高速で動作され得る。非限定的な例として、標準動作速度よりも高速とは、標準動作速度よりも約５％〜約３０％高速であることであってもよい。限定ではなく例として、タイミングテストモードにおいて、ＣＰＵのクロック、ＣＰＵキャッシュ、ＧＰＵ、内部バス、及びメモリは、デバイスの標準動作周波数（または標準動作周波数範囲）よりも高い周波数に設定されてもよい。大量生産されたバージョンのデバイス３００は、上記標準動作周波数でのクロックの設定を排除するようなやり方で構成され得るため、特別に設計されたハードウェア、例えば、対応する大量生産デバイスよりも高速のメモリチップを使用するハードウェア、または平均よりも高速動作を可能にするシステムオンチップ（ＳｏＣ）の生産ランの一部を使用するハードウェア、または大量生産デバイス上で使用されるものよりもハイスペックのマザーボード、電源、及び冷却システムを使用するハードウェアが作成される必要がある場合がある。
【００５６】
限定ではなく例として、特別に設計されたハードウェアが、大量生産デバイスよりも高速のＣＰＵ動作を可能にする場合、かつ大量生産デバイス上に、その典型的な動作モードにおいて１ＧＨｚで動作する４つのコアが存在する場合、特別に設計されたハードウェア上のタイミングテストモードにおいて、連続的な１０秒の期間中、３つのコアが１．２ＧＨｚで動作するように選択され、残りのコアが１ＧＨｚで動作し得る。その結果、選択されたコア上で動作する処理は、他のコアよりも低速で動作することとなり、同期ロジックにおいて起こり得るエラーをさらけ出すが、それらが大量生産デバイス上で動作するのと少なくとも同じくらいの速さで全てのコアが動作する前の例とは異なり、（例えば、表示タイミングについての）リアルタイムデッドラインは満たされることができ、タイミングテストモード自体が、動作中のエラーを引き起こすおそれはない。
【００５７】
限定ではなく例として、特別に設計されたハードウェアが、大量生産デバイスよりも高速のＣＰＵ動作を可能にする場合、かつ大量生産デバイス上に、その典型的な動作モードにおいて１ＧＨｚで動作する４つのコアが存在する場合、特別に設計されたハードウェア上のタイミングテストモードにおいて、全てのコアが１．２ＧＨｚで動作するように選択されてもよく、ＯＳ３２１が、ＣＰＵキャッシュをランダムに書き戻し及び無効化し得る。キャッシュ書き戻し及び無効化に起因する低速化の度合いが、高いＣＰＵ周波数に起因する高速化よりも小さい場合、上記のようにリアルタイムデッドラインは満たされることができ、タイミングテストモード自体が動作中のエラーを引き起こすおそれはない。言い換えると、タイミングテストモードは、キャッシュ動作を介してスキューを誘発することがあり、同期エラーについてのテストは、デバイス動作全体がより低速になり、したがってエラーが起こりがちになるという懸念なしに実行され得る。
【００５８】
アプリケーションエラーがタイミングテストモードで明らかにされ得る、いくつかのやり方がある。１つの実施態様によれば、特別に設計されたハードウェアは、デバイス３００によって実行される１サイクル（ＩＰＣ）当たりの命令数を判断するように構成される回路を含み得る。ＯＳ３２１は、ＩＰＣの変化を監視して、アプリケーション中のエラーについてテストし得る。ＯＳは、ＩＰＣの著しい変動を、タイミングテストモードにおけるデバイスの動作に対する特定の修正に相互に関連付け得る。
【００５９】
本開示の態様によれば、コンピュータデバイスは、タイミングテストモードで動作し得る。限定ではなく例として、デバイス３００のようなコンピュータシステムは、図５に示し以下で説明する方法５００に類似のやり方で、そのようなタイミングテストモードを実装するように構成されるオペレーティングシステム３２１のようなオペレーティングシステムを有し得る。
【００６０】
５０１において示されるように、方法が開始する。５１０において、システムがタイミングテストモードで動作するかどうかが判断される。これが行われ得るいくつかのやり方がある。限定ではなく例として、オペレーティングシステム３２１は、ディスプレイ３８０上のレンダリングされたグラフィック３８２を介して、タイミングテストモードに入るかどうかを判断するようにユーザに促してもよい。ユーザは、ユーザインタフェース３７０を介して適切な命令を入力してもよい。システムが、タイミングテストモードで動作すべきではないと判断される場合、システムは、５２０において示されるように通常の状態で動作し得る。システムが、タイミングテストモードで動作すべきであると判断される場合、デバイスは、５３０において示されるようにタイミングテストモードでの動作に設定され得る。タイミングテストモードで動作するようにデバイスをセットアップすることは、概して、デバイス用のオペレーティングシステム（例えば、ＯＳ３２１）が、ハードウェア状態をセットアップすること、ファームウェアをロードすること、及びタイミングテストモード固有の設定を実装するための他の動作を実行することを伴い得る。
【００６１】
デバイス３００は、多数の可能なやり方のうちのいずれかで、タイミングテストモードで動作するように設定され得る。限定ではなく例として、いくつかの実施態様では、デバイスは、外部的に、例えば、ネットワーク（例えば、ローカルエリアネットワーク（ＬＡＮ））を介して構成され得る。別の非限定的な例では、デバイスは、オペレーティングシステムによって生成されるメニューの使用、及びユーザインタフェースからの入力を通じて内部的に構成され得る。他の非限定的な例では、デバイスは、デバイスハードウェアの物理的構成を通じて、例えば、デバイス上の１つまたは複数のデュアルインラインパッケージ（ＤＩＰ）スイッチの位置を手動で設定することによって、タイミングテストモードで動作するようにセットアップされ得る。デバイスファームウェア（例えば、ＲＯＭに記憶される）は、次いで、例えば、デバイスが電力供給された時にＤＩＰスイッチの設定を読み出し得る。この後者の実施態様は、例えば、デバイスが大量生産されたバージョンのデバイスよりもむしろ特別に設計されたハードウェアである場合において有用であり得る。このような場合、スイッチは、便宜上、デバイスハードウェアが入っているボックスまたはケースの外側に位置されてもよい。
【００６２】
デバイスが、一旦タイミングテストモードでの動作に設定されると、５４０において示されるように、デバイスは、タイミングテストモードでアプリケーションを動作させ得る。タイミングテストモードでのシステムの動作が通常デバイス動作とは異なり得る、いくつかのやり方がある。
【００６３】
限定ではなく例として、アプリケーション３２２が動作している間、ＯＳ３２１は、アプリケーションをタイミングテストで動作させている間、以下のうちの１つまたは複数を行い得る。
〇  ５４２において示されるように、リアルタイムでハードウェア設定を修正する。
〇  ５４４において示されるように、タイミングを中断させるようにして、デバイス３００の様々なハードウェアコンポーネントにコマンドを送信する。
〇  ５４６において示されるように、例えば、アプリケーションからリソースを取り去ること、アプリケーションを一時停止させること、またはアプリケーションとリソース競合することによって、アプリケーション３２２と干渉するプログラムを動作させる。
〇  ５４８において示されるように、タイミングを中断させるようにして、タイミングテストモードでのＯＳ３２１の機能性を変更する。
【００６４】
５５０において示されるように、一旦アプリケーション３２２がデバイス３００でタイミングテストモードで動作していると、アプリケーションはエラーについてテストされ得る。このようなテストは、アプリケーションが機能停止したかどうか、エラーが発生したかどうか、またはデバイスが通常動作するときには発生しない異常な結果（例えば、著しいＩＰＣ変動）を生成したかどうかを判断することを含み得るが、これらに限定されない。
【００６５】
５４２において設定を修正する例として、図２に示す種類のプロセッサアーキテクチャでは、２つ以上のＣＰＵコアが、異なる周波数で動作してもよく、それは、消費者デバイスの通常動作周波数よりも高い周波数であってもよい。同様に、デバイス内の２つ以上のキャッシュは、タイミングテストモードにおいて異なる周波数で動作してもよい。さらに、コア及びキャッシュの異なる組み合わせが、異なる周波数で動作してもよい。
【００６６】
他の実施形態では、ＣＰＵリソースは、デバイスがタイミングテストモードで動作するときに減少され得る。そのようなＣＰＵリソース減少の例は、ストアキュー、ロードキュー、またはキャッシュ（例えば、Ｌ１もしくはそれ以上、Ｉキャッシュ、Ｄキャッシュ、ＩＴＬＢ、またはＤＴＬＢ）のサイズを減少させることを含むが、これらに限定されない。他の例は、ＡＬＵ、ＡＧＵ、ＳＩＭＤパイプ、または特定の命令の実行レートを減少させることを含むが、これらに限定されない。さらに、１つまたは複数の個々のコアまたはアプリケーションスレッドが、ランダムに、または系統的に先取りされ得る。追加的な例は、ＯＳ機能性の使用時にタイミングを遅延、もしくは加速、もしくは変更すること、ＯＳによるコアの使用を変更すること、仮想コア割り当てを物理コア割り当て（例えば、クラスタ間競合）に変更すること、他の非対称性を活用すること、またはキャッシュ及び／もしくはＴＬＢを書き戻しもしくは無効化することを含む。
【００６７】
他の実施態様では、５４２において設定を修正することが、ＧＰＵ３３０の機能を変更することを含み得る。このような変更の例は、ＧＰＵコア３３２を異なる周波数で動作させること、ＧＰＵコアのうちの１つまたは複数を消費者デバイス用の通常とは異なる周波数で動作させること、デバイス３００の通常動作とは異なるタイミングを有するファームウェアとＧＰＵファームウェアを置換することを含む。ＧＰＵコア３３２のうちの１つまたは複数は、デバイスの通常動作モードのために使用されるものよりも高い、または低い周波数で選択的に動作するように構成され得る。他の例は、ＧＰＵファームウェアを中断させること（例えば、オブジェクト処理を中断させること）、及びキャッシュサイズまたは実行レートなどの減少されたＧＰＵリソースを減少させることを含む。
【００６８】
他の実施態様では、デバイスをタイミングテストモードで動作させている時に、例えば、ランダム計算スレッドを介してウェーブフロントカウントを変更すること、グラフィックをランダムに先取りすること、またはキャッシュ及び／もしくはＴＬＢを書き戻しもしくは無効化することによって、ＧＰＵ処理が変更されてもよい。
【００６９】
５４４においてタイミングを中断させるようにしてコマンドをハードウェアコンポーネントに送信する例は、メモリ３４０またはメモリコントローラ３１５の機能を変更することを含む。メモリまたはメモリコントローラ機能のこのような変更の例は、様々なチャネルカウントまたは行ブレイクをシミュレートするために、メモリクロック及び／又は内部バスクロックを異なる周波数で動作させること、ノイズをメモリ動作に挿入すること、レイテンシをメモリ動作に加えること、メモリ動作の優先度を変更すること、並びに行及び／または列チャネルビットを変更することを含むがこれらに限定されない。
【００７０】
本開示の態様は、ソフトウェア開発者が、以前のバージョンのデバイス上での新規アプリケーションの性能を試行することを可能にする。より具体的には、本開示の態様は、開発者が、アプリケーションについてのタイミングの中断の影響を探ることを可能にする。
【００７１】
上記は、本発明の好ましい実施形態の完全な説明であるが、多様な代替物、修正物、及び均等物を使用することが可能である。したがって、本発明の範囲は、上記説明を参照することなく判断されるべきであるが、その代わりに、添付の特許請求の範囲を、その均等物の全範囲とともに参照して判断されるべきである。本明細書で説明されたいかなる特徴も、好ましいか否かに関わらず、本明細書で説明されたいかなる他の特徴とも、好ましいか否かに関わらず組み合わされてもよい。続く特許請求の範囲において、不定冠詞「Ａ」または「Ａｎ」は、そうでないと明示的に述べられている場合を除いて、冠詞に続く品目のうちの１つまたは複数の量をいう。本明細書で使用されるように、代替物における要素のリストにおいて、用語「ｏｒ(または)」は、そうでないと明示的に述べられている場合を除いて、包含的な意味、例えば、「ＸまたはＹ」は、Ｘ単独、Ｙ単独、またはＸ及びＹの両方を含むものとして使用される。代替物として列挙された２つ以上の要素は、互いに結合されてもよい。添付の特許請求の範囲は、そのような限定が句「ｍｅａｎｓ  ｆｏｒ」を使用して所与の請求項において明示的に列挙されない限り、ミーンズプラスファンクションの限定を含むものとして解釈されるべきでない。
【図１】
2020113302.tif 000003
【図２】
2020113302.tif 000004
【図３】
2020113302.tif 000005
【図４】
2020113302.tif 000006
【図５】
2020113302.tif 000007