(57)【要約】少なくとも１つのコマンドストリームが実行しうる速度を改善するためにコマンドを並べ替えるための技術が説明された。少なくとも１つのコマンドストリーム内のコマンドを複数のパイプラインに割り当てる前に、マルチメディアプロセッサは任意のパイプライン間従属関係を分析し、パイプラインの現在の実行状態を決定する。プロセッサは、その情報に基づいて、現在従属関係が存在しないゆえに適切なパイプラインによって直ちに実行できるコマンドを優先することにより、少なくとも１つのコマンドストリームを並べ替える。そのような、少なくとも１つのコマンドストリームにおけるコマンドの順序に反した実行は、コマンドストリームが実行されるレートを高めることにより、マルチメディアプロセッサのスループットを増加させることができる。【選択図】図２
2013535728.tif 000002
【特許請求の範囲】
【請求項１】
コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信することと、ここにおいて前記少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、前記第２および第３のコマンドは前記第２のコマンドが前記第３のコマンドよりも先行するような前記少なくとも１つのコマンドストリームにおける第１の順序を有する、
前記コマンド間従属情報に基づいて、前記第２のコマンドが、前記第１のコマンドの先の実行に従属することを決定することと、
複数の処理パイプランのうちの第１の１つに前記第１のコマンドが関連付けられ、前記複数の処理パイプラインのうちの別の第２の１つに前記第２のコマンドおよび前記第３のコマンドが関連付けられていることとを決定することと、
プロセッサによって、前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てることと、
前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てた後、前記プロセッサによって、前記第２のコマンドおよび前記第３のコマンドが前記第１の順序とは異なる第２の順序で実行するように、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドを割り当てることと
を備える方法。
【請求項２】
前記複数の処理パイプラインのうちの第１の１つに関連付けられたコマンドの完了状態を表すための第１のスライドウインドウを保持することと、
前記複数の処理パイプラインのうちの前記第２の１つに関連付けられたコマンドの完了状態を表すための第２のスライドウインドウを保持することと
をさらに備える、請求項１に記載の方法。
【請求項３】
前記少なくとも１つのコマンドストリームは、前記複数の処理パイプラインのうちの第１の１つに関連付けられた順序付きコマンドの第１のセットと、前記複数の処理パイプラインのうちの第２の１つに関連付けられた順序付きコマンドの第２のセットとを備え、
前記第１のスライドウインドウは、前記第１のスライドウインドウの開始位置を表すコマンドカウンタを備え、前記開始位置は、前記複数の処理パイプラインのうちの第１の１つによってまだ実行されていない先行コマンドが残っていない、前記順序付きコマンドの第１のセット内の最後のコマンドに対応する、請求項２に記載の方法。
【請求項４】
前記第１のスライドウインドウは、前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備える、請求項２に記載の方法。
【請求項５】
前記コマンド間従属情報に基づいて、前記第２のコマンドのための従属マスクを生成することをさらに備え、前記従属マスク内のビットは前記第１のスライドウインドウにおいて対応するコマンドのための前記完了状態を示す、請求項２に記載の方法。
【請求項６】
前記第２のコマンドのための従属マスクを生成することは、
前記第１のコマンドの完了状態を決定することと、
前記第１のコマンドが実行されていない場合に、前記第２のコマンドのための従属マスク内に前記第１のコマンドに対応するビットを設定することと
を備える、請求項５に記載の方法。
【請求項７】
前記第１のスライドウインドウは前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備え、
前記第１のコマンドの完了状態を決定することは、前記アクティブウインドウマスクの前記第１のビットを評価することを備える、請求項６に記載の方法。
【請求項８】
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが実行されたという通知を受信することと、
前記通知に応答して、前記第２のコマンドのための従属マスク内の、前記第１のコマンドに対応するビットをクリアすることと
をさらに備える、請求項５に記載の方法。
【請求項９】
前記複数の処理パイプラインのうちの第１の１つから、前記第２のコマンドが完了したという通知を受信することと、
前記通知に応答して、前記第１のコマンドが前記従属マスク内の最下位ビットに対応する場合に、前記従属マスクを１ビット右シフトすることと
をさらに備える、請求項５に記載の方法。
【請求項１０】
前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てることは、
前記第１のコマンドに対応する、前記従属マスク内のビットが空であるかを判定することと、
前記第１のコマンドに対応する、前記従属マスク内のビットが空である場合のみ、前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てることと
を備える、請求項５に記載の方法。
【請求項１１】
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信することと、
前記通知に応答して、前記第１のスライドウインドウを進めることと
を備える、請求項２に記載の方法。
【請求項１２】
前記少なくとも１つのコマンドストリームはさらに、第４のコマンドを備え、
前記第２のコマンドは優先値を有し、前記第４のコマンドは優先値を有し、
前記コマンド間従属情報に基づいて、前記第４のコマンドが、前記第１のコマンドの先の実行に従属することを決定することと、
前記複数の処理パイプラインのうちの第２の１つに前記第４のコマンドが関連付けられていることを決定することと、
前記第２のコマンドおよび前記第４のコマンドの前記優先値に基づいた順序で、前記複数の処理パイプラインのうちの前記第２の１つに前記第２のコマンドおよび前記第４のコマンドを割り当てることと
をさらに備える、請求項１に記載の方法。
【請求項１３】
コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信し、ここにおいて前記少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、前記第２および第３のコマンドは前記第２のコマンドが前記第３のコマンドに先行するような前記少なくとも１つのコマンドストリームにおける第１の順序を有し、
前記コマンド間従属情報に基づいて、前記第２のコマンドが、前記第１のコマンドの先行実行に従属することを決定し、
複数の処理パイプラインのうちの第１の１つに前記第１のコマンドが関連付けられ、前記複数の処理パイプラインのうちの別の第２の１つに前記第２のコマンドおよび前記第３のコマンドが関連付けられていることとを決定し、
前記複数の処理パイプラインのうちの前記第２の１つに前記第３のコマンドを割り当て、
前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てた後、前記第２のコマンドおよび前記第３のコマンドが前記第１の順序とは異なる第２の順序で実行するように、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドを割り当てる
ように構成されたコマンド割当および同期プロセッサを備える装置。
【請求項１４】
前記コマンド割当および同期プロセッサはさらに、
前記複数の処理パイプラインのうちの第１の１つに関連付けられたコマンドの完了状態を表すための第１のスライドウインドウを保持し、
前記複数の処理パイプラインのうちの第２の１つに関連付けられたコマンドの完了状態を表すための第２のスライドウインドウを保持する
ように構成された、請求項１３に記載の装置。
【請求項１５】
前記少なくとも１つのコマンドストリームは、前記複数の処理パイプラインのうちの第１の１つに関連付けられた順序付きコマンドの第１のセットと、前記複数の処理パイプラインのうちの第２の１つに関連付けられた順序付きコマンドの第２のセットとを備え、
前記第１のスライドウインドウは、前記第１のスライドウインドウの開始位置を表すコマンドカウンタを備え、前記開始位置は、前記複数の処理パイプラインのうちの第１の１つによってまだ実行されていない先行コマンドが残っていない、前記順序付きコマンドの第１のセット内の最後のコマンドに対応する、請求項１４に記載の装置。
【請求項１６】
前記第１のスライドウインドウは、前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備える、請求項１４に記載の装置。
【請求項１７】
前記コマンド割当および同期プロセッサはさらに、前記コマンド間従属情報に基づいて、前記第２のコマンドのための従属マスクを生成するように構成され、前記従属マスク内のビットは前記第１のスライドウインドウにおいて対応するコマンドに関する完了状態を示す、請求項１４に記載の装置。
【請求項１８】
前記第２のコマンドのための従属マスクを生成するために、前記コマンド割当および同期プロセッサはさらに、
前記第１のコマンドの完了状態を決定し、
前記第１のコマンドが実行されると、前記第２のコマンドのための従属マスク内に、前記第１のコマンドに対応するビットを設定する
ように構成された、請求項１７に記載の装置。
【請求項１９】
前記第１のスライドウインドウは前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備え、
前記第１のコマンドの完了状態を決定するために、前記コマンド割当および同期プロセッサはさらに、前記アクティブウインドウマスクの前記第１のビットを評価するように構成された、請求項１８に記載の装置。
【請求項２０】
前記コマンド割当および同期プロセッサはさらに、
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが実行されたという通知を受信し、
前記通知に応答して、前記第２のコマンドのための従属マスク内の、前記第１のコマンドに対応するビットをクリアする
ように構成された、請求項１７に記載の装置。
【請求項２１】
前記コマンド割当および同期プロセッサはさらに、
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信し、
前記通知に応答して、前記第１のコマンドが前記従属マスク内の最下位ビットに対応する場合、前記従属マスクを１ビット右シフトする
ように構成された、請求項１７に記載の装置。
【請求項２２】
前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てるために、前記コマンド割当および同期プロセッサはさらに、
前記第１のコマンドに対応する、前記従属マスク内のビットが空であるかを判定し、
前記第１のコマンドに対応する、前記従属マスク内のビットが空である場合のみ、前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てる
ように構成された、請求項１７に記載の装置。
【請求項２３】
前記コマンド割当および同期プロセッサはさらに、
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信し、
前記通知に応答して、前記第１のスライドウインドウを進める
ように構成された、請求項１４に記載の装置。
【請求項２４】
前記少なくとも１つのコマンドストリームはさらに第４のコマンドを備え、
前記第２のコマンドは優先値を有し、前記第４のコマンドは優先値を有し、
前記コマンド割当および同期プロセッサはさらに、
前記コマンド間従属情報に基づいて、前記第４のコマンドが前記第１のコマンドの先の実行に従属することを決定し、
前記複数の処理パイプラインのうちの第２の１つに前記第４のコマンドが関連付けられていることを決定し、
前記第２のコマンドおよび前記第４のコマンドの優先値に基づいた順序で、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドおよび前記第４のコマンドを割り当てる
ように構成された、請求項１３に記載の装置。
【請求項２５】
前記装置は、無線通信デバイスハンドセットを備える、請求項１３に記載の装置。
【請求項２６】
前記装置は、１つまたは複数の集積回路デバイスを備える、請求項１３に記載の装置。
【請求項２７】
コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信するための手段と、ここにおいて前記少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、前記第２および第３のコマンドは前記第２のコマンドが前記第３のコマンドに先行するような、前記少なくとも１つのコマンドストリームにおける第１の順序を有する、
前記コマンド間従属情報に基づいて、前記第２のコマンドが、前記第１のコマンドの先の実行に従属することを決定するための手段と、
複数の処理パイプラインのうちの第１の１つに前記第１のコマンドが関連付けられ、前記複数の処理パイプラインのうちの別の第２の１つに前記第２のコマンドおよび前記第３のコマンドが関連付けられていることとを決定するための手段と、
前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てるための手段と、
前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てた後、前記第２のコマンドおよび前記第３のコマンドが、前記第１の順序とは異なる第２の順序で実行するように、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドを割り当てるための手段と
を備えるデバイス。
【請求項２８】
前記複数の処理パイプラインのうちの第１の１つに関連付けられたコマンドの完了状態を表すための第１のスライドウインドウを保持するための手段と、
前記複数の処理パイプラインのうちの第２の１つに関連付けられたコマンドの完了状態を表すための第２のスライドウインドウを保持するための手段と
をさらに備える、請求項２７に記載のデバイス。
【請求項２９】
前記少なくとも１つのコマンドストリームは、前記複数の処理パイプラインのうちの第１の１つに関連付けられた順序付きコマンドの第１のセットと、前記複数の処理パイプラインのうちの第２の１つに関連付けられた順序付きコマンドの第２のセットとを備え、
前記第１のスライドウインドウは、前記第１のスライドウインドウの開始位置を表すコマンドカウンタを備え、前記開始位置は、前記複数の処理パイプラインのうちの第１の１つによってまだ実行されていない先行コマンドが残っていない、前記順序付きコマンドの第１のセット内の最後のコマンドに対応する、請求項２８に記載のデバイス。
【請求項３０】
前記第１のスライドウインドウは、前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備える、請求項２８に記載のデバイス。
【請求項３１】
前記コマンド間従属情報に基づいて、前記第２のコマンドのための従属マスクを生成するための手段をさらに備え、前記従属マスク内のビットは前記第１のスライドウインドウにおいて対応するコマンドに関する完了状態を示す、請求項２８に記載のデバイス。
【請求項３２】
前記第２のコマンドのための従属マスクを生成するための手段はさらに、
前記第１のコマンドの完了状態を決定するための手段と、
前記第１のコマンドが実行されていない場合に、前記第２のコマンドのための従属マスク内に前記第１のコマンドに対応するビットを設定するための手段と
を備える、請求項３１に記載のデバイス。
【請求項３３】
前記第１のスライドウインドウは、前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備え、
前記第１のコマンドの完了状態を決定することは、前記アクティブウインドウマスクの前記第１のビットを評価することを備える、請求項３２に記載のデバイス。
【請求項３４】
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが実行されたという通知を受信するための手段と、
前記通知に応答して、前記第２のコマンドのための従属マスク内の、前記第１のコマンドに対応するビットをクリアするための手段と
をさらに備える、請求項３１に記載のデバイス。
【請求項３５】
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信するための手段と、
前記通知に応答して、前記第１のコマンドが前記従属マスク内の最下位ビットに対応する場合に、前記従属マスクを１ビット右シフトするための手段と
をさらに備える、請求項３１に記載のデバイス。
【請求項３６】
前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てるための手段はさらに、
前記第１のコマンドに対応する、前記従属マスク内のビットが空であるかを判定するための手段と、
前記第１のコマンドに対応する、前記従属マスク内のビットが空である場合のみ、前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てるための手段と
を備える、請求項３１に記載のデバイス。
【請求項３７】
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信するための手段と、
前記通知に応答して、前記第１のスライドウインドウを進めるための手段と
をさらに備える、請求項２８に記載のデバイス。
【請求項３８】
前記少なくとも１つのコマンドストリームはさらに、第４のコマンドを備え、
前記第２のコマンドは優先値を有し、前記第４のコマンドは優先値を有し、
前記コマンド間従属情報に基づいて、前記第４のコマンドが前記第１のコマンドの先の実行に従属することを決定するための手段と、
前記複数の処理パイプラインのうちの第２の１つに前記第４のコマンドが関連付けられていることを決定するための手段と、
前記第２のコマンドおよび前記第４のコマンドの優先値に基づいた順序で、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドおよび前記第４のコマンドを割り当てるための手段と
をさらに備える、請求項２７に記載のデバイス。
【請求項３９】
プログラム可能プロセッサに、
コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信させ、ここにおいて前記少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、前記第２および第３のコマンドは前記第２のコマンドが前記第３のコマンドに先行するような、前記少なくとも１つのコマンドストリームにおける第１の順序を有し、
前記コマンド間従属情報に基づいて、前記第２のコマンドが、前記第１のコマンドの先の実行に従属することを決定させ、
前記第１のコマンドが、複数の処理パイプラインのうちの第１の１つに関連付けられ、前記第２のコマンドおよび前記第３のコマンドが前記複数の処理パイプラインのうちの別の第２の１つに関連付けられていることとを決定させ、
前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てさせ、
前記複数の処理パイプラインのうちの第２の１つに前記第３のコマンドを割り当てた後、前記第２のコマンドおよび前記第３のコマンドが前記第１の順序とは異なる第２の順序で実行するように、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドを割り当てさせる
ための命令を備えるコンピュータ読取可能記憶媒体。
【請求項４０】
前記プログラム可能プロセッサに、
前記複数の処理パイプラインのうちの第１の１つに関連付けられたコマンドの完了状態を表すための第１のスライドウインドウを保持させ、
前記複数の処理パイプラインのうちの第２の１つに関連付けられたコマンドの完了状態を表すための第２のスライドウインドウを保持させる
ための命令をさらに備える、請求項３９に記載のコンピュータ読取可能記憶媒体。
【請求項４１】
前記少なくとも１つのコマンドストリームは、前記複数の処理パイプラインのうちの第１の１つに関連付けられた順序付きコマンドの第１のセットと、前記複数の処理パイプラインのうちの第２の１つに関連付けられた順序付きコマンドの第２のセットとを備え、
前記第１のスライドウインドウは、前記第１のスライドウインドウの開始位置を表すコマンドカウンタを備え、前記開始位置は、前記複数の処理パイプラインのうちの第１の１つによってまだ実行されていない先行コマンドが残っていない、前記順序付きコマンドの第１のセット内の最後のコマンドに対応する、請求項４０に記載のコンピュータ読取可能記憶媒体。
【請求項４２】
前記第１のスライドウインドウは、前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備える、請求項４０に記載のコンピュータ読取可能記憶媒体。
【請求項４３】
前記コマンド間従属情報に基づいて、前記プログラム可能プロセッサに、前記第２のコマンドのための従属マスクを生成させるための命令をさらに備え、前記従属マスク内のビットは前記第１のスライドウインドウにおいて対応するコマンドに関する完了状態を示す、請求項４０に記載のコンピュータ読取可能記憶媒体。
【請求項４４】
前記第２のコマンドのための従属マスクを生成するために、前記プログラム可能プロセッサに、
前記第１のコマンドの完了状態を決定させ、
前記第１のコマンドが実行されていない場合に、前記第２のコマンドのための従属マスク内に、前記第１のコマンドに対応するビットを設定させる
ための命令をさらに備える、請求項４３に記載のコンピュータ読取可能記憶媒体。
【請求項４５】
前記第１のスライドウインドウは前記第１のコマンドの完了状態を表す第１のビットを有するアクティブウインドウマスクを備え、
前記第１のコマンドの完了状態を決定するために、
前記プログラム可能プロセッサに、前記アクティブウインドウマスクの第１のビットを評価させるための命令をさらに備える、
請求項４４に記載のコンピュータ読取可能記憶媒体。
【請求項４６】
前記プログラム可能プロセッサに、
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが実行されたという通知を受信させ、
前記通知に応答して、前記第１のコマンドに対応する、前記第２のコマンドのための従属マスク内のビットをクリアさせる
ための命令をさらに備える、請求項４３に記載のコンピュータ読取可能記憶媒体。
【請求項４７】
前記プログラム可能プロセッサに、
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信させ、
前記通知に応答して、前記第１のコマンドが前記従属マスク内の最下位ビットに対応する場合に、前記従属マスクを１ビット右シフトさせる
ための命令をさらに備える、請求項４３に記載のコンピュータ読取可能記憶媒体。
【請求項４８】
前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割り当てるために、前記プログラム可能プロセッサに、
前記第１のコマンドに対応する、前記従属マスク内のビットが空であるかを判定させ、
前記第１のコマンドに対応する、前記従属マスク内のビットが空である場合のみ、前記複数の処理パイプラインのうちの第１の１つに前記第２のコマンドを割当てさせる
ための命令をさらに備える、請求項４３に記載のコンピュータ読取可能記憶媒体。
【請求項４９】
前記プログラム可能プロセッサに、
前記複数の処理パイプラインのうちの第１の１つから、前記第１のコマンドが完了したという通知を受信させ、
前記通知に応答して、前記第１のスライドウインドウを進めさせる
ための命令をさらに備える、請求項４０に記載のコンピュータ読取可能記憶媒体。
【請求項５０】
前記少なくとも１つのコマンドストリームは第４のコマンドをさらに備え、
前記第２のコマンドは優先値を有し、前記第４のコマンドは優先値を有し、
前記プログラム可能プロセッサに、
前記コマンド間従属情報に基づいて、前記第４のコマンドが前記第１のコマンドの先の実行に従属することを決定させ、
前記複数の処理パイプラインのうちの第２の１つに前記第４のコマンドが関連付けられていることを決定させ、
前記第２のコマンドおよび前記第４のコマンドの優先値に基づいた順序で、前記複数の処理パイプラインのうちの第２の１つに前記第２のコマンドおよび前記第４のコマンドを割当てさせる
ための命令をさらに備える、請求項３９に記載のコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、コマンドストリームにおける複数のコマンドを処理することに関する。
【背景技術】
【０００２】
先進的なマルチメディアプロセッサは、並行処理アーキテクチャを用い、それによって、複数の専用処理パイプラインがコマンドストリームの様々な命令を実行する。例えばマルチメディアプロセッサは、オーディオ処理、データ移動、ビデオ処理、および３Ｄグラフィック処理のための、それらメディア関連機能に対応するパイプラインを含むことができる。ソフトウェアによるマルチタスクおよび／またはマルチスレッド、および複数のメディア関連機能を立て続けに用いるプログラムによって、マルチメディアプロセッサのためのコマンドストリームは、１つまたは複数の処理パイプラインための、インタリーブされ順序付けられ組み合された複数の命令である。
【０００３】
例えばビデオ上への３Ｄグラフィックオーバレイのような混合メディアアプリケーションは効率的な実行のための複数の処理パイプラインを要求することが多い。このような例では、要求された複数の処理パイプラインが、意図された混合メディア効果を達成するために、同時に実行している間同期されたままでなければならない。プロセッサドライバによって生成され、特定のコマンドの前に実行しなければならない任意のコマンドを特定するコマンド従属関係は、コマンドストリームにおける同期問題を示す。従属関係は、混合メディアアプリケーションにおいて複数のパイプラインを行き来するので、パイプラインの先頭にある従属命令が、別のパイプライン内の命令の完了を待機するためにブロックされるという非効率性がもたらされる。
【発明の概要】
【０００４】
一般に、本開示は、少なくとも１つのコマンドストリームが実行しうる速度を改善するために複数のコマンドを並べ替えるための技術を説明する。これらコマンドをパイプラインに割り当てる前に、マルチメディアプロセッサは、複数のパイプライン間の従属関係(dependencies)を分析し、これらパイプラインの現在コマンド実行進捗を決定する。プロセッサは、その情報に基づいて、現在の従属関係が存在しないため適切なパイプラインによって即座に実行されうるコマンドを優先することによって、少なくとも１つのコマンドを並べ替える。少なくとも１つのコマンドストリームにおけるそのような順序に反したコマンドの実行により、少なくとも１つのコマンドストリームが実行されるレートを高め、マルチメディアプロセッサのスループットを増加できる。
【０００５】
前処理ロジックは、コマンドストリームの並べ替えを達成するためにコマンド割当ておよび同期を実行できる。各パイプラインについて、プロセッサは、そのパイプラインのためのコマンドの数を待ち行列(queues)に入れるステージングエリアを保持できる。プリプロセッサはさらに、従属マスク(dependency mask)の形式で、各コマンドに関する従属情報(dependency information)をパイプラインの実行状態に関連付けることができる。従ってパイプラインのためのステージングエリア内の各コマンドは、パイプラインの各々のための別個の従属マスクに関連付けられうる。マルチプロセッサがコマンドを実行すると、プリプロセッサは、実行されたコマンドにおける任意の従属関係が満足されたことを反映するために従属マスクを修正する。コマンドのための従属マスク全てがクリアされると、プリプロセッサは、コマンドを適切なパイプラインに割り当てることができる。
【０００６】
１つの例において、方法は、コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信することであって、少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、第２および第３のコマンドは、第２のコマンドが第３のコマンドに先行するような、少なくとも１つのコマンドストリームにおける第１の順序を有することを含む。方法はさらに、コマンド間従属情報に基づいて、第１のコマンドの先の実行に第２のコマンドが従属することを決定することと、複数の処理パイプラインのうちの第１の１つに第１のコマンドが関連付けられていることおよび複数の処理パイプラインの別の第２の１つに第２のコマンドおよび第３のコマンドが関連付けられていることを決定することとを備える。方法はさらに、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てることと、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てた後、第２のコマンドおよび第３のコマンドが第１の順序とは異なる第２の順序で実行するように、複数の処理パイプラインのうちの第２の１つに第２のコマンドを割り当てることとを備える。
【０００７】
別の例において、装置は、コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信するように構成されたコマンド割当および同期プロセッサを含み、少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、第２および第３のコマンドは、第２のコマンドが第３のコマンドに先行するような、少なくとも１つのコマンドストリームにおける第１の順序を有する。コマンド割当および同期プロセッサはさらに、コマンド間従属情報に基づいて、第１のコマンドの先の実行に第２のコマンドが従属することを決定し、複数の処理パイプラインのうちの第１の１つに第１のコマンドが関連付けられていることおよび複数の処理パイプラインの別の第２の１つに第２のコマンドおよび第３のコマンドが関連付けられていることを決定するように構成される。コマンド割当および同期プロセッサはさらに、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当て、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てた後、第２のコマンドおよび第３のコマンドが第１の順序とは異なる第２の順序で実行するように、複数の処理パイプラインのうちの第２の１つに第２のコマンドを割り当てるように構成される。
【０００８】
別の例において、デバイスは、コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信するための手段であって、少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、第２および第３のコマンドは、第２のコマンドが第３のコマンドに先行するような、少なくとも１つのコマンドストリームにおける第１の順序を有する手段を含む。デバイスはさらに、コマンド間従属情報に基づいて、第１のコマンドの先の実行に第２のコマンドが従属することを決定するための手段と、複数の処理パイプラインのうちの第１の１つに第１のコマンドが関連付けられていることおよび複数の処理パイプラインの別の第２の１つに第２のコマンドおよび第３のコマンドが関連付けられていることを決定するための手段とを備える。デバイスはさらに、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てるための手段と、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てた後、第２のコマンドおよび第３のコマンドが第１の順序とは異なる第２の順序で実行するように、複数の処理パイプラインのうちの第２の１つに第２のコマンドを割り当てるための手段とを備える。
【０００９】
別の例において、コンピュータ読取可能媒体は、プログラム可能プロセッサに、コマンド間従属情報を含む少なくとも１つのコマンドストリームを受信させるための命令を用いて符号化されており、少なくとも１つのコマンドストリームは第１、第２、および第３のコマンドを備え、第２および第３のコマンドは、第２のコマンドが第３のコマンドに先行するような、少なくとも１つのコマンドストリームにおける第１の順序を有する。命令はさらにプログラム可能プロセッサに、コマンド間従属情報に基づいて、第１のコマンドの先の実行に第２のコマンドが従属することを決定させ、複数の処理パイプラインのうちの第１の１つに第１のコマンドが関連付けられていることおよび複数の処理パイプラインの別の第２の１つに第２のコマンドおよび第３のコマンドが関連付けられていることを決定させる。命令はさらにプログラム可能プロセッサに、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てさせ、複数の処理パイプラインのうちの第２の１つに第３のコマンドを割り当てた後、第２のコマンドおよび第３のコマンドが第１の順序とは異なる第２の順序で実行するように、複数の処理パイプラインのうちの第２の１つに第２のコマンドを割り当てさせる。
【００１０】
１つまたは複数の態様の詳細が、添付図面および下記説明において記載される。本発明の他の特徴、目的、および利点は、添付図面および特許請求の範囲から容易に分かるであろう。
【図面の簡単な説明】
【００１１】
【図１】図１は、マルチメディアプロセッサとコマンド割当および同期プロセッサとを含むマルチメディアデバイスの例を示すブロック図である。
【図２】図２は、本明細書で説明された原理と一致した方式でコマンドストリームの並べ替えを実現するコマンド割当および同期プロセッサを有する典型的なマルチメディアプロセッサを示すブロック図である。
【図３】図３は、複数の処理パイプラインのためのインタリーブされた命令を有するコマンドストリームのサブセットの例を示すブロック図である。
【図４】図４は、本開示と一致する典型的なコマンド割当ておよび同期ブロックを示すブロック図である。
【図５】図５は、特定の動作状態における、本開示と一致する典型的な同期モジュールを示すブロック図である。
【図６】図６は、未来の動作状態における、図５の同期モジュールを示すブロック図である。
【図７】図７は、タイプ特定コマンドストリームの典型的なサブセットと、タイプ特定コマンドストリームのための典型的なスライドウインドウとを示すブロック図である。
【図８】図８は、順序に反したコマンド実行を実現するコマンド割当および同期プロセッサのための典型的な動作モードを示すフローチャートである。
【図９】図９は、本開示と一致した方式で、図４の典型的なコマンド割当ておよび同期ブロックによる典型的な順序に反した実行動作を示すフローチャートである。
【発明を実施するための形態】
【００１２】
詳細な説明
図１は、マルチメディアプロセッサ１０と、コマンド割当および同期プロセッサ１２とを含む典型的なマルチメディアデバイス２の構成要素を示すブロック図である。マルチメディアデバイス２は、独立型デバイスまたは大きなシステムの一部であることができる。例えばマルチメディアデバイス２は、（例えば無線通信デバイスハンドセットのような）無線メディア通信デバイス、デジタルテレビ（ＴＶ）、ビデオ電話、デジタルマルチメディアプレーヤ、パーソナルデジタルアシスタント（ＰＤＡ）、ビデオゲームコンソール、パーソナルコンピュータまたはラップトップデバイス、または他のビデオデバイスを備える、あるいはその一部であることができる。マルチメディアデバイス２はまた、上記デバイスの一部または全部において用いられうる１つまたは複数の集積回路またはチップに含まれることもできる。
【００１３】
例示的なマルチメディアデバイス２は、デバイスメモリ８と、（「ＣＰＵ６」と図示された）メインプロセッサ６と、マルチメディアプロセッサ１０とを結合するシステムバス７を含む。デバイスメモリ８は、マルチメディアデバイス２のためのアプリケーションの実行中、ＣＰＵ６およびマルチメディアプロセッサ１０によって用いるためのプログラム命令および／またはデータを格納できる。例えばデバイスメモリ８は、マルチメディアプロセッサ１０が、ディスプレイ上のグラフィックシーンをレンダリングするためのコンパイルド命令(compiled instructions)を格納し、レンダリング計算において用いるためのバーテックスアレイ(vertex arrays)、テクスチャ(textures)、ディスプレイリスト(display lists)等も格納できる。いくつかの場合において、デバイスメモリ８は、ディスプレイ１５のためのフレームバッファを含むこともできる。デバイスメモリ８は、メモリコントローラを含むことができ、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気的消去可能プログラム可能読取専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ等のうちの１つまたは複数を備えることができる。
【００１４】
メインプロセッサ６は、例えば、デバイスメモリ８に格納された１つまたは複数のアプリケーションおよびオペレーティングシステムを実行することによって、マルチメディアデバイス２の動作を制御する。メインプロセッサ６は、マルチタスクおよびマルチスレッド方法によって複数のプログラムまたはプログラムスレッドを実行することができ、それによってメインプロセッサ６はプログラム(program)またはスレッドコンテキスト(thread contexts)間で迅速に切り替えることができる。ある例において、メインプロセッサ６において実行しているアプリケーションは、マルチメディアプロセッサ１０によって実行されうる命令(instructions)を備えたり参照したりできる。例えばそのような例において、メインプロセッサ６は、デバイスメモリ８に格納されたマルチプロセッサ１０のためのデバイスドライバのルーチン(routines of a device driver)を呼び出すことができ、その場合呼び出されたデバイスドライバルーチンは、マルチメディアプロセッサ１０によって実行するための命令(instructions)を含む。
【００１５】
マルチメディアプロセッサ１０は、例えばビデオおよびオーディオ符号化／復号、圧縮、グラフィックレンダリング、ビデオおよびオーディオ信号処理等のような、マルチメディアデバイス２のためのメディア関連作業負荷の性能(performance of media related workloads)を向上させる１つまたは複数の専用プロセッサを含む。一般に、マルチメディアプロセッサは、高レベルの並列処理、並びにリアルタイムでオーディオおよびビデオ信号を処理する能力により特徴付けられる。従ってマルチメディアプロセッサ１０は、マルチメディアデバイス２の特定のメディア関連機能に関連付けられたコマンドの処理専用の複数のメディア関連処理エリアを有することができる。マルチメディアプロセッサ１０は、マルチメディアデバイス２のためのカード（例えば、ビデオカード）上に存在しうるので、メインプロセッサ６とは隔離しているが、システムバス７を介して結合されている。マルチメディアデバイス２のいくつかの例において、マルチメディアプロセッサ１０は、メインプロセッサ６に組み込まれうる。
【００１６】
マルチメディアデバイス２はまた、ユーザ（図示せず）へ出力するための、マルチメディアプロセッサ１０からオーディオ信号またはビデオ信号をそれぞれ受信する、（「（複数の）スピーカ１７」と図示された）スピーカ１７およびディスプレイ１５も含む。スピーカ１７は、１つまたは複数のオーディオ出力デバイスであることができる。いくつかの態様において、スピーカ１７は、マルチメディアプロセッサ１０から受信された信号に基づいてオーディオ信号を生成するスピーカコントローラに結合されうる。ディスプレイ１５は、標準的なモニタ、テレビ、モバイルデバイス液晶ディスプレイ（「ＬＣＤ」）、または他のディスプレイデバイスであることができる。いくつかの態様において、ディスプレイ１５は、マルチメディアプロセッサ１０から受信された信号に基づいてビデオ信号を生成するディスプレイコントローラに結合されうる。
【００１７】
マルチメディアデバイス２はまた、マルチメディアプロセッサ１０と通信モジュール１９との間で交換するために画像、３Ｄグラフィック、およびオーディオ信号をそれぞれ変換するためのビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８も含む。通信モジュール１９は、マルチメディアデバイス２と他のデバイスとの間の通信（例えば、無線通信）を可能にするネットワークインタフェースまたは他の構成要素であることができる。
【００１８】
マルチメディアプロセッサ１０は、変換された信号をマルチメディアデバイス２によって通信モジュール１９を介して別のデバイスへ送信する前に、圧縮および／または符号化するために、ビデオ、３Ｄグラフィック、および／またはオーディオ信号を、ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８へそれぞれ送信できる。いくつかの態様において、ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８は、圧縮および／または符号化された信号を格納するためにデバイスメモリ８または他の記憶媒体へ送信できる。マルチメディアプロセッサ１０は、１つまたは複数の通信バスを介してビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８と通信可能に結合されうる。いくつかの例において、マルチメディアプロセッサ１０、ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８は、１つまたは複数の通信バスを介して通信するためのカスタムインタフェース(custom interfaces)を含む。
【００１９】
マルチメディアデバイス２はまた、通信モジュール１９を介して他のデバイスからビデオ信号、３Ｄグラフィック信号、および／またはオーディオ信号を受信することもできる。そのような例において、通信モジュール１９は、解凍および／または復号(decompression and/or decoding)のために、ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８のうちの適切な１つへ受信信号を送信できる。ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８はその後、変換された信号を、更なる処理のためにマルチメディアプロセッサ１０へ、または格納するためにデバイスメモリ８へ送信できる。
【００２０】
ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８はそれぞれ、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリートロジック、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組み合わせとして実現されうる。ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８のうちの１つまたは複数が、マルチメディアプロセッサ１０の一部として統合されることもできる。例えばマルチメディアプロセッサ１０は、ビデオコーデック１４、３Ｄグラフィックプロセッサ１６、およびオーディオコーデック１８を含む単一のプロセッサコアであることができる。いくつかの例において、３Ｄグラフィックプロセッサ１６は、グラフィック処理ユニット（「ＧＰＵ」）を備えることができる。
【００２１】
マルチメディアプロセッサ１０は、メインプロセッサ６によって生成されたコマンドストリームの形式でコマンドを受信する。デバイスメモリ８は、コマンドストリームを格納し、要求された場合、マルチメディアプロセッサ１０へ提供できる。いくつかの例において、マルチメディアプロセッサ１０は、システムバス７を介してメインプロセッサ６から直接コマンドストリームを受信できる。コマンドストリームは、マルチメディアプロセッサ１０によって実行するためのコマンド（すなわち、命令）の順序付けられたリストを備える。メインプロセッサ６において実行中のオペレーティングシステムおよびプログラムによるマルチタスクおよび／またはマルチスレッド、および複数のメディア関連機能を立て続けに用いることができるプログラムにより、メインプロセッサ６は、インタリーブされたコマンドタイプの組み合わせとしてコマンドストリームを生成できる。この場合各コマンドタイプは、マルチメディアプロセッサ１０の複数の異なるメディア関連処理エリアのうちの１つに関連付けられている。
【００２２】
例えば、メインプロセッサ６は、ビデオ関連サブルーチンを呼び出し、続けてオーディオ関連サブルーチンを呼び出すことができる。両方のサブルーチンがマルチメディアプロセッサ１０において実行される場合、コマンドストリームは、オーディオコマンド(audio commands)が後続するビデオコマンド(video commands)を含むであろう。ビデオコマンドは、マルチメディアプロセッサ１０のビデオ処理エリアに関連付けられており、オーディオコマンドは、マルチメディアプロセッサ１０のオーディオ処理エリアに関連付けられている。
【００２３】
コマンドストリーム内の１つまたは複数の特定のコマンドの実行はしばしば、コマンドストリームにおける後のコマンドの実行への必要条件となる。従って、後のコマンドが１つまたは複数の先行するコマンドに従属するという点において、コマンド間の従属関係が存在する。そのためコマンドストリームはコマンドに加え、コマンドの各々に関する従属情報を含む。従属情報は、あるコマンドが従属するコマンドストリーム内のコマンドが存在する場合それを示すことによって、そのコマンドに関する従属関係をマップする。
【００２４】
混合媒体のシナリオにおいて、特定のメディア関連機能（例えば、ビデオ）のためのコマンドが、別のメディア関連機能（例えば、３Ｄグラフィック）に従属することがある。そのような機能間のコマンド従属関係は、マルチメディアプロセッサ１０の異なるメディア関連処理エリア間の従属関係をもたらす。
【００２５】
本開示において説明された原理に従うと、マルチメディアプロセッサ１０は、マルチメディアプロセッサ１０の関連付けられたメディア関連処理エリアへコマンドストリーム内の各コマンドを効率的に割り当てるコマンド割当および同期プロセッサ１２（「ＣＤＳプロセッサ１２」）を含む。
【００２６】
以下で詳しく説明するように、ＣＤＳプロセッサ１２は、コマンドストリーム内のコマンドに関する従属情報を分析し、コマンドに関する従属関係が満たされているか（すなわち、実行されたか）を判定し、満足されていれば、従属関係が満たされているコマンドをただちに実行するためにコマンドストリームを並べ替えることによって、マルチメディアプロセッサ１０の異なるメディア関連処理エリアへコマンドを割り当てる。その際、ＣＤＳプロセッサ１２は、従属情報によって指定された同期要件を順守する。この方式でコマンドを割当ておよび同期することによって、ＣＤＳプロセッサ１２は、マルチプロセッサ１０が高いコマンド実行レートを達成することを可能にする。
【００２７】
本明細書で説明された教示は、ある利点を有することができる。例えばリソース従属命令は、コマンドストリームの順序においてリソース従属命令に後続する命令全てに影響を及ぼす長いパイプラインブロックを生じさせる高いレイテンシを有しうる。上記方法でコマンドを割当ておよび同期することによって、ＣＤＳプロセッサ１２は、リソース従属命令より前に、影響を受けた命令を実行することによって、影響を受けた命令をブロックすることを回避できる。このようにパイプラインスループットを増加することにより、コマンドストリーム全体の一般的な実行レートが高まる傾向にあるので、マルチメディアプロセッサ１０が高いコマンド実行レートを達成することが可能となる。
【００２８】
図２は、本開示の教示に従って構成された例示的なマルチメディアプロセッサ１０を示すブロック図である。マルチメディアプロセッサ１２のためのメディア関連処理エリアは、ビデオパイプライン２０、３Ｄグラフィックパイプライン２２、およびオーディオパイプライン２４の形式で命令パイプラインを含む。コマンドパイプラインは、複数のステージにコマンド処理を分割することによってコマンドスループットを増加させる傾向があり、処理の１つの態様を実行する各ステージは、任意の特定のコマンドを実行することが必要である。いくつかの例において、マルチメディアプロセッサ１０は、他の様々なメディア関連機能に関連付けられた、あるいは図示されたパイプラインのうちの１つまたは複数（例えば、ビデオパイプライン２０）を複写する、追加のパイプラインを有することができる。いくつかの例において、マルチメディアプロセッサ１２は、より少ない数のパイプラインを有することができる、あるいはコマンドを実行するために非パイプラインベースのロジックを用いることができる。
【００２９】
コマンドストリーム２６は、マルチメディアプロセッサ１０によって実行するためのコマンドのリストまたはシーケンスである。コマンドストリーム内の各コマンドは、マルチメディアプロセッサ１２の特定のパイプラインに関連付けられている。マルチメディアプロセッサ１０の例において、ビデオタイプのコマンドは、ビデオパイプライン２０に関連付けられている。同様に、３Ｄグラフィックコマンドは３Ｄグラフィックパイプライン２２に関連付けられている。最後に、オーディオコマンドは、オーディオパイプライン２４に関連付けられている。
【００３０】
コマンドストリーム２６は順序付けられている、すなわちコマンドストリーム２６内の各コマンドは、そのコマンドが従属しているコマンド全てに先行される。上述したように、コマンドストリーム２６は、様々なコマンドタイプ（例えば、ビデオ、オーディオ、３Ｄグラフィック）に関するコマンドのセットのインタリーブされた組み合わせであることができる。セットは、ゼロ以上のコマンドの集合である。例えばビデオコマンドのセット内のコマンドは、コマンドストリーム２６においてオーディオコマンドのセット内のコマンドとインタリーブされうる。いくつかの例において、コマンドストリーム２６は、各々が複数のコマンドタイプのうちの１つに対応する複数のコマンドサブストリームを表し、対応するコマンドタイプに関するコマンドのセットを備える。すなわち、これらの例において、コマンドストリーム２６は、図示されたようにインタリーブされないであろう。これらの例において、マルチプロセッサ１０は、サブストリームを同時に処理できる。サブストリームは、マルチプロセッサ１０が相対優先値に従ってサブストリームを処理するように、様々な関連付けられた優先順位を有することができる。マルチプロセッサ１０は、これらのサブストリームに関連付けられている優先順位に基づいて別のサブストリームよりも頻繁に１つのサブストリームを読み取ることもできる。サブストリームの各々におけるコマンドは、１つのサブストリーム内のコマンドが別のサブストリーム内のコマンドに従属できるように、ユニークな識別子を有することができる。一般にマルチプロセッサ１０は、サブストリームを含む、コマンドの１つまたは複数のストリームを処理できる。任意の所与のストリームにおけるコマンドは、同一のまたは別のストリーム内のコマンドに従属できる。
【００３１】
コマンドストリーム２６はコマンドに加え、各コマンドについて、そのコマンドが従属するコマンドストリーム２６内のコマンドがある場合それを示す任意の長さの従属リストを含むことができる。別のコマンドが従属するコマンドは、以下、従属先と称される。コマンドストリーム２６における特定のコマンドに関する従属リストは、特定のコマンドのタイプとは異なるタイプを有する従属先を示すことができる。例えばビデオコマンドは、３Ｄグラフィックタイプである従属先を有することができる。
【００３２】
パイプライン内のコマンドの実行の完了はしばしば、他のコマンドのみではなく、様々なデバイスリソース（例えば、デバイスメモリ）の応答性にも従属するので、コマンドが実行されるレートは非決定的である。例えばビデオパイプライン２０は、別のパイプライン、あるいは図１のデバイス２の別の構成要素（例えば、メインプロセッサ６）とのシステムリソースをめぐるコリジョンを経験しうる。そのような例において、ビデオパイプライン２０は、システムリソースが再び利用可能になるまで待機状態になることを強いられうる。従って、マルチメディアプロセッサ１０の観点から、コマンドストリーム２６における各コマンドのための実行時間は非決定的であり、実行時まで決定されないことがある。あるコマンドの従属先が待機状態にある一方で、コマンドストリーム２６内の他の後続コマンドが満足された従属先を有しており、マルチメディアプロセッサ１０のパイプラインのうちの１つにおける実行の準備ができている場合、マルチメディアプロセッサ１０に到達したとおりのコマンドストリーム２６の順序は次善である。
【００３３】
コマンドストリーム２６のコマンドが実行されるレートを高めるために、例示的なマルチメディアプロセッサ１０はさらに、マルチメディアプロセッサ１０のためのコマンドストリーム２６内のコマンドを受信し、ビデオパイプライン２０、３Ｄグラフィックパイプライン２２、およびオーディオパイプライン２４にコマンドを効率的に割り当てる、コマンド割当および同期プロセッサ１２（「ＣＤＳプロセッサ１２」）を含む。ＣＤＳプロセッサ１２は、いくつかの場合、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリートロジック、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組み合わせとして実現されうる。様々な態様において、ＣＤＳプロセッサ１２は、マルチメディアプロセッサ１０とは別の構成要素として、例えば別の中央処理ユニット、マイクロプロセッサ、またはＤＳＰとして実現される。
【００３４】
本開示の原理に従って、ＣＤＳプロセッサ１２は、コマンドストリーム２６のコマンドを、ビデオパイプライン２０、３Ｄグラフィックパイプライン２２、およびオーディオパイプライン２４に割り当てる前に並べ替えることができる。ＣＤＳプロセッサ１２は、すでにパイプラインに割り当てられたコマンドに関する実行状態を分析することによってコマンドを並べ替え、その状態と、実行のためにまだパイプラインに割り当てられていないコマンドに関する従属情報とを比較する。特定のコマンドタイプに関するコマンドが、パイプラインのうちの１つまたは複数において満たされていない従属関係を有する場合、ＣＤＳプロセッサ１２は、コマンドストリーム２６から、他の、そのコマンドタイプの後続コマンドを割当てのために優先できる。ＣＤＳプロセッサ１２は実際にコマンドストリーム２６を並べ替え、コマンドストリーム２６の従属情報によって指定された同期要件を順守しながら、あるコマンドが順序に反して実行することを可能にする。
【００３５】
図３は、図２のコマンドストリーム２６の典型的なサブセットであるコマンド２８を示す。コマンド２８は、各々がビデオまたは３Ｄグラフィックの２タイプのうちの１つを有する６つのコマンドを用いて、左から右への意図された実行順にインタリーブされている。コマンドは、コマンドストリーム２６内の自身に先行する任意の他のコマンドに従属しうる。コマンド２８のうちのいくつかは、従属関係矢印２９Ａ−２９Ｅによって示された従属関係（集合的に、「従属関係２９」）を有する。例えば従属関係矢印２９Ｄは、３Ｄグラフィックコマンド＃３が３Ｄグラフィックコマンド＃２に従属していることを示す。いくつかの例において、１つのタイプを有するコマンドが、別のタイプを有するコマンドに従属しうる。例えば従属関係矢印２９Ｂは、ビデオコマンド＃１が３Ｄグラフィックコマンド＃１に従属していることを示す。コマンドストリーム２６は順序付けられているので、コマンドが後続のコマンドに従属することはできない。
【００３６】
図４は、図２の典型的なＣＤＳプロセッサ１２をより詳細に示すブロック図である。ＣＤＳプロセッサ１２は、コマンドストリーム２６を受信し、その中のコマンドを、コマンドタイプに基づいて同期モジュール(synchronization modules)３４Ａ−３４Ｃ（集合的に、「同期モジュール３４」)のうちの１つに割り当てる割当モジュール(distribution module)３０を含む。例えば割当モジュール３０は、オーディオコマンドタイプに関連付けられた同期モジュールのうちの１つにオーディオコマンドを割り当てる。
【００３７】
同期モジュール３４は、割当モジュール３０および従属マスクモジュール４４と連動して、関連付けられたコマンドタイプの各々について、本明細書で説明されたコマンド並べ替え機能を実行する。同期モジュール３４の各々は、特定のコマンドタイプに関連付けられていることにより、マルチメディアプロセッサ１０の特定のパイプラインに関連付けられている。例えば同期モジュール３４Ａは、ビデオコマンドに関連付けられることができるので、ビデオパイプライン２０（図４には示さず）にも関連付けられうる。様々な態様において、パイプラインの数によって、ＣＤＳプロセッサ１２は、より多いまたはより少ない数の同期モジュールを有することができる。図４の例において、同期モジュール３４は実質的に同様であるが、簡略化のために同期モジュール３４Ａは同期モジュール３０Ｂ−３０Ｃよりも詳細に示される。
【００３８】
割当モジュール３０は、同期モジュール３４にコマンドを割当て、割当モジュール３０は、各々が同期モジュール３４のうちの特定の１つに関連付けられた３つのコマンドタイプ特定ストリームに、インタリーブされたコマンドストリーム２６を効率的に逆多重化する。従って、例えば割当モジュール３０は、同期モジュール３４Ａ（すなわち、ビデオコマンド）に関連付けられたタイプを有するコマンドを含むコマンドタイプ特定コマンドストリームを生成する。各コマンドタイプ特定コマンドストリームは、コマンドストリーム２６内にコマンドが現れる順序を維持する。コマンドストリーム２６が、各々が複数のコマンドタイプのうちの１つに対応する複数のコマンドサブストリームを表す実施形態において、割当モジュール３０は、コマンドタイプに対応する各サブストリーム内のコマンドを、そのコマンドタイプに関連付けられた同期モジュール３４のうちの１つに割り当てることができる。
【００３９】
同期モジュール３４Ａは、同期モジュール３４Ａが、コマンド間の従属情報を分析し、分析の結果に基づいてコマンドを並べ替えるために用いる、ステージングエリア３６Ａ、コマンドカウンタ３８Ａ、およびアクティブウインドウマスク４０Ａを含む。ステージングエリア３６Ａは、割当モジュール３０から受信された優先順位情報およびコマンドデータと従属マスクとを含むコマンド情報を格納するレジスタを含む。ステージングエリア３６Ａは、所定の数のスロット４６Ａ１−４６Ａ４（集合的に、「スロット４６Ａ」）を含み、スロット４６Ａの各々は、特定のコマンドに関するコマンド情報を格納している。
【００４０】
様々な態様において、同期モジュール３４は、同期モジュール３４Ａのステージングエリア３６Ａよりも多いまたは少ない数のスロットを有するステージングエリア３６を含むことができる。すなわち、ステージングエリア３６は、４つのスロットに限定されない。いくつかの態様において、同期モジュール３４のうちの異なる１つが様々な数のスロットを有することができる。例えば同期モジュール３４Ａが４つのスロットを有し、同期モジュール３４Ｂが８つのスロットを有することができる。いくつかの態様において、ＣＤＳプロセッサ１２のあるアプリケーションのための性能を最大限に利用するために、同期モジュール３４のためのスロットの数は可変である。
【００４１】
同期モジュール３４Ａは、割当モジュール３０によって生成されたタイプ特定コマンドストリームの先頭にあるコマンドを、スロット４６Ａのうちの利用可能な１つへ転送する。スロット４６Ａのいずれも利用可能でない場合、同期モジュール３４Ａは、スロット４６Ａのうちの１つが利用可能になるまで、タイプ特定コマンドストリームをブロックできる。以下で詳しく説明するように、同期モジュール３４Ａはその後、従属関係分析に基づいて、ステージングエリア３６のスロット４６Ａにおけるコマンドの実行順序を並べ替える。ステージングエリア３６によって格納されたコマンドが満足された従属関係を有する場合、同期モジュール３４Ａは、それらのコマンドを実行するために関連付けられたパイプライン（すなわち、ビデオパイプライン２０）へ送る。タイプ特定コマンドストリーム内の各コマンドは、理論上、コマンドストリーム２６内のコマンドに先行した他の任意のコマンドに従属できるので、同期モジュール３４Ａは、同期モジュール３４Ａが受信し実行するためにオフロードするコマンドの全てについて完了情報(completion information)を格納する。
【００４２】
完了情報は、先に実行されたコマンドの全てについて完了情報を格納するという要件によって、膨大な量となる可能性があるが、コマンドカウンタ３８Ａおよびアクティブウインドウマスク４０Ａは、完了情報を２つの値に圧縮する。コマンドカウンタ３８Ａおよびアクティブウインドウマスク４０Ａの値は、同期モジュール３４Ａに関連付けられたコマンド（すなわち、ビデオコマンド）に関するコマンド完了情報を保持する「スライドウインドウ」を定める。まず、コマンドカウンタ３８Ａは、スライドウインドウの開始位置を定める。開始位置は、まだ実行されていない先行コマンドが存在しないタイプ特定コマンドストリーム内のコマンドの数に対応する。すなわち、タイプ特定コマンドストリーム内の第１のコマンドから数え、まだ実行されていないコマンドに達する前まで数えたコマンドの数である。コマンドカウンタ３８Ａよりも小さいコマンドカウントを有するコマンドを参照する従属先全てが実行されているので、満たされている。
【００４３】
さらに、ステージングエリア３６Ａ内のスロット４６Ａの数が、スライドウインドウの大きさを定める。図４の例において、ステージングエリア３６Ａには４つのスロット４６Ａがある。従ってこの例において同期モジュール３４Ａのためのスライドウインドウは４つのコマンドを包含し、それらはスロット４６Ａによって保持される４つのコマンドに対応する。コマンドカウンタ３８Ａは、実行されていない先行コマンドが存在しない、タイプ特定コマンドストリーム内の最後のコマンドのコマンドカウントにスライドウインドウの開始位置を定めるので、スライドウインドウは、その最後のコマンドの直後のそれらのコマンドを包含する。スロット４６Ａ１はスライドウインドウ内の第１のコマンドを保持し、スロット４６Ａ２は第２のコマンドを保持し、以下同様である。いくつかの態様において、スロット４６Ａは不連続な順序でコマンドを保持し、追加のロジックがコマンドを様々なスロットにマップする。
【００４４】
同期モジュール３４Ａによるコマンド並べ替えの結果、スロット４６Ａによって保持された、いくつかのコマンドが順序に反して実行されうる。例えばスロット４６Ａ２によって保持されたコマンドが、コマンドストリーム２６内のスロット４６Ａ１によって保持されたコマンドに後続しているにもかかわらず、先に実行しうる。そのコマンドに従属しているコマンドがスライドウインドウによって包含されたかを同期モジュール３４Ａが判定できるように、アクティブウインドウマスク４０Ａは、ステージングエリア３６Ａ内のコマンドに関する完了情報を追跡する(tracks)。アクティブウインドウマスク４０Ａは、スライドウインドウのサイズと等しいビット長を有する。これは、ステージングエリア３６Ａ内のスロット４６Ａによって保持された各コマンドのための１ビットに等しい。アクティブウインドウマスク４０Ａの最下位ビット（「ＬＳＢ」）は、スロット４６Ａ１によって保持されたコマンドに関する完了状態を示す。次の最下位ビットは、スロット４６Ａ２によって保持されたコマンドに関する完了状態を示し、以下同様である。ビット値「１」は、対応するコマンドが実行されていることを示す。
【００４５】
例えば、スロット４６Ａ１−４６Ａ４がそれぞれビデオコマンド＃１０、＃１１、＃１２、および＃１３を保持すると想定する。上述したように、コマンドカウンタ３８Ａおよびアクティブウインドウマスク４０Ａによって定められたスライドウインドウは、同期モジュール３４Ａの範囲内にあるまたは以前あったコマンド全ての完了を追跡する。この例において、コマンドカウンタ３８Ａは、値１０を有するであろう。１０は、まだ実行されていない先行コマンドが存在しない、タイプ特定コマンドストリーム内のコマンド（すなわち、ビデオコマンド＃０−＃９）の数である。ビデオコマンド＃１１およびビデオコマンド＃１２が実行されたとさらに想定しても、ビデオコマンド＃１０およびビデオコマンド＃１３はまだ実行されていない。従って、アクティブウインドウマスク４０Ａは、０×６のマスク値、あるいは２進法では０１１０ｂのマスク値を有する。
【００４６】
ビデオコマンド＃１０は、スロット４６Ａ１を空にする。その結果、同期モジュール３４Ａは、ビデオコマンド＃１１、＃１２、および＃１３をスロット４６Ａ１−４６３へ進め、（現在、割当モジュール３０によって生成されたタイプ特定コマンドストリームの先頭にある）ビデオコマンド＃１４を新たに空になったスロット４６Ａ４へ転送する。さらに、同期モジュール３４Ａは、コマンドカウンタ３８Ａおよびアクティブウインドウマスク４０Ａにおける値を変更することによって、スライドウインドウを進める。具体的には、コマンドカウンタ３８Ａは値１１を受信し、アクティブウインドウマスクは、ビデオコマンド＃１３および＃１４はまだ実行されていないがビデオコマンド＃１１および＃１２は実行されたことを示すために０×３（２進法の００１１ｂ）のマスク値を受信する。
【００４７】
いくつかの態様において、スロット４６Ａは不連続な順序でコマンドを保持することができ、追加のロジックがコマンドを様々なスロットにマップする。そのような態様において、同期モジュール３４Ａは、スロット４６Ａ４を開くためにコマンドを進める必要がなく、アクティブウインドウマスク４０Ａのビット位置(bit places)が、対応するコマンドと一致したままになることがマッピングによって確実になる。
【００４８】
同期モジュール３４Ａについて上述した教示は、同期モジュール３４Ｂ−３４Ｃにも同様に適用できる。その結果同期モジュール３４は、割当モジュール３０によって生成された３つのタイプ特定コマンドストリームの各々についてのコマンド完了情報を保持する。この例において、同期モジュール３４Ａは、ビデオパイプライン２０に関連付けられたビデオコマンドに関するコマンド完了情報を保持する。同期モジュール３４Ｂは、３Ｄグラフィックパイプライン２２に関連付けられた３Ｄグラフィックコマンドに関するコマンド完了情報を保持する。最後に同期モジュール３４Ｃは、オーディオパイプライン２４に関連付けられたオーディオコマンドに関するコマンド完了情報を保持する。
【００４９】
ＣＤＳプロセッサ１２はさらに、ステージングエリア３６Ａ内のスロット４６Ａによって保持されたコマンドに関する従属関係を表すために、従属マスクを生成および保持するための従属マスクモジュール４４を含む。特定のコマンドタイプを有するコマンドストリーム２６内のコマンドは、任意のコマンドタイプである１つまたは複数の他のコマンドに従属しうるので、各コマンドは、コマンドタイプの各々のための１つの従属マスクに関連付けられている。その結果スロット４６Ａは、同期モジュール３４の各々のための従属マスクを保持する。図１の例において、スロット４６Ａのうちの１つにおける各コマンドは、それぞれが同期モジュール３４の各々のためである３つの従属マスクに関連付けられている。
【００５０】
従ってコマンドのための従属マスクの全てが同期モジュール３４のうちの１つに対応する。従属マスクは、同期モジュール３４のうちの対応する１つのアクティブウインドウマスクのビット長に等しいビット長を有することができる。これは、同期モジュール３４のうちの対応する１つのステージングエリア３６内のスロット４６によって保持された各コマンドのための１ビットに等しい。従属マスクにおけるビット値「１」は、スロット４６のうちの１つによって保持された対応するコマンドへの従属関係を示す。
【００５１】
例えば同期モジュール３４Ａに対応する従属マスクに関連付けられたコマンドの場合、従属マスクは、アクティブウインドウマスク４０Ａのビット長およびステージングエリア３６Ａにおけるスロット４６の数と等しい４のビット長を有する。従属マスクのＬＳＢは、従属マスクに関連付けられたコマンドとスロット４６Ａ１によって保持されたコマンドとの従属関係を示す。従属マスクの次の最下位ビットは、従属マスクに関連付けられたコマンドとスロット４６Ａ２によって保持されたコマンドとの従属関係を示し、以下同様である。例えば、従属マスクが０×９（２進法の１００１ｂ）の値を有する場合、従属マスクに関連付けられたコマンドは、スロット４６Ａ１および４６Ａ４によって保持されたコマンドに従属する。
【００５２】
従属マスクモジュール４４は、コマンドが同期モジュール３４のうちの１つのためのステージングエリア３６に入る度に、全てのコマンドのための従属マスクを生成する。いくつかの態様において、ソフトウェアドライバまたはＣＤＳプロセッサ１２外の他のロジックが従属マスクモジュール４４の機能を実行する。同期モジュール３４Ａの場合、同期モジュール３４Ａのためのスライドウインドウが進んだ後、スロット４６Ａのうちの１つが利用可能になると、同期モジュール３４Ａは、タイプ特定コマンドストリームの先頭にあるコマンドを、ステージングエリア３６Ａ内のスロット４６Ａ（例えば、スロット４６Ａ４）のうちの利用可能な１つへ転送できる。上述したように、コマンドストリームはさらに、そのコマンドのための従属リストを提供する。従属リストは、そのコマンドが従属しているコマンドストリーム２６内の他のコマンドがある場合、それを示す。従属リスト内のエントリは、コマンドの、タイプ特定コマンドストリームにおける先行コマンドの数を表すコマンドカウント値によって、タイプ特定コマンドストリーム内のコマンドを参照する。例えばビデオコマンド＃０はビデオコマンドストリーム内の第１のビデオコマンドであり、ビデオコマンド＃１はビデオコマンドストリーム内の第２のコマンドであり、以下同様である。
【００５３】
従属マスクモジュール４４は、同期モジュール３４Ａによってステージングエリア３６Ａに転送されるコマンドに関する、割当モジュール３０から従属リストを受信する。各コマンドに付いて、従属マスクモジュール４４は、関連付けられた従属リスト内の各エントリと、同期モジュール３４の各々のためのアクティブウインドウマスク４０およびコマンドカウンタ３８によって定められたスライドウインドウとを比較する。従属関係エントリが、参照されたコマンドに関連付けられた同期モジュール３４のうちの１つのコマンドカウンタ３８の値よりも小さいコマンドカウンタ値を有するコマンドを参照する場合、参照されたコマンドはすでに実行されているので、従属関係は満足されている。
【００５４】
一方、従属関係エントリが、同期モジュール３４のうちの１つのためのステージングエリア３６によって現在保持されているコマンドを参照する場合、参照されたコマンドは、同期モジュール３４のうちの上記１つのためのスライドウインドウ内にある。従って、従属マスクモジュール４４は、参照されたコマンドが実行したかを判定するために、同期モジュール３４のうちの上記１つのためのアクティブウインドウマスク４０を評価する。参照されたコマンドがまだ実行していない場合、適切な従属マスクについて、従属マスクモジュール４４は、参照されたコマンドを保持するスロット４６のうちの１つに対応するビット位置内に「１」のビットを置く。その結果、従属マスクは、従属関係がまだ満たされていないことを示す。
【００５５】
例えば同期モジュール３４Ａを参照すると、従属関係エントリがスロット４６Ａ２によって保持されるコマンドを参照し、アクティブウインドウマスク４０Ａが、スロット４６Ａ２に対応するビット位置内に値「１」を有する場合、従属マスクモジュール４４は、同期モジュール３４Ａに関連付けられた従属マスク内のスロット４６Ａ２に対応するビット位置に「１」を置く。非ゼロ値を有する１つまたは複数の従属マスクを有するスロット４６Ａのうちの１つによって保持されたコマンドは、そのコマンドに関する残りの１つまたは複数の従属先が実行されるまで実行されることができない。
【００５６】
いくつかの例において、到来するコマンドのための従属関係エントリは、同期モジュール３４のうちの適切な１つのためのスライドウインドウの範囲外の別のコマンドを参照する。すなわち、参照されたコマンドは、実行されておらず、スライドウインドウ内に存在するのでもない。そのような例において従属マスクモジュール４４は、到来するコマンドに関連付けられた同期モジュール３４をブロックする、すなわち、タイプ特定コマンドストリームの先頭の到来するコマンドをステージングエリア３６へ転送することを延期するように指示する。同期モジュール３４のうちの１つのブロックは、参照されるコマンドを包含するようにスライドウインドウを進めるために十分な数のコマンドが実行すると、解除するであろう。
【００５７】
従属マスクモジュール４４は、上述した方法で、到来するコマンドのための従属リスト内で参照されたコマンドの各々を評価し、それによって同期モジュール３４の各々について到来するコマンドのための従属マスクを生成する。従属マスクを生成すると、従属マスクモジュール４４は、ステージングエリア３６において到来するコマンドを保持するであろう同期モジュール３４のうちの関連付けられた１つへ従属マスクを送信する。同期モジュール３４のうちの関連付けられた１つは、割当モジュール３０におけるタイプ特定コマンドストリームの先頭から到来するコマンドを、ステージングエリア３６内のスロット４６のうちの１つへ転送することを確実にする。
【００５８】
ビデオパイプライン２０、３Ｄグラフィックパイプライン２２、およびオーディオパイプライン２４は、コマンドの完了を、それぞれの関連付けられた同期モジュール３４へ報告する。同期モジュール３４、例えば同期モジュール３４Ａは、関連付けられたパイプラインからコマンド完了インジケーションを受信すると、完了したコマンドを保持するスロット４６Ａのうちの１つおよびそのスロットに対応するビット位置を決定する。同期モジュール３４Ａはその後、完了したコマンドに対応するビット位置にビットを設定する（すなわち、ビット値を「１」に変更する）ためにアクティブウインドウマスク４０Ａを変更することによってスライドウインドウを更新する。さらに同期モジュール３４Ａは、コマンド完了を従属マスクモジュール４４に通知し、ビット位置値を提供する。この通知は、信号、データ構成、メッセージ、ビットマスク、値、または別のメカニズムを備える。同期モジュール３４によって保持されたコマンドの全てが、同期モジュール３４Ａに対応する、関連付けられた従属マスクを有する。従って、従属マスクモジュール４４は通知を受信すると、適切なビット位置内のビットをクリア（すなわち、値「０」を設定）するために、同期モジュール３４Ａに対応する、同期モジュール３４Ａ−３４Ｃの各々における従属マスク全てを変更する。適切なビット位置内でのビットのクリアは、そのビット位置に対応するコマンドに関連する任意の従属関係が満足されたことを示す。
【００５９】
完了したコマンドが、同期モジュール３４のうちの関連付けられた１つのためのアクティブウインドウマスク４０のＬＳＢに対応する場合、関連付けられた同期モジュール３４は、コマンドカウンタ３８をインクリメントすることおよびアクティブウインドウマスク４０を１ビット右シフトすること（右シフトは、アクティブウインドウマスク４０の最上位ビットをゼロに設定する）によって、スライドウインドウを進める。アクティブウインドウマスク４０が１ビット右シフトするので、従属マスクモジュール４４も同様に、関連付けられた同期モジュール３４に対応する従属マスク全てを１ビット右シフトする。この方法において、従属マスク(dependency masks)のためのビット位置(bit places)内のビット値は、関連付けられた同期モジュール３４のためのスライドウインドウ内のコマンドの場所(locations of the commands)と一致したままである。
【００６０】
上述した処理の結果、従属マスクは各コマンドについて、そのコマンドの従属先の完了状態を正確に表す。コマンドのための従属マスクの全てがクリアされた（すなわち、ゼロのビット値を有する）場合、コマンドはまだ満たされていない従属関係を有していない。従って、そのコマンドに関連付けられた同期モジュール３４のうちの１つは、コマンドを実行するために適切なパイプラインへ転送する。
【００６１】
コマンド完了の結果、特定のステージングエリア３６における１つより多いコマンドのための従属マスクをクリアする従属マスクモジュール４４がクリアされる。そのような例において、両方のコマンドが実行のための準備が整う。コマンドストリーム２６内のコマンドは、割当モジュール３０がコマンドデータとともに同期モジュール３４へ転送する優先順位情報に関連付けられている。優先順位情報は、特定のコマンドの、他の任意のコマンドの優先順位と比較された相対優先順位を示す番号または他の識別子である。同期モジュール３４のためのステージングエリア３６が優先順位情報を保持する。例えば同期モジュール３４Ａを参照すると、ステージングエリア３６Ａが、スロット４６Ａ内のコマンドに関連付けられた優先順位情報を保持する。従ってスロット４６Ａの各々は、特定のコマンドについて、コマンドデータ、コマンドに関する優先順位情報、およびコマンドのための従属マスクを保持する。優先順位情報は、関連付けられたコマンド、コマンドのタイプ（例えば、リソース従属、複合）、または他のファクタを含む、マルチメディアデバイス２で実行中のアプリケーションに関連しうる。
【００６２】
同期モジュール３４Ａにおける２つ以上のコマンドが実行のための準備ができた場合、コマンドの相対優先順位が実行の順序を決定する。高い優先順位のコマンドが実行の優先権を有する。コマンドに関する相対優先順位が等しい場合、同期モジュール３４Ａは、優先権を決定するために別の方法（例えば、ラウンドロビン、ランダム選択、先入れ先出し（ＦＩＦＯ））を用いることができる。
【００６３】
あるコマンドは、従属先を有さない、あるいはコマンドストリーム２６において先行する他のコマンドに関する従属関係よりも先に満足された従属関係を有することがある。同期モジュール３４を用いると、ＣＤＳプロセッサ１２は、先行コマンド自体が実行するまでそのコマンドをブロックするのではなく、コマンド従属関係が満たされるとそのコマンドを実行できる。従って、コマンドストリーム２６内のコマンドは順序に反して実行されることができ、その結果、コマンドストリーム２６に関するより高い全体実行レートがもたらされる。
【００６４】
図５は、図４の同期モジュール３４Ａの一例をさらに詳しく、特定の動作状態について示すブロック図である。図５は、スロット４６Ａの描写を拡大し、コマンドデータ列４７、優先順位列４８、およびスロット４６Ａ１−４６Ａ４のための従属マスク列５０Ａ−５０Ｃを示し、かつスロット４６Ａ内のそれら様々な列のための可能な値の例を提供する。従属マスク列５０Ａ−５０Ｃは、図４のＣＤＳプロセッサ１２の同期モジュール３４Ａ−３４Ｃに対応する。従って、例えば従属列５０Ａにおける従属マスクは、同期モジュール３４Ａによって保持されたコマンドに対応する。
【００６５】
図示された動作状態において、スロット４６Ａ１−４６Ａ４はそれぞれビデオコマンド＃３−＃６を保持する。ビデオコマンド＃３を保持しているスロット４６Ａ１のための従属マスクＢ（従属マスク列５０Ｂ）は、値００１０ｂを有する。第２のビット位置が値「１」を有するので、これは、同期モジュール３４Ｂのステージングエリア３６Ｂの第２のスロット内の対応する第２のコマンドへの従属を示す。別の例として、ビデオコマンド＃６を保持しているスロット４６Ａ４のための従属マスクＡ（従属マスク列５０Ａ）は、値０００１ｂを有する。これは、同期モジュール３４Ａのスロット４６Ａ１内のコマンド（すなわち、ビデオコマンド＃３）への従属を示す。
【００６６】
コマンドカウンタ３８Ａおよびアクティブウインドウマスク４０Ａは、同期モジュール３４Ａのためのスライドウインドウ状態を表す。コマンドカウンタ３８Ａの値は、ビデオパイプライン２０が第１の３つのビデオコマンドを完了したことを示す。アクティブウインドウマスク４０Ａの値は、同期モジュール３４Ａに関連付けられたビデオパイプライン２０が、スロット４６Ａ２および４６Ａ３内のコマンド（すなわち、ビデオコマンド＃４およびビデオコマンド＃５）をさらに完了したことを示す。
【００６７】
優先順位列４８は、スロット４６Ａ内のコマンドの優先順位を示す。上述したように、同期モジュール３４内の２つ以上のコマンドが（例えばそれらの従属関係がクリアされたことによって）同時に実行する準備ができた場合、高い相対優先順位を有するコマンドが実行の優先権を有する。例えば１の優先値を有するビデオコマンド＃６は、３の優先値を有するビデオコマンド＃３よりも高い相対優先順位を有する。
【００６８】
図６は、ビデオパイプライン２０によるビデオコマンド＃３の実行後の、図５の同期モジュール３４Ａの未来の動作状態を示すブロック図である。ビデオコマンド＃３の実行に応答して、同期モジュール３４Ａは、スロット内の他のコマンドを進めた後、タイプ特定コマンドストリームの先頭のコマンドであるビデオコマンド＃３をスロット４６Ａ４に転送した。さらに、同期モジュール３４Ａは、コマンドカウンタ３８Ａをインクリメントすることおよびアクティブウインドウマスク４０Ａを１ビット右シフトすることによって、スライドウインドウを進めた。
【００６９】
最後に、図５におけるビデオコマンド＃３は、アクティブウインドウマスク４０ＡのＬＳＢに対応したので、従属マスクモジュール４４は、全ての従属マスクＡ（従属マスク列５０Ａ）を１ビット右シフトした。その結果、ビデオコマンド＃６のための従属マスクがクリアされた。しかし、ビデオコマンド＃６のための同期モジュール３４Ｂに対応する従属マスク（従属マスク列５０Ｂ）はまだ従属関係を示すので、ビデオコマンド＃６はまだ実行のためにビデオパイプライン２０へ転送されることができない。
【００７０】
図７は、コマンド７０、タイプ特定コマンドストリームのサブセット、およびタイプ特定コマンドストリームのための典型的なスライドウインドウを示すブロック図である。コマンド７０は３Ｄグラフィックコマンドである。従属関係７２Ａ−７２Ｄは、様々なコマンド間の従属関係を示す。例えば従属関係７２Ａは、３Ｄグラフィックコマンド＃１６の３Ｄグラフィックコマンド＃１５への従属を示す。コマンドカウンタ８０は、スライドウインドウ８２の開始位置を示す。この例においてコマンドカウンタ８０は値１６を有する。これは、３Ｄグラフィックコマンドに関連付けられた３Ｄグラフィックパイプライン（図７には示さず）による、３Ｄグラフィックコマンドストリーム内の最初の１６の３Ｄグラフィックコマンドの完了を示す。コマンドカウンタ８０の値は、３Ｄグラフィックコマンド＃１５のためのコマンドカウントよりも大きいので、従属関係７２Ａは満足されている。
【００７１】
スライドウインドウ８２は、コマンドカウンタ８０に後続する４つのコマンドを包含する。従って、関連付けられた同期モジュール内のスロットは、３Ｄグラフィックコマンド＃１５−＃１９を保持する（図７には示さず）。スライドウインドウ８２は、グラフィックコマンド＃１７が、スライドウインドウ内の完了している唯一のコマンドであることを示す。スライドウインドウによって包含された最も古いコマンド（この例では、３Ｄグラフィックコマンド＃１５）の実行状態が、アクティブウインドウマスク８４のＬＳＢによって表される。従って、３Ｄグラフィックコマンドに関連付けられた同期モジュール（図７には示さず）におけるスライドウインドウ８２を表すアクティブウインドウマスク８４は、値００１０ｂを有する。
【００７２】
図８は、本開示において説明された順序に反した実行技術を実現する図４のＣＤＳプロセッサ１２のための例示的な動作モードを示すフローチャートである。
【００７３】
ＣＤＳプロセッサ１２は、コマンドストリームの一部として、従属リストを有するコマンドを受信する（１００）。従属リストはエントリを含み、各エントリは、コマンドストリーム内の、受信されたコマンド自体が実行されうる前に実行されるべきコマンドを示す。ＣＤＳプロセッサ１２は、従属リストにおける各エントリと、エントリによって示されたコマンドのタイプに関連付けられた適切な同期モジュールのスライドウインドウとを比較することによって個々にエントリを処理する（１０２）。
【００７４】
まずＣＤＳプロセッサ１２は、適切な同期モジュールのためのパイプラインが、エントリによって示されたコマンドを既に実行したかを判定する。エントリコマンドのコマンドカウントが同期モジュールのコマンドカウントよりも小さい場合（１０４のＹＥＳ分岐）、エントリコマンドは既に実行されており、ＣＤＳプロセッサは従属関係をドロップする（１１６）。そうでない場合（１０４のＮＯ分岐）、ＣＤＳプロセッサ１２は、エントリコマンドがスライドウインドウの範囲外であるかを判定するために、エントリコマンドのコマンドカウントと、同期モジュールのアクティブウインドウマスクの長さとを比較する（１０６）。範囲外である場合（１０６のＹＥＳ分岐）、ＣＤＳプロセッサ１２は、受信したコマンドをブロックする（１１８）。ブロック状態は、エントリコマンドのための適切な同期モジュールが、エントリコマンドまでスライドウインドウを進めるために十分な数のコマンドを実行するまで継続するであろう。
【００７５】
エントリコマンドがスライドウインドウによって包含されている場合（１０６のＮＯ分岐）、ＣＤＳプロセッサ１２は、適切な同期モジュールのアクティブウインドウマスク内のエントリコマンドに対応するビット位置内のビットを読み取る。ビットが空である（すなわち、値「０」を有する）場合、アクティブウインドウマスクは、エントリコマンドが実行されたことを示す（１０８のＹＥＳ分岐）。従ってＣＤＳプロセッサ１２は、従属関係をドロップする（１２０）。
【００７６】
しかしビットが設定されている（すなわち、値「１」を有する）場合、エントリコマンドは実行されておらず、従属関係が残っている（１０８のＮＯ分岐）。ＣＤＳプロセッサ１２は、受信したコマンドのための適切な従属マスク内のエントリコマンドに対応するビットを設定する（１１０）。
【００７７】
ＣＤＳプロセッサ１２は次に、従属リストに残っているエントリがあるかを判定し、ある場合、次のエントリのためのエントリ処理を適用する（１１２のＹＥＳ分岐）。ＣＤＳプロセッサ１２が全てのエントリを処理すると（１１２のＮＯ分岐）、ＣＤＳプロセッサ１２は、従属リストエントリを分析することによって生成された従属マスクおよび受信したコマンドを、受信したコマンドに関連付けられた同期モジュールのステージングエリア内のスロットへ転送する。
【００７８】
図９は、本開示において説明された順序に反した実行技術を実現する図４のＣＤＳプロセッサ１２による典型的な順序に反した実行動作を示すフローチャートである。
【００７９】
ＣＤＳプロセッサ１２の同期モジュール３４Ａは、同期モジュール３４Ａのためのステージングエリアによって保持されたコマンドをパイプラインが完了したことを同期モジュール３４Ａに示す、関連付けられたパイプラインから通知を受信する（２００）。完了したコマンドが、同期モジュール３４Ａのためのアクティブウインドウマスク４０Ａの最下位ビット（ＬＳＢ）に対応する場合（２０２のＹＥＳ分岐）、同期モジュール３４Ａは、コマンドカウンタ３８Ａをインクリメントすることおよびアクティブウインドウマスク４０Ａを１ビット右シフトすることによって、スライドウインドウを進める（２０４）。さらに、ＣＤＳプロセッサ１２の従属マスクモジュール４４は、同期モジュール３４Ａに対応する同期モジュール３４の各々における従属マスク全てを１ビット右シフトする。
【００８０】
完了したコマンドが、同期モジュール３４Ａのためのアクティブウインドウマスク４０Ａの最下位ビット（ＬＳＢ）に対応していない場合（２０２のＮＯ分岐）、従属マスクモジュール４４は、適切な従属マスクのために、完了したコマンドに対応するビット位置内のビットをクリアする（２０６）。
【００８１】
従属マスクモジュール４４が従属マスクを管理すると、同期モジュール３４は、ステージングエリア３６によって保持される１つまたは複数のコマンドのための従属マスクが新たにクリアされたかを判定する（２０８）。クリアされていなければ、同期モジュールは、関連付けられたパイプラインからの追加のコマンド完了通知の受信を待機する（２０８のＮＯ分岐）。しかし、１つまたは複数のコマンドのための従属マスクが新たにクリアされた場合、それらのコマンドの従属関係は満たされており、コマンドは実行されうる（２０８のＹＥＳ分岐）。準備ができたコマンドのための同期モジュール３４は、コマンドを実行するために適切なパイプラインへ転送する（２１０）。この方式において、コマンドストリーム内の、先行する別の１つまたは複数のコマンドに関する従属関係より前に満足された従属関係を有するコマンドは、順序に反して、すなわち先行コマンドよりも先に実行されうる。
【００８２】
本開示において説明された技術は、汎用マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）。特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理デバイス（ＰＬＤ）、または他の同等の論理デバイスのうちの１つまたは複数において実現されうる。従って、「プロセッサ」または「コントローラ」という用語は本明細書で用いられる場合、上記構成のうちの任意の１つまたは複数、あるいは本明細書で説明された技術の実現に適切な他の任意の構成を称することができる。
【００８３】
本明細書に示された様々な構成要素は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせの任意の適切な組み合わせによって実現されうる。図面において、様々な構成要素が別々のユニットまたはモジュールとして図示されている。しかしそれらの図面を参照して説明された様々な構成要素のうちのいくつかまたは全ては、共通のハードウェア、ファームウェア、および／またはソフトウェア内の結合されたユニットまたはモジュールに統合されうる。さらに、本明細書で説明された個々のモジュール、ユニット、または構成要素は、上述した様々な特徴または機能を提供する１つまたは複数のサブモジュール、サブユニット、またはサブ構成要素として実現されうる。従って、構成要素、ユニット、またはモジュールとして特徴を表したのは、例示の簡略化のために特定の機能的特徴を強調することが意図されており、別々のハードウェア、ファームウェア、またはソフトウェアの構成要素によるそのような特徴の実現は必ずしも必要ではない。いくつかの場合、様々なユニットは、１つまたは複数のプロセッサによって実行されたプログラム可能処理として実現されうる。
【００８４】
本明細書においてモジュール、デバイス、または構成要素として説明された特徴は、統合論理デバイスによって集合的に、あるいは個別の相互運用可能な論理デバイスによって別々に実現されうる。様々な態様において、そのような構成要素は少なくとも部分的に、例えば集積回路チップまたはチップセットのような、集合的に集積回路デバイスと称されうる１つまたは複数の集積回路デバイスとして形成されうる。そのような回路は、単一の集積回路チップデバイスにおいて、あるいは複数の相互運用可能な集積回路チップデバイスにおいて提供され、様々な画像、ディスプレイ、オーディオ、あるいは他の多くのマルチメディアアプリケーションおよびデバイスにおいて用いられうる。例えばいくつかの態様において、そのような構成要素は、例えば無線通信デバイスハンドセット（例えば、モバイル電話ハンドセット）のようなモバイルデバイスの一部を形成できる。
【００８５】
ソフトウェアによって実現される場合、本技術は、１つまたは複数のプロセッサによって実行されると、上述された１つまたは複数の方法を実行する命令を有するコードを備えるコンピュータ読取可能媒体によって少なくとも部分的に実現されうる。コンピュータ読取可能媒体は、包装材料を含みうる、コンピュータプログラム製品の一部を形成できる。コンピュータ読取可能媒体は、例えば同期型ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気的消去可能プログラム可能読取専用メモリ（ＥＥＰＲＯＭ）、埋め込み式ダイナミックランダムアクセスメモリ（ｅＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、フラッシュメモリ、磁気データ記憶媒体、または光学データ記憶媒体を備えることができる。ソフトウェアは、例えば１つまたは複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、または他の同等の統合論理回路あるいはディスクリート論理回路のような１つまたは複数のプロセッサによって実行されうる。
【００８６】
本開示において様々な態様が説明された。これらの態様および他の態様は、以下の特許請求の範囲の範囲内である。
【図１】
2013535728.tif 000003
【図２】
2013535728.tif 000004
【図３】
2013535728.tif 000005
【図４】
2013535728.tif 000006
【図５】
2013535728.tif 000007
【図６】
2013535728.tif 000008
【図７】
2013535728.tif 000009
【図８】
2013535728.tif 000010
【図９】
2013535728.tif 000011
【手続補正書】
【提出日】平成25年5月29日(2013.5.29)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
【図１】図１は、マルチメディアプロセッサとコマンド割当および同期プロセッサとを含むマルチメディアデバイスの例を示すブロック図である。
【図２】図２は、本明細書で説明された原理と一致した方式でコマンドストリームの並べ替えを実現するコマンド割当および同期プロセッサを有する典型的なマルチメディアプロセッサを示すブロック図である。
【図３】図３は、複数の処理パイプラインのためのインタリーブされた命令を有するコマンドストリームのサブセットの例を示すブロック図である。
【図４】図４は、本開示と一致する典型的なコマンド割当および同期プロセッサを示すブロック図である。
【図５】図５は、特定の動作状態における、本開示と一致する典型的な同期モジュールを示すブロック図である。
【図６】図６は、未来の動作状態における、図５の同期モジュールを示すブロック図である。
【図７】図７は、タイプ特定コマンドストリームの典型的なサブセットと、タイプ特定コマンドストリームのための典型的なスライドウインドウとを示すブロック図である。
【図８】図８は、順序に反したコマンド実行を実現するコマンド割当および同期プロセッサのための典型的な動作モードを示すフローチャートである。
【図９】図９は、本開示と一致した方式で、図４の典型的なコマンド割当および同期プロセッサによる典型的な順序に反した実行動作を示すフローチャートである。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】変更
【補正の内容】
【００３７】
同期モジュール３４は、割当モジュール３０および従属マスクモジュール４４と連動して、関連付けられたコマンドタイプの各々について、本明細書で説明されたコマンド並べ替え機能を実行する。同期モジュール３４の各々は、特定のコマンドタイプに関連付けられていることにより、マルチメディアプロセッサ１０の特定のパイプラインに関連付けられている。例えば同期モジュール３４Ａは、ビデオコマンドに関連付けられることができるので、ビデオパイプライン２０（図４には示さず）にも関連付けられうる。様々な態様において、パイプラインの数によって、ＣＤＳプロセッサ１２は、より多いまたはより少ない数の同期モジュールを有することができる。図４の例において、同期モジュール３４は実質的に同様であるが、簡略化のために同期モジュール３４Ａは同期モジュール３４Ｂ−３４Ｃよりも詳細に示される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】変更
【補正の内容】
【００６４】
図５は、図４の同期モジュール３４Ａの一例をさらに詳しく、特定の動作状態について示すブロック図である。図５は、スロット４６Ａの描写を拡大し、コマンドデータ列４７、優先順位列４８、およびスロット４６Ａ１−４６Ａ４のための従属マスク列５０Ａ−５０Ｃを示し、かつスロット４６Ａ内のそれら様々な列のための可能な値の例を提供する。従属マスク列５０Ａ−５０Ｃは、図４のＣＤＳプロセッサ１２の同期モジュール３４Ａ−３４Ｃに対応する。従って、例えば従属マスク列５０Ａにおける従属マスクは、同期モジュール３４Ａによって保持されたコマンドに対応する。
【国際調査報告】
2013535728.tif 000012
2013535728.tif 000013
2013535728.tif 000014