[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP2000207223A - 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 - Google Patents

並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体

Info

Publication number
JP2000207223A
JP2000207223A JP11004843A JP484399A JP2000207223A JP 2000207223 A JP2000207223 A JP 2000207223A JP 11004843 A JP11004843 A JP 11004843A JP 484399 A JP484399 A JP 484399A JP 2000207223 A JP2000207223 A JP 2000207223A
Authority
JP
Japan
Prior art keywords
basic block
program
execution
unit
parallel
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.)
Pending
Application number
JP11004843A
Other languages
English (en)
Inventor
Kensuke Kotani
謙介 小谷
Takehito Heiji
岳人 瓶子
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP11004843A priority Critical patent/JP2000207223A/ja
Priority to US09/478,989 priority patent/US6760906B1/en
Publication of JP2000207223A publication Critical patent/JP2000207223A/ja
Priority to US10/873,252 priority patent/US20040230770A1/en
Pending legal-status Critical Current

Links

Classifications

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

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】 並列処理向けコンパイルを行うプログラム処
理において、目的機械におけるプログラム実行速度を向
上させる。 【解決手段】 コンパイラ上流部10はソースコード5
0を基本ブロックに分割された中間形式コードに変換す
る。並列化部40はコンパイラ上流部10で生成された
中間形式コードを並列実行可能な形式に変換する。拡大
基本ブロック並列化部42は基本ブロックに分割された
中間コードを、実行順序設定部41による設定順に基本
ブロック毎に、並列実行可能な命令からなる実行単位に
区分する。ここで、一の基本ブロックに対する実行単位
への区分は、すでに実行単位に区分された直後基本ブロ
ックの先端実行単位に属する命令と合わせて行う。オブ
ジェクトコード生成部30は並列化部40で実行単位に
区分された中間形式コードをオブジェクトコード60に
変換する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、高級言語で生成さ
れたソースコードからオブジェクトコードを生成するコ
ンパイラ等で用いられるプログラム処理に関するもので
あり、特に、並列プロセッサ向けのコード最適化技術に
属する。
【0002】
【従来の技術】近年、マイクロプロセッサ応用製品の高
機能化・高性能化に伴い、より性能の高いマイクロプロ
セッサが求められている。このような背景から、処理の
並列化によって高性能化を実現するVLIWプロセッサ
などの並列プロセッサが開発されている。
【0003】例えばVLIWプロセッサでは、プログラ
ムの各語に含まれた複数のオペレーションが並列に処理
される。プログラムの各語にパッキングされるオペレー
ションの組合せは、コンパイラに任される。コンパイラ
はソースプログラム中の命令の並列性を抽出し、並列に
実行可能な命令を1語にパッキングして、VLIWプロ
セッサのプログラム実行時間の短縮を図る。
【0004】
【発明が解決しようとする課題】前述したコンパイル技
術では、命令の並べ替えは基本ブロックを単位として行
なわれる。基本ブロックとは、途中で分岐や停止のない
連続した命令列からなり、先頭命令から最終命令まで連
続して制御が行われるもののことをいう。
【0005】一方、VLIWプロセッサは一般に、長語
長の固定長固定並列度命令体系をとるため、コード効率
が必ずしもよくない。これに対して近年、可変長可変発
行型のVLIWプロセッサが開発されている。この可変
長可変発行型VLIWプロセッサでは、並列実行命令を
並列実行境界(以下単に「実行境界」という)で区切る
ことによって、1サイクルあたりの命令発行数(並列
度)を可変にするとともに、可変長の命令体系をとるこ
とによって、コード効率を向上させている。実行境界間
に含まれる命令群を「実行単位」という。さらには、こ
のVLIWプロセッサは制御の分岐・合流を含む実行単
位の同時実行もサポートしている。
【0006】この種のプロセッサに、前述したコンパイ
ラ技術を適用した場合、命令の並べ替えが基本ブロック
を単位として行われるために、本来同一実行単位に含め
ることが可能である命令が、基本ブロック境界によって
区切られてしまう可能性がある。このため、プログラム
実行速度が、VLIWプロセッサの持つ性能に対して必
ずしも十分に向上しないという問題がある。
【0007】本発明は、かかる問題点に鑑みてなされた
ものであり、並列処理向けのプログラム処理として、目
的機械におけるプログラム実行速度を従来よりも向上さ
せることを課題とする。
【0008】
【課題を解決するための手段】前記の課題を解決するた
めに、請求項1の発明が講じた解決手段は、並列処理向
けのプログラム処理方法として、基本ブロックに分割さ
れたプログラムコードを基本ブロック毎に並列実行可能
な命令からなる実行単位に区分するステップと、基本ブ
ロック境界の直前および直後の実行単位を、同一サイク
ルで実行可能であると判断したときに単一の実行単位に
合併するステップとを備えたものである。
【0009】請求項1の発明によると、基本ブロック境
界の直前および直後の実行単位は、同一サイクルで実行
可能であると判断されたときには、単一の実行単位に合
併される。目的機械は、基本ブロック境界をまたぐ命令
群であっても、単一の実行単位に構成されている場合に
は、同一サイクルにおいて実行する。このため、基本ブ
ロック境界をまたぐ命令群が並列に実行される可能性が
高まるので、目的機械におけるプログラム実行のための
サイクル数を削減することができ、したがって、従来よ
りもプログラムの実行速度を向上させることができる。
【0010】そして、請求項2の発明では、前記請求項
1のプログラム処理方法における合併ステップは、基本
ブロック境界の直前および直後の実行単位に属する命令
間の依存関係を解析するステップを備え、解析した命令
間の依存関係に基づいて、前記基本ブロック境界の直前
および直後の実行単位が単一の実行単位に合併可能か否
かを判断するものとする。
【0011】また、請求項3の発明では、前記請求項1
のプログラム処理方法において、前記区分ステップは、
基本ブロックの境界に実行単位の境界であることを示す
実行境界コードを付加するものとし、前記合併ステップ
は、基本ブロック境界の直前および直後の実行単位が同
一サイクルで実行可能であると判断したとき、その境界
に付加されている実行境界コードを除去するものとす
る。
【0012】また、請求項4の発明では、前記請求項1
のプログラム処理方法における区分ステップは、基本ブ
ロックの先頭および最終の実行単位に属する命令とし
て、当該プログラムを実行する目的機械における資源制
約のゆるやかな命令を優先的に選択するものとする。
【0013】そして、請求項5の発明では、前記請求項
4のプログラム処理方法における区分ステップは、基本
ブロックの先頭および最終の実行単位に属する命令の選
択の際に、前記目的機械において同一サイクルに1個し
か実行できない命令の優先度を下げるものとする。
【0014】また、請求項6の発明では、前記請求項1
のプログラム処理方法における区分ステップは、基本ブ
ロックの先頭および最終の実行単位に属する命令とし
て、命令語長の短い命令を優先的に選択するものとす
る。
【0015】また、請求項7の発明が講じた解決手段
は、並列処理向けのプログラム処理方法として、基本ブ
ロックに分割されたプログラムコードを基本ブロック毎
に並列実行可能な命令からなる実行単位に区分するステ
ップを備え、前記区分ステップは、一の基本ブロックを
実行単位に区分する際に、すでに実行単位に区分されて
おり、かつ、前記一の基本ブロックに隣接する合併対象
基本ブロックの、前記一の基本ブロックに最も近い実行
単位に属する命令と合わせて、並列実行可能な命令から
なる実行単位に区分するものである。
【0016】請求項7の発明によると、一の基本ブロッ
クの実行単位への区分は、すでに実行単位に区分されて
おり、かつ、前記一の基本ブロックに隣接する合併対象
基本ブロックの、前記一の基本ブロックに最も近い実行
単位に属する命令と合わせて行われるので、基本ブロッ
ク境界をまたぐ命令群が単一の実行単位に構成される可
能性が高くなる。目的機械は、基本ブロック境界をまた
ぐ命令群であっても、単一の実行単位に構成されている
場合には、同一サイクルにおいて実行する。このため、
基本ブロック境界をまたぐ命令群が並列に実行される可
能性が高まるので、目的機械におけるプログラム実行の
ためのサイクル数を削減することができ、したがって、
プログラムの実行速度が向上する。
【0017】そして、請求項8の発明では、前記請求項
7のプログラム処理方法における区分ステップは、前記
一の基本ブロックの直前に位置する基本ブロックを前記
合併対象基本ブロックとして用い、前記一の基本ブロッ
クを前記合併対象基本ブロックの最終の実行単位に属す
る命令と併せて実行単位に区分するものとする。
【0018】また、請求項9の発明では、前記請求項7
のプログラム処理方法における区分ステップは、前記一
の基本ブロックの直後に位置する基本ブロックを前記合
併対象基本ブロックとして用い、前記一の基本ブロック
を前記合併対象基本ブロックの先頭の実行単位に属する
命令と併せて実行単位に区分するものとする。
【0019】また、請求項10の発明では、前記請求項
7のプログラム処理方法における区分ステップは、プロ
グラムの先頭から後に向かって順に基本ブロックを実行
単位に区分するものとする。
【0020】また、請求項11の発明では、前記請求項
7のプログラム処理方法における区分ステップは、プロ
グラムの最終から前に向かって順に基本ブロックを実行
単位に区分するものとする。
【0021】また、請求項12の発明では、前記請求項
7のプログラム処理方法における区分ステップは、最内
ループに含まれる基本ブロックを優先的に実行単位に区
分するものとする。
【0022】また、請求項13の発明では、前記請求項
7のプログラム処理方法において、前記区分ステップを
第1の区分ステップとすると、前記プログラムコードを
基本ブロック毎に隣接する基本ブロックとは独立して並
列実行可能な命令からなる実行単位に区分する第2の区
分ステップを備え、前記第1および第2の区分ステップ
の実行結果を比較し、実行単位の個数が少ない方を選択
するものとする。
【0023】また、請求項14の発明は、並列処理向け
のプログラム処理装置として、基本ブロックに分割され
たプログラムコードを基本ブロック毎に並列実行可能な
命令からなる実行単位に区分する基本ブロック内並列化
部と、基本ブロック境界の直前および直後の実行単位を
同一サイクルで実行可能であるときに単一の実行単位に
合併する基本ブロック境界並列化部とを備えたものであ
る。
【0024】また、請求項15の発明は、並列処理向け
コンパイルを実行するプログラム処理装置として、ソー
スコードを基本ブロックに分割された中間形式コードに
変換するコンパイラ上流部と、前記コンパイラ上流部に
よって生成された中間形式コードを並列実行可能な形式
に変換する並列化部と、前記並列化部によって形式変換
された中間形式コードを目的機械向けのオブジェクトコ
ードに変換するオブジェクトコード生成部とを備え、前
記並列化部は、基本ブロックに分割された中間形式コー
ドを基本ブロック毎に並列実行可能な命令からなる実行
単位に区分する基本ブロック内並列化部と、基本ブロッ
ク境界の直前および直後の実行単位を同一サイクルで実
行可能であるときに単一の実行単位に合併する基本ブロ
ック境界並列化部とを備えているものである。
【0025】また、請求項16の発明は、並列処理向け
のプログラム処理装置として、基本ブロックに分割され
たプログラムコードを基本ブロック毎に並列実行可能な
命令からなる実行単位に区分する拡大基本ブロック並列
化部を備え、前記拡大基本ブロック並列化部は、一の基
本ブロックを実行単位に区分する際に、すでに実行単位
に区分されており、かつ、前記一の基本ブロックに隣接
する合併対象基本ブロックの、前記一の基本ブロックに
最も近い実行単位に属する命令と合わせて、並列実行可
能な命令からなる実行単位に区分するものである。
【0026】また、請求項17の発明は、並列処理向け
コンパイルを実行するプログラム処理装置として、ソー
スコードを基本ブロックに分割された中間形式コードに
変換するコンパイラ上流部と、前記コンパイラ上流部に
よって生成された中間形式コードを並列実行可能な形式
に変換する並列化部と、前記並列化部によって形式変換
された中間形式コードを目的機械向けのオブジェクトコ
ードに変換するオブジェクトコード生成部とを備え、前
記並列化部は、基本ブロックに分割された中間形式コー
ドを基本ブロック毎に並列実行可能な命令からなる実行
単位に区分する拡大基本ブロック並列化部を備え、前記
拡大基本ブロック並列化部は、一の基本ブロックを実行
単位に区分する際に、すでに実行単位に区分されてお
り、かつ前記一の基本ブロックに隣接する合併対象基本
ブロックの前記一の基本ブロックに最も近い実行単位に
属する命令と合わせて並列実行可能な命令からなる実行
単位に区分するものである。
【0027】また、請求項18の発明は、並列処理向け
のプログラム処理として、基本ブロックに分割されたプ
ログラムコードを基本ブロック毎に並列実行可能な命令
からなる実行単位に区分するステップと、基本ブロック
境界の直前および直後の実行単位を同一サイクルで実行
可能であるときに単一の実行単位に合併するステップと
を含むプログラム処理を、コンピュータに実行させるプ
ログラムを記録した記録媒体である。
【0028】また、請求項19の発明は、並列処理向け
コンパイルを実行するプログラム処理として、ソースコ
ードを基本ブロックに分割された中間形式コードに変換
するステップと、前記中間形式コードを基本ブロック毎
に並列実行可能な命令からなる実行単位に区分するステ
ップと、基本ブロック境界の直前および直後の実行単位
を同一サイクルで実行可能であるときに単一の実行単位
に合併するステップと、前記区分および合併ステップに
よって処理した中間形式コードを目的機械向けのオブジ
ェクトコードに変換するステップとを含むプログラム処
理を、コンピュータに実行させるプログラムを記録した
記録媒体である。
【0029】また、請求項20の発明は、並列処理向け
のプログラム処理として、基本ブロックに分割されたプ
ログラムコードを基本ブロック毎に並列実行可能な命令
からなる実行単位に区分するステップを備え、前記区分
ステップは、一の基本ブロックを実行単位に区分する際
に、すでに実行単位に区分されており、かつ前記一の基
本ブロックに隣接する合併対象基本ブロックの前記一の
基本ブロックに最も近い実行単位に属する命令と合わせ
て並列実行可能な命令からなる実行単位に区分するもの
であるプログラム処理を、コンピュータに実行させるプ
ログラムを記録した記録媒体である。
【0030】また、請求項21の発明は、並列処理向け
コンパイルを実行するプログラム処理として、ソースコ
ードを基本ブロックに分割された中間形式コードに変換
するステップと、基本ブロックに分割された中間形式コ
ードを基本ブロック毎に並列実行可能な命令からなる実
行単位に区分するステップと、前記区分ステップによっ
て処理した中間形式コードを目的機械向けのオブジェク
トコードに変換するステップとを備え、前記区分ステッ
プは、一の基本ブロックを実行単位に区分する際に、す
でに実行単位に区分されており、かつ前記一の基本ブロ
ックに隣接する合併対象基本ブロックの前記一の基本ブ
ロックに最も近い実行単位に属する命令と合わせて並列
実行可能な命令からなる実行単位に区分するものである
プログラム処理を、コンピュータに実行させるプログラ
ムを記録した記録媒体である。
【0031】また、請求項22の発明は、並列処理向け
の命令列として、並列実行される命令からなる実行単位
に区分されており、前記実行単位のうち少なくとも1つ
は基本ブロック境界をまたいで構成されている命令列が
記録された記録媒体である。
【0032】
【発明の実施の形態】以下、本発明の実施形態につい
て、図面を参照しながら説明する。
【0033】(目的機械)まず、本発明の実施形態に係
るプログラム処理の前提となる目的機械について説明す
る。
【0034】本実施形態の前提となる目的機械は、並列
度3の可変長可変発行型のプロセッサとする。この目的
機械が実行する命令は、21ビットを単位とする命令構
成要素(ユニット)で構成され、命令フォーマットとし
て、1ユニットで構成される21ビット命令(短命令)
および2ユニットで構成される42ビット命令(長命
令)を持つ。すなわち、この目的機械は可変長命令体系
に対応している。
【0035】また各命令は、実行単位の境界すなわち実
行境界に接しているか否かを示す情報を有している。こ
の情報が実行境界に接していることを示しているとき
は、この命令とこれに続く命令とは同一サイクルでは実
行されない。目的機械は、実行境界から実行境界までの
命令すなわち同一実行単位に属する命令を同一サイクル
において実行する。
【0036】同一実行単位中に配置できる命令に対する
制約条件は次の通りとする。 (1)実行単位中の命令の個数は3を越えない。 (2)実行単位中の命令が使用する目的機械の資源の総
和は、3ALUユニット、1乗算ユニット、1LD/S
Tユニットおよび1分岐ユニットを越えない。この制約
条件を資源制約という。 これら2つの条件がともに満たされた場合のみ、命令の
並列実行が可能になる。
【0037】実行単位に属する命令の個数は、上記
(1)の制約条件の範囲において任意に設定可能である
ので、可変数発行が実現できる。目的機械は、ハードウ
ェア量の削減のために、実行単位中の命令が意味的に並
列実行可能か否か、および目的機械の資源制約を満たし
て並列実行可能か否かの判定は行わないように構成され
ている。実行境界間に並列実行可能な命令が正しく配置
されていることは、目的機械向けのプログラム処理側で
保証するものとする。
【0038】また、目的機械は実行単位中の命令を必ず
しも同時に実行するわけではない。命令供給の遅れなど
の理由によって、実行単位中の命令を複数回に分けて実
行する場合もあり得る。このためプログラム処理側で
は、実行単位中の命令順を、複数回に分けて実行されて
もプログラムの意味動作が正しくなるように設定する必
要がある。
【0039】上記条件から分かるように、実行単位中に
は分岐命令を含むことができる。例えば、「条件分岐命
令」「ALU命令」「LD命令」の順に配置される実行
単位が可能である。この場合、先頭の「条件分岐命令」
が実行され、かつ条件が成立した場合には、同一実行単
位中で分岐命令よりも後に位置する命令「ALU命令」
「LD命令」の実行はキャンセルされる。また同様に、
実行単位途中への飛び込みも可能である。この場合に
は、同一実行単位中で飛び込み先命令よりも前の命令は
実行されない。
【0040】図1(a)〜(d)は目的機械の命令セッ
トの例を示す図である。同図中、Op,Op2はオペコ
ード、Rsはソースレジスタ、Rdはディストネーショ
ンレジスタ、immn(nは定数)はnビットの定数を
意味する。またEは実行境界の有無を表すビットであ
り、命令が実行単位の境界に位置するとき、ビットが設
定される。(a)はレジスタ間演算命令、(b)は5ビ
ットまでの定数との演算命令、(c)は21ビットまで
の定数との演算命令、(d)は32ビットまでの定数と
の演算命令である。(a),(b)は21ビット幅の短
命令、(c),(d)は42ビット幅の長命令である。
なお(d)に示す32ビット定数との演算命令は、32
ビット定数をレジスタに転送する転送命令のみ存在する
ものとする。これは図1(d)からも明らかなように、
32ビット定数を含む命令ではオペコードOpに割ける
ビット数が少なく、32ビット定数を扱う命令を数多く
定義することができないためである。
【0041】目的機械の実際の動作について簡単に説明
する。
【0042】図1(e)は目的機械で実行される実行形
式コード(オブジェクトコード)の一例を示す図であ
る。実行形式コードは21ビットのユニット3個をまと
めた64ビット単位(パケット)で目的機械にフェッチ
される。ユニット3個の実際の長さは21×3=63ビ
ットであり1ビット余分となるが、この1ビットは特に
使用しない。目的機械にフェッチされた命令は実行境界
から次の実行境界までの実行単位毎に実行される。フェ
ッチされた命令のうち実行されなかった命令は命令バッ
ファに蓄積され、次の実行サイクル以降での実行にあて
られる。
【0043】図1(f)は目的機械の命令実行のイメー
ジを示す図である。図1(f)における各行が、目的機
械が1実行サイクルあたりに実行する命令に相当する。
【0044】実行単位途中からの飛び出しおよび実行単
位途中への飛び込みについて簡単に説明する。図1
(e)において、ユニット1が条件分岐命令であり、こ
の条件分岐命令における条件が成立したとする。この場
合、ユニット1の条件分岐命令は実行されるが、同一実
行単位中のユニット1よりも後の命令すなわちユニット
2の命令の実行はキャンセルされる。また図1(e)に
おいて、ユニット5への飛び込みがあった場合には、同
一実行単位中のユニット5よりも前の命令すなわちユニ
ット3,4の命令は実行されない。
【0045】なお、説明の都合上、上記プロセッサを本
実施形態の前提とするが、本発明に係るプログラム処理
は、このプロセッサで例として挙げた基本命令語長(こ
の例では21ビット)、並列度(この例では3)、資源
制約(この例では3ALUユニット、1乗算ユニット、
1LD/STユニットおよび1分岐ユニット)または実
行できる命令の組合せに限定されるものではない。これ
らが異なる場合であっても、本発明は同様に適用可能で
ある。
【0046】また、実行境界を示す情報は命令自体が有
するものとしたが、命令とは独立した領域に実行境界を
表す情報を保持することとしてもよい。
【0047】(第1の実施形態)図2は本発明の第1の
実施形態に係るプログラム処理装置の構成を示すブロッ
ク図である。図2に示すように、本実施形態に係るプロ
グラム処理装置1はコンパイラ上流部10、並列化部2
0およびオブジェクトコード生成部30を備えている。
【0048】コンパイラ上流部10は、ファイル形式で
保存されている高級言語(例えばC言語)で記述された
ソースコード50を読み込み、構文解析および意味解析
を行って、内部形式コード(アセンブラコード)を生成
する。次にこの内部形式コードを、途中で分岐や停止の
ない命令列からなる基本ブロックに分割する。さらに必
要に応じて、最終的に生成される実行形式コード(オブ
ジェクトコード)のサイズやその実行時間が短くなるよ
うに、内部形式コードを最適化する。
【0049】並列化部20は、コンパイラ上流部10に
おいて生成されたプログラムコードとしての内部形式コ
ードを読み込み、目的機械向けに並列化する。並列化部
20は基本ブロック内並列化部21および基本ブロック
境界並列化部22を備えている。
【0050】基本ブロック内並列化部21は基本ブロッ
ク毎に命令間の依存関係の解析、命令スケジューリング
(命令順の並べ替え)および実行境界の付加を行い、内
部形式コードの並列化を行う。基本ブロック内並列化部
21の動作は、従来のプログラム処理装置における基本
ブロック内(局所)並列化部と同様である(例えば本願
出願人による特願平10―095647参照)。
【0051】基本ブロック境界並列化部22は、基本ブ
ロック内並列化部21において並列化された内部形式コ
ードの基本ブロック境界に着目し、基本ブロック境界に
位置する除去可能な実行境界を取り除く。基本ブロック
境界並列化部22は境界依存関係解析部23、同時実行
可否判定部24および実行境界除去部25を備えてい
る。
【0052】境界依存関係解析部23は、着目する基本
ブロック境界の直前および直後の2つの実行単位に含ま
れる全ての命令(以下「着目命令」という)を対象とし
て、命令間の依存関係を解析し、依存グラフを生成す
る。依存グラフは命令をノード(節)、命令間の依存関
係をエッジ(矢印)として表したグラフである。依存グ
ラフでは例えば、命令bを実行するために命令aを実行
しておかねばならない場合に、命令bは命令aに依存す
るとして「a→b」なる表記で依存関係を表す。ここで
は依存関係として「定義−参照」依存(データ依存)を
用いる。これはある資源を定義する命令と同じ資源を参
照する命令との間の依存関係である。依存グラフの生成
方法は例えば、論文「 Instruction scheduling in the
TOBEY compiler (R.J.Blainey, IBMJ.RES.DEVELOP. VO
L.38 NO.5 SEPTEMBER 1994) 」に開示されている。
【0053】同時実行可否判定部24は、境界依存関係
解析部23が生成した依存グラフに基づいて、全ての着
目命令が同一サイクルにおいて実行可能か否かを判定す
る。
【0054】図3は同時実行可否判定部24における処
理手順を示すフローチャートである。同時実行可否判定
部24はまず、着目命令中にデータ依存が存在するか否
かを判定する(a1)。データ依存が存在するときは、
同一サイクルにおける実行は「不可」と判断する。デー
タ依存が存在しないときは、着目命令を同一サイクルに
おいて実行するときに目的機械の資源制約を満たすか否
かを判定する(a2)。満たさないときは、同一サイク
ルにおける実行は「不可」と判断する。ステップa1,
a2においてともにNoであるとき、すなわち着目命令
中にデータ依存がなく、かつ、目的機械の資源制約を満
たすとき、着目命令の同一サイクルにおける実行は「可
能」と判断する。
【0055】実行境界除去部25は、同時実行可否判定
部24において、着目命令の同一サイクルにおける実行
が可能と判断された場合に、着目する基本ブロック境界
に位置する実行境界を取り除く。
【0056】オブジェクトコード生成部30は、並列化
部20が出力した内部形式コード(アセンブラコード)
をオブジェクトコード60に変換し、ファイルとして出
力する。
【0057】図2に示す本実施形態に係るプログラム処
理装置の特徴的な動作について、具体的な命令を用いて
説明する。
【0058】<第1の動作例>図4は並列化部20の基
本ブロック内並列化部21によって処理された後の内部
形式コードの一例を示す図である。ソースプログラム5
0はコンパイラ上流部10によって、基本ブロックに分
割された内部形式コードに変換され、基本ブロック内並
列化部21によって、基本ブロック毎に、並列実行可能
な命令からなる実行単位に区分される。この結果、図4
に示すような内部形式コードが基本ブロック内並列化部
21によって生成される。
【0059】基本ブロック境界並列化部22は図4に示
す内部形式コードを入力として受け取る。図4では、着
目する基本ブロック境界の直前および直後の実行単位の
みを示している。実行境界Aは命令の並列性とは無関係
に、基本ブロック境界の存在のみに起因して設けられた
ものであり、実行境界Aを示すための実行境界コードが
付加されている。
【0060】まず、境界依存関係解析部23が起動さ
れ、図4の内部形式コードから図5に示す依存グラフが
生成される。図5に示すように、この場合には、3個の
着目命令間に依存関係はない。
【0061】次に、同時実行可否判定部24が起動され
る。この例では、図4に示す3個の着目命令にはデータ
依存関係は存在せず(a1でno)目的機械の資源制約
も満たされているので(a2でno)同時実行「可能」
であると判断される。
【0062】続いて実行境界除去部25が起動される。
同時実行可否判定部24における判定は同時実行「可
能」であったので、着目している基本ブロック境界に位
置する実行境界Aを示す実行境界コードが除去される。
【0063】この結果、オブジェクトコード生成部30
から出力されるオブジェクトコード60のうち図4に示
す内部形式コードに対応する部分は図6のようになる。
なお図6では、意味が分かり易いようにオブジェクトコ
ードをアセンブラ表記で記述している(後述する図9,
図19も同様)。図6から分かるように、実行境界Aが
除去された結果、3個の着目命令は同一サイクルで実行
される。これにより、目的機械におけるプログラム実行
時間は短縮される。
【0064】<第2の動作例>図7は並列化部20の基
本ブロック並列化部21によって処理された後の内部形
式コードの一例を示す図である。図4と同様に、着目す
る基本ブロック境界の直前および直後の実行単位のみを
示している。実行境界Bは図4における実行境界Aと同
様に、命令の並列性とは無関係に、基本ブロック境界の
存在のみに起因して設けられたものである。
【0065】まず、境界依存関係解析部23が起動さ
れ、図7の内部形式コードから図8に示す依存グラフが
生成される。図8に示すように、この場合には、「mo
v 10,r0」から「mov r0,r1」へのデー
タ依存が存在する。
【0066】次に、同時実行可否判定部24が起動され
る。この例では、図4に示す3個の着目命令にデータ依
存関係が存在するので(a1でyes)同時実行は「不
可」であると判断する。
【0067】続いて実行境界除去部25が起動される。
同時実行可否判定部24における判定は同時実行「不
可」であったので、着目している基本ブロック境界に位
置する実行境界Bは除去されず、そのまま存続する。
【0068】図9はオブジェクトコード生成部30から
出力されるオブジェクトコード60のうち図7の内部形
式コードに対応する部分を示す図である。図9から分か
るように、実行境界Bが存続するので、3個の着目命令
は2サイクルで実行される。
【0069】このように本実施形態によると、基本ブロ
ックに分割された中間形式コードを、基本ブロック毎に
並列実行可能な命令からなる実行単位に区分し、基本ブ
ロック境界の直前および直後の実行単位を、同一サイク
ルで実行可能であると判断したときに、単一の実行単位
に合併するので、目的機械におけるプログラム実行のた
めのサイクル数を削減することができ、従来よりもプロ
グラム実行速度を向上させることができる。
【0070】なお、図2の基本ブロック内並列化部21
における実行単位への区分の際に、目的機械における資
源制約のゆるやかな命令を優先的に選択してもよい。具
体的には例えば、基本ブロックの先頭および最終の実行
単位に属する命令の選択の際に、資源制約の厳しい命
令、具体的にはロード命令やストア命令、または乗算命
令のような同一サイクルに1個しか実行できない命令の
優先度を下げ、できるだけ用いないようにする。この結
果、基本ブロック境界の直前および直後の実行単位に
は、比較的資源制約のゆるやかな命令が配置されること
になるので、基本ブロック境界並列化部22において、
基本ブロック境界の直前および直後の実行単位が合併さ
れる可能性が向上する。
【0071】また、図2の基本ブロック内並列化部21
における実行単位への区分の際に、命令語長の短い命令
を優先的に選択してもよい。具体的には例えば、5ビッ
トを越える即値使用命令のような2ユニット必要な長命
令の優先度を下げ、できるだけ用いないようにする。こ
の結果、基本ブロック境界の直前および直後の実行単位
には、比較的命令語長の短い命令が配置されることにな
る。これにより、一度にフェッチ/実行できる命令語長
に制限がある目的機械の場合でも、基本ブロック境界並
列化部22において、基本ブロック境界の直前および直
後の実行単位が合併される可能性が向上する。さらに、
基本ブロック境界直後の実行単位には分岐の飛び込みが
存在する場合があり、可変長命令体系では命令供給が間
に合わない場合が起こり得るが、命令語長の短い命令を
優先的に選択することによって実行単位の命令語長が抑
えられるので、命令供給不足が生じにくくなる。
【0072】(第2の実施形態)図10は本発明の第2
の実施形態に係るプログラム処理装置の構成を示すブロ
ック図である。図10に示すように、本実施形態に係る
プログラム処理装置2はコンパイラ上流部10、並列化
部40およびオブジェクトコード生成部30を備えてい
る。
【0073】コンパイラ上流部10は、図2のコンパイ
ラ上流部10と同様に構成されており、ソースコード5
0を読み込み、基本ブロックに分割された内部形式コー
ド(アセンブラコード)を生成する。またオブジェクト
コード生成部30も図2のオブジェクトコード生成部3
0と同様に構成されており、並列化部40が出力した内
部形式コードをオブジェクトコード60に変換し、ファ
イルとして出力する。
【0074】並列化部40はコンパイラ上流部10にお
いて生成されたプログラムコードとしての内部形式コー
ドを読み込み、目的機械向けに並列化する。並列化部4
0は実行順序決定部41および拡大基本ブロック並列化
部42を備えている。
【0075】実行順序決定部41は読み込んだ内部形式
コードにおいて、拡大基本ブロック並列化部42に渡す
基本ブロックの順序を決定する。ここでは、プログラム
の最終から前に向かって順に、基本ブロックを拡大基本
ブロック並列化部42に渡すものとする。
【0076】拡大基本ブロック並列化部42は基本ブロ
ック毎に命令間の依存関係の解析、命令スケジューリン
グおよび並列実行境界の付加を行い、並列実行可能な命
令からなる実行単位に区分する。ただし、一の基本ブロ
ックを実行単位に区分する際に、すでに実行単位に区分
され、かつ、この一の基本ブロックの直後に位置する合
併対象基本ブロックとしての基本ブロックの先頭実行単
位に属する命令と合わせて、実行単位に区分する。すな
わち、図2の基本ブロック内並列化部21と異なり、着
目基本ブロックに対し、直後基本ブロックの先頭実行単
位を考慮して命令並び替えを行う。
【0077】拡大基本ブロック並列化部42は依存関係
解析部43、命令並べ替え部44および実行境界付加部
45を備えている。依存関係解析部43は着目基本ブロ
ックの命令と直後基本ブロックの先頭実行単位の命令と
を合わせて、その依存関係を解析する。ここで用いる依
存関係は以下の4種類である。 ・データ依存関係 ある資源を定義する命令と、同一の資源を参照する命令
との間の依存関係をいう。 ・逆依存関係 ある資源を参照する命令と、同一の資源を定義する命令
との間の依存関係をいう。 ・出力依存関係 ある資源を定義する命令と、同一の資源を定義する命令
との間の依存関係をいう。 ・制御依存関係 基本ブロック末尾に分岐命令や復帰命令などの制御の流
れを変更する命令がある場合、この命令はこの命令が属
する基本ブロックの全命令よりも後または同一サイクル
において実行しなくてはならない。このような依存関係
のことをいう。いずれの依存関係にある命令も、元の命
令順を変更するとプログラムの意味が変わってしまうの
で、命令並べ替えにおいて元の依存関係を守る必要があ
る。
【0078】依存関係解析部43は基本ブロック毎に、
各命令の依存関係を表す依存グラフを生成する。図11
はアセンブラコードの一例を示す図であり、図12は図
11のアセンブラコードに対する依存グラフである。図
12において、実線はデータ依存関係を、破線は逆依存
関係を示す。なお、mem1、mem2、mem3はそ
れぞれ異なるメモリアドレスを表すものとする。
【0079】命令並べ替え部44は依存関係解析部43
で生成された依存グラフを用いて、基本ブロック内の命
令を並べ替え、目的機械向けの並列化されたアセンブラ
コードを生成する。
【0080】図13は命令並べ替え部44における処理
手順を示すフローチャートである。命令並べ替え部44
はまず、依存グラフに含まれるノードのうち、直後基本
ブロックの先頭実行単位に属する命令に対応するノード
を仮配置する(S1)。次に、依存関係解析部43が生
成した依存グラフの全てのノードについて、未配置ノー
ドがなくなるまで(S2でNoになるまで)ステップS
2〜S9(ループ1)を繰り返し実行する。
【0081】ループ1ではまず、現段階において配置候
補となり得るノードを依存グラフから抽出し、配置候補
ノード集合とする(S3)。ここで配置候補となり得る
ノードとは、「サクセッサが全て配置完了済みである」
または「ステップS1で仮配置したノードに対応する命
令のみをサクセッサとして持ち、かつ、仮配置したノー
ドに対応する命令との依存関係がデータ依存でない」命
令に対応するノードである。ここで「サクセッサ」と
は、ある命令を実行した後に実行する必要のある命令の
ことをいう。
【0082】次に、ステップS3で生成した配置候補ノ
ード集合について、配置候補ノードがなくなるまで(S
8でNoになるまで)ステップS4〜S8(ループ2)
を繰り返し実行する。
【0083】まず配置候補ノード集合から、配置するの
に現段階において最適と考えられるノードを最適ノード
として取り出す(S4)。最適ノードの選択は、依存グ
ラフおよび仮配置領域を参照して、基本ブロック全体を
最も短時間で実行できるように、ヒューリスティックに
行う。ここでは、依存グラフの終端までの命令実行時間
の総和が最も長くなるノードを選択するものとする。こ
の条件に合致する命令が複数ある場合は、命令順が後の
方を最適ノードとして選択する。
【0084】次に最適ノードが実際に配置可能か否かを
判断し、可能な場合は仮配置する(S5)。配置可能か
否かの判断は次のように行う。同一サイクルにおいて複
数の命令を実行する場合には、実行しようとする命令を
解読(フェッチ)・演算し、この結果をレジスタやメモ
リに書き戻すといった操作が必要になる。このためステ
ップS5の判断では、 ・すでに仮配置された命令に加えて、判定対象命令を同
時に解読できるか。 ・すでに仮配置された命令によって使用される目的機械
の資源(ALUや乗算器等)に加えて判定対象命令が資
源を使用しても、目的機械の資源は不足しないか。 ・すでに仮配置された命令によって使用されるレジスタ
ファイルの書き込みおよび読み出しポートに加えて判定
対象命令がポートを使用しても、ポートが不足しない
か。 の判定を行い、上記の条件を全て満たした場合のみ配置
可能と判断する。なお、目的機械に応じて、他の制約条
件が新たに加わる場合があることはいうまでもない。
【0085】最適ノードを仮配置したときは、現段階に
おいて仮配置されているノード集合を調べ、命令をさら
に配置できるか否かを判断する(S6)。判断の詳細に
ついては後述する。配置追加不能と判断したときはルー
プ2を終了する。
【0086】配置追加可能と判断したときは、最適ノー
ドの仮配置によって新たに配置候補となり得るノードを
配置候補ノードとして追加する(S7)。新たに配置候
補になり得るのは「この最適ノードに対応する命令のみ
を配置完了済みでないサクセッサとして持ち、かつ、最
適ノードに対応する命令との依存関係がデータ依存でな
い」命令に対応するノードである。すなわち、ここで新
たな配置候補になり得るのは、最適ノードに対応する命
令と同一サイクルで実行できるが、最適ノードに対応す
る命令よりも後のサイクルでは実行できない命令に対応
するノードである。
【0087】ループ2の実行終了後、仮配置されたノー
ドを配置ノードとして確定する(S9)。具体的には、
仮配置ノード集合に属するノードに対応する命令を元の
命令列から取り出し、実行境界付加部45に渡すための
新たな命令列に並べ替える。
【0088】このような処理によって、依存グラフに含
まれるノードは最後に実行すべきノードから配置される
ことになる。
【0089】実行境界付加部45は、ステップS10に
おいて配置が確定した命令群毎に実行境界を付加する。
【0090】<動作例>図10に示す本実施形態に係る
プログラム処理装置の特徴的な動作について、具体的な
命令を用いて説明する。
【0091】図14はコンパイラ上流部10から並列化
部40に渡された内部形式コードの一例を示す図であ
る。図14の内部形式コードはコンパイラ上流部10に
よって2個の基本ブロックA,Bに分割されている。
【0092】実行順序設定部41は図14の内部形式コ
ードを入力として受け取り、拡大基本ブロック並列化部
42に渡す順序を決定する。ここでは、プログラムの最
終から前に向かって順に、基本ブロックを実行単位に区
分するので、拡大基本ブロック並列化部42に渡す順序
は基本ブロックB、基本ブロックAの順になる。
【0093】<基本ブロックBに対する実行単位への区
分>依存関係解析部43は基本ブロックBに属する命令
を解析し、図15に示す依存グラフを生成する。図15
において、実線矢印はデータ依存関係を表しており、図
15は、命令「add r2,r1」が命令「mov
1,r1」に対してデータ依存関係があることを示して
いる。
【0094】命令並べ替え部44は図15の依存グラフ
を受け取り、図13のフローチャートに従って命令の並
び替えを行う。ループ1の1回目の実行において、命令
「add r2,r1」のみが配置候補として選択され
(S3)配置可能と判定されて(S5)配置が確定する
(S9)。ループ1の2回目の実行において、命令「m
ov 1,r1」のみが配置候補として選択され(S
3)配置可能と判定されて(S5)配置が確定する(S
9)。
【0095】実行境界付加部45は命令並べ替え部44
によるループ1の実行毎に、命令列に実行境界を付加す
る。すなわち、配置が確定した命令群毎に実行単位に区
分される。この結果、基本ブロックBにおける実行単位
は図16に示すようになる。
【0096】<基本ブロックAに対する実行単位への区
分>依存関係解析部43は基本ブロックAに属する命令
を解析し、図17に示す依存グラフを生成する。図17
において、実線矢印はデータ依存関係を表し、破線矢印
はデータ依存以外の依存関係を表している。基本ブロッ
クAの直後に基本ブロックBが存在するので、その先頭
実行単位に属する命令「mov 1,r1」を含めて依
存グラフを生成する。なお、命令「mov 1,r1」
は基本ブロックBに対する実行単位への区分においてす
でに配置されているので、図17の依存グラフでは黒丸
で示している。
【0097】命令並べ替え部44は図17の依存グラフ
を受け取り、図13のフローチャートに従って命令の並
び替えを行う。まずステップS1において、直後基本ブ
ロックすなわち基本ブロックBの先頭実行単位に属する
全ての命令を仮配置済とする。ここで仮配置済となるの
は命令「mov 1,r1」のみである。次に、未配置
ノードが存在するので(S2でYes)ループ1を実行
する。
【0098】ループ1の1回目の実行において、まず、
命令「mov 1,r1」と同一実行単位に配置し得る
命令からなる配置候補ノード集合を生成する(S3)
が、ここで同一実行単位に配置し得るのは他の命令に依
存されていない命令「bt c0,Label」のみで
ある。命令「bt c0,Label」は配置可能と判
定され(S5)仮配置される。この段階で、同一実行単
位にはさらに1個の命令が配置追加可能であるため、配
置追加可能と判定され(S6でyes)配置候補ノード
が追加される(S7)。ここでは命令「mov r4,
r5」と命令「mov 0,r1」が、命令「mov
1,r1」および「bt c0,Label」と同一実
行単位に配置可能であるので、配置候補ノードとして追
加される。
【0099】ステップS4に戻り、ここでは命令「mo
v r4,r5」が最適ノードとして選ばれるものとす
る。命令「mov r4,r5」は配置可能と判定され
て(S5)仮配置される。これで同一実行単位において
3命令全て確定したので、配置追加不可と判定して(S
6でno)配置ノードが確定される(S9)。
【0100】ループ1の2回目の実行において、残りの
3命令「mov 2,r4」,「mov 0,r1」,
「cmpeq c0,0,r0」が配置候補ノード集合
を構成する(S3)。図17から分かるように、これら
3個の命令には依存関係がないので、ループ2を3回繰
り返すことにより、これらの命令全てが仮配置され、確
定される(S9)。
【0101】実行境界付加部45は命令並び替え部44
によるループ1の実行毎に、命令列に実行境界を付加す
る。すなわち、配置が確定した命令群毎に、実行単位に
区分される。この結果、基本ブロックAにおける実行単
位は、基本ブロックBの先頭実行単位に属する命令すな
わち「mov 1,r1」と合わせて、図18に示すよ
うになる。
【0102】図19はオブジェクトコード生成部30か
ら出力されるオブジェクトコード60のうち図14の内
部形式コードに対応する部分を示す図である。従来は基
本ブロック境界に必ず実行境界が付加されていたが、本
実施形態によると、基本ブロック境界を跨いで実行単位
が構成されるので、図19に示すように、図14の内部
形式コードは3サイクルで実行される。
【0103】このように本実施形態によると、一の基本
ブロックを、その直後基本ブロックの先端実行単位に属
する命令と合わせて、並列実行可能な命令からなる実行
単位に区分するため、基本ブロック境界をまたぐ命令群
が単一の実行単位に構成される可能性が高くなる。目的
機械におけるプログラム実行のためのサイクル数を削減
することができ、従来よりもプログラムの実行速度を向
上させることができる。
【0104】なお、実行単位への区分を行う基本ブロッ
クの順序は、プログラムの先頭から後に向かう順として
もよい。また、着目基本ブロックの直前に位置する基本
ブロックを合併対象基本ブロックとしてもよい。すなわ
ち、本実施形態では、着目基本ブロックとその直後基本
ブロックの先頭実行単位とを命令並べ替え範囲とし、こ
の範囲内で最後に実行すべき命令から配置するものとし
たが、逆に、着目基本ブロックとその直前基本ブロック
の最終実行単位とを命令並べ替え範囲とし、この範囲内
で最初に実行すべき命令から配置するものとしてもよ
い。
【0105】(第2の実施形態の第1の変形例)実行順
序設定部41は、制御フロー解析やループ解析を行い、
最内ループに属する基本ブロックを優先的に拡大基本ブ
ロック並列化部42に与えてもよい。そして、最内ルー
プに属する基本ブロックの処理が全て終れば、その1つ
外側のループに属する基本ブロックを与えるようにす
る。この場合、最も実行頻度の高い最内ループのコード
が最適化されるので、プログラムの実行速度が向上す
る。
【0106】図20(a)はコンパイラ上流部10から
並列化部40に渡された内部形式コードの一例を示す図
である。この内部形式コードは3個の基本ブロックA,
B,Cからなり、基本ブロックBは最内ループを構成し
ている。図20(a)の内部形式コードに対して、図2
0(b)は第2の実施形態に係る処理の結果を、図20
(c)は本変形例に係る処理の結果を示している。図2
0(b),(c)から分かるように、最内ループを有す
る基本ブロックBを優先して最適化を行った結果、最内
ループの実行サイクル数が1サイクル短縮されている。
一般に、最内ループは数多く繰り返し実行されることが
期待できるので、本変形例によって、プログラム全体の
実行時間を短縮することができる。
【0107】(第2の実施形態の第2の変形例)拡大基
本ブロック並列化部42は、基本ブロックを実行単位に
区分する際に、その直後基本ブロックの先頭実行単位と
合わせて実行単位への区分を行うとともに、直後基本ブ
ロックの先頭実行単位を含めないで、他の基本ブロック
とは独立して実行単位への区分を行ってもよい。そし
て、これらの区分結果のうち、実行単位の個数が少ない
方を採用してもよい。
【0108】図20(a)の内部形式コードに対して、
直後基本ブロックの先頭実行単位を含めないで実行単位
への区分を行った結果は、図20(c)のようになる。
図20(b),(c)を比較すると、直後基本ブロック
の先頭実行単位を含めないで処理した方が実行サイクル
数が減少することが分かる。このため、本変形例の結果
としては、図20(c)を採用する。
【0109】なお、第1および第2の実施形態では、本
発明に係るプログラム処理を実現する形態をプログラム
処理装置として説明したが、同様のアルゴリズムを有す
るソフトウエアとして実現してもよい。また、同様のプ
ログラム処理を実現するためのプログラムをフロッピー
ディスク、ハードディスク、CD―ROM、MO、DV
Dなどのコンピュータ読み取り可能な記録媒体に記録
し、この記録媒体に記録したプログラムをコンピュータ
に実行させることによって、第1および第2の実施形態
に係るプログラム処理装置と同等の機能を実現すること
も可能である。
【0110】また、第1および第2の実施形態において
生成されたオブジェクトコードは、フロッピーディス
ク、ハードディスク、CD―ROM、MO、DVD、半
導体メモリなどの記憶媒体に記録して、目的機械に実行
させることができる。
【0111】
【発明の効果】以上のように本発明によると、基本ブロ
ック境界の直前および直後の実行単位は、同一サイクル
で実行可能であると判断されたときには、単一の実行単
位に合併される。または、一の基本ブロックの実行単位
への区分は、合併対象基本ブロックの前記一の基本ブロ
ックに最も近い実行単位に属する命令と合わせて行われ
るので、基本ブロック境界をまたぐ命令群が単一の実行
単位に構成される可能性が高くなる。このため、基本ブ
ロック境界をまたぐ命令群が並列に実行される可能性が
高まるので、目的機械におけるプログラムの実行速度が
向上する。
【図面の簡単な説明】
【図1】(a)〜(d)は本実施形態に係るプログラム
処理が対象とする目的機械の命令セットの例を示す図、
(e)は目的機械で実行される実行形式コードの一例を
示す図、(f)は目的機械の命令実行のイメージを示す
図である。
【図2】本発明の第1の実施形態に係るプログラム処理
装置の構成を示すブロック図である。
【図3】図2のプログラム処理装置が備える同時実行可
否判定部における処理手順を示すフローチャートであ
る。
【図4】図2のプログラム処理装置が備える基本ブロッ
ク境界並列化部が受ける内部形式コードの一例を示す図
である。
【図5】図4の内部形式コードに対する依存グラフであ
る。
【図6】図4の内部形式コードに対して生成されたオブ
ジェクトコードをアセンブラ表記で示す図である。
【図7】図2のプログラム処理装置が備える基本ブロッ
ク境界並列化部が受ける内部形式コードの一例を示す図
である。
【図8】図7の内部形式コードに対応する依存グラフで
ある。
【図9】図7の内部形式コードに対して生成されたオブ
ジェクトコードをアセンブラ表記で示す図である。
【図10】本発明の第2の実施形態に係るプログラム処
理装置の構成を示すブロック図である。
【図11】アセンブラコードの一例を示す図である。
【図12】図11のアセンブラコードに対する依存グラ
フである。
【図13】図10のプログラム処理装置が備える命令並
べ替え部における処理手順を示すフローチャートであ
る。
【図14】図10のプログラム処理装置が備える並列化
部が受け取る内部形式コードの一例を示す図である。
【図15】図14の基本ブロックBに対する依存グラフ
である。
【図16】図14の基本ブロックBに対する実行単位へ
の区分結果を示す図である。
【図17】図14の基本ブロックA、および基本ブロッ
クBの先頭実行単位に対する依存グラフである。
【図18】図14の基本ブロックA、および基本ブロッ
クBの先頭実行単位に対する実行単位への区分結果を示
す図である。
【図19】図14の内部形式コードに対して生成したオ
ブジェクトコードをアセンブラ表記で示した図である。
【図20】(a)は図10のプログラム処理装置が備え
る並列化部が受け取る内部形式コードの一例を示す図、
(b)は(a)の内部形式コードに対する第2の実施形
態に係る処理の結果を示す図。(c)は(a)の内部形
式コードに対する第2の実施形態の変形例に係る処理の
結果を示す図である。
【符号の説明】
1,2 プログラム処理装置 10 コンパイラ上流部 20,40 並列化部 21 基本ブロック内並列化部 22 基本ブロック境界並列化部 30 オブジェクトコード生成部 40 並列化部 42 拡大基本ブロック並列化部 50 ソースコード 60 オブジェクトコード

