(57)【要約】      （修正有）【課題】マルチＣＰＵコンピュータシステム内でハードウェアデバイスを仮想化するための技法の改善。【解決手段】デバイスに対してオペレーティング（ＯＰ）システム４０２がアクセスをするための方法で、ハードウェアデバイス（ＨＤ）４１６及び仮想化デバイス４１７を列挙し、第１のＨＤのリソースがゲスト物理リソースに分割されソフトウェア仮想化デバイス４２２を作成し、第２のＨＤのリソースの複数のインスタンスがアドバタイズされ、ハードウェア仮想化デバイス４２１を作成する。どのＯＰシステムがソフトウェア仮想化デバイス及びハードウェア仮想化デバイスにアクセスすることを許可されるか指定する第１及び第２許可リストが生成される。仮想アドレスマップの第１及び第２セットが生成され、ソフトウェア仮想化デバイス又はハードウェア仮想化デバイスに関連のアドレス空間を、許可リスト内の各ＯＰシステムに関連のアドレス空間内にマップする。【選択図】図４Ｂ
2010186465.tif 000002
【特許請求の範囲】
【請求項１】
第１のセットのオペレーティングシステムを実行するように構成された第１のプロセッサと、
第１のハードウェアデバイスと、
前記第１のハードウェアデバイスに関連付けられたリソースをゲスト物理リソースに分割しソフトウェア（ＳＷ）仮想化デバイスを作成するように構成された、前記第１のプロセッサによって実行される第１のハイパーバイザを記憶するシステムメモリと、
入出力（Ｉ／Ｏ）管理モジュールと
を備えるコンピューティングデバイスであって、
前記Ｉ／Ｏ管理モジュールは、
前記第１のセットのオペレーティングシステム内に含まれるどのオペレーティングシステムが許可されて、前記第１のハイパーバイザ内に記憶された前記ＳＷ仮想化デバイスにアクセスするかを指定する第１の許可リストを生成するステップと、
前記第１のハイパーバイザ内に記憶された前記ＳＷ仮想化デバイスに関連付けられた第１のアドレス空間を、前記第１の許可リスト上に含まれる前記オペレーティングシステムのそれぞれに関連付けられたアドレス空間内にそれぞれマップする第１のセットの仮想アドレスマップを生成するステップと、
前記ＳＷ仮想化デバイスを使用して、前記第１のセットの仮想アドレスマップに基づいたアクセス動作を、前記第１の許可リスト内に含まれる前記オペレーティングシステムが実施することを可能にすることによって、前記第１のセットのオペレーティングシステム内に含まれる各オペレーティングシステムからのアクセス要求をアービトレーションするステップと
を実施することによって、前記第１のプロセッサが前記ＳＷ仮想化デバイスにアクセスすることを可能にするように構成された命令を記憶するメモリを含む、
コンピューティングデバイス。
【請求項２】
第２のセットのオペレーティングシステムを実行するように構成された第２のプロセッサと、
第２のハードウェアデバイスに関連付けられたリソースの複数のインスタンスをアドバタイズしハードウェア（ＨＷ）仮想化デバイスを作成するように構成された第２のハードウェアデバイスとをさらに備え、
前記システムメモリが、前記第２のハードウェアデバイスに関連付けられたリソースをゲスト物理リソースに分割し第２のソフトウェアＳＷ仮想化デバイスを作成するように構成された、前記第２のプロセッサによって実行される第２のハイパーバイザをさらに記憶し、
前記Ｉ／Ｏ管理モジュール内に含まれる前記メモリが、
前記第２のセットのオペレーティングシステム内に含まれるどのオペレーティングシステムが許可されて、前記第２のハイパーバイザ内に記憶された前記第２のＳＷ仮想化デバイスにアクセスするかを指定する第２の許可リストを生成するステップと、
前記第２のハイパーバイザ内に記憶された前記第２のＳＷ仮想化デバイスに関連付けられた第２のアドレス空間を、前記第２の許可リスト上に含まれる前記オペレーティングシステムのそれぞれに関連付けられたアドレス空間内にそれぞれマップする第２のセットの仮想アドレスマップを生成するステップと、
前記第２のＳＷ仮想化デバイスを使用して、前記第２のセットの仮想アドレスマップに基づいたアクセス動作を、前記第２の許可リスト内に含まれる前記オペレーティングシステムが実施することを可能にするステップと
を実施することによって、前記第２のプロセッサが前記第２のＳＷ仮想化デバイスにアクセスすることを可能にするように構成された命令をさらに含む、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記Ｉ／Ｏ管理モジュール内に含まれる前記メモリが、
前記第１のセットのオペレーティングシステム及び前記第２のセットのオペレーティングシステム内に含まれるどのオペレーティングシステムが許可されて、前記ＨＷ仮想化デバイスにアクセスするかを指定する第３の許可リストを生成し、
前記ＨＷ仮想化デバイスに関連付けられた第３のアドレス空間を、前記第３の許可リスト上に含まれる前記オペレーティングシステムのそれぞれに関連付けられたアドレス空間内にそれぞれがマップする第３のセットの仮想アドレスマップを生成する
ように構成された命令をさらに含む、請求項２に記載のコンピューティングデバイス。
【請求項４】
前記Ｉ／Ｏ管理モジュール内に含まれる前記メモリが、
前記第１のセットのオペレーティングシステム内に含まれる第１のオペレーティングシステムから、前記第１のオペレーティングシステムがアクセスすることを意図する第１のハードウェアデバイス又は第１の仮想化デバイスを指定する情報と、
前記第１のオペレーティングシステムが前記第１のハードウェアデバイス、又は前記第１の仮想化デバイスに関連付けられたハードウェアデバイス上で実行することを意図するアクセス動作を指定する情報と
を含むアクセス要求を受け取るように構成された命令をさらに含む、請求項３に記載のコンピューティングデバイス。
【請求項５】
前記第１の仮想化デバイスが前記ＳＷ仮想化デバイスを備えており、
前記Ｉ／Ｏ管理モジュール内に含まれる前記メモリが、
前記第１のオペレーティングシステムが前記第１の許可リスト内に含まれていると決定し、
前記第１のオペレーティングシステムが前記ＳＷ仮想化デバイスを使用して前記アクセス動作を実施することを可能にするように構成された命令をさらに含み、前記アクセス動作が、仮想アドレスマップの前記第１のセットを使用して前記第１のオペレーティングシステムから前記ＳＷ仮想化デバイスにルーティングされたコンフィグレーション動作及びメモリマップドＩ／Ｏ（ＭＭＩＯ）動作を含む、請求項４に記載のコンピューティングデバイス。
【請求項６】
前記第１の仮想化デバイスが前記ＨＷ仮想化デバイスを備えており、
前記Ｉ／Ｏ管理モジュール内に含まれる前記メモリが、
前記第１のオペレーティングシステムが前記第３の許可リスト内に含まれていると決定し、
前記第１のオペレーティングシステムが前記ＨＷ仮想化デバイスを使用して前記アクセス動作を実施することを可能にするように構成された命令をさらに含み、前記アクセス動作が、仮想アドレスマップの前記第３のセットを使用して前記第１のオペレーティングシステムから前記ＨＷ仮想化デバイスにルーティングされたコンフィグレーション動作及びメモリマップドＩ／Ｏ（ＭＭＩＯ）動作を含む、請求項４に記載のコンピューティングデバイス。
【請求項７】
コンピュータシステム内に含まれるハードウェアデバイスに対するオペレーティングシステムアクセスを実現するための方法において、
前記コンピュータシステム内に含まれる１つ又は複数のハードウェアデバイスと、１つ又は複数の仮想化デバイスとを列挙するステップであり、
第１のハードウェアデバイスに関連付けられたリソースがゲスト物理リソースに分割されていると決定し、それによりソフトウェア（ＳＷ）仮想化デバイスを作成する工程と、
第２のハードウェアデバイスに関連付けられたリソースの複数のインスタンスが前記第２のハードウェアデバイスによってアドバタイズされていると決定し、それによりハードウェア（ＨＷ）仮想化デバイスを作成する工程とを含む、ステップと、
複数のオペレーティングシステムのうちのどのオペレーティングシステムが許可されて、前記ＳＷ仮想化デバイスにアクセスするかを指定する第１の許可リストを生成するステップと、
前記複数のオペレーティングシステムのうちのどのオペレーティングシステムが許可されて、前記ＨＷ仮想化デバイスにアクセスするかを指定する第２の許可リストを生成するステップと、
前記ＳＷ仮想化デバイスに関連付けられた第１のアドレス空間を、前記第１の許可リスト内に含まれる各オペレーティングシステムに関連付けられたアドレス空間内にそれぞれがマップする仮想アドレスマップの第１のセットを生成するステップと、
前記ＨＷ仮想化デバイスに関連付けられた第２のアドレス空間を、前記第２の許可リスト内に含まれる各オペレーティングシステムに関連付けられたアドレス空間内にそれぞれがマップする仮想アドレスマップの第２のセットを生成するステップと、
前記複数のオペレーティングシステムのそれぞれからのアクセス要求をアービトレーションするステップであり、
前記ＳＷ仮想化デバイスを使用して、第１のセットの仮想アドレスマップに基づいたアクセス動作を、前記第１の許可リスト内に含まれる前記オペレーティングシステムが実施することを可能にする工程と、
前記ＨＷ仮想化デバイスを使用して、第２のセットの仮想アドレスマップに基づいたアクセス動作を、前記第２の許可リスト内に含まれる前記オペレーティングシステムが実施することを可能にする工程と
を含む、ステップと
を含む方法。
【請求項８】
前記複数のオペレーティングシステム内の第１のオペレーティングシステムから、前記第１のオペレーティングシステムがアクセスすることを意図する第１のハードウェアデバイス又は第１の仮想化デバイスを指定する情報と、前記第１のオペレーティングシステムが前記第１のハードウェアデバイス、又は前記第１の仮想化デバイスに関連付けられたハードウェアデバイス上で実行することを意図するアクセス動作を指定する情報とを含むアクセス要求を受け取るステップをさらに含む、請求項７に記載の方法。
【請求項９】
前記第１の仮想化デバイスが前記ＳＷ仮想化デバイスを備えており、前記第１のオペレーティングシステムが前記第１の許可リスト内に含まれていると決定し、前記第１のオペレーティングシステムが前記ＳＷ仮想化デバイスを使用して前記アクセス動作を実施することを可能にするステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記第１の仮想化デバイスが前記ＨＷ仮想化デバイスを備えており、前記第１のオペレーティングシステムが前記第２の許可リスト内に含まれていると決定し、前記第１のオペレーティングシステムが前記ＨＷ仮想化デバイスを使用して前記アクセス動作を実施することを可能にするステップをさらに含む、請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本発明は、一般にデバイス仮想化の分野に関し、より詳細には、ヘテロジニアス処理ユニットのための集中デバイス仮想化レイヤに関する。
【背景技術】
【０００２】
[0002]従来のコンピュータシステムでは、中央処理装置（ＣＰＵ）は、複数のオペレーティングシステム（ＯＳ）を実行することができる。それらの相異なるＯＳの動作を調整するために、ハイパーバイザとして知られるソフトウェアプログラムがしばしば使用される。ハイパーバイザは、各ＯＳからそのコンピュータシステム内に含まれる様々なハードウェアに送られる入出力（Ｉ／Ｏ）アクセス動作（アクセス）を管理する。これらのハードウェアデバイスは、とりわけメモリモジュール、コンピュータモニタ、ハードディスクドライブ、ＣＤ−ＲＯＭドライブを含むことができる。ハイパーバイザは、ハードウェアデバイスの仮想インスタンスを作成するために使用することができる、「デバイス仮想化」として知られる技法を使用して、ＯＳのそれぞれがハードウェアデバイスにアクセスすることを可能にする。ハードウェアデバイスは、「ソフトウェア仮想化」及び／又は「ハードウェア仮想化」を通じて仮想化することができる。
【０００３】
[0003]ソフトウェア（ＳＷ）仮想化が実装されているとき、ハイパーバイザは、ハードウェアデバイスのリソースを複数の「ゲスト物理リソース」に分割する。次いで、各ゲスト物理リソースを特定のＯＳに割り当てることができる。ハイパーバイザは、ゲスト物理リソースをＯＳにアドバタイズし、その結果、あるＯＳがあるハードウェアデバイスに関連付けられたゲスト物理リソースにアクセスしようと試みたとき、ハイパーバイザはそのアクセスをトラップし、そのＯＳがそのハードウェアデバイスにアクセスすることを許す前に正しいコンテキストがそのハードウェアデバイスに確実にロードされているようにすることができる。
【０００４】
[0004]ハードウェア（ＨＷ）仮想化が実装されているときは、各ハードウェアデバイスがそのＨＷデバイスの複数のインスタンスをアドバタイズし、その結果、各インスタンスに、そのハードウェアデバイスによって使用可能にされた最大量のリソースが割り振られる。次いで、各ＯＳに、これらのインスタンスの１つが割り当てられる。ハイパーバイザは、どのＯＳが特定の仮想化デバイスにアクセスすることができるか判定することによって、ＯＳ間のアービタとして働く。ＨＷ仮想化はハードウェア内で実装されるため、ハイパーバイザは、特定の物理リソースが仮想化されていることに気づかない可能性がある。各ＨＷ仮想化デバイスは、他の仮想化デバイスとの競合を認識し、その物理リソースに対してアクションを起こす前に（たとえば、コンテキストを回復する、又はそのデバイスの仮想化インスタンスの１つ又は複数を無活動状態にすることによって）これらの競合を解決する。
【０００５】
[0005]ＳＷ仮想化及びＨＷ仮想化は、単一のプロセッサが単一のハイパーバイザ上の複数のＯＳを実行するとき良好に機能する。しかし、複数のＯＳを実行する複数のＣＰＵを含む、より多様なプロセッサトポロジは、ＳＷ仮想化及び／又はＨＷ仮想化にそれほどなじまない。たとえば、マルチＣＰＵコンピュータシステムは、ハードウェアデバイスの同じグループにそれぞれ接続されているいくつかのＣＰＵを含むことができる。いくつかのハードウェアデバイスはハードウェア内又はソフトウェア内で仮想化することができず、したがってそのコンピュータシステムは、そのハードウェアデバイス用のリソースを１つしか含まず、そのリソースを２つのＣＰＵによって共用することができない。ＳＷ仮想化をマルチＣＰＵコンピュータシステム内に実装することにも問題がある。というのは、十分に使用されていないＳＷ仮想化ハードウェアデバイスにＯＳがアクセスしたいと望むとき、ボトルネックが生じる可能性があるからである。ハードウェアデバイスのリソースがゲスト物理リソースに分割されるため、各ＯＳは、ハードウェアデバイスのリソース全部のうちの一部分を使用することができるにすぎない。１つのＯＳだけがハードウェアデバイスにアクセスしようと試みているとき、そのＯＳは、ゲスト物理リソースによって割り振られているリソースより多くのリソースを必要とすることがある。リソースボトルネックは、ハードウェアデバイスのリソースが依然として使用可能であり、しかしそれらが他のゲスト物理リソースに割り振られているため、ＯＳがこれらのリソースを使用することができないために生じる。
【０００６】
[0006]ＨＷ仮想化をマルチＣＰＵコンピュータシステム内に実装することにも問題がある。というのは、仮想化デバイスを、各ＣＰＵ上で動作する各ＯＳについて作成することが必要になるからである。ＨＷ仮想化を各ハードウェアデバイスについて実装することは、コンピュータシステム内でアドバタイズされるリソースを著しく増大することになり、特定のハードウェアデバイスによって提供されるリソースを特定のＯＳが使用することを必要としない可能性があるにもかかわらず、各ハードウェアデバイスを各ＯＳについて強制的に仮想化することになる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
[0007]したがって、当技術分野では、マルチＣＰＵコンピュータシステム内でハードウェアデバイスを仮想化するための改善された技法が依然として求められている。
【課題を解決するための手段】
【０００８】
[0008]本発明の実施形態は、コンピュータシステム内に含まれるハードウェアデバイスに対するオペレーティングシステムアクセスを実現するための方法を提供する。この方法は、コンピュータシステム内に含まれる１つ又は複数のハードウェアデバイス及び１つ又は複数の仮想化デバイスを列挙するステップであり、第１のハードウェアデバイスに関連付けられたリソースがゲスト物理リソースに分割されていると決定し、それによりソフトウェア（ＳＷ）仮想化デバイスを作成するステップと、第２のハードウェアデバイスに関連付けられたリソースの複数のインスタンスが第２のハードウェアデバイスによってアドバタイズされていると決定し、それによりハードウェア（ＨＷ）仮想化デバイスを作成するステップとを含む、ステップと、複数のオペレーティングシステムのうちのどのオペレーティングシステムがＳＷ仮想化デバイスにアクセスすることを許可されるか指定する第１の許可リストを生成するステップと、複数のオペレーティングシステムのうちのどのオペレーティングシステムがＨＷ仮想化デバイスにアクセスすることを許可されるか指定する第２の許可リストを生成するステップと、ＳＷ仮想化デバイスに関連付けられた第１のアドレス空間を、第１の許可リスト内に含まれる各オペレーティングシステムに関連付けられたアドレス空間内にそれぞれがマップする第１のセットの仮想アドレスマップを生成するステップと、ＨＷ仮想化デバイスに関連付けられた第２のアドレス空間を、第２の許可リスト内に含まれる各オペレーティングシステムに関連付けられたアドレス空間内にそれぞれがマップする第２のセットの仮想アドレスマップを生成するステップと、複数のオペレーティングシステムのそれぞれからのアクセス要求をアービトレーション（ａｒｂｉｔｒａｔｅ：調停）するステップであり、第１のセットの仮想アドレスマップに基づいて、第１の許可リスト内に含まれるオペレーティングシステムがＳＷ仮想化デバイスを使用してアクセス動作を実施することを可能にするステップと、第２のセットの仮想アドレスマップに基づいて、第２の許可リスト内に含まれるオペレーティングシステムがＨＷ仮想化デバイスを使用してアクセス動作を実施することを可能にするステップとを含む、ステップとを含む。
【０００９】
[0009]有利には、本発明の実施形態は、デバイス仮想化を、複数のＣＰＵを含むコンピューティングシステムに延長する。ＣＤＶＬは、各ＣＰＵ上で実行されるＯＳが、そのコンピューティングシステムに結合されている列挙デバイスの共通プールにアクセスすることを可能にする。ＣＤＶＬをＳＷ仮想化及びＨＷ仮想化と共に使用し、専用の仮想化サポートを、そのようなサポートを必要とするＯＳに対して提供することができる。
【００１０】
[0010]本発明の上述の特徴を詳細に理解することができるように、上記で簡単に述べた本発明について、添付の図面にそれらの一部が示されている実施形態を参照してより具体的に述べることができる。しかし、添付の図面は、本発明の典型的な実施形態を示しているにすぎず、したがって、本発明には他の均等に有効な実施形態の余地があり得るため、その範囲を限定するものとみなすべきでないことに留意されたい。
【図面の簡単な説明】
【００１１】
【図１】本発明の１つ又は複数の態様を実施するように構成されたコンピュータシステムを示すブロック図である。
【図２】本発明の一実施形態による、図１のコンピュータシステムのための並列処理サブシステムのブロック図である。
【図３Ａ】本発明の一実施形態による、図２の並列処理ユニット（ＰＰＵ）の１つの中の一般処理クラスタ（ＧＰＣ）のブロック図である。
【図３Ｂ】本発明の一実施形態による、図２のＰＰＵの１つの中のパーティションユニットのブロック図である。
【図４Ａ】本発明の一実施形態による、集中デバイス仮想化レイヤ（ＣＤＶＬ）を実装するように構成されたコンピュータシステムの概念図である。
【図４Ｂ】本発明の他の実施形態による、集中デバイス仮想化レイヤ（ＣＤＶＬ）を実装するように構成されたコンピュータシステムの概念図である。
【図５】本発明の一実施形態による、ＣＤＶＬを実装するように構成されたマルチプロセッサコンピュータシステムの概念図である。
【図６】本発明の一実施形態による、ＣＤＶＬをコンピュータシステム上で開始するための方法ステップの流れ図である。
【図７】本発明の一実施形態による、ＣＤＶＬをコンピュータシステム上で実施するための方法ステップの流れ図である。
【発明を実施するための形態】
【００１２】
[0019]以下の説明では、本発明をより完全に理解するために、多数の特定の詳細について述べる。しかし、これらの特定の詳細の１つ又は複数がなくても本発明を実施することができることが、当業者には明らかになるであろう。他の場合には、本発明を不明瞭にするのを回避するために、周知の特徴は述べられていない。
【００１３】
システム概要
[0020]図１は、本発明の１つ又は複数の態様を実施するように構成されたコンピュータシステム１００を示すブロック図である。コンピュータシステム１００は、メモリブリッジ１０５を通るバス経路を介して通信する中央処理装置（ＣＰＵ）１０２とシステムメモリ１０４を含む。メモリブリッジ１０５は、図１に示されているように、ＣＰＵ１０２内に集積されてもよい。別法として、メモリブリッジ１０５は、バスを介してＣＰＵ１０２に接続されている従来のデバイス、たとえばノースブリッジ（Ｎｏｒｔｈｂｒｉｄｇｅ）チップとすることができる。メモリブリッジ１０５は、通信経路１０６（たとえば、ハイパートランスポート（ＨｙｐｅｒＴｒａｎｓｐｏｒｔ）リンク）を介してＩ／Ｏ（入出力）ブリッジ１０７に接続されている。Ｉ／Ｏブリッジ１０７は、たとえばサウスブリッジ（Ｓｏｕｔｈｂｒｉｄｇｅ）チップとすることができ、１つ又は複数のユーザ入力デバイス１０８（たとえば、キーボード、マウス）からユーザ入力を受け取り、その入力を、経路１０６及びメモリブリッジ１０５を介してＣＰＵ１０２に転送する。並列処理サブシステム１１２は、バス又は他の通信経路１１３（たとえば、ＰＣＩエクスプレス（ＰＣＩ  Ｅｘｐｒｅｓｓ）、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）、又はハイパートランスポートリンク）を介してメモリブリッジ１０５に結合され、一実施形態では、並列処理サブシステム１１２は、画素をディスプレイデバイス１１０（従来のＣＲＴ又はＬＣＤベースのモニタ）に送達するグラフィックサブシステムである。システムディスク１１４もまた、Ｉ／Ｏブリッジ１０７に接続れている。スイッチ１１６は、Ｉ／Ｏブリッジ１０７と、ネットワークアダプタ１１８及び様々なアドインカード１２０、１２１など他の構成要素との間の接続を実現する。ＵＳＢ又は他のポート接続、ＣＤドライブ、ＤＶＤドライブ、フィルム記録デバイスなどを含む他の構成要素（明示的に図示せず）をもＩ／Ｏブリッジ１０７に接続することができる。図１の様々な構成要素を相互接続する通信経路は、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＰＣＩエクスプレス（ＰＣＩ−Ｅ）、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）、ハイパートランスポート、又は（１つ又は複数の）任意の他のバス若しくはポイント・トゥ・ポイント通信プロトコルなど、任意の好適なプロトコルを使用して実装することができ、異なるデバイス間の接続は、当技術分野で知られているように、異なるプロトコルを使用することができる。
【００１４】
[0021]一実施形態では、並列処理サブシステム１１２は、たとえばビデオ出力回路を含めて、グラフィック及びビデオ処理に最適化された回路を組み込んでおり、グラフィック処理装置（ＧＰＵ）を構成する。他の実施形態では、並列処理サブシステム１１２は、汎用処理に最適化された回路を組み込んでおり、一方、本明細書でより詳細に述べる、基礎となるコンピュータアーキテクチャを保存している。他の実施形態では、並列処理サブシステム１１２は、メモリブリッジ１０５、ＣＰＵ１０２、及びＩ／Ｏブリッジ１０７など、１つ又は複数の他のシステム要素と一体化され、システム・オン・チップ（ＳｏＣ）を形成することができる。
【００１５】
[0022]本明細書に示されているシステムは例示的なものであること、また変形及び修正が可能であることを理解されたい。望むなら、ブリッジの数及び構成を含む接続トポロジを修正することができる。たとえば、いくつかの実施形態では、システムメモリ１０４は、ブリッジを通るのではなく、直接ＣＰＵ１０２に接続され、他のデバイスは、メモリブリッジ１０５及びＣＰＵ１０２を介してシステムメモリ１０４と通信する。他の代替のトポロジでは、並列処理サブシステム１１２は、メモリブリッジ１０５にではなく、Ｉ／Ｏブリッジ１０７に、又は直接ＣＰＵ１０２に接続される。他の実施形態では、ＣＰＵ１０２、Ｉ／Ｏブリッジ１０７、並列処理サブシステム１１２、及びメモリブリッジ１０５のうちの１つ又は複数が、１つ又は複数のチップ内に集積されてもよい。本明細書に示されている特定の構成要素は任意選択であり、たとえば任意の数のアドインカード又は周辺機器がサポートされる可能性がある。いくつかの実施形態では、スイッチ１１６が省略され、ネットワークアダプタ１１８及びアドインカード１２０、１２１は、直接Ｉ／Ｏブリッジ１０７に接続する。
【００１６】
[0023]図２は、本発明の一実施形態による並列処理サブシステム１１２を示す。図では、並列処理サブシステム１１２は１つ又は複数の並列処理ユニット（ＰＰＵ）を含み、ＰＰＵのそれぞれは、ローカル並列処理（ＰＰ）メモリ２０４に結合されている。一般に、並列処理サブシステムは、Ｕ個のＰＰＵを含み、ただしＵ≧１である。（ここで、同様のオブジェクトの複数のインスタンスは、そのオブジェクトを識別する符号と、必要な場合そのインスタンスを識別する、括弧で括られた番号とで示される。）ＰＰＵ２０２及び並列処理メモリ２０４は、プログラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、又はメモリデバイスなど、１つ又は複数の集積回路デバイスを使用して、或いは任意の他の、技術的に可能な形で実装することができる。
【００１７】
[0024]図１を再び参照すると、いくつかの実施形態では、並列処理サブシステム１１２内のＰＰＵの一部又はすべては、ＣＰＵ１０２及び／又はシステムメモリ１０４によって供給されたグラフィックデータからピクセルデータを生成することに関連する様々なタスクを実施するように構成することができる、レンダリングパイプラインを有するグラフィックプロセッサであり、（たとえば従来のフレームバッファを含めてグラフィックメモリとして使用することができる）ローカル並列処理メモリ２０４と対話しピクセルデータを記憶及び更新し、ピクセルデータをディスプレイデバイス１１０に送達する、などを行う。いくつかの実施形態では、並列処理サブシステム１１２は、グラフィックプロセッサとして動作する１つ又は複数のＰＰＵ２０２と、汎用計算に使用される１つ又は複数の他のＰＰＵ２０２とを含むことができる。これらのＰＰＵは、同一でも異なっていてもよく、それ自体の専用の（１つ又は複数の）並列処理メモリデバイスを有していても、専用の並列処理メモリデバイスを有していなくてもよい。１つ又は複数のＰＰＵ２０２がデータをディスプレイデバイス１１０に出力することも、各ＰＰＵ２０２がデータを１つ又は複数のディスプレイデバイス１１０に出力することもできる。
【００１８】
[0025]動作時には、ＣＰＵ１０２がコンピュータシステム１００のマスタプロセッサであり、他のシステム構成要素の動作を制御及び調整する。具体的には、ＣＰＵ１０２は、ＰＰＵ２０２の動作を制御するコマンドを発行する。いくつかの実施形態では、ＣＰＵ１０２は、システムメモリ１０４、並列処理メモリ２０４、又はＣＰＵ１０２からもＰＰＵ２０２からもアクセス可能な別の記憶ロケーションに位置することができるコマンドバッファ（図１にも図２にも明示的に図示せず）に、各ＰＰＵ２０２に対するコマンドのストリームを書き込む。ＰＰＵ２０２は、コマンドバッファからコマンドストリームを読み取り、次いで、ＣＰＵ１０２の動作に対して同期してコマンドを実行する。ＣＰＵ１０２はまた、ＰＰＵ２０２がコマンドバッファ内のコマンドに応答して読み取ることができるデータバッファを作成することができる。各コマンドバッファ及びデータバッファは、ＰＰＵ２０２のそれぞれが読み取ることができる。
【００１９】
[0026]次に、図２に戻ると、各ＰＰＵ２０２は、通信経路１１３を介してコンピュータシステム１００の残りの部分と通信するＩ／Ｏ（入出力）ユニット２０５を含み、通信経路１１３は、メモリブリッジ１０５に（又は、代替の一実施形態では直接ＣＰＵ１０２に）接続する。コンピュータシステム１００の残りの部分に対するＰＰＵ２０２の接続もまた、変わる可能性がある。いくつかの実施形態では、並列処理サブシステム１１２は、コンピュータシステム１００の拡張スロット内に挿入することができるアドインカードとして実装される。他の実施形態では、ＰＰＵ２０２を、単一のチップ上で、メモリブリッジ１０５又はＩ／Ｏブリッジ１０７など、バスブリッジと一体化することができる。他の実施形態では、ＰＰＵ２０２の一部の要素又はすべての要素が、単一のチップ上でＣＰＵ１０２と一体化されてもよい。
【００２０】
[0027]一実施形態では、通信経路１１３は、当技術分野で知られているように、専用のレーンが各ＰＰＵ２０２に割り振られるＰＣＩ−Ｅリンクである。他の通信経路を使用することもできる。Ｉ／Ｏユニット２０５は、通信経路１１３上で送るためにパケット（又は他の信号）を生成し、また、通信経路１１３から着信パケット（又は他の信号）すべてを受け取り、それらの着信パケットをＰＰＵ２０２の適切な構成要素に向けて送る。たとえば、処理タスクに関連するコマンドを、ホストインターフェース２０６に向けて送ることができ、一方、メモリ動作（たとえば、並列処理メモリ２０４から読み取ること、又はそこに書き込むこと）に関連するコマンドを、メモリクロスバーユニット２１０に向けて送ることができる。ホストインターフェース２０６が各コマンドバッファを読み取り、そのコマンドバッファによって指定されたワーク（ｗｏｒｋ）をフロントエンド２１２に出力する。
【００２１】
[0028]各ＰＰＵ２０２は、高度に並列化された処理アーキテクチャを実装することが有利である。詳細に示されているように、ＰＰＵ２０２（０）は、Ｃ個の一般処理クラスタ（ＧＰＣ）２０８を含む処理クラスタアレイ２３０を含み、ただしＣ≧１である。各ＧＰＣ２０８は、各スレッドがプログラムのインスタンスである多数（たとえば、数百又は数千）のスレッドを同時に実行することが可能である。様々な応用例では、様々なタイプのプログラムを処理するために、又は様々なタイプの計算を実施するために、様々なＧＰＣ２０８を割り振ることができる。たとえば、グラフィック応用例では、第１のセットのＧＰＣ２０８が、テッセレーション演算を実施するように、またパッチ用のプリミティブトポロジを生成するように割り振られ、第２のセットのＧＰＣ２０８が、テッセレーションシェーディングを実施し、それらのプリミティブトポロジに関するパッチパラメータを評価するように、また頂点位置及び他の頂点毎の属性を決定するように割り振られることがある。ＧＰＣ２０８の割振りは、プログラム又は計算のタイプごとに生じるワークロードによって変わることがある。別法として、ＧＰＣ２０８は、異なる処理タスク間で切り替えるためにタイムスライス方式を使用して処理タスクを実施するように割り振られてもよい。
【００２２】
[0029]ＧＰＣ２０８は、実行すべき処理タスクを、ワーク分配ユニット２００を介して受け取り、ワーク分配ユニット２００は、処理タスクを規定するコマンドをフロントエンドユニット２１２から受け取る。処理タスクは、処理すべきデータ、たとえばサーフェス（パッチ）データ、プリミティブデータ、頂点データ、及び／又はピクセルデータに対するポインタ、並びに状態パラメータ、及びそのデータをどのように処理すべきか（たとえば、どのプログラムを実行すべきか）規定するコマンドを含む。ワーク分配ユニット２００は、処理タスクに対応するポインタをフェッチするように構成されても、ポインタをフロントエンド２１２から受け取っても、データをフロントエンド２１２から直接受け取ってもよい。いくつかの実施形態では、インデックスが、アレイ内のデータのロケーションを指定する。フロントエンド２１２は、コマンドバッファによって指定された処理が開始される前に、ＧＰＣ２０８が有効な状態に、確実に構成されるようにする。
【００２３】
[0030]ワーク分配ユニット２００は、処理するためにタスクを複数のＧＰＣ２０８に送ることが可能な頻度でタスクを出力するように構成することができる。本発明のいくつかの実施形態では、ＧＰＣ２０８の諸部分が、異なるタイプの処理を実施するように構成される。たとえば、第１の部分は、頂点シェーディング及びトポロジ生成を実施するように構成することができ、第２の部分は、テッセレーション及びジオメトリシェーディングを実施するように構成することができ、第３の部分は、画面空間内のピクセルシェーディングを実施し、レンダリングされた画像を生成するように構成することができる。異なるタイプの処理タスクを実施するためにＧＰＣ２０８の諸部分を割り振ることができることにより、これらの異なるタイプの処理タスクによって生成されるデータの任意の拡張及び収縮が効率的に対処される。ＧＰＣ２０８によって生成される中間データをバッファし、下流のＧＰＣ２０８によってデータが受け入れられる速度が、上流のＧＰＣ２０８によってデータが生成される速度より遅れる場合、ＧＰＣ２０８間でその中間データが最小限のストールで送られることを可能にすることができる。
【００２４】
[0031]メモリインターフェース２１４は、並列処理メモリ２０４の一部分にそれぞれ結合されるＤ個のメモリパーティションユニットに区分されてもよく、ただしＤ≧１である。並列処理メモリ２０４の各部分は、一般に１つ又は複数のメモリデバイス（たとえば、ＤＲＡＭ２２０）を含む。ＤＲＡＭ２２０は、他の好適な記憶デバイスと置き換えることができ、概して従来の設計のものとすることができることを、当業者なら理解するであろう。したがって、詳細な説明は省略する。フレームバッファ又はテクスチャマップなどレンダターゲットを、複数のＤＲＡＭ２２０にわたって記憶することができ、パーティションユニット２１５が各レンダターゲットの諸部分を並列で書き込み、並列処理メモリ２０４の使用可能な帯域幅を効率的に使用することを可能にする。
【００２５】
[0032]ＧＰＣ２０８のいずれか１つは、並列処理メモリ２０４内のパーティションユニット２１５のいずれかに書き込もうとするデータを処理することができる。クロスバーユニット２１０は、各ＧＰＣ２０８の出力をいずれかのパーティションユニット２１４の入力に、又はさらに処理するために別のＧＰＣ２０８にルーティング（ｒｏｕｔｅ：経路指定）するように構成される。ＧＰＣ２０８は、クロスバーユニット２１０を通じてメモリインターフェース２１４と通信し、様々な外部メモリデバイスから読み取る、又はそれらに書き込む。一実施形態では、Ｉ／Ｏユニット２０５と通信するためのメモリインターフェース２１４に対する接続、並びにローカル並列処理メモリ２０４に対する接続を有し、それにより、様々なＧＰＣ２０８内の処理コアがシステムメモリ１０４、又はＰＰＵ２０２にとってローカルでない他のメモリと通信することを可能にする。クロスバーユニット２１０は、仮想チャネルを使用し、ＧＰＣ２０８とパーティションユニット２１５の間のトラフィックストリームを分離することができる。
【００２６】
[0033]この場合も、ＧＰＣ２０８は、それだけには限らないが線形データ変換及び非線形データ変換、ビデオ及び／又はオーディオデータのフィルタリング、モデリング演算（たとえば、物理の法則を適用し、オブジェクトの位置、速度、及び他の属性を決定すること）、画像レンダリング演算（たとえば、テッセレーションシェーダプログラム、頂点シェーダプログラム、ジオメトリシェーダプログラム、及び／又はピクセルシェーダプログラム）などを含めて、多種多様な応用例に関する処理タスクを実行するようにプログラムすることができる。ＰＰＵ２０２は、システムメモリ１０４及び／又はローカル並列処理メモリ２０４から内部（オンチップ）メモリ内にデータを転送し、結果データをシステムメモリ１０４及び／又はローカル並列処理メモリ２０４に書き戻すことができ、ここでそのようなデータは、ＣＰＵ１０２又は別の並列処理サブシステム１１２を含めて他のシステム構成要素によるアクセスを受けることができる。
【００２７】
[0034]ＰＰＵ２０２は、ローカルメモリがないことを含めて、任意の量のローカル並列処理メモリ２０４を備えることができ、ローカルメモリとシステムメモリを任意の組合せで使用することができる。たとえば、ＰＰＵ２０２は、ユニファイドメモリアーキテクチャ（ＵＭＡ）実施形態におけるグラフィックプロセッサとすることができる。そのような実施形態では、専用のグラフィック（並列処理）メモリが提供されない、又はほとんど提供されないことになり、ＰＰＵ２０２は、システムメモリだけ、又はほぼシステムメモリだけを使用することになる。ＵＭＡ実施形態では、ＰＰＵ２０２は、ブリッジチップ又はプロセッサチップ内に集積することも、ブリッジチップ又は他の通信手段を介してＰＰＵ２０２をシステムメモリに接続する高速リンク（たとえば、ＰＣＩ−Ｅ）をディスクリートチップとして備えることもできる。
【００２８】
[0035]上記で指摘したように、任意の数のＰＰＵ２０２を並列処理サブシステム１１２内に含むことができる。たとえば、複数のＰＰＵ２０２を単一のアドインカード上に設けることも、複数のアドインカードを通信経路１１３に接続することも、１つ又は複数のＰＰＵ２０２をブリッジチップ内に集積することもできる。マルチＰＰＵシステム内のＰＰＵ２０２は、互いに同一でも異なっていてもよい。たとえば、様々なＰＰＵ２０２が、様々な数の処理コア、様々な量のローカル並列処理メモリなどを有する可能性がある。複数のＰＰＵ２０２が存在する場合、これらのＰＰＵを並列で動作させ、単一のＰＰＵ２０２を用いて可能なスループットより高いスループットでデータを処理することができる。１つ又は複数のＰＰＵ２０２を組み込むシステムは、デスクトップパーソナルコンピュータ、ラップトップパーソナルコンピュータ、又はハンドヘルドパーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール、埋込みシステムなどを含めて、様々な構成及びフォームファクタで実施することができる。
【００２９】
処理クラスタアレイ概要
[0036]図３Ａは、本発明の一実施形態による、図２のＰＰＵ２０２の１つの中のＧＰＣ２０８のブロック図である。各ＧＰＣ２０８は、多数のスレッドを並列で実行するように構成することができ、ここで「スレッド」という用語は、入力データの特性のセットに対して実行する特定のプログラムのインスタンスを指す。いくつかの実施形態では、複数の独立した命令ユニットを用意することなしに多数のスレッドの並列実行をサポートするために、単一命令多重データ（ＳＩＭＤ）命令発行技法が使用される。他の実施形態では、ＧＰＣ２０８のそれぞれの中の１組の処理エンジンに命令を発行するように構成された共通の命令ユニットを使用して、多数の、概して同期されたスレッドの並列実行をサポートするために、単一命令多重スレッド（ＳＩＭＴ）技法が使用される。処理エンジンすべてが一般に同一の命令を実行するＳＩＭＤ実行状況とは異なり、ＳＩＭＴ実行は、相異なるスレッドが、所与のスレッドプログラムを通る分岐実行経路に、より容易に従うことを可能にする。ＳＩＭＤ処理状況がＳＩＭＴ処理状況の機能上の部分集合を表すことを、当業者なら理解するであろう。
【００３０】
[0037]グラフィック応用例では、ＧＰＣ２０８は、それだけには限らないがプリミティブセットアップ、ラスタ化、ｚカリングを含むことができる画面空間グラフィック処理機能を実施するためのプリミティブエンジンを実装するように構成することができる。プリミティブエンジンは、ワーク分配ユニット２００から処理タスクを受け取り、その処理タスクが、プリミティブエンジンによって実施される演算を必要としないとき、その処理タスクは、プリミティブエンジンを経てパイプラインマネージャ３０５に渡される。ＧＰＣ２０８の動作は、処理タスクをストリーミングマルチプロセッサ（ＳＰＭ）３１０に分配するパイプラインマネージャ３０５を介して制御されることが有利である。パイプラインマネージャ３０５はまた、ＳＰＭ３１０によって出力される処理済みデータのための宛先を指定することによってワーク分配クロスバー３３０を制御するように構成することができる。
【００３１】
[0038]一実施形態では、各ＧＰＣ２０８は、Ｍ個のＳＰＭ３１０を含み、ただしＭ≧１であり、各ＳＰＭ３１０は、１つ又は複数のスレッドグループを処理するように構成される。また、各ＳＰＭ３１０は、パイプライン化することができる機能ユニット（たとえば、算術論理演算ユニットなど）の同一セットを含み、当技術分野で知られているように、前の命令が終わる前に新しい命令が発行されることを可能にすることが有利である。機能ユニットの任意の組合せを用意することができる。一実施形態では、機能ユニットは、整数演算及び浮動小数点演算（たとえば、加算及び乗算）、比較演算、ブール演算（ＡＮＤ、ＯＲ、ＸＯＲ）、ビットシフティング、並びに様々な代数関数（たとえば、平面補間（ｐｌａｎａｒ  ｉｎｔｅｒｐｏｌａｔｉｏｎ）、三角関数、指数関数、対数関数など）を含めて、様々な演算をサポートしており、同じ機能ユニットハードウェアを利用し、様々な演算を実施することができる。
【００３２】
[0039]特定のＧＰＣ２０８に送られる命令列は、本明細書において先に規定したように、スレッドを構成し、ＳＰＭ３１０内の複数の並列処理エンジン（図示せず）にわたる、いくつかの同時実行スレッドの集まりを、本明細書では「スレッドグループ」と称する。本明細書では、「スレッドグループ」は、様々な入力データに対して同じプログラムを同時実行するスレッドのグループを指し、グループの各スレッドは、ＳＰＭ３１０内の異なる処理エンジンに割り当てられる。スレッドグループは、ＳＰＭ３１０内の処理エンジンの数より少ないスレッドを含むことができ、その場合には、そのスレッドグループが処理されているサイクル中に、いくつかの処理エンジンがアイドルになる。また、スレッドグループは、ＳＰＭ３１０内の処理エンジンの数より多いスレッドを含むことができ、その場合には、処理が複数のクロックサイクルにわたって行われることになる。各ＳＰＭ３１０は最大Ｇ個のスレッドグループを同時にサポートすることができので、任意の所与の時に、Ｇ×Ｍ個のスレッドグループがＧＰＣ２０８内で実行中であることができるということになる。
【００３３】
[0040]さらに、複数の関連のスレッドグループが、ＳＰＭ３１０内で同時に（様々な実行フェーズで）活動状態になることができる。スレッドグループのこの集まりを、本明細書では、「協働スレッドアレイ」（ＣＴＡ）と称する。特定のＣＴＡのサイズはｍ＊ｋに等しく、この式で、ｋは、スレッドグループ内の同時実行スレッドの数であり、典型的にはＳＰＭ３１０内の並列処理エンジンの数の整数の倍数であり、ｍは、ＳＰＭ３１０内で同時に活動状態のスレッドグループの数である。ＣＴＡのサイズは、一般に、プログラマと、ＣＴＡにとって使用可能な、メモリ又はレジスタなどハードウェアリソースの量とによって決定される。
【００３４】
[0041]排他的なローカルアドレス空間が、各スレッドにとって使用可能であり、ＣＴＡ内のスレッド間でデータを渡すために、共用のＣＴＡ毎のアドレス空間が使用される。スレッド毎のローカルアドレス空間及びＣＴＡ毎のアドレス空間内に記憶されたデータは、Ｌ１キャッシュ３２０内に記憶され、追い出しポリシー（ｅｖｉｃｔｉｏｎ  ｐｏｌｉｃｙ）を使用し、Ｌ１キャッシュ３２０内のデータを保つことを選ぶことができる。各ＳＰＭ３１０は、ロード及びストア動作を実施するために使用される、対応するＬ１キャッシュ３２０内の空間を使用する。また、各ＳＰＭ３１０は、ＧＰＣ２０８すべての間で共用される、またスレッド間でデータを転送するために使用することができる、パーティションユニット２１５内のＬ２キャッシュにアクセスすることができる。最後に、ＳＰＭ３１０は、たとえば並列処理メモリ２０４及び／又はシステムメモリ１０４を含むことができる、オフチップの「グローバル」メモリにアクセスすることもできる。Ｌ２キャッシュを使用し、グローバルメモリに書き込まれる、且つそこから読み取られるデータを記憶することができる。ＰＰＵ２０２外部の任意のメモリをグローバルメモリとして使用することができることを理解されたい。
【００３５】
[0042]グラフィック応用例では、テクスチャマッピング演算を実施する、たとえばテクスチャサンプル位置を決定し、テクスチャデータを読み取り、テクスチャデータをフィルタリングするために各ＳＰＭ３１０がテクスチャユニット３１５に結合されるように、ＧＰＣ２０８を構成することができる。テクスチャデータは、メモリインターフェース２１４を介して読み取られ、必要に応じてＬ２キャッシュ、並列処理メモリ２０４、又はシステムメモリ１０４からフェッチされる。テクスチャユニット３１５は、テクスチャデータを内部キャッシュ内に記憶するように構成することができる。いくつかの実施形態では、テクスチャユニット３１５はＬ１キャッシュ３２０に結合され、テクスチャデータはＬ１キャッシュ３２０内に記憶される。各ＳＰＭ３１０は、さらに処理するために処理済みタスクを別のＧＰＣ２０８に送るために、又は処理済みタスクをＬ２キャッシュ、並列処理メモリ２０４、又はシステムメモリ１０４内にクロスバーユニット２１０を介して記憶するために、処理済みタスクをワーク分配クロスバー３３０に出力する。ｐｒｅＲＯＰ（ラスタ前演算）３２５は、ＳＰＭ３１０からデータを受け取り、パーティションユニット２１５内のＲＯＰユニットにデータを向けて送り、カラーブレンディングのための最適化を実施し、ピクセル色データを編成し、アドレス変換を実施するように構成される。
【００３６】
[0043]本明細書で述べられているコアアーキテクチャは例示的なものであること、また変形及び修正が可能であることを理解されたい。任意の数の処理エンジン、たとえばプリミティブエンジン３０４、ＳＰＭ３１０、テクスチャユニット３１５、又はｐｒｅＲＯＰ３２５がＧＰＣ２０８内に含まれる可能性がある。さらに、ＧＰＣ２０８が１つだけ示されているが、ＰＰＵ２０２は任意の数のＧＰＣ２０８を含むことができ、これらのＧＰＣ２０８は、どのＧＰＣ２０８が特定の処理タスクを受け取るかに実行挙動が依存しないように、互いに機能的に同様であることが有利である。さらに、各ＧＰＣ２０８は、別個の異なる処理エンジン、Ｌ１キャッシュ３２０などを使用して、他のＧＰＣ２０８から独立して動作することが有利である。
【００３７】
[0044]図３Ｂは、本発明の一実施形態による、図２のＰＰＵ２０２の１つの中のパーティションユニット２１５のブロック図である。図では、パーティションユニット２１５は、Ｌ２キャッシュ３５０と、フレームバッファ（ＦＢ）３５５と、ラスタ演算ユニット（ＲＯＰ）３６０とを含む。Ｌ２キャッシュ３５０は、クロスバーユニット２１０及びＲＯＰ３６０から受け取られたロード及びストア演算を実施するように構成されている読取り／書込みキャッシュである。読取りミス及び緊急のライトバック要求は、Ｌ２キャッシュ３５０によってＦＢ３５５に、処理するために出力される。ダーティな更新もまた、便宜的（ｏｐｐｏｒｔｕｎｉｓｔｉｃ）処理のためにＦＢ３５５に送られる。ＦＢ３５５は、並列処理メモリ２０４と直接インターフェースし、読取り及び書込み要求を出力し、並列処理メモリ２０４から読み取られたデータを受け取る。
【００３８】
[0045]グラフィック応用例では、ＲＯＰ３６０は、ステンシル、ｚテスト、ブレンディングなど、ラスタ演算を実施し、グラフィックメモリ内に記憶するために、ピクセルデータを処理済みグラフィックデータとして出力する処理ユニットである。本発明のいくつかの実施形態では、ＲＯＰ３６０は、パーティションユニット２１５ではなく各ＧＰＣ２０８内に含まれ、ピクセル読取り及び書込み要求は、ピクセル断片データではなくクロスバーユニット２１０を介して送られる。
【００３９】
[0046]処理済みグラフィックデータは、ディスプレイデバイス１１０上で表示することも、さらに処理するためにＣＰＵ１０２によって、又は並列処理サブシステム１１２内の処理エンティティの１つによってルーティングすることもできる。各パーティションユニット２１５は、ラスタ演算の処理を分散するために、ＲＯＰ３６０を含む。いくつかの実施形態では、ＲＯＰ３６０は、メモリに書き込まれるｚ又は色データを圧縮し、メモリから読み取られるｚ又は色データを伸張するように構成することができる。
【００４０】
[0047]図１、図２、図３Ａ、図３Ｂに記載されているアーキテクチャは本発明の範囲を決して限定しないこと、また、本明細書で教示されている技法は、限定することなしに１つ又は複数のＣＰＵ、１つ又は複数のマルチコアＣＰＵ、１つ又は複数のＰＰＵ２０２、１つ又は複数のＧＰＣ２０８、１つ又は複数のグラフィック処理装置又は専用処理ユニットなどを含めて、本発明の範囲から逸脱することなしに、任意の適正に構成された処理ユニット上で実装することができることを、当業者なら理解するであろう。
【００４１】
[0048]図４Ａは、本発明の一実施形態による、集中デバイス仮想化レイヤ（ＣＤＶＬ）を実装するように構成されたコンピュータシステム４００の概念図である。図では、コンピュータシステム４００は、複数のオペレーティングシステム（ＯＳ）４０２Ａ〜４０２Ｎと、ハイパーバイザ４０４と、中央処理装置（ＣＰＵ）４０６と、グラフィック処理装置（ＧＰＵ）４０８と、メモリブリッジ４１０と、メモリ４１２と、入出力（Ｉ／Ｏ）管理モジュール４１４と、周辺ハードウェアデバイス４１６Ａ〜４１６Ｎとを含む。Ｉ／Ｏ管理モジュール４１４は、周辺ハードウェアデバイス４１６Ａ〜４１６Ｎに結合されており、集中デバイス仮想化レイヤ（ＣＤＶＬ）４２６と、集積ハードウェアデバイス４２０Ａ〜４２０Ｎとを含む。ＣＰＵ４０６、ＧＰＵ４０８、周辺ハードウェアデバイス４１６Ａ〜４１６Ｎ、及び集積ハードウェアデバイス４２０Ａ〜４２０Ｎは、それぞれメモリ４１４内に記憶された１つ又は複数のドライバ４２４に関連付けられている。ドライバ４２４は、ＣＰＵ４０６又はＧＰＵ４０８によって実行されたとき、プログラム命令を様々なタイプの機械コードに変換するソフトウェアプログラムである。たとえば、ＣＰＵ４０６は、ＧＰＵ４０８に関連付けられたドライバ４２４を実行し、プログラム命令をＧＰＵ４０８ネイティブの機械コードに変換することができる。
【００４２】
[0049]ＣＰＵ４０６は、コンピュータシステム４００のプライマリプロセッサであり、ソフトウェアプログラムを実行し、コンピュータシステム４００の様々な機能を実施するように構成される。これらのソフトウェアプログラムは、ＯＳ４０２Ａ〜４０２Ｎ、ハイパーバイザ４０４、及びドライバ４２４を含む。ＯＳ４０２Ａ〜４０２Ｎは、各コンピューティング環境に関連付けられたアプリケーションを実行するために使用することができる様々なコンピューティング環境をユーザに提供する。たとえば、ＯＳ４０２Ａは、ウィンドウズ（Ｗｉｎｄｏｗｓ）（登録商標）ＸＰ、すなわちユーザにマイクロソフト（Ｍｉｃｒｏｓｏｆｔ）（登録商標）オフィス（Ｏｆｆｉｃｅ）などのプログラムに対するアクセスを提供することになるオペレーティングシステムとすることができ、一方、ＯＳ４０２Ｂは、ファイル転送プロトコル（ＦＴＰ）サーバとして機能するＵＮＩＸベースのオペレーティングシステムとすることができる。ハイパーバイザ４０４は、下記でより詳細に述べるように、様々なＯＳ４０２Ａ〜４０２Ｎの動作を調整し、競合を回避するように構成される。ドライバ４２４は、ＯＳ４０２Ａ〜４０２Ｎ、及びＯＳ４０２Ａ〜４０２Ｎ上で実行されるアプリケーションがＣＰＵ４０６の様々な機能にアクセスすることを可能にすることができる。ＯＳ４０２Ａ〜４０２Ｎ、ハイパーバイザ４０４、及びドライバ４２４は、メモリ４１２内に記憶されもよく、或いは、外部メモリユニット（図示せず）内に記憶されてもよい。
【００４３】
[0050]ＧＰＵ４０８は、グラフィック処理演算を実施し、ＣＰＵ４０６の処理パワーを補うコプロセッサである。ＧＰＵ４０８は、様々な処理タスクを実施するようにＧＰＵ４０８内の様々なハードウェア構成要素（図示せず）を構成するソフトウェアプログラムを実行することができる。ＧＰＵ４０８は、構成されたハードウェア構成要素を使用してグラフィックデータを処理することができる。ドライバ４２４など、ＧＰＵ４０８からアクセス可能なソフトウェアプログラムは、メモリ４１２内に記憶されもよく、或いは、外部メモリユニット内に記憶されてもよい。
【００４４】
[0051]ＣＰＵ４０６及びＧＰＵ４０８は、メモリブリッジ４１０に結合されている。一実施形態では、メモリブリッジ４１０は、ノースブリッジチップである。メモリブリッジ４１０は、メモリ４１２に結合されている。ＣＰＵ４０６及びＧＰＵ４０８は、メモリブリッジ４１０を経てメモリ４１２からデータを読み込む、且つそこにデータを書き込むことができる。このデータは、ソフトウェアプログラム、並びにグラフィックデータなど他のタイプのデータを含むことができる。
【００４５】
[0052]メモリブリッジ４１０は、Ｉ／Ｏ管理モジュール４１４に結合されている。Ｉ／Ｏ管理モジュール４１４は、周辺ハードウェアデバイス４１６Ａ〜４１６Ｎ及び集積ハードウェアデバイス４２０Ａ〜４２０Ｎを、ＣＰＵ４０６、ＧＰＵ４０８、及びこれらの処理ユニットによって実行されるソフトウェアプログラムからアクセス可能にする。一実施形態では、Ｉ／Ｏ管理モジュール４１４は、サウスブリッジチップである。周辺ハードウェアデバイス４１６Ａ〜４１６Ｎは、たとえばユニバーサルシリアルバス（ＵＳＢ）コネクタ又はファイアウェアコネクタなど、コネクタを使用してＩ／Ｏ管理モジュール４１４に結合させることができる。周辺機器４１６Ａ〜４１６Ｎは、とりわけキーボード、マウス、プリンタ、スキャナ、ディスクドライブ、フラッシュドライブ、テープドライブ、マイクロフォン、スピーカ、コンピュータモニタ、デジタルビデオカメラ、又は別のコンピュータシステムを含む。
【００４６】
[0053]集積ハードウェアデバイス４２０Ａ〜４２０Ｎは、Ｉ／Ｏ管理モジュール４１４を記憶する同じチップ上に位置し、様々なシステム機能をコンピュータシステム４００に提供する。集積ハードウェアデバイス４２０Ａ〜４２０Ｎは、とりわけリアルタイムクロック、ＡＰＭ（ａｄｖａｎｃｅｄ  ｐｏｗｅｒ  ｍａｎａｇｅｍｅｎｔ）モジュール、ＰＣＩ（ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｆａｃｅ）バス、ＰＣＩエクスプレス（ＰＣＩｅ）バス、ＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）コントローラ、割込みコントローラ、ベースボード管理コントローラ、ＰＡＴＡ（ｐｅｒｉｐｈｅｒａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）コントローラ、ＳＡＴＡ（ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）コントローラ、又は不揮発性の基本入出力システム（ＢＩＯＳ）メモリを含む。
【００４７】
[0054]周辺ハードウェアデバイス４１６Ａ〜４１６Ｎ及び集積ハードウェアデバイス４２０Ａ〜４２０Ｎは、本明細書ではまとめて「ハードウェアデバイス」と呼ばれ、メモリブリッジ４１０及びＩ／Ｏ管理モジュール４１４を介してＯＳ４０２Ａ〜４０２Ｎからアクセス可能である。コンピュータシステム４００は、ＯＳ４０２Ａ〜４０２Ｎがハードウェアデバイスにアクセスすることができるように、ソフトウェア（ＳＷ）仮想化及び／又はハードウェア（ＨＷ）仮想化を実装することができる。
【００４８】
[0055]図４Ｂは、本発明の一実施形態による、ＣＤＶＬ４２６を実装するように構成されたコンピュータシステム４０１の概念図である。図では、コンピュータシステム４０１は、図４Ａに記載されているコンピュータシステム４００と同じ構成要素の多数を含む。さらに、コンピュータシステム４０１は、周辺ＨＷ仮想化デバイス４１７Ａ〜４１７Ｎと、集積ＨＷ仮想化デバイス４２１Ａ〜４２１Ｎとを含む。ＳＷ仮想化が特定のハードウェアデバイスのために実装されているとき、ハイパーバイザ４０４は、そのハードウェアデバイスに関連付けられたリソースをいくつかの部分に分割し、ハイパーバイザ４０４内に含まれるＳＷ仮想化デバイス４２２を生成する。ＳＷ仮想化デバイス４２２の各部分は、仮想化されているハードウェアデバイスによって提供されるリソースのごく一部分を表す。次いで、ハイパーバイザ４０４は、ＳＷ仮想化デバイス４２２の異なる部分をＯＳ４０２Ａ〜４０２Ｎのそれぞれに割り振ることができる。
【００４９】
[0056]ハードウェアデバイスは、そのハードウェアデバイスの複数のインスタンスをアドバタイズすることによって、ＨＷ仮想化を実装することができる。周辺ハードウェアデバイス４１６Ａ〜４１６Ｎ及び／又は集積ハードウェアデバイス４２０Ａ〜４２０Ｎは、ＨＷ仮想化を実装することができる。仮想化されている各周辺ハードウェアデバイスは、周辺ＨＷ仮想化デバイス４１７Ａ〜４１７Ｎのセットとして表されている。仮想化されている各集積ハードウェアデバイスは、集積ＨＷ仮想化デバイス４２１Ａ〜４２１Ｎのセットとして表されている。
【００５０】
[0057]周辺ＨＷ仮想化デバイス４１７Ａ〜４１７Ｎの諸セット及び集積ＨＷ仮想化デバイス４２１Ａ〜４２１Ｎの諸セットは、まとめて「ＨＷ仮想化デバイス」と呼ばれ、それぞれ、仮想化されている単一のハードウェアデバイスの複数のインスタンスを表す。ハイパーバイザ４０４は、仮想化されているハードウェアデバイスの異なるインスタンスをＯＳ４０２Ａ〜４０２Ｎのそれぞれに割り振ることができる。相異なるＯＳがＨＷ仮想化デバイスのそれぞれにアクセスすると、仮想化されているハードウェアデバイスは、動作を続行させる前に、ＯＳ間の競合を解決する。
【００５１】
[0058]周辺ハードウェアデバイス４１６Ａ〜４１６Ｎ、周辺ＨＷ仮想化デバイス４１７Ａ〜４１７Ｎ、集積ハードウェアデバイス４２０Ａ〜４２０Ｎ、集積ＨＷ仮想化デバイス４２１Ａ〜４２１Ｎ、及びＳＷ仮想化デバイス４２２は、以下まとめて「列挙デバイス」と呼ばれ、コンピュータシステム４０１及びＯＳ４０２Ａ〜４０２Ｎに広範な補足機能を提供する。これらの補足機能は、印刷、音声データの記録、マウスから位置入力を受け取ること、及び他の機能など、各ハードウェアデバイスに関連付けられた機能を含む。ＯＳ４０２Ａ〜４０２Ｎは、アクセス要求を列挙デバイスに提出することによって、これらの機能にアクセスする。アクセス要求は、列挙デバイスとの実施しようとする様々なアクセス動作を指定する。アクセス動作は、コンフィグレーション動作（ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｏｐｅｒａｔｉｏｎ）、又はメモリマップドＩ／Ｏ（ＭＭＩＯ）動作を含む。コンフィグレーション動作は、列挙デバイスを特定のタスクに合わせて構成する。ＭＭＩＯ動作は、列挙デバイスの指定されたアドレス空間を用いてＩ／Ｏ動作を実施する。
【００５２】
[0059]ＯＳ４０２Ａ〜４０２Ｎによって送られたアクセス要求、及び対応するアクセス動作は、ＣＤＶＬ４２６によって管理される。ＣＤＶＬ４２６は、ＯＳ４０２Ａ〜４０２Ｎ間においてアービトレーションするように、またＯＳ４０２Ａ〜４０２Ｎが列挙デバイスとのアクセス動作を実施することを可能にするように構成された機能ユニットである。ＣＤＶＬ４２６は、ＯＳ４０２Ａ〜４０２Ｎによって送られたアクセス要求をインターセプトする。ＣＤＶＬ４２６は、列挙デバイスによって提供されるリソースをＯＳ４０２Ａ〜４０２Ｎに割り振り、列挙デバイスにアクセスするＯＳ間の競合を回避するように機能する。また、ＣＤＶＬ４２６は、各列挙デバイスによって送られる割込みをインターセプトし、それらの割込みをＯＳにルーティングする。
【００５３】
[0060]ＨＷ仮想化が特定のハードウェアデバイスのために実装されているとき、ＣＤＶＬ４２６は、ＯＳとＨＷ仮想化デバイスの各インスタンスとの間のアクセス動作を調整する。次いで、仮想化されているハードウェアデバイスが、ＯＳ間の競合を回避するように物理リソースを割り振る。ＳＷ仮想化が特定のハードウェアデバイスのために実装されているとき、ハイパーバイザ４０４は、ＳＷ仮想化デバイス４２２に対してＯＳ４０２Ａ〜４０２Ｎによってなされたアクセス要求をインターセプトする。ハイパーバイザ４０４は、それらのアクセス要求をＣＤＶＬ４２６に送る。次いで、ＣＤＶＬ４２６は、ＳＷ仮想化されているハードウェアデバイスとのアクセス動作を調整する。
【００５４】
[0061]一実施形態では、ＣＤＶＬ４２６は、Ｉ／Ｏ管理モジュール４１４内に位置するハードウェアユニットとして実装される。他の実施形態では、ＣＤＶＬ４２６は、ハードウェアとマイクロコントローラの組合せとして実装される。他の実施形態では、ＣＤＶＬ４２６は、Ｉ／Ｏ管理モジュール４１４に関連付けられたメモリ内に記憶されＩ／Ｏ管理モジュール４１４内に含まれるマイクロコントローラによって実行されるソフトウェアプログラムとして実装される。メモリ４１２内、外部メモリユニット内、又はＩ／Ｏ管理モジュール４１４内に位置することができるＣＤＶＬセットアップファイル４２８により、ソフトウェアによって実装されたＣＤＶＬ４２６がＩ／Ｏ管理モジュール４１４内に記憶される。
【００５５】
[0062]他の実施形態では、メモリブリッジ４１０及びＩ／Ｏ管理モジュール４１４が境界４３０内にある単一のチップ上に集積され、ＣＤＶＬ４２６は、ＯＳ４０２Ａ〜４０２Ｎがメモリ４１２及びＧＰＵ４０８とのアクセス動作を実施することを可能にする。他の実施形態では、メモリブリッジ４１０とＩ／Ｏ管理モジュール４１４が別々のチップであり、ＯＳ４０２Ａ〜４０２Ｎは、ＣＤＶＬ４２６を介してハードウェアデバイスにアクセスすることができるだけであってもよい。
【００５６】
[0063]ＣＤＶＬ４２６は、１つ又は複数の許可リストを維持することによって、ＯＳ４０２Ａ〜４０２Ｎ間の競合を回避する。各許可リストは、どの列挙デバイスに特定のＯＳがアクセスすることを許可されるかを示すルックアップ・テーブルを備える。ＣＤＶＬ４２６は、ＯＳに関連付けられた許可リストに基づいて、これらの列挙デバイスに対するアクセスを許可する。一実施形態では、許可リストは、ＣＤＶＬ４２６によって生成され、その結果、ＯＳが１つだけ、特定の時間に特定の列挙デバイスにアクセスすることを許可され、したがって潜在的な競合を回避する。
【００５７】
[0064]ＣＤＶＬ４２６はまた、各列挙デバイスのアドレス空間を、その列挙デバイスを使用することが許可されているＯＳのアドレス空間内にマップする仮想アドレスマップ（ＶＡＭ）を生成する。ＶＡＭにより、アクセス要求を、その列挙デバイスに関連付けられた適切なアドレスにルーティングすることができ、また、その列挙デバイスの関連アドレス空間内でアクセス動作を実施することができる。
【００５８】
[0065]さらに、ＣＤＶＬ４２６は、割込みマップを生成する。ＣＤＶＬ４２６は、割込みマップを使用し、列挙デバイスからその列挙デバイスを使用することが許可されているＯＳに送ることができる割込みをルーティングする。
【００５９】
[0066]ＣＤＶＬ４２６は、コンピュータシステム４０１の起動中に活動化される。ＣＤＶＬ４２６は、ＯＳ４０２Ａ〜４０２Ｎを識別し、ハードウェアデバイス及び仮想化デバイスを列挙する。また、ＣＤＶＬ４２６は、許可リストを生成し、上述のように、ＶＡＭ及び／又は割込みマップを生成することができる。ＣＤＶＬ４２６が開始された後で、ＯＳ４０２Ａ〜４０２Ｎは列挙デバイスにアクセスすることができる。
【００６０】
[0067]ＶＡＭ及び割込みマップは、デバイス列挙中に生成することができ、或いは、許可リストが更新されるとき動的に生成することができる。たとえば、ＯＳが、コンピュータシステム４０１の動作中に、列挙デバイスを使用するための許可を獲得した場合には、ＣＤＶＬ４２６は、ＯＳ−列挙デバイス対に関連付けられたＶＡＭ及び割込みマップを動的に生成することができる。
【００６１】
[0068]ＯＳが列挙デバイスの１つにアクセス要求を送るとき、ＯＳは、そのＯＳを識別するタグをアクセス要求内に含める。ＣＤＶＬ４２６がそのアクセス要求をインターセプトしたとき、ＣＤＶＬ４２６はそのタグを調べ、その列挙デバイスに関連付けられた許可リスト上にそのＯＳが含まれているかどうか判定することによって、そのＯＳがその列挙デバイスにアクセスすることを許可されているかどうか判定する。そのＯＳがその列挙デバイスを使用することを許可されていない場合には、ＣＤＶＬ４２６は、ハイパーバイザ４０４に通知する。次いで、ハイパーバイザ４０４は、適切なアクションを起こし、アクセス動作を拒否することができる。
【００６２】
[0069]そのＯＳがその列挙デバイスを使用することを許可されている場合には、ＣＤＶＬ４２６は、その列挙デバイスのアドレス空間をそのＯＳのアドレス空間内にマップするＶＡＭを調べる。ＣＤＶＬ４２６はアクセス要求を構文解析し、ＯＳによって要求されているアドレスの範囲を指定する情報を抽出する。ＣＤＶＬ４２６は、要求されているアドレスがマップされているか、それともマップされていないか判定する。要求されているアドレスの１つ又は複数がマップされていない場合には、ＣＤＶＬ４２６は、要求されているアドレスを含む新しいアドレスマップを生成する。次いで、ＣＤＶＬ４２６は、そのアクセス要求によって指定されたアクセス動作を列挙デバイスが実施することを可能にするコンテキストを、列挙デバイスにロードする。次いで、列挙デバイスは、そのアクセス要求を主張し、要求されているアクセス動作を実施する。
【００６３】
[0070]ＯＳが列挙デバイスとのアクセス動作を実施するとき、列挙デバイスは、割込みを発行することができる。ＣＤＶＬ４２６は、これらの割込みをインターセプトし、割込みマップを使用しＯＳのアドレス空間内の正しいアドレスにこれらの割込みを送る。次いで、ＯＳは、適切なステップをとり、これらの割込みを処理することができる。これらのステップは、追加のアクセス要求を、ＣＤＶＬ４２６を介して列挙デバイスに送ることを含むことができる。
【００６４】
[0071]コンピュータシステム４０１の動作中には、追加のハードウェアデバイスをＩ／Ｏ管理モジュール４１４に取り付けることができる。追加のハードウェアデバイスがＩ／Ｏ管理モジュール４１４に取り付けられたとき、ＣＤＶＬ４２６は、その追加のハードウェアデバイスを列挙し、ＯＳ４０２Ａ〜４０２Ｎのどれがその追加のハードウェアデバイスを使用することを許可されるか判定する。次いで、ＣＤＶＬ４２６は、追加のＶＡＭ及び追加の割込みマップを生成することができ、その結果、ＯＳ４０２Ａ〜４０２Ｎは、その追加のハードウェアデバイスによって提供されるリソースにアクセスすることができる。
【００６５】
[0072]また、ＣＤＶＬ４２６は、コンピュータシステム４０１の動作中に、追加のＣＰＵをメモリブリッジ４１０に取り付けることができるように構成される。追加のＣＰＵは、複数のＯＳを実行することができる。各ＣＰＵは、異なるハイパーバイザを実行し、そのＣＰＵによって実行されるＯＳを管理することができる。この構成について、図５において下記で述べる。
【００６６】
[0073]図５は、本発明の一実施形態による、ＣＤＶＬ４２６を実装するように構成されたマルチプロセッサコンピュータシステム５００の概念図である。図では、マルチプロセッサコンピュータシステム５００は、図４Ｂに記載されているコンピュータシステム４０１と同じ構成要素の多数を含む。
【００６７】
[0074]さらに、マルチプロセッサコンピュータシステム５００は、ＣＰＵ５０２と、ハイパーバイザ５０４と、ＯＳ５０６Ａ〜５０６Ｎと、ＣＰＵ５１２と、ハイパーバイザ５１４と、ＯＳ５１６Ａ〜５１６Ｎとを含む。ＣＰＵ５０２及びＣＰＵ５１２は、図４Ｂに記載されているＣＰＵ４０６と同様の並列処理ユニットである。ＣＰＵ５０２及びＣＰＵ５１２は、ソフトウェアプログラムを実行し、マルチプロセッサコンピュータシステム５００の機能を実施することができる。たとえば、ＣＰＵ５０２及びＣＰＵ５１２は、それぞれドライバ４２４の１つ又は複数を実行することができ、ドライバ４２４は、実行されたとき、プログラム命令をそれぞれＣＰＵ５０２及びＣＰＵ５１２ネイティブの機械コードに変換することができる。
【００６８】
[0075]ＣＰＵ５０２は、ハイパーバイザ５０４及びＯＳ５０６Ａ〜５０６Ｎを含めて、ソフトウェアプログラムを実行する。ハイパーバイザ５０４は、ハイパーバイザ４０４と実質的に同様であり、ＯＳ５０６Ａ〜５０６Ｎは、ＯＳ４０２Ａ〜４０２Ｎと実質的に同様である。ハイパーバイザ５０４は、ＯＳ５０６Ａ〜５０６Ｎの動作を管理するように構成される。ＯＳ５０６Ａ〜５０６Ｎは、メモリブリッジ４１０及びＩ／Ｏ管理モジュール４１４を介してハードウェアデバイスにアクセスするように構成される。ハードウェアデバイスの１つ又は複数がＳＷ仮想化されているとき、ハイパーバイザ５０４は、ＯＳ５０６Ａ〜５０６Ｎによってアクセス可能なＳＷ仮想化デバイス５０８の１つ又は複数のセットを含む。
【００６９】
[0076]ＣＰＵ５０２は、ハイパーバイザ５１４及びＯＳ５１６Ａ〜５１６Ｎを含めて、ソフトウェアプログラムを実行することができる。ハイパーバイザ５１４は、ハイパーバイザ５０４と実質的に同様であり、ＯＳ５１６Ａ〜５１６Ｎは、ＯＳ５０６Ａ〜５０６Ｎと実質的に同様である。ハイパーバイザ５１４は、ＯＳ５１６Ａ〜５１６Ｎの動作を管理するように構成され、ハードウェアデバイスの１つ又は複数がＳＷ仮想化されているとき、ＳＷ仮想化デバイス５１８の１つ又は複数のセットを含むことができる。
【００７０】
[0077]ＯＳ５０６Ａ〜５０６Ｎ及びＯＳ５１６Ａ〜５１６Ｎは、それぞれハイパーバイザ５０４及びハイパーバイザ５１４を通じてアクセス要求を送ることによって、ハードウェアデバイスにアクセスすることができる。ハイパーバイザ５０４及びハイパーバイザ５１４は、これらのアクセス要求をＣＤＶＬ４２６にルーティングする。ＣＤＶＬ４２６は、図４Ｂにおいて上述したものと実質的に同様に動作する。したがって、ＣＤＶＬ４２６は、どのハードウェアデバイスにＯＳ５０６Ａ〜５０６Ｎ及び／又はＯＳ５１６Ａ〜５１６Ｎがアクセスすることが許可されるかについて説明する許可リストを維持する。また、ＣＤＶＬ４２６は、それらのハードウェアデバイス、並びにこれらのハードウェアデバイスを使用することが許可されているＯＳ５０６Ａ〜５０６Ｎ及び／又はＯＳ５１６Ａ〜５１６ＮのためにＶＡＭ及び割込みマップを維持する。
【００７１】
[0078]図６は、本発明の一実施形態による、ＣＤＶＬ４２６をコンピュータシステム上で開始するための方法ステップの流れ図である。方法６００について図１〜５のシステムと共に述べられているが、これらの方法ステップを任意の順番で実施するように構成された任意のシステムが本発明の範囲内にあることを、当業者なら理解するであろう。
【００７２】
[0079]図では、方法６００は、ＣＤＶＬ４２６がロードされるステップ６０２で始まる。ＣＤＶＬ４２６がＩ／Ｏ管理モジュール４１４内に含まれるハードウェアユニットとして実装されているとき、ＣＤＶＬ４２６をロードすることは、ＣＤＶＬ４２６の電源をオンにすることを含む。ＣＤＶＬ４２６がソフトウェアプログラムとして実装されているとき、ＣＤＶＬ４２６をロードすることは、ＣＤＶＬセットアップファイル４２８によりＣＤＶＬ４２６がＩ／Ｏ管理モジュール４１４に関連付けられたメモリユニット内に記憶されることを含む。ソフトウェアによって実装されたＣＤＶＬ４２６は、コンピュータシステム内に含まれるプロセッサ、又はＩ／Ｏ管理モジュール４１４内に含まれるマイクロコントローラによって実行される。
【００７３】
[0080]ステップ６０４では、ＣＤＶＬ４２６は、ハードウェアデバイスのそれぞれ、及び仮想化デバイスのそれぞれを識別するデバイスリストを生成することによって、ハードウェアデバイス及び仮想化デバイスを列挙する。また、ＣＤＶＬ４２６は、各ハードウェアデバイス及び各仮想化デバイスに関連付けられたプロパティをデバイスリスト内に含めることができる。さらに、ＣＤＶＬ４２６は、ハードウェアデバイス及び仮想化デバイスのそれぞれを調べ、これらのデバイスのそれぞれにアクセスするために使用することができるアドレスの範囲を決定することができる。この情報は、デバイスリスト内に含めることができる。
【００７４】
[0081]ステップ６０６では、ＣＤＶＬ４２６は、ＯＳ５０６Ａ〜５０６Ｎ及び／又はＯＳ５１６Ａ〜５１６Ｎのどれが各ハードウェアデバイス及び各仮想化デバイスにアクセスすることを許可されるか指定する許可リストを生成する。一実施形態では、相異なるＯＳが同時に同じ列挙デバイスとのアクセス動作を実施するのを防止するように許可リストが生成される。
【００７５】
[0082]ステップ６０８では、ＣＤＶＬ４２６は、各ハードウェアデバイス及び各仮想化デバイスのアドレス空間を、その列挙デバイスを使用することが許可されているＯＳのアドレス空間内にマップするＶＡＭを生成する。ステップ６１０では、ＣＤＶＬ４２６は、各列挙デバイスの割込みを、その列挙デバイスを使用することが許可されているＯＳのアドレス空間内にルーティングするために使用することができる割込みマップを生成する。
【００７６】
[0083]図７は、本発明の一実施形態による、ＣＤＶＬ４２６をコンピュータシステム上で実施するための方法ステップの流れ図である。方法７００について図１〜５のシステムと共に述べられているが、これらの方法ステップを任意の順番で実施するように構成された任意のシステムが本発明の範囲内にあることを、当業者なら理解するであろう。
【００７７】
[0084]図では、方法７００は、ＣＤＶＬ４２６がＯＳからアクセス要求を受け取るステップ７０２で始まる。このＯＳは、たとえばＯＳ４０２Ａ〜４０２Ｎの１つ、ＯＳ５０６Ａ〜５０６Ｎの１つ、又はＯＳ５１６Ａ〜５１６Ｎの１つとすることができる。アクセス要求は、ＯＳを識別するタグを含む。また、アクセス要求は、ＯＳがアクセスしたいと望む列挙デバイス、ＯＳが実施したいと望むアクセス動作、及びＯＳがアクセスしたいと望むアドレスを含む。
【００７８】
[0085]ステップ７０４では、ＣＤＶＬ４２６は、そのＯＳが、アクセス要求内で指定されている列挙デバイスにアクセスすることを許可されているかどうか判定する。ＣＤＶＬ４２６は、アクセス要求に関連付けられたタグを調べ、そのアクセス要求の入手元であるＯＳを決定する。また、ＣＤＶＬ４２６は、アクセス要求を調べ、どの列挙デバイスが要求されているか判定する。次いで、ＣＤＶＬ４２６は、要求されている列挙デバイスに関連付けられた許可リストにアクセスする。許可リストは、上述のように、その列挙デバイスを使用することが許可されているＯＳを指定する。ＣＤＶＬ４２６は、そのＯＳが許可リスト内に含まれているかどうか、次いで、そのＯＳが、要求されている列挙デバイスにアクセスすることを許可されているかどうか判定する。
【００７９】
[0086]ＯＳが許可リスト上に含まれていない場合には、ＯＳは列挙デバイスにアクセスすることを許可されず、この方法は、ステップ７０６に進む。ステップ７０６では、ＣＤＶＬ４２６は、列挙デバイスに対するＯＳアクセスを拒否し、方法７００は終了する。
【００８０】
[0087]ＯＳが許可リスト上に含まれている場合には、方法７００は、ステップ７０８に進む。ステップ７０８では、ＣＤＶＬ４２６は、マップされていないアドレスがアクセス要求内に含まれているかどうか判定する。ＣＤＶＬ４２６は、アクセス要求を調べ、ＯＳがアクセスすることを意図するアドレスを決定する。また、ＣＤＶＬ４２６は、そのＯＳ及びその列挙デバイスに関連付けられたＶＡＭにアクセスする。ＣＤＶＬ４２６は、アクセス要求内に含まれるアドレスをＶＡＭに比較し、指定されたアドレスのいずれかがＶＡＭ内に含まれていないかどうか判定する。これは、これらのアドレスがマップされていないことを示す。
【００８１】
[0088]アクセス要求が、マップされていないアドレスを含んでいない（すなわち、アクセス要求内で指定されているアドレスのすべてがＶＡＭ内に含まれる）場合には、方法７００は、ステップ７１２に進む。
【００８２】
[0089]アクセス要求内で指定されているいくつかのアドレスがマップされていない場合には、方法７００は、ステップ７１０に進む。ステップ７１０では、ＣＤＶＬ４２６は、マップされていないアドレスを列挙デバイスのアドレス空間内にマップすることによって、ＶＡＭを更新する。次いで、方法７００は、ステップ７１２に進む。
【００８３】
[0090]ステップ７１２では、ＣＤＶＬ４２６は、要求されているアクセス動作が要求されている列挙デバイスと共に継続することを可能にする。ＣＤＶＬ４２６は、ＶＡＭを使用して、ＯＳによって送ることができるコンフィグレーション動作及びＭＭＩＯ動作を列挙デバイスのアドレス空間内の適切なアドレスにルーティングすることによって、アクセス動作を調整する。また、ＣＤＶＬは、割込みマップを使用して、列挙デバイスによって生成される割込みをＯＳのアドレス空間内の適切なアドレスにルーティングする。アクセス動作が完了したとき、方法７００は終了する。
【００８４】
[0091]要するに、集中デバイス仮想化レイヤ（ＣＤＶＬ）は、マルチＣＰＵコンピュータシステム内の様々な中央処理装置（ＣＰＵ）上で実行されるオペレーティングシステム（ＯＳ）のためのデバイス仮想化をサポートする。ＣＤＶＬは、様々なＣＰＵを１つ又は複数の列挙デバイスと接続する、サウスブリッジ（ＳＢ）チップなど入出力（Ｉ／Ｏ）管理モジュール内から動作する。列挙デバイスは、ハードウェアデバイス及び仮想化デバイスを含む。ＣＤＶＬは、その列挙デバイスにアクセスすることができるＯＳを含む、各列挙デバイスについての許可リストを生成することによって、どのＯＳが各列挙デバイスを使用することを許可されているかを追跡する。ＯＳが列挙デバイスを使用することを許可されているとき、そのＯＳは、コンフィグレーション動作及び／又はメモリマップドＩ／Ｏ動作を含むことができる、その列挙デバイスとのアクセス動作を実施することができる。
【００８５】
[0092]ＯＳが特定の列挙デバイスによって提供されるリソースにアクセスしようと試みるとき、ＯＳは、そのＯＳを識別するタグを含むアクセス要求を生成する。次いで、ＯＳは、そのＯＳを管理するハイパーバイザを介して、そのアクセス要求をＣＤＶＬに送る。ＣＤＶＬは、アクセス要求に関連付けられたタグを調べ、そのＯＳがその列挙デバイスにアクセスすることを許可されているかどうか判定する。あるＯＳが、そのＯＳが使用することを許可されていない列挙デバイスにアクセスしようと試みた場合には、ＣＤＶＬは、そのＯＳに関連付けられたハイパーバイザに通知する。次いで、ハイパーバイザは、適切なステップをとり、列挙デバイスに対するＯＳアクセスを拒否することができる。
【００８６】
[0093]ＣＤＶＬは、仮想アドレスマップ（ＶＡＭ）を使用して、コンフィグレーション動作及び／又はＭＭＩＯ動作を列挙デバイスにルーティングする。ＶＡＭは、各列挙デバイスのアドレス空間を、その列挙デバイスにアクセスすることが許可されているＯＳのアドレス空間内にマップすることを可能にする。ＣＤＶＬは、デバイス列挙中、又はランタイム中にＶＡＭを生成することができる。
【００８７】
[0094]ＯＳがアクセス要求をＣＤＶＬに送り、ＣＤＶＬがそのアクセス要求を認めたときには、ＣＤＶＬが関連のＶＡＭを調べ、要求されているアドレスがマップされていることを保証する。要求されているアドレスがマップされていない場合には、ＣＤＶＬは、新しいＶＡＭを生成することができる。ＣＤＶＬは、そのＶＡＭを使用して、列挙デバイス上の正しいアドレスにアクセス要求をルーティングする。また、ＣＤＶＬは、コンテキスト切替え又はデバイス無活動化など、アクセスを継続することを可能にする他のアクションを実施することができる。
【００８８】
[0095]ＣＤＶＬは、特定の列挙デバイスからの割込みを、その列挙デバイスにアクセスすることができるＯＳ内にマップすることによって、列挙デバイス割込みを処理する。列挙デバイスが割込みを発行した場合には、ＣＤＶＬは、そのＯＳを管理するハイパーバイザを通じて、ＯＳアドレス空間内の関連のアドレスにその割込みを送ることができる。ＣＤＶＬは、デバイス列挙中、又は列挙デバイス許可が変化したとき、割込みマップを生成することができる。
【００８９】
[0096]有利には、ＣＤＶＬは、デバイス仮想化を、複数のＣＰＵを含むコンピューティングシステムに延長する。ＣＤＶＬは、各ＣＰＵ上で実行されるＯＳが、そのコンピューティングシステムに結合されている列挙デバイスの共通プールにアクセスすることを可能にする。ＣＤＶＬをＳＷ仮想化及びＨＷ仮想化と共に使用し、専用の仮想化サポートを、そのようなサポートを必要とするＯＳに対して提供することができる。ＣＤＶＬの他の利点は、追加のＣＰＵをメモリブリッジに結合することによって、追加のＣＰＵをコンピューティングシステムに追加することができることである。追加のＣＰＵそれぞれが１つ又は複数のＯＳを実行するとき、メモリブリッジに結合されたＣＰＵ上で実行されるＯＳのそれぞれは、ＣＤＶＬを介して列挙デバイスにアクセスすることができる。
【００９０】
[0097]本発明の一実施形態は、コンピュータシステムと共に使用するためのプログラム製品として実施することができる。プログラム製品の（１つ又は複数の）プログラムは、（本明細書で述べられている方法を含む）実施形態の機能を規定し、様々なコンピュータ可読記憶媒体上で含むことができる。例示的なコンピュータ可読記憶媒体は、それだけには限らないが、（ｉ）情報が永続的に記憶される非書込み可能記憶媒体（たとえば、ＣＤ−ＲＯＭドライブによって読取り可能なＣＤ−ＲＯＭディスク、フラッシュメモリ、ＲＯＭチップ、又は任意のタイプのソリッドステート不揮発性半導体メモリ）、及び（ｉｉ）変更可能な情報が記憶される書込み可能記憶媒体（たとえば、ディスケットドライブ内のフロッピディスク、又はハードディスクドライブ、又は任意のタイプのソリッドステートランダムアクセス半導体メモリ）を含む。
【００９１】
[0098]以上、本発明について具体的な実施形態を参照して述べた。しかし、添付の特許請求の範囲に述べられている本発明の、より広い精神及び範囲から逸脱することなしに、様々な修正及び変更を本発明に加えることができることを、当業者なら理解するであろう。したがって、前述の説明及び図面は、限定的な意味ではなく例示的な意味で考えるべきである。
【符号の説明】
【００９２】
１００  コンピュータシステム
１０２  中央処理装置（ＣＰＵ）
１０４  システムメモリ
１０５  メモリブリッジ
１０６  通信経路
１０７  Ｉ／Ｏブリッジ
１０８  入力デバイス
１１０  ディスプレイデバイス
１１２  並列処理サブシステム
１１３  通信経路
１１４  システムディスク
１１６  スイッチ
１１８  ネットワークアダプタ
１２０  アドインカード
１２１  アドインカード
２００  ワーク分配ユニット
２０２  並列処理ユニット（ＰＰＵ）
２０４  並列処理（ＰＰ）メモリ
２０５  Ｉ／Ｏユニット
２０６  ホストインターフェース
２０８  一般処理クラスタ（ＧＰＣ）
２１０  メモリクロスバーユニット
２１２  フロントエンド
２１４  メモリインターフェース
２１５  パーティションユニット
２２０  ＤＲＡＭ
２３０  処理クラスタアレイ
３０４  プリミティブエンジン
３０５  パイプラインマネージャ
３１０  ストリーミングマルチプロセッサ（ＳＰＭ）
３１５  テクスチャユニット
３２０  Ｌ１キャッシュ
３２５  ｐｒｅＲＯＰ（ラスタ前演算）
３３０  ワーク分配クロスバー
３５０  Ｌ２キャッシュ
３５５  フレームバッファ（ＦＢ）
３６０  ラスタ演算ユニット（ＲＯＰ）
４００  コンピュータシステム
４０１  コンピュータシステム
４０２  オペレーティングシステム（ＯＳ）
４０４  ハイパーバイザ
４０６  中央処理装置（ＣＰＵ）
４０８  グラフィック処理装置（ＧＰＵ）
４１０  メモリブリッジ
４１２  メモリ
４１４  入出力（Ｉ／Ｏ）管理モジュール
４１６  周辺ハードウェアデバイス
４１７  周辺ＨＷ仮想化デバイス
４２０  集積ハードウェアデバイス
４２１  集積ＨＷ仮想化デバイス
４２２  ＳＷ仮想化デバイス
４２４  ドライバ
４２６  集中デバイス仮想化レイヤ（ＣＤＶＬ）
４２８  ＣＤＶＬセットアップファイル
４３０  境界
５００  マルチプロセッサコンピュータシステム
５０２  ＣＰＵ
５０４  ハイパーバイザ
５０６  ＯＳ
５０８  ＳＷ仮想化デバイス
５１２  ＣＰＵ
５１４  ハイパーバイザ
５１６  ＯＳ
５１８  ＳＷ仮想化デバイス
【図１】
2010186465.tif 000003
【図２】
2010186465.tif 000004
【図３Ａ】
2010186465.tif 000005
【図３Ｂ】
2010186465.tif 000006
【図４Ａ】
2010186465.tif 000007
【図４Ｂ】
2010186465.tif 000008
【図５】
2010186465.tif 000009
【図６】
2010186465.tif 000010
【図７】
2010186465.tif 000011
【外国語明細書】
2010186465000001.pdf