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
Application number
JP2000093508A
Other languages
English (en)
Other versions
JP3641997B2 (ja
Inventor
Junji Sakai
淳嗣 酒井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2000093508A priority Critical patent/JP3641997B2/ja
Priority to US09/821,444 priority patent/US7010787B2/en
Publication of JP2001282549A publication Critical patent/JP2001282549A/ja
Application granted granted Critical
Publication of JP3641997B2 publication Critical patent/JP3641997B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task 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

(57)【要約】 【課題】中間プログラムレベルでマルチスレッドマイク
ロプロセッサ向けの並列化を行うプログラム変換装置の
提供。 【解決手段】並列化装置11は、FORK箇所決定部2
1とレジスタ割り当て部22と命令並べ換え部23を備
え、入力した中間プログラムに対し、FORK箇所決定
部21はレジスタ割り当て部22でレジスタ割り当てを
試行した結果とメモリデータ依存箇所の数とプロファイ
ル情報ファイル5から得た分岐確率及びデータ依存発生
頻度をもとに、FORK箇所と、FORK方式を決定
し、命令並べ換え部23は、その決定に沿ってFORK
命令前後の命令を並べ換える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数の機械命令を
同時に実行できるマルチスレッド型マイクロプロセッサ
のためのプログラム変換技術に関し、特に、小さな粒度
でも実行効率の高い並列プログラムを生成するためのプ
ログラム変換技術に関する。
【0002】
【従来の技術】情報処理装置において、プログラムの実
行性能を高めるための一技法として、従来より、プログ
ラムを複数の命令流即ちスレッドに分割し、それらのス
レッドを並列実行するマルチスレッド実行技術が採用さ
れている。
【0003】それぞれに実行ユニットを有する複数のプ
ロセッサエレメント(プロセッサ要素)を密に結合した
マルチスレッドマイクロプロセッサは、スレッドの生
成、同期等の処理を低コストで行えるという特徴を備え
ており、逐次性が高くスレッド粒度(スレッドのサイ
ズ)が小さいプログラムに対しても、十分な並列処理効
果を出すことができる。
【0004】このようなマルチスレッドマイクロプロセ
ッサのアーキテクチャとして、 ・文献1(「On−Chip Microproces
sor指向制御並列アーキテクチャMUSCATの提
案」(鳥居他、並列処理シンポジウムJSPP97論文
集、情報処理学会、第229−236頁、May199
7))、 ・文献2(「オンチップ制御並列プロセッサMUSCA
Tの提案」(鳥居他、情報処理学会論文誌、Vol.3
9、No.6、June1998))、 ・文献3(特開平10−78880号公報) 等に示されたアーキテクチャが知られている。
【0005】まず、前記文献2に記載されているMUS
CATアーキテクチャについて説明する。MUSCAT
は、複数のプロセッサエレメントを1チップに集積し、
「制御並列」と呼ぶマルチスレッド処理を効率良く実行
するアーキテクチャである。各プロセッサエレメント
は、それぞれ独立した演算器と独立したレジスタセット
を持つ。他方、各プロセッサエレメントはメモリ空間を
共有する。
【0006】MUSCATにおける制御並列実行方式に
ついて説明する。図18に示すように、MUSCATア
ーキテクチャのプロセッサは、スレッド生成のためのF
ORK(フォーク)命令を持ち、この機械命令1つで、
隣接プロセッサエレメントに新しいスレッドを生成する
ことができる。
【0007】MUSCATは、1つのスレッドがFOR
K命令を実行できる回数を高々1回に制限する「FOR
K1回モデル」を採用している。各プロセッサエレメン
トは、単方向のリング状に結合され、あるプロセッサエ
レメントで実行中のスレッドがFORK命令を実行する
と、下流側に隣接するプロセッサエレメントに新しいス
レッドが生成される。スレッドがTERM(ターム)命
令(スレッド終了命令)を実行すると、自スレッドが終
了する。
【0008】プロセッサエレメント間のデータのやりと
りは、レジスタまたはメモリを通じて行われる。FOR
K命令を実行すると、当該スレッド(「親スレッド」と
呼ぶ)を実行しているプロセッサエレメントのレジスタ
セットの内容が、生成された新スレッド(「子スレッ
ド」と呼ぶ)を実行するプロセッサエレメントのレジス
タセットに論理的にコピーされる。また、親スレッドが
FORK命令実行前にメモリにストアした値は、子スレ
ッドがロードして参照することができる。
【0009】親スレッドが子スレッドを生成した後、親
スレッドが子スレッドにデータを渡す唯一の方法は、メ
モリを介してデータを渡す、というものである。この場
合、親スレッドのストアと子スレッドのロードの実行順
序を正しいものにするために、一種の同期をとる必要が
ある。この同期のための措置を、「データ依存保証」と
呼ぶ。
【0010】MUSCATは、上記データ依存保証のた
めの方式として、 ・予め同期を明示的に宣言するBLOCK方式、 ・同期無しで実行して、もし同期に失敗したら実行をや
り直すDSP方式、 の2種類のデータ依存保証方式を備える。
【0011】図19は、BLOCK方式の動作を説明す
る図である。BLOCK方式によるデータ依存保証方式
は、MUSCATが備えるBLOCK(ブロック)命令
と、RELEASE(リリース)命令を用いる方式であ
る。
【0012】親スレッドは、ストア対象メモリアドレス
をBLOCK命令で指定してからFORK命令を実行
し、メモリストアを行う。その後、親スレッドは、RE
LEASE命令を実行して、当該メモリアドレスにデー
タが準備できたことを表明する。親スレッドがBLOC
Kしたアドレスからのロードを子スレッドが実行しよう
とすると、親スレッドがRELEASE命令を実行する
まで、子スレッドのロード命令は完了しない。このよう
にして、親スレッドがメモリに書き込んだ値(メモリに
ストアした値)を、子スレッドが正しく読み出す(メモ
リからロードする)ことができる。他のデータ依存保証
方式であるDSP方式は、投機実行方式の一つであり、
詳細は後述する。
【0013】次に、図20を参照して、MUSCATア
ーキテクチャの投機実行機能について説明する。MUS
CATのSPFORK命令はFORK命令の一種であ
り、制御投機モードのスレッド生成を指示する。SPF
ORK命令で生成された子スレッドは、いつでも実行を
取り消せる状態で実行される。即ち、レジスタ値の変更
は許されるが、外部メモリへのアクセスは抑止される。
【0014】図20(A)に示すように、親スレッドが
THFIX命令(スレッド確定命令)を実行すると、子
スレッドの制御投機モードは解除され、内部で溜ってい
たメモリ変更操作が実際にメモリに反映される。
【0015】しかしながら、図20(B)に示すよう
に、親スレッドがTHABORT命令(スレッド破棄命
令)を実行すると、子スレッドは破棄され、レジスタや
メモリに対して行おうとした変更は全て捨てられる。な
お、親スレッドがTHFIX命令、又はTHABORT
命令を実行する前に、TERM命令により終了すると、
子スレッドの制御投機モードは解除される。
【0016】制御投機モードのスレッドは、結果的に実
行することになる可能性が高いが、現時点では実行して
もよいか否か判断がつかない場合等に用いられる。即
ち、プログラム内の早い段階で制御投機モードスレッド
を生成して並列に処理を行い、後になって生成したスレ
ッドでの処理を本当に行うかどうかを判定してスレッド
の確定ないし破棄を行う。
【0017】上記した制御投機モードFORKは、制御
の流れを予測し、投機的にスレッド生成するものである
が、これとは独立に、MUSCATには、データ依存を
予測し、投機的にスレッドを実行する機能が用意されて
いる。このようなスレッド状態は、「データ依存投機モ
ード」と呼ばれる。
【0018】データ依存投機モードを用いる場合、親ス
レッドは、BLOCK命令やRELEASE命令を用い
る必要はない。ハードウェアアーキテクチャが、実行時
に親子スレッド間のメモリデータ依存(親スレッドのメ
モリへのストアと子スレッドのメモリからのロードの時
間順序)を検査し、子スレッドが誤った値をロードした
場合には、子スレッドを再実行させる。
【0019】前述のBLOCK方式と並ぶ、もう一つの
データ依存保証方式であるDSP方式は、このデータ依
存投機モードを利用する方式である。
【0020】図21を参照すると、親スレッドは、デー
タ依存投機モードでFORKすることを意味するDSP
IN命令を実行した後で、FORKを行う。これによっ
て生成された子スレッドは、データ依存投機モードで実
行を開始する。その後、親スレッドがDSPOUT命令
を実行すると、子スレッドはデータ依存投機モードから
非データ依存投機モードに戻る。
【0021】データ依存投機モードは、BLOCK/R
ELEASE命令が不要であり、データ依存を引き起こ
すメモリアドレスが事前に分かっていない場合でも、F
ORKを行える、という長所がある。しかしながら、も
し、FORK後にデータ依存が発生すると、子スレッド
は誤ったデータに基づいた部分の実行をやり直すことに
なる、という短所をもつ。
【0022】従って、プログラムに内在するデータ依存
の状況によって、BLOCK方式あるいはDSP方式の
うち、適切な方式を選択すべきである。
【0023】これまで述べたFORK命令や、データ依
存保証方式等の制御並列サポート命令により、MUSC
ATアーキテクチャでは、プログラムから並列実行可能
な部分をより多く抽出し、プログラムの実行性能を向上
させることができる。
【0024】このようなMUSCATアーキテクチャ向
けのプログラムは、FORK(フォーク)を行う箇所毎
に、前述の命令を用いたコーディングを行わねばなら
ず、このため、高級言語(高水準プログラミング言語)
から機械命令列を自動生成するコンパイラが、従来型の
アーキテクチャよりも、一層強く求められる。
【0025】MUSCATアーキテクチャ向けコンパイ
ラ技術は、文献4(「制御並列アーキテクチャ向け自動
並列化コンパイル手法」(酒井他、情報処理学会論文
誌、Vol.40、No.5、May1999))にお
いて開示されている。この文献4に示された技術の概要
を以下に説明する。
【0026】前記文献4には、通常の逐次コンパイラが
生成した機械命令列を、MUSCAT向け命令列に変換
するトランスレータの仕組みが記載されている。与えら
れた機械命令列に対して、制御フロー解析及びデータフ
ロー解析を行い、基本ブロック毎にFORK命令を用い
た並列化を試みる。ここで、「基本ブロック」とは、途
中で制御の分岐や合流が無い、一続きの命令列のことを
いう。
【0027】基本ブロック毎の並列化は、まず、基本ブ
ロック末尾の分岐命令を、制御投機モードFORK命令
(SPFORK命令)に置き換えることから始まる。こ
れは、ある基本ブロックに後続する複数の基本ブロック
の一方を、当該基本ブロックと並列に実行しようとする
ことを意味する。後続基本ブロックのうちいずれを選択
するかは、前記文献4では、ループ構造の場合は、ルー
プの戻り方向がよいとされている他、プロファイル情報
を用いて分岐確率の高い方を選択することが示されてい
る。
【0028】次に、当該基本ブロックと、FORK先基
本ブロック以降との間でのレジスタ、及びメモリアクセ
スによるデータ依存を調査する。
【0029】そして、当該基本ブロック内で、FORK
命令ができるだけ上流に位置するように、基本ブロック
内で命令の並べ換えを行う。命令並べ換えに際しては、
データ依存関係に留意し、レジスタを介して正依存があ
る場合には、その命令をFORK命令よりも上流側に配
置する。メモリを介して正依存がある場合には、DSP
IN命令ないし依存メモリアドレスを引数としたBLO
CK命令を、FORK命令の直前に新たに挿入する。
【0030】両者の使い分けについて、前記文献4で
は、依存をひき起こすメモリアドレスがストア直前まで
決定できない場合、及び、依存をひき起こすメモリアド
レスが決定できた場合でもメモリアドレス値がある数よ
り多い場合には、DSPIN命令、それ以外の場合に
は、BLOCK命令を用いるものとされている。なお、
前記文献4では、この他にも、MUSCAT特有の命令
生成手順が述べられているが、本発明の主題とは直接の
関連性は薄いため、ここでは、あらためて説明は行わな
い。
【0031】
【発明が解決しようとする課題】ところで、上記した従
来の技術は、下記記載の問題点を有している。
【0032】第1の問題点は、FORK先を選択する基
準に、まだ改良の余地がある、ことである。
【0033】上記した従来の技術では、静的にはループ
構造の把握、動的には実行履歴のプロファイル情報を得
て、それに基づいてFORK先を決定している。しかし
ながら、これらは、制御の流れ上、実行される確率が高
い部分をFORKしているにすぎず、データ依存性につ
いては、考慮されていない。このため、過度のデータ依
存が存在する部分をマルチスレッド実行しようとして
も、並列実行区間が短くなったり、あるいはデータ依存
箇所で待ち合わせが起こるため、結果として、得られる
性能向上は、小さなものとなってしまう、という問題が
ある。
【0034】第2の問題点は、データ依存対処手順がレ
ジスタとメモリとで異なっている、ということである。
【0035】前記文献4等に記載されている手順では、
レジスタを介した依存と、メモリを介した依存とで、命
令の並べ換えや、新規挿入命令の処理が異なっている。
しかしながら、コンパイラ内部では、「中間項」と呼ば
れる仮想的な変数を用いた表現が用いられることが一般
に行われており、その段階で、レジスタかメモリかの判
断に基づく並列化処理を行うことは困難である。
【0036】他方、一般的なコンパイラ内部でも、最終
段近くになれば、レジスタ割り当てが済み、レジスタと
メモリの区別が確定しているが、この段階で並列化を行
おうとすると、既に、最適化された制御フローやデータ
フローに悪影響を与えないように、プログラム構造を変
更する処理が困難になる。
【0037】したがって、本発明は、上記問題点に鑑み
てなされたものであって、その目的は、コンパイラ内部
の中間項レベルで的確な判断により並列化処理を行える
ようにし、もってマルチスレッドマイクロプロセッサ向
けプログラム変換装置及び方法並びに記録媒体を提供す
ることである。
【0038】本発明の他の目的は、並列実行時により一
層の並列性能を引き出すような目的コードを生成できる
プログラム変換装置(コンパイラ)及び方法並びに記録
媒体を提供することにある。これ以外の本発明の目的、
特徴、利点等は、下記の実施の形態の記載等から、当業
者には直ちに明らかとされるであろう。
【0039】
【課題を解決するための手段】前記目的を達成する本発
明の第1のプログラム変換装置は、中間プログラム上で
レジスタ割り当てを試行して割り当て情報を先行取得す
るレジスタ割り当てを試行部と、メモリを介して発生す
るデータ依存の距離の計算部と、を備え、メモリを介す
るデータ依存の距離を考慮してFORK先を決定し、条
件分岐をFORK命令に置き換え、レジスタ割り当て試
行結果を参照して、中間プログラム上で、FORK命令
前後の命令並べ換えを行う。
【0040】また、本発明の第2のプログラム変換装置
は、前記第1のプログラム変換装置に加えて、プロファ
イル情報から条件分岐確率及びデータ依存発生頻度を計
算する部分とを備え、データ依存の距離と条件分岐確率
とデータ依存発生頻度とデータ依存メモリ箇所数からF
ORK先を決定し、条件分岐をFORK命令に置き換
え、レジスタ割り当て試行結果を参照して中間プログラ
ム上でFORK命令前後の命令並べ換えを行う。
【0041】本発明の並列化方法は、原始プログラムを
コンパイルしてマルチスレッド型のターゲットプロセッ
サ装置向けの目的プログラムを生成出力するコンパイラ
における、構文解析の結果出力される中間プログラムに
対して並列化を含む最適化処理を行う方法であって、
(a)並列化に先立ってレジスタ割り当てを試み、中間
プログラム上の各変数、及び中間項のレジスタ割り当て
状況を予測するレジスタ割り当て試行ステップと、
(b)前記レジスタ割り当て試行結果に基づいて、前記
中間プログラムにおける条件分岐部分をスレッド生成命
令を用いた並列コードに変換するか否かの決定を行う
か、もしくは、並列コードに変換するか否かの決定と並
列コードに変換する場合その並列実行方式の決定を行う
フォーク(FORK)箇所決定ステップと、(c)前記
フォーク(FORK)箇所決定部での決定結果に基づい
て、前記中間プログラム中の条件分岐部分を、スレッド
生成命令を用いた並列コードに変換し、前記レジスタ割
り当て試行結果を参照して、スレッド間のメモリを介し
たデータ依存関係を保証する命令を、前記スレッド生成
命令の前後に挿入すると共に、スレッド生成が早い段階
で行われるように、前記スレッド生成命令の前後の命令
を並べ換える命令並べ換えステップと、(d)並列化さ
れ並べ換えられた命令列に対して、物理レジスタが割り
当てられるか否かに関して、前記レジスタ割り当ての試
行時と同じ割り当て結果となるように確定的なレジスタ
割り当てを行うレジスタ割り当てステップと、を含む。
【0042】本発明において、ターゲットプロセッサ装
置は、好ましくは、複数のプログラムカウンタと、複数
のスレッド実行装置と、を備え、前記複数のスレッド実
行装置は、前記複数のプログラムカウンタに従って、複
数のスレッドの命令を、同時に、フェッチ、解釈、実行
し、スレッド生成時以降に、レジスタセットに及ぼした
変更を、後に取り消し可能な制御投機的モードでスレッ
ドを実行すること、及び、自スレッドがメモリ領域から
値をロードした後に、自スレッドを生成した親スレッド
が同一メモリ領域に値をストアした場合に、自スレッド
の少なくとも当該ロード以降の処理結果を破棄し、それ
らの処理を再実行するデータ依存投機的モードでスレッ
ドを実行すること、が可能とされ、命令セットとして、 ・前記スレッド実行装置で実行中のスレッドが制御投機
的モードの新たなスレッドを生成すること、 ・指定された条件が成立していれば自スレッドを終了さ
せると共に、自スレッドが生成した制御投機的モードの
スレッドの制御投機的モードを解除すること、 ・生成した制御投機的モードのスレッドを破棄するこ
と、 ・自スレッドが生成するスレッドが指定されたアドレス
のメモリ領域からのロードを行う際に、その動作を一時
停止させることをあらかじめ指示すること、 ・指定されたメモリアドレスに対する前記ロード一時停
止指示を解除すること、 ・前記スレッド実行装置で実行中のスレッドがデータ依
存投機的モードの新たなスレッドを生成すること、及
び、 ・自スレッドが生成したデータ依存投機的モードのスレ
ッドのデータ依存投機的モードを解除すること、 が、単一又は高々数個の機械語命令の組合せで実行でき
る命令セットを有するマルチスレッドプロセッサよりな
る。
【0043】
【発明の実施の形態】次に、本発明の実施の形態につい
て図面を参照して説明する。
【0044】[実施の形態1]図1は、本発明の一実施
の形態の構成の一例を示す図である。図1を参照する
と、プログラム変換装置(コンパイラ)2は、原始プロ
グラム(ソースプログラム)1を読み込んで並列化を含
むコンパイル処理を行い、その結果の目的プログラム
(ターゲットプログラム)3を出力する。
【0045】目的プログラム実行装置4は、目的プログ
ラム3を入力して、目的アーキテクチャの命令実行を行
うと共に、当該プログラムの実行情報を収集し、プロフ
ァイル情報ファイル5を出力する。
【0046】図1を参照すると、プログラム変換装置2
は、 ・入力した原始プログラム1の文法(シンタックス)を
解釈して、構文解析し中間プログラムを生成する構文解
析装置10と、 ・構文解析装置10から受け取った中間プログラムに対
して並列化を含む最適化処理を行う並列化装置11と、 ・並列化装置11から受け取った最適化済みの中間プロ
グラムから目的アーキテクチャ用命令列を生成するコー
ド生成装置12と、 を備えている。
【0047】並列化装置11は、補助情報として、プロ
ファイル情報ファイル5を入力としてより高度な最適化
処理を行うことができる。
【0048】なお、本発明において、構文解析装置10
は、周知の構成が用いられ、例えば字句解析(レキシカ
ルアナリシス)、構文解析(パージング)、意味解析
(セマンティックアナリシス)の各解析部からなる構成
としてもよいことは勿論である。また最適化済みの中間
プログラムから目的アーキテクチャ用命令列を生成する
コード生成装置12も、周知のものが用いられる。
【0049】図2は、本発明の一実施の形態のプログラ
ム変換装置2における並列化装置11の構成を示す図で
ある。図1及び図2を参照して、本発明の要部をなす並
列化装置11について詳細に説明する。
【0050】並列化装置11は、構文解析装置10が生
成した中間プログラム6を受け取り、並列化を含む最適
化処理を行い、後段のコード生成装置12に中間プログ
ラム7を渡す。
【0051】並列化装置11は、 ・入力となる中間プログラム6を読み込んで制御フロー
やデータフローを解析する中間プログラム入力部20
と、 ・制御フロー、データフロー及びプロファイル情報をも
とに並列化する箇所を決定するFORK箇所決定部21
と、 ・中間プログラム上の中間項に対してレジスタ割り当て
を試行するか、あるいは実行するレジスタ割り当て部2
2と、 ・決定された並列化箇所とデータフロー等の情報から並
列化箇所前後の命令の並べ換えを行う命令並べ換え部2
3と、 ・並列化を含む様々な変換を終えた命令列を再度中間プ
ログラム形式で出力する中間プログラム出力部24と、 ・一度目的プログラムを実行して得たプロファイル情報
ファイル5を入力して内部形式に変換するプロファイル
情報入力部25と、 を備えている。
【0052】次に、図3、図4、及び図5のフローチャ
ートを参照して、本発明の一実施の形態の並列化動作に
ついて、詳細に説明する。
【0053】本発明の一実施の形態においては、中間プ
ログラム上で、次の制御並列関連命令が記述できる。
【0054】(1)制御投機FORK命令:制御投機F
ORK命令は、オペランドで指し示された命令から実行
を開始する制御投機モードの子スレッドを生成し、自ス
レッドは後続命令の実行を続ける命令である。
【0055】(2)スレッド終了命令:スレッド終了命
令は、自スレッドを終了させるとともに子スレッドを確
定モードに移行させる命令である。
【0056】(3)子スレッド破棄命令:子スレッド破
棄命令は、制御投機モードの子スレッドを破棄する命令
である。
【0057】(4)ブロック設定命令:ブロック設定命
令は、オペランドで指し示されたメモリアドレスにブロ
ックを設定し、それによって子スレッドが当該メモリア
ドレスからのロードを実行しようとした際に子スレッド
の実行を一時停止(ブロック)させるように、プロセッ
サに指示する命令である。
【0058】(5)ブロック解除命令:ブロック解除命
令は、オペランドで指し示されたメモリアドレスに設定
されているブロックを解除するとともに、当該メモリア
ドレスからのロードで一時停止(ブロック)されている
子スレッドの実行を再開させるように、プロセッサに指
示する命令である。
【0059】(6)レジスタ割り当て指示命令:レジス
タ割り当て指示命令は、オペランドで指定した中間項な
いし変数に物理レジスタを割り当てるように、あるいは
逆に、指定した中間項ないし変数にメモリ上の領域を割
り当てるように、レジスタ割り当て部に指示する命令で
ある。
【0060】図3は、本発明の一実施の形態のFORK
箇所決定部21の動作概要を示す図である。FORK箇
所決定部21は、与えられた中間プログラム中の各関数
単位で、図3に示された動作を行う。即ち、 ・ステップ25にて、当該関数内でレジスタ割り当てを
試行し、その後、 ・ステップ26にて、当該関数内に含まれる各条件分岐
命令に対してFORK箇所決定処理を行う。
【0061】このステップ26の段階では、並列化を含
む各種最適化処理は未完了であり、まだ確定的なレジス
タ割り当て処理を行う段階ではない。そこで、レジスタ
割り当ての途中までを実行し、中間プログラム中のどの
中間項/変数にレジスタが割り当てられ、どの中間項/
変数がメモリ上に配置されるのか、という情報を得た段
階で、実際に割り当ては行わずにレジスタ割り当て処理
を中止する。
【0062】レジスタ割り当ての試行は、後述するよう
に、レジスタ割り当て部22(図2参照)で行う。レジ
スタ割り当て部22は、どの中間項/変数に、どのレジ
スタを割り当てるかを決めた段階で処理を終え、中間項
/変数を実際のレジスタに置き換えることなく、レジス
タ割り当て状況のみを返す仕組み(機構)を備える。
【0063】図4は、各条件分岐命令に対するFORK
箇所決定部21の処理(図3のステップ26)の詳細を
示す図である。
【0064】図4を参照すると、ステップ31では、当
該条件分岐命令が、入力中間プログラム中のループ構造
(繰り返し構造)の戻り枝に相当する分岐命令か否かを
判定する。ループ構造の検出方法については、例えば、
文献5(「コンパイラII原理・技法・ツール」、A.
V.エイホ他著、原田賢一訳、サイエンス社、199
0)の第734頁〜第737頁の記載が参照される。
【0065】ステップ31の判定で、当該条件分岐命令
が、ループ戻り枝に相当する分岐命令である場合、ステ
ップ35にて、当該戻り枝方向、即ちループ継続方向を
FORK先として、この条件分岐箇所を、FORK箇所
に選定する。その理由は、一般に、ループ構造は、複数
回繰り返し実行される傾向にあるため、ループ戻り枝に
相当する分岐命令では、戻り枝側に分岐する確率が高
い、からである。
【0066】ステップ31において、戻り枝分岐ではな
い場合、ステップ32において、条件分岐の2つの分岐
先の各々に対してデータ依存の距離の最小値を計算す
る。
【0067】ここで、「データ依存の距離」とは、現
在、処理対象としている基本ブロック内で定義され、そ
の分岐先で参照される可能性がある中間項及び変数のう
ち、ステップ26により、メモリ上に配置されると見込
まれる、中間項/変数各々に対して、その分岐先基本ブ
ロックの中で、該メモリ参照命令が先頭から、どれぐら
いの位置にあるかを、中間プログラム中のステップ数で
表したものである。
【0068】ステップ32では、2つの分岐先につい
て、各中間項/変数のデータ依存の距離の最小値を計算
する。
【0069】次のステップ33では、ステップ32で条
件分岐の両側に関して求めた2つのデータ依存の距離の
最小値を比較し、両者に一定以上の差があるか否かを判
定する。
【0070】ステップ33において、一定以上の差があ
る場合、ステップ36にて、データ依存の距離の最小値
の大きい側の分岐方向をFORK先とし、この条件分岐
箇所を、FORK箇所に選定する。その理由は、ここで
選定した分岐方向を新スレッドとしてFORKする方が
もう一方をFORKする場合に比べ、FORK直後に、
データ依存で停止してしまう可能性が低い、からであ
る。
【0071】ステップ32で、データ依存の距離を求め
る際、単純な命令ステップ数では、なく、各命令が目的
アーキテクチャのプロセッサ上で実行される際に要する
ものと推定されるサイクル数(クロックサイクル等)を
用いることもできる。これにより、データ依存が発生す
る時期の遅い方を選択する、という、上記ステップ33
の選択がより的確なものになる。
【0072】ステップ34では、その直前のステップ3
3で、データ依存の距離の最小値に一定以上の差がない
場合、元の中間プログラム内で分岐先であった側(分岐
命令のtaken側(分岐成立側))をFORK先と
し、この条件分岐箇所を、FORK候補に選定する。こ
のFORK先の選定は、従来の技術として挙げた上記文
献等に示されているものと同じ理由による。
【0073】以上のようにして、FORK箇所決定部2
1は、FORK箇所と、FORK先を決定する。
【0074】本発明の一実施の形態では、図4に詳細を
示した、FORK箇所決定部21の処理によって、通常
は、最適化の最終段で行うレジスタ割り当て処理を待た
ずに、レジスタ割り当て情報を参照して中間プログラム
上で並列化処理を行うことが可能となる。
【0075】また、本発明の一実施の形態においては、
図4のステップ32、ステップ33の処理を設けること
で、ループ構造以外の部分での性能向上の可能性が高ま
る。
【0076】図5は、本発明の一実施の形態の並列化装
置11の命令並べ換え部23の動作を説明するための流
れ図である。また、図6は、命令並べ換え部23の命令
並べ換え処理の説明を補足する図である。以下、図5及
び図6を参照しながら、命令並べ換え部23の動作を説
明する。
【0077】図5を参照すると、命令並べ換え部23
は、FORK箇所決定部21が決定したFORK箇所を
含む基本ブロック毎に、ステップ40からステップ44
の一連の処理を行う。なお、ステップ40からステップ
44の処理は、すべて中間プログラムに対して行う。こ
れらのステップの説明に現れる命令は、すべて中間プロ
グラム上の対応する命令を指す。
【0078】図6(A)は、命令並べ換え部23が処理
対象とする基本ブロックの構造を模式的に示した図であ
る。図6(A)における「M:=‥」はメモリへのスト
アを行う命令を意味する。
【0079】まず、図5のステップ40にて、中間プロ
グラム中の各中間項及び変数がレジスタに対応付けられ
るかメモリに対応付けられるかを調べる。これは、図4
のステップ32と同様に、レジスタ割り当てを途中まで
試行することで判定する。ステップ32からこのステッ
プ40までの処理では、FORK先を決定するのみで、
中間プログラム自体は変更されず、レジスタ割り当て状
況に差が出ないので、ステップ32のときのレジスタ割
り当て試行結果を保存しておき、その情報をステップ4
0で参照するのがよい。
【0080】次のステップ41では、現在処理対象とし
ている基本ブロックの末尾にある分岐命令を、制御投機
モードFORK命令に置換(変換)する。制御投機FO
RK命令のオペランド、即ちFORK先は、FORK箇
所決定部21が選択したFORK先とする。図6(B)
は、ステップ41までの処理を終えた段階の基本ブロッ
ク構造を示す図である。
【0081】ステップ42では、中間プログラム中で、
制御投機FORK命令の直前にある分岐条件計算文(分
岐条件式)を、制御投機FORK命令直後に移動させる
と共に、その移動先の直後、即ち当該基本ブロックの末
尾に、「分岐条件成立時には自スレッドを終了させて子
スレッドを確定モード(非制御投機モード)に移行さ
せ、分岐条件非成立時には、子スレッドを破棄(アボー
ト)させて自スレッドが後続命令列の実行を続ける」と
いうような一群の命令列を挿入する。図6(C)は、ス
テップ42までの処理を終えた段階の基本ブロック構造
を示す図である。
【0082】ステップ43では、現在処理対象としてい
る基本ブロックにおいて、FORK命令よりも手前、即
ち、上流側にある文のうち、ステップ40において、メ
モリに対応付けられた中間項及び変数への代入となる文
の各々について、その代入文を、FORK命令よりも後
方、即ち、下流側へ移動させると共に、FORK命令の
直前に、ブロック設定命令を挿入し、代入文(:=)の
移動先の直後に、ブロック解除命令を挿入する。ここ
で、挿入するブロック設定命令、及びブロック解除命令
のオペランドは、移動させた代入文の代入先中間項/変
数を表すメモリアドレスとする。
【0083】中間プログラムの形態によっては、この段
階で、具体的なメモリアドレスが確定していない場合が
あるが、その場合は、中間プログラム中での中間項/変
数表現と同様の形式を用いてブロック設定命令及びブロ
ック解除命令を表現し、後に、中間プログラムからコー
ド生成を行う際に実効メモリアドレスを示す命令列に変
換すればよい。
【0084】ステップ43では、ステップ40にてレジ
スタに対応付けられた中間項及び変数への代入となる文
のうち、FORK先で参照される可能性がある中間項/
変数への代入となる文は、FORK命令後に移動させて
はならない。その理由は、レジスタの値はFORK時点
で子スレッドに継承されるため、FORK後に親スレッ
ドが定義したレジスタ値は子スレッド側に渡されないた
めである。
【0085】このように、必ずしも全ての文をFORK
命令後に移動できるわけではないため、ステップ43に
おいて、メモリへの代入文をFORK後に移動させる際
には、移動させようとしている文と、その後続命令との
間のデータ依存関係を調べ、移動によって実行順序が入
れ替わっても、移動前と同じ演算結果が得られる場合に
限って移動を行わなければならない。
【0086】なお、このとき必要となるデータ依存関係
は、コンパイラ技術として一般的なものでよく、本発明
の一実施の形態では、図2における中間プログラム入力
部20が作成した制御フロー及びデータフロー解析結果
を基に、調査して得ることができる。
【0087】図6(D)は、ステップ43までの処理を
終えた段階の基本ブロック構造を示す図である。
【0088】図5のステップ44では、これまでのステ
ップで各中間項及び変数のレジスタ割り当てについて仮
定した情報を、現在処理対象の基本ブロックの先頭に挿
入する。この情報は、実際の機械命令に対応するもので
はないので、中間プログラム上の疑似命令であるレジス
タ割り当て指示命令を用いて記述する。
【0089】図6(E)は、上記ステップ44までの処
理を終えた段階の基本ブロック構造を示す図である。
【0090】本発明の一実施の形態において、ステップ
40及びステップ44を具備することを特徴の一つとし
ている。即ち、・ステップ41のFORK変換処理に先
立って、レジスタ割り当て状況を調べるステップ40
と、・ステップ41のFORK変換処理で仮定したレジ
スタ割り当て状況を、レジスタ割り当て部22に指示す
るステップ44と、を有しており、このため、中間項及
び原始プログラム中の変数表現を用いた中間プログラム
に対しても、詳細な命令並べ換えを行うことができる。
【0091】なお、ステップ41からステップ43の処
理は、上記文献4(「制御並列アーキテクチャ向け自動
並列化コンパイル手法」(酒井他、情報処理学会論文
誌、Vol.40、No.5、May1999))の第
2049頁〜第2050頁に記載されているものと同様
のものである。
【0092】図2に戻ると、レジスタ割り当て部22
は、中間プログラム中の中間項に、目的アーキテクチャ
が有する物理レジスタあるいはメモリ上に割り当てられ
た領域を対応付けるレジスタ割り当て処理を行う。
【0093】レジスタ割り当ての基本的な方法として
は、中間項の使用頻度の高いものから割り当てる方法や
干渉グラフの彩色(カラーリング)による割り当て方法
などを用いることができる。これらの割り当て方法は、
例えば上記文献5(「コンパイラII 原理・技法・ツ
ール」、A.V.エイホ他著、原田賢一訳、サイエンス
社、1990」)の第659頁〜第665頁の記載が参
照される。
【0094】レジスタ割り当て部22におけるレジスタ
割り当て処理は、図5のステップ44で挿入したレジス
タ割り当て指示命令に従う点で、通常のコンパイラでの
レジスタ割り当て処理とは異なる。レジスタ割り当て方
法として、例えば中間項使用頻度順のレジスタ割り当て
方法を採る場合は、レジスタ割り当て指示命令でレジス
タに乗せるよう指定された各中間項の頻度を、他の中間
項よりも高く設定することで、指示された中間項が物理
レジスタに割り当てられる可能性を高める。
【0095】また、レジスタ割り当て方法として、カラ
ーリングによる方法を採る場合は、干渉グラフ中で割り
当て可能な物理レジスタ総数を越える隣接節点数を持つ
節点に対応する中間項の中からメモリ上に割り付ける中
間項をいくつか選択する際、図5のステップ44で挿入
したレジスタ割り当て指示命令でレジスタに乗せるよう
に、指示されていない中間項を優先的に選択すること
で、レジスタ割り当て指示された中間項が物理レジスタ
に割り当てられる可能性を高める。
【0096】レジスタ割り当て部22にて、もし、レジ
スタ割り当て指示命令でレジスタに乗せるように指示さ
れた全ての中間項に物理レジスタを割り付けられなかっ
た場合、それらの中間項は、メモリ領域に割り当てられ
るようにする。その理由は、命令並べ換え部23によっ
て、レジスタ割り当てを前提としている中間項はFOR
K命令より手前(上流側)で値が確定するようにプログ
ラムが変換されているため、それらの中間項が、たとえ
メモリ上に割り当てられたとしてもプログラムの実行結
果は、変化しないからである。
【0097】逆に、レジスタ割り当て部22は、レジス
タ割り当て指示命令でレジスタに乗せるよう指示されて
いない中間項をレジスタに割り当てないように、レジス
タ割り当て処理を行う。これは、従来からのレジスタ割
り当て処理における、アドレスを参照されている変数
や、volatile変数等のレジスタ上に配置できな
い変数に対する処理と同様の枠組で対処できる。
【0098】
【実施例】次に、上記した本発明の一実施の形態の動作
についてさらに詳細に説明すべく、具体的な実施例を用
いて説明する。
【0099】[実施例1]図8は、本発明の一実施例と
して、並列化装置11によって並列化される中間プログ
ラムの一例を示す図である。ここでt1〜t28は中間
項であり、I、J、K、R、Xは原始プログラム中で宣
言された変数である。
【0100】「:=」は、右辺の値を左辺で示す場所に
格納することを意味する。
【0101】「&」は、変数の置かれるメモリアドレス
を返す前置演算子である。
【0102】「mem(a)」は、aの値をアドレスと
するメモリの内容を示し、「:=」の右辺ならメモリロ
ード、左辺ならメモリストアを意味する。
【0103】L1、L2、L3はラベルである。
【0104】図8の左端(の列)に示されている括弧付
きの数字(1)〜(37)は、説明の都合により付した
番号であり、右端の(B1)〜(B3)は基本ブロック
番号を示す。
【0105】図7は、本実施例の動作の説明をする際に
用いる中間プログラム上の制御並列関連命令一覧を示す
図である。
【0106】・SPFORK l は、オペランドlか
ら実行開始する投機(制御)モード子スレッドを生成す
る。 ・TTERM c は、オペランドcが真の場合、自ス
レッドを終了し、子スレッドを確定する。 ・FTERM c は、オペランドcが偽の場合、自ス
レッドを終了し、子スレッドを確定する。 ・THABORT は、投機モードの子スレッドを破棄
する。 ・BLOCK m は、オペランドmで指定したメモリ
アドレスをブロック指定する。 ・RELEASE m は、オペランドmで指定したメ
モリアドレスに設定したブロックを解除する。 ・DSPIN は、後続のFORKで生成した子スレッ
ドをデータ依存投機モードで生成する。 ・DSPOUT は、子スレッドのデータ依存投機モー
ドを解除する。RDCL t1,… は、オペランドt
1,…で指定した中間項/変数をレジスタに割り当てる
ように指示する。MDCL t1,… は、オペランド
t1,…で指定した中間項/変数をメモリに割り当てる
ように指示する。
【0107】図2を参照すると、FORK箇所決定部2
1が、図8に示された中間プログラムを受け取り、FO
RK箇所の決定を行う。
【0108】図3のステップ25にて、レジスタ割り当
てが試行され、t1〜t28の全ての中間項、及び変数
I、K、Rには物理レジスタが割り当てられたが、変数
J、Xには、メモリ上の領域が割り当てられた、という
試行結果を得たとする。
【0109】図3のステップ26では、条件分岐命令を
含む基本ブロック(B1)が並列化変換の対象となる。
以下、図4を参照して、FORK箇所決定処理部27の
動作を説明する。
【0110】ステップ31で、ループ構造チェックを行
うが、図8の(11)の条件分岐は、ループ戻り枝では
ないため、ステップ32に進む。
【0111】ステップ32では、図8の基本ブロック
(B1)と(B2)、(B1)と(B3)の間でのデー
タ依存の距離を求める。
【0112】まず(B1)−(B2)間のデータ依存を
見てみると、(B1)の(7)におけるメモリストア
と、(B2)の(14)、(18)、(19)における
メモリロードとの間にデータ依存がある。
【0113】これらのメモリアクセスは、実際には、配
列要素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]からのメモリロードを表
している。
【0114】しかし、ここでは、データ依存解析の結
果、このような条件が常に満たされる確証を得られず、
メモリストアとメモリロードとの間に、潜在的なメモリ
データ依存が存在すると判断されたものとして、説明を
続ける。
【0115】(B1)−(B2)間の各データ依存の距
離は、図8の中間プログラム上のステップで数えて、各
々1、5、6である。ここで、(12)にあるラベルL
1は、非実行文であるためステップ数に含めず、(1
3)にある命令を0、(14)にある命令を1、(1
5)にある命令を2、というように数えている。これに
より、(B1)−(B2)間のデータ依存の距離の最小
値は1である。
【0116】同様に、(B1)−(B3)間では、(B
1)の(7)と、(B3)の(29)、(33)との間
にデータ依存があり、その距離は、各々5、9である。
つまり、(B1)−(B3)間のデータ依存の距離の最
小値は5である。
【0117】ステップ33では、上で求めたデータ依存
の距離の最小値である6と10とを比較し、その差が十
分であると判断し、データ依存の距離の最小値の大きい
側である(B3)側の分岐方向を、FORK先に選定す
る。
【0118】もし、図3のステップ25において、変数
Jがメモリではなくレジスタに割り当てられるという見
通しを得ていたすると、(B1)−(B2)、(B1)
−(B3)のデータ依存の距離の最小値は各々5、9と
なり、ステップ33にて(B2)側をFORK先に選定
することになる。
【0119】次に、図5を参照して、命令並べ換え部2
3の動作を具体的に説明する。本実施例では、中間プロ
グラム上で、図7に示す制御並列関連命令が利用できる
ものとする。
【0120】先の説明で例に挙げた中間プログラムを与
えると、命令並べ換え部23は、基本ブロック(B1)
から(B3)へのFORKを行うように、命令並べ換え
処理を行う。
【0121】図5のステップ40では、中間項t1〜t
28と、変数I、K、Rがレジスタに割り当てられる、
という情報を取得する。
【0122】図5のステップ41では、図8における
(11)の分岐命令(then 以下のgoto L
2)を、制御投機FORK命令であるSPFORK命令
に置き換える。SPFORK命令のオペランドは、FO
RK先として決定した(B3)、即ちラベルL2とする
(図9の(58)のSPFORK L2)。
【0123】図5のステップ42では、図8における、
分岐条件を計算する文を構成する一連の命令(8)〜
(10)を、SPFORK命令の直後に移動させ、(1
1)の分岐条件に合わせた条件付きスレッド終了命令で
ある、FTERM命令(条件不成立時に自スレッドを終
了する命令)、更には、THABORT命令と、後続ブ
ロックである(B1)への無条件分岐命令(goto
L1)を挿入する。
【0124】これらの命令列は、以下のように動作する
ように挿入する。
【0125】即ち、SPFORK後に、分岐条件計算を
行って、SPFORKが本当に正しかったか否かを判定
する。
【0126】SPFORKが正しい(投機成功)なら
ば、条件付きスレッド終了命令の一種FTERMによ
り、自スレッド(親スレッド)を終了させると同時に、
生成した子スレッドを、制御投機モードから確定モード
(非制御投機モード)に変更する。
【0127】一方、SPFORKが正しくなかった(投
機失敗)ならば、FTERM命令は何もせず、後続のT
HABORT命令によって、子スレッドを破棄し、無条
件分岐命令(図9の(64)のgoto L1)によっ
て、自スレッドは、FORK先とは逆の分岐先の命令の
実行を続けるようにする。図9は、図8に示す中間プロ
グラムに対して、図5のステップ42までの変換を施し
た中間プログラムを示す図である。
【0128】図5のステップ43では、メモリストア文
を構成する一連の命令である図9の(56)と(57)
を、SPFORK命令(58)の直後に移動し(図10
の(108)、(109))、その直後に、RELEA
SE命令を挿入する(図10の(110))。
【0129】RELEASE命令のオペランドは、移動
させたストア命令(57)のオペランドと同じ中間項を
用いる。またSPFORK命令(58)の直前に、スト
ア命令(57)のオペランドと同じ中間項をオペランド
とするBLOCK命令を挿入する。図10は、ここまで
の変換を施した中間プログラムである。
【0130】ここで、メモリストア文をFORK後に移
動させる際、命令(51)〜(57)全部ではなく、
(56)と(57)のみを移動させた理由は、実効メモ
リアドレスを保持する中間項を、BLOCK命令及びR
ELEASE命令で再利用できるようにするためであ
る。コンパイラ分野において、「共通部分式削除」と呼
ばれる最適化機能を用いれば、ここでBLOCK及びR
ELEASEのたびに実効アドレスを再計算するような
プログラム変換を施しても、共通部分式削除最適化によ
り冗長な実効アドレス計算は削除される。
【0131】図5のステップ44では、各基本ブロック
(B1)、(B2)、(B3)の先頭に、RDCL命令
及びMDCL命令を挿入する。これらの命令は、後段の
レジスタ割り当て部22への指示であり、このうち、・
RDCL命令は、指定した変数ないし中間項へのレジス
タ割り当てを行い、・MDCL命令は、指定した変数な
いし中間項へのメモリ領域の割り当てを行う。
【0132】図11は、ここまでの変換を施した中間プ
ログラムである。(201)〜(203)、(221)
〜(223)、(235)〜(237)がステップ44
で挿入した命令である。
【0133】再度、図2を参照すると、命令並べ換え
後、レジスタ割り当て部22が、レジスタに置くべき変
数や中間項に物理レジスタを割り当てる。
【0134】本実施例では、プログラム変換装置から出
力される目的プログラムが実行される装置のアーキテク
チャ(ターゲットアーキテクチャ)は、r0〜r31の
32本の物理レジスタを持ち、レジスタ変数(原始プロ
グラム中の変数のうち、物理レジスタに割り当てられる
もの)用に、物理レジスタr10〜r19、作業用レジ
スタ(主として演算途中結果を保持するレジスタ)用
に、物理レジスタr20〜r30を用いるようなレジス
タ割り当てを行うものとする。
【0135】レジスタ割り当て部22は、 ・変数I、K、Rに、それぞれr11、r13、r12
を割り当て、 ・中間項t1〜t28には、r20〜r30を順に割り
当てる。
【0136】図12は、図11に示した中間プログラム
に対して、レジスタを割り当てた後の中間プログラムを
示している。なお、図12の中間プログラムには、冗長
な命令が含まれるが、これらの冗長さは、従来から提案
されている最適化処理を行うことで除去できる。従来の
各種最適化方法については、例えば文献5(「コンパイ
ラII 原理・技法・ツール」、A.V.エイホ他著、
原田賢一訳、サイエンス社、1990)の第772頁〜
第790頁に説明されている。
【0137】これらの最適化処理は、レジスタ割り当て
前に施すことが好ましいため、図2において、好ましく
は、FORK箇所決定部21よりも手前、例えば中間プ
ログラム入力部20の内部に実装される。
【0138】[実施の形態2]次に本発明の第2の実施
の形態について、図面を参照して詳細に説明する。本発
明の第2の実施の形態では、プロファイル情報を参照し
て、FORK先及びFORK時のデータ依存対処方法を
選択する点に特徴があるが、その他の点は、前記第1の
実施の形態と、基本的に同一とされる。
【0139】図1を参照すると、本発明の第2の実施の
形態においては、まずプログラム変換装置2を用いて原
始プログラム1から目的プログラム3を生成する。この
とき、プログラム変換装置2は、機械命令アドレスとプ
ログラム変換装置2内で用いる中間プログラムとの対応
をとるための情報を、目的プログラム3の中に埋め込
む。目的プログラム実行装置4は、この目的プログラム
3を実行し、その際に収集した実行情報をプロファイル
情報ファイル5として出力する。
【0140】次に、再度プログラム変換装置2を用い
て、原始プログラム1を並列化し、目的プログラム3を
生成する。このとき、プロファイル情報ファイル5を用
いて、より実行時性能の高い目的プログラム3を生成す
る。
【0141】プログラム変換装置2の構成は、前記第1
の実施の形態とほぼ同様であるが、図2における、FO
RK箇所決定部21と、命令並べ換え部23の動作が、
前記第1の実施の形態とは異なり、プロファイル情報を
参照しながら、より実行時性能の期待できる並列化処理
を行う。
【0142】本発明の第2の実施の形態におけるFOR
K箇所決定部21の動作概要は、図3を参照して説明し
た前記第1の実施の形態と同じである。即ち、FORK
箇所決定部21は、与えられた中間プログラム中の各関
数毎に、図3のステップ26で当該関数内でレジスタ割
り当てを試行した後、ステップ27で、当該関数内に含
まれる各条件分岐命令に対して、FORK箇所決定処理
を行う。
【0143】図13は、各条件分岐命令に対するFOR
K箇所決定処理(図3のステップ26)の第2の実施の
形態を示す流れ図である。
【0144】ステップ50では、当該条件分岐命令が入
力中間プログラム中のループ構造の戻り枝に相当する分
岐命令であるか否かを判定する。この処理は、前記第1
の実施の形態のステップ31(図4参照)と同じもので
ある。
【0145】もし、ループ構造の戻り枝なら、ステップ
56で、その戻り枝方向をFORK先として仮決定す
る。これはFORKするとすれば、こちらの方向を、F
ORK先とするのがよい、という意味であり、実際にF
ORKすることにするか否かは後段で決定する。
【0146】ステップ51では、入力したプロファイル
情報に基づいて、当該条件分岐命令のtaken(分岐
成立)側/fallthrough側が選択される確率
を計算する。
【0147】ステップ52では、ステップ51で計算し
た、2つの確率間に一定以上の違いがあるかどうかを判
定する。
【0148】分岐確率の違いが、その判断基準を越えて
いれば、ステップ57にて、確率の高い側を、FORK
先として仮決定する。
【0149】ステップ53では、条件分岐の2つの分岐
先各々に対して、データ依存の距離の最小値を計算す
る。この処理は、前記第1の実施の形態におけるステッ
プ32(図4参照)と同じものである。
【0150】ステップ54では、ステップ53で、条件
分岐の両側に関して求めた2つのデータ依存の距離の最
小値を比較し、両者に一定以上の差があるか否かを判定
する。
【0151】一定以上の差があるか、又はデータ依存が
ない場合、ステップ55にて、データ依存の距離の最小
値の大きい側の分岐方向をFORK先として決定する。
これは、前記第1の実施の形態のステップ33(図4参
照)と同様の処理である。
【0152】ステップ58及びステップ59では、ステ
ップ56ないしステップ57で仮決定したFORK先に
対して、ステップ53と同様に、データ依存の距離の最
小値を計算し、仮決定したFORK先側のデータ依存の
距離の最小値が一定以上あるか否かを判定する。
【0153】仮決定したFORK先側のデータ依存の距
離の最小値が一定以上あるか、メモリを介したデータ依
存がなければ、ステップ56ないしステップ57で仮決
定したFORK先を、正式なFORK先として確定する
(ステップ60)。
【0154】ステップ54ないしステップ59で、デー
タ依存の距離の最小値が一定水準に満たないと判断され
た場合には、ステップ67にて、当該基本ブロックを、
FORK箇所から除外する。これは例えば、当該条件分
岐命令に、FORK対象外マークを付すなどして、後段
の処理で並列化対象から外れるようにする。
【0155】ステップ50からステップ60で、当該条
件分岐命令がFORK箇所として決定され、また分岐命
令のいずれかの分岐先がFORK先も決定されたあと、
ステップ61にて、データ依存発生頻度を計算する。即
ち、プロファイル情報に基づき、FORK元の基本ブロ
ック(現在処理対象としている分岐命令を末尾に含む基
本ブロック)中で定義された値がFORK先として決定
した基本ブロックにて参照される回数の、このパス(現
在の基本ブロックからFORK先と決定した基本ブロッ
クへの制御の流れ)を通過した回数に対する比率を計算
する。
【0156】このデータ依存発生頻度計算においては、
図4のステップ32と同様に、最終的にレジスタに割り
当てられる中間項及び変数によるデータ依存は除外し、
メモリ上に配置された中間項及び変数のみを計算対象と
する。
【0157】ステップ62にて、そのデータ依存発生頻
度が一定水準より高いか否かを判断し、もし高ければス
テップ65へ、低ければステップ63へ進む。
【0158】ステップ63では、中間プログラム中で、
FORK元基本ブロックから、FORK先基本ブロック
へのデータ依存を引き起こし得るメモリ上の中間項/変
数の個数を数え挙げ、それが一定水準より多いか否かを
判定する。この数え挙げは、プロファイル情報によら
ず、中間プログラム中の命令列を検査して静的に行う。
その結果、データ依存箇所数が一定水準より多ければ、
DSP方式によるFORK(ステップ64)、そうでな
ければBLOCK方式によるFORK(ステップ66)
を用いることとし、その情報を、中間プログラム中のF
ORK命令に付与する。
【0159】ステップ65では、ステップ63と同様に
データ依存しているメモリ上の変数の個数を数え挙げ
る。その数が、一定水準より少なければ、BLOCK方
式によるFORK(ステップ66)を用いるが、一定水
準より多ければ、当該基本ブロックはFORK候補から
外す(ステップ67)。
【0160】図14は、本発明の第2の実施の形態にお
ける、命令並べ換え部23の動作を示す図である。命令
並べ換え部23は、FORK箇所決定部21が決定した
FORK箇所及びFORK時データ保証方法に基づき、
ステップ70からステップ76の一連の処理を行う。な
お、ステップ70からステップ76の各処理はすべて中
間プログラムに対して行う。これらのステップの説明に
現れる命令は、すべて中間プログラム上の対応する命令
を指す。
【0161】ステップ70、ステップ71、ステップ7
2は、前記第1の実施の形態で参照した図5のステップ
40、ステップ41、ステップ42とそれぞれ同様の処
理である。
【0162】ステップ73では、前段のFORK箇所決
定部21が決定した当該FORK箇所のFORK時デー
タ保証方式がBLOCK方式かDSP方式かをチェック
し、前者ならステップ74、後者ならステップ75に進
む。
【0163】ステップ74は、前記第1の実施の形態で
参照した図5のステップ43と同様の処理である。即
ち、FORK前のメモリストア文をFORK後に移動す
ると共に、必要なブロック設定及びブロック解除命令を
挿入する。
【0164】移動の際には、データ依存関係を検査し、
命令実行順序が入れ替わっても演算結果が不変となるも
ののみ移動させる、という点も、図5のステップ43の
処理と同様である。
【0165】ステップ75もまた、メモリに対応付けら
れた中間項への代入文を、FORK命令後に移動させ
る、という点で、図5のステップ43と類似する処理で
あるが、図5のステップ43では、アクセス対象のメモ
リアドレスをオペランドとするブロック設定命令及びブ
ロック解除命令を挿入したのに対し、ステップ75で
は、データ依存投機モードでFORKを行うように、ス
テップ71で作成したFORK命令を修正する点が異な
る。
【0166】ステップ76は、前記第1の実施の形態で
参照した、図5のステップ44と同様の処理である。
【0167】このように、本発明の第2の実施の形態に
おいては、プロファイル情報を用いて、FORKするか
否か、及び、FORK時のデータ依存保証方法を決定す
る。このため、条件分岐において制御の流れが片方に偏
っている場合には、その方向をFORKすることで、制
御投機FORKの成功確率が高まる。
【0168】また、実際に発生したデータ依存の頻度
や、依存箇所の数を考慮した並列化を行うことにより、
並列化プログラムの実行時のオーバーヘッドを低減さ
せ、より並列化による性能を引き出しやすくしている。
【0169】[実施例2]次に、具体的な実施例を用い
て、本発明の第2の実施の形態の動作を説明する。図1
5は、本発明の並列化装置によって並列化される中間プ
ログラムの一例を示す図である。図15における記号等
の意味は、図8に示した第1の実施例の中で用いられて
いるものと同じである。また、中間プログラム上で用い
る制御並列関連命令も、図7に示した前記第1の実施例
のものと同じである。
【0170】図1を参照すると、本発明の第2の実施例
では、プログラム変換装置2は原始プログラム1を並列
化せずに目的プログラム3に変換する。その際、プログ
ラム変換装置2は、各基本ブロックの先頭に当該基本ブ
ロックの識別番号に基づく名前をもつラベルを挿入し、
そのラベルに関するシンボル情報も目的プログラム3内
に含めて出力する。目的プログラムにシンボル情報を埋
め込むことは、コンパイラ分野で広く行われており、目
的プログラムからシンボル名及びそのシンボルに対応付
けられたアドレスを引き出すことができれば、任意の手
法を用いることができる。
【0171】目的プログラム実行装置4は、目的プログ
ラム3を読み込み、埋め込まれたシンボル情報を元に目
的プログラム内の基本ブロックの集合を認識する。これ
により、プログラム変換装置2の内部の中間プログラム
を構成していた基本ブロック集合と区切り方の等価な基
本ブロック集合を、目的プログラム実行装置4も認識す
ることができる。
【0172】目的プログラム実行装置4は、読み込んだ
目的プログラム3を構成する機械命令をソフトウェアで
解釈して実行しながら、目的プログラムの振るまい、具
体的には、(1)各条件分岐命令の条件が成立した回数
と成立しなかった回数、及び、(2)制御フロー上隣接
する基本ブロック間でのメモリデータ依存の回数と当該
機械命令アドレス、の情報を収集する。
【0173】目的プログラム3の実行が完了した後、目
的プログラム実行装置4は収集した前記情報の中の機械
命令アドレスを基本ブロックの識別番号に変換し、
(1)各基本ブロックから制御フロー上でそれに続く各
基本ブロックへ制御が流れた回数、及び、(2)制御フ
ロー上隣接する基本ブロック間でメモリデータ依存を引
き起こした回数、の内容を含むプロファイル情報ファイ
ル5を出力する。
【0174】図16は、図15に示した中間プログラム
に対応する目的プログラムを、目的プログラム実行装置
4に与えたとき、目的プログラム実行装置4が出力した
プロファイル情報ファイル5に含まれるプロファイル情
報の一部を示した図である。
【0175】図16(A)は、基本ブロック間の分岐回
数であり、例えば基本ブロック(B11)から、基本ブ
ロック(B12)及び(B13)への分岐は、各々20
回、180回であったことを示している。
【0176】図16(B)は、基本ブロック間メモリデ
ータ依存回数を表し、例えば基本ブロック(B15)で
ストアした値を基本ブロック(B16)でロードした回
数がのべ120回であったことを示している。
【0177】次に、プロファイル情報ファイル5をプロ
グラム変換装置2に与えて、原始プログラム1を並列化
する動作について説明する。
【0178】図2を参照すると、並列化装置11は、一
度目に原始プログラムを変換したときと全く同じ中間プ
ログラム6が与えられる。
【0179】中間プログラム入力部20は、中間プログ
ラム6を読み込み、フロー解析を行った上で、FORK
箇所決定部21に渡す。
【0180】他方、プロファイル情報入力部25は、目
的プログラム実行装置4が生成したプロファイル情報フ
ァイル5を読み込む。図15の中間プログラム例を用い
た際にプロファイル情報入力部25が読み込んだプロフ
ァイル情報の中身は、図16に示したものである。
【0181】図2を参照すると、FORK箇所決定部2
1が、図15に示された中間プログラムを受け取り、F
ORK箇所の決定を行う。
【0182】図3のステップ25にて、レジスタ割り当
てが試行され、t1〜t43の全中間項、及び、変数
J、Pには、物理レジスタが割り当てられ、変数K、
X、Y、Zには、メモリ上の領域が割り当てられたとす
る。
【0183】図3のステップ26では、条件分岐を含む
基本ブロック(B11)、(B13)、(B15)が並
列化変換の対象となる。
【0184】以下、図13を参照しながら、基本ブロッ
ク(B11)、(B13)、(B15)に対するFOR
K箇所決定処理部27の動作を説明する。
【0185】基本ブロック(B11)は、ステップ50
でループ戻り枝ではないと判定される。
【0186】ステップ51にて、図16(A)に示した
プロファイル情報から、分岐確率を計算し、(B12)
への分岐が10%、(B13)への分岐が90%と求め
られる。
【0187】ステップ52では、比率で2倍以上の偏り
があるかどうかを判断基準にとり、(B11)からの分
岐確率の偏りは十分であると判定し、ステップ57によ
り(B13)がFORK先として仮決定される。
【0188】ステップ58では、メモリデータ依存を調
べるが、(B11)にはメモリストアがないため、ステ
ップ60にて(B13)がFORK先に決定される。
【0189】次にステップ61で、データ依存発生頻度
を求めるが、(B11)に関するメモリデータ依存がな
いため、結局、ステップ66にて、BLOCK方式が候
補となる。
【0190】基本ブロック(B13)は、分岐確率が
(B14)へ15%、(B15)へ85%である以外
は、上の(B11)と同様のステップを辿り、結局、ス
テップ60にて、(B15)がFORK先と決定され、
ステップ66にて、BLOCK方式が候補となる。
【0191】基本ブロック(B15)の場合、分岐確率
が(B16)へ15%、(B17)へ85%であり、ス
テップ52では、分岐確率の偏りが十分あると判定さ
れ、ステップ57で(B17)がFORK先に仮決定さ
れる。
【0192】(B15)から(B17)へのデータ依存
の距離の最小値は6であり、ステップ59における判定
基準をデータ依存の距離4以上とすると、ステップ60
にて(B17)がFORK先として決定する。
【0193】ステップ61にて、図16(A)及び図1
6(B)に示したプロファイル情報を基にして、(B1
5)から(B17)へのデータ依存発生頻度を求める
と、4/170で約2.4%となる。
【0194】ステップ62での発生頻度の判定基準を3
0%とすると、この発生頻度は、低いと判断される。
【0195】ステップ63では、データ依存を起こしう
るメモリアクセス箇所を中間プログラム中から数え挙げ
る。
【0196】(B15)には、memが、左辺中に2箇
所あるほか、メモリ上に割り当てられる変数Kが、左辺
に1箇所現れる。
【0197】これらのメモリストアは、すべて(B1
7)でのメモリロードとアドレスが重なる可能性があ
り、計3箇所のメモリ依存箇所があることになる。
【0198】ステップ63での依存メモリ箇所数の判定
基準を3以上とすると、(B15)の場合は依存箇所が
多いと判定され、ステップ64にて、FORK方式とし
てDSP方式が候補となる。
【0199】ここで、もし、(B15)から(B16)
及び(B17)への分岐確率が各々40%、60%であ
ったと仮定すると、ステップ52では、分岐確率の偏り
が小さいと判定される。
【0200】ステップ53で、データ依存の距離を求め
ると、(B15)から(B16)へのデータ依存の距離
の最小値は5、(B15)から(B17)へのデータ依
存の距離の最小値も5となり、ステップ54では、依存
距離の差が小さいと判定される。
【0201】そのため、ステップ67にて、(B15)
は、FORK箇所の候補から除外されることになる。
【0202】次に、図14を参照して、第2の実施例に
おける命令並べ換え部23の動作を具体的に説明する。
【0203】命令並べ換え部23は、基本ブロック(B
11)、(B13)、(B15)の各条件分岐に対し、
図14に示された一連の処理を行う。
【0204】基本ブロック(B11)については、ステ
ップ71で、(B13)へのSPFORK命令が作ら
れ、ステップ72で、条件式計算のための命令群がSP
FORK後に移される。
【0205】(B11)からのFORKでのデータ依存
保証は、BLOCK方式を候補としているが、ブロック
すべきメモリアクセスが存在しないため、ステップ74
でBLOCK命令やRELEASE命令を挿入すること
はない。
【0206】ステップ76では、レジスタに乗る予定の
中間項t1、t2、t3をオペランドとしたRDCL命
令を挿入する。
【0207】基本ブロック(B13)も、BLOCK方
式のデータ依存保証を行うため、前述の基本ブロック
(B11)と同様の流れで処理される。
【0208】基本ブロック(B15)の場合、データ依
存保証をDSP方式で行うため、図14のステップ75
で、メモリストア命令群の移動が行われ、データ依存投
機モードを指示する命令が挿入される。
【0209】具体的には、mem(t12)、mem
(t17)、及び、変数Kへのストアを構成する文が、
SPFORK命令後に移され、その直後に、データ依存
投機モードの終了を指示するDSPOUTが挿入され
る。
【0210】またSPFORK命令直前には、データ依
存投機モードで子スレッドを生成することを指示するD
SPIN命令が挿入される。
【0211】図17は、本発明の第2の実施例におけ
る、命令並べ換え部23の処理を終えた後の中間プログ
ラムを示す図である。
【0212】なお、これまで説明した各実施の形態は、
他のFORK箇所/FORK先決定方法と組み合わせて
実施することも可能である。例えば文献4(「制御並列
アーキテクチャ向け自動並列化コンパイル手法」(酒井
他、情報処理学会論文誌、Vol.40、No.5、M
ay1999))の第2049頁〜第2050頁では、
FORK命令が元の条件分岐命令よりも何命令上流に移
動できるかというFORKブースト値をFORK箇所選
定に利用する方法が開示されている。この方法を導入す
るには、前記第1の実施の形態及び前記第2の実施の形
態における、命令並べ換え部23の中のステップ44な
いしステップ76の直前に、FORKブースト値によっ
てFORKを行うか否かの判定処理を組み込めばよい。
【0213】前記第1及び第2の実施の形態における、
プログラム変換装置(コンパイラ)2の並列化装置11
におけるFORK箇所決定部21、レジスタ割り当て部
22、命令並べ換え部23、中間プログラム出力部2
4、プロファイル情報入力部25は、コンピュータ上で
実行されるプログラムにより、その機能・処理が実現さ
れる。この場合、該プログラムを記録した記録媒体(C
D−ROM、DVD(digital versatile disk)、FD
(フロッピー(登録商標))、HDD(ハードディス
ク)、MT(磁気テープ)、半導体メモリ)から、該プ
ログラム(実行形式)をコンピュータの主記憶にロード
して実行するか、あるいは、サーバ等から通信媒体を介
して、コンピュータのHDD等にダウンロードしてイン
ストールし、該プログラムを実行することで、本発明の
プログラム変換装置を実施することができる。
【0214】
【発明の効果】以上説明したように、本発明によれば下
記記載の効果を奏する。
【0215】本発明の第1の効果は、中間プログラムレ
ベルでFORK命令を用いた並列化を的確に行える、と
いうことである。
【0216】その理由は、本発明においては、レジスタ
割り当て部は並列化よりも後段に位置するにも関わら
ず、並列化処理にてレジスタ割り当てを試行し、各中間
項がレジスタに乗るのかメモリ領域に格納されるのかの
予測ができるからである。
【0217】本発明の第2の効果は、FORK命令を用
いて並列実行した場合の性能が向上する、ということで
ある。
【0218】その理由は2つある。一つは、本発明にお
いては、FORK箇所決定部が静的に親子スレッド間で
のデータ依存の状況を調べ、データ依存による子スレッ
ド実行の一時停止の可能性が低くなるようにFORK先
を選定するからである。もう一つは、FORK箇所決定
部が、プロファイル情報に基づいて、動的なデータ依存
発生状況を調べ、データ依存による子スレッド実行の一
時停止や再実行の可能性が低くなるようにFORK先を
選定するからである。
【図面の簡単な説明】
【図1】本発明の実施の形態の全体構成を示す図であ
る。
【図2】本発明の実施の形態におけるプログラム変換装
置の内部構成を示す図である。
【図3】本発明の第1の実施の形態におけるFORK箇
所決定部の動作を示す図である。
【図4】本発明の第1の実施の形態におけるFORK箇
所決定処理部の動作を示す図である。
【図5】本発明の第1の実施の形態における命令並べ換
え部の動作を示す図である。
【図6】本発明の第1の実施の形態において命令が並べ
換えられる様子を示す図である。
【図7】本発明の第1及び第2の実施例における中間プ
ログラム上の制御並列関連命令一覧を示す図である。
【図8】本発明の第1の実施例における並列化前の中間
プログラムを示す図である。
【図9】本発明の第1の実施例において命令並べ換え途
中の中間プログラムを示す図である。
【図10】本発明の第1の実施例において命令並べ換え
途中の中間プログラムを示す図である。
【図11】本発明の第1の実施例において命令並べ換え
を終えた中間プログラムを示す図である。
【図12】本発明の第1の実施例においてレジスタ割り
当てを終えた中間プログラムを示す図である。
【図13】本発明の第2の実施の形態におけるFORK
箇所決定処理部の動作を示す図である。
【図14】本発明の第2の実施の形態における命令並べ
換え部の動作を示す図である。
【図15】本発明の第2の実施例における並列化前の中
間プログラムを示す図である。
【図16】本発明の第2の実施例におけるプロファイル
情報を示す図である。
【図17】本発明の第2の実施例において命令並べ換え
を終えた中間プログラムを示す図である。
【図18】周知のMUSCATアーキテクチャのFOR
K命令を説明するための図である。
【図19】周知のMUSCATアーキテクチャのBLO
CK方式説明のための図である。
【図20】周知のMUSCATアーキテクチャの制御投
機モード説明のための図である。
【図21】周知のMUSCATアーキテクチャのデータ
依存投機モード説明のための図である。
【符号の説明】
1 原始プログラム 2 プログラム変換装置 3 目的プログラム 4 目的プログラム実行装置 5 プロファイル情報ファイル 6 中間プログラム 7 中間プログラム 10 構文解析装置 11 並列化装置 12 コード生成装置 20 中間プログラム入力部 21 FORK箇所決定部 22 レジスタ割り当て部 23 命令並べ換え部 24 中間プログラム出力部 25 プロファイル情報入力部

