JP2003091415A - データ処理方法と装置およびデータ変換方法 - Google Patents

データ処理方法と装置およびデータ変換方法

Info

Publication number
JP2003091415A
JP2003091415A JP2001282002A JP2001282002A JP2003091415A JP 2003091415 A JP2003091415 A JP 2003091415A JP 2001282002 A JP2001282002 A JP 2001282002A JP 2001282002 A JP2001282002 A JP 2001282002A JP 2003091415 A JP2003091415 A JP 2003091415A
Authority
JP
Japan
Prior art keywords
instruction
arithmetic processing
unit
data
data processing
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
JP2001282002A
Other languages
English (en)
Inventor
Kazuaki Okamoto
一晃 岡本
Hideo Hirono
英雄 廣野
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.)
Sanyo Electric Co Ltd
Original Assignee
Sanyo Electric 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 Sanyo Electric Co Ltd filed Critical Sanyo Electric Co Ltd
Priority to JP2001282002A priority Critical patent/JP2003091415A/ja
Publication of JP2003091415A publication Critical patent/JP2003091415A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 並列処理のための依存解析は煩雑であり、そ
のためのハードウエアは大きなコストを伴う。 【解決手段】 マイクロプロセッサ10は制御部20と
第0演算処理部22、第1演算処理部24、第2演算処
理部26、第3演算処理部28をもつ。予めコンパイル
の際、ある程度の数の命令を相互依存度の低い形でブロ
ック化しておく。命令発行部64は各命令列をいずれか
の演算処理部へ発行する。命令列を単位とした発行を実
施することで演算処理部間の依存度を下げ、それぞれが
最高速にて処理できる時間を増やす。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、データ処理技術と
それに利用可能なデータ変換技術に関する。本発明はと
くに、CPUおよびマイクロプロセッサなど、実行可能
なデータ形式に変換されたプログラムを実行してデータ
を処理するデータ処理方法と装置、および、そのための
コンパイラなど、実行可能なデータ形式のプログラムを
生成する方法に関する。
【0002】
【従来の技術】一部のマイクロプロセッサの動作周波数
はギガヘルツの領域へ達し、周波数レースは、いまのと
ころ90年代後半に懸念されたような衰えを見せていな
い。今後も周波数の向上に対する努力は続けられると考
えられる。
【0003】しかしながら、マイクロプロセッサの性能
は動作周波数のみで決まるものでなく、場合によっては
それ以上に内部のアーキテクチャに依存する。以前より
知られる代表的な高速化手法として、複数の演算処理機
構を並列に動作させ、同時に複数の命令を実行するもの
がある。これを実現するプロセッサとして、スーパスカ
ラ方式やVLIW(Very Long Instruction Word)方式
のものが知られている。
【0004】スーパスカラ方式は、順次実行されるべき
複数の命令を解析し、命令間の依存関係を検査して同時
に実行可能な命令を動的に検出し、複数の命令を複数の
演算処理機構へ同時に発行して並列に実行するものであ
る。実行時間の異なる複数の命令を動的にスケジューリ
ングするタイミング的要請を満たすよう、命令発行制御
機能はハードウェア化されている。
【0005】一方、VLIW方式は、並列に実行できる
命令をコンパイル時に静的に解析し、各演算処理機構へ
の命令を連結して長命令形式をとる。例えば演算処理機
構が4個存在する場合、それら4個のための命令をひと
つずつ組み合せてひとつの長命令を生成し、これを命令
メモリへ格納する。プロセッサは実行時に長命令形式の
命令をフェッチして分解し、4つの命令をそれぞれ対応
する演算処理機構へ発行して並列に実行する。命令の依
存解析はソフトウェアで静的に行い、スーパスカラ方式
で必要となる複雑な依存解析回路を不要にしている。
【0006】
【発明が解決しようとする課題】しかしながら、上述の
スーパスカラ方式およびVLIW方式は、プログラムを
命令レベルで並列化し、複数の演算処理機構に対し命令
ごとに発行制御をするものである。命令ごとにデータ依
存関係を認識して発行を管理する処理は、ことばでは簡
単であっても、実際には非常に煩瑣かつ困難な処理であ
る。また、近接する命令間の依存度は低くなく、演算処
理機構の数に対して並列化の実効性が頭打ちになる傾向
がある。
【0007】とくにスーパスカラ方式はすべての命令の
解析を動的に行うため、命令間の依存解析回路や複数の
命令を同時に発行する回路が複雑になり、並列度を大き
くするにつれ回路規模が増大し、動作周波数の低下を招
いている。さらに、この並列制御部分が並列度ごとに固
有の回路になるため、一度設計してしまうと容易に演算
処理機構の数を追加または削減できない。
【0008】一方、VLIW技術では、例えばメモリア
クセス命令のように動的に実行時間が変化する命令に対
して静的にスケジューリングをすることが難しく、コン
パイラ技術を著しく困難にしている。しかも、本来は独
立であって命令ごとの同期が不要な複数の演算処理機構
に対し、同期的に命令を発行しなければならないので、
トータルのオーバーヘッドは無視できず、動作効率の向
上に限界がある。
【0009】
【課題を解決するための手段】本発明のある態様はデー
タ処理方法に関する。この方法は、複数の演算処理部に
対して命令を発行し、それらの演算処理部において順次
データを処理するものであり、各演算処理部に対する命
令の発行単位を複数の命令からなる命令列としたうえ
で、いずれかの演算処理部に向けて発行するものであ
る。以下、本明細書で単に「命令列」というとき、本発
明において各演算処理部にいちどに発行される複数の命
令からなるブロックを指すものとする。「命令列」は
「ブロック」ともよぶ。
【0010】前述のごとく、命令それぞれを各演算処理
部に発行する場合、一般には依存関係がなかなか断ちが
たい。本方法は、ある程度の数の命令からなる命令列を
ひとつの単位とすることによって、それら命令列間の依
存関係が緩和され、または依存関係が問題になる機会自
体が減るという本発明者の知見に基づく。
【0011】本発明の別の態様は、データ処理装置に関
する。この装置は、少なくとも命令発行を制御する制御
部と、少なくとも演算を行う複数の演算処理部とを含
み、制御部は、実行可能な命令を複数の演算処理部に対
して発行する命令発行部を含み、この命令発行部は、そ
れぞれの演算処理部に対して個別に、複数の連続した命
令から構成される命令列を単位として命令を発行する。
「個別に」とは、同一の命令列をコピーして複数の演算
処理部に発行しないことをいう。
【0012】このデータ処理装置はマイクロプロセッサ
でもよく、制御部はその命令フェッチャーとデコーダ、
演算処理部はエクゼキューションユニットを備えてもよ
い。命令列に含まれる命令数は固定でも可変でもよく、
可変の場合は動的な変更がされてもよい。
【0013】制御部は、プログラムを格納しているメモ
リから命令を取込む命令読出部と、取込んだ命令を演算
処理部に供給する命令供給部とを有してもよく、その場
合、命令読出部は命令列を取り込み、命令供給部は、そ
の命令列を複数の演算処理部へ供給してもよい。
【0014】制御部は、プログラムを格納しているメモ
リ上の位置を示すポインタ指示部を有してもよく、この
ポインタ指示部は、命令発行部が発行する命令列の先頭
位置および最終位置のポインタを複数の演算処理部に供
給してもよい。そのとき、複数の演算処理部は、それぞ
れ独立に命令読出部と命令解析部を有し、ポインタ指示
部から供給されたポインタにしたがい命令列の取込みと
解析を独立して行ってもよい。ポインタは命令の形で供
給されてもよい。
【0015】別のケースとして、ポインタ指示部は命令
列の先頭位置のポインタのみを複数の演算処理部に供給
してもよい。この場合、複数の演算処理部は、供給され
たポインタにしたがい命令列をその先頭から順次取り込
んで解析し、その命令列の最後の命令を検出してもよ
い。最後の命令は特別にその旨を示すものであってもよ
いし、既存の命令に識別子を付したものであってもよ
い。この態様では、最終位置を示すポインタを送る必要
がない。
【0016】制御部は、複数の演算処理部のそれぞれか
ら命令列の実行終了を示す通知を受ける命令列実行の終
了検知部を有してもよく、この通知を参照してつぎの命
令列の発行を制御してもよい。制御内容として、発行先
となる演算処理部および発行タイミングがある。
【0017】制御部は、条件分岐を含む命令流制御を行
う分岐制御部を含み、この分岐制御部は複数の演算処理
部による処理とは独立して命令流制御を統括的に行って
もよい。また制御部は、ループなどのカウントのために
簡単な加算器とレジスタを含んでいてもよいし、これら
を含まず演算処理部のひとつを用いて処理を行ってもよ
い。
【0018】このデータ処理装置はさらに、複数の演算
処理部における演算の実行に必要なデータを保持するた
めのレジスタファイルをさらに含み、このレジスタファ
イルを構成する複数のレジスタの実装個所をこの装置の
中で物理的に分散してもよい。このとき、複数のレジス
タを複数のサブレジスタファイルに分割し、各サブレジ
スタファイルを複数の演算処理部のひとつと組にして、
同じ組に入る演算処理部とサブレジスタファイルとを近
接する位置に実装してもよい。
【0019】この場合、所定のサブレジスタファイルに
含まれるレジスタを利用する命令が含まれるブロックを
そのサブレジスタファイルと組になる演算処理部へ発行
すれば、処理効率の改善が実現可能になる。
【0020】このとき命令発行部は、命令列を実行する
ために利用するレジスタが含まれるサブレジスタファイ
ルに応じて、その命令列を発行すべき演算処理部を選定
してもよい。その選定は自主的に行ってもよいし、コン
パイル時の指定にしたがってもよい。
【0021】さらに、異なる組に属するサブレジスタフ
ァイル間でデータ転送を行うための転送路を設けてもよ
い。このとき、命令発行部は、異なる組に属するサブレ
ジスタファイル間のデータ転送の完了を待って複数の演
算処理部の処理の同期をとってもよい。この態様では、
通常は各演算処理部とそれが支配するサブレジスタファ
イルによるローカルな処理で演算効率を高めつつ、演算
処理部相互に処理の結果を参照しあうことができる。
【0022】本発明のさらに別の態様は、データ変換方
法に関する。この方法は、コンパイラまたはコンバータ
に好適であり、ソースプログラムを、複数の演算処理部
を備えたデータ処理装置で実行可能な命令へ変換してメ
モリへ格納するもので、複数の演算処理部のいずれかに
よって、ひとつの単位として実行すべき複数の命令から
なる命令列の先頭位置を示す命令を生成し、その命令を
その他の命令とともにメモリへ格納する。
【0023】さらにこの方法は、複数の演算処理部のい
ずれかを指定する機能を有する命令を生成し、その命令
をその他の命令とともにメモリへ格納してもよい。この
命令は独立していてもよいし、他の命令に演算処理部の
指定を組み込むものでもよい。
【0024】さらにこのとき、命令列を実行すべきレジ
スタがデータ処理装置において実装されている物理的な
位置を参照して複数の演算処理部のうちいずれかを指定
してもよい。前述のごとく、演算処理部とサブレジスタ
ファイルが組になっている場合、この方法は有益であ
る。
【0025】以上の態様のいずれかによれば、比較的小
さな回路規模で大きな並列実効効率を得ることができ
る。すなわち、一連の処理の中から並列実行可能な命令
を判定するのではなく、異なる一連の処理単位で並列実
行可能な命令列を判定するので、依存解析その他の処理
が容易になる。また、命令列単位のスケジューリングは
コンパイラその他のデータ変換方法が静的に行うことが
できるため、依存解析回路などの複雑な回路が不要とな
り、回路規模や動作周波数などの面でも好都合である。
【0026】一方、動的に実行時間が決まる命令、例え
ばメモリアクセスを含む命令が含まれていても、命令列
単位で動的に同期をとる機構をもつことにより、静的な
スケジューリングが容易になり、コンパイラの負担が軽
減される。
【0027】なお、以上の構成要素の任意の組合せ、本
発明の表現を方法、装置、システム、記録媒体、コンピ
ュータプログラムなどの間で変換したものもまた、本発
明の態様として有効である。
【0028】
【発明の実施の形態】図1は、実施の形態に係るデータ
処理装置であるマイクロプロセッサ10の構成を示す。
マイクロプロセッサ10はデータバス14を介して命令
メモリ12から命令を読み込む。ここでは、命令メモリ
12とデータバス14はマイクロプロセッサ10の外部
に描いているが、命令メモリ12は内蔵キャッシュメモ
リであってもよく、その場合はマイクロプロセッサ10
に命令メモリ12とデータバス14が内蔵される。
【0029】マイクロプロセッサ10は、全体を統括的
に制御する制御部20と、演算を担当する4個の第0演
算処理部22、第1演算処理部24、第2演算処理部2
6、第3演算処理部28を有する。これら4個の演算処
理部を以下単に「演算処理部」ともよぶ。制御部20と
演算処理部は内部バス70で接続されている。
【0030】制御部20は命令のフェッチ、すなわち読
込のアドレスを保持するプログラムカウンタ60と、そ
のアドレスに対して実際にフェッチを行う命令読出部6
2と、フェッチされた命令をブロック単位で命令列とし
ていずれかの演算処理部へ発行するための指示を出す命
令発行部64と、その指示を受けて、実際に命令列を目
的の演算処理部へ送出する命令供給部66と、フェッチ
された命令のうち分岐に関するものは演算処理部へ渡さ
ずに制御部20内で統括的に実行するための分岐制御部
68を有する。分岐は一般に並列化の概念になじまない
ため、制御部20で判断および実行する。分岐命令かど
うかの判断は命令発行部64または分岐制御部68が行
うため、それらの一方には、少なくとも分岐命令をデコ
ードするための回路を設ける。分岐命令の実行結果はプ
ログラムカウンタ60へ通知され、必要に応じてカウン
タが更新される。なお、命令間依存解析をハードウエア
で実施する場合、命令発行部64は図示しない解析回路
を有する。この回路の解析には既知の手法を用いること
ができるが、命令単位ではなく、命令列を単位とする解
析を実行する。
【0031】実例は後述するが、この実施の形態におけ
る特徴は、命令発行部64がある程度長い命令列を単位
として各演算処理部へ命令発行をする点にある。命令列
を決めるための依存解析は、前述のごとく命令発行部6
4が実行してもよいが、ここではコンパイラで実行する
場合を述べる。これは回路規模低減の面では望ましい。
【0032】プログラムにおいて、一般に互いに近い命
令の依存関係は遠いものよりも強い。この点に着目し、
コンパイラはまず所定数の命令をブロックとして切り出
し、異なる演算処理部に担当させるべきブロック間で依
存関係があるかどうか検査する。依存関係がある場合、
それがブロックの切れ目で発生する場合はブロック化が
最適であるが、ブロックの途中で発生する場合はそのブ
ロックを一気に実行することができないため、ブロック
の切り方を変更し、ブロックの切れ目に依存関係が発生
するよう調整していく。
【0033】一方、いちばん最初に切り出したブロック
間に、その切れ目において依存関係がない場合、そのブ
ロックはさらに長くできるため、依存関係がブロックの
切れ目に生じるようになるまで後続の命令を追加してブ
ロックを拡張していく。これら一連の処理の結果、命令
発行部64および命令供給部66によって各演算処理部
に送出されるブロックは、他の演算処理部の結果を待た
ずに最速処理が可能になる。このため、従来のごとく命
令単位で依存関係を確認した方法に比べ、より容易に高
効率の並列化が実現する。
【0034】第0演算処理部22は、自身に発行された
命令列を受信する命令受信部32と、その命令列をデコ
ードする解析部42と、その命令列を順次実行する実行
部52を有する。この構造は第1演算処理部24、第2
演算処理部26、第3演算処理部28でも同様であるた
め、以下、主に第0演算処理部22について説明する。
内部バス70は第0演算処理部22〜第3演算処理部2
8に共通のバスでもよいし、命令供給部66とそれらを
個別に接続する専用バスでもよい。共通バスの場合、命
令受信部32は自ら実行すべき命令列を選択して解析部
42へ伝搬せしめるセレクタやバッファでもよい。専用
バスの場合、命令受信部32は論理的には不要である
が、必要に応じてバッファなどとする。この部分の設計
自由度は大きく、実装の事情から定めればよい。
【0035】解析部42は、受信した命令列をデコード
し、これを実行部52が実行する。解析部42によるデ
コードと実行部52による実行は、並列化の効果とし
て、プログラム全体の1/4程度を担当すれば済む。
【0036】以上、この実施の形態によれば、並列処理
されるプロセス間の依存関係を希薄にすることができ、
処理効率を高めることができる。また、依存関係が問わ
れる機会自体が減ることも効率改善に結びつくし、一般
に命令発行部64による依存解析の時間マージンも増加
する。
【0037】図2は別の実施の形態に係るマイクロプロ
セッサ10を示す。図1と対応する構成には同じ符号を
与え、以下相違点を中心に説明する。本実施の形態に係
る命令発行部64は、命令列を直接発行することに替え
て、その命令列を特定可能なポインタを発行する。ポイ
ンタはその命令列の最初の命令(以下単に先頭命令とも
よぶ)の命令メモリ12におけるアドレスである。命令
列の最後の命令(以下単に末尾命令ともよぶ)の指定
は、1)これもポインタで指定する、2)末尾命令とし
て特別な命令を準備する、3)末尾命令を特別にひとつ
設けず、既存の命令で最後の位置に来たものに識別子を
与えて末尾命令として機能せしめる、の方法がある。い
ずれの場合も、そうした特別な命令、すなわちポインタ
を示す命令および末尾を示す命令(以下、これらをまと
めて特定命令ともよぶ)は、コンパイラが予め生成し、
プログラムコードの中の適切な位置に組み込んでおく。
【0038】ポインタ指示部120は、命令発行部64
から指示されたポインタを各演算処理部へ送出する。こ
の実施の形態では、内部バス70は命令のデータではな
く、ポインタのデータを伝搬する。制御部20における
他の新しい構成は終了検知部122であり、これは各演
算処理部における命令列の実行終了を検知する。実行終
了は各演算処理部からそれぞれ1本出る合計4本の終了
通知信号124を介して通知される。各演算処理部にお
ける命令列の実行終了タイミングは終了検知部122か
ら命令発行部64へ通知され、ここで演算処理部間の同
期が採られ、以降の命令列の発行タイミングが調整され
る。終了通知信号124をアクティブにするために特別
な命令(以下終了通知命令ともいう)がコンパイラとマ
イクロプロセッサ10の間で定められており、実行部5
2等がその命令を実行したとき、終了通知信号124が
アサートされる。末尾命令は終了通知命令を兼ねること
ができる。命令メモリ12とマイクロプロセッサ10を
媒介するデータバス14は、各演算処理部の近傍まで延
長されている。第0演算処理部22の入口には命令列読
出部102が設けられ、これはポインタ指示部120か
ら受信したポインタにしたがって自ら命令メモリ12へ
アクセスし、データバス14を介して直接命令列を取り
込む。取り込まれた命令列は解析部42と実行部52に
よって実行される。
【0039】以上この実施の形態によれば、図1とは異
なるデータバス構造を採用できるため、実装の状況に応
じて適宜図1、図2いずれかの構造を選択することがで
きる。また、内部バス70を流れるデータはポインタだ
けであり、そのトラフィックを軽減することができる。
さらに、演算処理部間の同期を容易に採ることができ
る。
【0040】これらの実施の形態による処理効率をさら
に高めるために、レジスタファイルの配置を考慮するこ
とができる。レジスタファイルは汎用レジスタを中心と
する複数のレジスタの集合体であり、実施の形態ではこ
れを4個のサブレジスタファイルに分け、それらをそれ
ぞれひとつの演算処理部に近接させて実装する。以下、
演算処理部とそれに近接するサブレジスタファイルを
「組」と表現する。
【0041】図3は4個の組の位置関係を模式的に示
す。ここではもとのレジスタファイルのうち汎用レジス
タがr0〜63の64個であり、第0演算処理部22〜
第3演算処理部28のそれぞれに対して第0サブレジス
タファイル202〜第3サブレジスタファイル208が
組とされている。第0サブレジスタファイル202、第
1サブレジスタファイル204、第2サブレジスタファ
イル206、第3サブレジスタファイル208はそれぞ
れレジスタr0〜15、r16〜31、r32〜47、
r48〜63を有する。
【0042】各組の演算処理部とサブレジスタファイル
は、それぞれ専用のバスで接続されていてもよいし、全
体がひとつの共通バスに接続されていてもよい。前者の
場合、後述のごとく演算処理部間で演算結果をやりとり
するための転送路を設けてもよい。後者の場合、各組の
間にトランシーバを入れることにより、通常はそれぞれ
の組の中で閉じたデータ転送が行われてもよい。
【0043】いずれの場合も、ある演算処理部で利用す
るレジスタがそれと組になるサブレジスタファイルの中
に存在すれば処理効率が高く、コンパイラでそうなるよ
う命令を決めることができる。たとえば、3個のレジス
タを使う命令列は、レジスタr0〜15の中の3個を利
用するようコンパイルすれば、第0演算処理部22へ実
行させると効率がよい。同様に、依存関係がないふたつ
の命令列は、それぞれが第0サブレジスタファイル20
2と第1サブレジスタファイル204の中で閉じたレジ
スタを利用するようコンパイルすることにより、第0演
算処理部22と第1演算処理部24へ並列して効果的に
発行することができる。
【0044】なお、コンパイラで対応しない場合、命令
発行部64が実際に利用されるレジスタを検査し、その
命令列をそれらのレジスタがより多数含まれる組の演算
処理部へ発行してもよい。もちろんその際、その演算処
理部が前の命令列をデコード中でふさがっている場合、
空いている他の演算処理部に命令列を発行してもよく、
現実にはケースバイケースの判断を行うことになる。
【0045】図4と図5は、演算処理部間でデータを転
送しあうための転送路のふたつの構成を示す。図4で
は、各演算処理部はそれぞれ専用の転送路によって別の
演算処理部と接続されている。同図では、第i演算処理
部と第j演算処理部の間の転送路を「Bij」と表記し
ている。一方、図5では、各演算処理部は共通の転送路
CBに接続されている。当然ながら、図4の形は転送効
率で勝り、図5の形はハードウエアの簡素化で勝る。
【0046】サブレジスタファイルを図3のように物理
的に分散させ、かつ、図4、図5のいずれかの形と組み
合わせることにより、演算の局面ではレジスタの偏在性
を利用して処理効率を高めつつ、レジスタ間の相互参照
が必要なときは転送路によって処理の完結を保証するこ
とができる。
【0047】図6は実施の形態に係るコンパイラの処理
手順を示す。コンパイラはまずソースプログラムを読み
込み(S10)、並列化のための依存解析を行う(S1
2)。つづいて、ブロックの途中で依存関係が生じない
よう、言い換えれば、ブロックの切れ目にしか依存関係
が生じないように命令列をブロック化する(S14)。
この後、各演算処理部と組になるサブレジスタファイル
に含まれるレジスタの構成を参照して使用すべきレジス
タを決め(S16)。この際、複数のブロックがなるべ
く異なる演算処理部に振り分けられるよう使用するレジ
スタを分散させる。最後に、特定命令を生成してこれを
適切な位置に組み込み(S18)、コンパイルを終了す
る。
【0048】以下、プログラムの実例をもとに、実施の
形態の動作を説明する。プログラム1はソースプログラ
ムの例で、ここでは配列を順次計算する。 並列処理を考えない一般的な方法でプログラム1を実行
する際のアセンブラ表記はプログラム2のようになる。
/*と*/で囲まれた部分はコメントである。 [プログラム2] mov r0, #x0 /* x pointer */ mov r1, #y0 /* y pointer */ mov r2, #a0 /* a pointer */ mov r3, #0 /* i */ L0: ld r4, (r0) ld r5, (r1) ld r6, (r2) mul r5, r6 /* r5 <- r5 * r6 */ add r4, r5 /* r4 <- r4 + r5 */ st (r1), r4 add r0, #4 /* x pointer increment by 4 bytes */ add r1, #4 /* y pointer increment by 4 bytes */ add r2, #4 /* a pointer increment by 4 bytes */ add r3, #1 /* i counter increment by 1 byte */ cmp r3, #3 blt L0 /* if less than 3 then goto L0 */ end すなわち、プログラム2では、iの値をカウンタとして
乗算と加算をループで実行している。
【0049】つぎに、このアセンブラ表記を実施の形態
に係るコンパイラによって生成した例をプログラム3に
示す。各行の左端の数字は説明のために与えた行番号で
ある。 プログラム3における主要な行は以下の意味をもつ。第
1〜13行は、制御部20が自ら管理するメインのプロ
グラム部分であり、現実には第0演算処理部22を利用
している。第5行はラベルL1を先頭とする命令列を第
1演算処理部24に発行する特定命令である。つづいて
iをインクリメントし、その値を第2演算処理部26と
組になるサブレジスタファイルに属するレジスタにコピ
ーしたうえで、第8行においてラベルL2先頭とする命
令列を第2演算処理部26へ発行している。同様に第1
1行においてラベルL3先頭とする命令列を第3演算処
理部28へ発行している。この結果、並列計算が開始さ
れる。
【0050】第12行の命令は終了通知信号124の状
態を第1演算処理部24、第2演算処理部26、第3演
算処理部28について検査するもので、これら3つの演
算処理部における処理がすべて終了したとき、処理は第
13行へ移行して完了する。したがって、第12行の命
令は同期をとるために利用される。
【0051】第14〜20行、第21〜33行、第34
〜46行は、関数のようなプログラムの部分であり、そ
れぞれ第1演算処理部24、第2演算処理部26、第3
演算処理部28によって時間差をもって並列に実行され
る。それぞれの演算処理部で利用するレジスタは、その
演算処理部と組になるサブレジスタファイルに含まれる
ようコンパイル時に配慮されている。第20行は第1演
算処理部24によるひとつの命令列の末尾命令であり、
マイクロプロセッサ10が図2の構成の場合、命令発行
部64は第14行の先頭命令のポインタに加え、末尾命
令であるrtnのポインタも発行するか、または、先頭
命令のポインタのみを発行する。末尾命令のポインタが
なくとも、第1演算処理部24は実行の途上で末尾命令
であることがわかるrtnに出会うため、自ら処理を取
りやめることができる。
【0052】rtn命令はそれ自体末尾を示す特別な命
令であるが、場合により、そのひとつ前の命令に識別子
を加えて末尾を示してもよい。たとえば、第19行の
「st」命令を変形し、マシンコードが一部異なる「s
te」命令を生成してrtnを省いてもよい。
【0053】レジスタをローカル表現する場合、プログ
ラム4のように、さらに簡単な表現となる。ここでは、
レジスタの絶対番号を一旦大文字Rで示すことにしたう
えで、その各サブレジスタファイルにおける相対番号を
小文字rで示すとする。例えば、第1サブレジスタファ
イル204の最初のレジスタはR16であるが、これは
第1演算処理部24におけるローカル表現ではr0とな
る。第0演算処理部22をU0、第1演算処理部24を
U1などと表記すれば、R16=(U1,r0)、R3
4=(U2,r2)などを意味し、それぞれローカルな
場ではU1などが省略される。
【0054】 [プログラム4] /* 制御部で実行する部分 */ 1: mov r0, #x0 /* x pointer */ 2: mov r1, #y0 /* y pointer */ 3: mov r2, #a0 /* a pointer */ 4: mov r3, #0 /* i */ 5: cpy R16, r0, 4 /* register copy (R16-19 <- r0-3) */ 6: iss u1, L0 /* issue L0 on unit1 */ 7: add r0, #4 8: add r1, #4 9: add r2, #4 10: add r3, #1 11: cpy R32, r0, 4 /* (R32-35 <- r0-3) */ 12: iss u2, L0 /* issue L0 on unit2 */ 13: add r0, #4 14: add r1, #4 15: add r2, #4 16: add r3, #1 17: cpy R48, r0, 4 /* (R48-51 <- r0-3) */ 18: iss u3, L0 /* issue L0 on unit3 */ 19: chk u1, u2, u3 /* 終了判定 */ 20: end /* 第1〜3演算処理部で共通に実行する部分 */ 21: L0: ld r3, (r0) 22: ld r4, (r1) 23: ld r5, (r2) 24: mul r4, r5 25: add r3, r4 26: st (r0), r3 27: rtn /* return (終了信号) */ 以上、この実行内容はプログラム3同等である。
【0055】最後に、図4、図5で採用した転送路を利
用するプログラムの例を挙げる。プログラム5はソース
プログラムである。 これはいわゆる積和演算であり、並列処理を考えない一
般的な手法でプログラム5を実行する場合、そのアセン
ブラ表記は例えばプログラム6になる。 [プログラム6] mov r0, #a0 /* a pointer */ mov r1, #x0 /* x pointer */ mov r2, #0 /* y */ mov r3, #0 /* i */ L0: ld r4, (r0) ld r5, (r1) mul r4, r5 /* r4 <- r4 * r5 */ add r2, r4 /* r2 <- r2 + r4 */ add r0, #4 /* x pointer increment */ add r1, #4 /* y pointer increment */ add r3, #1 /* i counter increment */ cmp r3, #20 blt L0 /* if less than 20 then goto L0 */ mov r6, #y st (r6), r3 end 一方、実施の形態によって同様の処理を並列化する際、
実施の形態のコンパイラは以下のプログラム7を生成す
る。ここでは全体で20回の計算を第0演算処理部22
〜第3演算処理部28がそれぞれ独立して5回ずつ行
い、その結果をそれぞれレジスタr4〜7へ書き戻す。
命令発行部64は、レジスタr4〜7がすべて更新され
るまで待ち、すべてが更新されたら同期が成立して残り
の処理を行う。レジスタへの書込完了の確認は、前述の
終了通知信号124で行ってもよいし、転送路を経て有
効なデータが流されたとき、これを受信側の演算処理部
でフラグを立てて記録する方法で行ってもよい。いずれ
にしても、この確認は第7行の命令で行っている。
【0056】 [プログラム7] /* 制御部で実行する部分 */ 1: mov r0, #a0 /* a pointer */ 2: mov r1, #x0 /* x pointer */ 3: iss u0, L0 4: iss u1, L1 5: iss u2, L2 6: iss u3, L3 7: chk r4, 4 /* wait for r4-7 overwrite */ 8: add r4, r5 9: add r6, r7 10: add r4, r6 11: mov r2, #y 12: st (r2), r4 13: end /* 第0演算処理部で実行する部分 */ L0: mov r0, R0 mov r1, R1 ld r4, 0(r0) /* a[i] */ ld r5, 4(r0) /* a[i+1] */ ld r6, 8(r0) /* a[i+2] */ ld r7, 12(r0) /* a[i+3] */ ld r8, 16(r0) /* a[i+4] */ ld r9, 0(r1) /* x[i] */ ld r10, 4(r1) /* x[i+1] */ ld r11, 8(r1) /* x[i+2] */ ld r12, 12(r1) /* x[i+3] */ ld r13, 16(r1) /* x[i+4] */ mul r4, r9 mul r5, r10 mul r6, r11 mul r7, r12 mul r8, r13 add r5, r6 add r7, r8 add r5, r7 add r4, r5 rtn R4, r4 /* R4 <- r4 */ /* 第1演算処理部で実行する部分 */ L1: mov r0, R0 mov r1, R1 add r0, #20 add r1, #20 ld r4, 0(r0) /* a[i] */ ld r5, 4(r0) /* a[i+1] */ ld r6, 8(r0) /* a[i+2] */ ld r7, 12(r0) /* a[i+3] */ ld r8, 16(r0) /* a[i+4] */ ld r9, 0(r1) /* x[i] */ ld r10, 4(r1) /* x[i+1] */ ld r11, 8(r1) /* x[i+2] */ ld r12, 12(r1) /* x[i+3] */ ld r13, 16(r1) /* x[i+4] */ mul r4, r9 mul r5, r10 mul r6, r11 mul r7, r12 mul r8, r13 add r5, r6 add r7, r8 add r5, r7 add r4, r5 rtn R5, r4 /* R5 <- r4 */ /* 第2演算処理部で実行する部分 */ L2: mov r0, R0 mov r1, R1 add r0, #40 add r1, #40 ld r4, 0(r0) /* a[i] */ ld r5, 4(r0) /* a[i+1] */ ld r6, 8(r0) /* a[i+2] */ ld r7, 12(r0) /* a[i+3] */ ld r8, 16(r0) /* a[i+4] */ ld r9, 0(r1) /* x[i] */ ld r10, 4(r1) /* x[i+1] */ ld r11, 8(r1) /* x[i+2] */ ld r12, 12(r1) /* x[i+3] */ ld r13, 16(r1) /* x[i+4] */ mul r4, r9 mul r5, r10 mul r6, r11 mul r7, r12 mul r8, r13 add r5, r6 add r7, r8 add r5, r7 add r4, r5 rtn R6, r4 /* R6 <- r4 */ /* 第3演算処理部で実行する部分 */ L3: mov r0, R0 mov r1, R1 add r0, #60 add r1, #60 ld r4, 0(r0) /* a[i] */ ld r5, 4(r0) /* a[i+1] */ ld r6, 8(r0) /* a[i+2] */ ld r7, 12(r0) /* a[i+3] */ ld r8, 16(r0) /* a[i+4] */ ld r9, 0(r1) /* x[i] */ ld r10, 4(r1) /* x[i+1] */ ld r11, 8(r1) /* x[i+2] */ ld r12, 12(r1) /* x[i+3] */ ld r13, 16(r1) /* x[i+4] */ mul r4, r9 mul r5, r10 mul r6, r11 mul r7, r12 mul r8, r13 add r5, r6 add r7, r8 add r5, r7 add r4, r5 rtn R7, r4 /* R7 <- r4 */ 以上、本発明を実施の形態をもとに説明した。この実施
の形態は例示であり、それらの各構成要素や各処理プロ
セスの組合せにいろいろな変形例が可能なこと、またそ
うした変形例も本発明の範囲にあることは当業者に理解
されるところである。
【0057】例えば、実施の形態ではデータ処理装置の
例としてマイクロプロセッサを挙げたが、これは必ずし
もワンチップの装置に限る意図ではない。プリント基板
に複数のプロセッサが搭載された装置その他の装置にお
いても本発明は当然有効である。
【0058】実施の形態では、特定命令を生成するデー
タ変換方法をコンパイラで実施したが、それに限る必要
はない。たとえば、一旦通常のコンパイラでコンパイル
されたコードを実施の形態に特徴的なコードへ再変換す
るコンバータであってもよい。
【0059】
【発明の効果】本発明によれば、比較的実現が容易な構
成で高い並列処理効率を得ることができる。
【図面の簡単な説明】
【図1】 実施の形態に係るマイクロプロセッサの構成
図である。
【図2】 別の実施の形態に係るマイクロプロセッサの
構成図である。
【図3】 マイクロプロセッサの各演算処理部とサブレ
ジスタファイルの位置関係を示す図である。
【図4】 サブレジスタファイル間の転送路の構成を模
式的に示す図である。
【図5】 サブレジスタファイル間の転送路の別の構成
を模式的に示す図である。
【図6】 実施の形態に係るコンパイラの処理手順を示
すフローチャートである。
【符号の説明】
10 マイクロプロセッサ、 12 命令メモリ、 1
4 データバス、 20 制御部、 22 第0演算処
理部、 24 第1演算処理部、 26 第2演算処理
部、 28 第3演算処理部、 64 命令発行部、
124 終了通知信号、 202 第0サブレジスタフ
ァイル、 204 第1サブレジスタファイル、 20
6 第2サブレジスタファイル、 208 第3サブレ
ジスタファイル。
───────────────────────────────────────────────────── フロントページの続き Fターム(参考) 5B013 AA11 AA20 DD01 DD04 5B033 AA01 AA10 AA14 CA17 DD01 DD02 DD04 DD09 5B081 CC21 CC30 CC32

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 少なくとも命令発行を制御する制御部
    と、少なくとも演算を行う複数の演算処理部とを含み、 前記制御部は、実行可能な命令を前記複数の演算処理部
    に対して発行する命令発行部を含み、 この命令発行部は、それぞれの演算処理部に対して個別
    に、複数の連続した命令から構成される命令列を単位と
    して命令を発行することを特徴とするデータ処理装置。
  2. 【請求項2】 前記制御部は、プログラムを格納してい
    るメモリから命令を取込む命令読出部と、取込んだ命令
    を前記演算処理部に供給する命令供給部とを有し、 前記命令読出部は、連続した複数の命令からなる命令列
    を取り込み、前記命令供給部は、その命令列を前記複数
    の演算処理部へ供給することを特徴とする請求項1に記
    載のデータ処理装置。
  3. 【請求項3】 前記制御部は、プログラムを格納してい
    るメモリ上の位置を示すポインタ指示部を有し、このポ
    インタ指示部は、前記命令発行部が発行する命令列の先
    頭位置および最終位置のポインタを前記複数の演算処理
    部に供給することを特徴とする請求項1に記載のデータ
    処理装置。
  4. 【請求項4】 前記複数の演算処理部は、それぞれ独立
    に命令読出部と命令解析部を有し、前記ポインタ指示部
    から供給されたポインタにしたがい命令列の取込みと解
    析を独立して行うことを特徴とする請求項3に記載のデ
    ータ処理装置。
  5. 【請求項5】 前記制御部は、プログラムを格納してい
    るメモリ上の位置を示すポインタ指示部を有し、このポ
    インタ指示部は、前記命令発行部が発行する命令列の先
    頭位置のポインタのみを前記複数の演算処理部に供給す
    ることを特徴とする請求項1に記載のデータ処理装置。
  6. 【請求項6】 前記複数の演算処理部は、それぞれ独立
    に命令読出部と命令解析部を有し、前記ポインタ指示部
    から供給されたポインタにしたがい命令列をその先頭か
    ら順次取り込んで解析し、その命令列の最後の命令を検
    出することを特徴とする請求項5に記載のデータ処理装
    置。
  7. 【請求項7】 前記制御部は、前記複数の演算処理部の
    それぞれから命令列の実行終了を示す通知を受ける終了
    検知部を有し、この通知を参照してつぎの命令列の発行
    を制御することを特徴とする請求項1〜6のいずれかに
    記載のデータ処理装置。
  8. 【請求項8】 前記制御部は、条件分岐を含む命令流制
    御を行う分岐制御部を含み、この分岐制御部は前記複数
    の演算処理部による処理とは独立して命令流制御を統括
    的に行うことを特徴とする請求項1〜7のいずれかに記
    載のデータ処理装置。
  9. 【請求項9】 前記複数の演算処理部における演算の実
    行に必要なデータを保持するためのレジスタファイルを
    さらに含み、このレジスタファイルを構成する複数のレ
    ジスタの実装個所を当該データ処理装置の中で物理的に
    分散したことを特徴とする請求項1〜8のいずれかに記
    載のデータ処理装置。
  10. 【請求項10】 前記複数のレジスタを複数のサブレジ
    スタファイルに分割し、サブレジスタファイルのそれぞ
    れを前記複数の演算処理部のひとつと組にしたうえで、
    同じ組に入る演算処理部とサブレジスタファイルとを当
    該データ処理装置の中で近接する位置に実装したことを
    特徴とする請求項9に記載のデータ処理装置。
  11. 【請求項11】 前記命令発行部は、命令列を実行する
    ために利用するレジスタが含まれるサブレジスタファイ
    ルに応じて、その命令列を発行すべき演算処理部を選定
    することを特徴とする請求項10に記載のデータ処理装
    置。
  12. 【請求項12】 異なる組に属するサブレジスタファイ
    ル間でデータ転送を行うための転送路を設けたことを特
    徴とする請求項9または10に記載のデータ処理装置。
  13. 【請求項13】 前記命令発行部は、前記異なる組に属
    するサブレジスタファイル間のデータ転送の完了を待っ
    て前記複数の演算処理部の処理の同期をとることを特徴
    とする請求項12に記載のデータ処理装置。
  14. 【請求項14】 ソースプログラムを、複数の演算処理
    部を備えたデータ処理装置で実行可能な命令へ変換して
    メモリへ格納する方法において、 前記複数の演算処理部のいずれかによって、ひとつの単
    位として実行すべき複数の命令からなる命令列の先頭位
    置を示す命令を生成し、その命令をその他の命令ととも
    に前記メモリへ格納することを特徴とするデータ変換方
    法。
  15. 【請求項15】 前記命令列の終了位置を示す命令を別
    途生成し、前記メモリへ格納することを特徴とする請求
    項14に記載のデータ変換方法。
  16. 【請求項16】 前記複数の演算処理部のいずれかを指
    定する機能を有する命令を生成し、その命令をその他の
    命令とともに前記メモリへ格納することを特徴とする請
    求項14または15に記載のデータ変換方法。
  17. 【請求項17】 前記命令列を実行すべきレジスタが前
    記データ処理装置において実装されている物理的な位置
    を参照して前記複数の演算処理部のうちいずれかを指定
    することを特徴とする請求項16に記載のデータ変換方
    法。
  18. 【請求項18】 複数の演算処理部に対して命令を発行
    し、それらの演算処理部において順次データを処理する
    方法において、それぞれの演算処理部に対する命令の発
    行単位を複数の命令からなる命令列としたうえで、いず
    れかの演算処理部に向けて発行することを特徴とするデ
    ータ処理方法。
