JP2002099426A - コンパイラプログラムを記憶した記憶媒体及びコンパイル装置 - Google Patents

コンパイラプログラムを記憶した記憶媒体及びコンパイル装置

Info

Publication number
JP2002099426A
JP2002099426A JP2000287988A JP2000287988A JP2002099426A JP 2002099426 A JP2002099426 A JP 2002099426A JP 2000287988 A JP2000287988 A JP 2000287988A JP 2000287988 A JP2000287988 A JP 2000287988A JP 2002099426 A JP2002099426 A JP 2002099426A
Authority
JP
Japan
Prior art keywords
thread
program
variable
array
compiler
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.)
Withdrawn
Application number
JP2000287988A
Other languages
English (en)
Inventor
Hiroko Sugiyama
浩子 杉山
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2000287988A priority Critical patent/JP2002099426A/ja
Publication of JP2002099426A publication Critical patent/JP2002099426A/ja
Withdrawn legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】並列実行が終了した後であっても、Threadpriv
ate変数として宣言された変数を保持することができる
コンパイラプログラムを記憶した記憶媒体及びコンパイ
ル装置を提供すること 【解決手段】本発明にかかるコンパイラ10を記憶した
記憶媒体は、複数のプロセッサPE32nを有し、共有
メモリ33を使用する並列コンピュータ3にて実行され
るプログラムに関し、ソースプログラム100からオブ
ジェクトプログラム200にコンパイルするコンパイラ
を記憶した記憶媒体であって、このコンパイラは、コン
パイルを行うコンピュータ1に、Threadprivate変数と
して宣言された変数について必要なスレッド数に応じた
データ領域を有する配列a〔0〕、a〔1〕、a〔2〕
・・・a〔n〕として記憶領域の確保を行うオブジェク
トプログラム200を発生させるものである。

Description

