JP2001282549A - プログラム変換装置及び方法並びに記録媒体 - Google Patents
プログラム変換装置及び方法並びに記録媒体Info
- Publication number
- JP2001282549A JP2001282549A JP2000093508A JP2000093508A JP2001282549A JP 2001282549 A JP2001282549 A JP 2001282549A JP 2000093508 A JP2000093508 A JP 2000093508A JP 2000093508 A JP2000093508 A JP 2000093508A JP 2001282549 A JP2001282549 A JP 2001282549A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- program
- thread
- fork
- data
- 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
- 238000000034 method Methods 0.000 title claims description 126
- 230000001419 dependent effect Effects 0.000 claims description 92
- 230000008569 process Effects 0.000 claims description 45
- 238000005457 optimization Methods 0.000 claims description 17
- 238000004458 analytical method Methods 0.000 claims description 16
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 230000008707 rearrangement Effects 0.000 claims description 8
- 230000014509 gene expression Effects 0.000 claims description 7
- 230000008859 change Effects 0.000 claims description 6
- 238000011144 upstream manufacturing Methods 0.000 claims description 6
- 239000000725 suspension Substances 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 39
- 230000006870 function Effects 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000010365 information processing Effects 0.000 description 4
- 238000005206 flow analysis Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004040 coloring Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 108010016297 plasmin drug combination deoxyribonuclease Proteins 0.000 description 2
- 241000257229 Musca <genus> Species 0.000 description 1
- 241000053227 Themus Species 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
Abstract
ロプロセッサ向けの並列化を行うプログラム変換装置の
提供。 【解決手段】並列化装置11は、FORK箇所決定部2
1とレジスタ割り当て部22と命令並べ換え部23を備
え、入力した中間プログラムに対し、FORK箇所決定
部21はレジスタ割り当て部22でレジスタ割り当てを
試行した結果とメモリデータ依存箇所の数とプロファイ
ル情報ファイル5から得た分岐確率及びデータ依存発生
頻度をもとに、FORK箇所と、FORK方式を決定
し、命令並べ換え部23は、その決定に沿ってFORK
命令前後の命令を並べ換える。
Description
同時に実行できるマルチスレッド型マイクロプロセッサ
のためのプログラム変換技術に関し、特に、小さな粒度
でも実行効率の高い並列プログラムを生成するためのプ
ログラム変換技術に関する。
行性能を高めるための一技法として、従来より、プログ
ラムを複数の命令流即ちスレッドに分割し、それらのス
レッドを並列実行するマルチスレッド実行技術が採用さ
れている。
ロセッサエレメント(プロセッサ要素)を密に結合した
マルチスレッドマイクロプロセッサは、スレッドの生
成、同期等の処理を低コストで行えるという特徴を備え
ており、逐次性が高くスレッド粒度(スレッドのサイ
ズ)が小さいプログラムに対しても、十分な並列処理効
果を出すことができる。
ッサのアーキテクチャとして、 ・文献1(「On−Chip Microproces
sor指向制御並列アーキテクチャMUSCATの提
案」(鳥居他、並列処理シンポジウムJSPP97論文
集、情報処理学会、第229−236頁、May199
7))、 ・文献2(「オンチップ制御並列プロセッサMUSCA
Tの提案」(鳥居他、情報処理学会論文誌、Vol.3
9、No.6、June1998))、 ・文献3(特開平10−78880号公報) 等に示されたアーキテクチャが知られている。
CATアーキテクチャについて説明する。MUSCAT
は、複数のプロセッサエレメントを1チップに集積し、
「制御並列」と呼ぶマルチスレッド処理を効率良く実行
するアーキテクチャである。各プロセッサエレメント
は、それぞれ独立した演算器と独立したレジスタセット
を持つ。他方、各プロセッサエレメントはメモリ空間を
共有する。
ついて説明する。図18に示すように、MUSCATア
ーキテクチャのプロセッサは、スレッド生成のためのF
ORK(フォーク)命令を持ち、この機械命令1つで、
隣接プロセッサエレメントに新しいスレッドを生成する
ことができる。
K命令を実行できる回数を高々1回に制限する「FOR
K1回モデル」を採用している。各プロセッサエレメン
トは、単方向のリング状に結合され、あるプロセッサエ
レメントで実行中のスレッドがFORK命令を実行する
と、下流側に隣接するプロセッサエレメントに新しいス
レッドが生成される。スレッドがTERM(ターム)命
令(スレッド終了命令)を実行すると、自スレッドが終
了する。
りは、レジスタまたはメモリを通じて行われる。FOR
K命令を実行すると、当該スレッド(「親スレッド」と
呼ぶ)を実行しているプロセッサエレメントのレジスタ
セットの内容が、生成された新スレッド(「子スレッ
ド」と呼ぶ)を実行するプロセッサエレメントのレジス
タセットに論理的にコピーされる。また、親スレッドが
FORK命令実行前にメモリにストアした値は、子スレ
ッドがロードして参照することができる。
スレッドが子スレッドにデータを渡す唯一の方法は、メ
モリを介してデータを渡す、というものである。この場
合、親スレッドのストアと子スレッドのロードの実行順
序を正しいものにするために、一種の同期をとる必要が
ある。この同期のための措置を、「データ依存保証」と
呼ぶ。
めの方式として、 ・予め同期を明示的に宣言するBLOCK方式、 ・同期無しで実行して、もし同期に失敗したら実行をや
り直すDSP方式、 の2種類のデータ依存保証方式を備える。
る図である。BLOCK方式によるデータ依存保証方式
は、MUSCATが備えるBLOCK(ブロック)命令
と、RELEASE(リリース)命令を用いる方式であ
る。
をBLOCK命令で指定してからFORK命令を実行
し、メモリストアを行う。その後、親スレッドは、RE
LEASE命令を実行して、当該メモリアドレスにデー
タが準備できたことを表明する。親スレッドがBLOC
Kしたアドレスからのロードを子スレッドが実行しよう
とすると、親スレッドがRELEASE命令を実行する
まで、子スレッドのロード命令は完了しない。このよう
にして、親スレッドがメモリに書き込んだ値(メモリに
ストアした値)を、子スレッドが正しく読み出す(メモ
リからロードする)ことができる。他のデータ依存保証
方式であるDSP方式は、投機実行方式の一つであり、
詳細は後述する。
ーキテクチャの投機実行機能について説明する。MUS
CATのSPFORK命令はFORK命令の一種であ
り、制御投機モードのスレッド生成を指示する。SPF
ORK命令で生成された子スレッドは、いつでも実行を
取り消せる状態で実行される。即ち、レジスタ値の変更
は許されるが、外部メモリへのアクセスは抑止される。
THFIX命令(スレッド確定命令)を実行すると、子
スレッドの制御投機モードは解除され、内部で溜ってい
たメモリ変更操作が実際にメモリに反映される。
に、親スレッドがTHABORT命令(スレッド破棄命
令)を実行すると、子スレッドは破棄され、レジスタや
メモリに対して行おうとした変更は全て捨てられる。な
お、親スレッドがTHFIX命令、又はTHABORT
命令を実行する前に、TERM命令により終了すると、
子スレッドの制御投機モードは解除される。
行することになる可能性が高いが、現時点では実行して
もよいか否か判断がつかない場合等に用いられる。即
ち、プログラム内の早い段階で制御投機モードスレッド
を生成して並列に処理を行い、後になって生成したスレ
ッドでの処理を本当に行うかどうかを判定してスレッド
の確定ないし破棄を行う。
の流れを予測し、投機的にスレッド生成するものである
が、これとは独立に、MUSCATには、データ依存を
予測し、投機的にスレッドを実行する機能が用意されて
いる。このようなスレッド状態は、「データ依存投機モ
ード」と呼ばれる。
レッドは、BLOCK命令やRELEASE命令を用い
る必要はない。ハードウェアアーキテクチャが、実行時
に親子スレッド間のメモリデータ依存(親スレッドのメ
モリへのストアと子スレッドのメモリからのロードの時
間順序)を検査し、子スレッドが誤った値をロードした
場合には、子スレッドを再実行させる。
データ依存保証方式であるDSP方式は、このデータ依
存投機モードを利用する方式である。
タ依存投機モードでFORKすることを意味するDSP
IN命令を実行した後で、FORKを行う。これによっ
て生成された子スレッドは、データ依存投機モードで実
行を開始する。その後、親スレッドがDSPOUT命令
を実行すると、子スレッドはデータ依存投機モードから
非データ依存投機モードに戻る。
ELEASE命令が不要であり、データ依存を引き起こ
すメモリアドレスが事前に分かっていない場合でも、F
ORKを行える、という長所がある。しかしながら、も
し、FORK後にデータ依存が発生すると、子スレッド
は誤ったデータに基づいた部分の実行をやり直すことに
なる、という短所をもつ。
の状況によって、BLOCK方式あるいはDSP方式の
うち、適切な方式を選択すべきである。
存保証方式等の制御並列サポート命令により、MUSC
ATアーキテクチャでは、プログラムから並列実行可能
な部分をより多く抽出し、プログラムの実行性能を向上
させることができる。
けのプログラムは、FORK(フォーク)を行う箇所毎
に、前述の命令を用いたコーディングを行わねばなら
ず、このため、高級言語(高水準プログラミング言語)
から機械命令列を自動生成するコンパイラが、従来型の
アーキテクチャよりも、一層強く求められる。
ラ技術は、文献4(「制御並列アーキテクチャ向け自動
並列化コンパイル手法」(酒井他、情報処理学会論文
誌、Vol.40、No.5、May1999))にお
いて開示されている。この文献4に示された技術の概要
を以下に説明する。
生成した機械命令列を、MUSCAT向け命令列に変換
するトランスレータの仕組みが記載されている。与えら
れた機械命令列に対して、制御フロー解析及びデータフ
ロー解析を行い、基本ブロック毎にFORK命令を用い
た並列化を試みる。ここで、「基本ブロック」とは、途
中で制御の分岐や合流が無い、一続きの命令列のことを
いう。
ロック末尾の分岐命令を、制御投機モードFORK命令
(SPFORK命令)に置き換えることから始まる。こ
れは、ある基本ブロックに後続する複数の基本ブロック
の一方を、当該基本ブロックと並列に実行しようとする
ことを意味する。後続基本ブロックのうちいずれを選択
するかは、前記文献4では、ループ構造の場合は、ルー
プの戻り方向がよいとされている他、プロファイル情報
を用いて分岐確率の高い方を選択することが示されてい
る。
本ブロック以降との間でのレジスタ、及びメモリアクセ
スによるデータ依存を調査する。
命令ができるだけ上流に位置するように、基本ブロック
内で命令の並べ換えを行う。命令並べ換えに際しては、
データ依存関係に留意し、レジスタを介して正依存があ
る場合には、その命令をFORK命令よりも上流側に配
置する。メモリを介して正依存がある場合には、DSP
IN命令ないし依存メモリアドレスを引数としたBLO
CK命令を、FORK命令の直前に新たに挿入する。
は、依存をひき起こすメモリアドレスがストア直前まで
決定できない場合、及び、依存をひき起こすメモリアド
レスが決定できた場合でもメモリアドレス値がある数よ
り多い場合には、DSPIN命令、それ以外の場合に
は、BLOCK命令を用いるものとされている。なお、
前記文献4では、この他にも、MUSCAT特有の命令
生成手順が述べられているが、本発明の主題とは直接の
関連性は薄いため、ここでは、あらためて説明は行わな
い。
来の技術は、下記記載の問題点を有している。
準に、まだ改良の余地がある、ことである。
構造の把握、動的には実行履歴のプロファイル情報を得
て、それに基づいてFORK先を決定している。しかし
ながら、これらは、制御の流れ上、実行される確率が高
い部分をFORKしているにすぎず、データ依存性につ
いては、考慮されていない。このため、過度のデータ依
存が存在する部分をマルチスレッド実行しようとして
も、並列実行区間が短くなったり、あるいはデータ依存
箇所で待ち合わせが起こるため、結果として、得られる
性能向上は、小さなものとなってしまう、という問題が
ある。
ジスタとメモリとで異なっている、ということである。
レジスタを介した依存と、メモリを介した依存とで、命
令の並べ換えや、新規挿入命令の処理が異なっている。
しかしながら、コンパイラ内部では、「中間項」と呼ば
れる仮想的な変数を用いた表現が用いられることが一般
に行われており、その段階で、レジスタかメモリかの判
断に基づく並列化処理を行うことは困難である。
段近くになれば、レジスタ割り当てが済み、レジスタと
メモリの区別が確定しているが、この段階で並列化を行
おうとすると、既に、最適化された制御フローやデータ
フローに悪影響を与えないように、プログラム構造を変
更する処理が困難になる。
てなされたものであって、その目的は、コンパイラ内部
の中間項レベルで的確な判断により並列化処理を行える
ようにし、もってマルチスレッドマイクロプロセッサ向
けプログラム変換装置及び方法並びに記録媒体を提供す
ることである。
層の並列性能を引き出すような目的コードを生成できる
プログラム変換装置(コンパイラ)及び方法並びに記録
媒体を提供することにある。これ以外の本発明の目的、
特徴、利点等は、下記の実施の形態の記載等から、当業
者には直ちに明らかとされるであろう。
明の第1のプログラム変換装置は、中間プログラム上で
レジスタ割り当てを試行して割り当て情報を先行取得す
るレジスタ割り当てを試行部と、メモリを介して発生す
るデータ依存の距離の計算部と、を備え、メモリを介す
るデータ依存の距離を考慮してFORK先を決定し、条
件分岐をFORK命令に置き換え、レジスタ割り当て試
行結果を参照して、中間プログラム上で、FORK命令
前後の命令並べ換えを行う。
は、前記第1のプログラム変換装置に加えて、プロファ
イル情報から条件分岐確率及びデータ依存発生頻度を計
算する部分とを備え、データ依存の距離と条件分岐確率
とデータ依存発生頻度とデータ依存メモリ箇所数からF
ORK先を決定し、条件分岐をFORK命令に置き換
え、レジスタ割り当て試行結果を参照して中間プログラ
ム上でFORK命令前後の命令並べ換えを行う。
コンパイルしてマルチスレッド型のターゲットプロセッ
サ装置向けの目的プログラムを生成出力するコンパイラ
における、構文解析の結果出力される中間プログラムに
対して並列化を含む最適化処理を行う方法であって、
(a)並列化に先立ってレジスタ割り当てを試み、中間
プログラム上の各変数、及び中間項のレジスタ割り当て
状況を予測するレジスタ割り当て試行ステップと、
(b)前記レジスタ割り当て試行結果に基づいて、前記
中間プログラムにおける条件分岐部分をスレッド生成命
令を用いた並列コードに変換するか否かの決定を行う
か、もしくは、並列コードに変換するか否かの決定と並
列コードに変換する場合その並列実行方式の決定を行う
フォーク(FORK)箇所決定ステップと、(c)前記
フォーク(FORK)箇所決定部での決定結果に基づい
て、前記中間プログラム中の条件分岐部分を、スレッド
生成命令を用いた並列コードに変換し、前記レジスタ割
り当て試行結果を参照して、スレッド間のメモリを介し
たデータ依存関係を保証する命令を、前記スレッド生成
命令の前後に挿入すると共に、スレッド生成が早い段階
で行われるように、前記スレッド生成命令の前後の命令
を並べ換える命令並べ換えステップと、(d)並列化さ
れ並べ換えられた命令列に対して、物理レジスタが割り
当てられるか否かに関して、前記レジスタ割り当ての試
行時と同じ割り当て結果となるように確定的なレジスタ
割り当てを行うレジスタ割り当てステップと、を含む。
置は、好ましくは、複数のプログラムカウンタと、複数
のスレッド実行装置と、を備え、前記複数のスレッド実
行装置は、前記複数のプログラムカウンタに従って、複
数のスレッドの命令を、同時に、フェッチ、解釈、実行
し、スレッド生成時以降に、レジスタセットに及ぼした
変更を、後に取り消し可能な制御投機的モードでスレッ
ドを実行すること、及び、自スレッドがメモリ領域から
値をロードした後に、自スレッドを生成した親スレッド
が同一メモリ領域に値をストアした場合に、自スレッド
の少なくとも当該ロード以降の処理結果を破棄し、それ
らの処理を再実行するデータ依存投機的モードでスレッ
ドを実行すること、が可能とされ、命令セットとして、 ・前記スレッド実行装置で実行中のスレッドが制御投機
的モードの新たなスレッドを生成すること、 ・指定された条件が成立していれば自スレッドを終了さ
せると共に、自スレッドが生成した制御投機的モードの
スレッドの制御投機的モードを解除すること、 ・生成した制御投機的モードのスレッドを破棄するこ
と、 ・自スレッドが生成するスレッドが指定されたアドレス
のメモリ領域からのロードを行う際に、その動作を一時
停止させることをあらかじめ指示すること、 ・指定されたメモリアドレスに対する前記ロード一時停
止指示を解除すること、 ・前記スレッド実行装置で実行中のスレッドがデータ依
存投機的モードの新たなスレッドを生成すること、及
び、 ・自スレッドが生成したデータ依存投機的モードのスレ
ッドのデータ依存投機的モードを解除すること、 が、単一又は高々数個の機械語命令の組合せで実行でき
る命令セットを有するマルチスレッドプロセッサよりな
る。
て図面を参照して説明する。
の形態の構成の一例を示す図である。図1を参照する
と、プログラム変換装置(コンパイラ)2は、原始プロ
グラム(ソースプログラム)1を読み込んで並列化を含
むコンパイル処理を行い、その結果の目的プログラム
(ターゲットプログラム)3を出力する。
ラム3を入力して、目的アーキテクチャの命令実行を行
うと共に、当該プログラムの実行情報を収集し、プロフ
ァイル情報ファイル5を出力する。
は、 ・入力した原始プログラム1の文法(シンタックス)を
解釈して、構文解析し中間プログラムを生成する構文解
析装置10と、 ・構文解析装置10から受け取った中間プログラムに対
して並列化を含む最適化処理を行う並列化装置11と、 ・並列化装置11から受け取った最適化済みの中間プロ
グラムから目的アーキテクチャ用命令列を生成するコー
ド生成装置12と、 を備えている。
ファイル情報ファイル5を入力としてより高度な最適化
処理を行うことができる。
は、周知の構成が用いられ、例えば字句解析(レキシカ
ルアナリシス)、構文解析(パージング)、意味解析
(セマンティックアナリシス)の各解析部からなる構成
としてもよいことは勿論である。また最適化済みの中間
プログラムから目的アーキテクチャ用命令列を生成する
コード生成装置12も、周知のものが用いられる。
ム変換装置2における並列化装置11の構成を示す図で
ある。図1及び図2を参照して、本発明の要部をなす並
列化装置11について詳細に説明する。
成した中間プログラム6を受け取り、並列化を含む最適
化処理を行い、後段のコード生成装置12に中間プログ
ラム7を渡す。
やデータフローを解析する中間プログラム入力部20
と、 ・制御フロー、データフロー及びプロファイル情報をも
とに並列化する箇所を決定するFORK箇所決定部21
と、 ・中間プログラム上の中間項に対してレジスタ割り当て
を試行するか、あるいは実行するレジスタ割り当て部2
2と、 ・決定された並列化箇所とデータフロー等の情報から並
列化箇所前後の命令の並べ換えを行う命令並べ換え部2
3と、 ・並列化を含む様々な変換を終えた命令列を再度中間プ
ログラム形式で出力する中間プログラム出力部24と、 ・一度目的プログラムを実行して得たプロファイル情報
ファイル5を入力して内部形式に変換するプロファイル
情報入力部25と、 を備えている。
ートを参照して、本発明の一実施の形態の並列化動作に
ついて、詳細に説明する。
ログラム上で、次の制御並列関連命令が記述できる。
ORK命令は、オペランドで指し示された命令から実行
を開始する制御投機モードの子スレッドを生成し、自ス
レッドは後続命令の実行を続ける命令である。
令は、自スレッドを終了させるとともに子スレッドを確
定モードに移行させる命令である。
棄命令は、制御投機モードの子スレッドを破棄する命令
である。
令は、オペランドで指し示されたメモリアドレスにブロ
ックを設定し、それによって子スレッドが当該メモリア
ドレスからのロードを実行しようとした際に子スレッド
の実行を一時停止(ブロック)させるように、プロセッ
サに指示する命令である。
令は、オペランドで指し示されたメモリアドレスに設定
されているブロックを解除するとともに、当該メモリア
ドレスからのロードで一時停止(ブロック)されている
子スレッドの実行を再開させるように、プロセッサに指
示する命令である。
タ割り当て指示命令は、オペランドで指定した中間項な
いし変数に物理レジスタを割り当てるように、あるいは
逆に、指定した中間項ないし変数にメモリ上の領域を割
り当てるように、レジスタ割り当て部に指示する命令で
ある。
箇所決定部21の動作概要を示す図である。FORK箇
所決定部21は、与えられた中間プログラム中の各関数
単位で、図3に示された動作を行う。即ち、 ・ステップ25にて、当該関数内でレジスタ割り当てを
試行し、その後、 ・ステップ26にて、当該関数内に含まれる各条件分岐
命令に対してFORK箇所決定処理を行う。
む各種最適化処理は未完了であり、まだ確定的なレジス
タ割り当て処理を行う段階ではない。そこで、レジスタ
割り当ての途中までを実行し、中間プログラム中のどの
中間項/変数にレジスタが割り当てられ、どの中間項/
変数がメモリ上に配置されるのか、という情報を得た段
階で、実際に割り当ては行わずにレジスタ割り当て処理
を中止する。
に、レジスタ割り当て部22(図2参照)で行う。レジ
スタ割り当て部22は、どの中間項/変数に、どのレジ
スタを割り当てるかを決めた段階で処理を終え、中間項
/変数を実際のレジスタに置き換えることなく、レジス
タ割り当て状況のみを返す仕組み(機構)を備える。
箇所決定部21の処理(図3のステップ26)の詳細を
示す図である。
該条件分岐命令が、入力中間プログラム中のループ構造
(繰り返し構造)の戻り枝に相当する分岐命令か否かを
判定する。ループ構造の検出方法については、例えば、
文献5(「コンパイラII原理・技法・ツール」、A.
V.エイホ他著、原田賢一訳、サイエンス社、199
0)の第734頁〜第737頁の記載が参照される。
が、ループ戻り枝に相当する分岐命令である場合、ステ
ップ35にて、当該戻り枝方向、即ちループ継続方向を
FORK先として、この条件分岐箇所を、FORK箇所
に選定する。その理由は、一般に、ループ構造は、複数
回繰り返し実行される傾向にあるため、ループ戻り枝に
相当する分岐命令では、戻り枝側に分岐する確率が高
い、からである。
い場合、ステップ32において、条件分岐の2つの分岐
先の各々に対してデータ依存の距離の最小値を計算す
る。
在、処理対象としている基本ブロック内で定義され、そ
の分岐先で参照される可能性がある中間項及び変数のう
ち、ステップ26により、メモリ上に配置されると見込
まれる、中間項/変数各々に対して、その分岐先基本ブ
ロックの中で、該メモリ参照命令が先頭から、どれぐら
いの位置にあるかを、中間プログラム中のステップ数で
表したものである。
て、各中間項/変数のデータ依存の距離の最小値を計算
する。
件分岐の両側に関して求めた2つのデータ依存の距離の
最小値を比較し、両者に一定以上の差があるか否かを判
定する。
る場合、ステップ36にて、データ依存の距離の最小値
の大きい側の分岐方向をFORK先とし、この条件分岐
箇所を、FORK箇所に選定する。その理由は、ここで
選定した分岐方向を新スレッドとしてFORKする方が
もう一方をFORKする場合に比べ、FORK直後に、
データ依存で停止してしまう可能性が低い、からであ
る。
る際、単純な命令ステップ数では、なく、各命令が目的
アーキテクチャのプロセッサ上で実行される際に要する
ものと推定されるサイクル数(クロックサイクル等)を
用いることもできる。これにより、データ依存が発生す
る時期の遅い方を選択する、という、上記ステップ33
の選択がより的確なものになる。
3で、データ依存の距離の最小値に一定以上の差がない
場合、元の中間プログラム内で分岐先であった側(分岐
命令のtaken側(分岐成立側))をFORK先と
し、この条件分岐箇所を、FORK候補に選定する。こ
のFORK先の選定は、従来の技術として挙げた上記文
献等に示されているものと同じ理由による。
1は、FORK箇所と、FORK先を決定する。
示した、FORK箇所決定部21の処理によって、通常
は、最適化の最終段で行うレジスタ割り当て処理を待た
ずに、レジスタ割り当て情報を参照して中間プログラム
上で並列化処理を行うことが可能となる。
図4のステップ32、ステップ33の処理を設けること
で、ループ構造以外の部分での性能向上の可能性が高ま
る。
置11の命令並べ換え部23の動作を説明するための流
れ図である。また、図6は、命令並べ換え部23の命令
並べ換え処理の説明を補足する図である。以下、図5及
び図6を参照しながら、命令並べ換え部23の動作を説
明する。
は、FORK箇所決定部21が決定したFORK箇所を
含む基本ブロック毎に、ステップ40からステップ44
の一連の処理を行う。なお、ステップ40からステップ
44の処理は、すべて中間プログラムに対して行う。こ
れらのステップの説明に現れる命令は、すべて中間プロ
グラム上の対応する命令を指す。
対象とする基本ブロックの構造を模式的に示した図であ
る。図6(A)における「M:=‥」はメモリへのスト
アを行う命令を意味する。
グラム中の各中間項及び変数がレジスタに対応付けられ
るかメモリに対応付けられるかを調べる。これは、図4
のステップ32と同様に、レジスタ割り当てを途中まで
試行することで判定する。ステップ32からこのステッ
プ40までの処理では、FORK先を決定するのみで、
中間プログラム自体は変更されず、レジスタ割り当て状
況に差が出ないので、ステップ32のときのレジスタ割
り当て試行結果を保存しておき、その情報をステップ4
0で参照するのがよい。
ている基本ブロックの末尾にある分岐命令を、制御投機
モードFORK命令に置換(変換)する。制御投機FO
RK命令のオペランド、即ちFORK先は、FORK箇
所決定部21が選択したFORK先とする。図6(B)
は、ステップ41までの処理を終えた段階の基本ブロッ
ク構造を示す図である。
制御投機FORK命令の直前にある分岐条件計算文(分
岐条件式)を、制御投機FORK命令直後に移動させる
と共に、その移動先の直後、即ち当該基本ブロックの末
尾に、「分岐条件成立時には自スレッドを終了させて子
スレッドを確定モード(非制御投機モード)に移行さ
せ、分岐条件非成立時には、子スレッドを破棄(アボー
ト)させて自スレッドが後続命令列の実行を続ける」と
いうような一群の命令列を挿入する。図6(C)は、ス
テップ42までの処理を終えた段階の基本ブロック構造
を示す図である。
る基本ブロックにおいて、FORK命令よりも手前、即
ち、上流側にある文のうち、ステップ40において、メ
モリに対応付けられた中間項及び変数への代入となる文
の各々について、その代入文を、FORK命令よりも後
方、即ち、下流側へ移動させると共に、FORK命令の
直前に、ブロック設定命令を挿入し、代入文(:=)の
移動先の直後に、ブロック解除命令を挿入する。ここ
で、挿入するブロック設定命令、及びブロック解除命令
のオペランドは、移動させた代入文の代入先中間項/変
数を表すメモリアドレスとする。
階で、具体的なメモリアドレスが確定していない場合が
あるが、その場合は、中間プログラム中での中間項/変
数表現と同様の形式を用いてブロック設定命令及びブロ
ック解除命令を表現し、後に、中間プログラムからコー
ド生成を行う際に実効メモリアドレスを示す命令列に変
換すればよい。
スタに対応付けられた中間項及び変数への代入となる文
のうち、FORK先で参照される可能性がある中間項/
変数への代入となる文は、FORK命令後に移動させて
はならない。その理由は、レジスタの値はFORK時点
で子スレッドに継承されるため、FORK後に親スレッ
ドが定義したレジスタ値は子スレッド側に渡されないた
めである。
命令後に移動できるわけではないため、ステップ43に
おいて、メモリへの代入文をFORK後に移動させる際
には、移動させようとしている文と、その後続命令との
間のデータ依存関係を調べ、移動によって実行順序が入
れ替わっても、移動前と同じ演算結果が得られる場合に
限って移動を行わなければならない。
は、コンパイラ技術として一般的なものでよく、本発明
の一実施の形態では、図2における中間プログラム入力
部20が作成した制御フロー及びデータフロー解析結果
を基に、調査して得ることができる。
終えた段階の基本ブロック構造を示す図である。
ップで各中間項及び変数のレジスタ割り当てについて仮
定した情報を、現在処理対象の基本ブロックの先頭に挿
入する。この情報は、実際の機械命令に対応するもので
はないので、中間プログラム上の疑似命令であるレジス
タ割り当て指示命令を用いて記述する。
理を終えた段階の基本ブロック構造を示す図である。
40及びステップ44を具備することを特徴の一つとし
ている。即ち、・ステップ41のFORK変換処理に先
立って、レジスタ割り当て状況を調べるステップ40
と、・ステップ41のFORK変換処理で仮定したレジ
スタ割り当て状況を、レジスタ割り当て部22に指示す
るステップ44と、を有しており、このため、中間項及
び原始プログラム中の変数表現を用いた中間プログラム
に対しても、詳細な命令並べ換えを行うことができる。
理は、上記文献4(「制御並列アーキテクチャ向け自動
並列化コンパイル手法」(酒井他、情報処理学会論文
誌、Vol.40、No.5、May1999))の第
2049頁〜第2050頁に記載されているものと同様
のものである。
は、中間プログラム中の中間項に、目的アーキテクチャ
が有する物理レジスタあるいはメモリ上に割り当てられ
た領域を対応付けるレジスタ割り当て処理を行う。
は、中間項の使用頻度の高いものから割り当てる方法や
干渉グラフの彩色(カラーリング)による割り当て方法
などを用いることができる。これらの割り当て方法は、
例えば上記文献5(「コンパイラII 原理・技法・ツ
ール」、A.V.エイホ他著、原田賢一訳、サイエンス
社、1990」)の第659頁〜第665頁の記載が参
照される。
割り当て処理は、図5のステップ44で挿入したレジス
タ割り当て指示命令に従う点で、通常のコンパイラでの
レジスタ割り当て処理とは異なる。レジスタ割り当て方
法として、例えば中間項使用頻度順のレジスタ割り当て
方法を採る場合は、レジスタ割り当て指示命令でレジス
タに乗せるよう指定された各中間項の頻度を、他の中間
項よりも高く設定することで、指示された中間項が物理
レジスタに割り当てられる可能性を高める。
ーリングによる方法を採る場合は、干渉グラフ中で割り
当て可能な物理レジスタ総数を越える隣接節点数を持つ
節点に対応する中間項の中からメモリ上に割り付ける中
間項をいくつか選択する際、図5のステップ44で挿入
したレジスタ割り当て指示命令でレジスタに乗せるよう
に、指示されていない中間項を優先的に選択すること
で、レジスタ割り当て指示された中間項が物理レジスタ
に割り当てられる可能性を高める。
スタ割り当て指示命令でレジスタに乗せるように指示さ
れた全ての中間項に物理レジスタを割り付けられなかっ
た場合、それらの中間項は、メモリ領域に割り当てられ
るようにする。その理由は、命令並べ換え部23によっ
て、レジスタ割り当てを前提としている中間項はFOR
K命令より手前(上流側)で値が確定するようにプログ
ラムが変換されているため、それらの中間項が、たとえ
メモリ上に割り当てられたとしてもプログラムの実行結
果は、変化しないからである。
タ割り当て指示命令でレジスタに乗せるよう指示されて
いない中間項をレジスタに割り当てないように、レジス
タ割り当て処理を行う。これは、従来からのレジスタ割
り当て処理における、アドレスを参照されている変数
や、volatile変数等のレジスタ上に配置できな
い変数に対する処理と同様の枠組で対処できる。
についてさらに詳細に説明すべく、具体的な実施例を用
いて説明する。
して、並列化装置11によって並列化される中間プログ
ラムの一例を示す図である。ここでt1〜t28は中間
項であり、I、J、K、R、Xは原始プログラム中で宣
言された変数である。
格納することを意味する。
を返す前置演算子である。
するメモリの内容を示し、「:=」の右辺ならメモリロ
ード、左辺ならメモリストアを意味する。
きの数字(1)〜(37)は、説明の都合により付した
番号であり、右端の(B1)〜(B3)は基本ブロック
番号を示す。
用いる中間プログラム上の制御並列関連命令一覧を示す
図である。
ら実行開始する投機(制御)モード子スレッドを生成す
る。 ・TTERM c は、オペランドcが真の場合、自ス
レッドを終了し、子スレッドを確定する。 ・FTERM c は、オペランドcが偽の場合、自ス
レッドを終了し、子スレッドを確定する。 ・THABORT は、投機モードの子スレッドを破棄
する。 ・BLOCK m は、オペランドmで指定したメモリ
アドレスをブロック指定する。 ・RELEASE m は、オペランドmで指定したメ
モリアドレスに設定したブロックを解除する。 ・DSPIN は、後続のFORKで生成した子スレッ
ドをデータ依存投機モードで生成する。 ・DSPOUT は、子スレッドのデータ依存投機モー
ドを解除する。RDCL t1,… は、オペランドt
1,…で指定した中間項/変数をレジスタに割り当てる
ように指示する。MDCL t1,… は、オペランド
t1,…で指定した中間項/変数をメモリに割り当てる
ように指示する。
1が、図8に示された中間プログラムを受け取り、FO
RK箇所の決定を行う。
てが試行され、t1〜t28の全ての中間項、及び変数
I、K、Rには物理レジスタが割り当てられたが、変数
J、Xには、メモリ上の領域が割り当てられた、という
試行結果を得たとする。
含む基本ブロック(B1)が並列化変換の対象となる。
以下、図4を参照して、FORK箇所決定処理部27の
動作を説明する。
うが、図8の(11)の条件分岐は、ループ戻り枝では
ないため、ステップ32に進む。
(B1)と(B2)、(B1)と(B3)の間でのデー
タ依存の距離を求める。
見てみると、(B1)の(7)におけるメモリストア
と、(B2)の(14)、(18)、(19)における
メモリロードとの間にデータ依存がある。
列要素X[I]へのストアと、変数J、配列要素X
[J]からのロードであり、配列Xと、変数Jのメモリ
領域が重ならず、IとJの値が異なっていれば、データ
依存は発生しない。すなわちブロック(B1)におい
て、(11)のt1:=&Xは、配列Xの先頭アドレス
を中間項t1に格納し、1配列要素は4バイトであり
(t4=t2*t3)、t5=t1+t4により、
(7)のmem(t5)が、X[I]のメモリアドレス
を示し、このアドレスへのt6のメモリストアであり、
またブロック(B2)において、(18)のt15:=
mem(t14)は、X[J]からのメモリロードを表
している。
果、このような条件が常に満たされる確証を得られず、
メモリストアとメモリロードとの間に、潜在的なメモリ
データ依存が存在すると判断されたものとして、説明を
続ける。
離は、図8の中間プログラム上のステップで数えて、各
々1、5、6である。ここで、(12)にあるラベルL
1は、非実行文であるためステップ数に含めず、(1
3)にある命令を0、(14)にある命令を1、(1
5)にある命令を2、というように数えている。これに
より、(B1)−(B2)間のデータ依存の距離の最小
値は1である。
1)の(7)と、(B3)の(29)、(33)との間
にデータ依存があり、その距離は、各々5、9である。
つまり、(B1)−(B3)間のデータ依存の距離の最
小値は5である。
の距離の最小値である6と10とを比較し、その差が十
分であると判断し、データ依存の距離の最小値の大きい
側である(B3)側の分岐方向を、FORK先に選定す
る。
Jがメモリではなくレジスタに割り当てられるという見
通しを得ていたすると、(B1)−(B2)、(B1)
−(B3)のデータ依存の距離の最小値は各々5、9と
なり、ステップ33にて(B2)側をFORK先に選定
することになる。
3の動作を具体的に説明する。本実施例では、中間プロ
グラム上で、図7に示す制御並列関連命令が利用できる
ものとする。
えると、命令並べ換え部23は、基本ブロック(B1)
から(B3)へのFORKを行うように、命令並べ換え
処理を行う。
28と、変数I、K、Rがレジスタに割り当てられる、
という情報を取得する。
(11)の分岐命令(then 以下のgoto L
2)を、制御投機FORK命令であるSPFORK命令
に置き換える。SPFORK命令のオペランドは、FO
RK先として決定した(B3)、即ちラベルL2とする
(図9の(58)のSPFORK L2)。
分岐条件を計算する文を構成する一連の命令(8)〜
(10)を、SPFORK命令の直後に移動させ、(1
1)の分岐条件に合わせた条件付きスレッド終了命令で
ある、FTERM命令(条件不成立時に自スレッドを終
了する命令)、更には、THABORT命令と、後続ブ
ロックである(B1)への無条件分岐命令(goto
L1)を挿入する。
ように挿入する。
行って、SPFORKが本当に正しかったか否かを判定
する。
ば、条件付きスレッド終了命令の一種FTERMによ
り、自スレッド(親スレッド)を終了させると同時に、
生成した子スレッドを、制御投機モードから確定モード
(非制御投機モード)に変更する。
機失敗)ならば、FTERM命令は何もせず、後続のT
HABORT命令によって、子スレッドを破棄し、無条
件分岐命令(図9の(64)のgoto L1)によっ
て、自スレッドは、FORK先とは逆の分岐先の命令の
実行を続けるようにする。図9は、図8に示す中間プロ
グラムに対して、図5のステップ42までの変換を施し
た中間プログラムを示す図である。
を構成する一連の命令である図9の(56)と(57)
を、SPFORK命令(58)の直後に移動し(図10
の(108)、(109))、その直後に、RELEA
SE命令を挿入する(図10の(110))。
させたストア命令(57)のオペランドと同じ中間項を
用いる。またSPFORK命令(58)の直前に、スト
ア命令(57)のオペランドと同じ中間項をオペランド
とするBLOCK命令を挿入する。図10は、ここまで
の変換を施した中間プログラムである。
動させる際、命令(51)〜(57)全部ではなく、
(56)と(57)のみを移動させた理由は、実効メモ
リアドレスを保持する中間項を、BLOCK命令及びR
ELEASE命令で再利用できるようにするためであ
る。コンパイラ分野において、「共通部分式削除」と呼
ばれる最適化機能を用いれば、ここでBLOCK及びR
ELEASEのたびに実効アドレスを再計算するような
プログラム変換を施しても、共通部分式削除最適化によ
り冗長な実効アドレス計算は削除される。
(B1)、(B2)、(B3)の先頭に、RDCL命令
及びMDCL命令を挿入する。これらの命令は、後段の
レジスタ割り当て部22への指示であり、このうち、・
RDCL命令は、指定した変数ないし中間項へのレジス
タ割り当てを行い、・MDCL命令は、指定した変数な
いし中間項へのメモリ領域の割り当てを行う。
ログラムである。(201)〜(203)、(221)
〜(223)、(235)〜(237)がステップ44
で挿入した命令である。
後、レジスタ割り当て部22が、レジスタに置くべき変
数や中間項に物理レジスタを割り当てる。
力される目的プログラムが実行される装置のアーキテク
チャ(ターゲットアーキテクチャ)は、r0〜r31の
32本の物理レジスタを持ち、レジスタ変数(原始プロ
グラム中の変数のうち、物理レジスタに割り当てられる
もの)用に、物理レジスタr10〜r19、作業用レジ
スタ(主として演算途中結果を保持するレジスタ)用
に、物理レジスタr20〜r30を用いるようなレジス
タ割り当てを行うものとする。
を割り当て、 ・中間項t1〜t28には、r20〜r30を順に割り
当てる。
に対して、レジスタを割り当てた後の中間プログラムを
示している。なお、図12の中間プログラムには、冗長
な命令が含まれるが、これらの冗長さは、従来から提案
されている最適化処理を行うことで除去できる。従来の
各種最適化方法については、例えば文献5(「コンパイ
ラII 原理・技法・ツール」、A.V.エイホ他著、
原田賢一訳、サイエンス社、1990)の第772頁〜
第790頁に説明されている。
前に施すことが好ましいため、図2において、好ましく
は、FORK箇所決定部21よりも手前、例えば中間プ
ログラム入力部20の内部に実装される。
の形態について、図面を参照して詳細に説明する。本発
明の第2の実施の形態では、プロファイル情報を参照し
て、FORK先及びFORK時のデータ依存対処方法を
選択する点に特徴があるが、その他の点は、前記第1の
実施の形態と、基本的に同一とされる。
形態においては、まずプログラム変換装置2を用いて原
始プログラム1から目的プログラム3を生成する。この
とき、プログラム変換装置2は、機械命令アドレスとプ
ログラム変換装置2内で用いる中間プログラムとの対応
をとるための情報を、目的プログラム3の中に埋め込
む。目的プログラム実行装置4は、この目的プログラム
3を実行し、その際に収集した実行情報をプロファイル
情報ファイル5として出力する。
て、原始プログラム1を並列化し、目的プログラム3を
生成する。このとき、プロファイル情報ファイル5を用
いて、より実行時性能の高い目的プログラム3を生成す
る。
の実施の形態とほぼ同様であるが、図2における、FO
RK箇所決定部21と、命令並べ換え部23の動作が、
前記第1の実施の形態とは異なり、プロファイル情報を
参照しながら、より実行時性能の期待できる並列化処理
を行う。
K箇所決定部21の動作概要は、図3を参照して説明し
た前記第1の実施の形態と同じである。即ち、FORK
箇所決定部21は、与えられた中間プログラム中の各関
数毎に、図3のステップ26で当該関数内でレジスタ割
り当てを試行した後、ステップ27で、当該関数内に含
まれる各条件分岐命令に対して、FORK箇所決定処理
を行う。
K箇所決定処理(図3のステップ26)の第2の実施の
形態を示す流れ図である。
力中間プログラム中のループ構造の戻り枝に相当する分
岐命令であるか否かを判定する。この処理は、前記第1
の実施の形態のステップ31(図4参照)と同じもので
ある。
56で、その戻り枝方向をFORK先として仮決定す
る。これはFORKするとすれば、こちらの方向を、F
ORK先とするのがよい、という意味であり、実際にF
ORKすることにするか否かは後段で決定する。
情報に基づいて、当該条件分岐命令のtaken(分岐
成立)側/fallthrough側が選択される確率
を計算する。
た、2つの確率間に一定以上の違いがあるかどうかを判
定する。
いれば、ステップ57にて、確率の高い側を、FORK
先として仮決定する。
先各々に対して、データ依存の距離の最小値を計算す
る。この処理は、前記第1の実施の形態におけるステッ
プ32(図4参照)と同じものである。
分岐の両側に関して求めた2つのデータ依存の距離の最
小値を比較し、両者に一定以上の差があるか否かを判定
する。
ない場合、ステップ55にて、データ依存の距離の最小
値の大きい側の分岐方向をFORK先として決定する。
これは、前記第1の実施の形態のステップ33(図4参
照)と同様の処理である。
ップ56ないしステップ57で仮決定したFORK先に
対して、ステップ53と同様に、データ依存の距離の最
小値を計算し、仮決定したFORK先側のデータ依存の
距離の最小値が一定以上あるか否かを判定する。
離の最小値が一定以上あるか、メモリを介したデータ依
存がなければ、ステップ56ないしステップ57で仮決
定したFORK先を、正式なFORK先として確定する
(ステップ60)。
タ依存の距離の最小値が一定水準に満たないと判断され
た場合には、ステップ67にて、当該基本ブロックを、
FORK箇所から除外する。これは例えば、当該条件分
岐命令に、FORK対象外マークを付すなどして、後段
の処理で並列化対象から外れるようにする。
件分岐命令がFORK箇所として決定され、また分岐命
令のいずれかの分岐先がFORK先も決定されたあと、
ステップ61にて、データ依存発生頻度を計算する。即
ち、プロファイル情報に基づき、FORK元の基本ブロ
ック(現在処理対象としている分岐命令を末尾に含む基
本ブロック)中で定義された値がFORK先として決定
した基本ブロックにて参照される回数の、このパス(現
在の基本ブロックからFORK先と決定した基本ブロッ
クへの制御の流れ)を通過した回数に対する比率を計算
する。
図4のステップ32と同様に、最終的にレジスタに割り
当てられる中間項及び変数によるデータ依存は除外し、
メモリ上に配置された中間項及び変数のみを計算対象と
する。
度が一定水準より高いか否かを判断し、もし高ければス
テップ65へ、低ければステップ63へ進む。
FORK元基本ブロックから、FORK先基本ブロック
へのデータ依存を引き起こし得るメモリ上の中間項/変
数の個数を数え挙げ、それが一定水準より多いか否かを
判定する。この数え挙げは、プロファイル情報によら
ず、中間プログラム中の命令列を検査して静的に行う。
その結果、データ依存箇所数が一定水準より多ければ、
DSP方式によるFORK(ステップ64)、そうでな
ければBLOCK方式によるFORK(ステップ66)
を用いることとし、その情報を、中間プログラム中のF
ORK命令に付与する。
データ依存しているメモリ上の変数の個数を数え挙げ
る。その数が、一定水準より少なければ、BLOCK方
式によるFORK(ステップ66)を用いるが、一定水
準より多ければ、当該基本ブロックはFORK候補から
外す(ステップ67)。
ける、命令並べ換え部23の動作を示す図である。命令
並べ換え部23は、FORK箇所決定部21が決定した
FORK箇所及びFORK時データ保証方法に基づき、
ステップ70からステップ76の一連の処理を行う。な
お、ステップ70からステップ76の各処理はすべて中
間プログラムに対して行う。これらのステップの説明に
現れる命令は、すべて中間プログラム上の対応する命令
を指す。
2は、前記第1の実施の形態で参照した図5のステップ
40、ステップ41、ステップ42とそれぞれ同様の処
理である。
定部21が決定した当該FORK箇所のFORK時デー
タ保証方式がBLOCK方式かDSP方式かをチェック
し、前者ならステップ74、後者ならステップ75に進
む。
参照した図5のステップ43と同様の処理である。即
ち、FORK前のメモリストア文をFORK後に移動す
ると共に、必要なブロック設定及びブロック解除命令を
挿入する。
命令実行順序が入れ替わっても演算結果が不変となるも
ののみ移動させる、という点も、図5のステップ43の
処理と同様である。
れた中間項への代入文を、FORK命令後に移動させ
る、という点で、図5のステップ43と類似する処理で
あるが、図5のステップ43では、アクセス対象のメモ
リアドレスをオペランドとするブロック設定命令及びブ
ロック解除命令を挿入したのに対し、ステップ75で
は、データ依存投機モードでFORKを行うように、ス
テップ71で作成したFORK命令を修正する点が異な
る。
参照した、図5のステップ44と同様の処理である。
おいては、プロファイル情報を用いて、FORKするか
否か、及び、FORK時のデータ依存保証方法を決定す
る。このため、条件分岐において制御の流れが片方に偏
っている場合には、その方向をFORKすることで、制
御投機FORKの成功確率が高まる。
や、依存箇所の数を考慮した並列化を行うことにより、
並列化プログラムの実行時のオーバーヘッドを低減さ
せ、より並列化による性能を引き出しやすくしている。
て、本発明の第2の実施の形態の動作を説明する。図1
5は、本発明の並列化装置によって並列化される中間プ
ログラムの一例を示す図である。図15における記号等
の意味は、図8に示した第1の実施例の中で用いられて
いるものと同じである。また、中間プログラム上で用い
る制御並列関連命令も、図7に示した前記第1の実施例
のものと同じである。
では、プログラム変換装置2は原始プログラム1を並列
化せずに目的プログラム3に変換する。その際、プログ
ラム変換装置2は、各基本ブロックの先頭に当該基本ブ
ロックの識別番号に基づく名前をもつラベルを挿入し、
そのラベルに関するシンボル情報も目的プログラム3内
に含めて出力する。目的プログラムにシンボル情報を埋
め込むことは、コンパイラ分野で広く行われており、目
的プログラムからシンボル名及びそのシンボルに対応付
けられたアドレスを引き出すことができれば、任意の手
法を用いることができる。
ラム3を読み込み、埋め込まれたシンボル情報を元に目
的プログラム内の基本ブロックの集合を認識する。これ
により、プログラム変換装置2の内部の中間プログラム
を構成していた基本ブロック集合と区切り方の等価な基
本ブロック集合を、目的プログラム実行装置4も認識す
ることができる。
目的プログラム3を構成する機械命令をソフトウェアで
解釈して実行しながら、目的プログラムの振るまい、具
体的には、(1)各条件分岐命令の条件が成立した回数
と成立しなかった回数、及び、(2)制御フロー上隣接
する基本ブロック間でのメモリデータ依存の回数と当該
機械命令アドレス、の情報を収集する。
的プログラム実行装置4は収集した前記情報の中の機械
命令アドレスを基本ブロックの識別番号に変換し、
(1)各基本ブロックから制御フロー上でそれに続く各
基本ブロックへ制御が流れた回数、及び、(2)制御フ
ロー上隣接する基本ブロック間でメモリデータ依存を引
き起こした回数、の内容を含むプロファイル情報ファイ
ル5を出力する。
に対応する目的プログラムを、目的プログラム実行装置
4に与えたとき、目的プログラム実行装置4が出力した
プロファイル情報ファイル5に含まれるプロファイル情
報の一部を示した図である。
数であり、例えば基本ブロック(B11)から、基本ブ
ロック(B12)及び(B13)への分岐は、各々20
回、180回であったことを示している。
ータ依存回数を表し、例えば基本ブロック(B15)で
ストアした値を基本ブロック(B16)でロードした回
数がのべ120回であったことを示している。
グラム変換装置2に与えて、原始プログラム1を並列化
する動作について説明する。
度目に原始プログラムを変換したときと全く同じ中間プ
ログラム6が与えられる。
ラム6を読み込み、フロー解析を行った上で、FORK
箇所決定部21に渡す。
的プログラム実行装置4が生成したプロファイル情報フ
ァイル5を読み込む。図15の中間プログラム例を用い
た際にプロファイル情報入力部25が読み込んだプロフ
ァイル情報の中身は、図16に示したものである。
1が、図15に示された中間プログラムを受け取り、F
ORK箇所の決定を行う。
てが試行され、t1〜t43の全中間項、及び、変数
J、Pには、物理レジスタが割り当てられ、変数K、
X、Y、Zには、メモリ上の領域が割り当てられたとす
る。
基本ブロック(B11)、(B13)、(B15)が並
列化変換の対象となる。
ク(B11)、(B13)、(B15)に対するFOR
K箇所決定処理部27の動作を説明する。
でループ戻り枝ではないと判定される。
プロファイル情報から、分岐確率を計算し、(B12)
への分岐が10%、(B13)への分岐が90%と求め
られる。
があるかどうかを判断基準にとり、(B11)からの分
岐確率の偏りは十分であると判定し、ステップ57によ
り(B13)がFORK先として仮決定される。
べるが、(B11)にはメモリストアがないため、ステ
ップ60にて(B13)がFORK先に決定される。
を求めるが、(B11)に関するメモリデータ依存がな
いため、結局、ステップ66にて、BLOCK方式が候
補となる。
(B14)へ15%、(B15)へ85%である以外
は、上の(B11)と同様のステップを辿り、結局、ス
テップ60にて、(B15)がFORK先と決定され、
ステップ66にて、BLOCK方式が候補となる。
が(B16)へ15%、(B17)へ85%であり、ス
テップ52では、分岐確率の偏りが十分あると判定さ
れ、ステップ57で(B17)がFORK先に仮決定さ
れる。
の距離の最小値は6であり、ステップ59における判定
基準をデータ依存の距離4以上とすると、ステップ60
にて(B17)がFORK先として決定する。
6(B)に示したプロファイル情報を基にして、(B1
5)から(B17)へのデータ依存発生頻度を求める
と、4/170で約2.4%となる。
0%とすると、この発生頻度は、低いと判断される。
るメモリアクセス箇所を中間プログラム中から数え挙げ
る。
所あるほか、メモリ上に割り当てられる変数Kが、左辺
に1箇所現れる。
7)でのメモリロードとアドレスが重なる可能性があ
り、計3箇所のメモリ依存箇所があることになる。
基準を3以上とすると、(B15)の場合は依存箇所が
多いと判定され、ステップ64にて、FORK方式とし
てDSP方式が候補となる。
及び(B17)への分岐確率が各々40%、60%であ
ったと仮定すると、ステップ52では、分岐確率の偏り
が小さいと判定される。
ると、(B15)から(B16)へのデータ依存の距離
の最小値は5、(B15)から(B17)へのデータ依
存の距離の最小値も5となり、ステップ54では、依存
距離の差が小さいと判定される。
は、FORK箇所の候補から除外されることになる。
おける命令並べ換え部23の動作を具体的に説明する。
11)、(B13)、(B15)の各条件分岐に対し、
図14に示された一連の処理を行う。
ップ71で、(B13)へのSPFORK命令が作ら
れ、ステップ72で、条件式計算のための命令群がSP
FORK後に移される。
保証は、BLOCK方式を候補としているが、ブロック
すべきメモリアクセスが存在しないため、ステップ74
でBLOCK命令やRELEASE命令を挿入すること
はない。
中間項t1、t2、t3をオペランドとしたRDCL命
令を挿入する。
式のデータ依存保証を行うため、前述の基本ブロック
(B11)と同様の流れで処理される。
存保証をDSP方式で行うため、図14のステップ75
で、メモリストア命令群の移動が行われ、データ依存投
機モードを指示する命令が挿入される。
(t17)、及び、変数Kへのストアを構成する文が、
SPFORK命令後に移され、その直後に、データ依存
投機モードの終了を指示するDSPOUTが挿入され
る。
存投機モードで子スレッドを生成することを指示するD
SPIN命令が挿入される。
る、命令並べ換え部23の処理を終えた後の中間プログ
ラムを示す図である。
他のFORK箇所/FORK先決定方法と組み合わせて
実施することも可能である。例えば文献4(「制御並列
アーキテクチャ向け自動並列化コンパイル手法」(酒井
他、情報処理学会論文誌、Vol.40、No.5、M
ay1999))の第2049頁〜第2050頁では、
FORK命令が元の条件分岐命令よりも何命令上流に移
動できるかというFORKブースト値をFORK箇所選
定に利用する方法が開示されている。この方法を導入す
るには、前記第1の実施の形態及び前記第2の実施の形
態における、命令並べ換え部23の中のステップ44な
いしステップ76の直前に、FORKブースト値によっ
てFORKを行うか否かの判定処理を組み込めばよい。
プログラム変換装置(コンパイラ)2の並列化装置11
におけるFORK箇所決定部21、レジスタ割り当て部
22、命令並べ換え部23、中間プログラム出力部2
4、プロファイル情報入力部25は、コンピュータ上で
実行されるプログラムにより、その機能・処理が実現さ
れる。この場合、該プログラムを記録した記録媒体(C
D−ROM、DVD(digital versatile disk)、FD
(フロッピー(登録商標))、HDD(ハードディス
ク)、MT(磁気テープ)、半導体メモリ)から、該プ
ログラム(実行形式)をコンピュータの主記憶にロード
して実行するか、あるいは、サーバ等から通信媒体を介
して、コンピュータのHDD等にダウンロードしてイン
ストールし、該プログラムを実行することで、本発明の
プログラム変換装置を実施することができる。
記記載の効果を奏する。
ベルでFORK命令を用いた並列化を的確に行える、と
いうことである。
割り当て部は並列化よりも後段に位置するにも関わら
ず、並列化処理にてレジスタ割り当てを試行し、各中間
項がレジスタに乗るのかメモリ領域に格納されるのかの
予測ができるからである。
いて並列実行した場合の性能が向上する、ということで
ある。
いては、FORK箇所決定部が静的に親子スレッド間で
のデータ依存の状況を調べ、データ依存による子スレッ
ド実行の一時停止の可能性が低くなるようにFORK先
を選定するからである。もう一つは、FORK箇所決定
部が、プロファイル情報に基づいて、動的なデータ依存
発生状況を調べ、データ依存による子スレッド実行の一
時停止や再実行の可能性が低くなるようにFORK先を
選定するからである。
る。
置の内部構成を示す図である。
所決定部の動作を示す図である。
所決定処理部の動作を示す図である。
え部の動作を示す図である。
換えられる様子を示す図である。
ログラム上の制御並列関連命令一覧を示す図である。
プログラムを示す図である。
中の中間プログラムを示す図である。
途中の中間プログラムを示す図である。
を終えた中間プログラムを示す図である。
当てを終えた中間プログラムを示す図である。
箇所決定処理部の動作を示す図である。
換え部の動作を示す図である。
間プログラムを示す図である。
情報を示す図である。
を終えた中間プログラムを示す図である。
K命令を説明するための図である。
CK方式説明のための図である。
機モード説明のための図である。
依存投機モード説明のための図である。
Claims (33)
- 【請求項1】複数のプログラムカウンタと、複数のスレ
ッド実行装置と、を備え、前記複数のスレッド実行装置
は、前記複数のプログラムカウンタに従って、複数のス
レッドの命令を、同時に、フェッチ、解釈、実行し、 スレッド生成時以降に、レジスタセットに及ぼした変更
を、後に取り消し可能な制御投機的モードでスレッドを
実行すること、及び、 自スレッドがメモリ領域から値をロードした後に、自ス
レッドを生成した親スレッドが同一メモリ領域に値をス
トアした場合に、自スレッドの少なくとも当該ロード以
降の処理結果を破棄し、それらの処理を再実行するデー
タ依存投機的モードでスレッドを実行すること、が可能
とされ、 命令セットとして、 前記スレッド実行装置で実行中のスレッドが制御投機的
モードの新たなスレッドを生成すること、 指定された条件が成立していれば自スレッドを終了させ
ると共に、自スレッドが生成した制御投機的モードのス
レッドの制御投機的モードを解除すること、 生成した制御投機的モードのスレッドを破棄すること、 自スレッドが生成するスレッドが指定されたアドレスの
メモリ領域からのロードを行う際に、その動作を一時停
止させることをあらかじめ指示すること、 指定されたメモリアドレスに対する前記ロード一時停止
指示を解除すること、前記スレッド実行装置で実行中の
スレッドがデータ依存投機的モードの新たなスレッドを
生成すること、及び、 自スレッドが生成したデータ依存投機的モードのスレッ
ドのデータ依存投機的モードを解除すること、 が、単一又は高々数個の機械語命令の組合せで実行でき
る命令セットを有するマルチスレッドプロセッサに対し
て、与えられた原始プログラムを前記マルチスレッドプ
ロセッサ向けに変換するプログラム変換装置であって、 並列化に先立ってレジスタ割り当てを試み、中間プログ
ラム上の各変数、及び中間項のレジスタ割り当て状況を
予測するレジスタ割り当て試行部と、 前記レジスタ割り当て試行部でのレジスタ割り当て試行
結果に基づいて、前記中間プログラムにおける条件分岐
部分をスレッド生成命令を用いた並列コードに変換する
か否か決定し、及び、並列コードでの並列実行方式の決
定を行うフォーク(FORK)箇所決定部と、 前記フォーク(FORK)箇所決定部での決定結果に基
づいて、前記中間プログラム中の条件分岐部分を、スレ
ッド生成命令を用いた並列コードに変換し、前記レジス
タ割り当て試行結果を参照して、スレッド間のメモリを
介したデータ依存関係を保証する命令を、前記スレッド
生成命令の前後に挿入すると共に、スレッド生成が早い
段階で行われるように、前記スレッド生成命令の前後の
命令を並べ換える命令並べ換え部と、 並列化され並べ換えられた命令列に対して、物理レジス
タが割り当てられるか否かに関して、前記レジスタ割り
当ての試行時と同じ割り当て結果となるように確定的な
レジスタ割り当てを行うレジスタ割り当て部と、 を備える、ことを特徴とするプログラム変換装置。 - 【請求項2】前記フォーク(FORK)箇所決定部が、
現在処理対象としている中間プログラム中の基本ブロッ
クから、該基本ブロック末尾にある条件分岐命令の分岐
先基本ブロック各々へのメモリを介したデータ依存関係
を調査し、 分岐先の各々について、分岐先基本ブロック中にあって
データ依存を引き起こしているメモリ参照命令のうち、
最も先頭にある命令の、該分岐先基本ブロック先頭から
の命令ステップ数を数え、 前記命令ステップ数が大きな側の分岐先基本ブロック
を、並列実行させる新たなスレッドとして選択する、こ
とを特徴とする請求項1に記載のプログラム変換装置。 - 【請求項3】前記フォーク(FORK)箇所決定部が、
分岐先基本ブロックにてメモリを介したデータ依存命令
の位置を求める際、前記命令ステップ数に代えて、各命
令の推定実行サイクル数を積算した値を用いる、ことを
特徴とする請求項2に記載のプログラム変換装置。 - 【請求項4】請求項1、請求項2または請求項3に記載
のプログラム変換装置において、 初回に原始プログラムから目的プログラムに変換する際
に、前記プログラム変換装置内の中間プログラムでの基
本ブロックと、出力する目的プログラムでの機械命令ア
ドレスとの対応をとるためのアドレス対応情報を、前記
目的プログラムと併せて出力し、 目的プログラム実行装置が、前記目的プログラムと前記
アドレス対応情報を読み込んで、前記目的プログラムを
実行すると共に、前記目的プログラムの実行時の基本ブ
ロック間の分岐プロファイル情報と、基本ブロック間で
メモリを介して発生したデータ依存情報とを含むプロフ
ァイル情報を出力し、 次に、前記プログラム変換装置が、原始プログラムを並
列化して目的プログラムに変換する際に、前記フォーク
(FORK)箇所決定部が、前記プロファイル情報を参
照して、条件分岐において、制御の流れる確率が高い分
岐先基本ブロック及び条件分岐において、データ依存が
発生する確率が低い分岐先基本ブロックを並列実行する
新スレッドとして優先的に選択する、ことを特徴とす
る、プログラム変換装置。 - 【請求項5】前記フォーク(FORK)箇所決定部が、
並列実行する新スレッドの実行開始点として選択した条
件分岐先基本ブロックに対し、中間プログラムでのメモ
リを介したデータ依存を解析した結果と、前記プロファ
イル情報から得たデータ依存発生確率とに基づき、デー
タ依存を引き起こす異なるメモリアドレスの箇所の数が
定められた数より少ない場合には、新スレッドが該メモ
リアドレスからロードする動作を一時停止させるように
命令を生成し、 一方、データ依存を引き起こす異なるメモリアドレスの
箇所の数が定められた数より多い場合には、データ依存
発生確率が定められた確率より低いか否かを調べ、確率
が低い場合には、データ依存投機的モードで新スレッド
を生成するように命令を生成し、 確率が高い場合には、当該箇所での並列化変換を取りや
めるように制御する、ことを特徴とする請求項4に記載
のプログラム変換装置。 - 【請求項6】前記フォーク(FORK)箇所決定部が、
現在処理対象としている中間プログラム中の基本ブロッ
クから、該基本ブロック末尾にある条件分岐命令の分岐
先基本ブロック各々へのメモリを介したデータ依存関係
を調査し、該調査したデータ依存関係と、前記プロファ
イル情報から得た条件分岐確率とを総合した結果、当該
条件分岐での分岐先基本ブロック各々に関して、分岐確
率の間に定められた以上の差異がなく、且つ、メモリを
介したデータ依存発生時期の早遅にも定められた以上の
差異がない場合に、当該条件分岐部分を並列化しないよ
うに決定する、ことを特徴とする請求項4または請求項
5に記載のプログラム変換装置。 - 【請求項7】原始(ソース)プログラムを構文解析して
中間プログラムを生成する構文解析部と、 前記中間プログラムに対して並列化を含む最適化処理を
行う並列化部と、 前記並列化装置で最適化済みの中間プログラムからター
ゲットプロセッサ装置向きの命令コードからなる目的プ
ログラム(オブジェクトコード)を生成出力するコード
生成部と、 を備えたプログラム変換装置において、 前記並列化部が、 前記中間プログラムを読み込んで制御フローやデータフ
ローを解析する中間プログラム入力部と、 並列化に先立ってレジスタ割り当てを試み、中間プログ
ラム上の各変数、及び中間項のレジスタ割り当て状況を
予測するとともに、レジスタの割り当てを実行するレジ
スタ割り当て部と、 前記レジスタ割り当て試行結果に基づいて、前記中間プ
ログラムにおける条件分岐部分をスレッド生成命令を用
いた並列コードに変換する箇所を決定するフォーク(F
ORK)箇所決定部と、 前記FORK箇所決定部で決定された並列化箇所とデー
タフローなどの情報から、前記並列化箇所前後の命令の
並べ換えを行う命令並べ換え部と、 前記並列化を含む変換を終えた命令列を再度中間プログ
ラム形式で出力する中間プログラム出力部と、 を備えた、ことを特徴とするプログラム変換装置。 - 【請求項8】前記並列化部が、前記ターゲットプロセッ
サ装置で前記目的プログラムを実行して出力されるプロ
ファイル情報を入力して内部形式に変換するプロファイ
ル情報入力部を備え、 前記フォーク(FORK)箇所決定部が、前記レジスタ
割り当て試行結果と、前記プロファイル情報に基づき、
前記中間プログラムにおける条件分岐部分をスレッド生
成命令を用いた並列コードに変換する箇所を決定すると
ともに、並列コードによる並列実行方式を決定する、こ
とを特徴とする請求項7記載のプログラム変換装置。 - 【請求項9】前記命令並べ換え部が、前記フォーク(F
ORK)箇所決定部での決定結果に基づいて、前記中間
プログラム中の条件分岐部分を、スレッド生成命令を用
いた並列コードに変換し、前記レジスタ割り当て試行結
果を参照して、スレッド間のメモリを介したデータ依存
関係を保証する命令を、前記スレッド生成命令の前後に
挿入すると共に、スレッド生成が早い段階で行われるよ
うに、前記スレッド生成命令の前後の命令を並べ換え
る、ことを特徴とする請求項7記載のプログラム変換装
置。 - 【請求項10】前記レジスタ割り当て部が、並列化され
並べ換えられた命令列に対して、物理レジスタが割り当
てられるか否かに関して前記レジスタ割り当ての試行時
と同じ割り当て結果となるように確定的なレジスタ割り
当てを行う、ことを特徴とする請求項7記載のプログラ
ム変換装置。 - 【請求項11】原始プログラムを構文解析部で構文解析
して得られる中間プログラムに対して、ターゲットプロ
セッサ装置向けに、並列化を含む最適化処理を行うプロ
グラム変換装置において、 前記中間プログラム上で、前記ターゲットプロセッサ装
置でのレジスタの割り当てを試行し、レジスタ割り当て
情報を実際の割り当てに先行して取得するレジスタ割り
当て試行手段と、 前記中間プログラムに対して、前記ターゲットプロセッ
サ装置でのメモリを介して発生するデータ依存の距離の
計算を行う手段と、 前記中間プログラム上で、前記メモリを介するデータ依
存の距離を考慮して、フォーク(FORK)先を決定
し、条件分岐をスレッド生成命令に置き換える手段と、 前記レジスタ割り当て試行結果を参照して、前記中間プ
ログラム上で、前記スレッド生成命令前後の命令の並べ
換えを行う手段と、 を備えたことを特徴とするプログラム変換装置。 - 【請求項12】前記条件分岐をスレッド生成命令に置き
換える手段が、 前記条件分岐の2つの分岐先の各々に対して、各中間項
及び変数のデータ依存の距離の最小値を計算する手段
と、 前記条件分岐の2つの分岐に関して、それぞれ求めた2
つのデータ依存の距離の最小値を比較し、両者に所定値
以上の差がある場合、前記データ依存の距離の最小値の
大きい側の分岐方向をフォーク(FORK)先とし、該
条件分岐箇所をフォーク(FORK)箇所に選定し、一
方、前記データ依存の距離の最小値に前記所定値以上の
差がない場合には、元の中間プログラム内で分岐先であ
った側をフォーク(FORK)先とし、該条件分岐箇所
をフォーク(FORK)箇所候補に選定する手段と、を
備えた、ことを特徴とする請求項11記載のプログラム
変換装置。 - 【請求項13】請求項11記載のプログラム変換装置に
おいて、 前記プログラム変換装置から出力される目的プログラム
を実行するプロセッサ装置から出力されるプロファイル
情報を入力し、前記プロファイル情報から、条件分岐確
率及びデータ依存発生頻度を計算する手段と、 前記データ依存の距離と、前記条件分岐確率及び前記デ
ータ依存発生頻度と、データ依存を引き起こす互いに異
なるメモリアドレスの箇所の数から、フォーク(FOR
K)先及びデータ依存保証方式を決定し、条件分岐をス
レッド生成命令に置き換える手段と、を備えたことを特
徴とするプログラム変換装置。 - 【請求項14】前記ターゲットプロセッサ装置が、複数
のプログラムカウンタと、複数のスレッド実行装置と、
を備え、前記複数のスレッド実行装置は、前記複数のプ
ログラムカウンタに従って、複数のスレッドの命令を、
同時に、フェッチ、解釈、実行し、 スレッド生成時以降に、レジスタセットに及ぼした変更
を、後に取り消し可能な制御投機的モードでスレッドを
実行すること、及び、 自スレッドがメモリ領域から値をロードした後に、自ス
レッドを生成した親スレッドが同一メモリ領域に値をス
トアした場合に、自スレッドの少なくとも当該ロード以
降の処理結果を破棄し、それらの処理を再実行するデー
タ依存投機的モードでスレッドを実行すること、が可能
とされ、 命令セットとして、 前記スレッド実行装置で実行中のスレッドが制御投機的
モードの新たなスレッドを生成すること、 指定された条件が成立していれば自スレッドを終了させ
ると共に、自スレッドが生成した制御投機的モードのス
レッドの制御投機的モードを解除すること、 生成した制御投機的モードのスレッドを破棄すること、 自スレッドが生成するスレッドが指定されたアドレスの
メモリ領域からのロードを行う際に、その動作を一時停
止させることをあらかじめ指示すること、 指定されたメモリアドレスに対する前記ロード一時停止
指示を解除すること、 前記スレッド実行装置で実行中のスレッドがデータ依存
投機的モードの新たなスレッドを生成すること、及び、 自スレッドが生成したデータ依存投機的モードのスレッ
ドのデータ依存投機的モードを解除すること、 が、単一又は高々数個の機械語命令の組合せで実行でき
る命令セットを有するマルチスレッドプロセッサよりな
る、ことを特徴とする請求項7乃至13のいずれか一に
記載のプログラム変換装置。 - 【請求項15】原始プログラムをコンパイルしてマルチ
スレッド型のターゲットプロセッサ装置向けの目的プロ
グラムを出力するプログラム変換装置において、構文解
析の結果出力される中間プログラムに対して並列化を含
む最適化処理を行う方法であって、 (a)並列化に先立ってレジスタ割り当てを試み、中間
プログラム上の各変数、及び中間項のレジスタ割り当て
状況を予測するレジスタ割り当て試行ステップと、 (b)前記レジスタ割り当て試行結果に基づいて、前記
中間プログラムにおける条件分岐部分をスレッド生成命
令を用いた並列コードに変換するか否かの決定を行う
か、もしくは、並列コードに変換するか否かの決定と並
列コードに変換する場合その並列実行方式の決定を行う
フォーク(FORK)箇所決定ステップと、 (c)前記フォーク(FORK)箇所決定ステップでの
決定結果に基づいて、前記中間プログラム中の条件分岐
部分を、スレッド生成命令を用いた並列コードに変換
し、前記レジスタ割り当て試行結果を参照して、スレッ
ド間のメモリを介したデータ依存関係を保証する命令
を、前記スレッド生成命令の前後に挿入すると共に、ス
レッド生成が早い段階で行われるように、前記スレッド
生成命令の前後の命令を並べ換える命令並べ換えステッ
プと、 (d)並列化され並べ換えられた命令列に対して前記レ
ジスタ割り当ての試行時と同じ割り当て結果となるよう
に確定的なレジスタ割り当てを行うレジスタ割り当てス
テップと、 を含む、ことを特徴とするプログラム並列化方法。 - 【請求項16】前記フォーク(FORK)箇所決定ステ
ップが、前記条件分岐の2つの分岐先の各々に対して、
各中間項及び変数のデータ依存の距離の最小値を計算
し、前記条件分岐の2つの分岐に関して、それぞれ求め
た2つのデータ依存の距離の最小値を比較し、両者に所
定値以上の差がある場合、前記データ依存の距離の最小
値の大きい側の分岐方向をフォーク(FORK)先と
し、該条件分岐箇所をフォーク(FORK)箇所に選定
し、一方、前記データ依存の距離の最小値に前記所定値
以上の差がない場合には、元の中間プログラム内で分岐
先であった側をフォーク(FORK)先とし、該条件分
岐箇所をフォーク(FORK)箇所候補に選定する、こ
とを特徴とする請求項15記載のプログラム並列化方
法。 - 【請求項17】前記フォーク(FORK)箇所決定ステ
ップが、現在処理対象としている中間プログラム中の、
分岐や合流のない一続きのブロック(「基本ブロック」
という)から、該基本ブロック末尾にある条件分岐命令
の分岐先基本ブロック各々へのメモリを介したデータ依
存関係を調査し、 分岐先の各々について、分岐先基本ブロック中にあって
データ依存を引き起こしているメモリ参照命令のうち、
最も先頭にある命令の、該分岐先基本ブロック先頭から
の命令ステップ数を数え、 前記命令ステップ数が大きな側の分岐先基本ブロック
を、並列実行させる新たなスレッドとして選択する、こ
とを特徴とする請求項15に記載のプログラム並列化方
法。 - 【請求項18】前記フォーク(FORK)箇所決定ステ
ップが、分岐先基本ブロックにてメモリを介したデータ
依存命令の位置を求める際、前記命令ステップ数に代え
て、各命令の推定実行サイクル数を積算した値を用い
る、ことを特徴とする請求項17に記載のプログラム並
列化方法。 - 【請求項19】前記プログラム変換装置で、まず、原始
プログラムから目的プログラムに変換する際に、中間プ
ログラムでの基本ブロックと、出力する目的プログラム
での機械命令アドレスとの対応をとるためのアドレス対
応情報を、前記目的プログラムと併せて出力し、 前記目的プログラムを実行するプロセッサ装置が、前記
目的プログラムと前記アドレス対応情報を読み込んで、
前記目的プログラムを実行すると共に、前記目的プログ
ラムの実行時の基本ブロック間の分岐プロファイル情報
と、基本ブロック間でメモリを介して発生したデータ依
存情報とを含むプロファイル情報を出力し、 次に、前記プログラム変換装置が、原始プログラムを並
列化して、目的プログラムに変換する際に、前記フォー
ク(FORK)箇所決定ステップにおいて、前記プロフ
ァイル情報を参照して、条件分岐において、制御の流れ
る確率が高い分岐先基本ブロック及び条件分岐におい
て、データ依存が発生する確率が低い分岐先基本ブロッ
クを並列実行する新スレッドとして優先的に選択する、
ことを特徴とする、請求項15に記載のプログラム並列
化方法。 - 【請求項20】前記フォーク(FORK)箇所決定ステ
ップが、並列実行する新スレッドの実行開始点として選
択した条件分岐先基本ブロックに対し、中間プログラム
でのメモリを介したデータ依存を解析した結果と、前記
プロファイル情報から得たデータ依存発生確率とに基づ
き、データ依存を引き起こす異なるメモリアドレスの箇
所の数が定められた数よりも少ない場合には、新スレッ
ドが該メモリアドレスからロードする動作を一時停止さ
せるように命令を生成し、 一方、データ依存を引き起こす異なるメモリアドレスの
箇所の数が定められた数より多い場合には、データ依存
発生確率が定められた確率より低いか否かを調べ、確率
が低い場合には、データ依存投機的モードで新スレッド
を生成するように命令を生成し、 確率が高い場合には、当該箇所での並列化変換を取りや
めるように制御する、ことを特徴とする、請求項19に
記載のプログラム並列化方法。 - 【請求項21】前記フォーク(FORK)箇所決定ステ
ップが、現在処理対象としている中間プログラム中の基
本ブロックから、該基本ブロック末尾にある条件分岐命
令の分岐先基本ブロック各々へのメモリを介したデータ
依存関係を調査し、該調査したデータ依存関係と、前記
プロファイル情報から得た条件分岐確率とを総合した結
果、当該条件分岐での分岐先基本ブロック各々に関し
て、分岐確率の間に、予め定められた以上の差異がな
く、且つ、メモリを介したデータ依存発生時期の早遅に
も、予め定められた以上の差異がない場合に、当該条件
分岐部分を並列化しないように決定する、ことを特徴と
する請求項19に記載のプログラム並列化方法。 - 【請求項22】前記フォーク(FORK)箇所決定ステ
ップが、 (1)条件分岐命令が前記中間プログラム中のループ構
造の戻り枝に相当する分岐命令であるか否かを判定する
ステップと、 (2)前記条件分岐命令がループ戻り枝に相当する分岐
命令である場合、当該戻り枝方向、即ちループ継続方向
をFORK先として、この条件分岐箇所を、FORK箇
所に選定するステップと、 (3)前記条件分岐命令が、ループ戻り枝分岐ではない
場合、条件分岐の2つの分岐先の各々に対して、各中間
項/変数のデータ依存の距離の最小値を計算するステッ
プと、 (4)前記条件分岐の2つの分岐に関してそれぞれ求め
た2つのデータ依存の距離の最小値を比較し、両者に所
定値以上の差があるか否かを判定するステップと、 (5)前記2つのデータ依存の距離の最小値に前記所定
値以上の差がある場合、データ依存の距離の最小値の大
きい側の分岐方向をFORK先とし、この条件分岐箇所
を、FORK箇所に選定するステップと、 (6)データ依存の距離の最小値に前記所定値以上の差
がない場合、元の中間プログラム内で分岐先であった側
(分岐命令のtaken側)をFORK先とし、この条
件分岐箇所をFORK候補に選定するステップと、 を含むことを特徴とする請求項15に記載のプログラム
並列化方法。 - 【請求項23】前記データ依存の距離が、現在、処理対
象としている基本ブロック内で定義され、その分岐先で
参照される可能性がある中間項及び変数のうち、メモリ
上に配置されると見込まれる中間項、及び変数の各々に
対して、分岐先の基本ブロックの中で、該メモリ参照命
令が、先頭からどれぐらいの位置にあるかを、中間プロ
グラム中のステップ数で表したものである、ことを特徴
とする請求項22に記載のプログラム並列化方法。 - 【請求項24】前記データ依存の距離を求める際、各命
令が目的アーキテクチャのプロセッサ上で実行される際
に要すると推定されるサイクル数を用いる、ことを特徴
とする請求項22に記載のプログラム並列化方法。 - 【請求項25】前記命令並べ換えステップが、 (1)前記中間プログラム中の各中間項及び変数がレジ
スタに対応付けられるかメモリに対応付けられるかレジ
スタの割り当て状況を調べるステップと、 (2)現在処理対象としている基本ブロックの末尾にあ
る分岐命令を、制御投機モードFORK命令に置換し、
その際、制御投機モードFORK命令のオペランドであ
るFORK先は、前記FORK箇所決定ステップで選択
されたFORK先とするステップと、 (3)前記中間プログラム中で、制御投機モードFOR
K命令の直前にある分岐条件式を、制御投機モードFO
RK命令直後に移動させると共に、該移動先の直後すな
わち当該基本ブロックの末尾に、分岐条件成立時には自
スレッドを終了させて子スレッドを確定モードすなわち
非制御投機モードに移行させ、分岐条件非成立時には子
スレッドを破棄させて自スレッドが後続命令列の実行を
続ける、一群の命令列を、挿入するステップと、 (4)現在処理対象としている基本ブロックにおいて、
前記制御投機モードFORK命令よりも手前、即ち、上
流側にある命令文のうち、メモリに対応付けられた中間
項及び変数への代入となる文の各々について、その代入
文を、前記制御投機モードFORK命令よりも後方、即
ち、下流側へ移動させると共に、前記制御投機モードF
ORK命令の直前に、ブロック設定命令を挿入し、代入
文の移動先の直後に、ブロック解除命令を挿入するステ
ップと、 (5)前記ステップ(2)のFORK変換処理で仮定し
たレジスタ割り当て状況に、レジスタを割り当てるよう
に指示するステップと、 を含む、ことを特徴とする請求項15に記載のプログラ
ム並列化方法。 - 【請求項26】前記フォーク(FORK)箇所決定ステ
ップが、 (1)条件分岐命令が前記中間プログラム中のループ構
造の戻り枝に相当する分岐命令であるか否かを判定する
ステップと、 (2)ループ構造の戻り枝に相当する場合、前記戻り枝
方向をFORK先として仮決定するステップと、 (3)入力したプロファイル情報に基づいて、当該条件
分岐命令のtaken(分岐成立)側と、fallth
rough(フォールスルー)側が選択される確率と、
を計算するステップと、 (4)前記計算された2つ分岐の確率間に所定の基準値
以上の違いがあるかどうかを判定するステップと、 (5)前記2つ分岐の確率の違いが前記基準値を越えて
いれば、確率の高い側を、FORK先として仮決定する
ステップと、 (6)条件分岐の2つの分岐先各々に対して、データ依
存の距離の最小値を計算するステップと、 (7)条件分岐の2つの分岐に関して求めた2つのデー
タ依存の距離の最小値を比較し、両者に所定値以上の差
があるか否かを判定するステップと、 (8)2つのデータ依存の距離の最小値に前記所定値以
上の差があるか又はデータ依存がない場合、データ依存
の距離の最小値の大きい側の分岐方向をFORK先とし
て決定するステップと、 (9)前記ステップ(2)又は(5)で仮決定されたF
ORK先に対して、データ依存の距離の最小値を計算
し、仮決定したFORK先側のデータ依存の距離の最小
値が所定値以上あるか否かを判定するステップと、 (10)仮決定したFORK先側のデータ依存の距離の
最小値に所定値以上の差があるか、メモリを介したデー
タ依存がなければ、ステップ(2)又はステップ(5)
で仮決定したFORK先を、正式なFORK先として確
定するステップと、 (11)前記データの依存の距離の最小値が一定水準に
満たないと判断された場合には、当該基本ブロックを、
FORK箇所から除外するステップと、 (12)入力したプロファイル情報からデータ依存発生
頻度を計算するステップと、 (13)データの依存発生頻度が一定水準より高いか否
かを判断し、低い場合、前記中間プログラム中で、FO
RK元基本ブロックから、FORK先基本ブロックへの
データ依存を引き起こし得るメモリ上の中間項/変数の
個数を数え挙げ、それが一定水準より多いか否かを判定
し、データ依存箇所数が一定水準より多ければDSP方
式によるFORKを用い、そうでなければBLOCK方
式によるFORKを用いることとし、その情報を、中間
プログラム中のFORK命令に付与するステップと、 (14)データの依存発生頻度が一定水準より高い場
合、データ依存しているメモリ上の変数の個数を数え挙
げ、その数が、一定水準より少なければ、BLOCK方
式によるFORKを用い、一定水準より多ければ、当該
基本ブロックはFORK候補から外すステップと、 を含む、ことを特徴とする請求項15に記載のプログラ
ム並列化方法。 - 【請求項27】前記命令並べ換えステップが、 (1)前記中間プログラム中の各中間項及び変数がレジ
スタに対応付けられるかメモリに対応付けられるかレジ
スタの割り当て状況を調べるステップと、 (2)現在処理対象としている基本ブロックの末尾にあ
る分岐命令を、制御投機モードFORK命令に置換し、
その際、制御投機FORK命令のオペランドであるFO
RK先は、前記FORK箇所決定ステップで選択された
FORK先とするステップと、 (3)前記中間プログラム中で、制御投機FORK命令
の直前にある分岐条件式を、制御投機FORK命令直後
に移動させると共に、該移動先の直後、即ち当該基本ブ
ロックの末尾に分岐条件成立時には自スレッドを終了さ
せて子スレッドを確定モードすなわち非制御投機モード
に移行させ、分岐条件非成立時には、子スレッドを破棄
させて自スレッドが後続命令列の実行を続ける一群の命
令列を挿入するステップと、 (4)前記FORK箇所決定ステップが決定した当該F
ORK箇所のFORK時データ保証方式がBLOCK方
式かDSP方式かをチェックするステップと、 (5)BLOCK方式の場合、FORK前のメモリスト
ア文をFORK後に移動すると共に、必要なブロック設
定及びブロック解除命令を挿入し、移動の際には、デー
タ依存関係を検査し、命令実行順序が入れ替わっても演
算結果が不変となるもののみ移動させるステップと、 (6)DSP方式の場合、メモリに対応付けられた中間
項への代入文を、FORK命令後に移動させ、データ依
存投機モードでFORKを行うように、前記ステップ
(2)で置換作成されたFORK命令を修正するステッ
プと、 (7)前記ステップ(2)のFORK変換処理で仮定し
たレジスタ割り当て状況をレジスタ割り当てるように指
示するステップと、 を含む、ことを特徴とする請求項15に記載のプログラ
ム並列化方法。 - 【請求項28】原始プログラムをコンパイルしてマルチ
スレッドプロセッサ装置向けの目的プログラムを生成出
力するコンパイラにおいて、構文解析の結果出力される
中間プログラムに対して並列化を含む最適化処理であっ
て、 (a)並列化に先立ってレジスタ割り当てを試み、中間
プログラム上の各変数、及び中間項のレジスタ割り当て
状況を予測するレジスタ割り当て試行処理と、 (b)前記レジスタ割り当て試行結果に基づいて、前記
中間プログラムにおける条件分岐部分をスレッド生成命
令を用いた並列コードに変換するか否かの決定を行う
か、もしくは、並列コードに変換するか否かの決定と並
列コードに変換する場合その並列実行方式の決定を行う
フォーク(FORK)箇所決定処理と、 (c)前記フォーク(FORK)箇所決定部での決定結
果に基づいて、前記中間プログラム中の条件分岐部分
を、スレッド生成命令を用いた並列コードに変換し、前
記レジスタ割り当て試行結果を参照して、スレッド間の
メモリを介したデータ依存関係を保証する命令を、前記
スレッド生成命令の前後に挿入すると共に、スレッド生
成が早い段階で行われるように、前記スレッド生成命令
の前後の命令を並べ換える命令並べ換え処理と、 (d)並列化され並べ換えられた命令列に対して、物理
レジスタが割り当てられるか否かに関して、前記レジス
タ割り当ての試行時と同じ割り当て結果となるように確
定的なレジスタ割り当てを行うレジスタ割り当て処理
と、 の前記(a)乃至(d)の最適化処理をコンピュータで
実行するためのプログラムを記録した記録媒体。 - 【請求項29】請求項28記載の記録媒体において、 前記フォーク(FORK)箇所決定処理が、現在処理対
象としている中間プログラム中の基本ブロックから、該
基本ブロック末尾にある条件分岐命令の分岐先基本ブロ
ック各々へのメモリを介したデータ依存関係を調査し、 分岐先の各々について、分岐先基本ブロック中にあって
データ依存を引き起こしているメモリ参照命令のうち、
最も先頭にある命令の、該分岐先基本ブロック先頭から
の命令ステップ数を数え、 前記命令ステップ数が大きな側の分岐先基本ブロック
を、並列実行させる新たなスレッドとして選択する、 処理を含み、前記処理を、前記コンピュータで実行する
ためのプログラムを記録した記録媒体。 - 【請求項30】請求項28記載の記録媒体において、 前記フォーク(FORK)箇所決定処理において、分岐
先基本ブロックにてメモリを介したデータ依存命令の位
置を求める際、前記命令ステップ数に代えて、各命令の
推定実行サイクル数を積算した値を用い処理を、前記コ
ンピュータで実行するためのプログラムを記録した記録
媒体。 - 【請求項31】請求項28記載の記録媒体において、 (f)前記コンパイラで、まず、原始プログラムから目
的プログラムに変換する際に、中間プログラムでの基本
ブロックと、出力する目的プログラムでの機械命令アド
レスとの対応をとるためのアドレス対応情報を、前記目
的プログラムと併せて出力する処理と、 前記目的プログラムを実行するプロセッサ装置が、前記
目的プログラムと前記アドレス対応情報を読み込んで、
前記目的プログラムを実行すると共に、前記目的プログ
ラムの実行時の基本ブロック間の分岐プロファイル情報
と、基本ブロック間でメモリを介して発生したデータ依
存情報とを含むプロファイル情報を出力し、 前記コンパイラが、原始プログラムを並列化して、目的
プログラムに変換する際に、 (g)前記フォーク(FORK)箇所決定処理におい
て、前記プロファイル情報を参照して、条件分岐におい
て、制御の流れる確率が高い分岐先基本ブロック及び条
件分岐において、データ依存が発生する確率が低い分岐
先基本ブロックを並列実行する新スレッドとして優先的
に選択する処理、 の前記(f)及び(g)の処理を前記コンピュータで実
行するためのプログラムを記録した記録媒体。 - 【請求項32】請求項31記載の記録媒体において、 前記フォーク(FORK)箇所決定処理が、並列実行す
る新スレッドの実行開始点として選択した条件分岐先基
本ブロックに対し、中間プログラムでのメモリを介した
データ依存を解析した結果と、前記プロファイル情報か
ら得たデータ依存発生確率とに基づき、データ依存を引
き起こす異なるメモリアドレスの箇所の数が定められた
数より少ない場合には、新スレッドが該メモリアドレス
からロードする動作を一時停止させるように命令を生成
し、 一方、データ依存を引き起こす異なるメモリアドレスの
箇所の数が定められた数より多い場合には、データ依存
発生確率が定められた確率より低いか否かを調べ、確率
が低い場合には、データ依存投機的モードで新スレッド
を生成するように命令を生成し、 確率が高い場合には、当該箇所での並列化変換を取りや
めるように制御する、 処理を含み、前記処理を前記コンピュータで実行するた
めのプログラムを記録した記録媒体。 - 【請求項33】請求項31記載の記録媒体において、 前記フォーク(FORK)箇所決定処理が、現在処理対
象としている中間プログラム中の基本ブロックから、該
基本ブロック末尾にある条件分岐命令の分岐先基本ブロ
ック各々へのメモリを介したデータ依存関係を調査し、
該調査したデータ依存関係と、前記プロファイル情報か
ら得た条件分岐確率とを総合した結果、当該条件分岐で
の分岐先基本ブロック各々に関して、分岐確率の間に定
められた以上の差異がなく、且つ、メモリを介したデー
タ依存発生時期の早遅にも定められた以上の差異がない
場合に、当該条件分岐部分を並列化しないように決定す
る、処理を含み、前記処理を前記コンピュータで実行す
るためのプログラムを記録した記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000093508A JP3641997B2 (ja) | 2000-03-30 | 2000-03-30 | プログラム変換装置及び方法並びに記録媒体 |
US09/821,444 US7010787B2 (en) | 2000-03-30 | 2001-03-29 | Branch instruction conversion to multi-threaded parallel instructions |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000093508A JP3641997B2 (ja) | 2000-03-30 | 2000-03-30 | プログラム変換装置及び方法並びに記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001282549A true JP2001282549A (ja) | 2001-10-12 |
JP3641997B2 JP3641997B2 (ja) | 2005-04-27 |
Family
ID=18608686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000093508A Expired - Fee Related JP3641997B2 (ja) | 2000-03-30 | 2000-03-30 | プログラム変換装置及び方法並びに記録媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7010787B2 (ja) |
JP (1) | JP3641997B2 (ja) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2380573A (en) * | 2001-07-12 | 2003-04-09 | Nec Corp | Parallel processing of multiple threads in a fork-once manner |
JP2006154971A (ja) * | 2004-11-25 | 2006-06-15 | Matsushita Electric Ind Co Ltd | プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。 |
JP2007193430A (ja) * | 2006-01-17 | 2007-08-02 | Tokyo Institute Of Technology | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム |
JP2007193423A (ja) * | 2006-01-17 | 2007-08-02 | Tokyo Institute Of Technology | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラおよび並列処理コンパイラを格納した記録媒体 |
WO2008072334A1 (ja) * | 2006-12-14 | 2008-06-19 | Fujitsu Limited | コンパイル方法及びコンパイラ |
JP2009048252A (ja) * | 2007-08-14 | 2009-03-05 | Oki Electric Ind Co Ltd | プログラム変換装置及びコンパイラプログラム |
US7509634B2 (en) | 2002-11-12 | 2009-03-24 | Nec Corporation | SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus |
US7530069B2 (en) | 2004-06-30 | 2009-05-05 | Nec Corporation | Program parallelizing apparatus, program parallelizing method, and program parallelizing program |
US7533375B2 (en) | 2003-03-31 | 2009-05-12 | Nec Corporation | Program parallelization device, program parallelization method, and program parallelization program |
WO2009110525A1 (ja) | 2008-03-07 | 2009-09-11 | 日本電気株式会社 | ジョブネットワーク自動生成装置、方法及びプログラム記録媒体 |
JP2014182795A (ja) * | 2013-03-15 | 2014-09-29 | Intel Corp | 共有メモリへのアクセスの同期を緩和するプロセッサ、方法及びシステム |
JP2017134443A (ja) * | 2016-01-25 | 2017-08-03 | 株式会社ドワンゴ | プロセッサ |
Families Citing this family (71)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030079210A1 (en) * | 2001-10-19 | 2003-04-24 | Peter Markstein | Integrated register allocator in a compiler |
US7426048B2 (en) * | 2002-01-21 | 2008-09-16 | Canon Kabushiki Kaisha | Image forming apparatus, controlling method, and control program |
JP3871312B2 (ja) * | 2002-02-27 | 2007-01-24 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換方法、これを用いたデータ処理装置及びプログラム |
US8141068B1 (en) * | 2002-06-18 | 2012-03-20 | Hewlett-Packard Development Company, L.P. | Compiler with flexible scheduling |
GB0320386D0 (en) * | 2003-08-30 | 2003-10-01 | Ibm | A method, apparatus and computer program for executing a program |
JP2005129001A (ja) * | 2003-09-30 | 2005-05-19 | Toshiba Corp | プログラム実行装置、マイクロプロセッサ及びプログラム実行方法 |
US20050198627A1 (en) * | 2004-03-08 | 2005-09-08 | Intel Corporation | Loop transformation for speculative parallel threads |
JP3901182B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
JP3901180B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
WO2006072841A2 (en) * | 2004-11-30 | 2006-07-13 | Koninklijke Philips Electronics N.V. | Efficient switching between prioritized tasks |
US7712081B2 (en) * | 2005-01-19 | 2010-05-04 | International Business Machines Corporation | Using code motion and write and read delays to increase the probability of bug detection in concurrent systems |
US7343476B2 (en) * | 2005-02-10 | 2008-03-11 | International Business Machines Corporation | Intelligent SMT thread hang detect taking into account shared resource contention/blocking |
JP2006338616A (ja) * | 2005-06-06 | 2006-12-14 | Matsushita Electric Ind Co Ltd | コンパイラ装置 |
US7627864B2 (en) * | 2005-06-27 | 2009-12-01 | Intel Corporation | Mechanism to optimize speculative parallel threading |
US7739524B2 (en) * | 2005-08-29 | 2010-06-15 | The Invention Science Fund I, Inc | Power consumption management |
US7627739B2 (en) * | 2005-08-29 | 2009-12-01 | Searete, Llc | Optimization of a hardware resource shared by a multiprocessor |
US8255745B2 (en) * | 2005-08-29 | 2012-08-28 | The Invention Science Fund I, Llc | Hardware-error tolerant computing |
US7774558B2 (en) * | 2005-08-29 | 2010-08-10 | The Invention Science Fund I, Inc | Multiprocessor resource optimization |
US7877584B2 (en) * | 2005-08-29 | 2011-01-25 | The Invention Science Fund I, Llc | Predictive processor resource management |
US8375247B2 (en) * | 2005-08-29 | 2013-02-12 | The Invention Science Fund I, Llc | Handling processor computational errors |
US7725693B2 (en) * | 2005-08-29 | 2010-05-25 | Searete, Llc | Execution optimization using a processor resource management policy saved in an association with an instruction group |
US8209524B2 (en) * | 2005-08-29 | 2012-06-26 | The Invention Science Fund I, Llc | Cross-architecture optimization |
US20070050608A1 (en) * | 2005-08-29 | 2007-03-01 | Searete Llc, A Limited Liability Corporatin Of The State Of Delaware | Hardware-generated and historically-based execution optimization |
US7779213B2 (en) | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US8423824B2 (en) | 2005-08-29 | 2013-04-16 | The Invention Science Fund I, Llc | Power sparing synchronous apparatus |
US8214191B2 (en) * | 2005-08-29 | 2012-07-03 | The Invention Science Fund I, Llc | Cross-architecture execution optimization |
US8516300B2 (en) * | 2005-08-29 | 2013-08-20 | The Invention Science Fund I, Llc | Multi-votage synchronous systems |
US7512842B2 (en) * | 2005-08-29 | 2009-03-31 | Searete Llc | Multi-voltage synchronous systems |
US20070050605A1 (en) * | 2005-08-29 | 2007-03-01 | Bran Ferren | Freeze-dried ghost pages |
US8181004B2 (en) * | 2005-08-29 | 2012-05-15 | The Invention Science Fund I, Llc | Selecting a resource management policy for a resource available to a processor |
US7647487B2 (en) * | 2005-08-29 | 2010-01-12 | Searete, Llc | Instruction-associated processor resource optimization |
JP4957729B2 (ja) * | 2007-01-25 | 2012-06-20 | 日本電気株式会社 | プログラム並列化方法、プログラム並列化装置及びプログラム |
JP5165969B2 (ja) * | 2007-08-29 | 2013-03-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムのコンパイルのために変数にレジスタを割り付ける技術 |
US9405683B2 (en) * | 2007-11-06 | 2016-08-02 | Samsung Electronics Co., Ltd. | Processor and memory control method for allocating instructions to a cache and a scratch pad memory |
JP5278336B2 (ja) * | 2008-02-15 | 2013-09-04 | 日本電気株式会社 | プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム |
US9772887B2 (en) * | 2008-06-02 | 2017-09-26 | Microsoft Technology Learning, LLC | Composable and cancelable dataflow continuation passing |
US9189233B2 (en) | 2008-11-24 | 2015-11-17 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US9672019B2 (en) | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US10621092B2 (en) | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
US8732680B2 (en) * | 2009-02-19 | 2014-05-20 | International Business Machines Corporation | Intermediate form for bitwidth sensitive applications and uses thereof |
KR101572879B1 (ko) | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
EP2438545A2 (en) * | 2009-06-02 | 2012-04-11 | Vector Fabrics B.V. | Improvements in embedded system development |
US9547511B2 (en) * | 2009-06-05 | 2017-01-17 | Microsoft Technology Licensing, Llc | Language-based model for asynchronous operations |
US8561041B1 (en) * | 2009-06-22 | 2013-10-15 | The Mathworks, Inc. | Parallel execution of function calls in a graphical model |
US8640108B2 (en) * | 2009-12-31 | 2014-01-28 | International Business Machines Corporation | Method for managing hardware resources within a simultaneous multi-threaded processing system |
US8516229B2 (en) * | 2010-02-05 | 2013-08-20 | International Business Machines Corporation | Two pass test case generation using self-modifying instruction replacement |
WO2011133030A1 (en) | 2010-04-23 | 2011-10-27 | Vector Fabrics B.V. | Improved embedded system performance |
US8650554B2 (en) * | 2010-04-27 | 2014-02-11 | International Business Machines Corporation | Single thread performance in an in-order multi-threaded processor |
US8661424B2 (en) | 2010-09-02 | 2014-02-25 | Honeywell International Inc. | Auto-generation of concurrent code for multi-core applications |
GB2486485B (en) | 2010-12-16 | 2012-12-19 | Imagination Tech Ltd | Method and apparatus for scheduling the issue of instructions in a microprocessor using multiple phases of execution |
US9417855B2 (en) | 2011-09-30 | 2016-08-16 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
US8893104B2 (en) * | 2012-01-26 | 2014-11-18 | Qualcomm Incorporated | Method and apparatus for register spill minimization |
US9280398B2 (en) | 2012-01-31 | 2016-03-08 | International Business Machines Corporation | Major branch instructions |
US9229722B2 (en) | 2012-01-31 | 2016-01-05 | International Business Machines Corporation | Major branch instructions with transactional memory |
GB2513516A (en) * | 2012-01-31 | 2014-10-29 | Ibm | Major branch instructions with transactional memory |
US8954546B2 (en) | 2013-01-25 | 2015-02-10 | Concurix Corporation | Tracing with a workload distributor |
US20130283281A1 (en) | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deploying Trace Objectives using Cost Analyses |
US8924941B2 (en) | 2013-02-12 | 2014-12-30 | Concurix Corporation | Optimization analysis using similar frequencies |
US8997063B2 (en) | 2013-02-12 | 2015-03-31 | Concurix Corporation | Periodicity optimization in an automated tracing system |
WO2014142704A1 (en) * | 2013-03-15 | 2014-09-18 | Intel Corporation | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
US20130219372A1 (en) | 2013-03-15 | 2013-08-22 | Concurix Corporation | Runtime Settings Derived from Relationships Identified in Tracer Data |
US9575874B2 (en) | 2013-04-20 | 2017-02-21 | Microsoft Technology Licensing, Llc | Error list and bug report analysis for configuring an application tracer |
US10725889B2 (en) * | 2013-08-28 | 2020-07-28 | Micro Focus Llc | Testing multi-threaded applications |
US9292415B2 (en) | 2013-09-04 | 2016-03-22 | Microsoft Technology Licensing, Llc | Module specific tracing in a shared module environment |
US9891936B2 (en) | 2013-09-27 | 2018-02-13 | Intel Corporation | Method and apparatus for page-level monitoring |
CN105765528B (zh) | 2013-11-13 | 2019-09-24 | 微软技术许可有限责任公司 | 具有可配置原点定义的应用执行路径跟踪的方法、系统和介质 |
GB2533415B (en) * | 2014-12-19 | 2022-01-19 | Advanced Risc Mach Ltd | Apparatus with at least one resource having thread mode and transaction mode, and method |
US20170123798A1 (en) * | 2015-11-01 | 2017-05-04 | Centipede Semi Ltd. | Hardware-based run-time mitigation of blocks having multiple conditional branches |
JP2017107448A (ja) * | 2015-12-10 | 2017-06-15 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
US10671361B2 (en) * | 2016-10-25 | 2020-06-02 | Paypal, Inc. | Automatically determining data dependencies to facilitate code execution |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3601341B2 (ja) * | 1999-02-09 | 2004-12-15 | 株式会社日立製作所 | 並列プログラム生成方法 |
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 |
JP2921190B2 (ja) * | 1991-07-25 | 1999-07-19 | 日本電気株式会社 | 並列実行方式 |
US5530866A (en) * | 1991-07-30 | 1996-06-25 | Tera Computer Company | Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring |
US5812811A (en) * | 1995-02-03 | 1998-09-22 | International Business Machines Corporation | Executing speculative parallel instructions threads with forking and inter-thread communication |
JP2970553B2 (ja) | 1996-08-30 | 1999-11-02 | 日本電気株式会社 | マルチスレッド実行方法 |
US5857104A (en) * | 1996-11-26 | 1999-01-05 | Hewlett-Packard Company | Synthetic dynamic branch prediction |
JPH11259437A (ja) * | 1998-03-12 | 1999-09-24 | Hitachi Ltd | 不要バリア命令の削減方式 |
US6304960B1 (en) * | 1998-08-06 | 2001-10-16 | Intel Corporation | Validating prediction for branches in a cluster via comparison of predicted and condition selected tentative target addresses and validation of branch conditions |
US6449711B1 (en) * | 1999-02-04 | 2002-09-10 | Sun Microsystems, Inc. | Method, apparatus, and article of manufacture for developing and executing data flow programs |
JP2001147819A (ja) * | 1999-11-19 | 2001-05-29 | Fujitsu Ltd | 最適化装置および記録媒体 |
US6588009B1 (en) * | 1999-11-29 | 2003-07-01 | Adelante Technologies Nv | Method and apparatus for compiling source code using symbolic execution |
-
2000
- 2000-03-30 JP JP2000093508A patent/JP3641997B2/ja not_active Expired - Fee Related
-
2001
- 2001-03-29 US US09/821,444 patent/US7010787B2/en not_active Expired - Lifetime
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2380573B (en) * | 2001-07-12 | 2006-02-22 | Nippon Electric Co | Multi-thread executing method and parallel processing system |
US7243345B2 (en) | 2001-07-12 | 2007-07-10 | Nec Corporation | Multi-thread executing method and parallel processing system |
GB2380573A (en) * | 2001-07-12 | 2003-04-09 | Nec Corp | Parallel processing of multiple threads in a fork-once manner |
US7509634B2 (en) | 2002-11-12 | 2009-03-24 | Nec Corporation | SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus |
US7533375B2 (en) | 2003-03-31 | 2009-05-12 | Nec Corporation | Program parallelization device, program parallelization method, and program parallelization program |
US7530069B2 (en) | 2004-06-30 | 2009-05-05 | Nec Corporation | Program parallelizing apparatus, program parallelizing method, and program parallelizing program |
JP2006154971A (ja) * | 2004-11-25 | 2006-06-15 | Matsushita Electric Ind Co Ltd | プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。 |
JP2007193430A (ja) * | 2006-01-17 | 2007-08-02 | Tokyo Institute Of Technology | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム |
JP2007193423A (ja) * | 2006-01-17 | 2007-08-02 | Tokyo Institute Of Technology | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラおよび並列処理コンパイラを格納した記録媒体 |
WO2008072334A1 (ja) * | 2006-12-14 | 2008-06-19 | Fujitsu Limited | コンパイル方法及びコンパイラ |
JPWO2008072334A1 (ja) * | 2006-12-14 | 2010-03-25 | 富士通株式会社 | コンパイル方法及びコンパイラ |
JP2009048252A (ja) * | 2007-08-14 | 2009-03-05 | Oki Electric Ind Co Ltd | プログラム変換装置及びコンパイラプログラム |
WO2009110525A1 (ja) | 2008-03-07 | 2009-09-11 | 日本電気株式会社 | ジョブネットワーク自動生成装置、方法及びプログラム記録媒体 |
JP2014182795A (ja) * | 2013-03-15 | 2014-09-29 | Intel Corp | 共有メモリへのアクセスの同期を緩和するプロセッサ、方法及びシステム |
US9304940B2 (en) | 2013-03-15 | 2016-04-05 | Intel Corporation | Processors, methods, and systems to relax synchronization of accesses to shared memory |
JP2016207232A (ja) * | 2013-03-15 | 2016-12-08 | インテル・コーポレーション | 共有メモリへのアクセスの同期を緩和するプロセッサ、方法、システム、及びプログラム |
US10235175B2 (en) | 2013-03-15 | 2019-03-19 | Intel Corporation | Processors, methods, and systems to relax synchronization of accesses to shared memory |
JP2017134443A (ja) * | 2016-01-25 | 2017-08-03 | 株式会社ドワンゴ | プロセッサ |
Also Published As
Publication number | Publication date |
---|---|
JP3641997B2 (ja) | 2005-04-27 |
US7010787B2 (en) | 2006-03-07 |
US20040103410A1 (en) | 2004-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3641997B2 (ja) | プログラム変換装置及び方法並びに記録媒体 | |
US20110119660A1 (en) | Program conversion apparatus and program conversion method | |
US6718541B2 (en) | Register economy heuristic for a cycle driven multiple issue instruction scheduler | |
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
JP3311462B2 (ja) | コンパイル処理装置 | |
US6625797B1 (en) | Means and method for compiling high level software languages into algorithmically equivalent hardware representations | |
US8336038B2 (en) | System and method for parallel execution of a program | |
JP3707727B2 (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
JP5148674B2 (ja) | プログラム並列化装置およびプログラム | |
US7458065B2 (en) | Selection of spawning pairs for a speculative multithreaded processor | |
EP0725334A1 (en) | Executing speculative parallel instruction threads | |
US10430191B2 (en) | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption | |
JP3651774B2 (ja) | コンパイラ及びそのレジスタ割付方法 | |
JPH0738158B2 (ja) | コード最適化方法およびコンパイラ・システム | |
JP3539613B2 (ja) | ループ飛び出し文を含むループに対する配列サマリ解析方法 | |
Yuan et al. | Compiling esterel for multi-core execution | |
JP6427053B2 (ja) | 並列化コンパイル方法、及び並列化コンパイラ | |
JP3311381B2 (ja) | コンパイラにおける命令スケジューリング処理方法 | |
Vachharajani | Intelligent speculation for pipelined multithreading | |
Koizumi et al. | Reduction of instruction increase overhead by STRAIGHT compiler | |
JP2007108838A (ja) | コンパイル方法及びコンパイル装置 | |
JP3648402B2 (ja) | コンパイル方法及びコンパイラ装置 | |
Boldt et al. | Esterel Compiler for a Synchronous Reactive Processor | |
Ju et al. | Develop and prototype code generation techniques for a clause-based GPU | |
Leupers et al. | Performance Optimization with Conditional Instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040824 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041025 |
|
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: 20050104 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050117 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 3641997 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080204 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090204 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100204 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100204 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110204 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110204 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120204 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120204 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130204 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130204 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140204 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |