(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022092613
(43)【公開日】2022-06-22
(54)【発明の名称】処理システム内の処理タスク
(51)【国際特許分類】
G06F 11/16 20060101AFI20220615BHJP
G06F 12/0842 20160101ALI20220615BHJP
G06F 12/02 20060101ALI20220615BHJP
【FI】
G06F11/16 641
G06F12/0842
G06F12/02 510A
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021200104
(22)【出願日】2021-12-09
(31)【優先権主張番号】2019527.7
(32)【優先日】2020-12-10
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】2109357.0
(32)【優先日】2021-06-29
(33)【優先権主張国・地域又は機関】GB
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.VERILOG
3.OPENCL
(71)【出願人】
【識別番号】515293676
【氏名又は名称】イマジネーション テクノロジーズ リミテッド
【氏名又は名称原語表記】Imagination Technologies Limited
【住所又は居所原語表記】Imagination House, Home Park Estate, Kings Langley, Hertfordshire WD4 8LZ United Kingdom
(74)【代理人】
【識別番号】100091487
【弁理士】
【氏名又は名称】中村 行孝
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100118843
【弁理士】
【氏名又は名称】赤岡 明
(74)【代理人】
【識別番号】100202429
【弁理士】
【氏名又は名称】石原 信人
(72)【発明者】
【氏名】イアン、キング
(72)【発明者】
【氏名】ドナルド、スコージー
【テーマコード(参考)】
5B034
5B160
5B205
【Fターム(参考)】
5B034AA02
5B160AA12
5B205KK14
5B205MM01
5B205UU32
(57)【要約】 (修正有)
【課題】処理システム内の入力タスクを処理する方法及び処理システムを提供する。
【解決手段】方法は、第一のタスク及び第二のタスクを形成するために、入力タスクを複製することと、第一のタスクにアクセスされる読み取り/書き込みデータを記憶するメモリーの第一のブロック、第二のタスクにアクセスされる読み取り/書き込みデータのコピーを記憶するメモリーの第二のブロック及び第一のタスク及び第二のタスクの両方の処理にアクセスされる読み取り専用データを記憶するメモリーの第三のブロックを含むメモリーを割り当てることと、第一のタスク及び第二のタスクを、夫々、第一及び第二の出力を生成するように、処理システムの処理論理で処理することと、を含む。
【選択図】
図5
【特許請求の範囲】
【請求項1】
処理システム内の入力タスクを処理する方法であって、
第一のタスクおよび第二のタスクを形成するために、前記入力タスクを複製することと、
前記第一のタスクの前記処理の間にアクセスされる読み取り/書き込みデータを記憶するように構成されるメモリーの第一のブロックと、
前記第二のタスクの前記処理の間にアクセスされる前記読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第二のブロックと、
前記第一のタスクおよび前記第二のタスクの両方の前記処理の間にアクセスされる読み取り専用データを記憶するように構成されるメモリーの第三のブロックと、を含むメモリーを割り当てることと、
前記第一のタスクおよび前記第二のタスクを、それぞれ、第一および第二の出力を生成するように、前記処理システムの処理論理で処理することと、
前記第一および第二の出力それぞれの特徴である第一および第二のシグネチャを形成することと、
前記第一および第二のシグネチャを比較することと、
前記第一および第二のシグネチャが一致しない場合、フォールト信号を発生させることと、を含む、方法。
【請求項2】
前記方法が、前記処理システムのメモリー階層にアクセスする前記第一および第二の出力の前に、前記第一および第二のシグネチャを形成することをさらに含む、請求項1に記載の方法。
【請求項3】
前記方法が、前記第一および第二のタスクを処理する前に、前記メモリーの第一のブロックのメモリーアドレスに読み取り/書き込みデータを記憶し、前記メモリーの第二のブロックの対応するメモリーアドレスに前記読み取り/書き込みデータのコピーを記憶することをさらに含む、請求項1または2に記載の方法。
【請求項4】
前記メモリーの第一のブロックおよび前記メモリーの第二のブロックが、メモリーのヒープの中に割り当てられ、前記メモリーの第二のブロックの各メモリーアドレスが、固定メモリーアドレスストライドによって、前記メモリーの第一のブロック内の対応するメモリーアドレスからオフセットされる、請求項1~3のいずれかに記載の方法。
【請求項5】
複数の入力タスクが前記処理システムで処理され、前記固定メモリーアドレスストライドが、前記それぞれの入力タスクから形成される第一および第二のタスクの各対に対して同じである、請求項4に記載の方法。
【請求項6】
前記固定メモリーアドレスストライドが、前記メモリーのヒープの半分のサイズである、請求項4または5に記載の方法。
【請求項7】
前記メモリーのヒープが、前記処理システムでの一つまたは複数の入力タスクの前記処理のためにデータを記憶するために確保されたメモリーの連続ブロックであり、前記メモリーのヒープが前記処理システムのメモリー内にある、請求項4~6のいずれかに記載の方法。
【請求項8】
前記方法が、
前記第二の出力を受信することと、
前記第二の出力で、前記メモリーの第一のブロック内のメモリーアドレスへの参照を識別することと、
前記参照を更新することと、
前記更新された参照を使用して、前記メモリーの第二のブロック内の前記対応するメモリーアドレスにアクセスすることと、をさらに含む、請求項1~7のいずれかに記載の方法。
【請求項9】
前記方法が、前記固定メモリーアドレスストライドを使用して、前記第二の出力において、前記参照を、前記メモリーの第一のブロック内のメモリーアドレスに更新することをさらに含む、請求項4~7のいずれかに依存するときの、請求項8に記載の方法。
【請求項10】
前記方法が、
出力を受信し、前記出力を前記第二の出力として識別するように、前記出力が前記第二のタスクから受信されたことを識別することをさらに含む、請求項8または9に記載の方法。
【請求項11】
前記方法が、
前記第一のタスクおよび前記第二のタスクを前記処理論理に同時に送信することをさらに含む、請求項1~10のいずれかに記載の方法。
【請求項12】
前記方法が、
前記第一のタスクおよび前記第二のタスクの前記処理中に、前記処理論理によってアクセスされるように構成されるキャッシュに、前記メモリーの第一のブロック、第二のブロック、および第三のブロックからデータをフェッチすることをさらに含む、請求項11に記載の方法。
【請求項13】
前記入力タスクが、既定の安全レベルに従って処理される安全タスクである、請求項1~12のいずれかに記載の方法。
【請求項14】
前記処理論理が、第一の処理要素および第二の処理要素を含み、前記処理システムの処理論理における前記第一のタスクおよび前記第二のタスクを前記処理することが、前記第一の処理要素で前記第一のタスクを処理し、前記第二の処理要素で前記第二のタスクを処理することを含む、請求項1~13のいずれかに記載の方法。
【請求項15】
前記入力タスクが、前記処理論理上で実行するための命令の所定のセットを含むテストタスクであり、前記命令の所定のセットが、所定の入力データに対して実行されたときに、前記処理論理上で所定の動作のセットを実行するように構成され、前記方法が、前記第一の処理要素および前記第二の処理要素を含む処理ユニットで前記テストタスクを受信することをさらに含む、請求項14に記載の方法。
【請求項16】
前記処理論理が、特定の処理要素を含み、前記処理システムの処理論理で前記第一のタスクおよび前記第二のタスクを前記処理することが、前記特定の処理要素で前記第一のタスクを処理し、前記特定の処理要素で前記第二のタスクを処理することを含む、請求項1~13のいずれかに記載の方法。
【請求項17】
前記第一および第二の出力が、それぞれ、前記第一および第二のタスクの前記処理中に生成される中間出力を含み、任意選択で、中間出力が、タスクの前記処理中に生成される負荷、記憶、またはアトミック命令のうちの一つまたは複数である、請求項1~16のいずれかに記載の方法。
【請求項18】
入力タスクを処理するように構成される処理システムであって、
第一のタスクおよび第二のタスクを形成するように、前記入力タスクを複製するように構成されるタスク複製ユニットと、
前記第一のタスクの前記処理の間にアクセスされる読み取り/書き込みデータを記憶するように構成されるメモリーの第一のブロックと、
前記第二のタスクの前記処理の間にアクセスされる前記読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第二のブロックと、
前記第一のタスクおよび前記第二のタスクの両方の前記処理の間にアクセスされる読み取り専用データを記憶するように構成されるメモリーの第三のブロックと、を含むメモリーを割り当てるように構成される、メモリー割り当てユニットと、
前記第一の出力を生成するように前記第一のタスクを処理し、前記第二の出力を生成するように前記第二のタスクを処理するように構成される処理論理と、
前記第一および第二の出力それぞれの特徴である第一および第二のシグネチャを形成するように構成されるチェックユニットと、
前記第一および第二のシグネチャを比較し、前記第一および第二のシグネチャが合致しない場合にフォールト信号を発生させるように構成されるフォールト検出ユニットと、を含む、処理システム。
【請求項19】
前記メモリーの第一のブロックと、前記メモリーの第二のブロックと、前記メモリーの第三のブロックとを含む、メモリーのヒープをさらに含む、請求項18に記載の処理システム。
【請求項20】
集積回路製造システムで処理されるときに、請求項18または19に記載の処理システムを製造するために、前記集積回路製造システムを構成する、集積回路定義データセット。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、処理システム、および処理システムでタスクを処理する方法に関する。
【背景技術】
【0002】
安全重要システムでは、システムの構成要素の少なくとも一部は、システム全体がシステムに必要とみなされる安全性のレベルを満たすことができるように十分な安全目標を満たす必要がある。例えば、ほとんどの管轄区域では、車両におけるシートベルトのリトラクタは、こうしたデバイスが提供された車両が安全性試験に合格するために特定の安全基準を満たす必要がある。同様に、車両のタイヤは、こうしたタイヤを装備した車両が、特定の管轄区域に対して適切な安全性試験に合格するために特定の規格を満たす必要がある。安全重要システムは通常、その故障が人々または環境の安全性に対するリスクの大幅な増加を引き起こすことになるシステムである。
【0003】
データ処理装置などの、処理システムは、専用のハードウェアとして、または安全重要ソフトウェアを実行するためのプロセッサーとしてのいずれかで、安全重要システムの一体型部分を形成することが多い。例えば、航空機向けのフライバイワイヤシステム、ドライバー支援システム、鉄道信号システム、および医療装置向けの制御システムは全て、通常、データ処理装置上で実行される安全重要システムである。データ処理装置が安全重要システムの一体型部分を形成する場合、データ処理装置自体は、システム全体が適切な安全レベルを満たすことができるように、安全目標を満たす必要がある。自動車業界では、安全レベルは通常、機能安全基準ISO26262で定義される自動車用安全度水準(ASIL)である。
【0004】
また、安全重要システムのデータ処理装置は、ソフトウェアを実行するプロセッサーを含む。ハードウェアおよびソフトウェア要素の両方は、特定の安全目標を満たす必要がある。一部のソフトウェア障害は、プログラミングエラーまたは不適切なエラー処理によるシステム障害である可能性がある。これらの問題は、通常、厳密な開発実践、コード監査および試験プロトコルによって対処することができる。システムエラーが安全重要システムから完全に除外することが可能である場合でさえも、例えば、一時的なイベント(例えば、電離放射線、電圧スパイク、または電磁パルスによる)により、ランダムエラーがハードウェアの中へと導入される可能性がある。バイナリシステムでは、一時的なイベントは、メモリー内およびプロセッサーのデータパスに沿ってランダムなビットフリッピングを引き起こす可能性がある。ハードウェアに永久フォールトがある場合もある。
【0005】
データ処理装置に対する安全目標は、所与の期間内の障害の最大数(多くの場合、時間内障害またはFITとして表される)、ならびに単一ポイント障害(単一ポイント障害メカニズム、またはSPFM)および潜在的な障害(潜在的な障害メカニズム、またはLFM)を検出するメカニズムの有効性などの一連のメトリクスとして表され得る。例えば、一つの構成要素が故障した場合に、別の構成要素が同じタスクを実施するため利用できるようにハードウェア冗長性を提供することによって、またはチェックデータ(例えば、パリティビットまたはエラー修正コードなど)の使用を通して、ハードウェアが軽微なデータ破損を検出および/または修正できるように、データ処理装置に対して設定された安全目標を達成するためのさまざまなアプローチがある。
【0006】
例えば、データプロセッサは、一対の同一の処理ユニット101および102が命令103の流れを並列に処理するよう構成されている
図1に示す、デュアルロックステップ配列100内に提供され得る。処理ユニット101および102は、典型的には、二つの処理ユニット101および102が同時に命令サイクルのストリームを実行するように、命令の各ストリームに対して同期される。処理ユニット101、102のいずれか一つの出力は、ロックステッププロセッサーの出力104として使用され得る。処理ユニット101および102の出力が一致しない時、を安全重要システムに上げることができる。しかしながら、第二の処理ユニットは必要であるため、デュアルロックステッププロセッサーは、従来のプロセッサーと比較して必然的に2倍のチップエリアを消費し、かつ約2倍の電力を消費する。
【0007】
別の実施例では、ロックステッププロセッサー100にさらなるプロセッサーユニット(図示せず)を追加することによって、それらのプロセッサーユニットの一方にフォールトが検出されても、エラーのない出力を提供し続けることができる。これは、モジュール式冗長性と呼ばれるプロセスを使用することによって達成できる。ここで、ロックステッププロセッサーの出力は、その処理ユニットの二つ以上によって提供され、他のユニットと合致しない処理ユニットの出力は無視され得る。しかしながら、これは、プロセッサーの面積および電力消費量をさらに増加させる。
【0008】
先進ドライバー支援システムおよび自律車両は、特定の安全目標を満たさなければならないデータ処理システムを組み込むことができる。例えば、自律車両は、安全重要な決定を行うために、リアルタイムで(例えば、レーダー、LIDAR、マップデータおよび車両情報から)非常に大量のデータを処理する必要がある。自律車両のこのような安全重要システムは、通常、ISO26262の最も厳格なASILレベルDを満たすことが必要とされる。しかし、これらの用途では、ロックステッププロセッサーを実装する面積および電力消費量(従って、コスト)の増加は許容されないか、または望ましくない場合がある。
【発明の概要】
【0009】
この概要は、詳細な説明で以下にさらに説明される選択された概念の選択を簡単な形式で紹介するために提供される。この概要は、特許請求される主題の要所特徴または必須特徴を特定することも意図しておらず、特許請求される主題の範囲を限定するために使用されることも意図していない。
【0010】
第一の態様によれば、処理システム内の入力タスクを処理する方法であって、第一のタスクおよび第二のタスクを形成するために、入力タスクを複製することと、第一のタスクの処理の間にアクセスされる読み取り/書き込みデータを記憶するように構成されるメモリーの第一のブロックと、第二のタスクの処理の間にアクセスされる読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第二のブロックと、第一のタスクおよび第二のタスクの両方の処理の間にアクセスされる読み取り専用データを記憶するように構成されるメモリーの第三のブロックとを含む、メモリーを割り当てることと、第一のタスクおよび第二のタスクを、それぞれ、第一および第二の出力を生成するように、処理システムの処理論理で処理することとを含む、方法が提供される。
【0011】
方法は、第一および第二の出力それぞれの特徴である第一および第二のシグネチャを形成することと、第一および第二のシグネチャを比較することと、第一および第二のシグネチャが一致しない場合、フォールト信号を発生させることとをさらに含むことができる。
【0012】
それぞれ、第一および第二の出力の特徴である第一および第二のシグネチャを形成することは、第一および第二の処理された出力に対して、それぞれ、チェックサム、巡回冗長検査、ハッシュ、およびフィンガープリントのうちの一つまたは複数を決定することを含み得る。
【0013】
方法は、処理システムのメモリー階層にアクセスする第一および第二の出力の前に、第一および第二のシグネチャを形成することをさらに含んでもよい。
【0014】
方法は、第一のタスクおよび第二のタスクを処理する前に、メモリーの第一のブロックのメモリーアドレスに読み取り/書き込みデータを記憶し、メモリーの第二のブロックの対応するメモリーアドレスに読み取り/書き込みデータのコピーを記憶することをさらに含んでもよい。
【0015】
メモリーの第一のブロックおよびメモリーの第二のブロックが、メモリーのヒープの中に割り当てられ、メモリーの第二のブロックの各メモリーアドレスが、固定メモリーアドレスストライドによって、メモリーの第一のブロック内の対応するメモリーアドレスからオフセットされ得る。
【0016】
複数の入力タスクは、処理システムで処理されてもよく、固定メモリーアドレスストライドは、それぞれの入力タスクから形成される第一および第二のタスクのそれぞれのそれぞれのペアに対して同一であり得る。
【0017】
メモリーのヒープが、処理システムでの一つまたは複数の入力タスクの処理のためにデータを記憶するために確保されたメモリーの連続ブロックであり、メモリーのヒープが処理システムのメモリー内にあり得る。
【0018】
方法は、第二の出力を受信することと、第二の出力で、メモリーの第一のブロック内のメモリーアドレスへの参照を識別することと、メモリーアドレスストライドを使って参照を更新することと、更新された参照を使用して、メモリーの第二のブロック内の対応するメモリーアドレスにアクセスすることとをさらに含んでもよい。
【0019】
方法は、出力を受信し、出力を第二の出力として識別するように、出力が第二のタスクから受信されたことを識別することをさらに含んでもよい。
【0020】
メモリーの第三のブロックは、メモリーのヒープに割り当てられてもよい。
【0021】
方法は、同時に、第一のタスクおよび第二のタスクを処理論理に送信することをさらに含んでもよい。
【0022】
方法は、第一のタスクおよび第二のタスクの処理中に、処理論理によってアクセスされるように構成されるキャッシュに、メモリーの第一のブロック、第二のブロック、および第三のブロックからデータをフェッチすることをさらに含み得る。
【0023】
入力タスクは、既定の安全レベルに従って処理される安全タスクであり得る。
【0024】
処理論理は、第一の処理要素および第二の処理要素を含んでもよく、処理システムの処理論理における第一のタスクおよび第二のタスクを前述の処理することが、第一の処理要素で第一のタスクを処理し、第二の処理要素で第二のタスクを処理することを含んでもよい。
【0025】
入力タスクが、処理論理上で実行するための命令の所定のセットを含むテストタスクであり、命令の所定のセットが、所定の入力データに対して実行されたときに、処理論理上で所定の動作のセットを実行するように構成されてもよく、方法が、第一の処理要素および第二の処理要素を含む処理ユニットでテストタスクを受信することをさらに含んでもよい。
【0026】
処理論理が、特定の処理要素を含んでもよく、処理システムの処理論理で第一のタスクおよび第二のタスクを前述の処理することが、特定の処理要素で第一のタスクを処理し、特定の処理要素で第二のタスクを処理することを含む。
【0027】
第一および第二の出力は、それぞれ、第一および第二のタスクの処理中に生成される中間出力を含み得る。中間出力は、タスクの処理中に生成される、負荷、記憶、またはアトミック命令のうちの一つまたは複数であり得る。
【0028】
処理論理トは、第一および第二のタスクを独立して処理するよう構成され得る。
【0029】
入力タスクは、一つまたは複数の計算作業項目を含む計算作業グループであり得る。
【0030】
方法は、第一のタスクの処理中に、第一のブロックメモリーから読み取り/書き込みデータを読み取ることと、第一のタスクに従ってそのデータを修正することと、その変更されたデータをメモリーの第一のブロックに書き戻すことと、をさらに含み得る。
【0031】
方法は、第二のタスクの処理中に、第二のブロックメモリーから読み取り/書き込みデータを読み取ることと、第二のタスクに従ってそのデータを修正することと、その修正されたデータをメモリーの第二のブロックに書き戻すことと、をさらに含んでもよい。
【0032】
第二の態様によれば、入力タスクを処理するように構成される処理システムであって、第一のタスクおよび第二のタスクを形成するように、入力タスクを複製するように構成されるタスク複製ユニットと、第一のタスクの処理の間にアクセスされる読み取り/書き込みデータを記憶するように構成されるメモリーの第一のブロックと、第二のタスクの処理の間にアクセスされる読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第二のブロックと、第一のタスクおよび第二のタスクの両方の処理の間にアクセスされる読み取り専用データを記憶するように構成されるメモリーの第三のブロックと、を含む、メモリーを割り当てるように構成されるメモリー割り当てユニットと、第一の出力を生成するように第一のタスクを処理し、第二の出力を生成するように第二のタスクを処理するように構成される処理論理とを含む、処理システムが提供される。
【0033】
処理システムは、第一および第二の出力それぞれの特徴である第一および第二のシグネチャを形成するように構成されるチェックユニットと、第一および第二のシグネチャを比較し、第一および第二のシグネチャが合致しない場合にフォールト信号を発生させるように構成されるフォールト検出ユニットとをさらに含み得る。
【0034】
処理システムは、メモリーの第一のブロック、メモリーの第二のブロック、およびメモリーの第三のブロックを含む、ヒープのメモリーをさらに含んでもよい。
【0035】
本明細書に記載の処理システムは、集積回路上のハードウェア内に具体化され得る。集積回路製造システムで、本明細書に記載の処理システムを製造する方法が、提供され得る。集積回路製造システムで処理されるときに、処理システムを製造するシステムを構成する、集積回路定義データセットが提供され得る。集積回路製造システム内で処理されたときに、集積回路製造システムに本明細書で記載の処理システムを具現化する集積回路を製造させる、本明細書で記載の処理システムのコンピューター可読記述がその上に記憶された、非一時的コンピューター可読記憶媒体が提供され得る。
【0036】
本明細書で記載の処理システムのコンピューター可読記述がその上に記憶された、非一時的コンピューター可読記憶媒体と、本明細書で記載の処理システムを具体化する集積回路の回路レイアウト記述を生成するように、コンピューター可読記述を処理するように構成される、レイアウト処理システムと、回路レイアウト記述に従って、本明細書で記載の処理システムを製造するように構成される、集積回路生成システムと、を含む、集積回路製造システムが提供され得る。
【0037】
本明細書に記載の方法を実施するためのコンピュータープログラムコードが提供され得る。コンピューターシステムにおいて実行されたときに、コンピューターシステムに、本明細書に記載の方法のいずれかを実施させる、その上に記憶されたコンピューター可読命令を有する、非一時的コンピューター可読記憶媒体が提供され得る。
【0038】
上記の特徴は、当業者に明らかであるように、必要に応じて組み合わせてもよく、本明細書に記載される実施例の任意の態様と組み合わせてもよい。
【図面の簡単な説明】
【0039】
実施例は、添付図面を参照して詳細に記載する。
【0040】
【
図1】
図1は、従来のデュアルロックステッププロセッサーを示す。
【0041】
【
図2】
図2は、本明細書に記載の原理に従って構成される、グラフィック処理ユニットを示す。
【0042】
【
図3】
図3は、本明細書に記載の原理に従って構成される、グラフィック処理ユニットを含むデータ処理システムを示す。
【0043】
【
図4】
図4は、本明細書に記載の原理に従って入力タスクを処理するための、
図3に示すデータ処理システムのユニットの例示的な論理配置を示す。
【0044】
【
図5】
図5は、本明細書に記載の原理に従った、データ処理システムで入力タスクを処理する方法を示す。
【0045】
【
図6】
図6a~cは、本明細書に記載の原理に従った、メモリーの第一、第二、および第三のブロックの例示的な割り当てを示す。
【0046】
【
図7】
図7は、本明細書に記載の原理に従って、チェックおよびフィルターユニットによって実行される、例示的な一連のステップを示す。
【0047】
【
図8】
図8は、データ処理システムを具現化する集積回路を生成するための集積回路製造システムを示す。
【0048】
添付図面は、さまざまな実施例を示す。当業者は、図面中の図示された要素の境界(例えば、箱、箱のグループ、または他の形状)が、境界の一例を表すことを理解するであろう。いくつかの実施例では、一つの要素は、複数の要素として設計され得るか、または複数の要素が、一つの要素として設計され得る。同様の特徴を示すために、適切な場合、図全体を通して共通の参照番号が使用される。
【発明を実施するための形態】
【0049】
以下の説明は、当業者が本発明を作製および使用することを可能にするために実施例として提示される。本発明は、本明細書に記載の実施形態に限定されず、また開示された実施形態に対するさまざまな修正は、当業者にとって明らかであろう。
【0050】
実施形態は、実施例としてのみ記述される。
【0051】
本開示は、処理システムでのタスクの処理に関する。処理システムは、本明細書ではデータ処理システムと呼ばれ得る。本明細書の原理に従って構成されるデータ処理システムは、任意の適切なアーキテクチャーを有してもよく、例えば、データ処理システムは、任意の種類のグラフィックス、画像もしくはビデオ処理、一般処理、および/または任意の他のタイプのデータ処理を実施するように動作可能であり得る。
【0052】
データ処理システムは、一つまたは複数の処理要素を含む処理論理を含む。例えば、データ処理システムは、例えば、任意の種類のグラフィカルおよび/またはベクトルおよび/またはストリーム処理要素であり得る、複数の処理要素を含んでもよい。各処理要素は、データ処理システムによって構成されるグラフィック処理ユニット(GPU)の異なる物理コアであり得る。とは言え、本明細書に記載の原理は、マルチコア配置を有する中央処理ユニット(CPU)など、任意の適切なタイプの処理ユニットの処理要素に適用され得ることが理解されるべきである。データ処理システムは、一般的な計算タスク、特に、簡単に並列化できるものに適用され得る。一般的な計算用途の実施例には、信号処理、音声処理、コンピュータービジョン、物理的シミュレーション、統計的計算、ニューラルネットワーク、および暗号化が含まれる。
【0053】
タスクは、処理要素で処理するための作業の任意の部分であり得る。例えば、タスクは、データ処理システムの処理要素が、ベクトルデータなどを処理するよう構成され得る、任意の種類のデータに対して実行される一つまたは複数の処理アクションを画定し得る。データ処理システムは、複数の異なるタイプのタスクで動作するように構成され得る。一部のアーキテクチャーでは、異なる処理要素または処理要素のグループは、異なるタイプのタスクを処理するために割り当てられてもよい。
【0054】
実施例では、データ処理システムで処理されるタスクは、一つまたは複数の計算作業項目を含む計算作業グループであり得る。計算作業項目は、計算カーネル(例えば、計算シェーダー)の一つの実例であり得る。一つまたは複数の計算作業項目は、共通データ上で動作可能に動作し得る。一つまたは複数の計算作業項目を、いわゆる計算作業グループにグループ化し得る。計算作業グループ内の各計算作業項目は、同じ計算カーネル(例えば、計算シェーダー)を実行し得るが、各作業項目は、それらの作業項目に共通するデータの異なる部分上で動作し得る。一つまたは複数の計算作業項目を含むこうした計算作業グループは、データ処理システムの処理要素によって処理するために派遣され得る。各計算作業グループは、任意の他の作業グループから独立し得る。別の実施例では、データ処理システムで処理されるタスクは、本明細書にさらに詳細に説明されるように、テストタスクであり得る。
【0055】
図2は、本明細書に記載の原理に従って構成される、グラフィック処理ユニットを示す。本開示は、グラフィック処理ユニット(GPU)を含むデータ処理システムを参照して記載されるが、本明細書に記載の原理は、マルチコア配置を有する中央処理ユニット(CPU)などの任意の適切なタイプの処理ユニットを含むデータ処理システムに適用され得ることが理解されるべきである。
【0056】
グラフィック処理ユニット(GPU)200は、データ処理システムの部分である。GPU200は、PE0~PE(n)として図においてラベル付けされた複数の処理要素204を含む。GPU200は、メモリー201からデータ202を受信するように構成される一つまたは複数のキャッシュおよび/またはバッファ206を含み、処理済みデータ203をメモリー201に提供することができる。メモリー201は、任意の適切な様式で配設された一つまたは複数のデータストレージユニットを含んでいてもよい。典型的に、メモリー201は、GPU専用のメモリーと、GPUがサポートされるデータ処理システムのシステムメモリーとを含む。
【0057】
GPU200のさまざまなユニットは、一つまたは複数のデータバスおよび/または相互接続部205を通じて通信し得る。GPUは、ファームウェア207を含んでもよく、例えば、GPUのユニットの低レベル制御を提供する。
【0058】
GPUの処理要素204の各々は、複数の処理要素が各々、同時にそれぞれのタスクを実行できるように、処理要素が配設される状態で、タスクを処理するように動作可能である。このようにして、GPUは、複数のタスクを同時に処理することができる。各処理要素は、所与の処理要素が異なる処理アクションの範囲を実行するように構成されることを可能にするように、複数の構成可能な機能要素(例えば、シェーダー、ジオメトリプロセッサー、ベクタプロセッサー、ラスタライザ、テクスチャユニットなど)を含んでもよい。処理要素は、タスクのためにデータ部分に対し一連のアクションを実行することによって、タスクを処理し得る。一連のアクションは、所与のタスクに対して適切なものとして定義され得る。処理要素は、処理要素が異なる組の処理アクションを実行できるように、処理要素の機能要素を有効/無効にするように、例えば、適切な指令をファームウェア207に渡すGPUのソフトウェアドライバーによって構成され得る。このようにして、処理要素の第一のセットは、例えば、車両センサーから受信したセンサーデータのベクトル処理を実行するように構成されてもよく、一方で処理要素の別のセットは、例えば、シーン(例えば、タイル)のコンピューター生成画像の部分を表すグラフィカルタスク上でシェーダー処理を実行するように構成され得る。各処理要素は、任意の他の処理要素とは独立してタスクを処理できてもよい。従って、一つの処理要素で処理されたタスクは、そのタスクを処理するために別の処理要素と協働しなくてもよい(例えば、個別のタスクは、複数の処理要素で並行して処理されていないが、個別のタスクを単一の処理要素で並行して処理され得る)。
【0059】
タスクの処理において、処理要素204は、そのタスクに関して出力を生成する。出力データは、そのタスクの処理のための最終出力であってもよく、またはそのタスクの処理中に生成される中間出力データであり得る。GPU200は、処理要素から出力データを受信し、かつその出力データの特徴であるシグネチャを形成するように動作可能なチェックユニット208を含む。例えば、シグネチャは、処理要素から出力される出力データの特徴であり得る。言い換えれば、シグネチャは、処理要素から出力される時点での出力データの特徴であり得る。チェックユニットは、例えば、出力データ上のチェックサム、ハッシュ、巡回冗長検査(CRC)、または指紋計算を実行し得る。チェックユニットは、タスクを処理する処理要素で生成されたデータ上で動作する。前述のデータは、生成されたデータと関連付けられるメモリーアドレスおよび/または制御データを含んでもよい。これによって本明細書に記載の検証動作が、より広い範囲の故障を識別するのに役立ち得る。シグネチャは、異なる処理要素によって提供される出力データの比較を容易にするように、出力データ自体よりもコンパクトな形態で、処理要素によってタスク上で実行される処理の発現を提供する。チェックユニットは、タスクに関して処理要素から受信された出力データ(制御データを含まないもの)の全てにわたりシグネチャを形成することが好ましいが、シグネチャは、タスクに関して処理要素から受信した出力データの一部(例えば、全てではない)にわたり形成され得る。チェックユニット208は、データバス/相互接続部205上の処理要素から出力データを受信し得る。
【0060】
チェックユニット208は、チェックユニットで形成される一つまたは複数のシグネチャを格納するためのデータストア209を含んでもよい。別の方法としてまたは追加的に、チェックユニットは、チェックユニットで形成される一つまたは複数のシグネチャを格納するために、チェックユニットの(例えば、GPU200のメモリーの)外部のデータストアを使用し得る。チェックユニットは、GPUの処理要素の全てまたはサブセットから出力データを受信し得る。チェックユニットは、複数のチェックユニットインスタンスを含んでもよく、例えば、各チェックユニットインスタンスは、GPUの処理要素の異なるサブセットから出力データを受信するように構成され得る。
【0061】
GPU200は、チェックユニット208で形成される二つ以上のシグネチャを比較するように構成されるフォールト検出ユニット210をさらに含む。フォールト検出ユニット210は、シグネチャが一致していないという決定に基づいて、フォールト信号211を発生させるように構成される。フォールトにより、GPUでの安全違反につながる可能性がある。フォールト信号は、GPU200の出力として任意の適切な手法で提供され得る。例えば、フォールト信号は、制御データ、割込み、メモリー201外に記述されたデータ、およびGPU200のレジスタまたはメモリーまたはGPUが接続されるシステムに書き込まれたデータのうちの一つまたは複数であり得る。
【0062】
フォールト検出ユニット210は、同じタスクを処理するように配設された異なる処理要素204から出力データのシグネチャを比較するためのものである。タスクは、一つまたは複数の処理要素によって複数回(例えば、2回)処理され得る。タスクを複数回処理するために処理要素によって実行される処理は、同時であってもなくてもよい。二つの処理要素が同じタスクを処理するように配設される場合、処理要素からの出力データのシグネチャ特性を比較することは、処理要素の対によって実行される処理が一致しているかどうかを示す。所与のタスクに関して一対の処理要素のシグネチャが一致しない場合、フォールト信号211は、ペアの処理要素のうちの一つでフォールトが発生したことを示すが、フォールト信号は、どの処理要素がフォールトを経験したかを示さない。
【0063】
タスクが3回以上(例えば、タスクを処理するように配置される三つ以上の処理要素のグループによって)処理される場合、タスクを処理する処理要素からの出力データの特徴であるシグネチャを比較することは、処理要素によって実行される処理が一致するかどうかを示す。この例では、タスクの処理から判定された三つ以上のシグネチャが合致しない場合、フォールト信号211は、処理要素のうちの一つでフォールトが発生したことを示し、処理要素のどれか一つでフォールトが発生したかをさらに示すことができる。これは、シグネチャが二つ以上の他の処理要素からの出力のシグネチャと一致しない処理要素で、フォールトが発生したと仮定することができるためである。
【0064】
GPU200は、
図3のデータ処理システム300などのデータ処理システムに組み込まれ得る。こうしたデータ処理システムは、中央処理ユニット(CPU)304およびメモリー201などの他のプロセッサーを含んでもよい。ハードウェア302は、プロセッサー200、304およびメモリー201が通信し得る、一つまたは複数のデータバスおよび/または相互接続部308を含み得る。一般に、ソフトウェア環境301は、複数のプロセス307が実施され得るデータ処理システムに提供される。オペレーティングシステム306は、使用可能なハードウェア302のプロセス307への抽象化を提供し得る。オペレーティングシステムは、GPU200の機能をプロセスに露出させるために、GPU200用のドライバー309を含み得る。ソフトウェア環境301の全てまたは部分は、ファームウェアとして提供され得る。一実施例では、データ処理システム300は、車両制御システムの部分を形成し、プロセスは各々、例えば、機器クラスタ表示、エンタテインメントシステム、エンジン管理、気候制御、車線制御、操縦補正、自動ブレーキシステムなどの車両の一つまたは複数の制御機能を実行する。プロセス307のうちの一つまたは複数は、安全重要なプロセスであり得る。プロセスは、既定の安全レベルに従って実施されなければならない安全重要プロセスと、既定の安全レベルに従って実施する必要がない非安全重要プロセスとの混合であり得る。
【0065】
フォールト信号は、GPUが組み込まれるデータ処理システム300によって任意の様式で使用され得る。例えば、フォールト検出ユニットによって発生されるフォールト信号では、GPUが組み込まれているシステムは、対象タスクに関連して形成される出力データを破棄し得、および/または再処理のためにタスクをGPUに再送信することができる。GPU自体は、フォールト信号211を使用し得る。例えば、GPUは、フォールト信号およびそれらのフォールトが関連付けられている処理要素をログに記録してもよく、一つまたは複数の処理要素が既定のフォールトの数を超えた(おそらく定義された期間内に)場合に、それらの一つまたは複数の処理要素は、無効にされ、または他にはGPUで受信したタスクの処理を防止され得る。
【0066】
図2に示すようなGPUは、既定の安全レベルを満たすようにタスクを処理するよう動作可能である。例えば、グラフィック処理システムは、ISO 26262のASIL BまたはASIL D基準を満たすように認証され得る。既定の安全レベルへの処理を必要とするタスクは、GPUが組み込まれ得るデータ処理システム300の安全重要な機能に関連するタスクであり得る。例えば、自動車用途では、安全重要であるタスクは、車線支援システムで使用するための一つまたは複数の車両カメラによってキャプチャされたデータの画像処理に関するタスクであり得る。
【0067】
本明細書に記載されるように、データ処理システムで処理されるタスクは、テストタスクであり得る。テストタスクは、処理システムの処理ユニット(例えば、
図2に示すGPU200)で受信することができる。テストタスクを使用して、処理ユニットの処理論理を検証し得る。テストタスクは、処理論理、例えば、処理要素上で実行するための命令の所定のセットを省略する。所定の命令セットは、所定の入力データに対して実行されるときに、処理論理に対して所定の動作セットを実行するように構成される。例えば、テストタスクは、処理要素上の論理の特定のセットを標的にするために実行されるデータ操作動作の特定のセットを必要としてもよく、またはメモリーとの間の特定の経路を標的にするために実行されるリード/ライトのセットを指定し得る。所定の命令セットは、異なる所定の入力データに対して実行されるとき、処理論理上で異なる所定の動作セットを実行するように構成され得る。テストタスクは、使用するようプログラムされるハードウェア配置(例えば、
図2に示すGPU200)上のロジックのサブセットを検証する。すなわち、テストタスクは、使用するようにプログラムされた特定の論理セットが正しく機能していることを検証することができる。言い換えれば、テストタスクは、コンポーネントが期待される結果をもたらすかどうかを見るための、コンポーネントへの刺激として特別に設計された特定のタスクを提供することを含む、ハードウェアテストへのアプローチを表す。異なるテストタスクは、異なるハードウェア配置(例えば、異なるグラフィック処理ユニット)のために設計され得る。すなわち、テストタスクを定義する命令の特定の所定のセットは、検証される処理論理のハードウェア配置および能力に応じて変化し得る。当業者(例えば、ソフトウェアエンジニア)は、命令により、検証される処理論理に好適な本明細書に記載の原理に従って、適切なテストタスクを設計することができるであろう。
【0068】
本明細書に記載の原理に従って、データ処理システムでのタスク(本明細書では入力タスクと称される)を処理する方法の例を
図4および
図5を参照して説明する。入力タスクは、処理システム(例えば、
図3に示す複数のプロセス307のうちの一つ)で実行されるプロセスによって生成されてもよく、処理システムで処理される別のタスクによって生成され(例えば、創出される)てもよく、または任意の他の適切な様式で生成され得ることが理解されるべきである。簡潔に述べると、入力タスクは、第一のタスクおよび第二のタスクを形成するように複製される。第一および第二のタスクの処理中にアクセスされるメモリーは、本明細書でさらに詳細に説明されるように、割り当てられている。第一および第二のタスクは、第一および第二の出力を生成するために、処理システムの処理論理によって処理される。例えば、第一のタスクは、第一の処理要素で処理され、第二のタスクは、それぞれ、第一および第二の出力を生成するように、第二の処理要素で処理される。それぞれ、第一および第二の出力の特性である、第一および第二のシグネチャが形成され得る。第一および第二のシグネチャャを比較してもよく、第一および第二のシグネチャが合致しない場合、フォールト信号を発生し得る。
【0069】
図4は、このような方法でタスクを処理するための、
図3に示すデータ処理システムのユニットの例示的な論理配置を示す。
図4は、第一の処理要素204aおよび第二の処理要素204bを示す。第一および第二の処理要素204aおよび204bは、
図2を参照して記載した処理要素204と同じ特性を有し得る。
図4はまた、第一および第二のチェックユニット208aおよび208bを示す。第一のチェックユニット208aは、第一の処理要素204aによって生成される出力をチェックするように構成され得る。第二のチェックユニット208bは、第二の処理要素204bによって生成される出力をチェックするように構成され得る。第一および第二のチェックユニット208aおよび208bは、
図2を参照して記載されるチェックユニット208の事例であり得る。
図4は、第一および第二のフィルターユニット400aおよび400bを示し、本明細書でさらに詳細に説明する。説明を容易にするために、第一および第二のフィルター400aおよび400bは、第一および第二のチェックユニット208aおよび208bと論理的に別個のユニットとして
図4に示される。ただし、第一および第二のフィルター400aおよび400bは、実際には
図2に示されるチェックユニット208の一部であり得る。第一および第二のフィルター400aおよび400bは、ハードウェア(例えば、固定機能回路)、ソフトウェア、またはそれらの任意の組み合わせに実装され得る。第一のフィルターユニット400aは、第一の処理要素204aによって生成される出力をフィルターするように構成され得る。第二のフィルターユニット400bは、第二の処理要素204bによって生成される出力をフィルターするように構成され得る。第一および第二のフィルターユニット400aおよび400bの出力は、データ処理システムのメモリー階層402で受信され得る。
図4に示すメモリー階層402は、第一のL0キャッシュ206-0aおよび第二のL0キャッシュ206-0bを含む。第一のL0キャッシュ206-0aは、第一の処理要素204aによってアクセス可能である。すなわち、第一の処理要素204aは、第一のL0キャッシュ206-0aからデータを読み取るか、またはデータを書き込むように要求する命令を出力し得るが、第二の処理要素204bはそれらを出力しなくてもよい。第二のL0キャッシュ206-0bは、第二の処理要素204bによってアクセス可能であり得る。すなわち、第二の処理要素204bは、第二のL0キャッシュ206-0bからデータを読み取るか、またはデータを書き込むように要求する命令を出力するが、第一の処理要素204aはそれらを出力しなくてもよい。第一のL0キャッシュ206-0aおよび第二のL0キャッシュ206-0bは、第一および第二の処理要素204aおよび204bを含むGPUに対してローカル(例えば、同じ物理チップ上に実装される)であり得る。第一のL0キャッシュ206-0aおよび第二のL0キャッシュ206-0bは、L1キャッシュ206-1からのデータで埋め込まれてもよい。L1キャッシュ206-1は、第一および第二の処理要素204aおよび204bの両方によってアクセス可能であり得る。すなわち、第一および第二の処理要素204aおよび204bの両方は、L1キャッシュ206-1からデータを読み取るか、またはL1キャッシュ206-1にデータを書き込むように要求する命令を出力し得る。L1キャッシュ206-1は、第一および第二の処理要素204aおよび204bを含むGPUに対してローカルであり得る(例えば、同じ物理チップ上に実装される)。L1キャッシュ206-1は、メモリー201からのデータ(例えば、
図2または
図3に示すメモリー201と同じ特性を有する)で埋め込まれてもよい。メモリー201は、第一および第二の処理要素204aおよび204bを含むGPUに対してローカルではなくてもよい(例えば、同じ物理チップ上に実装される)。メモリー階層402は、L1キャッシュ206-1とメモリー201(例えば、L2キャッシュ、またはL2およびL3キャッシュなど、
図4には示されていない)との間の一つまたは複数の追加のキャッシュレベルを含み得る。
図4に示す処理システムはまた、本明細書でさらに詳細に説明するように、第一のタスクおよび第二のタスクを形成するために入力タスクを複製するように構成されるタスク複製ユニット404を含む。
図4に示す処理システムはまた、本明細書でさらに詳細に説明するように、第一および第二のタスクの処理中にアクセスされるメモリーを割り当てるように構成されるメモリー割り当てユニット406を含む。タスク複製ユニット404およびメモリー割り当てユニット406は、処理システムのドライバー(例えば、
図3に示すドライバー309)に実装され得る。タスク複製ユニット404およびメモリー割り当てユニット406は、ハードウェア、ソフトウェア、またはそれらの任意の適切な組み合わせに実装され得る。
【0070】
図5は、本明細書に記載の原理に従ってデータ処理システムでタスクを処理する方法を示す。タスクは、既定の安全レベルに従って処理される安全タスクであり得る。タスクは、本明細書に記述される一つまたは複数の計算作業項目を含む計算作業グループであり得る。タスクは、本明細書に記載されるようなテストタスクであり得る。
【0071】
入力タスクは、第一のタスクおよび第二のタスクを形成するように、ステップS502で複製される。例えば、第一のタスクは、「ミッション」タスクと呼んでもよく、第二のタスクは、「安全タスク」または「冗長タスク」と呼んでもよい。タスクは、タスク複製ユニット404によって複製され得る。実施例では、入力タスクの複製は、そのタスクのコピーを作成することを含み得る。例えば、第二のタスクは、第一のタスクを定義する各命令またはコードの行のコピーによって定義され得る。別の実施例では、入力タスクの複製は、(例えば、入力タスクのコピーを作成することなく)2回処理するために、入力タスクを呼び出すことを含み得る。すなわち、入力タスクは、メモリー(例えば、メモリー201)に格納されるプログラムによって定義され得る。入力タスクは、処理要素にメモリー内のそのプログラムへの参照を提供することによって、処理のために呼び出すことができる。従って、入力タスクは、第一のタスクを処理する処理要素へのメモリーへの参照を提供し、第二のタスクを処理する処理要素へのメモリーへの同じ参照を提供する、タスク複製ユニット404によって複製され得る。
【0072】
ステップS504では、第一および第二のタスクの処理中にアクセスされるメモリーが割り当てられている。すなわち、メモリー201の一つまたは複数の部分は、第一および第二のタスクの処理中にアクセスされるデータを記憶するために割り当てられている。メモリーは、メモリー割り当てユニット406によって割り当てられてもよい。
【0073】
タスクの処理中に、異なるタイプのデータにアクセスし得る。一つの例は、タスクを処理する処理要素が読むことが許可されるが、書くことが許可されていないデータである、「読み取り専用」データである。すなわち、処理要素は、読み取り専用データを含むメモリーアドレスへの書き込みを許可されていない。タスクの処理中にアクセスされ得る別のタイプのデータは、タスクの処理要素の処理がメモリーへの読み取り、変更、および書き込みを許可されるデータである、「読み取り/書き込み」データである。すなわち、処理要素は、メモリーから読み取り/書き込みデータを読み取って、処理されるタスクに従ってそのデータを修正し、その変更されたデータをメモリーに書き戻すことができる。
【0074】
本明細書に記載の原理に従い、第一のタスクおよび第二のタスクの処理の間にアクセスされる割り当てられたメモリーは、第一のタスクの処理の間にアクセスされる読み取り/書き込みデータを記憶するように構成されるメモリーの第一のブロックと、第二のタスクの処理中にアクセスされるその読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第二のブロックと、第一のタスクおよび第二のタスクの両方の処理の間にアクセスされる読み取り専用データを記憶するように構成されるメモリーの第三のブロックとを含む。メモリーの第一および第二のブロックは、「読み取り/書き込み」バッファと呼ばれ得る。メモリーの第三のブロックは、「読み取り専用」バッファと称され得る。メモリーの第一のブロックは、第二のタスクの処理中にアクセスすることができない。すなわち、第二のタスクを処理する処理要素は、第二のタスクの処理中に、メモリーの第一のブロックを変更(例えば、変更した読み取り/書き込みデータを書き込み)することができない。メモリーの第二のブロックは、第一のタスクの処理中にアクセスすることができない。すなわち、第一のタスクを処理する処理要素は、第一のタスクの処理中に、メモリーの第二のブロックを変更(例えば、変更した読み取り/書き込みデータを書き込み)することができない。
【0075】
メモリー割り当てユニット406は、第一の処理要素および第二の処理要素が、読み取り/書き込みデータの同じインスタンスへのアクセスを共有しないように、このように、メモリーの第一のブロックおよびメモリーの第二のブロックを割り当てる。代わりに、第一の処理要素は、メモリーの第一のブロック内に記憶される読み取り/書き込みデータへのアクセスが許可され、一方で、第二の処理要素は、メモリーの第二のブロック内のその読み取り/書き込みデータのコピー(例えば、複製)へのアクセスが許可される。この方法でメモリーの第一および第二のブロックを割り当てる理由は、例えば、第一および第二の処理要素が、第一および第二のタスクの処理中に、読み取り/書き込みデータへのアクセスを共有することを許可され、第一のタスクを処理する第一の処理要素がそのデータを読み取り、修正したデータを書き戻す前に、それを修正する一連の命令を実行し、その後、第二のタスクを処理する第二の処理要素が、オリジナルの読み取り/書き込みデータにアクセスして、同じ命令セットを実行することを試みるならば、第二のタスクは、実際には、変更された読み取り/書き込みデータにアクセスすることであり、従って、同じ命令セットを実行することが、異なる出力を形成することになる。これが発生した場合、チェックユニット208(例えば、第一および第二のチェックユニットインスタンス208aおよび208bを介して)は、第一および第二の処理要素の出力の不一致を識別し、それによって、第一および第二の処理要素自体が正常に動作していたとしても、フォールト信号を発生させる。
【0076】
対照的に、第一および第二の処理要素は、読み取り専用データを修正または上書きすることを許可されないため、それらは読み取り専用データへのアクセスを共有することを許可され得る。すなわち、読み取り専用データは、いずれの処理要素によっても変更することができないため、読み取り専用データを記憶するように構成される共有メモリーアドレスにアクセスする両方の処理要素が、一方の処理要素がそのデータその後その他のデータにアクセスする場合であっても、同じ読み取り専用データにアクセスすることを保証できる。従って、メモリー割り当てユニット406は、第一のタスクおよび第二のタスクの両方の処理の間にアクセスされる読み取り専用データを記憶するように構成されるメモリーの第三のブロックを割り当てることができる。
【0077】
メモリーの割り当ては、
図6a、
図6b、および
図6cを参照してさらに詳細に説明される。
図6aは、第一の606、第二の608および第三の610ブロックのメモリーが割り当てられた、メモリーのヒープ600を示す。メモリーのヒープは、データ処理システムでの一つまたは複数の入力タスクの処理のために、データを記憶するために確保された連続的なメモリーブロックであり得る。メモリーのヒープは、データ処理システムのメモリー201内にあり得る。
図6aは、第一のタスクの処理中にアクセスされる読み取り/書き込みデータを記憶するように構成されるメモリーの第一のブロック606と、第二のタスクの処理中にアクセスされるその読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第二のブロック608を示す。メモリーの第一のブロック606は、メモリーのヒープ600内の連続的なメモリーアドレスの第一の範囲をまたいでもよい。メモリーの第二のブロック608は、メモリーのヒープ600内の連続メモリーアドレスの第二の範囲をまたいでもよい。メモリーの第一のブロック606の各メモリーアドレスは、固定メモリーアドレスストライド612によって、メモリーの第二のブロック608の対応するメモリーアドレスからオフセットされ得る。例えば、メモリーの第一のブロック606のベース(例えば、第一の)メモリーアドレスは、固定メモリーアドレスストライド612によって、メモリーの第二のブロック608の対応するベース(例えば、第一の)メモリーアドレスからオフセットされ得る。メモリーの第一および第二のブロック内の対応するメモリーアドレスは、同じ読み取り/書き込みデータを記憶するように構成され得る。すなわち、読み取り/書き込みデータは、メモリーの第一のブロック606のメモリーアドレスに格納されてもよく、一方で、その読み取り/書き込みデータのコピーは、メモリーの第二のブロック608の対応するメモリーアドレスに格納され得る。
【0078】
メモリーの第一および第二のブロックの対応するメモリーアドレスをマッピングするための固定メモリーアドレスストライドの使用は、例示によってのみ与えられ、メモリーの第一および第二のブロックの対応するメモリーアドレス間のマッピングのための他の方法を使用できることが理解されるべきである。例えば、メモリーの第一および第二のブロック内の対応するメモリーアドレスは、ルックアップテーブルを使用して互いにマッピングされ得る。ルックアップテーブルは、メモリー201に格納され得る。メモリー割り当てユニット406は、ルックアップテーブルに、メモリーの第一および第二のブロック内の対応するメモリーアドレス間のマッピングを投入する役割を有し得る。この例では、メモリーの第一および第二のブロック内の対応するメモリーアドレスの間に、いかなる固定関係も必要としない。
【0079】
図6aはまた、第一のタスクおよび第二のタスクの両方の処理の間にアクセスされる、読み取り専用データを記憶するように構成されるメモリーの第三のブロック610を示す。メモリーの第三のブロック610は、メモリーのヒープ600内の連続的なメモリーアドレスの第三の範囲をまたいでもよい。
【0080】
複数の入力タスクは、データ処理システムで処理されてもよく、固定メモリーアドレスストライドは、第一および第二のタスクのそれぞれのそれぞれの複製ペアに対して同一であり得る。これは
図6bを参照して理解することができる。このようにして、メモリーのヒープ600は、第一のサブヒープ602および第二のサブヒープ604に便利に「分割」され得る。第一のサブヒープ602は、「ミッションヒープ」と呼んでもよく、第二のサブヒープ604は、「安全サブヒープ」と呼んでもよい。第一のサブヒープ602のベース(例えば、第一の)メモリーアドレスは、固定メモリーアドレスストライド612によって、対応するベース(例えば、第一の)メモリーアドレス第二のサブヒープ604からオフセットされ得る。この例では、固定メモリーアドレスストライド612は、メモリーのヒープ600の半分のサイズとして便利に定義され得る。このように、ミッションタスクの処理中にアクセスされるメモリーの第一のブロックが、固定メモリーアドレスストライド612によって、ミッションヒープ602内に割り当てられるとき、対応する安全タスクの処理中にアクセスされる対応するメモリーの第二のブロックが、安全ヒープ604内に割り当てられる。例えば、
図6bは、第一の606a、第二の608aおよび第三の610aブロックのメモリーが、第一の入力タスクに関連する第一のタスクおよび第二のタスクの処理中に、アクセスされるように割り当てられ、第一の606b、第二の608bおよび第三の610bブロックのメモリーが、第二の入力タスクに関連する第一および第二のタスクの処理中にアクセスされるように割り当てられた、メモリーのヒープ600を示す。
【0081】
図6bを参照して記載されるようにメモリーを割り当てることは、同じ固定メモリーアドレスストライド612が各入力タスクに使用されるとき、メモリーリソースの割り当てを、計算上より簡単に管理できるという点で有用である。さらに、ドライバー(例えば、
図3のドライバー309)は、入力タスク(例えば、
図3のプロセス307)を発行するプロセスに対して、利用可能なメモリーの半分のみを「露出」(例えば、利用可能性を示す)することによって、メモリーリソースを管理することを可能にする。例えば、12GBのメモリーが実際に利用可能である場合、ドライバー309は、6GBのメモリーが入力タスクの処理中にアクセス可能であることをプロセス307に示し得る。プロセス307は、ドライバー309が、入力タスクの処理中にアクセスされる読み取り/書き込みデータを複製するように構成されることを認識しておらず、従って、要求するメモリー量のこの複製を考慮しない。利用可能なメモリーの半分のみをプロセス307に曝露することによってのみ、(プロセス307によって要求されるように)タスクの処理中にアクセスされるデータならびに読み取り/書き込みデータのコピーを記憶するのに十分なメモリーが利用可能であること、が保証され得る。
図6bに示すように、同じ固定メモリーアドレスストライド612を使用し、かつミッションヒープ602において読み取り専用バッファ610aおよび610bに常にメモリーを割り当てることによって、スペースが、ミッションヒープ602の読み取り/書き込みバッファ606a、606bに利用可能な場合、メモリーの対応するブロックが安全ヒープ604内のその読み取り/書き込みバッファ608a、608bのコピーに対して、常に利用可能であることが保証される。とは言え、このアプローチの潜在的なデメリットは、安全ヒープ604が、まばらに埋め込まれ得ることである。
【0082】
従って、代替的に、複数の入力タスクについて、固定メモリーアドレスストライドは、第一および第二のタスクのそれぞれの複製ペアの間で可変であり得る。言い換えれば、メモリーアドレスストライドは、特定の入力タスクから形成される第一および第二のタスクの各個々のペアに対して「固定」され得るが、異なるそれぞれの入力タスクから形成される第一および第二のタスクの異なるペアに適用されるメモリーアドレスストライドは異なっていてもよい。これは、
図6cを参照して理解することができる。
図6cは、第一の606aブロック、第二の608aブロックおよび第三の610aブロックのメモリーが、第一の入力タスクに関連する第一のタスクおよび第二のタスクの処理中に、アクセスされるように割り当てられ、第一の606bブロック、第二の608bブロックおよび第三の610bブロックのメモリーが、第二の入力タスクに関連する第一のタスクおよび第二のタスクの処理中にアクセスされるように割り当てられた、メモリーのヒープ600を示す。ここで、第一の入力タスクに対する第一の606aブロックと第二の608aブロックとの間の固定メモリーアドレスストライド612aは、第二の入力タスクに対する第一の606bブロックと第二の608bブロックとの間の固定メモリーアドレスストライド612bよりも大きい。各入力タスクに対する固定メモリーアドレスストライドは、利用可能なメモリーに依存してドライバーによって動的に決定され得る。さらに、
図6cは、メモリー610aおよび610bの第三のブロックが、例えば、メモリー可用性に応じて、メモリーのヒープ600の任意の部分において動的に割り当てることができることを示す。このアプローチは、
図6bを参照して説明されるアプローチと比較して、メモリーのヒープがより効率的(例えば、より少ないスパースで)に充填され得るので有利である。とは言え、この方法でメモリーを割り当てることは、計算上、管理が容易ではない場合がある。
【0083】
図6bおよび
図6cでは、第一および第二の入力タスクはそれぞれ、第一および第二のタスクのそれぞれの複製ペアの処理中にアクセスされる、読み取り専用データ(例えば、ブロック610aおよび610b)データを記憶するように構成されるメモリーの第三のブロックに割り当てられることが示される。実情はそうである必要はないことが理解されるべきである。第一の入力タスクおよび第二の入力タスクが第一のタスクおよび第二のタスクのそれぞれの複製ペアの処理中にアクセスされる読み取り専用データを記憶するように構成されるメモリーの単一の第三のブロックへのアクセスを共有することが可能である(例えば、第一の入力タスクおよび第二の入力タスクが同一の読み取り専用データを参照する)。
【0084】
図5に戻ると、ステップS506では、第一のタスクは第一の処理要素204aで処理され、第二のタスクは、それぞれ、第一および第二の出力を生成するように、第二の処理要素204bで処理される。第一および第二の処理要素204aおよび204bは、同一であり得る。すなわち、第一および第二の処理要素204aおよび204bは、同じハードウェアを含んでもよく、同じ様式で構成され得る(例えば、
図2のファームウェア207によって、
図3のドライバー307の指示の下で潜在的に)。また、本明細書に記載されるように、第一および第二のタスクは複製である。従って、任意の故障が存在しない場合、第一および第二の処理要素204aおよび204bのそれぞれで、第一および第二のタスクの処理中に発生する計算は、同一であるべきであり、一致出力を生じさせるべきである。
【0085】
ドライバー(例えば、
図3のドライバー309)は、それぞれ、第一および第二の処理要素204aおよび204b上で処理するための第一および第二のタスクの送信(例えば、スケジューリング)の役割を持ち得る。第一および第二のタスクは、それぞれ第一および第二の処理要素204aおよび204bに対して、ドライバーによって並列(例えば、同時に)に送信され得る。上述のように、L1キャッシュ206-1は、メモリー201からのデータで埋め込まれてもよく(例えば、ステップS504で割り当てられたメモリーからのデータを使用して)、一方、第一のL0キャッシュ206-0aおよび第二のL0キャッシュ206-0bは、L1キャッシュ206-1からのデータで埋め込まれてもよい。従って、第一のタスクおよび第二のタスクを並行して送信することによって、データ処理システムは、それらのタスクの処理(例えば、L1キャッシュ206-1)中にアクセスされるデータのキャッシュから利益を得る可能性が高い。すなわち、第一のタスクと第二のタスクを同時に送信することによって、各処理要素が、そのデータをメモリー201から別々に取り出す必要があるというよりも、それらのタスク(または少なくともその大部分)の処理中にアクセスされるデータは、メモリー201から一度フェッチされ、L1キャッシュ206-1にキャッシュされて、第一および第二のタスクの両方によってアクセスされる可能性が高い。
【0086】
第一および第二のタスクは、第一および第二の処理要素204aおよび204bに同時に送信され得るが、第一および第二の処理要素204aおよび204bは、それぞれ第一および第二のタスクを独立して処理するよう構成され得る。すなわち、第一および第二の処理要素204aは、それらのタスクをサイクルごとに同時に実行するように、第一および第二のタスクの複製ペアごとに同期される必要はない。
【0087】
本明細書に記載されるように、第一のタスクは、第一の処理要素204aで処理され、第二のタスクは、それぞれ、第一および第二の出力を生成するように、第二の処理要素204bで処理される。出力は、そのタスクの処理のための最終出力であってもよく、またはそのタスクの処理中に生成される中間出力であり得る。例えば、中間出力は、タスクの処理中に生成される負荷、記憶、またはアトミック命令のうちの一つまたは複数であり得る。中間出力は、メモリーアドレスへの参照を含み得る。すなわち、中間出力は、タスクの処理中に使用されるメモリー内のデータにアクセスする要求を含み得る。
【0088】
第一および第二の処理要素204aおよび204bにおける第一および第二のタスクの処理中に生成される中間出力に応答して、各チェックユニット208a、208bおよびフィルターユニット400a、400bによって実行されるステップの例示的なセットが、
図7を参照して説明される。
【0089】
ステップS702では、処理要素でのタスクの処理中に生成される出力が、チェックユニット(例えば、チェックユニット208aまたは208b)で受信される。チェックユニット208aおよび208bで実施されるステップは、それらが関連付けられている処理要素が第一の処理(例えば、「ミッション」)または第二の処理(例えば、「安全性」タスク)であるか否かに関わらず同一である。本明細書に記載されるように、第一および第二のタスクは複製であり、第一および第二の処理要素204aおよび204bは同一であることが好ましいため、任意の故障が存在しない場合、第一および第二のタスクの処理は同一であるべきであり、一致出力を得るべきである。
【0090】
ステップS704では、チェックユニットは、受信した出力の特徴であるシグネチャを形成する。例えば、シグネチャは、処理要素から出力される出力データの特徴であり得る。言い換えれば、シグネチャは、処理要素から出力されるとき点での出力データの特徴であり得る。本明細書に記載されるように、受信した出力のシグネチャ特性を形成することは、その出力に対して、それぞれ、チェックサム、CRC、ハッシュ、およびフィンガープリントのうちの一つまたは複数を実行することを含み得る。チェックユニットは、タスクに関して処理要素から受信された出力データ(参照メモリーアドレスを含んでもよい)の全てにわたりシグネチャを形成することが好ましいが、シグネチャは、タスクに関して処理要素から受信した出力データの一部(例えば、全てではない)にわたり形成され得る。例えば、第一および第二のタスクを形成するために入力タスクを複製する場合、タスク複製ユニット404(例えば、
図3のドライバー309で実装される)は、メモリーの第一、第二および第三のブロック内のメモリーアドレスへの任意の参照をフラグでマークし得る。第一および第二のタスクはまた、タスク複製ユニット404がフラグを立てていない他のメモリーアドレスへの参照、例えば、非決定性であり得る、スピルレジスタ内のメモリーアドレスへの参照を含んでもよい。チェックユニットは、フラグ付けされたその出力データ内に存在するメモリーアドレスのみを含む、出力データ上にシグネチャを形成し得る。このようにして、メモリーアドレスへの非決定性参照をシグネチャから除外することができる。シグネチャは、第一および第二のタスクの他方の処理中に生成される対応する出力に対して形成されるシグネチャと比較するために、格納され得る(例えば、
図2に示すデータストア209に)。シグネチャの比較、および該当する場合には、フォールト信号を発生させることが、本明細書で前述された。
【0091】
受信した出力の特徴であるシグネチャは、メモリー階層402にアクセスする出力の前に、チェックユニット(例えば、チェックユニット208aまたは208b)によって形成されることが好ましいことに留意されたい。すなわち、受信した出力の特徴であるシグネチャは、それぞれのL0キャッシュ(例えば、L0キャッシュ206-0aまたは206-0b)にアクセスする出力の前に、チェックユニット(例えば、チェックユニット208aまたは208b)によって形成されることが好ましい。これは、L0キャッシュの出力が、キャッシュラインが立ち退くタイミングに応じて非決定性である可能性があるからであり、LL0キャッシュへの入力が同一であっても、出力がそうでない場合がある。シグネチャを形成した後、チェックユニット(例えば、チェックユニット208aまたは208b)は、中間出力をそれぞれのフィルターユニット(例えば、フィルターユニット400aまたは400b)上に転送し得る。
【0092】
ステップS706では、フィルターユニット(例えば、フィルターユニット400aまたは400b)は、中間出力が、読み取り/書き込みデータを記憶するように構成されるメモリーアドレスへの参照を含むかどうかを決定することができる。一つの例では、第一および第二のタスクを形成するために入力タスクを複製するとき、タスク複製ユニット404(例えば、
図3のドライバー309で実装される)は、第一および第二のタスクに読み取り/書き込みデータをフラグで記憶するように構成されるメモリーアドレスへの任意の参照をマークして、フィルターユニットがそれらのメモリーアドレスを迅速に識別できるようにし得る。
【0093】
中間出力が、読み取り/書き込みデータを記憶するように構成されるメモリーアドレスへの参照を含まない場合、ステップS708でメモリー階層402に転送され得る。
【0094】
中間出力が、ステップS710で、読み取り/書き込みデータを記憶するように構成されるメモリーアドレスへの参照を含む場合、フィルターユニット(例えば、フィルターユニット400aまたは400b)は、中間出力が第二のタスクの処理中に生成されたかどうかを決定し得る。すなわち、例えば、フィルターユニット(例えば、フィルターユニット400aまたは400b)は、中間出力が第二の処理要素204bから受信されたかどうかを決定し得る。一つの例では、第二の処理要素による処理のために第二のタスクを送信するとき、ドライバー(例えば、
図3のドライバー309)は、例えば、フィルターユニット400bに関連付けられるレジスタ内に構成ビットを設定することによって、第二の処理要素204bに関連付けられているとして第二のフィルターユニット400bを識別し得る。従って、フィルターユニット(例えば、フィルターユニット400aまたは400b)は、前述の構成ビットを検査することによって、第二のタスクの処理中に中間出力が生成されたかどうかを決定し得る。
【0095】
第二のタスクの処理中に中間出力が生成されなかった(例えば、第一のタスクの処理中に生成された)と判定された場合、ステップS712でメモリー階層402に転送され得る。ここで、中間出力は、参照されるメモリーアドレス(例えば、メモリーの第一のブロック内)で読み取り/書き込みデータにアクセスできる。
【0096】
中間出力が第二のタスクの処理中に生成されたと判定される場合、読み取り/書き込みデータを記憶するように構成されるメモリーアドレスへの参照は、ステップS714で更新され得る。すなわち、メモリーの第一のブロック内のメモリーアドレスへの参照は、メモリーの第二のブロック内の対応するメモリーアドレスを参照するように、フィルターユニット400bによって変更され得る。実施例では、これは、例えば、メモリーの第二のブロック内の対応するメモリーアドレスを決定するように、メモリーの第一のブロック内のメモリーアドレス上に固定メモリーアドレスストライドを追加することによって、固定メモリーアドレスストライドに依存して達成され得る。別の実施例では、これは、ルックアップテーブルを参照して、メモリーの第一のブロックのメモリーアドレスを、メモリーの第二のブロックの対応するメモリーアドレスにマッピングすることによって達成することができる。更新された中間出力は、メモリー階層402上に前方にあってもよく、メモリーの第二のブロック内の対応するメモリーアドレスは、更新された参照メモリーアドレスでアクセスすることができる。例えば、メモリーの第二のブロック内の対応するメモリーアドレスにアクセスすることは、メモリーの第二のブロックから読み取り/書き込みデータを読み取り、そのデータを第二の処理要素に返すことを含み得る。実施例では、メモリー階層402から返されるデータは、メモリーアドレスへの参照を含んでおらず、従って、フィルターユニット400bを介して経路指定される必要はない。別の実施例では、メモリーの第二のブロック内の対応するメモリーアドレスへのアクセスは、第二の処理要素によって変更された読み取り/書き込みデータを、対応するメモリーアドレスに書き込むことを含み得る。
【0097】
すなわち、フィルターユニット(例えば、フィルターユニット400aまたは400b)は、(i)読み取り/書き込みデータを記憶するように構成されるメモリーアドレスへの参照を含み、および(ii)第二のタスクの処理中に生成されると決定されるとき、中間出力を更新し得る。この目的のために、ステップS706およびS710は、
図7を参照して記載したものとは逆の順序で実施できることが理解されるべきである。
【0098】
図7を参照して記載した実施例では、フィルターユニット400aおよび400bは、チェックユニット208aおよび208bの後に論理的に位置付けられることに留意されたい。このように、第二の処理要素によって出力で参照される読み取り/書き込みメモリーアドレスの更新は、チェックユニット208aおよび208bによって形成されるシグネチャに差異を引き起こさない。実情はそうである必要はないことが理解されるべきである。例えば、チェックユニット208aおよび208bは、中間出力で参照されるメモリーアドレスを考慮しないシグネチャを形成するように構成され得る。この例では、フィルターユニット400aおよび400bは、それぞれチェックユニット208aおよび208bの前に論理的に配置され得る。別の方法として、この実施例では、ドライバー(例えば、
図3のドライバー309)は、第二の処理要素204bでの処理のためにそれを送信する前に、第二のタスクのメモリーの第一のブロックのメモリーアドレスへの任意の参照を更新し得る。この場合、フィルターユニット400aおよび400bは存在する必要はない。
【0099】
第一のタスクと第二のタスクの処理が完了し、中間出力または最終出力(例えば、それぞれの中間出力および最終出力の一致の全て)のいずれかに応答してフォールト信号が発生していない場合、第一のタスクまたは第二のタスクのいずれかの最終処理された出力は、入力タスクの処理された出力として取り得る。
【0100】
図4に示すように、第一および第二のタスクは、異なる処理要素である、第一の処理要素および第二の処理要素によって処理される。また、本明細書に記載の原理による他の実施例では、第一および第二のタスクは、例えば、異なる時点で、同じ処理要素によって処理され得ることが理解されるべきである。すなわち、第一および第二のタスクは、同じ処理要素によって処理のために送信され得る。第一のパスでは、処理要素は、第一のタスクを処理し得る。処理要素に関連付けられるチェックユニットは、第一のタスクの処理中に生成された出力に対するシグネチャを形成し、それらのシグネチャを格納し得る。第二のパスでは、処理要素は、第二のタスクを処理し得る。チェックユニットは、第二のタスクの処理中に生成された出力に対するシグネチャを形成し、それらを第一のタスクに対して形成されるそれぞれの記憶されたシグネチャと比較し得る。処理要素に関連付けられるフィルターユニットは、処理要素が第一のパスまたは第二のパスを実行するかを決定することができ、第二のタスクの処理中に生成された中間出力に読み取り/書き込みデータを記憶するように構成されるメモリーアドレスへの参照を更新することができる。例えば、処理要素に関連付けられるレジスタ内の構成ビットを使用して、その処理要素が第一のパス(例えば、バイナリ「0」)または第二のパス(例えば、バイナリ「1」)のいずれを行っているかを示し得る。
【0101】
別の実施例では、
図4に示すデータ処理システムは、第三の処理要素、第三のチェックユニット、第三のフィルターユニット、および第三のL0キャッシュを追加的に含んでもよい。タスク複製ユニット404(例えば、
図3のドライバー309で実装される)は、第三のタスクを追加的に形成するように、入力タスクを複製し得る。メモリー割り当てユニット406は、第三のタスクの処理中にアクセスされる読み取り/書き込みデータのコピーを記憶するように構成されるメモリーの第四のブロックを追加的に含むメモリーを割り当ててもよい。本明細書に記載の原理は、第三の処理要素におけるその第三のタスクの処理に適用することができる。この例では、第一、第二、および第三の処理要素のうちの一つがフォールトを経験する時でさえ、入力タスクの処理のための出力を与えることができる。すなわち、入力タスクの出力は、合致する二つの処理要素の出力として与えられてもよく、一方、非合致出力を提供する他の処理要素には、フォールトがあるとみなすことができる。
【0102】
さらに別の例では、第一および第二のタスクの処理中にアクセスされる割り当てられたメモリーは、第一のタスクの処理中に生成された書き込み専用データを記憶するように構成されるメモリーの第四のブロック、および第二のタスクの処理中に生成された対応する書き込み専用データを記憶するように構成されるメモリーの第五のブロックをさらに含み得る。あるいは、第一および第二のタスクの処理中にアクセスされる割り当てられたメモリーは、第一のタスクの処理中にのみ生成される書き込み専用データを記憶するように構成されるメモリーの第四のブロックをさらに含み得る。この例では、フィルターユニット400bは、第二のタスクの処理および/または帯域幅の保存に関連する遅延を減少させるために、第二のタスク(例えば、「安全性」または「冗長性」タスク)を処理する第二の処理要素による書き込み専用データの書き込みをフィルターリング(例えば、防止)するように構成され得る。この例では、第一のタスクの処理中に発生される最終出力は、入力タスクの処理のための出力として使用され得る(第一のタスクおよび第二のタスクの処理中にフォールト信号が発生していないと仮定する)。
【0103】
図2~4のデータ処理システムは、いくつかの機能ブロックを含むものとして示される。これは概略的のみであり、こうしたエンティティの異なるロジック要素間の厳密な区分を定義することを意図していない。各機能ブロックは、任意の適切な様式で提供され得る。データ処理システムによって形成される本明細書に記載の中間値は、いずれの点でもデータ処理システムによって物理的に生成される必要はなく、またその入力と出力との間でデータ処理システムによって実施される処理を好都合に説明する論理値を単に表し得ることが理解されるべきである。
【0104】
本明細書に記載のデータ処理システムは、集積回路上のハードウェア内に具体化され得る。本明細書に記載のデータ処理システムは、本明細書に記載の方法のいずれかを実行するように構成され得る。一般に、上述の機能、方法、技術、または構成要素のいずれも、ソフトウェア、ファームウェア、ハードウェア(例えば、固定論理回路)、またはそれらの任意の組み合わせに実装することができる。用語「モジュール」、「機能性」、「コンポーネント」、「要素」、「ユニット」、「ブロック」、および「ロジック」は、一般にソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを表すために本明細書で使用され得る。ソフトウェア実装の場合、モジュール、機能、コンポーネント、要素、ユニット、ブロック、またはロジックは、プロセッサー上で実行されるときに指定されたタスクを実行するプログラムコードを表す。本明細書に記載されるアルゴリズムおよび方法は、プロセッサーにアルゴリズム/方法を実行させるコードを実行する一つまたは複数のプロセッサーによって実施され得る。コンピューター可読記憶媒体の例としては、ランダムアクセスメモリー(RAM)、読み取り専用メモリー(ROM)、光ディスク、フラッシュメモリー、ハードディスクメモリー、ならびに磁気、光学、およびその他の技法を使用して、命令またはその他のデータを記憶し、マシンによってアクセスすることができるその他のメモリーデバイスが挙げられる。
【0105】
コンピュータープログラムコードおよびコンピューター可読命令という用語は、本明細書で使用される場合、機械言語、解釈言語、またはスクリプト言語で表現されるコードを含む、プロセッサーに対する任意の種類の実行可能コードを指す。実行可能コードとしては、バイナリコード、マシンコード、バイトコード、集積回路を定義するコード(ハードウェア記述言語またはネットリストなど)、およびC、Java、またはOpenCLなどのプログラミング言語コードで表現されたコードが挙げられる。実行可能コードは、例えば、仮想マシンまたはその他のソフトウェア環境で適切に実行、処理、解釈、コンパイル、実行されるときに、実行可能コードがサポートされるコンピューターシステムのプロセッサーに、コードによって指定されたタスクを実施させる、任意の種類のソフトウェア、ファームウェア、スクリプト、モジュール、またはライブラリであり得る。
【0106】
プロセッサー、コンピューター、またはコンピューターシステムは、命令を実行することができるように、処理能力を有する任意の種類のデバイス、マシンもしくは専用回路、またはそれらの収集もしくは部分であり得る。プロセッサーは、例えば、CPU、GPU、NNA、システムオンチップ、状態マシン、メディアプロセッサー、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ、フィールドプログラマブルゲートアレイ(FPGA)などの任意の種類の汎用プロセッサーまたは専用プロセッサーであり得る。コンピューターまたはコンピューターシステムは、一つまたは複数のプロセッサーを含んでもよい。
【0107】
また、所望の機能を実行するために、集積回路を設計する、またはプログラム可能なチップを構成するために使用されるように、HDL(ハードウェア記述言語)ソフトウェアなどの、本明細書に記載のハードウェアの構成を定義するソフトウェアを包含することも意図される。すなわち、集積回路製造システムで処理(すなわち、実行)されるときに、本明細書に記載の方法のいずれかを実施するように構成されるデータ処理システムを製造するため、または本明細書に記載の任意の装置を含むデータ処理システムを製造するためのシステムを構成する、集積回路定義データセットの形態のコンピューター可読プログラムコードがその上にコードされたコンピューター可読記憶媒体が提供され得る。集積回路定義データセットは、例えば、集積回路記述であり得る。
【0108】
従って、集積回路製造システムで、本明細書に記載のデータ処理システムを製造する方法が、提供され得る。さらに、集積回路製造システムで処理されるときに、データ処理システムを製造する方法を実施させる、集積回路定義データセットが提供され得る。
【0109】
集積回路定義データセットは、例えば、プログラム可能なチップを構成するためのネットリスト、コードとして、レジスタ転送レベル(RTL)コードとしてのものを含む任意のレベルで集積回路における製造に適したハードウェアを定義するハードウェア記述言語として、VerilogまたはVHDLなどの高レベル回路表現として、ならびにOASIS(RTM)およびGDSIIなどの低レベル回路表現としてのコンピューターコードの形態であり得る。集積回路における製造に適したハードウェアを論理的に定義するより高レベルの表現(RTLなど)は、表現によってそのように定義された集積回路の製造定義を生成するために、回路要素の定義およびそれらの要素を組み合わせるためのルールを含むソフトウェア環境のコンテクストで、集積回路の製造定義を生成するように構成されるコンピューターシステムで処理され得る。マシンを定義するためにコンピューターシステムで実行されるソフトウェアの事例では典型的であるように、集積回路の製造定義を生成するために構成されるコンピューターシステムが、その集積回路の製造定義を生成するために集積回路を定義するコードを実行するために、一つまたは複数の中間ユーザーステップ(例えば、コマンド、変数などの提供)が必要とされ得る。
【0110】
ここで、データ処理システムを製造するシステムを構成するために、集積回路製造システムで集積回路定義データセットを処理する実施例を、
図8に関して説明する。
【0111】
図8は、本明細書の実施例のいずれかに記載のデータ処理システムを製造するように構成される、集積回路(IC)製造システム802の一実施例を示す。詳細には、IC製造システム802は、レイアウト処理システム804と、集積回路生成システム806と、を含む。IC製造システム802は、IC定義データセット(例えば、本明細書の実施例のいずれかに記載のようなデータ処理システムを定義する)を受信し、IC定義データセットを処理し、そしてIC定義データセット(例えば、本明細書の実施例のいずれかに記載のようなデータ処理システムを具体化する)に従ってICを生成するように構成される。IC定義データセットの処理は、本明細書の実施例のいずれかに記載のデータ処理システムを具体化する集積回路を製造するために、IC製造システム802を構成する。
【0112】
レイアウト処理システム804は、IC定義データセットを受信および処理して、回路レイアウトを決定するように構成される。IC定義データセットからの回路レイアウトを決定する方法は、当技術分野で知られており、例えば、RTLコードを合成して、論理的構成要素(例えば、NAND、NOR、AND、OR、MUX、およびFLIP-FLOP構成要素)の観点から生成される回路のゲートレベル表現を決定することが関与し得る。論理的構成要素に対する位置情報を決定することにより、回路レイアウトを、回路のゲートレベル表現から決定することができる。これは、回路レイアウトを最適化するために、自動的に行われてもよく、またはユーザーの関与によって行われてもよい。レイアウト処理システム804が回路レイアウトを決定したとき、レイアウト処理システム804は、IC生成システム806に、回路レイアウト定義を出力し得る。回路レイアウト定義は、例えば、回路レイアウト記述であり得る。
【0113】
IC生成システム806は、当技術分野で公知のように、回路レイアウト定義に従ってICを生成する。例えば、IC生成システム806は、ICを生成するために、半導体デバイス組立プロセスを実装してもよく、これには、その間に半導体材料で作製されたウェハ上に、電子回路が徐々に生成される、フォトリソグラフィーおよび化学処理ステップの複数ステップのシーケンスが関与し得る。回路レイアウト定義は、回路定義に従ってICを生成するためのリソグラフィープロセスで使用することができる、マスクの形態であり得る。別の方法として、IC生成システム806に提供される回路レイアウト定義は、IC生成システム806が、ICの生成で使用するための適切なマスクを形成するために使用することができる、コンピューター可読コードの形態であり得る。
【0114】
IC製造システム802によって実施される異なるプロセスは、全て一つの場所で、例えば、一人の当事者によって実装され得る。別の方法として、IC製造システム802は、プロセスの一部が異なる場所で実施されてもよく、かつ異なる当事者によって実行され得るような、分散システムであり得る。例えば、(i)IC定義データセットを表すRTLコードを合成して、生成される回路のゲートレベル表現を形成する段階、(ii)ゲートレベルの表現に基づいて、回路レイアウトを生成する段階、(iii)回路レイアウトに従って、マスクを形成する段階、および(iv)マスクを使用して集積回路を製造する段階のうちの一部は、異なる場所で、かつ/または異なる当事者によって実施され得る。
【0115】
他の実施例では、集積回路製造システムでの集積回路定義データセットの処理は、回路レイアウトを決定するようにIC定義データセットを処理されることなく、データ処理システムを製造するためのシステムを構成し得る。例えば、集積回路定義データセットは、FPGAなどの再構成可能プロセッサーの構成を定義してもよく、またそのデータセットの処理は、その定義された構成を有する再構成可能なプロセッサーを生成する(例えば、構成データをFPGAにロードすることによって)ためのIC製造システムを構成し得る。
【0116】
一部の実施形態では、集積回路製造定義データセットは、集積回路製造システムで処理されるときに、集積回路製造システムに、本明細書に記載のようにデバイスを生成させてもよい。例えば、集積回路製造定義データセットによる、
図8に関して上述した様式での集積回路製造システムの構成は、本明細書に記載されるようなデータ処理システムが製造されることを引き起こし得る。
【0117】
一部の実施例では、集積回路定義データセットは、データセットで定義されたハードウェア上で、またはデータセットで定義されたハードウェアと組み合わせて実行される、ソフトウェアを含むことができる。
図8に示す実施例では、IC生成システムは、集積回路を製造する際に、集積回路定義データセットで定義されたプログラムコードに従ってその集積回路にファームウェアをロードするに、または別のやり方では、集積回路で使用するために、集積回路にプログラムコードを提供するために、集積回路定義データセットによってさらに構成され得る。
【0118】
デバイス、装置、モジュール、および/またはシステム(ならびに本明細書で実装される方法)における本出願で述べられる概念の実装形態は、既知の実装形態と比較したときに性能改善を生じさせる場合がある。性能改善は、計算性能の増加、待ち時間の短縮、スループットの向上、および/または消費電力の削減のうちの一つまたは複数を含んでもよい。こうしたデバイス、装置、モジュール、およびシステム(例えば、集積回路における)の製造中、性能改善は、物理的実装とトレードオフとなる可能性がありそれにより、製造方法を改善することができる。例えば、性能改善は、レイアウト面積に対してトレードされる場合がありそれによって、既知の実装形態の性能と一致するが、使用するシリコンは少なくなる。これは、例えば、機能ブロックをシリアル化した形式で再利用すること、またはデバイス、装置、モジュール、および/もしくはシステムの要素同士の間で機能ブロックを共有することによって行われてもよい。逆に言えば、デバイス、装置、モジュール、およびシステムの物理的実装の改善(シリコン面積の減少など)を生じさせる本出願で述べられた概念は、改善された性能とトレードされ得る。これは、例えば、既定の面積予算内でモジュールの複数のインスタンスを製造することによって行われてもよい。
【0119】
出願人は、これによって、こうした特徴または特徴の組み合わせが、本明細書で開示されるいずれかの問題を解決するかどうかに関係なく、こうした特徴または組み合わせを、当業者の共通の一般的な知識に照らして、全体として本明細書に基づいて実行することができる程度まで、本明細書に記載の各個々の特徴および二つ以上のそのような特徴の任意の組み合わせを単独で開示する。前述の説明の観点から、本発明の範囲内でさまざまな修正を行うことができることは、当業者には明らかであろう。
【外国語明細書】