説明

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

【課題】データ送信、同期化、およびSIMDオペレーションの3つの主要機能領域において、並列SIMDネティブ・ソース・コードの生成を自動化するための技法を開示する。
【解決手段】ネティブ・コンパイラから独立し、ソースツーソース・コンパイラと一体化された注釈標準が定義され、該コンパイラは、データ送信、同期化、およびSIMDオペレーションの高レベルの抽象化を提供し、プログラマを、ハードウエアの固有の仕方で作業する必要性から解放しながら、並列SIMD演算環境における生産性と移植性の問題に対処する。

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

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

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2010−186468(P2010−186468A)
【公開日】平成22年8月26日(2010.8.26)
【国際特許分類】
【出願番号】特願2010−5604(P2010−5604)
【出願日】平成22年1月14日(2010.1.14)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】