(57)【特許請求の範囲】
【請求項１】
複数の命令を並列実行することが可能であって割込要求が発生した場合に、実行中の命令に含まれる、割込要求の受入れの可否を指定する割込制御情報に基づいて、当該割込要求を受入れるか当該割込要求を拒否して後続の命令を実行するかを決定するプロセッサにおいて実行されるプログラムを生成するための方法であって、
ソースプログラムをコンパイルして前記プロセッサにおいて実行可能な命令により構成されるプログラムを生成する処理と、
予め設定された、割込禁止状態を連続して認めるクロック数を超えないように、割込要求を受入れることが可能なＮＯＰ命令をコンパイル後のプログラムに挿入する処理と、
前記ＮＯＰ命令が挿入されたプログラムを構成する各命令の種類に基づいて、これらの各命令のうち割込処理によって中断されることなく連続して実行されねばならない命令を判定し、この判定結果に基づいて各命令に対して前記割込制御情報を設定する処理と
をコンピュータによるソフトウェア処理によって実行する
ことを特徴とするプログラムの生成方法。
【請求項２】
コンピュータが、ソースプログラムをコンパイルして、複数の命令を同時に並列実行する機能および割込機能を備えたプロセッサにおいて実行可能な命令により構成されるプログラムを生成する第１のステップと、
コンピュータが、予め設定された、割込禁止状態を連続して認めるクロック数を超えないように、割込要求を受入れることが可能なＮＯＰ命令を前記第１のステップにて生成されたプログラムに挿入する第２のステップと、
コンピュータが、前記第２のステップにてＮＯＰ命令が挿入されたプログラムを構成する各命令の種類に基づいて、これらの各命令のうち割込処理によって中断されることなく連続して実行されねばならない命令を判定し、この判定結果に基づいて、各命令に対して割込要求の受入れの可否を指定する割込制御情報を設定する第３のステップと、
前記プロセッサが、前記第３のステップにて割込制御情報が設定されたプログラムを実行し、割込要求が発生した場合に、実行中の命令に含まれる割込制御情報に基づいて、当該割込要求を受入れるか当該割込要求を拒否して後続の命令を実行するかを決定する第４のステップと
を有することを特徴とするプロセッサの割込制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、パイプライン制御等により複数の命令を同時に並列実行する機能および割込機能を備えたプロセッサにおいて実行されるプログラムの生成方法および該プロセッサに好適な割込制御方法に関する。
【０００２】
【従来の技術】
複数の命令の並列実行し得るパイプラインプロセッサ等のプロセッサが各種知られている。この種のプロセッサによれば、個々の命令の実行所要時間よりも短い時間間隔で各命令を順次実行することができるため、プログラム全体の実行時間を短時間にすることができる。
【０００３】
図３はこのような複数命令の並列実行が可能なプロセッサに対応して作成されたプログラムの例を示すものである。このプログラムを構成する各命令は、一定周波数で発生されるクロックに同期し、プロセッサによって順次実行される。また、プロセッサは、これらの命令を順次実行する際、各命令の実行完了を待たずに後続の命令の実行を開始する。
【０００４】
例えばプログラムの先頭から３行目には、“Ｆｕｎｃ１  Ｒ４，Ｒ０，Ｒ１”なる命令があるが、この命令は「レジスタＲ０およびＲ１に記憶された各データにＦｕｎｃ１なる演算を施して、その結果をレジスタＲ４に格納せよ」という命令であり、実行開始から完了までに３クロックを要する。他の“Ｆｕｎｃ１  ……”なる命令も同様であり、図３では各命令毎に当該命令の実行に要する期間が矢印によって示されている。
【０００５】
プロセッサは、この３行目の命令の実行を開始した後、この命令の実行完了を待たずに、次のクロックにおいて４行目の命令“Ｆｕｎｃ１  Ｒ５，Ｒ２，Ｒ３”の実行を開始し、３行目の命令と４行目の命令を並列実行する。以後、プロセッサは、クロックが発生される毎、後続の命令の実行を順次開始してゆく。
【０００６】
そして、先頭から６行目の“Ｆｕｎｃ１  Ｒ５，Ｒ４，Ｒ８”なる命令の実行が開始される直前において、上記３行目の命令の実行が完了し、Ｆｕｎｃ１なる演算の結果がレジスタＲ４に格納される。従って、この６行目の命令の実行において上記３行目の命令の実行によりレジスタＲ４に書き込まれたデータが参照される。
【０００７】
ところで、この６行目の命令の実行が開始される前に、５行目の“Ｆｕｎｃ１Ｒ４，Ｒ６，Ｒ７”なる命令の実行が開始され、この命令の実行が完了すればレジスタＲ４の内容が書き換えられることとなる。
【０００８】
しかし、この５行目の命令の実行は、６行目の命令の実行開始時までに完了しない。従って、６行目の命令の実行においては、この５行目の命令の実行結果ではなく、上記の通り、３行目の命令の実行によりレジスタＲ４に書き込まれたデータの内容が変更されることとなるのである。
【０００９】
次に、“Ｆｕｎｃ１  ……”なる一連の命令の実行が終了すると、“ＳＴＡ  （Ｒ９＋），Ｒ５”なる命令を３個実行することとなるが、これらの命令はレジスタＲ５の内容をレジスタＲ９内のデータと加算し、その結果をレジスタＲ９に格納せよ」という命令である。また、プログラムの最後は“ＪＮＥ  Ｒ９，Ｒ１１，Ｔｏｐ”なる命令となっているが、これは「レジスタＲ９とＲ１１の内容が不一致ならばＴｏｐなるラベルの付いた行へジャンプせよ」という命令である。すなわち、このプログラムは、所定の条件が満たされるまで、Ｔｏｐなるラベルの付けられた行から最後の行までの命令を繰り返すループ構造をなしている。
【００１０】
以上のように、複数命令の並列実行が可能なプロセッサにおいては、各命令の実行完了を待たずに後続の命令の実行を開始させることができるため、プログラム全体の実行時間を短時間にすることができる。
【００１１】
さて、以上のように複数命令の並列実行を行う場合、プログラムが正常に実行されるためには、プログラムを構成する各命令が予定された通りのタイミングで実行される必要がある。しかし、１種類のプログラムしか実行しないならばともかくとして、システムを柔軟なものにするためには、ある程度は割込処理を受け入れるように構成する必要がある。この問題に対処するための方法として、従来、次のものがあった。
【００１２】
（１）第１の方法
第１の方法は、プログラム中、実行タイミングが変更されてはならない命令群については、この命令群の前後を割込の禁止を指示する命令と禁止解除を指示する命令とによって挟み、プロセッサがそれらの命令に従って割込要求に対応する、という方法である。図３に示すプログラムも、この方法に従って割込の制御がなされるようになっている。すなわち、プログラムは“Ｄｉｓａｂｌｅ”という命令と“Ｅｎａｂｌｅ”という命令とを有しているが、前者は割込禁止を指示する命令であり、後者は割込禁止の解除を指示する命令である。Ｄｉｓａｂｌｅ命令が実行されてからＥｎａｂｌｅ命令が実行されるまでの期間は割込要求が一切受入れられない訳である。
【００１３】
（２）第２の方法
第２の方法においては、ある命令の実行開始時に割込要求が生じた場合、プロセッサはその割込要求を受入れて割込処理を実行する。そして、プロセッサは、割込処理によって中断された命令と共に並列実行されていた過去の全命令に遡り再実行する。
【００１４】
（３）第３の方法
割込要求を柔軟に受入れることを優先し、複数命令の並列実行を断念する。すなわち、プロセッサは、各命令の実行が完了するまで、次の命令を実行しない。
【００１５】
【発明が解決しようとする課題】
以上説明した第１〜第３の方法は、次のような欠点を有している。まず、第１の方法は、図３のプログラム例のように、ループ処理の中に割込禁止命令（Ｄｉｓａｂｌｅ命令）と割込禁止解除命令（Ｅｎａｂｌｅ命令）が含まれている場合、ループを一巡する都度、これらの命令の実行のためのオーバーヘッドが必要となり、効率が悪いという欠点がある。また、第２の方法は、並列実行される命令群の中に所要クロック数の多い命令（すなわち、実行所要時間が長い命令）が存在している場合に、割込要求によって実行が中断される確率が高くなり、割込処理に伴って命令群の実行をやり直す確率が高くなるという欠点がある。また、第３の方法は、並列実行を全く行わないため、言うまでもなく効率が悪い。
【００１６】
この発明は以上のような事情に鑑みてなされたものであり、複数命令の並列実行が可能なプロセッサにおいて、並列実行による高速化という利点を極力活かしつつ割込要求を柔軟に受入れ、高速かつ柔軟性に富んだ処理を行えるようにすることである。
【００１７】
【課題を解決するための手段】
請求項１に係る発明は、複数の命令を並列実行することが可能であって割込要求が発生した場合に、実行中の命令に含まれる、割込要求の受入れの可否を指定する割込制御情報に基づいて、当該割込要求を受入れるか当該割込要求を拒否して後続の命令を実行するかを決定するプロセッサにおいて実行されるプログラムを生成するための方法であって、ソースプログラムをコンパイルして前記プロセッサにおいて実行可能な命令により構成されるプログラムを生成する処理と、予め設定された、割込禁止状態を連続して認めるクロック数を超えないように、割込要求を受入れることが可能なＮＯＰ命令をコンパイル後のプログラムに挿入する処理と、前記ＮＯＰ命令が挿入されたプログラムを構成する各命令の種類に基づいて、これらの各命令のうち割込処理によって中断されることなく連続して実行されねばならない命令を判定し、この判定結果に基づいて各命令に対して前記割込制御情報を設定する処理とをコンピュータによるソフトウェア処理によって実行することを特徴とするプログラムの生成方法を要旨とする。
【００１８】
請求項２に係る発明は、コンピュータが、ソースプログラムをコンパイルして、複数の命令を同時に並列実行する機能および割込機能を備えたプロセッサにおいて実行可能な命令により構成されるプログラムを生成する第１のステップと、コンピュータが、予め設定された、割込禁止状態を連続して認めるクロック数を超えないように、割込要求を受入れることが可能なＮＯＰ命令を前記第１のステップにて生成されたプログラムに挿入する第２のステップと、コンピュータが、前記第２のステップにてＮＯＰ命令が挿入されたプログラムを構成する各命令の種類に基づいて、これらの各命令のうち割込処理によって中断されることなく連続して実行されねばならない命令を判定し、この判定結果に基づいて、各命令に対して割込要求の受入れの可否を指定する割込制御情報を設定する第３のステップと、前記プロセッサが、前記第３のステップにて割込制御情報が設定されたプログラムを実行し、割込要求が発生した場合に、実行中の命令に含まれる割込制御情報に基づいて、当該割込要求を受入れるか当該割込要求を拒否して後続の命令を実行するかを決定する第４のステップとを有することを特徴とするプロセッサの割込制御方法を要旨とする。
【００２０】
【発明の実施の形態】
以下、本発明を更に理解しやすくするため、実施の形態について説明する。
かかる実施の形態は、本発明の一態様を示すものであり、この発明を限定するものではなく、本発明の範囲で任意に変更可能である。
【００２１】
Ａ．第１の実施形態
本実施形態は、本発明をマイクロプログラム方式のプロセッサに適用した実施形態である。本実施形態においては、プロセッサが実行する各マイクロコードのビットセットの中に、割込禁止ビットを設ける。図１はこのマイクロコードの構成を例示したものである。この図において、１は例えば３２ビットからなるマイクロコードである。同図に示すように、マイクロコード１は、命令の種類を示す命令コードと、演算において参照する第１および第２のソースレジスタの名称と、演算結果を格納するディスティネーションレジスタの名称等を含んでいる。そして、いずれのマイクロコードも、１ビットの割込禁止ビット１０を有している。
【００２２】
プロセッサは、割込要求が発生した場合に、実行中のマイクロコードに含まれる割込禁止ビット１０に基づき、当該割込要求を受入れるか当該割込要求を拒否して後続のマイクロコードを実行するかを決定する割込制御手段を有している。すなわち、プロセッサは、この割込制御手段による制御の下、割込禁止ビット１０のビット値が“０”となっているマイクロコードを実行しているときに割込要求があった場合には、その割込要求が受入れ、割込処理を実行する。これに対し、割込禁止ビット１０のビット値が“１”であるマイクロコードを実行しているときに割込要求があった場合には、プロセッサはその割込要求を受入れず、当該マイクロコードの次のマイクロコードを連続して実行する。
【００２３】
従って、割込要求を受入れることなく連続的に実行すべき命令群がある場合、プログラム作成者は、そのような命令群の各命令のみ、割込禁止ビットのビット値を“１”とすればよい。このようにすることにより、かかる命令群については割込要求に妨げられることなく予定通りのタイミングで各命令が実行され、一方、かかる命令群以外の命令の実行時には割込要求が受入れられる。従って、複数命令の並列実行の利点を活かした状態で割込要求に柔軟に対処することができる。
【００２４】
Ｂ．第２の実施形態
マイクロコードを１コードずつ作成してプログラムを作成する作業は、プログラムが大規模なものになるに従って困難なものとなる。また、プログラムを構成する各マイクロコードについて上記割込禁止ビットをセットする必要があるか否かを判断する作業も極めて骨の折れる作業である。本実施形態は、このような問題を解決し、本発明に係る割込制御方法を容易に実施できるようにすることを目的としたものである。
【００２５】
本実施形態による割込制御方法は、コンパイラおよびポストプログラムを使用することにより以下の手順に従って実施される。
（１）まず、プログラム作成者により、マクロ命令によって構成されたソースプログラムが作成される。そして、このソースプログラムを対象としてコンパイラが実行される。このコンパイラの実行により、ソースプログラム中の各マクロ命令がマイクロコードの集合体に変換され、マイクロコードからなるプログラムが生成される。ここで、各マクロ命令は、複数のマイクロコードに変換されるが、実行時間を短縮するため、各マイクロコードは前掲図３に例示したように並列実行されることを前提とし、隙間なく詰められた状態となっている（すなわち、ＮＯＰを極力含まないように構成されている）。また、この段階では、各マイクロコードの割込禁止ビットは情報が何もセットされておらず、不定状態である。
【００２６】
（２）次に上記（１）により得られたマイクロコードからなるプログラムを対象としてポストプログラムが実行され、このポストプログラムの実行により、各マイクロコードの割込禁止ビットに対し、“１”または“０”が書き込まれる。さらに詳述すると、次の通りである。
【００２７】
ａ．まず、プログラムの先頭からマイクロコードを１つずつ読み出す。そして、各マイクロコードの種類に基づき、各マイクロコードの実行のための所要クロック数を求める。
【００２８】
ｂ．次に、プログラムを構成する各マイクロコードについて、当該マイクロコードから始まる上記所要クロック数相当の個数のマイクロコード、すなわち、当該マイクロコードとともに並列実行されるマイクロコードを調べる。そして、これらの並列実行される各マイクロコードの中に当該マイクロコードの実行後に割込処理を行った場合にプログラムの実行結果に影響を与えるようなマイクロコードがあるか否かを判断する。
【００２９】
例えば、当該マイクロコード（便宜上、第１のマイクロコードとする。）がレジスタＲ０をディスティネーションレジスタとする命令であり、かつ、実行に３クロックを要する命令であったとする。また、第１のマイクロコードから数えて３命令以内にレジスタＲ０をソースレジスタとするマイクロコード（便宜上、第２のマイクロコードとする。）があったとする。この場合、第１のマイクロコードの実行後に割込処理が行われたとすると、第２のマイクロコードが実行される前に第１のマイクロコードの実行が完了し、レジスタＲ０の内容が書き換えられてしまうという予定外の動作が行われ、この予定外の動作によって正常なプログラムの実行結果が得られなくなる可能性がある。従って、このような場合には、第１のマイクロコードとともに並列実行される第２のマイクロコードは、第１のマイクロコードの実行後に割込処理を行った場合にプログラムの実行結果に影響を与えるマイクロコードである、と判断されるのである。
【００３０】
ｃ．上記ｂの判断の結果、当該マイクロコードから始まる所要クロック数相当の個数のマイクロコードの中に割込の有無によりプログラムの実行結果に影響を与えるようなマイクロコードがある場合には、当該マイクロコードからそのマイクロコードに至るまでの全マイクロコードについて割込禁止ビットとして“１”を書き込む。また、このようにして割込禁止ビット“１”が書き込まれなかった各マイクロコードについては、割込禁止ビットは“０”とされる。
【００３１】
Ｃ．第３の実施形態
上記第２の実施形態において、プログラムを構成するマイクロコードが所要クロック数の多いものばかりであると、割込禁止ビットとして“１”がセットされたマイクロコードが延々と連続した状態のプログラムが得られることとなる。このようなプログラムを実行した場合、割込要求が受入れられる機会が全く与えられないこととなってしまう。本実施形態は、このような不都合に対処するものである。
【００３２】
すなわち、本実施形態においては、コンパイルに先立ち、割込禁止状態を何クロックまで連続して認めるかを予め設定する。コンパイラは、マクロ命令をマイクロコードに変換してゆく際、この設定を満たすように、各マクロ命令間の繋ぎ目の部分、ループ処理のためのルーチンの最後の部分等に、割込要求の影響を全く受けないＮＯＰ命令を挿入する。これらのＮＯＰ命令についてはポストプログラムの実行の際に割込禁止ビットとして“１”が書き込まれないため、随所に割込要求の受入れ可能な部分を含んだプログラムが得られる。このようにして得られるプログラムの例を図２に示す。図中、斜線を施した部分が割込禁止ビットとして“１”が書き込まれている部分である。また、ＮＯＰ命令はコンパイル時に挿入されたものである。これらのＮＯＰ命令は割込禁止ビットとして“０”がセットされているため、これらの実行時に割込要求があった場合には割込処理が行われることとなる。
【００３３】
以上説明したように本発明によれば、複数命令の並列実行が可能なプロセッサにおいて、並列実行による高速化という利点を極力活かしつつ割込要求を柔軟に受入れ、高速かつ柔軟性に富んだ処理を行えるようになる。
【図面の簡単な説明】
【図１】  この発明の第１の実施形態におけるマイクロコードの構成を示す図である。
【図２】  この発明の第３の実施形態における実行されるマイクロコード表現のプログラムを例示する図である。
【図３】  従来の割込制御方法を説明する図である。
【符号の説明】
１……マイクロコード（命令）、
１０……割込禁止ビット（割込制御情報）。
【図１】
0003663710.tif 000002
【図２】
0003663710.tif 000003
【図３】
0003663710.tif 000004