(57)【要約】      （修正有）【課題】データ処理ハードウェアで安全目標を達成するために、チップ面積や消費電力を増加させない。【解決手段】グラフィック処理システムにおいて、グラフィック処理ユニット２００は、タスクを処理するための複数の処理ユニット２０４と、チェックユニットと、フォルト検出ユニットと、を含む。グラフィック処理ユニットが、第１および第２の処理された出力をそれぞれ生成するために、複数の処理ユニットで構成されており、チェックユニットが、それぞれ第１および第２の処理された出力の特性である、第１および第２のシグネチャを形成する。フォルト検出ユニットは、第１および第２のシグネチャを比較し、第１および第２のシグネチャが一致しない場合に、フォルト信号を発生させる。【選択図】図２
2020091868.tif 000002
【特許請求の範囲】
【請求項１】
グラフィック処理システムであって、
タスクを処理するための複数の処理ユニットであって、各処理ユニットが、前記複数の処理ユニットのいくつかのその他の処理ユニットから独立してタスクを処理するよう構成されている、複数の処理ユニットと、
タスクを処理する際に、処理ユニットの出力の特性であるシグネチャを形成するように動作可能である、チェックユニットと、
前記チェックユニットで形成されたシグネチャを比較するように動作可能である、フォルト検出ユニットと、を含み、
前記グラフィック処理システムが、第１および第２の処理された出力をそれぞれ生成するために、前記複数の処理ユニットで、第１のタイプの各タスクを、第１および第２の時間で処理するように構成されており、前記チェックユニットが、それぞれ前記第１および第２の処理された出力の特性である、第１および第２のシグネチャを形成するように構成されており、前記フォルト検出ユニットは、前記第１および第２のシグネチャを比較し、前記第１および第２のシグネチャが一致しない場合に、フォルト信号を発生させるように構成されている、グラフィック処理システム。
【請求項２】
第２のタイプの各タスクが、それぞれの単一の処理された出力を生成するように、前記複数の処理ユニットで、第１の時間でのみ処理される、請求項１に記載のグラフィック処理システム。
【請求項３】
前記第２のタイプの各タスクが、既定の安全レベルに従って処理されない非安全タスクである、請求項２に記載のグラフィック処理システム。
【請求項４】
前記チェックユニットが、前記単一の処理された出力の特性である、シグネチャを形成しないように構成されている、請求項２または３に記載のグラフィック処理システム。
【請求項５】
第２のタイプのタスクを処理するように構成された１つ以上のその他の処理ユニットをさらに含み、前記１つ以上のその他の処理ユニットが、第１の時間でのみ、前記第２のタイプの各タスクを処理するように構成されている、請求項２〜４のいずれかに記載のグラフィック処理システム。
【請求項６】
前記第１のタイプの各タスクが、既定の安全レベルに従って処理される安全タスクである、請求項１〜５のいずれかに記載のグラフィック処理システム。
【請求項７】
前記複数の処理ユニットの第１の処理ユニットが、前記第１の時間の処理時に、前記タスクを処理するように構成されており、前記複数の処理ユニットの第２の処理ユニットが、前記第２の時間の処理時に、前記第１のタスクを処理するように構成されている、請求項１〜６のいずれかに記載のグラフィック処理システム。
【請求項８】
前記グラフィック処理システムは、前記第２の処理ユニットが前記第１の処理ユニットと独立して前記タスクを受信するように構成されている、請求項７に記載のグラフィック処理システム。
【請求項９】
前記グラフィック処理システムは、前記第２の処理ユニットが前記第１の処理ユニット以外の前記複数の処理ユニットのいくつかの処理ユニットに制約されるように構成されている、請求項７または８に記載のグラフィック処理システム。
【請求項１０】
前記グラフィック処理システムは、前記第１および第２の処理ユニットが同じ処理ユニットであることが許容されるように構成されている、請求項７または８に記載のグラフィック処理システム。
【請求項１１】
前記複数の処理ユニットでの処理のために、前記第１のタイプのタスクを保持するためのキャッシュをさらに含み、前記第１のタイプのタスクは、処理ユニットが第１の時間で処理するためにそのタスクを取得する時に、前記キャッシュから削除されない、請求項１〜１０のいずれかに記載のグラフィック処理システム。
【請求項１２】
前記第１のタイプの各タスクは、前記タスクが第１の時間で処理されてないことを示す、初期状態、および前記タスクが第１の時間で処理されたことを示す、第２の状態の少なくとも２つの段階を有する識別子を含み、前記複数の処理ユニットの各処理ユニットが、第１の時間で第１のタイプのタスクを処理する際に、前記識別子を、前記初期状態から前記第２の状態に更新するように構成されている、請求項１〜１１のいずれかに記載のグラフィック処理システム。
【請求項１３】
前記複数の処理ユニットの各処理ユニットは、前記グラフィック処理システムで前記第１のタイプのタスクのキャッシュにアクセスする際に、前記処理ユニットが、第１の時間で処理された時に、そのタスクを処理しなかった場合にのみ、前記第２の状態で識別子を有する第１タイプのタスクを取得するように構成されている、請求項１２に記載のグラフィック処理システム。
【請求項１４】
前記グラフィック処理システムが、前記第１のタイプのタスクを、前記第１および第２の処理ユニットに割り当てるように構成された、割り当てユニットを含む、請求項１〜１３のいずれかに記載のグラフィック処理システム。
【請求項１５】
前記チェックユニットが、前記第１のシグネチャを前記第２のシグネチャと比較する際に、前記フォルト検出ユニットによるその後の使用のために、前記第１の処理された出力に関して形成された前記第１のシグネチャを格納するように構成されている、請求項１〜１４のいずれかに記載のグラフィック処理システム。
【請求項１６】
前記グラフィック処理システムが前記第１のタイプの各タスクに関して１つ以上の処理された出力を書き込むように構成された、データストアをさらに含み、前記グラフィック処理システムが、前記第１および第２の処理された出力のうちの１つのみを、前記データストアに書き込むように構成されている、請求項１〜１５のいずれかに記載のグラフィック処理システム。
【請求項１７】
前記チェックユニットが、前記データストアに保持されているその処理されたデータの特性である、さらなるシグネチャを生成するように、前記第１のタイプのタスクに関して前記データストアに書き込まれた処理されたデータをリードバックするように構成されており、前記フォルト検出ユニットが、前記さらなるシグネチャを、前記第１のタイプの同じタスクに関して前記チェックユニットによって生成された、前記第１および第２のシグネチャのうちの一方または両方と比較するように構成されており、前記フォルト検出ユニットは、前記さらなるシグネチャが前記第１および第２のシグネチャのうちの一方または両方と一致しない場合に、フォルト信号を発生させるように構成されている、請求項１６に記載のグラフィック処理システム。
【請求項１８】
前記複数の処理ユニット、チェックユニット、およびフォルト検出ユニットが、前記グラフィック処理システムのグラフィック処理ユニットに提供されており、
前記チェックユニットが、前記グラフィックス処理ユニットの外部の第２のチェックユニットに対して、前記第１および／または第２のシグネチャを利用可能にするように構成されており、前記第２のチェックユニットが、前記データストアに保持されているその処理されたデータのさらなるシグネチャ特性を生成するために、前記第１のタイプのタスクに関して前記グラフィック処理ユニットによって前記データストアに書き込まれた処理されたデータをリードバックするように構成されており、
前記第２のチェックユニットに提供された第２のフォルト検出ユニットが、前記第１のタイプの同じタスクに関して、前記さらなるシグネチャを、前記チェックユニットによって利用可能にされた前記第１および／または第２のシグネチャのうちの一方または両方と比較するように構成されており、前記第２のフォルト検出ユニットは、前記さらなるシグネチャが前記第１および第２のシグネチャのうちの一方または両方と一致しない場合に、フォルト信号を発生させるように構成されている、請求項１６に記載のグラフィック処理システム。
【請求項１９】
各々がいくつかのその他の処理ユニットから独立してタスクを処理するように構成された、複数の処理ユニットを有するグラフィックス処理システムでタスクを処理する方法であって、前記方法は、処理のために第１のタイプのタスクを受信する際に、
第１の処理ユニットで、第１の時間で前記タスクを処理し、かつその第１の処理ユニットの出力の第１のシグネチャ特性を形成することと、
第２の処理ユニットで、第２の時間で前記タスクを処理し、かつその第２の処理ユニットの出力の第２のシグネチャ特性を形成することと、
前記第１および第２のシグネチャを比較することと、
前記第１および第２のシグネチャが一致しない場合、フォルト信号を発生させることと、を含む、方法。
【請求項２０】
集積回路製造システムで処理される時に、請求項１〜１８のいずれかに記載のグラフィック処理システムを製造するために、前記集積回路製造システムを構成する、集積回路定義データセット。
【発明の詳細な説明】
【背景技術】
【０００１】
本開示は、グラフィック処理システム、およびグラフィック処理システムでタスクを処理する方法に関する。
【０００２】
安全重要システムでは、システムの構成要素の少なくとも一部は、システム全体がシステムに必要と見なされる安全レベルを満たすために十分な安全目標を満たす必要がある。例えば、ほとんどの管轄区域では、車両におけるシートベルトのリトラクタは、こうしたデバイスを備えた車両が安全試験を通過するために特定の安全基準を満たす必要がある。同様に、車両のタイヤは、特定の管轄区域に適切な安全試験を通過するために、そのようなタイヤを装備した車両に対して特定の基準を満たす必要がある。安全重要システムは通常、その障害により人々または環境の安全に対するリスクが大幅に増加するシステムである。
【０００３】
データ処理デバイスは、専用のハードウェアとして、または安全重要ソフトウェアを実行するためのプロセッサとしてのいずれかで、安全重要システムの一体型部分を形成することが多い。例えば、航空機向けのフライバイワイヤシステム、ドライバ支援システム、鉄道信号システム、および医療用デバイス向けの制御システムはすべて、通常、データ処理デバイス上で実行される安全重要システムである。データ処理デバイスが安全重要システムの一体型部分を形成する場合、データ処理デバイス自体は、システム全体が適切な安全レベルを満たすことができるように、安全目標を満たす必要がある。自動車業界では、安全レベルは通常、機能安全基準ＩＳＯ  ２６２６２で定義されているような自動車安全度レベル（ＡＳＩＬ）である。
【０００４】
また、安全重要システムのデータ処理デバイスは、ソフトウェアを実行するプロセッサを含む。ハードウェアおよびソフトウェア要素の両方は、特定の安全目標を満たす必要がある。ソフトウェア障害は通常、プログラミングエラーまたはエラー取扱いの不良によるシステマティックエラーである。ソフトウェアについては、安全目標は通常、厳密な開発実施、コード監査および試験プロトコルによって達成される。プロセッサなどのデータ処理デバイスのハードウェア要素については、安全目標は、所与の期間内の障害の最大数、ならびにシングルポイント障害（シングルポイント障害メカニズム、またはＳＰＦＭ）および潜在的な障害（潜在障害メカニズム、またはＬＦＭ）を検出するメカニズムの有効性などの１組のメトリクスとして表される（多くの場合、時間内障害またはＦＩＴとして表される）場合がある。システマティックエラーが安全重要システムから完全に除外される場合があっても、例えば、過渡イベントによって（例えば、電離放射線、電圧スパイク、または電磁パルスによって）、ランダムエラーがハードウェア内に導入される場合があるため、データ処理ハードウェアは、ある程度のエラーを取り扱うように設計されていることが重要である。バイナリシステムでは、過渡イベントは、メモリ内およびプロセッサのデータパス上でランダムなビットフリッピングを引き起こす可能性がある。
【０００５】
データ処理ハードウェアで安全目標を達成するための、例えば、ある構成要素で障害が発生した場合に、別の構成要素が同じタスクを実行できるように冗長性を提供し、またはチェックデータ（例えば、パリティビットまたはエラー修正コードなど）を使用して、ハードウェアがわずかなデータ破損を検出および／または修正できるようにする様々なアプローチがある。データプロセッサは、一対の同様の処理コア１０１および１０２が、命令１０３のストリームを並列に処理するように構成されている、図１に示すようなデュアルロックステップ配列１００内に提供され得る。処理コア（１０１）のうちのいずれか１つの出力は、ロックステッププロセッサの出力１０４として使用され得る。処理コア１０１および１０２の出力が一致しない場合、安全重要システムに、フォルトが発生する可能性がある。しかしながら、第２の処理コアは必要であるため、デュアルロックステッププロセッサは、必ずしも従来のプロセッサと比較して２倍のチップ面積を消費し、かつ約２倍の電力を消費する。
【０００６】
電離放射線および電圧スパイクなどの外因性因子によって誘発されるエラーの検出確率を改善するために、遅延１０５を、コアのうちの１つへの入力に導入することができる（一般に、他のコアの出力に対応する遅延１０６が提供される）。さらなるプロセッサコアをロックステッププロセッサ１００に追加することにより、エラーのない出力を提供し続けることが可能になり得、プロセッサの出力は、その処理コアのうちの２つ以上によって提供される出力であり、他のコアと一致しない処理コアの出力は、無視される。しかしながら、これは、プロセッサの面積および電力消費量をさらに増加させる。
【０００７】
高度なドライバ支援システムおよび自律車両は、重要なグラフィックおよび／またはベクトル処理能力を有するこのような安全重要用途に適したデータ処理システムを組み込むことができるが、デュアルロックステッププロセッサを実施するための面積および電力消費量の増加（したがってコスト）は、許容されないか、または望ましくない場合がある。例えば、ドライバ支援システムは多くの場合、危険、車線位置、およびその他の情報をドライバに示す、コンピュータ生成グラフィックを提供する。典型的には、これにより、車両製造業者は、従来型の機器クラスタをコンピュータ生成機器クラスタと置き換えることになり、これは、速度および車両故障情報などの安全重要情報の表示がコンピュータ生成されることも意味する。このような処理需要は、グラフィック処理ユニット（ＧＰＵ）によって満たされ得る。しかしながら、自動車のコンテキストでは、高度なドライバ支援システムは通常、ＩＳＯ  ２６２６２のＡＳＩＬレベルＢを満たすデータ処理システムを必要とする。
【０００８】
自律車両はさらに、安全重要決定を毎秒何百回も行うために、リアルタイムで非常に大量のデータ（例えば、ＲＡＤＡＲ、ＬＩＤＡＲ、マップデータおよび車両情報）を処理する必要がある。グラフィック処理ユニットはまた、こうした処理要求を満たすことができるが、自律車両における安全重要システムは通常、ＩＳＯ  ２６２６２の最も厳格なＡＳＩＬレベルＤを満たすために必要である。
【発明の概要】
【０００９】
この概要は、詳細な説明で以下にさらに説明されている概念の選択を紹介するために提供されている。この概要は、主張される主題の要所特徴または必須特徴を特定することを意図しておらず、主張される主題の範囲を制限するために使用されることを意図していない。
【００１０】
タスクを処理するための複数の処理ユニットであって、各処理ユニットが、複数の処理ユニットのいくつかのその他の処理ユニットから独立してタスクを処理するよう構成されている、複数の処理ユニットと、タスクを処理する際に、処理ユニットの出力の特性であるシグネチャを形成するように動作可能である、チェックユニットと、チェックユニットで形成されたシグネチャを比較するように動作可能である、フォルト検出ユニットと、を含み、グラフィック処理システムが、第１および第２の処理された出力をそれぞれ生成するために、複数の処理ユニットで、第１のタイプの各タスクを、第１および第２の時間で処理するように構成されており、チェックユニットが、それぞれ第１および第２の処理された出力の特性である、第１および第２のシグネチャを形成するように構成されており、フォルト検出ユニットは、第１および第２のシグネチャを比較し、第１および第２のシグネチャが一致しない場合に、フォルト信号を発生させるように構成されている、グラフィック処理システムが提供される。
【００１１】
複数の処理ユニットの第１の処理ユニットは、第１の時間の処理時に、タスクを処理するように構成されてもよく、複数の処理ユニットの第２の処理ユニットは、第２の時間の処理時に、第１のタスクを処理するように構成されている。
【００１２】
第２の処理ユニットは、第１の処理ユニットと独立してタスクを受信してもよい。
【００１３】
グラフィック処理システムは、第２の処理ユニットが第１の処理ユニット以外の複数の処理ユニットのいくつかの処理ユニットに制約されるように構成され得る。
【００１４】
グラフィック処理システムは、第１および第２の処理ユニットが同じ処理ユニットであることが許容されるように構成され得る。
【００１５】
グラフィック処理システムは、複数の処理ユニットでの処理のために、第１のタイプのタスクを保持するためのキャッシュをさらに含んでもよく、第１のタイプのタスクは、処理ユニットが第１の時間で処理するためにそのタスクを取得する時に、キャッシュから削除されない。
【００１６】
第１のタイプの各タスクは、タスクが第１の時間で処理されてないことを示す、初期状態、およびタスクが第１の時間で処理されたことを示す、第２の状態の少なくとも２つの段階を有する識別子を含み得る。
【００１７】
複数の処理ユニットの各処理ユニットは、第１の時間で第１のタイプのタスクを処理する際に、識別子を、初期状態から第２の状態に更新するように構成され得る。
【００１８】
複数の処理ユニットの各処理ユニットは、グラフィック処理システムで第１のタイプのタスクのキャッシュにアクセスする際に、処理ユニットが、第１の時間で処理された時に、そのタスクを処理しなかった場合にのみ、第２の状態で識別子を有する第１タイプのタスクを取得するように構成され得る。
【００１９】
グラフィック処理システムは、第１のタイプのタスクを、第１および第２の処理ユニットに割り当てるように構成された、割り当てユニットを含み得る。
【００２０】
複数の処理ユニットは、３つ以上の処理ユニットを含んでいてもよい。
【００２１】
チェックユニットは、第１のシグネチャを第２のシグネチャと比較する際に、フォルト検出ユニットによるその後の使用のために、第１の処理された出力に関して形成された第１のシグネチャを格納するように構成され得る。
【００２２】
第１のタイプの各タスクは、既定の安全レベルに従って処理される安全タスクであってもよい。
【００２３】
第２のタイプの各タスクは、それぞれの単一の処理された出力を生成するように、複数の処理ユニットで、第１の時間でのみ処理され得る。
【００２４】
第２のタイプの各タスクは、既定の安全レベルに従って処理されない非安全タスクであり得る。
【００２５】
チェックユニットは、単一の処理された出力の特性である、シグネチャを形成しないように構成されてもよい。
【００２６】
グラフィック処理システムは、第２のタイプのタスクを処理するように構成された１つ以上のその他の処理ユニットをさらに含んでもよく、１つ以上のその他の処理ユニットは、第１の時間でのみ、第２のタイプの各タスクを処理するように構成されている。
【００２７】
グラフィック処理システムは、グラフィック処理システムが第１のタイプの各タスクに関して１つ以上の処理された出力を書き込むように構成された、データストアをさらに含んでもよい。
【００２８】
グラフィック処理システムは、第１および第２の処理された出力のうちの１つのみを、データストアに書き込むように構成され得る。
【００２９】
チェックユニットは、データストアに保持されているその処理されたデータの特性である、さらなるシグネチャを生成するように、第１のタイプのタスクに関してデータストアに書き込まれた処理されたデータをリードバックするように構成されてもよく、フォルト検出ユニットは、さらなるシグネチャを、第１のタイプの同じタスクに関してチェックユニットによって生成された、第１および第２のシグネチャのうちの一方または両方と比較するように構成されており、フォルト検出ユニットは、さらなるシグネチャが第１および第２のシグネチャのうちの一方または両方と一致しない場合に、フォルト信号を発生させるように構成されている。
【００３０】
複数の処理ユニット、チェックユニット、およびフォルト検出ユニットは、グラフィック処理システムのグラフィック処理ユニットに提供されてもよく、
チェックユニットは、グラフィックス処理ユニットの外部の第２のチェックユニットに対して、第１および／または第２のシグネチャを利用可能にするように構成されてもよく、第２のチェックユニットは、データストアに保持されているその処理されたデータのさらなるシグネチャ特性を生成するために、第１のタイプのタスクに関してグラフィック処理ユニットによってデータストアに書き込まれた処理されたデータをリードバックするように構成されており、
第２のチェックユニットに提供された第２のフォルト検出ユニットは、第１のタイプの同じタスクに関して、さらなるシグネチャを、チェックユニットによって利用可能にされた第１および／または第２のシグネチャのうちの一方または両方と比較するように構成されてもよく、第２のフォルト検出ユニットは、さらなるシグネチャが第１および第２のシグネチャのうちの一方または両方と一致しない場合に、フォルト信号を発生させるように構成されている。
【００３１】
データストアは、グラフィック処理システムのグラフィック処理ユニットの外部に置かれた１つ以上のメモリ、および／またはグラフィック処理システムのグラフィック処理ユニットに、もしくはその外部に置かれた１つ以上のキャッシュを含み得る。
【００３２】
チェックユニットは、処理されたデータ上のチェックサム、ＣＲＣ、ハッシュ、および指紋のうちの１つ以上を実行することにより、複数の処理ユニットのうちの１つの処理ユニットから処理された出力の各シグネチャ特性を形成するように構成され得る。
【００３３】
処理されたデータは、それぞれの処理されたタスクと関連付けられた１つ以上のメモリアドレスを含み得る。
【００３４】
第１のタイプの各タスクは、タイルに関連してもよく、グラフィック処理システムは、タイルベースのグラフィックレンダリングを実行するように構成されている。
【００３５】
フォルト信号は、制御メッセージ、フラグ、割込み、１つ以上のレジスタビットを設定するための信号、データパケット、およびデータストアにデータを書き込むための信号のうちの１つ以上を含んでもよい。
【００３６】
各々がいくつかのその他の処理ユニットから独立してタスクを処理するように構成された、複数の処理ユニットを有するグラフィックス処理システムでタスクを処理する方法が提供され、方法は、処理のために第１のタイプのタスクを受信する際に、第１の処理ユニットで、第１の時間でタスクを処理し、かつその第１の処理ユニットの出力の第１のシグネチャ特性を形成することと、第２の処理ユニットで、第２の時間でタスクを処理し、かつその第２の処理ユニットの出力の第２のシグネチャ特性を形成することと、第１および第２のシグネチャを比較することと、第１および第２のシグネチャが一致しない場合、フォルト信号を発生させることと、を含む。
【００３７】
グラフィック処理システムは、集積回路上のハードウェア内に具体化され得る。集積回路製造システムで、グラフィック処理システムを製造する方法が、提供されてもよい。集積回路製造システムで処理される時に、グラフィック処理システムを製造するシステムを構成する、集積回路定義データセットが提供されてもよい。非一時的コンピュータ可読記憶媒体であって、集積回路外部に対して、集積回路製造システムにグラフィック処理システムを製造させるように、集積回路のコンピュータ可読記述がその上に格納された、非一時的コンピュータ可読記憶媒体が提供されてもよい。
【００３８】
非一時的コンピュータ可読記憶媒体であって、グラフィックス処理システムを記述するコンピュータ可読集積回路記述がその上に格納された、非一時的コンピュータ可読記憶媒体と、グラフィック処理システムを具体化する集積回路の回路レイアウト記述を生成するために、集積回路記述を処理するように構成された、レイアウト処理システムと、回路レイアウト記述に従って、グラフィックス処理システムを製造するように構成された、集積回路生成システムと、を含む、集積回路製造システムが提供されてもよい。
【００３９】
本明細書に記載の方法を実行するためのコンピュータプログラムコードが提供されてもよい。非一時的コンピュータ可読記憶媒体であって、コンピュータシステムで実施された時に、コンピュータシステムに、本明細書に記載の方法を実行させるように、その上に格納されたコンピュータ可読命令を有する、非一時的コンピュータ可読記憶媒体が提供されてもよい。
【図面の簡単な説明】
【００４０】
本発明は、添付図面を参照しながら実施例として説明される。図面において：
【図１】は、従来のデュアルロックステッププロセッサを示す。
【図２】は、本明細書に記載の原理に従って構成された、グラフィック処理システムを示す。
【図３】は、本明細書に記載の原理に従って構成された、グラフィック処理システムを含むデータ処理システムを示す。
【図４】は、第１の実施例によるグラフィック処理システムの動作を示した概略図である。
【図５】は、第２の実施例によるグラフィック処理システムの動作を示した概略図である。
【図６】は、第３の実施例によるグラフィック処理システムの動作を示した概略図である。
【図７】は、第４の実施例によるグラフィック処理システムの動作を示した概略図である。
【図８】は、本明細書に記載の原理に従って構成された、グラフィック処理システムの動作を示すフローチャートである。
【図９】は、第５の実施例によるグラフィック処理システムの動作を示した概略図である。
【図１０】は、集積回路製造システムの概略図である。
【図１１】は、本明細書に記載の原理に従って構成されたグラフィック処理システムの動作を示すフローチャートである。
【発明を実施するための形態】
【００４１】
以下の説明は、当業者が本発明を作製および使用することを可能にするために実施例として提示されている。本発明は、本明細書に記載される実施形態に限定されず、開示された実施形態に対する様々な修正は、当業者にとって明らかであろう。実施形態は、実施例としてのみ記述される。
【００４２】
本開示は、複数のタスクを並列に処理するよう動作可能な複数の処理ユニットを含む、グラフィック処理システムに関する。本明細書の原理に従って構成されるグラフィック処理システムは、任意の適切なアーキテクチャを有してもよく、例えば、システムは、即時モードレンダリングもしくはタイルベースのレンダリング（タイルベースの延期レンダリングを含む）、ならびに／または任意の種類のグラフィック、画像もしくはビデオ処理、および／もしくは一般的な処理を実行するように動作可能であることができる。実施例において、グラフィック処理システムの処理ユニットは、異なる処理ユニットが所与の時点で異なるアクションのセットを実行できるように、および／または所与の処理ユニットが異なる時間で異なるアクションのセットを実行できるように構成可能であてもよい。各処理ユニットは、任意の他の処理ユニットとは独立してタスクを処理できる場合がある。したがって、１つの処理ユニットで処理されたタスクは、そのタスクを処理するために別の処理ユニットと協働しない場合がある（例えば、個別のタスクは、複数の処理ユニットで並行して処理されていないが、個別のタスクを単一の処理ユニットで並行して処理され得る）。
【００４３】
処理ユニットは、例えば、任意の種類のグラフィカルおよび／またはベクタおよび／またはストリーム処理ユニットであり得る。処理ユニットは、レンダリングパイプラインを含んでもよい。各処理ユニットは、ＧＰＵの異なる物理コアであってもよい。グラフィック処理システムは、一般的な計算タスク、特に、簡単に並列化できるものに適用され得る。一般的な計算用途の実施例には、信号処理、音声処理、コンピュータビジョン、物理的シミュレーション、統計的計算、ニューラルネットワーク、および暗号化が含まれる。
【００４４】
タスクは、メモリまたは表示画面にレンダリングするためのシーンのすべてもしくは一部、画像もしくはビデオフレームのすべてもしくは一部、または任意のその他のデータを含む、グラフィックス処理ユニットで処理するための作業の任意の部分であり得る。グラフィカル処理用途のためのタスクは、タイリング、ジオメトリ計算、テクスチャマッピング、シェーディング、アンチエイリアシング、レイトレーシング、ピクセル化、およびテッセレーションを含む、グラフィック処理の任意の態様に関連し得る。タイル化されたレンダラでは、各タスクは、タイルに関連し得る。より一般的には、タスクは、グラフィカルデータの処理に関連する必要はない。例えば、タスクは、グラフィック処理システムの処理ユニットがベクタデータなどの処理を行うように構成され得る、任意の種類のデータであってもよい。グラフィック処理システムは、複数の異なるタイプのタスクで動作するように構成され得る。一部のアーキテクチャでは、異なる処理ユニットまたは処理ユニットのグループは、異なるタイプのタスクを処理するために割り当てられてもよい。
【００４５】
図２は、図２に示される本明細書に記載の原理に従って構成されたグラフィック処理システムを示す。グラフィック処理ユニット（ＧＰＵ）２００は、グラフィック処理システムの部分である。ＧＰＵ２００は、ＰＵ０〜ＰＵ（ｎ）として図においてラベル付けされた複数の処理ユニット２０４を含む。ＧＰＵ２００は、メモリ２０１からデータ２０２を受信するように構成された１つ以上のキャッシュおよび／またはバッファ２０６を含み、処理されたデータ２０３をメモリ２０１に提供することができる。メモリ２０１は、任意の適切な様式で配設された１つ以上のデータストレージユニットを含んでいてもよい。典型的に、メモリ２０１は、ＧＰＵ、フレームバッファ、およびＧＰＵがサポートされているコンピュータシステムのシステムメモリに専用のメモリのうちの１つ以上を含むことになる。一部の実施例では、メモリ２０１の少なくとも一部は、グラフィック処理システムの部分を形成すると考えられ得る。
【００４６】
ＧＰＵ２００の様々なユニットは、１つ以上のデータバスおよび／または相互接続部２０５を通じて通信してもよい。ＧＰＵは、ファームウェア２０７を含んでもよく、例えば、ＧＰＵのユニットの低レベル制御を提供する。
【００４７】
ＧＰＵの処理ユニット２０４の各々は、複数の処理ユニットが各々、同時にそれぞれのタスクを実行できるように、処理ユニットが配設されている状態で、タスクを処理するように動作可能である。このようにして、ＧＰＵは、複数のタスクを同時に処理することができる。各タスクは、ＧＰＵで、例えば、メモリ２０１から受信したデータの一部分を処理するように配設される。各処理ユニットは、所与の処理ユニットが異なる処理アクションの範囲を実行するように構成されることを可能にするように、複数の構成可能な機能要素（例えば、シェーダ、ジオメトリプロセッサ、ベクタプロセッサ、ラスタライザ、テクスチャユニットなど）を含んでもよい。処理ユニットは、タスクのためにデータ部分に対し一連のアクションを実行することによって、タスクを処理してもよい。１組のアクションは、所与のタスクに適したものとして定義されてもよく、例えば、タスクがフレームのそれぞれのタイルに関連し、各タイルが複数のプリミティブを含むシステムでは、１組の処理アクションは、ジオメトリ処理、シェーディング、テクスチャ加工などを含んでもよい。処理ユニットは、処理ユニットが異なる組の処理アクションを実行できるように、処理ユニットの機能的要素を有効／無効にするように、適切な指令をファームウェア２０７に渡すために、例えば、ＧＰＵのソフトウェアドライバによって構成されてもよい。このようにして、処理ユニットの第１の組は、例えば、シーン（例えば、タイル）のコンピュータ生成画像の部分を表すグラフィカルタスク上でシェーダ処理を実行するように構成されてもよく、一方で処理ユニットの別の組は、例えば、車両センサから受信したセンサデータのベクトル処理を実行するように構成されてもよい。
【００４８】
タスクの処理において、処理ユニット２０４は、そのタスクに関して出力データを生成する。ＧＰＵ２００は、処理ユニットから出力データを受信し、かつその出力データの特性であるシグネチャを形成するように動作可能なチェックユニット２０８を含む。チェックユニットは、例えば、出力データ上のチェックサム、ハッシュ、ＣＲＣ、または指紋計算を実行してもよい。チェックユニットは、タスクを処理する処理ユニット上で生成された少なくともデータに対して動作する。チェックユニットはさらに、生成されたデータと関連付けられたメモリアドレスおよび／または制御データ上で動作することが好ましく、これによって本明細書に記載の検証動作は、より広い範囲のフォルトを識別するのに役立ち得る。シグネチャは、異なる処理ユニットによって提供される出力データの比較を容易にするように、出力データ自体よりもコンパクトな形態で、処理ユニットによってタスクに実行される処理の発現を提供する。チェックユニットは、タスクに関して処理ユニットから受信された出力データ（制御データを含まないもの）のすべてにわたりシグネチャを形成することが好ましいが、シグネチャは、タスクに関して処理ユニットから受信した出力データの一部（例えば、全くない）にわたり形成され得る。チェックユニット２０８は、データバス／相互接続部２０５上の処理ユニットから出力データを受信してもよい。
【００４９】
チェックユニット２０８は、チェックユニットで形成された１つ以上のシグネチャを格納するためのデータストア２０９を含んでもよい。別の方法としてまたは追加的に、チェックユニットは、チェックユニットで形成された１つ以上のシグネチャを格納するために、チェックユニットの（例えば、ＧＰＵ２００のメモリの）外部のデータストアを使用し得る。チェックユニットは、ＧＰＵの処理ユニットのすべてまたはサブセットから出力データを受信してもよい。チェックユニットは、複数のチェックユニットインスタンスを含んでもよく、例えば、各チェックユニットインスタンスは、ＧＰＵの処理ユニットの異なるサブセットから出力データを受信するように構成されてもよい。
【００５０】
ＧＰＵ２００は、チェックユニット２０８で形成された２つ以上のシグネチャを比較するように構成されたフォルト検出ユニット２１０をさらに含む。フォルト検出ユニット２１０は、シグネチャが一致していないという決定に基づいて、フォルト信号２１１を発生させるように構成されている。フォルトにより、ＧＰＵでの安全違反につながる可能性がある。フォルト信号は、ＧＰＵ２００の出力として任意の適切な手法で提供され得る。例えば、フォルト信号は、制御データ、割込み、メモリ２０１に記述されたデータ、およびＧＰＵが接続されているＧＰＵ２００のレジスタまたはメモリに書き込まれたデータのうちの１つ以上であってもよい。
【００５１】
フォルト検出ユニット２１０は、同じタスクを処理するように配設された異なる処理ユニット２０４から出力データのシグネチャを比較するためのものである。２つ以上の処理ユニットは、同じタスクを処理するように配設されてもよく、処理ユニットによって実行される処理は、同時に実行されてもよく、または同時に実行されなくてもよい。２つの処理ユニットのみが同じタスクを処理するように配設されている場合、処理ユニットからの出力データのシグネチャ特性を比較することは、処理ユニットの対によって実行される処理が一致しているかどうかを示す。所定のタスクに関して一対の処理ユニットのシグネチャが一致しない場合、フォルト信号２１１は、ペアの処理ユニットのうちの１つでフォルトが発生したことを示すが、フォルト信号は、どのユニットがフォルトを経験したかを示さない。
【００５２】
３つ以上の処理ユニットのグループが同じタスクを処理するように配設されている場合、それらの処理ユニットからの出力データのシグネチャ特性を比較することは、処理ユニットによって実行される処理が一致しているかどうかを示す。所定のタスクに関する処理ユニットのグループの各々のシグネチャが一致しない場合、フォルト信号２１１は、グループの処理ユニットのうちの１つでフォルトが発生したことを示し、グループの処理ユニットのうちのどちらか１つで、フォルトが発生したことをさらに示すことができる。これは、シグネチャが２つ以上の他の処理ユニットからの出力のシグネチャと一致しない処理ユニットで、フォルトが発生したと仮定することができるためである。
【００５３】
通常、ＧＰＵ２００は、図３のデータ処理システム３００などのデータ処理システムに組み込まれるであろう。こうしたデータ処理システムは、中央処理ユニット（ＣＰＵ）３０４およびメモリ２０１などの他のプロセッサを含んでもよい。ハードウェア３０２は、プロセッサ２００、３０４およびメモリ２０１が通信し得る、１つ以上のデータバスおよび／または相互接続部３０８を含み得る。一般に、ソフトウェア環境３０１は、複数のプロセス３０７が実施され得るデータ処理システムに提供される。オペレーティングシステム３０６は、使用可能なハードウェア３０２のプロセス３０７への抽象化を提供してもよい。オペレーティングシステムは、ＧＰＵの機能をプロセスに露出させるために、ＧＰＵ用のドライバ３０９を含み得る。ソフトウェア環境３０１のすべてまたは部分は、ファームウェアとして提供されてもよい。一実施例では、データ処理システム３００は、車両制御システムの部分を形成し、プロセスは各々、例えば、機器クラスタ表示、エンタテインメントシステム、エンジン管理、気候制御、車線制御、操縦補正、自動ブレーキシステムなどの車両の１つ以上の制御機能を実行する。プロセス３０７のうちの１つ以上は、安全重要なプロセスであってもよい。プロセスは、既定の安全レベルに従って実施されなければならない安全重要プロセスと、既定の安全レベルに従って実施する必要がない非安全重要プロセスとの混合であってもよい。
【００５４】
フォルト信号は、ＧＰＵが組み込まれるデータ処理システム３００によって任意の様式で使用され得る。例えば、フォルト検出ユニットによって発生されるフォルト信号では、ＧＰＵが組み込まれているシステムは、対象タスクに関連して形成された出力データを破棄し得、および／または再処理のためにタスクをＧＰＵに再提出することができる。本明細書に記載の原理に従って構成されたグラフィック処理システムは、ＧＰＵのソフトウェアドライバ３０９などのＧＰＵに加えて、その他の要素を含み得る。グラフィック処理システム自体は、フォルト信号２１１を使用し得る。例えば、グラフィック処理システムは、フォルト信号およびそれらのフォルトが関連付けられている処理ユニットをログに記録することがあり、１つ以上の処理ユニットが既定のフォルトの数を超えた（おそらく定義された期間内に）場合に、それらの１つ以上の処理ユニットは、無効にされ、または他にはＧＰＵで受信したタスクの処理を防止され得る。
【００５５】
図２に示すようなグラフィック処理システムは、既定の安全レベルを満たすようにタスクを処理するよう動作可能である。例えば、グラフィック処理システムは、ＩＳＯ  ２６２６２のＡＳＩＬ  ＢまたはＡＳＩＬ  Ｄ基準を満たすように認証されてもよい。既定の安全レベルへの処理を必要とするタスクは、グラフィック処理システムが組み込まれ得るデータ処理システム３００の安全重要な機能に関連するタスクであってもよい。例えば、自動車用途では、安全重要であるタスクは、機器クラスタのレンダリングに関するタスク、および／または車線支援システムで使用するための１つ以上の車両カメラによってキャプチャされたデータの画像処理であり得る。
【００５６】
一部の実施例では、ＧＰＵは、タイル化されたレンダリングを実行し、その処理ユニットが動作するタスクの各々は、タイルに関連する。
【００５７】
作業負荷の繰り返し
ここで、図２のグラフィック処理システムの動作が、図４に示す第１の実施例および図８に示すフローチャートに関して説明される。図４は、２つの概略図（ａ）および（ｂ）を含み、それらは、安全重要機能に関連する処理タスク上のＧＰＵ２００の動作を示す。図４（ａ）では、複数の処理ユニット２０４の一対の処理ユニット４０５および４０６は、タスク４０７の作業負荷からの処理のためのタスクを受信するように配置される。通常、ＧＰＵは、３つ以上の処理ユニットを有する。作業負荷４０７は、例えば、キャッシュ２０６でのタスク４１０のバッファであってもよい。明確にするために、図では、作業負荷４０７は、キャッシュとは別個に概略的に示されているが、キャッシュ、ならびに／またはＧＰＵのその他のデータストア（処理ユニット自体を含む）および／もしくはＧＰＵの外部（例えば、外部メモリ２０１における）のデータストアにおいてサポートされてもよい。処理７０１のために受信した各タスクは、既定の安全レベルに従って処理される安全タスクであってもよい。
【００５８】
各タスク４１０は、処理のために処理ユニットで受信される。これは、任意の適切な様式で達成されてもよく、また概して、ＧＰＵは、任意の種類のアーキテクチャを有してもよく、タスクを処理ユニットに割り当てるためのいくつかのスキームを利用することができる。図４に示した実施例において、デマルチプレクサ４０２が、タスクを処理ユニット４０５および４０６に割り当てることを概略的に示す。デマルチプレクサ４０２は、処理ユニット間のタスクの分布を概略的に表し、処理ユニットに対してタスクを明示的に割り当てるためのユニットの存在を暗示しない。例えば、各処理ユニット２０４は、作業負荷４０７からタスクを要求またはその他の方法で受信するように構成されてもよい。処理ユニットは、処理ユニットがそのタスクの処理を開始することができるようなるのに従って、およびその時に、作業負荷４０７から１つ以上のタスクを取得するように構成されてもよい。デマルチプレクサ４０２は、タスクを処理ユニットに割り当てるための任意の種類の割り当てユニットであり得る。デマルチプレクサは、作業負荷のタスクを特定の処理ユニットで処理するものとしてマーキングまたは他には識別することにより、タスクを処理ユニットに割り当てることができ、例えば、デマルチプレクサは、処理ユニットがそのタスクを取得するその処理ユニットの入力バッファにタスクを割り当てることにより、タスクを処理ユニットに割り当てることが可能になる。
【００５９】
各タスクは、複数の処理ユニットの任意の処理ユニットで処理されてもよい。図４には、２つの処理ユニット４０５および４０６のみが示されているが、一般的には、より多くのものが存在するであろう。本明細書に記載の手法でのタスクの処理に利用できる複数の処理ユニットは、グラフィック処理システムでの処理ユニットの総数のサブセットであってもよい。
【００６０】
仲裁ユニット４０１は、ＧＰＵ（例えば、データバスおよび／または相互接続部２０５）の周りのデータの通信を仲裁するために提供され得る。仲裁ユニットは、外部メモリ２０１（随意に、キャッシュ２０６を介して）から、処理ユニットで処理するための作業負荷４０７に受信されたタスクを方向付けるように構成されてもよい。仲裁ユニットは、処理ユニットによって処理されたデータ出力を、外部メモリ２０６に（随意に、キャッシュ２０６を介して）、およびチェックユニット２０８に方向付けるように構成されてもよい。
【００６１】
チェックユニット２０８は、各処理ユニット２０４によって出力データを受信し、かつその出力データの特性であるシグネチャを形成するように構成されている。処理ユニットで処理されるタスクでは、その処理ユニットのそれぞれの出力のシグネチャは、データストア２０９でチェックユニットによって格納され得る。例えば、図４（ａ）を参照して、処理ユニット４０５で処理されるタスクＴ０について、処理ユニット４０５の出力のシグネチャ４０３を、データストア２０９に格納してもよい。
【００６２】
必要な安全レベルを満たすために、ＧＰＵは、作業負荷４０７の安全タスクのすべてを、少なくとも２回、第１の処理ユニットで第１の時間７０２および第２の処理ユニットで第２の時間７０４で処理するように構成されている。説明されるように、第１および第２の処理ユニットは、特定の実装形態に応じて、同一の処理ユニットであってもよく、またはそれでなくてもよい。タスクの各処理インスタンスは、パスと呼ばれている。所与のタスクの各パスは、１つ以上の他のパスと同時に処理されてもよく、または処理されなくてもよい。タスク処理の繰り返しを図４（ｂ）に図示するが、繰り返し作業負荷４０８のタスクは、処理ユニット４０５および４０６で処理される。一般的に、タスクは、複数のユニットの任意の処理ユニットで第１の時間で処理され、複数のユニットの任意の処理ユニットで第２の（またはさらなる）時間で処理され得る。これは、処理負荷を効率的に広げ、かつアイドル処理ユニットを回避するように、タスク（最初のパスまたはさらなるパスかどうかによらず）を動的に処理ユニットに割り当てることができるという利点を有する。繰り返し作業負荷は、概略的であり、ＧＰＵでその処理を繰り返すタスクのセットを表す。
【００６３】
一部の実施例では、繰り返し作業負荷４０８のタスクの少なくとも一部は、外部メモリからの第２の時間について読み取られず、作業負荷４０７のタスクは、処理ユニットにタスクを第２の時間で処理させることによって再使用される。これにより、帯域幅および浪費電力を消費する外部メモリから不要な読み取りが回避される。しかしながら、これは、処理パス間の分離の消費となり得る。一部の実施例では、タスクは、タスクの各プロセスパスのメモリから独立して読み取られてもよい。これは、ＧＰＵでキャッシュされたデータのデータ破損に対する保護を助け得る。
【００６４】
図４に示す実施例では、処理ユニット４０５および４０６は、作業負荷４０７または４０８から任意のタスクを受信することが可能である。より一般的に、複数の処理ユニットのいずれかは、作業負荷の任意のタスクを受信することができる場合がある。図４（ａ）において、第１の時間で作業負荷のタスクを処理する際に、処理ユニット４０５は、タスクＴ０およびＴ１を受信しており、処理ユニット４０６は、タスクＴ２およびＴ３を受信することが分かる。タスクがどちらの処理ユニットでも受け取られる場合があるため、図４（ｂ）に示されるように、作業負荷が繰り返される場合、処理ユニット４０５は、期せずしてタスクＴ１およびＴ２を受信し、処理ユニット４０６は、タスクＴ０およびＴ３を受信する。したがって、タスクＴ０およびＴ２は、各処理ユニットで１回処理されるが、タスクＴ１およびＴ３は、同一の処理ユニットで２回処理される。
【００６５】
図４（ａ）に示す第１のパスで処理されたタスクの各々に関して、シグネチャ４０３は、チェックユニット２０８で形成される７０３。シグネチャ４０３は、データストア２０９に格納されてもよい。図４（ｂ）に示す第２のパスで処理されるタスクにおいて、シグネチャ４０４は、第２のパスで処理されたタスクの各々に関して、チェックユニット２０８で形成される７０５。シグネチャ４０４は、データストア２０９に格納されてもよい。フォルト検出ユニット２１０は、タスクの第１および第２の処理パスに関連して形成されたシグネチャ４０３および４０４を、比較するように構成されている７０６。シグネチャが一致しない場合７０８、その際フォルト信号２１１を発生させる。シグネチャが一致する場合７０９、その際そのタスクに関してグラフィック処理システムで生成された処理されたタスクデータは、有効と見なされ、適用に適した様式で使用され得る（例えば、自動車のコンテキストでは、処理されたタスクデータは、機器コンソールへの出力用のグラフィカルデータを表す場合がある）。シグネチャが一致する場合、その際フォルト信号は生成されなくてもよく、または一部の実施例では、シグネチャが一致していることを示す信号が生成されてもよい。一致しないシグネチャは、２つのパスからの処理された出力が同じではなく、したがって処理ユニット（複数可）の一方または両方からの処理された出力が無効であることを示す。同じタスクを処理するように構成された処理ユニット（複数可）の出力は、電離放射線もしくは電圧スパイクなどの過渡イベント、またはハードウェア、ソフトウェアおよびファームウェアの一部の組み合わせのバグによる恒久的なエラーなどに起因して異なり得る。
【００６６】
フォルト信号は、例えば、制御メッセージ、割込み、制御データのフラグのうちの１つ以上、レジスタで設定された１つ以上のビット、およびデータパケットを含む、フォルトが発生した任意の種類の表示であってもよい。
【００６７】
図４に示す実施例では、作業負荷は、時間内に連続的に処理される（すなわち、作業負荷４０７のタスクが処理されてから、作業負荷４０８のタスクが処理される）ように示されている。一般に、タスクの処理は、異なる処理ユニットで同時に同じタスクを処理することによること、タスクが複数回処理されるようにするために、作業負荷に同じタスクの複数のコピーを含めることによること、同じ／別の処理ユニットでさらに処理できるように保つために、処理ユニットに割り当てられたタスクを作業負荷に保持させることによること、を含む、１つ以上の異なる方法で繰り返され得る。
【００６８】
作業負荷の各タスクは、処理ユニットを通したタスクの各パスに関して、チェックユニット２０８で形成されるシグネチャで３回以上処理されてもよい。これにより、処理パスのうちの１つが破損している場合でも、ＧＰＵが有効な出力を提供し続けることを可能にできる。プロセッサの出力は、特定のタスクを処理する処理コアの大部分によって提供されてもよく、他のコアと一致しない処理コアの出力は、無視される。しかしながら、これは、プロセッサの面積、電力消費およびレイテンシを増やし得る。
【００６９】
グラフィック処理システムは、各タスクに関して処理ユニット（複数可）で生成された処理された出力のうちの１つ以上を、外部メモリ２０１に書き出すように構成され得る。消費されたメモリ帯域幅を最小化するために、処理された出力のうちの１つのみを外部メモリに提供することが有利であり得る。タスクを処理するための第１の処理ユニットの出力は、それぞれのシグネチャがチェックユニットで形成されると、外部メモリに書き出され７１０、さらなる処理ユニットの出力は破棄され得る。このことは、ＧＰＵが置かれたデータ処理システムに対して、処理されたタスクを早く利用できるという利点を有することができる。フォルト検出ユニットが、外部メモリに（または外部メモリへの書き込みのためにキャッシュ内に）書き出された処理されたタスクが無効であると決定した場合、グラフィック処理システムは、処理されたタスクを破棄および／または無効としてマークするように構成され得る。タスクを処理するための最後の処理ユニットの出力は、外部メモリに書き出され、以前の処理ユニットの出力は破棄され得る。これにより、最後の処理ユニットの出力が既知であると、すべてのシグネチャがフォルト検出ユニットでの比較に利用できるという利点を有することができる。これにより、無効なデータを書き出すことによって、不必要に消費されるメモリ帯域幅を避けることができる。一般に、所与のタスクを処理するように配設された処理ユニットからの出力のすべてまたは１つ以上は、メモリ２０１に書き出され得る。
【００７０】
本明細書に記載の原理に従って構成されたグラフィック処理システムは、（ａ）安全重要機能に関連するタスクである安全性タスク、および（ｂ）安全重要機能に関連しない、したがって繰り返し処理を必要としない通常のタスクの両方を処理するように動作可能であり得る。この配設は、システムの各処理ユニットが、任意の他の処理ユニットとは独立して任意の所与のタスクを処理するように割り当てられて、異なるタスクを処理するために異なる処理ユニットが許容され得るので、本明細書に記載のグラフィック処理システムで実行可能である。さらに、特定のタスクの各インスタンスは、システムの処理ユニットに独立して割り当てられてもよい。安全タスクおよび通常のタスクの両方は、システムの異なる処理ユニットで同時に処理され得る。グラフィック処理システムでの処理のために受信された通常のタスク７１５は、従来的な方法で処理ユニットで処理され７１６、通常のタスクを割り当てられた処理ユニットからの処理された出力をチェックすることなく、メモリに書き出され得る７１７。
【００７１】
本明細書に記載されるグラフィック処理システムは、従来のロックステッププロセッサに対して重大な利点を提供し、ここにおいて、ロックステッププロセッサの処理コアの両方は、そのタスクが安全重要機能に関連していなかったとしても同じタスクを両方とも処理する必要がある。ロックステッププロセッサは、その２つの（または複数の）コアが一緒にロックされ、個別に利用されることができず、処理されたすべてのタスクに対して柔軟性のない１００％のチップ面積コストをもたらすという問題に悩まされている。
【００７２】
グラフィック処理システムのアーキテクチャに応じて、フラグを用いて、安全タスクを識別することができる。例えば、ＧＰＵが提供されるデータ処理システムによってグラフィック処理システムに提出されたタスクは、グラフィック処理システムが本明細書に記載の原理に従ってそれらのタスクの処理を繰り返すように、フラグでマークされ得る。当然のことながら、安全タスクは、例えば、レジスタ、リスト、またはどのタスクが安全タスクであるかを識別するその他のデータセットによって、多くの異なる方法で識別され得る。タスクは、特定の識別子を割り当てて、それらを明瞭に識別できるようにすることができる。
【００７３】
一部の実施例では、安全タスクとして識別されたタスクの受信に基づいて、デマルチプレクサ４０２は、それに応答して、それらのユニットで処理するための複数の処理ユニットにタスクを割り当てることができる。安全タスクに関連する処理されたデータを識別する上で、仲裁ユニット４０１は、それに応答して、処理されたデータに関してシグネチャを生成するように、処理されたデータをチェックユニットに送るように構成されてもよい。仲裁ユニットは、安全タスクに関してプロセスユニットからの出力のうちの１つ以上を、（例えば、その／それらの出力をキャッシュ２０６に書き込むことによって）メモリ２０１に書き出すことを行わせるように構成されてもよい。安全タスクを識別するフラグは、そのタスクに関して処理ユニットによって処理されたデータ出力に渡されてもよい（または別のフラグが、このような処理データに関して提供されてもよい）。
【００７４】
通常のタスクは、ＧＰＵがこれらのタスクを処理する際に既定の安全レベルを満たす必要がないため、繰り返し処理を必要としない。こうした通常のタスクは、処理のための単一の処理ユニットに割り当てられてもよく、その処理ユニットからの処理されたデータ出力は、メモリに書き出される。それは、シグネチャが処理された通常のタスクについて形成されない場合に有利である。これにより、ＧＰＵでの不必要な電力消費を回避することができる。一部の実施例では、１つ以上の処理ユニットの異なるサブセットは、通常のタスクを処理するために割り当てられてもよく、処理ユニットのサブセットは、通常のタスクを処理するために排他的に使用されてもよく、複数のプロセスユニットの他の処理ユニットは、安全タスクを処理するために排他的に使用されてもよい。これは、同じ処理ユニットで実行される通常のタスクによって引き起こされるエラー、データ破損およびセキュリティ問題から安全タスクを分離するのに役立ち得る。
【００７５】
グラフィック処理システムの任意の処理ユニットで実行されるべきタスクの繰り返し処理を可能にすることで、過渡イベントに対する保護が提供される。しかしながら、処理ユニットは、所与のタスクを処理する度毎に処理ユニットに無効な出力を提供させ得る、恒久的フォルトを引き起こす可能性がある。図４に図示したアプローチでは、タスクの処理は、同じ処理ユニットで繰り返されてもよく、したがってこのアプローチは、恒久的フォルトを検出しない場合がある。
【００７６】
異なる処理ユニットでの作業負荷の繰り返し
ＧＰＵの安全性の特性を改善するために、各安全タスクが２つ以上の異なる処理ユニットで処理されることを確実にすることが有利であり得る。このアプローチは、図８に再び示されるアプローチのための例示的なフローチャートを用いて、図５に示す実施例に図示されている。図５に示すシステムは、上述の図４に示すシステムと同様に動作するが、図５に示すシステムでは、図５（ａ）に示される第１のパスで処理ユニット４０５に割り当てられる安全タスクは、図５（ｂ）に示される第２のパスで処理ユニット４０６に割り当てられ、その逆もまた可であることが確実にされる。例えば、タスクＴ０およびＴ２は、第１のパスでは処理ユニット４０５で処理されるが、第２のパスでは処理ユニット４０６で処理され、タスクＴ１およびＴ３は、第１のパスでは処理ユニット４０６で処理されるが、第２のパスでは処理ユニット４０５で処理される。
【００７７】
チェックユニット２０８は、各安全タスクに関する各処理ユニットからの出力の特性であるシグネチャを形成するように、上述したように構成されている。フォルト検出ユニット２１０は、同じタスクを処理する、かつそれらのシグネチャが一致しない場合にフォルト検出信号２１１を発生させるように配設された異なる処理ユニットからの出力の２つ以上のシグネチャ（タスクの処理が繰り返される回数に応じる）特性を比較するように、上述したように構成されている。
【００７８】
一部の実施例では、グラフィック処理システムは、複数の３つ以上の処理ユニットを含むことになる。一般に、所与の安全タスクは、複数の処理ユニットの任意の２つ以上の異なる処理ユニットで処理されてもよい。これは、任意の適切な手法で達成され得る。例えば、タスクの第１のインスタンスは、処理ユニットのうちのいずれかに割り当てられ、タスクの第２のインスタンスは、タスクの第１のインスタンスが割り当てられた処理ユニット以外のいずれかの処理ユニットに割り当てられ得る。タスクのさらなるインスタンス（例えば、３倍以上の安全タスクを処理するよう構成されたシステムにおける）は、例えば、タスクのさらなるインスタンスが、タスクがすでに処理されていないいくつかの処理ユニットに割り当てられている状態で、同じ手法で取り扱われてもよい。こうした割り当ては、例えば、図５におけるデマルチプレクサ４０２によって実行され得る。以前に処理していない任意の利用可能な処理ユニットに、タスクを動的に割り当てることを可能にすることにより、グラフィック処理システムの処理ユニットを効率的に利用することができる。
【００７９】
どの処理ユニットが以前に割り当てられているかを知るために、ログ（例えば、ルックアップテーブル）が、グラフィック処理システムで（例えば、デマルチプレクサ４０２にアクセス可能なデータストアに）維持され、各タスクがどの処理ユニットに割り当てられているかを識別し得る。各タスクは、各タスクがログ内で一意的に参照され得るように、識別子を含み得る。各タスクは、タスクがプロセスユニットに以前に割り当てられているかどうか、および／またはタスクが処理ユニットに以前に割り当てられた回数を示す識別子（例えば、フラグ）を含んでもよい。例えば、各タスクは最初に、タスクが処理ユニットに割り当てられておらず、かつ第１のパス処理の対象であることを示す、フラグセット（例えば、制御ストリーム内の状態ビット）を有し得る。第１のパスの処理ユニットに割り当てられる際に、タスクがその第２のパスでの処理に利用できることを示すために、フラグは、作業負荷で（例えば、キャッシュで）保持されたタスクでクリアされ得る。
【００８０】
タスクを処理ユニットに、第２またはその後のパスで割り当てる際に、タスクが割り当てられた処理ユニット（複数可）を識別するログを参照することができる。これに応じて、タスクは、任意のその他の処理ユニットに割り当てられ得る。ログにおけるタスクのルックアップは、タスクが以前に割り当てられていることを示すフラグに応答していてもよく、または応答していなくてもよい。一部の実施例では、タスクが以前に割り当てられた処理ユニット（複数可）の識別子は、作業負荷（例えば、キャッシュ２０６）を保持するデータストアにおけるタスクに書き込まれてもよく、または別のやり方では、それと関連付けられてもよい。これにより、タスクにある処理ユニット（複数可）が以前に割り当てられていることを識別するために、ログを個別にルックアップする必要性を回避することができる。
【００８１】
一部の実施例では、処理ユニットへのタスクの割り当ては、処理ユニット自体によって実行される。例えば、各処理ユニットは、処理ユニットで処理能力が利用可能になるのに従って、およびその時に（例えば、処理ユニットがタスクをそのパイプライン内に受容することができるとき）に、作業負荷から（例えば、キャッシュ２０６で）作業を要求し、または別のやり方では、それを取得することができる。各処理ユニットは、タスクが処理ユニットで以前に処理されているかどうかを決定するために、本明細書に記載のアプローチのうちのいずれかを実行してもよい。例えば、処理ユニットは、タスクが以前に処理されているかどうかを決定するために、作業負荷における次の利用可能なタスクでフラグを読み取ってもよい。フラグが、タスクが以前に処理されたことを示す場合、処理ユニットは、タスクを処理したかどうかを決定し（例えば、ログ内へのルックアップによって）、タスクを処理していた場合、そのタスクをスキップして、処理を行わず、タスクを処理していなかった場合、処理ユニットは、タスクの処理に進む。
【００８２】
一部の実施例では、作業負荷のタスクは、各処理ユニットの入力バッファ内に少なくとも論理的に配設されてもよい。第１の処理ユニットに割り当てられるとき、グラフィック処理システム（例えば、デマルチプレクサ４０２）は、異なる処理ユニットのために、タスクを入力バッファに追加するように構成され得る。このアプローチは、処理ユニットがそのタスクを以前に処理したかどうかをチェックする必要があるその時点で、各処理ユニットが、グラフィックス処理システムを使用せずに、そのそれぞれの入力バッファ内のタスクを処理できるようにする。
【００８３】
一部の実施例では、処理ユニットは、そのグループの処理ユニットに割り当てられる作業負荷の所与のタスクで、２つ以上の処理ユニットのグループに論理的に配設されてもよい。異なるタスクは、初期段階および繰り返し処理のための処理ユニットの異なるグループに割り当てられ得る。例えば、グループは、一対の処理ユニットを含んでもよく、グラフィック処理システムは、安全タスクを２回処理するように構成されてもよく、所与のタスクは、初期段階および繰り返し処理のためにその対の処理ユニットに割り当てられてもよい。図５に示す実施例では、例えば、デマルチプレクサ４０２は、作業負荷の各タスクを、対の処理ユニット４０５および４０６に割り当てるように構成され得る。各処理ユニットは、その後、順を追って（例えば、その現在のタスクの処理が完了したら）そのタスクを処理してもよい。一部の実施例では、作業負荷のタスクは、番号付けされてもよく、タスクは、それらの数に基づいて処理ユニットに割り当てられる。例えば、図５に示す実施例では、第１のパスにおいて、偶数の番号が付けられたタスクが、処理ユニット４０５に割り当てられてもよく、奇数の番号が付けられたタスクが、処理ユニット４０６に割り当てられてもよく、第２のパスでタスクの処理を繰り返すと、割り当てが逆になり、偶数の番号が付けられたタスクが、処理ユニット４０６に割り当てられ、奇数の番号が付けられたタスクが、処理ユニット４０５に割り当てられてもよい。グラフィック処理システムは、処理ユニットの複数のグループを含んでもよく、各々は、タスクの異なる作業負荷を処理するように配設される。
【００８４】
処理ユニットにタスクを割り当てることは、処理ユニットで処理するために、タスクのキューにタスクを追加することを含み得る。
【００８５】
図５に関連して本明細書に記載されるアプローチは、少なくとも２つの異なる処理ユニットが各安全タスクを処理することを保証するという利点を有する。これにより、所与のタスクの処理が同じ処理ユニットで繰り返される可能性が回避されるため、処理ユニットでの恒久的なフォルトだけでなく、過度イベントを検出することが可能になる。
【００８６】
リードバックでの作業負荷繰り返し
図４および図５に関して本明細書に記載したアプローチは、フォルトをグラフィック処理システムの処理ユニットで検出することを可能にする一方で、処理ユニット後のデータ経路上のハードウェアにわたる保護を提供しない。例えば、キャッシュ２０６またはメモリ２０１で導入されたフォルトは、識別されない。エラー修正コード（ＥＣＣ）などのデータ修正メカニズムは、単一ビットのフリッピングなどのキャッシュおよびメモリの軽微なエラーから復旧するいくつかの能力を提供することができる。パリティビットなどのエラー検出メカニズムは、キャッシュおよび／またはメモリで用いられ得る。しかしながら、このようなメカニズムは、データをカバーするが、ＧＰＵに／から通信されるメッセージを制御しない。
【００８７】
（例えば、ＧＰＵがサポートされているデータ処理システムで実施されるプロセスにおける使用のために）処理されたタスクデータが書き込まれる１つ以上のキャッシュおよび／またはメモリに続くデータ経路上の処理されたタスクデータのチェックを実行することが有利であり得る。これにより、（例えば、ＧＰＵを含むデータ処理システムで）使用できる処理されたタスクデータが、処理ユニットで生成された同じ有効な処理データであることを確実にするのを助けるために、キャッシュおよび／またはメモリの内容物の検証が可能になる。
【００８８】
キャッシュおよびメモリをチェックするための配設の一実施例を図６に概略的に示し、図８に示すフローチャートを参照して再び説明する。図６（ａ）および図６（ｂ）において、タスクの第１および第２の処理パスは、図５（ａ）および図５（ｂ）に関連して記述したものと同じ様式で実行されるように示されている。タスクの第１および第２の処理パスは、図４（ａ）および図４（ｂ）に関連して記述したものと同じ様式で実行され得る。より一般的には、タスクの処理およびＧＰＵの処理ユニットからの出力のチェックは、本明細書に記載の原理のいずれかに従って実行され得る。
【００８９】
図６（ｃ）は、メモリ２０１に書き出された処理されたタスクデータで実行されるリードバックチェックを概略的に示している。図において、メモリ２０１に書き出された７１０処理されたタスクデータは、メモリ２０１からキャッシュ内２０６にリードバックされる６０５、７１１。一般に、各安全タスクに関する処理されたタスクデータは、チェックユニット２０８にアクセス可能な任意のデータストアにリードバックされてもよく、またはチェックユニット２０８に直接的にストリーミングされてもよい。メモリ２０１からキャッシュ２０６にリードバックされた処理されたタスクデータは、処理されたタスクデータの特性であるシグネチャ６０３を形成する７１２ために、チェックユニット２０８によって動作される。チェックユニットは、各タスクに関して、処理ユニット４０５および４０６の出力について形成されたシグネチャ４０３、４０４の一方または両方を、データストア２０９に格納する７１３ように構成されている。メモリからリードバックされた処理されたタスクデータのシグネチャを形成するように構成されたチェックユニット２０８のインスタンスは、処理ユニットを通したタスクの各パスにシグネチャを形成するように構成されたチェックユニット２０８のインスタンスと異なるインスタンスであってもよい。一部の実施例では、ＧＰＵのサイズを最小化するために、同じチェックユニットインスタンスが使用される。他の実施例では、システムのフォルト検出能力を最大化するために、異なるチェックユニットインスタンスが使用される。
【００９０】
一般に、チェックユニットは、そのタスクを処理するように配設された処理ユニットの出力のシグネチャのうちの１つ以上を、各安全タスクについて格納するように構成され得る。安全タスクを処理するために配設された処理ユニットからの出力のシグネチャ特性が一致する場合、重複データを不必要に格納することを避けるために、シグネチャのうちの１つのみが保存される場合がある。安全タスクを処理するために配設された処理ユニットからの出力のシグネチャ特性が一致しない場合、シグネチャは、格納されなくてもよい。例えば、シグネチャが一致しない場合、シグネチャは破棄されてもよく、また処理されたタスクデータは破棄されてもよい。これにより、無効な処理されたタスクデータを不必要に書き出すことにおけるメモリ帯域幅の消費が回避される。
【００９１】
図６（ｃ）に示す実施例では、フォルト検出ユニット２１０は、メモリからリードバックされた処理されたタスクデータに関して形成されたシグネチャ６０３と、処理ユニットから出力された点におけるその処理されたタスクデータの格納されたシグネチャ４０３／４０４特性とを比較する７１４ように構成されている。特定のタスクに対応する処理されたデータは、任意の適切な様式で識別され得る。例えば、各タスクは、識別子と関連付けられてもよく、その同一の識別子は、処理ユニットによって出力された各処理されたタスクと関連付けられてもよい。同一の識別子は、その同一のタスクに関して処理されたタスクについて形成された各シグネチャと関連付けられてもよい。このようにして、タスク、処理されたタスク、およびシグネチャは、グラフィック処理システムで容易に識別され得る。他の実施例では、タスク、処理されたタスク、およびそれらのシグネチャは、２つ以上の異なる識別子の任意の組み合わせを使用してもよく、タスク、それらのタスクについて処理されたタスクデータ、および処理されたタスクについてのシグネチャ間の対応を識別する、データ構造体（例えば、ルックアップテーブル）を提供してもよい。
【００９２】
シグネチャ６０３および４０３／４０４が一致しない場合７０８、フォルト検出ユニット２１０は、フォルト信号６０４を発生させるように構成されている。フォルト信号６０４は、図４および図５を参照しながら本明細書に記載のフォルト信号２１１の特性のいずれかを有してもよい。フォルト信号６０４は、フォルト信号２１１とは異なっていてもよく、または異なっていなくてもよい。フォルト信号６０４は、特定のタスクに関連して発生してもよく、例えば、フォルト信号は、フォルトがどのタスクに関連しているかを識別し得る。ＧＰＵ２００が提供されるデータ処理システムは、用途に適切な任意の手法でフォルト信号を使用し得る。例えば、タスクに関連してフォルト信号を受信すると、データ処理システムは、タスクに関連するすべての処理されたデータを、メモリ２０１および／またはキャッシュ２０６からフラッシュさせることができる。データ処理システムは、タスクをプロセッサに再提出させることができる。このような再提出されたタスクは、ＧＰＵで可能な限り処理されるように、高優先度を割り振ることができる。
【００９３】
一部の実施例では、メモリのフォルトチェックは、ＧＰＵの外側で実行されてもよく、チェックユニット２０８は、ＧＰＵがサポートされているシステムに対して処理されたタスクに関して生成するシグネチャの少なくとも一部を利用可能にするように構成されてもよい。例えば、図７は、フォルトチェックがソフトウェアで実行される配設を示している。図７に示すシステムでは、本明細書に記載の原理のいずれかによると、第１および第２のパスは、図６に示すシステムのように実行され得る。図７（ｂ）はさらに、ソフトウェアのフォルトチェックが実行され得る方法を示している。ソフトウェアチェックユニット６０１は、メモリ２０１から処理されたタスクデータをリードバック６０５、７１１し、かつその処理されたデータのシグネチャ６０３特性を形成する７１２ように構成されている。ソフトウェアチェックユニット６０１は、チェックユニット２０８と同じチェック計算を実行し、それにより、それが発生させたシグネチャと、チェックユニット２０８で形成されたシグネチャとの比較を可能にするように構成されている。
【００９４】
チェックユニット２０８は、処理ユニット２０４での第１および第２のパスで処理されたタスクに関して形成された、データストア２０９に格納されたシグネチャを利用できる６０６ように構成されている。例えば、チェックユニットは、メモリ２０１にシグネチャを書き出すことができる。所与のタスクに関連して形成されたシグネチャは、フォルト検出ユニットが、異なるパス時にそのタスクを処理するように構成された処理ユニット（複数可）から出力が一致すると決定することに応答して、メモリに書き出され得る。所与のタスクに関して形成されたシグネチャは、処理されたデータ自体とともにメモリに書き出され得る。一般的に、グラフィック処理システムは、各安全タスクに関して、そのタスクの処理に基づく処理ユニット（複数可）の出力（複数可）のチェックユニットによって形成されたシグネチャのうちの少なくとも１つを利用できる７１３ように構成されている。シグネチャは、任意の適切な手法（例えば、メモリに書き出されたシグネチャのうちの１つ以上によって、ソフトウェアからアクセス可能なＧＰＵでデータストアにシグネチャを格納すること、ＧＰＵの外部のデータストアにシグネチャを書き込むこと）で利用可能になり得る。
【００９５】
ソフトウェアフォルト検出ユニット６０２は、チェックユニット２０８が利用できるシグネチャ（複数可）（例えば、４０３、４０４）のうちの１つ以上を、ソフトウェアチェックユニット６０１によって形成されたシグネチャ６０３と比較する７１４ように構成されている。シグネチャが一致しない場合７０８、処理ユニットの出力とキャッシュ２０６およびメモリ２０１を含むメモリの出力との間のデータ経路上の一部の点でのデータ破損を示す、フォルト信号６０４が発生する。フォルト信号６０４は、図４、図５および図６を参照しながら本明細書に記載のフォルト信号２１１の特性のいずれかを有してもよい。
【００９６】
ソフトウェアチェックユニット６０１は、例えば、ＧＰＵがサポートされるデータ処理システムのソフトウェア環境（例えば、図３のデータ処理システム３００でのソフトウェア環境３０１）、および／またはＧＰＵ自体によって提供されるソフトウェア環境を含む、任意の適切なソフトウェア環境でサポートされ得る。ソフトウェアチェックユニットは、例えば、ＧＰＵ（例えば、図３の３０９）のドライバ、オペレーティングシステム（例えば、図３の３０６）、およびプロセス（例えば、図３の３０７）のうちの１つ以上において提供され得る。ソフトウェアチェックユニット６０１は、ソフトウェアおよび／またはファームウェアの任意の組み合わせで提供され得る。
【００９７】
一般に、メモリから読み取られた処理されたタスクデータのシグネチャを形成するように構成されたチェックユニット、および／または所与のタスクに関してＧＰＵで生成された対応するシグネチャとそのシグネチャを比較するフォルト検出ユニットは、グラフィック処理システムのどこにでも（例えばＧＰＵまたはＧＰＵがサポートされているデータ処理システムに）置かれ得る。例えば、チェックユニットおよび／またはフォルト検出ユニットは、データ処理システムでのハードウェア内に提供されてもよく、メモリ２０１から処理されたタスクデータおよびＧＰＵからのシグネチャを受信するように配設されてもよい。
【００９８】
処理されたタスクデータをメモリからリードバックするように配設することは、メモリ帯域幅を消費することになるが、追加的に、メモリ、およびＧＰＵからメモリへのデータ経路上のいくつかの先行するキャッシュでフォルトを検出できるようにすることによって、グラフィックス処理システムがより高い安全レベルを達成できるようにする。
【００９９】
非対称アプローチ
上述の通り、一部の実施例では、ＧＰＵを通した安全タスクの第１のパスで生成された処理されたタスクデータは、メモリ２０１に書き出され、その第１のパスのこの処理されたタスクデータは、そのそれぞれのシグネチャ６０３の形成のために、チェックユニット（例えば、チェックユニット２０８またはソフトウェアチェックユニット６０１）にリードバックされる。第１のパスで生成された処理されたタスクデータは、一般的には最初に利用できるため、これによって、メモリに保持されている処理されたタスクデータについて、できるだけ早くシグネチャを利用できるようになる。ＧＰＵを通したタスクの第２の処理パスは、第１のパスからの処理されたタスクデータがメモリに書き出される時間、および／または第１のパスからの処理されたタスクデータがメモリからリードバックされる時間、および／またはシグネチャが第１のパスからの処理されたタスクデータについて形成される時間と部分的に重複していてもよい。
【０１００】
さらに、グラフィック処理システムは、そのデータがメモリに書き出される前に、第１のパスからの処理されたタスクデータに関してシグネチャを形成しないように構成されてもよい。これは図９に図示され、図１１のフローチャートで示されている。グラフィック処理システム９０１での処理のために、安全タスクが受信される。処理ユニットで安全タスク９０２の第１のパスを実行する（例えば、タスクＴ０が図９（ａ）の処理ユニット４０５で処理される）と、チェックユニット２０８は、その時点でそのタスクに関してその処理ユニットによって出力された処理されたデータについてのシグネチャを形成しないように配設される。その代わりに、第１のパスからの処理されたタスクデータは、キャッシュ２０６を介してメモリ２０１に書き出される９０３。タスクが、ＧＰＵで第２の時間で処理された９０６（例えば、タスクＴ０が、図９（ｂ）における処理ユニット４０６で、第２のパスにおいて処理された）とき、図２〜図７に関して本明細書で説明された原理のいずれかに従って、シグネチャ４０４が、チェックユニット２０８で生成される９０７。以降のパスからのシグネチャ４０４は、データストア２０９で格納されてもよい９０８。シグネチャはまだ第１のパスに関して利用できない場合があるため、図９（ｂ）には実行中の比較は示されておらず、フォルト信号は発生していない。
【０１０１】
ＧＰＵとメモリとの間で消費された帯域幅を最小化するために、第２のパスについて処理されたタスクデータは、メモリに書き出されなくてもよい。第２のパスのシグネチャは、第２のパスの処理されたタスクデータがキャッシュに書き込まれる前に形成され得る。一部の実施例では、必要なキャッシュのサイズを最小化するために、第２のパスについての処理されたタスクデータがキャッシュに書き込まれていない場合、それ（キャッシュへの第２のパスについての処理されたタスクデータの書き込み）は、処理されたデータをメモリに書き出さない場合には不要となり得る。
【０１０２】
第１のパスからの処理されたタスクデータは、実行されるべきさらなるチェックのためにメモリからリードバックされる９０４。このプロセスは、図９（ｃ）に図示されており、ここにおいて、処理されたタスクデータは、チェックユニット２０８で形成される９０５ようにシグネチャのためにリードバックされている６０５。図９（ｃ）に示す実施例では、処理されたデータは、キャッシュ２０６にリードバックされるが、一般的にそのリードバックは、ＧＰＵの任意のデータストアに対するものであってもよく、および／またはＧＰＵのデータストアへの処理されたデータの非一時的ストレージなしで、チェックユニット２０８にストリーミングされてもよい。チェックユニット２０８は、リードバック処理されたタスクデータを第１のパスから受信し、そのデータの特性であるシグネチャ６０３を生成するように構成されている。処理されたタスクデータは、チェックユニットでの受信の前にメモリ２０１に書き出され、リードバックされるため、シグネチャ６０３は、第１のパスを実行する処理ユニットでのタスクの処理で発生するフォルトだけでなく、メモリ２０１、キャッシュ２０６において、およびそれらのデータストアへの／からのデータパスに沿って（例えば、ＧＰＵ２００とメモリ２０１との間の相互接続部を介して）発生するフォルトをキャプチャする。
【０１０３】
フォルト検出ユニット２１０は、ＧＰＵを通るタスクの第２のパスのシグネチャ４０４特性と、ＧＰＵを通り、かつメモリ２０１に格納されるようなタスクの第１のパスのシグネチャ６０３特性とを比較するように構成されている９０９。２つのシグネチャが一致しない場合９１１、フォルト検出ユニット２１０は、フォルト信号６０４を発生させ得る。２つの処理ユニットの出力が異なっていた場合、ならびに／またはキャッシュおよび／もしくはメモリで、もしくはそれらの間でデータ破損が発生した場合、シグネチャは一致していない。したがって、フォルト信号６０４は、ＧＰＵの処理ユニットならびにキャッシュおよび／またはメモリの両方におけるフォルトの代表物である。２つのシグネチャが一致する場合９１２、第１のパスで生成され、メモリ２０１で利用可能な処理されたタスクデータは、有効であると見なされ、用途に適した様式で使用され得る（例えば、自動車のコンテキストにおいて、処理されたタスクデータは、機器コンソールに書き込むためのグラフィックデータを表し得る）。
【０１０４】
図９（ｃ）に示す実施例では、メモリ２０１からリードバックされた処理されたデータのフォルトチェックは、ＧＰＵで実行される。他の実施例では、メモリのフォルトチェックは、ＧＰＵの外部のさらなるチェックユニットで実行されてもよく、チェックユニット２０８は、第２のパスからの処理されたデータに関して形成されたシグネチャを、そのさらなるチェックユニットに利用可能にするように構成されてもよい。メモリから処理されたデータのリードバックを受信するためのチェックユニットは、図６および図７に関して本明細書で説明した方法のいずれかに従って配設されてもよい。例えば、ソフトウェアチェックユニットは、図７に示す様式で提供されてもよく、ＧＰＵ２００は、第２のパスからのシグネチャ４０４を、ソフトウェアチェックユニットに提供するよう構成されてもよく、ここにおいて、ソフトウェアチェックユニットは、第２のパスからのシグネチャがメモリからの第１のパスのリードバックの処理されたデータのシグネチャと一致しない場合、フォルト信号６０４を発生させるように構成されている。フォルトチェックがＧＰＵの外部で実行される場合、ＧＰＵは、フォルト検出ユニット２１０を含まない場合があり、フォルト信号を発生させない場合がある。図９のデータストア２０９は概略的であり、ＧＰＵは、チェックユニット２０８で生成されたシグネチャを保持するためのデータストアを含まない場合があることに留意されたい。例えば、チェックユニットは、ＧＰＵで処理されたタスクの各第２のパスに関して生成されるシグネチャを、メモリに書き出すように構成されてもよい。
【０１０５】
それぞれの処理ユニットからの出力にわたる第２のパスでシグネチャを形成する一方で、それぞれの処理ユニットからの出力、およびその出力が書き込まれるメモリにわたる第１のパスのシグネチャを形成する非対称アプローチは、いくつかの利点を有する。まず、処理ユニットおよびメモリの両方でフォルトをキャプチャするために、２つのシグネチャのみを形成する必要がある。これにより、ＧＰＵ（および潜在的に他のシステム）で必要な処理が低減され、ＧＰＵの電力消費量が低減され、チェックユニットで形成されたシグネチャを格納するためにＧＰＵで必要なデータストレージのサイズが減少される。第２に、非対称アプローチは、ＧＰＵからの第１の処理された出力のみをメモリに書き出す必要があるため、メモリ書き込み帯域幅を最小化し、第２のパスからメモリにデータを書き出す必要がない。第３に、非対称アプローチは、第１のパスからの処理された出力が、第１および第２のパスのシグネチャを比較し、第１のパスの出力を有効にするために、第２のパスの結果を待つことなく利用可能になるとすぐにメモリに書き出され得るため、フォルト信号が利用可能になるまでの時間を最小化する。
【０１０６】
簡潔に言えば、非対称アプローチにより、処理、消費電力、およびチップ面積に関して、最小のコストで最大のチップ面積（処理ユニット＋キャッシュ＋メモリ）をカバーすることが可能になる。
【０１０７】
図６、図７および図９に示す実施例では、処理されたタスクデータは、メモリからリードバックされる。一部の実施例では、処理されたタスクデータは、キャッシュのフォルトを検出するように、キャッシュからリードバックされてもよい。これは、メモリから処理されたタスクデータをリードバックすることの代わりに、またはそれに加えられてもよい。メモリからではなくキャッシュからリードバックすると、メモリの保護は提供されないが、ＧＰＵとメモリとの間の帯域幅の消費を回避できるという利点を有することができる。キャッシュからの読み取りを最小化するために、処理されたタスクデータは、メモリ２０１およびチェックユニット２０８の両方が処理されたタスクデータを受信するように、キャッシュ２０６からメモリ２０１に読み出されることに基づいて、チェックユニット２０８に向けられ得る。
【０１０８】
処理ユニットによる処理されたタスクデータ出力が、メモリおよび／またはキャッシュから読み出された同じ処理されたタスクデータであることをチェックすることによって、データフォルトに対するより大きな度合いの保護が提供され得る。これにより、より高い安全レベルが達成できるようになり得る。自動車のコンテキストで使用される場合、本明細書に記載の原理に従って構成されたグラフィック処理システムは、少なくともＡＳＩＬレベルＢを達成することができる。本明細書で教示したグラフィック処理システムを、従来的なエラー回復およびフォルト検出機構と組み合わせることにより、ＡＳＩＬレベルＤを達成することができる。例えば、メモリ２０１および／またはキャッシュ２０６は、軽微なエラーからの回復を可能にし、過渡イベントに対するグラフィック処理システムのロバスト性を改善する、ＥＣＣメモリであり得る。
【０１０９】
本明細書に記載の原理に従って構成されたグラフィック処理システムは、安全重要機能に関連する安全タスクおよび安全重要機能に関連しない通常のタスクの両方を処理するように構成され得る。各タスクおよびタスクの各インスタンスは、（処理ユニットを同じタスクに再使用してはならないといういくつかの制約を受ける）任意の他のタスクまたはタスクのインスタンスから独立してシステムの処理ユニットに割り当てられ得るため、グラフィック処理システムは、必要な安全レベルに従う安全タスクを冗長に処理する一方で、その安全レベルに適合せずに、単一のパスで通常のタスクを処理する場合がある。一部の実施例では、グラフィック処理システムの処理ユニットのサブセットは、安全タスクおよび通常のタスクが異なる処理ユニットで処理されるように、安全タスクを処理するために予約されている。本明細書に記載される利点は、安全タスクおよび通常のタスクがプロセッサの異なるセットに処理されるように構成されているかどうかに従う。少なくとも２回割り当てられたすべてのタスクを処理するように結合されたロックステッププロセッサと比較して、このアプローチにより、電力消費量が低減され、オンチップのデータ帯域幅が低減され、安全コアが必ずしも必要でない場合に専用の安全コアを提供するためにチップ面積の浪費を避けるため、所与の処理性能を提供するために必要なＧＰＵのサイズが減少される。
【０１１０】
図２〜図７、図９および図１０のグラフィック処理システムおよびデータ処理システムは、多数の機能ブロックを含むとして示されている。これは概略的のみであり、そのようなエンティティの異なるロジック要素間の厳密な区分を定義することを意図していない。各機能ブロックは、任意の適切な様式で提供され得る。グラフィック処理システムによって形成されるものとして本明細書で説明される中間値は、任意の点でグラフィック処理システムによって物理的に生成される必要はなく、その入力と出力との間でグラフィックス処理システムによって実行される処理を好都合に説明する論理値を単に表し得ることが理解されよう。
【０１１１】
本明細書に記載のグラフィック処理ユニットは、集積回路上のハードウェア内に具体化され得る。本明細書に記載のグラフィック処理システムは、本明細書に記載の方法のいずれかを実行するように構成され得る。
【０１１２】
コンピュータプログラムコードおよびコンピュータ可読命令という用語は、本明細書で使用される場合、機械言語、解釈言語、またはスクリプト言語で表現されたコードを含む、プロセッサのあらゆる種類の実行可能コードを指す。実行可能コードには、バイナリコード、マシンコード、バイトコード、集積回路を定義するコード（ハードウェア記述言語またはネットリストなど）、およびＣ、Ｊａｖａ、またはＯｐｅｎＣＬなどのプログラミング言語コードで表現されたコードが含まれる。実行可能コードは、例えば、仮想マシンまたはその他のソフトウェア環境で適切に実行、処理、解釈、コンパイル、実行された時に、実行可能コードがサポートされているコンピュータシステムのプロセッサに、コードで指定されたタスクを実行させる、任意の種類のソフトウェア、ファームウェア、スクリプト、モジュール、またはライブラリであってもよい。コンピュータ可読記憶媒体の実施例には、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、光ディスク、フラッシュメモリ、ハードディスクメモリ、ならびに磁気、光学、およびその他の技術を使用して、命令またはその他のデータを保存し、マシンからアクセスすることができるその他のメモリデバイスが含まれる。
【０１１３】
プロセッサ、コンピュータ、またはコンピュータシステムは、命令を実行することができるように、処理能力を有する任意の種類のデバイス、機械もしくは専用回路、またはその収集もしくは部分であってもよい。プロセッサは、例えば、ＣＰＵ、ＧＰＵ、ベクタプロセッサ、テンソルプロセッサ、システムオンチップ、ステートマシン、メディアプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックアレイ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの任意の種類の汎用プロセッサまたは専用プロセッサであり得る。コンピュータまたはコンピュータシステムは、１つ以上のプロセッサを含んでもよい。
【０１１４】
また、所望の機能を実行するために、集積回路を設計する、またはプログラム可能なチップを構成するために使用されるように、ＨＤＬ（ハードウェア記述言語）ソフトウェアなどの、本明細書で説明したようなハードウェアの構成を定義するソフトウェアを含むことが意図されている。すなわち、集積回路製造システムで処理されると、システムを構成して、本明細書に記載の方法のいずれかを実行するように構成されたグラフィックス処理ユニットを製造するか、または本明細書に記載のいくつかの装置を含むグラフィックス処理ユニットを製造する、集積回路定義データセットの形態でコンピュータ可読プログラムコードがその上にエンコードされたコンピュータ可読記憶媒体が提供されてもよい。集積回路定義データセットは、例えば、集積回路の記述であってもよい。
【０１１５】
集積回路製造システムで、本明細書に記載のグラフィック処理ユニットを製造する方法が、提供されてもよい。集積回路製造システムで処理される時に、グラフィック処理ユニットを製造する方法を実行させる、集積回路定義データセットが提供されてもよい。
【０１１６】
集積回路定義データセットは、例えば、ネットリスト、プログラム可能なチップを構成するためのコード、レジスタ転送レベル（ＲＴＬ）コード、ＶｅｒｉｌｏｇやＶＨＤＬなどの高レベル回路表現、ＯＡＳＩＳ（ＲＴＭ）やＧＤＳＩＩなどの低レベル回路表現などの任意のレベルで集積回路を定義するハードウェア記述言語としてのコンピュータコードの形式であり得る。集積回路（ＲＴＬなど）を論理的に定義する高レベル表現は、表現によってそのように定義された集積回路の製造定義を生成するために、回路要素の定義およびそれらの要素を組み合わせるためのルールを含むソフトウェア環境のコンテキストで、集積回路の製造定義を生成するように構成されたコンピュータシステムで処理され得る。一般的に、マシンを定義するために、コンピュータシステムで実施されるソフトウェアを有するケースとしては、集積回路の製造定義を生成するように構成されたコンピュータシステムが、その集積回路の製造定義を生成するために集積回路を定義するコードを実行するために、１つ以上の中間ユーザステップ（例えば、コマンド、変数などの提供）を必要とする場合がある。
【０１１７】
ここで、グラフィック処理ユニットを製造するようにシステムを構成するために、集積回路製造システムで集積回路定義データセットを処理する実施例を、図１０に関して説明する。
【０１１８】
図１０は、本明細書の実施例のいずれかに記載のグラフィック処理ユニットを製造するように構成された、集積回路（ＩＣ）製造システム１００２の一実施例を示す。詳細には、ＩＣ製造システム１００２は、レイアウト処理システム１００４と、集積回路生成システム１００６と、を含む。ＩＣ製造システム１００２は、ＩＣ定義データセット（例えば、本明細書の実施例のいずれかで説明したようなグラフィック処理ユニットを定義する）を受信し、ＩＣ定義データセットを処理し、ＩＣ定義データセット（例えば、本明細書の実施例のいずれかで説明したようなグラフィック処理ユニットを具体化する）に従ってＩＣを生成するように構成されている。ＩＣ定義データセットの処理は、本明細書の実施例のいずれかに記載のグラフィック処理ユニットを具体化する集積回路を製造するために、ＩＣ製造システム１００２を構成する。
【０１１９】
レイアウト処理システム１００４は、ＩＣ定義データセットを受信および処理して、回路レイアウトを決定するように構成されている。ＩＣ定義データセットからの回路レイアウトを決定する方法は、当技術分野で知られており、ＲＴＬコードを合成して、例えば、論理的構成要素（例えば、ＮＡＮＤ、ＮＯＲ、ＡＮＤ、ＯＲ、ＭＵＸおよびＦＬＩＰ−ＦＬＯＰ構成要素）の観点から生成される回路のゲートレベル表現を決定することを含み得る。論理的構成要素の位置情報を決定することにより、回路レイアウトが、回路のゲートレベル表現から決定され得る。これは、回路レイアウトを最適化するために、自動的に、またはユーザの関与によって行われ得る。レイアウト処理システム１００４が回路レイアウトを決定したとき、レイアウト処理システム１００４は、ＩＣ生成システム１００６に、回路レイアウト定義を出力し得る。回路レイアウト定義は、例えば、回路レイアウト記述であってもよい。
【０１２０】
ＩＣ生成システム１００６は、当技術分野で知られているように、回路レイアウト定義に従ってＩＣを生成する。例えば、ＩＣ生成システム１００６は、ＩＣを生成するために、半導体デバイス製造プロセスを実施することができ、これは、フォトリソグラフィーおよび化学処理ステップの複数ステップのシーケンスを含み、その間に、半導体材料で作製されたウェハ上に、電子回路が徐々に生成され得る。回路レイアウト定義は、回路定義によるＩＣを生成するためのリソグラフィープロセスで使用され得る、マスクの形態であってもよい。あるいは、ＩＣ生成システム１００６に提供される回路レイアウト定義は、ＩＣ生成システム１００６が、ＩＣの生成に使用するための適切なマスクを形成するために使用し得る、コンピュータ可読コードの形態であってもよい。
【０１２１】
ＩＣ製造システム１００２によって実行される異なるプロセスは、すべて１つの場所で、例えば、１人の当事者によって実装されてもよい。別の方法として、ＩＣ製造システム１００２は、プロセスの一部が異なる場所で実行され得、異なる当事者によって実行され得るような、分散システムであってもよい。例えば、（ｉ）ＩＣ定義データセットを表すＲＴＬコードを合成して、生成される回路のゲートレベル表現を形成する段階、（ｉｉ）ゲートレベルの表現に基づいて、回路レイアウトを生成する段階、（ｉｉｉ）回路レイアウトに従って、マスクを形成する段階、および（ｉｖ）マスクを使用して集積回路を製造する段階のうちの一部は、様々な場所で、および／または様々な当事者によって実行され得る。
【０１２２】
他の実施例では、集積回路製造システムでの集積回路定義データセットの処理は、回路レイアウトを決定するようにＩＣ定義データセットが処理されることなく、グラフィック処理ユニットを製造するためのシステムを構成し得る。例えば、集積回路定義データセットは、ＦＰＧＡなどの再構成可能プロセッサの構成を定義してもよく、そのデータセットの処理は、その定義された構成を有する再構成可能なプロセッサを生成する（例えば、構成データをＦＰＧＡにロードすることによって）ためのＩＣ製造システムを構成してもよい。
【０１２３】
いくつかの実施形態では、集積回路製造定義データセットは、集積回路製造システムで処理される時に、集積回路製造システムに、本明細書に記載のデバイスを生成することを行わせ得る。例えば、集積回路製造定義データセットによる、図１０に関して上述した様式での集積回路製造システムの構成は、本明細書に記載されるようなデバイスが製造されることを引き起こし得る。
【０１２４】
一部の実施例では、集積回路定義データセットは、データセットで定義されたハードウェア上で、またはデータセットで定義されたハードウェアと組み合わせて実行される、ソフトウェアを含むことができる。図１０に示す実施例では、ＩＣ生成システムは、集積回路を製造する際に、集積回路定義データセットで定義されたプログラムコードに従ってその集積回路にファームウェアをロードするに、または別のやり方では、集積回路で使用するために、集積回路にプログラムコードを提供するために、集積回路定義データセットによってさらに構成されてもよい。
【０１２５】
デバイス、装置、モジュール、および／またはシステム（ならびに本明細書で実装される方法）における本出願で述べられる概念の実装形態は、既知の実装形態と比較した時に性能の改善をもたらし得る。性能の改善には、計算性能の増加、待ち時間の短縮、スループットの向上、および／または消費電力の削減のうちの１つ以上が含まれ得る。こうしたデバイス、装置、モジュール、およびシステム（例えば、集積回路における）の製造中、性能改善は、物理的実装とトレードオフになり、それにより、製造方法が改善され得る。例えば、性能改善は、レイアウト面積に対して交換される場合があり、それによって、既知の実装形態の性能と一致するが、使用するシリコンは少なくなる。これは、例えば、機能ブロックをシリアル化して再利用すること、またはデバイス、装置、モジュール、および／もしくはシステムの要素間で機能ブロックを共有することによって行われ得る。逆に言えば、デバイス、装置、モジュール、およびシステムの物理的実装の改善（減少されたシリコン面積など）を生じさせる本出願で述べられた概念は、改善された性能と交換され得る。これは、例えば、既定の面積予算内でモジュールの複数のインスタンスを製造することによって行われ得る。
【０１２６】
出願人は、これによって、そのような特徴または特徴の組み合わせが、本明細書で開示されるいくつかの問題を解決するかどうかに関係なく、そのような特徴または組み合わせを、当業者の共通の一般的な知識に照らして、全体として本明細書に基づいて実行することができる程度まで、本明細書に記載の各個々の特徴および２つ以上のそのような特徴の任意の組み合わせを単独で開示する。前述の説明の観点から、本発明の範囲内で様々な修正を行うことができることは、当業者には明らかであろう。
【図１】
2020091868.tif 000003
【図２】
2020091868.tif 000004
【図３】
2020091868.tif 000005
【図４】
2020091868.tif 000006
【図５】
2020091868.tif 000007
【図６】
2020091868.tif 000008
【図７】
2020091868.tif 000009
【図８】
2020091868.tif 000010
【図９】
2020091868.tif 000011
【図１０】
2020091868.tif 000012
【図１１】
2020091868.tif 000013
【外国語明細書】
2020091868000001.pdf