(57)【要約】ここでは、計算における誤りを検出および／または訂正する技法が紹介される。計算における誤りを訂正する能力は、そのような生成された誤りが検出され訂正されることが可能であるため、プロセッサの速度を増大させ、プロセッサの電力消費を減少させ、プロセッサ内のトランジスタ間の距離を減少させることができる。一実施形態において、ソフトウェアまたはハードウェアにおいて動作している誤り訂正モジュールが、結果行列におけるすべての要素の予想される和と、結果行列におけるすべての要素の実際の和とを算出することによって、行列乗算における誤りを検出することができる。予想された和と結果の和との間に差があるとき、誤り訂正モジュールが誤りを検出する。別の実施形態において、誤りを検出することに加えて、誤り訂正モジュールは、誤りの位置および大きさを決定し、したがって、誤った計算を訂正することができる。
2020512712.tif 000002
【特許請求の範囲】
【請求項１】
第１の行列と第２の行列とを乗算して結果行列を得るためのコンピューティング装置と、
命令を記憶する非一時的コンピュータ可読媒体と
を備え、前記命令は、プロセッサによって実行されたとき、
いくつかの回数の乗算計算を行うことによって、前記結果行列における誤りの位置および大きさを検出することであって、乗算計算の前記回数は、前記第１の行列と前記第２の行列とを乗算することに関わる乗算計算の回数よりも少ない、検出することと、
前記誤りの前記位置および前記大きさに基づいて、前記結果行列における前記誤りを訂正することと
を前記プロセッサに行わせることを特徴とする装置。
【請求項２】
前記誤りの前記位置および前記大きさは、
前記結果行列の複数のアイテムについての複数の予想される結果を、前記第１の行列の対応する複数のアイテムと前記第２の行列の対応する複数のアイテムとに基づいて算出することと、
前記結果行列に基づいて、前記結果行列の前記複数のアイテムについての複数の実際の結果を算出することと、
前記複数の予想される結果における予想される結果が前記複数の実際の結果における対応する実際の結果と異なることに応答して、前記誤りの前記位置および大きさを検出することと
によって検出されることを特徴とする請求項１に記載の装置。
【請求項３】
前記誤りの前記大きさは、前記複数の予想される結果における前記予想される結果と、前記複数の実際の結果における前記対応する実際の結果との間の差であるように決定されることを特徴とする請求項２に記載の装置。
【請求項４】
前記誤りの前記位置は、前記予想される結果および前記実際の結果に基づいて、前記誤りの列を検出することおよび前記誤りの行を検出することによって検出されることを特徴とする請求項２に記載の装置。
【請求項５】
前記命令は、
前記誤りに関連付けられた誤り率をモニタすることと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置を変更する旨の通知を作成することと
を前記プロセッサに行わせることを特徴とする請求項１に記載の装置。
【請求項６】
前記命令は、
前記誤りを生成する前記コンピューティング装置の計算ユニットを決定することと、
前記計算ユニットへの電圧入力を増大させることと
を前記プロセッサに行わせることを特徴とする請求項１に記載の装置。
【請求項７】
前記命令は、
前記誤りに関連付けられた誤り率をモニタすることと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置への電圧入力を動的に調整することと
を前記プロセッサに行わせることを特徴とする請求項１に記載の装置。
【請求項８】
前記命令は、
前記コンピューティング装置に、前記誤りの検出に応答して前記第１の行列と前記第２の行列との乗算を繰り返させること
を前記プロセッサに行わせることを特徴とする請求項１に記載の装置。
【請求項９】
前記コンピューティング装置は、前記誤りの検出に応答して、
前記第１の行列における要素の第１のグループと前記第２の行列における要素の第２のグループとを並べ替えることと、
前記並べ替えられた第１の行列と前記並べ替えられた第２の行列とを乗算して、並べ替えられた結果行列を得ることと、
前記並べ替えられた結果行列における要素のグループを並べ替えて、前記結果行列を得ることと
を行うことを特徴とする請求項１に記載の装置。
【請求項１０】
コンピューティング装置によって、第１の行列と第２の行列とを乗算して結果行列を得るステップと、
いくつかの回数の乗算計算を行うことによって、前記結果行列における誤りの位置および大きさを検出するステップであって、前記乗算計算の回数は、前記第１の行列と前記第２の行列とを乗算することに必要とされる乗算計算の回数よりも少ない、ステップと、
前記誤りの前記位置および前記大きさに基づいて、前記結果行列における前記誤りを訂正するステップと
を含むことを特徴とする方法。
【請求項１１】
前記誤りの前記位置および前記大きさを検出するステップは、
前記結果行列の複数のアイテムについての複数の予想される結果を、前記第１の行列の対応する複数のアイテムおよび前記第２の行列の対応する複数のアイテムに基づいて算出するステップと、
前記結果行列に基づいて、前記結果行列の前記複数のアイテムについての複数の実際の結果を算出するステップと、
前記複数の予想される結果における予想される結果が、前記複数の実際の結果における対応する実際の結果と異なることに応答して、前記誤りの前記位置および大きさを検出するステップと
を含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記誤りの前記大きさは、前記複数の予想される結果における前記予想される結果と、前記複数の実際の結果における前記対応する実際の結果との間の差であるように決定されることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記誤りの前記位置を検出するステップは、前記予想される結果および前記実際の結果に基づいて、前記誤りの列を検出しおよび前記誤りの行を検出するステップを含むことを特徴とする請求項１１に記載の方法。
【請求項１４】
前記誤りに関連付けられた誤り率をモニタするステップと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置を変更する旨の通知を作成するステップと
をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記誤りを生成する前記コンピューティング装置の計算ユニットを決定するステップと、
前記計算ユニットへの電圧入力を増大させるステップと
をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１６】
前記誤りに関連付けられた誤り率をモニタするステップと、
予め定義された閾値よりも前記誤り率が大きいことに応答して、前記コンピューティング装置への電圧入力を動的に調整するステップと
をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１７】
前記誤りの検出に応答して前記第１の行列と前記第２の行列との乗算を繰り返すステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１８】
前記誤りの検出に応答して、
前記第１の行列における要素の第１のグループと前記第２の行列における要素の第２のグループとを並べ替えるステップと、
前記コンピューティング装置によって、前記並べ替えられた第１の行列と前記並べ替えられた第２の行列とを乗算して、並べ替えられた結果行列を得るステップと、
前記並べ替えられた結果行列における要素のグループを並べ替えて、前記結果行列を得るステップと
をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１９】
第１の行列と第２の行列とを乗算して、結果行列を得るためのコンピューティング装置と、
いくつかの回数の乗算計算を行うことによって、前記結果行列における誤りの位置および大きさを検出するための誤り訂正回路であって、前記乗算計算の回数は、前記第１の行列と前記第２の行列とを乗算することに関わる乗算計算の回数よりも少ない、該誤り訂正回路と
を備え、
前記誤り訂正回路は、前記誤りの前記位置および前記大きさに基づいて、前記結果行列における前記誤りを訂正することを特徴とする装置。
【請求項２０】
前記誤り訂正回路は、前記誤りの前記位置および前記大きさを、
前記結果行列の複数のアイテムについての複数の予想される結果を、前記第１の行列の対応する複数のアイテムおよび前記第２の行列の対応する複数のアイテムに基づいて算出することと、
前記結果行列に基づいて、前記結果行列の前記複数のアイテムについての複数の実際の結果を算出することと、
前記複数の予想される結果における予想される結果が前記複数の実際の結果における対応する実際の結果と異なることに応答して、前記誤りの前記位置および大きさを検出することと
によって検出することを特徴とする請求項１９に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願の１つまたは複数の実施形態は、計算中の誤りを検出し訂正することに関し、より詳細には、行列乗算における誤りを検出し訂正する方法およびシステムに関する。
【背景技術】
【０００２】
関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれている、２０１７年１月１１日に出願された米国特許仮出願第６２／４４４，９５０号明細書の優先権を主張するものである。
【０００３】
現代のプロセッサにおいて、プロセッサの速度、プロセッサの電力消費、およびプロセッサ内のトランジスタ間の距離は、プロセッサにおける最も信頼性の低いトランジスタが誤りなしで動作できるように決定される。内部クロックの周波数を増大させることによってプロセッサの速度を増大させることは、プロセッサの最も信頼性の低いトランジスタにおける誤りという結果になる可能性がある。同様に、プロセッサの電力消費を減少させること、またはプロセッサの計算ユニット間の距離を減少させることも、誤った計算という結果になる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書で紹介される１つまたは複数の実施形態は、計算における誤りの検出および／または訂正する技法を含んでよい。計算における誤りを訂正する能力は、そのような生成された誤りが検出され訂正されることが可能であるため、プロセッサの速度を増大させ、プロセッサの電力消費を減少させ、プロセッサ内のトランジスタ間の距離を減少させることができる。一実施形態において、ソフトウェアまたはハードウェアにおいて動作している誤り訂正モジュールが、結果行列におけるすべての要素の予想される和と、結果行列におけるすべての要素の実際の和とを算出することによって、行列乗算における誤りを検出することができる。予想された和と結果の和との間に差があるとき、誤り訂正モジュールが誤りを検出する。別の実施形態において、誤りを検出することに加えて、誤り訂正モジュールは、誤りの位置および大きさを決定し、したがって、誤った計算を訂正することができる。
【図面の簡単な説明】
【０００５】
本実施形態の上記および他の目的、特徴、および特性は、本明細書の一部を成す、添付の特許請求の範囲および図面と関連する以下の詳細な説明を検討することによって、当業者により明らかとなるであろう。添付の図面は様々な実施形態の例示を含むが、これらの図面は、特許請求される主題を限定するように意図されていない。
【０００６】
【図１】一実施形態に従って、電子回路および計算誤り訂正モジュールを含む装置を示す図である。
【図２Ａ】一実施形態に従ってＮＯＴ論理ゲートを示す図である。
【図２Ｂ】一実施形態に従って、クロック速度が増大されたＮＯＴ論理ゲートを示す図である。
【図２Ｃ】一実施形態に従って、入力電圧が減少されたＮＯＴ論理ゲートを示す図である。
【図３】一実施形態に従って、行列乗算における誤りを検出する方法を示す図である。
【図４】一実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す図である。
【図５】別の実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す図である。
【図６】一実施形態に従って、結果行列における誤りの位置および大きさを検出する方法を示す図である。
【図７Ａ】一実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す図である。
【図７Ｂ】別の実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す図である。
【図８】一実施形態に従って、行列乗算における誤りを検出し訂正することによってプロセッサの効率を増大させる方法のフローチャートである。
【図９】一実施形態に従って、行列乗算における誤りを検出することによってプロセッサの効率を増大させる方法のフローチャートである。
【図１０】コンピュータシステム１０００の例示的形態のマシンであって、本明細書で論じられる方法論およびモジュールのいずれか１つまたは複数をマシンに実行させるための命令のセットが実行されてよい、マシンの概略図である。
【発明を実施するための形態】
【０００７】
用語
本出願を通して使用される用語、略語および語句の簡潔な定義が以下に与えられる。
【０００８】
本明細書において、「一実施形態」または「実施形態」への言及は、その実施形態に関連して説明される特定の特徴、構造、または特性が本開示の少なくとも１つの実施形態に含まれることを意味する。本明細書における様々な場所での「一実施形態において」という語句の出現は、必ずしもすべて同じ実施形態を参照するものではなく、他の実施形態と互いに排他的な別個または代替の実施形態でもない。さらに、一部の実施形態によって示され他の実施形態によって示されないことがある様々な特徴が説明される。同様に、一部の実施形態の要件であるが他の実施形態の要件ではない様々な要件が説明される。
【０００９】
文脈が明確に特に要求しない限り、明細書および特許請求の範囲を通して、「備える（comprise）」、「備えている（comprising）」などの語は、排他的または網羅的な意味ではなく包含的意味で解釈されるべきであり、すなわち、「含むが限定されない」という意味で解釈されるべきである。本明細書で使用される場合、用語「接続された」、「結合された」、またはその任意の変形は、２つ以上の要素の間の直接的または間接的な任意の接続または結合を意味する。要素間の結合または接続は、物理的、論理的、またはこれらの組み合わせとすることができる。たとえば、２つの装置は、直接結合されてよく、または１つもしくは複数の中間チャネルまたは装置を介して結合されてよい。別の例として、装置は、互いに物理接続を共有することなく、情報がそれらの間で渡されることが可能なように結合されてよい。また、「本明細書において」、「上で」、「以下で」、および類似の意味の語は、本出願において使用されるとき、本出願全体を指すものとし、本出願の特定の項目を指すものではない。文脈が許すならば、詳細な説明における単数または複数を使用する語は、それぞれ複数または単数の数を含んでもよい。２つ以上の項目のリストを参照する「または」という語は、以下の語の解釈の全て、すなわち、リストにおける項目のいずれか、リストにおける項目の全て、およびリストにおける項目の任意の組み合わせを含む。
【００１０】
明細書が、構成要素または特徴が含まれるまたは特性を有することを「してよい」、「できる」、「できた」、または「してもよい」と述べる場合、その特定の構成要素または特徴は含まれるまたは特性を有することを必須とされない。
【００１１】
「モジュール」という用語は、ソフトウェア、ハードウェア、もしくはファームウェアコンポーネント（またはこれらの任意の組み合わせ）を広く指す。モジュールは、典型的には、指定された入力を使用して有用なデータまたは他の出力を生成することができる機能的コンポーネントである。モジュールは自己完結されてよく、またはそうでなくてよい。アプリケーションプログラム（「アプリケーション」とも呼ばれる）が１つもしくは複数のモジュールを含んでよく、またはモジュールが１つまたは複数のアプリケーションプログラムを含んでよい。
【００１２】
詳細な説明において使用される用語は、それが特定の例と共に使用されているとしても、その最も広い合理的な方式で解釈されることが意図される。本明細書において使用される用語は一般に、本開示の文脈内で、および各用語が使用される特定の文脈において、当技術分野におけるそれらの通常の意味を有する。便宜上、特定の用語は、たとえば、大文字、斜体、および／または引用符を使用して強調表示されることがある。強調表示の使用は、用語の範囲および意味に影響せず、すなわち、用語の範囲および意味は、同じ文脈において、それが強調されているか否かにかかわらず同じである。同じ要素が複数の方法で説明される可能性があることは理解されよう。
【００１３】
したがって、本明細書で論じられる用語のいずれか１つまたは複数に代替言語および同義語が使用されてよいが、用語が本明細書で詳述されまたは論じられるかどうかに特に重きは置かれない。１つまたは複数の同義語の説明は、他の同義語の使用を排除しない。本明細書で論じられる任意の用語の例を含む本明細書におけるあらゆる場所での例の使用は単に例示であり、本開示およびあらゆる例示された用語の範囲および意味をさらに限定することは意図されていない。同様に、本明細書で与えられる様々な実施形態に本開示は限定されない。
【００１４】
技術
本明細書に開示される１つまたは複数の実施形態は、計算における誤りを検出および／または訂正する技法を含んでよい。計算における誤りを訂正する能力は、そのような生成された誤りが検出され訂正されることが可能であるため、プロセッサの速度を増大させ、プロセッサの電力消費を減少させ、プロセッサ内のトランジスタ間の距離を減少させることができる。一実施形態において、ソフトウェアまたはハードウェアにおいて動作している誤り訂正モジュールが、結果行列におけるすべての要素の予想される和と、結果行列におけるすべての要素の実際の和とを算出することによって、行列乗算における誤りを検出することができる。予想された和と結果の和との間に差があるとき、誤り訂正モジュールが誤りを検出する。別の実施形態において、誤りを検出することに加えて、誤り訂正モジュールは、誤りの位置および大きさを決定し、したがって、誤った計算を訂正することができる。
【００１５】
図１は、一実施形態に従って、電子回路および計算誤り訂正モジュールを含む装置を示す。誤り訂正モジュール１００は、電子回路１１０に接続されている。誤り訂正モジュール１００および電子回路１１０は、単一のプロセッサの一部とすることができ、または別個のコンポーネントとすることができる。誤り訂正モジュール１００は、ハードウェアに実装されることができ、またはソフトウェアに実装されることができる。たとえば、誤り訂正モジュール１００は、電子回路１１０を含むプロセッサ上でソフトウェア命令として実行することができる。誤り訂正モジュール１００は、電子回路１１０が行列乗算などの計算を行うときに電子回路１１０によって導入される計算誤りを検出する。誤り訂正モジュール１００は、電子回路１１０における計算ユニット１２０内の誤りを検出することができる。別の例として、誤り訂正モジュール１００は、論理ゲート、乗算および加算回路、ならびに／またはこれらの演算を行うための他の回路を含む、誤り訂正回路とすることができる。
【００１６】
電子回路１１０は、プロセッサ、マイクロコントローラ、プロセッサの部分、またはマイクロコントローラの部分とすることができる。電子回路１１０は、トランジスタ、メモリスタ、量子計算要素などのビルディングブロックで構成される。電子回路１１０内の計算ユニット１２０は、単一のビルディングブロックと同程度に小さくすることができ、または電子回路１１０内のビルディングブロックのグループとすることができる。一実施形態において、電子回路１１０は、機械学習モデルに関する行列乗算を実行するプロセッサである。１つの行列における値は、機械学習モデルの層からの重みとすることができ、別の行列における値は、機械学習モデルの層に対する入力データ（たとえば、画像データ、音声データ）とすることができる。次いで、２つの行列は、電子回路１１０によって一緒に乗算されて、機械学習モデルの層の出力を表す結果行列を生成する。
【００１７】
図２Ａは、一実施形態に従ってＮＯＴ論理ゲートを示す。ＮＯＴ論理ゲート２００は、変数入力２１０を取り込み、否定された変数入力２１０と等価な出力２３０を生成する。クロック信号２２０は、線２４０によって示されるサイクルに分割される（簡潔にするために１つだけラベル付けされている）。線２４０は、１クロックサイクルの終わりおよび次のクロックサイクルの始まりを示す。各クロックサイクルの始めで、ＮＯＴ論理ゲート２００が適切に動作しているとき、ＮＯＴ論理ゲート２００は以下の出力を生成する。すなわち、変数入力２１０が１であるとき、出力２３０は０であり、変数入力２１０が０であるとき、出力２３０は１である。
【００１８】
図２Ｂは、一実施形態に従って、クロック速度が増大されたＮＯＴ論理ゲートを示す図である。クロック信号２２０の周波数が増大すると、ＮＯＴ論理ゲート２００はライン２４０によって示される連続したクロックサイクルの間で放電するのに十分な時間を有しないため、ＮＯＴ論理ゲート２００は誤った出力を生成させられる可能性がある。図２Ｂに示されるように、ＮＯＴ論理ゲートは、期間２５０において適切に放電せず、０の代わりに誤って１の出力を生成する。
【００１９】
図２Ｃは、一実施形態に従って、入力電圧が減少されたＮＯＴ論理ゲートを示す。変数入力２１０の電圧を低減させると、入力電圧がＮＯＴ論理ゲート２００を通じて電流の流れをアクティブ化するのに十分でないため、ＮＯＴ論理ゲート２００は誤った出力を生成させられる可能性がある。図２Ｃに示されるように、ＮＯＴ論理ゲートは、期間２６０において適切に放電せず、１の代わりに誤って０の出力を生成する。
【００２０】
さらに、電子回路印刷中に論理ゲートを互いにより近く配置することは、論理ゲートにおけるクロストークを引き起こして、それらに計算誤りを生じさせる。行列乗算における誤りを検査し訂正する能力を有することは、プロセッサ設計者およびプロセッサ製作者が、より高速で、より電力効率的で、より空間効率的なプロセッサを作ることを可能にする。
【００２１】
図３は、一実施形態に従って、行列乗算における誤りを検出する方法を示す。２つの行列３００および３１０が一緒に乗算されて結果行列３２０を得る。結果行列３２０が正しいかどうかを検査するために、誤り訂正モジュール１００は２つのベクトル３３０、３４０を計算する。ベクトル３３０における各要素は、行列３００における対応する列の和である。たとえば、要素３５０は、列３５５の和である。ベクトル３４０における各要素は、行列３１０における対応する行の和である。たとえば、要素３６０は、行３６５の和である。誤り訂正モジュール１００は、２つのベクトル３３０、３４０のドット積を行って予想される結果３７０を得る。誤り訂正モジュール１００はまた、結果行列３２０における要素を合計して実際の結果３８０を得る。予想される結果３７０と実際の結果３８０が等しくないとき、誤り訂正モジュール１００は誤りを検出する。
【００２２】
上記された方法を行う利点は、２つのベクトル３３０、３４０、およびそれらのドット積である予想される結果３７０の作成は、２つの行列３００および３１０の行列乗算を行うよりも指数関数的に少ない計算を必要とするだけでよいことである。たとえば、行列３００、３１０のサイズはＮ×Ｎであり、図３においてＮ＝８である。結果行列３２０を生成する演算の回数は、Ｏ（Ｎ3）である。図３において、結果行列３２０の算出は、結果行列３２０における要素ごとに８回の乗算および７回の加算を必要とする。結果行列３２０において６４個の要素があり、したがって、結果行列３２０を生成する演算の回数は、８＊８＊（８回の乗算＋７回の加算）＝Ｏ（８3）である。予想される結果３７０を生成するのに必要とされる可能性のある演算の回数は、Ｏ（Ｎ2）である。図３において、２つのベクトル３３０、３４０における各要素を生成するために７回の加算を必要とする。ベクトル３３０、３４０のドット積を生成するために８回の乗算を必要とする。したがって、予想される結果３７０の生成は、７＊１６回の加算＋８回の乗算＝Ｏ（８2）を必要としてよい。Ｏ（Ｎ2）はＯ（Ｎ3）よりも１指数分小さい。したがって、誤り訂正を行うことは、行列乗算を行うことよりも少なくとも１指数分は安価である。
【００２３】
乗算を行うことは、加算を行うことよりも高価である。したがって、行列乗算と上述された誤り検査との間の乗算の回数を比較することは、誤り検査の効率の有用な尺度となる。行列乗算において必要とされることがある乗算の回数は、Ｏ（Ｎ3）である。上述された誤り検査を行うのに必要とされる乗算の回数は、Ｏ（Ｎ）である。したがって、誤り検査において必要とされる乗算の回数は、行列乗算を行う場合よりも２指数分、安価である。
【００２４】
誤りが検出されると、誤り訂正モジュール１００は誤りを記録することができる。誤りが記録されると、誤り訂正モジュール１００は１つまたは複数の事項を行うことができる。たとえば、誤り訂正モジュール１００は、行列乗算を再び行うように電子回路１１０に対して信号を送ることができる。計算全体を再び行う際に、電子回路１１０は、同じ誤りが再び発生するのを防止するために、行および列を並べ替える、または行列３００、３１０の要素のグルーピングを並べ替えることができる。
【００２５】
さらに、誤り訂正モジュール１００は、誤りの率を測定することができる。観測された誤り率が、指定された閾値、たとえば、秒あたり１つの誤り、ミリ秒あたり１つの誤りなどよりも大きいとき、誤り訂正モジュール１００は、電子回路１１０が置換されるべきというメッセージを送ることができる。誤り率検出は、自動運転車、医療装置、航空機飛行制御、兵器、原子力システムなどにおけるプロセッサのような安全性が重要なシステムにおいて有用な可能性がある。プロセッサの置換が要求される可能性があるので、プロセッサがいつ信頼性のある動作をしなくなるかを知ることは有用である。
【００２６】
同様に、誤り率を観測することは、電子回路によって生成された誤りが、指定された閾値、たとえば、秒あたり１つの誤り、ミリ秒あたり１つの誤りなどよりも大きくなるまで、システムが電子回路１１０への入力電圧を低下させることを可能にすることができる。電子回路１１０に対する電圧を動的に調整することは、電子回路１１０による電力消費を減少させる。
【００２７】
さらに、誤り訂正モジュール１００は、電子回路１１０内の計算ユニット１２０についての誤りの率を測定することができる。計算ユニット１２０は、電子回路１１０内の単一のビルディングブロックと同程度に小さくすることができ、または電子回路１１０内のビルディングブロックのグループとすることができる。誤りの率が予め定義された閾値を超えたとき、誤り訂正モジュール１００は、誤りの率が予め定義された閾値を超えた計算ユニット１２０に対する電圧を動的に調整することができる。
【００２８】
図４は、一実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す。一般に、誤り訂正モジュール１００が、結果行列３２０において誤りがあると決定すると、誤り訂正モジュール１００は、結果行列３２０を複数の部分行列にさらに分割し、各部分行列について同じ誤り検出演算を行うことができる。誤り訂正モジュール１００は、結果行列を、図４に示されるように２つの行列に、または３つの行列に、または各部分行列が少なくとも１つの要素を含む限り任意の数の行列にさらに分割することができる。
【００２９】
図４の特定の例において、誤り訂正モジュール１００は、結果行列３２０を２つの部分行列４００、４１０にさらに分割し、行列３１０を対応する部分行列４２０、４３０にさらに分割する。行列３００を部分行列４２０と乗算したとき、結果は部分行列４００となる。行列３００を部分行列４３０と乗算したとき、結果は部分行列４１０となる。次いで、誤り訂正モジュール１００は、図３に説明されたのと同じ誤り検出演算を、結果の部分行列４００、４１０に対して行って、２つの実際の結果４４０、４５０を生成する。
【００３０】
２つの予想される結果４６０、４７０を生成するために、誤り訂正モジュール１００は３つのベクトル３３０、４８０、４９０を算出する。ベクトル３３０は、図３におけるベクトル３３０と同じ方法で算出される。ベクトル４８０における各要素は、部分行列４２０における対応する行の和である。たとえば、ベクトル４８０における要素４８２は、部分行列４２０における行４８４の要素の和である。同様に、ベクトル４９０における各要素は、部分行列４３０における対応する行の和である。たとえば、ベクトル４９０における要素４９２は、部分行列４３０における行４９４の要素の和である。
【００３１】
結果の部分行列４００、４１０における誤りがあるかどうかを決定するために、誤り訂正モジュール１００は、予想される結果４６０、４７０を実際の結果４４０、４５０と比較する。予想される結果４６０が実際の結果４４０と一致するとき、対応する部分行列４００において誤りが存在しない。同様に、予想される結果４７０が実際の結果４５０と一致するとき、対応する部分行列４１０において誤りが存在しない。逆に、予想される結果４６０が実際の結果４４０と一致しないとき、この不一致は、部分行列４００が少なくとも１つの誤りを含むことを示す。予想される結果４７０が実際の結果４５０と一致しないとき、この不一致は、部分行列４１０が少なくとも１つの誤りを含むことを示す。図４に見られるように、結果４４０と結果４６０は一致するので、部分行列４００において誤りは存在しない。結果４５０と結果４７０は一致しないので、部分行列４１０において誤りが存在する。
【００３２】
誤り訂正モジュール１００は、誤り４９９が発見されるまで、点線４８５に沿って誤り４９９を含む行列のさらなる分割を継続する。本明細書で説明されている方法は、単一の結果行列３２０における複数の誤りを発見するために利用されることが可能である。
【００３３】
誤り訂正モジュール１１０が結果行列３２０における１つまたは複数の誤りを発見すると、誤り訂正モジュール１００は、計算全体を再び行うように電子回路１１０に対して信号を送ることができる。計算全体を再び行う際に、電子回路１１０は、同じ誤りが再び発生するのを防止するために、行および列を並べ替える、または行列３００、３１０の要素の種々のグルーピングを並べ替えることができる。あるいは、誤り訂正モジュール１００は、誤った要素を算出するために必要とされるドット積を行うことができる。
【００３４】
図５は、別の実施形態に従って、行列乗算における誤りを検出し訂正する方法を示す。電子回路１１０が行列３００を行列３１０によって乗算したとき、結果行列３２０は誤り５９９を含む。誤り５９９を検出するために、誤り訂正モジュール１００は、行列３００を行列３１０によって乗算するために必要とされる回数の計算よりも安価となる回数の計算を行う。誤り訂正モジュール１００は、２つの中間行列５００、５１０を計算する。
【００３５】
中間行列５００における各要素は、行列３００における対応する要素の和である。中間行列５００の第１の行における要素は、行列３００における対応する列の和である。たとえば、中間行列５００における要素５０２は、行列３００における列５０４の和である。中間行列５００の第２の行における要素は、行列３００における各対応する列の最初の４つの要素の和である。たとえば、中間行列５００における要素５０６は、行列３００における列５０８の半分の和である。中間行列５００の第３の行における要素は、行列３００における各対応する列の第１、第２、第５、および第６の要素の和である。たとえば、中間行列５００における要素５１８は、行列３００における要素５１２の和である。最後に、中間行列５００の第４の行における要素は、行列３００における各対応する列における１つ置きの要素の和である。たとえば、中間行列５００における要素５１４は、行列３００における要素５１６の和である。
【００３６】
同様に、中間行列５１０は、行列３１０における対応する要素の和である。中間行列５１０の第１の列における要素は、行列３１０における対応する行の和である。たとえば、中間行列５１０における要素５２２は、行列３１０における行５２４の和である。中間行列５１０の第２の列における要素は、行列３１０における各対応する行における最初の４つの要素の和である。たとえば、中間行列５１０における要素５２６は、行列３１０における行５２８の半分の和である。中間行列５１０の第３の列における要素は、行列３１０における各対応する行の第１、第２、第５、および第６の要素の和である。たとえば、中間行列５１０における要素５３０は、行列３１０における要素５３２の和である。最後に、中間行列５１０の第４の列における要素は、行列３１０における各対応する行における１つ置きの要素の和である。たとえば、中間行列５１０における要素５３４は、行列３１０における要素５３６の和である。
【００３７】
中間行列５００、５１０は部分的に乗算されて、部分行列５２０を生成する。部分行列５２０における各要素は、結果行列３２０に含まれる複数のアイテムの要素の予想される和である。結果行列３２０におけるアイテムは、結果行列３２０全体とすることができ、または結果行列３２０における要素のグループとすることができる。結果行列３２０におけるグループの要素は、連続または非連続とすることができる。
【００３８】
部分行列５６０における各要素は、結果行列３２０に含まれる複数のアイテムの要素の実際の和である。たとえば、各要素５５０、５５２、５５４、５５６はそれぞれ、複数のアイテム５４０、５４２、５４４、５４６の要素の和である。言い換えれば、要素５５０はアイテム５４０におけるすべての要素の和であり、要素５５２はアイテム５４２におけるすべての要素の和であり、要素５５４はアイテム５４４におけるすべての要素の和であり、要素５５６はアイテム５４６におけるすべての要素の和である。
【００３９】
同様に、要素５６２、５６４、５６６は、結果行列３２０に含まれる別の複数のアイテムの要素の和である。たとえば、行列３２０は、行０ないし行７、および列０ないし列７を含み、行列３２０の左上隅は、行０と列０の交差部とする。したがって、要素５６２は、行０ないし行３におけるすべての要素の和と等しい。要素５６４は、行０ないし行１および行４ないし行５におけるすべての要素の和と等しい。要素５６６は、行０、行２、行４、行６におけるすべての要素の和と等しい。
【００４０】
図５に見られるように、部分行列５２０と５６０における要素は、一対一の対応関係を有する。結果行列３２０がいかなる誤りも含んでいないとき、部分行列５２０と部分行列５６０における対応する要素は等しい。しかしながら、図５に見られるように、結果行列３２０が誤りを含んでいるとき、部分行列５２０における要素と、部分行列５６０における対応する要素との間に相違がある。
【００４１】
本明細書に説明されているように、行列乗算を行うために必要とされる演算の回数は、Ｏ（Ｎ3）であり、ここで、Ｎ×Ｎは、入力行列３００、３１０、および結果行列３２０のサイズである。部分行列５２０を生成するのに必要とされる演算の回数は、２つの行列５００、５１０における各要素についてＮ回の加算、および部分行列５２０における各要素についてＮ回の乗算となる。２つの行列５００、５１０において合計でＮ2の要素がある。部分行列５２０において（ｌｏｇ2Ｎ）＊２＋１個の要素がある。したがって、部分行列５２０を生成するために必要とされる演算の回数は、Ｎ回の加算＊Ｎ2＋Ｎ回の乗算＊（（ｌｏｇ2Ｎ）＊２＋１）＝Ｏ（Ｎ3）である。乗算は加算よりも高価であるとすると、乗算の回数を比較することは、誤り検査効率の重要な尺度となる。行列乗算における乗算の回数はＯ（Ｎ3）であるのに対し、誤りの位置および大きさを検出する際の乗算の回数は（Ｎ＊ｌｏｇ2Ｎ）である。したがって、誤り検査における乗算の回数は、行列乗算における乗算の回数よりも少なくとも指数関数的に少ない。
【００４２】
図６は、一実施形態に従って、結果行列における誤りの位置および大きさを検出する方法を示す。部分行列５２０における各要素は、部分行列５６０における１つの要素に対応する。本明細書に説明されているように、部分行列５６０における各要素は、結果行列３２０に含まれる複数のアイテムの要素の実際の和である。部分行列５２０における要素が部分行列５６０における対応する要素に一致しないとき、それは、結果行列３２０における対応するアイテムが誤りを含むことを意味する。誤りの位置および大きさを検出するために、誤り訂正モジュール１００は、部分行列５２０における各要素を、部分行列５６０における対応する要素と比較する。
【００４３】
誤りが発生している結果行列３２０における列を検出するために、誤り訂正モジュール１００は、部分行列５２０における要素６５２と部分行列５６０における要素５５２とを比較する。要素６５２と要素５５２が等しいとき、誤り訂正モジュール１００はビット６００において１の値を記録する。要素６５２と要素５５２が等しくないとき、誤り訂正モジュール１００はビット６００において０の値を記録する。誤り訂正モジュール１００は、部分行列５２０における要素６５４と部分行列５６０における要素５５４とを比較し、要素が等しいかまたは等しくないかに応じて、それぞれビット６１０に１または０を記録する。ビット６２０を生成するために、誤り訂正モジュール１００は、要素６５６と要素５５６とを比較する。二進数として解釈される３つのビット６００、６１０、６２０が、結果行列３２０における誤り５９９の列位置を生成する。誤り５９９の列位置を発見するために必要とされることがあるビット６００、６１０、６２０の数は、結果行列３２０のサイズに応じて変わる。結果行列３２０のサイズはＮ列であると仮定する。誤り５９９の列位置を発見するために必要とされるビットの数は、（ｌｏｇ2Ｎ）＋１に等しい。
【００４４】
同様に、誤りが発生している結果行列３２０における行を検出するために、誤り訂正モジュール１００は、部分行列５２０における要素６６０と部分行列５６０における要素５６１とを比較する。要素６６０と要素５６１が等しいとき、誤り訂正モジュール１００はビット６３０において１の値を記録する。要素６６０と要素５６１が等しくないとき、誤り訂正モジュール１００はビット６３０において０の値を記録する。誤り訂正モジュール１００は、部分行列５２０における要素６６２と部分行列５６０における要素５６２とを比較し、要素が等しいかまたは等しくないかに応じて、それぞれビット６４０に１または０を記録する。ビット６５０を生成するために、誤り訂正モジュール１００は、要素６６４と要素５６４とを比較する。二進数として解釈される３つのビット６３０、６４０、６５０が、結果行列３２０における誤り５９９の行位置を生成する。誤り５９９の列位置を発見するために必要とされるビット６３０、６４０、６５０の数は、結果行列３２０のサイズに応じて変わる。結果行列３２０のサイズはＭ行であると仮定する。誤り５９９の行位置を発見するために必要とされるビットの数は、（ｌｏｇ2Ｍ）＋１に等しい。
【００４５】
図６において、部分行列５２０における要素６６０、６６２のみが、部分行列５６０におけるそれらの対応する要素５６１、５６２と異なる。結果として、誤った要素の列位置は７であり、誤った要素の行位置は１であり、それは、誤り５９９を誤った要素として指し示す。すべての要素対６６０、５６１、および６６２、５６２は１だけ異なり、この差は、誤り５９９における誤りの大きさを表す。誤り訂正モジュール１００は、行列３２０における誤り５９９を訂正して、訂正された最終結果である行列６７０を生成する。
【００４６】
図７Ａは、一実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す。誤りを検出する際に使用される誤り訂正データ構造７００は、行列７１０と、行列７１０におけるすべての要素の和に等しい誤り訂正符号７２０とを含む。行列７１０は、アレイ、トリプレット表現、リンクされた表現などとして、メモリに記憶されることができる。誤り訂正符号７２０は、整数、浮動小数点数などとして、メモリに記憶されることができる。誤り訂正符号７２０が、誤り訂正データ構造７００における行列７１０に後続される最初の要素であってよく、または行列７１０が、誤り訂正データ構造７００における誤り訂正符号７２０に後続される最初の要素であってよい。誤り訂正モジュール１００は、誤り訂正符号７２０を計算し、行列７１０と共に誤り訂正符号７２０をメモリに記憶し、それによって誤り訂正データ構造７００を作成する。
【００４７】
誤り訂正データ構造７００を記憶するメモリは、フラッシュメモリなどの半導体メモリ、ハードディスクドライブなどの磁気メモリ、ＣＤ（コンパクトディスク）またはＤＶＤ（デジタル多用途ディスク）などの光メモリなどとすることができる。メモリは、電場、磁場、宇宙線、アルファ線、ガンマ線、誤ったメモリ読み取りなどの外的影響によって破損される可能性がある。誤り訂正符号７２０における冗長な情報による誤り訂正データ構造７００を使用するとき、メモリ破損はより容易に検出されることができる。
【００４８】
具体的には、行列７１０がメモリから読み取られたとき誤り訂正モジュール１００は、行列７１０におけるすべての要素の総和を実行することができる。総和の結果が誤り訂正符号７２０と一致しない場合、誤りが検出される。行列７１０は比較的大きなサイズを有し、したがって破損される可能性がより高いので、誤りは、誤り訂正符号７２０の代わりに行列７１０に存在する可能性がより高い。
【００４９】
図７Ｂは、別の実施形態に従って、メモリから読み取られたデータにおける誤りを検出する際に使用される誤り訂正データ構造を示す。誤り訂正データ構造７００は、行列７１０および誤り訂正符号７３０を含む。誤り訂正符号７３０は、アレイ、リンクされたリストなどとして記憶されることができる。誤り訂正符号７３０は、行列内の様々なアイテムにおける予想される和を含む。行列における様々なアイテムは、図５に示されるような５４０、５４２、５４４、５４６とすることができる。
【００５０】
行列７１０がメモリから読み取られたとき、誤り訂正モジュール１１０は、行列７１０における様々なアイテム、たとえば、図５に示されるような５４０、５４２、５４４、５４６の総和を実行することができる。誤り訂正モジュール１００はまた、記憶された誤り訂正符号７３０を読み取る。少なくとも１つの記憶された誤り訂正符号７３０が、様々なアイテムの少なくとも１つの総和と一致しないとき、誤り訂正モジュール１００は、図６に示されるように、誤りの位置および大きさを検出し、誤りを訂正する。
【００５１】
図８は、一実施形態に従って、行列乗算における誤りを検出し訂正することによってプロセッサの効率を増大させる方法のフローチャートである。ステップ８００において、プロセッサの効率が増大され、それによってプロセッサからの誤った出力の増大が生じる。プロセッサの効率を増大させることは、プロセッサの電力消費を減少させ、プロセッサのクロック速度を増大させ、またはプロセッサのビルディングブロックを互いにより近く配置し、そうすることで処理性能を同じに維持しながらプロセッサのサイズを小さくすることを含む。プロセッサのビルディングブロックは、トランジスタ、メモリスタ、量子計算要素などとすることができる。
【００５２】
ステップ８１０において、図１におけるプロセッサおよび／または電子回路１１０などのコンピューティング装置は、第１の行列と第２の行列とを乗算して結果行列を得る。ステップ８２０において、誤り訂正モジュールは、複数の計算を行うことによって結果行列における誤りを効率的に訂正し、ここで、複数の計算は、第１の行列と第２の行列とを乗算するよりも安価である。
【００５３】
たとえば、結果行列における誤りを検出するために、誤り訂正モジュール１００は、結果行列の複数のアイテム、たとえば、図５における５４０、５４２、５４４についての複数の予想される結果、たとえば、図５における部分行列５２０を、第１の行列の対応する複数のアイテムおよび第２の行列の対応する複数のアイテムに基づいて算出する。結果行列３２０におけるアイテムは、結果行列３２０全体とすることができ、または結果行列３２０における要素のグループとすることができる。結果行列３２０における要素のグループは、連続または非連続とすることができる。
【００５４】
誤り訂正モジュール１００は、結果行列の複数のアイテム、たとえば、図５における５４０、５４２、５４４についての複数の実際の結果、たとえば、図５における部分行列５６０を、結果行列に基づいて算出する。複数の実際の結果は、図５における複数のアイテム５４０、５４２、５４４における各アイテム内のすべての要素を合計することによって計算されることが可能である。複数の予想される結果における少なくとも１つの予想される結果が複数の実際の結果における対応する実際の結果と異なるとき、誤り訂正モジュールは誤りを検出する。誤りを検出すると、誤り訂正モジュール１００は、少なくとも１つの予想される結果と対応する実際の結果との差に基づいて、誤りを訂正する。
【００５５】
たとえば、図６において、誤り訂正モジュール１００は、予想される結果６６０が実際の結果５６１よりも１だけ小さいと決定する。結果として、誤り訂正モジュール１００は、結果行列における誤った結果を１だけ減少させる。誤りの位置は、本明細書を通して説明されているように、たとえば図６で説明されているように発見されることができる。
【００５６】
図９は、一実施形態に従って、行列乗算における誤りを検出することによってプロセッサの効率を増大させる方法のフローチャートである。図１におけるプロセッサまたは電子回路１１０などのコンピューティング装置は、第１の行列と第２の行列とを乗算して結果行列を得る。誤り訂正モジュールは、計算の回数が、第１の行列と第２の行列とを乗算するのに必要とされる計算の回数よりも少ないように、いくつかの回数の計算を行うことによって結果行列における誤りを効率的に検出する。
【００５７】
誤りを効率的に検出するために、誤り訂正モジュール１００は以下のステップを行う。ステップ９００において、誤り訂正モジュール１００は、第１の行列のアイテムおよび第２の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出する。第１の行列のアイテムと第２の行列のアイテムは、乗算されたとき、結果行列のアイテムを生成する。行列におけるアイテムは、行列全体または行列における要素のグループとすることができる。行列における要素のグループは、連続または非連続とすることができる。
【００５８】
たとえば、第１の行列のアイテムおよび第２の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出することは、誤り訂正モジュール１００が、図３における結果行列３２０に関連付けられたすべての要素の図３における予想される和３７０を決定することを含むことができる。
【００５９】
ステップ９１０において、誤り訂正モジュール１００は、図３に説明されたように、結果行列に基づいて、結果行列のアイテムについての１つまたは複数の実際の結果を算出する。たとえば、結果行列のアイテムについての１つまたは複数の実際の結果を算出するために、誤り訂正モジュール１００は、図３における結果行列３２０に関連付けられたすべての要素の図３における実際の和３８０を決定することができる。ステップ９２０において、誤り訂正モジュール１００は、予想される結果、たとえば図３における予想される結果３７０が、実際の結果、たとえば図３における実際の結果３８０と異なるときに、誤りを検出する。
【００６０】
さらに、誤り訂正モジュール１００は、誤りの誤り率をモニタすることができる。誤り率が予め定義された閾値よりも大きいとき、誤り訂正モジュール１００は、コンピューティング装置を変更する旨の通知を作成すること、コンピューティング装置への電圧入力を動的に調整すること、行列乗算を繰り返すようにコンピューティング装置に対して信号を送ることなどのうちの１つまたは複数を行うことができる。予め定義された閾値は、いくつのビット誤りが訂正できるかに応じて、および使用事例に応じて、秒あたり１つの誤り、分あたり１つの誤りなどとすることができる。誤り訂正モジュール１００は、コンピューティング装置全体またはコンピューティング装置内の計算ユニットへの電圧を動的に調整することができ、ここで、計算ユニットは、コンピューティング装置の１つまたは複数のビルディングブロックを含むことができる。
【００６１】
誤り訂正モジュール１００は、様々な方法で結果行列における誤りの位置および大きさを検出することができる。誤りの位置および大きさが検出されると、誤り訂正モジュール１００は、結果行列における誤りを訂正することができる。
【００６２】
一実施形態において、誤り訂正モジュール１００は、結果行列の複数の部分、たとえば、図５における５４０、５４２、５４４についての複数の予想される結果、たとえば、図５における部分行列５２０を算出する。誤り訂正モジュール１００は、複数の予想される結果、たとえば、図５における部分行列５２０を、第１の行列の対応する複数のアイテムおよび第２の行列の対応する複数のアイテムに基づいて算出する。誤り訂正モジュール１００は、結果行列の複数のアイテム、たとえば、図５における５４０、５４２、５４４についての複数の対応する実際の結果、たとえば、図５における部分行列５６０を算出する。複数の対応する実際の結果、たとえば、図５における部分行列５６０を算出することは、結果行列の各部分、たとえば、図５における５４０、５４２、５４４におけるすべての要素を合計することを含むことができる。誤り訂正モジュール１００は、複数の予想される結果、図５における部分行列５２０を、複数の対応する実際の結果、図５における部分行列５６０と比較する。図５における部分行列５２０に含まれる複数の予想される結果における少なくとも１つの予想される結果が、図５における部分行列５６０に含まれる複数の対応する実際の結果における対応する実際の結果と異なるとき、誤り訂正モジュール１００は、本明細書で説明されているように、結果行列における誤りの位置および大きさを算出する。
【００６３】
別の実施形態において、誤り訂正モジュール１００は、二分探索を使用して誤りの位置および大きさを算出する。誤りを検出すると、誤り訂正モジュール１００は、図４に示されるように、複数の部分行列における最も小さい行列が１つの誤った要素を含むまで、結果行列を複数の部分行列に分割する。図４における誤り４９９が発見されると、誤り４９９は様々な方法で訂正されることができる。たとえば、行列乗算が再び行われることができ、または第１の行列における対応する行が第２の行列における対応する列によって乗算されることができ、誤り４９９の代わりに訂正された要素を生成することができる。
【００６４】
誤り訂正モジュール１００は、フラッシュメモリ、ハードディスクなどのメモリに記憶されたデータの破損を検出することができる。行列を記憶する前に、誤り訂正モジュール１００は、たとえば図７Ａに示されるように、行列におけるすべての要素の和を算出し、すべての行列要素の和およびその行列を一緒にメモリに記憶する。行列がメモリから読み取られたとき、破損されたストレージにより、または読み取りの際の誤りにより、誤りが発生する可能性がある。メモリの行列を読み取ったとき、誤り訂正モジュール１００は、読み取られた行列のすべての要素を合計し、結果の和を、メモリに記憶された和と比較する。結果の和とメモリに記憶された和とが異なるとき、誤り訂正モジュール１００は誤りを報告する。さらに、誤り訂正モジュール１００は、図７Ｂで説明されたように誤りを検出し訂正することができる。
【００６５】
追加の考慮事項
本明細書に開示されている少なくとも１つの実施形態は、プロセッサの効率を増大させ、それによってプロセッサからの誤った出力の増大が生じる方法である。この方法は、第１の行列と第２の行列とを乗算するステップであって、第１の行列と第２の行列とを乗算することは、結果行列を得ることを含む、ステップと、複数の乗算計算を行うことによって、結果行列における誤りを効率的に訂正するステップであって、複数の乗算計算は、第１の行列と第２の行列とを乗算することよりも指数関数的に安価である、ステップとを含む。結果行列における誤りを検出するステップは、結果行列の複数のアイテムについての複数の予想される結果を、第１の行列の対応する複数のアイテムおよび第２の行列の対応する複数のアイテムに基づいて算出するステップと、結果行列に基づいて、結果行列の複数のアイテムについての複数の実際の結果を算出するステップと、複数の予想される結果における少なくとも１つの予想される結果が複数の実際の結果における対応する実際の結果と異なるとき、誤りを検出するステップとを含む。誤りを検出すると、少なくとも１つの予想される結果、および対応する実際の結果の間の差に基づいて、誤りが訂正される。
【００６６】
本明細書に開示されている少なくとも１つの実施形態は、第１の行列、第２の行列、および結果行列を得るステップであって、結果行列は、第１の行列を第２の行列によって乗算する結果を含む、ステップと、いくつかの回数の計算を行うことによって結果行列における誤りを効率的に検出するステップであって、計算の回数は、第１の行列と第２の行列とを乗算するのに必要とされる計算の回数よりも少なくとも指数関数的に少ない、ステップとを含む方法である。結果行列における誤りを効率的に検出するステップは、第１の行列のアイテムおよび第２の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出するステップであって、第１の行列のアイテムおよび第２の行列のアイテムは組み合わさって、結果行列のアイテムを生成し、結果行列のアイテムは、行列全体または行列全体の一部の少なくとも一方を含み、第１の行列の対応するアイテムは、第１の行列全体または第１の行列全体の一部の少なくとも一方を含み、第２の行列の対応するアイテムは、第２の行列全体または第２の行列全体の一部の少なくとも一方を含む、ステップと、結果行列に基づいて、結果行列のアイテムについての１つまたは複数の実際の結果を算出するステップと、予想される結果が実際の結果と異なるとき、誤りを検出するステップとを含む。この方法は、検出された誤りの誤り率に基づいて、行列乗算を行っているコンピューティング装置への電圧入力を調整するステップをさらに含む。
【００６７】
この方法は、誤り率が予め定義された閾値よりも大きいとき、行列乗算を行っているコンピューティング装置を変更する旨の通知を作成するステップを含む。この方法は、誤り率が予め定義された閾値よりも小さいとき、行列乗算を行っているコンピューティング装置への電圧入力を動的に減少させるステップを含む。この方法は、誤りを検出すると、行列乗算を行っているコンピューティング装置に、行列乗算を繰り返させるステップを含む。
【００６８】
結果行列における誤りを効率的に検出するステップは、結果行列に関連付けられたすべての要素の予想される和を決定するステップと、結果行列に関連付けられたすべての要素の実際の和を決定するステップと、予想される和と実際の和とが異なるとき、誤りを検出するステップとを含むことができる。
【００６９】
この方法は、結果行列における誤りの位置および大きさを検出するステップと、結果行列における誤りを訂正するステップとを含む。結果行列における誤りの位置および大きさを検出するステップは、結果行列の複数の部分についての複数の予想される結果を、第１の行列の対応する複数の部分と第２の行列の対応する複数の部分に基づいて算出するステップと、結果行列に基づいて、結果行列の複数の部分についての複数の対応する実際の結果を算出するステップと複数の予想される結果を複数の対応する実際の結果と比較するステップとを含む。この方法は、複数の予想される結果における少なくとも１つの予想される結果が複数の対応する実際の結果における対応する実際の結果と異なるとき、結果行列における誤りの位置および大きさを算出するステップを含む。
【００７０】
この方法は、行列におけるすべての要素の和を算出するステップと、行列におけるすべての要素の和およびその行列を一緒にメモリに記憶するステップとを含む。
【００７１】
この方法は、メモリから、行列およびすべての要素の和を読み取るステップと、メモリから読み取られた行列におけるすべての要素の和が、メモリから読み取られたすべての要素の和と等しくないとき、誤りを検出するステップとを含む。
【００７２】
この方法は、誤りを検出すると、複数の部分行列における最も小さい行列が１つの誤った要素を含むまで、結果行列を複数の部分行列に分割するステップと、誤った要素を訂正するステップとを含む。
【００７３】
本開示の少なくとも１つの実施形態は、装置を含み、装置は、第１の行列と第２の行列とを乗算して結果行列を得るためのコンピューティング装置であって、増大されたクロック速度で動作するコンピューティング装置と、いくつかの回数の乗算計算およびいくつかの回数の加算計算を行うことによって、結果行列における誤りの位置および大きさを効率的に検出するための誤り訂正モジュールであって、乗算計算の回数は、第１の行列と第２の行列とを乗算するために必要とされる乗算計算の回数よりも少なくとも指数関数的に少ない、誤り訂正モジュールとを備える。
【００７４】
誤り訂正モジュールは、第１の行列のアイテムおよび第２の行列のアイテムに基づいて、結果行列のアイテムについての予想される結果を算出することであって、第１の行列のアイテムおよび第２の行列のアイテムは組み合わさって、結果行列のアイテムを生成し、結果行列のアイテムは、行列全体または行列全体の一部の少なくとも一方を含み、第１の行列の対応するアイテムは、第１の行列全体または第１の行列全体の一部の少なくとも一方を含み、第２の行列の対応するアイテムは、第２の行列全体または第２の行列全体の一部の少なくとも一方を含む、算出することと、結果行列に基づいて、結果行列のアイテムについての１つまたは複数の実際の結果を算出することと、予想される結果が実際の結果と異なるとき、誤りを検出することとを行うことができる。
【００７５】
誤り訂正モジュールは、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいとき、コンピューティング装置を変更する旨の通知を作成することとを行うことができる。
【００７６】
誤り訂正モジュールは、誤りを生成しているコンピューティング装置の計算ユニットを決定することであって、計算ユニットは、コンピューティング装置の一部である、決定することと、計算ユニットへの電圧入力を増大させることとを行うことができる。
【００７７】
誤り訂正モジュールは、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいとき、コンピューティング装置への電圧入力を動的に調整することとを行うことができる。
【００７８】
誤り訂正モジュールは、結果行列に関連付けられたすべての要素の予想される和を決定することと、結果行列に関連付けられたすべての要素の実際の和を決定することと、予想される和と実際の和とが異なるとき、誤りを検出することとを行うことができる。
【００７９】
誤り訂正モジュールは、結果行列における誤りを訂正することができる。
【００８０】
コンピューティング装置は、誤りを検出すると、誤り訂正モジュールによって第１の行列と第２の行列とを乗算することができる。
【００８１】
誤りを検出すると、誤り訂正モジュールによって、コンピューティング装置は、第１の行列における要素の第１のグループ、および第２の行列における要素の第２のグループを並べ替えることと、並べ替えられた第１の行列と並べ替えられた第２の行列とを乗算して、並べ替えられた結果行列を得ることと、並べ替えられた結果行列における要素のグループを並べ替えて、結果行列を得ることとを行うことができる。
【００８２】
誤り訂正モジュールは、行列におけるすべての要素の和を算出することと、すべての要素の和およびその行列を一緒にメモリに記憶することと、メモリから、行列およびすべての要素の和を読み取ることと、メモリから読み取られた行列におけるすべての要素の和が、メモリから読み取られたすべての要素の和と等しくないとき、誤りを検出することとを行うことができる。
【００８３】
誤り訂正モジュールは、誤りを検出すると、複数の部分行列における最も小さい行列が１つの誤った要素を含むまで、結果行列を複数の部分行列に分割することと、誤った要素を訂正することとを行うことができる。
【００８４】
本開示の少なくとも１つの実施形態は、装置を含む。装置は、第１の行列と第２の行列とを乗算して結果行列を得るためのコンピューティング装置を備える。装置は、命令を記憶する非一時的コンピュータ可読媒体を備える。命令は、プロセッサによって実行されたとき、いくつかの回数の乗算計算を行うことによって、結果行列における誤りの位置および大きさを検出することであって、乗算計算の回数は、第１の行列と第２の行列とを乗算することに含まれる乗算計算の回数よりも少ない、検出することと、誤りの位置および大きさに基づいて、結果行列における誤りを訂正することとをプロセッサに行わせる。
【００８５】
誤りの位置および大きさは、結果行列の複数のアイテムについての複数の予想される結果を、第１の行列の対応する複数のアイテムと第２の行列の対応する複数のアイテムとに基づいて算出することと、結果行列に基づいて、結果行列の複数のアイテムについての複数の実際の結果を算出することと、複数の予想される結果における予想される結果が複数の実際の結果における対応する実際の結果と異なることに応答して、誤りの位置および大きさを検出することとによって検出されることができる。
【００８６】
誤りの大きさは、複数の予想される結果における予想される結果と、複数の実際の結果における対応する実際の結果との間の差であるように決定されることができる。誤りの位置は、予想される結果および実際の結果に基づいて、誤りの列を検出することおよび誤りの行を検出することによって検出されることができる。
【００８７】
命令は、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいことに応答して、コンピューティング装置を変更する旨の通知を作成することとをプロセッサに行わせることができる。
【００８８】
命令は、誤りを生成するコンピューティング装置の計算ユニットを決定することと、計算ユニットへの電圧入力を増大させることとをプロセッサに行わせることができる。
【００８９】
命令は、誤りに関連付けられた誤り率をモニタすることと、予め定義された閾値よりも誤り率が大きいことに応答して、コンピューティング装置への電圧入力を動的に調整することとをプロセッサに行わせることができる。
【００９０】
命令は、コンピューティング装置に、誤りの検出に応答して第１の行列と第２の行列との乗算を繰り返させることを、プロセッサに行わせることができる。
【００９１】
コンピューティング装置は、誤りの検出に応答して、第１の行列における要素の第１のグループ、および第２の行列における要素の第２のグループを並べ替えることと、並べ替えられた第１の行列と並べ替えられた第２の行列とを乗算して、並べ替えられた結果行列を得ることと、並べ替えられた結果行列における要素のグループを並べ替えて、結果行列を得ることとを行うことができる。
【００９２】
本開示の少なくとも１つの実施形態は、装置を含む。装置は、第１の行列と第２の行列とを乗算して結果行列を得るためのコンピューティング装置を備える。装置は、いくつかの回数の乗算計算を行うことによって、結果行列における誤りの位置および大きさを検出するための誤り訂正回路であって、乗算計算の回数は、第１の行列と第２の行列とを乗算することに関わる乗算計算の回数よりも少ない、誤り訂正回路を備える。誤り訂正回路は、誤りの位置および大きさに基づいて、結果行列における誤りを訂正する。
【００９３】
誤り訂正回路は、誤りの位置および大きさを、結果行列の複数のアイテムについての複数の予想される結果を、第１の行列の対応する複数のアイテムおよび第２の行列の対応する複数のアイテムに基づいて算出することと、結果行列に基づいて、結果行列の複数のアイテムについての複数の実際の結果を算出することと、複数の予想される結果における予想される結果が複数の実際の結果における対応する実際の結果と異なることに応答して、誤りの位置および大きさを検出することとによって検出することができる。
【００９４】
コンピュータ
図１０は、コンピュータシステム１０００の例示的形態のマシンであって、本明細書で論じられる方法論およびモジュールのいずれか１つまたは複数をマシンに実行させるための命令のセットが実行されてよい、マシンの概略図である。
【００９５】
図１０の例において、コンピュータシステム１０００は、プロセッサ、メモリ、不揮発性メモリ、およびインターフェース装置を含む。プロセッサは、本明細書に説明された行列乗算を行うことができる。誤り訂正モジュール１００は、プロセッサのハードウェアコンポーネントとすることができ、プロセッサ上のソフトウェアとして動作することができ、および／または図１０に示されるように別個の誤り訂正モジュールとすることができる。様々な一般的コンポーネント（たとえばキャッシュメモリ）が、説明を簡単にするために省略されている。コンピュータシステム１０００は、図１ないし図９の例において説明された任意のコンポーネント（および本明細書において説明された任意の他のコンポーネント）が実装されることが可能なハードウェア装置を示すように意図されている。コンピュータシステム１０００は、任意の適用可能な既知のまたは好都合な種類のものとすることができる。コンピュータシステム１０００のコンポーネントは、バスを介して、または何らかの他の既知のもしくは好都合な装置を通じて結合されることができる。
【００９６】
本開示は、任意の適切な物理的形態をとるコンピュータシステム１０００を企図している。限定でなく例として、コンピュータシステム１０００は、組み込みコンピュータシステム、システムオンチップ（ＳＯＣ）、シングルボードコンピュータシステム（ＳＢＣ）（たとえば、コンピュータオンモジュール（ＣＯＭ）またはシステムオンモジュール（ＳＯＭ）など）、デスクトップコンピュータシステム、ラップトップもしくはノートブックコンピュータシステム、インタラクティブキオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、携帯情報端末（ＰＤＡ）、サーバ、またはこれらの２つ以上の組み合わせであってよい。適宜に、コンピュータシステム１０００は、１つもしくは複数のコンピュータシステム１０００を含み、一体化もしくは分散され、複数の位置にわたり、複数のマシンにわたり、または、１つもしくは複数のネットワークにおいて１つもしくは複数のクラウドコンポーネントを含んでよいクラウドに存在してよい。適宜に、１つまたは複数のコンピュータシステム１０００は、実質的な空間的または時間的制限なしに、本明細書に説明されまたは図示された１つまたは複数の方法の１つまたは複数のステップを行ってよい。限定ではなく例として、１つまたは複数のコンピュータシステム１０００は、リアルタイムまたはバッチモードにおいて、本明細書に説明されまたは図示された１つまたは複数の方法の１つまたは複数のステップを行ってよい。１つまたは複数のコンピュータシステム１０００は、異なる時間でまたは異なる場所で、適宜に、本明細書に説明されまたは図示された１つまたは複数の方法の１つまたは複数のステップを行ってよい。
【００９７】
プロセッサは、たとえば、Ｉｎｔｅｌ  ＰｅｎｔｉｕｍマイクロプロセッサまたはＭｏｔｏｒｏｌａ  ｐｏｗｅｒ  ＰＣマイクロプロセッサのような従来のマイクロプロセッサであってよい。当業者は、「機械可読（記憶）媒体」または「コンピュータ可読（記憶）媒体」という用語がプロセッサによってアクセスできる任意の種類の装置を含むことを理解するであろう。
【００９８】
メモリは、たとえばバスによってプロセッサに結合される。メモリは、限定ではなく例として、ダイナミックＲＡＭ（ＤＲＡＭ）やスタティックＲＡＭ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）を含むことができる。メモリは、ローカルに、リモートに、または分散されることができる。
【００９９】
バスはまた、プロセッサを不揮発性メモリおよびドライブユニットに結合する。不揮発性メモリは、多くの場合、磁気フロッピもしくはハードディスク、光磁気ディスク、光ディスク、ＣＤ−ＲＯＭ、ＥＰＲＯＭ、もしくはＥＥＰＲＯＭなど読み取り専用メモリ（ＲＯＭ）、磁気もしくは光カード、または大量のデータのための別の形態のストレージである。このデータの一部は、コンピュータ１０００におけるソフトウェアの実行中に直接メモリアクセスプロセスによってメモリに書き込まれることが多い。不揮発性ストレージは、ローカルに、リモートに、または分散されることができる。不揮発性メモリは、メモリで利用可能なすべての適用可能なデータを用いてシステムが作成されることができるので、任意選択である。典型的なコンピュータシステムは通常、プロセッサと、メモリと、メモリをプロセッサに結合する装置（たとえばバス）とを少なくとも含む。
【０１００】
ソフトウェアは、典型的には、不揮発性メモリおよび／またはドライブユニットに記憶される。実際、大きなプログラム全体をメモリに記憶させることは不可能なことがある。しかし、ソフトウェアを実行するために、必要な場合、それが処理に適したコンピュータ可読位置に対して移動され、その位置は説明のために本出願においてメモリと呼ばれることは理解されるべきである。ソフトウェアが実行のためにメモリに対して移動される場合でも、プロセッサは典型的には、ソフトウェアに関連付けられた値を記憶するためのハードウェアレジスタ、および理想的には実行を高速化する役割をするローカルキャシュを利用する。本明細書で使用される場合、ソフトウェアプログラムは、「コンピュータ可読媒体に実装された」と呼ばれるとき、任意の既知のまたは好都合な位置（不揮発性ストレージからハードウェアレジスタ）で記憶されるものと仮定される。プロセッサは、プログラムに関連付けられた少なくとも１つの値が、プロセッサによって読み取り可能なレジスタに記憶されたとき、「プログラムを実行するように構成された」と考えられる。
【０１０１】
バスはまた、プロセッサをネットワークインターフェース装置に結合する。インターフェースは、モデムまたはネットワークインターフェースの１つまたは複数を含むことができる。モデムまたはネットワークインターフェースは、コンピュータシステム１０００の一部であると考えられることは理解されよう。インターフェースは、アナログモデム、ＩＳＤＮモデム、ケーブルモデム、トークンリングインターフェース、衛星伝送インターフェース（たとえば「ｄｉｒｅｃｔ  ＰＣ」）、またはコンピュータシステムを他のコンピュータシステムに結合するための他のインターフェースを含むことができる。インターフェースは、１つまたは複数の入力および／または出力装置を含むことができる。Ｉ／Ｏ装置は、限定ではなく例として、キーボード、マウスまたは他のポインティング装置、ディスクドライブ、プリンタ、スキャナ、ならびにディスプレイ装置を含む他の入力および／または出力装置を含むことができる。表示装置は、限定ではなく例として、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、または何らかの他の適用可能な既知のまたは好都合な表示装置を含むことができる。簡単にするために、図１０の例において図示されていない任意の装置のコントローラがインターフェースに存在すると仮定される。
【０１０２】
動作において、コンピュータシステム１０００は、ディスクオペレーティングシステムなどのファイル管理システムを含むオペレーティングシステムソフトウェアによって制御されることができる。オペレーティングシステムソフトウェアおよび関連付けられたファイル管理システムソフトウェアの一例は、ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＷｉｎｄｏｗｓ（登録商標）として知られているオペレーティングシステムのファミリ、およびそれらに関連付けられたファイル管理システムである。オペレーティングシステムソフトウェアおよびそれに関連付けられたファイル管理システムソフトウェアの別の例は、Ｌｉｎｕｘ（商標）オペレーティングシステムおよびそれに関連付けられたファイル管理システムである。ファイル管理システムは、典型的には、不揮発性メモリおよび／またはドライブユニットに記憶され、オペレーティングシステムに必要とされる様々な動作をプロセッサに実行させて、データを入力および出力し、不揮発性メモリおよび／またはドライブユニットにファイルを記憶することを含めてデータをメモリに記憶する。
【０１０３】
詳細な説明のいくつかの項目は、コンピュータメモリ内のデータビットに対する操作のアルゴリズムおよび記号表現に関して提示されてよい。これらのアルゴリズム記述および表現は、データ処理技術分野の当業者によって、その作業の実体を他の当業者に最も効果的に伝達するために使用される手段である。アルゴリズムは、ここでおよび一般的に、所望の結果をもたらす動作の自己矛盾のないシーケンスであると考えられる。これらの動作は、物理量の物理的操作を必要とするものである。これらの量は、必ずではないが、通常は、記憶、転送、結合、比較、および／または他の形式で操作されることが可能な電気信号または磁気信号の形態をとる。主に一般的な使用であるという理由から、これらの信号を、ビット、値、要素、記号、文字、用語、または数字などとして参照することが、時には便利であることが分かっている。
【０１０４】
しかしながら、これらおよび類似の用語はすべて、適切な物理量と関連付けられるべきであり、これらの量に適用される便利なラベルにすぎないことに留意されたい。以下の説明から明らかなように、特に明記されない限り、説明全体を通して、「処理」または「コンピューティング」または「算出する」または「決定する」または「表示する」または「生成する」などの用語を利用する議論は、コンピュータシステムのレジスタおよびメモリ内で物理（電子）量として表されるデータを、コンピュータシステムメモリまたはレジスタまたは他のそのような情報記憶、伝送、もしくは表示装置内で物理量として同様に表現される他のデータへと操作および変換する、コンピュータシステムまたは類似の電子コンピューティング装置の動作およびプロセスを指すことは理解されよう。
【０１０５】
本明細書で提示されるアルゴリズムおよび表示は、任意の特定のコンピュータまたは他の装置に本質的には関係付けられない。様々な汎用システムが、本明細書の教示に従うプログラムと共に使用されてよく、またはいくつかの実施形態の方法を実行するためにより特化された装置を構築するのが好都合であることが明らかなことがある。様々なこれらのシステムに必要な構造は、以下の説明から明らかになるであろう。さらに、これらの技法は任意の特定のプログラミング言語を参照して説明されず、したがって、様々な実施形態は様々なプログラミング言語を使用して実装されてよい。
【０１０６】
代替実施形態において、マシンは、スタンドアロン装置として動作し、または他のマシンに接続（たとえば、ネットワーク接続）されてよい。ネットワーク化された配置において、マシンは、クライアント−サーバネットワーク環境におけるサーバまたはクライアントマシンの能力で、またはピアツーピア（もしくは分散された）ネットワーク環境におけるピアマシンとして動作してよい。
【０１０７】
マシンは、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、ラップトップコンピュータ、セットトップボックス（ＳＴＢ）、携帯情報端末（ＰＤＡ）、セルラ電話、ｉＰｈｏｎｅ、Ｂｌａｃｋｂｅｒｒｙ、プロセッサ、電話、ウェブアプライアンス、ネットワークルータ、スイッチもしくはブリッジ、またはそのマシンによって行われるアクションを指定する（順次または他の）命令のセットを実行できる任意のマシンであってよい。
【０１０８】
機械可読媒体または機械可読記憶媒体は、単一の媒体として例示的実施形態で示されているが、「機械可読媒体」および「機械可読記憶媒体」という用語は、命令の１つまたは複数のセットを記憶する単一の媒体または複数の媒体（たとえば、集中もしくは分散されたデータベースならびに／または関連付けられたキャッシュおよびサーバ）を含むように解釈されるべきである。また、「機械可読媒体」および「機械可読記憶媒体」という用語は、機械によって実行される命令のセットを記憶、符号化、または搬送することができ、ここで開示された技法およびイノベーションの方法論またはモジュールのいずれか１つまたは複数を機械に実行させる、任意の媒体を含むようにも解釈されるべきである。
【０１０９】
一般に、本開示の実施形態を実装するために実行されるルーチンは、「コンピュータプログラム」と呼ばれる、オペレーティングシステム、または特定のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュール、もしくは命令のシーケンスの一部として実装されてよい。コンピュータプログラムは、典型的には、コンピュータにおける１つまたは複数の処理ユニットまたはプロセッサによって読み取られ実行されるとき、本開示の様々な態様を含む要素を実行するための動作をコンピュータに実行させる、コンピュータ内の様々なメモリおよびストレージ装置における様々な時間に設定された１つまたは複数の命令を含む。
【０１１０】
さらに、実施形態は、完全に機能するコンピュータおよびコンピュータシステムの文脈で説明されているが、当業者は、様々な実施形態が様々な形態のプログラム製品として配布されることができ、配布を実際に行うために使用される特定の種類の機械またはコンピュータ可読媒体にかかわらず本開示は等しく適用されることを理解するであろう。
【０１１１】
さらに、機械可読記憶媒体、機械可読媒体、またはコンピュータ可読（記憶）媒体のさらなる例は、揮発性および不揮発性メモリ装置、フロッピおよび他のリムーバブルディスク、ハードディスクドライブ、光ディスク（たとえば、コンパクトディスク読み取り専用メモリ（ＣＤ  ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）など）のような記録可能型媒体、ならびにデジタルおよびアナログ通信リンクなどの伝送型媒体を含むが、これらに限定されない。
【０１１２】
状況によっては、たとえば、バイナリ１からバイナリ０への状態の変化、またはその逆のようなメモリ装置の動作は、物理的変換などの変換を含んでよい。特定の種類のメモリ装置では、そのような物理的変換は、物品の異なる状態または物への物理的変換を含んでよい。たとえば、限定するものではないが、いくつかの種類のメモリ装置では、状態の変化は、電荷の蓄積および貯蔵、または貯蔵された電荷の解放を伴ってよい。同様に、他のメモリ装置において、状態の変化は、磁気配向における物理的変化もしくは変換、または結晶からアモルファスもしくはその逆のような分子構造における物理的変化もしくは変換を含んでよい。上記は、メモリ装置におけるバイナリ１からバイナリ０もしくはその逆の状態の変化が物理的変換などの変換を含んでよい、網羅的リストであることは意図されていない。むしろ、上記は例示的な例として意図されている。
【０１１３】
記憶媒体は典型的には、非一時的であってよく、または非一時的装置を含んでよい。この文脈において、非一時的記憶媒体は、装置がその物理的状態を変更してよいが、装置が具体的な物理形態を有することを意味する、有形である装置を含んでよい。したがって、たとえば、非一時的とは、この状態の変化にかかわらず有形のままである装置を指す。
【０１１４】
備考
特許請求される主題の様々な実施形態の上記の説明は、例示および説明のために提供されている。それは、網羅的であること、または特許請求される主題を開示された具体的形態に限定することは意図されていない。多くの修正および変形は当業者には明らかであろう。実施形態は、本発明の原理およびその実際の適用を最も良く説明するために選択され記載されており、それによって、関連技術の他の当業者が、企図される特定の使用に適した特許請求される主題、様々な実施形態、および様々な修正を理解することを可能にする。
【０１１５】
実施形態は、完全に機能するコンピュータおよびコンピュータシステムの文脈で説明されているが、当業者は、様々な実施形態が様々な形態のプログラム製品として配布されることができ、配布を実際に行うために使用される特定の種類の機械またはコンピュータ可読媒体にかかわらず本開示は等しく適用されることを理解するであろう。
【０１１６】
上記の詳細な説明は、特定の実施形態および企図される最良の形態を説明するが、上記が本文中でどのように詳細に説明されても、実施形態は多くの方法で実施されることが可能である。システムおよび方法の詳細は、その実装の詳細においてかなり変化してよいが、それでも本明細書に包含される。上記されたように、様々な実施形態の特定の特徴または態様を説明するときに使用される特定の用語は、その用語が関連付けられた本発明の任意の特定の特性、特徴、または態様に制限されるようにその用語が本明細書で再定義されていることを意味するように解釈されるべきではない。一般に、添付の特許請求の範囲で使用される用語は、本明細書で明示的に定義されない限り、本明細書で開示された特定の実施形態に本発明を限定するように解釈されるべきではない。したがって、本発明の実際の範囲は、開示された実施形態だけでなく、特許請求の範囲のもとで実施形態を実施または実装するすべての等価な態様も包含する。
【０１１７】
本明細書で使用される言葉は、主に可読性および教育目的で選択されており、本発明の主題を線引きまたは限定するように選択されなくてよい。したがって、本発明の範囲は、この詳細な説明によって限定されず、本明細書に基づく出願において発行される任意の請求項によって限定されることが意図される。したがって、様々な実施形態の開示は、添付の特許請求の範囲に記載される本発明の範囲を限定することなく例示することが意図される。
【図１】
2020512712.tif 000003
【図２Ａ】
2020512712.tif 000004
【図２Ｂ】
2020512712.tif 000005
【図２Ｃ】
2020512712.tif 000006
【図３】
2020512712.tif 000007
【図４】
2020512712.tif 000008
【図５】
2020512712.tif 000009
【図６】
2020512712.tif 000010
【図７Ａ】
2020512712.tif 000011
【図７Ｂ】
2020512712.tif 000012
【図８】
2020512712.tif 000013
【図９】
2020512712.tif 000014
【図１０】
2020512712.tif 000015
【国際調査報告】
2020512712.tif 000016