JP2001282002A 2001-09-17 2001-09-17 データ処理方法と装置およびデータ変換方法 Pending JP2003091415A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001282002A JP2003091415A (ja) 2001-09-17 2001-09-17 データ処理方法と装置およびデータ変換方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001282002A JP2003091415A (ja) 2001-09-17 2001-09-17 データ処理方法と装置およびデータ変換方法

Publications (1)

Publication Number Publication Date
JP2003091415A true JP2003091415A (ja) 2003-03-28

Family

ID=19105718

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001282002A Pending JP2003091415A (ja) 2001-09-17 2001-09-17 データ処理方法と装置およびデータ変換方法

Country Status (1)

Country Link
JP (1) JP2003091415A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018521427A (ja) * 2015-07-30 2018-08-02 ホアウェイ・テクノロジーズ・カンパニー・リミテッド 可変レーンアーキテクチャのためのシステムおよび方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001092663A (ja) * 1999-09-17 2001-04-06 Sanyo Electric Co Ltd データ処理装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001092663A (ja) * 1999-09-17 2001-04-06 Sanyo Electric Co Ltd データ処理装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018521427A (ja) * 2015-07-30 2018-08-02 ホアウェイ・テクノロジーズ・カンパニー・リミテッド 可変レーンアーキテクチャのためのシステムおよび方法
US10691463B2 (en) 2015-07-30 2020-06-23 Futurewei Technologies, Inc. System and method for variable lane architecture
US10884756B2 (en) 2015-07-30 2021-01-05 Futurewei Technologies, Inc. System and method for variable lane architecture

