JP5551939B2 - 任意の標的アーキテクチャに対する並列simdコードを生成する方法、コンピュータ可読媒体、およびシステム - Google Patents

任意の標的アーキテクチャに対する並列simdコードを生成する方法、コンピュータ可読媒体、およびシステム Download PDF

Info

Publication number
JP5551939B2
JP5551939B2 JP2010005604A JP2010005604A JP5551939B2 JP 5551939 B2 JP5551939 B2 JP 5551939B2 JP 2010005604 A JP2010005604 A JP 2010005604A JP 2010005604 A JP2010005604 A JP 2010005604A JP 5551939 B2 JP5551939 B2 JP 5551939B2
Authority
JP
Japan
Prior art keywords
parallel application
target architecture
operations
parallel
target
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.)
Expired - Fee Related
Application number
JP2010005604A
Other languages
English (en)
Other versions
JP2010186468A (ja
Inventor
ジェフリー・スコット・マッカリスター
ネルソン・ラミレス
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 JP2010186468A publication Critical patent/JP2010186468A/ja
Application granted granted Critical
Publication of JP5551939B2 publication Critical patent/JP5551939B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

本発明の実施形態は概してコンパイラに関する。さらに具体的には、本発明の実施形態は、任意の標的アーキテクチャに対する、並列SIMDネイティブ(アーキテクチャ固有の)ソース・コードの生成を自動化するための技法に関する。
近年の多くのプロセッサは、単一命令、多重データ(SIMD:single instruction, multiple data)拡張機能をサポートしている。SIMDは、いくつかのデータ項目を並列に演算する単一の命令を表す。例えば、「add(加算)」SIMD命令は、8つの16ビット値を並列に加算することができる。これらの命令は、一つの命令によって複数のオペレーションを遂行することにより、実行速度を飛躍的に増大させる。SIMD命令の実施例には、マルチメディア拡張命令セット(「MMX:multimedia extension」)命令、SSE命令、およびベクトル・マルチメディア拡張命令セット(「VMX:vectored multimedia extension」)命令が含まれる。
長年に亘ってコンピュータ・ハードウエアは、多様な形態の並列処理に対応してきたが、プログラマが、必ずしも、これらの性能特徴を十分生産的に活用できていないことはよく認識されている。このことは、新しい演算アーキテクチャを取り扱うプログラミング言語内に十分なソフトウエア抽象化が欠けていることに起因し、非並列アルゴリズムを並列アーキテクチャに変換する上での標準化不足と困難さに由来するものと思われる。供給者側が、それぞれの独自の抽象化および命名スキームを用いた並列プログラミング構想を実施するのが通例になっている。また、プログラマが、これらの性能特徴を十分生産的に使えないのは、多くのよく使われるコンピュータ・プログラミング言語(例、C、C++)が、並列処理が広く利用可能になる以前に開発され、単一マシンの単一スレッドを活用することに重点が置かれており、これらコンピュータ・プログラミング言語における対応不足にも起因していると考えられる。新しい言語は、受入れて貰う難しさに面する。広いユーザ・ベースがなければ、新規の言語は、(移植性の並列実行生産性向上のため特別に設計されたものであっても)容易に移植性が損なわれ、実行速度が低下し、ハードウエア固有的なアプローチよりももっとプログラマの生産性を阻害する。
本発明の一つの実施形態は、並列演算アーキテクチャのためのソース・コードを生成する方法を含む。通常、該方法には、所定の注釈(annotation)標準に従って注釈された(annotated)注釈付きソース・コードを受信するステップを含めることができる。この所定注釈標準を使って、(i)並列アプリケーション・プログラムに対する標的アーキテクチャと、(ii)該標的アーキテクチャで実行されると機能する、並列アプリケーション・プログラムのための一つ以上の並列アプリケーション・オペレーションとを規定することができる。これらの並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、および単一命令多重データ(SIMD)オペレーションから選択することができる。また、本方法には、該注釈付きソース・コードを解析し、並列アプリケーション・プログラムのための標的アーキテクチャおよび一つ以上の並列アプリケーション・オペレーションを識別するステップと、各々のトークンが該一つ以上の並列アプリケーション・オペレーションの一つとを表現する、一つ以上のトークンを生成するステップとを含めることができる。本方法には、該一つ以上のトークンから、標的アーキテクチャ上で一つ以上の並列アプリケーション・オペレーションを遂行するよう構成された並列アプリケーション・ソース・コードを生成するステップをさらに含めることができる。
本発明のさらに別の実施形態は、実行されると標的アーキテクチャに対する並列SIMDソース・コードを生成するためのオペレーションを遂行するプログラム、を包含するコンピュータ可読の記憶媒体を含む。通常、このオペレーションには、所定の注釈標準に従って注釈された注釈付きソース・コードを受信するステップを含めることができる。該所定注釈標準を使って、(i)並列アプリケーション・プログラムのための標的アーキテクチャと、(ii)該標的アーキテクチャで実行されると機能する、該並列アプリケーション・プログラムのための一つ以上の並列アプリケーション・オペレーションとを規定することができる。これらの並列アプリケーション・オペレーションは、少なくとも、データ転送オペレーション、同期化オペレーション、および単一命令多重データ(SIMD)オペレーションから選択することができる。また、上記オペレーションには、注釈付きソース・コードを解析し、該並列アプリケーション・プログラムのための標的アーキテクチャおよび一つ以上の並列アプリケーション・オペレーションを識別するステップと、各々のトークンが該一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するステップとを含めることができる。このオペレーションには、該一つ以上のトークンから、標的アーキテクチャで一つ以上の並列アプリケーション・オペレーションを遂行するよう構成された並列アプリケーション・ソース・コードを生成するステップをさらに含めることができる。
本発明のさらに別の実施形態には、プロセッサと、ソースツーソース・コンパイラ・アプリケーションを包含するメモリとを有するシステムが含まれ、該コンパイラ・アプリケーションは、プロセッサによって実行されたとき、標的アーキテクチャに対するソース・コードを生成するよう構成される。通常、該コンパイラ・アプリケーションは、所定の注釈標準に従って注釈された注釈付きソース・コードを受信するように構成することができる。所定の注釈標準を使って、(i)並列アプリケーション・プログラムのための標的アーキテクチャと、(ii)該標的アーキテクチャで実行されると機能する、該並列アプリケーション・プログラムのための一つ以上の並列アプリケーション・オペレーションとを規定することができる。これらの並列アプリケーション・オペレーションは、少なくとも、データ転送オペレーション、同期化オペレーション、および単一命令多重データ(SIMD)オペレーションから選択することができる。該コンパイラ・アプリケーションは、注釈付きソース・コードを解析し、該並列アプリケーション・プログラムのための標的アーキテクチャおよび一つ以上の並列アプリケーション・オペレーションを識別し、各々のトークンが該一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するようさらに構成することができる。該コンパイラ・アプリケーションは、該一つ以上のトークンから、標的アーキテクチャで一つ以上の並列アプリケーション・オペレーションを遂行するよう設定された並列アプリケーション・ソース・コードを生成するようさらに構成することができる。
添付の図面に示された本発明の実施形態を参照することにより、前述した本発明の特質、利点、および目的を会得し詳細に理解しつつ、上記に簡約した本発明のさらに具体的な内容を把握することができよう。
但し、添付の図面は、本発明の代表的な実施形態を例示するものであり、従って発明の範囲を限定するものと見なされるべきでなく、本発明は、これら以外の同様に効果的な実施形態をも包含していることに留意すべきである。
本発明の一つの実施形態による、異機種並列計算環境で実行される並列アプリケーションを示すブロック図である。 本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・コードを、どのようにして個別の標的アーキテクチャに対するオブジェクト・コードにコンパイルできるかを示す、ブロック図である。 本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・ファイルの一例を示す。 本発明の一つの実施形態による、異機種並列計算環境における、親子間通信および同期化と、ピア間通信および同期化とを示すブロック図である。 本発明の一つの実施形態による、標的アーキテクチャに対する並列SIMDソース・コードを生成する方法を示す流れ図である。 本発明の一つの実施形態による、標的アーキテクチャに対する並列SIMDソース・コードを生成するための注釈標準の一例を示す表である。
本発明の実施形態は、並列SIMDネティブ・ソース・コードを自動的に生成するための技法を提供する。一つの実施形態において、ソースツーソース・コンパイラは、データ送信、同期化、およびSIMDオペレーションに対するマシン固有のコードを生成するように構成することができ、これらオペレーションは、さまざまな並列アーキテクチャに対しコンパイルされた並列アプリケーション・プログラムにより遂行される。さらに、本明細書に記載するソースツーソース・コンパイラは、生産性および移植性問題に対処する。プログラマは、各ハードウエア固有のやり方で作業するのに換えて、注釈標準を使って、並列アプリケーションに対するデータ送信、同期化、およびSIMDオペレーションを規定する。こうすることにより、開発者は、特定の並列アーキテクチャおよびそのアーキテクチャ枠組みで実施されるオペレーションの双方を規定することができる。これにより、プログラマは、特定の並列アーキテクチャの個別メカニズムでなく、アプリケーションの特定アプリケーション論理に焦点を絞ることができる。さらに、当該アプリケーションが作成されたならば、その注釈を変更して、注釈標準による表現が可能な任意の特定の並列アーキテクチャに対するソース・コードを生成することができるので、コード移植性は飛躍的に向上する。
一つの実施形態において、ソースツーソース・コンパイラは、所定の注釈標準を使って注釈付けされたソース・コードを受信する。該注釈標準は、並列演算システムの相異なるノードに使用される指定ネイティブ・コンパイラ(例、あるコンパイラはx86プロセッサ用で、別のものはCell BEプロセッサ用)からは独立している。この注釈標準を使って、開発者は、並列アプリケーションのある部分に対し、どのような転送、同期化、およびSIMDオペレーションを実行させるかを規定することができ、これから、ソースツーソース・コンパイラが、特定の標的アーキテクチャに対する適切なソース・コードを生成する。該注釈標準は、各種の異なった文法、標的アーキテクチャ定義付け、コード・ブロック定義付け、共有変数定義付けと、データ転送機能性、同期化機能性、およびSIMD機能性とをサポートすることができる。本明細書では例としてC++プログラミング言語を用いるが、当業者は、本明細書に記載された実施形態が、さまざまなプログラミング言語の使用にも適応可能であることを認識していよう。例えば、本明細書に記載の実施形態は、動的コード生成およびジャストインタイム・コンパイルが実施可能な、インタープリタ型言語の使用にも適応することができる。
さらにまた、諸標準化事項も、ネイティブ・コンパイラから独立した注釈付きソース・コードを作成することによって対処できる。ネイティブ・コンパイラは、注釈をコメントとして無視し、注釈付きソース・コードを逐次プログラムとして取り扱う。ソースツーソース・コンパイラは、特定の標的アーキテクチャに対する並列アプリケーションとしてネイティブにコンパイル可能なコードを生成する。
さらに、該ソースツーソース・コンパイラを使い相異なるアーキテクチャに対するソース・コードを生成することにより、相異なるアーキテクチャ群に対するソース・コードの間で整合性が維持される。例えば、2つ、3つ、またはそれ以上の並列システム・コンパイラに対して生成されたコードにおいて、多くの場合、配列のサイズ、型、アライメントが正確に一致している必要がある。一例として、Cellプロセッサについて、制御プロセッシング・ユニット(PPU:power processing unit)と演算プロセッシング・ユニット(SPU:synergistic processing unit)とは、PPUコードがPPUコンパイラを使ってコンパイルされ、SPUコードがSPUコンパイラを使ってコンパイルされているにもかかわらず、多くの場合同一のデータを用いて作業する。この間の整合性を維持する作業が、エラー、およびプログラマの生産性ロスの元である。
以下の説明では、本発明の実施形態を参照する。但し、本発明が、説明する特定の実施形態に限定されないことを理解すべきである。むしろ、異なった実施形態に関するものかどうかにかかわらず、以下の特質および要素のいかなる組合せも、本発明の履行および実行と見なされる。さらに、さまざまな実施形態において、本発明は、従来技術を上回る数々の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決策または従来技術あるいはその両方を上回る利点を実現できるが、ある特定の利点が所与の実施形態で達成されているかどうかによって本発明が限定されるものではない。しかして、以下の態様、特質、実施形態、および利点は、単なる例示であって、添付の請求項に明示で記載されているものを除き、これら請求項の要素または限定範囲と見なされるものではない。同様に、「本発明」への言及は、本明細書に開示されたいかなる発明主題の一般化としても解釈されてはならず、添付の請求項に明示で記載されているものを除き、これら請求項の要素または限定範囲と見なされてはならない。
本発明の一つの実施形態は、コンピュータ・システムとともに使用されるプログラム製品として実装される。該プログラム製品のプログラム(群)は、実施形態の機能(本明細書に記載の方法を含む)を定義しており、さまざまなコンピュータ可読の記憶媒体に収納することができる。例示的なコンピュータ可読記憶媒体には、以下に限らないが、(i)情報を恒久的に格納するための書込み不可能な記憶媒体(例、CD−ROMドライブで読取り可能なCD−ROMディスクなど、コンピュータ内の読取り専用デバイス)および(ii)変更可能な情報を格納するための書込み可能記憶媒体(例、ディスケット・ドライブ内のフレキシブル・ディスク、またはハード・ディスク・ドライブ)が含まれる。かかるコンピュータ可読の記憶媒体が、本発明の機能を命令するコンピュータ可読の命令を担持する場合、それらは本発明の実施形態である。他の媒体には、無線通信ネットワークを含むコンピュータまたは電話回線など、それらを介してコンピュータに情報を搬送する通信媒体が含まれる。後者の実施形態には、特に、インターネットまたは他のネットワークを往来する情報の送信が含まれる。かかる通信媒体が、本発明の機能を命令するコンピュータ可読の命令を搬送する場合、それらは本発明の実施形態である。本明細書では、コンピュータ可読の記憶媒体および通信媒体を、広範に、コンピュータ可読媒体と呼ぶことがある。
一般に、本発明の実施形態を実施するため実行されるルーチンは、オペレーティング・システムの一部、あるいは特定のアプリケーション、コンポーネント、プログラム、モジュール、オブジェクト、または命令のシーケンスとすることができる。本発明のコンピュータ・プログラムは、典型的には、ネイティブ・コンピュータがマシン可読フォーマットすなわち実行可能命令に翻訳できる、多数の命令から成る。また、プログラムは、プログラム中にローカルに所在するかあるいはメモリまたは記憶装置中に存在する変数およびデータ構造からも成っている。さらに、以降に説明するさまざまなプログラムは、それらが本発明の特定の実施形態において実施される対象のアプリケーションに基いて識別することができよう。但し、以下に記載するどの特定のプログラム用語も単に便宜上のために用いられたものであり、従って、本発明は、かかる用語によって識別されまたは暗示されあるいはその両方が行われる、いずれか特定のアプリケーションだけにおける適用に限定されるものでないことを十分に理解すべきである。
図1は、本発明の一つの実施形態による、異機種並列演算環境100において実行される並列アプリケーション123、145、146を示すブロック図である。図示のように、異機種並列演算環境100は、コンピュータ120、140、およびネットワーク160を含む。一つの実施形態において、環境100中に図示されたコンピュータ・システム群には、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなど、既存のコンピュータ・システムを含めることができる。但し、図1に示された演算環境100は、演算環境の単なる一例である。本発明の実施形態は、これらコンピュータ・システムが、高速ネットワークによって連結された個別コンピュータ群のクラスタなど複雑なマルチユーザ・計算システムであるか、単一ユーザのワークステーションであるか、あるいは、不揮発性の記憶装置を持たないネットワーク装置であるかを問わず、他の環境を使って実施することができる。さらに、図1に示され、本明細書で説明するソフトウエア・アプリケーションは、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなど、既存のコンピュータ・システム上で実行されるコンピュータ・ソフトウエア・アプリケーションを使って実施することができる。しかしながら、本明細書に記載するソフトウエア・アプリケーションは、現存するどの演算環境またはプログラミング言語にも限定されず、新しい計算システムが利用可能になったときには、それを活用するよう適応させることができる。
図示のように、各コンピュータ120、140は、メモリ122,144および任意の記憶装置(例、ハードドライブ、フラッシュ・メモリ、あるいはCDまたはDVD−ROMなどコンピュータ可読の記憶媒体)から、命令およびデータを取得するプロセッサ121、141、142を含む。各プロセッサ121,141,142は、コンピュータ内で、全ての命令、論理、および数学的処理を実施するプログラム可能な論理デバイスである。各記憶装置は、それぞれのコンピュータ120、140が使用するためのアプリケーション・プログラムおよびデータを格納する。この記憶装置には、ハードディスク・ドライブ、フラッシュ・メモリ素子、光学媒体などが含まれる。コンピュータ120、140は、ネットワーク160に動作可能に接続されている。メモリ122、144は、並列実行ファイル123,145,146、共有バッファ147、およびオペレーティング・システム(図示せず)を包含する。オペレーティング・システムは、コンピュータ120,140のオペレーションを管理するために使われるソフトウエアである。オペレーティング・システムの例には、UNIX(R)、マイクロソフトWindows(R)オペレーティング・システムの各バージョン、Linux(R)オペレーティング・システムの各配布版が含まれる。(注:Linuxは、Linus Torvalds社の米国および他の国々における登録商標である。)
一つの実施形態において、異機種並列アプリケーションは、異機種標的アーキテクチャ上で、並列実行ファイル123、145、146の形で実行される。図1に示された事例において、異機種標的アーキテクチャには、ネットワーク160を介して交信し並列タスク123、145、146を実行する、2つのコンピュータ・システム120、140が含まれる。特にこの事例においては、x86コンピュータ120はx86標的アーキテクチャとしての特徴を有し、Cell BEコンピュータ141は、Cell PPUおよびCell SPU標的アーキテクチャとしての特徴を有する。
この事例において、Cell BEコンピュータ141は、プロセッサ(PPU)とそのL1およびL2キャッシュとを有する制御プロセッサ・エレメント(PRE:power processor element)を含む。また、Cell BEコンピュータ141は、各々が演算プロセッサ・ユニット(SPU:synergistic processor unit)とローカル記憶素子とを備える複数の演算プロセッサ・エレメント(SPE:synergistic processor elements)、および高容量の内部エレメント相互接続バス(EIB:element interconnect bus)も含む。この事例には示されていない他の標的アーキテクチャも、幅広く対象となる。
この事例では、x86プロセッサ121は、x86並列実行ファイル123を実行し、ネットワーク160を介して、Cell PPU実行ファイル145を実行しているCell PPU141と交信する。Cell PPU141およびCell SPU群142は、共有のバッファ147を使用し、それぞれCell PPU並列実行ファイル145と、Cell SPU並列実行ファイル146を実行し、エレメント相互接続バス143を介して交信する。
図2は、本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・コード210が、所与の標的アーキテクチャに対するオブジェクト・コードにコンパイルされる、データの流れを示すブロック図である。この事例では、自動並列コード生成(APCG:Automatic Parallel Code Generation)ソースツーソース・コンパイラ220が、注釈付き並列アプリケーション・ソース・コード210を受信する。一つの実施形態において、注釈付き並列アプリケーション・ソース・コード210は、所定の注釈標準を用いて注釈付けされる。ユーザは、該所定注釈標準を使い、ソース・コード生成の対象となる所望の環境を規定することができる。すなわち、該注釈標準は、開発者が、所与の標的アーキテクチャに対する階層を記述することを可能にする。例えば、システムには、いくつかの(子素子としての)アクセラレータ・プロセッサ(例、ベクトル・プロセッサの一群)にサポートされ、親子階層として編成されたx86プロセッサを含めることができる。
APCGソースツーソース・コンパイラ220は、(所定注釈標準に従って)注釈された並列アプリケーション・ソース・コード210中の注釈を解読し、標的アーキテクチャに対する、注釈内容を記述したネイティブ並列アプリケーション・ソース・コードを生成することができる。図2に示された事例では、標的アーキテクチャは、x86、Cell PPU、およびCell SPUである。当然ながら、この事例に示されていない、さまざまな標的アーキテクチャも幅広く対象となる。さらに、該APCGソースツーソース・コンパイラによって、適切な最良実施のネイティブ・コードが生成される。得られた並列アプリケーション・ソース・コード230、232、234は、プログラマによってさらに展開されるか、またはネイティブ・コンパイラを使って直ちにコンパイルされる。図示のように、ネイティブ並列アプリケーション・ソース・コードは、それぞれのネイティブ・コンパイラ240、242、244により受信され、これらコンパイラは、それぞれの標的アーキテクチャに対するそれぞれのオブジェクト・コード250、252、254を生成する。
図3は、本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・ファイル300の一例を示す。この事例では、注釈は、C++の従来の単一ライン・コメント注記記号、「//APCG」(二重スラッシュ)の中に表現されている。説明コメントは、C++の従来の長コメント注記記号、「/*… */」(スラッシュ・アスタリスク)の中に表現され、説明コメントと注釈(annotations)とを区分している。注釈320を使って、ソースツーソース・コンパイラがソース・コードを生成する対象の標的アーキテクチャが定義される。この事例において、各定義は、名前、親の名前、通信プロトコル、および標的アーキテクチャの種類を規定する。この事例では、定義されたアーキテクチャには、libspe2通信プロトコルを使って「PARENT(ペアレント、親)」に連結された標的Cell SPUアーキテクチャ「CHILD(チャイルド、子)」と、TCPプロトコルを使って「HOST(ホスト)」に接続された標的Cell PPUアーキテクチャ「PARENT」と、標的x86アーキテクチャのHOSTとの3つが含まれる。注釈340、352,360、380は、コード・ブロックを画定するために使われる。各ブロックは、それぞれのブロックに対するアーキテクチャを対象としたコードの連続する領域を提供する。例えば340において、ブロックは「test」と名付けられ、CHILDを対象とし、最大6スレッドの実行を可能とする。同様に注釈360は、PARENTに対するプログラム「test2」を定義し最大で1つのスレッドの実行を可能にし、注釈380はHOSTに対するプログラム「test3」を定義し、これも最大で1つのスレッドの実行を可能にしている。該ソースツーソース・コンパイラは、注釈320、340、360、380を使って、指定標的アーキテクチャの各々に一つずつ、3つの別個のソース・コード・ファイル(コード・ブロックを含む)を生成する。
注釈342を使って、共有変数が定義される。ソースツーソース・コンパイラは、共有変数の定義を使って、指定標的アーキテクチャに固有の対応する定義を生成する。この事例では、各定義は、変数名、変数型、および配列サイズを規定している。例えば、注釈342は、128の配列サイズを有する「vfloat4」型の共有変数「A」を宣言している。PARENTは、各CHILDスレッド(この例では最大6つのCHILDスレッド)に対し、規定されたサイズ(この例では128の配列サイズ)に従って、メモリ領域を予約する。SIMDオペレーション注釈344および348は、ベクトル・スプラット・オペレーション(ベクトル・レジスタの全要素にある値をコピーすること)およびベクトル加算などのSIMDオペレーションを実行する。データ転送注釈346、350は、注釈320で規定されたlibspe2プロトコルを使って、ベクトル変数AをPUT(出力)しGET(入力)する。
また、ソースツーソース・コンパイラは、指定標的アーキテクチャにネイティブな同期化コードも生成する。図4は、本発明の一つの実施形態による、異機種並列演算環境における、親子間通信および同期化と、ピア間通信および同期化とを示すブロック図である。この例において、標的アーキテクチャ定義注釈は、x86−Cell−PPU−Cell−SPUすなわち「HOST−PARENT−CHILD」標的アーキテクチャを定義している。HOST420は、TCP430を使ってPARENT440と通信し、PARENT440は、lipspe2 450を使ってCHILD460と通信する。CHILDスレッドの間にはピア間通信および同期化が生じ、PARENTとCHILDとの間には親子間通信および同期化が生じ、PARENTどうしの間にはマルチレベルの通信および同期化が生ずる。通信および同期化のためのソース・コードは、ソースツーソース・コンパイラによって、それぞれ、通信および同期化に対する注釈を使って生成される。
図5は、本発明の一つの実施形態による、標的アーキテクチャに対する並列SIMDソース・コードを生成する方法500を示す流れ図である。例証目的のため、図2のシステムに関連させて方法500を説明する。但し、当業者は、どのような順序であれ、方法500のステップを実施するように構成された一切のシステムは、本発明の範囲内にあることを理解していよう。
図示のように、方法500は、ステップ510から開始され、該ステップで、ソースツーソース・コンパイラは、所定の注釈標準に従って注釈された並列SIMDソース・コードを受信する。ステップ520において、ソースツーソース・コンパイラは、該並列SIMDソース・コードを解読し、複数の注釈トークンを生成する。一般に、トークンとはプログラミング言語中の最小の字句単位をいう。一つの実施形態において、ソースツーソース・コンパイラは、注釈を、該注釈中で規定された処置に対応するソース・コードに対するプログラム構造を表現する一組のトークン群に変換する。さらに、注釈によって指定された標的アーキテクチャに基づいてトークン群を生成することができる。一つの実施形態によれば、ステップ530において、ソースツーソース・コンパイラは、複数の注釈を構文解析し、例えば、APCG注釈によって指定された標的アーキテクチャに対する、転送される変数の内部表現の設定、主ソース・ファイルの機能ブロックへの分割、または、他のデータ送信、同期化およびSIMDオペレーションなど、所与のトークンによって規定された処置を実施するため必要な、然るべきソース・コードを決定する。
ステップ540において、ソースツーソース・コンパイラは、標的アーキテクチャに対するネイティブ並列SIMDソース・コードを生成する。例えば、ソースツーソース・コンパイラは、アウトプットとして、APCG注釈に指定された標的アーキテクチャに対するフォーマットで構成された、データ送信、同期化、およびSIMDオペレーションを具備する複数のソース・ファイルを生成することができる。この事例では、注釈トークンおよび標的アーキテクチャが所与であれば、ソースツーソース・コンパイラは、マッピング表を用いて、該注釈を該標的アーキテクチャで実行するための、対応するネイティブ構文およびデータ型を決定することができる。ソースツーソース・コンパイラは、注釈トークンとマッピング表検索を使って、データ送信、同期化、およびSMIDオペレーションのためのネイティブ・ソース・コードを生成する。ステップ540の後、方法500は終了する。
前述のように、ソースツーソース・コンパイラは、所定の注釈標準を使って注釈されたソース・コードを受信する。図6は、本発明の一つの実施形態による、ある標的アーキテクチャに対する並列SIMDソース・コードを生成するための注釈標準の例を示した表である。前述したように、該注釈標準は、ユーザが、ソース・コードを生成する対象の標的アーキテクチャを指定することを可能にする。さらに、該注釈標準では、ユーザが、コンパイラにとらわれない仕方でデータ送信機能性、同期化機能性、およびSIMD機能性を規定することができる。ならになお、該注釈標準は、ソースツーソース・コンパイラが、さまざまの異なる標的アーキテクチャに対する、データ送信、同期化、およびSIMDオペレーションを遂行するためのネティブ・コードを生成することを可能にする。この事例では、図6のブロック604に、通信プロトコルとしてTCPを使い「HOST」に連結している、Cell PPUアーキテクチャを有する標的「PARENT」の定義が示されている。コード・ブロック定義の例604は、最大6つのスレッドを可能にする、CHILDに対するコード・ブロック「test」の開始と終了とを定義している。共有変数定義606は、各CHILDスレッドに対するサイズ128のvfloat4配列を、最大で6CHILDスレッド分まで予約する。
データ送信機能性ブロック608は、PUT、GET、SCATTER、およびGATHERオペレーションの例を含む。通常、SCATTERオペレーションは、「全スレッドへPUT」オペレーションと同等であるが、パフォーマンスが良い。同様に、GATHERオペレーションは、「全スレッドからGET」オペレーションと同等であるが、パフォーマンスが良い。本発明の一つの実施形態において、PUT、GET、SCATTER、およびGATHERオペレーションは、通信プロトコルを加えて規定することができるよう意図されている(例、「//APCG PUT(A(プロトコル名))」)。さらに、データ送信および同期化は相互に結び付けられている。場合によっては、データ送信は同期化と組み合わされ(ブロッキング通信)、他の場合には、同期化は別個に実施される。同期化機能性ブロック610は、メッセージを送信し、全てのピアの実行が当該BARRIER(バリア)に到達するまで待つ、WAITオペレーションの例を提示する。最後に、SIMD機能性ブロック612は、加算、減算、乗算、乗算と加算、平方根計算、並びに、暗黙のループを介する、単一のベクトル変数およびベクトル変数の配列のスプラット、に対するSIMD(例、ベクトル)オペレーションの例を提示する。本発明の一つの実施形態において、ベクトル変数の配列に対するSIMDオペレーションは、該ベクトル変数中のデータ要素の全て(または一部)に亘る暗黙のループを設定できるように意図されている。さらに、ユーザは、「simd_add(A,B(パターン_配列))」を規定することができ、前記のパターン_配列は、これら配列のどの要素が処理されるかを示すパターン配列である。前述のオペレーションの全ては、所定の注釈標準において一般形式で表現される。一つの実施形態において、ソースツーソース・コンパイラは、これらのオペレーションを、出力ソース・コードにおいて適切なネティブ構文およびデータ型に変換する。
有利には、本発明の実施形態は、データ送信、同期化、およびSIMDオペレーションに対するマシン固有のコードを生成するよう構成されたソースツーソース・コンパイラを提供する。一つの実施形態において、該ソースツーソース・コンパイラは、所定の注釈標準を使って注釈付けられたソース・コードを受信する。該注釈標準は、ネティブ・コンパイラから独立しており、標的アーキテクチャの定義、コード・ブロックの定義、共用変数の定義と、データ送信機能性、同期化機能性、およびSIMD機能性とをサポートする。当然ながら、本明細書に記載した実施形態は、例示のためのもので本発明の限定を意図してはおらず、これら以外の実施形態も幅広く考えられる。当業者は、例えば、CおよびJavaなど他のプログラミング言語も本発明の実施形態によってサポートできることを認識するであろう。さらに、該所定注釈標準に関しては、データ送信、同期化、およびSIMDオペレーションの領域における他の構文、文法、およびオペレーションが幅広く対象とされる。最後に、本発明の実施形態は、任意の異機種並列アーキテクチャをサポートすることができる。
前述の説明は、本発明の実施形態を対象としているが、本発明の基本的範囲から逸脱することなく、他のまたは追加の本発明実施形態を考案することが可能であり、本発明の範囲は以下に記載の特許請求項により決定される。
120 コンピュータ1:x86アーキテクチャ
121 x86プロセッサ
122 メモリ
123 並列実行ファイル(x86)
140 コンピュータ2:セル・ブロードバンド・エンジン・アーキテクチャ
141 CELL PPE
142 CELL SPE
143 エレメント相互接続バス
144 メモリ
145 並列実行ファイル(CELL PPU)
146 並列実行ファイル(CELL SPU)
147 共有バッファ
160 ネットワーク

Claims (13)

  1. 並列演算アーキテクチャのためのソース・コードを生成する、コンピュータ実行の方法であって、
    前記方法は、
    所定の注釈標準に従って注釈された注釈付きソース・コードを受信するステップであって、前記所定注釈標準を用いて(i)並列アプリケーション・プログラムに対する標的アーキテクチャ、および(ii)前記標的アーキテクチャで実行されるとき遂行される、前記並列アプリケーション・プログラムの一つ以上の並列アプリケーション・オペレーションが規定され、前記並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、単一命令多重データ(SIMD)オペレーションから選択される、前記受信するステップと、
    前記注釈付きソース・コードを構文解析し、前記並列アプリケーション・プログラムおよび前記一つ以上の並列アプリケーション・オペレーションのための前記標的アーキテクチャを識別するステップと、
    各トークンが、前記一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するステップと、
    前記一つ以上のトークンから、前記標的アーキテクチャ上で前記一つ以上の並列アプリケーション・オペレーションを実行するよう構成された並列アプリケーション・ソース・コードを生成するステップと、
    を含
    前記所定の注釈標準は、標的アーキテクチャの定義、コード・ブロックの定義、および共有変数の定義を規定するための文法を含み、
    前記標的アーキテクチャの定義は、標的名、アーキテクチャの種類、ペアレント名、および前記標的アーキテクチャの2つ以上のプロセッシング・エレメントに対する通信プロトコルを規定し、
    前記コード・ブロックの定義は、標的名、コード・ブロック名、および前記コード・ブロックを実行するための最大スレッド数を規定し、
    前記共有変数の定義は、前記共有変数の変数名、変数型、および配列サイズを規定する、
    前記方法。
  2. 前記標的アーキテクチャは、少なくとも一つの汎用プロセッシング・エレメントと、前記汎用プロセッシング・エレメントをサポートするよう構成された一つの特殊用途プロセッシング・エレメントとを含むプロセッシング・エレメントの階層を特徴とする、請求項1に記載の方法。
  3. 前記生成された並列アプリケーション・ソース・コードを、前記標的アーキテクチャに対し利用可能な一つ以上のネイティブ・コンパイラを介してコンパイルし、前記並列アプリケーション・プログラムを生成するステップをさらに含む、請求項1に記載の方法。
  4. 前記並列アプリケーション・オペレーションは、データ送信オペレーションおよび同期化オペレーションの一つを含み、前記データ送信オペレーションは、putオペレーションおよびgetオペレーションの一つを規定し、前記同期化オペレーションは、waitオペレーションおよびbarrierオペレーションの一つを規定する、請求項1に記載の方法。
  5. 前記並列アプリケーション・オペレーションは、単一ベクトルの変数に対する加算、減算、乗算、スプラット、および平方根オペレーションの少なくとも一つから選択されたSIMDオペレーションを含む、請求項1に記載の方法。
  6. 実行されたとき標的アーキテクチャに対する並列SIMDソース・コードを生成するためのオペレーションを遂行するプログラムを包含する、コンピュータ可読の記憶媒体であって、
    前記オペレーションは、
    所定の注釈標準に従って注釈された注釈付きソース・コードを受信するステップであって、前記所定注釈標準を用いて(i)並列アプリケーション・プログラムに対する標的アーキテクチャ、および(ii)前記標的アーキテクチャで実行されるとき遂行される、前記並列アプリケーション・プログラムの一つ以上の並列アプリケーション・オペレーションが規定され、前記並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、単一命令多重データ(SIMD)オペレーションから選択される、前記受信するステップと、
    前記注釈付きソース・コードを構文解析し、前記並列アプリケーション・プログラムおよび前記一つ以上の並列アプリケーション・オペレーションのための前記標的アーキテクチャを識別するステップと、
    各トークンが、前記一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するステップと、
    前記一つ以上のトークンから、前記標的アーキテクチャ上で前記一つ以上の並列アプリケーション・オペレーションを実行するよう構成された並列アプリケーション・ソース・コードを生成するステップと、
    を含
    前記所定の注釈標準は、標的アーキテクチャの定義、コード・ブロックの定義、および共有変数の定義を規定するための文法を含み、
    前記標的アーキテクチャの定義は、標的名、アーキテクチャの種類、ペアレント名、および前記標的アーキテクチャの2つ以上のプロセッシング・エレメントに対する通信プロトコルを規定し、
    前記コード・ブロックの定義は、標的名、コード・ブロック名、および前記コード・ブロックを実行するための最大スレッド数を規定し、
    前記共有変数の定義は、前記共有変数の変数名、変数型、および配列サイズを規定する、
    前記コンピュータ可読記憶媒体。
  7. 前記オペレーションは、前記生成された並列アプリケーション・ソース・コードを、前記標的アーキテクチャに対し利用可能な一つ以上のネイティブ・コンパイラを介してコンパイルし、前記並列アプリケーション・プログラムを生成するステップをさらに含む、請求項記載のコンピュータ可読記憶媒体。
  8. 前記並列アプリケーション・オペレーションは、データ送信オペレーションおよび同期化オペレーションの一つを含み、前記データ送信オペレーションは、putオペレーションおよびgetオペレーションの一つを規定し、前記同期化オペレーションは、waitオペレーションおよびbarrierオペレーションの一つを規定する、請求項に記載のコンピュータ可読記憶媒体。
  9. 前記並列アプリケーション・オペレーションは、単一ベクトルの変数に対する加算、減算、乗算、スプラット、および平方根オペレーションの少なくとも一つから選択されたSIMDオペレーションを含む、請求項に記載のコンピュータ可読記憶媒体。
  10. プロセッサと、
    ソースツーソース・コンパイラ・アプリケーションを包含するメモリと、
    を含むシステムであって、
    前記コンパイラ・アプリケーションは、前記プロセッサにより実行されたとき、
    所定の注釈標準に従って注釈された注釈付きソース・コードを受信する手段であって、前記所定注釈標準を用いて(i)並列アプリケーション・プログラムに対する標的アーキテクチャ、および(ii)前記標的アーキテクチャで実行されるとき遂行される、前記並列アプリケーション・プログラムの一つ以上の並列アプリケーション・オペレーションが規定され、前記並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、単一命令多重データ(SIMD)オペレーションから選択される、前記受信する手段と、
    前記注釈付きソース・コードを構文解析し、前記並列アプリケーション・プログラムおよび前記一つ以上の並列アプリケーション・オペレーションのための前記標的アーキテクチャを識別する手段と、
    各トークンが、前記一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成する手段と、
    前記一つ以上のトークンから、前記標的アーキテクチャで前記一つ以上の並列アプリケーション・オペレーションを実行するよう構成された並列アプリケーション・ソース・コードを生成する手段と、
    を遂行することによって、標的アーキテクチャに対するソース・コードを生成するよう構成されており
    前記所定の注釈標準は、標的アーキテクチャの定義、コード・ブロックの定義、および共有変数の定義を規定するための文法を含み、
    前記標的アーキテクチャの定義は、標的名、アーキテクチャの種類、ペアレント名、および前記標的アーキテクチャの2つ以上のプロセッシング・エレメントに対する通信プロトコルを規定し、
    前記コード・ブロックの定義は、標的名、コード・ブロック名、および前記コード・ブロックを実行するための最大スレッド数を規定し、
    前記共有変数の定義は、前記共有変数の変数名、変数型、および配列サイズを規定する、
    前記システム。
  11. 前記コンパイラ・アプリケーションは、前記生成された並列アプリケーション・ソース・コードを、前記標的アーキテクチャに対して利用可能な一つ以上のネイティブ・コンパイラを介してコンパイルし、前記並列アプリケーション・プログラムを生成する手段をさらに含む、請求項10に記載のシステム。
  12. 前記並列アプリケーション・オペレーションは、データ送信オペレーションおよび同期化オペレーションの一つを含み、前記データ送信オペレーションは、putオペレーションおよびgetオペレーションの一つを規定し、前記同期化オペレーションは、waitオペレーションおよびbarrierオペレーションの一つを規定する、請求項10に記載のシステム。
  13. 前記並列アプリケーション・オペレーションは、単一ベクトルの変数に対する加算、減算、乗算、スプラット、および平方根オペレーションの少なくとも一つから選択されたSIMDオペレーションを含む、請求項10に記載のシステム。
JP2010005604A 2009-02-10 2010-01-14 任意の標的アーキテクチャに対する並列simdコードを生成する方法、コンピュータ可読媒体、およびシステム Expired - Fee Related JP5551939B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/368,424 US8418155B2 (en) 2009-02-10 2009-02-10 Generating parallel SIMD code for an arbitrary target architecture
US12/368424 2009-02-10

Publications (2)

Publication Number Publication Date
JP2010186468A JP2010186468A (ja) 2010-08-26
JP5551939B2 true JP5551939B2 (ja) 2014-07-16

Family

ID=42541439

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010005604A Expired - Fee Related JP5551939B2 (ja) 2009-02-10 2010-01-14 任意の標的アーキテクチャに対する並列simdコードを生成する方法、コンピュータ可読媒体、およびシステム

Country Status (3)

Country Link
US (1) US8418155B2 (ja)
JP (1) JP5551939B2 (ja)
CN (1) CN101799760B (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9298427B2 (en) 2010-01-06 2016-03-29 Microsoft Technology Licensing, Llc. Creating inferred symbols from code usage
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
US9841958B2 (en) 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics
WO2012164439A1 (en) * 2011-06-02 2012-12-06 International Business Machines Corporation Handling cross-thread method calls
CN103959240B (zh) * 2011-12-15 2017-05-17 英特尔公司 使用混洗表和掩码存储表经由矢量指令优化程序循环的方法
US10216500B2 (en) * 2012-02-10 2019-02-26 Oracle International Corporation Method and apparatus for synchronization annotation
KR101893796B1 (ko) 2012-08-16 2018-10-04 삼성전자주식회사 동적 데이터 구성을 위한 방법 및 장치
US9134974B2 (en) * 2012-11-12 2015-09-15 Signalogic, Inc. Source code separation and generation for heterogeneous central processing unit (CPU) computational devices
US9110672B2 (en) 2013-11-07 2015-08-18 International Business Machines Corporation Compiler generation of thunking code
CN103631632B (zh) * 2013-11-29 2017-08-04 华为技术有限公司 移植方法及源到源编译器
CN104035767A (zh) * 2014-05-30 2014-09-10 中原智慧城市设计研究院有限公司 一种提高计算机并行计算编程自动化程度的方法
US10140104B2 (en) 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
CN107851002A (zh) * 2015-08-31 2018-03-27 华为技术有限公司 一种代码编译方法及代码编译器
US20170168792A1 (en) * 2015-12-15 2017-06-15 Futurewei Technologies, Inc. Space and time aware organization and isolation of components in real time systems
CN107305527B (zh) * 2016-04-22 2020-05-19 腾讯科技(深圳)有限公司 代码文件的处理方法和装置
CN106325860B (zh) * 2016-08-16 2019-11-12 北京控制工程研究所 一种航天嵌入式软件接口数据的自动化维护方法
US10474461B2 (en) 2016-09-22 2019-11-12 Qualcomm Incorporated Instruction-based synchronization of operations including at least one SIMD scatter operation
CN107203406B (zh) * 2017-06-26 2020-11-06 西安微电子技术研究所 一种面向分布式存储结构的处理方法
US11513840B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US11467812B2 (en) * 2019-11-22 2022-10-11 Advanced Micro Devices, Inc. Compiler operations for heterogeneous code objects
US11256522B2 (en) 2019-11-22 2022-02-22 Advanced Micro Devices, Inc. Loader and runtime operations for heterogeneous code objects
JP7295466B2 (ja) * 2019-12-02 2023-06-21 富士通株式会社 クラス生成プログラム及びクラス生成方法
CN113391842A (zh) 2020-03-13 2021-09-14 华为技术有限公司 一种单指令多数据simd指令的生成、处理方法以及相关设备
US11354267B1 (en) * 2021-01-11 2022-06-07 Lilac Cloud, Inc. Compiler for a command-aware hardware architecture

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04209029A (ja) * 1990-12-04 1992-07-30 Fujitsu Ltd 並列処理プログラム翻訳処理装置
CA2078315A1 (en) * 1991-09-20 1993-03-21 Christopher L. Reeve Parallel processing apparatus and method for utilizing tiling
JPH05257709A (ja) * 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
US5774728A (en) * 1995-12-27 1998-06-30 International Business Machines Corporation Method and system for compiling sections of a computer program for multiple execution environments
US5815720A (en) * 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
JPH11316688A (ja) * 1998-05-06 1999-11-16 Mitsubishi Electric Corp プログラミング言語処理装置、プログラミング言語処理方法および記録媒体
JP2001147819A (ja) * 1999-11-19 2001-05-29 Fujitsu Ltd 最適化装置および記録媒体
US6738967B1 (en) * 2000-03-14 2004-05-18 Microsoft Corporation Compiling for multiple virtual machines targeting different processor architectures
US7398376B2 (en) * 2001-03-23 2008-07-08 International Business Machines Corporation Instructions for ordering execution in pipelined processes
US7707544B2 (en) * 2002-12-05 2010-04-27 Bea Systems, Inc. System and method for generating and reusing software application code with source definition files
US7707564B2 (en) * 2003-02-26 2010-04-27 Bea Systems, Inc. Systems and methods for creating network-based software services using source code annotations
US7434213B1 (en) * 2004-03-31 2008-10-07 Sun Microsystems, Inc. Portable executable source code representations
US7367026B2 (en) * 2004-06-07 2008-04-29 International Business Machines Corporation Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization
US7386842B2 (en) * 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US7475392B2 (en) * 2004-06-07 2009-01-06 International Business Machines Corporation SIMD code generation for loops with mixed data lengths
US20060123401A1 (en) * 2004-12-02 2006-06-08 International Business Machines Corporation Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system
US7966602B1 (en) * 2006-03-16 2011-06-21 Oracle America, Inc. Incremental modification detector, and methods, systems, and apparatus for implementing the same
US8201159B2 (en) * 2006-08-04 2012-06-12 International Business Machines Corporation Method and apparatus for generating data parallel select operations in a pervasively data parallel system
US7962906B2 (en) * 2007-03-15 2011-06-14 International Business Machines Corporation Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data

Also Published As

Publication number Publication date
US20100205580A1 (en) 2010-08-12
CN101799760B (zh) 2013-04-24
US8418155B2 (en) 2013-04-09
JP2010186468A (ja) 2010-08-26
CN101799760A (zh) 2010-08-11

Similar Documents

Publication Publication Date Title
JP5551939B2 (ja) 任意の標的アーキテクチャに対する並列simdコードを生成する方法、コンピュータ可読媒体、およびシステム
JP5851396B2 (ja) 処理方法
Giorgi et al. TERAFLUX: Harnessing dataflow in next generation teradevices
JP5818351B2 (ja) ヘテロジニアス黙示的及び明示的プロセッシング要素のコンピュータ的一体化のための方法、プログラムおよびコンピュータプログラム
US11900113B2 (en) Data flow processing method and related device
EP3649759A1 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
US8701096B2 (en) In-order execution in an asynchronous programming environment
US20180004495A1 (en) Verification of a dataflow representation of a program through static type-checking
JP2005004737A (ja) 動的ランタイム環境でタグ付き型を用いるシステム及び方法
US10372509B2 (en) Composable and cancelable dataflow continuation passing
US10324693B2 (en) Optimizing multiple invocations of graphics processing unit programs in Java
Mateos et al. An approach for non-intrusively adding malleable fork/join parallelism into ordinary JavaBean compliant applications
Thoman et al. Sylkan: towards a Vulkan compute target platform for SYCL
Hijma et al. Stepwise‐refinement for performance: a methodology for many‐core programming
Kallas et al. Practically correct,{Just-in-Time} shell script parallelization
Prokopec Learning Concurrent Programming in Scala
Ng et al. Session types: towards safe and fast reconfigurable programming
Churavy Transparent distributed programming in Julia
Saillard et al. Maximizing communication overlap with dynamic program analysis
US8135943B1 (en) Method, apparatus, and computer-readable medium for generating a dispatching function
Su et al. TorchProbe: Fuzzing Dynamic Deep Learning Compilers
Harvey A linguistic approach to concurrent, distributed, and adaptive programming across heterogeneous platforms
Soh Design and implementation of a DSL based on Ruby for parallel programming
Åkesson An LLVM Back-end for REPLICA: Code Generation for a Multi-core VLIWProcessor with Chaining
Burshteyn The distributed Language Hello White Paper

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: 20140310

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140507

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140523

R150 Certificate of patent or registration of utility model

Ref document number: 5551939

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees