(57)【特許請求の範囲】
【請求項１】
グラフィックス処理ユニット（ＧＰＵ）を用いて、グラフィックスアプリケーションの命令を実行するために確保された、前記ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信することと、
前記ＧＰＵを用いて、非グラフィックスアプリケーションの命令を実行するために確保された、同じＧＰＵの同じシェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信することと、
前記ＧＰＵを用いて、前記グラフィックスアプリケーションの前記命令を受信することと、
前記ＧＰＵを用いて、前記非グラフィックスアプリケーションの前記命令を受信することと、
前記ＧＰＵの第１の作業負荷分配ユニットを用いて、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断することと、
前記ＧＰＵの第２の異なる作業負荷分配ユニットを用いて、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断することと、
前記ＧＰＵを用いて、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて、他のシェーダコアではなく、シェーダコアの前記第１のセットで前記グラフィックスアプリケーションの前記命令のすべてを実行することと、
前記グラフィックスアプリケーションの前記命令を実行するのと実質的に同時に、前記ＧＰＵを用いて、前記非グラフィックスアプリケーションの前記実行と前記グラフィックスアプリケーションの前記実行とをインターリーブすることなく、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて、他のシェーダコアではなく、シェーダコアの前記第２のセットで前記非グラフィックスアプリケーションの前記命令のすべてを実行することと
を備える方法。
【請求項２】
シェーダコアの前記第１のセットの前記指示を受信することが、前記ＧＰＵの第１のコマンドプロセッサを用いて、シェーダコアの前記第１のセットの前記指示を受信することを備え、シェーダコアの前記第２のセットの前記指示を受信することが、前記ＧＰＵの第２の異なるコマンドプロセッサを用いて、シェーダコアの前記第２のセットの前記指示を受信することを備える、請求項１に記載の方法。
【請求項３】
シェーダコアの前記第１のセットの前記指示を受信することが、前記ＧＰＵのコマンドプロセッサを用いて、シェーダコアの前記第１のセットの前記指示を受信することを備え、シェーダコアの前記第２のセットの前記指示を受信することが、同じコマンドプロセッサを用いて、シェーダコアの前記第２のセットの前記指示を受信することを備える、請求項１に記載の方法。
【請求項４】
前記非グラフィックスアプリケーションの命令を受信することが、前記グラフィックスアプリケーションの命令を受信するのと同時に前記非グラフィックスアプリケーションの前記命令を受信することを備える、請求項１に記載の方法。
【請求項５】
前記グラフィックスアプリケーションの前記命令の前記実行の結果を前記ＧＰＵ内のメモリキャッシュに記憶することを、前記非グラフィックスアプリケーションの前記命令の前記実行の結果を前記ＧＰＵ内の前記メモリキャッシュに記憶することよりも優先させること
をさらに備える、請求項１に記載の方法。
【請求項６】
シェーダコアの前記第１のセットの前記指示を受信することが、前記ＧＰＵの第１のコマンドプロセッサを用いて、シェーダコアの前記第１のセットの前記指示を受信することを備え、シェーダコアの前記第２のセットの前記指示を受信することが、前記ＧＰＵの第２の異なるコマンドプロセッサを用いて、シェーダコアの前記第２のセットの前記指示を受信することを備え、前記方法は、
前記非グラフィックスアプリケーションの命令がないとき、前記第２のコマンドプロセッサの電源を切断するための指示を受信することと、
前記指示を受信したことに応答して前記第２のコマンドプロセッサの電源を切断することと
をさらに備える、請求項１に記載の方法。
【請求項７】
シェーダコアの前記第１のセットのシェーダコアの数がシェーダコアの前記第２のセットのシェーダコアの数とは異なる、請求項１に記載の方法。
【請求項８】
プロセッサ上のドライバを用いて、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーションのために確保されるかを判断することと、前記グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第１のセットを備え、前記グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第１のセット上で実行されるべきである、
前記プロセッサ上の前記ドライバを用いて、同じＧＰＵの同じシェーダプロセッサの前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーションのために確保されるかを判断することと、前記非グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第２の異なるセットを備え、前記非グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第２のセットによって実行されるべきである、
前記ＧＰＵが、前記非グラフィックスアプリケーションと前記グラフィックスアプリケーションの前記実行をインターリーブすることなく、実質的に同時に前記グラフィックスアプリケーションの命令と前記非グラフィックスアプリケーションの命令とを実行することを可能にするために、シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を備える方法。
【請求項９】
より多くのシェーダコアが前記グラフィックスアプリケーションを実行するために利用可能であるように、シェーダコアの前記第１のセットがシェーダコアの前記第２のセットよりも多くのシェーダコアを含むと判断すること
をさらに備える、請求項８に記載の方法。
【請求項１０】
シェーダコアの前記第１のセットを判断することが、前記グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第１のセットを判断することを備える、請求項８に記載の方法。
【請求項１１】
シェーダコアの前記第２のセットを判断することが、前記非グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第２のセットを判断することを備える、請求項８に記載の方法。
【請求項１２】
送信することが、
シェーダコアの前記第１のセットの前記指示を前記ＧＰＵ内の第１のコマンドプロセッサに送信することと、
シェーダコアの前記第２のセットの前記指示を前記ＧＰＵ内の第２の異なるプロセッサに送信することと
を備える、請求項８に記載の方法。
【請求項１３】
送信することが、
シェーダコアの前記第１のセットの前記指示を前記ＧＰＵ内のコマンドプロセッサに送信することと、
シェーダコアの前記第２のセットの前記指示を前記ＧＰＵ内の同じコマンドプロセッサに送信することと
を備える、請求項８に記載の方法。
【請求項１４】
複数のシェーダコアを含むシェーダプロセッサと、
グラフィックスアプリケーションの命令を実行するために確保された前記シェーダプロセッサの前記シェーダコアの第１のセットの指示を受信し、前記グラフィックスアプリケーションの前記命令を受信するように構成された第１のコマンドプロセッサと、
非グラフィックスアプリケーションの命令を実行するために確保された同じシェーダプロセッサの前記シェーダコアの第２の異なるセットの指示を受信し、前記非グラフィックスアプリケーションの前記命令を受信するように構成された第２のコマンドプロセッサと、
前記シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するように構成された第１の作業負荷分配ユニットと、
前記シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するように構成された第２の異なる作業負荷分配ユニットと、
を備え、
他のシェーダコアではなく、前記シェーダコアの前記第１のセットが、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記第１の作業負荷分配ユニットの前記判断に基づいて、前記グラフィックスアプリケーションの前記命令のすべてを実行するように構成され、
他のシェーダコアではなく、前記シェーダコアの前記第２のセットが、前記グラフィックスアプリケーションの前記命令の前記実行と実質的に同時に、前記非グラフィックスアプリケーションの前記実行と前記グラフィックスアプリケーションの前記実行とをインターリーブすることなく、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記第２の作業負荷分配ユニットの前記判断に基づいて、前記非グラフィックスアプリケーションの前記命令のすべてを実行するように構成された、
グラフィックス処理ユニット（ＧＰＵ）。
【請求項１５】
前記第１のコマンドプロセッサが前記第２のコマンドプロセッサとは異なる、請求項１４に記載のＧＰＵ。
【請求項１６】
前記第１のコマンドプロセッサが前記第２のコマンドプロセッサと同じである、請求項１４に記載のＧＰＵ。
【請求項１７】
前記第１のコマンドプロセッサは、前記第２のコマンドプロセッサが前記非グラフィックスアプリケーションの前記命令を受信するのと同時に前記グラフィックスアプリケーションの前記命令を受信するように構成された、請求項１４に記載のＧＰＵ。
【請求項１８】
メモリキャッシュ
をさらに備え、
前記第１のコマンドプロセッサおよび前記第２のコマンドプロセッサのうちの少なくとも１つが、前記メモリキャッシュへの前記グラフィックスアプリケーションの前記命令の前記実行の結果の記憶を、前記メモリキャッシュへの前記非グラフィックスアプリケーションの前記命令の前記実行の結果の記憶よりも優先させるように構成された、請求項１４に記載のＧＰＵ。
【請求項１９】
前記ＧＰＵは、前記非グラフィックスアプリケーションの命令がないとき、前記第２のコマンドプロセッサの電源を切断するための指示を受信し、電源を切断するための前記指示の前記受信に応答して前記第２のコマンドプロセッサの電源を切断するように構成された、請求項１４に記載のＧＰＵ。
【請求項２０】
前記シェーダコアの前記第１のセットのシェーダコアの数が前記シェーダコアの前記第２のセットのシェーダコアの数とは異なる、請求項１４に記載のＧＰＵ。
【請求項２１】
グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーションのために確保されるかを判断することと、前記グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第１のセットを備え、前記グラフィックスアプリケーションのすべての命令は、前記シェーダコアの前記第１のセット上で実行されるべきである、
同じＧＰＵの同じシェーダプロセッサの前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーションのために確保されるかを判断することと、前記非グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第２の異なるセットを備え、前記非グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第２のセットによって実行されるべきである、
前記ＧＰＵが、前記非グラフィックスアプリケーションと前記グラフィックスアプリケーションの前記実行をインターリーブすることなく、実質的に同時に前記グラフィックスアプリケーションの命令と前記非グラフィックスアプリケーションの命令とを実行することを可能にするために、シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を行うように構成されたプロセッサ。
【請求項２２】
前記プロセッサが、前記判断と前記ＧＰＵへの前記送信とを行うドライバを実行する、請求項２１に記載のプロセッサ。
【請求項２３】
前記プロセッサは、より多くのシェーダコアが前記グラフィックスアプリケーションを実行するために利用可能であるように、シェーダコアの前記第１のセットがシェーダコアの前記第２のセットよりも多くのシェーダコアを含むと判断するように構成された、請求項２１に記載のプロセッサ。
【請求項２４】
前記プロセッサが、前記グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第１のセットを判断するように構成された、請求項２１に記載のプロセッサ。
【請求項２５】
前記プロセッサが、前記非グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第２のセットを判断するように構成された、請求項２１に記載のプロセッサ。
【請求項２６】
前記プロセッサが、
前記シェーダコアの前記第１のセットの前記指示を前記ＧＰＵの第１のコマンドプロセッサに送信することと、
前記シェーダコアの前記第２のセットの前記指示を前記ＧＰＵの第２の異なるコマンドプロセッサに送信することと
を行うように構成された、請求項２１に記載のプロセッサ。
【請求項２７】
前記プロセッサが、
前記シェーダコアの前記第１のセットの前記指示を前記ＧＰＵのコマンドプロセッサに送信することと、
前記シェーダコアの前記第２のセットの前記指示を前記ＧＰＵの同じコマンドプロセッサに送信することと
を行うように構成された、請求項２１に記載のプロセッサ。
【請求項２８】
グラフィックス処理ユニット（ＧＰＵ）であって、
グラフィックスアプリケーションの命令を実行するために確保された、前記ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信するための第１の手段と、
非グラフィックスアプリケーションの命令を実行するために確保された、同じＧＰＵの同じシェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信するための第２の手段と、
前記グラフィックスアプリケーションの前記命令を受信するための第３の手段と、
前記非グラフィックスアプリケーションの前記命令を受信するための第４の手段と、
シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するための手段と、
シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するための手段と、
シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて、他のシェーダコアではなく、シェーダコアの前記第１のセットで前記グラフィックスアプリケーションの前記命令のすべてを実行するための手段と、
前記グラフィックスアプリケーションの前記命令を実行するのと同時に、前記非グラフィックスアプリケーションの前記実行と前記グラフィックスアプリケーションの前記実行とをインターリーブすることなく、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて、他のシェーダコアではなく、シェーダコアの前記第２のセットで前記非グラフィックスアプリケーションの前記命令のすべてを実行するための手段と
を備えるＧＰＵ。
【請求項２９】
受信するための前記第１の手段および受信するための前記第２の手段が、受信するための異なる手段を備える、請求項２８に記載のＧＰＵ。
【請求項３０】
グラフィックス処理ユニット（ＧＰＵ）に、
前記ＧＰＵを用いて、グラフィックスアプリケーションの命令を実行するために確保された、前記ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信することと、
前記ＧＰＵを用いて、非グラフィックスアプリケーションの命令を実行するために確保された、同じＧＰＵの同じシェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信することと、
前記ＧＰＵを用いて、前記グラフィックスアプリケーションの前記命令を受信することと、
前記ＧＰＵを用いて、前記非グラフィックスアプリケーションの前記命令を受信することと、
前記ＧＰＵの第１の作業負荷分配ユニットを用いて、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断することと、
前記ＧＰＵの第２の異なる作業負荷分配ユニットを用いて、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断することと、
前記ＧＰＵを用いて、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて、他のシェーダコアではなく、シェーダコアの前記第１のセットで前記グラフィックスアプリケーションの前記命令のすべてを実行することと、
前記グラフィックスアプリケーションの前記命令を実行するのと同時に、前記ＧＰＵを用いて、前記非グラフィックスアプリケーションの前記実行と前記グラフィックスアプリケーションの前記実行とをインターリーブすることなく、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて、他のシェーダコアではなく、シェーダコアの前記第２のセットで前記非グラフィックスアプリケーションの前記命令のすべてを実行することと
を行わせる命令を備える、非一時的コンピュータ可読記憶媒体。
【請求項３１】
シェーダコアの前記第１のセットの前記指示を受信するための前記命令が、第１のコマンドプロセッサを用いてシェーダコアの前記第１のセットの前記指示を受信するための命令を備え、シェーダコアの前記第２のセットの前記指示を受信するための前記命令が、第２の異なるコマンドプロセッサを用いてシェーダコアの前記第２のセットの前記指示を受信するための命令を備える、請求項３０に記載の非一時的コンピュータ可読記憶媒体。
【請求項３２】
グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーションのために確保されるかを判断するための手段と、前記グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第１のセットを備え、前記グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第１のセット上で実行されるべきである、
同じＧＰＵの同じシェーダプロセッサの前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーションのために確保されるかを判断するための手段と、前記非グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第２の異なるセットを備え、前記非グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第２のセットによって実行されるべきである、
前記ＧＰＵが、前記非グラフィックスアプリケーションと前記グラフィックスアプリケーションの前記実行をインターリーブすることなく、実質的に同時に前記グラフィックスアプリケーションの命令と前記非グラフィックスアプリケーションの命令とを実行することを可能にするために、シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信するための手段と
を備えるプロセッサ。
【請求項３３】
１つまたは複数のプロセッサに、
前記１つまたは複数のプロセッサ上のドライバを用いて、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーションのために確保されるかを判断することと、前記グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第１のセットを備え、前記グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第１のセット上で実行されるべきである、
前記１つまたは複数のプロセッサ上の前記ドライバを用いて、同じＧＰＵの同じシェーダプロセッサの前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーションのために確保されるかを判断することと、前記非グラフィックスアプリケーションのために確保された前記判断されたシェーダコアは、シェーダコアの第２の異なるセットを備え、前記非グラフィックスアプリケーションのすべての命令は、シェーダコアの前記第２のセットによって実行されるべきである、
前記ＧＰＵが、前記非グラフィックスアプリケーションと前記グラフィックスアプリケーションの前記実行をインターリーブすることなく、実質的に同時に前記グラフィックスアプリケーションの命令と前記非グラフィックスアプリケーションの命令とを実行することを可能にするために、シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を行わせる命令を備える、非一時的コンピュータ可読記憶媒体。
【請求項３４】
プロセッサと、
グラフィックス処理ユニット（ＧＰＵ）と
を備え、
前記プロセッサが、
シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、前記ＧＰＵのシェーダプロセッサの前記シェーダコアの前記第１のセットを判断することと、
シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、同じＧＰＵの同じシェーダプロセッサのシェーダコアの前記第２のセットを判断することと、
前記ＧＰＵが、互いに干渉せずに実質的に同時に前記グラフィックスアプリケーションの命令と前記非グラフィックスアプリケーションの命令とを実行することを可能にするために、シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を行うように構成され、
前記ＧＰＵが、
シェーダコアの前記第１のセットとシェーダコアの前記第２のセットとを含む複数のシェーダコアを含む前記シェーダプロセッサと、
前記グラフィックスアプリケーションの命令を実行するために確保された前記シェーダコアの前記第１のセットの前記指示を受信し、前記グラフィックスアプリケーションの前記命令を受信するように構成された第１のコマンドプロセッサと、
前記非グラフィックスアプリケーションの命令を実行するために確保された前記シェーダコアの前記第２の異なるセットの前記指示を受信し、前記非グラフィックスアプリケーションの前記命令を受信するように構成された第２のコマンドプロセッサと
前記シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するように構成された第１の作業負荷分配ユニットと、
前記シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するように構成された第２の異なる作業負荷分配ユニットと、
を備え、
他のシェーダコアではなく、前記シェーダコアの前記第１のセットが、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記第１の作業負荷分配ユニットの前記判断に基づいて、前記グラフィックスアプリケーションの前記命令のすべてを実行するように構成され、
他のシェーダコアではなく、前記シェーダコアの前記第２のセットが、前記グラフィックスアプリケーションの前記命令の前記実行と実質的に同時に、前記非グラフィックスアプリケーションの前記実行と前記グラフィックスアプリケーションの前記実行とをインターリーブすることなく、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記第２の作業負荷分配ユニットの前記判断に基づいて、前記非グラフィックスアプリケーションの前記命令のすべてを実行するように構成された、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、グラフィックス処理ユニット（ＧＰＵ）上で実行するアプリケーションを対象とし、より詳細には、ＧＰＵがそのようなアプリケーションを実行する方法を対象とする。
【背景技術】
【０００２】
[0002]グラフィックス処理ユニット（ＧＰＵ）は、従来、極めて限られた機能的フレキシビリティを与える固定機能パイプラインにおけるグラフィックス関係処理のみを実行することに限定されていた。より新しいＧＰＵは、プログラムを実行するプログラマブルコアを含み、それによって、従来のＧＰＵと比較してより大きい機能的フレキシビリティを与える。プログラマブルコアは、グラフィックスアプリケーションと非グラフィックスアプリケーションの両方を実行し、いわゆる汎用ＧＰＵ（ＧＰＧＰＵ：general purpose GPU）アプリケーションを可能にし得る。
【発明の概要】
【０００３】
[0003]概して、本開示は、グラフィックス処理ユニット（ＧＰＵ）上でのグラフィックスアプリケーションおよび非グラフィックスアプリケーションの並列実行のための技法に関する。ＧＰＵは、１つまたは複数のグラフィックスアプリケーションと１つまたは複数の非グラフィックスアプリケーションとを実行することが可能である複数のシェーダコア（shader core）を含み得る。本開示で説明する技法は、グラフィックスアプリケーションのためのシェーダコアの第１のセットと非グラフィックスアプリケーションのためのシェーダコアの第２のセットとを選択的に確保し得る。本技法はまた、グラフィックスアプリケーションのための命令と非グラフィックスアプリケーションのための命令とを画成し得る。このようにして、シェーダコアの第１のセット上で実行するグラフィックスアプリケーションは、シェーダコアの第２のセット上で実行する非グラフィックスアプリケーションの実行に干渉しないことがあり、その逆も同様である。そのような画成された実行は、ＧＰＵ上での同時の（すなわち、並列の）グラフィックスアプリケーションおよび非グラフィックスアプリケーションの効率的な実行を促進し得る。
【０００４】
[0004]一例では、本開示では、グラフィックス処理ユニット（ＧＰＵ）を用いて、グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサ（shader processor）のシェーダコアの第１のセットの指示を受信することと、ＧＰＵを用いて、非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信することとを含む方法について説明する。本方法は、ＧＰＵを用いて、グラフィックスアプリケーションの命令を受信することと、ＧＰＵを用いて、非グラフィックスアプリケーションの命令を受信することとをさらに含む。本方法はまた、ＧＰＵを用いて、シェーダコアの第１のセットでグラフィックスアプリケーションの命令を実行することと、グラフィックスアプリケーションの命令を実行するのと実質的に同時に、ＧＰＵを用いて、シェーダコアの第２のセットで非グラフィックスアプリケーションの命令を実行することとを含む。
【０００５】
[0005]別の例では、本開示では、プロセッサ上のドライバを用いて、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの第１のセットを判断することと、プロセッサ上のドライバを用いて、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２のセットを判断することとを含む方法について説明する。本方法はまた、シェーダコアの第１のセットの指示とシェーダコアの第２のセットの指示とをＧＰＵに送信することを含む。
【０００６】
[0006]別の例では、本開示では、複数のシェーダコアを含むシェーダプロセッサを含むグラフィックス処理ユニット（ＧＰＵ）について説明する。本ＧＰＵはまた、グラフィックスアプリケーションの命令を実行するために確保されたシェーダコアの第１のセットの指示を受信し、グラフィックスアプリケーションの命令を受信するように構成された第１のコマンドプロセッサを含む。本ＧＰＵはまた、非グラフィックスアプリケーションの命令を実行するために確保されたシェーダコアの第２の異なるセットの指示を受信し、非グラフィックスアプリケーションの命令を受信するように構成された第２のコマンドプロセッサを含む。
【０００７】
[0007]別の例では、本開示では、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの第１のセットを判断し、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２のセットを判断するように構成されたプロセッサについて説明する。本プロセッサはまた、シェーダコアの第１のセットの指示とシェーダコアの第２のセットの指示とをＧＰＵに送信するように構成される。
【０００８】
[0008]別の例では、本開示では、グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信するための第１の手段と、非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信するための第２の手段とを含むＧＰＵについて説明する。本ＧＰＵはまた、グラフィックスアプリケーションの命令を受信するための第３の手段と、非グラフィックスアプリケーションの命令を受信するための第４の手段とを備える。本ＧＰＵは、シェーダコアの第１のセットでグラフィックスアプリケーションの命令を実行するための手段と、グラフィックスアプリケーションの命令を実行するのと同時に、シェーダコアの第２のセットで非グラフィックスアプリケーションの命令を実行するための手段とをさらに備える。
【０００９】
[0009]別の例では、本開示では、１つまたは複数のプロセッサに、グラフィックス処理ユニット（ＧＰＵ）を用いて、グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信することと、ＧＰＵを用いて、非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信することとを行わせる命令を備えるコンピュータ可読記憶媒体について説明する。命令はまた、１つまたは複数のプロセッサに、ＧＰＵを用いて、グラフィックスアプリケーションの命令を受信することと、ＧＰＵを用いて、非グラフィックスアプリケーションの命令を受信することとを行わせる。命令はまた、１つまたは複数のプロセッサに、ＧＰＵを用いて、シェーダコアの第１のセットでグラフィックスアプリケーションの命令を実行することと、グラフィックスアプリケーションの命令を実行するのと同時に、ＧＰＵを用いて、シェーダコアの第２のセットで非グラフィックスアプリケーションの命令を実行することとを行わせる。
【００１０】
[0010]別の例では、本開示では、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの第１のセットを判断するための手段と、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２のセットを判断するための手段とを含むプロセッサについて説明する。本プロセッサはまた、シェーダコアの第１のセットの指示とシェーダコアの第２のセットの指示とをＧＰＵに送信するための手段を含む。
【００１１】
[0011]別の例では、本開示では、１つまたは複数のプロセッサに、１つまたは複数のプロセッサ上のドライバを用いて、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの第１のセットを判断することと、１つまたは複数のプロセッサ上のドライバを用いて、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２のセットを判断することとを行わせる命令を備えるコンピュータ可読記憶媒体について説明する。命令はまた、１つまたは複数のプロセッサに、シェーダコアの第１のセットの指示とシェーダコアの第２のセットの指示とをＧＰＵに送信することを行わせる。
【００１２】
[0012]別の例では、本開示では、プロセッサとグラフィックス処理ユニット（ＧＰＵ）とを含む装置について説明する。本プロセッサは、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットを判断し、シェーダコアの第２の異なるセットによって実行されるべきグラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２のセットを判断し、シェーダコアの第１のセットの指示とシェーダコアの第２のセットの指示とをＧＰＵに送信するように構成される。本ＧＰＵは、シェーダコアの第１のセットとシェーダコアの第２のセットとを含む複数のシェーダコアを含むシェーダプロセッサと、グラフィックスアプリケーションの命令を実行するために確保されたシェーダコアの第１のセットの指示を受信し、グラフィックスアプリケーションの命令を受信するように構成された第１のコマンドプロセッサと、非グラフィックスアプリケーションの命令を実行するために確保されたシェーダコアの第２の異なるセットの指示を受信し、非グラフィックスアプリケーションの命令を受信するように構成された第２のコマンドプロセッサとを含む。
【００１３】
[0013]本開示の１つまたは複数の態様の詳細を添付の図面および以下の説明に記載する。本開示の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１４】
【図１】[0014]本開示で説明する１つまたは複数の例示的な技法を実装し得るデバイスを示すブロック図。
【図２】[0015]図１のグラフィックス処理ユニット（ＧＰＵ）の一例をさらに詳細に示すブロック図。
【図３】[0016]図１のＧＰＵの別の例をさらに詳細に示すブロック図。
【図４】[0017]本開示で説明する１つまたは複数の例による例示的な技法を示すフローチャート。
【図５】[0018]本開示で説明する１つまたは複数の例による別の例示的な技法を示すフローチャート。
【図６】[0019]図１に示した例示的なデバイスをさらに詳細に示すブロック図。
【発明を実施するための形態】
【００１５】
[0020]グラフィックス処理ユニット（ＧＰＵ）は、コマンドプロセッサと、固定機能グラフィックス処理ハードウェアユニットと、シェーダプロセッサを形成する１つまたは複数のシェーダコアとを含む。従来、シェーダプロセッサの１つまたは複数のシェーダコアは、グラフィックスデータに対して機能を実行することに限定されたプログラムを実行していた。たとえば、１つまたは複数のシェーダコアは、頂点シェーダとフラグメントシェーダとを実行し、従来、非グラフィックスアプリケーションを実行していなかった。
【００１６】
[0021]しかしながら、ＧＰＵによってサポートされる超並列（massive parallel）計算効率は非グラフィックス関係アプリケーションに利益を与え得る。たとえば、より新しいＧＰＵは、一般的な処理機能を与え、汎用ＧＰＵ（ＧＰＧＰＵ）と呼ばれることがある。これらのＧＰＧＰＵのシェーダコアは、グラフィックスアプリケーションならびに非グラフィックスアプリケーションを実行し得る。
【００１７】
[0022]グラフィックスアプリケーションと非グラフィックスアプリケーションが両方ともＧＰＧＰＵの１つまたは複数のシェーダコア上で実行するので、非グラフィックスアプリケーションの実行はグラフィックスアプリケーションの実行に潜在的に干渉し得る。たとえば、ＧＰＧＰＵのシェーダコアは、非グラフィックスアプリケーションと、デバイスのためのユーザインターフェースを生成するグラフィックスアプリケーションとを実行していると仮定する。この例では、非グラフィックスアプリケーションの実行がユーザインターフェースの生成に干渉することが可能であり得る。この干渉によりユーザインターフェースが反応しなくなることがあり、それによりユーザエクスペリエンスが潜在的に低下することがある。
【００１８】
[0023]以下でより詳細に説明するように、本開示では、単一のＧＰＧＰＵのシェーダプロセッサの１つまたは複数のシェーダコアが、非グラフィックスアプリケーションがグラフィックスアプリケーションの性能に干渉することなしにグラフィックスアプリケーションと非グラフィックスアプリケーションとを実行し得、その逆も同様である技法について説明する。たとえば、シェーダプロセッサの１つまたは複数のシェーダコアはグラフィックスアプリケーションのために確保され得、シェーダプロセッサの１つまたは複数の他のシェーダコアは非グラフィックスアプリケーションのために確保され得る。シェーダコアの確保は静的にまたは動的に行われ得る。たとえば、シェーダコアの確保はあらかじめ決定され得る。別の例では、グラフィックスアプリケーションおよび非グラフィックスアプリケーションの実行中に、本技法は、いくつのシェーダコアがグラフィックスアプリケーションのために確保されるべきか、およびいくつのシェーダコアが非グラフィックスアプリケーションのために確保されるべきかを選択し得る。本技法により、単一の組込みＧＰＵを、グラフィックスアプリケーションと非グラフィックスアプリケーションとの間で共有することがはるかに簡単になることがあり、それにより、高レイテンシ非グラフィックスアプリケーションが、低レイテンシグラフィックスアプリケーションを中断させることなしに実行することが可能になり得る。
【００１９】
[0024]図１は、本開示で説明する１つまたは複数の例示的な技法を実装し得るデバイスを示すブロック図である。図１は、プロセッサ１２と、グラフィックス処理ユニット（ＧＰＵ）１６と、システムメモリ２６とを含むデバイス１０を示す。デバイス１０は、図６にさらに示されているように、図１に示された構成要素に加えて、構成要素を含む。デバイス１０の例としては、限定はしないが、メディアプレーヤなどのビデオデバイス、セットトップボックス、携帯電話またはいわゆるスマートフォンなどのワイヤレスハンドセット、携帯情報端末（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどがある。
【００２０】
[0025]プロセッサ１２はデバイス１０の中央処理ユニット（ＣＰＵ）であり得る。ＧＰＵ１６は、グラフィックス関係機能を実行するように構成された処理ユニットであり得る。たとえば、ＧＰＵ１６は、ディスプレイ上での提示のためにグラフィックスデータを生成し、出力し、ならびにＧＰＵ１６によって行われる超並列処理（massive processing parallelism）を活用する非グラフィックス関係機能を実行し得る。たとえば、ＧＰＵ１６は、計算アプリケーションと呼ばれることがある、グラフィックスアプリケーションと非グラフィックスアプリケーションの両方を実行し得る。ＧＰＵ１６は、グラフィックス処理能力に加えて汎用処理能力を与え得るので、ＧＰＵ１６は汎用ＧＰＵ（ＧＰＧＰＵ）と呼ばれることがある。
【００２１】
[0026]プロセッサ１２およびＧＰＵ１６の例としては、限定はしないが、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路など、様々な汎用または専用処理ハードウェアのいずれかがある。いくつかの例では、ＧＰＵ１６は、グラフィックスを処理するために、ならびに非グラフィックス関係アプリケーションを実行するために超並列処理を行うことなど、特定の使用のために設計された複数のプロセッサコアを有するマイクロプロセッサであり得る。さらに、プロセッサ１２およびＧＰＵ１６は別個の構成要素として示されているが、本開示の態様はそのように限定されない。たとえば、プロセッサ１２およびＧＰＵ１６は共通の集積回路（ＩＣ）中に常駐し得る。
【００２２】
[0027]システムメモリ２６は、デバイス１０のシステムメモリであり、プロセッサ１２およびＧＰＵ１６の外部にある。たとえば、システムメモリ２６は、プロセッサ１２およびＧＰＵ１６に対してオフチップであり得、システムバスを介してアクセス可能であり得る。図示のように、システムメモリ２６は、プロセッサ１２およびＧＰＵ１６によって実行されるアプリケーションを記憶し得る。たとえば、グラフィックスアプリケーション２８は、ＧＰＵ１６が実行するグラフィックスアプリケーションである。グラフィックスアプリケーション２８の例としては頂点シェーダおよびフラグメントシェーダがある。非グラフィックスアプリケーション３０は、ＧＰＵ１６が実行する非グラフィックスアプリケーションである。非グラフィックスアプリケーション３０の一例は、パノラマピクチャを作成するために異なるピクチャをスティッチするアプリケーションである。たとえば、ピクチャは、デバイス１０によってキャプチャされ、ＧＰＵ１６とともにスティッチされたピクチャであり得る。ＧＰＵドライバ１４は、システムメモリ２６が記憶するアプリケーションの別の例である。プロセッサ１２は、プロセッサ１２とＧＰＵ１６との間の通信を可能にするアプリケーションであり得るＧＰＵドライバ１４を実行し得る。
【００２３】
[0028]さらに、システムメモリ２６は、実行されたアプリケーションが動作するデータ、ならびにアプリケーションから生じるデータを記憶し得る。しかしながら、すべてのそのようなデータが、あらゆる例においてシステムメモリ２６に記憶される必要があるとは限らない。いくつかの事例では、データは、プロセッサ１２またはＧＰＵ１６上のメモリにローカルに記憶され得る。
【００２４】
[0029]システムメモリ２６はコンピュータ可読記憶媒体の一例であり得る。たとえば、システムメモリ２６は、本開示では、プロセッサ１２とＧＰＵ１６とに、各々に起因する機能を実行させる命令を記憶し得る。システムメモリ２６は、１つまたは複数のプロセッサ、たとえば、アプリケーションプロセッサ１２またはＧＰＵ１６に様々な機能を実行させる命令を備えるコンピュータ可読記憶媒体と見なされ得る。
【００２５】
[0030]システムメモリ２６の例としては、限定はしないが、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。システムメモリ２６は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示し得る。ただし、「非一時的」という用語は、システムメモリ２６が非可動であることを意味するものと解釈されるべきでない。一例として、システムメモリ２６は、デバイス１０から取り外され、別のデバイスに移され得る。別の例として、システムメモリ２６と実質的に同様のストレージデバイスが、デバイス１０中に挿入され得る。いくつかの例では、非一時的記憶媒体は、経時的に変動し得るデータを（たとえば、ＲＡＭに）記憶し得る。
【００２６】
[0031]上記で説明したように、ＧＰＵ１６は、１つまたは複数のグラフィックスアプリケーション（たとえば、グラフィックスアプリケーション２８）と１つまたは複数の非グラフィックスアプリケーション（たとえば、非グラフィックスアプリケーション３０）とを同時に（すなわち、並列に）実行し得る。しかしながら、不十分なリソース管理により、非グラフィックスアプリケーション３０の実行がグラフィックスアプリケーション２８の実行に干渉することがある。本開示の技法によれば、ＧＰＵ１６は、最小の実行干渉でグラフィックスアプリケーション２８と非グラフィックスアプリケーション３０とを同時に実行することが可能であり得る。
【００２７】
[0032]図示のように、ＧＰＵ１６は、（グラフィックス機能パイプライン１８と総称される）グラフィックス機能パイプライン１８Ａおよび１８Ｂと、（非グラフィックス機能パイプライン２０と総称される）非グラフィックス機能パイプライン２０Ａおよび２０Ｂと、シェーダプロセッサ２２と、ＧＰＵメモリ２４とを含む。ＧＰＵメモリ２４はＧＰＵ１６のためのオンチップメモリであり得る。たとえば、ＧＰＵメモリ２４は、グラフィックス機能パイプライン１８、非グラフィックス機能パイプライン２０、およびシェーダプロセッサ２２が迅速にデータにアクセスすることを可能にする、キャッシュメモリであり得る。
【００２８】
[0033]グラフィックス機能パイプライン１８はグラフィックス関係機能を処理し、非グラフィックス機能パイプライン２０は非グラフィックス関係機能を処理する。このようにして、本開示で説明する技法は、非グラフィックス関係機能のためのリソースからグラフィックス関係機能のためのリソースを画成する。たとえば、グラフィックス機能パイプライン１８によって処理されるグラフィックス関係機能は、ＧＰＵ１６がグラフィックス関係機能と非グラフィックス関係機能の両方を同時に実行しているときでも、非グラフィックス機能パイプライン２０によって処理される非グラフィックス関係機能に干渉しないことがあり、その逆も同様である。言い換えれば、グラフィックス機能パイプライン１８および非グラフィックス機能パイプライン２０はそれぞれの機能を並列に実行し得る。
【００２９】
[0034]いくつかの例では、グラフィックス機能パイプライン１８および非グラフィックス機能パイプライン２０は固定機能ユニットを含み得る。しかしながら、グラフィックス機能パイプライン１８および非グラフィックス機能パイプライン２０はシェーダプロセッサ２２を共有し得る。シェーダプロセッサ２２は、グラフィックスアプリケーションと非グラフィックスアプリケーションの両方を同時に実行するように構成される。たとえば、シェーダプロセッサ２２は、グラフィックスアプリケーション２８を実行し、同時に、非グラフィックスアプリケーション３０を実行し得る。図１は、１つのグラフィックスアプリケーションおよび１つの非グラフィックスアプリケーションのみを示しているが、本開示の態様はそのように限定されない。他の例では、ＧＰＵ１６は、１つまたは複数のグラフィックスアプリケーションと１つまたは複数の非グラフィックスアプリケーションとをすべて同時に実行し得る。
【００３０】
[0035]グラフィックスアプリケーション２８と非グラフィックスアプリケーション３０とを実行するために、シェーダプロセッサ２２は、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の命令を実行する複数のシェーダコアを含む。たとえば、シェーダコアは、作業グループまたはタスクと呼ばれる、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の命令のサブセットを実行し得る。これらのシェーダコアはグラフィックスアプリケーション２８または非グラフィックスアプリケーション３０に割り振られ得る。
【００３１】
[0036]本開示で説明する技法では、ＧＰＵドライバ１４は、グラフィックスアプリケーション２８を実行するためにシェーダプロセッサ２２内のシェーダコアの第１のセットを確保し、非グラフィックスアプリケーション３０を実行するためにシェーダプロセッサ２２内のシェーダコアの第２のセットを確保し得る。上記で説明したように、ＧＰＵドライバ１４は、プロセッサ１２およびＧＰＵ１５が互いに通信することを可能にし得る。シェーダコアを確保することは、シェーダプロセッサ２２内のそのシェーダコアをグラフィックスアプリケーション２８または非グラフィックスアプリケーション３０のうちの特定の１つに割り振ることを指し得る。たとえば、グラフィックスアプリケーション２８のために確保されたシェーダコアは、グラフィックスアプリケーション２８の命令を実行するために割り振られ、そのシェーダコアがもはやグラフィックスアプリケーション２８のために確保されなくなるまで、非グラフィックスアプリケーション３０の命令を実行することが可能でないことがある。同様に、非グラフィックスアプリケーション３０のために確保されたシェーダコアは、そのシェーダコアがもはや非グラフィックスアプリケーション３０のために確保されなくなるまで、グラフィックスアプリケーション２８の命令を実行するために使用可能でないことがある。
【００３２】
[0037]例示的な例として、シェーダプロセッサ２２は４つのシェーダコアを含み得るが、より多いまたはより少ないシェーダコアが可能である。この例では、ＧＰＵドライバ１４は、グラフィックスアプリケーション２８のために４つのシェーダコアのうちの２つを確保し、非グラフィックスアプリケーション３０のために残りの２つのシェーダコアを確保し得る。ただし、シェーダコアの任意の組合せが可能である。たとえば、ＧＰＵドライバ１４は、グラフィックスアプリケーション２８のために４つのシェーダコアのうちの３つを確保し、非グラフィックスアプリケーション３０のために残りのシェーダコアを確保し得る。ＧＰＵドライバ１４が、グラフィックスアプリケーション２８のためにすべての４つのシェーダコアを確保し、非グラフィックスアプリケーション３０のためにいずれも確保しないこと、またはその逆さえも可能であり得る。
【００３３】
[0038]ＧＰＵドライバ１４は、プロセッサ１２がＧＰＵ１６を制御することを可能にする、プロセッサ１２とＧＰＵ１６との間のインターフェースとして機能し得る。たとえば、プロセッサ１２がＧＰＵ１６にコマンドを送信する必要があるとき、プロセッサ１２がコマンドを送信するのは、ＧＰＵドライバ１４を通してである。プロセッサ１２がＧＰＵ１６に送信し得るコマンドは、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の命令をロードし、実行するためのコマンドと、データがシステムメモリ２６中のどこに位置するかをＧＰＵ１６に示すコマンド、およびそのようなデータをロードするためのコマンドと、他のそのようなコマンドとを含む。このようにして、プロセッサ１２はＧＰＵ１６の機能を制御し得る。
【００３４】
[0039]図示ように、ＧＰＵドライバ１４はプロセッサ１２内に破線で示されている。これは、ＧＰＵドライバ１４が、プロセッサ１２上で実行しているソフトウェアであることを示すためである。この例では、システムメモリ２６は、プロセッサ１２が実行のために取り出す、ＧＰＵドライバ１４のソースコードまたはオブジェクトコードを記憶する。代替として、ＧＰＵドライバ１４は、プロセッサ１２内に組み込まれたハードウェア、またはプロセッサ１２およびＧＰＵ１６に結合する、プロセッサ１２の外部のハードウェアであり得る。概して、ＧＰＵドライバ１４は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せであり得る。説明および明快のために、本開示で説明する例について、プロセッサ１２上で実行しているソフトウェアであるＧＰＵドライバ１４に関して説明する。
【００３５】
[0040]ＧＰＵドライバ１４は、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０のために確保されるべきであるシェーダコアの数を判断するために様々な基準を利用し得る。一例として、プロセッサ１２はＧＰＵ１６を制御するので、プロセッサ１２は、グラフィックスアプリケーション２８のためのいくつの命令および非グラフィックスアプリケーション３０のためのいくつの命令が、シェーダプロセッサ２２のシェーダコアによる実行のために現在キューイングされているかに関してよく知っていることがある。この例では、ＧＰＵドライバ１４は、シェーダプロセッサ２２による実行のためにキュー中にある、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０のための命令の数に基づいてシェーダコアを確保し得る。
【００３６】
[0041]たとえば、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０のためのキューイングされた命令の数が等しい場合、ＧＰＵドライバ１４は、アプリケーションの各タイプについて、シェーダプロセッサ２２の等しい数のシェーダコアを確保し得る。グラフィックスアプリケーション２８のためのコマンドよりも非グラフィックスアプリケーション３０のためのコマンドが多い場合、ＧＰＵドライバ１４は、グラフィックスアプリケーション２８のためのシェーダコアよりも非グラフィックスアプリケーション３０のためのシェーダコアを多く確保し得る。実行のために現在キューイングされている、非グラフィックスアプリケーション３０のための命令がない場合、ＧＰＵドライバ１４は、グラフィックスアプリケーション２８のためにすべてのシェーダコアを確保し得る。いくつかの例では、各アプリケーションのために確保されたシェーダコアの数は、実行のためにキューイングされた命令の数に比例し得る。しかしながら、実行時間および優先度など、他のファクタが、アプリケーションの各々のために確保されたシェーダコアの数に影響を及ぼすこともある。
【００３７】
[0042]いくつかの例では、ＧＰＵドライバ１４はグラフィックスアプリケーション２８のほうへバイアスされ得る。たとえば、反応しないグラフィックスアプリケーションがユーザエクスペリエンスを低下させることがある。ユーザエクスペリエンスのそのような低下を制限するために、ＧＰＵドライバ１４は、非グラフィックスアプリケーション３０の命令を実行する際にユーザエクスペリエンスがわずかな低下を生じる場合でも、グラフィックスアプリケーション２８専用の十分なシェーダコアがあることを保証するように構成され得る。言い換えれば、ユーザエクスペリエンスの観点から、グラフィックスアプリケーション２８の適時の実行は非グラフィックスアプリケーション３０の適時の実行よりも有益であり得る。より良いユーザエクスペリエンスを支援するために、ＧＰＵドライバ１４は、十分なシェーダコアをグラフィックスアプリケーション２８に充てるために非グラフィックスアプリケーション３０の適時の実行を犠牲にするように構成され得る。
【００３８】
[0043]これらの場合では、ＧＰＵドライバ１４はシェーダコアを不均等に割り当て得る。たとえば、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０のためのキューイングされた命令の数が等しい場合、ＧＰＵドライバ１４は、非グラフィックスアプリケーション３０のためのシェーダコアよりもグラフィックスアプリケーション２８のためのシェーダコアを多く確保し得る。非グラフィックスアプリケーション３０のための命令がグラフィックスアプリケーション２８のための命令の２倍である場合、ＧＰＵドライバ１４は、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の各々に等しい数のシェーダコアを割り当て得る。
【００３９】
[0044]このようにして、ＧＰＵドライバ１４は、好適なユーザエクスペリエンスを与えるために、いくつのシェーダコアがグラフィックスアプリケーション２８によって必要とされ、いくつのシェーダコアが非グラフィックスアプリケーション３０によって必要とされるかを判断し得る。そのような好適なユーザエクスペリエンスを実現するために、ＧＰＵドライバ１４はいくつかの基準を利用し得る。たとえば、上記で説明したように、グラフィックスアプリケーション２８の無中断実行は、非グラフィックスアプリケーション３０の遅いまたは遅延した実行よりも重要であり得、それが、非グラフィックスアプリケーション３０のためのシェーダコアがより少ないことを意味する場合でも、ＧＰＵドライバ１４は、十分なシェーダコアがグラフィックスアプリケーション２８のために利用可能であることを保証するように構成され得る。
【００４０】
[0045]いくつかの例では、非グラフィックスアプリケーション３０の実行をグラフィックスアプリケーション２８よりも優先させることが可能であり得る。たとえば、非グラフィックスアプリケーション３０は、適時の実行がグラフィックスディスプレイの潜在的な軽微な劣化よりも有益であり得る重要なアプリケーションであり得る。このようにして、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の相対的優先度は構成可能であり得る。
【００４１】
[0046]たとえば、プロセッサ１２によって実行されるＧＰＵドライバ１４は、いくつのシェーダコアがグラフィックスアプリケーション２８のために確保されるべきか、およびいくつのシェーダコアが非グラフィックスアプリケーション３０のために確保されるべきかを判断する際に追加の基準を利用し得る。たとえば、グラフィックスアプリケーション２８の１つまたは複数のタスクは、比較的短い時間期間（たとえば、数ミリ秒）で完了し得、非グラフィックスアプリケーション３０の１つまたは複数のタスクは、比較的長い時間期間（たとえば、数秒）で完了し得る。例示的な例として、ＧＰＵ１６は、ビデオゲームのフレームまたはユーザインターフェーススクリーンを生成するために複数のグラフィックスアプリケーションを実行し得、それらのうちの１つがグラフィックスアプリケーション２８である。一例として、ＧＰＵ１６はまた、一例として複数のカメラピクチャを単一のパノラマ画像にスティッチするか、または他の例として解読（decryption）または復元（decompression）を行うために、非グラフィックスアプリケーション３０を実行し得る。
【００４２】
[0047]この状況では、ＧＰＵ１６は、滑らかなアニメーションを実現するために、３０〜６０フレーム毎秒のリフレッシュ速度でフレームを生成する必要があり得る。そのような３０〜６０フレーム毎秒のリフレッシュ速度では、シェーダプロセッサ２２は、ＧＰＵ１６が３０〜６０フレーム毎秒のリフレッシュ速度を達成することができるように数ミリ秒以内でグラフィックスアプリケーション２８のタスクの実行を完了する必要があり得る。非グラフィックスアプリケーション３０の実行は、滑らかなアニメーション、またはそのことについてどんなアニメーションをも実現することを必要としないことがある。したがって、ＧＰＵ１６は、数ミリ秒以上で非グラフィックスアプリケーション３０の実行を完了することが好適であり得る。たとえば、この例では、非グラフィックスアプリケーション３０は、ほぼ数ミリ秒以内で単一のパノラマ画像へのカメラピクチャのスティッチングを完了する必要がないことがあり、非グラフィックスアプリケーション３０は、スティッチングを完了するのに０．５〜１秒かかることが好適であり得る。
【００４３】
[0048]ＧＰＵドライバ１４は、概して、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０が、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０のためのシェーダコアの数を判断するためのタスクを完了するために異なる時間量を必要とし得る基準を利用し得る。本開示で使用するタスクは、グラフィックスアプリケーション２８または非グラフィックスアプリケーション３０によって実行される機能のサブセットを指す。タスクは作業グループと見なされ得る。グラフィックスアプリケーション２８の場合、作業グループを画成するための論理的な方法があり得る。たとえば、１つの作業グループは、グラフィックスアプリケーション２８のための１つのフレーム、またはそのフレーム中のタイルを生成するために必要とされるすべての機能を含み得る。作業グループのこの論理的な画成のために、シェーダプロセッサ２２がグラフィックスアプリケーション２８のためのタスクを完了するのにどのくらいの時間がかかるかを予測することは容易であり得る。
【００４４】
[0049]非グラフィックスアプリケーション３０のための機能を画成するための論理的な方法がないことがあり、それにより、シェーダプロセッサ２２が非グラフィックスアプリケーション３０のためのタスクを完了するのにかかる時間量を推定することが困難になり得る。グラフィックスアプリケーション２８のためのシェーダプロセッサ２２のシェーダコアを確保することと、非グラフィックスアプリケーション３０のためのシェーダプロセッサ２２のシェーダコアを確保することとによって、本技法は、非グラフィックスアプリケーション３０がタスクを完了するのにどのくらいの時間がかかるかを予測することが困難であり得る場合でも、グラフィックスアプリケーション２８と非グラフィックスアプリケーション３０との間の実行干渉を最小限に抑えることが可能であり得る。
【００４５】
[0050]本開示で説明する技法は、システムメモリ２６への過度のアクセスなしに、および複数のＧＰＵを必要とすることなしに、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の効率的な並列実行を可能にし得る。たとえば、ＧＰＵ１６は、グラフィックスアプリケーション２８を実行するために非グラフィックスアプリケーション３０を実行するのを停止する必要がないことがある。たとえば、非グラフィックスアプリケーションに専用のシェーダプロセッサ２２のシェーダコアは非グラフィックスアプリケーション上でのみ動作し、グラフィックスアプリケーションに専用のシェーダプロセッサ２２のプロセッサコアはグラフィックスアプリケーション上でのみ別々に動作する。また、本技法は、単一のＧＰＵ１６上で実行するためにグラフィックスアプリケーション２８と非グラフィックスアプリケーション３０の両方を可能にし得る。
【００４６】
[0051]いくつかの他の技法は、グラフィックスアプリケーション２８の実行を可能にするために非グラフィックスアプリケーション３０の実行を停止し得る。しかしながら、非グラフィックスアプリケーション３０の実行を停止するために、これらの他の技法において使用されるＧＰＵは、それが休止される瞬間に非グラフィックスアプリケーションのすべての状態情報をシステムメモリ２６に記憶し、非グラフィックスアプリケーション３０の実行が再開されたとき、システムメモリ２６からすべての状態情報を取り出す必要があり得る。すべての状態情報のこの記憶および取出しは、バス帯域幅を消費し、比較的大きい電力量を必要とし得る。
【００４７】
[0052]非グラフィックスアプリケーション３０の実行を停止し、次いで後で実行を再開するこれらの他の技法は、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０を同時に実行するのではなく、これらのアプリケーションの実行をインターリーブすると見なされ得る。本開示で説明するように、シェーダプロセッサ２２のプロセッサコアの異なるセットを使用する、同時のグラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の効率的な並列実行（すなわち、同時）は、これらのアプリケーションの実行をインターリーブする必要がないことがあり、それにより、バス帯域幅および電力消費の効率的な使用が促進され得る。
【００４８】
[0053]いくつかの他の追加の技法の例では、本技法は、非グラフィックスアプリケーション３０などの非グラフィックスアプリケーションがどのくらい長くＧＰＵ上で実行したかを計時した。実行がしきい値時間よりも長くかかった場合、ＧＰＵは、非グラフィックスアプリケーション３０を実行するのを完全に停止することになる。しかしながら、そのような技法は、いくつかのタイプの非グラフィックスアプリケーション（たとえば、実行するために割り当てられた時間よりも多くの時間を必要とする非グラフィックスアプリケーション）が実行することを可能にしなかった。
【００４９】
[0054]さらにいくつかの他の技法では、デバイスは２つのＧＰＵを含むことになる。一方のＧＰＵはグラフィックスアプリケーション２８のために確保され、他方は非グラフィックスアプリケーション３０のために確保されることになる。しかしながら、２つのグラフィックス処理デバイスを利用することはデバイス上の追加のスペースを利用し、ただし、そのような追加のスペースは利用可能でないことがある。また、所与の瞬間について、実行される必要があるグラフィックスアプリケーションがないが、実行される必要がある非グラフィックスアプリケーションがあるか、またはその逆も同様であることが可能であり得る。これらの場合のいずれでも、一方のＧＰＵはアイドルのままであるが、他方のＧＰＵはアクティブのままであり、これは、ＧＰＵの非効率的な使用であり得る。
【００５０】
[0055]図２は、図１のＧＰＵの一例をさらに詳細に示すブロック図である。たとえば、図２は、ＧＰＵ１６をさらに詳細に示し、ＧＰＵ１６は汎用ＧＰＵ（ＧＰＧＰＵ）の一例である。図示のように、シェーダプロセッサ２２およびＧＰＵメモリ２４に加えて、ＧＰＵ１６は、グラフィックスコマンドプロセッサ３２と、グラフィックス作業負荷分配ユニット３４と、（グラフィックス固定機能ユニット３６と総称される）グラフィックス固定機能ユニット３６Ａおよび３６Ｂと、非グラフィックスコマンドプロセッサ３８と、非グラフィックス作業負荷分配ユニット４０とを含み得る。シェーダプロセッサ２２は、（シェーダコア４２と総称される）複数のシェーダコア４２Ａ〜４２Ｎを含み得る。たとえば、シェーダプロセッサ２２は４つのシェーダコア４２を含み得るが、より多いまたはより少ないシェーダコア４２が可能である。いくつかの例では、シェーダコア４２は、テクスチャリングがそのようなコア中で行われることもあることを示すために、シェーダ／テクスチャコアと呼ばれることがある。ただし、理解を容易にするために、シェーダコア４２はシェーダコアまたはシェーダ／テクスチャコアを指す。
【００５１】
[0056]ＧＰＵ１６は、図２に示された構成要素以外に、追加の構成要素を含み得る。たとえば、図示のように、非グラフィックス作業負荷分配ユニット４０はシェーダプロセッサ２２に直接出力し、シェーダプロセッサ２２はＧＰＵメモリ２４に直接出力する。他の例では、非グラフィックス作業負荷分配ユニット４０とシェーダプロセッサ２２との間に、およびシェーダプロセッサ２２とＧＰＵメモリ２４との間に１つまたは複数の構成要素があり得る。さらに、ＧＰＵ１６内の構成要素の特定の構成も、例示のために与えたものであり、限定的であると考えられるべきではない。代替例では、構成要素は、図２に示された方法とは異なる方法で順序付けられ得る。
【００５２】
[0057]図２において、グラフィックスコマンドプロセッサ３２、グラフィックス作業負荷分配ユニット３４、グラフィックス固定機能ユニット３６Ａおよびグラフィックス固定機能ユニット３６Ｂは、グラフィックス機能パイプライン１８Ａおよび１８Ｂ（図１）の一部であり得る。また、非グラフィックスコマンドプロセッサ３８および非グラフィックス作業負荷分配ユニット４０は、非グラフィックス機能パイプライン２０Ａ（図１）の一部であり得る。ＧＰＵ１６は、明快のために図２に示していない非グラフィックス機能パイプライン２０Ｂ（図１）の一部になる構成要素を含み得る。ＧＰＵ１６のこれらの様々な構成要素は、ハードウェア、ハードウェア上で実行されるソフトウェア、またはそれらの組合せとして実装され得る。限定としてではなく、単に例示のために、ＧＰＵ１６の構成要素をハードウェアユニットとして説明する。
【００５３】
[0058]図示のように、ＧＰＵ１６は、２つのコマンドプロセッサ（すなわち、グラフィックスコマンドプロセッサ３２および非グラフィックスコマンドプロセッサ３８）を含む。代替例では、図３に関してより詳細に説明するように、ＧＰＵ１６が単一のコマンドプロセッサを含むことが可能であり得る。図２の例では、グラフィックスコマンドプロセッサ３２と非グラフィックスコマンドプロセッサ３８は互いに同じであり得る。グラフィックスコマンドプロセッサ３２は、グラフィックス機能のためのものであり、非グラフィックス機能のためのものでないコマンドまたは命令に基づいて動作し得る。非グラフィックスコマンドプロセッサ３８は、非グラフィックス機能のためのものであり、グラフィックス機能のためのものでないコマンドまたは命令に基づいて動作し得る。このようにして、ＧＰＵ１６は、グラフィックスコマンドおよび命令と非グラフィックスコマンドおよび命令とを画成し得、それによって、ＧＰＵ１６上でのグラフィックスアプリケーションと非グラフィックスアプリケーションの両方の効率的な並列実行（たとえば、同時）を促進し得る。
【００５４】
[0059]たとえば、図１に示したように、プロセッサ１２上で実行しているＧＰＵドライバ１４は、システムメモリ２６からグラフィックスアプリケーション２８の命令とそれらの命令によって使用されるべきであるデータとを取り出すようにグラフィックスコマンドプロセッサ３２に命令し得る。ＧＰＵドライバ１４はまた、グラフィックスアプリケーション２８のために確保されたシェーダコア４２の数（たとえば、グラフィックスアプリケーション２８のために確保されたシェーダコア４２の第１のセット）、および場合によってはシェーダコア４２のうちのどのシェーダコアがグラフィックスアプリケーション２８のために確保されるかを示す指示をグラフィックスコマンドプロセッサ３２に送信し得る。同様に、ＧＰＵドライバ１４は、システムメモリ２６から非グラフィックスアプリケーション３０の命令とそれらの命令によって使用されるべきであるデータとを取り出すように非グラフィックスコマンドプロセッサ３８に命令し得る。ＧＰＵドライバ１４はまた、非グラフィックスアプリケーション３０のために確保されたシェーダコア４２の数（たとえば、非グラフィックスアプリケーション３０のために確保された１つまたは複数のシェーダコア４２の第２のセット）、および場合によってはシェーダコア４２のうちのどのシェーダコアが非グラフィックスアプリケーション３０のために確保されるかを示す指示を非グラフィックスコマンドプロセッサ３８に送信し得る。
【００５５】
[0060]グラフィックスコマンドプロセッサ３２と非グラフィックスコマンドプロセッサ３８の両方を含むＧＰＵ１６は、単一のコマンドプロセッサを含む他のＧＰＵと比較して、ＧＰＵ１６の全体的なサイズを増加させ得る。ただし、追加のコマンドプロセッサを含めることによるサイズの増加は極めてわずかであり得る。たいていの場合、追加のコマンドプロセッサを含めることによるサイズの増加は、上記で説明したように、２つの別個のグラフィックス処理デバイスを使用することよりもはるかに小さい。
【００５６】
[0061]さらに、追加のコマンドプロセッサを含めることは、単一のコマンドプロセッサを含むＧＰＵと比較して、ＧＰＵ１６に追加の電力を使用させ得る。ただし、本開示で説明する技法は、追加の電力の使用を最小限に抑え得る。たとえば、上記で説明したように、ＧＰＵドライバ１４は、非グラフィックスアプリケーション３０およびグラフィックスアプリケーション２８のための命令またはコマンドがあるかどうかを判断するように構成され得る。非グラフィックスアプリケーション３０のための命令がない場合、ＧＰＵドライバ１４は、電源を切断するように非グラフィックスコマンドプロセッサ３８に命令し得る。ＧＰＵドライバ１４は、次いで、必要とされるときに電源投入するようにコマンドプロセッサ３８に命令し得る。
【００５７】
[0062]グラフィックス作業負荷分配ユニット３４および非グラフィックス作業負荷分配ユニット４０は、作業負荷をそれぞれの確保されたシェーダコア４２にどのように分配するかを判断する。たとえば、グラフィックス作業負荷分配ユニット３４は、グラフィックスコマンドプロセッサ３２から、シェーダコア４２のうちのどのシェーダコアがグラフィックスアプリケーション２８のために確保されるかの指示を受信し得る。グラフィックス作業負荷分配ユニット３４は、グラフィックスコマンドプロセッサ３２がシステムメモリ２６から取り出した命令が、グラフィックスアプリケーション２８のために確保されたシェーダコア４２間でどのように分割されるべきかを判断し得る。非グラフィックス作業負荷分配ユニット４０は、非グラフィックスコマンドプロセッサ３８から、シェーダコア４２のうちのどのシェーダコアが非グラフィックスアプリケーション３０のために確保されるかの指示を受信し得る。非グラフィックス作業負荷分配ユニット４０は、非グラフィックスコマンドプロセッサ３８がシステムメモリ２６から取り出した命令が、非グラフィックスアプリケーション３０のために確保されたシェーダコア４２間でどのように分割されるべきかを判断し得る。
【００５８】
[0063]グラフィックス固定機能ユニット３６は、特定のグラフィックス機能を実行するハードワイヤード固定機能論理ユニットであり得る。たとえば、シェーダプロセッサ２２の確保されたシェーダコア４２上で実行しているグラフィックスアプリケーション２８は、機能的フレキシビリティを可能にし得、グラフィックス固定機能ユニット３６は、もしあれば、最小の機能的フレキシビリティを与え得る。グラフィックス固定機能ユニット３６の各々は、プリミティブアセンブリユニット、錐台ユニット（frustum unit）、透視除算ユニット（perspective divide unit）、ビューポート変換ユニット、深度テストユニット、ラスタライゼーションユニット（rasterization unit）、フラグメント単位動作ユニット（per-fragment operation unit）、およびアルファブレンディングユニット（alpha blending unit）など、様々なハードワイヤードユニットを含み得る。グラフィックス機能パイプライン１８Ａの一部を形成し得る、固定機能ユニット３６のこれらのユニットは、例示のために与えたものであり、限定的であると考えられるべきではない。さらに、これらのユニットのいくつかはグラフィックス固定機能ユニット３６Ａ中に常駐し得、他のユニットはグラフィックス固定機能ユニット３６Ｂ中に常駐し得る。これらのユニットの特定の順序は異なる例においても異なり得る。
【００５９】
[0064]図２において、グラフィックス固定機能ユニット３６Ｂおよびシェーダプロセッサ２２はＧＰＵメモリ２４に出力し得る。ＧＰＵメモリ２４は、（たとえば、アドレスベースの）カラーバッファキャッシュまたは汎用キャッシュ、あるいはそれらの任意の組合せを含む、多段専用キャッシュ（multi-stage specialized cache）など、キャッシュメモリであり得る。いくつかの例では、ＧＰＵメモリ２４は、２つの領域（すなわち、グラフィックスメモリ４４および非グラフィックスメモリ４６）に分割され得る。この例では、グラフィックスメモリ４４はグラフィックス機能のために確保され得、非グラフィックスメモリ４６は非グラフィックス機能のために確保され得る。
【００６０】
[0065]ＧＰＵメモリ２４は、グラフィックスメモリ４４のためのストレージスペースを非グラフィックスメモリ４６よりも優先させ得る。一例として、グラフィックスコマンドプロセッサ３２および非グラフィックスコマンドプロセッサ３８のうちの少なくとも１つは、ストレージグラフィックスデータを非グラフィックスデータよりも優先させるようにＧＰＵメモリ２４に命令し得る。言い換えれば、グラフィックス機能（たとえば、命令またはコマンド、命令またはコマンドによって使用されるべきデータ、および得られたデータ）のための記憶は非グラフィックス機能のための記憶よりも優先させられ得る。この例では、次いで、非グラフィックス機能のためのデータは、ＧＰＵメモリ２４内にローカルにではなく、システムメモリ２６に記憶され得る。また、キャッシュミスが生じた場合、グラフィックスアプリケーション２８のための要求、および一般のグラフィックス機能は、たとえば、システムバスを介した、システムメモリ２６へのアクセスのために、非グラフィックスアプリケーション３０および一般の非グラフィックス機能に勝る優先度を与えられ得る。メモリ記憶および取出しにおけるそのような優先度は、ユーザエクスペリエンスの低下を最小限に抑えるために、グラフィックスアプリケーションが適時に実行されることをさらに保証し得る。
【００６１】
[0066]図３は、図１のＧＰＵの別の例をさらに詳細に示すブロック図である。図３に示すＧＰＵ１６は、図２に示したＧＰＵ１６と実質的に同様であり得る。したがって、簡潔のために、異なるそれらのユニットのみについて、詳細に説明する。図２に示したユニットと同じ参照番号をもつ図３に示すユニットは、実質的に同様の方法で機能し得る。
【００６２】
[0067]図３の例では、ＧＰＵ１６は、２つの別個のコマンドプロセッサ（たとえば、図２のグラフィックスコマンドプロセッサ３２および非グラフィックスコマンドプロセッサ３８）ではなく、単一のコマンドプロセッサ３３を含み得る。この例では、コマンドプロセッサ３３は、コマンドの２つ以上のストリームを並列に（すなわち、同時に）処理するように構成され得る。たとえば、ＧＰＵドライバ１４は、ＧＰＵドライバ１４がグラフィックスコマンドプロセッサ３２と非グラフィックスコマンドプロセッサ３８とに送信した命令と同様の命令をコマンドプロセッサ３３に送信し得る。
【００６３】
[0068]一例として、ＧＰＵドライバ１４は、システムメモリ２６からグラフィックスアプリケーション２８の命令を取り出し、システムメモリ２６からの命令によって使用されるべきであるデータを取り出し、グラフィックスアプリケーション２８のために確保されたシェーダコア４２の数を示し、場合によってはシェーダコア４２のうちのどのシェーダコアがグラフィックスアプリケーション２８のために確保されるかを示すようにコマンドプロセッサ３３に命令し得る。コマンドプロセッサ３３がグラフィックスアプリケーション２８のための命令を受信するのと同時にまたは重複して、コマンドプロセッサ３３は、システムメモリ２６から非グラフィックスアプリケーション３０の命令を取り出し、システムメモリ２６からの命令によって使用されるべきであるデータを取り出し、非グラフィックスアプリケーション３０のために確保されたシェーダコア４２の数を示し、場合によってはシェーダコア４２のうちのどのシェーダコアが非グラフィックスアプリケーション３０のために確保されるかを示すようにコマンドプロセッサ３３に命令する、ＧＰＵドライバ１４からの命令を受信し得る。
【００６４】
[0069]この例では、コマンドプロセッサ３３は、どの命令がグラフィックス機能のためのものであるかと、どの命令が非グラフィックス機能のためのものであるかとを画成するように構成され得る。たとえば、ＧＰＵドライバ１４は、ＧＰＵドライバ１４がコマンドプロセッサ３３に送信する命令が、グラフィックス機能のためのものであるか、非グラフィックス機能のためのものであるかを示し得る。概して、ＧＰＵドライバ１４およびコマンドプロセッサ３３は、グラフィックスアプリケーション２８の命令など、グラフィックス機能のための命令と、非グラフィックスアプリケーション３０の命令など、非グラフィックス機能のための命令とを画成するために任意の技法を利用し得る。
【００６５】
[0070]単一のコマンドプロセッサを含むＧＰＵの他の例では、そのようなコマンドプロセッサは、同時にまたは重複してプロセッサから複数の命令ストリームを受信することが可能でないことがある。コマンドプロセッサ３３は、ＧＰＵ１６に、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０のための命令を同時に処理させ得る。いくつかの事例では、グラフィックスアプリケーション２８のための命令がないか、またはグラフィックスアプリケーション２８がアイドルである場合、コマンドプロセッサ３３は、依然として、実行のために非グラフィックスアプリケーション３０のための命令を受信し得る。同様に、非グラフィックスアプリケーション３０のための命令がないか、またはグラフィックスアプリケーション３０がアイドルである場合、コマンドプロセッサ３３は、依然として、実行のためにグラフィックスアプリケーション２８のための命令を受信し得る。
【００６６】
[0071]図４は、本開示で説明する１つまたは複数の例による例示的な技法を示すフローチャートである。単に説明のために、および理解を容易にするために、図１〜図３を参照する。
【００６７】
[0072]ＧＰＵが、グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサの１つまたは複数のシェーダコアの第１のセットの指示を受信する（４８）。ＧＰＵはまた、非グラフィックスアプリケーションのために確保された、シェーダプロセッサの１つまたは複数のシェーダコアの第２の異なるセットの指示を受信する（５０）。一例として、ＧＰＵ１６の第１のコマンドプロセッサ（たとえば、グラフィックスコマンドプロセッサ３２）が、グラフィックスアプリケーション２８のために確保されたシェーダコア４２から、シェーダコアの第１のセットのＧＰＵドライバ１４からの指示を受信し得る。この例では、ＧＰＵ１６の第２の異なるコマンドプロセッサ（たとえば、非グラフィックスコマンドプロセッサ３８）は、非グラフィックスアプリケーション３０のために確保されたシェーダコア４２から、シェーダコアの第２の異なるセットのＧＰＵドライバ１４からの指示を受信し得る。代替例では、第１のコマンドプロセッサと第２のコマンドプロセッサは同じコマンドプロセッサであり得る。たとえば、この代替例では、コマンドプロセッサ３３は、グラフィックスアプリケーション２８のために確保されたシェーダコアの第１のセットのＧＰＵドライバ１４からの指示と、非グラフィックスアプリケーション３０のために確保されたシェーダコアの第２の異なるセットの指示とを受信し得る。
【００６８】
[0073]これらの例のいずれでも、シェーダコアの第１のセットの指示およびシェーダコアの第２の異なるセットの指示は、シェーダコア４２のうちのいくつがグラフィックスアプリケーション２８のために確保され、シェーダコア４２のうちのいくつが非グラフィックスアプリケーション３０のために確保されるかを示す指示を含み得る。いくつかの例では、シェーダコアの第１のセットの指示およびシェーダコアの第２の異なるセットの指示はまた、シェーダコア４２のうちのどのシェーダコアがグラフィックスアプリケーション２８のために確保され、シェーダコア４２のうちのどのシェーダコアが非グラフィックスアプリケーション３０のために確保されるかの指示を含み得る。
【００６９】
[0074]シェーダコアの第１のセット（たとえば、１つまたは複数のシェーダコア４２）は、グラフィックスアプリケーション２８などのグラフィックスアプリケーションの命令を実行する（５２）。たとえば、グラフィックスコマンドプロセッサ３２またはコマンドプロセッサ３３は、実行のためにグラフィックスアプリケーション２８の命令を受信し、シェーダコアの第１のセットにグラフィックスアプリケーション２８の命令を実行させ得る。この例では、シェーダコアの第１のセットは非グラフィックスアプリケーション３０の命令を実行しないことがある。いくつかの例では、第１の作業負荷分配ユニット（たとえば、グラフィックス作業負荷分配ユニット３４）は、シェーダコアの第１のセットのうちのどのシェーダコアがグラフィックスアプリケーション２８の命令のうちのどの命令を実行するかを判断し得る。この例では、シェーダコアの第１のセットは、グラフィックス作業負荷分配ユニット３４によって判断された命令を実行し得る。
【００７０】
[0075]シェーダコアの第２のセット（たとえば、残りのシェーダコア４２のうちの１つまたは複数）は非グラフィックスアプリケーション３０の命令を実行する（５４）。たとえば、非グラフィックスコマンドプロセッサ３８またはコマンドプロセッサ３３は、実行のために非グラフィックスアプリケーション３０の命令を受信し、シェーダコアの第２のセットに非グラフィックスアプリケーション３０の命令を実行させ得る。この例では、シェーダコアの第２のセットはグラフィックスアプリケーション２８の命令を実行しないことがある。いくつかの例では、第２の作業負荷分配ユニット（たとえば、非グラフィックス作業負荷分配ユニット４０）は、シェーダコアの第２のセットのうちのどのシェーダコアが非グラフィックスアプリケーション３０ののうちのどの命令を実行するかを判断し得る。この例では、シェーダコアの第２のセットは、非グラフィックス作業負荷分配ユニット４０によって判断された命令を実行し得る。
【００７１】
[0076]いくつかの例では、シェーダコアの第１のセットがグラフィックスアプリケーション２８の命令を実行しているのと同時に、シェーダコアの第２のセットは、グラフィックスアプリケーション２８および非グラフィックスアプリケーション３０の並列実行を可能にするために非グラフィックスアプリケーション３０の命令を実行していることがある。いくつかの例では、ＧＰＵ１６が、グラフィックスコマンドプロセッサ３２またはコマンドプロセッサ３３を介して、グラフィックスアプリケーション２８のための命令を受信しているのと同時に、ＧＰＵ１６は、非グラフィックスコマンドプロセッサ３８またはコマンドプロセッサ３３を介して、非グラフィックスアプリケーション３０のための命令を受信している。
【００７２】
[0077]図５は、本開示で説明する１つまたは複数の例による別の例示的な技法を示すフローチャートである。単に説明のために、および理解を容易にするために、図１〜図３を参照する。
【００７３】
[0078]プロセッサ上のドライバが、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットを判断する（５６）。たとえば、プロセッサ１２上で実行していることがあるＧＰＵドライバ１４は、グラフィックスアプリケーション２８を実行するために、ＧＰＵ１６のシェーダプロセッサ２２のシェーダコア４２のうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーション２８のために確保されるかを判断し得る。
【００７４】
[0079]プロセッサ上のドライバは、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、ＧＰＵのシェーダプロセッサのシェーダコアの第２のセットを判断する（５８）。たとえば、ＧＰＵドライバ１４は、非グラフィックスアプリケーション３０を実行するために、ＧＰＵ１６のシェーダプロセッサ２２のシェーダコア４２のうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーション３０のために確保されるかを判断し得る。
【００７５】
[0080]いくつかの例では、ＧＰＵドライバ１４は、シェーダコアの第１のセット（すなわち、グラフィックスアプリケーション２８のために確保されたシェーダコア）がシェーダコアの第２のセット（すなわち、非グラフィックスアプリケーション３０のために確保されたシェーダコア）よりも多くのシェーダコアを含むと判断し得る。いくつのシェーダコアがグラフィックスアプリケーション２８のために確保されるべきかの判断を行うために、ＧＰＵドライバ１４は、現在キューイングされている、グラフィックスアプリケーション２８の命令の数を判断し得る。同様に、いくつのシェーダコアが非グラフィックスアプリケーション３０のために確保されるべきかの判断を行うために、ＧＰＵドライバ１４は、現在キューイングされている、非グラフィックスアプリケーション３０の命令の数を判断し得る。
【００７６】
[0081]ドライバは、シェーダコアの第１のセットの指示をＧＰＵ内の第１のコマンドプロセッサに送信する（６０）。ドライバはまた、シェーダコアの第２のセットの指示をＧＰＵ内の第２のコマンドプロセッサに送信する（６２）。次いで、ＧＰＵは、シェーダコアの第１のセット上でグラフィックスアプリケーション２８を実行し、シェーダコアの第２のセット上で非グラフィックスアプリケーション３０を実行し得る。いくつかの例では、第１のコマンドプロセッサと第２のコマンドプロセッサは異なるコマンドプロセッサであり得る。代替例では、第１のコマンドプロセッサと第２のコマンドプロセッサは同じコマンドプロセッサであり得る。たとえば、ＧＰＵドライバ１４は、第１のコマンドプロセッサと第２のコマンドプロセッサが異なるコマンドプロセッサである例において、シェーダコア４２のうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーション２８のために確保されるかを示す指示をグラフィックスコマンドプロセッサ３２に送信し、シェーダコア４２のうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーション３０ために確保されるかを示す指示を非グラフィックスコマンドプロセッサ３８に送信し得る。別の例では、ＧＰＵドライバ１４は、第１のコマンドプロセッサと第２のコマンドプロセッサが同じコマンドプロセッサである例において、シェーダコア４２のうちのいくつのシェーダコアおよびどのシェーダコアがグラフィックスアプリケーション２８のために確保されるかを示す指示をコマンドプロセッサ３３に送信し、シェーダコア４２のうちのいくつのシェーダコアおよびどのシェーダコアが非グラフィックスアプリケーション３０ために確保されるかを示す指示をコマンドプロセッサ３３に送信し得る。
【００７７】
[0082]図６は、図１に示した例示的なデバイスをさらに詳細に示すブロック図である。たとえば、図６は、図１のデバイス１０をより詳細に示す。簡潔のために、図６に示されているが、図１に示されていないデバイス１０の構成要素のみについて、詳細に説明する。
【００７８】
[0083]図６の例では、デバイス１０は、プロセッサ１２と、ＧＰＵ１６と、メモリ２６と、トランシーバモジュール６４と、ユーザインターフェース６６と、ディスプレイ６８と、ディスプレイプロセッサ７０とを含み得る。デバイス１０は、明快のために図６に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス１０は、デバイス１０がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図６に示されていないスピーカーおよびマイクロフォンを含み、またはデバイス１０がメディアプレーヤである例においてスピーカーを含み得る。デバイス１０はまた、ビデオカメラを含み得る。さらに、デバイス１０に示された様々なモジュールおよびユニットは、デバイス１０のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース６６およびディスプレイ６８は、デバイス１０が、デスクトップコンピュータ、あるいは外部ユーザインターフェースまたはディスプレイとインターフェースする能力がある他のデバイスである例において、デバイス１０の外部にあり得る。
【００７９】
[0084]ユーザインターフェース６６の例としては、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース６６はまた、タッチスクリーンであり得、ディスプレイ６８の一部として組み込まれ得る。トランシーバモジュール６４は、デバイス１０と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール６４は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。ディスプレイ６８は、液晶ディスプレイ（ＬＣＤ）、有機発光ダイオードディスプレイ（ＯＬＥＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスを備え得る。
【００８０】
[0085]いくつかの例では、ＧＰＵ１６が、ディスプレイ６８上での表示のためにグラフィックスデータを生成した後、ＧＰＵ１６は、一時記憶のために、得られたグラフィックスデータをシステムメモリ２６に出力し得る。ディスプレイプロセッサ７０は、システムメモリ２６からグラフィックスデータを取り出し、グラフィックスデータに対して何らかの後処理を実行し、得られたグラフィックスデータをディスプレイ６８に出力し得る。たとえば、ディスプレイプロセッサ７０は、さらなる拡張を実行するか、またはＧＰＵ１６によって生成されたグラフィックスデータをスケーリングし得る。他の例では、ＧＰＵ１６がグラフィックスデータをシステムメモリ２６内のフレームバッファに出力することが可能であり得、フレームバッファは、次いで、グラフィックスデータをディスプレイ６８に出力する。この例では、ディスプレイプロセッサ７０は必要でないことがある。
【００８１】
[0086]図６の例では、プロセッサ１２およびＧＰＵ１６は、図１〜図５に関して上記で説明したように構成され得る。たとえば、ＧＰＵ１６は、複数のシェーダコアを含むシェーダプロセッサを含み得る。プロセッサ１２は、グラフィックスアプリケーションを実行するためにＧＰＵ１６のための複数のシェーダコアの第１のセットを確保し、非グラフィックスアプリケーションを実行するためにＧＰＵ１６のための複数のシェーダコアの第２のセットを確保し得る。この例では、上記で説明したように、グラフィックスアプリケーションのために確保されたシェーダコアは非グラフィックスアプリケーションのための命令を実行しないことがあり、その逆も同様である。
【００８２】
[0087]１つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装した場合、機能は、１つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶され得る。コンピュータ可読媒体はコンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび／またはデータ構造を取り出すために１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。本明細書で使用するディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザディスク（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびＢｌｕ−ｒａｙ（登録商標）ディスク（disc）を含み、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【００８３】
[0088]コードは、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）などの１つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指し得る。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【００８４】
[0089]本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明した１つまたは複数のプロセッサを含めて、ハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【００８５】
[0090]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
グラフィックス処理ユニット（ＧＰＵ）を用いて、グラフィックスアプリケーションのために確保された、前記ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信することと、
前記ＧＰＵを用いて、非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信することと、
前記ＧＰＵを用いて、前記グラフィックスアプリケーションの命令を受信することと、
前記ＧＰＵを用いて、前記非グラフィックスアプリケーションの命令を受信することと、
前記ＧＰＵを用いて、シェーダコアの前記第１のセットで前記グラフィックスアプリケーションの前記命令を実行することと、
前記グラフィックスアプリケーションの前記命令を実行するのと実質的に同時に、前記ＧＰＵを用いて、シェーダコアの前記第２のセットで前記非グラフィックスアプリケーションの前記命令を実行することと
を備える方法。
［Ｃ２］
シェーダコアの前記第１のセットの前記指示を受信することが、前記ＧＰＵの第１のコマンドプロセッサを用いて、シェーダコアの前記第１のセットの前記指示を受信することを備え、シェーダコアの前記第２のセットの前記指示を受信することが、前記ＧＰＵの第２の異なるコマンドプロセッサを用いて、シェーダコアの前記第２のセットの前記指示を受信することを備える、Ｃ１に記載の方法。
［Ｃ３］
シェーダコアの前記第１のセットの前記指示を受信することが、前記ＧＰＵのコマンドプロセッサを用いて、シェーダコアの前記第１のセットの前記指示を受信することを備え、シェーダコアの前記第２のセットの前記指示を受信することが、同じコマンドプロセッサを用いて、シェーダコアの前記第２のセットの前記指示を受信することを備える、Ｃ１に記載の方法。
［Ｃ４］
シェーダコアの前記第１のセットで前記非グラフィックスアプリケーションの前記命令を実行しないことと、
シェーダコアの前記第２のセットで前記グラフィックスアプリケーションの前記命令を実行しないことと
をさらに備える、Ｃ１に記載の方法。
［Ｃ５］
前記非グラフィックスアプリケーションの命令を受信することが、前記グラフィックスアプリケーションの命令を受信するのと同時に前記非グラフィックスアプリケーションの前記命令を受信することを備える、Ｃ１に記載の方法。
［Ｃ６］
第１の作業負荷分配ユニットを用いて、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断することと、
第２の異なる作業負荷分配ユニットを用いて、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断することと
をさらに備え、
前記グラフィックスアプリケーションの前記命令を実行することは、シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて前記グラフィックスアプリケーションの前記命令を実行することを備え、
前記非グラフィックスアプリケーションの前記命令を実行することは、シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかの前記判断に基づいて前記非グラフィックスアプリケーションの前記命令を実行することを備える、Ｃ１に記載の方法。
［Ｃ７］
前記グラフィックスアプリケーションの前記命令の前記実行の結果を前記ＧＰＵ内のメモリキャッシュに記憶することを前記非グラフィックスアプリケーションの前記命令の前記実行の結果を前記ＧＰＵ内の前記メモリキャッシュに記憶することよりも優先させること
をさらに備える、Ｃ１に記載の方法。
［Ｃ８］
シェーダコアの前記第１のセットの前記指示を受信することが、前記ＧＰＵの第１のコマンドプロセッサを用いて、シェーダコアの前記第１のセットの前記指示を受信することを備え、シェーダコアの前記第２のセットの前記指示を受信することが、前記ＧＰＵの第２の異なるコマンドプロセッサを用いて、シェーダコアの前記第２のセットの前記指示を受信することを備え、前記方法は、
前記非グラフィックスアプリケーションの命令がないとき、前記第２のコマンドプロセッサの電源を切断するための指示を受信することと、
前記指示を受信したことに応答して前記第２のコマンドプロセッサの電源を切断することと
をさらに備える、Ｃ１に記載の方法。
［Ｃ９］
シェーダコアの前記第１のセットのシェーダコアの数がシェーダコアの前記第２のセットのシェーダコアの数とは異なる、Ｃ１に記載の方法。
［Ｃ１０］
プロセッサ上のドライバを用いて、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの前記第１のセットを判断することと、
前記プロセッサ上の前記ドライバを用いて、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの前記第２のセットを判断することと、
シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を備える方法。
［Ｃ１１］
シェーダコアの前記第１のセットを判断することは、前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが前記グラフィックスアプリケーションのために確保されるべきかを判断することを備え、シェーダコアの前記第２のセットを判断することは、前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが前記非グラフィックスアプリケーションのために確保されるべきかを判断することを備える、Ｃ１０に記載の方法。
［Ｃ１２］
シェーダコアの前記第１のセットがシェーダコアの前記第２のセットよりも多くのシェーダコアを含むと判断すること
をさらに備える、Ｃ１０に記載の方法。
［Ｃ１３］
シェーダコアの前記第１のセットを判断することが、前記グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第１のセットを判断することを備える、Ｃ１０に記載の方法。
［Ｃ１４］
シェーダコアの前記第２のセットを判断することが、前記非グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第２のセットを判断することを備える、Ｃ１０に記載の方法。
［Ｃ１５］
送信することが、
シェーダコアの前記第１のセットの前記指示を前記ＧＰＵ内の第１のコマンドプロセッサに送信することと、
シェーダコアの前記第２のセットの前記指示を前記ＧＰＵ内の第２の異なるプロセッサに送信することと
を備える、Ｃ１０に記載の方法。
［Ｃ１６］
送信することが、
シェーダコアの前記第１のセットの前記指示を前記ＧＰＵ内のコマンドプロセッサに送信することと、
シェーダコアの前記第２のセットの前記指示を前記ＧＰＵ内の同じコマンドプロセッサに送信することと
を備える、Ｃ１０に記載の方法。
［Ｃ１７］
複数のシェーダコアを含むシェーダプロセッサと、
グラフィックスアプリケーションの命令を実行するために確保された前記シェーダコアの第１のセットの指示を受信し、前記グラフィックスアプリケーションの前記命令を受信するように構成された第１のコマンドプロセッサと、
非グラフィックスアプリケーションの命令を実行するために確保された前記シェーダコアの第２の異なるセットの指示を受信し、前記非グラフィックスアプリケーションの前記命令を受信するように構成された第２のコマンドプロセッサと
を備えるグラフィックス処理ユニット（ＧＰＵ）。
［Ｃ１８］
前記第１のコマンドプロセッサが前記第２のコマンドプロセッサとは異なる、Ｃ１７に記載のＧＰＵ。
［Ｃ１９］
前記第１のコマンドプロセッサが前記第２のコマンドプロセッサと同じである、Ｃ１７に記載のＧＰＵ。
［Ｃ２０］
前記シェーダコアの前記第１のセットが、前記グラフィックスアプリケーションの前記命令を実行するように構成され、
前記グラフィックスアプリケーションの前記命令の前記実行と実質的に同時に、前記シェーダコアの前記第２のセットが、前記非グラフィックスアプリケーションの前記命令を実行するように構成された、Ｃ１７に記載のＧＰＵ。
［Ｃ２１］
シェーダコアの前記第１のセットが、前記非グラフィックスアプリケーションの命令を実行しないように構成され、
シェーダコアの前記第２のセットが、前記グラフィックスアプリケーションの命令を実行しないように構成された、Ｃ１７に記載のＧＰＵ。
［Ｃ２２］
前記第１のコマンドプロセッサは、前記第２のコマンドプロセッサが前記非グラフィックスアプリケーションの前記命令を受信するのと同時に前記グラフィックスアプリケーションの前記命令を受信するように構成された、Ｃ１７に記載のＧＰＵ。
［Ｃ２３］
前記シェーダコアの前記第１のセットのうちのどのシェーダコアが前記グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するように構成された第１の作業負荷分配ユニットと、
前記シェーダコアの前記第２のセットのうちのどのシェーダコアが前記非グラフィックスアプリケーションの前記命令のうちのどの命令を実行するかを判断するように構成された第２の異なる作業負荷分配ユニットと
をさらに備え、
前記シェーダコアの前記第１のセットが、前記第１の作業負荷分配ユニットの前記判断に基づいて前記グラフィックスアプリケーションの前記命令を実行するように構成され、
前記シェーダコアの前記第２のセットが、前記第２の作業負荷分配ユニットの前記判断に基づいて前記非グラフィックスアプリケーションの前記命令を実行するように構成された、Ｃ１７に記載のＧＰＵ。
［Ｃ２４］
メモリキャッシュ
をさらに備え、
前記第１のコマンドプロセッサおよび前記第２のコマンドプロセッサのうちの少なくとも１つが、前記メモリキャッシュへの前記グラフィックスアプリケーションの前記命令の前記実行の結果の記憶を前記メモリキャッシュへの前記非グラフィックスアプリケーションの前記命令の前記実行の結果の記憶よりも優先させるように構成された、Ｃ１７に記載のＧＰＵ。
［Ｃ２５］
前記ＧＰＵは、前記非グラフィックスアプリケーションの命令がないとき、前記第２のコマンドプロセッサの電源を切断するための指示を受信し、電源を切断するための前記指示の前記受信に応答して前記第２のコマンドプロセッサの電源を切断するように構成された、Ｃ１７に記載のＧＰＵ。
［Ｃ２６］
前記シェーダコアの前記第１のセットのシェーダコアの数が前記シェーダコアの前記第２のセットのシェーダコアの数とは異なる、Ｃ１７に記載のＧＰＵ。
［Ｃ２７］
シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサの前記シェーダコアの前記第１のセットを判断することと、
シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの前記第２のセットを判断することと、
シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を行うように構成されたプロセッサ。
［Ｃ２８］
前記プロセッサが、前記判断と前記ＧＰＵへの前記送信とを行うドライバを実行する、Ｃ２７に記載のプロセッサ。
［Ｃ２９］
前記プロセッサは、シェーダコアの前記第１のセットを判断するために、前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが前記グラフィックスアプリケーションのために確保されるべきかを判断し、シェーダコアの前記第２のセットを判断するために、前記シェーダコアのうちのいくつのシェーダコアおよびどのシェーダコアが前記非グラフィックスアプリケーションのために確保されるべきかを判断するように構成された、Ｃ２７に記載のプロセッサ。
［Ｃ３０］
前記プロセッサは、シェーダコアの前記第１のセットがシェーダコアの前記第２のセットよりも多くのシェーダコアを含むと判断するように構成された、Ｃ２７に記載のプロセッサ。
［Ｃ３１］
前記プロセッサが、前記グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第１のセットを判断するように構成された、Ｃ２７に記載のプロセッサ。
［Ｃ３２］
前記プロセッサが、前記非グラフィックスアプリケーションのキューイングされた命令の数に基づいてシェーダコアの前記第２のセットを判断するように構成された、Ｃ２７に記載のプロセッサ。
［Ｃ３３］
前記プロセッサが、
前記シェーダコアの前記第１のセットの前記指示を前記ＧＰＵの第１のコマンドプロセッサに送信することと、
前記シェーダコアの前記第２のセットの前記指示を前記ＧＰＵの第２の異なるコマンドプロセッサに送信することと
を行うように構成された、Ｃ２７に記載のプロセッサ。
［Ｃ３４］
前記プロセッサが、
前記シェーダコアの前記第１のセットの前記指示を前記ＧＰＵのコマンドプロセッサに送信することと、
前記シェーダコアの前記第２のセットの前記指示を前記ＧＰＵの同じコマンドプロセッサに送信することと
を行うように構成された、Ｃ２７に記載のプロセッサ。
［Ｃ３５］
グラフィックス処理ユニット（ＧＰＵ）であって、
グラフィックスアプリケーションのために確保された、前記ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信するための第１の手段と、
非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信するための第２の手段と、
前記グラフィックスアプリケーションの命令を受信するための第３の手段と、
前記非グラフィックスアプリケーションの命令を受信するための第４の手段と、
シェーダコアの前記第１のセットで前記グラフィックスアプリケーションの前記命令を実行するための手段と、
前記グラフィックスアプリケーションの前記命令を実行するのと同時に、シェーダコアの前記第２のセットで前記非グラフィックスアプリケーションの前記命令を実行するための手段と
を備えるＧＰＵ。
［Ｃ３６］
受信するための前記第１の手段および受信するための前記第２の手段が、受信するための異なる手段を備える、Ｃ３５に記載のＧＰＵ。
［Ｃ３７］
１つまたは複数のプロセッサに、
グラフィックス処理ユニット（ＧＰＵ）を用いて、グラフィックスアプリケーションのために確保された、前記ＧＰＵのシェーダプロセッサのシェーダコアの第１のセットの指示を受信することと、
前記ＧＰＵを用いて、非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの第２の異なるセットの指示を受信することと、
前記ＧＰＵを用いて、前記グラフィックスアプリケーションの命令を受信することと、
前記ＧＰＵを用いて、前記非グラフィックスアプリケーションの命令を受信することと、
前記ＧＰＵを用いて、シェーダコアの前記第１のセットで前記グラフィックスアプリケーションの前記命令を実行することと、
前記グラフィックスアプリケーションの前記命令を実行するのと同時に、前記ＧＰＵを用いて、シェーダコアの前記第２のセットで前記非グラフィックスアプリケーションの前記命令を実行することと
を行わせる命令を備えるコンピュータ可読記憶媒体。
［Ｃ３８］
シェーダコアの前記第１のセットの前記指示を受信するための前記命令が、第１のコマンドプロセッサを用いてシェーダコアの前記第１のセットの前記指示を受信するための命令を備え、シェーダコアの前記第２のセットの前記指示を受信するための前記命令が、第２の異なるコマンドプロセッサを用いてシェーダコアの前記第２のセットの前記指示を受信するための命令を備える、Ｃ３７に記載のコンピュータ可読記憶媒体。
［Ｃ３９］
シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの前記第１のセットを判断するための手段と、
シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの前記第２のセットを判断するための手段と、
シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信するための手段と
を備えるプロセッサ。
［Ｃ４０］
１つまたは複数のプロセッサに、
前記１つまたは複数のプロセッサ上のドライバを用いて、シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、グラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサのシェーダコアの前記第１のセットを判断することと、
前記１つまたは複数のプロセッサ上の前記ドライバを用いて、シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの前記第２のセットを判断することと、
シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を行わせる命令を備えるコンピュータ可読記憶媒体。
［Ｃ４１］
プロセッサと、
グラフィックス処理ユニット（ＧＰＵ）と
を備え、
前記プロセッサが、
シェーダコアの第１のセット上で実行されるべきグラフィックスアプリケーションのために確保された、前記ＧＰＵのシェーダプロセッサの前記シェーダコアの前記第１のセットを判断することと、
シェーダコアの第２の異なるセットによって実行されるべき非グラフィックスアプリケーションのために確保された、前記ＧＰＵの前記シェーダプロセッサのシェーダコアの前記第２のセットを判断することと、
シェーダコアの前記第１のセットの指示とシェーダコアの前記第２のセットの指示とを前記ＧＰＵに送信することと
を行うように構成され、
前記ＧＰＵが、
シェーダコアの前記第１のセットとシェーダコアの前記第２のセットとを含む複数のシェーダコアを含む前記シェーダプロセッサと、
前記グラフィックスアプリケーションの命令を実行するために確保された前記シェーダコアの前記第１のセットの前記指示を受信し、前記グラフィックスアプリケーションの前記命令を受信するように構成された第１のコマンドプロセッサと、
前記非グラフィックスアプリケーションの命令を実行するために確保された前記シェーダコアの前記第２の異なるセットの前記指示を受信し、前記非グラフィックスアプリケーションの前記命令を受信するように構成された第２のコマンドプロセッサと
を備える、装置。
【図１】
0005792402.tif 000002
【図２】
0005792402.tif 000003
【図３】
0005792402.tif 000004
【図４】
0005792402.tif 000005
【図５】
0005792402.tif 000006
【図６】
0005792402.tif 000007