Claims (33)

    【特許請求の範囲】
  1. 【請求項1】複数のプログラムカウンタと、複数のスレ
    ッド実行装置と、を備え、前記複数のスレッド実行装置
    は、前記複数のプログラムカウンタに従って、複数のス
    レッドの命令を、同時に、フェッチ、解釈、実行し、 スレッド生成時以降に、レジスタセットに及ぼした変更
    を、後に取り消し可能な制御投機的モードでスレッドを
    実行すること、及び、 自スレッドがメモリ領域から値をロードした後に、自ス
    レッドを生成した親スレッドが同一メモリ領域に値をス
    トアした場合に、自スレッドの少なくとも当該ロード以
    降の処理結果を破棄し、それらの処理を再実行するデー
    タ依存投機的モードでスレッドを実行すること、が可能
    とされ、 命令セットとして、 前記スレッド実行装置で実行中のスレッドが制御投機的
    モードの新たなスレッドを生成すること、 指定された条件が成立していれば自スレッドを終了させ
    ると共に、自スレッドが生成した制御投機的モードのス
    レッドの制御投機的モードを解除すること、 生成した制御投機的モードのスレッドを破棄すること、 自スレッドが生成するスレッドが指定されたアドレスの
    メモリ領域からのロードを行う際に、その動作を一時停
    止させることをあらかじめ指示すること、 指定されたメモリアドレスに対する前記ロード一時停止
    指示を解除すること、前記スレッド実行装置で実行中の
    スレッドがデータ依存投機的モードの新たなスレッドを
    生成すること、及び、 自スレッドが生成したデータ依存投機的モードのスレッ
    ドのデータ依存投機的モードを解除すること、 が、単一又は高々数個の機械語命令の組合せで実行でき
    る命令セットを有するマルチスレッドプロセッサに対し
    て、与えられた原始プログラムを前記マルチスレッドプ
    ロセッサ向けに変換するプログラム変換装置であって、 並列化に先立ってレジスタ割り当てを試み、中間プログ
    ラム上の各変数、及び中間項のレジスタ割り当て状況を
    予測するレジスタ割り当て試行部と、 前記レジスタ割り当て試行部でのレジスタ割り当て試行
    結果に基づいて、前記中間プログラムにおける条件分岐
    部分をスレッド生成命令を用いた並列コードに変換する
    か否か決定し、及び、並列コードでの並列実行方式の決
    定を行うフォーク(FORK)箇所決定部と、 前記フォーク(FORK)箇所決定部での決定結果に基
    づいて、前記中間プログラム中の条件分岐部分を、スレ
    ッド生成命令を用いた並列コードに変換し、前記レジス
    タ割り当て試行結果を参照して、スレッド間のメモリを
    介したデータ依存関係を保証する命令を、前記スレッド
    生成命令の前後に挿入すると共に、スレッド生成が早い
    段階で行われるように、前記スレッド生成命令の前後の
    命令を並べ換える命令並べ換え部と、 並列化され並べ換えられた命令列に対して、物理レジス
    タが割り当てられるか否かに関して、前記レジスタ割り
    当ての試行時と同じ割り当て結果となるように確定的な
    レジスタ割り当てを行うレジスタ割り当て部と、 を備える、ことを特徴とするプログラム変換装置。
  2. 【請求項2】前記フォーク(FORK)箇所決定部が、
    現在処理対象としている中間プログラム中の基本ブロッ
    クから、該基本ブロック末尾にある条件分岐命令の分岐
    先基本ブロック各々へのメモリを介したデータ依存関係
    を調査し、 分岐先の各々について、分岐先基本ブロック中にあって
    データ依存を引き起こしているメモリ参照命令のうち、
    最も先頭にある命令の、該分岐先基本ブロック先頭から
    の命令ステップ数を数え、 前記命令ステップ数が大きな側の分岐先基本ブロック
    を、並列実行させる新たなスレッドとして選択する、こ
    とを特徴とする請求項1に記載のプログラム変換装置。
  3. 【請求項3】前記フォーク(FORK)箇所決定部が、
    分岐先基本ブロックにてメモリを介したデータ依存命令
    の位置を求める際、前記命令ステップ数に代えて、各命
    令の推定実行サイクル数を積算した値を用いる、ことを
    特徴とする請求項2に記載のプログラム変換装置。
  4. 【請求項4】請求項1、請求項2または請求項3に記載
    のプログラム変換装置において、 初回に原始プログラムから目的プログラムに変換する際
    に、前記プログラム変換装置内の中間プログラムでの基
    本ブロックと、出力する目的プログラムでの機械命令ア
    ドレスとの対応をとるためのアドレス対応情報を、前記
    目的プログラムと併せて出力し、 目的プログラム実行装置が、前記目的プログラムと前記
    アドレス対応情報を読み込んで、前記目的プログラムを
    実行すると共に、前記目的プログラムの実行時の基本ブ
    ロック間の分岐プロファイル情報と、基本ブロック間で
    メモリを介して発生したデータ依存情報とを含むプロフ
    ァイル情報を出力し、 次に、前記プログラム変換装置が、原始プログラムを並
    列化して目的プログラムに変換する際に、前記フォーク
    (FORK)箇所決定部が、前記プロファイル情報を参
    照して、条件分岐において、制御の流れる確率が高い分
    岐先基本ブロック及び条件分岐において、データ依存が
    発生する確率が低い分岐先基本ブロックを並列実行する
    新スレッドとして優先的に選択する、ことを特徴とす
    る、プログラム変換装置。
  5. 【請求項5】前記フォーク(FORK)箇所決定部が、
    並列実行する新スレッドの実行開始点として選択した条
    件分岐先基本ブロックに対し、中間プログラムでのメモ
    リを介したデータ依存を解析した結果と、前記プロファ
    イル情報から得たデータ依存発生確率とに基づき、デー
    タ依存を引き起こす異なるメモリアドレスの箇所の数が
    定められた数より少ない場合には、新スレッドが該メモ
    リアドレスからロードする動作を一時停止させるように
    命令を生成し、 一方、データ依存を引き起こす異なるメモリアドレスの
    箇所の数が定められた数より多い場合には、データ依存
    発生確率が定められた確率より低いか否かを調べ、確率
    が低い場合には、データ依存投機的モードで新スレッド
    を生成するように命令を生成し、 確率が高い場合には、当該箇所での並列化変換を取りや
    めるように制御する、ことを特徴とする請求項4に記載
    のプログラム変換装置。
  6. 【請求項6】前記フォーク(FORK)箇所決定部が、
    現在処理対象としている中間プログラム中の基本ブロッ
    クから、該基本ブロック末尾にある条件分岐命令の分岐
    先基本ブロック各々へのメモリを介したデータ依存関係
    を調査し、該調査したデータ依存関係と、前記プロファ
    イル情報から得た条件分岐確率とを総合した結果、当該
    条件分岐での分岐先基本ブロック各々に関して、分岐確
    率の間に定められた以上の差異がなく、且つ、メモリを
    介したデータ依存発生時期の早遅にも定められた以上の
    差異がない場合に、当該条件分岐部分を並列化しないよ
    うに決定する、ことを特徴とする請求項4または請求項
    5に記載のプログラム変換装置。
  7. 【請求項7】原始(ソース)プログラムを構文解析して
    中間プログラムを生成する構文解析部と、 前記中間プログラムに対して並列化を含む最適化処理を
    行う並列化部と、 前記並列化装置で最適化済みの中間プログラムからター
    ゲットプロセッサ装置向きの命令コードからなる目的プ
    ログラム(オブジェクトコード)を生成出力するコード
    生成部と、 を備えたプログラム変換装置において、 前記並列化部が、 前記中間プログラムを読み込んで制御フローやデータフ
    ローを解析する中間プログラム入力部と、 並列化に先立ってレジスタ割り当てを試み、中間プログ
    ラム上の各変数、及び中間項のレジスタ割り当て状況を
    予測するとともに、レジスタの割り当てを実行するレジ
    スタ割り当て部と、 前記レジスタ割り当て試行結果に基づいて、前記中間プ
    ログラムにおける条件分岐部分をスレッド生成命令を用
    いた並列コードに変換する箇所を決定するフォーク(F
    ORK)箇所決定部と、 前記FORK箇所決定部で決定された並列化箇所とデー
    タフローなどの情報から、前記並列化箇所前後の命令の
    並べ換えを行う命令並べ換え部と、 前記並列化を含む変換を終えた命令列を再度中間プログ
    ラム形式で出力する中間プログラム出力部と、 を備えた、ことを特徴とするプログラム変換装置。
  8. 【請求項8】前記並列化部が、前記ターゲットプロセッ
    サ装置で前記目的プログラムを実行して出力されるプロ
    ファイル情報を入力して内部形式に変換するプロファイ
    ル情報入力部を備え、 前記フォーク(FORK)箇所決定部が、前記レジスタ
    割り当て試行結果と、前記プロファイル情報に基づき、
    前記中間プログラムにおける条件分岐部分をスレッド生
    成命令を用いた並列コードに変換する箇所を決定すると
    ともに、並列コードによる並列実行方式を決定する、こ
    とを特徴とする請求項7記載のプログラム変換装置。
  9. 【請求項9】前記命令並べ換え部が、前記フォーク(F
    ORK)箇所決定部での決定結果に基づいて、前記中間
    プログラム中の条件分岐部分を、スレッド生成命令を用
    いた並列コードに変換し、前記レジスタ割り当て試行結
    果を参照して、スレッド間のメモリを介したデータ依存
    関係を保証する命令を、前記スレッド生成命令の前後に
    挿入すると共に、スレッド生成が早い段階で行われるよ
    うに、前記スレッド生成命令の前後の命令を並べ換え
    る、ことを特徴とする請求項7記載のプログラム変換装
    置。
  10. 【請求項10】前記レジスタ割り当て部が、並列化され
    並べ換えられた命令列に対して、物理レジスタが割り当
    てられるか否かに関して前記レジスタ割り当ての試行時
    と同じ割り当て結果となるように確定的なレジスタ割り
    当てを行う、ことを特徴とする請求項7記載のプログラ
    ム変換装置。
  11. 【請求項11】原始プログラムを構文解析部で構文解析
    して得られる中間プログラムに対して、ターゲットプロ
    セッサ装置向けに、並列化を含む最適化処理を行うプロ
    グラム変換装置において、 前記中間プログラム上で、前記ターゲットプロセッサ装
    置でのレジスタの割り当てを試行し、レジスタ割り当て
    情報を実際の割り当てに先行して取得するレジスタ割り
    当て試行手段と、 前記中間プログラムに対して、前記ターゲットプロセッ
    サ装置でのメモリを介して発生するデータ依存の距離の
    計算を行う手段と、 前記中間プログラム上で、前記メモリを介するデータ依
    存の距離を考慮して、フォーク(FORK)先を決定
    し、条件分岐をスレッド生成命令に置き換える手段と、 前記レジスタ割り当て試行結果を参照して、前記中間プ
    ログラム上で、前記スレッド生成命令前後の命令の並べ
    換えを行う手段と、 を備えたことを特徴とするプログラム変換装置。
  12. 【請求項12】前記条件分岐をスレッド生成命令に置き
    換える手段が、 前記条件分岐の2つの分岐先の各々に対して、各中間項
    及び変数のデータ依存の距離の最小値を計算する手段
    と、 前記条件分岐の2つの分岐に関して、それぞれ求めた2
    つのデータ依存の距離の最小値を比較し、両者に所定値
    以上の差がある場合、前記データ依存の距離の最小値の
    大きい側の分岐方向をフォーク(FORK)先とし、該
    条件分岐箇所をフォーク(FORK)箇所に選定し、一
    方、前記データ依存の距離の最小値に前記所定値以上の
    差がない場合には、元の中間プログラム内で分岐先であ
    った側をフォーク(FORK)先とし、該条件分岐箇所
    をフォーク(FORK)箇所候補に選定する手段と、を
    備えた、ことを特徴とする請求項11記載のプログラム
    変換装置。
  13. 【請求項13】請求項11記載のプログラム変換装置に
    おいて、 前記プログラム変換装置から出力される目的プログラム
    を実行するプロセッサ装置から出力されるプロファイル
    情報を入力し、前記プロファイル情報から、条件分岐確
    率及びデータ依存発生頻度を計算する手段と、 前記データ依存の距離と、前記条件分岐確率及び前記デ
    ータ依存発生頻度と、データ依存を引き起こす互いに異
    なるメモリアドレスの箇所の数から、フォーク(FOR
    K)先及びデータ依存保証方式を決定し、条件分岐をス
    レッド生成命令に置き換える手段と、を備えたことを特
    徴とするプログラム変換装置。
  14. 【請求項14】前記ターゲットプロセッサ装置が、複数
    のプログラムカウンタと、複数のスレッド実行装置と、
    を備え、前記複数のスレッド実行装置は、前記複数のプ
    ログラムカウンタに従って、複数のスレッドの命令を、
    同時に、フェッチ、解釈、実行し、 スレッド生成時以降に、レジスタセットに及ぼした変更
    を、後に取り消し可能な制御投機的モードでスレッドを
    実行すること、及び、 自スレッドがメモリ領域から値をロードした後に、自ス
    レッドを生成した親スレッドが同一メモリ領域に値をス
    トアした場合に、自スレッドの少なくとも当該ロード以
    降の処理結果を破棄し、それらの処理を再実行するデー
    タ依存投機的モードでスレッドを実行すること、が可能
    とされ、 命令セットとして、 前記スレッド実行装置で実行中のスレッドが制御投機的
    モードの新たなスレッドを生成すること、 指定された条件が成立していれば自スレッドを終了させ
    ると共に、自スレッドが生成した制御投機的モードのス
    レッドの制御投機的モードを解除すること、 生成した制御投機的モードのスレッドを破棄すること、 自スレッドが生成するスレッドが指定されたアドレスの
    メモリ領域からのロードを行う際に、その動作を一時停
    止させることをあらかじめ指示すること、 指定されたメモリアドレスに対する前記ロード一時停止
    指示を解除すること、 前記スレッド実行装置で実行中のスレッドがデータ依存
    投機的モードの新たなスレッドを生成すること、及び、 自スレッドが生成したデータ依存投機的モードのスレッ
    ドのデータ依存投機的モードを解除すること、 が、単一又は高々数個の機械語命令の組合せで実行でき
    る命令セットを有するマルチスレッドプロセッサよりな
    る、ことを特徴とする請求項7乃至13のいずれか一に
    記載のプログラム変換装置。
  15. 【請求項15】原始プログラムをコンパイルしてマルチ
    スレッド型のターゲットプロセッサ装置向けの目的プロ
    グラムを出力するプログラム変換装置において、構文解
    析の結果出力される中間プログラムに対して並列化を含
    む最適化処理を行う方法であって、 (a)並列化に先立ってレジスタ割り当てを試み、中間
    プログラム上の各変数、及び中間項のレジスタ割り当て
    状況を予測するレジスタ割り当て試行ステップと、 (b)前記レジスタ割り当て試行結果に基づいて、前記
    中間プログラムにおける条件分岐部分をスレッド生成命
    令を用いた並列コードに変換するか否かの決定を行う
    か、もしくは、並列コードに変換するか否かの決定と並
    列コードに変換する場合その並列実行方式の決定を行う
    フォーク(FORK)箇所決定ステップと、 (c)前記フォーク(FORK)箇所決定ステップでの
    決定結果に基づいて、前記中間プログラム中の条件分岐
    部分を、スレッド生成命令を用いた並列コードに変換
    し、前記レジスタ割り当て試行結果を参照して、スレッ
    ド間のメモリを介したデータ依存関係を保証する命令
    を、前記スレッド生成命令の前後に挿入すると共に、ス
    レッド生成が早い段階で行われるように、前記スレッド
    生成命令の前後の命令を並べ換える命令並べ換えステッ
    プと、 (d)並列化され並べ換えられた命令列に対して前記レ
    ジスタ割り当ての試行時と同じ割り当て結果となるよう
    に確定的なレジスタ割り当てを行うレジスタ割り当てス
    テップと、 を含む、ことを特徴とするプログラム並列化方法。
  16. 【請求項16】前記フォーク(FORK)箇所決定ステ
    ップが、前記条件分岐の2つの分岐先の各々に対して、
    各中間項及び変数のデータ依存の距離の最小値を計算
    し、前記条件分岐の2つの分岐に関して、それぞれ求め
    た2つのデータ依存の距離の最小値を比較し、両者に所
    定値以上の差がある場合、前記データ依存の距離の最小
    値の大きい側の分岐方向をフォーク(FORK)先と
    し、該条件分岐箇所をフォーク(FORK)箇所に選定
    し、一方、前記データ依存の距離の最小値に前記所定値
    以上の差がない場合には、元の中間プログラム内で分岐
    先であった側をフォーク(FORK)先とし、該条件分
    岐箇所をフォーク(FORK)箇所候補に選定する、こ
    とを特徴とする請求項15記載のプログラム並列化方
    法。
  17. 【請求項17】前記フォーク(FORK)箇所決定ステ
    ップが、現在処理対象としている中間プログラム中の、
    分岐や合流のない一続きのブロック(「基本ブロック」
    という)から、該基本ブロック末尾にある条件分岐命令
    の分岐先基本ブロック各々へのメモリを介したデータ依
    存関係を調査し、 分岐先の各々について、分岐先基本ブロック中にあって
    データ依存を引き起こしているメモリ参照命令のうち、
    最も先頭にある命令の、該分岐先基本ブロック先頭から
    の命令ステップ数を数え、 前記命令ステップ数が大きな側の分岐先基本ブロック
    を、並列実行させる新たなスレッドとして選択する、こ
    とを特徴とする請求項15に記載のプログラム並列化方
    法。
  18. 【請求項18】前記フォーク(FORK)箇所決定ステ
    ップが、分岐先基本ブロックにてメモリを介したデータ
    依存命令の位置を求める際、前記命令ステップ数に代え
    て、各命令の推定実行サイクル数を積算した値を用い
    る、ことを特徴とする請求項17に記載のプログラム並
    列化方法。
  19. 【請求項19】前記プログラム変換装置で、まず、原始
    プログラムから目的プログラムに変換する際に、中間プ
    ログラムでの基本ブロックと、出力する目的プログラム
    での機械命令アドレスとの対応をとるためのアドレス対
    応情報を、前記目的プログラムと併せて出力し、 前記目的プログラムを実行するプロセッサ装置が、前記
    目的プログラムと前記アドレス対応情報を読み込んで、
    前記目的プログラムを実行すると共に、前記目的プログ
    ラムの実行時の基本ブロック間の分岐プロファイル情報
    と、基本ブロック間でメモリを介して発生したデータ依
    存情報とを含むプロファイル情報を出力し、 次に、前記プログラム変換装置が、原始プログラムを並
    列化して、目的プログラムに変換する際に、前記フォー
    ク(FORK)箇所決定ステップにおいて、前記プロフ
    ァイル情報を参照して、条件分岐において、制御の流れ
    る確率が高い分岐先基本ブロック及び条件分岐におい
    て、データ依存が発生する確率が低い分岐先基本ブロッ
    クを並列実行する新スレッドとして優先的に選択する、
    ことを特徴とする、請求項15に記載のプログラム並列
    化方法。
  20. 【請求項20】前記フォーク(FORK)箇所決定ステ
    ップが、並列実行する新スレッドの実行開始点として選
    択した条件分岐先基本ブロックに対し、中間プログラム
    でのメモリを介したデータ依存を解析した結果と、前記
    プロファイル情報から得たデータ依存発生確率とに基づ
    き、データ依存を引き起こす異なるメモリアドレスの箇
    所の数が定められた数よりも少ない場合には、新スレッ
    ドが該メモリアドレスからロードする動作を一時停止さ
    せるように命令を生成し、 一方、データ依存を引き起こす異なるメモリアドレスの
    箇所の数が定められた数より多い場合には、データ依存
    発生確率が定められた確率より低いか否かを調べ、確率
    が低い場合には、データ依存投機的モードで新スレッド
    を生成するように命令を生成し、 確率が高い場合には、当該箇所での並列化変換を取りや
    めるように制御する、ことを特徴とする、請求項19に
    記載のプログラム並列化方法。
  21. 【請求項21】前記フォーク(FORK)箇所決定ステ
    ップが、現在処理対象としている中間プログラム中の基
    本ブロックから、該基本ブロック末尾にある条件分岐命
    令の分岐先基本ブロック各々へのメモリを介したデータ
    依存関係を調査し、該調査したデータ依存関係と、前記
    プロファイル情報から得た条件分岐確率とを総合した結
    果、当該条件分岐での分岐先基本ブロック各々に関し
    て、分岐確率の間に、予め定められた以上の差異がな
    く、且つ、メモリを介したデータ依存発生時期の早遅に
    も、予め定められた以上の差異がない場合に、当該条件
    分岐部分を並列化しないように決定する、ことを特徴と
    する請求項19に記載のプログラム並列化方法。
  22. 【請求項22】前記フォーク(FORK)箇所決定ステ
    ップが、 (1)条件分岐命令が前記中間プログラム中のループ構
    造の戻り枝に相当する分岐命令であるか否かを判定する
    ステップと、 (2)前記条件分岐命令がループ戻り枝に相当する分岐
    命令である場合、当該戻り枝方向、即ちループ継続方向
    をFORK先として、この条件分岐箇所を、FORK箇
    所に選定するステップと、 (3)前記条件分岐命令が、ループ戻り枝分岐ではない
    場合、条件分岐の2つの分岐先の各々に対して、各中間
    項/変数のデータ依存の距離の最小値を計算するステッ
    プと、 (4)前記条件分岐の2つの分岐に関してそれぞれ求め
    た2つのデータ依存の距離の最小値を比較し、両者に所
    定値以上の差があるか否かを判定するステップと、 (5)前記2つのデータ依存の距離の最小値に前記所定
    値以上の差がある場合、データ依存の距離の最小値の大
    きい側の分岐方向をFORK先とし、この条件分岐箇所
    を、FORK箇所に選定するステップと、 (6)データ依存の距離の最小値に前記所定値以上の差
    がない場合、元の中間プログラム内で分岐先であった側
    (分岐命令のtaken側)をFORK先とし、この条
    件分岐箇所をFORK候補に選定するステップと、 を含むことを特徴とする請求項15に記載のプログラム
    並列化方法。
  23. 【請求項23】前記データ依存の距離が、現在、処理対
    象としている基本ブロック内で定義され、その分岐先で
    参照される可能性がある中間項及び変数のうち、メモリ
    上に配置されると見込まれる中間項、及び変数の各々に
    対して、分岐先の基本ブロックの中で、該メモリ参照命
    令が、先頭からどれぐらいの位置にあるかを、中間プロ
    グラム中のステップ数で表したものである、ことを特徴
    とする請求項22に記載のプログラム並列化方法。
  24. 【請求項24】前記データ依存の距離を求める際、各命
    令が目的アーキテクチャのプロセッサ上で実行される際
    に要すると推定されるサイクル数を用いる、ことを特徴
    とする請求項22に記載のプログラム並列化方法。
  25. 【請求項25】前記命令並べ換えステップが、 (1)前記中間プログラム中の各中間項及び変数がレジ
    スタに対応付けられるかメモリに対応付けられるかレジ
    スタの割り当て状況を調べるステップと、 (2)現在処理対象としている基本ブロックの末尾にあ
    る分岐命令を、制御投機モードFORK命令に置換し、
    その際、制御投機モードFORK命令のオペランドであ
    るFORK先は、前記FORK箇所決定ステップで選択
    されたFORK先とするステップと、 (3)前記中間プログラム中で、制御投機モードFOR
    K命令の直前にある分岐条件式を、制御投機モードFO
    RK命令直後に移動させると共に、該移動先の直後すな
    わち当該基本ブロックの末尾に、分岐条件成立時には自
    スレッドを終了させて子スレッドを確定モードすなわち
    非制御投機モードに移行させ、分岐条件非成立時には子
    スレッドを破棄させて自スレッドが後続命令列の実行を
    続ける、一群の命令列を、挿入するステップと、 (4)現在処理対象としている基本ブロックにおいて、
    前記制御投機モードFORK命令よりも手前、即ち、上
    流側にある命令文のうち、メモリに対応付けられた中間
    項及び変数への代入となる文の各々について、その代入
    文を、前記制御投機モードFORK命令よりも後方、即
    ち、下流側へ移動させると共に、前記制御投機モードF
    ORK命令の直前に、ブロック設定命令を挿入し、代入
    文の移動先の直後に、ブロック解除命令を挿入するステ
    ップと、 (5)前記ステップ(2)のFORK変換処理で仮定し
    たレジスタ割り当て状況に、レジスタを割り当てるよう
    に指示するステップと、 を含む、ことを特徴とする請求項15に記載のプログラ
    ム並列化方法。
  26. 【請求項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. 【請求項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. 【請求項28】原始プログラムをコンパイルしてマルチ
    スレッドプロセッサ装置向けの目的プログラムを生成出
    力するコンパイラにおいて、構文解析の結果出力される
    中間プログラムに対して並列化を含む最適化処理であっ
    て、 (a)並列化に先立ってレジスタ割り当てを試み、中間
    プログラム上の各変数、及び中間項のレジスタ割り当て
    状況を予測するレジスタ割り当て試行処理と、 (b)前記レジスタ割り当て試行結果に基づいて、前記
    中間プログラムにおける条件分岐部分をスレッド生成命
    令を用いた並列コードに変換するか否かの決定を行う
    か、もしくは、並列コードに変換するか否かの決定と並
    列コードに変換する場合その並列実行方式の決定を行う
    フォーク(FORK)箇所決定処理と、 (c)前記フォーク(FORK)箇所決定部での決定結
    果に基づいて、前記中間プログラム中の条件分岐部分
    を、スレッド生成命令を用いた並列コードに変換し、前
    記レジスタ割り当て試行結果を参照して、スレッド間の
    メモリを介したデータ依存関係を保証する命令を、前記
    スレッド生成命令の前後に挿入すると共に、スレッド生
    成が早い段階で行われるように、前記スレッド生成命令
    の前後の命令を並べ換える命令並べ換え処理と、 (d)並列化され並べ換えられた命令列に対して、物理
    レジスタが割り当てられるか否かに関して、前記レジス
    タ割り当ての試行時と同じ割り当て結果となるように確
    定的なレジスタ割り当てを行うレジスタ割り当て処理
    と、 の前記(a)乃至(d)の最適化処理をコンピュータで
    実行するためのプログラムを記録した記録媒体。
  29. 【請求項29】請求項28記載の記録媒体において、 前記フォーク(FORK)箇所決定処理が、現在処理対
    象としている中間プログラム中の基本ブロックから、該
    基本ブロック末尾にある条件分岐命令の分岐先基本ブロ
    ック各々へのメモリを介したデータ依存関係を調査し、 分岐先の各々について、分岐先基本ブロック中にあって
    データ依存を引き起こしているメモリ参照命令のうち、
    最も先頭にある命令の、該分岐先基本ブロック先頭から
    の命令ステップ数を数え、 前記命令ステップ数が大きな側の分岐先基本ブロック
    を、並列実行させる新たなスレッドとして選択する、 処理を含み、前記処理を、前記コンピュータで実行する
    ためのプログラムを記録した記録媒体。
  30. 【請求項30】請求項28記載の記録媒体において、 前記フォーク(FORK)箇所決定処理において、分岐
    先基本ブロックにてメモリを介したデータ依存命令の位
    置を求める際、前記命令ステップ数に代えて、各命令の
    推定実行サイクル数を積算した値を用い処理を、前記コ
    ンピュータで実行するためのプログラムを記録した記録
    媒体。
  31. 【請求項31】請求項28記載の記録媒体において、 (f)前記コンパイラで、まず、原始プログラムから目
    的プログラムに変換する際に、中間プログラムでの基本
    ブロックと、出力する目的プログラムでの機械命令アド
    レスとの対応をとるためのアドレス対応情報を、前記目
    的プログラムと併せて出力する処理と、 前記目的プログラムを実行するプロセッサ装置が、前記
    目的プログラムと前記アドレス対応情報を読み込んで、
    前記目的プログラムを実行すると共に、前記目的プログ
    ラムの実行時の基本ブロック間の分岐プロファイル情報
    と、基本ブロック間でメモリを介して発生したデータ依
    存情報とを含むプロファイル情報を出力し、 前記コンパイラが、原始プログラムを並列化して、目的
    プログラムに変換する際に、 (g)前記フォーク(FORK)箇所決定処理におい
    て、前記プロファイル情報を参照して、条件分岐におい
    て、制御の流れる確率が高い分岐先基本ブロック及び条
    件分岐において、データ依存が発生する確率が低い分岐
    先基本ブロックを並列実行する新スレッドとして優先的
    に選択する処理、 の前記(f)及び(g)の処理を前記コンピュータで実
    行するためのプログラムを記録した記録媒体。
  32. 【請求項32】請求項31記載の記録媒体において、 前記フォーク(FORK)箇所決定処理が、並列実行す
    る新スレッドの実行開始点として選択した条件分岐先基
    本ブロックに対し、中間プログラムでのメモリを介した
    データ依存を解析した結果と、前記プロファイル情報か
    ら得たデータ依存発生確率とに基づき、データ依存を引
    き起こす異なるメモリアドレスの箇所の数が定められた
    数より少ない場合には、新スレッドが該メモリアドレス
    からロードする動作を一時停止させるように命令を生成
    し、 一方、データ依存を引き起こす異なるメモリアドレスの
    箇所の数が定められた数より多い場合には、データ依存
    発生確率が定められた確率より低いか否かを調べ、確率
    が低い場合には、データ依存投機的モードで新スレッド
    を生成するように命令を生成し、 確率が高い場合には、当該箇所での並列化変換を取りや
    めるように制御する、 処理を含み、前記処理を前記コンピュータで実行するた
    めのプログラムを記録した記録媒体。
  33. 【請求項33】請求項31記載の記録媒体において、 前記フォーク(FORK)箇所決定処理が、現在処理対
    象としている中間プログラム中の基本ブロックから、該
    基本ブロック末尾にある条件分岐命令の分岐先基本ブロ
    ック各々へのメモリを介したデータ依存関係を調査し、
    該調査したデータ依存関係と、前記プロファイル情報か
    ら得た条件分岐確率とを総合した結果、当該条件分岐で
    の分岐先基本ブロック各々に関して、分岐確率の間に定
    められた以上の差異がなく、且つ、メモリを介したデー
    タ依存発生時期の早遅にも定められた以上の差異がない
    場合に、当該条件分岐部分を並列化しないように決定す
    る、処理を含み、前記処理を前記コンピュータで実行す
    るためのプログラムを記録した記録媒体。
JP2000093508A 2000-03-30 2000-03-30 プログラム変換装置及び方法並びに記録媒体 Expired - Fee Related JP3641997B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Cited By (18)

* Cited by examiner, † Cited by third party
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