(57)【特許請求の範囲】
【請求項１】
システムであって、
物理記憶サイズおよび論理配置を有するコンピュータメモリと、
前記コンピュータメモリ内に配置されたコンポーネントリソースアフィニティテーブルと、
前記コンピュータメモリに接続された中央処理ユニット（ＣＰＵ）であって、いくつかの発見可能なプロパティを有し、１つ以上の命令の実行に応じて、前記ＣＰＵ、アクセラレーテッド処理デバイスおよび前記メモリの前記発見可能なプロパティのうち、少なくとも１つを提供するように構成されたＣＰＵと、
前記コンピュータメモリに接続されたアクセラレーテッド処理デバイス（ＡＰＤ）であって、いくつかの発見可能なプロパティを有し、ＡＰＤローカルメモリに接続されているＡＰＤと、
前記コンピュータメモリに接続されたメモリ管理ユニットであって、前記ＣＰＵおよび前記アクセラレーテッド処理デバイスに共有されるメモリ管理ユニットとを備え、
前記システムは、オペレーティングシステムを実行するように構成されており、
前記発見可能なプロパティは、前記ＣＰＵおよび前記ＡＰＤに対する演算タスクのスケジューリングおよび分散に関連しており、前記オペレーティングシステムが別々に管理する前記コンピュータメモリまたは前記ＡＰＤローカルメモリのコヒーレントアクセス範囲および非コヒーレントアクセス範囲を開示し、
前記プロパティは、ＳＩＭＤサイズ、ＳＩＭＤ配置、ローカルデータストアアフィニティ、ワークキュープロパティ、ＩＯＭＭＵアフィニティ、ハードウェアコンテキストメモリサイズのうち１つ以上を含む、
システム。
【請求項２】
前記発見されたプロパティをエンコードし、前記エンコードされたプロパティをメモリテーブル内に記憶するロジックをさらに備える、
請求項１に記載のシステム。
【請求項３】
前記メモリテーブルは、前記コンピュータメモリ内に常駐する、
請求項２に記載のシステム。
【請求項４】
アクセラレーテッド処理デバイスローカルメモリをさらに備え、
前記アクセラレーテッド処理デバイスローカルメモリの前記プロパティは、前記メモリテーブル内に記憶されている、
請求項２に記載のシステム。
【請求項５】
前記発見可能なプロパティは、システムトポロジー情報をさらに含む、
請求項１に記載のシステム。
【請求項６】
組み合わせた中央処理ユニット（ＣＰＵ）およびアクセラレーテッド処理デバイス（ＡＰＤ）アーキテクチャシステムを作動する方法であって、
システムトポロジー情報を発見するステップと、
１つ以上のＣＰＵ計算コアのプロパティを発見するステップと、
１つ以上のアクセラレーテッド処理デバイス計算コアのプロパティを発見するステップと、
１つ以上の補助コンポーネントのプロパティを発見するステップと、
システムメモリのプロパティを発見するステップと、
アクセラレーテッド処理デバイスローカルメモリが存在する場合に、前記アクセラレーテッド処理デバイスローカルメモリのプロパティを発見するステップと、
タイプ、幅、速度、コヒーレンスおよびレイテンシのうち１つ以上を含むデータパスのプロパティを発見するステップと、
１つ以上の情報構造のうち少なくとも１つに情報を記憶するステップであって、前記１つ以上の情報構造は、コンポーネントリソースアフィニティテーブルを含み、前記記憶された情報は、前記発見されたプロパティの少なくとも１つを表す、ステップとを含み、
前記発見されたプロパティは、ＳＩＭＤサイズ、ＳＩＭＤ配置、ローカルデータストアアフィニティ、ワークキュープロパティ、ＩＯＭＭＵアフィニティ、ハードウェアコンテキストメモリサイズのうち１つ以上を含む、
方法。
【請求項７】
前記発見されたプロパティは、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステム内の複数の演算リソースのうち１つ以上に対する演算タスクのスケジューリングに関連している、
請求項６に記載の方法。
【請求項８】
複数の演算リソースのうち少なくとも１つによって１つ以上の命令を実行するステップであって、前記命令の実行は、前記１つ以上の命令を実行する前記演算リソースの１つ以上のレジスタ内の情報、または前記演算リソースに接続されたメモリの１つ以上のメモリ位置内の情報を提供するステップをさらに含む、
請求項６に記載の方法。
【請求項９】
少なくとも１つのハードウェアリソースの追加または除去を検出した後に、１つ以上の前記発見するステップを繰り返し行うステップをさらに含む、
請求項６に記載の方法。
【請求項１０】
前記発見されたプロパティのうち少なくとも１つをエンコードするステップをさらに含む、
請求項６に記載の方法。
【請求項１１】
組み合わせた中央処理ユニット（ＣＰＵ）およびアクセラレーテッド処理デバイス（ＡＰＤ）アーキテクチャシステムを作動する方法であって、
組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステム内の演算タスクのスケジューリングおよび分散に関連するプロパティを発見するステップと、
１つ以上の情報構造のうち少なくとも１つに情報を記憶するステップであって、前記１つ以上の情報構造は、コンポーネントリソースアフィニティテーブルを含み、前記記憶された情報は、前記発見されたプロパティの少なくとも１つを表すステップと、
前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、１つ以上のハードウェアリソースが、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに追加されたか否かを動的に判断するステップと、
１つ以上のハードウェアリソースが、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに追加または削除されたことを判断した後に、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、前記組み合わせたＣＰＵ／ＡＰＤシステム内の演算タスクのスケジューリングおよび分散に関連する少なくとも１つのプロパティを発見するステップと、を含み、
前記プロパティは、ＳＩＭＤサイズ、ＳＩＭＤ配置、ローカルデータストアアフィニティ、ワークキュープロパティ、ＩＯＭＭＵアフィニティ、ハードウェアコンテキストメモリサイズのうち１つ以上を含む、
方法。
【請求項１２】
ハードウェアリソースの追加は、前記ハードウェアリソースを、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムにホットプラグすることを含む、
請求項１１に記載の方法。
【請求項１３】
ハードウェアリソースの追加は、ファームウェアまたはソフトウェアのアクションによって、前記ハードウェアリソースを有効にすることを含む、
請求項１１に記載の方法。
【請求項１４】
ハードウェアリソースの削除は、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムから前記ハードウェアリソースを物理的に削除することを含む、
請求項１１に記載の方法。
【請求項１５】
ハードウェアリソースの削除は、ファームウェアまたはソフトウェアのアクションにより前記ハードウェアリソースを無効にすることを含む、
請求項１１に記載の方法。
【請求項１６】
前記プロパティは、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムのコンポーネントの存在と、１つ以上の前記コンポーネント間の相互接続と、前記コンポーネントの１つ以上の属性とを含む、
請求項１１に記載の方法。
【請求項１７】
前記プロパティは、コアの数、キャッシュの数、キャッシュアフィニティ、階層およびレイテンシ、ＴＬＢ、ＦＰＵ、実行状態、電力状態のうち１つ以上を含む、
請求項１１に記載の方法。
【請求項１８】
前記プロパティは、バススイッチ、メモリコントローラチャネルおよびバンクのうち１つ以上を含む、
請求項１１に記載の方法。
【請求項１９】
前記プロパティは、システムメモリおよびアクセラレーテッド処理デバイスローカルメモリのコヒーレントアクセス範囲および非コヒーレントアクセス範囲を含む、
請求項１１に記載の方法。
【請求項２０】
前記プロパティは、システムメモリおよびアクセラレーテッド処理デバイスローカルメモリの属性を含む、
請求項１１に記載の方法。
【請求項２１】
システムトポロジー情報を発見するステップをさらに含む、
請求項１１に記載の方法。
【請求項２２】
前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、１つ以上のハードウェアリソースが、前記組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムから削除されたか否かを判断するステップをさらに含む、
請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピュータシステムを対象とする。さらに詳細には、本発明は、コンピュータシステムトポロジーを対象とする。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ：ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）を一般的な演算に用いる要請は、ＧＰＵの単位電力および／またはコストあたりの能力が優れることから、最近ではより顕著となってきている。ＧＰＵの計算能力は、対応する中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）プラットフォームの計算能力の成長速度を超える速度で成長してきた。モバイルコンピューティング市場（例えば、ノートブック、モバイルスマートフォン、タブレット、その他）およびその必要な支援サーバ／企業システムの爆発的な成長と組み合わされたこの成長は、特定品質の所望のユーザ経験を提供するために用いられてきている。したがって、並列データの内容を有する作業負荷を実行するためにＣＰＵとＧＰＵとを併用することはボリュームテクノロジとなりつつある。
【０００３】
しかし、ＧＰＵは、従来、主にグラフィックの高速化のために利用可能な制約されたプログラミング環境で動作する。これらの制約は、ＧＰＵが、ＣＰＵと同程度に豊かなプログラミングエコシステムを有さないという事実に起因するものである。したがって、ＧＰＵの使用は、主に、グラフィックスおよびビデオのアプリケーションプログラミングインターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）を処理することに既に順応した、２次元（２Ｄ）グラフィックスと、３次元（３Ｄ）グラフィックスと、少数の最先端マルチメディアアプリケーションとに限られていた。
【０００４】
マルチベンダにサポートされるＯｐｅｎＣＬ（登録商標）、ＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）、標準的なＡＰＩおよびサポート用ツールの出現とともに、従来の用途におけるＧＰＵの限界は、従来のグラフィックスを越えて拡張されてきている。ＯｐｅｎＣＬ（登録商標）およびＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）は将来性のあるスタートではあるが、大部分のプログラミングタスクに対して、ＣＰＵと同程度に流動的にＣＰＵとＧＰＵとの組合せが用いられることを可能にする環境およびエコシステムを作成するには、多数のハードルが残されている。
【０００５】
既存のコンピューティングシステムは、大抵、複数の処理装置を含む。例えば、いくつかのコンピューティングシステムは、ＣＰＵおよびＧＰＵの両方を、別個のチップ上（例えば、ＣＰＵはマザーボード上に、ＧＰＵはグラフィックカード上に配置され得る）または単一チップパッケージ上に有し得る。これらの構成の両方は、（ｉ）別個のメモリシステム、（ｉｉ）効率的なスケジューリング、（ｉｉｉ）プロセス間のサービス品質（ＱｏＳ）の保証の提供、（ｉｖ）プログラミングモデルおよび（ｖ）複数のターゲット命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）へのコンパイル、の全項目を、電力消費を最小化しながら満足することに関して顕著な問題点を依然として含む。
【０００６】
例えば、個別チップ構成においては、各プロセッサがメモリにアクセスするためには、システムアーキテクチャおよびソフトウェアアーキテクチャは、チップ間インターフェースを利用することを余儀なくされる。これらの外部インターフェース（例えばチップ間インターフェース）においては、異機種環境のプロセッサを協働させるために、メモリレイテンシおよび電力消費に弊害がもたらされる一方で、別個のメモリシステム（すなわち、別個のアドレス空間）およびドライバに管理される共有メモリにおいては、きめ細かな負荷軽減に対しては許容されないオーバーヘッドが生成されてしまうこととなる。
【０００７】
分離および単一のチップ構成は、実行用にＧＰＵに送ることが可能なコマンドのタイプを限定する可能性がある。例えば、計算コマンド（例えば、物理または人工知能コマンド）は、実行用にＧＰＵに頻繁に送られるべきではない。ＣＰＵは、これらの計算コマンドにより実行される動作の結果を比較的迅速に必要とする可能性があるので、この実行ベースの限定が存在する。しかし、現在のシステムのＧＰＵにディスパッチするワークの高いオーバーヘッドのために、およびこれらのコマンドが、予め発行された他のコマンドが最初に実行されるのを、インラインで待機しなければならないという事実のために、ＧＰＵに計算コマンドを送ることにより生じるレイテンシは、許容されないことが多い。
【０００８】
従来のＧＰＵが、いくつかの演算コマンドを効率的に実行し得ないとするならば、コマンドは、ＣＰＵ内で実行されなければならない。コマンドをＣＰＵ上で実行しなければならないとすると、ＣＰＵにおける処理負荷が増大し、全体的なシステム性能が損なわれてしまう。
【０００９】
ＧＰＵは、演算の負荷軽減のための優れた機会を提供するが、従来のＧＰＵは、マルチプロセッサ環境における効率的な演算に対して望まれるシステム・ソフトウェア方式のプロセス管理に対しては好適でないこともある。これらの制限により、問題が生じ得る。
【００１０】
例えば、プロセスを効率的に識別および／またはプリエンプション処理することができないために、不良プロセスが、任意のかなりの時間、ＧＰＵハードウェアを占有し得る。他のケースでは、ハードウェアをコンテキストスイッチオフする能力が厳しく制約され、非常に粗い粒度で、且つ、プログラムの実行中のポイントの非常に限られたセットでのみ起こる。プロセスを復旧および再開する必要なアーキテクチャおよびマイクロアーキテクチャの状態の保存がサポートされないので、この制約が存在する。的確な例外の補助がないことは、障害を起こしたジョブがコンテキストスイッチアウトされること、および後のポイントで再開されることを妨げるので、障害を起こしたスレッドは、ハードウェアリソースを占有して、障害処理の間使用されないままになり、結果として、ハードウェア使用量が低くなる。
【００１１】
ＣＰＵ、ＧＰＵ、Ｉ／Ｏメモリ管理を、演算タスクが効率的にスケジュールおよび分散され得るように統合化されたアーキテクチャに組み合わせることは、システムおよびアプリケーションソフトウェアが、統合化ＣＰＵ／ＧＰＵシステムアーキテクチャの特徴、プロパティ、相互接続および属性のいくつかの認識を有することを必要とする。
【発明の概要】
【００１２】
組み合わせたＣＰＵ／ＧＰＵアーキテクチャを実装するシステムの種々の演算リソースに対して、演算タスクの効率的なスケジューリングおよび分散に関連するデバイスおよびシステムトポロジーのプロパティを発見し、且つ、レポートするための改善された方法および機器が必要とされる。
【００１３】
ＧＰＵと、アクセラレーテッドプロセッシングユニット（ＡＰＵ）と、ＧＰＵによる汎目的計算（ＧＰＧＰＵ）とは、この分野において一般に用いられる用語であるが、「アクセラレーテッド処理デバイス」（ＡＰＤ）は、より広い表現とみなされる。例えば、ＡＰＤは、従来のＣＰＵ、従来のＧＰＵ、ソフトウェアおよび／またはこれらの組合せと比較して高速化された方法で行われる、グラフィックス処理タスク、データ並列タスク、またはネスト化されたデータ並列タスクの高速化に関連する機能および演算を実行する任意のハードウェアおよび／またはソフトウェアの協働的集合体を指す。
【００１４】
組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの種々の演算リソースへの演算タスクの効率的なスケジューリングおよび分散に関連するデバイスおよびシステムトポロジーの特性を発見し、レポートするという、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの態様として、方法および機器が提供される。組み合わせたＣＰＵ／ＡＰＤアーキテクチャは、ＣＰＵおよびＡＰＤを、柔軟なコンピューティング環境に統合化する。いくつかの実施形態では、組み合わせたＣＰＵ／ＡＰＤアーキテクチャ機能は、単一の集積回路に実装され、その集積回路の構成要素は、１つ以上のＣＰＵコアおよび１つ以上のＡＰＤコアを有し得る。組み合わせたＣＰＵ／ＡＰＤアーキテクチャは、既存および新しいプログラミング構造、言語およびツールを構成可能な基礎を作る。
【図面の簡単な説明】
【００１５】
【図１Ａ】本発明による処理システムの例示的ブロック図である。
【図１Ｂ】図１Ａに示されたＡＰＤの例示的ブロック図である。
【図２】組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの例示的ブロック図である。
【図３】複数のコアを有するＣＰＵと、複数の単一命令／複数データ（ＳＩＭＤ）エンジンを有するＡＰＤと、メモリ管理と、Ｉ／Ｏメモリ管理回路とを備える集積回路であるＡＰＵの例示的ブロック図である。
【図４】専用ＡＰＤの例示的ブロック図である。
【図５】本発明の実施形態による例示的プロセスのフローチャートである。
【図６】本発明の実施形態による例示的プロセスのフローチャートである。
【発明を実施するための形態】
【００１６】
一般的に、機能の使用およびタスクスケジューリングのプラットフォームの実行機能をよりよく利用可能にするために、ソフトウェアは、下層のハードウェアの特性を認識すべきである。組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの演算リソースを効率的に使用するために、プラットフォームの特徴、プロパティ、相互接続、属性および／または特性は、発見され、且つ、ソフトウェアに報告（レポート）されなければならない。
【００１７】
組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの種々の演算リソースに対する、演算タスクの効率的なスケジューリングおよび分散に関連するデバイスおよびシステムトポロジーのプロパティを発見し、レポートするという、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの態様として、方法および機器が提供される。本発明による、組み合わせたＣＰＵ／ＡＰＤアーキテクチャは、柔軟なコンピューティング環境において、ＣＰＵとＡＰＤとを統合化する。
【００１８】
いくつかの実施形態では、組み合わせたＣＰＵ／ＡＰＤアーキテクチャの性能は、単一の集積回路内で実装され、集積回路の構成要素は、より詳細に後述するように、１つ以上のＣＰＵコアと、１つ以上の統合化ＡＰＤコアとを含むことが可能である。ＣＰＵおよびＡＰＤが、通常、分離している（例えば、別個のカードまたはボード上、または分離したパッケージ内に常駐している）従来のコンピューティング環境とは対照的に、組み合わせたＣＰＵ／ＡＰＤアーキテクチャは、既存および新しいプログラミング構造、言語およびツールを構成可能な基礎を作る。
【００１９】
組み合わせたＣＰＵ／ＡＰＤシステムアーキテクチャの統合化された環境は、プログラマが、ＣＰＵおよびＡＰＤの各々が提供する必要のあるもっとも優れた属性から恩恵を受けて、ＣＰＵおよびＡＰＤ間のデータの処理をシームレスに移行するアプリケーションを作成することを可能にする。統合化された単一のプログラミングプラットフォームは、並列処理を利用する言語、構造およびアプリケーションの開発に対して、強力な基礎を提供可能である。
【００２０】
以下の詳細な説明においては、「１つの実施形態」、「ある実施形態」、「例示的実施形態」またはその他を参照することは、本明細書において説明される実施形態が、特定の特徴、構造または特性を有することを示すが、全ての実施形態が当該特定の特徴、構造または特性を必ずしも含むとは限らない。さらに、係る語句は、同一の実施形態を参照するとは限らない。さらに、特定の特徴、構造または特性が、１つの実施形態に関連して説明される場合に、当該特長、構造または特性を、他の実施形態との関連で実施することは、明示されているかいないかによらず、当業者の知識の範囲内であることが提起される。
【００２１】
「本発明の実施形態」という用語は、本発明の実施形態の全てが、検討の対象である特徴、特長または操作モードを含むことを必ずしも要求しない。代替的な実施形態が本発明の範囲から逸脱することなく考案され、本発明の既知の構成要素は、本発明の関連する詳細を不明瞭化しないために、必ずしも詳細に説明されるとは限らず、または省略され得る。加えて、本明細書において用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を制限することを意図するものではない。例えば、本明細書において用いられる単数形の「１つの」および「その」は、内容的に明らかに単数のみを指す場合を除き、複数形をも含むことを意図するものである。本明細書において用いられる場合、「含む」、「備える」、「包含する」および／または「有する」という用語は、述べられた特徴、整数、ステップ、操作、構成要素および／またはコンポーネントが存在することを指定するが、１つまたは複数の他の特徴、整数、ステップ、操作、構成要素、コンポーネントおよび／またはこれらの群の存在または追加を除外しない。
【００２２】
例えばＣＰＵ識別（ＣＰＵＩＤ）などのような、ＣＰＵベースの機能検出およびスケジューリング用の従来のメカニズムは、今日のオペレーティングシステムおよびプラットフォームで一般的に使用される、均一および比較的単純なＣＰＵトポロジーに対してさえ、厳しい制限に陥る。
【００２３】
入力／出力メモリ管理ユニット（ＩＯＭＭＵ）を適切に構成するために、ＣＰＵ／メモリ／ＡＰＤ／ネットワークのトポロジー（例えばアドインボード、メモリコントローラ、ノース／サウスブリッジなど）を発見する必要がある。同様に、アプリケーションソフトウェアは、適切にスケジューリングおよび作業負荷決定をするために、例えば、異なるＡＰＤおよび計算ユニットをいくつ利用可能であるか、および、ＡＰＤおよび計算ユニットは、どのようなプロパティを有しているのか、といった情報を必要とする。従って、１つ以上のプロセス、１つ以上のハードウェアメカニズムまたは両方の組み合わせが、本発明によるデバイスの発見およびトポロジーの報告に必要とされる。より一般的には、少なくとも１つのメカニズム、少なくとも１つのプロセス、または少なくとも１つのメカニズムおよび少なくとも１つのプロセスが、デバイスの発見およびトポロジーの報告に必要とされる。
【００２４】
本発明の１つの実施形態において、デバイスおよびトポロジーに関する情報は、アプリケーションソフトウェアに報告される前にエンコードされる。１つの方法では、アドバンスト・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）仕様によるテーブルを、オペレーティングシステムレベルおよびユーザモードレベルに提供する。デバイスおよびトポロジーの発見に関連する情報であって、スケジューリングおよび作業負荷決定のユーティリティを有する情報を、上記テーブルを通して通信してもよい。テーブルは、局所性情報（例えば、どのメモリがＡＰＤに最も近いか）を有してもよいが、それに限定されない。「最も近い」ことは、信号パスが短ければ、ローディングが軽くなり、信号移動時間が短くなることを意味するので、通常、メモリが物理的に最も近いことを意味する。しかし、本明細書で使用する「最も近い」はより広く、データを最も迅速に転送するように動作可能なメモリを含む。
【００２５】
ＣＰＵ／スカラー計算コアに関して、発見可能なプロパティは、コアの数、キャッシュの数、キャッシュトポロジー（例えば、キャッシュアフィニティ、階層構造、レイテンシ）、変換索引バッファ（ＴＬＢ）、浮動小数点ユニット（ＦＰＵ）、実行状態、電力状態などを含むが、これらに限定されない。例えば、ソケットあたりのコアの数およびキャッシュサイズなどのいくつかのプロパティは、現在では、ＣＰＵＩＤ命令を通して開示される。例えば、ソケットの数、ソケットトポロジー、実行／電力状態などの付加的なプロパティは、従来のシステムに適用されるＡＣＰＩ定義を通して定義されるＡＣＰＩテーブルを通して開示される。ＣＰＵコアを、異なる「局所領域」非均一メモリアーキテクチャ（ＮＵＭＡ）にわたって分散してもよい。しかし、第１の順序として、コアは、ＯＳおよび仮想メモリマネジャ（ＶＭＭ）スケジューラによって均一に管理される。
【００２６】
ＡＰＤ計算コアに関して、発見可能なプロパティは、単一命令多重データ（ＳＩＭＤ）サイズ、ＳＩＭＤ配列、ローカルデータストアアフィニティ、ワークキュープロパティ、ＣＰＵコア、ＩＯＭＭＵアフィニティ、ハードウェアコンテキストメモリサイズなどを含むが、これらに限定されない。いくつかの個別ＡＰＤコアは、ライブプラットフォームに取付可能または着脱可能であってもよく、その一方で、統合ＡＰＤコアは、配線構成であってもよいし、本発明の実施形態によるアクセラレーテッド処理ユニットの一部であってもよい。
【００２７】
補助コンポーネントに関して、発見可能なコンポーネントは、拡張周辺部品相互接続（ＰＣＩｅ）スイッチ、メモリコントローラチャネル、ＡＰＵまたは個別ＡＰＤのバンク、および非計算Ｉ／Ｏデバイス（例えば、ＡＨＣＩ、ＵＳＢ、ディスプレイコントローラなど）を含む。システムおよびＡＰＤローカルメモリは、オペレーティングシステムが別に管理し、ＣＰＵまたはＡＰＤに特定のアフィニティを有し得る様々なコヒーレントおよび非コヒーレントアクセス範囲を開示してもよい。タイプ、幅、速度、コヒーレンスプロパティおよびレイテンシを含むが、これらに限定されない他のデータパスプロパティは、発見可能であってもよい。いくつかのプロパティは、ＰＣＩ−Ｅ機能構造またはＡＣＰＩテーブルを通して開示される。しかし、デバイス発見およびトポロジーレポーティングに関連する全ての特性は、従来のメカニズムで表現され得るとは限らない。
【００２８】
ＣＰＵＩＤは、ＣＰＵのような演算リソースにより実行される場合に、当該ＣＰＵの特定の特徴および特性についての情報を提供する命令を指す。例えば、ｘ８６アーキテクチャＣＰＵは、ベンダＩＤ、プロセッサ情報および特徴ビット、キャッシュおよびＴＬＢ記述子情報、プロセッサシリアル番号、最大拡張サポート関数、拡張プロセッサ情報および特徴ビット、プロセッサブランドストリング、Ｌ１キャッシュおよびＴＬＢ識別子、拡張Ｌ２キャッシュの特徴、高度な電力管理情報並びに仮想および物理的アドレスサイズのような情報を提供してもよい。
【００２９】
図１Ａは、ＣＰＵ１０２およびＡＰＤ１０４を含む統合化されたコンピューティングシステム１００の例示的な図である。ＣＰＵ１０２は、１つ以上のシングルコアまたはマルチコアＣＰＵを含み得る。本発明の一実施形態において、システム１００は、統合化されたプログラミング環境および実行環境を提供するために、ＣＰＵ１０２およびＡＰＤ１０４を組み合わせた単一のシリコンダイまたはパッケージ上に形成される。この環境は、ＡＰＤ１０４が、いくつかのプログラミングタスクに対して、ＣＰＵ１０２と同程度に流動的に用いられることを可能にする。しかし、ＣＰＵ１０２およびＡＰＤ１０４が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、ＣＰＵ１０２およびＡＰＤ１０４は別個に形成され、同一の基板または異なる基板上に搭載されることが可能である。
【００３０】
１つの例において、システム１００は、メモリ１０６、オペレーティングシステム１０８および通信インフラストラクチャ１０９を含む。オペレーティングシステム１０８および通信インフラストラクチャ１０９は、以下でより詳細に説明される。
【００３１】
システム１００は、カーネルモードドライバ（ＫＭＤ：ｋｅｒｎｅｌ  ｍｏｄｅ  ｄｒｉｖｅｒ）１１０と、ソフトウェアスケジューラ（ＳＷＳ：ｓｏｆｔｗａｒｅ  ｓｃｈｅｄｕｌｅｒ）１１２と、例えばＩＯＭＭＵ等のメモリ管理ユニット１１６とを含む。システム１００の構成品は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組合せとして実装され得る。当業者は、システム１００が図１Ａに示される実施形態において示されるものに加えて、またはこれらとは異なる、１つ以上のソフトウェアコンポーネント、ハードウェアコンポーネントおよびファームウェアコンポーネントを含み得ることを理解するであろう。
【００３２】
１つの例において、ＫＭＤ１１０等のドライバは、通常、ハードウェアが接続されたコンピュータバスまたは通信サブシステムを通してデバイスと通信する。呼び出しプログラムがドライバにおいてルーチンを呼び出すと、ドライバは、デバイスに対してコマンドを発行する。デバイスがドライバに対してデータを戻すと、ドライバは、元の呼び出しプログラムにおいてルーチンを呼び出し得る。１つの例において、ドライバは、ハードウェア依存的であり、オペレーティングシステム固有である。ドライバは、通常、任意の必要な非同期的時間依存性のハードウェアインターフェースに対して要求されるインタラプトハンドリングを提供する。
【００３３】
デバイスドライバは、特に現代のウィンドウズ（登録商標）プラットフォームにおいては、カーネルモード（リング０）またはユーザモード（リング３）において実行され得る。ドライバをユーザモードにおいて実行することの利益は、安定性が改善されることである。なぜなら、不完全な形で書かれたユーザモードデバイスドライバは、カーネルメモリを上書きすることによってシステムをクラッシュさせることができないためである。一方、ユーザモード／カーネルモードの遷移は、通常、顕著な性能オーバーヘッドを与え、それにより、低レイテンシおよび高スループット要件目的のユーザモードドライバを阻害する。カーネルスペースは、システムコールの使用を通してのみ、ユーザモジュールからのアクセスが可能である。ＵＮＩＸ（登録商標）シェルまたは他のＧＵＩベースのアプリケーションなどのエンドユーザプログラムは、ユーザスペースの一部である。これらのアプリケーションは、カーネルにサポートされた機能を通してハードウェアと相互作用する。
【００３４】
ＣＰＵ１０２は、制御プロセッサ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、特定用途集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）またはデジタル・シグナル・プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）のうち１つ以上を含み得る（図示せず）。ＣＰＵ１０２は、例えば、コンピューティングシステム１００の動作を制御する、オペレーティングシステム１０８、ＫＭＤ１１０、ＳＷＳ１１２およびアプリケーション１１１を含む制御ロジックを実行する。この例示的な実施形態において、ＣＰＵ１０２は、１つの実施形態によれば、アプリケーション１１１の実行の起動および制御を、例えばそのアプリケーションに関連する処理をＣＰＵ１０２とＡＰＤ１０４等の他の処理リソースとの間に分散させることにより行う。
【００３５】
ＡＰＤ１０４は、とりわけ、グラフィックス演算や、例えば特に並列処理に好適となり得る他の演算等の、選択された機能のためのコマンドおよびプログラムを実行する。一般に、ＡＰＤ１０４は、ピクセル処理、幾何学演算およびディスプレイに対する画像のレンダリング等のグラフィックスパイプライン処理を実行するために、しばしば用いられ得る。本発明の様々な実施形態において、ＡＰＤ１０４は、ＣＰＵ１０２から受信したコマンドまたは命令に基づいて、計算処理演算（例えば、ビデオ演算、物理シミュレーション、計算流体力学、その他等の、グラフィックスに関連しない演算）も実行し得る。
【００３６】
例えば、コマンドは、命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）に定義されない特殊な命令であるとみなすことができ、所与のＩＳＡまたは独特なハードウェアからの１組の命令によって大抵得られる。コマンドは、例えばディスパッチプロセッサ、コマンドプロセッサまたはネットワークコントローラ等の特殊なプロセッサにより実行され得る。一方、命令は、例えばコンピュータアーキテクチャ内のプロセッサの単一の演算であるとみなされ得る。１つの例において、２セットのＩＳＡが用いられる場合には、いくつかの命令は、ｘ８６プログラムを実行するために用いられ、いくつかの命令は、ＡＰＤ計算ユニット上でカーネルを実行するために用いられる。
【００３７】
例示的な実施形態において、ＣＰＵ１０２は、選択されたコマンドをＡＰＤ１０４に伝達する。これらの選択されたコマンドは、並列実行に適したグラフィックスコマンドと、並列実行に適した他のコマンドとを含み得る。計算処理コマンドを含み得るこれらの選択されたコマンドは、実質的にＣＰＵ１０２から独立して実行され得る。
【００３８】
ＡＰＤ１０４は、例えば１つ以上の単一命令複数データ（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）処理コア等ではあるがこれに制限されない、自身の計算ユニット（図示せず）を含み得る。本明細書で参照されるＳＩＭＤは、パイプライン、すなわち、それぞれが自身のデータおよび共有プログラムカウンタを有する複数の処理エレメント上でカーネルが同時に実行されるプログラミングモデルである。全ての処理エレメントは、同一の１組の命令を実行する。プレディケーションを用いることにより、発行されたコマンドごとに、ワークアイテムを関与させることまたはさせないことが可能となる。
【００３９】
１つの例において、各ＡＰＤ計算ユニット１０４は、１つ以上のスカラーおよび／またはベクトル浮動小数点演算ユニットおよび／または算術論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ａｎｄ  ｌｏｇｉｃ  ｕｎｉｔ）を含み得る。ＡＰＤ計算ユニットは、逆平方根ユニットおよびサイン／コサインユニット等の特殊用途処理ユニット（図示せず）も含み得る。１つの例において、ＡＰＤ計算ユニットは、本明細書においてシェーダコア１２２と総称される。
【００４０】
１つ以上のＳＩＭＤが存在することにより、一般に、ＡＰＤ１０４は、グラフィックス処理において一般的なデータ並列タスク等のデータ並列タスクの実行に、理想的に好適なものとなる。
【００４１】
ピクセル処理等のいくつかのグラフィックスパイプライン処理と、他の並列演算処理とは、同一のコマンドストリームまたは計算カーネルが、ストリームまたは入力データ要素の集合体上で実行されることを要求する。同一の計算カーネルのそれぞれのインスタンス化は、上記データ要素を並列に処理するために、シェーダコア１２２の複数の計算ユニット上で同時に実行され得る。本明細書で参照されるように、例えば計算カーネルは、プログラム上で宣言され、ＡＰＤ計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
【００４２】
１つの例示的な実施形態において、各計算ユニット（例えばＳＩＭＤ処理コア）は、入力されるデータを処理するために、特定ワークアイテムのそれぞれのインスタンス化を実行し得る。ワークアイテムは、コマンドによりデバイス上で呼び出されるカーネルの並列実行の集合体のうちの１つである。ワークアイテムは、計算ユニット上で実行されるワークグループの一部として、１つ以上の処理エレメントにより実行され得る。
【００４３】
ワークアイテムは、自身のグローバルＩＤおよびローカルＩＤによって、集合体内の他の実行から区別される。１つの例において、ワークグループにおいて１つのＳＩＭＤエンジンで同時に実行されるワークアイテムの一部は、ウェーブフロント１３６と称され得る。ウェーブフロントの幅は、計算ユニット（例えば、ＳＩＭＤ処理コア）のハードウェアの特性である。本明細書で参照されるワークグループは、単一の計算ユニット上で実行される関連するワークアイテムの集合体である。ワークグループ内のワークアイテムは、同一のカーネルを実行し、ローカルメモリおよびワークグループバリアを共有する。
【００４４】
代表的な実施形態において、１つのワークグループからの全てのウェーブフロントは、同一のＳＩＭＤ処理コアで処理される。ウェーブフロントにわたる命令は１つずつ発行され、全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは、同一のプログラムを実行する。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
【００４５】
実行マスクおよびワークアイテムプレディケーションは、ウェーブフロント内の拡散的な制御フローを可能にするために用いられる。なお、拡散的な制御フローにおいては、各個別のワークアイテムは、カーネルを通じて一意的なコードパスを実際に取り得る。部分的に占められたウェーブフロントは、ワークアイテムの全てのセットがウェーブフロント開始時にて必ずしも利用可能とは限らない場合に、処理され得る。例えば、シェーダコア１２２は、所定数のウェーブフロント１３６を同時に実行し得る。なお、各ウェーブフロント１３６は、複数のワークアイテムを含む。
【００４６】
システム１００において、ＡＰＤ１０４は、グラフィックスメモリ１３０等の自身のメモリを含む（なお、メモリ１３０は、グラフィックス専用に制限されるとは限らない）。グラフィックスメモリ１３０は、ＡＰＤ１０４における計算実行の間の使用のために、ローカルメモリを提供する。シェーダコア１２２内の個々の計算ユニット（図示せず）は、自身のローカルデータ記憶装置（図示せず）を有し得る。１つの実施形態において、ＡＰＤ１０４は、ローカルグラフィックスメモリ１３０へのアクセス、ならびにメモリ１０６へのアクセスを含む。他の実施形態において、ＡＰＤ１０４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、または、ＡＰＤ１０４には直接的に接続されているがメモリ１０６からは分離している他のメモリ（図示せず）へのアクセスを含み得る。
【００４７】
図示の例において、ＡＰＤ１０４は、１つまたは「ｎ」個のコマンドプロセッサ（ＣＰ：ｃｏｍｍａｎｄ  ｐｒｏｃｅｓｓｏｒ）１２４を含み得る。ＣＰ１２４は、ＡＰＤ１０４内の処理を制御する。ＣＰ１２４は、実行されるべきコマンドを、メモリ１０６内のコマンドバッファ１２５から取得し、ＡＰＤ１０４でのこれらのコマンドの実行を調整する。
【００４８】
１つの例において、ＣＰＵ１０２は、アプリケーション１１１に基づくコマンドを、適切なコマンドバッファ１２５に入力する。本明細書において参照されるように、アプリケーションは、ＣＰＵ内またはＡＰＤ内の計算ユニット上で実行されるプログラム部分の組合せである。
【００４９】
複数のコマンドバッファ１２５は、各プロセスがＡＰＤ１０４での実行のためにスケジュールされた状態で、保持され得る。
【００５０】
ＣＰ１２４は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組合せにおいて実装され得る。１つの実施形態において、ＣＰ１２４は、スケジューリングロジックを含むロジックを実装するためのマイクロコードを有する縮小命令セットコンピュータ（ＲＩＳＣ：ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｅｒ）エンジンとして実装される。
【００５１】
ＡＰＤ１０４は、１つまたは「ｎ」個のディスパッチコントローラ（ＤＣ：ｄｉｓｐａｔｃｈ  ｃｏｎｔｒｏｌｌｅｒ）１２６を含み得る。本願において、ディスパッチという用語は、１セットの計算ユニット上の１セットのワークグループに対するカーネルの実行のスタートを起動するために、コンテキスト状態を使用するディスパッチコントローラにより実行されるコマンドを指す。ＤＣ１２６は、シェーダコア１２２内でワークグループを起動するためのロジックを含む。いくつかの実施形態において、ＤＣ１２６は、ＣＰ１２４の一部として実装され得る。
【００５２】
システム１００は、ＡＰＤ１０４上で実行するためのプロセスを実行リスト１５０から選択するためのハードウェアスケジューラ（ＨＷＳ：ｈａｒｄｗａｒｅ  ｓｃｈｅｄｕｌｅｒ）１２８を含む。ＨＷＳ１２８は、ラウンドロビン方式、優先レベルを用いて、または他のスケジューリングポリシーに基づいて、プロセスを実行リスト１５０から選択し得る。優先レベルは、例えば、動的に決定され得る。ＨＷＳ１２８は、例えば、新規のプロセスを追加することによって、あるいは既存のプロセスを実行リスト１５０から削除することによって、実行リスト１５０を管理する機能を含み得る。ＨＷＳ１２８の実行リスト管理ロジックは、実行リストコントローラ（ＲＬＣ：ｒｕｎ  ｌｉｓｔ  ｃｏｎｔｒｏｌｌｅｒ）と称されることもある。
【００５３】
本発明の様々な実施形態において、ＨＷＳ１２８が、ＲＬＣ１５０からのプロセスの実行を開始すると、ＣＰ１２４は、対応するコマンドバッファ１２５からのコマンドの取得および実行を開始する。いくつかの事例において、ＣＰ１２４は、ＣＰＵ１０２から受信したコマンドに対応する、ＡＰＤ１０４内で実行される１つ以上のコマンドを生成し得る。１つの実施形態において、ＣＰ１２４は、ＡＰＤ１０４リソースおよび／またはシステム１００のリソースの利用が改善または最大化されるように、ＡＰＤ１０４におけるコマンドの優先化およびスケジューリングを、他のコンポーネントとともに実装する。
【００５４】
ＡＰＤ１０４は、インタラプトジェネレータ１４６に対してアクセスを有するか、またはインタラプトジェネレータ１４６を含み得る。インタラプトジェネレータ１４６は、ＡＰＤ１０４がページフォールト等のインタラプトイベントに遭遇すると、ＡＰＤ１０４によってオペレーティングシステム１０８にインタラプトをかけるよう構成され得る。例えば、ＡＰＤ１０４は、ＩＯＭＭＵ１１６内のインタラプト生成ロジックに依存して、上述のページフォールトインタラプトを生成し得る。
【００５５】
ＡＰＤ１０４は、シェーダコア１２２内で現在実行中のプロセスを切り替えるためのプリエンプションおよびコンテキストスイッチロジック１２０を含み得る。コンテキストスイッチロジック１２０は、例えばプロセスを停止させ、その現在状態（例えばシェーダコア１２２状態およびＣＰ１２４状態）を保存する機能を含む。
【００５６】
本明細書において参照される状態という用語は、初期状態、中間状態および／または最終状態を含み得る。初期状態は、機械がプログラム順序に従って入力データセットを処理することによって、データの出力セットを生成する開始点である。例えば、処理を前進させるためにいくつかのポイントにおいて記憶される必要がある中間状態が存在する。この中間状態は、他のプロセスによってインタラプトがかけられた場合に、後に実行を継続することを可能にするために記憶される場合もある。出力データセットの一部として記録され得る最終状態も存在する。
【００５７】
プリエンプションおよびコンテキストスイッチロジック１２０は、他のプロセスを、ＡＰＤ１０４にコンテキストスイッチするためのロジックを含み得る。他のプロセスをＡＰＤ１０４で実行するようにコンテキストスイッチするための機能は、ＡＰＤ１０４上で実行するために、例えばＣＰ１２４およびＤＣ１２６によってプロセスをインスタンス化することと、当該プロセスに対して以前に保存された状態を復元することと、当該プロセスの実行を開始することと、を含み得る。
【００５８】
メモリ１０６は、ＤＲＡＭ（図示せず）等の非永続型メモリを含み得る。メモリ１０６は、例えば、アプリケーションまたは他の処理ロジックの部分を実行する間に、処理ロジック命令、定数および様々な変数を記憶し得る。例えば、１つの実施形態において、ＣＰＵ１０２上で１つ以上の演算を実行するための制御ロジックの部分は、ＣＰＵ１０２によって演算のそれぞれの部分が実行される間にメモリ１０６内に常駐し得る。
【００５９】
実行中、個別のアプリケーション、オペレーティングシステム関数、処理ロジックコマンドおよびシステムソフトウェアは、メモリ１０６に常駐し得る。オペレーティングシステム１０８に対して必須である制御ロジックコマンドは、一般に、実行中にはメモリ１０６に常駐することとなるであろう。他のソフトウェアコマンド、例えばカーネルモードドライバ１１０およびソフトウェアスケジューラ１１２は、システム１００の実行中にはメモリ１０６に常駐し得る。
【００６０】
この例において、メモリ１０６は、コマンドをＡＰＤ１０４に送るために、ＣＰＵ１０２によって用いられるコマンドバッファ１２５を含む。メモリ１０６は、プロセスリストおよびプロセス情報（例えば、アクティブリスト１５２およびプロセス制御ブロック１５４）を含み得る。これらのリストおよび情報は、スケジュール情報を、ＡＰＤ１０４および／または関連するスケジューリングハードウェアに伝えるために、ＣＰＵ１０２上で実行されるスケジューリングソフトウェアによって使用される。メモリ１０６に対するアクセスは、メモリ１０６に接続されたメモリコントローラ１４０によって管理され得る。例えば、メモリ１０６に対する読み出しおよび書き込みを実行するための、ＣＰＵ１０２または他のデバイスからの要求は、メモリコントローラ１４０によって管理される。
【００６１】
システム１００の他の態様に戻ると、ＩＯＭＭＵ１１６は、マルチコンテキスト・メモリ管理ユニットである。
【００６２】
本明細書で用いられるコンテキスト（プロセスともよばれる）という用語は、カーネルが実行される環境であって、同期およびメモリ管理が定義されるドメインであるとみなされる。コンテキストは、１セットのデバイスと、これらのデバイスに対してアクセス可能であるメモリと、対応するメモリ特性と、メモリオブジェクトにおけるカーネル（単数または複数）または演算の実行をスケジュールするために用いられる１つ以上のコマンドキューとを含む。
【００６３】
図１Ａにおいて示される例に戻ると、ＩＯＭＭＵ１１６は、ＡＰＤ１０４を含むデバイスに対するメモリページアクセスに対して、仮想アドレスから物理アドレスへの変換を実行するためのロジックを含む。ＩＯＭＭＵ１１６は、例えば、ＡＰＤ１０４等のデバイスによるページアクセスの結果としてページフォールトが生じる場合に、インタラプトを生成するためのロジックを含み得る。ＩＯＭＭＵ１１６は、ＴＬＢ１１８を含むか、あるいはＴＬＢ１１８に対するアクセスを有し得る。ＴＬＢ１１８は、１つの例として、メモリ１０６内のデータ用にＡＰＤ１０４によりなされた要求に対して、論理（すなわち仮想）メモリアドレスから物理メモリアドレスへの変換を高速化するために、コンテントアドレサブルメモリ（ＣＡＭ：ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）に実装され得る。
【００６４】
示された例において、通信インフラストラクチャ１０９は、必要に応じてシステム１００のコンポーネントを相互接続する。通信インフラストラクチャ１０９は、周辺構成要素相互接続（ＰＣＩ）バス、拡張ＰＣＩ（ＰＣＩ−Ｅ）バス、アドバンスト・マイクロコントローラ・バス・アーキテクチャ（ＡＭＢＡ）バス、アドバンスト・グラフィックス・ポート（ＡＧＰ）または他の通信インフラストラクチャのうち１つ以上を含み得る（図示せず）。通信インフラストラクチャ１０９は、イーサネット（登録商標）若しくは同様のネットワークまたはアプリケーションの転送速度要求を満足する任意の好適な物理的通信インフラストラクチャを含み得る。通信インフラストラクチャ１０９は、コンピューティングシステム１００のコンポーネントを含むコンポーネントを相互接続するための機能を含む。
【００６５】
この例において、オペレーティングシステム１０８は、システム１００のハードウェアコンポーネントを管理する機能と、共通サービスを提供するための機能とを含む。様々な実施形態において、オペレーティングシステム１０８は、ＣＰＵ１０２上で実行し、共通サービスを提供する。これらの共通サービスは、例えば、ＣＰＵ１０２内での実行のためにアプリケーションをスケジューリングすることと、フォールト管理と、インタラプトサービスと、他のアプリケーションの入力および出力を処理することと、を含む。
【００６６】
いくつかの実施形態において、オペレーティングシステム１０８は、例えばインタラプトコントローラ１４８等のインタラプトコントローラによって生成されたインタラプトに基づいて、適切なインタラプトハンドリングルーチンを呼び出す。例えば、オペレーティングシステム１０８は、ページフォールト・インタラプトを検出すると、関連するページをメモリ１０６にロードし始め、且つ、対応するページテーブルを更新するために、インタラプトハンドラを呼び出す。
【００６７】
オペレーティングシステム１０８は、オペレーティングシステムにより管理されるカーネル機能を通して、ハードウェア部品に対するアクセスが仲介されることを確保することによって、システム１００を保護する機能を含み得る。事実、オペレーティングシステム１０８は、アプリケーション１１１等のアプリケーションが、ＣＰＵ１０２上でユーザスペースにおいて実行されることを確保する。オペレーティングシステム１０８は、アプリケーション１１１が、ハードウェアにアクセスするためにオペレーティングシステムにより提供されるカーネル機能および／または入出力機能を呼び出すことも確保する。
【００６８】
例として、アプリケーション１１１は、ＣＰＵ１０２上でも実行されるユーザ計算を実行するための様々なプログラムまたはコマンドを含む。ＣＰＵ１０２は、選択されたコマンドを、ＡＰＤ１０４で処理するためにシームレスに送信し得る。
【００６９】
１つの例において、ＫＭＤ１１０は、ＣＰＵ１０２、ＣＰＵ１０２上で実行されるアプリケーションまたは他のロジックが、ＡＰＤ１０４の機能を呼び出し得るアプリケーションプログラミングインタフェース（ＡＰＩ）を実装する。例えば、ＫＭＤ１１０は、ＣＰＵ１０２からのコマンドを、コマンドバッファ１２５にエンキューし得る。なお、ＡＰＤ１０４は、このコマンドバッファ１２５からコマンドを続けて取得することとなる。加えて、ＫＭＤ１１０は、ＡＰＤ１０４上で実行されるプロセスのスケジューリングを、ＳＷＳ１１２とともに実行する。ＳＷＳ１１２は、例えば、ＡＰＤ上で実行されるプロセスの優先度リストを保持するためのロジックを含み得る。
【００７０】
本発明の他の実施形態において、ＣＰＵ１０２上で実行するアプリケーションは、コマンドをエンキューするときに、ＫＭＤ１１０を完全にバイパスし得る。
【００７１】
いくつかの実施形態において、ＳＷＳ１１２は、ＡＰＤ１０４上で実行されるプロセスのアクティブリスト１５２を、メモリ１０６に保持する。ＳＷＳ１１２は、アクティブリスト１５２におけるプロセスのうち、ハードウェアのＨＷＳ１２８により管理される一部を選択する。各プロセスをＡＰＤ１０４上で実行することに関する情報は、ＣＰＵ１０２からプロセス制御ブロック（ＰＣＢ：ｐｒｏｃｅｓｓ  ｃｏｎｔｒｏｌ  ｂｌｏｃｋ）１５４を通して、ＡＰＤ１０４に伝えられる。
【００７２】
アプリケーション、オペレーティングシステムおよびシステムソフトウェアのための処理ロジックは、マスクワーク／フォトマスクの生成を通して最終的に製造プロセスを構成することで、本明細書において説明される本発明の態様を具体化するハードウェア装置を生成することを可能にするための、例えば、Ｃ言語等のプログラム言語および／またはＶｅｒｉｌｏｇ、ＲＴＬ等のハードウェア記述言語もしくはネットリストにおいて指定されるコマンドを含み得る。
【００７３】
当業者は、コンピューティングシステム１００が、図１Ａにおいて示されるコンポーネントよりも多数または少数のコンポーネントを含み得ることを、本明細書を読むことで理解するであろう。例えば、コンピューティングシステム１００は、１つ以上の入力インターフェースと、不揮発性ストレージと、１つ以上の出力インターフェースと、ネットワークインターフェースと、１つ以上のディスプレイまたはディスプレイインターフェースと、を含み得る。
【００７４】
図１Ｂは、図１Ａにおいて示されるＡＰＤ１０４のより詳細な例示を示す実施形態である。図１Ｂにおいて、ＣＰ１２４は、ＣＰパイプライン１２４ａ，１２４ｂ，１２４ｃを含み得る。ＣＰ１２４は、図１Ａにおいて示されるコマンドバッファ１２５から入力として提供されるコマンドリストを処理するように、構成され得る。図１Ｂの典型的な動作において、ＣＰ入力０（１２４ａ）は、コマンドをグラフィックスパイプライン１６２に駆動することを担当する。ＣＰ入力１および２（１２４ｂおよび１２４ｃ）は、コマンドを計算パイプライン１６０に伝える。ＨＷＳ１２８の動作を制御するためのコントローラ機構１６６も提供される。
【００７５】
図１Ｂにおいて、グラフィックスパイプライン１６２は、本明細書において順序化パイプライン１６４と称される、１セットのブロックを含み得る。例えば、順序化パイプライン１６４は、頂点グループ変換器（ＶＧＴ：ｖｅｒｔｅｘ  ｇｒｏｕｐ  ｔｒａｎｓｌａｔｏｒ）１６４ａと、プリミティブアセンブラ（ＰＡ：ｐｒｉｍｉｔｉｖｅ  ａｓｓｅｍｂｌｅｒ）１６４ｂと、スキャンコンバータ（ＳＣ：ｓｃａｎ  ｃｏｎｖｅｒｔｅｒ）１６４ｃと、シェーダエクスポート・レンダーバック・ユニット（ＳＸ／ＲＢ：ｓｈａｄｅｒ−ｅｘｐｏｒｔ，ｒｅｎｄｅｒ−ｂａｃｋ  ｕｎｉｔ）１７６とを含む。順序化パイプライン１６４内の各ブロックは、グラフィックスパイプライン１６２内の異なる段階のグラフィックス処理を表し得る。順序化パイプライン１６４は、固定機能ハードウェアパイプラインであり得る。本発明の精神および範囲に含まれ得る他の実装を用いることも可能である。
【００７６】
わずかな量のデータが、入力としてグラフィックスパイプライン１６２に提供されるが、このデータは、グラフィックスパイプライン１６２からの出力として提供される時まで増幅されることとなるであろう。グラフィックスパイプライン１６２は、ＣＰパイプライン１２４ａから受け取ったワークアイテムグループ内の範囲にわたってカウントするためのＤＣ１６６も含む。ＤＣ１６６を通して提示された計算作業は、グラフィックスパイプライン１６２と準同期している。
【００７７】
計算パイプライン１６０は、シェーダＤＣ１６８，１７０を含む。ＤＣ１６８，１７０のそれぞれは、ＣＰパイプライン１２４ｂ，１２４ｃから受け取ったワークグループ内の計算範囲にわたってカウントするように構成されている。
【００７８】
図１Ｂにおいて示されるＤＣ１６６，１６８，１７０は、入力範囲を受け取り、入力範囲をワークグループに分割し、次いでこれらのワークグループをシェーダコア１２２に伝える。グラフィックスパイプライン１６２は、一般に固定機能パイプラインであるため、その状態を保存および復元することは困難であり、そのためグラフィックスパイプライン１６２は、コンテキストスイッチが困難である。したがって、ほとんどの場合、本明細書において論じられるコンテキストスイッチは、グラフィックス処理におけるコンテキストスイッチに関係しない。例外は、シェーダコア１２２におけるグラフィックス作業であり、これはコンテキストスイッチされ得る。グラフィックスパイプライン１６２内のワーク処理が完了した後、完了したワークを、レンダーバックユニット１７６を通じて処理する。レンダーバックユニット１７６は、デプス計算およびカラー計算を行い、次いで、この最終結果をメモリ１３０に書き込む。
【００７９】
シェーダコア１２２は、グラフィックスパイプライン１６２および計算パイプライン１６０により共有され得る。シェーダコア１２２は、ウェーブフロントを実行するように構成された汎用プロセッサであり得る。１つの例において、計算パイプライン１６０内の全てのワークは、シェーダコア１２２内で処理される。シェーダコア１２２は、プログラム可能なソフトウェアコードを実行し、多様な形態のデータ（例えば、状態データ）を含む。
【００８０】
全てのワークアイテムがＡＰＤリソースにアクセスできないとき、ＱｏＳ内で中断が起こる。本発明の実施形態は、ＡＰＤ１０４内のリソースに対する２つ以上のタスクの効率的および同時の起動を容易にし、全てのワークアイテムが種々のＡＰＤリソースにアクセスするのを可能にする。１つの実施形態では、ＡＰＤ入力スキームは、ＡＰＤの作業負荷を管理することにより、全てのワークアイテムが並列にＡＰＤリソースへのアクセスを有することを可能にする。ＡＰＤの作業負荷が最大レベルに近づくとき（例えば最大Ｉ／Ｏレートの達成中）、このＡＰＤ入力スキームは、未使用となり得た処理リソースが多くのシナリオで同時に使用可能であるように補助する。シリアル入力ストリームは、例えば、ＡＰＤへの並列同時入力として現れるように抽出可能である。
【００８１】
例えば、ＣＰ１２４の各々は、ＡＰＤ１０４内の他のリソースへ入力として送る１つ以上のタスクを有することが可能であり、各タスクは、複数のウェーブフロントを表すことが可能である。第１のタスクが入力として送られた後に、このタスクは、一定期間にわたって、タスクの完了に必要な全てのＡＰＤリソースを使用するように起動することが許可されてもよい。この第１のタスクは、単独で、最大ＡＰＤ使用閾値に達するかもしれないし、達しないかもしれない。しかし、他のタスクがエンキューされ、ＡＰＤ１０４内で処理されるのを待っているので、ＡＰＤリソースの割り当ては、全てのタスクがＡＰＤ１０４を同時に使用でき、各タスクがＡＰＤの最大使用率を達成するのを保証するように管理されることが可能である。複数のタスクによるＡＰＤ１０４の同時使用、およびこれらの組み合わせた使用率は、予め定められた最大ＡＰＤ使用閾値に達することを保証する。
【００８２】
組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムのプロパティの発見は、図２に示された代表的なシステムに関連して後述する。後述するように、代表的なシステムは、プロセッサ間通信リンクで互いに接続された２つのＡＰＵと、２つのＡＰＵのうち第１のＡＰＵに接続された第１のアドインボードであって、専用のＡＰＤおよびローカルメモリを有する第１のアドインボードと、２つのＡＰＵのうち第２のＡＰＵに接続された第２のアドインボードであって、それぞれ自身のローカルメモリに接続された２つの専用ＡＰＤを有する第２のアドインボードとを含み、両方のＡＰＤは、共用のＰＣＩｅブリッジを通して第２のＡＰＵに接続されている。この例示的なシステムは、それらの存在、プロパティ、相互接続および／または属性が、限定されないが例えばアプリケーションソフトウェアなどのソフトウェアに認識される場合に、プラットフォームの演算リソースをより効率的に使用するように当該ソフトウェアが使用可能な種々の特徴、プロパティおよび性能を示すのに使用される。当業者が理解するように、異なる構成および配置を有する代替的な実施形態が考えられる。
【００８３】
本発明によれば、柔軟および拡張可能、且つ、一貫した方法で、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムアーキテクチャのプロパティを、発見可能なプラットフォームプロパティに組み込むことを可能にする、確立されたプラットフォームインフラストラクチャ発見メカニズムへのいくつかの拡張（例えばＡＣＰＩへの拡張）が提供される。他の実施形態では、ＡＣＰＩに加え、またはこれに代えて他の通信プロトコルも採用する。本発明の種々の実施形態は、ＣＰＵ、ＡＰＵおよびＡＰＤプロパティを、整合したインフラストラクチャに組み込む特徴および改良を導入し、ソフトウェアを補助する。このソフトウェアを、オペレーティングシステムプラットフォーム／電力管理ソフトウェア（ＯＳＰＭ）と呼んでもよい。
【００８４】
図２は、本明細書に開示されるモデルの一例である異機種環境のプラットフォームデザインのブロック図であり、種々のコンポーネントおよび／またはサブシステムを示し、それらの存在および／または属性の発見は、タスクの効果的なスケジューリングが実行されるように、システムおよび／またはアプリケーションソフトウェアに必要とされる情報を提供する。以下の記載において、種々のコンポーネントに関連するプロパティの概要の説明を補助するために、図２を使用する。そのような理由により、２つのＡＰＵを有するプラットフォームを１つの例として示す。
【００８５】
本発明は、図２の一例の実施形態に限定されず、また本発明の実施形態は、同様の方法で３つ以上または１つのＡＰＵソケットを有する、より大きいまたは小さいプラットフォームデザインの両方を含むことを述べておく。本明細書に記載された実施形態は、例示の目的のためであり、本発明による他の実施形態が可能であることを理解すべきである。本発明による特定のプラットフォームデザインの詳細な実装プロパティは、異なってもよい。
【００８６】
図２を参照すると、プラットフォームコンポーネントは、多数のブロックに分かれており、各ブロックは、異なる特徴、プロパティ、相互接続および／または属性を有してもよい。より小さいアプリケーションソフトウェアを含むソフトウェアは、これらの機能、プロパティ、相互接続および／または属性を列挙し、これらをコード演算に組み込む。
【００８７】
本発明によるシステムプラットフォーム２００は、第１のＡＰＵ２０２と、第２のＡＰＵ２０４とを有する。ＡＰＵ２０２およびＡＰＵ２０４は、第１のプロセッサ間通信リンク２０６によって通信できるように接続されている。１つの実施形態では、第１のプロセッサ間通信リンク２０６は、ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンクである。ＡＰＵ２０２，２０４の各々は、複数のコアを有するＣＰＵと、複数のＳＩＭＤコアを有するＡＰＤと、入力／出力メモリマネジャユニットを有する。
【００８８】
一例のシステムプラットフォーム２００は、第１のメモリバス２１０によって第１のＡＰＵ２０２に接続された第１のシステムメモリ２０８を有する。第１のシステムメモリ２０８は、コヒーレントキャッシュ可能部２０９ａと、非コヒーレントキャッシュ不可能部２０９ｂとを有する。システムプラットフォーム２０２は、第１のアドインボード２１８と、第２のアドインボード２３０とを有する。第１のアドインボード２１８は、第１のＰＣＩｅバス２５０によって、第１のＡＰＵ２０２に接続されている。第２のアドインボード２３０は、第２のＰＣＩｅバス２５２によって、第２のＡＰＵに接続される。種々の他の実施形態では、第１のアドインボード２１８および第２のアドインボード２３０のうち１つ若しくは両方の、物理的コンポーネントおよび／またはソフトウェア、ファームウェア若しくはマイクロコードのいくつかまたは全ては、１つ以上のＡＰＵと共に、共用の基板（例えば、プリント回路基板）に配置される。
【００８９】
第１のアドインボード２１８は、第１の専用ＡＰＤ２２０と、メモリバス２２４により第１の専用ＡＰＤ２２０に接続された第１のローカルメモリ２２２と、例えばＶＢＩＯＳ  ＵＥＦＩ  ＧＯＰ（ビデオ基本入出力システム、統合拡張ファームウェアインターフェース、グラフィックス出力プロトコル）などのファームウェアを内部に格納した第１のファームウェアメモリ２２６とを有する。第１のファームウェアメモリ２２６は、通常、不揮発性メモリとして物理的に実装されるが、このような実装は本発明の必要条件ではない。第１の専用ＡＰＤ２２０は、１つ以上のＳＩＭＤユニットを有する。第１のローカルメモリ２２２は、コヒーレントである第１の部分２２３ａと、非コヒーレントである第２の部分２２３ｂとを有する。第１のローカルメモリ２２２は、通常、揮発性メモリとして物理的に実装されるが、このような実装は本発明の必要条件ではない。
【００９０】
第２のアドインボード２３０は、第２の専用ＡＰＤ２３２と、メモリバス２３６により第２のＡＰＤ２３２に接続された第２のローカルメモリと、第３の専用ＡＰＤ２３８と、メモリバス２４２により第３の専用ＡＰＤ２３８に接続された第３のローカルメモリ２４０と、ＰＣＩｅバス２４６により第２の専用ＡＰＤ２３２に接続されたＰＣＩｅブリッジ２４４とを有しており、ＰＣＩｅブリッジ２４４は、ＰＣＩｅバス２４８により第３の専用ＡＰＤ２３８に接続されている。第２のローカルメモリ２３４は、コヒーレントである第１の部分２３５ａと、非コヒーレントである第２の部分２３５ｂとを有する。第３のローカルメモリ２４０は、コヒーレントである第１の部分２４１ａと、非コヒーレントである第２の部分２４１ｂとを有する。第２および第３のローカルメモリ２３４，２４０は、通常、揮発性メモリとして物理的に実装されるが、このような実装は本発明の必要条件ではない。第２のアドインボード２３０は、ＶＢＩＯＳ  ＵＥＦＩ  ＧＯＰのようなファームウェアを内部に格納した第２のファームウェアメモリ２５４を有する。
【００９１】
従来、ＣＰＵ機能およびリソース（例えば、性能、特徴、電力および実行状態など）は、ＣＰＵＩＤ命令ならびにＡＣＰＩテーブルおよび方法を通じて開示され、その一方で、システムの他のデバイス、例えば周辺装置には、ＰＣＩｅ性能構造が使用される。
【００９２】
これらのメカニズムを通して記載される基本特性は、リソース機能およびリソースアフィニティを含む。前者は同一の特徴および特性（例えば、ＣＰＵコア）で統一したコンポーネントの「プール」として通常記載され、後者はそれらのリソース間のトポロジーおよび関係を記載する階層表現を一般に必要とする。これらの表示の各々は、あるタスクに対して利点を有し、従って、本発明の実施形態の列挙プロセスで保持してもよい。
【００９３】
組み合わせたＣＰＵ／ＡＰＤ演算システムアーキテクチャと関連して、種々の設計原理および列挙のために開示された詳細なコンポーネントプロパティを、これらのプロパティを開示する方法およびメカニズムと共に後述する。いくつかのプロパティを、１つ以上の実行された命令（例えば、ＣＰＵＩＤ）によって開示してもよいし、テーブルのような情報構造により開示してもよい。種々の別の実施形態で、特定のプロパティを、ＣＰＵＩＤ、情報構造またはこれら両方により開示してもよい。
【００９４】
組み合わせたＣＰＵ／ＡＰＤ演算システムアーキテクチャプラットフォームの基本検出を、ＣＰＵＩＤ命令の実行により遂行してもよい。しかし、ＣＰＵＩＤ命令の実行は、組み合わせたＣＰＵ／ＡＰＤ演算システム構成要素の詳細な性能の発見については通常提供しない。正しくは、このメカニズムは、システム自身が組み合わせたＣＰＵ／ＡＰＤ演算システムであるか否かに関して、通常、ｙｅｓ／ｎｏの返答のみを提供する。従って、本発明の態様によると、組み合わせたＣＰＵ／ＡＰＤ演算システムアーキテクチャの詳細な特徴は、組み合わせたＣＰＵ／ＡＰＤ演算システムアーキテクチャプラットフォームの関連する特徴を詳細に規定する、改良されたＡＣＰＩテーブルなどの情報構造を介して、提供される。
【００９５】
１つの実施形態では、ＣＰＵが、改善されたＣＰＵＩＤ命令を実行してもよいように、および、実行したときに、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに関する基本情報を開示するように、ＣＰＵは実装される。この一例の実施形態で、ＣＰＵＩＤ  Ｆｎ８０００＿００１Ｅ  ＥＤＸは、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの基本情報の開示に使用される（後述の表１参照）。アプリケーションおよび他のソフトウェアは、組み合わせたＣＰＵ／ＡＰＤアーキテクチャの受け入れ可能なプラットフォーム上で自身が実行しているか否かを識別するのに、ビット０を使用可能である。組み合わせたＣＰＵ／ＡＰＤアーキテクチャの受け入れ可能なプラットフォーム上の実行は、プラットフォームが、組み合わせたＣＰＵ／ＡＰＤアーキテクチャ準拠ＣＰＵおよびＡＰＤ機能、すなわち計算ユニットおよびＳＩＭＤの両方を含む少なくとも１つのＡＰＵを有することを意味する。ソフトウェアは、改良されたＡＣＰＩテーブルの内容を発見および評価して、可能な機能およびトポロジーの詳細な情報を取得してもよい。本発明は、ＣＰＵＩＤ命令についてこの特別なｏｐコードに、または表１に示されるビットまたはフィールドの特定の配列に限定されないことを述べておく。
【００９６】
【表１】
0006006230.tif 000002
【００９７】
本発明の実施形態によると、図２に示されるようなプラットフォームの発見プロセスは、ローカリティに基づき、大まかな階層構造で利用可能な構成要素に関する情報を開示する。発見プロセスは、ＡＣＰＩ  ＮＵＭＡノード定義（ＡＣＰＩ４．０仕様）と概念的に同様であるが、特定のＡＰＤ／ＳＩＭＤプロパティおよびＩＯＭＭＵ機能をノードプロパティに含むように改良されている。
【００９８】
組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムプラットフォームは、ＣＰＵ／ＡＰＤアーキテクチャに準拠する１つ以上の処理ユニットを含むように特徴付けられ、処理ユニットの少なくとも１つはＡＰＵである（すなわち、ＣＰＵ計算およびＡＰＤ−ＳＩＭＤ実行ユニットの両方を含む）。処理ユニットの各々は、その物理的表現で大まかに定義され（例えば“ＡＰＵ  ソケット”、ＡＰＤ  “アダプタ”／デバイス）、例えば、ＣＰＵ計算ユニットおよびキャッシュ（任意に、組み合わせたアーキテクチャ準拠分散ＡＰＤデバイスではどれも表現されないかもしれない）、ＡＰＤ  ＳＩＭＤおよびキャッシュ（任意に、従来のＣＰＵプロパティが表現される場合）、メモリコントローラおよび接続、ＩＯＭＭＵ（任意に、組み合わせたアーキテクチャ準拠分散ＡＰＤについてはどれも表現されないかもしれない）ならびにＩＯ接続インターフェース（例えば、ＰＣＩｅ、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、ＤＭＩ、内部の、または他の）などであって、これらに限定されない、発見可能な内部の副構成要素およびプロパティを有する。
【００９９】
全てのメモリリソース（例えば、ＡＰＤローカルメモリ）が必ずしもコヒーレントなグローバルメモリの部分ではないので、これらのプロパティを表現するための措置が採られる。従って、システムリソースアフィニティテーブル（ＳＲＡＴ）を使用するのではなく、組み合わせたＣＰＵ／ＡＰＤシステムアーキテクチャに関連する情報を提供するための改良された情報構造が提供される。とりわけ、本明細書にてコンポーネントリソースアフィニティテーブル（ＣＲＡＴ）と呼ぶ本発明による新しい基礎構造と、多数の関連する副構造とが導入される。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１００】
ＣＲＡＴは、例示的な実施形態における、発見可能な組み合わせたＣＰＵ／ＡＰＤアーキテクチャプラットフォームプロパティのヘッド構造である。ソフトウェアは、テーブルを解析して、発見可能な処理ユニット、プロパティおよびそれらのアフィニティを見つけ、構成要素のローカリティを識別するのが可能になる。ＣＲＡＴの内容は、実行中にいくつかの物理コンポーネントがシステムに出入りする場合（例えばＣＰＵ／ＡＰＵおよび／または個別ＡＰＤのホットプラグ）に、変更してもよい。表２は、ＣＲＡＴのフィールドの識別および説明である。
【０１０１】
【表２】
0006006230.tif 000003
【０１０２】
ＣＲＡＴヘッダは、実際のコンポーネント情報を含む副コンポーネント構造を有し、また副コンポーネント構造の前に存在する。副コンポーネントは、後述の副コンポーネントテーブルにより記載される。
【０１０３】
本発明の種々の実施形態は、ＡＰＵアフィニティ情報構造を提供する。この副コンポーネントは、ＡＰＵノードコンポーネント、利用可能なＩ／Ｏインターフェースおよびこれらの帯域幅を記載し、この情報をソフトウェアに提供する。より複雑なＡＰＵプラットフォームプロパティを適切に記載するために、同一のノードに対して複数の上記構造が表現されてもよい。表３は、ＣＲＡＴ  ＡＰＵアフィニティ情報構造のフィールドの識別および説明である。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１０４】
【表３】
0006006230.tif 000004
【０１０５】
表４は、ＡＰＵアフィニティ情報構造のフラグフィールドを記載し、パラメータについてさらに情報を提供する。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１０６】
【表４】
0006006230.tif 000005
【０１０７】
表５は、構造のトポロジー内のメモリノードの存在を示すメモリコンポーネントアフィニティ構造を示す。同一の構造が、記載システムメモリおよび視認可能なデバイスローカルメモリリソースの両方に使用される。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１０８】
【表５】
0006006230.tif 000006
【０１０９】
表６は、このノードのパラメータについてさらなる情報を提供するメモリアフィニティ構造のフラグフィールドを示す。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１１０】
【表６】
0006006230.tif 000007
【０１１１】
表７は、以下のトポロジー情報をオペレーティングシステムに提供するキャッシュアフィニティ情報構造を示す。キャッシュの相対レベル（すなわち、Ｌ１、Ｌ２またはＬ３）と、当該キャッシュが属する組み合わせたアーキテクチャ近接ドメインとの間の関連と、キャッシュが可能にされたか否かについての情報と、キャッシュのサイズについての情報と、キャッシュラインについての情報とが含まれる。キャッシュアフィニティ構造は、「従来の」ＣＰＵキャッシュトポロジーおよびＡＰＤキャッシュプロパティの両方を、ソフトウェアへ体系的な方法で表現するのに使用される。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１１２】
【表７】
0006006230.tif 000008
【０１１３】
表７の‘ＣａｃｈｅＬａｔｅｎｃｙ’フィールドについて、種々の他の実施形態が、より大きいまたは小さい一時的な粒度、および／または異なる丸め方針を使用してもよいことを述べておく。また他の実施形態では、ベンダの製品間に存在する現在のマイクロアーキテクチャの違いを考慮してでも、キャッシュ交換方針に関する情報を有してもよいことを述べておく。
【０１１４】
表８は、ＣＲＡＴキャッシュアフィニティ情報構造のフラグフィールドに格納された情報の識別および説明である。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１１５】
【表８】
0006006230.tif 000009
【０１１６】
最新のプロセッサは、ＴＬＢを有してもよい。ＴＬＢは、物理プロセッサのページ変換のキャッシュである。表９に示されたＴＬＢアフィニティ構造は、プロセッサ用のオペレーティングシステムに対して、以下のトポロジー情報を静的に提供する。ＴＬＢコンポーネンの相対レベル（すなわち、Ｌ１、Ｌ２またはＬ３）と、コンポーネントを共用する兄弟（同種）プロセッサとの間の関連と、ＴＬＢアフィニティ構造が可能にされたか否かについての情報と、ＴＬＢアフィニティ構造がデータまたは命令の変換を含むか否かについての情報とが含まれる。ＴＬＢアフィニティ構造は、プラットフォームに対する静的リソース割り当て構造のリストを拡張したものである。将来のアーキテクチャのページレベル補助の変更は、このテーブルの拡張を必要とする。この構造は副構造の配列で、それぞれが異なるページサイズを記載してもよいことを述べておく。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１１７】
【表９】
0006006230.tif 000010
【０１１８】
【表１０】
0006006230.tif 000011
【０１１９】
本発明の種々の実施形態は、オペレーティングシステムに以下のトポロジー情報を提供するＦＰＵアフィニティ情報構造を有する。ＦＰＵと、当該ＦＰＵを共用する論理プロセッサ（ＣＰＵ）との間の関連と、ＦＰＵのサイズが含まれる。ＦＰＵアフィニティ構造は、プラットフォームに対する静的リソース割り当て構造のリストを拡張したものである。この情報は、プロセッサが兄弟（同種）であると相互に関連づけるためにＡＶＸ命令を使用するアプリケーションにとって、有用となり得る。ＣＲＡＴＦＰＵアフィニティ情報構造の詳細は、表１１に示される。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１２０】
【表１１】
0006006230.tif 000012
【０１２１】
【表１２】
0006006230.tif 000013
【０１２２】
本発明の種々の実施形態は、ＩＯアフィニティ情報構造（表１３および表１４参照）を有する。ＣＲＡＴ  ＩＯアフィニティ情報構造は、オペレーティングシステムに以下のトポロジー情報を提供する。発見可能なＩＯインターフェースと、当該インターフェースを共有する組み合わせたＣＰＵ／ＡＰＤアーキテクチャノードとの間の関連、ならびに当該インターフェースの最大帯域幅、最小帯域幅、レイテンシ評価およびサイズが含まれる。ＩＯアフィニティ構造は、プラットフォームに対するリストリソース割り当て構造を拡張したものである。この情報は、プロセッサが兄弟（同種）であると相互に関連づけるためにＡＶＸ命令を使用するアプリケーションにとって、有用となり得る。これは一例の実施形態であり、他の情報構造を整えることは本発明の範囲内であることを述べておく。
【０１２３】
【表１３】
0006006230.tif 000014
【０１２４】
【表１４】
0006006230.tif 000015
【０１２５】
本発明の種々の実施形態は、コンポーネントローカリティ距離情報テーブル（‘ＣＤＩＴ’）を有する。このテーブルは、全ての組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムローカリティ間の（トランザクションレイテンシの観点から）相対的な距離を示す、組み合わせたＣＰＵ／ＡＰＤアーキテクチャプラットフォーム用のメカニズムを提供する。また本明細書では、このシステムローカリティを、組み合わせたＣＰＵ／ＡＰＤアーキテクチャ近接ドメインとも呼ぶ。これらの実施形態は、ＡＣＰＩ４．０仕様で定義されるシステムローカリティ距離情報テーブル（ＳＬＩＴ）の改良を表す。ｉが行列の行で、ｊが行列の列を表すＣＤＩＴ内のそれぞれのエントリ［ｉ，ｊ］の値は、コンポーネントローカリティ／近接ドメインｉからシステム内のあらゆる他のコンポーネントローカリティｊ（自身を含む）への相対的な距離を示す。
【０１２６】
ｉ，ｊの行および列の値は、ＣＲＡＴテーブル内に定義される融合近接ドメインと関連がある。この一例の実施形態では、エントリ値は、１バイトの符号のない整数である。コンポーネントローカリティｉからコンポーネントローカリティｊへの相対的な距離は、行列内の（ｉ×Ｎ＋Ｊ）番目のエントリ（インデックス値は２バイトの符号のない整数）であり、Ｎは組み合わせたＣＰＵ／ＡＰＤアーキテクチャ近接ドメインの数である。コンポーネントローカリティからそれ自身への相対的な距離を除き、それぞれの相対的な距離は行列内に２回格納される。これは、コンポーネントローカリティ間の２つの方向に対する相対的な距離が異なるシナリオを記載する性能を提供する。１つのコンポーネントローカリティが他から到達不可能であれば、そのテーブルエントリに値２５５（０ｘＦＦ）が記憶される。コンポーネントローカリティからそれ自身への相対的な距離は値１０に統一され、距離値０〜９は予約されており意味を持たない。
【０１２７】
【表１５】
0006006230.tif 000016
【０１２８】
本発明の種々の実施形態は、組み合わせたＣＰＵ／ＡＰＤアーキテクチャテーブル発見デバイスを有する。組み合わせたＣＰＵ／ＡＰＤアーキテクチャデバイスＡＣＰＩノードに配置される‘ＣＲＡＴ’メソッドが評価される場合に、ＣＲＡＴが返される。組み合わせたＣＰＵ／ＡＰＤアーキテクチャデバイスＡＣＰＩノードに配置される‘ＣＤＩＴ’メソッドが評価される場合に、コンポーネントローカリティ距離情報テーブル（ＣＤＩＴ）が返される。組み合わせたＣＰＵ／ＡＰＤアーキテクチャ発見デバイスが存在することで、組み合わせたＣＰＵ／ＡＰＤアーキテクチャコンポーネントのホットプラグ通知およびホットアンプラグ通知のための一定の通知メカニズムが可能になり、その一方で、この通知がテーブルおよび方法の再評価を必要とする。この論理ＡＣＰＩデバイスは、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステム互換プラットフォームについて必要とされる。
【０１２９】
【表１６】
0006006230.tif 000017
【０１３０】
図５は、本発明による発見およびレポーティング（報告）プロセス、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムのプロパティおよびトポロジーを示すフローチャートである。発見されたプロパティは、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの演算リソース内の演算タスクのスケジューリングおよび分散に関連し得る。そのような演算タスクのスケジューリングおよび分散を、オペレーティングシステム、アプリケーションソフトウェアまたはこれら両方が扱ってもよい。一例のプロセスは、コアの数、キャッシュの数、キャッシュアフィニティ、階層およびレイテンシ、ＴＬＢ、ＦＰＵ、実行状態、電力状態などの１つ以上の様々なＣＰＵ計算コアプロパティの発見５０２を含む。
【０１３１】
図５の一例のプロセスは、発見５０４、発見５０６、発見５０８、発見５１０、エンコーディング５１２、提供５１４をさらに含む。ＡＰＤ計算コアのプロパティの発見５０４は、ＳＩＭＤサイズ、ＳＩＭＤ配列、ローカルデータストアアフィニティ、ワークキュープロパティ、ＩＯＭＭＵアフィニティおよびハードウェアコンテキストメモリサイズのうち１つ以上の発見を含む。補助コンポーネントのプロパティの発見５０６は、バススイッチ、メモリコントローラチャネルおよびバンクのうち１つ以上の発見を含む。システムメモリおよびＡＰＤローカルメモリプロパティの発見５０８は、コヒーレントおよび非コヒーレントアクセス範囲の発見を含むが、これらに限定されない。１つ以上のデータパスのプロパティの発見５１０は、タイプ、幅、速度、コヒーレンスおよびレイテンシのうち１つ以上の発見を含む。エンコーディング５１２は、発見されたプロパティの少なくとも一部のエンコーディングである。提供５１４は、１つ以上の情報構造を提供し、１つ以上の情報構造のうち少なくとも１つに情報を記憶する。記憶された情報は、発見されたプロパティの少なくとも一部を表す。
【０１３２】
本発明は、種々のプロパティが発見される特別な順序に限定されないことを述べておく。また本発明は、発見されたプロパティが記憶され、エンコードされ、レポートされ、そうでなければ通信され、送られ、または任意のハードウェア、ファームウェア、オペレーティングシステム若しくはアプリケーションソフトウェアにより使用、処理若しくは検査が可能にされる特別な順序に限定されないことをさらに述べておく。なお、本発明は、本発明による１つ以上の情報構造が記憶される特定のメモリアドレス範囲またはメモリの物理的タイプに限定されないことをさらに述べておく。
【０１３３】
本発明は、プロパティ発見の特定の手段または方法に限定されない。例えば、限定するものではないが、複数の演算リソースのうち少なくとも１つによって、１つ以上の命令を実行することでいくつかのプロパティを開示、または発見してもよく、そのような命令の実行は、１つ以上のレジスタ、または１つ以上のメモリ位置内の情報を提供する。なお、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの演算リソース内で演算タスクをスケジュールまたは分散するために、オペレーティングシステムまたはアプリケーションソフトウェアによりどの特定のプロパティが使用されるかによって、本発明は限定されないことをさらに述べておく。
【０１３４】
図６は、本発明による組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムを作動する一例の方法のフローチャートである。この一例の方法は、発見６０２、提供６０４、判断６０６、その後の判断および発見６０８を含む。発見６０２は、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステム内の演算タスクをスケジューリングし、分散に関連する１つ以上のプロパティを発見する。提供６０４は、１つ以上の情報構造を提供し、１つ以上の情報構造のうち少なくとも１つに情報を記憶する。記憶された情報は、発見されたプロパティの少なくとも一部を表す。判断６０６は、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに１つ以上のハードウェア資源が追加または削除されたか否かの判断である。発見６０８は、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに１つ以上のハードウェアリソースが追加または削除されたか否かの判断の後、組み合わせたＣＰＵ／ＡＰＤシステム内の演算タスクをスケジューリングし、分散に関連する少なくとも１つのプロパティを発見する。
【０１３５】
プロパティ情報が、演算タスクのスケジューリングおよび／または分散において組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの１つ以上の演算リソースによってプロパティ情報が使用される場合に、プロパティは、演算タスクのスケジューリングおよび分散に関連する。図６の一例の実施形態の記載に関して、ハードウェアリソースは、（ｉ）オペレーティングシステムソフトウェア、アプリケーションソフトウェアまたはこれら両方のスケジューリングおよび分散ロジックにより１つ以上の演算タスクを実行するよう割り当てられ得る少なくとも１つの演算リソース、または、（ｉｉ）オペレーティングシステムソフトウェア、アプリケーションソフトウェアまたはこれら両方のスケジューリングおよび分散ロジックにより１つ以上の演算タスクへ割り当て可能なメモリ、である。
【０１３６】
ハードウェアリソースの追加は、ボードまたはカードをシステム内へ「ホットプラグする」結果として起こりうることを述べておく。代替的に、ハードウェアリソースはシステム内に物理的に存在してもよいが、ハードウェアリソースをオペレーティングシステムソフトウェア、アプリケーションソフトウェアまたはこれら両方のスケジューリングおよび分散ロジックに可能または視認可能にするファームウェアまたはソフトウェアの動作を通して、当該ハードウェアリソースが「追加される」まで、演算タスクには割り当てできない。このケースでは、「追加する」を「有効にする」といってもよい。同様にハードウェアリソースを、物理的に取り除くことによって、不可能にすることによって、またはオペレーティングシステムソフトウェア、アプリケーションソフトウェア若しくはこれら両方のスケジューリングおよび分散ロジックに視認可能でなくすることによって、システムから取り除いてもよい。このケースでは、「取り除く」を「無効にする」といってもよい。本発明は、ハードウェアリソースを有効または無効にするあらゆる特別な手段または方法に限定されないことを述べておく。そのようなハードウェアリソースを有効にして特定の実行レベルを達成し、あるいは無効にして電力消費を減少してもよい。代替的に、そのハードウェアリソースは他の目的で予約されたので、ハードウェアリソースを無効にする、すなわちスケジューリングおよび分散ロジックからタスクを受け取ることを不可能にしてもよい。
【０１３７】
本発明の一例の実施形態において、システムは、所定の物理記憶サイズおよび論理配置を有する第１のコンピュータメモリと、所定数の発見可能なプロパティを有する第１のＣＰＵであって、第１のコンピュータメモリに接続された第１のＣＰＵと、所定数の発見可能なプロパティを有する第１のＡＰＤであって、第１のコンピュータメモリに接続された第１のＡＰＤと、第１のＣＰＵの発見可能なプロパティのうち少なくとも１つおよび第１のＡＰＤの発見可能なプロパティのうち少なくとも１つを判断し、発見されたプロパティをエンコードし、エンコードされたプロパティをメモリテーブル内に記憶する手段とを含むが、それらに限定されない。判断する手段は、第１のＣＰＵによって実行されるソフトウェア、第１のＡＰＤによって実行されるソフトウェアまたは第１のＣＰＵおよび第１のＡＰＤの両方によって実行されるソフトウェアを含むが、それらに限定されないことを述べておく。
【０１３８】
本発明による組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムを作動する一例の方法は、１つ以上のＣＰＵ計算コアのプロパティを発見するステップと、１つ以上のＡＰＤ計算コアのプロパティを発見するステップと、１つ以上の補助コンポーネントのプロパティを発見するステップと、システムメモリのプロパティを発見するステップと、ＡＰＤローカルメモリが存在する場合に、ＡＰＤローカルメモリのプロパティを発見するステップと、タイプ、幅、速度、コヒーレンスおよびレイテンシのうち１つ以上を含むデータパスのプロパティを発見するステップと、発見されたプロパティの少なくとも１つをエンコードするステップと、１つ以上の情報構造を提供し、１つ以上の情報構造のうち少なくとも１つに情報を記憶し、記憶された情報は、発見されたプロパティの少なくとも１つを表すステップと、を有する。通常、発見されたプロパティは、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステム内の複数の演算リソースのうち１つ以上への演算タスクのスケジューリングに関連する。いくつかの実施形態では、発見されたプロパティの少なくとも１つは複数の演算リソースのうち少なくとも１つで１つ以上の命令を実行することにより発見され、そのような命令の実行は、１つ以上の命令を実行する演算リソースの１つ以上のレジスタ内の情報または演算リソースに接続されたメモリの１つ以上のメモリ位置内の情報を提供する。
【０１３９】
種々の代替的な実施形態において、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムを作動する方法は、少なくとも１つのハードウェアリソースの追加または除去の検出の後に、１つ以上の発見動作を繰り返すステップを含む。このようにして、演算タスクのスケジューリングおよび分散に関連する情報を動的に更新し、特定の時点で利用可能なハードウェアリソースを反映してもよい。
【０１４０】
本発明による組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムを作動する他の一例の方法は、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステム内の演算タスクのスケジューリングおよび分散に関連するプロパティを発見するステップと、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、１つ以上の情報構造を提供し、１つ以上の情報構造のうち少なくとも１つに情報を記憶し、記憶された情報は発見されたプロパティの少なくとも１つを表すステップと、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、１つ以上のハードウェアリソースが、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに追加または削除されたか否かを判断するステップと、１つ以上のハードウェアリソースが、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムに追加または削除されたことを判断した後に、組み合わせたＣＰＵ／ＡＰＤアーキテクチャシステムの作動により、組み合わせたＣＰＵ／ＡＰＤシステム内の演算タスクのスケジューリングおよび分散に関連する少なくとも１つのプロパティを発見するステップと、を含む。
【０１４１】
（結論）
本発明は、ｘ８６ＣＰＵコアとＡＰＤの組み合わせに限定されず、ＡＰＤと組み合わせた種々のＣＰＵまたは命令セットアーキテクチャに適用可能であることを述べておく。
【０１４２】
本明細書に示され記載された例示的な方法および機器は、少なくとも計算装置（ノートブック、デスクトップ、サーバ、ハンドヘルド、モバイルおよびタブレットコンピュータ、セットトップボックス、メディアサーバ、テレビなどを含むが、それらに限定されない）、グラフィックス処理、異機種環境の演算リソースに関する統合プログラミング環境の分野のアプリケーションを見出す。
【０１４３】
本発明は前述の例示的な実施形態に限定されず、添付の請求項およびそれらの均等物の範囲内の全ての実施形態を包含することを理解すべきである。
【図１Ａ】
0006006230.tif 000018
【図１Ｂ】
0006006230.tif 000019
【図２】
0006006230.tif 000020
【図３】
0006006230.tif 000021
【図４】
0006006230.tif 000022
【図５】
0006006230.tif 000023
【図６】
0006006230.tif 000024