【発明の詳細な説明】
【0001】
【発明が属する技術分野】本発明は、コンパイラに関
し、より詳しくは、複数のプロセッサを有するコンピュ
ータで実行されうるプログラムをコンパイルするコンパ
イラに関する。
【0002】
【従来の技術】高性能コンピュータ分野は、ベクトルプ
ロセッサから、メモリを共有するマルチプロセッサへ移
行しつつある。ベンダは、メモリを共有するマルチプロ
セッサに対する並列プログラミングのために、種々の並
列化指示文を用意している。しかし、それらの並列化指
示文は、ベンダ独自の仕様であるため、移植性が乏しい
という問題点があった。かかる問題点を解決するため、
並列化指示文により並列プログラミングを行うための言
語仕様として、OpenMPが制定された。尚、OpenMPについ
ては、文献「OpenMP C and C++ Application Program I
nterface version1.0 - October 1998 Document Number
004-2229-001」(発行元:OpenMP Architecture Review
Board)に詳細に開示されている。そして、このOpenMPに
関連して、Fortran(フォートラン)言語、C言語、C
++言語等に対応するアプリケーションプログラミング
インターフェース(API)が提供されるようになっ
た。このOpenMPに従った並列指示文において記述するこ
とができる指示の1つとしてThreadprivate(スレッド
プライベート)がある。
【0003】ここで、このThreadprivateについて説明
する。Threadprivateは、例えば、ある変数に対して、T
hreadprivateで扱うことを指示することができる。この
場合の変数、即ちThreadprivateで扱われた変数のこと
を、この発明の詳細な説明においては特にThreadprivat
e変数と呼ぶ。並列化指示文において変数aをThreadpri
vateとして扱うように指示した場合、並列実行をしてい
るそれぞれのプロセスは、変数aをそれぞれのプロセス
が個別に持っているような動作を実行する。このように
並列実行をしているそれぞれのプロセスをスレッドと呼
ぶ。また、並列実行しているスレッドは、スレッド番号
によって識別することができる。そして、スレッド番号
が0のスレッドは、特にメインスレッドと呼ばれる。
【0004】Threadprivate指示を行うことにより、逐
次実行しているプロセスと、並列実行をしているメイン
スレッドとは、同じ変数aを用いることができる。並列
実行が複数回行われる場合には、並列実行時に各々のス
レッドにおいて使用された変数aは、次の並列実行時に
その値を用いることもあるから、並列実行が終了した後
でも各々のスレッド毎にその値を個別に保持する必要が
ある。
【0005】しかしながら、従来の技術においては、並
列実行において各々のスレッドが個別に使用している変
数は、逐次実行に移行する時点で消滅させてしまってい
た。そのため、次の並列実行を行う場合に、前回の変数
の値を使用することはできなかった。
【0006】この点について、さらに図5及び図6を用
いて詳細に説明する。図5は、並列実行と逐次実行を行
う並列コンピュータの処理を説明するための模式図であ
る。図6は、並列コンピュータにおける共有メモリの記
憶領域を示す模式図である。図5では、図の上部から下
部へと処理が実行されることを示している。この例で
は、スレッド0、スレッド1、スレッド2乃至スレッド
nにおいて、変数aが使用されているものとし、スレッ
ド0における変数をa0、スレッド1における変数をa
1、スレッド2における変数をa2、スレッドnにおけ
る変数をanとしている。
【0007】プログラムの処理が開始すると、メインス
レッドであるスレッド0において処理が実行される。こ
の処理を実行するにあたっては、図6に示されるよう
に、変数a0に関する値を格納するための記憶領域が、
共有メモリ中のスレッド0に対応する記憶領域中に確保
される。そして、並列実行に移行すると、スレッド0の
処理に並行して、スレッド1、スレッド2・・・スレッ
ドnの処理が実行される。これらの処理を実行するにあ
たっては、図6に示されるように、各スレッドに対応す
る変数a1、a2・・・anの記憶領域が、各々のスレ
ッドに対応する記憶領域中に確保される。ここで、各々
のスレッドに対応する記憶領域は、並列実行中にのみ割
り当てられるものである。そのため、並列実行が終了
し、逐次実行に移行すると、各々のスレッドに対応する
記憶領域に対する割り当ては、取り消され、その記憶領
域は、その後の処理において自由に使用できることにな
る。即ち、その記憶領域は開放される。このことから、
各スレッドの処理を実行した際に記憶された変数a1、
a2・・・・anの値は、並列実行が終了した時点で、
実質的に消滅することになる。従って、次の並列実行を
行う場合には、前回の並列実行における変数の値を用い
ることはできない。
【0008】尚、次の並列実行においては、再度、各々
のスレッドに対応する記憶領域が確保されるとともに、
それらの領域中に、変数a1、a2・・・・anの記憶
領域が確保される。しかしながら、これらの変数の値
も、並列実行が終了した時点で実質的に消滅する。
【0009】
【発明が解決しようとする課題】このように従来の技術
においては、並列実行が終了した後は、Threadprivate
変数として宣言された変数を保持することができないと
いう問題点があった。
【0010】よって、本発明の目的は、並列実行が終了
した後であっても、Threadprivate変数として宣言され
た変数を保持することができるコンパイラを記憶した記
憶媒体及びコンパイル装置を提供することである。
【0011】
【課題を解決するための手段】本発明の第1の態様にか
かる、コンパイラプログラム(以下、単にコンパイラ)
(例えば、本実施の形態におけるコンパイラ10)を記
憶した記憶媒体は、複数のプロセッサ(例えば、本実施
の形態におけるPE321・・・PE32n)を有し、
共有メモリ(例えば、本実施の形態における共有メモリ
33)を使用する並列コンピュータ(例えば、本実施の
形態における並列コンピュータ3)にて実行されるプロ
グラムに関し、ソースプログラム(例えば、本実施の形
態におけるソースプログラム100)からオブジェクト
プログラム(例えば、本実施の形態におけるオブジェク
トプログラム200)にコンパイルするコンパイラを記
憶した記憶媒体であって、このコンパイラは、コンパイ
ルを行うコンピュータに、スレッドプライベート(Thre
adprivate)変数として宣言された変数について、必要
なスレッド数に応じたデータ領域を有する配列(例え
ば、本実施の形態におけるa
〔0〕、a〔1〕、a
〔2〕・・・a〔n〕)として記憶領域の確保を行うオ
ブジェクトプログラムを発生させるものである。これに
より、複数回、並列実行が行われる場合に、スレッドプ
ライベート変数として宣言された変数を保持することが
できる。
【0012】さらに、コンパイラは、コンパイルを行う
コンピュータに、配列において、スレッドプライベート
変数として宣言された変数を扱うスレッドのスレッド番
号を、当該スレッドに割り当てられたデータ領域のイン
デクスとし、スレッド内で、スレッドプライベート変数
として宣言された変数に対するアクセスを実行するソー
スプログラムの記述に対応して、スレッド番号をインデ
クスとして前記配列をアクセスするオブジェクトプログ
ラムを発生させるものとしてもよい。これにより、確実
にスレッド毎に変数を保持することができ、また、所望
の変数に対してアクセスすることができる。
【0013】さらに、また、配列が並列コンピュータに
おけるプロセッサの数に応じたデータ領域を有するよう
にしてもよい。これにより、確保する必要がある最大の
データ領域を予め確保することができる。
【0014】本発明の第2の態様にかかる、コンパイル
装置は、複数のプロセッサを有し、共有メモリを使用す
る並列コンピュータにて実行されるプログラムに関し、
ソースプログラムからオブジェクトプログラムにコンパ
イルするコンパイル装置(例えば、本実施の形態におけ
るコンピュータ1)であって、ソースプログラムを解析
し、中間コードを生成するソースプログラム解析手段
(例えば、本実施の形態におけるソースプログラム解析
部11)と、このソースプログラム解析手段により生成
された中間コードの最適化を実施する最適化実施手段
(例えば、本実施の形態における最適化実施部13)
と、この最適化実施手段により最適化された中間コード
に基づき、オブジェクトプログラムを生成するコード生
成手段(例えば、本実施の形態におけるコード生成部1
5)とを備え、前述の最適化実施手段を、スレッドプラ
イベート変数として宣言された変数について、必要なス
レッド数に応じたデータ領域を有する配列として記憶領
域の確保を行う中間コードに変換するようにしたもので
ある。これにより、複数回、並列実行が行われる場合
に、スレッドプライベート変数として宣言された変数を
保持することができる。
【0015】さらに、上述の最適化実施手段を、配列に
おいてスレッドプライベート変数として宣言された変数
を扱うスレッドのスレッド番号を当該スレッドに割り当
てられたデータ領域のインデクスとし、スレッド内で、
スレッドプライベート変数として宣言された変数に対す
るアクセスを実行するソースプログラムの記述に対応し
て、スレッド番号をインデクスとして前記配列をアクセ
スする中間コードに変換するようにしてもよい。これに
より、確実にスレッド毎に変数を保持することができ、
また、所望の変数に対してアクセスすることができる。
【0016】
【発明の実施の形態】図1を用いて、本発明に関連する
コンピュータについて簡単に説明する。コンピュータ1
では、本発明に関連するコンパイラ10が実行されてい
る。コンパイラ10は、ユーザが作成したソースプログ
ラム100をコンパイルし、オブジェクトプログラム2
00を生成する。ソースプログラム100は、図1に示
されている並列コンピュータ3用に書かれたものであ
り、コンパイラ10は、並列コンピュータ3用にコンパ
イルを行う。故にオブジェクトプログラム200は、並
列コンピュータ3用のオブジェクトプログラムである。
尚、コンパイラ10は、例えば、コンパイラを記憶した
記憶媒体がコンピュータ1にインストールされることに
より構成される。ここで、コンパイラを記憶した記憶媒
体としては、例えば、フロッピー(登録商標)ディス
ク、CD−ROM、光磁気ディスク、半導体メモリ、ハ
ードディスク等が含まれる。そして、このコンパイラ
は、インタネット網、公衆回線網等の有線又は無線の通
信網を通じて伝送される場合もある。この場合に、コン
パイラは、搬送波により伝送される。
【0017】並列コンピュータ3は、バス31に接続さ
れた複数のプロセッサ・エレメントPE321、322
乃至32n及び共有メモリ33を備えている。コンピュ
ータ1のコンパイラ10にて生成されたオブジェクトプ
ログラム200は、プロセッサエレメントPE321乃
至PE32nにて実行される。また、各プロセッサエレ
メントPE321乃至PE32nは、オブジェクトプロ
グラム200の実行にあたり、共有メモリ33を使用
し、所定の情報を格納、消去及び読み出し処理を実行す
る。
【0018】コンパイラ10で行われる処理の概要を図
2に示す。最初にソースプログラム100がコンパイラ
10に入力される。そして、コンパイラ10のソースプ
ログラム解析部11は、入力されたソースプログラム1
00の解析を実行する。この解析は、字句解析、文解
析、構造解析を含む。ソースプログラム解析部11によ
る解析の終了後には、ソースプログラム100は、コン
パイラ10が使用する中間コードで表現されたプログラ
ムに変換されている。
【0019】コンパイラ10は、中間コードで表現され
たプログラムに対して、図示しない意味解析を実行し、
最適化実施部13において、最適化を行う。最適化実施
部13は、中間コードで表現されたプログラムより、Th
readprivateに指定された変数を認識し、配列用の領域
を共有メモリ33のメインスレッドに割り当てられた領
域中に確保するように当該中間コードを最適化する。具
体的な処理については、後述するが、この最適化処理に
あたっては、ライブラリ17のライブラリ関数が用いら
れる。この配列用の領域におけるデータ領域の数は、並
列コンピュータ3のプロセッサエレメント32nの数と
し、また領域の規模は、個々の変数の大きさに当該プロ
セッサエレメントの数を乗じた値に基づき定められる。
この配列は、スレッドごとにそのスレッド番号をインデ
クスとしてデータ領域を確保している。また、この配列
用の領域は、並列実行部分、逐次実行部分を問わず、プ
ログラムの処理が完了するまで、確保し続けられる。ス
レッド内において、Threadprivate変数として宣言され
た変数に対してアクセスを実行する旨の記述がソースプ
ログラム100中に含まれていた場合には、そのスレッ
ドのスレッド番号をインデクスとして配列にアクセスす
る。
【0020】コード生成部15は、この最適化処理後の
中間コードに基づき、並列コンピュータ3用のオブジェ
クトプログラムコードを生成する。最後に、コンパイラ
10は、オブジェクトプログラム200を出力する。
【0021】さらに図3及び図4を用いて詳細に説明す
る。これらの図3、図4では、コンパイラ10のおいて
発生されるオブジェクトプログラム200を説明するた
めに、当該オブジェクトプログラム200に基づき実行
される並列コンピュータ3の処理を説明する。図3は、
並列実行と逐次実行を行う並列コンピュータの処理を説
明するための模式図である。図4は、並列コンピュータ
における共有メモリの記憶領域を示す模式図である。図
3では、図の上部から下部へと処理が行われることを示
している。そして、縦方向のラインは、各々のプロセッ
サの処理を示している。縦方向のラインが1本の領域
は、特定の1つのプロセッサのみにより処理が逐次実行
されていることを示している。他方、縦方向のラインが
複数本の領域は、複数のプロセッサにより処理が並列実
行されていることを示している。この例では、スレッド
0、スレッド1、スレッド2乃至スレッドnにおいて、
変数aが使用されている場合を図示している。そして、
スレッド0における変数をa0、スレッド1における変
数をa1、スレッド2における変数をa2、スレッドn
における変数をanとしている。
【0022】また、図4のスレッド0の記憶領域中に設
けられたa
〔0〕と付した領域は、スレッド0、即ちメ
インスレッドが変数a0につき使用する領域である。a
〔1〕と付した領域は、スレッド1が変数a1につき使
用する領域、a〔2〕と付した領域は、スレッド2が変
数a2につき使用する領域、さらには、a〔n〕と付し
た領域は、スレッドnが変数anにつき使用する領域で
ある。
【0023】プログラムの処理を開始すると、まず、ソ
ースプログラム100中の指示に従い、メインスレッド
であるスレッド0において処理が実行される。この処理
を実行するにあたって、コンパイラ10は、図4に示さ
れるように、変数a0に関する値を格納するための記憶
領域を、共有メモリ33中のスレッド0に対応する記憶
領域中に確保するオブジェクトプログラム200を生成
する。そして、並列実行に移行すると、スレッド0の処
理に並行して、スレッド1、スレッド2・・・スレッド
nの処理が実行される。これらの処理を実行するにあた
って、コンパイラ10は、図6に示されるように、各ス
レッドに対応する変数a1、a2・・・anの記憶領域
a〔1〕、a〔2〕・・・a〔n〕が、共有メモリ33
中のスレッド0に対応する記憶領域中に配列として確保
するオブジェクトプログラム200を生成する。
【0024】この配列用のデータ領域を共有メモリ33
中に設定する場合には、ライブラリ17のライブラリ関
数が用いられる。ライブラリ17は、予めプログラムの
実行時に設定した並列コンピュータ3のプロセッサエレ
メント32nの数に関する情報を有している。最適化実
施部13は、ソースプログラム100中のThreadprivat
e指示を認識した場合、確保すべき配列中のデータ領域
の数をライブラリ17に問い合わせる。ライブラリ17
は、この問い合わせに応じて並列コンピュータ3のプロ
セッサエレメント32nの数を、当該配列中に設けるべ
きデータ領域の数として、最適化実施部13に回答す
る。このようにして、最適化実施部13は、配列用のデ
ータ領域の数を決定する。
【0025】共有メモリ33のスレッド0に対応する記
憶領域は、並列実行処理中のみならず、その後の逐次実
行処理、さらにはその後の並列実行処理等、プログラム
の処理が終了するまで、共有メモリ33に確保し続けら
れる。そのため、並列実行処理が終了した後であって
も、プログラム終了まで、その記憶領域は開放されるこ
とはない。このことから、各スレッドの処理を実行した
際に記憶された変数a1、a2・・・・anの値は、並
列実行が終了した後であっても、プログラム終了まで、
記憶される。従って、次の並列実行処理を行う場合に、
前回の並列実行処理における変数の値を用いることがで
きる。配列a〔1〕、a〔2〕・・・a〔n〕は、各々
スレッド番号をインデクスとして保有している。
【0026】また、各スレッドが処理の過程で変数を使
用する場合には、これらの配列a〔1〕、a〔2〕・・
・a〔n〕を使用する。例えば、スレッド0は、変数a
0については、a
〔0〕の領域を、スレッドnは、変数
anについてはa〔n〕の領域を各々使用する。そし
て、各スレッドがこれらの配列a〔1〕、a〔2〕・・
・a〔n〕を使用する場合は、自分のスレッド番号をイ
ンデクスとしてアクセスする。例えば、スレッド1は、
自分のスレッド番号である「1」をインデクスとしてa
〔1〕の領域をアクセスする。また、スレッド2は、自
分のスレッド番号である「2」をインデクスとしてa
〔2〕の領域をアクセスする。このような構成とするこ
とにより、スレッドnは常に配列のデータ領域a〔n〕
を変数anの記憶領域として使用することになる。そし
て、スレッドn以外の他のスレッドからは、配列のデー
タ領域a〔n〕へアクセスすることはない。
【0027】次の並列実行においては、スレッド0に対
応する記憶領域に設けられた配列のデータ領域a
〔1〕、a〔2〕・・・a〔n〕より、各々必要に応じ
て変数a1、a2・・・anの値が読み出される。さら
に並列実行の結果、当該変数a1、a2・・・anの値
が修正された場合には、修正後の内容が配列のデータ領
域a〔1〕、a〔2〕・・・a〔n〕中に記憶される。
【0028】次に、OpenMPに従った並列指示文の記述例
を表1に示す。なお、左端の行番号及び「並列実行部そ
の1」「並列実行部その2」の記載は、実施例の説明の
ためだけに付したものである。
【0029】
【表1】 01 int a; 02 #pragma omp threadprivate(a) 03 main(){ 04 #pragma omp parallel 05 { a = omp_get_thread_num(); } ・・・ 並列実行部その1 06 #pragma omp parallel 07 { printf("%d\n",a); } ・・・ 並列実行部その2 08 }
【0030】第01行は、aは整数型の変数であるとい
う宣言をしている。第02行は、aはThreadprivate変数
であるという宣言をしている。第03行は、プログラム
の開始を示している。この場合は、スレッド0の開始を
意味している。第04行は、直後の{}で囲まれている部
分、即ち第05行を並列実行するという指示を示してい
る。第05行は、aに自分のスレッド番号を入れるとい
う実行文である。ここで、第05行が実行される直前に
並列実行するための複数のスレッドが生まれ、同じく第
05行が実行された直後に並列実行するための複数のス
レッドが消える。第06行は、直後の{}で囲まれている
部分、即ち第07行を並列実行するという指示を示して
いる。第07行は、aの値を表示するという実行文であ
る。ここで、第07行が実行される直前に並列実行する
ための複数のスレッドが生まれ、同じく第07行が実行
された直後に並列実行するための複数のスレッドが消え
る。第8行は、プログラムの終了を示している。この場
合は、スレッド0の終了を意味している。
【0031】尚、上述の例では、Threadprivate変数と
宣言された変数に関しては、配列中に、並列コンピュー
タが有する全プロセッサの数のデータ領域を確保するこ
ととしたが、必ずしも、全プロセッサの数のデータ領域
を確保する必要はない。例えば、並列化処理において、
並列コンピュータのプロセッサの一部のみ使用すること
が明らかな場合には、当該一部のプロセッサの数のデー
タ領域を確保すればよい。また、本発明に係るコンパイ
ラで生成されたオブジェクトプログラムは複数のプロセ
ッサを有する並列コンピュータのみならず単一のプロセ
ッサを有するコンピュータでも実行可能である。
【0032】(付記1)複数のプロセッサを有し、共有
メモリを使用する並列コンピュータにて実行されうるプ
ログラムに関し、ソースプログラムからオブジェクトプ
ログラムにコンパイルするコンパイラプログラムを記憶
した記憶媒体であって、前記コンパイラプログラムはコ
ンピュータに、スレッドプライベート変数として宣言さ
れた変数について、必要なスレッド数に応じたデータ領
域を有する配列として記憶領域の確保を行うオブジェク
トプログラムを発生させることを特徴とするコンパイラ
プログラムを記憶した記憶媒体。
【0033】(付記2)前記コンパイラプログラムはコ
ンピュータに、前記配列において、スレッドプライベー
ト変数として宣言された変数を扱うスレッドのスレッド
番号を、当該スレッドに割り当てられたデータ領域のイ
ンデクスとし、スレッド内で、スレッドプライベート変
数として宣言された変数に対するアクセスを実行するソ
ースプログラムの記述に対応して、スレッド番号をイン
デクスとして前記配列をアクセスするオブジェクトプロ
グラムを発生させることを特徴とする付記1記載のコン
パイラプログラムを記憶した記憶媒体。
【0034】(付記3)前記配列は、前記並列コンピュ
ータにおけるプロセッサの数に応じたデータ領域を有す
ることを特徴とする付記1記載のコンパイラプログラム
を記憶した記憶媒体。
【0035】(付記4)前記配列の記憶領域は、メイン
スレッドに割り当てられた記憶領域中に確保されること
を特徴とする付記1記載のコンパイラプログラムを記憶
した記憶媒体。
【0036】(付記5)複数のプロセッサを有し、共有
メモリを使用する並列コンピュータにて実行されうるプ
ログラムに関し、ソースプログラムからオブジェクトプ
ログラムにコンパイルするコンパイル装置であって、ソ
ースプログラムを解析し、中間コードを生成するソース
プログラム解析手段と、前記ソースプログラム解析手段
により生成された中間コードの最適化を実施する最適化
実施手段と、前記最適化実施手段により最適化された中
間コードに基づき、オブジェクトプログラムを生成する
コード生成手段とを備え、前記最適化実施手段は、スレ
ッドプライベート変数として宣言された変数について、
必要なスレッド数に応じたデータ領域を有する配列とし
て記憶領域の確保を行う中間コードに変換することを特
徴とするコンパイル装置。
【0037】(付記6)前記最適化実施手段は、前記配
列において、スレッドプライベート変数として宣言され
た変数を扱うスレッドのスレッド番号を、当該スレッド
に割り当てられたデータ領域のインデクスとし、スレッ
ド内で、スレッドプライベート変数として宣言された変
数に対するアクセスを実行するソースプログラムの記述
に対応して、スレッド番号をインデクスとして前記配列
をアクセスする中間コードに変換することを特徴とする
付記5記載のコンパイル装置。
【0038】(付記7)前記配列は、前記並列コンピュ
ータにおけるプロセッサの数に応じたデータ領域を有す
ることを特徴とする付記5記載のコンパイル装置。
【0039】(付記8)前記配列の記憶領域は、メイン
スレッドに割り当てられた記憶領域中に確保されること
を特徴とする付記5記載のコンパイル装置。
【0040】(付記9)前記コンパイル装置は、さら
に、予め設定された前記プロセッサの数に基づいて前記
配列におけるデータ領域の数を発生させるライブラリ関
数を有するライブラリを有し、当該ライブラリは、前記
最適化実施手段からソースコード中のスレッドプライベ
ート指示に応じて発生された配列中のデータ領域の数に
関する要求が通知された場合に、当該ライブラリ関数に
より発生したデータ領域の数を当該最適化実施手段に対
し通知することを特徴とする付記5記載のコンパイル装
置。
【0041】(付記10)複数のプロセッサを有し、共
有メモリを使用する並列コンピュータにて実行されうる
プログラムに関し、ソースプログラムからオブジェクト
プログラムにコンパイルするコンパイル方法であって、
スレッドプライベート変数として宣言された変数を認識
する第1のステップと、第1のステップにおいて認識さ
れた変数について必要なスレッド数に応じたデータ領域
を有する配列として記憶領域の確保するオブジェクトプ
ログラムを発生させる第2のステップを有するコンパイ
ル方法。
【0042】
【発明の効果】本発明により、並列実行が終了した後で
あっても、スレッドプライベート変数として宣言された
変数を保持することができるコンパイラを記憶した記憶
媒体及びコンパイル装置を提供することができる。
【図面の簡単な説明】
【図1】本発明に関係するコンピュータを説明するため
のブロック図である。
【図2】本発明にかかるコンパイラの構成を示すブロッ
ク図である。
【図3】本発明にかかる並列実行と逐次実行を行う並列
コンピュータの処理を説明するための模式図である。
【図4】本発明にかかる並列コンピュータの共有メモリ
の記憶領域を示す模式図である。
【図5】従来例にかかる並列実行と逐次実行を行う並列
コンピュータの処理を説明するための模式図である。
【図6】従来例にかかる並列コンピュータの共有メモリ
の記憶領域を示す模式図である。
【符号の説明】
1 コンピュータ 3 並列コンピュータ 10 コン
パイル装置 11 ソースプログラム解析部 13 最適化実施部
15 コード生成部 17 ライブラリ 100 ソースプログラム 200 オブジェクトプログラム

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】複数のプロセッサを有し、共有メモリを使
    用する並列コンピュータにて実行されうるプログラムに
    関し、ソースプログラムからオブジェクトプログラムに
    コンパイルするコンパイラプログラムを記憶した記憶媒
    体であって、 前記コンパイラプログラムはコンピュータに、 スレッドプライベート変数として宣言された変数につい
    て、必要なスレッド数に応じたデータ領域を有する配列
    として記憶領域の確保を行うオブジェクトプログラムを
    発生させることを特徴とするコンパイラプログラムを記
    憶した記憶媒体。
  2. 【請求項2】前記コンパイラプログラムはコンピュータ
    に、 前記配列において、スレッドプライベート変数として宣
    言された変数を扱うスレッドのスレッド番号を、当該ス
    レッドに割り当てられたデータ領域のインデクスとし、 スレッド内で、スレッドプライベート変数として宣言さ
    れた変数に対するアクセスを実行するソースプログラム
    の記述に対応して、スレッド番号をインデクスとして前
    記配列をアクセスするオブジェクトプログラムを発生さ
    せることを特徴とする請求項1記載のコンパイラプログ
    ラムを記憶した記憶媒体。
  3. 【請求項3】前記配列は、前記並列コンピュータにおけ
    るプロセッサの数に応じたデータ領域を有することを特
    徴とする請求項1記載のコンパイラプログラムを記憶し
    た記憶媒体。
  4. 【請求項4】複数のプロセッサを有し、共有メモリを使
    用する並列コンピュータにて実行されうるプログラムに
    関し、ソースプログラムからオブジェクトプログラムに
    コンパイルするコンパイル装置であって、 ソースプログラムを解析し、中間コードを生成するソー
    スプログラム解析手段と、 前記ソースプログラム解析手段により生成された中間コ
    ードの最適化を実施する最適化実施手段と、 前記最適化実施手段により最適化された中間コードに基
    づき、オブジェクトプログラムを生成するコード生成手
    段とを備え、 前記最適化実施手段は、スレッドプライベート変数とし
    て宣言された変数について、必要なスレッド数に応じた
    データ領域を有する配列として記憶領域の確保を行う中
    間コードに変換することを特徴とするコンパイル装置。
  5. 【請求項5】前記最適化実施手段は、 前記配列において、スレッドプライベート変数として宣
    言された変数を扱うスレッドのスレッド番号を、当該ス
    レッドに割り当てられたデータ領域のインデクスとし、 スレッド内で、スレッドプライベート変数として宣言さ
    れた変数に対するアクセスを実行するソースプログラム
    の記述に対応して、スレッド番号をインデクスとして前
    記配列をアクセスする中間コードに変換することを特徴
    とする請求項4記載のコンパイル装置。