Claims (22)

    【特許請求の範囲】
  1. 【請求項1】 並列処理向けのプログラム処理方法であ
    って、 基本ブロックに分割されたプログラムコードを、基本ブ
    ロック毎に、並列実行可能な命令からなる実行単位に区
    分するステップと、 基本ブロック境界の直前および直後の実行単位を、同一
    サイクルで実行可能であると判断したときに、単一の実
    行単位に合併するステップとを備えたプログラム処理方
    法。
  2. 【請求項2】 請求項1記載のプログラム処理方法にお
    いて、 前記合併ステップは、 基本ブロック境界の直前および直後の実行単位に属する
    命令間の依存関係を解析するステップを備え、 解析した命令間の依存関係に基づいて、前記基本ブロッ
    ク境界の直前および直後の実行単位が単一の実行単位に
    合併可能か否かを判断することを特徴とするプログラム
    処理方法。
  3. 【請求項3】 請求項1記載のプログラム処理方法にお
    いて、 前記区分ステップは、基本ブロックの境界に、実行単位
    の境界であることを示す実行境界コードを付加するもの
    であり、 前記合併ステップは、基本ブロック境界の直前および直
    後の実行単位が同一サイクルで実行可能であると判断し
    たとき、その境界に付加されている実行境界コードを除
    去するものであることを特徴とするプログラム処理方
    法。
  4. 【請求項4】 請求項1記載のプログラム処理方法にお
    いて、 前記区分ステップは、 基本ブロックの先頭および最終の実行単位に属する命令
    として、当該プログラムを実行する目的機械における資
    源制約のゆるやかな命令を優先的に選択することを特徴
    とするプログラム処理方法。
  5. 【請求項5】 請求項4記載のプログラム処理方法にお
    いて、 前記区分ステップは、 基本ブロックの先頭および最終の実行単位に属する命令
    の選択の際に、前記目的機械において同一サイクルに1
    個しか実行できない命令の優先度を下げることを特徴と
    するプログラム処理方法。
  6. 【請求項6】 請求項1記載のプログラム処理方法にお
    いて、 前記区分ステップは、 基本ブロックの先頭および最終の実行単位に属する命令
    として、命令語長の短い命令を優先的に選択することを
    特徴とするプログラム処理方法。
  7. 【請求項7】 並列処理向けのプログラム処理方法であ
    って、 基本ブロックに分割されたプログラムコードを、基本ブ
    ロック毎に、並列実行可能な命令からなる実行単位に区
    分するステップを備え、 前記区分ステップは、 一の基本ブロックを実行単位に区分する際に、すでに実
    行単位に区分されており、かつ、前記一の基本ブロック
    に隣接する合併対象基本ブロックの、前記一の基本ブロ
    ックに最も近い実行単位に属する命令と合わせて、並列
    実行可能な命令からなる実行単位に区分することを特徴
    とするプログラム処理方法。
  8. 【請求項8】 請求項7記載のプログラム処理方法にお
    いて、 前記区分ステップは、 前記一の基本ブロックの直前に位置する基本ブロック
    を、前記合併対象基本ブロックとして用い、 前記一の基本ブロックを、前記合併対象基本ブロックの
    最終の実行単位に属する命令と併せて、実行単位に区分
    することを特徴とするプログラム処理方法。
  9. 【請求項9】 請求項7記載のプログラム処理方法にお
    いて、 前記区分ステップは、 前記一の基本ブロックの直後に位置する基本ブロック
    を、前記合併対象基本ブロックとして用い、 前記一の基本ブロックを、前記合併対象基本ブロックの
    先頭の実行単位に属する命令と併せて、実行単位に区分
    することを特徴とするプログラム処理方法。
  10. 【請求項10】 請求項7記載のプログラム処理方法に
    おいて、 前記区分ステップは、 プログラムの先頭から後に向かって順に、基本ブロック
    を実行単位に区分することを特徴とするプログラム処理
    方法。
  11. 【請求項11】 請求項7記載のプログラム処理方法に
    おいて、 前記区分ステップは、 プログラムの最終から前に向かって順に、基本ブロック
    を実行単位に区分することを特徴とするプログラム処理
    方法。
  12. 【請求項12】 請求項7記載のプログラム処理方法に
    おいて、 前記区分ステップは、 最内ループに含まれる基本ブロックを優先的に、実行単
    位に区分することを特徴とするプログラム処理方法。
  13. 【請求項13】 請求項7記載のプログラム処理方法に
    おいて、 前記区分ステップを第1の区分ステップとすると、 前記プログラムコードを、基本ブロック毎に、隣接する
    基本ブロックとは独立して、並列実行可能な命令からな
    る実行単位に区分する第2の区分ステップを備え、 前記第1および第2の区分ステップの実行結果を比較
    し、実行単位の個数が少ない方を、選択することを特徴
    とするプログラム処理方法。
  14. 【請求項14】 並列処理向けのプログラム処理装置で
    あって、 基本ブロックに分割されたプログラムコードを、基本ブ
    ロック毎に、並列実行可能な命令からなる実行単位に区
    分する基本ブロック内並列化部と、 基本ブロック境界の直前および直後の実行単位を、同一
    サイクルで実行可能であるときに、単一の実行単位に合
    併する基本ブロック境界並列化部とを備えたプログラム
    処理装置。
  15. 【請求項15】 並列処理向けコンパイルを実行するプ
    ログラム処理装置であって、 ソースコードを、基本ブロックに分割された中間形式コ
    ードに変換するコンパイラ上流部と、 前記コンパイラ上流部によって生成された中間形式コー
    ドを、並列実行可能な形式に変換する並列化部と、 前記並列化部によって形式変換された中間形式コード
    を、目的機械向けのオブジェクトコードに変換するオブ
    ジェクトコード生成部とを備え、 前記並列化部は、 基本ブロックに分割された中間形式コードを、基本ブロ
    ック毎に、並列実行可能な命令からなる実行単位に区分
    する基本ブロック内並列化部と、 基本ブロック境界の直前および直後の実行単位を、同一
    サイクルで実行可能であるときに、単一の実行単位に合
    併する基本ブロック境界並列化部とを備えていることを
    特徴とするプログラム処理装置。
  16. 【請求項16】 並列処理向けのプログラム処理装置で
    あって、 基本ブロックに分割されたプログラムコードを、基本ブ
    ロック毎に、並列実行可能な命令からなる実行単位に区
    分する拡大基本ブロック並列化部を備え、 前記拡大基本ブロック並列化部は、 一の基本ブロックを実行単位に区分する際に、すでに実
    行単位に区分されており、かつ、前記一の基本ブロック
    に隣接する合併対象基本ブロックの、前記一の基本ブロ
    ックに最も近い実行単位に属する命令と合わせて、並列
    実行可能な命令からなる実行単位に区分することを特徴
    とするプログラム処理装置。
  17. 【請求項17】 並列処理向けコンパイルを実行するプ
    ログラム処理装置であって、 ソースコードを、基本ブロックに分割された中間形式コ
    ードに変換するコンパイラ上流部と、 前記コンパイラ上流部によって生成された中間形式コー
    ドを、並列実行可能な形式に変換する並列化部と、 前記並列化部によって形式変換された中間形式コード
    を、目的機械向けのオブジェクトコードに変換するオブ
    ジェクトコード生成部とを備え、 前記並列化部は、基本ブロックに分割された中間形式コ
    ードを、基本ブロック毎に、並列実行可能な命令からな
    る実行単位に区分する拡大基本ブロック並列化部を備
    え、 前記拡大基本ブロック並列化部は、 一の基本ブロックを実行単位に区分する際に、すでに実
    行単位に区分されており、かつ、前記一の基本ブロック
    に隣接する合併対象基本ブロックの、前記一の基本ブロ
    ックに最も近い実行単位に属する命令と合わせて、並列
    実行可能な命令からなる実行単位に区分するものである
    ことを特徴とするプログラム処理装置。
  18. 【請求項18】 コンピュータに、並列処理向けのプロ
    グラム処理を実行させるためのプログラムを記録した記
    録媒体であって、 基本ブロックに分割されたプログラムコードを、基本ブ
    ロック毎に、並列実行可能な命令からなる実行単位に区
    分するステップと、 基本ブロック境界の直前および直後の実行単位を、同一
    サイクルで実行可能であるときに、単一の実行単位に合
    併するステップとを含むプログラム処理をコンピュータ
    に実行させるプログラムを記録した記録媒体。
  19. 【請求項19】 コンピュータに、並列処理向けコンパ
    イルを実行するプログラム処理を実行させるためのプロ
    グラムを記録した記録媒体であって、 ソースコードを、基本ブロックに分割された中間形式コ
    ードに変換するステップと、 前記中間形式コードを、基本ブロック毎に、並列実行可
    能な命令からなる実行単位に区分するステップと、 基本ブロック境界の直前および直後の実行単位を、同一
    サイクルで実行可能であるときに、単一の実行単位に合
    併するステップと、 前記区分および合併ステップによって処理した中間形式
    コードを、目的機械向けのオブジェクトコードに変換す
    るステップとを含むプログラム処理をコンピュータに実
    行させるプログラムを記録した記録媒体。
  20. 【請求項20】 コンピュータに、並列処理向けのプロ
    グラム処理を実行させるためのプログラムを記録した記
    録媒体であって、 基本ブロックに分割されたプログラムコードを、基本ブ
    ロック毎に、並列実行可能な命令からなる実行単位に区
    分するステップを備え、 前記区分ステップは、 一の基本ブロックを実行単位に区分する際に、すでに実
    行単位に区分されており、かつ、前記一の基本ブロック
    に隣接する合併対象基本ブロックの、前記一の基本ブロ
    ックに最も近い実行単位に属する命令と合わせて、並列
    実行可能な命令からなる実行単位に区分するものである
    プログラム処理をコンピュータに実行させるプログラム
    を記録した記録媒体。
  21. 【請求項21】 コンピュータに、並列処理向けコンパ
    イルを実行するプログラム処理を実行させるためのプロ
    グラムを記録した記録媒体であって、 ソースコードを、基本ブロックに分割された中間形式コ
    ードに変換するステップと、 基本ブロックに分割された中間形式コードを、基本ブロ
    ック毎に、並列実行可能な命令からなる実行単位に区分
    するステップと、 前記区分ステップによって処理した中間形式コードを、
    目的機械向けのオブジェクトコードに変換するステップ
    とを備え、 前記区分ステップは、 一の基本ブロックを実行単位に区分する際に、すでに実
    行単位に区分されており、かつ、前記一の基本ブロック
    に隣接する合併対象基本ブロックの、前記一の基本ブロ
    ックに最も近い実行単位に属する命令と合わせて、並列
    実行可能な命令からなる実行単位に区分するものである
    プログラム処理をコンピュータに実行させるプログラム
    を記録した記録媒体。
  22. 【請求項22】 並列処理向けの命令列が記録された記
    録媒体であって、 並列実行される命令からなる実行単位に区分されてお
    り、 前記実行単位のうち少なくとも1つは、基本ブロック境
    界をまたいで、構成されている命令列が記録された記録
    媒体。
