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

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

Info

Publication number
JP2001142719A
JP2001142719A JP31957099A JP31957099A JP2001142719A JP 2001142719 A JP2001142719 A JP 2001142719A JP 31957099 A JP31957099 A JP 31957099A JP 31957099 A JP31957099 A JP 31957099A JP 2001142719 A JP2001142719 A JP 2001142719A
Authority
JP
Japan
Prior art keywords
code
program
common block
interface area
common
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.)
Granted
Application number
JP31957099A
Other languages
English (en)
Other versions
JP3608993B2 (ja
Inventor
Yuji Tsujimori
誘ニ 辻森
Hitoshi Owaki
斉 大脇
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 JP31957099A priority Critical patent/JP3608993B2/ja
Priority to US09/625,891 priority patent/US7039905B1/en
Publication of JP2001142719A publication Critical patent/JP2001142719A/ja
Application granted granted Critical
Publication of JP3608993B2 publication Critical patent/JP3608993B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection

Landscapes

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

Abstract

(57)【要約】 【課題】 並列処理においてインターフェース領域を使
用した手続呼出しを実現する。 【解決手段】 プログラム実行時に、スレッド単位毎に
動的に確保された共通ブロック(インターフェース領
域)のベース番地(先頭番地)を確定するライブラリ呼
出しを生成し(S8)、ソースプログラム中の共通ブロ
ックの変数等に対する引用を、ライブラリ呼出しを実行
することで確定したベース番地を使用して引用する形式
に変換する(S12)。即ち、動的に確保された共通ブ
ロック領域は、実際に確保されるまでその番地が確定し
ないので、ライブラリ呼出しによりベース番地を確定
し、確定したベース番地に基づいて共通ブロックをアク
セスするようにする。従って、複数のスレッドが並列処
理されるときであっても、各スレッドにおけるインター
フェース領域が独立しているため干渉することがなく、
並列処理におけるインターフェース領域を使用した手続
呼出しが実現される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソースプログラム
をコンパイルするコンパイラ技術に関し、特に、並列処
理においてインターフェース領域を使用した手続呼出し
を実現する技術に関する。
【0002】
【従来の技術】従来から、プログラムにおける手続間の
インターフェースをとる方法として、引数を渡す方法、
インターフェース領域を使用する方法、外部ファイルを
使用する方法がある。なお、「インタフェース領域」と
は、例えば、FORTRANにおける「COMMON文」やC,C++に
おける「extern文」を使用して割り当てられた共通ブロ
ック領域や外部変数領域のことをいう。
【0003】ここで、具体例として、FORTRANにおける
「COMMON文」を使用して、メインルーチンとサブルーチ
ンとの間のインターフェースをとる場合を考察する。メ
インルーチンでCOMMON宣言がされている共通ブロック名
が、サブルーチンでも同様に宣言されていると、メイン
ルーチンで設定された値がサブルーチンで参照できた
り、サブルーチンで設定された値がメインルーチンで参
照することができるようになる。
【0004】
【発明が解決しようとする課題】しかし、従来の「COMM
ON文」は、逐次処理で実行されることを前提としていた
ため、実行可能プログラム単位毎に1つの共通領域が静
的に割り当てられていた。このため、このまま「COMMON
文」を並列処理に適用すると、次のような不具合が発生
してしまうおそれがあった。
【0005】即ち、メインルーチンから2つのサブルー
チンを呼出し、夫々のサブルーチンを異なったCPUで同
時に並列処理し、サブルーチンで値を更新している場合
には、各サブルーチンの実行タイミングの差によって、
インタフェース領域に保持されている値が不定になるこ
とがある。この場合、入力データが同一であっても、演
算結果が同一になるとは限らず、プログラムの信頼性が
低く、並列処理では「COMMON文」が使用できなかった。
【0006】また、C,C++における「extern文」であっ
ても、同様な問題が生じていた。そこで、本発明は以上
のような従来の問題点に鑑み、スレッド単位毎に1つの
共通領域を動的に確保することにより、並列処理におい
てインターフェース領域を使用した手続呼出しを実現し
たコンパイラ技術を提供することを目的とする。
【0007】
【課題を解決するための手段】このため、請求項1記載
の発明は、複数のスレッドを並列処理させるときに、ス
レッド単位毎に動的に確保されたインターフェース領域
を使用して、プログラムにおける手続呼出しを行なうコ
ードを生成するコンパイラ装置であることを特徴とす
る。
【0008】ここで、「インターフェース領域」とは、
例えば、FORTRANにおける「COMMON文」やC,C++における
「extern文」を使用して割り当てられた共通ブロック領
域や外部変数領域のことをいう。これらの共通ブロック
領域や外部変数領域を使用して、プログラムにおける手
続間のインターフェースがとられる。
【0009】かかる構成によれば、プログラム実行時
に、スレッド単位毎に動的に確保されたインターフェー
ス領域を使用して、プログラムにおける手続呼出しが行
なわれる。このため、複数のスレッドが並列処理される
ときであっても、各スレッドにおけるインターフェース
領域が独立しているため干渉することがなく、従来技術
では不可能であった並列処理におけるインターフェース
領域を使用した手続呼出しが実現される。
【0010】請求項2記載の発明は、スレッド単位毎に
動的に確保されたインターフェース領域の先頭番地を確
定するコードを生成するコード生成手段と、ソースプロ
グラム中のインターフェース領域に対する引用を、該コ
ード生成手段により生成されたコードを実行することで
確定した先頭番地を使用して引用するコードに変換する
コード変換手段と、を含んでコンパイラ装置を構成した
ことを特徴とする。
【0011】かかる構成によれば、スレッド単位毎に動
的に確保されたインターフェース領域の先頭番地を確定
するコードが生成され、ソースプログラム中のインター
フェース領域に対する引用が、生成されたコードを実行
することで確定した先頭番地を使用して引用するコード
に変換される。従って、複数のスレッドが並列処理され
るときであっても、各スレッドにおけるインターフェー
ス領域が独立しているため干渉することがなく、従来技
術では不可能であった並列処理におけるインターフェー
ス領域を使用した手続呼出しが実現される。
【0012】請求項3記載の発明は、前記コード生成手
段は、スレッド単位毎に動的に確保されたインターフェ
ース領域の先頭番地を確定するライブラリの呼出しコー
ドを生成する構成であることを特徴とする。
【0013】ここで、「ライブラリ」とは、標準化され
たルーチン及びサブルーチンの集まりであって、プログ
ラム実行時に動的に呼出される動的ライブラリ(Dynami
c Linked Library)と、リンカによってオブジェクトプ
ログラムと結合される静的ライブラリ(Static Librar
y)とがある。
【0014】かかる構成によれば、スレッド単位毎に動
的に確保されたインターフェース領域の先頭番地は、ラ
イブラリを呼出すコードを実行することで確定される。
従って、ソースプログラム中にインターフェース領域の
先頭番地を確定するための処理を記述する必要はなく、
プログラム構造が簡単になる。
【0015】請求項4記載の発明は、前記コード生成手
段は、ユーザの指定に基づいて、インターフェース領域
の先頭番地を確定するコードを生成する構成であること
を特徴とする。
【0016】かかる構成によれば、ユーザが特定の処理
について並列処理を行ないたくない場合には、その旨を
指定することで、その処理部分に関しては並列化のため
のコードが生成されなくなる。従って、ユーザの考えに
即した、柔軟なプログラム構造が提供される。
【0017】請求項5記載の発明は、複数のスレッドを
並列処理させるときに、スレッド単位毎に動的に確保さ
れたインターフェース領域を使用して、プログラムにお
ける手続呼出しを行なうコードを生成する機能を実現す
るためのコンパイラプログラムを記録媒体に記録したこ
とを特徴とする。
【0018】ここで、「記録媒体」とは、各種情報を確
実に記録でき、かつ、必要に応じて確実に取り出し可能
なものをいい、磁気テープ,磁気ディスク,磁気ドラ
ム,ICカード,CD−ROM等の可搬記録媒体が該当
する。
【0019】かかる構成によれば、プログラム実行時
に、スレッド単位毎に動的に確保されたインターフェー
ス領域を使用して、プログラムにおける手続呼出しを行
なうコードを生成する機能を実現するコンパイラプログ
ラムが記録媒体に記録される。従って、かかるコンパイ
ラプログラムを記録した記録媒体があれば、一般的なコ
ンピュータシステムを利用して、本発明に係るコンパイ
ラ装置を容易に構築することが可能となる。
【0020】請求項6記載の発明は、スレッド単位毎に
動的に確保されたインターフェース領域の先頭番地を確
定するコードを生成するコード生成機能と、ソースプロ
グラム中のインターフェース領域に対する引用を、該コ
ード生成機能により生成されたコードを実行することで
確定した先頭番地を使用して引用するコードに変換する
コード変換機能と、を実現するためのコンパイラプログ
ラムを記録媒体に記録したことを特徴とする。
【0021】かかる構成によれば、コード生成機能と、
コード変換機能と、を実現するためのコンパイラプログ
ラムが記録媒体に記録される。従って、かかるコンパイ
ラプログラムを記録した記録媒体があれば、一般的なコ
ンピュータシステムを利用して、本発明に係るコンパイ
ラ装置を容易に構築することが可能となる。
【0022】請求項7記載の発明は、前記コード生成機
能は、スレッド単位毎に動的に確保されたインターフェ
ース領域の先頭番地を確定するライブラリの呼出しコー
ドを生成する構成であることを特徴とする。
【0023】かかる構成によれば、スレッド単位毎に動
的に確保されたインターフェース領域の先頭番地は、ラ
イブラリを呼出すコードを実行することで確定される。
従って、ソースプログラム中にインターフェース領域の
先頭番地を確定するための処理を記述する必要はなく、
プログラム構造が簡単になる。
【0024】請求項8記載の発明は、前記コード生成機
能は、ユーザの指定に基づいて、インターフェース領域
の先頭番地を確定するコードを生成する構成であること
を特徴とする。
【0025】かかる構成によれば、ユーザが特定の処理
について並列処理を行ないたくない場合には、その旨を
指定することで、その処理部分に関しては並列化のため
のコードが生成されなくなる。従って、ユーザの考えに
即した、柔軟なプログラム構造が提供される。
【0026】
【発明の実施の形態】以下、添付された図面を参照して
本発明を詳述する。先ず、実施の形態を説明する前に、
本発明の内容の理解を容易にすることを目的として、従
来技術の問題点及び本発明の概要を説明する。
【0027】図9は、FORTRAN上でOpenMPを使用するこ
とを前提として、複数の手続(サブルーチンXAXIS,YAX
IS)を並列処理させるための概要を示す。即ち、図9
(A)に示すような逐次処理のソースプログラムを、並
列処理に変更すべく、図9(B)に示すようなソースプ
ログラムに書き換える。ここで、ソースプログラム中の
「!$OMP」は、コンパイラオプションの設定により、そ
の行を有効/無効にすることを制御できる文である。ま
た、「PARALLEL SECTIONS」と「END PARALLEL SECTION
S」とで囲まれた範囲に記述された「SECTION」により、
並列処理であることが指定される。
【0028】そして、かかるソースプログラムを実行す
ると、図9(C)に示すように、CPU1及びCPU2におい
て、メインルーチンからサブルーチンXAXIS及びYAXISが
夫々コールされる。そして、メインルーチンとサブルー
チンXAXIS及びYAXISとの間のインターフェースとして、
COMMON文によりプログラム単位毎に静的領域に1つだけ
確保された変数aが使用される場合を考える。この場
合、変数aは、プログラム単位毎に静的領域に1つだけ
確保される。従って、サブルーチンXAXIS及びYAXISは、
共通した静的領域に保持された変数aを使用することと
なる。このため、サブルーチンXAXISとYAXISとにおい
て、変数aの参照後に変数aの値の更新がある場合、CP
Uの処理タイミングによっては、一方のサブルーチンで
変数aに設定された数値を処理する前に、他方のサブル
ーチンでその数値が更新されることがあり、夫々のサブ
ルーチンにおける演算結果がユーザの予想した値と異な
ってしまうおそれがある。従って、従来技術では、各サ
ブルーチンで処理された演算結果が不定となってしま
い、並列処理に対応することができなかったのである。
【0029】このため、本願発明では、COMMON文を用い
て確保する領域をスレッド単位毎に動的に1つ確保、即
ち、スレッド単位毎にプライベート化するようにして、
並列処理に対応可能にするようにした。
【0030】次に、本発明に係るコンパイラ装置(以下
「コンパイラ装置」という)の構成について、図1を参
照しつつ説明する。コンパイラ装置10は、ソース解析
部12と、最適化部14と、コード生成部16と、を含
んで構成される。ソース解析部12は、ソースプログラ
ムを解析して中間言語を生成する機能を提供し、後述す
る処理により並列処理への対応を実現する。最適化部1
4は、ソース解析部12により生成された中間言語に対
して、例えば、処理時間を短縮するような最適化を行う
機能を提供する。コード生成部16は、最適化部14に
より最適化された中間言語を読み込み、アセンブラコー
ドまたはオブジェクトコードを出力する機能を提供す
る。ここで、コード生成部16によりアセンブラコード
が出力された場合には、アセンブラコンパイラによりア
センブラコードをオブジェクトコードにコンパイルする
必要がある。そして、コード生成部16又はアセンブラ
コンパイラにより出力又はコンパイルされたオブジェク
トコードは、図示しないリンカによって結合され、実行
可能プログラムが完成する。
【0031】なお、コンパイラ装置10は、少なくとも
メモリと中央処理装置(CPU)とを備えたコンピュー
タ上に構築され、メモリにロードされたプログラムに従
ってコンパイル処理が行なわれる。
【0032】図2及び図3は、コンパイラ装置10のソ
ース解析部12において行なわれるコンパイル処理のフ
ローチャートを示す。ステップ1(図では「S1」と略
記する。以下同様)では、COMMON文により確保された共
通ブロックをスレッド単位でプライベート化すること
が、例えば、コンパイルオプションにより指定されてい
るか否かが判定される。そして、スレッド単位でプライ
ベート化することが指定されていればステップ2へと進
み(Yes)、指定されていなければ処理を終了する
(No)。
【0033】ステップ2では、ソースプログラムから、
COMMON文により宣言された共通ブロック名が取り出され
る。ここで、ソースプログラムから共通ブロック名が取
り出せなかった場合、具体的には、共通ブロック名の取
り出しが完了した場合には、その旨を示す識別子等が取
り出される。
【0034】ステップ3では、取り出された共通ブロッ
ク名に基づいて、共通ブロック名の取り出しが完了した
か否かが判定される。そして、共通ブロック名の取り出
しが完了したならばステップ7へと進み(Yes)、完
了していなければステップ4へと進む(No)。
【0035】ステップ4では、取り出された共通ブロッ
ク名により特定される共通ブロックに対して、スレッド
単位でプライベート化する指定があるか否かが判定され
る。そして、プライベート化する指定があればステップ
5へと進み(Yes)、指定がなければステップ2へと
戻る(No)。
【0036】ステップ5では、例えば、DATA文の有無に
基づいて、共通ブロックに対して初期値の設定があるか
否かが判定される。そして、初期値の設定があればステ
ップ6へと進み(Yes)、初期値の設定がなければス
テップ2へと戻る(No)。
【0037】ステップ6では、ユーザが指定した共通ブ
ロック名に対して、実行時に初期値があったか否かを判
定するための識別子(例えば、__)が付加され、識別
子が付加された共通ブロック名で共通ブロックが生成さ
れる。また、共通ブロックの変数等(以下「共通ブロッ
ク要素」という)に対して、初期値があったことを示す
識別子(例えば、'###-Include initialized values-##
#')が設定される。その後、ステップ2へと戻る。
【0038】ここで、ソースプログラムが、 common / commom#block#name#1 / var1 common / common#block#name#2 / var2 data var2 /10/ である場合には、ステップ6の処理により、 common / common#block#name#1 / var1 common / common#block#name#2 / var2 data var2 /10/ common / ##common#block#name#1 / var1#generate common / ##common#block#name#2 / var2#generate character*35 var1#generate, var2#generate data var2#generate /'###-Include initialized valu
es-###'/ のようなコードが生成される。
【0039】以上説明したステップ1〜ステップ6の処
理によれば、プライベート化指定があって初期値の設定
がある共通ブロック名に対して、初期値があることを示
す識別子が付加される。また、その共通ブロック要素に
対して、初期値が設定されていることを示す識別子が設
定される。このようにすれば、後述する実行時の処理に
よって、動的に確保された共通ブロックに対して動的な
初期値の設定が可能となる。
【0040】ステップ7では、ソースプログラム中に、
スレッド単位でプライベート化する共通ブロックが1つ
でも存在しているか否かが判定される。そして、プライ
ベート化する共通ブロックが存在していればステップ8
へと進み(Yes)、存在していなければ処理を終了す
る(No)。
【0041】ステップ8では、ソースプログラムの入口
に、そのソースプログラムで引用される共通ブロックの
ベース番地(先頭番地)を確定するライブラリ呼出しが
生成される。即ち、共通ブロックは、スレッド単位毎に
動的に確保されるため、ライブラリから返却されたベー
ス番地を基に変数等をアクセスするように、コードが変
換されるのである。また、ライブラリ呼出しは、例え
ば、次のようなものである。
【0042】 Call Fortran#lib('common#block#name#1', length('common#block#name#1'), var1#generate, &var1, size(var1), &base#of#common#block#name#1) ここで、「common#block#name#1」は共通ブロック名、
「length('common#block#name#1')」は共通ブロック名
の長さ、「var1#generate」は初期値フラグ、「&var1」
は共通ブロックの先頭番地、「size(var1)」は共通ブロ
ックの大きさ、「&base#of#common#block#name#1」はラ
イブラリから返却される共通ブロックをアクセスするた
めのベース番地である。
【0043】なお、ステップ8の処理が、インターフェ
ース領域の先頭番地を確定するコード生成手段及びコー
ド生成機能に該当する。ステップ9では、ソースプログ
ラムから、実行文中の共通ブロック要素の引用が取り出
される。
【0044】ステップ10では、取り出された共通ブロ
ック要素がソースプログラムの最後の引用であるか否か
が判定される。そして、その共通ブロック要素が最後の
引用であれば処理を終了し(Yes)、最後のものでな
ければステップ11へと進む(No)。
【0045】ステップ11では、取り出された共通ブロ
ック要素が、スレッド単位でプライベート化された共通
ブロック要素であるか否かが判定される。そして、プラ
イベート化された共通ブロック要素であればステップ1
2へと進み(Yes)、プライベート化された共通ブロ
ック要素でなければステップ9へと戻る(No)。
【0046】ステップ12では、共通ブロック要素の引
用が、ライブラリによって確定されたベース番地を使用
して引用する形式に変換される。ベース番地を使用した
共通ブロック要素の引用は、例えば、ユーザプログラム
が、 COMMON /COM/COM#VAR COM#VAR = 1 となっていた場合、これをライブラリ呼出しを使用して call Fortran#lib(……, &base) base->VAR = 1 というように変換される。ここで、「->」はポインタ演
算を示す。
【0047】なお、ステップ12の処理が、コード変換
手段及びコード変換機能に該当する。ステップ13で
は、共通ブロック要素の参照、例えば、X = VAR のよう
な実行文があったか否かが判定される。そして、共通ブ
ロック要素の値の参照があればステップ14へと進み
(Yes)、共通ブロック要素の値の参照でなければス
テップ9へと戻る(No)。
【0048】ステップ14では、未定義変数引用の検査
のためのライブラリ呼出しが生成される。即ち、ライブ
ラリにより未定義な値の引用かどうかが検査され、プロ
グラム実行時に未定義変数の引用が行なわれると、エラ
ーメッセージが表示されるようになる。その後、ステッ
プ9へと戻る。
【0049】以上説明したステップ7〜ステップ14の
処理によれば、COMMON文によってプログラム実行時に動
的に確保された共通ブロック領域にアクセスできるよう
にするコードの生成が行なわれる。即ち、スレッド単位
でプライベート化する共通ブロックへのアクセスは、ラ
イブラリにより確定されたベース番地に基づいて行なわ
れるようになる。また、共通ブロック要素の値の参照で
ある場合には、未定義変数引用の検査を行なうことで、
プログラムの信頼性を向上することができる。
【0050】図4〜図8は、ユーザプログラム(以下
「プログラム」という)の実行前に行なわれる処理のフ
ローチャートを示す。先ず、図4は、コンパイラ装置1
0のソース解析部12により生成されたコードによる処
理内容を示す。
【0051】ステップ21では、共通ブロックが存在す
るプログラムの入口で、ステップ8において生成された
ライブラリ呼出しが実行される。これにより、制御がラ
イブラリに引き継がれ、後述する処理に従って共通ブロ
ックのベース番地が返却される。
【0052】ステップ22では、ライブラリから返却さ
れた共通ブロックのベース番地に基づいて、共通ブロッ
ク要素がアクセスされる。また、図5〜図8は、ライブ
ラリにおける処理内容を示す。
【0053】ステップ31では、初期値があることを示
す識別子'###-Include initializedvalues-###'の有無
に基づいて、共通ブロック要素に初期値が設定されてい
るか否かが判定される。そして、初期値が設定されてい
ればステップ32へと進み(Yes)、初期値が設定さ
れていなければステップ34へと進む(No)。
【0054】ステップ32では、プログラムの実行後に
引用された共通ブロック名に基づいて、共通ブロックの
引用が初めてであるか否かが判定される。そして、共通
ブロックの引用が初めてであればステップ33へと進み
(Yes)、引用が初めてでなければステップ34へと
進む(No)。
【0055】ステップ33では、ユーザが共通ブロック
要素の値を更新してもその初期値が壊されないようにす
るため、共通ブロックの大きさ分の領域が動的に確保さ
れ、そこに共通ブロック要素の値(初期値)が退避され
る。
【0056】以上説明したステップ31〜ステップ33
の処理によれば、共通ブロック要素に初期値が設定され
ていて、その共通ブロックの引用が初めてであれば、共
通ブロック要素の初期値が動的に退避される。
【0057】ステップ34では、プログラムが並列化
(マルチスレッド化)されているか否かが判定される。
そして、並列化されていればステップ35へと進み(Y
es)、並列化されていなければステップ38へと進む
(No)。
【0058】ステップ35では、実行中のスレッドがC
PU0で実行されているマスタスレッドであるか否かが
判定される。そして、かかる条件が成立したならばステ
ップ38へと進み(Yes)、条件が成立しなければス
テップ36へと進む(No)。
【0059】ステップ36では、実行中のスレッドがマ
スタスレッド以外の並列化されたスレッドであり、か
つ、共通ブロックに対するスレッド番号が初めてのもの
であるか否かが判定される。そして、かかる条件が成立
したならばステップ43へと進み(Yes)、条件が成
立しなければステップ37へと進む(No)。
【0060】ステップ37では、実行中のスレッドがマ
スタスレッド以外の並列化されたスレッドであって、共
通ブロックに対するスレッド番号が設定済みであると判
断できるので、スレッド番号に対する共通ブロックのベ
ース番地が返却される。ここで、共通ブロックのベース
番地は、ライブラリ内で管理されているスレッド番号に
対するベース番地を検索することで特定される。
【0061】プログラムが並列化されていない場合の処
理を行うステップ38では、共通ブロックの引用が初め
てであるか否かが判定される。そして、共通ブロックの
引用が初めてであればステップ39へと進み(Ye
s)、引用が初めてでなければステップ42へと進む
(No)。
【0062】ステップ39では、共通ブロック要素に初
期値が設定されているか否かが判定される。そして、初
期値が設定されていればステップ42へと進み(Ye
s)、初期値が設定されていなければステップ40へと
進む(No)。
【0063】ステップ40では、未定義変数引用の検査
のためのライブラリ呼出しの有無に基づいて、未定義変
数に対する引用の検査の指示があるか否かが判定され
る。そして、引用の検査の指示があればステップ41へ
と進み(Yes)、引用の検査の指示がなければステッ
プ42へと進む(No)。
【0064】ステップ41では、共通ブロック要素の初
期値として、初期値が未設定であることを示す識別子
(例えば、「8B8B…8B8B」)が設定される。ステップ4
2では、ユーザ指定のオリジナル共通ブロックのベース
番地がそのまま返却される。
【0065】実行中のスレッドがマスタスレッドでな
く、共通ブロックに対するスレッド番号が初めてのもの
である場合の処理を行うステップ43では、スレッド番
号に対する共通ブロック領域が動的かつ新規に確保され
る。
【0066】ステップ44では、共通ブロック名に基づ
いて、その共通ブロック名に対応する共通ブロック要素
の初期値が退避されているか否かが判定される。そし
て、初期値が退避されていればステップ45へと進み
(Yes)、退避されている初期値が共通ブロック領域
に複写される。一方、初期値が退避されていなければス
テップ46へと進む(No)。
【0067】ステップ46では、未定義変数に対する引
用の検査の指示があるか否かが判定される。そして、引
用の検査の指示があればステップ47へと進み(Ye
s)、共通ブロック要素の初期値として、初期値が未設
定であることを示す識別子(例えば、「8B8B…8B8B」)
が設定される。一方、引用の検査の指示がなければステ
ップ48へと進む(No)。
【0068】ステップ48では、ステップ43において
動的に確保された共通ブロック領域が、ライブラリ内で
スレッド番号及び共通ブロック名で管理される。ステッ
プ49では、動的に確保された共通ブロック領域のベー
ス番地が返却される。
【0069】以上説明したステップ34〜ステップ49
の処理によれば、プログラムが並列化されている場合に
は、スレッドの実行状態及び共通ブロックの引用状態に
応じて、次のような処理が実行される。
【0070】(1)実行中のスレッドがマスタスレッドで
あり、かつ、共通ブロックの引用が初めてである場合 共通ブロック要素に初期値が未設定であり、かつ、未定
義変数引用の検査指示があれば、共通ブロック要素の初
期値として「8B8B…8B8B」が設定され、ユーザ指定のオ
リジナル共通ブロックのベース番地が返却される。一
方、かかる条件が成立しなければ、ユーザ指定のオリジ
ナル共通ブロックのベース番地がそのまま返却される。
【0071】(2)実行中のスレッドがマスタスレッドで
あり、かつ、共通ブロックの引用が初めてではない場合 ユーザ指定のオリジナル共通ブロックのベース番地がそ
のまま返却される。
【0072】(3)実行中のスレッドがマスタスレッドで
はなく、かつ、共通ブロックに対するスレッド番号が初
めてのものである場合 共通ブロック領域が動的に確保され、初期値が退避され
ていれば、その初期値が共通ブロック領域に複写され
る。これにより、動的に確保された共通ブロック領域に
対して、初期値の設定が動的に行なわれる。一方、初期
値が退避されておらず、未定義変数引用の検査指示があ
れば、共通ブロック要素の初期値として「8B8B…8B8B」
が設定される。その後、動的に確保された共通ブロック
領域が、スレッド番号及び共通ブロック名で管理され、
そのベース番地が返却される。この管理情報を検索する
ことで、共通ブロックが初めて引用されたものか否かを
判定したり、共通ブロック名とスレッド番号との関連付
けをすることができる。
【0073】(4)実行中のスレッドがマスタスレッドで
はなく、かつ、共通ブロックに対するスレッド番号が設
定済みの場合 ライブラリ内で管理されているスレッド番号に対応する
共通ブロックのベース番地が返却される。
【0074】また、プログラムが並列化されていない場
合には、次のような処理が実行される。共通ブロックの
引用が初めてであり、共通ブロック要素に初期値が未設
定であり、かつ、未定義変数引用の検査指示があれば、
共通ブロック要素の初期値として「8B8B…8B8B」が設定
され、ユーザ指定のオリジナル共通ブロックのベース番
地が返却される。一方、かかる条件が成立していなけれ
ば、ユーザ指定のオリジナル共通ブロックのベース番地
が返却される。
【0075】従って、ソースプログラムのコンパイル時
には、ライブラリにより返却された共通ブロックのベー
ス番地を使用して、共通ブロック要素の引用を行なう方
式に変換される。一方、ライブラリにおいては、実行中
のスレッドがマスタスレッド以外の並列化されたスレッ
ドである場合、動的に確保された共通ブロック領域のベ
ース番地が返却される。このため、プログラムにおいて
は、共通ブロック領域が動的に確保されたものか否かに
かかわらず、ライブラリから返却されたベース番地に基
づいて共通ブロック要素をアクセスすることができるよ
うになる。
【0076】これにより、並列処理においてインターフ
ェース領域を使用した手続呼出しが実現され、アプリケ
ーションプログラムの処理性能を大幅に向上することが
できるようになる。
【0077】なお、共通ブロックのベース番地を返却す
るライブラリは、必要に応じて動的に呼出される動的ラ
イブラリ(Dynamic Linked Library)でも、リンカによ
ってオブジェクトプログラムと結合される静的ライブラ
リ(Static Library)のどちらであってもよい。
【0078】また、以上説明した実施形態では、ソース
プログラムはFORTRANで記述されているものを前提とし
たが、FORTRAN以外の言語、例えば、C,C++等で記述し
たものであっても、本発明を適用できることは言うまで
もない。
【0079】このような機能を実現するプログラムを、
例えば、磁気テープ,磁気ディスク,磁気ドラム,IC
カード,CD−ROM等の可搬記録媒体に記録しておけ
ば、本発明に係るコンパイラプログラムを市場に流通さ
せることができる。そして、かかる記録媒体を取得した
者は、一般的なコンピュータシステムを利用して、本発
明に係るコンパイル装置を容易に構築することができ
る。
【0080】
【発明の効果】以上説明したように、請求項1又は請求
項2に記載の発明によれば、複数のスレッドが並列処理
されるときであっても、各スレッドにおけるインターフ
ェース領域が独立しているため干渉することがなく、従
来技術では不可能であった並列処理におけるインターフ
ェース領域を使用した手続呼出しを実現することができ
る。
【0081】請求項3又は請求項7に記載の発明によれ
ば、ソースプログラム中にインターフェース領域の先頭
番地を確定するための処理を記述する必要はなく、プロ
グラム構造を簡単にすることができる。
【0082】請求項4又は請求項8に記載の発明によれ
ば、ユーザの考えに即した、柔軟なプログラム構造を提
供することができる。請求項5又は請求項6に記載の発
明によれば、請求項1又は請求項2に記載の発明の効果
に加え、本発明に係るコンパイラプログラムを市場に流
通させることができる。そして、かかる記録媒体を取得
した者は、一般的なコンピュータシステムを使用して、
本発明に係るコンパイラ装置を容易に構築することがで
きる。
【図面の簡単な説明】
【図1】本発明に係るコンパイラ装置の構成図である
【図2】ソース解析部による並列処理を実現するための
処理内容を示すフローチャートである。
【図3】ソース解析部による並列処理を実現するための
処理内容を示すフローチャートである。
【図4】ソース解析部により生成されたコードを実行す
るときの処理内容を示すフローチャートである。
【図5】ライブラリにおける処理内容を示すフローチャ
ートである。
【図6】ライブラリにおける処理内容を示すフローチャ
ートである。
【図7】ライブラリにおける処理内容を示すフローチャ
ートである。
【図8】タスク並列処理における概要図であり、(A)
は逐次処理のソースプログラム、(B)は並列処理のソ
ースプログラム、(C)は各CPUにおいて実行される
手続を夫々示す。
【符号の説明】
10…コンパイラ装置 12…ソース解析部
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成12年5月19日(2000.5.1
9)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】0038
【補正方法】変更
【補正内容】
【0038】ここで、ソースプログラムが、
【外1】 である場合には、ステップ6の処理により、
【外2】 のようなコードが生成される。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0042
【補正方法】変更
【補正内容】
【0042】
【外3】
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0046
【補正方法】変更
【補正内容】
【0046】ステップ12では、共通ブロック要素の引
用が、ライブラリによって確定されたベース番地を使用
して引用する形式に変換される。ベース番地を使用した
共通ブロック要素の引用は、例えば、ユーザプログラム
が、
【外4】 となっていた場合、これをライブラリ呼出しを使用して
【外5】 というように変換される。ここで、「->」はポインタ演
算を示す。

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】複数のスレッドを並列処理させるときに、
    スレッド単位毎に動的に確保されたインターフェース領
    域を使用して、プログラムにおける手続呼出しを行なう
    コードを生成することを特徴とするコンパイラ装置。
  2. 【請求項2】スレッド単位毎に動的に確保されたインタ
    ーフェース領域の先頭番地を確定するコードを生成する
    コード生成手段と、 ソースプログラム中のインターフェース領域に対する引
    用を、該コード生成手段により生成されたコードを実行
    することで確定した先頭番地を使用して引用するコード
    に変換するコード変換手段と、 を含んで構成されたことを特徴とするコンパイラ装置。
  3. 【請求項3】前記コード生成手段は、スレッド単位毎に
    動的に確保されたインターフェース領域の先頭番地を確
    定するライブラリの呼出しコードを生成する構成である
    請求項2記載のコンパイラ装置。
  4. 【請求項4】前記コード生成手段は、ユーザの指定に基
    づいて、インターフェース領域の先頭番地を確定するコ
    ードを生成する構成である請求項2又は請求項3に記載
    のコンパイラ装置。
  5. 【請求項5】複数のスレッドを並列処理させるときに、
    スレッド単位毎に動的に確保されたインターフェース領
    域を使用して、プログラムにおける手続呼出しを行なう
    コードを生成する機能を実現するためのコンパイラプロ
    グラムを記録した記録媒体。
  6. 【請求項6】スレッド単位毎に動的に確保されたインタ
    ーフェース領域の先頭番地を確定するコードを生成する
    コード生成機能と、 ソースプログラム中のインターフェース領域に対する引
    用を、該コード生成機能により生成されたコードを実行
    することで確定した先頭番地を使用して引用するコード
    に変換するコード変換機能と、 を実現するためのコンパイラプログラムを記録した記録
    媒体。
  7. 【請求項7】前記コード生成機能は、スレッド単位毎に
    動的に確保されたインターフェース領域の先頭番地を確
    定するライブラリの呼出しコードを生成する構成である
    請求項6記載のコンパイラプログラムを記録した記録媒
    体。
  8. 【請求項8】前記コード生成機能は、ユーザの指定に基
    づいて、インターフェース領域の先頭番地を確定するコ
    ードを生成する構成である請求項6又は請求項7に記載
    のコンパイラプログラムを記録した記録媒体。
JP31957099A 1999-11-10 1999-11-10 コンパイラ装置及びコンパイラプログラムを記録した記録媒体 Expired - Fee Related JP3608993B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP31957099A JP3608993B2 (ja) 1999-11-10 1999-11-10 コンパイラ装置及びコンパイラプログラムを記録した記録媒体
US09/625,891 US7039905B1 (en) 1999-11-10 2000-07-26 Compiler device and computer-readable recording medium recorded with compiler program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP31957099A JP3608993B2 (ja) 1999-11-10 1999-11-10 コンパイラ装置及びコンパイラプログラムを記録した記録媒体

Publications (2)

Publication Number Publication Date
JP2001142719A true JP2001142719A (ja) 2001-05-25
JP3608993B2 JP3608993B2 (ja) 2005-01-12

Family

ID=18111748

Family Applications (1)

Application Number Title Priority Date Filing Date
JP31957099A Expired - Fee Related JP3608993B2 (ja) 1999-11-10 1999-11-10 コンパイラ装置及びコンパイラプログラムを記録した記録媒体

Country Status (2)

Country Link
US (1) US7039905B1 (ja)
JP (1) JP3608993B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007083613A1 (ja) * 2006-01-17 2007-07-26 Tokyo Institute Of Technology プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
JP2012530995A (ja) * 2009-06-26 2012-12-06 コードプレイ、ソフトウェア、リミテッド 処理方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090313600A1 (en) * 2008-06-13 2009-12-17 Microsoft Corporation Concurrent code generation

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5237691A (en) * 1990-08-01 1993-08-17 At&T Bell Laboratories Method and apparatus for automatically generating parallel programs from user-specified block diagrams
US5437034A (en) * 1991-04-19 1995-07-25 Hitachi, Ltd. Method of generating from source program object program by which final values of variables for parallel execution are guaranteed
CA2078315A1 (en) * 1991-09-20 1993-03-21 Christopher L. Reeve Parallel processing apparatus and method for utilizing tiling
JPH05204656A (ja) 1991-11-30 1993-08-13 Toshiba Corp スレッド固有データ保持方法
US5278986A (en) * 1991-12-13 1994-01-11 Thinking Machines Corporation System and method for compiling a source code supporting data parallel variables
JPH05257709A (ja) * 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
CA2097540C (en) * 1993-06-01 1998-05-12 William G. O'farrell Accessing remote data objects in a distributed memory environment
US5742806A (en) * 1994-01-31 1998-04-21 Sun Microsystems, Inc. Apparatus and method for decomposing database queries for database management system including multiprocessor digital data processing system
US6179489B1 (en) * 1997-04-04 2001-01-30 Texas Instruments Incorporated Devices, methods, systems and software products for coordination of computer main microprocessor and second microprocessor coupled thereto
US6298370B1 (en) * 1997-04-04 2001-10-02 Texas Instruments Incorporated Computer operating process allocating tasks between first and second processors at run time based upon current processor load
US6209066B1 (en) * 1998-06-30 2001-03-27 Sun Microsystems, Inc. Method and apparatus for memory allocation in a multi-threaded virtual machine
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US7111290B1 (en) * 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6173442B1 (en) * 1999-02-05 2001-01-09 Sun Microsystems, Inc. Busy-wait-free synchronization
JP3756352B2 (ja) * 1999-06-29 2006-03-15 富士通株式会社 コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体
US6789253B1 (en) * 1999-07-28 2004-09-07 Hewlett-Packard Development Company, L.P. Method, system, and apparatus to improve performance of multi-threaded computer programs
JP2001147819A (ja) * 1999-11-19 2001-05-29 Fujitsu Ltd 最適化装置および記録媒体
US6934832B1 (en) * 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007083613A1 (ja) * 2006-01-17 2007-07-26 Tokyo Institute Of Technology プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
JP2007193430A (ja) * 2006-01-17 2007-08-02 Tokyo Institute Of Technology プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
JP2012530995A (ja) * 2009-06-26 2012-12-06 コードプレイ、ソフトウェア、リミテッド 処理方法

Also Published As

Publication number Publication date
JP3608993B2 (ja) 2005-01-12
US7039905B1 (en) 2006-05-02

Similar Documents

Publication Publication Date Title
US5768592A (en) Method and apparatus for managing profile data
US5408665A (en) System and methods for linking compiled code with extended dictionary support
US6253371B1 (en) Method for supporting parallelization of source program
US6530079B1 (en) Method for optimizing locks in computer programs
EP0390900B1 (en) Generic code sharing arrangement for digital data processing system
US6901579B1 (en) Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code
US6931627B2 (en) System and method for combinatorial test generation in a compatibility testing environment
US20010042069A1 (en) Method and apparatus for building a memory image
JP2002527815A (ja) プログラムコード変換方法
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
JP4041248B2 (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JPH08185325A (ja) コンパイラにおけるコード生成方法及びコンパイラ
US6675377B1 (en) Program conversion apparatus
US6175935B1 (en) Software debugging method and recording medium to which debugging program has been recorded
US6968543B2 (en) Information processing apparatus
US5404531A (en) Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory
JP2001142719A (ja) コンパイラ装置及びコンパイラプログラムを記録した記録媒体
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
Baek et al. Prototype implementation of the OpenGL ES 2.0 shading language offline compiler
CN114579135B (zh) 一种安装包生成方法及装置
KR20120114926A (ko) 바이너리 실행파일 생성을 위한 프로그래밍 방법
JP2002073579A (ja) 分散共有メモリ向けコンパイル方法
Soest Compiling Second-Order Accelerate Programs to First-Order TensorFlow Graphs
Wortman et al. Automating data conversion for heterogeneous distributed shared memory
JP2005301415A (ja) コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040614

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040706

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040906

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041012

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071022

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081022

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081022

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091022

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091022

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101022

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101022

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111022

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111022

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121022

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121022

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131022

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees