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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism 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
用した手続呼出しを実現する。 【解決手段】 プログラム実行時に、スレッド単位毎に
動的に確保された共通ブロック(インターフェース領
域)のベース番地(先頭番地)を確定するライブラリ呼
出しを生成し(S8)、ソースプログラム中の共通ブロ
ックの変数等に対する引用を、ライブラリ呼出しを実行
することで確定したベース番地を使用して引用する形式
に変換する(S12)。即ち、動的に確保された共通ブ
ロック領域は、実際に確保されるまでその番地が確定し
ないので、ライブラリ呼出しによりベース番地を確定
し、確定したベース番地に基づいて共通ブロックをアク
セスするようにする。従って、複数のスレッドが並列処
理されるときであっても、各スレッドにおけるインター
フェース領域が独立しているため干渉することがなく、
並列処理におけるインターフェース領域を使用した手続
呼出しが実現される。
Description
をコンパイルするコンパイラ技術に関し、特に、並列処
理においてインターフェース領域を使用した手続呼出し
を実現する技術に関する。
インターフェースをとる方法として、引数を渡す方法、
インターフェース領域を使用する方法、外部ファイルを
使用する方法がある。なお、「インタフェース領域」と
は、例えば、FORTRANにおける「COMMON文」やC,C++に
おける「extern文」を使用して割り当てられた共通ブロ
ック領域や外部変数領域のことをいう。
「COMMON文」を使用して、メインルーチンとサブルーチ
ンとの間のインターフェースをとる場合を考察する。メ
インルーチンでCOMMON宣言がされている共通ブロック名
が、サブルーチンでも同様に宣言されていると、メイン
ルーチンで設定された値がサブルーチンで参照できた
り、サブルーチンで設定された値がメインルーチンで参
照することができるようになる。
ON文」は、逐次処理で実行されることを前提としていた
ため、実行可能プログラム単位毎に1つの共通領域が静
的に割り当てられていた。このため、このまま「COMMON
文」を並列処理に適用すると、次のような不具合が発生
してしまうおそれがあった。
チンを呼出し、夫々のサブルーチンを異なったCPUで同
時に並列処理し、サブルーチンで値を更新している場合
には、各サブルーチンの実行タイミングの差によって、
インタフェース領域に保持されている値が不定になるこ
とがある。この場合、入力データが同一であっても、演
算結果が同一になるとは限らず、プログラムの信頼性が
低く、並列処理では「COMMON文」が使用できなかった。
ても、同様な問題が生じていた。そこで、本発明は以上
のような従来の問題点に鑑み、スレッド単位毎に1つの
共通領域を動的に確保することにより、並列処理におい
てインターフェース領域を使用した手続呼出しを実現し
たコンパイラ技術を提供することを目的とする。
の発明は、複数のスレッドを並列処理させるときに、ス
レッド単位毎に動的に確保されたインターフェース領域
を使用して、プログラムにおける手続呼出しを行なうコ
ードを生成するコンパイラ装置であることを特徴とす
る。
例えば、FORTRANにおける「COMMON文」やC,C++における
「extern文」を使用して割り当てられた共通ブロック領
域や外部変数領域のことをいう。これらの共通ブロック
領域や外部変数領域を使用して、プログラムにおける手
続間のインターフェースがとられる。
に、スレッド単位毎に動的に確保されたインターフェー
ス領域を使用して、プログラムにおける手続呼出しが行
なわれる。このため、複数のスレッドが並列処理される
ときであっても、各スレッドにおけるインターフェース
領域が独立しているため干渉することがなく、従来技術
では不可能であった並列処理におけるインターフェース
領域を使用した手続呼出しが実現される。
動的に確保されたインターフェース領域の先頭番地を確
定するコードを生成するコード生成手段と、ソースプロ
グラム中のインターフェース領域に対する引用を、該コ
ード生成手段により生成されたコードを実行することで
確定した先頭番地を使用して引用するコードに変換する
コード変換手段と、を含んでコンパイラ装置を構成した
ことを特徴とする。
的に確保されたインターフェース領域の先頭番地を確定
するコードが生成され、ソースプログラム中のインター
フェース領域に対する引用が、生成されたコードを実行
することで確定した先頭番地を使用して引用するコード
に変換される。従って、複数のスレッドが並列処理され
るときであっても、各スレッドにおけるインターフェー
ス領域が独立しているため干渉することがなく、従来技
術では不可能であった並列処理におけるインターフェー
ス領域を使用した手続呼出しが実現される。
段は、スレッド単位毎に動的に確保されたインターフェ
ース領域の先頭番地を確定するライブラリの呼出しコー
ドを生成する構成であることを特徴とする。
たルーチン及びサブルーチンの集まりであって、プログ
ラム実行時に動的に呼出される動的ライブラリ(Dynami
c Linked Library)と、リンカによってオブジェクトプ
ログラムと結合される静的ライブラリ(Static Librar
y)とがある。
的に確保されたインターフェース領域の先頭番地は、ラ
イブラリを呼出すコードを実行することで確定される。
従って、ソースプログラム中にインターフェース領域の
先頭番地を確定するための処理を記述する必要はなく、
プログラム構造が簡単になる。
段は、ユーザの指定に基づいて、インターフェース領域
の先頭番地を確定するコードを生成する構成であること
を特徴とする。
について並列処理を行ないたくない場合には、その旨を
指定することで、その処理部分に関しては並列化のため
のコードが生成されなくなる。従って、ユーザの考えに
即した、柔軟なプログラム構造が提供される。
並列処理させるときに、スレッド単位毎に動的に確保さ
れたインターフェース領域を使用して、プログラムにお
ける手続呼出しを行なうコードを生成する機能を実現す
るためのコンパイラプログラムを記録媒体に記録したこ
とを特徴とする。
実に記録でき、かつ、必要に応じて確実に取り出し可能
なものをいい、磁気テープ,磁気ディスク,磁気ドラ
ム,ICカード,CD−ROM等の可搬記録媒体が該当
する。
に、スレッド単位毎に動的に確保されたインターフェー
ス領域を使用して、プログラムにおける手続呼出しを行
なうコードを生成する機能を実現するコンパイラプログ
ラムが記録媒体に記録される。従って、かかるコンパイ
ラプログラムを記録した記録媒体があれば、一般的なコ
ンピュータシステムを利用して、本発明に係るコンパイ
ラ装置を容易に構築することが可能となる。
動的に確保されたインターフェース領域の先頭番地を確
定するコードを生成するコード生成機能と、ソースプロ
グラム中のインターフェース領域に対する引用を、該コ
ード生成機能により生成されたコードを実行することで
確定した先頭番地を使用して引用するコードに変換する
コード変換機能と、を実現するためのコンパイラプログ
ラムを記録媒体に記録したことを特徴とする。
コード変換機能と、を実現するためのコンパイラプログ
ラムが記録媒体に記録される。従って、かかるコンパイ
ラプログラムを記録した記録媒体があれば、一般的なコ
ンピュータシステムを利用して、本発明に係るコンパイ
ラ装置を容易に構築することが可能となる。
能は、スレッド単位毎に動的に確保されたインターフェ
ース領域の先頭番地を確定するライブラリの呼出しコー
ドを生成する構成であることを特徴とする。
的に確保されたインターフェース領域の先頭番地は、ラ
イブラリを呼出すコードを実行することで確定される。
従って、ソースプログラム中にインターフェース領域の
先頭番地を確定するための処理を記述する必要はなく、
プログラム構造が簡単になる。
能は、ユーザの指定に基づいて、インターフェース領域
の先頭番地を確定するコードを生成する構成であること
を特徴とする。
について並列処理を行ないたくない場合には、その旨を
指定することで、その処理部分に関しては並列化のため
のコードが生成されなくなる。従って、ユーザの考えに
即した、柔軟なプログラム構造が提供される。
本発明を詳述する。先ず、実施の形態を説明する前に、
本発明の内容の理解を容易にすることを目的として、従
来技術の問題点及び本発明の概要を説明する。
とを前提として、複数の手続(サブルーチンXAXIS,YAX
IS)を並列処理させるための概要を示す。即ち、図9
(A)に示すような逐次処理のソースプログラムを、並
列処理に変更すべく、図9(B)に示すようなソースプ
ログラムに書き換える。ここで、ソースプログラム中の
「!$OMP」は、コンパイラオプションの設定により、そ
の行を有効/無効にすることを制御できる文である。ま
た、「PARALLEL SECTIONS」と「END PARALLEL SECTION
S」とで囲まれた範囲に記述された「SECTION」により、
並列処理であることが指定される。
ると、図9(C)に示すように、CPU1及びCPU2におい
て、メインルーチンからサブルーチンXAXIS及びYAXISが
夫々コールされる。そして、メインルーチンとサブルー
チンXAXIS及びYAXISとの間のインターフェースとして、
COMMON文によりプログラム単位毎に静的領域に1つだけ
確保された変数aが使用される場合を考える。この場
合、変数aは、プログラム単位毎に静的領域に1つだけ
確保される。従って、サブルーチンXAXIS及びYAXISは、
共通した静的領域に保持された変数aを使用することと
なる。このため、サブルーチンXAXISとYAXISとにおい
て、変数aの参照後に変数aの値の更新がある場合、CP
Uの処理タイミングによっては、一方のサブルーチンで
変数aに設定された数値を処理する前に、他方のサブル
ーチンでその数値が更新されることがあり、夫々のサブ
ルーチンにおける演算結果がユーザの予想した値と異な
ってしまうおそれがある。従って、従来技術では、各サ
ブルーチンで処理された演算結果が不定となってしま
い、並列処理に対応することができなかったのである。
て確保する領域をスレッド単位毎に動的に1つ確保、即
ち、スレッド単位毎にプライベート化するようにして、
並列処理に対応可能にするようにした。
「コンパイラ装置」という)の構成について、図1を参
照しつつ説明する。コンパイラ装置10は、ソース解析
部12と、最適化部14と、コード生成部16と、を含
んで構成される。ソース解析部12は、ソースプログラ
ムを解析して中間言語を生成する機能を提供し、後述す
る処理により並列処理への対応を実現する。最適化部1
4は、ソース解析部12により生成された中間言語に対
して、例えば、処理時間を短縮するような最適化を行う
機能を提供する。コード生成部16は、最適化部14に
より最適化された中間言語を読み込み、アセンブラコー
ドまたはオブジェクトコードを出力する機能を提供す
る。ここで、コード生成部16によりアセンブラコード
が出力された場合には、アセンブラコンパイラによりア
センブラコードをオブジェクトコードにコンパイルする
必要がある。そして、コード生成部16又はアセンブラ
コンパイラにより出力又はコンパイルされたオブジェク
トコードは、図示しないリンカによって結合され、実行
可能プログラムが完成する。
メモリと中央処理装置(CPU)とを備えたコンピュー
タ上に構築され、メモリにロードされたプログラムに従
ってコンパイル処理が行なわれる。
ース解析部12において行なわれるコンパイル処理のフ
ローチャートを示す。ステップ1(図では「S1」と略
記する。以下同様)では、COMMON文により確保された共
通ブロックをスレッド単位でプライベート化すること
が、例えば、コンパイルオプションにより指定されてい
るか否かが判定される。そして、スレッド単位でプライ
ベート化することが指定されていればステップ2へと進
み(Yes)、指定されていなければ処理を終了する
(No)。
COMMON文により宣言された共通ブロック名が取り出され
る。ここで、ソースプログラムから共通ブロック名が取
り出せなかった場合、具体的には、共通ブロック名の取
り出しが完了した場合には、その旨を示す識別子等が取
り出される。
ク名に基づいて、共通ブロック名の取り出しが完了した
か否かが判定される。そして、共通ブロック名の取り出
しが完了したならばステップ7へと進み(Yes)、完
了していなければステップ4へと進む(No)。
ク名により特定される共通ブロックに対して、スレッド
単位でプライベート化する指定があるか否かが判定され
る。そして、プライベート化する指定があればステップ
5へと進み(Yes)、指定がなければステップ2へと
戻る(No)。
基づいて、共通ブロックに対して初期値の設定があるか
否かが判定される。そして、初期値の設定があればステ
ップ6へと進み(Yes)、初期値の設定がなければス
テップ2へと戻る(No)。
ロック名に対して、実行時に初期値があったか否かを判
定するための識別子(例えば、__)が付加され、識別
子が付加された共通ブロック名で共通ブロックが生成さ
れる。また、共通ブロックの変数等(以下「共通ブロッ
ク要素」という)に対して、初期値があったことを示す
識別子(例えば、'###-Include initialized values-##
#')が設定される。その後、ステップ2へと戻る。
es-###'/ のようなコードが生成される。
理によれば、プライベート化指定があって初期値の設定
がある共通ブロック名に対して、初期値があることを示
す識別子が付加される。また、その共通ブロック要素に
対して、初期値が設定されていることを示す識別子が設
定される。このようにすれば、後述する実行時の処理に
よって、動的に確保された共通ブロックに対して動的な
初期値の設定が可能となる。
スレッド単位でプライベート化する共通ブロックが1つ
でも存在しているか否かが判定される。そして、プライ
ベート化する共通ブロックが存在していればステップ8
へと進み(Yes)、存在していなければ処理を終了す
る(No)。
に、そのソースプログラムで引用される共通ブロックの
ベース番地(先頭番地)を確定するライブラリ呼出しが
生成される。即ち、共通ブロックは、スレッド単位毎に
動的に確保されるため、ライブラリから返却されたベー
ス番地を基に変数等をアクセスするように、コードが変
換されるのである。また、ライブラリ呼出しは、例え
ば、次のようなものである。
「length('common#block#name#1')」は共通ブロック名
の長さ、「var1#generate」は初期値フラグ、「&var1」
は共通ブロックの先頭番地、「size(var1)」は共通ブロ
ックの大きさ、「&base#of#common#block#name#1」はラ
イブラリから返却される共通ブロックをアクセスするた
めのベース番地である。
ース領域の先頭番地を確定するコード生成手段及びコー
ド生成機能に該当する。ステップ9では、ソースプログ
ラムから、実行文中の共通ブロック要素の引用が取り出
される。
ック要素がソースプログラムの最後の引用であるか否か
が判定される。そして、その共通ブロック要素が最後の
引用であれば処理を終了し(Yes)、最後のものでな
ければステップ11へと進む(No)。
ック要素が、スレッド単位でプライベート化された共通
ブロック要素であるか否かが判定される。そして、プラ
イベート化された共通ブロック要素であればステップ1
2へと進み(Yes)、プライベート化された共通ブロ
ック要素でなければステップ9へと戻る(No)。
用が、ライブラリによって確定されたベース番地を使用
して引用する形式に変換される。ベース番地を使用した
共通ブロック要素の引用は、例えば、ユーザプログラム
が、 COMMON /COM/COM#VAR COM#VAR = 1 となっていた場合、これをライブラリ呼出しを使用して call Fortran#lib(……, &base) base->VAR = 1 というように変換される。ここで、「->」はポインタ演
算を示す。
手段及びコード変換機能に該当する。ステップ13で
は、共通ブロック要素の参照、例えば、X = VAR のよう
な実行文があったか否かが判定される。そして、共通ブ
ロック要素の値の参照があればステップ14へと進み
(Yes)、共通ブロック要素の値の参照でなければス
テップ9へと戻る(No)。
のためのライブラリ呼出しが生成される。即ち、ライブ
ラリにより未定義な値の引用かどうかが検査され、プロ
グラム実行時に未定義変数の引用が行なわれると、エラ
ーメッセージが表示されるようになる。その後、ステッ
プ9へと戻る。
処理によれば、COMMON文によってプログラム実行時に動
的に確保された共通ブロック領域にアクセスできるよう
にするコードの生成が行なわれる。即ち、スレッド単位
でプライベート化する共通ブロックへのアクセスは、ラ
イブラリにより確定されたベース番地に基づいて行なわ
れるようになる。また、共通ブロック要素の値の参照で
ある場合には、未定義変数引用の検査を行なうことで、
プログラムの信頼性を向上することができる。
「プログラム」という)の実行前に行なわれる処理のフ
ローチャートを示す。先ず、図4は、コンパイラ装置1
0のソース解析部12により生成されたコードによる処
理内容を示す。
るプログラムの入口で、ステップ8において生成された
ライブラリ呼出しが実行される。これにより、制御がラ
イブラリに引き継がれ、後述する処理に従って共通ブロ
ックのベース番地が返却される。
れた共通ブロックのベース番地に基づいて、共通ブロッ
ク要素がアクセスされる。また、図5〜図8は、ライブ
ラリにおける処理内容を示す。
す識別子'###-Include initializedvalues-###'の有無
に基づいて、共通ブロック要素に初期値が設定されてい
るか否かが判定される。そして、初期値が設定されてい
ればステップ32へと進み(Yes)、初期値が設定さ
れていなければステップ34へと進む(No)。
引用された共通ブロック名に基づいて、共通ブロックの
引用が初めてであるか否かが判定される。そして、共通
ブロックの引用が初めてであればステップ33へと進み
(Yes)、引用が初めてでなければステップ34へと
進む(No)。
要素の値を更新してもその初期値が壊されないようにす
るため、共通ブロックの大きさ分の領域が動的に確保さ
れ、そこに共通ブロック要素の値(初期値)が退避され
る。
の処理によれば、共通ブロック要素に初期値が設定され
ていて、その共通ブロックの引用が初めてであれば、共
通ブロック要素の初期値が動的に退避される。
(マルチスレッド化)されているか否かが判定される。
そして、並列化されていればステップ35へと進み(Y
es)、並列化されていなければステップ38へと進む
(No)。
PU0で実行されているマスタスレッドであるか否かが
判定される。そして、かかる条件が成立したならばステ
ップ38へと進み(Yes)、条件が成立しなければス
テップ36へと進む(No)。
スタスレッド以外の並列化されたスレッドであり、か
つ、共通ブロックに対するスレッド番号が初めてのもの
であるか否かが判定される。そして、かかる条件が成立
したならばステップ43へと進み(Yes)、条件が成
立しなければステップ37へと進む(No)。
スタスレッド以外の並列化されたスレッドであって、共
通ブロックに対するスレッド番号が設定済みであると判
断できるので、スレッド番号に対する共通ブロックのベ
ース番地が返却される。ここで、共通ブロックのベース
番地は、ライブラリ内で管理されているスレッド番号に
対するベース番地を検索することで特定される。
理を行うステップ38では、共通ブロックの引用が初め
てであるか否かが判定される。そして、共通ブロックの
引用が初めてであればステップ39へと進み(Ye
s)、引用が初めてでなければステップ42へと進む
(No)。
期値が設定されているか否かが判定される。そして、初
期値が設定されていればステップ42へと進み(Ye
s)、初期値が設定されていなければステップ40へと
進む(No)。
のためのライブラリ呼出しの有無に基づいて、未定義変
数に対する引用の検査の指示があるか否かが判定され
る。そして、引用の検査の指示があればステップ41へ
と進み(Yes)、引用の検査の指示がなければステッ
プ42へと進む(No)。
期値として、初期値が未設定であることを示す識別子
(例えば、「8B8B…8B8B」)が設定される。ステップ4
2では、ユーザ指定のオリジナル共通ブロックのベース
番地がそのまま返却される。
く、共通ブロックに対するスレッド番号が初めてのもの
である場合の処理を行うステップ43では、スレッド番
号に対する共通ブロック領域が動的かつ新規に確保され
る。
いて、その共通ブロック名に対応する共通ブロック要素
の初期値が退避されているか否かが判定される。そし
て、初期値が退避されていればステップ45へと進み
(Yes)、退避されている初期値が共通ブロック領域
に複写される。一方、初期値が退避されていなければス
テップ46へと進む(No)。
用の検査の指示があるか否かが判定される。そして、引
用の検査の指示があればステップ47へと進み(Ye
s)、共通ブロック要素の初期値として、初期値が未設
定であることを示す識別子(例えば、「8B8B…8B8B」)
が設定される。一方、引用の検査の指示がなければステ
ップ48へと進む(No)。
動的に確保された共通ブロック領域が、ライブラリ内で
スレッド番号及び共通ブロック名で管理される。ステッ
プ49では、動的に確保された共通ブロック領域のベー
ス番地が返却される。
の処理によれば、プログラムが並列化されている場合に
は、スレッドの実行状態及び共通ブロックの引用状態に
応じて、次のような処理が実行される。
あり、かつ、共通ブロックの引用が初めてである場合 共通ブロック要素に初期値が未設定であり、かつ、未定
義変数引用の検査指示があれば、共通ブロック要素の初
期値として「8B8B…8B8B」が設定され、ユーザ指定のオ
リジナル共通ブロックのベース番地が返却される。一
方、かかる条件が成立しなければ、ユーザ指定のオリジ
ナル共通ブロックのベース番地がそのまま返却される。
あり、かつ、共通ブロックの引用が初めてではない場合 ユーザ指定のオリジナル共通ブロックのベース番地がそ
のまま返却される。
はなく、かつ、共通ブロックに対するスレッド番号が初
めてのものである場合 共通ブロック領域が動的に確保され、初期値が退避され
ていれば、その初期値が共通ブロック領域に複写され
る。これにより、動的に確保された共通ブロック領域に
対して、初期値の設定が動的に行なわれる。一方、初期
値が退避されておらず、未定義変数引用の検査指示があ
れば、共通ブロック要素の初期値として「8B8B…8B8B」
が設定される。その後、動的に確保された共通ブロック
領域が、スレッド番号及び共通ブロック名で管理され、
そのベース番地が返却される。この管理情報を検索する
ことで、共通ブロックが初めて引用されたものか否かを
判定したり、共通ブロック名とスレッド番号との関連付
けをすることができる。
はなく、かつ、共通ブロックに対するスレッド番号が設
定済みの場合 ライブラリ内で管理されているスレッド番号に対応する
共通ブロックのベース番地が返却される。
合には、次のような処理が実行される。共通ブロックの
引用が初めてであり、共通ブロック要素に初期値が未設
定であり、かつ、未定義変数引用の検査指示があれば、
共通ブロック要素の初期値として「8B8B…8B8B」が設定
され、ユーザ指定のオリジナル共通ブロックのベース番
地が返却される。一方、かかる条件が成立していなけれ
ば、ユーザ指定のオリジナル共通ブロックのベース番地
が返却される。
には、ライブラリにより返却された共通ブロックのベー
ス番地を使用して、共通ブロック要素の引用を行なう方
式に変換される。一方、ライブラリにおいては、実行中
のスレッドがマスタスレッド以外の並列化されたスレッ
ドである場合、動的に確保された共通ブロック領域のベ
ース番地が返却される。このため、プログラムにおいて
は、共通ブロック領域が動的に確保されたものか否かに
かかわらず、ライブラリから返却されたベース番地に基
づいて共通ブロック要素をアクセスすることができるよ
うになる。
ェース領域を使用した手続呼出しが実現され、アプリケ
ーションプログラムの処理性能を大幅に向上することが
できるようになる。
るライブラリは、必要に応じて動的に呼出される動的ラ
イブラリ(Dynamic Linked Library)でも、リンカによ
ってオブジェクトプログラムと結合される静的ライブラ
リ(Static Library)のどちらであってもよい。
プログラムはFORTRANで記述されているものを前提とし
たが、FORTRAN以外の言語、例えば、C,C++等で記述し
たものであっても、本発明を適用できることは言うまで
もない。
例えば、磁気テープ,磁気ディスク,磁気ドラム,IC
カード,CD−ROM等の可搬記録媒体に記録しておけ
ば、本発明に係るコンパイラプログラムを市場に流通さ
せることができる。そして、かかる記録媒体を取得した
者は、一般的なコンピュータシステムを利用して、本発
明に係るコンパイル装置を容易に構築することができ
る。
項2に記載の発明によれば、複数のスレッドが並列処理
されるときであっても、各スレッドにおけるインターフ
ェース領域が独立しているため干渉することがなく、従
来技術では不可能であった並列処理におけるインターフ
ェース領域を使用した手続呼出しを実現することができ
る。
ば、ソースプログラム中にインターフェース領域の先頭
番地を確定するための処理を記述する必要はなく、プロ
グラム構造を簡単にすることができる。
ば、ユーザの考えに即した、柔軟なプログラム構造を提
供することができる。請求項5又は請求項6に記載の発
明によれば、請求項1又は請求項2に記載の発明の効果
に加え、本発明に係るコンパイラプログラムを市場に流
通させることができる。そして、かかる記録媒体を取得
した者は、一般的なコンピュータシステムを使用して、
本発明に係るコンパイラ装置を容易に構築することがで
きる。
処理内容を示すフローチャートである。
処理内容を示すフローチャートである。
るときの処理内容を示すフローチャートである。
ートである。
ートである。
ートである。
は逐次処理のソースプログラム、(B)は並列処理のソ
ースプログラム、(C)は各CPUにおいて実行される
手続を夫々示す。
9)
用が、ライブラリによって確定されたベース番地を使用
して引用する形式に変換される。ベース番地を使用した
共通ブロック要素の引用は、例えば、ユーザプログラム
が、
算を示す。
Claims (8)
- 【請求項1】複数のスレッドを並列処理させるときに、
スレッド単位毎に動的に確保されたインターフェース領
域を使用して、プログラムにおける手続呼出しを行なう
コードを生成することを特徴とするコンパイラ装置。 - 【請求項2】スレッド単位毎に動的に確保されたインタ
ーフェース領域の先頭番地を確定するコードを生成する
コード生成手段と、 ソースプログラム中のインターフェース領域に対する引
用を、該コード生成手段により生成されたコードを実行
することで確定した先頭番地を使用して引用するコード
に変換するコード変換手段と、 を含んで構成されたことを特徴とするコンパイラ装置。 - 【請求項3】前記コード生成手段は、スレッド単位毎に
動的に確保されたインターフェース領域の先頭番地を確
定するライブラリの呼出しコードを生成する構成である
請求項2記載のコンパイラ装置。 - 【請求項4】前記コード生成手段は、ユーザの指定に基
づいて、インターフェース領域の先頭番地を確定するコ
ードを生成する構成である請求項2又は請求項3に記載
のコンパイラ装置。 - 【請求項5】複数のスレッドを並列処理させるときに、
スレッド単位毎に動的に確保されたインターフェース領
域を使用して、プログラムにおける手続呼出しを行なう
コードを生成する機能を実現するためのコンパイラプロ
グラムを記録した記録媒体。 - 【請求項6】スレッド単位毎に動的に確保されたインタ
ーフェース領域の先頭番地を確定するコードを生成する
コード生成機能と、 ソースプログラム中のインターフェース領域に対する引
用を、該コード生成機能により生成されたコードを実行
することで確定した先頭番地を使用して引用するコード
に変換するコード変換機能と、 を実現するためのコンパイラプログラムを記録した記録
媒体。 - 【請求項7】前記コード生成機能は、スレッド単位毎に
動的に確保されたインターフェース領域の先頭番地を確
定するライブラリの呼出しコードを生成する構成である
請求項6記載のコンパイラプログラムを記録した記録媒
体。 - 【請求項8】前記コード生成機能は、ユーザの指定に基
づいて、インターフェース領域の先頭番地を確定するコ
ードを生成する構成である請求項6又は請求項7に記載
のコンパイラプログラムを記録した記録媒体。
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)
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)
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)
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 |
-
1999
- 1999-11-10 JP JP31957099A patent/JP3608993B2/ja not_active Expired - Fee Related
-
2000
- 2000-07-26 US US09/625,891 patent/US7039905B1/en not_active Expired - Fee Related
Cited By (3)
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 |