Similar Documents

Publication Publication Date Title
US5881308A (en) Computer organization for multiple and out-of-order execution of condition code testing and setting instructions out-of-order
EP1296227B1 (en) Valid instruction dispatching and execution
US9329866B2 (en) Methods and apparatus for adapting pipeline stage latency based on instruction type
US7664928B1 (en) Method and apparatus for providing user-defined interfaces for a configurable processor
JP5209933B2 (ja) データ処理装置
JP2004171573A (ja) 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ
JPH11249897A (ja) Nウェイ分岐を有するスーパースカラまたは超長命令語コンピュータにおける次の命令を選択する方法および装置
JP2004512599A (ja) ディジタル信号処理装置
US7747990B2 (en) Processors and compiling methods for processors
US5710912A (en) Method and apparatus for enabling a computer system to adjust for latency assumptions
JP3146707B2 (ja) 並列演算機能を有する計算機
JPH1097423A (ja) ループ処理の並列実行制御に適したレジスタ構成を有するプロセッサ
JP4589305B2 (ja) Ilp及びtlpを利用する再構成可能なプロセッサアレイ
JP2003091415A (ja) データ処理方法と装置およびデータ変換方法
JP2001092661A (ja) データ処理装置
Karim et al. The Hyperprocessor: A template System-on-Chip architecture for embedded multimedia applications
JP3640855B2 (ja) プロセッサ
JP2001051845A (ja) アウトオブオーダー実行方式
Dwyer III A multiple, out-of-order, instruction issuing system for superscalar processors
KR20130108878A (ko) 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법
Arvind et al. A fully asynchronous superscalar architecture
Shiau et al. Adoptability and effectiveness of microcode compaction algorithms in superscalar processing
JP3743155B2 (ja) パイプライン制御型計算機
US20230342153A1 (en) Microprocessor with a time counter for statically dispatching extended instructions
US6704855B1 (en) Method and apparatus for reducing encoding needs and ports to shared resources in a processor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071203

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100413

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100810