JP2010186467A - コンピュータにより実施される方法、コンピュータ可読ストレージ媒体およびシステム(simdアーキテクチャの条件付きデータ選択のための高速ベクトル・マスキング・アルゴリズム) - Google Patents

コンピュータにより実施される方法、コンピュータ可読ストレージ媒体およびシステム(simdアーキテクチャの条件付きデータ選択のための高速ベクトル・マスキング・アルゴリズム) Download PDF

Info

Publication number
JP2010186467A
JP2010186467A JP2010005600A JP2010005600A JP2010186467A JP 2010186467 A JP2010186467 A JP 2010186467A JP 2010005600 A JP2010005600 A JP 2010005600A JP 2010005600 A JP2010005600 A JP 2010005600A JP 2010186467 A JP2010186467 A JP 2010186467A
Authority
JP
Japan
Prior art keywords
vector
branch
conditional statement
scalar
bitwise
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2010005600A
Other languages
English (en)
Inventor
Jeffrey Scott Mcallister
ジェフリー・スコット・マカリスター
Nelson Ramirez
ネルソン・ラミレス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2010186467A publication Critical patent/JP2010186467A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】条件文を有するソース・コードに対応する高速ベクトル・マスキングSIMDコードを生成する技術が開示される。
【解決手段】SIMDコードは、条件文をベクトルSIMD演算に置き換える。1つの技術は、ベクトル演算、ビット・マスキング演算、およびビット単位論理演算を使用して条件付きマスキングを実施するステップを含む。これによって、SIMDコード内に条件文がある必要性がなくなり、SIMDハードウェアが分岐予測を使用せざるを得ない状態を避けることができる。これによって、パイプライン・ストールの数が減少し、SIMD計算ユニットの利用度が向上する。
【選択図】図7

Description

