(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-11
(45)【発行日】2023-01-19
(54)【発明の名称】情報処理装置、情報処理プログラム、及び情報処理方法
(51)【国際特許分類】
G06F 9/318 20060101AFI20230112BHJP
G06F 9/38 20060101ALI20230112BHJP
【FI】
G06F9/318 C
G06F9/38 350B
(21)【出願番号】P 2019016819
(22)【出願日】2019-02-01
【審査請求日】2021-11-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100087480
【氏名又は名称】片山 修平
(72)【発明者】
【氏名】田渕 晶大
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平11-073327(JP,A)
【文献】特開2002-099348(JP,A)
【文献】特表2005-538450(JP,A)
【文献】特表2005-510792(JP,A)
【文献】特開2014-146311(JP,A)
【文献】欧州特許出願公開第02759932(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/318
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
複数の命令を含む命令列を取得する取得部と、
前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する作成部と、
前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う削除部と、
前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない前記候補を選択する選択部と、
を有することを特徴とする情報処理装置。
【請求項2】
前記作成部は、前記命令列に前記nop命令が連続して出現している場合には、連続した前記nop命令を1つの前記wait命令に置換することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記規定数は、後続の前記命令の繰り返しを指示する繰り返し命令が許容する前記後続の命令の上限数であることを特徴とする請求項1に記載の情報処理装置。
【請求項4】
複数の命令を含む命令列を取得する処理と、
前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する処理と、
前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う処理と、
前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない前記候補を選択する処理と、
をコンピュータに実行させるための情報処理プログラム。
【請求項5】
複数の命令を含む命令列を取得する処理と、
前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する処理と、
前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う処理と、
前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない前記候補を選択する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理プログラム、及び情報処理方法に関する。
【背景技術】
【0002】
プロセッサにおける命令のスループットを高める方式としてパイプライン方式がある。パイプライン方式では、命令フェッチ、命令デコード、命令実行、メモリ参照、及びレジスタへの書き込みの各ステージに命令の実行ステージを分ける。そして、複数の命令を各ステージに連続して投入することにより、プロセッサ内において複数の命令を並列的に実行し、プログラムの実行時間を短縮する。
【0003】
そのパイプライン方式では、正しい実行結果が得られない原因となる様々なハザードが発生し得る。そのハザードの一つにデータハザードがある。データハザードは、先行命令がその結果をまだレジスタに書き込んでいないにも関わらず、先行命令の結果を利用する後続命令がそのレジスタを読み出してしまうハザードである。
【0004】
データハザードを回避する方法としてフォワーディングがある。フォワーディングは、先行命令がその結果をレジスタに書き込む前に、その結果を後続命令に供給する技術である。これによりデータハザードは解消されるものの、フォワーディングを行うための配線をプロセッサに設ける必要があり、プロセッサのハードウェア構造が複雑化してしまう。
【0005】
また、フォワーディングを行わずに、パイプラインをストールさせてデータハザードを回避する方法もある。ストールは、先行命令と後続命令との間にnop(no operation)命令を挿入することにより、先行命令がその結果をレジスタに書き込むまで後続命令をパイプラインに投入しない技術である。
【0006】
但し、ストールによりデータハザードを回避する方法には、プログラムの実行時間を低減するという点で改善の余地がある。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平11-73327号公報
【文献】特開2001-350632号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
一側面によれば、本発明は、プログラムの実行時間を低減することを目的とする。
【課題を解決するための手段】
【0009】
一側面によれば、複数の命令を含む命令列を取得する取得部と、前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する作成部と、前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う削除部と、前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない前記候補を選択する選択部とを有する情報処理装置が提供される。
【発明の効果】
【0010】
一側面によれば、プログラムの実行時間を低減することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1(a)、(b)は、命令の実行サイクル数について模式的に示す図である。
【
図2】
図2は、
図1(a)、(b)の命令列の各々の命令数と実行サイクル数とを示す表である。
【
図3】
図3は、本実施形態に係るターゲットプロセッサのハードウェア構成図である。
【
図4】
図4は、本実施形態に係る情報処理装置のハードウェア構成図である。
【
図5】
図5は、本実施形態に係る情報処理装置21の機能を示す機能構成図である。
【
図6】
図6は、本実施形態に係る取得部が取得する命令列の一例を示す図である。
【
図7】
図7は、本実施形態に係る作成部が命令列の候補を作成する作成方法について示す図である。
【
図8】
図8は、本実施形態に係る削除部が候補の命令列からnop命令とwait命令とを削除する方法について示す図である。
【
図9】
図9は、本実施形態に係る各候補の命令列の実行サイクル数を模式的に示す図である。
【
図10】
図10は、本実施形態において候補ごとに得られた実行サイクル数と命令数とを示す図である。
【
図11】
図11は、本実施形態に係る情報処理方法について示すフローチャート(その1)である。
【
図12】
図12は、本実施形態に係る情報処理方法について示すフローチャート(その2)である。
【
図13】
図13(a)は、本実施形態の例に係る命令列を示す図であり、
図13(b)は、この命令列に含まれる各命令の依存関係を示す図である。
【
図14】
図14(a)は、
図13(a)の命令列に対して本実施形態を適用することで命令数が削減された命令列を示す図であり、
図14(b)は、第1の比較例に係る命令列を示す図であり、
図14(c)は、第2の比較例に係る命令列を示す図である。
【
図15】
図15は、本実施形態、第1の比較例、及び第2の比較例の各々の命令列に含まれる命令数と、これらの命令列を1回実行したときの実行サイクル数とを示す図である。
【発明を実施するための形態】
【0012】
本実施形態の説明に先立ち、本願発明者が検討した事項について説明する。
【0013】
ハードウェア構造の複雑化を招くフォワーディングを採用せずにデータハザードを回避するにはパイプラインをストールさせればよい。ストールは、パイプラインを一時的に停止する技術であって、先行命令と後続命令との間にnop命令を挿入することで実現し得る。nop命令は、パイプラインレジスタ、レジスタファイル、及びメインメモリ等の内容を変更させない命令である。これにより、nop命令が存在するステージでは上記の各レジスタやメインメモリの内容が変化しないため、パイプラインを停止するストールを行うことができる。
【0014】
但し、nop命令は、発行してから1クロックサイクルで完了してしまうため、ストールさせるクロックサイクル数に相当する個数のnop命令が必要となり、プログラム全体の命令数が増えてしまう。
【0015】
特に、命令セットの中には、後続命令の個数に上限数が設けられている命令があり、nop命令によって後続命令の個数がその上限数を超えてしまうおそれがある。このように上限数が設けられている命令としては、例えばDLUアーキテクチャにおけるrep命令や、X86アーキテクチャにおけるloop命令とloopcc命令とがある。
【0016】
このうち、rep命令は、後続命令の繰り返しを指示する命令であり、「rep n, m」という書式で記述される。第1引数の「n」は、繰り返しの対象となる命令の個数を表す整数値である。また、第2引数の「m」は、繰り返しの回数を表す整数値である。DLUにおいては第1引数の「n」の上限値は12である。よって、rep命令は、12個よりも多い個数の後続命令を繰り返して実行することはできない。
【0017】
命令列におけるnop命令の個数を削減するには、nop命令をwait命令に置換すればよい。wait命令は、先行する全ての命令が完了するのを待つ命令であり、nop命令と同様にパイプラインをストールさせることができる。また、wait命令は、1回の発行でこのようにパイプラインをストールすることができるため、nop命令を使用する場合と比較して命令数を削減できる。
【0018】
但し、本願発明者が検討したところ、単純にnop命令をwait命令に置換したのでは、命令列全体の実行サイクル数がかえって増大することが明らかとなった。これについて
図1(a)、(b)を参照しながら説明する。
【0019】
図1(a)、(b)は、命令の実行サイクル数について模式的に示す図である。
【0020】
このうち、
図1(a)は、nop命令によりパイプラインをストールさせる命令列1を示す図である。
【0021】
この命令列1は3つの命令A、B、Cを有しており、クロックサイクルの進行と共に上の命令から順に実行される。
【0022】
なお、命令A、Bは、いずれも命令を発行してから完了するまで4クロックサイクルを要するものとする。また、命令Cは、命令Aに依存しており、命令Aが書き込みを行ったレジスタを読み出すものとする。よって、命令Aと命令Cとの間でパイプラインをストールさせないとデータハザードが生じることになる。これについては
図1(b)の命令列2でも同様である。
【0023】
パイプラインをストールさせるために、この命令列1ではnop命令を命令Bと命令Cとの間に連続して2つ挿入している。なお、nop命令は、1クロックサイクルで完了するものとする。
【0024】
これにより、命令Aが完了してから命令Cが開始するようになり、データハザードを回避することができる。但し、nop命令を2つ挿入したことにより、命令列1に含まれる命令数は5個と長くなってしまう。
【0025】
一方、
図1(b)は、wait命令によりパイプラインをストールさせる命令列2を示す図である。
【0026】
wait命令は、全ての先行命令が完了するまで後続命令の開始を待つ命令である。また、wait命令は、1回発行するだけでこの機能を実現できる。この例では、wait命令に対する先行命令は命令A、Bである。よって、命令A、Bの両方が完了した後に命令Cが開始されるようになり、データハザードを回避することができる。
【0027】
このように、wait命令は1回の発行のみでパイプラインをストールさせることができるため、nop命令を使用する命令列1(
図1(a))と比較して命令列2の命令数を少なくすることができる。
【0028】
但し、wait命令を使うと、命令Aが開始してから命令Cが完了するまで6クロックサイクル必要となり、nop命令を使用する命令列1(
図1(a))と比較してプログラム全体の実行サイクル数が増えてしまう。
【0029】
図2は、
図1(a)、(b)の命令列1、2のそれぞれの命令数と実行サイクル数とを示す表である。
【0030】
図2に示すように、nop命令のみでストールを行う命令列1は、wait命令でストールを行う命令列2よりも命令数が多くなる。そのため、この例よりも命令数が多いプログラムでは、rep命令が繰り返して実行可能な後続命令数の上限値を命令数が超えてしまい、rep命令でループ処理を実行できなくなるおそれがある。
【0031】
また、rep命令を使用しない場合であっても、全体の命令数が多くなることでメモリ使用量が増大してしまう。そのため、組み込み機器等のようにメモリサイズが小さい機器向けのアプリケーションプログラムをメモリに格納できないおそれもある。
【0032】
一方、wait命令でストールを行う命令列2では、命令列1よりも命令数を削減することができる。
【0033】
但し、実行サイクル数が逆に増加してしまい、プログラムの実行時間が長くなってしまう。
【0034】
以下に、命令数を削減しつつ、プログラムの実行時間が長くなるのを抑制することが可能な本実施形態について説明する。
【0035】
(本実施形態)
[ターゲットプロセッサ]
図3は、本実施形態に係るターゲットプロセッサのハードウェア構成図である。
【0036】
このターゲットプロセッサ11は、例えば前述のDLUアーキテクチャの命令セットに対してパイプライン処理が可能なプロセッサである。また、ターゲットプロセッサ11は、インオーダ実行により命令列を処理するプロセッサであり、命令列の先頭から順に命令が実行される。
【0037】
この例では、ターゲットプロセッサ11は、命令フェッチ部12、命令デコード部13、実行部14、及び書き込み部15を有する。これらの各部は、半導体基板上に形成されたレジスタや演算回路等であり、それぞれパイプライン処理のIF(Instruction Fetch)、ID(Instruction Decode)、EX(Execution)、及びWB(Write Back)の各ステージに対応する。
【0038】
このうち、IFステージは、命令列に含まれる命令を命令フェッチ部12が順にフェッチするステージである。また、IDステージは、命令デコード部13が命令フェッチ部12から命令を受け取り、その命令をデコードするステージである。
【0039】
EXステージは、命令デコード部13がデコードした命令に従い、実行部14が算術演算や論理演算をするステージである。なお、これらの演算で使用するデータは、不図示のレジスタファイルに予め書き込まれている。
【0040】
そして、WBステージは、EXステージにおいて実行部14が出力した演算結果を書き込み部15がレジスタファイルに書き込むステージである。
【0041】
このようなターゲットプロセッサ11においては、データハザードを回避するためのフォワーディングライン16がない。フォワーディングライン16は、WBステージに入力される前のデータをEXステージに供給する配線である。そのような配線を省くことで、ターゲットプロセッサ11のハードウェア構造が複雑になるのを抑制することができる。
【0042】
このようにフォワーディングライン16がないプロセッサとしては、前述のDLUの他にMIPS R2000、MIPS R3000、及びTexas Instruments製のC6000 VLIW DSP familyもあり、これらをターゲットプロセッサ11としてもよい。
【0043】
また、以下では説明を簡単にするためにストア命令等のメモリ参照命令を用いていないが、メモリ参照命令を用いる場合には、メモリ参照を行うMEMステージをEXステージとWRステージとの間に設けてもよい。
【0044】
[ハードウェア構成]
図4は、本実施形態に係る情報処理装置のハードウェア構成図である。
【0045】
情報処理装置21は、前述のターゲットプロセッサ1で実行されるプログラムの中間コードを出力するPCやサーバ等の計算機である。
【0046】
この例では、情報処理装置21は、記憶部22、メインメモリ23、プロセッサ24、入力部25、及び表示部26を備える。これらの各部はバス27によって相互に接続される。
【0047】
このうち、記憶部22は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等の二次記憶装置であり、本実施形態に係る情報処理プログラム30を記憶する。情報処理プログラム30は、入力された命令列の命令数を後述のように削減するプログラムである。
【0048】
なお、その情報処理プログラム30をコンピュータが読み取り可能な記録媒体28に記録させておき、プロセッサ24に記録媒体28の情報処理プログラム30を読み取らせるようにしてもよい。
【0049】
そのような記録媒体28としては、例えばCD-ROM(Compact Disc - Read Only Memory)、DVD(Digital Versatile Disc)、及びUSB(Universal Serial Bus)メモリ等の物理的な可搬型記録媒体がある。また、フラッシュメモリ等の半導体メモリやハードディスクドライブを記録媒体28として使用してもよい。これらの記録媒体28は、物理的な形態を持たない搬送波のような一時的な媒体ではない。
【0050】
更に、公衆回線、インターネット、及びLAN(Local Area Network)等に接続された装置に情報処理プログラム30を記憶させておき、プロセッサ24が情報処理プログラム30を読み出して実行するようにしてもよい。
【0051】
一方、メインメモリ23は、DRAM等のようにデータを一時的に記憶するハードウェアであって、その上に前述の情報処理プログラム30が展開される。
【0052】
プロセッサ24は、自装置の各部を制御したり、メインメモリ23と協働して情報処理プログラム30を実行したりするCPU(Central Processing Unit)等のハードウェアである。
【0053】
なお、本実施形態ではターゲットプロセッサ11(
図3参照)とは異なるプロセッサ24が情報処理プログラム30を実行する場合を想定しているが、本実施形態はこれに限定されない。例えば、ターゲットプロセッサ11を備えたマシンで情報処理プログラム30を実行してもよい。
【0054】
入力部25は、キーボードやマウス等の入力デバイスである。ユーザがこれらの入力デバイスを操作することにより、情報処理プログラム30で処理すべき命令列を指定したり、処理後の命令列の出力先が指定されたりする。
【0055】
また、表示部26は、情報処理プログラム30の実行時にユーザが使用する様々なコマンドを表示する液晶ディスプレイ等の表示デバイスである。
【0056】
[機能構成]
図5は、本実施形態に係る情報処理装置21の機能を示す機能構成図である。
【0057】
図5に示すように、情報処理装置21は、取得部41、作成部42、削除部43、選択部44、及び出力部45を有する。これらの各部は、プロセッサ24とメインメモリ23が協働して前述の情報処理プログラム30を実行することにより実現される。
【0058】
このうち、取得部41は、命令列を取得する機能ユニットであり、例えば
図6に示す命令列50を取得する。
【0059】
図6は、取得部41が取得する命令列50の一例を示す図である。
【0060】
命令列50は、前述のターゲットプロセッサ1で実行されるバイナリファイルを生成するための中間コードであり、命令A、命令B、命令C、命令D、及びnop命令を実行順に上から並べた列である。また、命令A、命令B、命令C、命令Dの例としては、算術演算命令、論理演算命令、ジャンプ命令、及びメモリ参照命令等がある。
【0061】
また、nop命令は、前述のようにパイプラインレジスタ、レジスタファイル、及びメインメモリ等の内容を変更させないことによりパイプラインをストールさせる命令である。MIPSにおいては、これと等価な機能の「sll $0,$0,0」でnop命令が実現される。
【0062】
なお、これらの命令は全て1クロックサイクルで発行されるものとする。また、発行から完了までのサイクル数は以下の通りとする。
命令A:8クロックサイクル
命令B:4クロックサイクル
命令C:1クロックサイクル
命令D:1クロックサイクル
nop命令:1クロックサイクル
【0063】
更に、命令Dは、命令Aに依存しており、命令Aが書き込みを行ったレジスタを読み出すものとする。そして、命令Cは、命令Bに依存しており、命令Bが書き込みを行ったレジスタを読み出すものとする。
【0064】
nop命令は、このような命令間の依存関係に起因してデータハザードが生じるのを防止するために命令列50に挿入される。なお、以下では取得部41がnop命令を含む命令列50を取得する場合を例にして説明するが、情報処理プログラム30自体がソースコードをコンパイルして命令列50を生成するようにしてもよい。また、前述のようにnop命令によって命令列50の命令数が増えているため、本実施形態では後述のようにその命令数を削減する。
【0065】
再び
図5を参照する。
作成部42は、上記の命令列50と同一の実行結果を有する新たな命令列の複数の候補を作成する。
図7は、その候補の作成方法について示す図である。
【0066】
図7に示すように、この例では三つの候補P1~P3が作成される。
【0067】
これらの候補P1~P3は、元の命令列50における複数のnop命令の少なくとも一部をwait命令に置換することにより作成される。前述のように、wait命令は、1回の発行で先行命令の全てが完了するのを待つ命令である。
【0068】
例えば、候補P1は、命令列50における3個の連続したnop命令を1つのwait命令に置き換えることで作成される。この場合、命令Aと命令Bの完了を待って命令Cが開始されるため、依存関係にある命令B、Cに起因したデータハザードは生じない。同様に、依存関係にある命令A、Dに起因したデータハザードも生じない。
【0069】
また、候補P2は、命令列50における2個の連続したnop命令を1つのwait命令に置き換えることで作成される。この場合は、命令Dは、先行する全ての命令が完了するのをまってから開始される。よって、依存関係にある命令A、Dに起因したデータハザードも生じない。
【0070】
一方、候補P3は、命令列50における3個の連続したnop命令を1つのwait命令に置き換え、かつ命令列50における2個の連続したnop命令を1つのwait命令に置き換えることで作成される。この場合も、候補P1、P2と同様にデータハザードは生じない。
【0071】
なお、候補P1~P3のいずれにおいても、複数のnop命令が連続して出現している場合には、これらの連続した複数のnop命令を一つのwait命令に置き換えている。
【0072】
これにより、複数のnop命令のうちの一つのみをwait命令に置き換える場合と比較して各候補P1~P3の命令数を削減できる。更に、複数のnop命令のうちの一つのみをwait命令に置換した候補を許容すると候補数が不必要に増えてしまうが、この例のように連続したnop命令を一括してwait命令に置換することで候補数の増大を抑制することもできる。
【0073】
なお、これらの候補P1~P3は、元の命令列50における連続したnop命令をwait命令に単に置き換えただけであるため、命令数を削減する余地がある。
【0074】
そこで、削除部43(
図5参照)は、これらの候補P1~P3の各々から不要なnop命令とwait命令を削除する。
図8は、その削除の方法について示す図である。
【0075】
不要かどうかは、nop命令やwait命令を削除しても命令列の実行結果が変わらないかどうかという観点から判断される。
【0076】
例えば、候補P1の2つの連続したnop命令を削除しても、命令Dの開始前に命令Aが完了しているため、依存関係にある命令A、Dに起因したデータハザードは生じることがなく、削除前と実行結果が変わらない。よって、削除部43は、候補P1における2つの連続したnop命令を削除する。
【0077】
一方、候補P1のwait命令を削除してしまうと、命令Bが完了する前に命令Cが開始してしまう。前述のように命令B、Cは依存関係にあるため、このようにwait命令を削除すると元の命令列とは異なる実行結果を有する命令列が得られてしまう。よって、削除部43は、候補P1におけるwait命令は削除しない。
【0078】
候補P2と候補P3についてもこれと同様の方法で削除部43がnop命令やwait命令を削除可能かどうか判断し、削除可能と判断した場合にこれらの命令を削除する。
【0079】
例えば、候補P2ではnop命令やwait命令を削除すると削除前と実行結果が変わってしまうため、候補P2についてはこれらの命令を削除しない。また、候補P3では、2番目のwait命令を削除しても実行結果が変わらないため、そのwait命令を削除部43が削除する。
【0080】
選択部44(
図5参照)は、
図8のように削除を行った各候補P1~P3のうちで、命令数が規定数N
0以下であり、かつ実行サイクル数が最も少ない候補を選択する。
【0081】
規定数N
0は、rep命令のように後続命令の個数に上限数が設けられている命令を使用する場合にはその上限数となる。また、rep命令を使用しない場合であっても、メモリ使用量を抑えるために命令数に予め上限数を設定しておき、その上限数を規定数N
0として採用してもよい。
その選択方法について
図9を参照しながら説明する。
【0082】
図9は、各候補P1~P3の命令列の実行サイクル数を模式的に示す図である。
【0083】
選択部44は、各命令A、B、C、Dの発行から完了までのサイクル数を利用することで各候補P1~P3の実行サイクル数を算出する。このように算出された実行サイクル数は、候補P1では10となる。また、候補P2の実行サイクル数は9であり、候補P3の実行サイクル数は10である。
【0084】
更に、選択部44は、各候補P1~P3の各々の命令列に含まれる命令数を算出する。
【0085】
図10は、このように候補P1~P3ごとに得られた実行サイクル数と命令数とを示す図である。
【0086】
この例では、命令数の規定数N0を8とする。この場合、選択部44は、命令数がその規定数N0(=8)以下となる各候補P1~P3のうちで、実行サイクル数が最も少ない候補P2を選択する。
【0087】
このように選択された候補P2は、データハザードが生じない命令列のうち実行サイクル数が最も少ない命令列である。よって、この候補P2の命令列をコンパイルして得られたバイナリファイルを前述のターゲットプロセッサ1(
図3参照)で実行することで、データハザードの発生を防止しつつプログラムの実行速度を向上させることができる。
【0088】
そして、出力部45(
図5参照)は、この候補P2の命令列を最終的な出力結果として出力する。
【0089】
[フローチャート]
次に、本実施形態に係る情報処理方法について説明する。
図11は、本実施形態に係る情報処理方法について示すフローチャートである。
【0090】
まず、ステップS1において、取得部41が
図6の命令列50を取得する。
【0091】
次に、ステップS2に移り、取得部41が、その命令列50に含まれる命令数Nをカウントする。
【0092】
次いで、ステップS3に移り、取得部41が、その命令数Nが規定数N0以下かどうかを判断する。ここで、命令数Nは規定数N0以下である(YES)と判断された場合には、命令列50の命令を削減する必要はない。よって、この場合は正常に処理を終了する。
【0093】
一方、ステップS3において命令数Nは規定数N0以下ではない(NO)と判断された場合には、ステップS4の命令数の削除処理を行う。
【0094】
図12は、その命令数の削除処理について示すフローチャートである。
【0095】
まず、ステップS10において、作成部42が、命令列50と同一の実行結果を有する新たな命令列の複数の候補P1~P3(
図7参照)を作成する。
【0096】
次に、ステップS11に移り、削除部43が、
図8に示したように候補P1~P3の各々から不要なnop命令とwait命令を削除する。
【0097】
そして、ステップS12に移り、選択部44が、
図10に示したように命令列の実行サイクル数と命令数nとを候補P1~P3ごとに算出する。
【0098】
続いて、ステップS13に移り、選択部44が、各候補P1~P3の中に、命令数nが規定数N0以下となる候補があるかを判断する。ここで、ない(NO)と判断された場合にはステップS14に移り、出力部45がエラーを出力して終了する。
【0099】
一方、ステップS13において命令数nが規定数N0以下となる候補があると判断された場合にはステップS15に移る。
【0100】
そのステップS15では、選択部44が、各候補P1~P3のうちで、命令数nが規定数N
0以下であり、かつ実行サイクル数が最も少ない候補を選択する。前述の
図10の例のように規定数N
0を8とした例では、実行サイクル数が他のいずれの候補よりも少ない候補P2が選択される。
【0101】
そして、ステップS16に移り、ステップS15で選択した候補P2を出力部45が出力する。
【0102】
以上により、本実施形態に係る情報処理方法の基本ステップを終了する。
【0103】
上記した本実施形態によれば、ステップS10において複数のnop命令の一部をwait命令に置換した新たな命令列の候補P1~P3を作成する。そして、ステップS11において、これらの候補P1~P3の各々の命令列から不要なnop命令とwait命令を削除し、これらを削除した候補のうちで命令数nが規定数N0よりも小さく、かつ実行サイクル数が最小のものを選択する。
【0104】
このようにして選択した命令列は、実行結果が元の命令列50と同一でありながらその命令数が命令列50よりも少なくなるため、rep命令のように後続命令数に制限のある命令を使用することができる。また、rep命令を使用しない場合であっても、命令数を削減したことでメモリ使用量を少なくすることもできる。
【0105】
しかも、命令数nが規定数N0よりも小さい複数の候補のうちで実行サイクル数が最小のものを選択したため、プログラムの実行時間を低減できるという技術的な効果が奏される。
【0106】
次に、本実施形態の更に具体的な例について説明する。
図13(a)は、この例に係る命令列60を示す図である。この例では、8SIMDのDLUで使用される命令列60について説明する。
【0107】
この命令列60は、ループ処理の内側のベーシックブロックを形成する命令列である。ここでは、2つのベクトルの各要素の平均値を求めるループ処理を想定している。なお、各ベクトルの要素は32ビットの符号無し整数である。また、各ベクトルの要素数は8×128個である。
命令列60における各命令の意味は次の通りである。
【0108】
%xor_xy = ixors %x, %y … レジスタ「x」の内容とレジスタ「y」の内容の排他的論理和をレジスタ「xor_xy」に書き込む
【0109】
%and_xy = iands %x, %y … レジスタ「x」の内容とレジスタ「y」の内容の論理和をレジスタ「and_xy」に書き込む
【0110】
%srl_xor_xy = isrls %xor_xy, 1 … レジスタ「xor_xy」の内容を右に1ビットだけ論理シフトしたものをレジスタ「srl_xor_xy」に書き込む
【0111】
%res = iadds %and_xy, %srl_xor_xy … レジスタ「and_xy」の内容とレジスタ「srl_xor_xy」の内容との算術和をレジスタ「res」に書き込む
【0112】
なお、この例では前述のように8SIMDを想定しており、この命令列60を1回実行する度に上記の全てのレジスタの番号が8だけ自動的にずれる。そして、この命令列60を128回繰り返すことにより、レジスタ「res」の番号を8だけずらしながら、これらのレジスタ「res」に8×128個の要素の平均値が書き込まれていく。
【0113】
図13(b)は、この命令列60に含まれる各命令の依存関係を示す図である。
【0114】
この例では、依存関係がある命令の間に矢印を設ける。また、その矢印の向きは、命令列60における各命令の出現順を表す。例えば、iadds命令は、iands命令が出現した後に命令列に出現することを表す。
【0115】
図13(a)に出現している命令は、nop命令を除き、全て8クロックサイクルで完了する。
【0116】
よって、このようにiands命令とisrls命令との間に6個のnop命令を挿入すると、最初のixors命令が開始してから8クロックサイクルを経過した後にisrls命令が開始する。これにより、依存関係のあるixors命令とisrls命令に起因したデータハザードを回避することができる。
【0117】
同様に、isrls命令とiadds命令との間に7個のnop命令を挿入したことで、isrls命令が開始してから8クロックサイクルを経過した後にiadds命令が開始する。その結果、依存関係のあるisrls命令とiadds命令に起因したデータハザードを回避することができる。
【0118】
このように命令列60を繰り返して実行する命令としては前述のrep命令がある。但し、rep命令が繰り返して実行可能な後続命令数の上限値は12であるのに対し、この命令列60の命令数は17個であるため、このままでは命令列60をrep命令で繰り返して実行することができない。
【0119】
このような場合には、命令列60に対して
図11~
図12に示した本実施形態に係る情報処理方法を適用し、命令数の削減を図ればよい。
【0120】
図14(a)は、命令列60に対して本実施形態を適用することで命令数が削減された命令列71を示す図である。
【0121】
この命令列71における命令数は11個であり、rep命令が実行可能な後続命令数の上限値(=12)よりも少ないため、rep命令によって命令列71の命令列を繰り返して実行することが可能となる。よって、この場合は、例えば出力部45が命令列71にrep命令を追加して出力することで、命令列71がrep命令の第2引数だけ繰り返されるループ処理を有する中間コードを得ることができる。なお、この例では前述のように繰り返しの回数を128回とするため、rep命令の第2引数は128となる。また、rep命令の第1引数は、繰り返しの対象となる命令列71の命令数である11となる。
【0122】
図14(b)は、第1の比較例に係る命令列72を示す図である。
【0123】
第1の比較例に係る命令列72は、元の命令列60において連続しているnop命令を全て1つのwait命令に置換して得られた命令列である。その命令列72における命令数は6個であるため、rep命令により命令列72を繰り返し実行することができる。このようにrep命令を使用する場合、rep命令の第1引数は命令列72の命令数である6となり、第2引数は繰り返しの回数である128となる。
【0124】
また、
図14(c)は、第2の比較例に係る命令列73を示す図である。
【0125】
第2の比較例に係る命令列73は、元の命令列60の命令数を削減せずに、ジャンプ命令でループ処理を実現する命令列である。
【0126】
第2の比較例では、ループ処理を実現するために、ループ回数を書き込むためのレジスタ「loop_cnt」と、全てのレジスタに共通のベースアドレスを書き込むためのレジスタ「loop_cnt」とを使用している。また、ベースアドレスの増分値を書き込むためのレジスタ「inc」も使用している。なお、前述のようにこの例では8SIMDを想定しているため、その増分値は8となる。
【0127】
これらのレジスタを使用する各命令の意味は次の通りである。
【0128】
%loop_cnt = sub %loop_cnt, 1 … レジスタ「loop_cnt」に書き込まれているループ回数を1だけ減じる
【0129】
%baseadr=add %baseadr,%inc … レジスタ「baseadr」に書き込まれているベースアドレスを、レジスタ「inc」に書き込まれている増分値(=8)だけ増やす
【0130】
bnzr %loop_cnt, LoopBegin … レジスタ「loop_cnt」に書き込まれているループ回数が0でないときはラベル「LoopBegin」にジャンプし、ループ回数が0のときは後続の命令を実行する
【0131】
図15は、本実施形態に係る命令列71、第1の比較例に係る命令列72、及び第2の比較例に係る命令列73の各々の命令数と、これらの命令列を1回実行したときの実行サイクル数とを示す図である。
【0132】
図15に示すように、本実施形態の命令数は、rep命令が実行可能な後続命令数の上限値(12)よりも少ない。第1の比較例でもその上限値よりも少ない命令数となっているが、第1の比較例では実行サイクル数が22であり、本実施形態における実行サイクル数よりも増えてしまっている。
【0133】
また、第2の比較例では、命令数と実行サイクル数のいずれも本実施形態よりも大きくなってしまっている。
【0134】
この結果から、命令数を削減しつつ実行サイクル数を低減するのに本実施形態が有効であることが明らかとなった。
【0135】
なお、
図14(a)の例では命令数がrep命令に規定された規定数N
0(=12)よりも少なくなったが、元の命令列によっては、本実施形態を適用しても命令数が規定数N
0以下となる候補が存在しない場合も想定される。その場合には、
図12のステップS14のようにエラーを表示するのに代えて、
図14(c)のようにジャンプ命令でループ処理を実現する命令列73を出力部45(
図5参照)が出力してもよい。この命令列73は、前述のように元の命令列60(
図13(a))にsub命令、add命令、及びbnzr命令を追加した命令列であり、rep命令を用いる場合(
図14(a))と同じ実行結果が得られる命令列である。
【0136】
以上説明した各実施形態に関し、更に以下の付記を開示する。
(付記1) 複数の命令を含む命令列を取得する取得部と、
前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する作成部と、
前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う削除部と、
前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない前記候補を選択する選択部と、
を有することを特徴とする情報処理装置。
(付記2) 前記作成部は、前記命令列に前記nop命令が連続して出現している場合には、連続した前記nop命令を1つの前記wait命令に置換することを特徴とする付記1に記載の情報処理装置。
(付記3) 前記規定数は、後続の前記命令の繰り返しを指示する繰り返し命令が許容する前記後続の命令の上限数であることを特徴とする付記1に記載の情報処理装置。
(付記4) 選択した前記候補の前記命令列に、当該命令列の繰り返しを指示する前記繰り返し命令を追加して出力する出力部を更に有することを特徴とする付記3に記載の情報処理装置。
(付記5) 前記命令数が前記規定数以下となる前記候補がない場合には、前記繰り返し命令と同じ実行結果が得られる命令を前記命令列に追加して出力する出力部を更に有することを特徴とする付記3に記載の情報処理装置。
(付記6) 複数の命令を含む命令列を取得する処理と、
前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する処理と、
前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う処理と、
前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない候補を選択する処理と、
をコンピュータに実行させるための情報処理プログラム。
(付記7) 複数の命令を含む命令列を取得する処理と、
前記命令列に含まれる複数のnop命令の少なくとも一部を、先行する全ての前記命令の完了を待つwait命令に置換することにより、前記命令列と同じ実行結果が得られる新たな命令列の複数の候補を作成する処理と、
前記候補における前記命令列から前記nop命令又は前記wait命令を削除しても前記実行結果が変わらない場合には、当該命令列から前記nop命令又は前記wait命令を削除する処理を複数の前記候補の各々に対して行う処理と、
前記削除の後の複数の前記候補のうちで、命令数が規定数以下であり、かつ実行サイクル数が最も少ない候補を選択する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
【符号の説明】
【0137】
1、2、50、60、71~73…命令列、11…ターゲットプロセッサ、12…命令フェッチ部、13…命令デコード部、14…実行部、15…書き込み部、21…情報処理装置、22…記憶部、23…メインメモリ、24…プロセッサ、25…入力部、26…表示部、27…バス、28…記録媒体、41…取得部、42…作成部、43…削除部、44…選択部、45…出力部、P1~P3…候補。