JP11004843A 1999-01-12 1999-01-12 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 Pending JP2000207223A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP11004843A JP2000207223A (ja) 1999-01-12 1999-01-12 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
US09/478,989 US6760906B1 (en) 1999-01-12 2000-01-07 Method and system for processing program for parallel processing purposes, storage medium having stored thereon program getting program processing executed for parallel processing purposes, and storage medium having stored thereon instruction set to be executed in parallel
US10/873,252 US20040230770A1 (en) 1999-01-12 2004-06-23 Method and system for processing program for parallel processing purposes, storage medium having stored thereon program getting program processing executed for parallel processing purposes, and storage medium having stored thereon instruction set to be executed in parallel

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11004843A JP2000207223A (ja) 1999-01-12 1999-01-12 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体

Publications (1)

Publication Number Publication Date
JP2000207223A true JP2000207223A (ja) 2000-07-28

Family

ID=11594977

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11004843A Pending JP2000207223A (ja) 1999-01-12 1999-01-12 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体

Country Status (2)

Country Link
US (2) US6760906B1 (ja)
JP (1) JP2000207223A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004511043A (ja) * 2000-10-05 2004-04-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ リターゲッタブルコンパイルシステム及び方法
GB2415812A (en) * 2004-06-30 2006-01-04 Nec Corp Compiler for producing an optimised parallel program using execution cycles between fork source and destination points

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
JP4542722B2 (ja) * 2001-04-25 2010-09-15 富士通株式会社 命令処理方法
US7103881B2 (en) * 2002-12-10 2006-09-05 Intel Corporation Virtual machine to provide compiled code to processing elements embodied on a processor device
US7254809B2 (en) * 2003-07-30 2007-08-07 International Business Machines Corporation Compilation of unified parallel C-language programs
US20050108695A1 (en) * 2003-11-14 2005-05-19 Long Li Apparatus and method for an automatic thread-partition compiler
US7487496B2 (en) * 2004-12-02 2009-02-03 International Business Machines Corporation Computer program functional partitioning method for heterogeneous multi-processing systems
US7478376B2 (en) * 2004-12-02 2009-01-13 International Business Machines Corporation Computer program code size partitioning method for multiple memory multi-processing systems
JP2006338616A (ja) * 2005-06-06 2006-12-14 Matsushita Electric Ind Co Ltd コンパイラ装置
US7765536B2 (en) * 2005-12-21 2010-07-27 Management Services Group, Inc. System and method for the distribution of a program among cooperating processors
US8387033B2 (en) * 2005-12-21 2013-02-26 Management Services Group, Inc. System and method for the distribution of a program among cooperating processing elements
US8387034B2 (en) * 2005-12-21 2013-02-26 Management Services Group, Inc. System and method for the distribution of a program among cooperating processing elements
US8904151B2 (en) * 2006-05-02 2014-12-02 International Business Machines Corporation Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US7865872B2 (en) * 2006-12-01 2011-01-04 Murex S.A.S. Producer graph oriented programming framework with undo, redo, and abort execution support
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
JPWO2008072334A1 (ja) * 2006-12-14 2010-03-25 富士通株式会社 コンパイル方法及びコンパイラ
US20080225950A1 (en) * 2007-03-13 2008-09-18 Sony Corporation Scalable architecture for video codecs
US8468504B2 (en) * 2007-12-28 2013-06-18 Streaming Networks (Pvt.) Ltd. Method and apparatus for interactive scheduling of VLIW assembly code
JP5278336B2 (ja) * 2008-02-15 2013-09-04 日本電気株式会社 プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
KR101522444B1 (ko) * 2008-10-24 2015-05-21 인터내셔널 비지네스 머신즈 코포레이션 소스 코드 처리 방법, 시스템, 및 프로그램
US9087195B2 (en) * 2009-07-10 2015-07-21 Kaspersky Lab Zao Systems and methods for detecting obfuscated malware
US8661424B2 (en) * 2010-09-02 2014-02-25 Honeywell International Inc. Auto-generation of concurrent code for multi-core applications
US8646050B2 (en) * 2011-01-18 2014-02-04 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
US11188656B2 (en) * 2018-07-27 2021-11-30 Silicon Laboratories Inc. Secure software system for microcontroller or the like and method therefor
US20240028330A1 (en) * 2022-07-20 2024-01-25 Vmware, Inc. Methods and subsystems that manage code changes submitted for processing by an automated application-development-and-release-management system

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2078315A1 (en) * 1991-09-20 1993-03-21 Christopher L. Reeve Parallel processing apparatus and method for utilizing tiling
EP0551090B1 (en) * 1992-01-06 1999-08-04 Hitachi, Ltd. Computer having a parallel operating capability
US5721854A (en) * 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
US5557761A (en) * 1994-01-25 1996-09-17 Silicon Graphics, Inc. System and method of generating object code using aggregate instruction movement
US6081880A (en) * 1995-03-09 2000-06-27 Lsi Logic Corporation Processor having a scalable, uni/multi-dimensional, and virtually/physically addressed operand register file
US6105124A (en) * 1996-01-26 2000-08-15 Intel Corporation Method and apparatus for merging binary translated basic blocks of instructions
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
TW357318B (en) * 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
JP3234552B2 (ja) * 1997-09-30 2001-12-04 松下電器産業株式会社 最適化装置及びコンピュータ読取可能な記録媒体
US6988183B1 (en) * 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
JP2000132404A (ja) * 1998-10-22 2000-05-12 Matsushita Electric Ind Co Ltd 命令列最適化装置
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
US6389587B1 (en) * 1999-02-04 2002-05-14 Sun Microsystems, Inc. User interface for developing and executing data flow programs and methods, apparatus, and articles of manufacture for optimizing the execution of data flow programs
US6449711B1 (en) * 1999-02-04 2002-09-10 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs
JP3810631B2 (ja) * 2000-11-28 2006-08-16 富士通株式会社 情報処理プログラムを記録した記録媒体
US6978451B2 (en) * 2001-05-31 2005-12-20 Esmertec Ag Method for fast compilation of preverified JAVA bytecode to high quality native machine code

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004511043A (ja) * 2000-10-05 2004-04-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ リターゲッタブルコンパイルシステム及び方法
GB2415812A (en) * 2004-06-30 2006-01-04 Nec Corp Compiler for producing an optimised parallel program using execution cycles between fork source and destination points

