(57)【特許請求の範囲】
【請求項１】
ローカルメモリを搭載したグラフィックスプロセッシングユニットと、
メインメモリを搭載した汎用プロセッシングユニットと、
前記グラフィックスプロセッシングユニットのＩ／Ｏポートと前記汎用プロセッシングユニットのＩ／Ｏポートを接続し、前記グラフィックスプロセッシングユニットと前記汎用プロセッシングユニットが互いにデータをやりとりするためのＩ／Ｏインタフェースとを含み、
前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記メインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域がメモリマップされており、
前記メインメモリの前記仮想メモリ領域には、前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルが保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリに前記Ｉ／Ｏインタフェースを介してアクセスして前記ファイルを読み取り、前記グラフィックス演算に利用することを特徴とするマルチプロセッサシステム。
【請求項２】
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納した複数のファイルの内、一部のファイルは前記メインメモリの前記仮想メモリ領域に保持され、残りのファイルは前記ローカルメモリに保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリに前記Ｉ／Ｏインタフェースを介してアクセスして前記一部のファイルを読み取るとともに、前記ローカルメモリにアクセスして前記残りのファイルを読み取り、読み取られた前記複数のファイルを前記グラフィックス演算に利用することを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記グラフィックスプロセッシングユニットによるグラフィックス演算における参照頻度が所定の閾値以下の前記ファイルは前記メインメモリの前記仮想メモリ領域に保持され、残りの前記ファイルは前記ローカルメモリに保持されることを特徴とする請求項２に記載のマルチプロセッサシステム。
【請求項４】
前記ローカルメモリの容量が前記メインメモリの容量よりも小さい場合、ファイルサイズが所定のサイズ以上の前記ファイルは前記メインメモリの前記仮想メモリ領域に保持され、残りの前記ファイルは前記ローカルメモリに保持されることを特徴とする請求項２に記載のマルチプロセッサシステム。
【請求項５】
前記複数のファイルの内、前記メインメモリの前記仮想メモリ領域に保持されるファイルの枚数を変えた場合に、前記グラフィックスプロセッシングユニットが前記ローカルメモリに対して描画データを読み書きしながら描画処理を行う過程で前記複数のファイルを参照する際の転送速度が最大になるファイルの枚数が最適枚数として取得され、前記最適枚数の前記ファイルが前記メインメモリの前記仮想メモリ領域に保持され、残りの前記ファイルは前記ローカルメモリに保持されることを特徴とする請求項２に記載のマルチプロセッサシステム。
【請求項６】
前記ファイルは、前記メインメモリの前記仮想メモリ領域と前記ローカルメモリの両方に重複して保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏインタフェースを介した前記仮想メモリのアクセスによる前記ファイルの読み取りと、前記ローカルメモリのアクセスによる前記ファイルの読み取りとを前記ローカルメモリのバスの輻輳状態に応じて切り替え、前記仮想メモリまたは前記ローカルメモリから読み取られた前記ファイルを前記グラフィックス演算に利用することを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項７】
前記メインメモリの前記仮想メモリ領域には、前記グラフィックスプロセッシングユニットによるマッピング処理に必要となるマッピングデータを格納したファイルが保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏインタフェースを介して前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリにアクセスして前記ファイルを読み取り、前記マッピング処理に利用することを特徴とする請求項１から６のいずれかに記載のマルチプロセッサシステム。
【請求項８】
Ｉ／Ｏインタフェースを介してグラフィックスプロセッシングユニットと接続可能な汎用プロセッシングユニットにおいて実行されるプログラムから呼び出されるプログラム部品をファイルにまとめたライブラリモジュールであって、
前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記汎用プロセッシングユニットに搭載されたメインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域をメモリマップするメモリ管理機能と、
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルを前記メインメモリ内の前記仮想メモリ領域に配置するデータ配置機能と
を前記汎用プロセッシングユニットに実現させることを特徴とするライブラリモジュール。
【請求項９】
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納した複数のファイルの内、前記メインメモリの前記仮想メモリ領域に配置すべき一部のファイルの指定を受け付けるインタフェース機能と、
前記メインメモリと前記グラフィックスプロセッシングユニットに搭載されたローカルメモリの間でデータ転送するデータ転送機能と
をさらに前記汎用プロセッシングユニットに実現させ、
前記データ配置機能は、前記複数のファイルの内、指定された前記一部のファイルを前記メインメモリの前記仮想メモリ領域に配置し、残りのファイルを前記データ転送機能により前記ローカルメモリに転送することを特徴とする請求項８に記載のライブラリモジュール。
【請求項１０】
汎用プロセッシングユニットとグラフィックスプロセッシングユニットとがＩ／Ｏインタフェースを介して互いに接続されたマルチプロセッサシステムにおいて実行可能なプログラムであって、
前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記汎用プロセッシングユニットに搭載されたメインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域をメモリマップするメモリ管理機能と、
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルを前記メインメモリ内の前記仮想メモリ領域に配置するデータ配置機能と
を前記汎用プロセッシングユニットに実現させ、
前記Ｉ／Ｏインタフェースを介して前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリにアクセスして前記ファイルを読み取るデータ読み取り機能と、
前記仮想メモリから読み出された前記ファイルを前記グラフィックス演算に利用するグラフィックス処理機能と
を前記グラフィックスプロセッシングユニットに実現させることを特徴とするプログラム。
【請求項１１】
汎用プロセッシングユニットとグラフィックスプロセッシングユニットとがＩ／Ｏインタフェースを介して互いに接続されたマルチプロセッサシステムにおける描画処理方法であって、
前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記汎用プロセッシングユニットに搭載されたメインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域をメモリマップするステップと、
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルを前記メインメモリ内の前記仮想メモリ領域に保持するステップと、
前記グラフィックスプロセッシングユニットが、前記Ｉ／Ｏインタフェースを介して前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリにアクセスして前記ファイルを読み取り、前記グラフィックス演算に利用するステップとを含むことを特徴とする描画処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はグラフィックス処理技術に関し、特にマルチプロセッサにおけるグラフィックス処理技術およびグラフィックスライブラリに関する。
【背景技術】
【０００２】
パーソナルコンピュータやゲーム専用機において、高品質な３次元コンピュータグラフィックスを用いたゲームやシミュレーションなどのアプリケーションを実行したり、実写とコンピュータグラフィックスを融合させた映像コンテンツの再生を行うなど、高画質のグラフィックスの利用が広がっている。
【０００３】
一般に、グラフィックス処理は、ＣＰＵとグラフィックスプロセッシングユニット（ＧＰＵ）が連携することで実行される。ＣＰＵが汎用的な演算を行う汎用プロセッサであるのに対して、ＧＰＵは高度なグラフィックス演算を行うための専用プロセッサである。ＣＰＵはオブジェクトの３次元モデルにもとづいて投影変換などのジオメトリ演算を行い、ＧＰＵはＣＰＵから頂点データなどを受け取ってレンダリングを実行する。ＧＰＵはラスタライザやピクセルシェーダなどの専用ハードウェアから構成され、パイプライン処理でグラフィックス処理を実行する。最近のＧＰＵには、プログラムシェーダと呼ばれるように、シェーダ機能がプログラム可能なものもある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＣＰＵとＧＰＵが連携してグラフィックス処理を行う場合、ＣＰＵとＧＰＵの処理能力の違いや、ＣＰＵとＧＰＵに搭載されたメモリ容量の違いなどを考慮してグラフィックス処理をＣＰＵとＧＰＵの間で最適に分担することが必要となる。特にＣＰＵ側には十分なメモリ容量を搭載できるが、ＧＰＵ側のメモリ容量は制限されることが多いため、ＧＰＵのメモリを有効に活用する必要がある。また、ＣＰＵとＧＰＵを接続する入出力インタフェースの帯域に制限があると、その帯域がボトルネックとなって全体のグラフィックス処理の効率が低下することがある。
【０００５】
本発明はこうした課題に鑑みてなされたものであり、その目的は、ＣＰＵとＧＰＵを含むマルチプロセッサシステムにおいて、グラフィックス処理の効率化を図ることにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様のマルチプロセッサシステムは、ローカルメモリを搭載したグラフィックスプロセッシングユニットと、メインメモリを搭載した汎用プロセッシングユニットと、前記グラフィックスプロセッシングユニットのＩ／Ｏポートと前記汎用プロセッシングユニットのＩ／Ｏポートを接続し、前記グラフィックスプロセッシングユニットと前記汎用プロセッシングユニットが互いにデータをやりとりするためのＩ／Ｏインタフェースとを含む。前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記メインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域がメモリマップされており、前記メインメモリの前記仮想メモリ領域には、前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルが保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリに前記Ｉ／Ｏインタフェースを介してアクセスして前記ファイルを読み取り、前記グラフィックス演算に利用する。
【０００７】
前記メインメモリの前記仮想メモリ領域に保持される「前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータ」の一例は、テクスチャマッピングに利用されるテクスチャ、頂点データなどのジオメトリデータ、シェーダプログラムのコード列などがある。
【０００８】
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納した複数のファイルの内、一部のファイルは前記メインメモリの前記仮想メモリ領域に保持され、残りのファイルは前記ローカルメモリに保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリに前記Ｉ／Ｏインタフェースを介してアクセスして前記一部のファイルを読み取るとともに、前記ローカルメモリにアクセスして前記残りのファイルを読み取り、読み取られた前記複数のファイルを前記グラフィックス演算に利用してもよい。
【０００９】
前記ファイルは、前記メインメモリの前記仮想メモリ領域と前記ローカルメモリの両方に重複して保持され、前記グラフィックスプロセッシングユニットは、前記Ｉ／Ｏインタフェースを介した前記仮想メモリのアクセスによる前記ファイルの読み取りと、前記ローカルメモリのアクセスによる前記ファイルの読み取りとを前記ローカルメモリのバスの輻輳状態に応じて切り替え、前記仮想メモリまたは前記ローカルメモリから読み取られた前記ファイルを前記グラフィックス演算に利用してもよい。
【００１０】
本発明の別の態様は、ライブラリモジュールである。このライブラリモジュールは、Ｉ／Ｏインタフェースを介してグラフィックスプロセッシングユニットと接続可能な汎用プロセッシングユニットにおいて実行されるプログラムから呼び出されるプログラム部品をファイルにまとめたライブラリモジュールであって、前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記汎用プロセッシングユニットに搭載されたメインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域をメモリマップするメモリ管理機能と、前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルを前記メインメモリ内の前記仮想メモリ領域に配置するデータ配置機能とを前記汎用プロセッシングユニットに実現させる。
【００１１】
前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納した複数のファイルの内、前記メインメモリの前記仮想メモリ領域に配置すべき一部のファイルの指定を受け付ける指定機能と、前記メインメモリと前記グラフィックスプロセッシングユニットに搭載されたローカルメモリの間でデータ転送するデータ転送機能とをさらに前記汎用プロセッシングユニットに実現させ、前記データ配置機能は、前記複数のファイルの内、指定された前記一部のファイルを前記メインメモリの前記仮想メモリ領域に配置し、残りのファイルを前記データ転送機能により前記ローカルメモリに転送してもよい。
【００１２】
本発明のさらに別の態様は、描画処理方法である。この方法は、汎用プロセッシングユニットとグラフィックスプロセッシングユニットとがＩ／Ｏインタフェースを介して互いに接続されたマルチプロセッサシステムにおける描画処理方法であって、前記グラフィックスプロセッシングユニットが前記Ｉ／Ｏインタフェースを介して前記汎用プロセッシングユニットに搭載されたメインメモリ内の所定の仮想メモリ領域にアクセスするために、前記Ｉ／Ｏインタフェースを介してアクセス可能なＩ／Ｏアドレス空間に前記仮想メモリ領域をメモリマップするステップと、前記グラフィックスプロセッシングユニットによるグラフィックス演算において参照されるデータであって、前記グラフィックス演算において更新されないデータを格納したファイルを前記メインメモリ内の前記仮想メモリ領域に保持するステップと、前記グラフィックスプロセッシングユニットが、前記Ｉ／Ｏインタフェースを介して前記Ｉ／Ｏアドレス空間にメモリマップされた前記仮想メモリにアクセスして前記ファイルを読み取り、前記グラフィックス演算に利用するステップとを含む。
【００１３】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、プロセッサ、装置、システム、コンピュータプログラム、プログラム製品、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１４】
本発明によれば、グラフィックス処理の効率を向上させることができる。
【発明を実施するための最良の形態】
【００１５】
図１は、実施の形態に係るマルチプロセッサシステムの構成図である。このマルチプロセッサシステムは、ＣＰＵ（Central Processing Unit）１００と、ＧＰＵ（Graphic Processing Unit）２００と、メインメモリ１２０と、ローカルメモリ２２０とを含む。
【００１６】
ＣＰＵ１００は、単一のメインプロセッサであってもよく、複数のプロセッサを含むマルチプロセッサシステムであってもよく、あるいは、複数のプロセッサコアを１個のパッケージに集積したマルチコアプロセッサであってもよい。ＧＰＵ２００は、グラフィックプロセッサコアを搭載したグラフィックチップである。
【００１７】
ＣＰＵ１００の入出力ポートとＧＰＵ２００の入出力ポートは、入出力インタフェース（以下、「ＩＯＩＦ」と呼ぶ）１１０で接続されており、ＣＰＵ１００とＧＰＵ２００は互いにＩＯＩＦ１１０を介してデータをやりとりすることができる。ＩＯＩＦ１１０は、非常に高速なインタフェースであり、その帯域幅は、ＣＰＵ１００とメインメモリ１２０の間を結ぶバス１２２や、ＧＰＵ２００とローカルメモリ２２０の間を結ぶバス２２２の帯域幅にほぼ等しい。
【００１８】
グラフィックスライブラリ３００は、描画処理を行うために生成されるグラフィックスコマンドを生成および管理するためのライブラリであり、アプリケーション３１０からこのライブラリを呼び出してグラフィックス処理を実行することができる。また、グラフィックスライブラリ３００は、メモリ管理やデータ転送制御の機能を提供し、それらの機能を利用して、アプリケーション３１０から、メモリマッピングや、ジオメトリ情報、テクスチャ、シェーダプログラムなどのデータのメモリ間転送などを実行することができる。
【００１９】
ＣＰＵ１００は、アプリケーション３１０がグラフィックスライブラリ３００を用いて生成したグラフィックスコマンドを、メインメモリ１２０内に設けられたコマンドバッファ１０にキューイングする。ＧＰＵ２００は、コマンドバッファ１０に蓄積されたグラフィックスコマンドを順次読み出して処理する。コマンドバッファ１０に対するグラフィックスコマンドの読み書きには同期機能が提供されており、アプリケーション３１０は、ＣＰＵ１００からＧＰＵ２００への処理の流れをきめ細かく制御することができる。
【００２０】
ＣＰＵ１００は、オブジェクトの３次元モデルにもとづいて、ポリゴンの頂点座標値、頂点カラー、法線ベクトル、ＵＶ値などのジオメトリデータ１２を生成し、メインメモリ１２０に格納する。また、ＣＰＵ１００は、ポリゴン表面にマッピングするためのテクスチャ１４をメインメモリ１２０に格納する。さらに、ＣＰＵ１００は、ハードディスクなどの記録媒体からシェーダプログラム１６を読み込み、メインメモリ１２０に格納する。
【００２１】
メインメモリ１２０のメモリ領域はＩ／Ｏアドレス空間にメモリマッピングされており、ＧＰＵ２００は、Ｉ／Ｏアドレス空間にメモリマップされたメインメモリ１２０のメモリ領域をＩＯＩＦ１１０経由で読み取ることができる。このように、ＧＰＵ２００は、ローカルメモリ２２０の他にメインメモリ１２０へアクセスすることができるため、ジオメトリデータ、テクスチャなどグラフィックス演算に必要なデータをローカルメモリ２２０にもメインメモリ１２０にも配置することができる。グラフィックス演算に必要なデータの参照頻度やサイズに応じて、システム全体でもっとも効率が良くなるようにローカルメモリ２２０またはメインメモリ１２０にデータが配置される。
【００２２】
ジオメトリデータ１２、テクスチャ１４およびシェーダプログラム１６が格納されたメインメモリ１２０内のメモリ領域は、ＩＯＩＦ１１０のコントローラに設けられたメモリ内のＩ／Ｏアドレス空間にメモリマッピングされる。ＧＰＵ２００は、ＩＯＩＦ１１０を介して、Ｉ／Ｏアドレス空間にメモリマッピングされたジオメトリデータ１２、テクスチャ１４およびシェーダプログラム１６を読み出す。
【００２３】
ＧＰＵ２００は、シェーダプログラム１６にしたがって、ジオメトリデータ１２を用いてポリゴンのラスタライズデータを生成し、ピクセルデータをフレームバッファ２０に書き込む。さらに、ＧＰＵ２００は、ポリゴン表面にテクスチャ１４をマッピングし、テクスチャマッピング後のピクセルデータをフレームバッファ２０に書き込む。
【００２４】
また、ＧＰＵ２００は、ローカルメモリ２２０内にジオメトリデータ２２、テクスチャ２４およびシェーダプログラム２６が格納されている場合、ローカルメモリ２２０からこれらのデータを読み出し、グラフィックス演算に利用する。これらのデータは、メインメモリ１２０からローカルメモリ２２０にあらかじめＤＭＡ転送してもよく、ＧＰＵ２００がＩＯＩＦ１１０経由でメインメモリ１２０から読み出し、ローカルメモリ２２０に格納してもよい。
【００２５】
図２は、メインメモリ１２０の実効アドレス空間１４０とＩＯＩＦ１１０のＩ／Ｏアドレス空間１５０の関係を説明する図である。
【００２６】
アプリケーション３１０は、グラフィックスライブラリ３００のメモリ初期化関数を用いて、ＧＰＵ２００にアクセスを許可するメインメモリ１２０内のメモリ領域を確保する。グラフィックスライブラリ３００は、確保されたメモリ領域の実効アドレスとサイズにもとづいて、そのメモリ領域をＩ／Ｏアドレス空間にメモリマッピングする。これにより、メインメモリ１２０内のメモリ領域がＩ／Ｏアドレス空間１５０の一部としてＧＰＵ２００からアクセス可能になる。
【００２７】
ＧＰＵ２００がメインメモリ１２０へアクセスする際に使用する参照先アドレスは、Ｉ／Ｏアドレス空間１５０の先頭アドレスをベースアドレスとするオフセットであり、実効アドレス空間１４０の実効アドレスではない。グラフィックスライブラリ３００は、Ｉ／Ｏアドレス空間１５０のベースアドレスを管理するとともに、実効アドレス空間１４０を参照する際の実効アドレスを、Ｉ／Ｏアドレス空間１５０を参照する際のオフセットに変換する関数を提供する。
【００２８】
グラフィックスライブラリ３００は、実効アドレス空間１４０からＩ／Ｏアドレス空間１５０へのメモリマッピングを管理し、アプリケーションがメインメモリ１２０内で確保した連続領域がＧＰＵ２００からも同じような連続領域に見えることを保証する。これにより、実効アドレス空間１４０において実効アドレスで参照されるデータをＩ／Ｏアドレス空間１５０においてベースアドレスに対するオフセットを指定することで読み出すことが可能となる。もっとも、実効アドレス空間１４０およびＩ／Ｏアドレス空間１５０はともに仮想的なメモリ空間であるから、物理メモリとしては連続している必要はない。
【００２９】
以下、図３Ａ〜図３Ｃを参照して、テクスチャをメインメモリ１２０および／またはローカルメモリ２２０に配置した場合にテクスチャの転送効率がどのように変わるか説明する。ここでは、テクスチャの例で説明するが、テクスチャ以外のグラフィックス演算に必要なデータを配置する場合にも同様のことが当てはまる。
【００３０】
図３Ａは、テクスチャをローカルメモリ２２０側に配置した構成を示す。メインメモリ１２０に格納されたテクスチャ１４は、ローカルメモリ２２０にあらかじめＤＭＡ転送される。ＧＰＵ２００は、ローカルメモリ２２０にＤＭＡ転送されたテクスチャ２４を読み出してグラフィックス演算に利用する。一方、ＧＰＵ２００は、ローカルメモリ２２０のフレームバッファ２０に対してピクセルデータ２５を読み書きする。
【００３１】
この構成では、ＧＰＵ２００とローカルメモリ２２０の間のバス２２２は、ピクセルデータ２５の読み書きとテクスチャ２４の読み取りの両方に用いられ、バスの帯域がリードとライトの双方向で消費されることになるから、テクスチャの転送速度が低下し、グラフィックス演算の全体の処理効率が落ちる。
【００３２】
図３Ｂは、テクスチャをメインメモリ１２０側に配置した構成を示す。メインメモリ１２０にテクスチャ１４が格納されており、テクスチャ１４が格納された領域は、ＧＰＵ２００からアクセス可能にＩ／Ｏアドレス空間にメモリマッピングされている。ＧＰＵ２００はＩＯＩＦ１１０を介してメインメモリ１２０内のテクスチャ１４を読み取り、テクスチャマッピングに利用する。一方、ＧＰＵ２００はローカルメモリ２２０のフレームバッファ２０に対してピクセルデータ２５を読み書きする。
【００３３】
この構成では、テクスチャ１４の読み取りはＩＯＩＦ１１０の帯域を使って行われ、ピクセルデータ２５の読み書きはバス２２２の帯域を使って行われる。図３Ａの構成と比べた場合、バス２２２の帯域はピクセルデータ２５の読み書きに使われるだけであり、テクスチャの読み取りはバス２２２に負担をかけない。テクスチャ１４はＩＯＩＦ１１０の帯域を使って転送されるから、ＧＰＵ２００がローカルメモリ２２０のフレームバッファ２０にピクセルデータ２５を書き込んでいる間も、テクスチャ１４の転送速度が低下することはない。
【００３４】
図３Ｃは、テクスチャをメインメモリ１２０とローカルメモリ２２０に分散配置した構成を示す。テクスチャのファイルが複数枚ある場合に、メインメモリ１２０に一部の枚数のテクスチャ１４が格納され、ローカルメモリ２２０に残りの枚数のテクスチャ２４が格納される。
【００３５】
ＩＯＩＦ１１０の帯域幅はバス２２２の帯域幅と同程度に大きいが、ＧＰＵ２００がＩＯＩＦ１１０経由でメインメモリ１２０内のテクスチャ１４を読み取る場合は、ＣＰＵ１００側の処理が介在するため、ＧＰＵ２００がバス２２２経由でローカルメモリ２２０から直接テクスチャ２４を読み取る場合よりもレーテンシーが長くなる。一方、ＧＰＵ２００がローカルメモリ２２０からテクスチャ２４を読み取る場合は、ピクセルデータ２５の読み書きと競合するため、バス２２２の帯域幅が圧迫され、転送速度が低下することがある。そこで、テクスチャをメインメモリ１２０とローカルメモリ２２０に分散させて格納しておくことにより、テクスチャの読み取り速度を最適化することが可能となる。
【００３６】
図４は、メインメモリ１２０に配置されるテクスチャの枚数を変化させた場合におけるテクスチャの転送速度を示す図である。ここでは、８枚のテクスチャを用いて描画処理を行うサンプルプログラムを用いて実験し、メインメモリ１２０とローカルメモリ２２０に配置されるテクスチャの枚数を変えながら描画時間を計測する。サンプルプログラムでは、８枚のテクスチャの平均値を求めて各ポリゴンにテクスチャマッピングする。８枚のテクスチャの総データ量を測定された描画時間で割ることで全テクスチャの転送速度が求められる。
【００３７】
同図には、メインメモリ１２０に配置されるテクスチャの枚数を０〜８の間で変化させて描画処理を実行したときの全テクスチャの転送速度（単位はギガバイト／秒）が示されている。メインメモリ１２０に格納されない残りのテクスチャはあらかじめローカルメモリ２２０に転送される。メインメモリ１２０に格納するテクスチャの枚数を増やしていくにつれて転送速度が上昇し、５枚のテクスチャをメインメモリ１２０に配置した場合に転送速度が最大になる。これは、メインメモリ１２０に記憶されたテクスチャの読み込みはＩＯＩＦ１１０の帯域幅を利用して行われ、ローカルメモリ２２０のバス２２２の輻輳を避けることができるからである。しかし、６枚以上のテクスチャをメインメモリ１２０に配置すると、転送速度が逆に低下していく。これは、ＩＯＩＦ１１０の帯域がボトルネックとなり、また、ローカルメモリ２２０からデータを読み出すときのレーテンシーによって描画時間が長くなるためである。なお、この結果は、負荷の状況によって変化する。
【００３８】
この実験結果にもとづいて、５枚のテクスチャをメインメモリ１２０に配置し、３枚のテクスチャをローカルメモリ２２０に配置することで、最適な転送速度を実現することができる。プログラマは、このようなサンプルプログラムを用いて実験することで、メインメモリ１２０とローカルメモリ２２０に格納するテクスチャの最適な配分をあらかじめ決定する。グラフィックスライブラリ３００は、メインメモリ１２０からローカルメモリ２２０へデータを転送するための関数を提供しており、プログラマは、その関数を用いて、テクスチャの配置をプログラムする。
【００３９】
また、別のサンプルプログラムの例として、ビデオテクスチャの処理プログラムを用いることもできる。ビデオテクスチャとは、動画のフレームをテクスチャとして画面の一部に貼り付けたものである。このビデオテクスチャのサンプルプログラムでは、ＣＰＵ１００が実行するビデオコーデック（codec）で生成された動画のフレームをテクスチャとして用いるため、テクスチャをあらかじめローカルメモリ２２０に格納しておくことはできない。ビデオコーデックによりメインメモリ１２０に生成される動画フレームをＧＰＵ２００が直接読み出すか、メインメモリ１２０に生成された動画フレームをいったんローカルメモリ２２０にフレーム毎に転送するしかない。
【００４０】
ビデオテクスチャのサンプルプログラムでは、メインメモリ１２０に生成された動画フレームをＧＰＵ２００がＩＯＩＦ１１０経由で読み込み、テクスチャマッピングに利用する場合の描画時間を計測することができる。また、動画フレームをフレーム毎にメインメモリ１２０からローカルメモリ２２０へＩＯＩＦ１１０を介して転送した上で、ＧＰＵ２００がローカルメモリ２２０からバス２２２経由で動画のフレームを読み込み、テクスチャマッピングに利用する場合の描画時間を計測することができる。
【００４１】
動画フレームをテクスチャとしてメインメモリ１２０に格納し、メインメモリ１２０から直接テクスチャマッピングする場合、ＧＰＵ２００によるローカルメモリ２２０に対するアクセスはピクセルデータの書き込みだけになるため、ローカルメモリ２２０に対して発生するアクセス負荷が減る。これに対して、ローカルメモリ２２０に動画フレームを転送してローカルメモリ２２０から動画フレームを読み出してテクスチャマッピングする場合、ローカルメモリ２２０からのテクスチャの読み込みとローカルメモリ２２０へのピクセルデータの書き込みの両方向のアクセスが発生するため、バス２２２の輻輳により、テクスチャの転送速度が低下する。
【００４２】
プログラマは、実際のアプリケーションに近いサンプルプログラムを用いてシミュレーションを行い、テクスチャがメインメモリ１２０および／またはローカルメモリ２２０に最適に配置されるようにアプリケーションをプログラミングする。
【００４３】
複数のテクスチャをテクスチャマッピングに利用する場合、テクスチャによって参照される頻度が異なることもある。ＧＰＵ２００からの参照頻度の高いテクスチャは、ＧＰＵ２００から高速にアクセス可能なローカルメモリ２２０に配置し、ＧＰＵ２００からの参照頻度の低いテクスチャはメインメモリ１２０に配置することで転送効率の調整を図ることができる。また、メインメモリ１２０の容量に比べてローカルメモリ２２０の容量が小さい場合、サイズの小さいテクスチャをローカルメモリ２２０に配置し、サイズの大きいテクスチャをメインメモリ１２０に配置してもよい。
【００４４】
あらかじめ用意されたテクスチャを利用する場合はテクスチャに対して書き込みが発生せず、テクスチャは読み取り専用となるから、メインメモリ１２０に配置してＧＰＵ２００から読み出すことがグラフィックス処理全体の効率化につながる。しかしながら、ＣＰＵ１００やＧＰＵ２００がテクスチャを生成する場合は、テクスチャを生成するＣＰＵ１００やＧＰＵ２００が直接読み書きするメモリにテクスチャを格納するのが効率的である。たとえば、パーリン（Perlin）ノイズで生成されるテクスチャのようなプロシージャルテクスチャ（procedual texture）では、ＣＰＵ１００が計算によりテクスチャを生成するため、ＣＰＵ１００が直接読み書き可能なメインメモリ１２０にテクスチャを格納するのが効率的である。
【００４５】
一方、描画テクスチャ（rendered texture）と呼ばれるように、ＧＰＵ２００がフレームバッファ２０に描画したフレームをテクスチャとして用いる場合は、ＧＰＵ２００が直接読み書きできるローカルメモリ２２０にテクスチャを格納するのが効率的である。
【００４６】
このように、テクスチャに対して読み書きが発生する場合は、その読み書きの主体がＣＰＵ１００である場合は、メインメモリ１２０にテクスチャを格納し、読み書きの主体がＧＰＵ２００である場合は、ローカルメモリ２２０にテクスチャを格納するのが処理効率の面で有利である。
【００４７】
同様に、頂点データについても、ＣＰＵ１００が頂点データを生成する場合は、頂点データをメインメモリ１２０に配置するのが効率的であり、ＧＰＵ２００が頂点データを生成する場合は、頂点データをローカルメモリ２２０に配置するのが効率的である。ディスプレイスメントマッピング（displacement mapping）のようにテクスチャマッピングの手法で頂点位置を変位させる場合は、ＧＰＵ２００が頂点データを読み書きするため、頂点データをローカルメモリ２２０側に配置する方が効率的である。
【００４８】
このように、ＧＰＵ２００がメインメモリ１２０にもローカルメモリ２２０にもアクセスできる構成であることを利用して、テクスチャなどのグラフィックス演算に必要なデータをメインメモリ１２０および／またはローカルメモリ２２０に最適に分散配置して、テクスチャの転送速度を高め、グラフィックス処理の効率を上げることができる。
【００４９】
特に、ＧＰＵ２００が大きなサイズのポリゴンを描画するときなど、ローカルメモリ２２０に対してピクセルデータを大量に書き込む場合は、ローカルメモリ２２０に対する書き込みによりバス２２２が占有される。このような場合、メインメモリ１２０にテクスチャを配置して、ＩＯＩＦ１１０を経由してメインメモリ１２０からテクスチャを読み取ってテクスチャマッピングするのが効率的である。
【００５０】
上記の説明では、テクスチャをメインメモリ１２０、ローカルメモリ２２０のいずれかに配置したが、ローカルメモリ２２０に十分な容量がある場合、メインメモリ１２０とローカルメモリ２２０の両方にテクスチャを重複させて配置し、同一テクスチャをメインメモリ１２０とローカルメモリ２２０のどちらからでも読み取れるように構成してもよい。この構成によれば、ローカルメモリ２２０に対する書き込みアクセスが多発する状況では、メインメモリ１２０からテクスチャを読み取り、ローカルメモリ２２０に対する書き込みアクセスが少ない状況では、ローカルメモリ２２０からテクスチャを読み取るなど、ローカルメモリ２２０のバス２２２の輻輳状態に応じて、メインメモリ１２０とローカルメモリ２２０の間でテクスチャの読み取り先を切り替えることが可能である。シミュレーションなどによってテクスチャの最適な配置を決めることなく、アプリケーションの実行過程において、テクスチャの読み取り先をメインメモリ１２０とローカルメモリ２２０の間で動的に切り替えて転送効率を最適化することができるという利点がある。
【００５１】
図５は、グラフィックスライブラリ３００が提供する機能を説明する図である。グラフィックスライブラリ３００は、メモリ管理機能１６２、データ配置機能１６４、データ転送機能１６６などを提供するプログラム部品を１つのファイルにまとめたものである。これらのプログラム部品の機能をアプリケーション３１０から利用するためのアプリケーションプログラムインタフェース（ＡＰＩ）がプログラマに提供されている。
【００５２】
メモリ管理機能１６２は、実効アドレス空間１４０におけるメモリ領域の実効アドレスとサイズの指定を受けて、そのメモリ領域をＩ／Ｏアドレス空間１５０にメモリマッピングする。データ配置機能１６４は、グラフィックス演算に必要なデータの内、メインメモリ１２０に格納すべきものを実効アドレス空間１４０のメモリ領域に格納する。データ転送機能１６６は、グラフィックス演算に必要なデータの内、メインメモリ１２０に配置せずに、ローカルメモリ２２０に配置すべきものをメインメモリ１２０から読み出し、ローカルメモリ２２０に転送する。
【００５３】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【００５４】
実施の形態では、ポリゴン表面にテクスチャをマッピングするテクスチャマッピングを説明したが、ポリゴン表面にテクスチャ以外のデータをマッピングしてもよい。たとえば、法線ベクトルをマッピングするバンプマッピングの場合、法線ベクトルを格納した法線マップがテクスチャの代わりに用いられる。テクスチャ以外のマッピングデータについても実施の形態と同様に、メインメモリ１２０とローカルメモリ２２０に分散配置して、転送速度の効率化を図ることができることは言うまでもない。
【００５５】
ＩＯＩＦ１１０経由でメインメモリ１２０にアクセスするときのレーテンシーが長いため、ＣＰＵ１００のキャッシュメモリにメインメモリ１２０のデータをキャッシュすることでレーテンシーを短くすることができる。特にテクスチャの読み込みのために、ＣＰＵ１００にはテクスチャをキャッシュするためのテクスチャキャッシュが設けられてもよい。テクスチャキャッシュがＣＰＵ１００に設けられていることから、より積極的にテクスチャをメインメモリ１２０に配置することで、ＩＯＩＦ１１０の帯域を活用した転送効率の改善を達成することができるようになる。
【図面の簡単な説明】
【００５６】
【図１】実施の形態に係るマルチプロセッサシステムの構成図である。
【図２】実効アドレス空間とＩ／Ｏアドレス空間の関係を説明する図である。
【図３Ａ】テクスチャをローカルメモリ側に配置した構成を示す図である。
【図３Ｂ】テクスチャをメインメモリ側に配置した構成を示す図である。
【図３Ｃ】テクスチャをメインメモリとローカルメモリに分散配置した構成を示す図である。
【図４】メインメモリに配置されるテクスチャの枚数を変化させた場合におけるテクスチャの転送速度を示す図である。
【図５】グラフィックスライブラリが提供する機能を説明する図である。
【符号の説明】
【００５７】
１０  コマンドバッファ、  １２、２２  ジオメトリデータ、  １４、２４  テクスチャ、  １６、２６  シェーダプログラム、  ２０  フレームバッファ、  １００  ＣＰＵ、  １１０  ＩＯＩＦ、  １２０  メインメモリ、  １２２  バス、  １４０  実効アドレス空間、  １５０  Ｉ／Ｏアドレス空間、  １６２  メモリ管理機能、  １６４  データ配置機能、  １６６  データ転送機能、  ２００  ＧＰＵ、  ２２０  ローカルメモリ、  ２２２  バス、  ３００  グラフィックスライブラリ、  ３１０  アプリケーション。
【図１】
0004493626.tif 000002
【図２】
0004493626.tif 000003
【図３Ａ】
0004493626.tif 000004
【図３Ｂ】
0004493626.tif 000005
【図３Ｃ】
0004493626.tif 000006
【図４】
0004493626.tif 000007
【図５】
0004493626.tif 000008