(57)【要約】【課題】条件文を有するソース・コードに対応する高速ベクトル・マスキングＳＩＭＤコードを生成する技術が開示される。【解決手段】ＳＩＭＤコードは、条件文をベクトルＳＩＭＤ演算に置き換える。１つの技術は、ベクトル演算、ビット・マスキング演算、およびビット単位論理演算を使用して条件付きマスキングを実施するステップを含む。これによって、ＳＩＭＤコード内に条件文がある必要性がなくなり、ＳＩＭＤハードウェアが分岐予測を使用せざるを得ない状態を避けることができる。これによって、パイプライン・ストールの数が減少し、ＳＩＭＤ計算ユニットの利用度が向上する。【選択図】図７
2010186467.tif 000002
【特許請求の範囲】
【請求項１】
条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成するコンピュータで実施される方法であって、
条件文を含む前記スカラ・ソース・コードを受信するステップであって、前記条件文の各分岐がスカラ・データ構造を含み、前記スカラ・データ構造に基づいて演算するスカラ演算を指定する、受信するステップと、
前記ベクトル・マスキング・ソース・コードを、
前記条件文の各分岐について、前記条件文の前記各分岐における前記スカラ・データ構造に対応するベクトル・データ構造を生成するステップと、
前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ演算に対応するベクトル演算を生成するステップであって、前記スカラ演算が、前記スカラ・データ構造に基づいて演算し、前記ベクトル演算が、前記ベクトル・データ構造に基づいて演算して、前記条件文の前記各分岐に対する結果を計算する、生成するステップと、
前記条件文の各分岐の前記各結果から最終結果を計算する少なくとも１つのビット単位演算を生成するステップと、
前記生成されたベクトル・マスキング・ソース・コードを出力するステップと
によって生成するステップと、
を含む方法。
【請求項２】
前記最終結果が、少なくとも１つのビット単位ベクトル演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項１に記載の方法。
【請求項３】
前記対応するベクトル演算は、単一命令複数データ（ＳＩＭＤ）ベクトル演算であり、前記対応するベクトル・データ構造は、ＳＩＭＤベクトル・データ構造であり、前記ビット単位ベクトル演算は、ＳＩＭＤベクトル・ビット単位演算である、請求項２に記載の方法。
【請求項４】
前記少なくとも１つのベクトル・ビット単位演算が、少なくとも、ベクトル・ビット単位ＡＮＤ演算、ベクトル・ビット単位ＡＮＤ  ＣＯＭＰＬＥＭＥＮＴ演算、およびベクトル・ビット単位ＯＲ演算から選択される、請求項２に記載の方法。
【請求項５】
前記最終結果が、ベクトル乗算演算およびベクトル・ビット単位ＯＲ演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項１に記載の方法。
【請求項６】
前記生成されたソース・コードをコンパイルして、指定の目標アーキテクチャを実行するように構成されるオブジェクト・コードを生成する、コンパイルするステップと、
前記オブジェクト・コードを前記指定の目標アーキテクチャに基づいて実行するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記条件文は、マスク値を使用して評価されるＩＦ文である、請求項１に記載の方法。
【請求項８】
実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するプログラムを含むコンピュータ可読ストレージ媒体であって、
条件文を含む前記スカラ・ソース・コードを受信するステップであって、前記条件文の各分岐が、スカラ・データ構造を含み、前記スカラ・データ構造に基づいて演算するスカラ演算を指定する、受信するステップと、
前記ベクトル・マスキング・ソース・コードを、
前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ・データ構造に対応するベクトル・データ構造を生成するステップと、
前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ演算に対応するベクトル演算を生成するステップであって、前記スカラ演算が、前記スカラ・データ構造に基づいて演算し、前記ベクトル演算が、前記ベクトル・データ構造に基づいて演算して、前記条件文の前記各分岐に対する結果を計算する、生成するステップと、
前記条件文の各分岐の前記各結果から最終結果を計算する少なくとも１つのビット単位演算を生成するステップと、
前記生成されたソース・コードを出力するステップと
によって生成するステップと、
を含むコンピュータ可読ストレージ媒体。
【請求項９】
前記最終結果が、少なくとも１つのビット単位ベクトル演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項８に記載のコンピュータ可読ストレージ媒体。
【請求項１０】
前記対応するベクトル演算は、ＳＩＭＤベクトル演算であり、前記対応するベクトル・データ構造は、ＳＩＭＤベクトル・データ構造であり、前記ビット単位ベクトル演算は、ＳＩＭＤベクトル・ビット単位演算である、請求項９に記載のコンピュータ可読ストレージ媒体。
【請求項１１】
前記少なくとも１つのベクトル・ビット単位演算が、少なくとも、ベクトル・ビット単位ＡＮＤ演算、ベクトル・ビット単位ＡＮＤ  ＣＯＭＰＬＥＭＥＮＴ演算、およびベクトル・ビット単位ＯＲ演算から選択される、請求項９に記載のコンピュータ可読ストレージ媒体。
【請求項１２】
前記最終結果が、ベクトル乗算演算およびベクトル・ビット単位ＯＲ演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項８に記載のコンピュータ可読ストレージ媒体。
【請求項１３】
前記生成されたソース・コードをコンパイルして、指定の目標アーキテクチャを実行するように構成されるオブジェクト・コードを生成する、コンパイルするステップと、
前記オブジェクト・コードを前記指定の目標アーキテクチャに基づいて実行するステップと、
をさらに含む、請求項８に記載のコンピュータ可読ストレージ媒体。
【請求項１４】
前記条件文は、マスク値を使用して評価されるＩＦ文である、請求項８に記載のコンピュータ可読ストレージ媒体。
【請求項１５】
プロセッサと、
前記プロセッサによって実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するように構成されるプログラムを含むメモリと、
を含むシステムであって、
条件文を含む前記スカラ・ソース・コードを受信する手段であって、前記条件文の各分岐が、スカラ・データ構造を含み、前記スカラ・データ構造に基づいて演算するスカラ演算を指定する、受信する手段と、
前記ベクトル・マスキング・ソース・コードを、
前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ・データ構造に対応するベクトル・データ構造を生成する手段と、
前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ演算に対応するベクトル演算を生成する手段であって、前記スカラ演算が、前記スカラ・データ構造に基づいて演算し、前記ベクトル演算が、前記ベクトル・データ構造に基づいて演算して、前記条件文の前記各分岐に対する結果を計算する、生成する手段と、
前記条件文の各分岐の前記各結果から最終結果を計算する少なくとも１つのビット単位演算を生成する手段と、
前記生成されたソース・コードを出力する手段と
によって生成する手段と、
を含むシステム。
【請求項１６】
前記最終結果が、少なくとも１つのビット単位ベクトル演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項１５に記載のシステム。
【請求項１７】
前記対応するベクトル演算は、ＳＩＭＤベクトル演算であり、前記対応するベクトル・データ構造は、ＳＩＭＤベクトル・データ構造であり、前記ビット単位ベクトル演算は、ＳＩＭＤベクトル・ビット単位演算である、請求項１６に記載のシステム。
【請求項１８】
前記少なくとも１つのベクトル・ビット単位演算が、少なくとも、ベクトル・ビット単位ＡＮＤ演算、ベクトル・ビット単位ＡＮＤ  ＣＯＭＰＬＥＭＥＮＴ演算、およびベクトル・ビット単位ＯＲ演算から選択される、請求項１６に記載のシステム。
【請求項１９】
前記最終結果が、ベクトル乗算演算およびベクトル・ビット単位ＯＲ演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項１５に記載のシステム。
【請求項２０】
前記生成されたソース・コードをコンパイルして、指定の目標アーキテクチャを実行するように構成されるオブジェクト・コードを生成する、コンパイルする手段と、
前記オブジェクト・コードを前記指定の目標アーキテクチャに基づいて実行する手段と、
をさらに含む、請求項１５に記載のシステム。
【請求項２１】
前記条件文は、マスク値を使用して評価されるＩＦ文である、請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、コンパイラに関する。さらに詳細には、本発明の実施形態は、条件文なしでＳＩＭＤアーキテクチャの条件付きデータ選択を行うための高速ベクトル・マスキング・アルゴリズムに関する。
【背景技術】
【０００２】
現在使用可能なプロセッサには、「単一命令複数データ」（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ，ｍｕｌｔｉｐｌｅ  ｄａｔａ）拡張をサポートするものがある。ＳＩＭＤとは、単一の命令が複数のデータ項目に対して並列に演算を行うことを表す。例えば、「加算（ａｄｄ）」ＳＩＭＤ命令は、８個の１６ビット値を並列に加算することもできる。すなわち、加算演算（単一の演算）は、８個の個別のデータ値のセット（複数データ）に対して実施される。一般に、データ値は、ベクトルの要素として提供されてもよい。したがって、ＳＩＭＤ処理は、ベクトル処理とも称される。ＳＩＭＤ命令は、複数の演算を１つの命令の一部として実施することによって、実行速度を飛躍的に向上させる。ＳＩＭＤ拡張のよく知られる例としては、マルチメディア拡張（ＭＭＸ：ｍｕｌｔｉｍｅｄｉａ  ｅｘｔｅｎｓｉｏｎ）命令、ＳＳＥ命令、およびベクトル・マルチメディア拡張（ＶＭＸ：ｖｅｃｔｏｒｅｄ  ｍｕｌｔｉｍｅｄｉａ  ｅｘｔｅｎｓｉｏｎ）命令が挙げられる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
多くの条件文を有するコードをＳＩＭＤパイプライン・アーキテクチャに移植（ポーティング）することにより性能上の問題が発生する。条件文は、各条件判定に対するパイプライン効率の低下はともかく、それぞれが基本的にスカラ演算であるため、このような性能問題の原因となる。その結果、ＳＩＭＤ並列計算ユニットの利用度を低下させることもある。さらに、ハードウェアで分岐予測を実施することもできるが、ＳＩＭＤベクトル処理ユニットの分岐予測は実施するのにコストがかかることもある。
【課題を解決するための手段】
【０００４】
本発明の一実施形態は、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する方法を含む。この方法は、一般に、条件文を含むスカラ・ソース・コードを受信するステップを含んでもよい。条件文の各分岐は、スカラ・データ構造を含み、各分岐のスカラ・データ構造に基づいて演算するスカラ演算を指定することもできる。この方法は、ベクトル・マスキング・ソース・コードを生成するステップをさらに含んでもよい。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐について、条件文のそれぞれの分岐のスカラ・データ構造に対応するベクトル・データ構造を生成するステップと、条件文の各分岐について、条件文のそれぞれの分岐のスカラ演算に対応するベクトル演算を生成するステップとを含んでもよい。スカラ演算はスカラ・データ構造に基づいて演算し、ベクトル演算はベクトル・データ構造に基づいて演算して、条件文のそれぞれの分岐に対する結果を計算する。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐のそれぞれの結果から最終結果を計算する少なくとも１つのビット単位演算を生成するステップと、生成されたベクトル・マスキング・ソース・コードを出力するステップとをさらに含んでもよい。
【０００５】
本発明のさらに別の実施形態は、実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するプログラムを含むコンピュータ可読ストレージ媒体を含む。この演算は、一般に、条件文を含むスカラ・ソース・コードを受信するステップを含んでもよい。条件文の各分岐は、スカラ・データ構造を含み、各分岐のスカラ・データ構造に基づいて演算するスカラ演算を指定することもできる。この演算は、ベクトル・マスキング・ソース・コードを生成するステップをさらに含んでもよい。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐について、条件文のそれぞれの分岐のスカラ・データ構造に対応するベクトル・データ構造を生成するステップと、条件文の各分岐について、条件文のそれぞれの分岐のスカラ演算に対応するベクトル演算を生成するステップとを含んでもよい。スカラ演算はスカラ・データ構造に基づいて演算し、ベクトル演算はベクトル・データ構造に基づいて演算して、条件文のそれぞれの分岐に対する結果を計算する。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐のそれぞれの結果から最終結果を計算する少なくとも１つのビット単位演算を生成するステップと、生成されたベクトル・マスキング・ソース・コードを出力するステップとをさらに含んでもよい。
【０００６】
本発明のさらに別の実施形態は、プロセッサを有するシステムと、プロセッサによって実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するように構成されるプログラムを含むメモリとを含む。この演算は、一般に、条件文を含むスカラ・ソース・コードを受信するステップを含んでもよい。条件文の各分岐は、スカラ・データ構造を含み、各分岐のスカラ・データ構造に基づいて演算するスカラ演算を指定することもできる。この演算は、ベクトル・マスキング・ソース・コードを生成するステップをさらに含んでもよい。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐について、条件文のそれぞれの分岐のスカラ・データ構造に対応するベクトル・データ構造を生成するステップと、条件文の各分岐について、条件文のそれぞれの分岐のスカラ演算に対応するベクトル演算を生成するステップとを含んでもよい。スカラ演算はスカラ・データ構造に基づいて演算し、ベクトル演算はベクトル・データ構造に基づいて演算して、条件文のそれぞれの分岐に対する結果を計算する。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐のそれぞれの結果から最終結果を計算する少なくとも１つのビット単位演算を生成するステップと、生成されたベクトル・マスキング・ソース・コードを出力するステップとをさらに含んでもよい。
【０００７】
本発明の上記特徴、利点および目的が達成され、詳細に理解することができるように、上記で簡単に要約された発明について、添付図面に示される本発明の実施形態を参照してさらに詳細に説明する。
【０００８】
しかしながら、本発明は、他の同様に効果的な実施形態をも許容し得るため、添付図面は、本発明の代表的な実施形態のみを例示するものであり、したがって、本発明の範囲を限定するものと見なすべきではないことに留意すべきである。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態による、コンピュータ環境で作動する高速ベクトル・マスキングＳＩＭＤコード発生器を示す構造図である。
【図２】本発明の一実施形態による、高速ベクトル・マスキングＳＩＭＤコード発生器のデータ・フローを示すブロック図である。
【図３】本発明の一実施形態による、例示的なＳＩＭＤ演算を示す表である。
【図４】本発明の一実施形態による、２つのアレイの要素間のスカラ・マスクとベクトル・マスクとの両方の例を示す図である。
【図５】本発明の一実施形態による、スカラ擬似コードおよび対応するＳＩＭＤ擬似コードの一例を示す図である。
【図６】本発明の一実施形態による、ＩＦ−ＥＬＳＥブロックについてスカラ・コードおよびベクトル・マスキングを有する対応するＳＩＭＤコードの別の一例を示す図である。
【図７】本発明の一実施形態による、条件文を含むスカラ・コードから高速ベクトル・マスキングＳＩＭＤコードを生成する方法を示す流れ図である。
【発明を実施するための形態】
【００１０】
本発明の実施形態は、ＳＩＭＤ並列ベクトル・プロセッサで条件文のない条件付きマスキングを実施する技術を提供する。一実施形態では、条件文のない高速ベクトル・マスキングＳＩＭＤコードを生成する技術が提供される。ＳＩＭＤコード発生器は、ソース・コード内の条件文を特定し、依然として条件付きデータ選択を実施しながらも条件文を排除したＳＩＭＤコードを生成するように構成されてもよい。
【００１１】
マスキング演算などの非常に多くの条件文が必要となる演算は多くある。ｎ要素のマスクの場合、条件変数をチェックして１つの入力データに対し特定の措置を講じるべきかどうかを判断するにはｎ個の条件文のセットが必要となる。条件付きチェックの代わりに、本発明の実施形態は、条件付きチェックをベクトル演算、ビット・マスキング演算、およびビット単位論理演算のセットに変換する。これによって、ＳＩＭＤベクトル処理ユニット上で作動する移植コードの命令数が明らかに増加することになるが、ある程度計算ステップが増加しても、条件文を数多く実施するよりは優れていることが多い。
【００１２】
次では、本発明の実施形態を参照する。ただし、当然ながら、本発明は、特定の説明される実施形態に限定されない。そうではなく、以下の特徴および要素のいかなる組み合わせも、様々な実施形態に関連するか否かに関わらず、本発明を実施し実践することを企図されている。さらに、様々な実施形態において、本発明は、従来技術より数多くの利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決策または従来技術あるいはその両方を上回る利点を達成することもできるが、所与の実施形態によって特定の利点が達成されるか否かは、本発明を限定するものではない。したがって、以下の形態、特徴、実施形態および利点は一例に過ぎず、特許請求の範囲（単数または複数）に明確に記述される場合を除いて、添付の特許請求の範囲の要素または限定とは見なされない。同様に、「本発明」という表現は、本明細書で開示される発明の主題の一般化として解釈されないものとし、特許請求の範囲（単数または複数）に明確に記述される場合を除いて、添付の特許請求の範囲の要素または限定と見なされないものとする。
【００１３】
本発明の一実施形態は、コンピュータ・システムとともに使用するためのプログラム製品として実施される。プログラム製品のプログラム（単数または複数）は、（本明細書に記載される方法を含む）実施形態の機能を定義し、様々なコンピュータ可読ストレージ媒体上に収容することができる。例示的なコンピュータ可読ストレージ媒体は、これらに限定されないが、（ｉ）情報が恒久的に記憶される書き込み不可能ストレージ媒体（例えば、ＣＤ−ＲＯＭドライブによって読み出し可能なＣＤ−ＲＯＭなどのコンピュータ内の読み出し専用メモリ・デバイス）、（ｉｉ）可変情報が記憶される書き込み可能ストレージ媒体（例えば、ディスケット・ドライブまたはハードディスク・ドライブ内のフレキシブル・ディスク）を含む。このようなコンピュータ可読ストレージ媒体は、本発明の機能を指示するコンピュータ可読命令を搬送する場合、本発明の実施形態である。他の媒体は、無線通信ネットワークを含むコンピュータ・ネットワークまたは電話回線網などを介してコンピュータに情報が搬送される通信媒体を含む。特に、後の実施形態は、インターネットおよび他のネットワークに情報を送信したりここから情報を受信したりするステップを含む。このような通信媒体は、本発明の機能を指示するコンピュータ可読命令を搬送する場合、本発明の実施形態である。概して、コンピュータ可読ストレージ媒体および通信媒体は、本明細書でコンピュータ可読媒体と称されてもよい。
【００１４】
一般に、本発明の実施形態を実施するために実行されるルーチンは、オペレーティング・システムまたは特定のアプリケーションの一部、コンポーネント、プログラム、モジュール、オブジェクト、または一連の命令であってもよい。本発明のコンピュータ・プログラムは、一般に、ネイティブ・コンピュータによって機械可読フォーマット、したがって実行可能命令に変換される多数の命令から構成される。さらに、プログラムは、プログラムに局所的に存在するか、あるいは、メモリ内またはストレージ装置上に見られる変数およびデータ構造から構成される。さらに、以降で説明される様々なプログラムは、これらが本発明の特定の実施形態で実施される用途に基づいて識別されてもよい。しかし、当然ながら、以後のいかなる特定のプログラム用語も便宜上使用されるだけであり、したがって、本発明は、このような用語によって識別または含意され、あるいはその両方が行われる任意の特定の用途のみに使用されることに限定されるべきではない。
【００１５】
図１は、本発明の一実施形態による、コンピュータ環境１００で作動する高速ベクトル・マスキングＳＩＭＤコード発生器１３５を示す構造図である。図示されるように、コンピュータ環境１００は、コンピュータ１１０を含む。一実施形態では、コンピュータ環境１００に示されるコンピュータ・システムは、既存のコンピュータ・システム、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなどを含んでもよい。しかしながら、図１に示されるコンピュータ環境１００は、１つのコンピュータ環境の一例に過ぎない。本発明の実施形態は、そのコンピュータ・システムが、高速ネットワークによって接続される一群の個別コンピュータ、シングル・ユーザ・ワークステーション、または不揮発性ストレージのないネットワーク機器などの複雑なマルチユーザ・コンピュータ・システムであるかどうかに関係なく、他の環境とともに使用することもできる。さらに、図１に示され、本明細書で説明されるソフトウェア・アプリケーションは、既存のコンピュータ・システム、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなどで実行されるコンピュータ・ソフトウェア・アプリケーションを使用して実施されてもよい。しかしながら、本明細書で説明されるソフトウェアは、現在存在するどんなコンピュータ環境またはプログラミング言語にも限定されず、新しいコンピュータ・システムが利用可能になるときにそれらを活用するようにしてもよい。
【００１６】
図示されるように、コンピュータ１１０は、メモリ１３０およびストレージ１４０から命令およびデータを取得する中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）１２０を含む。ＣＰＵ１２０は、コンピュータ内のすべての命令、論理および数学的処理を実施するプログラマブル論理デバイスである。この説明を実現するために、ＣＰＵ１２０は、幾つかのＳＩＭＤ拡張（例えば、マルチメディア・エクステンション（ＭＭＸ）命令、ＳＳＥ命令、またはベクトル・マルチメディア拡張（ＶＭＸ）命令を含む）をサポートしていると考えられる。ストレージ１４０は、コンピュータ１１０によって使用されるアプリケーション・プログラムおよびデータを記憶する。一実施形態では、コンピュータ環境１００に示されるストレージ・システムは、既存のストレージ・システム、例えば、ハードディスク・ドライブ、フラッシュ・メモリ・デバイス、光媒体などを含んでもよい。図示されるように、ストレージ１４０は、条件文を有するアプリケーション・ソース・コード１４５を含む。知られるように、ほとんどの（すべてではないが）プログラミング言語は、条件文をサポートしている。例えば、「Ｉｆ（条件）｛ある動作を実施する；｝というＣ＋＋のような構文を使用して、「条件」が存在する（または真である）という評価に基づいて「動作」を選択的に実行する。さらに複雑な条件を、「ＩＦ」「ＥＬＳＥＩＦ」および「ＥＬＳＥ」文、または「ＳＷＩＴＣＨ」および「ＣＡＳＥ」文を使用して構成することもできる。開発者は、「ＩＦ」文のセットとともにマスクを使用して、変数内の値に基づいて実施する動作を決定することが多い。単一の例として、（００００）の４ビットマスクを仮定する。この場合、マスクの各ビットを使用して、特定の動作の実施を指定することもできる。１つの動作だけが実施されると仮定すると、以下の値を有するマスクが得られる。
表Ｉ−４ビット・マスクの例
０００１−−−ＳＩＭＤ機能Ａを呼び出す
００１０−−−ＳＩＭＤ機能Ｂを呼び出す
０１００−−−ＳＩＭＤ機能Ｃを呼び出す
１０００−−−ＳＩＭＤ機能Ｄを呼び出す
このような場合、以下のようなソース・コード構文を条件付きマスクに使用して、変数ｆｏｏに基づいてどのＳＭＩＤ機能を呼び出すかを選択することもできる。
表ＩＩ−４ビット・マスクの例−ソース・コード
ｍａｓｋ［］＝{０ｘ０００１，０ｘ００１０，０ｘ０１００，０ｘ１０００}；
Ｉｆ（ｆｏｏ＆ｍａｓｋ［０］）
{／／ＳＩＭＤ機能Ａを呼び出す；}
ｅｌｓｅｉｆ（ｆｏｏ＆ｍａｓｋ［１］）
{／／ＳＩＭＤ機能Ｂを呼び出す；}
ｅｌｓｅｉｆ（ｆｏｏ＆ｍａｓｋ［２］）
{／／ＳＩＭＤ機能Ｃを呼び出す；}
ｅｌｓｅ（ｆｏｏ＆ｍａｓｋ［３］）
{／／ＳＩＭＤ機能Ｄを呼び出す；}
この簡単な例が示すように、表ＩＩのソース・コードによってＳＩＭＤ機能が引き出されるが、少なくとも１つおよび４つもの条件文を実施してようやくそうなる。したがって、ＣＰＵ１２０のＳＩＭＤ処理能力の利用効率が大幅に低下することもある。
【００１７】
図示されるように、メモリ１３０は、高速ベクトル・マスキングＳＩＭＤコード発生器１３５と、オペレーティング・システム（図示せず）とを含む。オペレーティング・システムは、コンピュータ１１０の動作を管理するために使用されるソフトウェアである。オペレーティング・システムの例としては、ＵＮＩＸ（Ｒ）、マイクロソフト・ウィンドウズ（Ｒ）・オペレーティング・システムのバージョン、およびＬｉｎｕｘ（Ｒ）オペレーティング・システムのディストリビューションが挙げられる（注：Ｌｉｎｕｘは、米国およびその他の国のリーナス・トーバルズ（Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓ）の登録商標である）。
【００１８】
一実施形態では、高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、条件文を有するスカラ・コード１４５（例えば、表ＩＩのソース・コード）を受信する。以下にさらに詳細に説明されるように、高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、アプリケーション・ソース・コードを評価し、条件文のない条件付きデータを選択するための高速ベクトル・マスクキング・アルゴリズムを利用して排除および置換することができる条件文を特定することもできる。
【００１９】
図２は、本発明の一実施形態による、高速ベクトル・マスキングＳＩＭＤコード発生器１３５のための例示的なデータ・フロー２００を示す。データ・フロー２００は、条件文を有するスカラ・コード１４５を含む。すなわち、スカラ・コード１４５は、スカラ演算（例えば、条件文）とベクトル演算（例えば、ＳＩＭＤ命令）との両方の組み合わせを含んでもよいアプリケーション・ソース・コード１４５を表す。高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、入力として、スカラ・コード１４５を受信する。高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、出力として、ＳＩＭＤ演算のために最適化されるアプリケーション・ソース・コード、すなわち、スカラ・コード１４５内に存在する条件文のないＳＩＭＤコード２３０を生成する。ＳＩＭＤコード２３０は、スカラ・コード１４５と同じ結果になるが、条件文を使用することなしにそうなる。
【００２０】
一実施形態では、高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、１つ以上のＳＩＭＤ演算を含むＳＩＭＤコード２３０を生成する。例えば、図３は、本発明の一実施形態による、例としてのＳＩＭＤ演算のセットを示す表を示す。図示されるように、ＳＩＭＤ演算ｖｅｃ＿ａｎｄ（）３１０は、２つの入力ベクトル（ベクトルａおよびベクトルｂ）のコンポーネントのビット単位のＡＮＤを計算する。ＳＩＭＤ演算ｖｅｃ＿ａｎｄ（）３２０は、入力ベクトルａと入力ベクトルｂの補数との間のビット単位のＡＮＤを計算する。同様に、ＳＩＭＤ演算ｖｅｃ＿ｏｒ（）３３０は、入力ベクトルａと入力ベクトルｂとの間のビット単位のＯＲを計算する。ＳＩＭＤ演算ｖｅｃ＿ａｄｄ（）３４０は、入力ベクトルａおよび入力ベクトルｂのそれぞれの補数を加算する。最後に、ＳＩＭＤ演算ｖｅｃ＿ｍｕｌ（）３５０は、入力ベクトルａおよび入力ベクトルｂのそれぞれの補数を乗算する。
【００２１】
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、ベクトル減算およびベクトル排他的ＯＲなどの他の様々なＳＩＭＤ演算を本発明の実施形態によってサポートすることもできることを認識するであろう。
【００２２】
一実施形態では、高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、入力として、マスクをデータに適用するスカラ・コード１４５を受け取る。マスクがデータに適用されると、マスクは、条件文のどの分岐を実行するかを決定する。実際には、マスクは、条件文によってどのデータが選択または変更され、あるいはその両方が行われるかを決定する。
【００２３】
図４は、本発明の実施形態による、スカラ・マスクとベクトル・マスクとの両方の例を示す。図示されるように、スカラ演算４１５は、ｍａｓｋ［ｊ」の値をｄａｔａ［ｉ］の値とＡＮＤすることによって実施することもできる。この例では、ｄａｔａ［ｉ］とｍａｓｋ［ｊ］とは、ともにアレイのｄａｔａ［］およびｍａｓｋ［］のスカラ値である。ｍａｓｋ［ｊ］の値によって、ｄａｔａ［ｉ］の値が選択されたり選択されなかったりする（あるいは、ある動作を実施することもできる）。実例として、ｍａｓｋ［ｊ］の値が１の場合、ｄａｔａ［ｉ］に記憶されるスカラ・データが選択される。逆に、ｍａｓｋ［ｊ］値が０の場合、ｄａｔａ［ｉ］に記憶されるスカラ・データは選択されない。図４は、ベクトル・マスクの例も示す。図示されるように、ベクトルＡＮＤ（ｖｅｃ＿ａｎｄ（））演算４３５は、入力ベクトルｄａｔａ［ｉ］およびｍａｓｋ［ｊ］を使用して実施される。第１の例は、ｍａｓｋ［ｊ］を４つの８ビット要素を記憶する３２ビットＳＩＭＤベクトルとして示す。実例として、４つの８ビット要素を有する３２ビットＳＩＭＤベクトルの場合、すべてのデータ要素（ベクトル・マスク４４０）、データ要素０および２（ベクトル・マスク４４２）およびデータ要素１および３（ベクトル・マスク４４４）を選択するベクトル・マスク値が示される。４つの３２ビット要素を有する１２８ビットＳＩＭＤベクトルの第２の例の場合、すべてのデータ要素（ベクトル・マスク４５０）、データ要素１および３（ベクトル・マスク４５２）およびデータ要素なし（ベクトル・マスク４５４）を選択するベクトル・マスク値が示される。
【００２４】
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、本発明の実施形態は、３２および１２８以外のビット長のＳＩＭＤベクトルをサポートすることもできることを認識するであろう。
【００２５】
図５は、本発明の一実施形態による、スカラ条件文を含む擬似コード５１０の一例を示す。特に、擬似コード５１０は、ＥＬＳＥ節を有しないＩＦブロックを含む。この例では、擬似コード５１０は、マスク・ベクトル（ｍａｓｋ［］）、入力ベクトル（ｄａｔａ［］）および出力ベクトル（ｒｅｓｕｌｔ［］）用の変数宣言５１５を含む。擬似コード５１０は、ｆｏｒループの各パスを通してｄａｔａ［］ベクトルの要素を評価するループ５２０（ｆｏｒ文）も含む。まず、ｍａｓｋ［］ベクトルが条件文で使用され（ｉｆ（ｍａｓｋ［ｉ］％１００］＝＝１））、これを満足する場合、ｄａｔａ［］ベクトルの第ｉ要素に対して実施され、ｒｅｓｕｌｔ［］の第ｉ要素に記憶される演算となる。簡単に言えば、マスク・ベクトルは、計算が入力アレイに対して実施され出力アレイに記憶されるかどうかを決定する。
【００２６】
図５は、擬似コード５１０のループ５２０に含まれるスカラＩＦ文を置き換えるように生成されるソース・コードを表すＳＩＭＤ擬似コード５５０の一例も示す。すなわち、ＳＩＭＤ擬似コード５５０は、擬似コード５１０と同じ結果を得ることもできるが、条件「ＩＦ」文は使用しない。図示されるように、ＳＩＭＤ擬似コード５５０は、ｍａｓｋ［］ベクトル、ｄａｔａ［］ベクトル、およびｒｅｓｕｌｔ［］ベクトル用の変数宣言５５５を含む。ＳＩＭＤ擬似コード５５０は、擬似コード５１０からの条件ＩＦ文を含むｆｏｒループを置き換えるように生成されるループ５６０も含む。ループ５６０の特定の繰り返しの中で、マスク（ｍａｓｋ［］ベクトルの第ｊ要素）を使用して、処理演算がｄａｔａ［］ベクトルの０および２要素に対して実施されるべきであることを指定する。なお、この例では、ｄａｔａ［］の各要素は、本明細書で＜ｄ１，ｄ２，ｄ３，ｄ４＞と参照される浮動小数点数の４つの要素のベクトルである。次に、ｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈ変数に、ｄａｔａ［ｉ］とｍａｓｋ［ｊ］との間のベクトルＡＮＤ  ＣＯＭＰＬＥＭＥＮＴ演算（ｖｅｃ＿ａｎｄｃ）の結果が割り当てられる。具体的には、ｍａｓｋ［ｊ］の補数値がｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈベクトルに適用される。この例では、ｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈは、＜０，ｄ２，０，ｄ４＞を記憶する。すなわち、ｄ２およびｄ４が、ｄａｔａ［ｉ］ベクトルからｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈベクトルにコピーされる。
【００２７】
次に、ベクトル・フロート変数「ｉｆＢｒａｎｃｈ」に、ｄａｔａ［］ベクトルの第ｉ要素を使用して計算される値が割り当てられる。その結果、＜ｒ１，ｒ２，ｒ３，ｒ４＞を記憶するベクトルとなり、ここで、各「ｒ」値は、ｄａｔａ［ｉ］ベクトルの対応する値を評価することによって得られる結果を記憶する。すなわち、本来、条件文を満足するベクトルの要素に対して実施されるだけの演算が、代わりに、ｄａｔａ［ｉ］ベクトルの各要素に対して実施される。次いで、ベクトル・フロート変数ｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈに、ｉｆＢｒａｎｃｈベクトル・フロート変数およびｍａｓｋ［］ベクトルの第ｊ要素を使用して実施されるベクトルＡＮＤ演算（ｖｅｃ＿ａｎｄ）の結果が割り当てられる。その結果、＜ｒ１，０，ｒ３，０＞値を有するベクトルとなる。すなわち、ｍａｓｋ［ｊ］の値が、ｉｆＢｒａｎｃｈベクトルに適用される。最後に、結果ベクトルの第ｉ値の値に、ベクトルＯＲ演算（ｖｅｃ＿ｏｒ）の結果が割り当てられる。ベクトルＯＲ演算は、ｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈベクトル・フロートの結果とｍａｓｋｅｄＩｆＢｒａｎｃｈベクトル・フロートの結果とをＯＲすることによって、結果値を割り当てる。この例では、その結果、＜ｒ１，ｄ２，ｒ３，ｄ４＞を有するベクトルとなる。言い換えれば、ＳＩＭＤ擬似コード５５０は、例示的なスカラ擬似コード５１０と同じ結果になるが、条件文は使用しない。すなわち、ｒｅｓｕｌｔ［］変数の各要素の結果ベクトルでは、ベクトルは、（０ｘＦＦＦＦＦＦＦＦ００００００００ＦＦＦＦＦＦＦＦ００００００００のマスクによって指定される）ベクトルの１および３の位置のｄａｔａ［］変数からの値と、ベクトルの０および２の位置の条件分岐を実施した結果とを含む。
【００２８】
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、マスクを入力に対し繰り返し適用しない（すなわち、マスクをループで適用しない）方法などの他の方法を本発明の実施形態によってサポートすることもできることを認識するであろう。さらに、本発明の実施形態は、複数のＥＬＳＥ−ＩＦ節またはＳＷＩＴＣＨ−ＣＡＳＥ文を有するＩＦ文などの他の条件文を置き換えるＳＩＭＤコードを生成するように構成されてもよい。
【００２９】
例えば、スカラ・コードは、ＩＦ−ＥＬＳＥブロックを有する条件文を含んでもよい。図６は、本発明の一実施形態による、条件文を有するスカラ・コード１４５を表すスカラ擬似コード６１０の一例を示す。具体的には、ループ６２０は、ループの各パスで実施されるＩＦ−ＥＬＳＥ条件文を有するＦＯＲループを含む。
【００３０】
図示されるように、擬似コード６１０は、マスク（ｍａｓｋ［］）、入力（ｄａｔａ［］）、および出力（ｒｅｓｕｌｔ［］）用の変数宣言６１５のセットを含む。擬似コード６１０は、ｒｅｓｕｌｔ［］変数の連続する値（浮動小数点値のアレイ）にマスクを繰り返し適用するループ６２０も含む。ループ６２０の各パスのｍａｓｋ［ｉ］の値は、入力（ｄａｔａ［ｉ］）に対してどの計算が実施されて出力（ｒｅｓｕｌｔ［ｉ］）の一部として記憶されるかを決定する。特に、ループの各繰り返しについて、マスクは、ＩＦ節の計算（すなわち、ｄａｔａ［ｉ］の値に５を乗算してその結果をｒｅｓｕｌｔ［ｉ］に記憶する）を入力に対して実施して出力の一部として記憶するか、ＥＬＳＥ節の計算（すなわち、ｄａｔａ［ｉ］の値に７を乗算してその結果をｒｅｓｕｌｔ［ｉ］に記憶する）を入力に対して実施して出力の一部として記憶するかを決定する。
【００３１】
図６は、ループ６２０に含まれる条件文（すなわち、ＩＦ−ＥＬＳＥ条件分岐）を置き換えるために生成されるＳＩＭＤ擬似コード６５０の一例も示す。すなわち、ＳＩＭＤ擬似コード６５０は、条件文を使用することなしにスカラ擬似コード６１０と同じ結果になる。図示されるように、ＳＩＭＤ擬似コード６５０は、ベクトル版のマスク、入力および出力のアレイ用の変数宣言６５５を含む。すなわち、ｍａｓｋ［］、ｄａｔａ［］およびｒｅｓｕｌｔ［］は、ベクトル・フロート値のアレイ（アレイの各要素に対して４つの浮動小数点値）として宣言される。したがって、擬似コード６５０で４つの値に対して同時に擬似コード６１０のＦＯＲループが実施され、擬似コード６５０が実施するのはループ６２０の繰り返しの１／４となる。ＳＩＭＤ擬似コード６５０は、マスクをｉｎｐｕｔ［］アレイの連続値に適用するループ６６０も含む。ループ内では、ｍａｓｋ［ｉ％１００］の補数を使用して、ｅｌｓｅＤａｔａベクトルにｄａｔａ［］アレイからの値が割り当てられる。次に、ＥＬＳＥ節内の演算が実施されて、ＥＬＳＥ節の結果を計算する。次いで、ベクトルＡＮＤ演算およびベクトルＡＮＤ  ＣＯＭＰＬＥＭＥＮＴ演算をそれぞれ使用して、マスクをＩＦ節の結果とＥＬＳＥ節の結果との両方に適用する。ＩＦ節のマスクされた結果をＥＬＳＥ節のマスクされた結果に重ね合わせるベクトルＯＲ演算によって最終結果が計算される。したがって、ＳＩＭＤ擬似コード６５０は、スカラ擬似コード６１０と同じ結果となるが、条件文は使用しない。すなわち、ｒｅｓｕｌｔ［］アレイの要素は、コード６２０の条件分岐（ＩＦ／ＥＬＳＥ文）を使用して生成される値と同じ値を記憶する。
【００３２】
一実施形態では、高速ベクトル・マスキングＳＩＭＤコード発生器１３５は、ソース・コード内の条件文を特定し、条件文を排除したＳＩＭＤコードを生成することもできる。図７は、本発明の一実施形態による、条件文を含むスカラ・コードから高速ベクトル・マスキングＳＩＭＤコードを生成する方法７００を示す流れ図である。図示されるように、方法７００は、ステップ７１０から開始され、ここで、（ＩＦ文などの）条件文を有するスカラ・コード１４５が受信される。ステップ７２０で、ＳＩＭＤコード発生器１３５は、ステップ７１０で受信されたコード内のスカラ・データ構造を特定し、対応するＳＩＭＤベクトル構造を生成する。前述のように、例えば、ベクトル版の入力、マスクおよび出力のアレイ・データ構造が生成される。ステップ７３０で、ＳＩＭＤコード発生器１３５は、条件文の様々なコード分岐の処理を実施した結果を割り当てるのに使用されるＳＩＭＤベクトル・データ構造を生成する。例えば、前述のように、（ＩＦ分岐内に含まれる論理を実施した結果を記憶するのに使用される）ＩＦ分岐のベクトル・フロート値が、ｉｆＢｒａｎｃｈと称される変数に記憶される。同様に、ＩＦ分岐の結果にマスクが適用されて、ｍａｓｋｅｄＩｆＢｒａｎｃｈと称されるベクトルに記憶される。すなわち、ｉｆＢｒａｎｃｈが、ＩＦ文を満足する場合に実施される論理を使用してベクトルの各要素が処理された値を含むのに対して、ｍａｓｋｅｄＩｆＢｒａｎｃｈは、論理ＡＮＤ演算を使用してマスクを通過するベクトル要素に対してのみこの論理が適用された値を有する。同様に、ｍａｓｋｅｄＥｌｓｅＢｒａｎｃｈと称される変数は、（入力データとＡＮＤされたマスク値の論理補数を使用して決定された）マスクを通過しないベクトル位置のデータ値を記憶する。より一般的には、ステップ７２０で、ベクトル・データ構造を生成して、条件文の各分岐に対する結果を記憶することもできる。
【００３３】
ステップ７４０で、ＳＩＭＤコード発生器１３５は、条件文内の論理（すなわち、条件文を満足する場合に実施される論理）を実施するためのコードを生成する。図６に示されるように、例えば、スカラ・アレイのスカラ要素の算術乗算（ｒｅｓｕｌｔ［ｉ］＝５＊ｄａｔａ［ｉ］）は、ベクトル・アレイの要素のベクトル乗算（ｉｆＢｒａｎｃｈ＝ｖｅｃ＿ｍｕｌ（ｄａｔａ［ｉ］，（ｖｅｃｔｏｒ  ｆｌｏａｔ）５．０；）に変換される。ステップ７５０で、ＳＩＭＤコード発生器１３５は、ＥＬＳＥ節が存在するかどうか（あるいは、より一般的には、追加の条件分岐が、実行論理、例えば、図６のループ６２０のＥＬＳＥ節を含むかどうか）を判断する。含む場合、ステップ７５２で、ＳＩＭＤコード発生器１３５は、ＥＬＳＥ節に対応するコードをＳＩＭＤベクトル演算に変換する。図６に示されるように、例えば、ＥＬＳＥ節内のスカラ・アレイにおけるスカラ要素の算術乗算（ｒｅｓｕｌｔ［ｉ］＝７＊ｄａｔａ［ｉ］）は、ベクトル・アレイの要素のベクトル乗算（ｄａｔａ［ｉ］，（ｖｅｃｔｏｒ  ｆｌｏａｔ）７．０）；）に変換される。
【００３４】
ステップ７５４で、ＳＩＭＤコード発生器１３５は、ＳＩＭＤコードを生成し、例えば、「ｉｆＢｒａｎｃｈ」の結果か「ｅｌｓｅＢｒａｎｃｈ」の結果のいずれかから選択するマスク値を使用するＳＩＭＤベクトル・ビット単位演算を使用して、両方の節からの結果を結合する。例えば、ベクトルＡＮＤおよびＡＮＤＣ演算を使用して、条件文の各分岐について決定された結果をマスクすることもできる。次いで、その結果にベクトルＯＲ演算を使用して、最終結果を決定することもできる。ステップ７６０で、ＳＩＭＤコード発生器１３５は、ＩＦ文を含まない高速ベクトル・マスキングＳＩＭＤコードを出力する。具体的には、ＳＩＭＤコード発生器１３５は、ステップ７２０から７５４において生成されたＳＩＭＤコードを出力する。ステップ７６０後に、方法７００は終了する。
【００３５】
しかしながら、ステップ７５０で、ＳＩＭＤコード発生器１３５は、ＥＬＳＥ節が存在しないと判断する場合もある。すなわち、場合によっては、条件文は、条件文を満足しない場合に実施される実行論理は含んでも、条件文を満足しない場合に実施する代わりの論理を指定していないこともある。このような場合、ステップ７５８で、ＳＩＭＤコード発生器１３５は、ＳＩＭＤ演算を使用してＩＦ節からの結果をもとのデータと結合するコードを生成する。例えば、ベクトルＡＮＤおよびＡＮＤＣ演算を使用して、条件文の各分岐に対するそれぞれの結果をマスクすることもできる。次いで、その結果に対してベクトルＯＲ演算を使用して最終結果を決定することもできる。ステップ７６０では、ＳＩＭＤコード発生器１３５は、ＩＦ文を含まないＳＩＭＤコードを出力する。具体的には、ＳＩＭＤコード発生器１３５は、ステップ７２０から７５８において生成されたＳＩＭＤコードを出力する。ステップ７６０後に、方法７００は終了する。
【００３６】
一実施形態では、プログラム実行中にマスクを計算する必要がある場合、条件マスキング・コードの前にマスクを計算することもできる。あるいは、各ベクトル・マスク要素を各データ処理の繰り返しの直前に使用できるように、マスクを分岐排除コードと同期させて計算することもできる。そうすることによって、自動リアルタイム意思決定のためのストリーム型処理アプリケーションに役立つこともある。
【００３７】
本発明の実施形態は、ソース・コード内の条件文を特定し、その条件文を、分岐コードを実施しないでも同じ結果を提供するコードと置き換えるように構成されるＳＩＭＤコード発生器１３５を有利にも提供する。一実施形態では、ＳＩＭＤコード発生器１３５は、条件文を含むスカラ・コードを受信する。ＳＩＭＤコード発生器１３５コンパイラは、ベクトルに基づくデータ構造を使用してスカラ・コードに対応するデータ構造および演算を生成し、ベクトル・ビット単位演算を使用して条件文の各分岐に対する結果を結合する。
【００３８】
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、実施形態は、Ｃ＋＋のようなプログラミング構文を使用して上記に説明されているが、ＣおよびＪａｖａ（Ｒ）などの他のプログラミング言語を本発明の実施形態によってサポートすることもできることを認識するであろう。さらに、（ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｍａｓｋ、ベクトルＡＮＤ演算、およびベクトルＡＮＤ  ＣＯＭＰＬＥＭＥＮＴ演算の代わりに）浮動小数点マスク、ベクトルＮＯＴ演算およびベクトル乗算演算を使用して実施されるビット・マスキング演算を、本発明の実施形態によってサポートすることもできる。
【００３９】
前述の内容は、本発明の実施形態を対象としているが、本発明の基本的範囲から逸脱することなしに本発明の他のおよび追加の実施形態を考案することも可能であり、本発明の範囲は、以下の特許請求の範囲によって決定される。
【図１】
2010186467.tif 000003
【図２】
2010186467.tif 000004
【図３】
2010186467.tif 000005
【図４】
2010186467.tif 000006
【図５】
2010186467.tif 000007
【図６】
2010186467.tif 000008
【図７】
2010186467.tif 000009