Also Published As

Publication number Publication date
US20040230770A1 (en) 2004-11-18
US6760906B1 (en) 2004-07-06

Similar Documents

Publication Publication Date Title
JP2000207223A (ja) 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP3327818B2 (ja) プログラム変換装置及び記録媒体
US6820223B2 (en) Processor, compiling apparatus, and compile program recorded on a recording medium
US7856629B2 (en) Compiler apparatus
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JP2004511043A (ja) リターゲッタブルコンパイルシステム及び方法
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
US20080082805A1 (en) Automated synthesis apparatus and method
Gyllenhaal et al. Optimization of machine descriptions for efficient use
JP2000132404A (ja) 命令列最適化装置
JP2001273138A (ja) プログラム変換装置および方法
JP2003005980A (ja) コンパイル装置およびコンパイルプログラム
JP3473391B2 (ja) プログラム処理方法、プログラム処理装置及び記録媒体
JP3553845B2 (ja) プロセッサ、コンパイラ、コイパイル方法及び記録媒体
JP4006887B2 (ja) コンパイラ、プロセッサおよび記録媒体
CN116303226A (zh) 粗粒度可重构阵列数据流处理器的高效执行方法及系统
JPH07105015A (ja) コンパイル方式
JP2002318689A (ja) 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法
JPH11203145A (ja) 命令スケジューリング方法
JP2000276356A (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JP4768214B2 (ja) コンパイル方法、及びデータ処理装置。
JP2001202252A (ja) プログラム処理方法および記録媒体
JPH10207854A (ja) コンパイラ命令並列化方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051220

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080410

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080527

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080715

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080819