(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-28
(45)【発行日】2024-11-06
(54)【発明の名称】リザルト・ロジックにおける確度駆動のフォールト検出及び高速、正確なサブストリング・マッチのための状態コード
(51)【国際特許分類】
G06F 9/34 20180101AFI20241029BHJP
G06F 16/33 20190101ALI20241029BHJP
【FI】
G06F9/34 320A
G06F16/33
(21)【出願番号】P 2022514178
(86)(22)【出願日】2020-08-07
(86)【国際出願番号】 IB2020057462
(87)【国際公開番号】W WO2021048654
(87)【国際公開日】2021-03-18
【審査請求日】2023-01-20
(32)【優先日】2019-09-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】フィグリ、ラズバン
(72)【発明者】
【氏名】ペイヤー、ステファン
(72)【発明者】
【氏名】リッヒテナウ、セドリック
(72)【発明者】
【氏名】シェールム、カースチン
【審査官】三坂 敏夫
(56)【参考文献】
【文献】米国特許出願公開第2016/0210182(US,A1)
【文献】特開2000-010880(JP,A)
【文献】国際公開第2017/027007(WO,A1)
【文献】米国特許第07076698(US,B2)
【文献】米国特許出願公開第2007/0260966(US,A1)
【文献】特開昭52-087940(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30-9/355
G06F 16/33
(57)【特許請求の範囲】
【請求項1】
サブストリング検索操作におけるフォールトを検出するための方法であって、前記方法は、
それぞれがMのベクトル要素であり、前記ベクトル要素がキャラクタのエンコーディングのためのnビットであるベクトル・レジスタと、前記ベクトル・レジスタの第1のものに格納された参照ストリングの要素と、前記ベクトル・レジスタの第2のものに格納されたターゲット・ストリングとのキャラクタ・ワイズの比較のためのM×Mマトリックスのコンパレータとを含むプロセッサ・ユニットの使用を提供すること、
前記M×Mマトリックスにより実行される比較を使用して、前記参照ストリングに全マッチする前記ターゲット・ストリングのキャラクタを示すと共に前記参照ストリングに部分マッチする前記ターゲット・ストリングのキャラクタを示す結果ビット・ベクトルを生成すること、及び
前記結果ビット・ベクトルを使用することにより、前記サブストリング検索の操作におけるフォールト検出を実行すること
を含む、方法。
【請求項2】
前記結果ビット・ベクトルを生成することは、さらに、前記結果ビット・ベクトルに基づいて前記ターゲット・ストリング内の前記参照ストリングの第1のマッチを識別すための前記結果ビット・ベクトルのインデックスを生成すること、及び前記結果ビット・ベクトルに基づいて検出されたマッチのタイプを識別する状態コードを生成すること
を含む、請求項1に記載の方法。
【請求項3】
前記フォールト検出を実行することは、さらに、前記結果ビット・ベクトルと、前記M×Mマトリックスの第1の行と比較すること、及び前記結果ビット・ベクトルが前記M×Mマトリックスの前記第1の行のサブセットと違う場合にエラーを識別すること
を含む、請求項2に記載の方法。
【請求項4】
さらに、前記ターゲット・ストリングの末端要素を示す値を有するゼロ検出ベクトルを生成すること、及び前記結果ビット・ベクトルを前記ゼロ検出ベクトルと比較することを含み、前記フォールト検出がさらに、マッチを示すビットの結果ビット・ベクトル内のビット位置が、前記ターゲット・ストリングの前記末端要素を示す前記ビットの前記結果ビット・ベクトル内での前記ビット位置よりも大きい場合に、エラーを識別すること
を含む、請求項2に記載の方法。
【請求項5】
さらに、前記ターゲット・ストリング内のマッチ可能領域を決定すること、及び前記結果ビット・ベクトルを前記マッチ可能領域と比較することを含み、前記フォールト検出を実行することがさらに、前記状態コードが全マッチを示し、かつ前記ターゲット・ストリング内の前記マッチ可能領域が0に設定されている場合にエラーを識別すること
を含む請求項2に記載の方法。
【請求項6】
前記フォールト検出を実行することはさらに、前記結果ビット・ベクトルがベクトル要素内でミスアラインされる場合にエラーを識別することを含む、請求項2に記載の方法。
【請求項7】
ミスアライメントは、前記結果ビット・ベクトルの前記ベクトル要素の第1のバイトとは異なる、少なくとも1バイトが1にセットされている場合に検出される、請求項6に記載の方法。
【請求項8】
さらに、前記ターゲット・ストリングの末端要素を示す値を有するゼロ検出ベクトルを生成すること、前記状態コードと、生成された前記インデックスとを比較すること、及び前記状態コードを前記ゼロ検出ベクトルと比較することを含み、前記フォールト検出がさらに、(a)前記状態コードが(1)全ストリング・マッチが検出されない、(2)部分マッチが検出されない、及び(3)末端要素が検出されない場合、又は(b)(1)生成された前記インデックスが第1のマッチを示すか、又は(2)前記ゼロ検出ベクトルが前記ターゲット・ストリングの前記末端要素を示すビット値が1を有する場合にエラーを識別すること
を含む、請求項2に記載の方法。
【請求項9】
前記フォールト検出がさらに、(a)前記状態コードが、全ストリング・マッチが検出されず、かつ部分マッチが検出されず、かつ前記末端要素が検出された場合、又は(b)生成された前記インデックスが第1のマッチを示すか又は前記ゼロ検出ベクトルが前記ターゲット・ストリングの末端要素がないことを示す全ビットが0を有することが検出された場合にエラーを識別すること
を含む、請求項8に記載の方法。
【請求項10】
さらに、前記結果ビット・ベクトルに基づいてマッチタイプを決定すること、前記状態コードと、生成された前記インデックスとを比較すること、及び前記状態コードと、決定されたマッチタイプとを比較することを含み、前記フォールト検出を実行することが、(a)前記状態コードが、全ストリング・マッチが検出されるか、又は(b)(1)生成された前記インデックスが、マッチが検出されなかったことを示すか、又は(2)前記結果ビット・ベクトルが、部分マッチが検出されたことを示す場合にエラーを識別すること
を含む、請求項8に記載の方法。
【請求項11】
前記フォールト検出を実行することが、さらに、(a)前記状態コードが、部分マッチが検出され、かつ全マッチが検出されないことを示す場合、又は(b)(1)生成された前記インデックスが、マッチが検出されなかったこと、又は(2)前記結果ビット・ベクトルが、全マッチが検出されたことを示す場合にエラーを識別すること
を含む請求項10に記載の方法。
【請求項12】
サブストリング検索操作におけるフォールトを検出するためのプロセッサ・ユニットであって、前記プロセッサ・ユニットは、
それぞれがMのベクトル要素であり、前記ベクトル要素がキャラクタのエンコーディングのためのnビットである複数のベクトル・レジスタと、
複数の前記ベクトル・レジスタの参照ストリングを格納する第1のレジスタの要素と、複数の前記ベクトル・レジスタのターゲット・ストリングを格納する第2のレジスタの要素とをキャラクタ・ワイズで比較するためのコンパレータのM×Mマトリックスと、
前記参照ストリングと全マッチする前記ターゲット・ストリングのキャラクタを示すと共に前記参照ストリングと部分マッチする前記ターゲット・ストリングのキャラクタを示す結果ビット・ベクトルを生成するための結果生成ロジックと、
前記結果ビット・ベクトルを使用して前記サブストリング検索操作においてフォールト検出を実行するためのフォールト検出ロジックと
を含むプロセッサ・ユニット。
【請求項13】
前記結果ビット・ベクトルを生成することはさらに、前記結果ビット・ベクトルに基づいて前記ターゲット・ストリング内の前記参照ストリングの第1のマッチを識別するための前記結果ビット・ベクトルのインデックスを生成すること、及び前記結果ビット・ベクトルに基づいて検出されたマッチのタイプを示す状態コードを生成すること
を含む、請求項12に記載のプロセッサ・ユニット。
【請求項14】
前記フォールト検出を実行することはさらに、前記結果ビット・ベクトルと、前記M×Mマトリックスの第1の行とを比較すること、及び前記結果ビット・ベクトルが前記M×Mマトリックスの前記第1の行と違う場合にエラーを識別すること
を含む請求項13に記載のプロセッサ・ユニット。
【請求項15】
さらに、前記ターゲット・ストリングの末端要素を示す値を有するゼロ検出ベクトルを生成するためのゼロ検出ロジックを含み、前記フォールト検出を実行することがさらに、マッチを示すビットの前記結果ビット・ベクトル内のビット位置が前記ターゲット・ストリングの末端要素を示すビットの前記ゼロ検出ベクトル内のビット位置よりも大きい場合にエラーを識別することを含む
請求項13に記載のプロセッサ・ユニット。
【請求項16】
前記フォールト
検出ロジックは、前記ターゲット・ストリング内のマッチ可能領域を決定すると共に前記結果ビット・ベクトルを前記マッチ可能領域と比較し、前記フォールト検出を実行することがさらに、前記状態コードが全マッチを示し、かつ前記ターゲット・ストリング内の前記マッチ可能領域が0に設定されている場合にエラーを識別する、
請求項13に記載のプロセッサ・ユニット。
【請求項17】
前記フォールト検出を実行することはさらに、前記結果ビット・ベクトルがベクトル要素内でミスアラインされる場合にエラーを識別することを含む、請求項13に記載のプロセッサ・ユニット。
【請求項18】
ミスアライメントは、前記結果ビット・ベクトルの前記ベクトル要素の第1のバイトとは異なる少なくとも1バイトが1にセットされている場合に検出される、請求項17に記載のプロセッサ・ユニット。
【請求項19】
さらに、前記ターゲット・ストリングの末端要素を示す値を有するゼロ検出ベクトルを生成するためのゼロ検出ロジックを含み、前記フォールト検出を実行することが、(a)前記状態コードが、全ストリング・マッチが検出されず、かつ部分マッチが検出されず、かつ末端要素が検出されなかったことを示す場合又は(b)(1)生成された前記インデックスが、第1のマッチを示すか又は(2)前記ゼロ検出ベクトルが前記ターゲット・ストリングの前記末端要素を示すビット値1を有する場合にエラーを識別することを含む
請求項13に記載のプロセッサ・ユニット。
【請求項20】
サブストリング検索操作におけるフォールトを検出するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
コンピュータをして、
それぞれがMのベクトル要素であり、前記ベクトル要素がキャラクタのエンコーディングのためのnビットであるベクトル・レジスタと、前記ベクトル・レジスタの第1のものに格納された参照ストリングの要素と、前記ベクトル・レジスタの第2のものに格納されたターゲット・ストリングとのキャラクタ・ワイズの比較のためのM×Mマトリックスのコンパレータとを含むプロセッサ・ユニットの使用を提供すること、
前記M×Mマトリックスにより実行される比較を使用して、前記参照ストリングに全マッチする前記ターゲット・ストリングのキャラクタを示すと共に前記参照ストリングに部分マッチする前記ターゲット・ストリングのキャラクタを示す結果ビット・ベクトルを生成すること、及び
前記結果ビット・ベクトルを使用することにより、前記サブストリング検索の操作におけるフォールト検出を実行すること
を実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デジタル・コンピュータ・システムの分野に関し、より詳細には、サブストリング検索のためのプロセッサ・ユニットを使用する、高速、正確なサブストリング・マッチのためのリザルト・ロジックにおける確度駆動のフォールト検出及び状態コードに関する。
【背景技術】
【0002】
デジタル・テキスト表現は、バイナリ・エンコードされたキャラクタ・ストリングとしてエンコードされ、かつ格納される。コンピュータのための広く受け入れられたキャラクタ・エンコーディング標準は、アメリカン・スタンダード・コード・フォア・インフォメーション・インターチェンジ(ASCII)及びユニコード・トランスフォメーション・フォーマット(UTF)を含む。コンピュータ上で最も普通のテキスト処理タスクは、ターゲット・ストリングの膨大なキャラクタ内で、参照ストリングのキャラクタ発生を識別するための、サブストリング検索又はサブストリング・マッチである。
【発明の概要】
【0003】
本発明の実施形態は、サブストリング検索操作におけるフォールトを検出するための方法を指向する。本方法の非限定的な実施例は、それぞれMベクトル要素のベクトル・レジスタ、ベクトル・レジスタの第1のものに格納された参照ストリング及びベクトル・レジスタの第2のものに格納されたターゲット・ストリングの要素をキャラクタ・ワイズで比較するためのコンパレータのM×Mマトリックスを含むプロセッサ・ユニットの使用を提供する。ベクトル要素は、キャラクタのエンコーディングのためのnビットの要素である。結果ビット・ベクトルは、M×Mマトリックスにより実行される比較を使用して生成される。結果ビット・ベクトルは、参照ストリングと完全にマッチするターゲット・ストリングのキャラクタを示すと共に参照ストリングと部分的にマッチするターゲット・ストリングのキャラクタを示す。サブストリング検索操作におけるフォールト検出は、結果ビット・ベクトルを使用することによって実行される。
【0004】
本発明の実施形態は、サブストリング検索操作におけるフォールトを検出するためのプロセッサ・ユニットを指向する。プロセッサ・ユニットは、それぞれMベクトル要素の複数のベクトル・レジスタを含む。ベクトル要素は、キャラクタをエンコーディングするためのnビット要素である。プロセッサの非限定的な実施例は、参照ストリングを格納する複数のベクトル・レジスタの第1のレジスタの要素と、ターゲット・ストリングを格納する複数のベクトル・レジスタの第2のレジスタとを、キャラクタ・ワイズで比較するためのコンパレータのM×Mマトリックスを含む。M×Mマトリックスは、参照ストリングと完全にマッチするターゲット・ストリングの少なくとも1つのキャラクタ及び参照ストリングと部分的にマッチしたターゲット・ストリングのキャラクタを示すビット・ベクトルを生成するように構成される。プロセッサは、また、結果ビット・ベクトルを使用して、参照ストリングの部分にマッチするターゲット・ストリングのサブストリングの指標を生成するための結果生成ロジックを含む。指標は、サブストリングの開始及びサブストリング長である。プロセッサは、さらに、結果ビット・ベクトルを使用することにより、サブストリング検索操作におけるフォールト検出を実行するためのフォールト検出ロジックを含む。
【0005】
本発明の実施形態は、サブストリング検索操作におけるフォールトを検出するためのコンピュータ・プログラム製品を指向する。コンピュータ・プログラム製品は、それに実装されたプログラム命令を有するコンピュータ可読な記録媒体を含む。プログラム命令は、プロセッサにより、プロセッサをして方法を実行させるように実行可能である。本発明の方法の非限定的な実施例は、それぞれMベクトル要素を含むベクトル・レジスタ、参照ストリングを格納する複数のベクトル・レジスタの第1のレジスタの要素と、ターゲット・ストリングを格納する複数のベクトル・レジスタの第2のレジスタとをキャラクタ・ワイズで比較するためのコンパレータのM×Mマトリックスを含むプロセッサ・ユニットの使用を提供する。ベクトル要素は、キャラクタをエンコーディングするためのnビットの要素である。結果ビット・ベクトルは、M×Mマトリックにより実行される比較を使用して生成される。結果ビット・ベクトルは、参照ストリングと完全にマッチするターゲット・ストリングの少なくとも1つのキャラクタを示すと共に参照ストリングと部分的にマッチしたターゲット・ストリングのキャラクタを示す。サブストリング検索操作におけるフォールト検出は、結果ビット・ベクトルを使用することにより実行される。
【0006】
追加の技術的特徴及び利便性は、本発明の技術を通じて実現される。本発明の実施形態及び特徴は、本明細書において詳細に説明され、かつ請求項の主題の部分として考慮される。より良い理解のため、詳細な説明及び図面を参照する。
【0007】
本明細書に記載する排他的権利の特徴は、明細書の結果として、具体的に指摘され、かつ請求項において明確に請求される。本発明の実施形態の上記及び他の特徴及び効果は、添付する図面との組み合わせに伴われる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【0008】
【
図1】
図1は、本発明の実施形態による、プロセッサの例示的構造である。
【
図2】
図2は、本発明の実施形態による、プロセッシング・ユニットの例示的構成の図である。
【
図3】
図3は、本発明の実施形態による、結果ビット・ベクトルと、比較マトリックスの第1の行との比較によるフォールト検出するための例示的ロジックの図である。
【
図4】
図4は、本発明の実施形態による、結果ビット・ベクトルと、ターゲット・ストリングに伴われるゼロ検出ベクトルとの比較によるフォールト検出のための例示的ロジックの図である。
【
図5】
図5は、本発明の実施形態による、報告されたマッチタイプと、結果ビット・ベクトル及びマッチ可能領域との比較によるフォールト検出のための例示的ロジックの図である。
【
図6】
図6は、本発明の実施形態による、結果ビット・ベクトルと、要素サイズとの比較によるフォールト検出のための例示的論理の図である。
【
図7A】
図7Aは、本発明の実施形態による、複数の報告された状態コードの確度チェックによるフォールト検出のための例示的ロジックの図である。
【
図7B】
図7Bは、本発明の実施形態による、複数の報告された状態コードの確度チェックによるフォールト検出のための例示的ロジックの図である。
【
図7C】
図7Cは、本発明の実施形態による、複数の報告された状態コードの確度チェックによるフォールト検出のための例示的ロジックの図である。
【
図7D】
図7Dは、本発明の実施形態による、複数の報告された状態コードの確度チェックによるフォールト検出のための例示的ロジックの図である。
【
図8】
図8は、本発明の実施形態による、結果ビット・ベクトル及び報告された状態コードの確度をチェックすることによるサブストリング検索操作におけるフォールト検出のための方法のフローチャートである。
【発明を実施するための形態】
【0009】
本明細書において図示された図は、例示的である。本発明の範囲から逸脱することなく、本明細書に記載される図面又は操作に対する多くの変更が可能である。例えば、動作は、異なる順序で実行することができ、又動作は、追加、削除、又は修正することができる。また、用語“結合された”及びその変形は、2つの要素の間で通信経路を有することを記述し、それらの間にまったく介在要素/接続のない、要素間の直接的接続を意味しない。これらの変更はすべて本明細書の部分として考慮される。
【0010】
添付する図面及び開示される実施形態の下記の詳細な説明において、図面に示された種々の要素には、2桁又は3桁の参照符号が付されている。僅かな例外を除き、それぞれの参照符号の最も左の桁(複数でもよい)は、その要素が最初に図示された図面に対応する。
【0011】
以前に説明したように、コンピュータ上での最も普通のテキスト処理タスクの1つは、ターゲット・ストリングのより膨大なキャラクタ内で参照ストリングのキャラクタ発生を識別するための、サブストリング検索又はサブストリング・マッチである。ターゲット・ストリングは、例えば、会話録音プロセスを使用する会話入力に基づき生成することができる。一般的に、参照ストリングの長さは、暗示的(ゼロ末端)に、又は特別のオペランドによる明示的、の何れかで特定することができる。同様に、ターゲット・ストリングは、ストリングの終了(EOS)をマークする、ゼロ末端により限定することができる。情報が果てしなく増加するプール、特に非構造化された人間の可読情報については、テキスト情報のより高速な抽出、及び結果的にサブストリング・マッチの問題を解決するためのより高速な方法が必要である。さらに、内部信号及び確実性についての中間的結果のクロス・チェックを実行する、追加のロジックが必要とされている。本発明の実施形態は、サブストリング検索の結果について確度により駆動されるクロス・チェック、及び検出されたマッチのタイプを示す報告された状態コードについてのクロス・チェックを可能とするロジックを提供する。従来のフォールト検出技術とは対照的に、本明細書で示す方法は、SIMD(シングルインストラクション・マルチプルデータ)サブストリンク検索エンジンの結果及び状態コードにおける、予備的なエラー検出に焦点を置く。
【0012】
サブストリング検索のための専用の命令を有するベクトルSIMDエンジンは、単一の命令で、同時にいくつかのキャラクタの比較を可能とし、これがバイト毎の比較とは対照的に、スピードアップをもたらす。例示的なベクトルSIMDの実装において、ベクトル・レジスタは、単一のベクトルに保持することができる固定数のビット(例えばKビット)を有する。ベクトル・レジスタは、それぞれサイズn(例えば、それぞれのベクトル要素がnビットを占有する)を有するMベクトル要素を含むことができる。ベクトル・レジスタは、サイズnのMベクトル要素を含む。レジスタの幅とは、レジスタ内のベクトル要素の数を参照する。
【0013】
キャラクタLの数は、Mよりも小さい。本発明の実施形態は、完全にベクトル・レジスタを占有する(例えば、M×nビット)の、Lキャラクタのサブストリング検索を含む。Lキャラクタのストリングを、参照ストリングとして参照することができる。
【0014】
コンパレータ・マトリックスの上三角部分は、マトリックスの主対角要素及び追加の複数の上側対角要素である。コンパレータ・マトリックスの下側三角部分は、主対角要素及び複数の追加の下側対角要素である。
【0015】
用語“全マッチ”は、参照ストリングと完全にマッチするターゲット・ストリングのLキャラクタのサブストリングを参照する。用語“部分マッチ”は、参照ストリングと部分的にマッチするターゲット・ストリングの1つ又はそれ以上のサブストリングを参照する。上側対角部分を使用することは、ターゲット・ストリングの末端で1つ又はそれ以上のキャラクタのサブストリングの識別を可能とする。下側対角部分を使用することは、ターゲット・ストリングの先頭での1つ又はそれ以上のキャラクタのサブストリングの識別を可能とする。
【0016】
本明細書に記載する高速、正確なサブストリング・マッチの1つ又はそれ以上の実施形態は、ターゲット・ストリング内の何処でもの全マッチ、及びターゲット・ストリングの終端又は先頭での部分マッチの、両方の正確な識別を可能とする。本方法は、再評価を必要としない(例えば、今日知られている命令の短ストリングにおけるサブストリング・マッチは、部分マッチを見出すために、検索されるべきオペランドの追加的なシフトを含む再評価を必要とする場合がある。)。ベクトル・レジスタ内でフィットする短ストリングについては、本明細書で説明する高速・正確なサブストリング・マッチ方法は、単一の操作でサブストリングの識別を可能とする。これは、全マッチ又は部分マッチのいずれかの発生時に、再評価フェーズを排除する。
【0017】
多くのプロセッサ設計は、特にサーバ又はメインフレームをターゲットとする場合、また、RAS(信頼性(reliability)、可用性(availability)、及びサービス可能性(serviceability))の特徴に対処し、かつ追加することを要求する。例えば、このコンテキストにおいて、物理的フォールト(永続的、過渡的又は断続的)を検出し、処理することが重要となる場合がある。
【0018】
エラーは、フォールトの兆候である精度又は正確さからの偏差として定義される。遅延フォールト又はオペレータの優先性を喪失する結果として生成される、予期せぬ値に起因したメモリ・セルによる連続的なデータ・ビットの捕捉の失敗は、両方ともエラーの実施例である。
【0019】
フォールトと同様に、エラーは、2つのタイプに分類することができる:検出されたか、又は潜在的なエラーである。エラー検出技術を適用する場合、エラーは、それが認識されない限り、潜在的エラーと呼ばれる。実施例として、正電荷及びアルファ線粒子の運動エネルギーによるキャッシュ・エントリの単一メモリ内のエラーは、単一現象アップセット(SEU)フォールトとして知られ、潜在的であるか又は検出されるか、いずれの場合もある。プロセッサがSEUフォールトを認識する場合、それが検出され、そうでなければそれは潜在的ステータスを保持する。加えて、潜在的エラーは、それが検出される前に消失又は上書きされる場合がある。しかしながら、エラーの最も多くのものは、伝搬され、そして結果的により多くのエラーを生成するか、又はシステムを通して渡されて、単一又はより多くのエラーを生じさせる。SEUがラッチ又はフリップフロップ内で発生する場合、状態の変化を引き起こす可能性がある。SEUの影響は、サブストリング検索が通常、制御フローに影響するため、重大である(if文内での状態)。非限定的な実施例として、SEUによるデータベース検索におけるフォルス・ポジティブは、リソース、財産などの不適切な割り当て、又は移転を誘発する可能性がある。
【0020】
従来のフォールト検出技術は、SIMDのためのストリング検索エンジンのコンテキストにおいて、多くの制約を有している。1つの従来の技術は、リソースの複製がSIMDアーキテクチャについて禁止されるほどに高価である。もう1つのフォールト防止技術である市販の放射線堅牢化プロセッサは、また要求される面積及び計算能力の両方に関連して極めて高価である。さらに他のフォールト検出技術は、いくつかの操作については適用できるが、他についてはそうではない。例えば、残差チェック技術は、数値計算についてのみ動作するが、パリティ決定は、単一又は奇数ビット・エラーに制限され、かつデータのみを保護するが、計算についてはそうではない。
【0021】
図1は、プロセッサ101の例示的な構造である。例えば、キャッシュ103の1つ又はそれ以上のレベルは、プロセッサ性能を向上させるため、メモリ・データをバッファするために使用される。キャッシュ103は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する、高速バッファである。典型的なキャッシュ・ラインは、64、128、又は256バイトのメモリ・データである。キャッシュ103は、メインメモリ・ストレージ105の高次階層化ストレージのデータをキャッシングする。
【0022】
プログラム・カウンタ(命令カウンタ)107は、実行されるべき現在命令のアドレス追跡を維持する。z/アーキテクチャのプロセッサ内のプログラム・カウンタは、64ビットであり、31又は24ビットに切り捨てられて、アドレッシング限界を事前にサポートする。プログラム・カウンタは、典型的にはコンピュータのプログラムステータス・ワード(PSW)内に実装されているので、コンテキスト切替えの間に存続する。したがって、プログラム・カウンタ値を有する進行中のプログラムは、例えばオペレーティング・システムによりインタラプトされることができる(プログラム環境からオペレーティング・システム環境へのコンテキスト切替え)。プログラムのPSWは、プログラム・カウンタ値を保持するが、プログラムは、活動的ではなく、かつオペレーティング・システムのプログラム・カウンタ(PSW内の)は、オペレーティング・システムが実行中の間、使用される。典型的にはプログラム・カウンタは、現在命令のバイト数に等しいだけ増分される。プログラム・カウンタ107は、例えば、コンテキスト切替え操作、又は分岐命令の分岐取得操作の何れかにより変更される。コンテキスト・スイッチ操作においては、現在のプログラム・カウンタ値は、実行されるべきプログラムに関する他の状態情報と共に、プログラムステータス・ワードに格納され(状態コードといった)、新たなプログラム・カウンタ値がロードされ、実行されるべき新たなプログラム・モジュールの命令をポインティングする。分岐取得操作は、プログラム・カウンタ107内に分岐命令の結果をロードすることによって、プログラム内でプログラムが決定又はループすることを許可するために、実行される。
【0023】
典型的には、命令フェッチ・ユニット109は、プロセッサ010の代理として命令をフェッチするために用いられる。フェッチ・ユニット109は、“次に続く命令”である、分岐取得命令のターゲット命令、又はコンテキスト切替えに続くプログラムの最初の命令をフェッチする。命令フェッチ・ユニットの実施例は、しばしばプリフェッチされた命令が使用されるであろうという、らしさ、に基づいて投機的に命令をプリフェチする、プリフェッチ技術を使用する。例えば、フェッチ・ユニットは、次の命令及びさらに続く命令の追加バイトを含む16バイトの命令をフェッチすることができる。
【0024】
フェッチされた命令は、さらにプロセッサ101によって実行される。例えば、フェッチされた命令(複数でもよい)は、フェッチ・ユニット109のディスパッチ・ユニット111に渡される。ディスパッチ・ユニット111は、命令(複数でもよい)をデコードして、適切なユニット113,115,117へと、デコードされた命令(複数でもよい)についての情報を転送する。実行ユニット113は、典型的には命令フェッチ・ユニット109からデコードされた計算命令情報に関する情報を受領することができ、かつ命令のオペコードに従って、オペランドについての計算操作を実行することができる。オペランドは、好ましくはメモリ105から、ベクトル・レジスタ119から又は実行されるべき命令の即時フィールドの何れかから、実行ユニット113に提供される。実行の結果は、格納される場合、メモリ105、ベクトル・レジスタ119、又は他の機械的ハードウェア(コントロール・レジスタ、PSWレジスタなど)内に格納される。
【0025】
図1に示すように、ベクトル・レジスタ119は、同一のサイズKを有することができ、K=M×nであって、nは、単一のキャラクタをエンコードするビット数(例えばn=8ビット)である。例えば、ベクトル・レジスタ119のそれぞれは、Kビットを格納することができる。Mは、レジスタの幅である。
【0026】
ベクトル・レジスタ119内に格納されたデータは、例えば、並列ベクトル・プロセッシング技術を使用、例えばシングルインストラクション・マルチプルデータ(SIMD)ハードウェアを使用して処理することができ、例えば、ベクトル・レジスタ119は、SIMD命令により実行されるベクトル・プロセッシングのためのデータを保持することができる。
【0027】
例えば、ワードとして知られている固定サイズのバイト・チャンクを、メモリ105からベクトル・レジスタ119へと転送することができる。ワード中のビット数は、例えば、レジスタ119のサイズKに等しいか、又はそれより小さい。例えば、ベクトルのロード/ストア命令は、メモリ105内に格納されるワードを取得する能力を提供し、ベクトル・レジスタ119内に配置されるべき、連続するベクトル/ストリームへと、それらをパックする。例えば、メモリ105は、256ビットのメモリ・ワードを含む構成とすることができる。256ビットのメモリ・ワードは、Kビットのチャンクに区分することができる。処理中、それぞれのKビットのチャンク(Mキャラクタを含む)が、レジスタ119内にロードされる。
【0028】
図2は、本発明の1つ又はそれ以上の実施形態による、プロセッシング・ユニット200のコンポーネントを示す図である。プロセッシング・ユニット200は、1つの命令で全ベクトルを操作するように構成することができる。プロセッシング・ユニット200は、
図1の実行ユニット113の部分である。
【0029】
プロセッシング・ユニット200は、コンパレータ・マトリックス214を含む。コンパレータ・マトリックス214は、ハードウェア的なコンパレータ・マトリックスである。コンパレータ・マトリックス214は、個別的なキャラクタを比較するように構成することができる。コンパレータ・マトリックス214は、キャラクタ・ワイズの等価性比較コンパレータを含む。等価性比較について追加的に、又は代替的に、コンパレータは、‘>’及び‘<’オペレータの組み合わせ、例えば操作NOT((r>t)OR(r<t))=(r==t)を実行するように構成することができる。
【0030】
コンパレータ・マトリックス214は、2つのオペランドa及びbについて操作することができる。オペランドa202は、例えば、検索されるべき参照ストリングとすることができ、オペランドb204は、オペランドa202の全部又は部分又はそれらの両方を含むか否かがチェックされる、ターゲット・ストリングとすることができる。参照ストリングは、Lキャラクタを含み、ターゲット・ストリングは、完全にベクトル・レジスタ119を占有することができるMキャラクタを含むことができる。ターゲット及び参照ストリングは、キャラクタ毎(キャラクタ・ワイズ)に比較される。第3のオペランド、オペランドc208は、コンパレータ・マトリックス214の結果についてロジック224により適用されるゼロ検出ベクトルを生成するためのゼロ検出ロジック212により使用される。オペランドc(明示的長さ)208は、具体的には、5ビット、59-63を有することができる。具体的には、ターゲット・ストリング“abhighnoonoonnoo”内の、4に等しい参照ストリングの明示的長さ(c=4)の参照ストリング“noon”の検索は、結果=000001001000100を返す。左から開始して、第7及び第10ビットの複数の‘1’は、完全マッチに由来するが、右から数えて第3ビットの‘1’は、部分マッチに由来する。
【0031】
具体的には、0-2の3ビットを有する要素サイズ・コントロール206は、要素サイズを特定する。要素サイズ・コントロール206は、ベクトル・レジスタ・オペランド内の要素のサイズを特定する。1つの実施例では、要素サイズ・コントロール206は、バイト、ハーフワード(例えば2バイト)又はワード(例えば、4バイト)を特定する。具体的には、0は、バイトを、1ハーフワードを;及び2は、ワード、すなわち全ワードとして知られているものを示す。それぞれの要素は、UTF-8(1バイト/キャラクタ)、UTF-16(2バイト/キャラクタ)又はUTF-32(4バイト/キャラクタ)のストリーム内のエンコードされたデータを含むことができる。
【0032】
ベクトル・レジスタの幅、M=16は、参照ストリング“noon”のキャラクタL=4よりも大きいので、参照ストリングを格納するベクトル・レジスタは、空の要素を含むことができる。具体的には、参照ストリング202内の最初の4キャラクタは、単語“noon”を表すことができるが、後方の4-12キャラクタは、空であり、キャラクタ・エンコーディングでは、0X00により示すことができる。第1のゼロ検出ロジック210及び第2のゼロ検出ロジック212は、それぞれ、第1のゼロ検出ベクトル211及び第2のゼロ検出ベクトル213を生成するために構成することができる。第1のゼロ検出ベクトル211は、ターゲット・ストリングの空の要素及びターゲット・ストリングの空ではない要素を示す値であり、第2のゼロ検出ベクトル213は、参照ストリングの空の要素及び参照ストリングの空ではない要素を示す値である。
【0033】
1つの実施形態においては、コンパレータ・マトリックス214の出力は、等価マトリックス215を含むことができる。等価マトリックス215は、比較されるキャラクタの間の等価関係を含む。
図2に示すように、第1のゼロ検出ベクトル211、第2のゼロ検出ベクトル213及び等価マトリックス215は、対応するフリップ-フロップ216a,216b及び216cに、それぞれ入力されることができる。
【0034】
本発明の実施形態により、プロセッシング・ユニット200は、さらにフォールト検出ロジックを含むことができる。フォールト検出ロジックは、予測中間結果ベクトル230を格納するためのレジスタ、訂正マスク228を含むレジスタ、ターゲット分離マスク226を含むレジスタ、及びレジスタの対応する要素の間でAND操作を実行する論理を含む。1つの実施例では、3つのレジスタは、フォールト検出ロジックの部分ではない可能性がある。訂正マスク228を生成する訂正ロジック222を使用することは、予測中間結果ベクトル230内で、部分マッチの識別又は全マッチの識別を抑制するための簡単な方法を可能とする。従来技術とは対照的に、プロセッシング・ユニット200は、全マッチと、部分マッチとの間を、ハードウェア・レベルで区別する。これは、訂正ロジック222により生成される訂正マスク228を、ストリング・フラグメントの終端での部分マッチを含む可能性のある予測中間結果ベクトル230に対して適用することにより達成される。予測中間結果ベクトル230は、全マッチと、部分マッチとの間を区別することはできない。例えば、オペランドbがオペランドa及びオペランドaの部分を含む場合、中間結果ベクトル230は、オペランドaが完全にマッチする、オペランドbのサブストリングの開始をマークするビット位置での1つのビット値、及びオペランドaに部分的にマッチするオペランドbのサブストリングの開始をマークするもう1つの位置で、もう1つのビット値を含む。
【0035】
フォールト検出ロジックは、また、訂正マスク228と、中間結果ベクトル230との間のAND操作を実行するための、第1のANDゲート234を含むことができる。ANDゲート234の出力は、第2のANDゲート232の入力として使用することができる。ターゲット分離マスク226は、ターゲット分離ロジック220を使用して生成することができ、かつ第2のANDゲート232のもう1つの入力として使用することができる。フォールト検出ロジックは、さらに、中間結果ベクトル230と、ターゲット分離マスク226との間でAND操作を実行するための第3のANDゲート236を含むことができる。
【0036】
本発明の実施形態により、具体的には、第2のANDゲート232の出力ビットにわたるオア-ツリー238により、結果生成ロジックが実現される。オア-ツリー238の出力は、全マッチ結果240の識別を提供する。本明細書で記載するように、全マッチは、ストリングに全マッチするターゲット・ストリングのLキャラクタのサブストリングを参照する。第3のANDゲート236の出力は、先行ゼロ・カウンタ242に供給される。先行ゼロ・カウンタ242は、結果ビット・ベクトル内の先行ゼロの数を決定することにより、結果インデックス244を返す。結果インデックス244は、第1のマッチのインデックスを示す。したがって、例えば、ターゲット・ストリング“abhighnoonoonnoo”内の参照ストリング“noon”の検索は、6に等しい結果インデックス値を返す(ターゲット・ストリングの6番目のビットがファースト・マッチのため)。結果インデックス244は、フリップ-フロップ246内に格納される。
【0037】
本発明の実施形態によれば、結果生成ロジックは、さらに、状態コード250を、結果インデックス244と共に返す。例示的な状態コードを下記の表に示す。
【0038】
【0039】
1つの実施形態においては、状態コード250は、以下の入力の組み合わせ:全マッチの結果240の識別に基づき、ターゲット分離マスク226、訂正マスク228及び予測中間結果に基づき、状態コード・ジェネレータ248によって生成することができる。1つの実施形態においては、状態コード・ジェネレータ248は、デコーダを含むことができる。生成された状態コード250は、対応するフリップ-フロップ252に格納することができる。
図2に示すように、SEUフォールト128,254は、フォールト検出フリップ-フロップ216a,216b,216cの何れか、及び結果生成ロジックフリップ-フロップ246,252の何れかに影響することができる。
【0040】
図3は、本発明の実施形態により結果ビット・ベクトルと、コンパレータ・マトリックスの第1行との比較による、フォールト検出のロジックを示す図である。本明細書で記載するように、コンパレータ・マトリックス305は、2つのオペランドa202及びb204について操作する。コンパレータ・マトリックス305の第1行308は、参照ストリングの第1のキャラクタが、ターゲット・ストリングのキャラクタの1つとマッチする位置で1にセットされるビット値を含むであろう。フォールト検出ロジック300は、結果ビット・ベクトル310が特定の位置でマッチを識別するが、ターゲット・ストリング及び参照ストリングの第1のキャラクタそれぞれが、その特定の位置でマッチしない場合、エラーを検出するように構成される。フォールト検出ロジック300は、さらにゼロ検出ベクトル306を生成することができる。
【0041】
コンパレータ・マトリックス305は、それぞれのオペランド302,304の個別的なキャラクタを比較するように構成される。コンパレータ・マトリックス305は、キャラクタ・ワイズの等価性比較といったコンパレータを含む。結果ビット・ベクトル310は、実行されたサブストリング検索の結果を示し、かつ参照ストリングが、ターゲット・ストリングのキャラクタのシーケンスとマッチする位置で1に設定されるビット値を含む。結果ビット・ベクトル310は、全マッチ、部分マッチ、及びオーバーラッピング・マッチの如何なるものでも識別する。フリップ-フロップ312は、結果ビット・ベクトル310を格納する。いくつかのポイントでフリップ-フロップ312は、例えば、アルファ線粒子又は中性子を含む放射線の照射の結果として、SEU事象316に遭遇する。この結果、フリップ-フロップ312の出力318は、少なくとも1つのビット反転(例えばポジションq6でのビット)を有する可能性がある。
【0042】
図3に示されるように、もう1つのフリップ-フロップ314は、コンパレータ・マトリックス305の第1行308を格納する。フォールト検出ロジック300は、ANDゲート320を含む。フリップ-フロップ314に格納されるすべてのビットは、反転されて、ANDゲート320に供給される。ANDゲート320のもう1つの入力は、フリップ-フロップ312の出力である。ANDゲート320の出力は、ORツリー322に接続される。ORツリー322は、結果ビット・ベクトル310がコンパレータ・マトリックス305の第1行308のセブセットでない場合にのみ、値1を生成することを留意するべきである。この場合、出力318のポジションq
6でビットが1に設定されるので、第1行308の対応する位置での値は、0にセットされ、第1のキャラクタにマッチがないことを識別し、これがANDゲート320の入力で1へと反転される。ANDゲート320の第2の入力(結果ビット・ベクトルの要素q
6の値)は、また1であり、ORツリー322は、1を出力し、これはフォールト324を示す。フォールト検出ロジック300は、結果ビット・ベクトル310の確度をチェックすると共に、結果ビット・ベクトル310がコンパレータ・マトリックス305の第1行308のサブセットとは違う場合に、フォールトを検出する。
【0043】
図4は、本発明の実施形態による、結果ビット・ベクトルと、ターゲット・ストリングに伴われるゼロ検出ベクトルとの比較による、フォールト検出のためのロジックを示す図である。本発明の実施形態により、第1のゼロ検出ロジック309は、オペランドa302に含まれる情報を処置して、参照ストリングに伴われる第1のゼロ検出ベクトル306を生成する。図示した場合には、5番目の位置から開始する第1のゼロ検出ベクトル306の全ビットが1にセットされる。第2のゼロ検出ロジック404は、オペランドb304に含まれる情報を処理して、ターゲット・ストリングに伴われる第2のゼロ検出ベクトル406を生成する。図示された場合には、オペランドb304に含まれるターゲット・ストリングは、暗示的に終端し(ストリング・キャラクタ402の終端を含む)、ストリング・キャラクタ402の終端に対応する位置から開始する第2のゼロ検出ベクトル406の全ビットが、1に設定される。フリップ-フロップ408は、第2のゼロ検出ベクトル406を格納する。
【0044】
サブストリング検索ロジック408は、第1のゼロ検出ベクトル306及び第2のゼロ検出ベクトル406を使用して、それぞれのオペランド302及び304それぞれの個別的なキャラクタを比較するように構成される。サブストリング検索ロジック408は、フリップ-フロップ312に格納される結果ビット・ベクトル310を生成する。いくつかのポイントで、フリップ-フロップ312は、例えば、アルファ線粒子又は中性子を含む放射線の照射の結果、SEU事象316に遭遇する。発生したSEU事象316の結果として、フリップ-フロップ312の出力318は、少なくとも1つのビット反転を有する可能性がある。図示される場合、出力318の最後のビットが反転している。反転ビットは、ストリング・キャラクタ402の終端により示されるターゲット・ストリングの終端を越えた位置にあることを指摘する。
【0045】
フォールト検出ロジック400は、ANDゲート410を含む。フリップ-フロップ408の内容は、ANDゲート410に、入力の1つとして供給される。SEUに影響を受けた出力318は、もう1つのANDゲート410の入力を含む。フォールト検出ロジック400は、さらにANDゲート410の出力を検査するためのORツリー412を含む。この場合、ORツリー412は、マッチを示すビットの結果ビット・ベクトル内でのビット位置が、ターゲット・ストリングの末端要素(EOS要素)を示すビットのゼロ検出ベクトルのビット位置よりも大きい場合にのみ、値1を生成する。この場合、SEUに影響を受けた出力318の最後のビットが1にセットされ、かつ第2のゼロ検出ベクトル406の最後のビットが1にセットされるので、ORツリー412により生成された値は1となり、フォールト414を示す。フォールト検出ロジック400は、結果ビット・ベクトル310の確度をチェックし、かつ結果ビット・ベクトルの出力318が、ターゲット・ストリングの黙示的又は明示的な末端を越えた位置でマッチを示す場合に、フォールトを検出するように構成される。
【0046】
図5は、本発明の実施形態による、結果ビット・ベクトルと、ターゲット・ストリングに伴われるマッチ可能な領域との比較により、フォールトを検出するためのロジック500を示す図である。本発明の実施形態により、ゼロ検出ロジックは、オペランドに含まれる情報を処理して、参照ストリングに伴われるゼロ検出ベクトル306を生成する。図示された場合において、オペランドa202に含まれるストリングが4キャラクタを含むので、第1のゼロ検出ベクトル306の5番目の位置から開始する全ビットが1にセットされる。本発明の実施形態により、ロジック500は、さらに訂正ロジック502を含むことができる。訂正ロジック502は、訂正マスク228を生成するためのロジックを含む。訂正マスク228は、フリップ-フロップ510に格納される。訂正マスク228を使用することは、結果ビット・ベクトル310内で、部分マッチの識別又は全マッチの識別を抑制するための簡単な方法を可能とする。本明細書に記載されるように、予測中間結果505は、全マッチと部分マッチとの間を区別できない。予測中間結果505からの部分マッチを抑制するために、訂正マスク228は、ストリング・フラグメントの終端で部分マッチを含む可能性のある予測中間結果505に対して適用506される。図示された場合において、訂正マスク228は、マッチ可能な領域を示す。本明細書で使用されるように、用語“マッチ可能な領域”とは、全マッチが可能な領域を表す。訂正マスク228内のマッチ可能領域の全ビットは、1にセットされる。図示する場合において、参照ストリングは、4つのキャラクタを含むので、マッチ可能な領域は、最後の3つを除いて全ビットを含む。
【0047】
訂正マスク228が予測中間結果505について適用506された後、結果ビット・ベクトル310は、全マッチの識別のみを含む。図示される場合において、予測中間結果505は、1にセットされたビットs7により指示される部分マッチのみを含むので、適用されたビット・マスク228は、結果ビット・ベクトル310の全ビットを1にセットする。
【0048】
結果ビット・ベクトル310は、フリップ-フロップ512に格納される。いくつかのポイントで、フリップ-フロップ512は、SEU事象514に遭遇する可能性がある。発生したSEU事象514の結果、フリップ-フロップ512の出力516は、少なくとも1つのビット反転を有する可能性がある。図示された実施例においては、出力516の最後から3番目のビットが反転している。反転したビットは、マッチ可能領域の外側に位置することに留意されたい。
【0049】
フォールト検出ロジック500は、ANDゲート524を含んでいる。フリップ-フロップ510の内容は、ANDゲート524に入力の1つとして供給される。SEUの影響を受けた出力516は、ANDゲート524のもう1つの入力を含む。フォールト検出ロジック500は、さらにANDゲート524の出力のビットにわたる第1のORツリー526を含む。ORツリー526は、結果ビット・ベクトル内のマッチを示すビット位置がマッチ可能領域内である場合にのみ、値1を生成する。この場合、ANDゲート524の出力は0なので、ORツリー526により生成される値は、また0である。
【0050】
図5に示すように、フォールト検出ロジック500は、さらに、フリップ-フロップ512の出力516のビットにわたる第2のORツリー518を含む。フリップ-フロップ512の出力516のビット5は、1にセットされているので、第2のORツリー518の出力もまた1である、この出力は、全マッチ・インジケータ522を含む。全マッチ・インジケータ522は、また、もう1つのANDゲート528へと供給される。第1のORツリー526の出力が反転され、ANDゲート528のもう1つの入力として使用される。ANDゲート528の出力は、フォールト530を示す。フォールト検出ロジック500は、フリップ-フロップ512の出力516の確度をチェックすると共に、この出力が全マッチを示す場合にフォールトを検出するように構成され、同時にフリップ-フロップ512の出力516内のマッチ可能領域の全ビットが0にセットされる。
【0051】
図6は、本発明の実施形態による、結果ビット・ベクトルが、要素サイズに整合しない場合にフォールトを検出するロジックを含む、ミスアライメント検出ロジック600を示す図である。例示的な目的のみのため、キャラクタは、URF-16エンコーディング・スキームを使用してエンコードされたものと仮定し、これは、したがって、エンコーディング・スキーム内でバイトの順番を規定するビッグエンディアン(BE)又はリトルエンディアン(LE)のいずれかとされる可能性がある非ASCII透過的なバイトシリアル化エンコーディング・スキームである。それぞれのキャラクタは、2バイトを使用してエンコーディングされる。本実施例では、例示的な結果ビット・ベクトル310の第3バイトが1に設定され、残りのすべてのバイトは、0に設定される。フリップ-フロップ601は、結果ビット・ベクトル310を格納する。いくつかのポイントにおいて、フリップ-フロップ601は、SEU事象603に遭遇する可能性がある。結果ビット・ベクトル310のミスアライメントは、それぞれの要素の第1のバイト以外の少なくとも1つのバイトが1に設定される場合に発生する。
【0052】
結果ビット・ベクトル310と、対応する要素サイズとの間のこのミスアライメントを検出するために、ミスアライメント検出ロジック600は、ミスアライメントを検出するための少なくともワード又はハーフワードの要素サイズを有する回路要素を含む。ミスアライメント検出ロジック600は、結果ビット・ベクトル310を格納するフリップ-フロップ601で出力605を処理するように構成される。ハーフワード要素604を有するフリップ-フロップ601の出力605を処理するために、ミスアライメント検出ロジック600は、ハーフワードのそれぞれの第2のバイトにわたる第1のORツリー608を含む。それぞれのワードの第1のバイトのみが、値1を有することが予定されている。第1のORツリー608の出力は、ANDゲート614の入力に接続される。ANDゲート614のもう1つの入力は、要素サイズ・インジケータ616である。要素サイズ・インジケータ616は、結果ビット・ベクトルのそれぞれの要素が2バイトを有することを示す値を含む。ANDゲート614の出力は、それぞれの要素がハーフワードのサイズを有する要素の場合に、結果ビット・ベクトル310の要素について如何なるミスアライメントでも存在するか否かを示すものである。この場合、第1のハーフワード要素604の第2のバイトは、エラーにより1にセットされるので、ORツリー608の出力は、1にセットされる。この結果、ANDゲート614は、また、1を生成し、これがハーフ-ワード要素を有する結果ビット・ベクトルのミスアライメント618を示す。
【0053】
ミスアライメント検出ロジック600は、また、ベクトル605のそれぞれの要素が、ワード(4バイト)の場合の結果ビット・ベクトル310を格納するフリップ-フロップ601での出力605を処理するための回路要素を含むことができる。ミスアライメント検出ロジック600は、それぞれのワードの第2から第4のバイトにわたる第2のORツリー606を含んでいる。第2のORツリー606の出力は、要素サイズ・インジケータ612に接続される。第2のANDゲート610のもう1つの入力は、要素サイズ・インジケータ612を受領する。要素サイズ・インジケータ612は、結果ビット・ベクトル310のそれぞれの要素が4バイト長であることを示す値を含む。第2のANDゲート610の出力は、それぞれの要素がワードのサイズを有する場合に結果ビット・ベクトル310の要素に関して如何なるミスアライメントでも存在するか否かを示す。この場合、第1のワード602の第2及び第3バイトの両方が1にセットされているので第2のORツリー606の出力は1である。この結果、第2のANDゲート610は、また1を生成し、ワード要素を有する結果ビット・ベクトル310のミスアライメント620を示す。ORゲート622は、ANDゲート610及び614の出力を比較して、ANDゲート610及び614の少なくとも1つが1を生成する場合に、対応するミスアライメント・エラー624を識別する。
【0054】
図7A~7Dは、本発明の実施形態による、報告された状態コードの確度をチェックすることによる、フォールト検出のロジックを示す図である。本発明の実施形態により、結果生成ロジックは、第1のマッチのインデックスを示す結果インデックスと共に、状態コードの1つを生成することができる。したがって、例えば、ターゲット・ストリング“abhighnoonoonnoo”内の参照ストリング“noon”の検索は、6に等しい結果インデックス値を返す(ターゲット・ストリング6番目のビットが最初にマッチするため)。状態コードの例示的な値を、ここで再度繰り返す:CC0-全マッチ無し、部分マッチ無し、かつEOSは検出されず;CC1-全マッチ無し、部分マッチ無しだが、暗黙的EOS末端が検出された;CC2-全マッチが検出された;CC3-部分マッチだが全マッチは見出されない。
【0055】
図7Aは、報告された状態コードと、結果インデックス702及びゼロ検出ベクトル406との比較により、報告されたCC0の状態コード706の確度をチェックすることによりエラーを検出するロジック700を示す。状態コードCC0706の値は、フリップ-フロップ708に格納される。いくつかのポイントでは、フリップ-フロップ708は、SEU事象710に遭遇する可能性がある。発生したSEU事象710の結果、フリップ-フロップ708の出力712は、反転する可能性がある。例示する場合には、1の反転した値は、全マッチが無く、部分マッチが無く、かつEOSが検出されないことを示す。
【0056】
図7Aに示されるように、フォールト検出ロジック700は、さらに、結果インデックス702及びターゲット・ストリングに伴われるゼロ検出ベクトル406の値を処理するためのORゲート704を含む。2のべき乗のベクトル・サイズについて、結果インデックスの最上位ビット(MSB)を検査することで十分である。このビットは、マッチが見出された場合0であり、マッチが見出されない場合1である。結果インデックス702のMSBは、ORゲート704に供給され、ここで、結果インデックス702のMSBの値が反転される。この場合、結果インデックス702のMSBの値は、1に反転され、ORゲート704の出力は1である。ORゲート704の第2の入力は、ゼロ検出ベクトル406の最下位ビット(LSB)に接続される。このLSBは、EOSが検出された場合1にセットされる。したがって、マッチが見出されたかまたはEOSが見出されたかかの何れか両方の場合において、ORゲート704の出力が1となる。ORゲート704の出力は、ANDゲート714の1つの入力に接続される。フリップ-フロップ708のSEUに影響された出力712は、ANDゲート714のもう1つの入力として使用される。ANDゲート714の出力は、フォールト716を示す。フォールト検出ロジック700は、報告されたCC0の状態コード706の確度を検査すると共に、結果生成ロジックがマッチ又はEOSを見出したにもかかわらずCC0コードを報告する場合にフォールトを検出するように構成される。
【0057】
図7Bは、報告された状態コードと、結果インデックス702及びゼロ検出ベクトル406との比較によりCC1状態コード718の確度を検査してエラーを検出するためのロジック717を示す。状態コードCC1718の値は、フリップ-フロップ709に格納される。いくつかのポイントにおいて、フリップ-フロップ709は、SEU事象711に遭遇する可能性がある。発生したSEU事象711の結果、フリップ-フロップ709の出力720は、反転する可能性がある。図示した場合には、反転した値の1は、全マッチ無し、部分マッチ無し、かつ明示的EOS末端が検出されたことを示す。
【0058】
図7Bに示されるように、フォールト検出ロジック717は、さらに、結果インデックス702及びターゲット・ストリングに伴われるゼロ検出ベクトル406の値を処理するためのORゲート724を含む。2のべき乗のベクトル・サイズについて、結果インデックスの最上位ビット(MSB)を検査することで十分である。このビットは、マッチが見出された場合0であり、マッチが見出されない場合1である。結果インデックス702のMSBの値は、ORゲート724に供給され、ここで反転される。この場合、結果インデックス702のMSBの値は、1に反転され、ORゲート724の出力は1である。ORゲート724の第2の反転入力は、ゼロ検出ベクトル406の最下位ビット(LSB)に接続される。このLSBは、EOSが検出されない場合0にセットされる。したがって、マッチが見出されたか又はEOSが見出されなかったかの何れか両方の場合において、ORゲート724の出力が1となる。ORゲート724の出力は、ANDゲート726の1つの入力に接続される。フリップ-フロップ709のSEUに影響された出力720は、ANDゲート726のもう1つの出力として使用される。ANDゲート726の出力は、フォールト728を示す。フォールト検出ロジック717は、報告されたCC1の状態コード718の確度を検査すると共に、結果生成ロジックがマッチを検出するか又はEOSを見出さなかったにもかかわらずCC1コードを報告する場合に、フォールトを検出するように構成される。
【0059】
図7Cは、報告された状態コードと、結果インデックス702及びマッチタイプ・インジケータとの比較によりCC2状態コード732の確度を検査してエラーを検出するためのロジック729を示す。CC2の状態コード732の値は、フリップ-フロップ713に格納される。いくつかのポイントにおいて、フリップ-フロップ713は、SEU事象715に遭遇する可能性がある。発生したSEU事象715の結果、フリップ-フロップ713の出力734は、反転する可能性がある。図示した場合には、反転した値の1は、全マッチが検出されたことを示す。
【0060】
図7Cに示すように、フォールト検出ロジック729は、さらに、結果インデックス702及びマッチタイプ・インジケータ730の値を処理するためのORゲート736を含む。この実施形態において、値1のマッチタイプ・インジケータは、全マッチが検出されたことを示す。結果インデックス702のMSB及びマッチタイプ・インジケータ730の値は、ORゲート736に供給され、ここで、マッチタイプ・インジケータ730の値が反転される。この場合、両方の入力は非ゼロ値を有するので、ORゲート736の出力は1である。ORゲート736出力は、ANDゲート738の1つの入力に接続される。フリップ-フロップ713のSEUに影響された出力734は、ANDゲート738のもう1つの入力として使用される。ANDゲート738の出力は、フォールト740を示す。フォールト検出ロジック729は、報告されたCC2の状態コード732の確度を検査すると共に、結果生成ロジックが部分マッチのみを検出し又は全くマッチを見出さなかったにもかかわらずCC2コードを報告する場合にフォールトを検出するように構成される。
【0061】
図7Dは、報告された状態コードと、結果インデックス702及びマッチタイプ・インジケータとの比較によりCC3状態コード742の確度を検査することによりエラーを検出するためのロジック741を示す。CC3の状態コード742の値は、フリップ-フロップ719に格納される。いくつかのポイントにおいて、フリップ-フロップ719は、SEU事象721に遭遇する可能性がある。発生したSEU事象721の結果、フリップ-フロップ719の出力744は、反転する可能性がある。図示した場合には、反転した値の1は、部分マッチであるが、全マッチが検出されなかったことを示す。
【0062】
図7Dに示すように、フォールト検出ロジック741は、さらに、結果インデックス702及びマッチタイプ・インジケータ730の値を処理するためのORゲート746を含む。この実施形態において、値1のマッチタイプ・インジケータは、全マッチが検出されたことを示す。結果インデックス702のMSB及びマッチタイプ・インジケータ730の値は、ORゲート746に供給される。この場合、両方の入力は非ゼロ値を有するので、ORゲート746の出力は1である。ORゲート746の出力は、ANDゲート748の1つの入力に接続される。フリップ-フロップ719のSEUに影響された出力744は、ANDゲート748のもう1つの入力として使用される。ANDゲート748の出力は、フォールト750を示す。フォールト検出ロジック741は、報告されたCC3の状態コード742の確度を検査すると共に、結果生成ロジックが全マッチを検出するか又は全くマッチを見出さなかったにもかかわらずCC3コードを報告する場合に、フォールトを検出するように構成される。
【0063】
図8は、それぞれMベクトル要素のベクトル・レジスタを含むプロセッサ・ユニット200を使用する、本発明の実施形態による、サブストリング検索操作におけるフォールト検出のための方法800のフローチャートである。ベクトル要素は、キャラクタをエンコードするためのnビット要素である。L<Mは、Lキャラクタのサブストリング検索が実施されることを示す。
【0064】
ブロック802では、参照ストリングがレジスタ119の第1のレジスタにロードされることができ、ターゲット・ストリングがレジスタ119の第2のレジスタにロードされることができ、比較マトリックス214が提供されることができる。ターゲット・ストリングは、比較マトリックス214を使用して、それが参照ストリングの全部又は一部のみ又はそれら両方を含む場合にチェックされることができる。
【0065】
ブロック804では、結果ビット・ベクトルが生成される。結果ビット・ベクトルは、ストリングに完全にマッチするターゲット・ストリングのサブストリングの開始をマークするビット位置でビット値を含み、かつストリングに部分的にマッチするターゲット・ストリングのサブストリングの開始をマークするもう1つのビット位置で、もう1つのビット値を含む。結果ビット・ベクトルは、ターゲット・ストリングの終端で発生する全マッチ及び部分マッチの両方の識別を含むことができる。結果ビット・ベクトルを生成するために、全マッチと、部分マッチとの間を区別できない予測中間結果と、上位L-1ビットをマスクする訂正マスクとの組み合せを、結果ビット・ベクトルからの部分マッチを抑制するために実行する。
【0066】
ブロック806では、第1のマッチの結果インデックスが生成される。1つの実施形態においては、結果インデックスは、生成された結果ビット・ベクトルから導出される。例えば、ターゲット・ストリング“abhighnoonoonnoo”内の参照ストリング“noon”の検索は、6に等しい結果インデックスの値を返す(ターゲット・ストリングの6番目のビットがファースト・マッチなので)。
【0067】
ブロック808では、状態コードが生成される1つの実施形態においては、状態コードは、下記の入力の組み合わせ:ターゲット分離マスク226、訂正マスク228及び全マッチの結果240を示すことに基づく予測中間結果に基づいて、状態コード・ジェネレータ248(
図2に示した)により生成することができる。1つの実施形態においては、状態コード・ジェネレータ248は、デコーダを含むことができる。生成された状態コード250は、対応するフリップ-フロップ252内に格納することができる。
【0068】
ブロック810では、フォールト検出が、本明細書で説明されたフォールト検出ロジック300,400,500及びミスアライメント検出ロジック600を使用して結果ビット・ベクトルの確度を判断することによって実行される。本発明の実施形態により、フォールト検出ロジック300は、結果ビット・ベクトルの確度をチェックすると共に、結果ビット・ベクトルの開始サブセットが、コンパレータ・マトリックスの第1の行と違う場合に、フォールトを検出するように構成される。加えてフォールト検出ロジック400は、結果ビット・ベクトルの確度をチェックすると共に結果ビット・ベクトルの出力がターゲット・ストリングの暗示的な末端を越えた位置でマッチすることを示す場合にフォールトを検出するように構成される。さらに、フォールト検出ロジック500は、結果ビット・ベクトルの確度をチェックすると共に、結果ビット・ベクトルが、全マッチを示すが、同時に結果ビット・ベクトル内のマッチ可能領域が0にセットされている場合にフォールトを検出するように構成される・ミスアライメント検出ロジック600は、結果ビット・ベクトルが要素サイズに整合しない場合にミスアライメントを検出するように構成される。
【0069】
ブロック812で、フォールト検出を、本明細書で説明したフォールト検出ロジック700,717,729及び741を使用して状態コードの確度を判断することにより実行する。本発明の実施形態によれば、フォールト検出ロジック700は、報告されたCC0の確度をチェックすると共に、CC0コードが、結果生成ロジックにおいてマッチ又はEOSを検出したにもかかわらず報告された場合にフォールトを検出するように構成することができる。フォールト検出ロジック717は、報告されたCC1の確度をチェックすると共に、CC1コードが、結果生成ロジックにおいてマッチの検出又はEOSの不検出にもかかわらず報告された場合にフォールトを検出するように構成することができる。フォールト検出ロジック729は、報告されたCC2の確度をチェックすると共に、CC2コードが、結果生成ロジックにおいて部分マッチのみ又は全くマッチを検出しなかったにもかかわらず報告された場合にフォールトを検出するように構成することができる。フォールト検出ロジック741は、報告されたCC3の確度をチェックすると共に、CC3コードが、結果生成ロジックにおいて全マッチ又はまったくマッチを検出しなかったにもかかわらず報告された場合にフォールトを検出するように構成することができる。
【0070】
本明細書で説明した本発明の実施形態を、本発明の実施形態にしたがい、フローチャート命令及び方法のブロック図、又はそれらの両方、装置(システム)、及びコンピュータ可読な記録媒体及びコンピュータ・プログラムを参照して説明した。フローチャートの図示及びブロック図又はそれら両方及びフローチャートの図示におけるブロック及びブロック図、又はそれらの両方のいかなる組合せでもコンピュータ可読なプログラム命令により実装することができることを理解されたい。
【0071】
本発明は、システム、方法、又はコンピュータ・プログラム製品又はこれらの組み合わせとすることができる。コンピュータ・プログラム製品は、プロセッサに対して本発明の特徴を遂行させるためのコンピュータ可読なプログラム命令をそれ上に有するコンピュータ可読な記録媒体(又は複数の媒体)を含むことができる。
【0072】
コンピュータ可読な記録媒体は、命令実行デバイスが使用するための複数の命令を保持し格納することができる有形のデバイスとすることができる、コンピュータ可読な媒体は、例えば、これらに限定されないが、電気的記録デバイス、磁気的記録デバイス、光学的記録デバイス、電気磁気的記録デバイス、半導体記録デバイス又はこれらのいかなる好ましい組み合わせとすることができる。コンピュータ可読な記録媒体のより具体的な実施例は、次のポータブル・コンピュータ・ディスク、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリー・メモリ(ROM)、消去可能なプログラマブル・リード・オンリー・メモリ(EPROM又はフラッシュ・メモリ(登録商標))、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・イオンリー・メモリ(CDROM)、デジタル多目的ディスク(DVD)、メモリ・スティック、フロッピー・ディスク(登録商標)、パンチ・カード又は命令を記録した溝内に突出する構造を有する機械的にエンコードされたデバイス、及びこれらの好ましい如何なる組合せを含む。本明細書で使用するように、コンピュータ可読な記録媒体は、ラジオ波又は他の自由に伝搬する電磁波、導波路又は他の通信媒体(例えば、光ファイバ・ケーブルを通過する光パルス)といった電磁波、又はワイヤを通して通信される電気信号といったそれ自体が一時的な信号として解釈されることはない。
【0073】
本明細書において説明されるコンピュータ・プログラム命令は、コンピュータ可読な記録媒体からそれぞれのコンピューティング/プロセッシング・デバイスにダウンロードでき、又は例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク又はワイヤレス・ネットワーク及びそれからの組み合わせといったネットワークを介して外部コンピュータ又は外部記録デバイスにダウンロードすることができる。ネットワークは、銅通信ケーブル、光通信ファイバ、ワイヤレス通信ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ及びエッジ・サーバ又はこれらの組み合わせを含むことができる。それぞれのコンピューティング/プロセッシング・デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インタフェースは、ネットワークからコンピュータ可読なプログラム命令を受領し、このコンピュータ可読なプログラム命令を格納するためにそれぞれのコンピューティング/プロセッシング・デバイス内のコンピュータ可読な記録媒体内に転送する。
【0074】
本発明の操作を遂行するためのコンピュータ可読なプログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、マシン依存命令、マイクロ・コード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は1つ又はそれ以上の、Smalltalk(登録商標)、C++などのオブジェクト指向プログラミング言語、“C”プログラミング言語又は類似のプログラム言語といった手続き型プログラミング言語を含むプログラミング言語のいかなる組合せにおいて記述されたソース・コード又はオブジェクト・コードのいずれかとすることができる。コンピュータ可読なプログラム命令は、全体がユーザ・コンピュータ上で、部分的にユーザ・コンピュータ上でスタンドアローン・ソフトウェア・パッケージとして、部分的にユーザ・コンピュータ上で、かつ部分的にリモート・コンピュータ上で、又は全体がリモート・コンピュータ又はサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)を含むいかなるタイプのネットワークを通してユーザ・コンピュータに接続することができ、又は接続は、外部コンピュータ(例えばインターネット・サービス・プロバイダを通じて)へと行うことができる。いくつかの実施形態では、例えばプログラマブル論理回路、フィールド・プログラマブル・ゲートアレイ(FPGA)、又はプログラマブル論理アレイ(PLA)を含む電気回路がコンピュータ可読なプログラム命令を、コンピュータ可読なプログラム命令の状態情報を使用して、本発明の特徴を実行するために電気回路をパーソナライズして実行することができる。
【0075】
これらのコンピュータ可読なプログラム命令は、コンピュータのプロセッサ又は機械を生成するための他のプログラマブル・データ・プロセッシング装置に提供することができ、命令がコンピュータのプロセッサ又は他のプログラマブル・データ・プロセッシング装置により実行されて、フローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作を実装するための手段を生成する。これらのコンピュータ可読なプログラム命令は、またコンピュータ、プログラマブル・データ・プロセッシング装置及び他の装置又はこれらの組み合わせが特定の仕方で機能するように指令するコンピュータ可読な記録媒体に格納することができ、その内に命令を格納したコンピュータ可読な記録媒体は、フローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作の特徴を実装する命令を含む製造品を構成する。
【0076】
コンピュータ可読なプログラム命令は、またコンピュータ、他のプログラマブル・データ・プロセッシング装置、又は他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、又は他のデバイス上で操作ステップのシリーズに対してコンピュータ実装プロセスを生じさせることで、コンピュータ、他のプログラマブル装置又は他のデバイス上でフローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作を実装させる。
【0077】
本発明の種々の実施形態を、関連する図面を参照して説明する。本発明の代替的実施形態は、本発明の範囲を逸脱することなく為しえる。種々の接続及び位置的関係(例えば、上、下、隣接など)は、以下の説明及び図面における要素間に述べられている。接続又は位置的関係、又はそれらの両方は、他に特定されない限り直接的に又は間接的であってもよく、本発明は、本特徴に限定することを意図しない。したがって、エンティティの結合は、直接又は間接的なカップリンの何れでも参照することができ、エンティティ間の位置的関係は、直接的又は間接的な位置関係とすることができる。さらに、本明細書において説明した種々のタスク及びプロセス・ステップは、本明細書において詳細に説明しない追加的なステップ又は機能を有する、より包括的な手順又はプロセスに打追加することができる。
【0078】
以下の定義及び略記は、請求項及び明細書の解釈のために使用されるべきである。本明細書で使用するように、用語“含む”、“含んでいる”、“内包する”、“内包している”、“有する”、“有している”、“包含する”、“包含している”、又はこれらの如何なる他の変形は、非排他的な包含に及ぶことを意図する。例えば、要素の列挙を含む組成物、混合物、処理、方法、製品、又は装置は、これらの要素のみに限定される必要はないが、明示的に列挙されていないか、又はそのような組成のために固有な他の要素、混合物、処理、方法、製品又は装置を含むことができる。
【0079】
追加的に、本明細書で用語“例示的に”は、実施例、具体例又は例示として“提供する”ことを意味するために使用される。本明細書で“例示的な”として記載される実施形態又は設計は、他の実施例又は設計を越えて好ましい又は効果的であるとして解釈されるべき必要性はない。用語“少なくとも1つ”及び“1つ又はそれ以上”は、1より大きいか又は等しい、すなわち、1,2,3,4など、如何なる整数を含むこととして理解されることができる。用語“複数”は、1より大きいか又は等しい、すなわち、1,2,3,4など、如何なる整数を含むこととして理解されることができる。用語“接続”は、間接的な“接続”及び間接的な“接続”の両方を含むことができる。
【0080】
用語“約”、“実質的”、“近似的に”、及びそれらの変形は、本出願の出願時に利用可能な装置に基づいて特定の量の測定に伴われる誤差の程度を含むことを意図する。例えば、“約”は、所与の値の±8%、又は5%、又は2%を含むことができる。
【0081】
本発明の種々の実施形態の説明は、例示の目的で提示されるものであるが、開示した実施形態に尽くされる、とか、限定されることを意図するものではない。多くの修正及び変形は、説明した実施形態の範囲及び精神から逸脱すること無しに、当業者において自明である。本明細書で使用した用語は、実施形態、市場において見出される技術を超えた技術的改良の原理を最良に説明するか、又は他の当業者が理解できるように選択したものである。
【0082】
図のフローチャート及びブロック図は、本発明の種々の実施形態にしたがったシステム、方法及びコンピュータ・プログラムのアーキテクチャ、機能、及び可能な実装操作を示す。この観点において、フローチャート又はブロック図は、モジュール、セグメント又は命令の部分を表すことかでき、これらは、特定の論理的機能(又は複数の機能)を実装するための1つ又はそれ以上の実行可能な命令を含む。いくつかの代替的な実装においては、ブロックにおいて記述された機能は、図示した以外で実行することができる。例えば、連続して示された2つのブロックは、含まれる機能に応じて、実際上1つのステップとして遂行され、同時的、実質的に同時的に、部分的又は完全に一時的に重ね合わされた仕方で実行することができ、又は複数のブロックは、時として逆の順番で実行することができる。またブロック図及びフローチャートの図示、又はこれらの両方及びブロック図中のブロック及びフローチャートの図示又はこれらの組み合わせは、特定の機能又は動作を実行するか又は特定の目的のハードウェア及びコンピュータ命令の組み合わせを遂行する特定目的のハードウェアに基づくシステムにより実装することができる。