JP2000287988A 2000-09-22 2000-09-22 コンパイラプログラムを記憶した記憶媒体及びコンパイル装置 Withdrawn JP2002099426A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000287988A JP2002099426A (ja) 2000-09-22 2000-09-22 コンパイラプログラムを記憶した記憶媒体及びコンパイル装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000287988A JP2002099426A (ja) 2000-09-22 2000-09-22 コンパイラプログラムを記憶した記憶媒体及びコンパイル装置

Publications (1)

Publication Number Publication Date
JP2002099426A true JP2002099426A (ja) 2002-04-05

Family

ID=18771648

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000287988A Withdrawn JP2002099426A (ja) 2000-09-22 2000-09-22 コンパイラプログラムを記憶した記憶媒体及びコンパイル装置

Country Status (1)

Country Link
JP (1) JP2002099426A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7526637B2 (en) 2005-12-06 2009-04-28 Electronics And Telecommunications Research Institute Adaptive execution method for multithreaded processor-based parallel system
JP2016224882A (ja) * 2015-06-04 2016-12-28 富士通株式会社 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム
US9569273B2 (en) 2014-08-14 2017-02-14 Fujitsu Limited Apparatus and method for controlling execution of a single thread by multiple processors

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7526637B2 (en) 2005-12-06 2009-04-28 Electronics And Telecommunications Research Institute Adaptive execution method for multithreaded processor-based parallel system
US9569273B2 (en) 2014-08-14 2017-02-14 Fujitsu Limited Apparatus and method for controlling execution of a single thread by multiple processors
JP2016224882A (ja) * 2015-06-04 2016-12-28 富士通株式会社 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム

Similar Documents

Publication Publication Date Title
US6078744A (en) Method and apparatus for improving compiler performance during subsequent compilations of a source program
EP0847009A2 (en) Method and apparatus for automatically generating software programs
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
Remmelg et al. Performance portable GPU code generation for matrix multiplication
JP2010204979A (ja) コンパイル方法及びコンパイラ
US8701098B2 (en) Leveraging multicore systems when compiling procedures
Katel et al. High performance GPU code generation for matrix-matrix multiplication using MLIR: some early results
JP2002099426A (ja) コンパイラプログラムを記憶した記憶媒体及びコンパイル装置
JP2004259007A (ja) コンパイラ装置、コンパイラプログラム、及び記録媒体
Zhu et al. Locality analysis for parallel C programs
Min et al. Portable compilers for OpenMP
Yang et al. O2render: An opencl-to-renderscript translator for porting across various gpus or cpus
JP3683281B2 (ja) メモリアクセスの高速化処理装置および方法
Liu et al. Improving the performance of OpenMP by array privatization
Harrison et al. Tools for multiple-CPU environments
CN113721899A (zh) 面向gpdsp的轻量级高效汇编代码编程方法及系统
Šinkarovs et al. Type‐driven data layouts for improved vectorisation
Fumero et al. Using compiler snippets to exploit parallelism on heterogeneous hardware: a Java reduction case study
Brezany et al. SVM support in the Vienna fortran compilation system
Arenaz et al. The technological roadmap of parallware and its alignment with the openpower ecosystem
Lossing et al. Automatic code generation of distributed parallel tasks
Aiken et al. A development environment for horizontal microcode programs
WO2002003194A2 (en) Multi-entry threading method and apparatus for automatic and directive-guided parallelization of a source program
Babb et al. Retargetable high performance Fortran compiler challenges
Fahringer et al. Buffer-safe and cost-driven communication optimization

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20071204