本発明の実施形態は、一般に、コンパイラに関する。さらに詳細には、本発明の実施形態は、条件文なしでSIMDアーキテクチャの条件付きデータ選択を行うための高速ベクトル・マスキング・アルゴリズムに関する。
現在使用可能なプロセッサには、「単一命令複数データ」(SIMD:single instruction,multiple data)拡張をサポートするものがある。SIMDとは、単一の命令が複数のデータ項目に対して並列に演算を行うことを表す。例えば、「加算(add)」SIMD命令は、8個の16ビット値を並列に加算することもできる。すなわち、加算演算(単一の演算)は、8個の個別のデータ値のセット(複数データ)に対して実施される。一般に、データ値は、ベクトルの要素として提供されてもよい。したがって、SIMD処理は、ベクトル処理とも称される。SIMD命令は、複数の演算を1つの命令の一部として実施することによって、実行速度を飛躍的に向上させる。SIMD拡張のよく知られる例としては、マルチメディア拡張(MMX:multimedia extension)命令、SSE命令、およびベクトル・マルチメディア拡張(VMX:vectored multimedia extension)命令が挙げられる。
多くの条件文を有するコードをSIMDパイプライン・アーキテクチャに移植(ポーティング)することにより性能上の問題が発生する。条件文は、各条件判定に対するパイプライン効率の低下はともかく、それぞれが基本的にスカラ演算であるため、このような性能問題の原因となる。その結果、SIMD並列計算ユニットの利用度を低下させることもある。さらに、ハードウェアで分岐予測を実施することもできるが、SIMDベクトル処理ユニットの分岐予測は実施するのにコストがかかることもある。
本発明の一実施形態は、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する方法を含む。この方法は、一般に、条件文を含むスカラ・ソース・コードを受信するステップを含んでもよい。条件文の各分岐は、スカラ・データ構造を含み、各分岐のスカラ・データ構造に基づいて演算するスカラ演算を指定することもできる。この方法は、ベクトル・マスキング・ソース・コードを生成するステップをさらに含んでもよい。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐について、条件文のそれぞれの分岐のスカラ・データ構造に対応するベクトル・データ構造を生成するステップと、条件文の各分岐について、条件文のそれぞれの分岐のスカラ演算に対応するベクトル演算を生成するステップとを含んでもよい。スカラ演算はスカラ・データ構造に基づいて演算し、ベクトル演算はベクトル・データ構造に基づいて演算して、条件文のそれぞれの分岐に対する結果を計算する。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐のそれぞれの結果から最終結果を計算する少なくとも1つのビット単位演算を生成するステップと、生成されたベクトル・マスキング・ソース・コードを出力するステップとをさらに含んでもよい。
本発明のさらに別の実施形態は、実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するプログラムを含むコンピュータ可読ストレージ媒体を含む。この演算は、一般に、条件文を含むスカラ・ソース・コードを受信するステップを含んでもよい。条件文の各分岐は、スカラ・データ構造を含み、各分岐のスカラ・データ構造に基づいて演算するスカラ演算を指定することもできる。この演算は、ベクトル・マスキング・ソース・コードを生成するステップをさらに含んでもよい。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐について、条件文のそれぞれの分岐のスカラ・データ構造に対応するベクトル・データ構造を生成するステップと、条件文の各分岐について、条件文のそれぞれの分岐のスカラ演算に対応するベクトル演算を生成するステップとを含んでもよい。スカラ演算はスカラ・データ構造に基づいて演算し、ベクトル演算はベクトル・データ構造に基づいて演算して、条件文のそれぞれの分岐に対する結果を計算する。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐のそれぞれの結果から最終結果を計算する少なくとも1つのビット単位演算を生成するステップと、生成されたベクトル・マスキング・ソース・コードを出力するステップとをさらに含んでもよい。
本発明のさらに別の実施形態は、プロセッサを有するシステムと、プロセッサによって実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するように構成されるプログラムを含むメモリとを含む。この演算は、一般に、条件文を含むスカラ・ソース・コードを受信するステップを含んでもよい。条件文の各分岐は、スカラ・データ構造を含み、各分岐のスカラ・データ構造に基づいて演算するスカラ演算を指定することもできる。この演算は、ベクトル・マスキング・ソース・コードを生成するステップをさらに含んでもよい。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐について、条件文のそれぞれの分岐のスカラ・データ構造に対応するベクトル・データ構造を生成するステップと、条件文の各分岐について、条件文のそれぞれの分岐のスカラ演算に対応するベクトル演算を生成するステップとを含んでもよい。スカラ演算はスカラ・データ構造に基づいて演算し、ベクトル演算はベクトル・データ構造に基づいて演算して、条件文のそれぞれの分岐に対する結果を計算する。ベクトル・マスキング・ソース・コードを生成するステップは、条件文の各分岐のそれぞれの結果から最終結果を計算する少なくとも1つのビット単位演算を生成するステップと、生成されたベクトル・マスキング・ソース・コードを出力するステップとをさらに含んでもよい。
本発明の上記特徴、利点および目的が達成され、詳細に理解することができるように、上記で簡単に要約された発明について、添付図面に示される本発明の実施形態を参照してさらに詳細に説明する。
しかしながら、本発明は、他の同様に効果的な実施形態をも許容し得るため、添付図面は、本発明の代表的な実施形態のみを例示するものであり、したがって、本発明の範囲を限定するものと見なすべきではないことに留意すべきである。
本発明の一実施形態による、コンピュータ環境で作動する高速ベクトル・マスキングSIMDコード発生器を示す構造図である。 本発明の一実施形態による、高速ベクトル・マスキングSIMDコード発生器のデータ・フローを示すブロック図である。 本発明の一実施形態による、例示的なSIMD演算を示す表である。 本発明の一実施形態による、2つのアレイの要素間のスカラ・マスクとベクトル・マスクとの両方の例を示す図である。 本発明の一実施形態による、スカラ擬似コードおよび対応するSIMD擬似コードの一例を示す図である。 本発明の一実施形態による、IF−ELSEブロックについてスカラ・コードおよびベクトル・マスキングを有する対応するSIMDコードの別の一例を示す図である。 本発明の一実施形態による、条件文を含むスカラ・コードから高速ベクトル・マスキングSIMDコードを生成する方法を示す流れ図である。
本発明の実施形態は、SIMD並列ベクトル・プロセッサで条件文のない条件付きマスキングを実施する技術を提供する。一実施形態では、条件文のない高速ベクトル・マスキングSIMDコードを生成する技術が提供される。SIMDコード発生器は、ソース・コード内の条件文を特定し、依然として条件付きデータ選択を実施しながらも条件文を排除したSIMDコードを生成するように構成されてもよい。
マスキング演算などの非常に多くの条件文が必要となる演算は多くある。n要素のマスクの場合、条件変数をチェックして1つの入力データに対し特定の措置を講じるべきかどうかを判断するにはn個の条件文のセットが必要となる。条件付きチェックの代わりに、本発明の実施形態は、条件付きチェックをベクトル演算、ビット・マスキング演算、およびビット単位論理演算のセットに変換する。これによって、SIMDベクトル処理ユニット上で作動する移植コードの命令数が明らかに増加することになるが、ある程度計算ステップが増加しても、条件文を数多く実施するよりは優れていることが多い。
次では、本発明の実施形態を参照する。ただし、当然ながら、本発明は、特定の説明される実施形態に限定されない。そうではなく、以下の特徴および要素のいかなる組み合わせも、様々な実施形態に関連するか否かに関わらず、本発明を実施し実践することを企図されている。さらに、様々な実施形態において、本発明は、従来技術より数多くの利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決策または従来技術あるいはその両方を上回る利点を達成することもできるが、所与の実施形態によって特定の利点が達成されるか否かは、本発明を限定するものではない。したがって、以下の形態、特徴、実施形態および利点は一例に過ぎず、特許請求の範囲(単数または複数)に明確に記述される場合を除いて、添付の特許請求の範囲の要素または限定とは見なされない。同様に、「本発明」という表現は、本明細書で開示される発明の主題の一般化として解釈されないものとし、特許請求の範囲(単数または複数)に明確に記述される場合を除いて、添付の特許請求の範囲の要素または限定と見なされないものとする。
本発明の一実施形態は、コンピュータ・システムとともに使用するためのプログラム製品として実施される。プログラム製品のプログラム(単数または複数)は、(本明細書に記載される方法を含む)実施形態の機能を定義し、様々なコンピュータ可読ストレージ媒体上に収容することができる。例示的なコンピュータ可読ストレージ媒体は、これらに限定されないが、(i)情報が恒久的に記憶される書き込み不可能ストレージ媒体(例えば、CD−ROMドライブによって読み出し可能なCD−ROMなどのコンピュータ内の読み出し専用メモリ・デバイス)、(ii)可変情報が記憶される書き込み可能ストレージ媒体(例えば、ディスケット・ドライブまたはハードディスク・ドライブ内のフレキシブル・ディスク)を含む。このようなコンピュータ可読ストレージ媒体は、本発明の機能を指示するコンピュータ可読命令を搬送する場合、本発明の実施形態である。他の媒体は、無線通信ネットワークを含むコンピュータ・ネットワークまたは電話回線網などを介してコンピュータに情報が搬送される通信媒体を含む。特に、後の実施形態は、インターネットおよび他のネットワークに情報を送信したりここから情報を受信したりするステップを含む。このような通信媒体は、本発明の機能を指示するコンピュータ可読命令を搬送する場合、本発明の実施形態である。概して、コンピュータ可読ストレージ媒体および通信媒体は、本明細書でコンピュータ可読媒体と称されてもよい。
一般に、本発明の実施形態を実施するために実行されるルーチンは、オペレーティング・システムまたは特定のアプリケーションの一部、コンポーネント、プログラム、モジュール、オブジェクト、または一連の命令であってもよい。本発明のコンピュータ・プログラムは、一般に、ネイティブ・コンピュータによって機械可読フォーマット、したがって実行可能命令に変換される多数の命令から構成される。さらに、プログラムは、プログラムに局所的に存在するか、あるいは、メモリ内またはストレージ装置上に見られる変数およびデータ構造から構成される。さらに、以降で説明される様々なプログラムは、これらが本発明の特定の実施形態で実施される用途に基づいて識別されてもよい。しかし、当然ながら、以後のいかなる特定のプログラム用語も便宜上使用されるだけであり、したがって、本発明は、このような用語によって識別または含意され、あるいはその両方が行われる任意の特定の用途のみに使用されることに限定されるべきではない。
図1は、本発明の一実施形態による、コンピュータ環境100で作動する高速ベクトル・マスキングSIMDコード発生器135を示す構造図である。図示されるように、コンピュータ環境100は、コンピュータ110を含む。一実施形態では、コンピュータ環境100に示されるコンピュータ・システムは、既存のコンピュータ・システム、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなどを含んでもよい。しかしながら、図1に示されるコンピュータ環境100は、1つのコンピュータ環境の一例に過ぎない。本発明の実施形態は、そのコンピュータ・システムが、高速ネットワークによって接続される一群の個別コンピュータ、シングル・ユーザ・ワークステーション、または不揮発性ストレージのないネットワーク機器などの複雑なマルチユーザ・コンピュータ・システムであるかどうかに関係なく、他の環境とともに使用することもできる。さらに、図1に示され、本明細書で説明されるソフトウェア・アプリケーションは、既存のコンピュータ・システム、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなどで実行されるコンピュータ・ソフトウェア・アプリケーションを使用して実施されてもよい。しかしながら、本明細書で説明されるソフトウェアは、現在存在するどんなコンピュータ環境またはプログラミング言語にも限定されず、新しいコンピュータ・システムが利用可能になるときにそれらを活用するようにしてもよい。
図示されるように、コンピュータ110は、メモリ130およびストレージ140から命令およびデータを取得する中央処理装置(CPU:central processing unit)120を含む。CPU120は、コンピュータ内のすべての命令、論理および数学的処理を実施するプログラマブル論理デバイスである。この説明を実現するために、CPU120は、幾つかのSIMD拡張(例えば、マルチメディア・エクステンション(MMX)命令、SSE命令、またはベクトル・マルチメディア拡張(VMX)命令を含む)をサポートしていると考えられる。ストレージ140は、コンピュータ110によって使用されるアプリケーション・プログラムおよびデータを記憶する。一実施形態では、コンピュータ環境100に示されるストレージ・システムは、既存のストレージ・システム、例えば、ハードディスク・ドライブ、フラッシュ・メモリ・デバイス、光媒体などを含んでもよい。図示されるように、ストレージ140は、条件文を有するアプリケーション・ソース・コード145を含む。知られるように、ほとんどの(すべてではないが)プログラミング言語は、条件文をサポートしている。例えば、「If(条件){ある動作を実施する;}というC++のような構文を使用して、「条件」が存在する(または真である)という評価に基づいて「動作」を選択的に実行する。さらに複雑な条件を、「IF」「ELSEIF」および「ELSE」文、または「SWITCH」および「CASE」文を使用して構成することもできる。開発者は、「IF」文のセットとともにマスクを使用して、変数内の値に基づいて実施する動作を決定することが多い。単一の例として、(0000)の4ビットマスクを仮定する。この場合、マスクの各ビットを使用して、特定の動作の実施を指定することもできる。1つの動作だけが実施されると仮定すると、以下の値を有するマスクが得られる。
表I−4ビット・マスクの例
0001−−−SIMD機能Aを呼び出す
0010−−−SIMD機能Bを呼び出す
0100−−−SIMD機能Cを呼び出す
1000−−−SIMD機能Dを呼び出す
このような場合、以下のようなソース・コード構文を条件付きマスクに使用して、変数fooに基づいてどのSMID機能を呼び出すかを選択することもできる。
表II−4ビット・マスクの例−ソース・コード
mask[]={0x0001,0x0010,0x0100,0x1000};
If(foo&mask[0])
{//SIMD機能Aを呼び出す;}
elseif(foo&mask[1])
{//SIMD機能Bを呼び出す;}
elseif(foo&mask[2])
{//SIMD機能Cを呼び出す;}
else(foo&mask[3])
{//SIMD機能Dを呼び出す;}
この簡単な例が示すように、表IIのソース・コードによってSIMD機能が引き出されるが、少なくとも1つおよび4つもの条件文を実施してようやくそうなる。したがって、CPU120のSIMD処理能力の利用効率が大幅に低下することもある。
図示されるように、メモリ130は、高速ベクトル・マスキングSIMDコード発生器135と、オペレーティング・システム(図示せず)とを含む。オペレーティング・システムは、コンピュータ110の動作を管理するために使用されるソフトウェアである。オペレーティング・システムの例としては、UNIX(R)、マイクロソフト・ウィンドウズ(R)・オペレーティング・システムのバージョン、およびLinux(R)オペレーティング・システムのディストリビューションが挙げられる(注:Linuxは、米国およびその他の国のリーナス・トーバルズ(Linus Torvalds)の登録商標である)。
一実施形態では、高速ベクトル・マスキングSIMDコード発生器135は、条件文を有するスカラ・コード145(例えば、表IIのソース・コード)を受信する。以下にさらに詳細に説明されるように、高速ベクトル・マスキングSIMDコード発生器135は、アプリケーション・ソース・コードを評価し、条件文のない条件付きデータを選択するための高速ベクトル・マスクキング・アルゴリズムを利用して排除および置換することができる条件文を特定することもできる。
図2は、本発明の一実施形態による、高速ベクトル・マスキングSIMDコード発生器135のための例示的なデータ・フロー200を示す。データ・フロー200は、条件文を有するスカラ・コード145を含む。すなわち、スカラ・コード145は、スカラ演算(例えば、条件文)とベクトル演算(例えば、SIMD命令)との両方の組み合わせを含んでもよいアプリケーション・ソース・コード145を表す。高速ベクトル・マスキングSIMDコード発生器135は、入力として、スカラ・コード145を受信する。高速ベクトル・マスキングSIMDコード発生器135は、出力として、SIMD演算のために最適化されるアプリケーション・ソース・コード、すなわち、スカラ・コード145内に存在する条件文のないSIMDコード230を生成する。SIMDコード230は、スカラ・コード145と同じ結果になるが、条件文を使用することなしにそうなる。
一実施形態では、高速ベクトル・マスキングSIMDコード発生器135は、1つ以上のSIMD演算を含むSIMDコード230を生成する。例えば、図3は、本発明の一実施形態による、例としてのSIMD演算のセットを示す表を示す。図示されるように、SIMD演算vec_and()310は、2つの入力ベクトル(ベクトルaおよびベクトルb)のコンポーネントのビット単位のANDを計算する。SIMD演算vec_and()320は、入力ベクトルaと入力ベクトルbの補数との間のビット単位のANDを計算する。同様に、SIMD演算vec_or()330は、入力ベクトルaと入力ベクトルbとの間のビット単位のORを計算する。SIMD演算vec_add()340は、入力ベクトルaおよび入力ベクトルbのそれぞれの補数を加算する。最後に、SIMD演算vec_mul()350は、入力ベクトルaおよび入力ベクトルbのそれぞれの補数を乗算する。
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、ベクトル減算およびベクトル排他的ORなどの他の様々なSIMD演算を本発明の実施形態によってサポートすることもできることを認識するであろう。
一実施形態では、高速ベクトル・マスキングSIMDコード発生器135は、入力として、マスクをデータに適用するスカラ・コード145を受け取る。マスクがデータに適用されると、マスクは、条件文のどの分岐を実行するかを決定する。実際には、マスクは、条件文によってどのデータが選択または変更され、あるいはその両方が行われるかを決定する。
図4は、本発明の実施形態による、スカラ・マスクとベクトル・マスクとの両方の例を示す。図示されるように、スカラ演算415は、mask[j」の値をdata[i]の値とANDすることによって実施することもできる。この例では、data[i]とmask[j]とは、ともにアレイのdata[]およびmask[]のスカラ値である。mask[j]の値によって、data[i]の値が選択されたり選択されなかったりする(あるいは、ある動作を実施することもできる)。実例として、mask[j]の値が1の場合、data[i]に記憶されるスカラ・データが選択される。逆に、mask[j]値が0の場合、data[i]に記憶されるスカラ・データは選択されない。図4は、ベクトル・マスクの例も示す。図示されるように、ベクトルAND(vec_and())演算435は、入力ベクトルdata[i]およびmask[j]を使用して実施される。第1の例は、mask[j]を4つの8ビット要素を記憶する32ビットSIMDベクトルとして示す。実例として、4つの8ビット要素を有する32ビットSIMDベクトルの場合、すべてのデータ要素(ベクトル・マスク440)、データ要素0および2(ベクトル・マスク442)およびデータ要素1および3(ベクトル・マスク444)を選択するベクトル・マスク値が示される。4つの32ビット要素を有する128ビットSIMDベクトルの第2の例の場合、すべてのデータ要素(ベクトル・マスク450)、データ要素1および3(ベクトル・マスク452)およびデータ要素なし(ベクトル・マスク454)を選択するベクトル・マスク値が示される。
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、本発明の実施形態は、32および128以外のビット長のSIMDベクトルをサポートすることもできることを認識するであろう。
図5は、本発明の一実施形態による、スカラ条件文を含む擬似コード510の一例を示す。特に、擬似コード510は、ELSE節を有しないIFブロックを含む。この例では、擬似コード510は、マスク・ベクトル(mask[])、入力ベクトル(data[])および出力ベクトル(result[])用の変数宣言515を含む。擬似コード510は、forループの各パスを通してdata[]ベクトルの要素を評価するループ520(for文)も含む。まず、mask[]ベクトルが条件文で使用され(if(mask[i]%100]==1))、これを満足する場合、data[]ベクトルの第i要素に対して実施され、result[]の第i要素に記憶される演算となる。簡単に言えば、マスク・ベクトルは、計算が入力アレイに対して実施され出力アレイに記憶されるかどうかを決定する。
図5は、擬似コード510のループ520に含まれるスカラIF文を置き換えるように生成されるソース・コードを表すSIMD擬似コード550の一例も示す。すなわち、SIMD擬似コード550は、擬似コード510と同じ結果を得ることもできるが、条件「IF」文は使用しない。図示されるように、SIMD擬似コード550は、mask[]ベクトル、data[]ベクトル、およびresult[]ベクトル用の変数宣言555を含む。SIMD擬似コード550は、擬似コード510からの条件IF文を含むforループを置き換えるように生成されるループ560も含む。ループ560の特定の繰り返しの中で、マスク(mask[]ベクトルの第j要素)を使用して、処理演算がdata[]ベクトルの0および2要素に対して実施されるべきであることを指定する。なお、この例では、data[]の各要素は、本明細書で<d1,d2,d3,d4>と参照される浮動小数点数の4つの要素のベクトルである。次に、maskedElseBranch変数に、data[i]とmask[j]との間のベクトルAND COMPLEMENT演算(vec_andc)の結果が割り当てられる。具体的には、mask[j]の補数値がmaskedElseBranchベクトルに適用される。この例では、maskedElseBranchは、<0,d2,0,d4>を記憶する。すなわち、d2およびd4が、data[i]ベクトルからmaskedElseBranchベクトルにコピーされる。
次に、ベクトル・フロート変数「ifBranch」に、data[]ベクトルの第i要素を使用して計算される値が割り当てられる。その結果、<r1,r2,r3,r4>を記憶するベクトルとなり、ここで、各「r」値は、data[i]ベクトルの対応する値を評価することによって得られる結果を記憶する。すなわち、本来、条件文を満足するベクトルの要素に対して実施されるだけの演算が、代わりに、data[i]ベクトルの各要素に対して実施される。次いで、ベクトル・フロート変数maskedElseBranchに、ifBranchベクトル・フロート変数およびmask[]ベクトルの第j要素を使用して実施されるベクトルAND演算(vec_and)の結果が割り当てられる。その結果、<r1,0,r3,0>値を有するベクトルとなる。すなわち、mask[j]の値が、ifBranchベクトルに適用される。最後に、結果ベクトルの第i値の値に、ベクトルOR演算(vec_or)の結果が割り当てられる。ベクトルOR演算は、maskedElseBranchベクトル・フロートの結果とmaskedIfBranchベクトル・フロートの結果とをORすることによって、結果値を割り当てる。この例では、その結果、<r1,d2,r3,d4>を有するベクトルとなる。言い換えれば、SIMD擬似コード550は、例示的なスカラ擬似コード510と同じ結果になるが、条件文は使用しない。すなわち、result[]変数の各要素の結果ベクトルでは、ベクトルは、(0xFFFFFFFF00000000FFFFFFFF00000000のマスクによって指定される)ベクトルの1および3の位置のdata[]変数からの値と、ベクトルの0および2の位置の条件分岐を実施した結果とを含む。
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、マスクを入力に対し繰り返し適用しない(すなわち、マスクをループで適用しない)方法などの他の方法を本発明の実施形態によってサポートすることもできることを認識するであろう。さらに、本発明の実施形態は、複数のELSE−IF節またはSWITCH−CASE文を有するIF文などの他の条件文を置き換えるSIMDコードを生成するように構成されてもよい。
例えば、スカラ・コードは、IF−ELSEブロックを有する条件文を含んでもよい。図6は、本発明の一実施形態による、条件文を有するスカラ・コード145を表すスカラ擬似コード610の一例を示す。具体的には、ループ620は、ループの各パスで実施されるIF−ELSE条件文を有するFORループを含む。
図示されるように、擬似コード610は、マスク(mask[])、入力(data[])、および出力(result[])用の変数宣言615のセットを含む。擬似コード610は、result[]変数の連続する値(浮動小数点値のアレイ)にマスクを繰り返し適用するループ620も含む。ループ620の各パスのmask[i]の値は、入力(data[i])に対してどの計算が実施されて出力(result[i])の一部として記憶されるかを決定する。特に、ループの各繰り返しについて、マスクは、IF節の計算(すなわち、data[i]の値に5を乗算してその結果をresult[i]に記憶する)を入力に対して実施して出力の一部として記憶するか、ELSE節の計算(すなわち、data[i]の値に7を乗算してその結果をresult[i]に記憶する)を入力に対して実施して出力の一部として記憶するかを決定する。
図6は、ループ620に含まれる条件文(すなわち、IF−ELSE条件分岐)を置き換えるために生成されるSIMD擬似コード650の一例も示す。すなわち、SIMD擬似コード650は、条件文を使用することなしにスカラ擬似コード610と同じ結果になる。図示されるように、SIMD擬似コード650は、ベクトル版のマスク、入力および出力のアレイ用の変数宣言655を含む。すなわち、mask[]、data[]およびresult[]は、ベクトル・フロート値のアレイ(アレイの各要素に対して4つの浮動小数点値)として宣言される。したがって、擬似コード650で4つの値に対して同時に擬似コード610のFORループが実施され、擬似コード650が実施するのはループ620の繰り返しの1/4となる。SIMD擬似コード650は、マスクをinput[]アレイの連続値に適用するループ660も含む。ループ内では、mask[i%100]の補数を使用して、elseDataベクトルにdata[]アレイからの値が割り当てられる。次に、ELSE節内の演算が実施されて、ELSE節の結果を計算する。次いで、ベクトルAND演算およびベクトルAND COMPLEMENT演算をそれぞれ使用して、マスクをIF節の結果とELSE節の結果との両方に適用する。IF節のマスクされた結果をELSE節のマスクされた結果に重ね合わせるベクトルOR演算によって最終結果が計算される。したがって、SIMD擬似コード650は、スカラ擬似コード610と同じ結果となるが、条件文は使用しない。すなわち、result[]アレイの要素は、コード620の条件分岐(IF/ELSE文)を使用して生成される値と同じ値を記憶する。
一実施形態では、高速ベクトル・マスキングSIMDコード発生器135は、ソース・コード内の条件文を特定し、条件文を排除したSIMDコードを生成することもできる。図7は、本発明の一実施形態による、条件文を含むスカラ・コードから高速ベクトル・マスキングSIMDコードを生成する方法700を示す流れ図である。図示されるように、方法700は、ステップ710から開始され、ここで、(IF文などの)条件文を有するスカラ・コード145が受信される。ステップ720で、SIMDコード発生器135は、ステップ710で受信されたコード内のスカラ・データ構造を特定し、対応するSIMDベクトル構造を生成する。前述のように、例えば、ベクトル版の入力、マスクおよび出力のアレイ・データ構造が生成される。ステップ730で、SIMDコード発生器135は、条件文の様々なコード分岐の処理を実施した結果を割り当てるのに使用されるSIMDベクトル・データ構造を生成する。例えば、前述のように、(IF分岐内に含まれる論理を実施した結果を記憶するのに使用される)IF分岐のベクトル・フロート値が、ifBranchと称される変数に記憶される。同様に、IF分岐の結果にマスクが適用されて、maskedIfBranchと称されるベクトルに記憶される。すなわち、ifBranchが、IF文を満足する場合に実施される論理を使用してベクトルの各要素が処理された値を含むのに対して、maskedIfBranchは、論理AND演算を使用してマスクを通過するベクトル要素に対してのみこの論理が適用された値を有する。同様に、maskedElseBranchと称される変数は、(入力データとANDされたマスク値の論理補数を使用して決定された)マスクを通過しないベクトル位置のデータ値を記憶する。より一般的には、ステップ720で、ベクトル・データ構造を生成して、条件文の各分岐に対する結果を記憶することもできる。
ステップ740で、SIMDコード発生器135は、条件文内の論理(すなわち、条件文を満足する場合に実施される論理)を実施するためのコードを生成する。図6に示されるように、例えば、スカラ・アレイのスカラ要素の算術乗算(result[i]=5*data[i])は、ベクトル・アレイの要素のベクトル乗算(ifBranch=vec_mul(data[i],(vector float)5.0;)に変換される。ステップ750で、SIMDコード発生器135は、ELSE節が存在するかどうか(あるいは、より一般的には、追加の条件分岐が、実行論理、例えば、図6のループ620のELSE節を含むかどうか)を判断する。含む場合、ステップ752で、SIMDコード発生器135は、ELSE節に対応するコードをSIMDベクトル演算に変換する。図6に示されるように、例えば、ELSE節内のスカラ・アレイにおけるスカラ要素の算術乗算(result[i]=7*data[i])は、ベクトル・アレイの要素のベクトル乗算(data[i],(vector float)7.0);)に変換される。
ステップ754で、SIMDコード発生器135は、SIMDコードを生成し、例えば、「ifBranch」の結果か「elseBranch」の結果のいずれかから選択するマスク値を使用するSIMDベクトル・ビット単位演算を使用して、両方の節からの結果を結合する。例えば、ベクトルANDおよびANDC演算を使用して、条件文の各分岐について決定された結果をマスクすることもできる。次いで、その結果にベクトルOR演算を使用して、最終結果を決定することもできる。ステップ760で、SIMDコード発生器135は、IF文を含まない高速ベクトル・マスキングSIMDコードを出力する。具体的には、SIMDコード発生器135は、ステップ720から754において生成されたSIMDコードを出力する。ステップ760後に、方法700は終了する。
しかしながら、ステップ750で、SIMDコード発生器135は、ELSE節が存在しないと判断する場合もある。すなわち、場合によっては、条件文は、条件文を満足しない場合に実施される実行論理は含んでも、条件文を満足しない場合に実施する代わりの論理を指定していないこともある。このような場合、ステップ758で、SIMDコード発生器135は、SIMD演算を使用してIF節からの結果をもとのデータと結合するコードを生成する。例えば、ベクトルANDおよびANDC演算を使用して、条件文の各分岐に対するそれぞれの結果をマスクすることもできる。次いで、その結果に対してベクトルOR演算を使用して最終結果を決定することもできる。ステップ760では、SIMDコード発生器135は、IF文を含まないSIMDコードを出力する。具体的には、SIMDコード発生器135は、ステップ720から758において生成されたSIMDコードを出力する。ステップ760後に、方法700は終了する。
一実施形態では、プログラム実行中にマスクを計算する必要がある場合、条件マスキング・コードの前にマスクを計算することもできる。あるいは、各ベクトル・マスク要素を各データ処理の繰り返しの直前に使用できるように、マスクを分岐排除コードと同期させて計算することもできる。そうすることによって、自動リアルタイム意思決定のためのストリーム型処理アプリケーションに役立つこともある。
本発明の実施形態は、ソース・コード内の条件文を特定し、その条件文を、分岐コードを実施しないでも同じ結果を提供するコードと置き換えるように構成されるSIMDコード発生器135を有利にも提供する。一実施形態では、SIMDコード発生器135は、条件文を含むスカラ・コードを受信する。SIMDコード発生器135コンパイラは、ベクトルに基づくデータ構造を使用してスカラ・コードに対応するデータ構造および演算を生成し、ベクトル・ビット単位演算を使用して条件文の各分岐に対する結果を結合する。
当然ながら、本明細書に記載される実施形態は、例として示されるものであり、本発明を限定するものではなく、他の実施形態も広く考えられる。当業者であれば、例えば、実施形態は、C++のようなプログラミング構文を使用して上記に説明されているが、CおよびJava(R)などの他のプログラミング言語を本発明の実施形態によってサポートすることもできることを認識するであろう。さらに、(unsigned int mask、ベクトルAND演算、およびベクトルAND COMPLEMENT演算の代わりに)浮動小数点マスク、ベクトルNOT演算およびベクトル乗算演算を使用して実施されるビット・マスキング演算を、本発明の実施形態によってサポートすることもできる。
前述の内容は、本発明の実施形態を対象としているが、本発明の基本的範囲から逸脱することなしに本発明の他のおよび追加の実施形態を考案することも可能であり、本発明の範囲は、以下の特許請求の範囲によって決定される。

Claims (21)

  1. 条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成するコンピュータで実施される方法であって、
    条件文を含む前記スカラ・ソース・コードを受信するステップであって、前記条件文の各分岐がスカラ・データ構造を含み、前記スカラ・データ構造に基づいて演算するスカラ演算を指定する、受信するステップと、
    前記ベクトル・マスキング・ソース・コードを、
    前記条件文の各分岐について、前記条件文の前記各分岐における前記スカラ・データ構造に対応するベクトル・データ構造を生成するステップと、
    前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ演算に対応するベクトル演算を生成するステップであって、前記スカラ演算が、前記スカラ・データ構造に基づいて演算し、前記ベクトル演算が、前記ベクトル・データ構造に基づいて演算して、前記条件文の前記各分岐に対する結果を計算する、生成するステップと、
    前記条件文の各分岐の前記各結果から最終結果を計算する少なくとも1つのビット単位演算を生成するステップと、
    前記生成されたベクトル・マスキング・ソース・コードを出力するステップと
    によって生成するステップと、
    を含む方法。
  2. 前記最終結果が、少なくとも1つのビット単位ベクトル演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項1に記載の方法。
  3. 前記対応するベクトル演算は、単一命令複数データ(SIMD)ベクトル演算であり、前記対応するベクトル・データ構造は、SIMDベクトル・データ構造であり、前記ビット単位ベクトル演算は、SIMDベクトル・ビット単位演算である、請求項2に記載の方法。
  4. 前記少なくとも1つのベクトル・ビット単位演算が、少なくとも、ベクトル・ビット単位AND演算、ベクトル・ビット単位AND COMPLEMENT演算、およびベクトル・ビット単位OR演算から選択される、請求項2に記載の方法。
  5. 前記最終結果が、ベクトル乗算演算およびベクトル・ビット単位OR演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項1に記載の方法。
  6. 前記生成されたソース・コードをコンパイルして、指定の目標アーキテクチャを実行するように構成されるオブジェクト・コードを生成する、コンパイルするステップと、
    前記オブジェクト・コードを前記指定の目標アーキテクチャに基づいて実行するステップと、
    をさらに含む、請求項1に記載の方法。
  7. 前記条件文は、マスク値を使用して評価されるIF文である、請求項1に記載の方法。
  8. 実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するプログラムを含むコンピュータ可読ストレージ媒体であって、
    条件文を含む前記スカラ・ソース・コードを受信するステップであって、前記条件文の各分岐が、スカラ・データ構造を含み、前記スカラ・データ構造に基づいて演算するスカラ演算を指定する、受信するステップと、
    前記ベクトル・マスキング・ソース・コードを、
    前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ・データ構造に対応するベクトル・データ構造を生成するステップと、
    前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ演算に対応するベクトル演算を生成するステップであって、前記スカラ演算が、前記スカラ・データ構造に基づいて演算し、前記ベクトル演算が、前記ベクトル・データ構造に基づいて演算して、前記条件文の前記各分岐に対する結果を計算する、生成するステップと、
    前記条件文の各分岐の前記各結果から最終結果を計算する少なくとも1つのビット単位演算を生成するステップと、
    前記生成されたソース・コードを出力するステップと
    によって生成するステップと、
    を含むコンピュータ可読ストレージ媒体。
  9. 前記最終結果が、少なくとも1つのビット単位ベクトル演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項8に記載のコンピュータ可読ストレージ媒体。
  10. 前記対応するベクトル演算は、SIMDベクトル演算であり、前記対応するベクトル・データ構造は、SIMDベクトル・データ構造であり、前記ビット単位ベクトル演算は、SIMDベクトル・ビット単位演算である、請求項9に記載のコンピュータ可読ストレージ媒体。
  11. 前記少なくとも1つのベクトル・ビット単位演算が、少なくとも、ベクトル・ビット単位AND演算、ベクトル・ビット単位AND COMPLEMENT演算、およびベクトル・ビット単位OR演算から選択される、請求項9に記載のコンピュータ可読ストレージ媒体。
  12. 前記最終結果が、ベクトル乗算演算およびベクトル・ビット単位OR演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項8に記載のコンピュータ可読ストレージ媒体。
  13. 前記生成されたソース・コードをコンパイルして、指定の目標アーキテクチャを実行するように構成されるオブジェクト・コードを生成する、コンパイルするステップと、
    前記オブジェクト・コードを前記指定の目標アーキテクチャに基づいて実行するステップと、
    をさらに含む、請求項8に記載のコンピュータ可読ストレージ媒体。
  14. 前記条件文は、マスク値を使用して評価されるIF文である、請求項8に記載のコンピュータ可読ストレージ媒体。
  15. プロセッサと、
    前記プロセッサによって実行されると、条件文を含むスカラ・ソース・コードからベクトル・マスキング・ソース・コードを生成する演算を実施するように構成されるプログラムを含むメモリと、
    を含むシステムであって、
    条件文を含む前記スカラ・ソース・コードを受信する手段であって、前記条件文の各分岐が、スカラ・データ構造を含み、前記スカラ・データ構造に基づいて演算するスカラ演算を指定する、受信する手段と、
    前記ベクトル・マスキング・ソース・コードを、
    前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ・データ構造に対応するベクトル・データ構造を生成する手段と、
    前記条件文の各分岐について、前記条件文の前記各分岐の前記スカラ演算に対応するベクトル演算を生成する手段であって、前記スカラ演算が、前記スカラ・データ構造に基づいて演算し、前記ベクトル演算が、前記ベクトル・データ構造に基づいて演算して、前記条件文の前記各分岐に対する結果を計算する、生成する手段と、
    前記条件文の各分岐の前記各結果から最終結果を計算する少なくとも1つのビット単位演算を生成する手段と、
    前記生成されたソース・コードを出力する手段と
    によって生成する手段と、
    を含むシステム。
  16. 前記最終結果が、少なくとも1つのビット単位ベクトル演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項15に記載のシステム。
  17. 前記対応するベクトル演算は、SIMDベクトル演算であり、前記対応するベクトル・データ構造は、SIMDベクトル・データ構造であり、前記ビット単位ベクトル演算は、SIMDベクトル・ビット単位演算である、請求項16に記載のシステム。
  18. 前記少なくとも1つのベクトル・ビット単位演算が、少なくとも、ベクトル・ビット単位AND演算、ベクトル・ビット単位AND COMPLEMENT演算、およびベクトル・ビット単位OR演算から選択される、請求項16に記載のシステム。
  19. 前記最終結果が、ベクトル乗算演算およびベクトル・ビット単位OR演算を使用して、前記条件文の各分岐からの前記結果を結合することによって計算される、請求項15に記載のシステム。
  20. 前記生成されたソース・コードをコンパイルして、指定の目標アーキテクチャを実行するように構成されるオブジェクト・コードを生成する、コンパイルする手段と、
    前記オブジェクト・コードを前記指定の目標アーキテクチャに基づいて実行する手段と、
    をさらに含む、請求項15に記載のシステム。
  21. 前記条件文は、マスク値を使用して評価されるIF文である、請求項15に記載のシステム。
JP2010005600A 2009-02-10 2010-01-14 コンピュータにより実施される方法、コンピュータ可読ストレージ媒体およびシステム(simdアーキテクチャの条件付きデータ選択のための高速ベクトル・マスキング・アルゴリズム) Pending JP2010186467A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US12/368,409 US8418154B2 (en) 2009-02-10 2009-02-10 Fast vector masking algorithm for conditional data selection in SIMD architectures

Publications (1)

Publication Number Publication Date
JP2010186467A true JP2010186467A (ja) 2010-08-26

Family

ID=42541443

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010005600A Pending JP2010186467A (ja) 2009-02-10 2010-01-14 コンピュータにより実施される方法、コンピュータ可読ストレージ媒体およびシステム(simdアーキテクチャの条件付きデータ選択のための高速ベクトル・マスキング・アルゴリズム)

Country Status (3)

Country Link
US (1) US8418154B2 (ja)
JP (1) JP2010186467A (ja)
KR (1) KR101137403B1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9395986B2 (en) 2014-04-10 2016-07-19 Fujitsu Limited Compiling method and compiling apparatus

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102292709B (zh) * 2009-04-28 2014-05-21 国际商业机器公司 用于变换在多线程上工作的程序的程序代码的方法和系统
US8726252B2 (en) * 2011-01-28 2014-05-13 International Business Machines Corporation Management of conditional branches within a data parallel system
US8984499B2 (en) 2011-12-15 2015-03-17 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a blend table
WO2013095653A1 (en) 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register
CN104011662B (zh) * 2011-12-23 2017-05-10 英特尔公司 用于提供向量混合和置换功能的指令和逻辑
WO2013100893A1 (en) 2011-12-27 2013-07-04 Intel Corporation Systems, apparatuses, and methods for generating a dependency vector based on two source writemask registers
JP5966509B2 (ja) * 2012-03-29 2016-08-10 富士通株式会社 プログラム、コード生成方法および情報処理装置
GB2523805B (en) * 2014-03-06 2021-09-01 Advanced Risc Mach Ltd Data processing apparatus and method for performing vector scan operation
US9529622B1 (en) * 2014-12-09 2016-12-27 Parallel Machines Ltd. Systems and methods for automatic generation of task-splitting code
JP6666554B2 (ja) * 2016-05-23 2020-03-18 富士通株式会社 情報処理装置、変換プログラム、及び変換方法
GB2559122B (en) * 2017-01-24 2020-03-11 Advanced Risc Mach Ltd Error detection using vector processing circuitry
CN112115487B (zh) * 2019-06-20 2024-05-31 华控清交信息科技(北京)有限公司 一种数据处理方法、装置和电子设备
US11188316B2 (en) * 2020-03-09 2021-11-30 International Business Machines Corporation Performance optimization of class instance comparisons

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6320683A (ja) * 1986-07-15 1988-01-28 Fujitsu Ltd ベクトル代入最適化処理方式
JPH0756892A (ja) * 1993-08-10 1995-03-03 Fujitsu Ltd マスク付きベクトル演算器を持つ計算機
JPH11316688A (ja) * 1998-05-06 1999-11-16 Mitsubishi Electric Corp プログラミング言語処理装置、プログラミング言語処理方法および記録媒体
JP2004038225A (ja) * 2002-06-28 2004-02-05 Fujitsu Ltd コンパイラプログラムおよびコンパイル処理方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0681236B1 (en) * 1994-05-05 2000-11-22 Conexant Systems, Inc. Space vector data path
KR100677207B1 (ko) * 2001-04-13 2007-02-05 엘지전자 주식회사 Simd 디지탈 신호 처리기 및 연산방법
US7020873B2 (en) * 2002-06-21 2006-03-28 Intel Corporation Apparatus and method for vectorization of detected saturation and clipping operations in serial code loops of a source program
US20050289329A1 (en) * 2004-06-29 2005-12-29 Dwyer Michael K Conditional instruction for a single instruction, multiple data execution engine
JP5326314B2 (ja) * 2008-03-21 2013-10-30 富士通株式会社 プロセサおよび情報処理装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6320683A (ja) * 1986-07-15 1988-01-28 Fujitsu Ltd ベクトル代入最適化処理方式
JPH0756892A (ja) * 1993-08-10 1995-03-03 Fujitsu Ltd マスク付きベクトル演算器を持つ計算機
JPH11316688A (ja) * 1998-05-06 1999-11-16 Mitsubishi Electric Corp プログラミング言語処理装置、プログラミング言語処理方法および記録媒体
JP2004038225A (ja) * 2002-06-28 2004-02-05 Fujitsu Ltd コンパイラプログラムおよびコンパイル処理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
中西 悠、渡邊啓正、平澤将一、本多弘樹: "コードの性能可搬性を提供するSIMD向け共通記述方式", 先進的計算基盤システムシンポジウム SACSIS2007 論文集, vol. 2007, no. 5, JPN6013060923, 23 May 2007 (2007-05-23), JP, pages 15, ISSN: 0002700711 *
廣松悠介、黒田久泰、金田康正: "複雑な制御構造を持つプログラムのSIMD命令セットによる最適化", 情報処理学会論文誌, vol. Vol.48,No.SIG4(PRO 32), JPN6013060924, 15 March 2007 (2007-03-15), JP, pages 62 - 72, ISSN: 0002700712 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9395986B2 (en) 2014-04-10 2016-07-19 Fujitsu Limited Compiling method and compiling apparatus

Also Published As

Publication number Publication date
KR20100091894A (ko) 2010-08-19
US8418154B2 (en) 2013-04-09
US20100205585A1 (en) 2010-08-12
KR101137403B1 (ko) 2012-04-24

Similar Documents

Publication Publication Date Title
JP2010186467A (ja) コンピュータにより実施される方法、コンピュータ可読ストレージ媒体およびシステム(simdアーキテクチャの条件付きデータ選択のための高速ベクトル・マスキング・アルゴリズム)
CN109661647B (zh) 数据处理装置和方法
EP2569694B1 (en) Conditional compare instruction
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
JP2007526571A (ja) Simdデバイスにおける制御フロー管理のための方法及び装置
WO2015114305A1 (en) A data processing apparatus and method for executing a vector scan instruction
US6934938B2 (en) Method of programming linear graphs for streaming vector computation
CN113885877A (zh) 编译的方法、装置、设备及介质
US11144282B2 (en) Mathematical accelerator for artificial intelligence applications
US20030126589A1 (en) Providing parallel computing reduction operations
US10996960B1 (en) Iterating single instruction, multiple-data (SIMD) instructions
JP2004062909A (ja) 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法
US20200142704A1 (en) Processor Core, Processor and Method for Executing a Composite Scalar-Vector Very Lare Instruction Word (VLIW) Instruction
CN111656319A (zh) 利用特定数检测的多流水线架构
JP2008523523A (ja) プログラム内のループ用のコンパイル方法、コンパイル装置およびコンピュータシステム
US11593114B1 (en) Iterating group sum of multiple accumulate operations
KR102025694B1 (ko) 재구성 가능한 프로세서의 검증 방법
WO2022174542A1 (zh) 一种数据处理的方法、装置、处理器和计算设备
Simar et al. How VLIWs Were Adopted as Digital Signal Processors
JP2018049461A (ja) コンパイル装置、コンパイル方法、および、コンパイルプログラム
Richter-Gottfried et al. FPGA-aware Transformations of LLVM-IR
Fryza et al. Instruction-level programming approach for very long instruction word digital signal processors
JP2022131311A (ja) ベクトル演算装置、ベクトル演算方法及びプログラム
Ahn et al. Comparative Analysis of Executing GPU Applications on FPGA: HLS vs. Soft GPU Approaches
CN116450138A (zh) 面向simd和vliw架构的代码优化生成方法及系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120719

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140305

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140513