(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-20
(45)【発行日】2022-09-29
(54)【発明の名称】計算における誤り訂正
(51)【国際特許分類】
H03M 13/37 20060101AFI20220921BHJP
G06F 11/10 20060101ALI20220921BHJP
【FI】
H03M13/37
G06F11/10 604
(21)【出願番号】P 2019538257
(86)(22)【出願日】2018-01-10
(86)【国際出願番号】 US2018013119
(87)【国際公開番号】W WO2018132444
(87)【国際公開日】2018-07-19
【審査請求日】2021-01-07
(32)【優先日】2017-01-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】518286459
【氏名又は名称】グロック,インコーポレイテッド
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】ジョナサン アレクサンダー ロス
【審査官】原田 聖子
(56)【参考文献】
【文献】米国特許出願公開第2012/0005513(US,A1)
【文献】特開2004-135013(JP,A)
【文献】KUANG-HUA HUANG et al.,Algorithm-Based Fault Tolerance for Matrix Operations,IEEE TRANSACTIONS ON COMPUTERS,1984年06月01日,Vol. C-33, No. 6,518 ~528,https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1676475
【文献】Chong Ding et al.,Matrix Multiplication on GPUs with On-Line Fault Tolerance,9th IEEE International Symposium on Parallel and Distributed Processing with Applications,2011年05月26日,311~317
(58)【調査した分野】(Int.Cl.,DB名)
H03M 13/37
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
第1の行列と第2の行列とを乗算して結果行列を得る
ように構成されたコンピューティング装置と、
命令を記憶する非一時的コンピュータ可読媒体と
を備え、前記命令は、プロセッサによって実行されたとき、
前記プロセッサに、
第1の中間行列と第2の中間行列とを計算することであって、前記第1の中間行列は、各々が、前記第1の行列の対応する列の1つ又は複数のそれぞれのサブセットの値の和に対応する値を有する、1つの又は複数の行を含み、および、前記第2の中間行列は、各々が、前記第2の行列の対応する行の1つ又は複数のそれぞれのサブセットの値の和に対応する値を有する、1つの又は複数の列を含む、該計算することと、
前記第1の中間行列と前記第2の中間行列との部分的な積としての、第1の行と第1の列とを含む、予想される部分行列を計算することと、
前記結果行列に対応する結果の部分行列を計算することであって、第1の行の各値が、前記結果行列の列の1つ又は複数のそれぞれのサブセットの値の和の値に対応する、前記第1の行と、第1の列の各値が、前記結果行列の行の1つ又は複数のそれぞれのサブセットの値の和の値に対応する、前記第1の列と、を含む、該結果の部分行列を計算すること、
前記予想される部分行列と前記結果の部分行列との対応する値の間での1つ又は複数の差に基づいて、前記結果行列における誤りの位置および大きさを検出することと、
前記誤りの前記位置および前記大きさに基づいて、前記結果行列における前記誤りを訂正することと
を行わせることを特徴とする装置。
【請求項2】
前記誤りの前記
位置は、
前記予想される部分行列と前記結果の部分行列との前記第1の行の値の間での差に基づいて、前記誤りに対応する前記結果行列の1つの行を決定することと、
前記予想される部分行列と前記結果の部分行列との前記第1の列の値の間での差に基づいて、前記誤りに対応する前記結果行列の1つの列を決定することと
によって検出されることを特徴とする請求項1に記載の装置。
【請求項3】
前記誤りの前記大きさは、
前記予想される部分行列と前記結果の部分行列との対応する値の間での1又は複数の差の大きさであるように決定されることを特徴とする
請求項1に記載の装置。
【請求項4】
前記第1の行列の対応する列の1つ又は複数のそれぞれのサブセットの値は、前記対応する列の半分の値であり、および、前記第2の行列の対応する行の1つ又は複数のそれぞれのサブセットの値は、前記対応する行の半分の値であることを特徴とする
請求項1に記載の装置。
【請求項5】
前記命令は、
前記誤りに関連付けられた誤り率をモニタすることと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置を変更する旨の通知を作成することと
を前記プロセッサに行わせることを特徴とする請求項1に記載の装置。
【請求項6】
前記命令は、
前記誤りを生成する前記コンピューティング装置の計算ユニットを決定することと、
前記計算ユニットへの電圧入力を増大させることと
を前記プロセッサに行わせることを特徴とする請求項1に記載の装置。
【請求項7】
前記命令は、
前記誤りに関連付けられた誤り率をモニタすることと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置への電圧入力を動的に調整することと
を前記プロセッサに行わせることを特徴とする請求項1に記載の装置。
【請求項8】
前記命令は、
前記コンピューティング装置に、前記誤りの検出に応答して前記第1の行列と前記第2の行列との乗算を繰り返させること
を前記プロセッサに行わせることを特徴とする請求項1に記載の装置。
【請求項9】
前記誤りの検出に応答して、前記コンピューティング装置は
、
前記第1の行列における要素の第1のグループと前記第2の行列における要素の第2のグループとを並べ替えることと、
前記並べ替えられた第1の行列と前記並べ替えられた第2の行列とを乗算して、並べ替えられた結果行列を得ることと、
前記並べ替えられた結果行列における要素のグループを並べ替えて、前記結果行列を得ることと
を行うことを特徴とする請求項1に記載の装置。
【請求項10】
コンピューティング装置によって、第1の行列と第2の行列とを乗算して結果行列を得るステップと、
第1の中間行列と第2の中間行列とを計算するステップであって、前記第1の中間行列は、各々が、前記第1の行列の対応する列の1つ又は複数のそれぞれのサブセットの値の和に対応する値を有する、1つの又は複数の行を含み、および、前記第2の中間行列は、各々が、前記第2の行列の対応する行の1つ又は複数のそれぞれのサブセットの値の和に対応する値を有する、1つの又は複数の列を含む、該計算するステップと、
前記第1の中間行列と前記第2の中間行列との部分的な積としての、第1の行と第1の列とを含む、予想される部分行列を計算するステップと、
前記結果行列に対応する結果の部分行列を計算することであって、第1の行の各値が、前記結果行列の列の1つ又は複数のそれぞれのサブセットの値の和の値に対応する、前記第1の行と、第1の列の各値が、前記結果行列の行の1つ又は複数のそれぞれのサブセットの値の和の値に対応する、前記第1の列と、を含む、該結果の部分行列を計算するステップと、
前記予想される部分行列と前記結果の部分行列との対応する値の間での1つ又は複数の差に基づいて、前記結果行列における誤りの位置および大きさを検出するステップと、
前記誤りの前記位置および前記大きさに基づいて、前記結果行列における前記誤りを訂正するステップと
を含むことを特徴とする方法。
【請求項11】
前記誤りの前記
位置を検出するステップは、
前記予想される部分行列と前記結果の部分行列との前記第1の行の値の間での差に基づいて、前記誤りに対応する前記結果行列の1つの行を決定するステップと、
前記予想される部分行列と前記結果の部分行列との前記第1の列の値の間での差に基づいて、前記誤りに対応する前記結果行列の1つの列を決定するステップと
を含むことを特徴とする請求項10に記載の方法。
【請求項12】
前記誤りの前記大きさは、
前記予想される部分行列と前記結果の部分行列との対応する値の間での1又は複数の差の大きさであるように決定されることを特徴とする請求項11に記載の方法。
【請求項13】
前記第1の行列の対応する列の1つ又は複数のそれぞれのサブセットの値は、前記対応する列の半分の値であり、および、前記第2の行列の対応する行の1つ又は複数のそれぞれのサブセットの値は、前記対応する行の半分の値であることを特徴とする請求項11に記載の方法。
【請求項14】
前記誤りに関連付けられた誤り率をモニタするステップと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置を変更する旨の通知を作成するステップと
をさらに含むことを特徴とする請求項10に記載の方法。
【請求項15】
前記誤りを生成する前記コンピューティング装置の計算ユニットを決定するステップと、
前記計算ユニットへの電圧入力を増大させるステップと
をさらに含むことを特徴とする請求項10に記載の方法。
【請求項16】
前記誤りに関連付けられた誤り率をモニタするステップと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置への電圧入力を動的に調整するステップと
をさらに含むことを特徴とする請求項10に記載の方法。
【請求項17】
前記誤りの検出に応答して前記第1の行列と前記第2の行列との乗算を繰り返すステップをさらに含むことを特徴とする請求項10に記載の方法。
【請求項18】
前記誤りの検出に応答して、
前記第1の行列における要素の第1のグループと前記第2の行列における要素の第2のグループとを並べ替えるステップと、
前記コンピューティング装置によって、前記並べ替えられた第1の行列と前記並べ替えられた第2の行列とを乗算して、並べ替えられた結果行列を得るステップと、
前記並べ替えられた結果行列における要素のグループを並べ替えて、前記結果行列を得るステップと
をさらに含むことを特徴とする請求項10に記載の方法。
【請求項19】
第1の行列と第2の行列とを乗算して、結果行列を得る
ように構成されたコンピューティング装置と、
第1の中間行列と第2の中間行列とを計算することであって、前記第1の中間行列は、各々が、前記第1の行列の対応する列の1つ又は複数のそれぞれのサブセットの値の和に対応する値を有する、1つの又は複数の行を含み、および、前記第2の中間行列は、各々が、前記第2の行列の対応する行の1つ又は複数のそれぞれのサブセットの値の和に対応する値を有する、1つの又は複数の列を含む、該計算することと、
前記第1の中間行列と前記第2の中間行列との部分的な積としての、第1の行と第1の列とを含む、予想される部分行列を計算することと、
前記結果行列に対応する結果の部分行列を計算することであって、第1の行の各値が、前記結果行列の列の1つ又は複数のそれぞれのサブセットの値の和の値に対応する、前記第1の行と、第1の列の各値が、前記結果行列の行の1つ又は複数のそれぞれのサブセットの値の和の値に対応する、前記第1の列と、を含む、該結果の部分行列を計算すること、
前記予想される部分行列と前記結果の部分行列との対応する値の間での1つ又は複数の差に基づいて、前記結果行列における誤りの位置および大きさを検出することと、
前記誤りの前記位置および前記大きさに基づいて、前記結果行列における前記誤りを訂正することと
を
行うように構成された誤り訂正回路と
を備え
たことを特徴とする装置。
【請求項20】
前記誤り訂正回路は、前記誤りの前記
位置を、
前記予想される部分行列と前記結果の部分行列との前記第1の行の値の間での差に基づいて、前記誤りに対応する前記結果行列の1つの行を決定することと、
前記予想される部分行列と前記結果の部分行列との前記第1の列の値の間での差に基づいて、前記誤りに対応する前記結果行列の1つの列を決定することと
によって検出することを特徴とする請求項19に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
本出願の1つまたは複数の実施形態は、計算中の誤りを検出し訂正することに関し、より詳細には、行列乗算における誤りを検出し訂正する方法およびシステムに関する。
【背景技術】
【0002】
関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれている、2017年1月11日に出願された米国特許仮出願第62/444,950号明細書の優先権を主張するものである。
【0003】
現代のプロセッサにおいて、プロセッサの速度、プロセッサの電力消費、およびプロセッサ内のトランジスタ間の距離は、プロセッサにおける最も信頼性の低いトランジスタが誤りなしで動作できるように決定される。内部クロックの周波数を増大させることによってプロセッサの速度を増大させることは、プロセッサの最も信頼性の低いトランジスタにおける誤りという結果になる可能性がある。同様に、プロセッサの電力消費を減少させること、またはプロセッサの計算ユニット間の距離を減少させることも、誤った計算という結果になる可能性がある。
【発明の概要】
【課題を解決するための手段】
【0004】
本明細書で紹介される1つまたは複数の実施形態は、計算における誤りの検出および/または訂正する技法を含んでよい。計算における誤りを訂正する能力は、そのような生成された誤りが検出され訂正されることが可能であるため、プロセッサの速度を増大させ、プロセッサの電力消費を減少させ、プロセッサ内のトランジスタ間の距離を減少させることができる。一実施形態において、ソフトウェアまたはハードウェアにおいて動作している誤り訂正モジュールが、結果行列におけるすべての要素の予想される和と、結果行列におけるすべての要素の実際の和とを算出することによって、行列乗算における誤りを検出することができる。予想された和と結果の和との間に差があるとき、誤り訂正モジュールが誤りを検出する。別の実施形態において、誤りを検出することに加えて、誤り訂正モジュールは、誤りの位置および大きさを決定し、したがって、誤った計算を訂正することができる。
【図面の簡単な説明】
【0005】
本実施形態の上記および他の目的、特徴、および特性は、本明細書の一部を成す、添付の特許請求の範囲および図面と関連する以下の詳細な説明を検討することによって、当業者により明らかとなるであろう。添付の図面は様々な実施形態の例示を含むが、これらの図面は、特許請求される主題を限定するように意図されていない。
【0006】
【
図1】一実施形態に従って、電子回路および計算誤り訂正モジュールを含む装置を示す図である。
【
図2A】一実施形態に従ってNOT論理ゲートを示す図である。
【
図2B】一実施形態に従って、クロック速度が増大されたNOT論理ゲートを示す図である。
【
図2C】一実施形態に従って、入力電圧が減少されたNOT論理ゲートを示す図である。
【
図3】一実施形態に従って、行列乗算における誤りを検出する方法を示す図である。
【
図4】一実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す図である。
【
図5】別の実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す図である。
【
図6】一実施形態に従って、結果行列における誤りの位置および大きさを検出する方法を示す図である。
【
図7A】一実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す図である。
【
図7B】別の実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す図である。
【
図8】一実施形態に従って、行列乗算における誤りを検出し訂正することによってプロセッサの効率を増大させる方法のフローチャートである。
【
図9】一実施形態に従って、行列乗算における誤りを検出することによってプロセッサの効率を増大させる方法のフローチャートである。
【
図10】コンピュータシステム1000の例示的形態のマシンであって、本明細書で論じられる方法論およびモジュールのいずれか1つまたは複数をマシンに実行させるための命令のセットが実行されてよい、マシンの概略図である。
【発明を実施するための形態】
【0007】
用語
本出願を通して使用される用語、略語および語句の簡潔な定義が以下に与えられる。
【0008】
本明細書において、「一実施形態」または「実施形態」への言及は、その実施形態に関連して説明される特定の特徴、構造、または特性が本開示の少なくとも1つの実施形態に含まれることを意味する。本明細書における様々な場所での「一実施形態において」という語句の出現は、必ずしもすべて同じ実施形態を参照するものではなく、他の実施形態と互いに排他的な別個または代替の実施形態でもない。さらに、一部の実施形態によって示され他の実施形態によって示されないことがある様々な特徴が説明される。同様に、一部の実施形態の要件であるが他の実施形態の要件ではない様々な要件が説明される。
【0009】
文脈が明確に特に要求しない限り、明細書および特許請求の範囲を通して、「備える(comprise)」、「備えている(comprising)」などの語は、排他的または網羅的な意味ではなく包含的意味で解釈されるべきであり、すなわち、「含むが限定されない」という意味で解釈されるべきである。本明細書で使用される場合、用語「接続された」、「結合された」、またはその任意の変形は、2つ以上の要素の間の直接的または間接的な任意の接続または結合を意味する。要素間の結合または接続は、物理的、論理的、またはこれらの組み合わせとすることができる。たとえば、2つの装置は、直接結合されてよく、または1つもしくは複数の中間チャネルまたは装置を介して結合されてよい。別の例として、装置は、互いに物理接続を共有することなく、情報がそれらの間で渡されることが可能なように結合されてよい。また、「本明細書において」、「上で」、「以下で」、および類似の意味の語は、本出願において使用されるとき、本出願全体を指すものとし、本出願の特定の項目を指すものではない。文脈が許すならば、詳細な説明における単数または複数を使用する語は、それぞれ複数または単数の数を含んでもよい。2つ以上の項目のリストを参照する「または」という語は、以下の語の解釈の全て、すなわち、リストにおける項目のいずれか、リストにおける項目の全て、およびリストにおける項目の任意の組み合わせを含む。
【0010】
明細書が、構成要素または特徴が含まれるまたは特性を有することを「してよい」、「できる」、「できた」、または「してもよい」と述べる場合、その特定の構成要素または特徴は含まれるまたは特性を有することを必須とされない。
【0011】
「モジュール」という用語は、ソフトウェア、ハードウェア、もしくはファームウェアコンポーネント(またはこれらの任意の組み合わせ)を広く指す。モジュールは、典型的には、指定された入力を使用して有用なデータまたは他の出力を生成することができる機能的コンポーネントである。モジュールは自己完結されてよく、またはそうでなくてよい。アプリケーションプログラム(「アプリケーション」とも呼ばれる)が1つもしくは複数のモジュールを含んでよく、またはモジュールが1つまたは複数のアプリケーションプログラムを含んでよい。
【0012】
詳細な説明において使用される用語は、それが特定の例と共に使用されているとしても、その最も広い合理的な方式で解釈されることが意図される。本明細書において使用される用語は一般に、本開示の文脈内で、および各用語が使用される特定の文脈において、当技術分野におけるそれらの通常の意味を有する。便宜上、特定の用語は、たとえば、大文字、斜体、および/または引用符を使用して強調表示されることがある。強調表示の使用は、用語の範囲および意味に影響せず、すなわち、用語の範囲および意味は、同じ文脈において、それが強調されているか否かにかかわらず同じである。同じ要素が複数の方法で説明される可能性があることは理解されよう。
【0013】
したがって、本明細書で論じられる用語のいずれか1つまたは複数に代替言語および同義語が使用されてよいが、用語が本明細書で詳述されまたは論じられるかどうかに特に重きは置かれない。1つまたは複数の同義語の説明は、他の同義語の使用を排除しない。本明細書で論じられる任意の用語の例を含む本明細書におけるあらゆる場所での例の使用は単に例示であり、本開示およびあらゆる例示された用語の範囲および意味をさらに限定することは意図されていない。同様に、本明細書で与えられる様々な実施形態に本開示は限定されない。
【0014】
技術
本明細書に開示される1つまたは複数の実施形態は、計算における誤りを検出および/または訂正する技法を含んでよい。計算における誤りを訂正する能力は、そのような生成された誤りが検出され訂正されることが可能であるため、プロセッサの速度を増大させ、プロセッサの電力消費を減少させ、プロセッサ内のトランジスタ間の距離を減少させることができる。一実施形態において、ソフトウェアまたはハードウェアにおいて動作している誤り訂正モジュールが、結果行列におけるすべての要素の予想される和と、結果行列におけるすべての要素の実際の和とを算出することによって、行列乗算における誤りを検出することができる。予想された和と結果の和との間に差があるとき、誤り訂正モジュールが誤りを検出する。別の実施形態において、誤りを検出することに加えて、誤り訂正モジュールは、誤りの位置および大きさを決定し、したがって、誤った計算を訂正することができる。
【0015】
図1は、一実施形態に従って、電子回路および計算誤り訂正モジュールを含む装置を示す。誤り訂正モジュール100は、電子回路110に接続されている。誤り訂正モジュール100および電子回路110は、単一のプロセッサの一部とすることができ、または別個のコンポーネントとすることができる。誤り訂正モジュール100は、ハードウェアに実装されることができ、またはソフトウェアに実装されることができる。たとえば、誤り訂正モジュール100は、電子回路110を含むプロセッサ上でソフトウェア命令として実行することができる。誤り訂正モジュール100は、電子回路110が行列乗算などの計算を行うときに電子回路110によって導入される計算誤りを検出する。誤り訂正モジュール100は、電子回路110における計算ユニット120内の誤りを検出することができる。別の例として、誤り訂正モジュール100は、論理ゲート、乗算および加算回路、ならびに/またはこれらの演算を行うための他の回路を含む、誤り訂正回路とすることができる。
【0016】
電子回路110は、プロセッサ、マイクロコントローラ、プロセッサの部分、またはマイクロコントローラの部分とすることができる。電子回路110は、トランジスタ、メモリスタ、量子計算要素などのビルディングブロックで構成される。電子回路110内の計算ユニット120は、単一のビルディングブロックと同程度に小さくすることができ、または電子回路110内のビルディングブロックのグループとすることができる。一実施形態において、電子回路110は、機械学習モデルに関する行列乗算を実行するプロセッサである。1つの行列における値は、機械学習モデルの層からの重みとすることができ、別の行列における値は、機械学習モデルの層に対する入力データ(たとえば、画像データ、音声データ)とすることができる。次いで、2つの行列は、電子回路110によって一緒に乗算されて、機械学習モデルの層の出力を表す結果行列を生成する。
【0017】
図2Aは、一実施形態に従ってNOT論理ゲートを示す。NOT論理ゲート200は、変数入力210を取り込み、否定された変数入力210と等価な出力230を生成する。クロック信号220は、線240によって示されるサイクルに分割される(簡潔にするために1つだけラベル付けされている)。線240は、1クロックサイクルの終わりおよび次のクロックサイクルの始まりを示す。各クロックサイクルの始めで、NOT論理ゲート200が適切に動作しているとき、NOT論理ゲート200は以下の出力を生成する。すなわち、変数入力210が1であるとき、出力230は0であり、変数入力210が0であるとき、出力230は1である。
【0018】
図2Bは、一実施形態に従って、クロック速度が増大されたNOT論理ゲートを示す図である。クロック信号220の周波数が増大すると、NOT論理ゲート200はライン240によって示される連続したクロックサイクルの間で放電するのに十分な時間を有しないため、NOT論理ゲート200は誤った出力を生成させられる可能性がある。
図2Bに示されるように、NOT論理ゲートは、期間250において適切に放電せず、0の代わりに誤って1の出力を生成する。
【0019】
図2Cは、一実施形態に従って、入力電圧が減少されたNOT論理ゲートを示す。変数入力210の電圧を低減させると、入力電圧がNOT論理ゲート200を通じて電流の流れをアクティブ化するのに十分でないため、NOT論理ゲート200は誤った出力を生成させられる可能性がある。
図2Cに示されるように、NOT論理ゲートは、期間260において適切に放電せず、1の代わりに誤って0の出力を生成する。
【0020】
さらに、電子回路印刷中に論理ゲートを互いにより近く配置することは、論理ゲートにおけるクロストークを引き起こして、それらに計算誤りを生じさせる。行列乗算における誤りを検査し訂正する能力を有することは、プロセッサ設計者およびプロセッサ製作者が、より高速で、より電力効率的で、より空間効率的なプロセッサを作ることを可能にする。
【0021】
図3は、一実施形態に従って、行列乗算における誤りを検出する方法を示す。2つの行列300および310が一緒に乗算されて結果行列320を得る。結果行列320が正しいかどうかを検査するために、誤り訂正モジュール100は2つのベクトル330、340を計算する。ベクトル330における各要素は、行列300における対応する列の和である。たとえば、要素350は、列355の和である。ベクトル340における各要素は、行列310における対応する行の和である。たとえば、要素360は、行365の和である。誤り訂正モジュール100は、2つのベクトル330、340のドット積を行って予想される結果370を得る。誤り訂正モジュール100はまた、結果行列320における要素を合計して実際の結果380を得る。予想される結果370と実際の結果380が等しくないとき、誤り訂正モジュール100は誤りを検出する。
【0022】
上記された方法を行う利点は、2つのベクトル330、340、およびそれらのドット積である予想される結果370の作成は、2つの行列300および310の行列乗算を行うよりも指数関数的に少ない計算を必要とするだけでよいことである。たとえば、行列300、310のサイズはN×Nであり、
図3においてN=8である。結果行列320を生成する演算の回数は、O(N
3)である。
図3において、結果行列320の算出は、結果行列320における要素ごとに8回の乗算および7回の加算を必要とする。結果行列320において64個の要素があり、したがって、結果行列320を生成する演算の回数は、8*8*(8回の乗算+7回の加算)=O(8
3)である。予想される結果370を生成するのに必要とされる可能性のある演算の回数は、O(N
2)である。
図3において、2つのベクトル330、340における各要素を生成するために7回の加算を必要とする。ベクトル330、340のドット積を生成するために8回の乗算を必要とする。したがって、予想される結果370の生成は、7*16回の加算+8回の乗算=O(8
2)を必要としてよい。O(N
2)はO(N
3)よりも1指数分小さい。したがって、誤り訂正を行うことは、行列乗算を行うことよりも少なくとも1指数分は安価である。
【0023】
乗算を行うことは、加算を行うことよりも高価である。したがって、行列乗算と上述された誤り検査との間の乗算の回数を比較することは、誤り検査の効率の有用な尺度となる。行列乗算において必要とされることがある乗算の回数は、O(N3)である。上述された誤り検査を行うのに必要とされる乗算の回数は、O(N)である。したがって、誤り検査において必要とされる乗算の回数は、行列乗算を行う場合よりも2指数分、安価である。
【0024】
誤りが検出されると、誤り訂正モジュール100は誤りを記録することができる。誤りが記録されると、誤り訂正モジュール100は1つまたは複数の事項を行うことができる。たとえば、誤り訂正モジュール100は、行列乗算を再び行うように電子回路110に対して信号を送ることができる。計算全体を再び行う際に、電子回路110は、同じ誤りが再び発生するのを防止するために、行および列を並べ替える、または行列300、310の要素のグルーピングを並べ替えることができる。
【0025】
さらに、誤り訂正モジュール100は、誤りの率を測定することができる。観測された誤り率が、指定された閾値、たとえば、秒あたり1つの誤り、ミリ秒あたり1つの誤りなどよりも大きいとき、誤り訂正モジュール100は、電子回路110が置換されるべきというメッセージを送ることができる。誤り率検出は、自動運転車、医療装置、航空機飛行制御、兵器、原子力システムなどにおけるプロセッサのような安全性が重要なシステムにおいて有用な可能性がある。プロセッサの置換が要求される可能性があるので、プロセッサがいつ信頼性のある動作をしなくなるかを知ることは有用である。
【0026】
同様に、誤り率を観測することは、電子回路によって生成された誤りが、指定された閾値、たとえば、秒あたり1つの誤り、ミリ秒あたり1つの誤りなどよりも大きくなるまで、システムが電子回路110への入力電圧を低下させることを可能にすることができる。電子回路110に対する電圧を動的に調整することは、電子回路110による電力消費を減少させる。
【0027】
さらに、誤り訂正モジュール100は、電子回路110内の計算ユニット120についての誤りの率を測定することができる。計算ユニット120は、電子回路110内の単一のビルディングブロックと同程度に小さくすることができ、または電子回路110内のビルディングブロックのグループとすることができる。誤りの率が予め定義された閾値を超えたとき、誤り訂正モジュール100は、誤りの率が予め定義された閾値を超えた計算ユニット120に対する電圧を動的に調整することができる。
【0028】
図4は、一実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す。一般に、誤り訂正モジュール100が、結果行列320において誤りがあると決定すると、誤り訂正モジュール100は、結果行列320を複数の部分行列にさらに分割し、各部分行列について同じ誤り検出演算を行うことができる。誤り訂正モジュール100は、結果行列を、
図4に示されるように2つの行列に、または3つの行列に、または各部分行列が少なくとも1つの要素を含む限り任意の数の行列にさらに分割することができる。
【0029】
図4の特定の例において、誤り訂正モジュール100は、結果行列320を2つの部分行列400、410にさらに分割し、行列310を対応する部分行列420、430にさらに分割する。行列300を部分行列420と乗算したとき、結果は部分行列400となる。行列300を部分行列430と乗算したとき、結果は部分行列410となる。次いで、誤り訂正モジュール100は、
図3に説明されたのと同じ誤り検出演算を、結果の部分行列400、410に対して行って、2つの実際の結果440、450を生成する。
【0030】
2つの予想される結果460、470を生成するために、誤り訂正モジュール100は3つのベクトル330、480、490を算出する。ベクトル330は、
図3におけるベクトル330と同じ方法で算出される。ベクトル480における各要素は、部分行列420における対応する行の和である。たとえば、ベクトル480における要素482は、部分行列420における行484の要素の和である。同様に、ベクトル490における各要素は、部分行列430における対応する行の和である。たとえば、ベクトル490における要素492は、部分行列430における行494の要素の和である。
【0031】
結果の部分行列400、410における誤りがあるかどうかを決定するために、誤り訂正モジュール100は、予想される結果460、470を実際の結果440、450と比較する。予想される結果460が実際の結果440と一致するとき、対応する部分行列400において誤りが存在しない。同様に、予想される結果470が実際の結果450と一致するとき、対応する部分行列410において誤りが存在しない。逆に、予想される結果460が実際の結果440と一致しないとき、この不一致は、部分行列400が少なくとも1つの誤りを含むことを示す。予想される結果470が実際の結果450と一致しないとき、この不一致は、部分行列410が少なくとも1つの誤りを含むことを示す。
図4に見られるように、結果440と結果460は一致するので、部分行列400において誤りは存在しない。結果450と結果470は一致しないので、部分行列410において誤りが存在する。
【0032】
誤り訂正モジュール100は、誤り499が発見されるまで、点線485に沿って誤り499を含む行列のさらなる分割を継続する。本明細書で説明されている方法は、単一の結果行列320における複数の誤りを発見するために利用されることが可能である。
【0033】
誤り訂正モジュール110が結果行列320における1つまたは複数の誤りを発見すると、誤り訂正モジュール100は、計算全体を再び行うように電子回路110に対して信号を送ることができる。計算全体を再び行う際に、電子回路110は、同じ誤りが再び発生するのを防止するために、行および列を並べ替える、または行列300、310の要素の種々のグルーピングを並べ替えることができる。あるいは、誤り訂正モジュール100は、誤った要素を算出するために必要とされるドット積を行うことができる。
【0034】
図5は、別の実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す。電子回路110が行列300を行列310によって乗算したとき、結果行列320は誤り599を含む。誤り599を検出するために、誤り訂正モジュール100は、行列300を行列310によって乗算するために必要とされる回数の計算よりも安価となる回数の計算を行う。誤り訂正モジュール100は、2つの中間行列500、510を計算する。
【0035】
中間行列500における各要素は、行列300における対応する要素の和である。中間行列500の第1の行における要素は、行列300における対応する列の和である。たとえば、中間行列500における要素502は、行列300における列504の和である。中間行列500の第2の行における要素は、行列300における各対応する列の最初の4つの要素の和である。たとえば、中間行列500における要素506は、行列300における列508の半分の和である。中間行列500の第3の行における要素は、行列300における各対応する列の第1、第2、第5、および第6の要素の和である。たとえば、中間行列500における要素518は、行列300における要素512の和である。最後に、中間行列500の第4の行における要素は、行列300における各対応する列における1つ置きの要素の和である。たとえば、中間行列500における要素514は、行列300における要素516の和である。
【0036】
同様に、中間行列510は、行列310における対応する要素の和である。中間行列510の第1の列における要素は、行列310における対応する行の和である。たとえば、中間行列510における要素522は、行列310における行524の和である。中間行列510の第2の列における要素は、行列310における各対応する行における最初の4つの要素の和である。たとえば、中間行列510における要素526は、行列310における行528の半分の和である。中間行列510の第3の列における要素は、行列310における各対応する行の第1、第2、第5、および第6の要素の和である。たとえば、中間行列510における要素530は、行列310における要素532の和である。最後に、中間行列510の第4の列における要素は、行列310における各対応する行における1つ置きの要素の和である。たとえば、中間行列510における要素534は、行列310における要素536の和である。
【0037】
中間行列500、510は部分的に乗算されて、部分行列520を生成する。部分行列520における各要素は、結果行列320に含まれる複数のアイテムの要素の予想される和である。結果行列320におけるアイテムは、結果行列320全体とすることができ、または結果行列320における要素のグループとすることができる。結果行列320におけるグループの要素は、連続または非連続とすることができる。
【0038】
部分行列560における各要素は、結果行列320に含まれる複数のアイテムの要素の実際の和である。たとえば、各要素550、552、554、556はそれぞれ、複数のアイテム540、542、544、546の要素の和である。言い換えれば、要素550はアイテム540におけるすべての要素の和であり、要素552はアイテム542におけるすべての要素の和であり、要素554はアイテム544におけるすべての要素の和であり、要素556はアイテム546におけるすべての要素の和である。
【0039】
同様に、要素562、564、566は、結果行列320に含まれる別の複数のアイテムの要素の和である。たとえば、行列320は、行0ないし行7、および列0ないし列7を含み、行列320の左上隅は、行0と列0の交差部とする。したがって、要素562は、行0ないし行3におけるすべての要素の和と等しい。要素564は、行0ないし行1および行4ないし行5におけるすべての要素の和と等しい。要素566は、行0、行2、行4、行6におけるすべての要素の和と等しい。
【0040】
図5に見られるように、部分行列520と560における要素は、一対一の対応関係を有する。結果行列320がいかなる誤りも含んでいないとき、部分行列520と部分行列560における対応する要素は等しい。しかしながら、
図5に見られるように、結果行列320が誤りを含んでいるとき、部分行列520における要素と、部分行列560における対応する要素との間に相違がある。
【0041】
本明細書に説明されているように、行列乗算を行うために必要とされる演算の回数は、O(N3)であり、ここで、N×Nは、入力行列300、310、および結果行列320のサイズである。部分行列520を生成するのに必要とされる演算の回数は、2つの行列500、510における各要素についてN回の加算、および部分行列520における各要素についてN回の乗算となる。2つの行列500、510において合計でN2の要素がある。部分行列520において(log2N)*2+1個の要素がある。したがって、部分行列520を生成するために必要とされる演算の回数は、N回の加算*N2+N回の乗算*((log2N)*2+1)=O(N3)である。乗算は加算よりも高価であるとすると、乗算の回数を比較することは、誤り検査効率の重要な尺度となる。行列乗算における乗算の回数はO(N3)であるのに対し、誤りの位置および大きさを検出する際の乗算の回数は(N*log2N)である。したがって、誤り検査における乗算の回数は、行列乗算における乗算の回数よりも少なくとも指数関数的に少ない。
【0042】
図6は、一実施形態に従って、結果行列における誤りの位置および大きさを検出する方法を示す。部分行列520における各要素は、部分行列560における1つの要素に対応する。本明細書に説明されているように、部分行列560における各要素は、結果行列320に含まれる複数のアイテムの要素の実際の和である。部分行列520における要素が部分行列560における対応する要素に一致しないとき、それは、結果行列320における対応するアイテムが誤りを含むことを意味する。誤りの位置および大きさを検出するために、誤り訂正モジュール100は、部分行列520における各要素を、部分行列560における対応する要素と比較する。
【0043】
誤りが発生している結果行列320における列を検出するために、誤り訂正モジュール100は、部分行列520における要素652と部分行列560における要素552とを比較する。要素652と要素552が等しいとき、誤り訂正モジュール100はビット600において1の値を記録する。要素652と要素552が等しくないとき、誤り訂正モジュール100はビット600において0の値を記録する。誤り訂正モジュール100は、部分行列520における要素654と部分行列560における要素554とを比較し、要素が等しいかまたは等しくないかに応じて、それぞれビット610に1または0を記録する。ビット620を生成するために、誤り訂正モジュール100は、要素656と要素556とを比較する。二進数として解釈される3つのビット600、610、620が、結果行列320における誤り599の列位置を生成する。誤り599の列位置を発見するために必要とされることがあるビット600、610、620の数は、結果行列320のサイズに応じて変わる。結果行列320のサイズはN列であると仮定する。誤り599の列位置を発見するために必要とされるビットの数は、(log2N)+1に等しい。
【0044】
同様に、誤りが発生している結果行列320における行を検出するために、誤り訂正モジュール100は、部分行列520における要素660と部分行列560における要素561とを比較する。要素660と要素561が等しいとき、誤り訂正モジュール100はビット630において1の値を記録する。要素660と要素561が等しくないとき、誤り訂正モジュール100はビット630において0の値を記録する。誤り訂正モジュール100は、部分行列520における要素662と部分行列560における要素562とを比較し、要素が等しいかまたは等しくないかに応じて、それぞれビット640に1または0を記録する。ビット650を生成するために、誤り訂正モジュール100は、要素664と要素564とを比較する。二進数として解釈される3つのビット630、640、650が、結果行列320における誤り599の行位置を生成する。誤り599の列位置を発見するために必要とされるビット630、640、650の数は、結果行列320のサイズに応じて変わる。結果行列320のサイズはM行であると仮定する。誤り599の行位置を発見するために必要とされるビットの数は、(log2M)+1に等しい。
【0045】
図6において、部分行列520における要素660、662のみが、部分行列560におけるそれらの対応する要素561、562と異なる。結果として、誤った要素の列位置は7であり、誤った要素の行位置は1であり、それは、誤り599を誤った要素として指し示す。すべての要素対660、561、および662、562は1だけ異なり、この差は、誤り599における誤りの大きさを表す。誤り訂正モジュール100は、行列320における誤り599を訂正して、訂正された最終結果である行列670を生成する。
【0046】
図7Aは、一実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す。誤りを検出する際に使用される誤り訂正データ構造700は、行列710と、行列710におけるすべての要素の和に等しい誤り訂正符号720とを含む。行列710は、アレイ、トリプレット表現、リンクされた表現などとして、メモリに記憶されることができる。誤り訂正符号720は、整数、浮動小数点数などとして、メモリに記憶されることができる。誤り訂正符号720が、誤り訂正データ構造700における行列710に後続される最初の要素であってよく、または行列710が、誤り訂正データ構造700における誤り訂正符号720に後続される最初の要素であってよい。誤り訂正モジュール100は、誤り訂正符号720を計算し、行列710と共に誤り訂正符号720をメモリに記憶し、それによって誤り訂正データ構造700を作成する。
【0047】
誤り訂正データ構造700を記憶するメモリは、フラッシュメモリなどの半導体メモリ、ハードディスクドライブなどの磁気メモリ、CD(コンパクトディスク)またはDVD(デジタル多用途ディスク)などの光メモリなどとすることができる。メモリは、電場、磁場、宇宙線、アルファ線、ガンマ線、誤ったメモリ読み取りなどの外的影響によって破損される可能性がある。誤り訂正符号720における冗長な情報による誤り訂正データ構造700を使用するとき、メモリ破損はより容易に検出されることができる。
【0048】
具体的には、行列710がメモリから読み取られたとき誤り訂正モジュール100は、行列710におけるすべての要素の総和を実行することができる。総和の結果が誤り訂正符号720と一致しない場合、誤りが検出される。行列710は比較的大きなサイズを有し、したがって破損される可能性がより高いので、誤りは、誤り訂正符号720の代わりに行列710に存在する可能性がより高い。
【0049】
図7Bは、別の実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す。誤り訂正データ構造700は、行列710および誤り訂正符号730を含む。誤り訂正符号730は、アレイ、リンクされたリストなどとして記憶されることができる。誤り訂正符号730は、行列内の様々なアイテムにおける予想される和を含む。行列における様々なアイテムは、
図5に示されるような540、542、544、546とすることができる。
【0050】
行列710がメモリから読み取られたとき、誤り訂正モジュール110は、行列710における様々なアイテム、たとえば、
図5に示されるような540、542、544、546の総和を実行することができる。誤り訂正モジュール100はまた、記憶された誤り訂正符号730を読み取る。少なくとも1つの記憶された誤り訂正符号730が、様々なアイテムの少なくとも1つの総和と一致しないとき、誤り訂正モジュール100は、
図6に示されるように、誤りの位置および大きさを検出し、誤りを訂正する。
【0051】
図8は、一実施形態に従って、行列乗算における誤りを検出し訂正することによってプロセッサの効率を増大させる方法のフローチャートである。ステップ800において、プロセッサの効率が増大され、それによってプロセッサからの誤った出力の増大が生じる。プロセッサの効率を増大させることは、プロセッサの電力消費を減少させ、プロセッサのクロック速度を増大させ、またはプロセッサのビルディングブロックを互いにより近く配置し、そうすることで処理性能を同じに維持しながらプロセッサのサイズを小さくすることを含む。プロセッサのビルディングブロックは、トランジスタ、メモリスタ、量子計算要素などとすることができる。
【0052】
ステップ810において、
図1におけるプロセッサおよび/または電子回路110などのコンピューティング装置は、第1の行列と第2の行列とを乗算して結果行列を得る。ステップ820において、誤り訂正モジュールは、複数の計算を行うことによって結果行列における誤りを効率的に訂正し、ここで、複数の計算は、第1の行列と第2の行列とを乗算するよりも安価である。
【0053】
たとえば、結果行列における誤りを検出するために、誤り訂正モジュール100は、結果行列の複数のアイテム、たとえば、
図5における540、542、544についての複数の予想される結果、たとえば、
図5における部分行列520を、第1の行列の対応する複数のアイテムおよび第2の行列の対応する複数のアイテムに基づいて算出する。結果行列320におけるアイテムは、結果行列320全体とすることができ、または結果行列320における要素のグループとすることができる。結果行列320における要素のグループは、連続または非連続とすることができる。
【0054】
誤り訂正モジュール100は、結果行列の複数のアイテム、たとえば、
図5における540、542、544についての複数の実際の結果、たとえば、
図5における部分行列560を、結果行列に基づいて算出する。複数の実際の結果は、
図5における複数のアイテム540、542、544における各アイテム内のすべての要素を合計することによって計算されることが可能である。複数の予想される結果における少なくとも1つの予想される結果が複数の実際の結果における対応する実際の結果と異なるとき、誤り訂正モジュールは誤りを検出する。誤りを検出すると、誤り訂正モジュール100は、少なくとも1つの予想される結果と対応する実際の結果との差に基づいて、誤りを訂正する。
【0055】
たとえば、
図6において、誤り訂正モジュール100は、予想される結果660が実際の結果561よりも1だけ小さいと決定する。結果として、誤り訂正モジュール100は、結果行列における誤った結果を1だけ減少させる。誤りの位置は、本明細書を通して説明されているように、たとえば
図6で説明されているように発見されることができる。
【0056】
図9は、一実施形態に従って、行列乗算における誤りを検出することによってプロセッサの効率を増大させる方法のフローチャートである。
図1におけるプロセッサまたは電子回路110などのコンピューティング装置は、第1の行列と第2の行列とを乗算して結果行列を得る。誤り訂正モジュールは、計算の回数が、第1の行列と第2の行列とを乗算するのに必要とされる計算の回数よりも少ないように、いくつかの回数の計算を行うことによって結果行列における誤りを効率的に検出する。
【0057】
誤りを効率的に検出するために、誤り訂正モジュール100は以下のステップを行う。ステップ900において、誤り訂正モジュール100は、第1の行列のアイテムおよび第2の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出する。第1の行列のアイテムと第2の行列のアイテムは、乗算されたとき、結果行列のアイテムを生成する。行列におけるアイテムは、行列全体または行列における要素のグループとすることができる。行列における要素のグループは、連続または非連続とすることができる。
【0058】
たとえば、第1の行列のアイテムおよび第2の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出することは、誤り訂正モジュール100が、
図3における結果行列320に関連付けられたすべての要素の
図3における予想される和370を決定することを含むことができる。
【0059】
ステップ910において、誤り訂正モジュール100は、
図3に説明されたように、結果行列に基づいて、結果行列のアイテムについての1つまたは複数の実際の結果を算出する。たとえば、結果行列のアイテムについての1つまたは複数の実際の結果を算出するために、誤り訂正モジュール100は、
図3における結果行列320に関連付けられたすべての要素の
図3における実際の和380を決定することができる。ステップ920において、誤り訂正モジュール100は、予想される結果、たとえば
図3における予想される結果370が、実際の結果、たとえば
図3における実際の結果380と異なるときに、誤りを検出する。
【0060】
さらに、誤り訂正モジュール100は、誤りの誤り率をモニタすることができる。誤り率が予め定義された閾値よりも大きいとき、誤り訂正モジュール100は、コンピューティング装置を変更する旨の通知を作成すること、コンピューティング装置への電圧入力を動的に調整すること、行列乗算を繰り返すようにコンピューティング装置に対して信号を送ることなどのうちの1つまたは複数を行うことができる。予め定義された閾値は、いくつのビット誤りが訂正できるかに応じて、および使用事例に応じて、秒あたり1つの誤り、分あたり1つの誤りなどとすることができる。誤り訂正モジュール100は、コンピューティング装置全体またはコンピューティング装置内の計算ユニットへの電圧を動的に調整することができ、ここで、計算ユニットは、コンピューティング装置の1つまたは複数のビルディングブロックを含むことができる。
【0061】
誤り訂正モジュール100は、様々な方法で結果行列における誤りの位置および大きさを検出することができる。誤りの位置および大きさが検出されると、誤り訂正モジュール100は、結果行列における誤りを訂正することができる。
【0062】
一実施形態において、誤り訂正モジュール100は、結果行列の複数の部分、たとえば、
図5における540、542、544についての複数の予想される結果、たとえば、
図5における部分行列520を算出する。誤り訂正モジュール100は、複数の予想される結果、たとえば、
図5における部分行列520を、第1の行列の対応する複数のアイテムおよび第2の行列の対応する複数のアイテムに基づいて算出する。誤り訂正モジュール100は、結果行列の複数のアイテム、たとえば、
図5における540、542、544についての複数の対応する実際の結果、たとえば、
図5における部分行列560を算出する。複数の対応する実際の結果、たとえば、
図5における部分行列560を算出することは、結果行列の各部分、たとえば、
図5における540、542、544におけるすべての要素を合計することを含むことができる。誤り訂正モジュール100は、複数の予想される結果、
図5における部分行列520を、複数の対応する実際の結果、
図5における部分行列560と比較する。
図5における部分行列520に含まれる複数の予想される結果における少なくとも1つの予想される結果が、
図5における部分行列560に含まれる複数の対応する実際の結果における対応する実際の結果と異なるとき、誤り訂正モジュール100は、本明細書で説明されているように、結果行列における誤りの位置および大きさを算出する。
【0063】
別の実施形態において、誤り訂正モジュール100は、二分探索を使用して誤りの位置および大きさを算出する。誤りを検出すると、誤り訂正モジュール100は、
図4に示されるように、複数の部分行列における最も小さい行列が1つの誤った要素を含むまで、結果行列を複数の部分行列に分割する。
図4における誤り499が発見されると、誤り499は様々な方法で訂正されることができる。たとえば、行列乗算が再び行われることができ、または第1の行列における対応する行が第2の行列における対応する列によって乗算されることができ、誤り499の代わりに訂正された要素を生成することができる。
【0064】
誤り訂正モジュール100は、フラッシュメモリ、ハードディスクなどのメモリに記憶されたデータの破損を検出することができる。行列を記憶する前に、誤り訂正モジュール100は、たとえば
図7Aに示されるように、行列におけるすべての要素の和を算出し、すべての行列要素の和およびその行列を一緒にメモリに記憶する。行列がメモリから読み取られたとき、破損されたストレージにより、または読み取りの際の誤りにより、誤りが発生する可能性がある。メモリの行列を読み取ったとき、誤り訂正モジュール100は、読み取られた行列のすべての要素を合計し、結果の和を、メモリに記憶された和と比較する。結果の和とメモリに記憶された和とが異なるとき、誤り訂正モジュール100は誤りを報告する。さらに、誤り訂正モジュール100は、
図7Bで説明されたように誤りを検出し訂正することができる。
【0065】
追加の考慮事項
本明細書に開示されている少なくとも1つの実施形態は、プロセッサの効率を増大させ、それによってプロセッサからの誤った出力の増大が生じる方法である。この方法は、第1の行列と第2の行列とを乗算するステップであって、第1の行列と第2の行列とを乗算することは、結果行列を得ることを含む、ステップと、複数の乗算計算を行うことによって、結果行列における誤りを効率的に訂正するステップであって、複数の乗算計算は、第1の行列と第2の行列とを乗算することよりも指数関数的に安価である、ステップとを含む。結果行列における誤りを検出するステップは、結果行列の複数のアイテムについての複数の予想される結果を、第1の行列の対応する複数のアイテムおよび第2の行列の対応する複数のアイテムに基づいて算出するステップと、結果行列に基づいて、結果行列の複数のアイテムについての複数の実際の結果を算出するステップと、複数の予想される結果における少なくとも1つの予想される結果が複数の実際の結果における対応する実際の結果と異なるとき、誤りを検出するステップとを含む。誤りを検出すると、少なくとも1つの予想される結果、および対応する実際の結果の間の差に基づいて、誤りが訂正される。
【0066】
本明細書に開示されている少なくとも1つの実施形態は、第1の行列、第2の行列、および結果行列を得るステップであって、結果行列は、第1の行列を第2の行列によって乗算する結果を含む、ステップと、いくつかの回数の計算を行うことによって結果行列における誤りを効率的に検出するステップであって、計算の回数は、第1の行列と第2の行列とを乗算するのに必要とされる計算の回数よりも少なくとも指数関数的に少ない、ステップとを含む方法である。結果行列における誤りを効率的に検出するステップは、第1の行列のアイテムおよび第2の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出するステップであって、第1の行列のアイテムおよび第2の行列のアイテムは組み合わさって、結果行列のアイテムを生成し、結果行列のアイテムは、行列全体または行列全体の一部の少なくとも一方を含み、第1の行列の対応するアイテムは、第1の行列全体または第1の行列全体の一部の少なくとも一方を含み、第2の行列の対応するアイテムは、第2の行列全体または第2の行列全体の一部の少なくとも一方を含む、ステップと、結果行列に基づいて、結果行列のアイテムについての1つまたは複数の実際の結果を算出するステップと、予想される結果が実際の結果と異なるとき、誤りを検出するステップとを含む。この方法は、検出された誤りの誤り率に基づいて、行列乗算を行っているコンピューティング装置への電圧入力を調整するステップをさらに含む。
【0067】
この方法は、誤り率が予め定義された閾値よりも大きいとき、行列乗算を行っているコンピューティング装置を変更する旨の通知を作成するステップを含む。この方法は、誤り率が予め定義された閾値よりも小さいとき、行列乗算を行っているコンピューティング装置への電圧入力を動的に減少させるステップを含む。この方法は、誤りを検出すると、行列乗算を行っているコンピューティング装置に、行列乗算を繰り返させるステップを含む。
【0068】
結果行列における誤りを効率的に検出するステップは、結果行列に関連付けられたすべての要素の予想される和を決定するステップと、結果行列に関連付けられたすべての要素の実際の和を決定するステップと、予想される和と実際の和とが異なるとき、誤りを検出するステップとを含むことができる。
【0069】
この方法は、結果行列における誤りの位置および大きさを検出するステップと、結果行列における誤りを訂正するステップとを含む。結果行列における誤りの位置および大きさを検出するステップは、結果行列の複数の部分についての複数の予想される結果を、第1の行列の対応する複数の部分と第2の行列の対応する複数の部分に基づいて算出するステップと、結果行列に基づいて、結果行列の複数の部分についての複数の対応する実際の結果を算出するステップと複数の予想される結果を複数の対応する実際の結果と比較するステップとを含む。この方法は、複数の予想される結果における少なくとも1つの予想される結果が複数の対応する実際の結果における対応する実際の結果と異なるとき、結果行列における誤りの位置および大きさを算出するステップを含む。
【0070】
この方法は、行列におけるすべての要素の和を算出するステップと、行列におけるすべての要素の和およびその行列を一緒にメモリに記憶するステップとを含む。
【0071】
この方法は、メモリから、行列およびすべての要素の和を読み取るステップと、メモリから読み取られた行列におけるすべての要素の和が、メモリから読み取られたすべての要素の和と等しくないとき、誤りを検出するステップとを含む。
【0072】
この方法は、誤りを検出すると、複数の部分行列における最も小さい行列が1つの誤った要素を含むまで、結果行列を複数の部分行列に分割するステップと、誤った要素を訂正するステップとを含む。
【0073】
本開示の少なくとも1つの実施形態は、装置を含み、装置は、第1の行列と第2の行列とを乗算して結果行列を得るためのコンピューティング装置であって、増大されたクロック速度で動作するコンピューティング装置と、いくつかの回数の乗算計算およびいくつかの回数の加算計算を行うことによって、結果行列における誤りの位置および大きさを効率的に検出するための誤り訂正モジュールであって、乗算計算の回数は、第1の行列と第2の行列とを乗算するために必要とされる乗算計算の回数よりも少なくとも指数関数的に少ない、誤り訂正モジュールとを備える。
【0074】
誤り訂正モジュールは、第1の行列のアイテムおよび第2の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出することであって、第1の行列のアイテムおよび第2の行列のアイテムは組み合わさって、結果行列のアイテムを生成し、結果行列のアイテムは、行列全体または行列全体の一部の少なくとも一方を含み、第1の行列の対応するアイテムは、第1の行列全体または第1の行列全体の一部の少なくとも一方を含み、第2の行列の対応するアイテムは、第2の行列全体または第2の行列全体の一部の少なくとも一方を含む、算出することと、結果行列に基づいて、結果行列のアイテムについての1つまたは複数の実際の結果を算出することと、予想される結果が実際の結果と異なるとき、誤りを検出することとを行うことができる。
【0075】
誤り訂正モジュールは、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいとき、コンピューティング装置を変更する旨の通知を作成することとを行うことができる。
【0076】
誤り訂正モジュールは、誤りを生成しているコンピューティング装置の計算ユニットを決定することであって、計算ユニットは、コンピューティング装置の一部である、決定することと、計算ユニットへの電圧入力を増大させることとを行うことができる。
【0077】
誤り訂正モジュールは、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいとき、コンピューティング装置への電圧入力を動的に調整することとを行うことができる。
【0078】
誤り訂正モジュールは、結果行列に関連付けられたすべての要素の予想される和を決定することと、結果行列に関連付けられたすべての要素の実際の和を決定することと、予想される和と実際の和とが異なるとき、誤りを検出することとを行うことができる。
【0079】
誤り訂正モジュールは、結果行列における誤りを訂正することができる。
【0080】
コンピューティング装置は、誤りを検出すると、誤り訂正モジュールによって第1の行列と第2の行列とを乗算することができる。
【0081】
誤りを検出すると、誤り訂正モジュールによって、コンピューティング装置は、第1の行列における要素の第1のグループ、および第2の行列における要素の第2のグループを並べ替えることと、並べ替えられた第1の行列と並べ替えられた第2の行列とを乗算して、並べ替えられた結果行列を得ることと、並べ替えられた結果行列における要素のグループを並べ替えて、結果行列を得ることとを行うことができる。
【0082】
誤り訂正モジュールは、行列におけるすべての要素の和を算出することと、すべての要素の和およびその行列を一緒にメモリに記憶することと、メモリから、行列およびすべての要素の和を読み取ることと、メモリから読み取られた行列におけるすべての要素の和が、メモリから読み取られたすべての要素の和と等しくないとき、誤りを検出することとを行うことができる。
【0083】
誤り訂正モジュールは、誤りを検出すると、複数の部分行列における最も小さい行列が1つの誤った要素を含むまで、結果行列を複数の部分行列に分割することと、誤った要素を訂正することとを行うことができる。
【0084】
本開示の少なくとも1つの実施形態は、装置を含む。装置は、第1の行列と第2の行列とを乗算して結果行列を得るためのコンピューティング装置を備える。装置は、命令を記憶する非一時的コンピュータ可読媒体を備える。命令は、プロセッサによって実行されたとき、いくつかの回数の乗算計算を行うことによって、結果行列における誤りの位置および大きさを検出することであって、乗算計算の回数は、第1の行列と第2の行列とを乗算することに含まれる乗算計算の回数よりも少ない、検出することと、誤りの位置および大きさに基づいて、結果行列における誤りを訂正することとをプロセッサに行わせる。
【0085】
誤りの位置および大きさは、結果行列の複数のアイテムについての複数の予想される結果を、第1の行列の対応する複数のアイテムと第2の行列の対応する複数のアイテムとに基づいて算出することと、結果行列に基づいて、結果行列の複数のアイテムについての複数の実際の結果を算出することと、複数の予想される結果における予想される結果が複数の実際の結果における対応する実際の結果と異なることに応答して、誤りの位置および大きさを検出することとによって検出されることができる。
【0086】
誤りの大きさは、複数の予想される結果における予想される結果と、複数の実際の結果における対応する実際の結果との間の差であるように決定されることができる。誤りの位置は、予想される結果および実際の結果に基づいて、誤りの列を検出することおよび誤りの行を検出することによって検出されることができる。
【0087】
命令は、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいことに応答して、コンピューティング装置を変更する旨の通知を作成することとをプロセッサに行わせることができる。
【0088】
命令は、誤りを生成するコンピューティング装置の計算ユニットを決定することと、計算ユニットへの電圧入力を増大させることとをプロセッサに行わせることができる。
【0089】
命令は、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいことに応答して、コンピューティング装置への電圧入力を動的に調整することとをプロセッサに行わせることができる。
【0090】
命令は、コンピューティング装置に、誤りの検出に応答して第1の行列と第2の行列との乗算を繰り返させることを、プロセッサに行わせることができる。
【0091】
コンピューティング装置は、誤りの検出に応答して、第1の行列における要素の第1のグループ、および第2の行列における要素の第2のグループを並べ替えることと、並べ替えられた第1の行列と並べ替えられた第2の行列とを乗算して、並べ替えられた結果行列を得ることと、並べ替えられた結果行列における要素のグループを並べ替えて、結果行列を得ることとを行うことができる。
【0092】
本開示の少なくとも1つの実施形態は、装置を含む。装置は、第1の行列と第2の行列とを乗算して結果行列を得るためのコンピューティング装置を備える。装置は、いくつかの回数の乗算計算を行うことによって、結果行列における誤りの位置および大きさを検出するための誤り訂正回路であって、乗算計算の回数は、第1の行列と第2の行列とを乗算することに関わる乗算計算の回数よりも少ない、誤り訂正回路を備える。誤り訂正回路は、誤りの位置および大きさに基づいて、結果行列における誤りを訂正する。
【0093】
誤り訂正回路は、誤りの位置および大きさを、結果行列の複数のアイテムについての複数の予想される結果を、第1の行列の対応する複数のアイテムおよび第2の行列の対応する複数のアイテムに基づいて算出することと、結果行列に基づいて、結果行列の複数のアイテムについての複数の実際の結果を算出することと、複数の予想される結果における予想される結果が複数の実際の結果における対応する実際の結果と異なることに応答して、誤りの位置および大きさを検出することとによって検出することができる。
【0094】
コンピュータ
図10は、コンピュータシステム1000の例示的形態のマシンであって、本明細書で論じられる方法論およびモジュールのいずれか1つまたは複数をマシンに実行させるための命令のセットが実行されてよい、マシンの概略図である。
【0095】
図10の例において、コンピュータシステム1000は、プロセッサ、メモリ、不揮発性メモリ、およびインターフェース装置を含む。プロセッサは、本明細書に説明された行列乗算を行うことができる。誤り訂正モジュール100は、プロセッサのハードウェアコンポーネントとすることができ、プロセッサ上のソフトウェアとして動作することができ、および/または
図10に示されるように別個の誤り訂正モジュールとすることができる。様々な一般的コンポーネント(たとえばキャッシュメモリ)が、説明を簡単にするために省略されている。コンピュータシステム1000は、
図1ないし
図9の例において説明された任意のコンポーネント(および本明細書において説明された任意の他のコンポーネント)が実装されることが可能なハードウェア装置を示すように意図されている。コンピュータシステム1000は、任意の適用可能な既知のまたは好都合な種類のものとすることができる。コンピュータシステム1000のコンポーネントは、バスを介して、または何らかの他の既知のもしくは好都合な装置を通じて結合されることができる。
【0096】
本開示は、任意の適切な物理的形態をとるコンピュータシステム1000を企図している。限定でなく例として、コンピュータシステム1000は、組み込みコンピュータシステム、システムオンチップ(SOC)、シングルボードコンピュータシステム(SBC)(たとえば、コンピュータオンモジュール(COM)またはシステムオンモジュール(SOM)など)、デスクトップコンピュータシステム、ラップトップもしくはノートブックコンピュータシステム、インタラクティブキオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、携帯情報端末(PDA)、サーバ、またはこれらの2つ以上の組み合わせであってよい。適宜に、コンピュータシステム1000は、1つもしくは複数のコンピュータシステム1000を含み、一体化もしくは分散され、複数の位置にわたり、複数のマシンにわたり、または、1つもしくは複数のネットワークにおいて1つもしくは複数のクラウドコンポーネントを含んでよいクラウドに存在してよい。適宜に、1つまたは複数のコンピュータシステム1000は、実質的な空間的または時間的制限なしに、本明細書に説明されまたは図示された1つまたは複数の方法の1つまたは複数のステップを行ってよい。限定ではなく例として、1つまたは複数のコンピュータシステム1000は、リアルタイムまたはバッチモードにおいて、本明細書に説明されまたは図示された1つまたは複数の方法の1つまたは複数のステップを行ってよい。1つまたは複数のコンピュータシステム1000は、異なる時間でまたは異なる場所で、適宜に、本明細書に説明されまたは図示された1つまたは複数の方法の1つまたは複数のステップを行ってよい。
【0097】
プロセッサは、たとえば、Intel PentiumマイクロプロセッサまたはMotorola power PCマイクロプロセッサのような従来のマイクロプロセッサであってよい。当業者は、「機械可読(記憶)媒体」または「コンピュータ可読(記憶)媒体」という用語がプロセッサによってアクセスできる任意の種類の装置を含むことを理解するであろう。
【0098】
メモリは、たとえばバスによってプロセッサに結合される。メモリは、限定ではなく例として、ダイナミックRAM(DRAM)やスタティックRAM(SRAM)のようなランダムアクセスメモリ(RAM)を含むことができる。メモリは、ローカルに、リモートに、または分散されることができる。
【0099】
バスはまた、プロセッサを不揮発性メモリおよびドライブユニットに結合する。不揮発性メモリは、多くの場合、磁気フロッピもしくはハードディスク、光磁気ディスク、光ディスク、CD-ROM、EPROM、もしくはEEPROMなど読み取り専用メモリ(ROM)、磁気もしくは光カード、または大量のデータのための別の形態のストレージである。このデータの一部は、コンピュータ1000におけるソフトウェアの実行中に直接メモリアクセスプロセスによってメモリに書き込まれることが多い。不揮発性ストレージは、ローカルに、リモートに、または分散されることができる。不揮発性メモリは、メモリで利用可能なすべての適用可能なデータを用いてシステムが作成されることができるので、任意選択である。典型的なコンピュータシステムは通常、プロセッサと、メモリと、メモリをプロセッサに結合する装置(たとえばバス)とを少なくとも含む。
【0100】
ソフトウェアは、典型的には、不揮発性メモリおよび/またはドライブユニットに記憶される。実際、大きなプログラム全体をメモリに記憶させることは不可能なことがある。しかし、ソフトウェアを実行するために、必要な場合、それが処理に適したコンピュータ可読位置に対して移動され、その位置は説明のために本出願においてメモリと呼ばれることは理解されるべきである。ソフトウェアが実行のためにメモリに対して移動される場合でも、プロセッサは典型的には、ソフトウェアに関連付けられた値を記憶するためのハードウェアレジスタ、および理想的には実行を高速化する役割をするローカルキャシュを利用する。本明細書で使用される場合、ソフトウェアプログラムは、「コンピュータ可読媒体に実装された」と呼ばれるとき、任意の既知のまたは好都合な位置(不揮発性ストレージからハードウェアレジスタ)で記憶されるものと仮定される。プロセッサは、プログラムに関連付けられた少なくとも1つの値が、プロセッサによって読み取り可能なレジスタに記憶されたとき、「プログラムを実行するように構成された」と考えられる。
【0101】
バスはまた、プロセッサをネットワークインターフェース装置に結合する。インターフェースは、モデムまたはネットワークインターフェースの1つまたは複数を含むことができる。モデムまたはネットワークインターフェースは、コンピュータシステム1000の一部であると考えられることは理解されよう。インターフェースは、アナログモデム、ISDNモデム、ケーブルモデム、トークンリングインターフェース、衛星伝送インターフェース(たとえば「direct PC」)、またはコンピュータシステムを他のコンピュータシステムに結合するための他のインターフェースを含むことができる。インターフェースは、1つまたは複数の入力および/または出力装置を含むことができる。I/O装置は、限定ではなく例として、キーボード、マウスまたは他のポインティング装置、ディスクドライブ、プリンタ、スキャナ、ならびにディスプレイ装置を含む他の入力および/または出力装置を含むことができる。表示装置は、限定ではなく例として、陰極線管(CRT)、液晶ディスプレイ(LCD)、または何らかの他の適用可能な既知のまたは好都合な表示装置を含むことができる。簡単にするために、
図10の例において図示されていない任意の装置のコントローラがインターフェースに存在すると仮定される。
【0102】
動作において、コンピュータシステム1000は、ディスクオペレーティングシステムなどのファイル管理システムを含むオペレーティングシステムソフトウェアによって制御されることができる。オペレーティングシステムソフトウェアおよび関連付けられたファイル管理システムソフトウェアの一例は、ワシントン州レドモンドのMicrosoft CorporationのWindows(登録商標)として知られているオペレーティングシステムのファミリ、およびそれらに関連付けられたファイル管理システムである。オペレーティングシステムソフトウェアおよびそれに関連付けられたファイル管理システムソフトウェアの別の例は、Linux(商標)オペレーティングシステムおよびそれに関連付けられたファイル管理システムである。ファイル管理システムは、典型的には、不揮発性メモリおよび/またはドライブユニットに記憶され、オペレーティングシステムに必要とされる様々な動作をプロセッサに実行させて、データを入力および出力し、不揮発性メモリおよび/またはドライブユニットにファイルを記憶することを含めてデータをメモリに記憶する。
【0103】
詳細な説明のいくつかの項目は、コンピュータメモリ内のデータビットに対する操作のアルゴリズムおよび記号表現に関して提示されてよい。これらのアルゴリズム記述および表現は、データ処理技術分野の当業者によって、その作業の実体を他の当業者に最も効果的に伝達するために使用される手段である。アルゴリズムは、ここでおよび一般的に、所望の結果をもたらす動作の自己矛盾のないシーケンスであると考えられる。これらの動作は、物理量の物理的操作を必要とするものである。これらの量は、必ずではないが、通常は、記憶、転送、結合、比較、および/または他の形式で操作されることが可能な電気信号または磁気信号の形態をとる。主に一般的な使用であるという理由から、これらの信号を、ビット、値、要素、記号、文字、用語、または数字などとして参照することが、時には便利であることが分かっている。
【0104】
しかしながら、これらおよび類似の用語はすべて、適切な物理量と関連付けられるべきであり、これらの量に適用される便利なラベルにすぎないことに留意されたい。以下の説明から明らかなように、特に明記されない限り、説明全体を通して、「処理」または「コンピューティング」または「算出する」または「決定する」または「表示する」または「生成する」などの用語を利用する議論は、コンピュータシステムのレジスタおよびメモリ内で物理(電子)量として表されるデータを、コンピュータシステムメモリまたはレジスタまたは他のそのような情報記憶、伝送、もしくは表示装置内で物理量として同様に表現される他のデータへと操作および変換する、コンピュータシステムまたは類似の電子コンピューティング装置の動作およびプロセスを指すことは理解されよう。
【0105】
本明細書で提示されるアルゴリズムおよび表示は、任意の特定のコンピュータまたは他の装置に本質的には関係付けられない。様々な汎用システムが、本明細書の教示に従うプログラムと共に使用されてよく、またはいくつかの実施形態の方法を実行するためにより特化された装置を構築するのが好都合であることが明らかなことがある。様々なこれらのシステムに必要な構造は、以下の説明から明らかになるであろう。さらに、これらの技法は任意の特定のプログラミング言語を参照して説明されず、したがって、様々な実施形態は様々なプログラミング言語を使用して実装されてよい。
【0106】
代替実施形態において、マシンは、スタンドアロン装置として動作し、または他のマシンに接続(たとえば、ネットワーク接続)されてよい。ネットワーク化された配置において、マシンは、クライアント-サーバネットワーク環境におけるサーバまたはクライアントマシンの能力で、またはピアツーピア(もしくは分散された)ネットワーク環境におけるピアマシンとして動作してよい。
【0107】
マシンは、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ(PC)、タブレットPC、ラップトップコンピュータ、セットトップボックス(STB)、携帯情報端末(PDA)、セルラ電話、iPhone、Blackberry、プロセッサ、電話、ウェブアプライアンス、ネットワークルータ、スイッチもしくはブリッジ、またはそのマシンによって行われるアクションを指定する(順次または他の)命令のセットを実行できる任意のマシンであってよい。
【0108】
機械可読媒体または機械可読記憶媒体は、単一の媒体として例示的実施形態で示されているが、「機械可読媒体」および「機械可読記憶媒体」という用語は、命令の1つまたは複数のセットを記憶する単一の媒体または複数の媒体(たとえば、集中もしくは分散されたデータベースならびに/または関連付けられたキャッシュおよびサーバ)を含むように解釈されるべきである。また、「機械可読媒体」および「機械可読記憶媒体」という用語は、機械によって実行される命令のセットを記憶、符号化、または搬送することができ、ここで開示された技法およびイノベーションの方法論またはモジュールのいずれか1つまたは複数を機械に実行させる、任意の媒体を含むようにも解釈されるべきである。
【0109】
一般に、本開示の実施形態を実装するために実行されるルーチンは、「コンピュータプログラム」と呼ばれる、オペレーティングシステム、または特定のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュール、もしくは命令のシーケンスの一部として実装されてよい。コンピュータプログラムは、典型的には、コンピュータにおける1つまたは複数の処理ユニットまたはプロセッサによって読み取られ実行されるとき、本開示の様々な態様を含む要素を実行するための動作をコンピュータに実行させる、コンピュータ内の様々なメモリおよびストレージ装置における様々な時間に設定された1つまたは複数の命令を含む。
【0110】
さらに、実施形態は、完全に機能するコンピュータおよびコンピュータシステムの文脈で説明されているが、当業者は、様々な実施形態が様々な形態のプログラム製品として配布されることができ、配布を実際に行うために使用される特定の種類の機械またはコンピュータ可読媒体にかかわらず本開示は等しく適用されることを理解するであろう。
【0111】
さらに、機械可読記憶媒体、機械可読媒体、またはコンピュータ可読(記憶)媒体のさらなる例は、揮発性および不揮発性メモリ装置、フロッピおよび他のリムーバブルディスク、ハードディスクドライブ、光ディスク(たとえば、コンパクトディスク読み取り専用メモリ(CD ROM)、デジタル多用途ディスク(DVD)など)のような記録可能型媒体、ならびにデジタルおよびアナログ通信リンクなどの伝送型媒体を含むが、これらに限定されない。
【0112】
状況によっては、たとえば、バイナリ1からバイナリ0への状態の変化、またはその逆のようなメモリ装置の動作は、物理的変換などの変換を含んでよい。特定の種類のメモリ装置では、そのような物理的変換は、物品の異なる状態または物への物理的変換を含んでよい。たとえば、限定するものではないが、いくつかの種類のメモリ装置では、状態の変化は、電荷の蓄積および貯蔵、または貯蔵された電荷の解放を伴ってよい。同様に、他のメモリ装置において、状態の変化は、磁気配向における物理的変化もしくは変換、または結晶からアモルファスもしくはその逆のような分子構造における物理的変化もしくは変換を含んでよい。上記は、メモリ装置におけるバイナリ1からバイナリ0もしくはその逆の状態の変化が物理的変換などの変換を含んでよい、網羅的リストであることは意図されていない。むしろ、上記は例示的な例として意図されている。
【0113】
記憶媒体は典型的には、非一時的であってよく、または非一時的装置を含んでよい。この文脈において、非一時的記憶媒体は、装置がその物理的状態を変更してよいが、装置が具体的な物理形態を有することを意味する、有形である装置を含んでよい。したがって、たとえば、非一時的とは、この状態の変化にかかわらず有形のままである装置を指す。
【0114】
備考
特許請求される主題の様々な実施形態の上記の説明は、例示および説明のために提供されている。それは、網羅的であること、または特許請求される主題を開示された具体的形態に限定することは意図されていない。多くの修正および変形は当業者には明らかであろう。実施形態は、本発明の原理およびその実際の適用を最も良く説明するために選択され記載されており、それによって、関連技術の他の当業者が、企図される特定の使用に適した特許請求される主題、様々な実施形態、および様々な修正を理解することを可能にする。
【0115】
実施形態は、完全に機能するコンピュータおよびコンピュータシステムの文脈で説明されているが、当業者は、様々な実施形態が様々な形態のプログラム製品として配布されることができ、配布を実際に行うために使用される特定の種類の機械またはコンピュータ可読媒体にかかわらず本開示は等しく適用されることを理解するであろう。
【0116】
上記の詳細な説明は、特定の実施形態および企図される最良の形態を説明するが、上記が本文中でどのように詳細に説明されても、実施形態は多くの方法で実施されることが可能である。システムおよび方法の詳細は、その実装の詳細においてかなり変化してよいが、それでも本明細書に包含される。上記されたように、様々な実施形態の特定の特徴または態様を説明するときに使用される特定の用語は、その用語が関連付けられた本発明の任意の特定の特性、特徴、または態様に制限されるようにその用語が本明細書で再定義されていることを意味するように解釈されるべきではない。一般に、添付の特許請求の範囲で使用される用語は、本明細書で明示的に定義されない限り、本明細書で開示された特定の実施形態に本発明を限定するように解釈されるべきではない。したがって、本発明の実際の範囲は、開示された実施形態だけでなく、特許請求の範囲のもとで実施形態を実施または実装するすべての等価な態様も包含する。
【0117】
本明細書で使用される言葉は、主に可読性および教育目的で選択されており、本発明の主題を線引きまたは限定するように選択されなくてよい。したがって、本発明の範囲は、この詳細な説明によって限定されず、本明細書に基づく出願において発行される任意の請求項によって限定されることが意図される。したがって、様々な実施形態の開示は、添付の特許請求の範囲に記載される本発明の範囲を限定することなく例示することが意図される。