(57)【特許請求の範囲】
【請求項１】
アウトオブオーダー方式およびインオーダー方式のいずれによる命令実行も可能なメインプロセッサと、
入出力インタフェースを介して前記メインプロセッサに接続された第１のグラフィックスプロセッサと、
外部接続用インタフェースを介して前記第１のグラフィックスプロセッサに接続された、インオーダー方式で命令を実行する第２のグラフィックスプロセッサとを含み、
前記第１のグラフィックスプロセッサ内に、前記メインプロセッサが前記外部接続用インタフェースを経由して前記第２のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、
前記第１のグラフィックスプロセッサは、前記メインプロセッサと前記第１のグラフィックスプロセッサ内のプロセッサコアの間で通信されるデータと、前記メインプロセッサと前記中継インタフェースの間で通信されるデータとを分岐させる調停部をさらに含み、
前記メインプロセッサは、前記第１のグラフィックスプロセッサ内の前記中継インタフェースを介して前記第２のグラフィックスプロセッサとデータ通信を行う際、前記中継インタフェースから送られる前記データ通信のタイミングを通知するための信号の受信を待ってから、前記データ通信を行うことを特徴とするマルチグラフィックスプロセッサシステム。
【請求項２】
前記第１のグラフィックスプロセッサ内の前記中継インタフェースに、前記メインプロセッサが前記第２のグラフィックスプロセッサに対してデータを書き込むための書き込みバッファが設けられ、前記書き込みバッファに空きが生じた場合に、バッファ空き通知信号が前記メインプロセッサに通知され、前記メインプロセッサは前記バッファ空き通知信号の受信を待ってから、前記書き込みバッファにデータを書き込むことを特徴とする請求項１に記載のマルチグラフィックスプロセッサシステム。
【請求項３】
前記書き込みバッファは、前記メインプロセッサが前記第２のグラフィックスプロセッサに対してインオーダーで発行する書き込み命令によって書き込まれるべきデータを前記書き込み命令の発行順にキューイングし、キューイングされたデータをＦＩＦＯ順で取り出して前記第２のグラフィックスプロセッサに供給するＦＩＦＯキューであることを特徴とする請求項２に記載のマルチグラフィックスプロセッサシステム。
【請求項４】
前記第１のグラフィックスプロセッサ内の前記中継インタフェースに、前記メインプロセッサが前記第２のグラフィックスプロセッサからデータを読み出すための読み出しバッファが設けられ、前記読み出しバッファが一杯になった場合に、バッファフル通知信号が前記メインプロセッサに通知され、前記メインプロセッサは前記バッファフル通知信号の受信を待ってから、前記読み出しバッファに蓄積されたデータを読み出すことを特徴とする請求項１から３のいずれかに記載のマルチグラフィックスプロセッサシステム。
【請求項５】
前記読み出しバッファは、前記メインプロセッサが前記第２のグラフィックスプロセッサに対してアウトオブオーダーで発行する読み出し命令を受けて前記メインプロセッサから読み出されたデータをダブルバッファ方式でバッファリングし、バッファリングされたデータが前記メインプロセッサからアウトオブオーダーで読み出されるダブルバッファであることを特徴とする請求項４に記載のマルチグラフィックスプロセッサシステム。
【請求項６】
前記第２のグラフィックスプロセッサは、プロセッサコアとビデオメモリを１つのチップ上に集積したメモリ混載型プロセッサチップであることを特徴とする請求項１から５のいずれかに記載のマルチグラフィックスプロセッサシステム。
【請求項７】
前記第１のグラフィックスプロセッサは、フレームバッファとバス結合したプロセッサコアを含むことを特徴とする請求項１から６のいずれかに記載のマルチグラフィックスプロセッサシステム。
【請求項８】
入出力インタフェースを介してアウトオブオーダー方式およびインオーダー方式のいずれによる命令実行も可能なメインプロセッサに接続された第１のグラフィックスプロセッサと、
外部接続用インタフェースを介して前記第１のグラフィックスプロセッサに接続された、インオーダー方式で命令を実行する第２のグラフィックスプロセッサとを含み、
前記第１のグラフィックスプロセッサ内に、前記メインプロセッサが前記外部接続用インタフェースを経由して前記第２のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、
前記第１のグラフィックスプロセッサは、前記メインプロセッサと前記第１のグラフィックスプロセッサ内のプロセッサコアの間で通信されるデータと、前記メインプロセッサと前記中継インタフェースの間で通信されるデータとを分岐させる調停部をさらに含み、
前記メインプロセッサが前記第１のグラフィックスプロセッサ内の前記中継インタフェースを介して前記第２のグラフィックスプロセッサとデータ通信を開始する前に、前記中継インタフェースから送られる前記データ通信のタイミングを通知するための信号を前記メインプロセッサに送信することを特徴とするマルチグラフィックスプロセッサシステム。
【請求項９】
プロセッサコアと、
アウトオブオーダー方式およびインオーダー方式のいずれによる命令実行も可能なメインプロセッサと接続するための入出力インタフェースと、
インオーダー方式で命令を実行する他のグラフィックスプロセッサと接続するための外部接続用インタフェースとを含み、
前記メインプロセッサが前記外部接続用インタフェースを経由して前記他のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、
前記メインプロセッサと前記プロセッサコアの間で通信されるデータと、前記メインプロセッサと前記中継インタフェースの間で通信されるデータとを分岐させる調停部をさらに含み、
前記メインプロセッサが前記中継インタフェースを介して前記他のグラフィックスプロセッサとデータ通信を開始する前に、前記データ通信のタイミングを通知するための信号を前記中継インタフェースから前記メインプロセッサに送信することを特徴とするグラフィックスプロセッサ。
【請求項１０】
アウトオブオーダー方式およびインオーダー方式のいずれによる命令実行も可能なメインプロセッサの入出力インタフェースに第１のグラフィックスプロセッサが接続され、前記第１のグラフィックスプロセッサの外部接続用インタフェースにインオーダー方式で命令を実行する第２のグラフィックスプロセッサが接続されたマルチグラフィックスプロセッサシステムにおけるデータ転送方法であって、
前記第１のグラフィックスプロセッサ内に、前記メインプロセッサが前記外部接続用インタフェースを経由して前記第２のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、
前記第１のグラフィックスプロセッサは、前記メインプロセッサと前記第１のグラフィックスプロセッサ内のプロセッサコアの間で通信されるデータと、前記メインプロセッサと前記中継インタフェースの間で通信されるデータとを分岐させる調停部を含み、
前記メインプロセッサは、前記第１のグラフィックスプロセッサ内に設けられた前記中継インタフェースを介して前記第２のグラフィックスプロセッサとデータ通信を行う際、前記中継インタフェース内の前記データ通信用に設けられたバッファから前記データ通信のタイミングを通知するための信号が発信されるのを待ってから、前記データ通信を行うことを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチプロセッサシステム、特に描画データを演算処理するマルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法に関する。
【背景技術】
【０００２】
パーソナルコンピュータやゲーム専用機において、高品質な３次元コンピュータグラフィックスを用いたゲームやシミュレーションなどのアプリケーションを実行したり、実写とコンピュータグラフィックスを融合させた映像コンテンツの再生を行うなど、高画質のグラフィックスの利用が広がっている。
【０００３】
パーソナルコンピュータやゲーム専用機に搭載されるグラフィックスチップの性能が描画品質を左右するため、メーカー各社は、さらなる性能を競って新世代のグラフィックスチップの開発に力を注いでおり、グラフィックスチップをめぐる開発競争は激化している。また、高度なグラフィックスは、ハードウエア技術のみならず、ソフトウエア技術が融合することにより実現される。グラフィックスチップのもつ高性能の描画処理機能をソフトウエア技術を駆使して有効に活用することが描画品質を高める上で重要である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
グラフィックスチップの開発競争が激しい中、高度な描画処理機能を採り入れたグラフィックスチップが次々に開発され、グラフィックスシステムの将来的な発展性や拡張性が確保されている。その一方で、グラフィックスシステムの発展性を確保しつつ、旧世代のプログラミング言語との互換性をもたせたり、さまざまなビデオ出力フォーマットやプロトコルに対応するといった柔軟性もグラフィックスチップの開発には求められている。
【０００５】
柔軟性や拡張性をもたせるために複数のグラフィックスチップを含むマルチグラフィックスプロセッサシステムが提供され、ＣＰＵに接続されて用いられることがある。このようなマルチグラフィックスプロセッサシステムにおいては、ＣＰＵが複数のグラフィックスチップとデータのやりとりをすることになり、データ通信の効率化を図ることがシステムの処理性能を向上させる上で重要となる。
【０００６】
ほとんどの汎用プロセッサは、アウトオブオーダー（順不同；out of order）で命令を実行することができる。すなわち、互いに依存関係がない複数の命令は、与えられたプログラムコードにおける順序通りには実行されず、より効率的な順序で実行される。一方、グラフィックスプロセッサには、アウトオブオーダーの命令実行モードをサポートせず、インオーダー（順序通り；in order）の命令実行を前提とするアーキテクチャが採用されているものもある。汎用プロセッサとグラフィックスプロセッサが入出力インタフェースを介して互いに接続され、両者の間でデータの読み書きがなされる場合、データ転送の効率を犠牲にすることなく、このような命令実行モードの違いを吸収する必要が生じる。
【０００７】
本発明はこうした課題に鑑みてなされたものであり、その目的は、各種の環境に対応できる柔軟性のあるマルチグラフィックスプロセッサシステムを提供し、描画処理の効率化を図ることにある。また、別の目的は、入出力インタフェースを介して接続されたプロセッサ間でデータ転送の効率化を図ることにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様のマルチプロセッサシステムは、アウトオブオーダーまたはインオーダーで命令を処理可能な汎用プロセッサユニットと、インオーダーで命令を処理する専用プロセッサユニットと、前記汎用プロセッサユニットと前記専用プロセッサユニットとを互いに通信可能に接続するインタフェースユニットとを含む。前記インタフェースユニットは、前記汎用プロセッサユニットが前記専用プロセッサユニットに対してインオーダーで発行する書き込み命令によって書き込まれるべきデータを前記書き込み命令の発行順にキューイングし、キューイングされたデータをＦＩＦＯ順で取り出して前記専用プロセッサユニットに供給するＦＩＦＯキューと、前記汎用プロセッサユニットが前記専用プロセッサユニットに対してアウトオブオーダーで発行する読み出し命令を受けて前記専用プロセッサユニットから読み出されたデータをダブルバッファ方式でバッファリングし、バッファリングされたデータが前記汎用プロセッサユニットからアウトオブオーダーで読み出されるダブルバッファとを含む。前記汎用プロセッサユニット内に前記インタフェースユニットとの間でデータを受け渡しするための中間バッファを設け、前記汎用プロセッサユニットは、インオーダーで発行した前記書き込み命令が前記中間バッファにバッファされたことを通知するアクノレッジ信号を受け取り次第、前記書き込み命令によって書き込まれるべきデータを前記中間バッファに転送してもよい。
【０００９】
本発明の別の態様は、マルチグラフィックスプロセッサシステムである。このマルチグラフィックスプロセッサシステムは、メインプロセッサと、入出力インタフェースを介して前記メインプロセッサに接続された第１のグラフィックスプロセッサと、外部接続用インタフェースを介して前記第１のグラフィックスプロセッサに接続された第２のグラフィックスプロセッサとを含む。前記第１のグラフィックスプロセッサ内に、前記メインプロセッサが前記外部接続用インタフェースを経由して前記第２のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、前記メインプロセッサは、前記第１のグラフィックスプロセッサ内の前記中継インタフェースを介して前記第２のグラフィックスプロセッサとデータ通信を行う際、前記データ通信のタイミングを通知するための信号の受信を待ってから、前記データ通信を行う。
【００１０】
この態様によると、メインプロセッサからのデータ通信のリクエストが第１のグラフィックスプロセッサ内のバッファに滞留して内部バスを圧迫するのを避けることができる。
【００１１】
前記第１のグラフィックスプロセッサ内の前記中継インタフェースに、前記メインプロセッサが前記第２のグラフィックスプロセッサに対してデータを書き込むための書き込みバッファが設けられ、前記書き込みバッファに空きが生じた場合に、バッファ空き通知信号が前記メインプロセッサに通知され、前記メインプロセッサは前記バッファ空き通知信号の受信を待ってから、前記書き込みバッファにデータを書き込んでもよい。
【００１２】
前記第１のグラフィックスプロセッサ内の前記中継インタフェースに、前記メインプロセッサが前記第２のグラフィックスプロセッサからデータを読み出すための読み出しバッファが設けられ、前記読み出しバッファが一杯になった場合に、バッファフル通知信号が前記メインプロセッサに通知され、前記メインプロセッサは前記バッファフル通知信号の受信を待ってから、前記読み出しバッファに蓄積されたデータを読み出してもよい。
【００１３】
前記第２のグラフィックスプロセッサは、プロセッサコアとビデオメモリを１つのチップ上に集積したメモリ混載型プロセッサチップであってもよい。これによれば、第２のグラフィックスプロセッサにおいて、メモリへの高速なアクセスが可能であり、メモリの読み書きが頻繁になされる処理を高速に行い、その処理結果を第１のグラフィックスプロセッサに供給することができる。
【００１４】
前記第１のグラフィックスプロセッサは、フレームバッファとバス結合したプロセッサコアを含んでもよい。これによれば、第１のグラフィックスプロセッサは、第２のグラフィックスプロセッサから描画データを受け取り、容量の大きいフレームバッファにいったん記憶し、外部のメモリに記憶された描画データに対して、さらに描画処理を施すことができる。
【００１５】
本発明のさらに別の態様もまた、マルチグラフィックスプロセッサシステムである。このマルチグラフィックスプロセッサシステムは、入出力インタフェースを介してメインプロセッサに接続された第１のグラフィックスプロセッサと、外部接続用インタフェースを介して前記第１のグラフィックスプロセッサに接続された第２のグラフィックスプロセッサとを含む。前記第１のグラフィックスプロセッサ内に、前記メインプロセッサが前記外部接続用インタフェースを経由して前記第２のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、前記メインプロセッサが前記第１のグラフィックスプロセッサ内の前記中継インタフェースを介して前記第２のグラフィックスプロセッサとデータ通信を開始する前に、前記データ通信のタイミングを通知するための信号を前記メインプロセッサに送信する。
【００１６】
本発明のさらに別の態様は、グラフィックスプロセッサである。このグラフィックスプロセッサは、メインプロセッサと接続するための入出力インタフェースと、他のグラフィックスプロセッサと接続するための外部接続用インタフェースとを含む。前記メインプロセッサが前記外部接続用インタフェースを経由して前記他のグラフィックスプロセッサと通信するための中継インタフェースが設けられ、前記メインプロセッサが前記第１のグラフィックスプロセッサ内の前記中継インタフェースを介して前記他のグラフィックスプロセッサとデータ通信を開始する前に、前記データ通信のタイミングを通知するための信号を前記メインプロセッサに送信する。
【００１７】
本発明のさらに別の態様は、データ転送方法である。この方法は、汎用プロセッサユニットと専用プロセッサユニットが相互に通信可能に接続されたマルチプロセッサシステムにおけるデータ転送方法であって、前記汎用プロセッサユニットにより前記専用プロセッサユニットに対してインオーダーで書き込み命令が発行された場合に、前記書き込み命令によって書き込まれるべきデータを前記書き込み命令の発行順にＦＩＦＯキューにキューイングしてＦＩＦＯ順で前記専用プロセッサユニットに供給するステップと、前記汎用プロセッサユニットにより前記専用プロセッサユニットに対してアウトオブオーダーで読み出し命令が発行された場合に、前記読み出し命令によって前記専用プロセッサユニットから読み出されたデータをダブルバッファにバッファリングするステップと、前記汎用プロセッサユニットが前記ダブルバッファにバッファリングされたデータをアウトオブオーダーで読み出すステップとを含む。
【００１８】
本発明のさらに別の態様もまた、データ転送方法である。この方法は、メインプロセッサの入出力インタフェースに第１のグラフィックスプロセッサが接続され、前記第１のグラフィックスプロセッサの外部接続用インタフェースに第２のグラフィックスプロセッサが接続されたマルチグラフィックスプロセッサシステムにおけるデータ転送方法であって、前記メインプロセッサは、前記第１のグラフィックスプロセッサ内に設けられた中継インタフェースを介して前記第２のグラフィックスプロセッサとデータ通信を行う際、前記第１のグラフィックスプロセッサ内の前記データ通信用に設けられたバッファから前記データ通信のタイミングを通知するための信号が発信されるのを待ってから、前記データ通信を行う。
【００１９】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、プロセッサ、装置、システム、コンピュータプログラム、プログラム製品、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００２０】
本発明によれば、柔軟性に富んだマルチグラフィックスプロセッサシステムを提供することができる。また、マルチプロセッサシステムにおいてプロセッサ間の効率の良いデータ転送を実現することができる。
【発明を実施するための最良の形態】
【００２１】
実施の形態１
実施の形態１において、汎用プロセッサとグラフィックスプロセッサが入出力インタフェースを介して相互に通信可能に接続されたマルチプロセッサシステムにおいて、汎用プロセッサがグラフィックスプロセッサに対してリード（読み出し；read）／ライト（書き込み；write）命令を発行するときのデータ転送の仕組みを説明する。
【００２２】
図１および図２において、汎用プロセッサシステム５００の構成を説明する。図３Ａ〜３Ｄを参照して、汎用プロセッサシステム５００がターゲットデバイス７１０に対してライト命令を発行するときの処理の流れを説明する。図４Ａ〜４Ｃを参照して、汎用プロセッサシステム５００がターゲットデバイス７１０に対してリード命令を発行するときの処理の流れを説明する。図５〜図７を参照して、汎用プロセッサシステム５００とグラフィックスプロセッシングユニット（ＧＰＵ）７００を接続するインタフェースにおいて命令実行方式の違いを吸収する機構を説明する。
【００２３】
図１は、実施の形態１に係る汎用プロセッサシステム５００の構成図である。汎用プロセッサシステム５００は、マルチプロセッサシステムであり、１つのプロセッシングエレメント（ＰＥ）５２０と、複数のサブプロセッシングエレメント（ＳＰＥ）５３０ａ、５３０ｂ、…、５３０ｎ（以下、これらを総称するときは添え字ａ、ｂなどを省略して符号５３０で代表する）と、メインメモリ５１０と、Ｉ／Ｏコントローラ５６０とがバス５５０で結合されている。汎用プロセッサシステム５００は、これらの構成を一つのパッケージに集積したマルチコアプロセッサシステムであってもよい。
【００２４】
ＰＥ５２０は、汎用プロセッサシステム５００全体を統括的に制御する。複数のＳＰＥ５３０は非同期で動作する。汎用プロセッサシステム５００は、入出力インタフェース（以下、「ＩＯＩＦ」と呼ぶ）５８０を介して外部デバイスと接続可能であり、Ｉ／Ｏコントローラ５６０は、ＰＥ５２０、ＳＰＥ５３０と外部デバイスとの間のデータの読み書きを制御する。
【００２５】
図２は、ＳＰＥ５３０の構成図である。ＳＰＥ５３０は、プロセッサユニット５３２と、ローカルメモリ５３４と、ＤＭＡコントローラ５３６とを含む。プロセッサユニット５３２は、ＤＭＡコントローラ５３６にＤＭＡ命令を発行する。ＤＭＡコントローラ５３６の命令制御部５３８は、プロセッサユニット５３２からのＤＭＡ命令を１２８バイト単位のバス上の転送命令に分解し、コマンドキュー５３９にキューイングする。
【００２６】
ＳＰＥ５３０はローカルメモリ５３４を内部にもち、ＤＭＡ転送されるデータはローカルメモリ５３４に設けられたデータバッファ５３５に格納される。命令制御部５３８が外部デバイスにライトコマンドを発行し、ライトＯＫのＡＣＫ（アクノレッジ、acknowledge）信号が外部デバイスから返ってくると、命令制御部５３８は、ローカルメモリ５３４にアクセスしてライトすべきデータを読み出し、ＤＭＡ転送する。また、命令制御部５３８は、外部デバイスからリードコマンドにしたがってＤＭＡ転送されたデータをローカルメモリ５３４のデータバッファ５３５に格納する。
【００２７】
同図では、コマンドキュー５３９にはＤＭＡ転送命令としてコマンド１からコマンド８が格納されており、データバッファ５３５にはそれぞれコマンド１からコマンド８により転送されるデータ１からデータ８が格納される。これらのコマンドは、具体的にはリードコマンドやライトコマンドである。
【００２８】
命令制御部５３８は、命令の実行モードをアウトオブオーダー実行モードあるいはインオーダー実行モードに切り替え設定する実行モード切替部を含む。実行モード切り替えは、レジスタにアウトオブオーダー実行モードまたはインオーダー実行モードを指定するための値を書き込むことでなされる。アウトオブオーダー実行モードでは、コマンドの発行順序に制約されることなく、効率の良い順序でデータが転送され、インオーダー実行モードでは、コマンドの発行順序通りにデータが転送される。
【００２９】
汎用プロセッサシステム５００と外部デバイスを接続するＩＯＩＦ５８０は、上りと下りの２つのチャネルをもち、メモリバスに匹敵する高いバンド幅、たとえば、数十ギガバイト／秒を実現している。また、非同期動作する複数のＳＰＥ５３０からの同時データ転送を実現するために、バス上でのデータパケットの最大サイズは１２８バイトと小さくしている。したがって、１つのパケットによるバスの占有時間は非常に短い。
【００３０】
この短い占有時間内に、ライトコマンドを例に説明すると、ＳＰＥ５３０からのアドレスコマンドの送出、外部デバイスからのＡＣＫの返送、ＳＰＥ５３０からのデータの送出、外部デバイスにおけるデータの受け取りなどを完了することは不可能である。そこで、汎用プロセッサシステム５００は、アドレスコマンドパケットとデータパケットの転送を複数、同時に行うスプリットトランザクション（split transaction）を採用している。以下では、アドレスコマンドパケット、データパケットをそれぞれ単に「コマンド」、「データ」と呼ぶ。
【００３１】
図３Ａ〜３Ｄおよび図４Ａ〜４Ｃを参照して、スプリットトランザクションの基本的な動作を説明する。実際のシステムでは、後に述べるようにＩＯＩＦ５８０などに内部バッファが介在するので、実際のデータ転送はより複雑になるが、ここでは途中のバッファリングは省略して、汎用プロセッサシステム５００とターゲットデバイス７１０間のデータ転送動作を説明する。
【００３２】
図３Ａ〜図３Ｃは、スプリットトランザクションによるライトコマンドの実行過程を説明する図である。ここでは、汎用プロセッサシステム５００内に２つのＳＰＥ５３０ａ、５３０ｂがあり、それぞれがライトコマンドを発行する。第１のＳＰＥ５３０ａのコマンドキュー５３９ａにはコマンド１からコマンド４がキューイングされており、各コマンドで転送すべきデータ１からデータ４がデータバッファ５３５ａに格納されている。第２のＳＰＥ５３０ｂのコマンドキュー５３９ｂにはコマンド５からコマンド８がキューイングされており、各コマンドで転送すべきデータ５からデータ８がデータバッファ５３５ｂに格納されている。各コマンドは、ライトコマンドであり、ライト先のアドレスが格納されている。以下、第１のＳＰＥ５３０ａを「ＳＰＥ０」、第２のＳＰＥ５３０ｂを「ＳＰＥ１」と呼ぶ。
【００３３】
汎用プロセッサシステム５００はＩＯＩＦ５８０を介して２つのターゲットデバイス７１０ａ、７１０ｂを接続している。以下、第１のターゲットデバイス７１０ａを「ターゲットデバイス１」、第２のターゲットデバイス７１０ｂを「ターゲットデバイス２」と呼ぶ。汎用プロセッサシステム５００が送出するコマンドは、コマンドに含まれるアドレスに応じていずれかのターゲットデバイスに送られる。
【００３４】
図３Ａに示すように、ＳＰＥ０のコマンドキュー５３９ａの先頭からコマンド１が、ＳＰＥ１のコマンドキュー５３９ｂの先頭からコマンド５がそれぞれＩＯＩＦ５８０に送出される。コマンド１、コマンド５に含まれるアドレスはともにターゲットデバイス１を指しており、これらのコマンドは、ターゲットデバイス１のコマンドバッファに送られる。
【００３５】
図３Ｂに示すように、ターゲットデバイス１のコマンドバッファにはコマンド１、コマンド５が格納される。ターゲットデバイス１のデータバッファにはそれぞれのコマンドで転送されるデータを保持するだけの空きがあり、ターゲットデバイス１は、コマンド１に対するＡＣＫ１、コマンド５に対するＡＣＫ５をそれぞれＩＯＩＦ５８０を介して汎用プロセッサシステム５００に返信する。
【００３６】
図３Ｃに示すように、ターゲットデバイス１からＡＣＫ１を受け取ったＳＰＥ０は、データバッファ５３５ａからコマンド１に対応するデータ１を読み出して、ＩＯＩＦ５８０に送出する。また、ターゲットデバイス１からＡＣＫ５を受け取ったＳＰＥ１は、データバッファ５３５ｂからコマンド５に対応するデータ５を読み出して、ＩＯＩＦ５８０に送出する。ＩＯＩＦ５８０に送出されたデータ１、データ５はターゲットデバイス１のデータバッファに格納される。
【００３７】
図３Ｄを参照して、スプリットトランザクションの効果を説明する。ＳＰＥ０のコマンドキュー５３９ａから既にコマンド１、コマンド２が送出されており、ターゲットデバイス１のコマンドバッファに到着した。ＳＰＥ０はその後、コマンドキュー５３９ａからコマンド３をＩＯＩＦ５８０に送出した。ターゲットデバイス１はコマンド１に対するＡＣＫ１を既にＳＰＥ０に返送し終わっており、ＡＣＫ１を受け取ったＳＰＥ０は現在、コマンド１に対するデータ１をＩＯＩＦ５８０に送出しているところである。
【００３８】
ところが、ターゲットデバイス１は、コマンド２を受け取ったとき、データバッファに空きがなかったため、すぐにはコマンド２に対してＡＣＫ２を返さなかったとする。このとき、ＳＰＥ０が発行したコマンド２に対するＡＣＫ２の返送を待つことなく、ＳＰＥ１のコマンドキュー５３９ｂからはコマンド５が送出される。ターゲットデバイス２は、その後、データバッファに空きが生じたため、コマンド２に対するＡＣＫ２を返信する。
【００３９】
このように、スプリットトランザクションでは、複数のＳＰＥ５３０がＩＯＩＦ５８０を共有してデータ転送を行う際、あるＳＰＥがＡＣＫ待ちであっても、別のＳＰＥによるデータ転送がブロックされることがない。非同期に動作する複数のＳＰＥ５３０がＩＯＩＦ５８０の帯域を共有しながらコマンドを実行して、複数のターゲットデバイス７１０にデータを書き込むことができるから、ＩＯＩＦ５８０の帯域を最大限に利用してデータ転送効率の向上を図ることができる。
【００４０】
図４Ａ〜図４Ｃは、リードコマンドの場合のスプリットトランザクションの動作を説明する図である。ＳＰＥ０のコマンドキュー５３９ａにはコマンド１からコマンド４がキューイングされており、転送されたデータを格納するデータバッファ５３５ａは空である。ＳＰＥ１のコマンドキュー５３９ｂにはコマンド５からコマンド８がキューイングされており、転送されたデータを格納するデータバッファ５３５ｂは空である。各コマンドは、リードコマンドであり、リード先のアドレスが格納されている。
【００４１】
図４Ａに示すように、ＳＰＥ０のコマンドキュー５３９ａの先頭からコマンド１が、ＳＰＥ１のコマンドキュー５３９ｂの先頭からコマンド５がそれぞれＩＯＩＦ５８０に送出される。コマンド１に含まれるアドレス１はターゲットデバイス１を指しており、ターゲットデバイス１のコマンドバッファに送られる。コマンド５に含まれるアドレス５はターゲットデバイス２を指しており、ターゲットデバイス２のコマンドバッファに送られる。
【００４２】
図４Ｂに示すように、ターゲットデバイス１のコマンドバッファにはコマンド１が格納され、ターゲットデバイス１は、コマンド１に含まれるアドレス１で指定されたデータ１を読み出して、ＩＯＩＦ５８０に送出する。また、ターゲットデバイス２のコマンドバッファにはコマンド５が格納され、ターゲットデバイス２は、コマンド５に含まれるアドレス５で指定されたデータ５を読み出して、ＩＯＩＦ５８０に送出する。
【００４３】
図４Ｃに示すように、ＳＰＥ０はターゲットデバイス１から受け取ったデータ１をデータバッファ５３５ａに格納し、ＳＰＥ１はターゲットデバイス２から受け取ったデータ５をデータバッファ５３５ｂに格納する。
【００４４】
リードコマンドの場合も、ライトコマンドと同様に、スプリットトランザクションにより、あるＳＰＥがリードコマンドに対するデータを待っている間も、別のＳＰＥがリードコマンドを実行することができる。
【００４５】
ＩＯＩＦ５８０は、複数のリクエスタ（ここでは、ＳＰＥ０とＳＰＥ１）と複数のターゲットデバイス（ここでは、ターゲットデバイス１とターゲットデバイス２）間のデータ転送をスプリットトランザクションの仕組みによりサポートしている。たとえば、ＳＰＥ０とターゲットデバイス２の通信と、ＳＰＵ１とターゲットデバイス１の通信を同時に並行して実行することができる。スプリットトランザクションは、複数の通信ペアが同時に並行して通信を実行する場合、一方の通信ペアのデータ通信が何らかの事情で滞っている場合に、他方の通信ペアのデータ通信がブロックされないことを保証している。
【００４６】
ライトコマンドやリードコマンドはバスの帯域に適したパケット単位に分割されて実行される。データ転送の効率化のためには、コマンドパケットを受け取ったターゲットデバイスが、発行されたコマンドパケットの順序に制約されることなく、転送すべきデータが準備され次第、次々に転送することができるアウトオブオーダー通信の仕組みが必要になる。ＩＯＩＦ５８０は、このアウトオブオーダー通信をサポートしている。
【００４７】
アウトオブオーダー通信は、複数のリクエスタと複数のターゲットデバイス間で同時に通信する場合に効率が良い方式であるが、既存のターゲットデバイスの中には、インオーダーで命令を実行するアーキテクチャが採用されているものも多く、そのようなターゲットデバイスにはコマンドとデータをインオーダーで転送する必要がある。リクエスタが、インオーダーで命令を実行することを前提とするターゲットデバイスとの間でデータ転送を行う場合、リクエスタとターゲットデバイス間のインタフェースにバッファを設け、命令の実行方式の違いを吸収する必要がある。
【００４８】
以下、アウトオブオーダー方式、インオーダー方式のいずれによる命令実行も可能な汎用プロセッサユニットと、インオーダー方式でしか命令を実行できないグラフィックスプロセッサユニットとが接続されたマルチプロセッサシステムにおいて、命令実行方式の違いを吸収しつつ、データ転送効率を高める仕組みを説明する。
【００４９】
図５は、汎用プロセッサシステム５００とＧＰＵ（Graphic Processing Unit）７００がＩＯＩＦ５８０を介して接続されたマルチプロセッサシステムの構成図である。汎用プロセッサシステム５００は、アウトオブオーダー方式、インオーダー方式のいずれかのモードに切り替えて命令を実行可能である。一方、ＧＰＵ７００は、インオーダー方式でのみ命令を実行可能であり、汎用プロセッサシステム５００からＧＰＵ７００へ命令を供給する場合、インオーダーで命令を転送する必要がある。
【００５０】
汎用プロセッサシステム５００内にはＩＯＩＦ５８０に対するデータの受け渡しのためにＩ／Ｏバッファ５７０が設けられる。Ｉ／Ｏバッファ５７０内には、各ＳＰＥ５３０から発行されるコマンドを蓄積するコマンドバッファ５７２と、ＧＰＵ７００との間で転送されるデータを蓄積するデータバッファ５７４とが設けられる。
【００５１】
汎用プロセッサシステム５００とＧＰＵ７００の間には、両者の間でやりとりされるデータを中継するためのバッファを備えたインタフェースユニット６００が設けられ、インタフェースユニット６００において、アウトオブオーダー方式とインオーダー方式という命令実行方式の違いを吸収する。汎用プロセッサシステム５００はＩＯＩＦ５８０を介してインタフェースユニット６００と接続され、ＧＰＵ７００はバス５９０を介してインタフェースユニット６００と接続される。
【００５２】
汎用プロセッサシステム５００の各ＳＰＥ５３０は、アウトオブオーダー方式による命令実行を基本とするが、ＧＰＵ７００に対してライトコマンドを実行する場合は、インオーダー方式に切り替える。各ＳＰＥ５３０の命令制御部５３８は、インオーダー方式に切り替えるために、ガーデッド（guarded）転送というモードを指定してコマンドを発行する。
【００５３】
インタフェースユニット６００内には、ライトコマンドとライトコマンドにより書き込まれるべきデータをＦＩＦＯ（First In First Out）順でバッファするためのライトＦＩＦＯ６２０が設けられる。各ＳＰＥ５３０によりインオーダーモードで発行されたコマンドは、Ｉ／Ｏバッファ５７０のコマンドバッファ５７２にいったんバッファリングされた後、ライトＦＩＦＯ６２０に発行順にキューイングされ、ＦＩＦＯ順で取り出されてＧＰＵ７００に供給される。また、ライトコマンドにより書き込まれるべきデータは、Ｉ／Ｏバッファ５７０のデータバッファ５７４にいったんバッファリングされた後、コマンドの発行順と同じ順序でライトＦＩＦＯ６２０にキューイングされ、ＦＩＦＯ順で取り出されてＧＰＵ７００に供給される。
【００５４】
これにより、ＧＰＵ７００は、汎用プロセッサシステム５００からインオーダーでライトコマンドとデータを受け取り、インオーダー方式にしたがってメモリへの書き込みを実行することができる。すなわち、ＧＰＵ７００において、メモリ領域にデータを書き込むためのコマンドの列とデータの列を見た場合、両者の順序が一致しており、コマンド列の順序とは異なる順序でデータ列が供給されることはない。
【００５５】
各ＳＰＥ５３０は、ＧＰＵ７００に対してリードコマンドをインオーダー方式ではなく、アウトオブオーダー方式で実行する。汎用プロセッサシステム５００がＧＰＵ７００に対してコマンドを転送するとき、リードコマンドとライトコマンドで命令実行モードを異ならせる理由は後述する。
【００５６】
インタフェースユニット６００内には、汎用プロセッサシステム５００から転送されたリードコマンドに応じてＧＰＵ７００がプッシュするデータをバッファするためのリードダブルバッファ６１０が設けられる。リードダブルバッファ６１０は、２つのリードバッファ０とリードバッファ１を含むダブルバッファ方式で構成されており、一つのリードバッファがいっぱいになると、他方のリードバッファにデータが蓄積される。ＧＰＵ７００はインオーダー方式でリードコマンドを処理して、読み出したデータをリードダブルバッファ６１０のリードバッファ０またはリードバッファ１に転送する。
【００５７】
汎用プロセッサシステム５００は、リードダブルバッファ６１０内のいっぱいになった方のリードバッファからアウトオブオーダー方式でデータを読み取り、Ｉ／Ｏバッファ５７０内のデータバッファ５７４に格納する。データバッファ５７４に格納されたデータは、リードコマンドを発行したＳＰＥ０またはＳＰＥ１にアウトオブオーダーで供給される。
【００５８】
図６は、図５の構成において、ライトコマンドの実行手順を説明する図である。汎用プロセッサシステム５００がＧＰＵ７００に対してライトコマンドを発行する際、ライト動作をインオーダーで実行するために、メモリマッピングされたＧＰＵ７００のメモリ領域をガーデッド領域（guarded area）に設定し、ライトコマンドにガーデッド属性を指定する。ライトコマンドの実行手順は次のようになる。
【００５９】
（Ａ１）ＳＰＥ０がコマンドキュー５３９ａからコマンド１を取り出し、Ｉ／Ｏバッファ５７０内のコマンドバッファ５７２へコマンド１を転送する。
（Ａ２）Ｉ／Ｏバッファ５７０からＳＰＥ０へコマンド１に対するＡＣＫが返信される。
（Ａ３）ＡＣＫを受け取ったＳＰＥ０がデータバッファ５３５ａからデータ１を取り出し、Ｉ／Ｏバッファ５７０内のデータバッファ５７４に転送する。
（Ａ４）ＳＰＥ０がコマンドキュー５３９ａからコマンド２を取り出し、Ｉ／Ｏバッファ５７０内のコマンドバッファ５７２へコマンドを転送する。
（Ａ５）Ｉ／Ｏバッファ５７０からＳＰＥ０へコマンド２に対するＡＣＫが返信される。
（Ａ６）ＡＣＫを受け取ったＳＰＥ０がデータバッファ５３５ａからデータ２を取り出し、Ｉ／Ｏバッファ５７０内のデータバッファ５７４に転送する。
【００６０】
ＳＰＥ０からはライトコマンドがインオーダーで実行されるため、コマンド１について（Ａ１）コマンド発行、（Ａ２）ＡＣＫ返信、（Ａ３）データ送出の一連の動作が完了するまでは、コマンド２について（Ａ４）〜（Ａ６）の動作は開始されない。より正確に説明すれば、インオーダーモードでは、（Ａ３）においてコマンド１に対するデータ１が転送され、Ｉ／Ｏバッファ５７０からそのデータ転送に対するＡＣＫが返信されるまでは、（Ａ４）以降のコマンド２についての処理を開始することができない。もっとも、スプリットトランザクションを採用しているため、ＳＰＥ１がＧＰＵ７００と行う通信は、ＳＰＥ０がＧＰＵ７００と行う通信からは独立しており、ＳＰＥ０とＧＰＵ７００の間の通信がＡＣＫ待ちであっても、ＳＰＥ１とＧＰＵ７００の間の通信がブロックされることはない。
【００６１】
（Ａ１）〜（Ａ６）で述べたＳＰＥ０とＩ／Ｏバッファ５７０の間のコマンド転送、ＡＣＫ返信、およびデータ転送の一連の通信と並行して、Ｉ／Ｏバッファ５７０とインタフェースユニット６００の間でも同様に、コマンド転送、ＡＣＫ返信、およびデータ転送の一連の通信が以下のように行われる。
【００６２】
（Ｂ１）Ｉ／Ｏバッファ５７０がコマンドバッファ５７２からコマンド１を取り出し、インタフェースユニット６００内のライトＦＩＦＯ６２０へコマンドを転送する。
（Ｂ２）ライトＦＩＦＯ６２０からＩ／Ｏバッファ５７０へコマンド１に対するＡＣＫが返信される。
（Ｂ３）ＡＣＫを受け取ったＩ／Ｏバッファ５７０がデータバッファ５７４からデータ１を取り出し、インタフェースユニット６００内のライトＦＩＦＯ６２０に転送する。
【００６３】
Ｉ／Ｏバッファ５７０内に中間バッファを設けたことで、（Ａ１）〜（Ａ３）で述べたＳＰＥ０とＩ／Ｏバッファ５７０間の通信と、（Ｂ１）〜（Ｂ３）で述べたＩ／Ｏバッファ５７０とインタフェースユニット６００間の通信とを独立して行えるため、ＳＰＥ０はＩＯＩＦ５８０から先の通信の状況に制約されることなく、コマンドを次々に発行することができ、データ転送効率を高めることができる。
【００６４】
仮に、Ｉ／Ｏバッファ５７０内の中間バッファが存在せず、各ＳＰＥ５３０が、インタフェースユニット６００のライトＦＩＦＯ６２０にコマンドが蓄積されたことを知らせるＡＣＫがインタフェースユニット６００から返信されるのを待ってから、次のコマンドを発行するなら、ＩＯＩＦ５８０のレーテンシーのために、次のコマンドの発行が遅延することになる。コマンドの発行に遅延が生じるとＩＯＩＦ５８０の帯域を使い切れず、データ転送効率が低下する。本実施の形態では、ライトコマンドがＩ／Ｏバッファ５７０のコマンドバッファにキューイングされた時点で直近のＩ／Ｏバッファ５７０からＡＣＫを受け取るため、コマンドが発行されてからＡＣＫを受け取るまでの時間が短い。したがって、ライトコマンドにインオーダー方式を採用しても、非常に短いレーテンシーでライトコマンドを次々と発行することができ、データ転送効率が低下することがなく、ＩＯＩＦ５８０の帯域を有効活用することができる。
【００６５】
図７は、図５の構成において、リードコマンドの実行手順を説明する図である。まず、比較のために、リードコマンドをインオーダー方式で実行する手順を説明し、インオーダー方式ではデータ転送効率が低下する問題を指摘する。その後、リードコマンドをアウトオブオーダーで実行することでデータ転送効率を高める仕組みを説明する。
【００６６】
（Ｃ１）ＳＰＥ１がコマンドキュー５３９ｂからコマンド５を取り出し、Ｉ／Ｏバッファ５７０内のコマンドバッファ５７２へコマンド５を転送する。
（Ｃ２）Ｉ／Ｏバッファ５７０からインタフェースユニット６００を経由してＧＰＵ７００にコマンド５が転送され、ＧＰＵ７００がコマンド５に対応するデータ５をインタフェースユニット６００内のリードダブルバッファ６１０に転送する。
（Ｃ３）インタフェースユニット６００内のリードダブルバッファ６１０からＩ／Ｏバッファ５７０内のデータバッファ５７４にデータ５が転送される。
（Ｃ４）Ｉ／Ｏバッファ５７０内のデータバッファ５７４からＳＰＥ１のデータバッファ５３５ｂへデータ５が転送される。
【００６７】
（Ｃ５）ＳＰＥ１がコマンドキュー５３９ｂからコマンド６を取り出し、Ｉ／Ｏバッファ５７０内のコマンドバッファ５７２へコマンド６を転送する。
（Ｃ６）Ｉ／Ｏバッファ５７０からインタフェースユニット６００を経由してＧＰＵ７００にコマンド６が転送され、ＧＰＵ７００がコマンド６に対応するデータ６をインタフェースユニット６００内のリードダブルバッファ６１０に転送する。
（Ｃ７）インタフェースユニット６００内のリードダブルバッファ６１０からＩ／Ｏバッファ５７０内のデータバッファ５７４にデータ６が転送される。
（Ｃ８）Ｉ／Ｏバッファ５７０内のデータバッファ５７４からＳＰＥ１のデータバッファ５３５ｂへデータ６が転送される。
【００６８】
ＳＰＥ１からはリードコマンドがインオーダーで実行されるため、コマンド５について、（Ｃ１）ＳＰＥ１からＩ／Ｏバッファ５７０へのコマンド転送、（Ｃ２）Ｉ／Ｏバッファ５７０からインタフェースユニット６００を経由してＧＰＵ７００へのコマンド転送とＧＰＵ７００からインタフェースユニット６００へのデータ転送、（Ｃ３）インタフェースユニット６００からＩ／Ｏバッファ５７０へのデータ転送、（Ｃ４）Ｉ／Ｏバッファ５７０からＳＰＥ１へのデータ転送という一連の動作が完了するまでは、コマンド２についての（Ｃ５）〜（Ｃ８）の一連の動作を開始することができない。
【００６９】
このように、リードコマンドをインオーダーで実行すると、各ＳＰＥ５３０は発行したリードコマンドに対応したデータを自分自身で受け取ってからでないと、次のリードコマンドを発行できないため、リードコマンドの発行に遅延が生じる。ＩＯＩＦ５８０は外部デバイスを接続するインタフェースであるから、メモリに対するアクセスとは違って、リードコマンドを発行してからデータが転送されてくるまでのレーテンシーは大きく、先のリードコマンドに対するデータの到着を待っていたのでは、リードコマンドによるデータ転送効率が著しく低下し、また、高速なＩＯＩＦ５８０の帯域幅を有効に活用することができない。
【００７０】
汎用プロセッサシステム５００からリードコマンドを転送されたＧＰＵ７００はインオーダーで命令を処理するため、ＧＰＵ７００は、インタフェースユニット６００のリードダブルバッファ６１０にインオーダーでデータを転送することになる。しかしながら、汎用プロセッサシステム５００の各ＳＰＥ５３０は、アウトオブオーダーでリードコマンドを処理するため、発行したリードコマンドの順でデータを読み出す必要はない。そこで、汎用プロセッサシステム５００は、リードダブルバッファ６１０のいずれかのリードバッファがいっぱいになった時点でリードバッファからアウトオブオーダーでデータを読み出すことにする。このようにコマンドの発行順に制約されずに、アウトオブオーダーでリードバッファを読み出すならば、各ＳＰＥ５３０は、先に発行されたリードコマンドに対してデータが転送されるのを待つことなく、次のリードコマンドを発行することができ、リードコマンドの発行が遅延することはない。
【００７１】
以上述べたように、汎用プロセッサシステム５００にインオーダー命令実行を前提としたＧＰＵ７００が接続されたマルチプロセッサシステムにおいて、汎用プロセッサシステム５００からＧＰＵ７００にライトコマンドを転送する場合、インタフェースユニット６００にＦＩＦＯキューを設け、インオーダー方式で発行されるライトコマンドによって書き込まれるべきデータをライトコマンドと同じ順序でＦＩＦＯキューにキューイングし、ＦＩＦＯ順でＧＰＵ７００に転送するように構成した。インオーダー実行方式のため、先に発行されたライトコマンドに対してＡＣＫ信号が返送され、書き込みデータの転送が完了するまでは次のライトコマンドを発行することができないが、ＡＣＫ信号を直近の中間バッファであるＩ／Ｏバッファ５７０から受け取るため、ライトコマンドの発行に大きな遅延は生じない。
【００７２】
また、リードコマンドの場合は、インタフェースユニット６００にダブルバッファを設け、汎用プロセッサシステム５００からリードコマンドの転送を受けたＧＰＵ７００がインオーダーでリードコマンドを実行し、読み出したデータをダブルバッファにインオーダーで転送するようにした。アウトオブオーダー方式でリードコマンドを発行した汎用プロセッサシステム５００は、このダブルバッファからアウトオブオーダーでデータを読み出すため、先に発行されたリードコマンドに対するデータの読み出し完了を待たずに、次のリードコマンドを発行することができ、リードコマンドの発行に遅延が生じることがなく、データ転送効率を高めることができる。
【００７３】
インタフェースユニット６００にライト用にはＦＩＦＯキューを、リード用にはダブルバッファを設けた理由として、さらに次の点を挙げることができる。
【００７４】
まず、ＦＩＦＯキューとダブルバッファの特性の違いを説明すると、バッファのために用意するＳＲＡＭのサイズと転送帯域幅について考えた場合、ダブルバッファよりもＦＩＦＯキューの方が面積効率が良い。また、ダブルバッファの場合は、通常の動作では、片方のバッファがいっぱいになるまではデータが送出されないが、ＦＩＦＯキューでは到着した順にデータが送出される。
【００７５】
汎用プロセッサシステム５００からＧＰＵ７００へ転送されるデータは、描画コマンドやテクスチャデータなどであり、データサイズや転送頻度が頻繁に変化する。このようなサイズや発生頻度が定常的でないデータを転送する場合は、データが到着次第、ＧＰＵ７００へ転送されるＦＩＦＯキューを用いるのが適している。
【００７６】
一方、ＧＰＵ７００から汎用プロセッサシステム５００へ転送されるデータは、描画された画像データであることが多いので、あらかじめデータサイズが決まっており、また、転送頻度も一定である。このようなサイズや発生頻度が定常的なデータを転送する場合は、一定量のデータがバッファされるのを待ってからデータ転送が起こるダブルバッファを用いても効率良くデータ転送することができる。転送開始時にデータの大きさが確定するため、ダブルバッファにデータを転送してもダブルバッファの片方のバッファがいっぱいにならない場合であっても、バッファに蓄積されたデータの大きさを調べてデータを読み出すことができる。また、汎用プロセッサシステム５００からデータをアウトオブオーダーで読み取ることを可能にするためには、ＦＩＦＯキューではなく、メモリにマップされるバッファでなければならない。
【００７７】
実施の形態１では、ターゲットデバイスとしてＧＰＵ７００を取り上げて説明したが、ターゲットデバイスはインオーダーで命令を処理する他のプロセッシングユニット、たとえば、通信処理や音声処理などを専用に行う専用プロセッシングユニットであってもよい。
【００７８】
実施の形態２
実施の形態２では、実施の形態１で説明した技術を前提として、汎用プロセッサに複数のグラフィックスプロセッサを接続したマルチグラフィックスプロセッサシステムを説明する。汎用プロセッサに接続される複数のグラフィックスプロセッサにインオーダーのメモリアクセスしか実行できないものがある場合、実施の形態１で述べた技術を応用してそのグラフィックスプロセッサに対するインタフェースを設計することができる。
【００７９】
図８は、実施の形態２に係るマルチグラフィックスプロセッサシステム４００の構成図である。マルチグラフィックスプロセッサシステム４００は、第１ＧＰＵ１００と、第２ＧＰＵ２００と、フレームバッファ１１０と、ＣＰＵ（Central Processing Unit）３００と、メインメモリ３１０とを含む。
【００８０】
ＣＰＵ３００は、メインメモリ３１０に記憶されたプログラムをロードして実行し、メインメモリ３１０に対してデータの読み書きを行う。また、ＣＰＵ３００は、マルチグラフィックスプロセッサシステム４００全体を統括的に制御する。
【００８１】
ＣＰＵ３００は、ここでは、単一のメインプロセッサとして説明するが、ＣＰＵ３００は、実施の形態１で説明したような複数のプロセッサを含むマルチプロセッサシステムであってもよく、複数のプロセッサコアを１個のパッケージに集積したマルチコアプロセッサであってもよい。マルチプロセッサシステムの場合、各プロセッサは非同期で動作する。
【００８２】
第１ＧＰＵ１００および第２ＧＰＵ２００は、それぞれグラフィックスプロセッサコアを搭載したグラフィックスチップである。第１ＧＰＵ１００と第２ＧＰＵ２００は、同種のグラフィックスチップであってもよく、互いに異なる処理機能を有する異種のグラフィックスチップであってもよい。
【００８３】
第１ＧＰＵ１００と第２ＧＰＵ２００は、１枚のグラフィックボード等の基板上に搭載されてもよく、第１ＧＰＵ１００と第２ＧＰＵ２００がそれぞれ別個の基板上に搭載され、２つの基板がコネクタにより接続される形態であってもよい。あるいは、ＣＰＵ３００が搭載されるマザーボード等の基板上に第１ＧＰＵ１００および第２ＧＰＵ２００の少なくとも一つが搭載される形態であってもよい。
【００８４】
第１ＧＰＵ１００は、入出力インタフェース１８０を介してＣＰＵ３００と接続している。この入出力インタフェース１８０を介して、第１ＧＰＵ１００とＣＰＵ３００は互いにデータのやりとりをすることができる。入出力インタフェース１８０は、実施の形態１で説明したＩＯＩＦ５８０に相当する。
【００８５】
第１ＧＰＵ１００とＣＰＵ３００は並列に処理を進めてもよく、第１ＧＰＵ１００とＣＰＵ３００の間で逐次的に処理が実行されてもよい。第１ＧＰＵ１００により処理されたデータがＣＰＵ３００に渡され、ＣＰＵ３００がさらに処理を施してもよく、ＣＰＵ３００により処理されたデータが第１ＧＰＵ１００に渡され、第１ＧＰＵ１００がさらに処理を施してもよい。
【００８６】
第１ＧＰＵ１００は、第１ＧＰＵコア１２０と、調停部１３０と、第２ＧＰＵ用インタフェース１４０とを含む。
【００８７】
第１ＧＰＵコア１２０は、描画処理機能をもつグラフィックスエンジンであり、バス結合されたフレームバッファ１１０に対して描画データを読み書きすることができる。フレームバッファ１１０は、第１ＧＰＵコア１２０により読み書きされるメモリであり、テクスチャ、描画された画像データなどを保持する。第１ＧＰＵコア１２０は、描画データを外部に出力する端子を有し、出力された描画データはディスプレイに供給され、３次元グラフィックスが表示される。
【００８８】
調停部１３０は、ＣＰＵ３００からのデータを図示しないバッファに蓄積しながら、データに付随するアドレスに応じて第２ＧＰＵ用インタフェース１４０と第１ＧＰＵコア１２０に振り分け、それぞれに供給する。第２ＧＰＵ用バス１７０は、調停部１３０が第２ＧＰＵ用インタフェース１４０との間で制御信号やデータをやりとりするための内部バスであり、第１ＧＰＵ用バス１６０は、調停部１３０が第１ＧＰＵコア１２０との間で制御信号やデータをやりとりするための内部バスである。
【００８９】
第２ＧＰＵ用インタフェース１４０は、第１ＧＰＵ１００の外部に第２ＧＰＵ２００を接続し、ＣＰＵ３００からのデータを第２ＧＰＵ２００のインタフェースプロトコルに変換し、第２ＧＰＵ２００に受け渡しするための中継インタフェースである。第１ＧＰＵ１００と第２ＧＰＵ２００は、第２ＧＰＵ接続バス１９０によって相互接続される。
【００９０】
ＣＰＵ３００から第２ＧＰＵ２００に供給されるべきデータは、第１ＧＰＵ１００の第２ＧＰＵ用インタフェース１４０に入力され、第２ＧＰＵ用インタフェース１４０により第２ＧＰＵ接続バス１９０を経由して第２ＧＰＵ２００に渡される。
【００９１】
ＣＰＵ３００は、メインメモリ３１０から読み出されたデータを第２ＧＰＵ用インタフェース１４０を介して第２ＧＰＵ２００に供給してもよく、第１ＧＰＵコア１２０により描画演算処理されたフレームバッファ１１０内のデータを読み出して、第２ＧＰＵ用インタフェース１４０を介して第２ＧＰＵ２００に供給してもよい。後者の場合は、第１ＧＰＵコア１２０による描画処理結果に対して第２ＧＰＵ２００がさらに描画演算処理を施すことができる。
【００９２】
また、第２ＧＰＵ２００からＣＰＵ３００へ供給されるべきデータは、第２ＧＰＵ接続バス１９０を経由して第１ＧＰＵ１００の第２ＧＰＵ用インタフェース１４０に入力され、第２ＧＰＵ用インタフェース１４０によりＣＰＵ３００へ転送される。ＣＰＵ３００は、第２ＧＰＵ２００から供給される第２ＧＰＵ用メモリ２１０内の描画データを第１ＧＰＵ用バス１６０を経由して第１ＧＰＵコア１２０に供給してもよい。これにより、第２ＧＰＵ２００による描画処理結果に対して第１ＧＰＵコア１２０がさらに描画演算処理を施し、その処理結果をフレームバッファ１１０に保持することができる。
【００９３】
図９は、調停部１３０と第２ＧＰＵ用インタフェース１４０の詳細な構成を説明する図である。同図では、調停部１３０が既にＣＰＵ３００と第１ＧＰＵコア１２０の間で通信されるデータの分岐を終え、ＣＰＵ３００と第２ＧＰＵ用インタフェース１４０の間で通信されるデータを処理する段階における構成のみを示している。
【００９４】
調停部１３０は、通知部１３２とバスインタフェース１３４を含む。第２ＧＰＵ用インタフェース１４０は、汎用リードダブルバッファ（General-purpose Read Double Buffer）１７２、汎用ライトＦＩＦＯ（General-purpose Write FIFO）１７４、カウンタ１７６、レジスタアクセス制御部１４２、ステータスレジスタ１４４、特権リード用レジスタ（Privileged Read Register）１４６、特権ライト用レジスタ（Privileged Write Register）１４８、専用リードＦＩＦＯ１５２、および専用ライトＦＩＦＯ１５４を含む。
【００９５】
汎用リードダブルバッファ１７２、汎用ライトＦＩＦＯ１７４、およびカウンタ１７６は、調停部１３０のデータバス１３６と第２ＧＰＵ用インタフェース１４０のデータバス１５０をブリッジする部分に設けられたバッファであり、ＣＰＵ３００と第２ＧＰＵ２００の間でデータの読み書きのタイミングを調整するために用いられる。
【００９６】
調停部１３０のバスインタフェース１３４は、ＣＰＵ３００から供給されたデータをデータバス１３６を経由して汎用ライトＦＩＦＯ１７４に書き込み、汎用リードダブルバッファ１７２からデータバス１３６を経由して読み出されたデータをＣＰＵ３００に供給するためのインタフェースである。
【００９７】
通知部１３２は、汎用リードダブルバッファ１７２がフルになった場合にシグナルを受け取り、ＣＰＵ３００に汎用リードダブルバッファ１７２がフルであることを通知し、ＣＰＵ３００にデータの読み出しを指示する。また、通知部１３２は、汎用ライトＦＩＦＯ１７４に空きが生じた場合にシグナルを受け取り、ＣＰＵ３００に汎用ライトＦＩＦＯ１７４に空きがあることを通知し、ＣＰＵ３００にデータの書き込みを指示する。
【００９８】
ＣＰＵ３００と第２ＧＰＵ２００の間でなされる通信内容は、第２ＧＰＵ２００の制御レジスタを読み書きするための特権リード用レジスタ１４６および特権ライト用レジスタ１４８へのアクセス命令、第２ＧＰＵ２００に供給する描画コマンドのパケットデータ、および第２ＧＰＵ２００の第２ＧＰＵ用メモリ２１０から読み出される描画データに分かれる。
【００９９】
第２ＧＰＵ２００がＣＰＵ３００と通信するためのハンドシェーク情報が通知部１３２を経由してＣＰＵ３００に伝達され、ＣＰＵ３００はそのハンドシェーク情報をもとにソフトウエア制御でデータ通信を行う。ＣＰＵ３００は通知部１３２から通知を受け取るための専用レジスタをもち、通知部１３２はこの専用レジスタに書き込むことで通知信号をＣＰＵ３００に送信することができる。
【０１００】
ステータスレジスタ１４４は、第２ＧＰＵ用インタフェース１４０の状態を保持する。特権リード用レジスタ１４６は、第２ＧＰＵ２００の制御レジスタの状態を読み出すためのレジスタである。特権ライト用レジスタ１４８は、第２ＧＰＵ２００の制御レジスタに書き込みをするためのレジスタである。レジスタアクセス制御部１４２は、調停部１３０のバスインタフェース１３４からレジスタアクセスバス１３８経由でこれらのレジスタのアクセス要求を受け取り、これらのレジスタに対して値を読み書きする。
【０１０１】
専用リードＦＩＦＯ１５２および専用ライトＦＩＦＯ１５４は、第２ＧＰＵ２００内部の周波数と第２ＧＰＵ用インタフェース１４０の周波数の違いを吸収するために第２ＧＰＵ用インタフェース１４０に設けられたＦＩＦＯ形式のバッファであり、一例として２５６バイトの容量をもつ。
【０１０２】
汎用リードダブルバッファ１７２は、第２ＧＰＵ２００により描画演算処理され、第２ＧＰＵ用メモリ２１０に保持されたデータを読み出すためのバッファであり、２つのバッファＡ、バッファＢを含む。一例として、２つのバッファＡ、バッファＢは２キロバイトの容量のＳＲＡＭである。第２ＧＰＵ用メモリ２１０から読み出されたデータは、第２ＧＰＵ用インタフェース１４０の専用リードＦＩＦＯ１５２にＦＩＦＯ形式で蓄積され、データバス１５０を経由して順次、２つのバッファＡ、バッファＢのいずれかに交互に書き込まれる。２つのバッファＡ、バッファＢのいずれかが一杯になると、通知部１３２にバッファがフルであることを通知する信号（以下、「バッファフル通知信号」という）１８２、１８４が送られる。
【０１０３】
汎用ライトＦＩＦＯ１７４は、ＣＰＵ３００から第２ＧＰＵ２００へデータを送るためのＦＩＦＯ形式のバッファであり、一例として８キロバイトの容量のＦＩＦＯである。汎用ライトＦＩＦＯ１７４にキューイングされたデータは順次取り出され、データバス１５０を経由して専用ライトＦＩＦＯ１５４に書き込まれる。汎用ライトＦＩＦＯ１７４に空きが生じると、通知部１３２に汎用ライトＦＩＦＯ１７４に空きがあることを通知する信号（以下、「バッファ空き通知信号」という）１８６が送られる。
【０１０４】
カウンタ１７６は、汎用ライトＦＩＦＯ１７４から取り出されたデータ量をカウントし、汎用ライトＦＩＦＯ１７４のキューの空き状態に関する信号を通知部１３２に通知する。カウンタ１７６は、一例として、１２８バイトの単位でデータ送出量をカウントし、Ｎ＊１２８バイトに達すると信号を発行し、カウントされた値をリセットする「Ｎ＊１２８バイトカウンタ」である。Ｎ＝３２の場合は、４キロバイト読み出される度に信号が発行され、カウンタがリセットされる。
【０１０５】
ここで、汎用リードダブルバッファ１７２には、第２ＧＰＵ２００によって、ＣＰＵ３００により発行されるリードコマンドに対するデータがインオーダーで転送される。汎用リードダブルバッファ１７２内のいずれかのバッファＡ、Ｂが一杯になり、ＣＰＵ３００がバッファフル通知信号１８２、１８４を受け取ると、ＣＰＵ３００は、汎用リードダブルバッファ１７２内のバッファからアウトオブオーダーでデータを読み出す。
【０１０６】
また、汎用ライトＦＩＦＯ１７４には、ＣＰＵ３００から発行されるライトコマンドとライトされるべきデータがインオーダーでキューイングされ、第２ＧＰＵ２００にインオーダーで転送される。
【０１０７】
第２ＧＰＵ用インタフェース１４０に汎用リードダブルバッファ１７２および汎用ライトＦＩＦＯ１７４を設ける理由は、実施の形態１においてインタフェースユニット６００においてリードダブルバッファ６１０とライトＦＩＦＯ６２０を設けた理由と同じである。これにより、ＣＰＵ３００は、インオーダーの命令実行機構をもつ第２ＧＰＵ２００にインオーダーでコマンドとデータを転送することにより、命令実行機構の違いを吸収することができる。また、インオーダー実行による処理効率の低下を防ぐために実施の形態１で述べたように、実施の形態２においても、ＣＰＵ３００はライトコマンドのＡＣＫは、入出力インタフェース１８０に設けられる直近のバッファから受け取る。また、ＣＰＵ３００は、リードコマンドに対するデータを汎用リードダブルバッファ１７２からアウトオブオーダーで読み出す。これにより、インオーダー実行を前提とする第２ＧＰＵ２００が第１ＧＰＵ１００に接続されたマルチグラフィックスプロセッサシステム４００においても、データ転送効率を低下させることなく、ＣＰＵ３００は第１ＧＰＵ１００および第２ＧＰＵ２００と連携してグラフィックス処理を効率良く実行することができる。
【０１０８】
以上の構成のマルチグラフィックスプロセッサシステム４００において、ＣＰＵ３００と第２ＧＰＵ２００が通信する手順を図１０および図１１のフローチャートを用いて説明する。
【０１０９】
図１０は、ＣＰＵ３００が第２ＧＰＵ２００にデータを書き込む際のパケットの転送手順を示すフローチャートである。
【０１１０】
カウンタ１７６を初期化する（Ｓ１０）。ここでは、汎用ライトＦＩＦＯ１７４は８キロバイトの容量をもち、カウンタ１７６はＮ＊１２８バイトカウンタであるとし、Ｎを３２に設定する。これにより、汎用ライトＦＩＦＯ１７４から第２ＧＰＵ用インタフェース１４０の専用ライトＦＩＦＯ１５４へ４キロバイトのデータが転送されるたびに、バッファに空きが生じたことを通知するためのバッファ空き通知信号がカウンタ１７６から通知部１３２を介してＣＰＵ３００に送信される。
【０１１１】
ＣＰＵ３００は汎用ライトＦＩＦＯ１７４へ最初の８キロバイト分のデータを書き込み（Ｓ１２）、カウンタ１７６からバッファ空き通知信号が送られるまで待つ（Ｓ１４のＮ）。
【０１１２】
カウンタ１７６からのバッファ空き通知信号を受け取ると（Ｓ１４のＹ）、ＣＰＵ３００は、次の４キロバイト分のデータを汎用ライトＦＩＦＯ１７４へ転送する（Ｓ１６）。
【０１１３】
転送すべきデータの末尾に達すると（Ｓ１８のＹ）、パケットの転送を終了し、まだ転送すべきデータが残っている場合（Ｓ１８のＮ）、ステップＳ１４に戻り、ＣＰＵ３００は次のバッファ空き通知信号を待ってパケットの転送を続行する。
【０１１４】
上記のようにＣＰＵ３００は、汎用ライトＦＩＦＯ１７４に空きが生じるのを待ってから次のパケットを汎用ライトＦＩＦＯ１７４に転送する。このようなデータ転送手順を採用したのは以下の理由による。
【０１１５】
仮に汎用ライトＦＩＦＯ１７４が常にいっぱいになるようにＣＰＵ３００からデータを転送すると、汎用ライトＦＩＦＯ１７４にキューイングできない転送データは調停部１３０のバッファにキューイングされることになり、調停部１３０のバッファがあふれてしまう。調停部１３０のバッファには第１ＧＰＵコア１２０へ転送すべきデータもキューイングされるから、第２ＧＰＵ２００に転送すべきデータとの間で競合が生じ、第１ＧＰＵコア１２０へのデータ転送が妨げられる結果となる。そこで、汎用ライトＦＩＦＯ１７４に空きが生じるのを待ってからＣＰＵ３００からデータを転送することで、調停部１３０のバッファに転送データが滞留するのを防ぎ、第１ＧＰＵコア１２０へのデータ転送に遅延が生じないようにしている。
【０１１６】
図１１は、ＣＰＵ３００が第２ＧＰＵ２００の第２ＧＰＵ用メモリ２１０からデータを読み出す際のパケットの転送手順を示すフローチャートである。
【０１１７】
ＣＰＵ３００が第２ＧＰＵ２００の第２ＧＰＵ用メモリ２１０からデータを読み出す際、第２ＧＰＵ２００は自らがマスタになってＣＰＵ３００に対してデータをプッシュ転送する。第２ＧＰＵ用インタフェース１４０は、第２ＧＰＵ２００にプッシュ転送を開始させるための設定を行う（Ｓ３０）。
【０１１８】
第２ＧＰＵ２００によりプッシュされたデータが汎用リードダブルバッファ１７２（以下、単にダブルバッファ１７２という）のバッファＡに蓄積される（Ｓ３２）。ダブルバッファ１７２のバッファＡが一杯でないなら（Ｓ３４のＮ）、ステップＳ３２に戻り、バッファＡにデータがさらにプッシュされる。
【０１１９】
ダブルバッファ１７２のバッファＡが一杯になると（Ｓ３４のＹ）、バッファが一杯になったことを通知するためのバッファフル通知信号が通知部１３２を介してＣＰＵ３００に送信される（Ｓ３６）。ダブルバッファ１７２において、データのプッシュ転送先がバッファＡからバッファＢに切り替わる（Ｓ３８）。
【０１２０】
ＣＰＵ３００は、通知部１３２からのバッファフル通知信号により、ダブルバッファ１７２のバッファＡが一杯になったことを確認し、バッファＡに蓄積されたデータを読み出す（Ｓ４０）。
【０１２１】
ＣＰＵ３００がダブルバッファ１７２のバッファＡに蓄積されたデータを読み終えると、バッファＡがクリアされる（Ｓ４２）。ここでバッファのクリアとは、バッファＡのデータを消去することではなく、単にバッファＡのデータを無効化するためのフラグを設定することである。
【０１２２】
転送すべきデータの末尾に達すると（Ｓ４４のＹ）、パケットの転送を終了し、まだ転送すべきデータが残っている場合（Ｓ４４のＮ）、ステップＳ４６に進む。
【０１２３】
第２ＧＰＵ２００によりプッシュされたデータがダブルバッファ１７２のバッファＢに蓄積される（Ｓ４６）。ダブルバッファ１７２のバッファＡが一杯でないなら（Ｓ４８のＮ）、ステップＳ４６に戻り、バッファＢにデータがさらにプッシュされる。ダブルバッファ１７２のバッファＢが一杯になると（Ｓ４８のＹ）、バッファフル通知信号が通知部１３２を介してＣＰＵ３００に送信される（Ｓ５０）。ダブルバッファ１７２において、データのプッシュ転送先がバッファＢからバッファＡに切り替わる（Ｓ５２）。
【０１２４】
ＣＰＵ３００は、通知部１３２からのバッファフル通知信号により、ダブルバッファ１７２のバッファＢが一杯になったことを確認し、バッファＢに蓄積されたデータを読み出す（Ｓ５４）。ＣＰＵ３００が汎用リードダブルバッファ１７２のバッファＢに蓄積されたデータを読み終えると、バッファＢがクリアされる（Ｓ５６）。
【０１２５】
転送すべきデータの末尾に達すると（Ｓ５８のＹ）、パケットの転送を終了し、まだ転送すべきデータが残っている場合（Ｓ５８のＮ）、ステップＳ３２に戻り、以降、バッファＡとバッファＢを切り替えながらデータのプッシュ転送が繰り返される。
【０１２６】
上記のようにＣＰＵ３００は、ダブルバッファ１７２の２つのバッファＡ、バッファＢのいずれかが一杯になるのを待ってから、ダブルバッファ１７２からデータをまとめて読み込む。このようなデータ転送手順を採用したのは以下の理由による。
【０１２７】
仮にダブルバッファ１７２が一杯になる前にＣＰＵ３００がリードコマンドを発行すると、データがバッファに蓄積されるまで待つことになり、リードコマンドが調停部１３０のバッファ内に滞留することになる。調停部１３０のバッファには第１ＧＰＵコア１２０からデータを読み出すためのリードコマンドもキューイングされるから、第２ＧＰＵ２００からデータを読み出すためのリードコマンドとの間で競合が生じ、第１ＧＰＵコア１２０に対するリードコマンドの実行が遅延する結果となる。そこで、ダブルバッファ１７２にデータが蓄積するのを待ってからＣＰＵ３００からデータを読み込むようにすることで、リードコマンドがデータを待つことなく直ちに実行され、調停部１３０のバッファに滞留するのを防いでいる。
【０１２８】
以上、マルチグラフィックスプロセッサシステム４００の構成とデータ転送手順を説明した。ＣＰＵ３００と第２ＧＰＵ２００の間のデータ通信において、汎用リードダブルバッファ１７２や汎用ライトＦＩＦＯ１７４を設け、第２ＧＰＵ２００にデータの読み出しや書き込みのタイミングをシグナルで通知するようにしたことによる作用効果を説明する。
【０１２９】
第２ＧＰＵ２００は第１ＧＰＵ１００に外部接続されるため、ＣＰＵ３００から見た場合、第２ＧＰＵ２００は、サウスブリッジに接続された第１ＧＰＵ１００のさらに向こう側に接続された外部装置である。そのため、ＣＰＵ３００は第２ＧＰＵ２００と直接通信することができず、第２ＧＰＵ２００と通信するためのレーテンシーが長くなる。よって、ＣＰＵ３００から第２ＧＰＵ２００のレジスタに対してポーリングして第２ＧＰＵ２００のステータスを知ることは非効率的である。そこで、第２ＧＰＵ２００からＣＰＵ３００へシグナリングすることでＣＰＵ３００にデータの読み出しや書き出しのタイミングを知らせることにしてデータ転送の効率化を図っている。これにより、リードコマンドやライトコマンドが調停部１３０や入出力インタフェース１８０のバッファに滞留するのを避けることができ、ＣＰＵ３００と第１ＧＰＵコア１２０のデータ通信の妨げにならない。
【０１３０】
特に、入出力インタフェース１８０が、バンド幅が大きい高速インタフェースであるが、バンド幅に比べて、データ転送のレーテンシーは長い場合に、本実施の形態はさらなる効果を奏する。ＣＰＵ３００が第１ＧＰＵ１００を経由して第２ＧＰＵ２００によるデータの読み書き状況を調べようとすると、入出力インタフェース１８０のレーテンシーが長いため、データの読み出しや書き込みが開始されるまでに時間がかかってしまう。そこで、本実施の形態のように、第２ＧＰＵ２００側からデータの読み出しや書き込みのタイミングをＣＰＵ３００に通知し、ＣＰＵ３００が通知信号を受けてから、高速な入出力インタフェース１８０を介してデータをまとめて読み出したり、書き込んだりする方が効率が良い。
【０１３１】
調停部１３０の働きにより、ＣＰＵ３００と第２ＧＰＵ２００の間のデータ転送と、ＣＰＵ３００と第１ＧＰＵコア１２０の間のデータ転送とは並行して実行することができる。これにより、第１ＧＰＵコア１２０により描画されたＨＤ（High Definition）表示の画面に対して、第２ＧＰＵ２００により描画された画面を重ね合わせる（superimpose）ことができる。また、第２ＧＰＵ２００により描画された画面に対して、第１ＧＰＵコア１２０で画像処理したものを出力することも可能である。
【０１３２】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下、いくつかの変形例を説明する。
【０１３３】
第１ＧＰＵ１００と第２ＧＰＵ２００の処理性能や機能が異なり、第１ＧＰＵ１００と第２ＧＰＵ２００の間で処理の役割分担が行われてもよい。第２ＧＰＵ２００は、一例として、ＤＲＡＭ混載型のグラフィックスチップである。ＤＲＡＭ混載型とは、ＤＲＡＭとロジック回路を単一の半導体チップ上に集積したものであり、チップ上に搭載できるＤＲＡＭの容量には制限があるが、個別チップでは実現できない大きなメモリバンド幅を確保することができる。したがって、第２ＧＰＵ２００は、チップに搭載されたＤＲＡＭをビデオメモリとして利用することで、ビデオメモリに対する高速な読み書きが可能であり、たとえば、テクスチャの重ね描きなどビデオメモリへの読み書きを頻繁に行う描画処理に適する。
【０１３４】
一方、第１ＧＰＵ１００は、大容量のフレームバッファ１１０とバス結合しており、メモリバンド幅は小さいが、容量が十分に大きいメモリを利用することができる。したがって、第１ＧＰＵ１００は、メモリを消費する処理に適する。また、第１ＧＰＵ１００は、メモリアクセスよりも計算パワーの方がより要求されるシェーダプログラムなどの描画処理に適する。
【０１３５】
このような第１ＧＰＵ１００と第２ＧＰＵ２００のメモリ構成の違いを利用して、第１ＧＰＵ１００と第２ＧＰＵ２００の間で描画処理の各種の役割分担を行うことができる。たとえば、第１ＧＰＵ１００は、複雑な光の反射計算や陰影処理などを含み、演算量の多いピクセルシェーディングを行い、第２ＧＰＵ２００はメモリへの読み書きが頻繁に発生するラスタライズ処理やテクスチャマッピング処理、モーションブラーやアルファブレンディングなどの描画処理を行う。
【０１３６】
メモリバンド幅の要求される処理を第２ＧＰＵ２００に実行させるためには、第１ＧＰＵ１００から第２ＧＰＵ２００に処理の中間結果を投げ、第２ＧＰＵ２００にメモリ集中型の処理を実行させ、処理結果だけを第１ＧＰＵ１００に戻せばよい。したがって、第１ＧＰＵ１００と第２ＧＰＵ２００の間のインタフェースのバンド幅は狭くてもかまわない。
【０１３７】
また、第１ＧＰＵ１００と第２ＧＰＵ２００は、異なるグラフィック処理機能を有してもよい。たとえば、いずれか一方のグラフィックスチップにはジオメトリ演算器が含まれ、他方のグラフィックスチップはピクセル演算器が含まれるという構成や、いずれか一方のグラフィックスチップには、テクスチャマッピングの専用ユニットが含まれる構成など、２つのグラフィックスチップの間で搭載される処理機能の違いがあってもよい。また、２つのグラフィックスチップが同じグラフィック処理機能を有していて、描画処理性能だけが異なる構成であってもよい。
【０１３８】
第１ＧＰＵ１００をマスタＧＰＵとし、第２ＧＰＵ２００をスレーブＧＰＵとして、マスタＧＰＵが主たる描画処理を行い、スレーブＧＰＵがマスタＧＰＵの制御のもと、副次的な描画処理を行うという主従関係のある役割分担がなされてもよい。
【０１３９】
このように、処理機能やメモリ帯域が異なる第１ＧＰＵ１００および第２ＧＰＵ２００にそれぞれのグラフィックスプロセッサが得意とする処理を分担させることにより、全体の描画処理を効率良く実行することができる。
【０１４０】
また、一方のグラフィックスプロセッサにおいて処理のボトルネックが発生する場合でも、他方のグラフィックスプロセッサにおいて並列に処理を進めることができる。２つのグラフィックスプロセッサの仕様をプログラマに提供することで、デュアルチップ構成のマルチグラフィックスプロセッサシステム４００において、適宜、グラフィックスプロセッサを使い分けて描画処理の効率化を図るプログラミングが可能となる。
【０１４１】
マルチグラフィックスプロセッサシステム４００のさらに別の構成例として、第１ＧＰＵ１００は、第２ＧＰＵ２００の後継チップであってもよい。この場合、第１ＧＰＵ１００だけを搭載したシステムを提供すると、第２ＧＰＵ２００で動作するゲームなどのアプリケーションが互換性がないために実行できなくなることがある。そこで、新世代の第１ＧＰＵ１００と旧世代の第２ＧＰＵ２００の両方を搭載したマルチグラフィックスプロセッサシステム４００を提供する。
【０１４２】
これにより、旧世代のアプリケーションは第２ＧＰＵ２００において実行され、第２ＧＰＵ２００のビデオデータを第１ＧＰＵ１００に渡して、第１ＧＰＵ１００から出力することで、アプリケーションの互換性を保つことができる。また、旧世代のアプリケーションが利用されなくなり、互換性を保つ必要がなくなると、第２ＧＰＵ２００を外し、第１ＧＰＵ１００のみの構成でシステムを提供することができる。デュアルグラフィックスチップの構成を取って互換性をもたせておき、必要に応じて旧世代のグラフィックスチップを外すことで、製品の提供時期やユーザのニーズなどに合わせた柔軟性のある製品構成を取ることができる。
【図面の簡単な説明】
【０１４３】
【図１】実施の形態１に係る汎用プロセッサシステムの構成図である。
【図２】図１のサブプロセッシングエレメントの構成図である。
【図３Ａ】スプリットトランザクションによるライトコマンドの実行過程を説明する図である。
【図３Ｂ】スプリットトランザクションによるライトコマンドの実行過程を説明する図である。
【図３Ｃ】スプリットトランザクションによるライトコマンドの実行過程を説明する図である。
【図３Ｄ】スプリットトランザクションによるライトコマンドの実行過程を説明する図である。
【図４Ａ】スプリットトランザクションによるリードコマンドの実行過程を説明する図である。
【図４Ｂ】スプリットトランザクションによるリードコマンドの実行過程を説明する図である。
【図４Ｃ】スプリットトランザクションによるリードコマンドの実行過程を説明する図である。
【図５】汎用プロセッサシステムとグラフィックスプロセッシングユニットが入出力インタフェースを介して接続されたマルチプロセッサシステムの構成図である。
【図６】図５の構成において、ライトコマンドの実行手順を説明する図である。
【図７】図５の構成において、リードコマンドの実行手順を説明する図である。
【図８】実施の形態２に係るマルチグラフィックスプロセッサシステムの構成図である。
【図９】図８の調停部と第２ＧＰＵ用インタフェースの詳細な構成を説明する図である。
【図１０】図８のＣＰＵが第２ＧＰＵにデータを書き込む際のパケットの転送手順を示すフローチャートである。
【図１１】図８のＣＰＵが第２ＧＰＵの第２ＧＰＵ用メモリからデータを読み出す際のパケットの転送手順を示すフローチャートである。
【符号の説明】
【０１４４】
１００  第１ＧＰＵ、  １１０  フレームバッファ、  １２０  第１ＧＰＵコア、  １３０  調停部、  １３２  通知部、  １４０  第２ＧＰＵ用インタフェース、  １５２  専用リードＦＩＦＯ、  １５４  専用ライトＦＩＦＯ、  １６０  第１ＧＰＵ用バス、  １７０  第２ＧＰＵ用バス、  １７２  汎用リードダブルバッファ、  １７４  汎用ライトＦＩＦＯ、  １７６  カウンタ、  １８０  入出力インタフェース、  １９０  第２ＧＰＵ接続バス、  ２００  第２ＧＰＵ、  ２１０  第２ＧＰＵ用メモリ、  ３００  ＣＰＵ、  ３１０  メインメモリ、  ４００  マルチグラフィックスプロセッサシステム、  ５００  汎用プロセッサシステム、  ５１０  メインメモリ、  ５２０  ＰＥ、  ５３０  ＳＰＥ、  ５７０  Ｉ／Ｏバッファ、５８０  ＩＯＩＦ、  ６００  インタフェースユニット、  ６１０  リードダブルバッファ、  ６２０  ライトＦＩＦＯ、  ７００  ＧＰＵ。
【図１】
0004439491.tif 000002
【図２】
0004439491.tif 000003
【図３Ａ】
0004439491.tif 000004
【図３Ｂ】
0004439491.tif 000005
【図３Ｃ】
0004439491.tif 000006
【図３Ｄ】
0004439491.tif 000007
【図４Ａ】
0004439491.tif 000008
【図４Ｂ】
0004439491.tif 000009
【図４Ｃ】
0004439491.tif 000010
【図５】
0004439491.tif 000011
【図６】
0004439491.tif 000012
【図７】
0004439491.tif 000013
【図８】
0004439491.tif 000014
【図９】
0004439491.tif 000015
【図１０】
0004439491.tif 000016
【図１１】
0004439491.tif 000017