(57)【要約】【課題】データ送信、同期化、およびＳＩＭＤオペレーションの３つの主要機能領域において、並列ＳＩＭＤネティブ・ソース・コードの生成を自動化するための技法を開示する。【解決手段】ネティブ・コンパイラから独立し、ソースツーソース・コンパイラと一体化された注釈標準が定義され、該コンパイラは、データ送信、同期化、およびＳＩＭＤオペレーションの高レベルの抽象化を提供し、プログラマを、ハードウエアの固有の仕方で作業する必要性から解放しながら、並列ＳＩＭＤ演算環境における生産性と移植性の問題に対処する。【選択図】図１
2010186468.tif 000002
【特許請求の範囲】
【請求項１】
並列演算アーキテクチャのためのソース・コードを生成する、コンピュータ実行の方法であって、
前記方法は、
所定の注釈標準に従って注釈された注釈付きソース・コードを受信するステップであって、前記所定注釈標準を用いて（ｉ）並列アプリケーション・プログラムに対する標的アーキテクチャ、および（ｉｉ）前記標的アーキテクチャで実行されるとき遂行される、前記並列アプリケーション・プログラムの一つ以上の並列アプリケーション・オペレーションが規定され、前記並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、単一命令多重データ（ＳＩＭＤ）オペレーションから選択される、前記受信ステップと、
前記注釈付きソース・コードを構文解析し、前記並列アプリケーション・プログラムおよび前記一つ以上の並列アプリケーション・オペレーションのための前記標的アーキテクチャを識別するステップと、
各トークンが、前記一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するステップと、
前記一つ以上のトークンから、前記標的アーキテクチャ上で前記一つ以上の並列アプリケーション・オペレーションを実行するよう構成された並列アプリケーション・ソース・コードを生成するステップと、
を含む、前記方法。
【請求項２】
前記標的アーキテクチャは、少なくとも一つの汎用プロセッシング・エレメントと、前記汎用プロセッシング・エレメントをサポートするよう構成された一つの特殊用途プロセッシング・エレメントとを含むプロセッシング・エレメントの階層を特徴とする、請求項１に記載の方法。
【請求項３】
前記生成された並列アプリケーション・ソース・コードを、前記標的アーキテクチャに対し利用可能な一つ以上のネティブ・コンパイラを介してコンパイルし、前記並列アプリケーションを生成するステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記所定注釈標準は、標的アーキテクチャの定義を規定するための文法を含み、前記標的アーキテクチャの定義は、標的名、アーキテクチャの種類、ペアレント名、および前記標的アーキテクチャの２つ以上のプロセッシング・エレメントに対する通信プロトコルを規定する、請求項１に記載の方法。
【請求項５】
前記所定注釈標準は、コード・ブロックの定義を規定するための文法を含み、前記コード・ブロックの定義は、標的名、コード・ブロック名、および前記コード・ブロックを実行するための最大スレッド数を規定する、請求項１に記載の方法。
【請求項６】
前記所定注釈標準は、共有変数の定義を規定するための文法を含み、前記共有変数の定義は、前記共有変数の変数名、変数型、および配列サイズを規定する、請求項１に記載の方法。
【請求項７】
前記並列アプリケーション・オペレーションは、データ送信オペレーションおよび同期化オペレーションの一つを含み、前記データ送信オペレーションは、ｐｕｔオペレーションおよびｇｅｔオペレーションの一つを規定し、前記同期化オペレーションは、ｗａｉｔオペレーションおよびｂａｒｒｉｅｒオペレーションの一つを規定する、請求項１に記載の方法。
【請求項８】
前記並列アプリケーション・オペレーションは、単一ベクトルの変数に対する加算、減算、乗算、スプラット、および平方根オペレーションの少なくとも一つから選択されたＳＩＭＤオペレーションを含む、請求項１に記載の方法。
【請求項９】
実行されたとき標的アーキテクチャに対する並列ＳＩＭＤソース・コードを生成するためのオペレーションを遂行するプログラムを包含する、コンピュータ可読の記憶媒体であって、
前記オペレーションは、
所定の注釈標準に従って注釈された注釈付きソース・コードを受信するステップであって、前記所定注釈標準を用いて（ｉ）並列アプリケーション・プログラムに対する標的アーキテクチャ、および（ｉｉ）前記標的アーキテクチャで実行されるとき遂行される、前記並列アプリケーション・プログラムの一つ以上の並列アプリケーション・オペレーションが規定され、前記並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、単一命令多重データ（ＳＩＭＤ）オペレーションから選択される、前記受信ステップと、
前記注釈付きソース・コードを構文解析し、前記並列アプリケーション・プログラムおよび前記一つ以上の並列アプリケーション・オペレーションのための前記標的アーキテクチャを識別するステップと、
各トークンが、前記一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するステップと、
前記一つ以上のトークンから、前記標的アーキテクチャ上で前記一つ以上の並列アプリケーション・オペレーションを実行するよう構成された並列アプリケーション・ソース・コードを生成するステップと、
を含む、前記コンピュータ可読記憶媒体。
【請求項１０】
前記オペレーションは、前記生成された並列アプリケーション・ソース・コードを、前記標的アーキテクチャに対し利用可能な一つ以上のネティブ・コンパイラを介してコンパイルし、前記並列アプリケーションを生成するステップをさらに含む、請求項９に記載のコンピュータ可読記憶媒体。
【請求項１１】
前記所定注釈標準は、標的アーキテクチャの定義を規定するための文法を含み、前記標的アーキテクチャの定義は、標的名、アーキテクチャの種類、ペアレント名、および前記標的アーキテクチャの２つ以上のプロセッシング・エレメントに対する通信プロトコルを規定する、請求項９に記載のコンピュータ可読記憶媒体。
【請求項１２】
前記所定注釈標準は、コード・ブロックの定義を規定するための文法を含み、前記コード・ブロックの定義は、標的名、コード・ブロック名、および前記コード・ブロックを実行するための最大スレッド数を規定する、請求項９に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記所定注釈標準は、共有変数の定義を規定するための文法を含み、前記共有変数の定義は、前記共有変数の変数名、変数型、および配列サイズを規定する、請求項９に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記並列アプリケーション・オペレーションは、データ送信オペレーションおよび同期化オペレーションの一つを含み、前記データ送信オペレーションは、ｐｕｔオペレーションおよびｇｅｔオペレーションの一つを規定し、前記同期化オペレーションは、ｗａｉｔオペレーションおよびｂａｒｒｉｅｒオペレーションの一つを規定する、請求項９に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記並列アプリケーション・オペレーションは、単一ベクトルの変数に対する加算、減算、乗算、スプラット、および平方根オペレーションの少なくとも一つから選択されたＳＩＭＤオペレーションを含む、請求項９に記載のコンピュータ可読記憶媒体。
【請求項１６】
プロセッサと、
ソースツーソース・コンパイラ・アプリケーションを包含するメモリと、
を含むシステムであって、
前記コンパイラ・アプリケーションは、前記プロセッサにより実行されたとき、
所定の注釈標準に従って注釈された注釈付きソース・コードを受信する手段であって、前記所定注釈標準を用いて（ｉ）並列アプリケーション・プログラムに対する標的アーキテクチャ、および（ｉｉ）前記標的アーキテクチャで実行されるとき遂行される、前記並列アプリケーション・プログラムの一つ以上の並列アプリケーション・オペレーションが規定され、前記並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、単一命令多重データ（ＳＩＭＤ）オペレーションから選択される、前記受信手段と、
前記注釈付きソース・コードを構文解析し、前記並列アプリケーション・プログラムおよび前記一つ以上の並列アプリケーション・オペレーションのための前記標的アーキテクチャを識別する手段と、
各トークンが、前記一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成する手段と、
前記一つ以上のトークンから、前記標的アーキテクチャで前記一つ以上の並列アプリケーション・オペレーションを実行するよう構成された並列アプリケーション・ソース・コードを生成する手段と、
を遂行することによって、標的アーキテクチャに対するソース・コードを生成するよう構成されている、
前記システム。
【請求項１７】
前記コンパイラ・アプリケーションは、前記生成された並列アプリケーション・ソース・コードを、前記標的アーキテクチャに対して利用可能な一つ以上のネティブ・コンパイラを介してコンパイルし、前記並列アプリケーションを生成する手段をさらに含む、請求項１６に記載のシステム。
【請求項１８】
前記所定注釈標準は、標的アーキテクチャの定義を規定するための文法を含み、前記標的アーキテクチャの定義は、標的名、アーキテクチャの種類、ペアレント名、および前記標的アーキテクチャの２つ以上のプロセッシング・エレメントに対する通信プロトコルを規定する、請求項１６に記載のシステム。
【請求項１９】
前記所定注釈標準は、コード・ブロックの定義を規定するための文法を含み、前記コード・ブロックの定義は、標的名、コード・ブロック名、および前記コード・ブロックを実行するための最大スレッド数を規定する、請求項１６に記載のシステム。
【請求項２０】
前記所定注釈標準は、共有変数の定義を規定するための文法を含み、前記共有変数の定義は、前記共有変数の変数名、変数型、および配列サイズを規定する、請求項１６に記載のシステム。
【請求項２１】
前記並列アプリケーション・オペレーションは、データ送信オペレーションおよび同期化オペレーションの一つを含み、前記データ送信オペレーションは、ｐｕｔオペレーションおよびｇｅｔオペレーションの一つを規定し、前記同期化オペレーションは、ｗａｉｔオペレーションおよびｂａｒｒｉｅｒオペレーションの一つを規定する、請求項１６に記載のシステム。
【請求項２２】
前記並列アプリケーション・オペレーションは、単一ベクトルの変数に対する加算、減算、乗算、スプラット、および平方根オペレーションの少なくとも一つから選択されたＳＩＭＤオペレーションを含む、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は概してコンパイラに関する。さらに具体的には、本発明の実施形態は、任意の標的アーキテクチャに対する、並列ＳＩＭＤネイティブ（アーキテクチャ固有の）ソース・コードの生成を自動化するための技法に関する。
【背景技術】
【０００２】
近年の多くのプロセッサは、単一命令、多重データ（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ，  ｍｕｌｔｉｐｌｅ  ｄａｔａ）拡張機能をサポートしている。ＳＩＭＤは、いくつかのデータ項目を並列に演算する単一の命令を表す。例えば、「ａｄｄ（加算）」ＳＩＭＤ命令は、８つの１６ビット値を並列に加算することができる。これらの命令は、一つの命令によって複数のオペレーションを遂行することにより、実行速度を飛躍的に増大させる。ＳＩＭＤ命令の実施例には、マルチメディア拡張命令セット（「ＭＭＸ：ｍｕｌｔｉｍｅｄｉａ  ｅｘｔｅｎｓｉｏｎ」）命令、ＳＳＥ命令、およびベクトル・マルチメディア拡張命令セット（「ＶＭＸ：ｖｅｃｔｏｒｅｄ  ｍｕｌｔｉｍｅｄｉａ  ｅｘｔｅｎｓｉｏｎ」）命令が含まれる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
長年に亘ってコンピュータ・ハードウエアは、多様な形態の並列処理に対応してきたが、プログラマが、必ずしも、これらの性能特徴を十分生産的に活用できていないことはよく認識されている。このことは、新しい演算アーキテクチャを取り扱うプログラミング言語内に十分なソフトウエア抽象化が欠けていることに起因し、非並列アルゴリズムを並列アーキテクチャに変換する上での標準化不足と困難さに由来するものと思われる。供給者側が、それぞれの独自の抽象化および命名スキームを用いた並列プログラミング構想を実施するのが通例になっている。また、プログラマが、これらの性能特徴を十分生産的に使えないのは、多くのよく使われるコンピュータ・プログラミング言語（例、Ｃ、Ｃ＋＋）が、並列処理が広く利用可能になる以前に開発され、単一マシンの単一スレッドを活用することに重点が置かれており、これらコンピュータ・プログラミング言語における対応不足にも起因していると考えられる。新しい言語は、受入れて貰う難しさに面する。広いユーザ・ベースがなければ、新規の言語は、（移植性の並列実行生産性向上のため特別に設計されたものであっても）容易に移植性が損なわれ、実行速度が低下し、ハードウエア固有的なアプローチよりももっとプログラマの生産性を阻害する。
【課題を解決するための手段】
【０００４】
本発明の一つの実施形態は、並列演算アーキテクチャのためのソース・コードを生成する方法を含む。通常、該方法には、所定の注釈（ａｎｎｏｔａｔｉｏｎ）標準に従って注釈された（ａｎｎｏｔａｔｅｄ）注釈付きソース・コードを受信するステップを含めることができる。この所定注釈標準を使って、（ｉ）並列アプリケーション・プログラムに対する標的アーキテクチャと、（ｉｉ）該標的アーキテクチャで実行されると機能する、並列アプリケーション・プログラムのための一つ以上の並列アプリケーション・オペレーションとを規定することができる。これらの並列アプリケーション・オペレーションは、少なくとも、データ送信オペレーション、同期化オペレーション、および単一命令多重データ（ＳＩＭＤ）オペレーションから選択することができる。また、本方法には、該注釈付きソース・コードを解析し、並列アプリケーション・プログラムのための標的アーキテクチャおよび一つ以上の並列アプリケーション・オペレーションを識別するステップと、各々のトークンが該一つ以上の並列アプリケーション・オペレーションの一つとを表現する、一つ以上のトークンを生成するステップとを含めることができる。本方法には、該一つ以上のトークンから、標的アーキテクチャ上で一つ以上の並列アプリケーション・オペレーションを遂行するよう構成された並列アプリケーション・ソース・コードを生成するステップをさらに含めることができる。
【０００５】
本発明のさらに別の実施形態は、実行されると標的アーキテクチャに対する並列ＳＩＭＤソース・コードを生成するためのオペレーションを遂行するプログラム、を包含するコンピュータ可読の記憶媒体を含む。通常、このオペレーションには、所定の注釈標準に従って注釈された注釈付きソース・コードを受信するステップを含めることができる。該所定注釈標準を使って、（ｉ）並列アプリケーション・プログラムのための標的アーキテクチャと、（ｉｉ）該標的アーキテクチャで実行されると機能する、該並列アプリケーション・プログラムのための一つ以上の並列アプリケーション・オペレーションとを規定することができる。これらの並列アプリケーション・オペレーションは、少なくとも、データ転送オペレーション、同期化オペレーション、および単一命令多重データ（ＳＩＭＤ）オペレーションから選択することができる。また、上記オペレーションには、注釈付きソース・コードを解析し、該並列アプリケーション・プログラムのための標的アーキテクチャおよび一つ以上の並列アプリケーション・オペレーションを識別するステップと、各々のトークンが該一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するステップとを含めることができる。このオペレーションには、該一つ以上のトークンから、標的アーキテクチャで一つ以上の並列アプリケーション・オペレーションを遂行するよう構成された並列アプリケーション・ソース・コードを生成するステップをさらに含めることができる。
【０００６】
本発明のさらに別の実施形態には、プロセッサと、ソースツーソース・コンパイラ・アプリケーションを包含するメモリとを有するシステムが含まれ、該コンパイラ・アプリケーションは、プロセッサによって実行されたとき、標的アーキテクチャに対するソース・コードを生成するよう構成される。通常、該コンパイラ・アプリケーションは、所定の注釈標準に従って注釈された注釈付きソース・コードを受信するように構成することができる。所定の注釈標準を使って、（ｉ）並列アプリケーション・プログラムのための標的アーキテクチャと、（ｉｉ）該標的アーキテクチャで実行されると機能する、該並列アプリケーション・プログラムのための一つ以上の並列アプリケーション・オペレーションとを規定することができる。これらの並列アプリケーション・オペレーションは、少なくとも、データ転送オペレーション、同期化オペレーション、および単一命令多重データ（ＳＩＭＤ）オペレーションから選択することができる。該コンパイラ・アプリケーションは、注釈付きソース・コードを解析し、該並列アプリケーション・プログラムのための標的アーキテクチャおよび一つ以上の並列アプリケーション・オペレーションを識別し、各々のトークンが該一つ以上の並列アプリケーション・オペレーションの一つを表現する、一つ以上のトークンを生成するようさらに構成することができる。該コンパイラ・アプリケーションは、該一つ以上のトークンから、標的アーキテクチャで一つ以上の並列アプリケーション・オペレーションを遂行するよう設定された並列アプリケーション・ソース・コードを生成するようさらに構成することができる。
【０００７】
添付の図面に示された本発明の実施形態を参照することにより、前述した本発明の特質、利点、および目的を会得し詳細に理解しつつ、上記に簡約した本発明のさらに具体的な内容を把握することができよう。
【０００８】
但し、添付の図面は、本発明の代表的な実施形態を例示するものであり、従って発明の範囲を限定するものと見なされるべきでなく、本発明は、これら以外の同様に効果的な実施形態をも包含していることに留意すべきである。
【図面の簡単な説明】
【０００９】
【図１】本発明の一つの実施形態による、異機種並列計算環境で実行される並列アプリケーションを示すブロック図である。
【図２】本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・コードを、どのようにして個別の標的アーキテクチャに対するオブジェクト・コードにコンパイルできるかを示す、ブロック図である。
【図３】本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・ファイルの一例を示す。
【図４】本発明の一つの実施形態による、異機種並列計算環境における、親子間通信および同期化と、ピア間通信および同期化とを示すブロック図である。
【図５】本発明の一つの実施形態による、標的アーキテクチャに対する並列ＳＩＭＤソース・コードを生成する方法を示す流れ図である。
【図６】本発明の一つの実施形態による、標的アーキテクチャに対する並列ＳＩＭＤソース・コードを生成するための注釈標準の一例を示す表である。
【発明を実施するための形態】
【００１０】
本発明の実施形態は、並列ＳＩＭＤネティブ・ソース・コードを自動的に生成するための技法を提供する。一つの実施形態において、ソースツーソース・コンパイラは、データ送信、同期化、およびＳＩＭＤオペレーションに対するマシン固有のコードを生成するように構成することができ、これらオペレーションは、さまざまな並列アーキテクチャに対しコンパイルされた並列アプリケーション・プログラムにより遂行される。さらに、本明細書に記載するソースツーソース・コンパイラは、生産性および移植性問題に対処する。プログラマは、各ハードウエア固有のやり方で作業するのに換えて、注釈標準を使って、並列アプリケーションに対するデータ送信、同期化、およびＳＩＭＤオペレーションを規定する。こうすることにより、開発者は、特定の並列アーキテクチャおよびそのアーキテクチャ枠組みで実施されるオペレーションの双方を規定することができる。これにより、プログラマは、特定の並列アーキテクチャの個別メカニズムでなく、アプリケーションの特定アプリケーション論理に焦点を絞ることができる。さらに、当該アプリケーションが作成されたならば、その注釈を変更して、注釈標準による表現が可能な任意の特定の並列アーキテクチャに対するソース・コードを生成することができるので、コード移植性は飛躍的に向上する。
【００１１】
一つの実施形態において、ソースツーソース・コンパイラは、所定の注釈標準を使って注釈付けされたソース・コードを受信する。該注釈標準は、並列演算システムの相異なるノードに使用される指定ネティブ・コンパイラ（例、あるコンパイラはｘ８６プロセッサ用で、別のものはＣｅｌｌ  ＢＥプロセッサ用）からは独立している。この注釈標準を使って、開発者は、並列アプリケーションのある部分に対し、どのような転送、同期化、およびＳＩＭＤオペレーションを実行させるかを規定することができ、これから、ソースツーソース・コンパイラが、特定の標的アーキテクチャに対する適切なソース・コードを生成する。該注釈標準は、各種の異なった文法、標的アーキテクチャ定義付け、コード・ブロック定義付け、共有変数定義付けと、データ転送機能性、同期化機能性、およびＳＩＭＤ機能性とをサポートすることができる。本明細書では例としてＣ＋＋プログラミング言語を用いるが、当業者は、本明細書に記載された実施形態が、さまざまなプログラミング言語の使用にも適応可能であることを認識していよう。例えば、本明細書に記載の実施形態は、動的コード生成およびジャストインタイム・コンパイルが実施可能な、インタープリタ型言語の使用にも適応することができる。
【００１２】
さらにまた、諸標準化事項も、ネティブ・コンパイラから独立した注釈付きソース・コードを作成することによって対処できる。ネティブ・コンパイラは、注釈をコメントとして無視し、注釈付きソース・コードを逐次プログラムとして取り扱う。ソースツーソース・コンパイラは、特定の標的アーキテクチャに対する並列アプリケーションとして個別言語にコンパイル可能なコードを生成する。
【００１３】
さらに、該ソースツーソース・コンパイラを使い相異なるアーキテクチャに対するソース・コードを生成することにより、相異なるアーキテクチャ群に対するソース・コードの間で整合性が維持される。例えば、２つ、３つ、またはそれ以上の並列システム・コンパイラに対して生成されたコードにおいて、多くの場合、配列のサイズ、型、アライメントが正確に一致している必要がある。一例として、Ｃｅｌｌプロセッサについて、制御プロセッシング・ユニット（ＰＰＵ：ｐｏｗｅｒ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）と演算プロセッシング・ユニット（ＳＰＵ：ｓｙｎｅｒｇｉｓｔｉｃ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）とは、ＰＰＵコードがＰＰＵコンパイラを使ってコンパイルされ、ＳＰＵコードがＳＰＵコンパイラを使ってコンパイルされているにもかかわらず、多くの場合同一のデータを用いて作業する。この間の整合性を維持する作業が、エラー、およびプログラマの生産性ロスの元である。
【００１４】
以下の説明では、本発明の実施形態を参照する。但し、本発明が、説明する特定の実施形態に限定されないことを理解すべきである。むしろ、異なった実施形態に関するものかどうかにかかわらず、以下の特質および要素のいかなる組合せも、本発明の履行および実行と見なされる。さらに、さまざまな実施形態において、本発明は、従来技術を上回る数々の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決策または従来技術あるいはその両方を上回る利点を実現できるが、ある特定の利点が所与の実施形態で達成されているかどうかによって本発明が限定されるものではない。しかして、以下の態様、特質、実施形態、および利点は、単なる例示であって、添付の請求項に明示で記載されているものを除き、これら請求項の要素または限定範囲と見なされるものではない。同様に、「本発明」への言及は、本明細書に開示されたいかなる発明主題の一般化としても解釈されてはならず、添付の請求項に明示で記載されているものを除き、これら請求項の要素または限定範囲と見なされてはならない。
【００１５】
本発明の一つの実施形態は、コンピュータ・システムとともに使用されるプログラム製品として実装される。該プログラム製品のプログラム（群）は、実施形態の機能（本明細書に記載の方法を含む）を定義しており、さまざまなコンピュータ可読の記憶媒体に収納することができる。例示的なコンピュータ可読記憶媒体には、以下に限らないが、（ｉ）情報を恒久的に格納するための書込み不可能な記憶媒体（例、ＣＤ−ＲＯＭドライブで読取り可能なＣＤ−ＲＯＭディスクなど、コンピュータ内の読取り専用デバイス）および（ｉｉ）変更可能な情報を格納するための書込み可能記憶媒体（例、ディスケット・ドライブ内のフレキシブル・ディスク、またはハード・ディスク・ドライブ）が含まれる。かかるコンピュータ可読の記憶媒体が、本発明の機能を命令するコンピュータ可読の命令を担持する場合、それらは本発明の実施形態である。他の媒体には、無線通信ネットワークを含むコンピュータまたは電話回線など、それらを介してコンピュータに情報を搬送する通信媒体が含まれる。後者の実施形態には、特に、インターネットまたは他のネットワークを往来する情報の送信が含まれる。かかる通信媒体が、本発明の機能を命令するコンピュータ可読の命令を搬送する場合、それらは本発明の実施形態である。本明細書では、コンピュータ可読の記憶媒体および通信媒体を、広範に、コンピュータ可読媒体と呼ぶことがある。
【００１６】
一般に、本発明の実施形態を実施するため実行されるルーチンは、オペレーティング・システムの一部、あるいは特定のアプリケーション、コンポーネント、プログラム、モジュール、オブジェクト、または命令のシーケンスとすることができる。本発明のコンピュータ・プログラムは、典型的には、ネティブ・コンピュータがマシン可読フォーマットすなわち実行可能命令に翻訳できる、多数の命令から成る。また、プログラムは、プログラム中にローカルに所在するかあるいはメモリまたは記憶装置中に存在する変数およびデータ構造からも成っている。さらに、以降に説明するさまざまなプログラムは、それらが本発明の特定の実施形態において実施される対象のアプリケーションに基いて識別することができよう。但し、以下に記載するどの特定のプログラム用語も単に便宜上のために用いられたものであり、従って、本発明は、かかる用語によって識別されまたは暗示されあるいはその両方が行われる、いずれか特定のアプリケーションだけにおける適用に限定されるものでないことを十分に理解すべきである。
【００１７】
図１は、本発明の一つの実施形態による、異機種並列演算環境１００において実行される並列アプリケーション１２３、１４５、１４６を示すブロック図である。図示のように、異機種並列演算環境１００は、コンピュータ１２０、１４０、およびネットワーク１６０を含む。一つの実施形態において、環境１００中に図示されたコンピュータ・システム群には、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなど、既存のコンピュータ・システムを含めることができる。但し、図１に示された演算環境１００は、演算環境の単なる一例である。本発明の実施形態は、これらコンピュータ・システムが、高速ネットワークによって連結された個別コンピュータ群のクラスタなど複雑なマルチユーザ・計算システムであるか、単一ユーザのワークステーションであるか、あるいは、不揮発性の記憶装置を持たないネットワーク装置であるかを問わず、他の環境を使って実施することができる。さらに、図１に示され、本明細書で説明するソフトウエア・アプリケーションは、例えば、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなど、既存のコンピュータ・システム上で実行されるコンピュータ・ソフトウエア・アプリケーションを使って実施することができる。しかしながら、本明細書に記載するソフトウエア・アプリケーションは、現存するどの演算環境またはプログラミング言語にも限定されず、新しい計算システムが利用可能になったときには、それを活用するよう適応させることができる。
【００１８】
図示のように、各コンピュータ１２０、１４０は、メモリ１２２，１４４および任意の記憶装置（例、ハードドライブ、フラッシュ・メモリ、あるいはＣＤまたはＤＶＤ−ＲＯＭなどコンピュータ可読の記憶媒体）から、命令およびデータを取得するプロセッサ１２１、１４１、１４２を含む。各プロセッサ１２１，１４１，１４２は、コンピュータ内で、全ての命令、論理、および数学的処理を実施するプログラム可能な論理デバイスである。各記憶装置は、それぞれのコンピュータ１２０、１４０が使用するためのアプリケーション・プログラムおよびデータを格納する。この記憶装置には、ハードディスク・ドライブ、フラッシュ・メモリ素子、光学媒体などが含まれる。コンピュータ１２０、１４０は、ネットワーク１６０に動作可能に接続されている。メモリ１２２、１４４は、並列実行ファイル１２３，１４５，１４６、共有バッファ１４７、およびオペレーティング・システム（図示せず）を包含する。オペレーティング・システムは、コンピュータ１２０，１４０のオペレーションを管理するために使われるソフトウエアである。オペレーティング・システムの例には、ＵＮＩＸ（Ｒ）、マイクロソフトＷｉｎｄｏｗｓ（Ｒ）オペレーティング・システムの各バージョン、Ｌｉｎｕｘ（Ｒ）オペレーティング・システムの各配布版が含まれる。（注：Ｌｉｎｕｘは、Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓ社の米国および他の国々における登録商標である。）
【００１９】
一つの実施形態において、異機種並列アプリケーションは、異機種標的アーキテクチャ上で、並列実行ファイル１２３、１４５、１４６の形で実行される。図１に示された事例において、異機種標的アーキテクチャには、ネットワーク１６０を介して交信し並列タスク１２３、１４５、１４６を実行する、２つのコンピュータ・システム１２０、１４０が含まれる。特にこの事例においては、ｘ８６コンピュータ１２０はｘ８６標的アーキテクチャとしての特徴を有し、Ｃｅｌｌ  ＢＥコンピュータ１４１は、Ｃｅｌｌ  ＰＰＵおよびＣｅｌｌ  ＳＰＵ標的アーキテクチャとしての特徴を有する。
【００２０】
この事例において、Ｃｅｌｌ  ＢＥコンピュータ１４１は、プロセッサ（ＰＰＵ）とそのＬ１およびＬ２キャッシュとを有する制御プロセッサ・エレメント（ＰＲＥ：ｐｏｗｅｒ  ｐｒｏｃｅｓｓｏｒ  ｅｌｅｍｅｎｔ）を含む。また、Ｃｅｌｌ  ＢＥコンピュータ１４１は、各々が演算プロセッサ・ユニット（ＳＰＵ：ｓｙｎｅｒｇｉｓｔｉｃ  ｐｒｏｃｅｓｓｏｒ  ｕｎｉｔ）とローカル記憶素子とを備える複数の演算プロセッサ・エレメント（ＳＰＥ：ｓｙｎｅｒｇｉｓｔｉｃ  ｐｒｏｃｅｓｓｏｒ  ｅｌｅｍｅｎｔｓ）、および高容量の内部エレメント相互接続バス（ＥＩＢ：ｅｌｅｍｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｂｕｓ）も含む。この事例には示されていない他の標的アーキテクチャも、幅広く対象となる。
【００２１】
この事例では、ｘ８６プロセッサ１２１は、ｘ８６並列実行ファイル１２３を実行し、ネットワーク１６０を介して、Ｃｅｌｌ  ＰＰＵ実行ファイル１４５を実行しているＣｅｌｌ  ＰＰＵ１４１と交信する。Ｃｅｌｌ  ＰＰＵ１４１およびＣｅｌｌ  ＳＰＵ群１４２は、共有のバッファ１４７を使用し、それぞれＣｅｌｌ  ＰＰＵ並列実行ファイル１４５と、Ｃｅｌｌ  ＳＰＵ並列実行ファイル１４６を実行し、エレメント相互接続バス１４３を介して交信する。
【００２２】
図２は、本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・コード２１０が、所与の標的アーキテクチャに対するオブジェクト・コードにコンパイルされる、データの流れを示すブロック図である。この事例では、自動並列コード生成（ＡＰＣＧ：Ａｕｔｏｍａｔｉｃ  Ｐａｒａｌｌｅｌ  Ｃｏｄｅ  Ｇｅｎｅｒａｔｉｏｎ）ソースツーソース・コンパイラ２２０が、注釈付き並列アプリケーション・ソース・コード２１０を受信する。一つの実施形態において、注釈付き並列アプリケーション・ソース・コード２１０は、所定の注釈標準を用いて注釈付けされる。ユーザは、該所定注釈標準を使い、ソース・コード生成の対象となる所望の環境を規定することができる。すなわち、該注釈標準は、開発者が、所与の標的アーキテクチャに対する階層を記述することを可能にする。例えば、システムには、いくつかの（子素子としての）アクセラレータ・プロセッサ（例、ベクトル・プロセッサの一群）にサポートされ、親子階層として編成されたｘ８６プロセッサを含めることができる。
【００２３】
ＡＰＣＧソースツーソース・コンパイラ２２０は、（所定注釈標準に従って）注釈された並列アプリケーション・ソース・コード２１０中の注釈を解読し、標的アーキテクチャに対する、注釈内容を記述したネティブ並列アプリケーション・ソース・コードを生成することができる。図２に示された事例では、標的アーキテクチャは、ｘ８６、Ｃｅｌｌ  ＰＰＵ、およびＣｅｌｌ  ＳＰＵである。当然ながら、この事例に示されていない、さまざまな標的アーキテクチャも幅広く対象となる。さらに、該ＡＰＣＧソースツーソース・コンパイラによって、適切な最良実施のネティブ・コードが生成される。得られた並列アプリケーション・ソース・コード２３０、２３２、２３４は、プログラマによってさらに展開されるか、またはネティブ・コンパイラを使って直ちにコンパイルされる。図示のように、ネティブ並列アプリケーション・ソース・コードは、それぞれのネティブ・コンパイラ２４０、２４２、２４４により受信され、これらコンパイラは、それぞれの標的アーキテクチャに対するそれぞれのオブジェクト・コード２５０、２５２、２５４を生成する。
【００２４】
図３は、本発明の一つの実施形態による、注釈付き並列アプリケーション・ソース・ファイル３００の一例を示す。この事例では、注釈は、Ｃ＋＋の従来の単一ライン・コメント注記記号、「／／ＡＰＣＧ」（二重スラッシュ）の中に表現されている。説明コメントは、Ｃ＋＋の従来の長コメント注記記号、「／＊…  ＊／」（スラッシュ・アスタリスク）の中に表現され、説明コメントと注釈（ａｎｎｏｔａｔｉｏｎｓ）とを区分している。注釈３２０を使って、ソースツーソース・コンパイラがソース・コードを生成する対象の標的アーキテクチャが定義される。この事例において、各定義は、名前、親の名前、通信プロトコル、および標的アーキテクチャの種類を規定する。この事例では、定義されたアーキテクチャには、ｌｉｂｓｐｅ２通信プロトコルを使って「ＰＡＲＥＮＴ（ペアレント、親）」に連結された標的Ｃｅｌｌ  ＳＰＵアーキテクチャ「ＣＨＩＬＤ（チャイルド、子）」と、ＴＣＰプロトコルを使って「ＨＯＳＴ（ホスト）」に接続された標的Ｃｅｌｌ  ＰＰＵアーキテクチャ「ＰＡＲＥＮＴ」と、標的ｘ８６アーキテクチャのＨＯＳＴとの３つが含まれる。注釈３４０、３５２，３６０、３８０は、コード・ブロックを画定するために使われる。各ブロックは、それぞれのブロックに対するアーキテクチャを対象としたコードの連続する領域を提供する。例えば３４０において、ブロックは「ｔｅｓｔ」と名付けられ、ＣＨＩＬＤを対象とし、最大６スレッドの実行を可能とする。同様に注釈３６０は、ＰＡＲＥＮＴに対するプログラム「ｔｅｓｔ２」を定義し最大で１つのスレッドの実行を可能にし、注釈３８０はＨＯＳＴに対するプログラム「ｔｅｓｔ３」を定義し、これも最大で１つのスレッドの実行を可能にしている。該ソースツーソース・コンパイラは、注釈３２０、３４０、３６０、３８０を使って、指定標的アーキテクチャの各々に一つずつ、３つの別個のソース・コード・ファイル（コード・ブロックを含む）を生成する。
【００２５】
注釈３４２を使って、共有変数が定義される。ソースツーソース・コンパイラは、共有変数の定義を使って、指定標的アーキテクチャに固有の対応する定義を生成する。この事例では、各定義は、変数名、変数型、および配列サイズを規定している。例えば、注釈３４２は、１２８の配列サイズを有する「ｖｆｌｏａｔ４」型の共有変数「Ａ」を宣言している。ＰＡＲＥＮＴは、各ＣＨＩＬＤスレッド（この例では最大６つのＣＨＩＬＤスレッド）に対し、規定されたサイズ（この例では１２８の配列サイズ）に従って、メモリ領域を予約する。ＳＩＭＤオペレーション注釈３４４および３４８は、ベクトル・スプラット・オペレーション（ベクトル・レジスタの全要素にある値をコピーすること）およびベクトル加算などのＳＩＭＤオペレーションを実行する。データ転送注釈３４６、３５０は、注釈３２０で規定されたｌｉｂｓｐｅ２プロトコルを使って、ベクトル変数ＡをＰＵＴ（出力）しＧＥＴ（入力）する。
【００２６】
また、ソースツーソース・コンパイラは、指定標的アーキテクチャにネティブな同期化コードも生成する。図４は、本発明の一つの実施形態による、異機種並列演算環境における、親子間通信および同期化と、ピア間通信および同期化とを示すブロック図である。この例において、標的アーキテクチャ定義注釈は、ｘ８６−Ｃｅｌｌ−ＰＰＵ−Ｃｅｌｌ−ＳＰＵすなわち「ＨＯＳＴ−ＰＡＲＥＮＴ−ＣＨＩＬＤ」標的アーキテクチャを定義している。ＨＯＳＴ４２０は、ＴＣＰ４３０を使ってＰＡＲＥＮＴ４４０と通信し、ＰＡＲＥＮＴ４４０は、ｌｉｐｓｐｅ２  ４５０を使ってＣＨＩＬＤ４６０と通信する。ＣＨＩＬＤスレッドの間にはピア間通信および同期化が生じ、ＰＡＲＥＮＴとＣＨＩＬＤとの間には親子間通信および同期化が生じ、ＰＡＲＥＮＴどうしの間にはマルチレベルの通信および同期化が生ずる。通信および同期化のためのソース・コードは、ソースツーソース・コンパイラによって、それぞれ、通信および同期化に対する注釈を使って生成される。
【００２７】
図５は、本発明の一つの実施形態による、標的アーキテクチャに対する並列ＳＩＭＤソース・コードを生成する方法５００を示す流れ図である。例証目的のため、図２のシステムに関連させて方法５００を説明する。但し、当業者は、どのような順序であれ、方法５００のステップを実施するように構成された一切のシステムは、本発明の範囲内にあることを理解していよう。
【００２８】
図示のように、方法５００は、ステップ５１０から開始され、該ステップで、ソースツーソース・コンパイラは、所定の注釈標準に従って注釈された並列ＳＩＭＤソース・コードを受信する。ステップ５２０において、ソースツーソース・コンパイラは、該並列ＳＩＭＤソース・コードを解読し、複数の注釈トークンを生成する。一般に、トークンとはプログラミング言語中の最小の字句単位をいう。一つの実施形態において、ソースツーソース・コンパイラは、注釈を、該注釈中で規定された処置に対応するソース・コードに対するプログラム構造を表現する一組のトークン群に変換する。さらに、注釈によって指定された標的アーキテクチャに基づいてトークン群を生成することができる。一つの実施形態によれば、ステップ５３０において、ソースツーソース・コンパイラは、複数の注釈を構文解析し、例えば、ＡＰＣＧ注釈によって指定された標的アーキテクチャに対する、転送される変数の内部表現の設定、主ソース・ファイルの機能ブロックへの分割、または、他のデータ送信、同期化およびＳＩＭＤオペレーションなど、所与のトークンによって規定された処置を実施するため必要な、然るべきソース・コードを決定する。
【００２９】
ステップ５４０において、ソースツーソース・コンパイラは、標的アーキテクチャに対するネティブ並列ＳＩＭＤソース・コードを生成する。例えば、ソースツーソース・コンパイラは、アウトプットとして、ＡＰＣＧ注釈に指定された標的アーキテクチャに対するフォーマットで構成された、データ送信、同期化、およびＳＩＭＤオペレーションを具備する複数のソース・ファイルを生成することができる。この事例では、注釈トークンおよび標的アーキテクチャが所与であれば、ソースツーソース・コンパイラは、マッピング表を用いて、該注釈を該標的アーキテクチャで実行するための、対応するネティブ構文およびデータ型を決定することができる。ソースツーソース・コンパイラは、注釈トークンとマッピング表検索を使って、データ送信、同期化、およびＳＭＩＤオペレーションのためのネティブ・ソース・コードを生成する。ステップ５４０の後、方法５００は終了する。
【００３０】
前述のように、ソースツーソース・コンパイラは、所定の注釈標準を使って注釈されたソース・コードを受信する。図６は、本発明の一つの実施形態による、ある標的アーキテクチャに対する並列ＳＩＭＤソース・コードを生成するための注釈標準の例を示した表である。前述したように、該注釈標準は、ユーザが、ソース・コードを生成する対象の標的アーキテクチャを指定することを可能にする。さらに、該注釈標準では、ユーザが、コンパイラにとらわれない仕方でデータ送信機能性、同期化機能性、およびＳＩＭＤ機能性を規定することができる。ならになお、該注釈標準は、ソースツーソース・コンパイラが、さまざまの異なる標的アーキテクチャに対する、データ送信、同期化、およびＳＩＭＤオペレーションを遂行するためのネティブ・コードを生成することを可能にする。この事例では、図６のブロック６０４に、通信プロトコルとしてＴＣＰを使い「ＨＯＳＴ」に連結している、Ｃｅｌｌ  ＰＰＵアーキテクチャを有する標的「ＰＡＲＥＮＴ」の定義が示されている。コード・ブロック定義の例６０４は、最大６つのスレッドを可能にする、ＣＨＩＬＤに対するコード・ブロック「ｔｅｓｔ」の開始と終了とを定義している。共有変数定義６０６は、各ＣＨＩＬＤスレッドに対するサイズ１２８のｖｆｌｏａｔ４配列を、最大で６ＣＨＩＬＤスレッド分まで予約する。
【００３１】
データ送信機能性ブロック６０８は、ＰＵＴ、ＧＥＴ、ＳＣＡＴＴＥＲ、およびＧＡＴＨＥＲオペレーションの例を含む。通常、ＳＣＡＴＴＥＲオペレーションは、「全スレッドへＰＵＴ」オペレーションと同等であるが、パフォーマンスが良い。同様に、ＧＡＴＨＥＲオペレーションは、「全スレッドからＧＥＴ」オペレーションと同等であるが、パフォーマンスが良い。本発明の一つの実施形態において、ＰＵＴ、ＧＥＴ、ＳＣＡＴＴＥＲ、およびＧＡＴＨＥＲオペレーションは、通信プロトコルを加えて規定することができるよう意図されている（例、「／／ＡＰＣＧ  ＰＵＴ（Ａ（プロトコル名））」）。さらに、データ送信および同期化は相互に結び付けられている。場合によっては、データ送信は同期化と組み合わされ（ブロッキング通信）、他の場合には、同期化は別個に実施される。同期化機能性ブロック６１０は、メッセージを送信し、全てのピアの実行が当該ＢＡＲＲＩＥＲ（バリア）に到達するまで待つ、ＷＡＩＴオペレーションの例を提示する。最後に、ＳＩＭＤ機能性ブロック６１２は、加算、減算、乗算、乗算と加算、平方根計算、並びに、暗黙のループを介する、単一のベクトル変数およびベクトル変数の配列のスプラット、に対するＳＩＭＤ（例、ベクトル）オペレーションの例を提示する。本発明の一つの実施形態において、ベクトル変数の配列に対するＳＩＭＤオペレーションは、該ベクトル変数中のデータ要素の全て（または一部）に亘る暗黙のループを設定できるように意図されている。さらに、ユーザは、「ｓｉｍｄ＿ａｄｄ（Ａ，Ｂ（パターン＿配列））」を規定することができ、前記のパターン＿配列は、これら配列のどの要素が処理されるかを示すパターン配列である。前述のオペレーションの全ては、所定の注釈標準において一般形式で表現される。一つの実施形態において、ソースツーソース・コンパイラは、これらのオペレーションを、出力ソース・コードにおいて適切なネティブ構文およびデータ型に変換する。
【００３２】
有利には、本発明の実施形態は、データ送信、同期化、およびＳＩＭＤオペレーションに対するマシン固有のコードを生成するよう構成されたソースツーソース・コンパイラを提供する。一つの実施形態において、該ソースツーソース・コンパイラは、所定の注釈標準を使って注釈付けられたソース・コードを受信する。該注釈標準は、ネティブ・コンパイラから独立しており、標的アーキテクチャの定義、コード・ブロックの定義、共用変数の定義と、データ送信機能性、同期化機能性、およびＳＩＭＤ機能性とをサポートする。当然ながら、本明細書に記載した実施形態は、例示のためのもので本発明の限定を意図してはおらず、これら以外の実施形態も幅広く考えられる。当業者は、例えば、ＣおよびＪａｖａなど他のプログラミング言語も本発明の実施形態によってサポートできることを認識するであろう。さらに、該所定注釈標準に関しては、データ送信、同期化、およびＳＩＭＤオペレーションの領域における他の構文、文法、およびオペレーションが幅広く対象とされる。最後に、本発明の実施形態は、任意の異機種並列アーキテクチャをサポートすることができる。
【００３３】
前述の説明は、本発明の実施形態を対象としているが、本発明の基本的範囲から逸脱することなく、他のまたは追加の本発明実施形態を考案することが可能であり、本発明の範囲は以下に記載の特許請求項により決定される。
【符号の説明】
【００３４】
１２０    コンピュータ１：ｘ８６アーキテクチャ
１２１    ｘ８６プロセッサ
１２２    メモリ
１２３    並列実行ファイル（ｘ８６）
１４０    コンピュータ２：セル・ブロードバンド・エンジン・アーキテクチャ
１４１    ＣＥＬＬ  ＰＰＥ
１４２    ＣＥＬＬ  ＳＰＥ
１４３    エレメント相互接続バス
１４４    メモリ
１４５    並列実行ファイル（ＣＥＬＬ  ＰＰＵ）
１４６    並列実行ファイル（ＣＥＬＬ  ＳＰＵ）
１４７    共有バッファ
１６０    ネットワーク
【図１】
2010186468.tif 000003
【図２】
2010186468.tif 000004
【図３】
2010186468.tif 000005
【図４】
2010186468.tif 000006
【図５】
2010186468.tif 000007
【図６】
2010186468.tif 000008