(57)【要約】      （修正有）【課題】ソースプログラム内に外部装置に対するアクセスを含む命令があったときでも短い設計時間で高性能のオブジェクトコードを作成する【解決手段】コンパイル方法であって、外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第１のステップと、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第２のステップと、前記第２のステップで演算した実動作速度を比較して、実動作速度の速い前記第１のステップで作成したオブジェクトコードを選択して出力する第３のステップと、を有することを特徴としている。【選択図】図２
2004220085.tif 000002
【特許請求の範囲】
【請求項１】
外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第１のステップと、
前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第２のステップと、
前記第２のステップで演算した実動作速度を比較して、実動作速度の速い前記第１のステップで作成したオブジェクトコードを選択して出力する第３のステップと
を有することを特徴とするコンパイル方法。
【請求項２】
前記第３のステップは、前記出力されるオブジェクトプログラムに前記第２のステップで演算した実動作速度を記述する、ことを特徴とする請求項１記載のコンパイル方法。
【請求項３】
外部記憶手段に記憶されたデータが入力されるレジスタと、
前記レジスタに記憶された前記データに基づいて演算を行う演算手段と、
前記演算手段から前記外部記憶手段へのアクセス要求命令が入力されて、前記データの入力を行うレジスタへのアクセスが行われないように前記レジスタを制御する外部アクセス制御部と
を備え、前記演算部は前記外部アクセス制御部が前記外部記憶手段へアクセスを行っている間、他の命令に対する演算を行うことを特徴とするデータ処理装置。
【請求項４】
外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第１のステップと、
前記ソースプログラムにおいて、前記外部記憶手段へのアクセスが必要な命令と、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて前記外部記憶手段へのアクセスを行っている間に実行可能な他の命令との順序を、前記ソースプログラムに記述されている順序が、前記アクセスが必要な命令よりも前記他の命令が先にある場合に入れ換える第２のステップと、
前記第２のステップで順序を入れ換えたオブジェクトコードを出力する第３のステップと
を有することを特徴とするコンパイル方法。
【請求項５】
前記第３のステップは、前記アクセス速度に基づいて前記ソースプログラムの実動作速度を前記出力されるオブジェクトプログラムに記述する、ことを特徴とする請求項４記載のコンパイル方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、外部記憶装置に記憶されたデータの読み出しや書き込みを行う必要のある命令を含むプログラムのコンパイル方法、及びコンパイルされたプログラムが実行されるデータ処理装置に関する。
【０００２】
【従来の技術】
従来からプログラムは、所定時間内に処理されることが求められている。そのため、ＣＰＵが１つの命令を処理できる期間内に複数の命令を詰め込んだり、無駄な処理を省く等の処理を行い、コンパイラによって作成されたオブジェクトコードの命令数自体を少なくさせることにより、コンパイラによる実行速度の最適化が求められている。
【０００３】
コンパイラによる実行速度の最適化の１つの方法として従来は、Ｃ言語で記述された大域変数群を構造体でグループ化して、変数が格納されるメモリ領域を所定の領域に割り振ることにより、メモリ読み出し命令に関するオブジェクトコード自体を削減させ、全体の処理の実行効率を上げる技術がある（例えば特許文献１参照）。
【０００４】
一方、プロセッサ内では、通常、命令のパイプライン処理が行われている。
【０００５】
パイプライン処理の技術として、従来は、シーケンシャルに複数の命令が実行される場合に、第１命令をデコードするときに第２命令を別のメモリに記憶させ、第１命令を実行するとき記憶された第２命令を読み出し、以後順次命令を実行させることにより、処理時間の短縮を図ることが行われている（例えば特許文献２参照）。
【０００６】
具体的にパイプラインの処理について説明する。
【０００７】
図１０に示すように各命令は、プログラムフェッチ（Ｆ）、命令デコード（Ｄ）、実行（Ｅ）の３段階で構成され、各段階を時分割されたＣＰＵの各サイクルに割り当て、複数のプログラムを１サイクル単位ごとにずらして実行される。
【０００８】
すなわち、１つめのプログラムは、１番目のＣＰＵサイクルで実行プログラムがフェッチ（Ｆ１）されて、プログラムが実行可能な状態におかれ、２番目のサイクルではフェッチされたプログラムに対する命令がデコード（Ｄ１）され、３番目のサイクルでは、デコードした命令をもとにプログラムが実行される（Ｅ１）。
【０００９】
一方、２つめのプログラムは、１つめのプログラムがデコードされる２番目のサイクルのときにフェッチ（Ｆ２）され、以後順番に命令のデコード、プログラムの実行が行われる（Ｄ２、Ｅ２）。
【００１０】
さらに、３つめのプログラムは、１つめのプログラムが実行され（Ｅ１）、かつ、２つめのプログラムに対する命令がデコードされる（Ｄ２）サイクルのときにフェッチされ、以後順番にデコード、実行が行われる（Ｄ３、Ｅ３）。
【００１１】
かかるパイプライン処理により、複数のプログラムが同時にあたかも同時に実行され、複数の処理が効率よく実行される。
【００１２】
一方、近年半導体技術の向上によりデバイス内部の動作スピードは飛躍的に向上している。たとえば、デバイス内部の内部バスの転送レートが従来に比べ高くなっているとともに、上述したＣＰＵ１サイクルの周波数が短くなったことで従来に比べ短いサイクル時間で命令の処理が可能となっている。
【００１３】
しかし、内部デバイスの動作スピードが向上している反面、外部デバイスへのアクセススピードの高速化はそれほど進んでいない。
【００１４】
そのため、プロセッサが外部デバイスにアクセスする場合に、内部デバイスへのアクセスはＣＰＵの１サイクルでほぼ実行できるのに対し、外部デバイスへのアクセスは、数サイクル、時には数十サイクルの時間がかかることがある。
【００１５】
具体的に以下説明する。
【００１６】
図１１に示すように、プログラムの実行時に使用されるデータが外部デバイスに記憶されている場合に、たとえば１番目のプログラムは、ＣＰＵサイクルで３サイクル目のとき本来実行されるべきであるが、外部デバイスからプログラムの実行に必要なデータの読み出しに時間がかかるため、実際にはＣＰＵサイクルで６サイクル目のときに実行されることになる。
【００１７】
同様に、２番目のプログラムもＣＰＵサイクルで４サイクル目に本来実行されるはずであるが、実際には７サイクル目、３番目のプログラムもＣＰＵサイクルで８サイクル目に、実行されることになる。
【００１８】
これは、外部デバイスに接続された外部バスのデータの転送レートが、プロセッサ内部の内部バスのデータ転送レートに比べ低いことが原因だからである。
【００１９】
すなわち、内部デバイスにおける内部バスの転送レートが高いため、各命令はＣＰＵの１サイクル内で処理できるものという前提でパイプライン処理が行われるのに対し、外部バスを介して外部デバイスに記憶されたデータは、外部バスの転送レートが内部バスの転送レートに比べ低いため、内部デバイスへの読み出しに時間がかかり、ＣＰＵの各サイクル内で処理できないからである。
【００２０】
このようにプロセッサが処理できず、処理待ちの状態をパイプラインストールという。
【００２１】
【特許文献１】
特開２００２−１８２９２６号広報
【００２２】
【特許文献２】
特開２００１−１７５４７０号広報
【００２３】
【発明が解決しようとする課題】
したがって、ソースプログラムで命令数を削減しても、外部デバイスに記憶されたデータの読み出しについての命令があった場合に、その読み出し自体に時間がかかるためプログラムの実行スピードを上げることができない。
【００２４】
これを回避するため、オブジェクトコードレベルで外部メモリへの読み出し／書き込み命令（Ｌｏａｄ／Ｓｔｏｒｅ命令）を極力減らすことが必要になる。例えば、プログラム設計者自らの手作業で、Ｌｏａｄ／Ｓｔｏｒｅ命令が少なくなるようなコードを作成したり、内部レジスタへの一時的なコピーを作成してＬｏａｄ／Ｓｔｏｒｅ命令をプログラム全体で少なくさせるコードの作成を行っている。
【００２５】
そのため、プログラムコードの内容が複雑になり設計効率が悪く、また、デバイスに特化したプログラムコードのためデバイスが変更されたときに柔軟に対応できないという、問題が発生する。さらに、内部レジスタへの一時的コピー処理を行わせようとしてもコンパイラによっては処理に時間がかかったり、命令数が多くなるためその処理自体が削除されてしまう、という問題点が発生する。
【００２６】
また、ソフトウェアシュミレーション上でも、全ての命令がＣＰＵの１サイクルで計算されるため、シュミレーションと実動作とで実行スピードの乖離が生じ、正確な見積もり作業を行うこができない、という問題点があった。
【００２７】
本発明は、ソースプログラム内に外部装置に対するアクセスを含む命令があったときでも短い設計時間で高性能のオブジェクトコードを作成することを目的とするものである。また、本発明は、外部装置に変更が生じたときでも仕様変更に柔軟に対応できるオブジェクトコードを作成することを目的とするものである。さらに、本発明は、シュミレーション時と実動作時とのプログラム実行スピードの乖離をなくしてプログラムの正確な見積もり作業を行うことを目的とするものである。
【００２８】
【課題を解決するための手段】
上記課題を解決するため本発明は、ソースプログラムからオブジェクトプログラムを作成するコンパイル方法であって、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算し、演算した実動作速度を比較して、実動作速度の速いオブジェクトプログラムを選択して出力するようにした。これにより、ソースプログラムに外部装置にアクセスする必要のある命令が含まれていても、最適な動作で実行するオブジェクトコードを短期間で得ることが可能であり、また外部装置の変更に対しても柔軟に仕様変更が可能である。
【００２９】
また、実動作速度の速いオブジェクトコードに演算した実動作速度を記述するようにしたので、オブジェクトプログラムをプロセッサに搭載したときの実行速度を正確に算出し、正確な速度の見積もり作業を行うことができる。
【００３０】
さらに、上記課題を解決するために本発明は、データ処理装置において、外部記憶手段に記憶されたデータが入力されるレジスタと、レジスタに記憶された前記データに基づいて演算を行う演算手段と、演算手段から外部記憶手段へのアクセス要求命令が入力されて、前記データの入力を行うレジスタへのアクセスが行われないようにレジスタを制御する外部アクセス制御部とを備え、演算部は外部アクセス制御部が外部記憶手段へアクセスを行っている間、他の命令に対する演算を行うようにしたので、アクセススピードの遅い外部装置に対してアクセスが必要な命令がプログラムに含まれている場合でも、実行パイプラインの無駄な空きがなくなり、効率よくプログラムを実行することができる。
【００３１】
さらに、上記課題を解決するために本発明は、外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換するコンパイル方法であって、ソースプログラムにおいて外部記憶手段へのアクセスが必要な命令と、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて前記外部記憶手段へのアクセスを行っている間に実行可能な他の命令との順序を、前記ソースプログラムに記述されている順序が、前記アクセスが必要な命令よりも前記他の命令が先にある場合に順序を入れ換えて、オブジェクトプログラムを出力するようにしたので、アクセススピードの遅い外部装置に対してアクセスが必要な命令がソースプログラム含まれていても、その命令の終了を待たず、実行パイプラインの無駄な空きがなくなり、効率よくプログラムを実行することができる。
【００３２】
さらに、本発明は、命令の順序を入れ換えたオブジェクトプログラムに演算した実動作速度を記述するようにしたので、このプログラムをプロセッサに搭載したときの正確な実行速度を算出することが可能となり、正確な速度の見積もり作業を行うことができる。
【００３３】
【発明の実施の形態】
図１に本発明が適用されるコンパイリング装置１の構成図を示す。
【００３４】
コンパイリング装置１は、ＣＰＵ２と、コンパイル対象のソースファイルやコンパイルのプログラムが格納されるＨＤＤ３と、コンパイル時にワーキングメモリとして使用されるメモリ４と、外部装置と接続された外部インターフェース５と、コンパイラによって作成されたオブジェクトコードを記録するための記録部６とから構成される。
【００３５】
ＣＰＵ２は、ＨＤＤ３、メモリ４、外部インターフェース５とそれぞれ接続され、以下に示す処理を行うための制御命令をＨＤＤ３、メモリ４、外部インターフェース５に出力する。
【００３６】
ＨＤＤ３は、例えば複数のハードディスクから構成され、コンパイル対象のソースプログラムと、コンパイルを行うためのプログラムが格納されている。コンパイル実行時には、ＣＰＵ２からの制御命令によりコンパイルプログラムやソースプログラムがメモリ４に出力される。
【００３７】
外部インターフェース５は、例えば、キーボード、モニタ、さらにインターネット等に接続され、かかる外部装置からのコンパイル命令を受け取るとＣＰＵ２に内部処理に適したコンパイル命令をＣＰＵ２に出力する。
【００３８】
メモリ４は、コンパイルを行うためのワーキングメモリとして主に使用され、ＨＤＤ３から出力されたコンパイルプログラムがＣＰＵ２の制御により所定のメモリ領域に格納され、コンパイル処理可能な状態になる。また、ＨＤＤ３から出力されたソースプログラムが入力されて、ＣＰＵ２の制御により所定の領域に格納され、コンパイルが実行される。またメモリ４は、コンパイルによって作成されたオブジェクトコードを記憶し、ＣＰＵ２からの制御命令により記録部６に出力する。
【００３９】
記録部６は、メモリ４から出力されたオブジェクトコードを記録媒体に記録する。記録媒体は、例えば、フロッピーディスクや、ＭＯ、ＣＤ−ＲＯＭ、半導体メモリ等のリムーバブルな記録媒体が考えられる。また、記録部６は、ＳＤＲＡＭやＲＯＭなどに記録する、いわゆる焼付けによってもオブジェクトコードを記録することもできる。
【００４０】
図２は、本発明のコンパイル処理のフローチャートを示す。
【００４１】
まず、図１で外部装置、例えば、キーボード等によりコンパイル処理を行うための命令が発行されて外部インターフェース５に入力されると、外部インターフェース５は、コンパイラ処理を行う命令をＣＰＵ２に出力する。
【００４２】
ＣＰＵ２は、コンパイラを行う命令が入力されるとコンパイル処理が始まる。（ステップＳ２０）。
【００４３】
コンパイルは、まず、コンパイラを行うためのプログラムをＨＤＤ３から読み出してメモリ４の所定領域に格納されるようＨＤＤ３を制御する。また、ＣＰＵ２は、コンパイル対象のプログラムをＨＤＤ３から読み出してメモリ４に格納されるようＨＤＤ３を制御する。これにより、メモリ４にソースファイルが格納されソースファイルの読み込み処理が行われる（ソースファイル読み込み処理：ステップＳ２１）。
【００４４】
次いで、オブジェクトコード生成処理２５が行われる（ステップＳ２２）。
【００４５】
オブジェクト生成処理２５は、最終的にはメモリ４に読み込まれたソースプログラムのオブジェクトコードを作成するが、ソースプログラムに例えば外部ペリフェラルに書き込まれたデータの読み出しを行う必要のある命令が含まれている場合（あるいは、外部ペリフェラルへのデータの書き込みを行う必要のある命令が含まれている場合）、外部ペリフェラルから読み出して一旦内部ペリフェラルに書き込んだ後処理を行う場合と外部ペリフェラルから直接読み出して処理する場合（あるいは、内部ペリフェラルに一旦データを書き込んで外部ペリフェラルに書き込む場合と、直接外部ペリフェラルに書き込む場合）とで、別途オブジェクトコードを作成し、ソースプログラムに記述された外部ペリフェラルに対するアクセススピードをもとに、ソースプログラムの実動作を演算し、どちらのソースプログラムが、実動作時間が少ないかを判別して、少ない方のオブジェクトコードを出力するようになっている。
【００４６】
以下、実施例中、内部ペリフェラルに一旦データを書き込んで処理する場合を一時コピーがある場合、内部ペリフェラルを介さず直接外部ペリフェラルに読み出し及び／又は書き込みを行う場合を一時コピーがない場合と称する。
【００４７】
以上を前提にしたうえで、図２のフローチャートをさらに説明する。
【００４８】
ＣＰＵ２は、メモリ４に格納されたプログラムのソースコードに対して一時コピーあり（又は一時コピーなし）の命令を出力する（最適化指示処理：ステップＳ２２０）。
【００４９】
次いで、ＣＰＵ２からのコンパイラ処理命令により、メモリ４に格納されたコンパイラ処理プログラムが実行され、メモリ４に格納されたソースプログラムに対してコンパイルが行われオブジェクトコードを作成する（論理解析処理：ステップＳ２２１）。
【００５０】
次いで、ＣＰＵ２は、ソースプログラムに記述された外部ペリフェラルへのアクセススピードをもとに、一時コピーがある場合（又は一時コピーなしの場合）のソースプログラムの実動作速度が演算される（アクセススピード演算処理：ステップＳ２２２）。この演算処理の詳細は後述する。
【００５１】
そして、ＣＰＵ２は、再び最適化指示処理２２に戻り、今度は一時コピーなしの場合（又は一時コピーある場合）についての命令をメモリ４に出力し（最適化指示処理：ステップＳ２２０）、ＣＰＵ２からのコンパイラ処理命令によりソースプログラムのコンパイラが実行されてオブジェクトコードが生成され（論理解析処理：ステップＳ２２１）、一時コピーなしの場合（または一時コピーなしの場合）の実動作速度が演算され（アクセススピード演算処理：ステップＳ２２２）、一時コピーなしの場合（又は一時コピーある場合）のオブジェクトコードがメモリ４に格納される。
【００５２】
ここで、メモリ４には、一時コピーある場合とない場合のオブジェクトコードが格納され、また、一時コピーある場合のプログラムの実動作速度と、ない場合のプログラムの実動作速度とが格納されることになる。
【００５３】
ＣＰＵ２は、この２つの実動作速度を比較してどちらが速いかを演算し、早い速度を有する方のオブジェクトコードをメモリ４の所定領域に格納させる（最適化指示処理：ステップＳ２２０）。
【００５４】
そして、ＣＰＵ２は、必要に応じてメモリ４から記録部６に選択されたオブジェクトコードを出力させるようメモリ４を制御し、記録部６で上述した記録媒体にオブジェクトコードを記録又は焼付けを行う（オブジェクトコード出力処理：ステップＳ２３）。
【００５５】
図３は、コンパイル装置１によってコンパイルされたオブジェクトコードが実行される実行環境を示す構成図である。
【００５６】
本実行環境は、システムＬＳＩ３１と、外部ペリフェラル３７とから構成され、外部バス３６を介して互いに接続されている。
【００５７】
システムＬＳＩ３１は、ＣＰＵ３２と、内部ペリフェラル３３とバッファ３５とから構成され、互いに内部バス３４を介して接続されている。
【００５８】
ＣＰＵ３２は、種々の演算や処理が行われ内部バス３４を介して内部ペリフェラル３３や、バッファ３５の制御等を行うとともに、外部バス３６を介して外部ペリフェラル３７の制御等も行う。
【００５９】
内部ペリフェラル３３は、図１及び図２によってコンパイルされたオブジェクトコードが格納され、ＣＰＵ３２によって演算されたプログラム（オブジェクトコード）の演算結果も格納される。そのほか、内部ペリフェラル３３には、ＣＰＵ３２の処理に応じて種々のデータが格納される。内部ペリフェラル３３は、本実施例では、ＳＤＲＡＭによって構成されている。勿論、その他、読み出し及び／又は書き込み可能なメモリ（例えば半導体メモリ）でもよい。
【００６０】
バッファ３５は、内部バス３４と外部バス３６に接続され、内部バス３４に転送されるデータと外部バス３６に転送されるデータとが夫々入出力され、転送されるデータを一時記憶する。内部バス３４と外部バス３６とのデータの転送レートの違いを吸収するためである。本実施例では、内部バス３４は外部バス３６に比べてデータの転送レートが高く、内部バス３４を介して入力されたデータを外部バス３６に出力させる場合に外部バス３５のデータ転送レートで出力されるようバッファ３５でデータが一時記憶されることになる。
【００６１】
外部ペリフェラル３７は、外部バス３６と接続され、内部ペリフェラル３３に格納されたプログラムを実行させる上で、種々の演算データが格納される。外部ペリフェラル３７は、本実施例ではＳＤＲＡＭによって構成されているが、その他読み出し及び／書き込み可能なメモリ（例えば半導体メモリ）や、そのメモリを有するチップ、例えば種々のデータエンコーダ及び／又はデコーダ（ＭＰＥＧエンコーダチップなど）用のチップであってもよい。
【００６２】
かかるプログラムの実行環境において、図４に示すソースプログラムのコンパイル及びコンパイル後のオブジェクトコードによる実行動作について説明する。
【００６３】
まず、図４のソースプログラムについて説明する。
【００６４】
図４のプログラム（ｓａｍｐｌｅ１．ｃ）４１は、Ｃ言語によって記述され、全体として、変数宣言部４２、アクセススピード定義部４３、演算処理部４４とから構成されている。
【００６５】
変数宣言部４２は、いわゆる大域変数が定義されており、ここでは、変数ｉ、ｏｕｔ，  ｗｏｒｋ  が整数宣言され、変数ｗｏｒｋには“１００”の値が格納されている。本実施例では、この変数ｗｏｒｋに格納されるべき“１００”の値が図２の外部ペリフェラル３７に格納されている。それ以外の変数は内部ペリフェラル３３に格納されるものとする。
【００６６】
アクセススピード定義部４３は、プラグマ方式によって定義され、”ｗｏｒｋ＿ｓｐｅｅｄ＿ｒ    ８”は、外部ペリフェラル３７に格納された変数ｗｏｒｋの値”１００”をＣＰＵ３２が読み出すのに内部ＣＰＵ３２のサイクル数で８サイクル必要という意味である。また、”ｗｏｒｋ＿ｓｐｅｅｄ＿ｗ    ６”は、ＣＰＵ３２から外部ペリフェラル３７に変数ｗｏｒｋの値”１００”を書き込むのに内部ＣＰＵ３２のサイクル数で６サイクル必要という意味である。上述した実動作速度の演算はこのソースプログラムにプラグマ方式で記述されたこのサイクル数をもとに演算される。ここで、プラグマ方式とは、特定のコンパイラによって認識可能な命令である。したがって、本コンパイラ以外の他のコンパイラプログラムによっては定義された命令は上述のように解釈することはできず、実動作速度の演算を行うことができない。
【００６７】
演算処理部４４で記述された内容は、外部ペリフェラル３７に格納されている変数ｗｏｒｋの値を内部ペリフェラル３３に格納されるべき変数ｏｕｔに代入（”ｏｕｔ  ＝  ｗｏｒｋ”）する操作を２回行うこと（”ｆｏｒ（ｉ＝  ０；  ｉ＜２；  ｉ＋＋）”）    を意味している。
【００６８】
図４に示すソースプログラムは図１に示すコンパイラ装置１によってコンパイルされる。
【００６９】
具体的には、図１に示すＨＤＤ３に、図４に示すソースプログラム（ｓａｍｐｌｅ１．ｃ）４１が格納され、ＣＰＵ２の制御により、メモリ４にソースプログラム（ｓａｍｐｌｅ１．ｃ）４１が格納される（ソースファイル読み込み処理：ステップ２１（図２参照））。
【００７０】
次いで、すでにメモリ４に格納されたコンパイルプログラムをもとにＣＰＵ２の制御によりソースプログラム（ｓａｍｐｌｅ１．ｃ）４１のオブジェクトコードの生成が行われる（オブジェクトコード生成処理：ステップＳ２２）。
【００７１】
オブジェクト生成処理２５は、まず、ＣＰＵ２が一時コピーありの場合のオブジェクトコードの生成を行うよう指示する（最適化指示処理：ステップＳ２２０）。もちろん、先に一時コピーなしの場合のコード生成を指示してもよい。
【００７２】
次いで、実際にソースプログラム（ｓａｍｐｌｅ１．ｃ）４１に対してＣＰＵ２の制御によりオブジェクトコードの生成が行われる（論理解析処理：ステップＳ２２１）。
【００７３】
次いで、プラグマ方式で記述されたソースプログラム（ｓａｍｐｌｅ１．ｃ）４１のアクセススピード４３をもとにアクセススピード演算処理（ステップＳ２２２）がＣＰＵ２によって行われる。
【００７４】
ここでは、最適化指示処理（ステップＳ２２）によって、一時コピーありの場合が指示されているので、まず一時コピーありの場合の演算処理について説明する。
【００７５】
一時コピーを行う場合は、上述したように、ソースプログラム内で命令の処理を行う前に外部ペリフェラル３７に格納されたデータを内部ペリフェラル３３に一時記憶する処理を行う。
【００７６】
かかる処理に必要な実動作速度は、ソースプログラム（ｓａｍｐｌｅ１．ｃ）４１のアクセススピード定義４３によって定義されたサイクル数をもとに演算されることになる。図４に示した例では”ｗｏｒｋ＿ｓｐｅｅｄ＿ｒ    ８”と記述されているので、変数ｗｏｒｋの値”１００”を読み出すには８サイクル必要となる。したがって、ＣＰＵ３２は、実際に外部ペリフェラル３７から変数ｗｏｒｋの値を読み出すのに８サイクルかかることになる。そして、読み出した変数ｗｏｒｋの値を内部ペリフェラル３３に書き込むのに１サイクル必要となる。したがって、一時コピーの実動作速度は８サイクル＋１サイクル＝９サイクル必要になる。
【００７７】
図４に示すソースプログラム（ｓａｍｐｌｅ１．ｃ）４１の演算処理４４は、”ｏｕｔ  ＝ｗｏｒｋ”と記述されている。まず、変数ｗｏｒｋの値を読み出して、次に変数ｏｕｔに書き込む処理を行うことになるが、変数ｗｏｒｋの値はすでに外部ペリフェラル３７から内部ペリフェラル３３に一時記憶（一時コピー）されているので、変数ｗｏｒｋの値の読み出しには、ＣＰＵ３２は１サイクル必要である。そして、読み出した変数ｗｏｒｋの値を変数ｏｕｔに書き込むためには１サイクル必要である。したがって、変数ｗｏｒｋの値を変数ｏｕｔに代入するのに必要な実動作速度は全部で２サイクル必要である。ソースプログラム（ｓａｍｐｌｅ１．ｃ）４１の演算処理部４４では、ｆｏｒ文に記述されているように、これを２回繰り返すことになるので、全部で４サイクル必要となる。
【００７８】
以上により、一時コピーを行う場合に図４に示す演算処理４４を実行するのに必要な実動作速度は、ＣＰＵ３２のサイクル数で、９サイクル＋４サイクルの１３サイクル必要となる。
【００７９】
この１３サイクル必要であるという情報がオブジェクトコードとともに図１のメモリ４に格納される（図２のアクセススピード演算処理：ステップＳ２２２）。または、オブジェクトコードに直接記述するようにしてもよい。直接記述する場合は、オブジェクトコードが格納されたメモリ４の所定領域に対してＣＰＵ２が、サイクル数が格納されるようメモリ４を制御することで、実現することができる。これにより例えばコメントやラベル表示により実動作速度がオブジェクトコードに記述されることになる。
【００８０】
次いで、ＣＰＵ３２は、一時コピー無しのオブジェクトコード作成の指示命令をメモリ４に出力する（最適化指示処理：ステップＳ２２０）。
【００８１】
メモリ４に格納されたコンパイラプログラムによってＣＰＵ３２は、一時コピーなしの場合の、オブジェクトコードの作成を行うことになる（論理解析処理：ステップＳ２２１）。
【００８２】
次いで、ＣＰＵ３２は、ソースプログラム（ｓａｍｐｌｅ１．ｃ）４１のプラグマ方式で記述されたアクセススピード４３をもとにアクセススピードの演算を行う。
【００８３】
一時コピーなしの場合の演算は以下のようになる。
【００８４】
変数ｗｏｒｋを外部ペリフェラル３７からＣＰＵ３２が読み出すのに、アクセススピード定義部４３から８サイクル必要である。ＣＰＵ３２が読み出した変数ｗｏｒｋを変数ｏｕｔに書き込むために、１サイクル必要である。よって、ソースプログラム（ｓａｍｐｌｅ１．ｃ）４１の”ｏｕｔ  ＝  ｗｏｒｋ”を実行するのに一時コピーなしの場合は９サイクル必要であり、演算処理４４はｆｏｒ文により２回繰り返すことになるので、９サイクル×２＝１８サイクル必要となる。
【００８５】
この１８サイクルという情報が、ソースプログラム（ｓａｍｐｌｅ１．ｃ）４１のオブジェクトコードとともにメモリ４に格納されることになる（アクセススピード演算処理２４）。または、このサイクル数がオブジェクトコードに記述されるようにしてもよい。直接記述する場合は、オブジェクトコードが格納されたメモリ４の所定領域に対してＣＰＵ２が、サイクル数が格納されるようメモリ４を制御することで、実現することができる。これにより例えばコメントやラベル表示により実動作速度がオブジェクトコードに記述されることになる。これにより例えばコメントやラベル表示によりオブジェクトコードに実動作速度が直接記述されることになる。
【００８６】
次いで、ＣＰＵ３２は、アクセススピード演算処理２４で演算した２つの実動作速度から最適なオブジェクトコードを選択する。ここでは、一時コピーある場合は１３サイクル、一時コピーなしの場合は１８サイクル必要であったので、少ないサイクル数である一時コピーある場合のオブジェクトコードを選択する（最適化指示処理：ステップＳ２２０）。
【００８７】
選択されたオブジェクトコードは演算した実動作速度とともにメモリ４から出力され上述したオブジェクトコード出力処理（ステップＳ２３）が、ＣＰＵ３２の制御により行われることになる。以上によりコンパイルの動作が終了する（ステップＳ２４）。
【００８８】
上述した例では、一時コピーありの場合をまず演算したが、勿論先に一時コピーなしの場合を演算しその後一時コピーあるの場合を演算してもよい。また、一時コピーある場合とない場合とでおのおのオブジェクトコードを作成したが、最初に一時コピーある場合でオブジェクトコードを作成したとき次に一時コピーなしの場合ではアクセススピードを演算するのみでオブジェクトコードを作成しないようにすることも可能である。
【００８９】
次に、外部ペリフェラル３７へのアクセスが生じたとき、アクセス待ちの期間にＣＰＵ３２内で他の処理を実行させて、全体として処理時間の短縮を図る実施例について説明する。
【００９０】
図５は、本発明が実施されるＣＰＵ３２の具体的構成を示す図である。
【００９１】
ＣＰＵ３２は、演算部５１、プログラムを処理するためのデータが格納されるレジスタ群３２、及びレジスタ５２等を制御する外部アクセス制御部３３とから構成され、演算部３１、レジスタ群３２、外部アクセス制御部３３は内部バス１４に接続されている。また、演算部５１と、外部アクセス制御部５３及び各レジスタ５２とは、夫々個別に制御バスによって接続されている。
【００９２】
演算部３１は、各種プログラムが実行される際にレジスタに格納された変数などのデータを利用して種々の演算を行う。
【００９３】
レジスタ群５２は、プログラムの実行時に使用される変数などのデータが格納される。
【００９４】
外部アクセス制御部３３は、各レジスタ５２へのデータの格納について、各レジスタ５２を制御する。
【００９５】
このような構成で、ＣＰＵ３２でプログラム（プログラムの実行コード、すなわちオブジェクトコード）が実行されるときに、外部ペリフェラル３７へのアクセス要求が発生した場合は以下のように動作する。
【００９６】
まず、演算部５１から外部ペリフェラル３７へのアクセス命令が内部バス３４−１を介して外部ペリフェラル３７に出力される。このアクセス命令には、格納すべきレジスタ５２の番号が指定され、外部ペリフェラル３７に格納されたデータが読み出されとき、指定された番号のレジスタ５２に内部バス３４−３を介して入力されるようになっている。
【００９７】
従来は、プログラム実行時に使用されるデータがレジスタ５２に格納された時に制御バス５５を介してレジスタ５２にデータが格納されたことを示す制御データが、各レジスタ５２から演算部５１に出力される。この出力を検出することで、演算部５１はその後の処理が行われる。すなわち、外部ペリフェラル３７へのアクセスが生じたとき、演算部５１は、レジスタ５２にデータが格納されるまで処理待ちの状態で、レジスタ５２にデータが格納されたことを示す上述の制御データが入力された段階で処理待ちの状態が解除され、その後の処理が行われる。したがって、外部ペリフェラル３７へのアクセスが生じたとき、データの読み出しに時間がかかり、その時間分だけ処理待ちの状態が発生し、全体として処理スピードの向上が図れなかった。
【００９８】
そこで、本発明では、ＣＰＵ３２内に外部アクセス制御部５３を備え、このアクセス制御部５３によりレジスタ群５２を制御することで、処理待ちの間でも他の処理が行えるようにしている。
【００９９】
具体的には図６に示すように各レジスタ５２に対してフラグ部６１を設け、外部アクセスで読み込むべきデータを格納するレジスタ５２に対応するフラグをセットし、当該レジスタ５２を使用禁止にし、以後他のレジスタを使用して通常の処理の実行を進める。
【０１００】
すなわち、外部アクセス命令が演算部５１で発行されると、演算部５１はそのアクセス命令を外部アクセス制御部５３に出力する。上述したようにアクセス命令には、格納すべきレジスタの番号が記述されているので、この情報をもとに外部アクセス制御部５３は、格納すべきレジスタ５２に対応するフラグ６１をセットする（例えば“１”をフラグ６１に格納する）。そして、フラグがセットされたレジスタ５２からは、レジスタ５２にデータが格納されたことを示す制御データを、制御バス５５を介して演算部５１に出力する。この制御データを受けた演算部５１は、レジスタ５２にデータが書き込まれたことを認識することになるので、外部ペリフェラル３７から実際にデータが書き込まれる前でもその後の処理を行うことができる。ちなみに、この各フラグ６１は通常“０”が格納されクリアされている状態となっている。
【０１０１】
外部アクセス制御部５３は、さらに、内部バス３４−２を介して外部ペリフェラル３７に対し演算部５１からのアクセス命令を出力する。
【０１０２】
アクセス命令を受け取った外部ペリフェラル３７は、所定のメモリ領域に格納された必要なデータを読み出し、内部バス（３４、３４−３）を介して実際にレジスタ５２にデータを格納する。
【０１０３】
実際にレジスタ５２にデータが格納されたときフラグ６１はクリアされ（例えば“０”）、外部アクセスへの処理が終了したことになる。
【０１０４】
なお、ここで外部アクセス処理が行われている間に、外部からのデータが書き込まれるべきレジスタ５２に演算部５１がアクセスすると、実際にはデータが書き込まれていないので、上述した処理待ちの状態になり、データがレジスタ５２に書き込まれるまで、演算部５１でのその後の処理が行われないことになる。
【０１０５】
次に、図５及び図６に示すＣＰＵ３２を有する図３のプログラム実行環境において、ソースプログラムのコンパイル時に上述したアクセススピード４３を用いて外部へのアクセスを行っている間に処理可能な命令を検索し内部処理できる命令を同時に実行させる、実施例について説明する。
【０１０６】
図７は、かかる一連の処理のうち図１に示すコンパイリング装置１においてコンパイルを行う際のコンパイル動作のフローチャートを示す。
【０１０７】
まず、図１の外部インターフェース５に外部装置、例えばキーボード等からコンパイルを指示する命令が入力されると、その命令をＣＰＵ２に出力し、ＣＰＵ２はコンパイル処理が開始されることになる（ステップＳ７０）。
【０１０８】
次いで、ＨＤＤ３に格納されたコンパイルプログラムがＣＰＵ２の制御により読み出され、メモリ４に格納される。そして、ＨＤＤ３に格納されたソースプログラムがＣＰＵ２の制御により読み出されてメモリ４に格納され、ソースファイルの読み込み処理が行われる（ソースファイル読み込み処理：ステップＳ７１）。
【０１０９】
次いで、メモリ４に読み込まれたコンパイラプログラムを用いてメモリ４に読み込まれたソースプログラムのコンパイルをＣＰＵ３２の制御により行われ、オブジェクトコードが出力される（論理解析処理：ステップＳ７２０）。生成したオブジェクトコードはメモリ４に格納される。
【０１１０】
次いで、ソースプログラムに記述されたアクセススピードをもとに、外部アクセスが行われている間に処理可能な命令を検索して、ソースプログラムの順番を入れ換える（命令順序変換処理：ステップＳ７２１）。
【０１１１】
この命令順序変換処理７３について、図８に示すソースプログラム（ｓａｍｐｌｅ２．ｃ）８１をコンパイルする場合で説明する。
【０１１２】
図８に示すソースプログラム（ｓａｍｐｌｅ２．ｃ）８１は変数宣言部８２と、アクセススピード定義部８３と、演算処理部８４とから構成され、アクセススピード定義部８３は、図４と同様にプラグマ方式によって記述され、変数ｗｏｒｋの値は外部ペリフェラル３７（図３）に格納され、その値を読み出すのに内部ＣＰＵ３２のサイクル数で８サイクル必要（”ｗｏｒｋ＿ｓｐｅｅｄ＿ｒ  ８”）で、外部ペリフェラル３７に書き込むには６サイクル必要（”ｗｏｒｋ＿ｓｐｅｅｄ＿ｗ  ９”）であることが、記述されている。
【０１１３】
このソースプログラム（ｓａｍｐｌｅ２．ｃ）８１は、ＨＤＤ３に格納されており、ＣＰＵ２の制御によりメモリ４に格納され（ソースファイル読み込み処理：ステップＳ７１）、メモリ４に格納したコンパイルプログラムによりオブジェクトコードが生成される（論理解析処理：ステップＳ７２０）。
【０１１４】
ソースプログラム（ｓａｍｐｌｅ２．ｃ）８１の演算処理部８４第２行目の命令（”ｊ  ＝ｉ＋  ２”）は、変数ｊに変数ｉに２を加えた値を代入する処理である。ここで、変数ｉ、ｊともに内部ペリフェラル３３に格納された値であるので、ＣＰＵ３２は、変数ｉの読み出しにＣＰＵ３２のサイクル数で１サイクル、変数ｉに２を加える演算に１サイクル、さらに演算した結果を変数ｊに書き込む（演算結果を内部ペリフェラル３３に書き込む）処理に１サイクル必要である。したがって、”ｊ  ＝  ｉ＋  ２”の実行演算速度は３サイクルである。
【０１１５】
一方、演算処理部８４の第３行目の命令（”ｏｕｔ  ＝  ｗｏｒｋ”）は、変数ｗｏｒｋの値を変数ｏｕｔに代入する処理である。ここで、アクセススピード定義部８３によって変数ｗｏｒｋは、外部ペリフェラル３７に格納された値であって、その値を読み出すのに８サイクル（”ｗｏｒｋ＿ｓｐｅｅｄ＿ｒ  ８”）必要である。そして読み出した変数ｗｏｒｋの値を変数ｏｕｔに書き込む（内部ペリフェラル３３に書き込む）のに１サイクル、したがって第３行目の命令（”ｏｕｔ  ＝  ｗｏｒｋ”）を実行させるのに必要な実動作速度は９サイクル必要となる。
【０１１６】
ここで、ＣＰＵ２は、外部アクセス命令の後にＣＰＵ３２が処理実行可能な命令を命令順序変換処理７３において検索する。検索は、アクセススピード定義部で定義されたアクセス数分に達した時点で終了する。
【０１１７】
具体的には、以下のようになる。
【０１１８】
ソースプログラム（ｓａｍｐｌｅ２．ｃ）８１では、第２行目の命令（”ｊ  ＝  ｉ＋  ２”）が外部アクセスの必要がない命令である。また、第３行目の命令（”ｏｕｔ  ＝  ｗｏｒｋ”）は変数ｗｏｒｋの値が外部ペリフェラル３７に格納された値であるので、外部アクセスが必要な命令である。よって、第３行目（”ｏｕｔ  ＝  ｗｏｒｋ”）の命令をＣＰＵ３２が実行する間に処理実行可能な命令を検索することができる。第２行目（”ｊ  ＝  ｉ＋  ２”）の命令の実動作速度は３サイクルで、外部へのアクセスには８サイクル必要なので、外部アクセスの８サイクル中に第２行目の命令（”ｊ  ＝  ｉ＋  ２”）は処理可能である。したがって、第２行目（”ｊ  ＝  ｉ＋  ２”）の命令の順序を、外部アクセスが必要な命令である第３行目（”ｏｕｔ  ＝  ｗｏｒｋ”）の命令と入れ換えることができる。まだ、５サイクル分の余裕があるので、５サイクルで処理可能な命令を検索することができるが、ソースプログラム（ｓａｍｐｌｅ２．ｃ）８１は他に命令がないので、これで入れ換え可能な命令の検索を終了することになる。勿論、ソースプログラム（ｓａｍｐｌｅ２．ｃ）８１の演算処理部８４で第２行目と第３行目間に５サイクルでシステムＬＳＩ３１内で処理可能な実行命令があれば、順序を入れ換え、”ｏｕｔ  ＝  ｗｏｒｋ”を最初に、２番目に”ｊ  ＝  ｉ＋  ２”，３番目がその命令となる。さらに、別の命令があった場合には、すでにアクセススピード定義部で定義されたアクセス数分（８サイクル）に達することになるので順序入れ換え可能な命令の検索は終了することなる。
【０１１９】
このようにオブジェクトコードの命令順序を入れ換えることで、図５及び図６に示すＣＰＵ３２内で外部アクセス制御部５３は、先に外部ペリフェラル３７へのアクセス命令を実行でき、実際に外部ペリフェラル３７に格納された値を読み出すまでの間、すなわち、演算処理８４の第３行目（”ｏｕｔ  ＝  ｗｏｒｋ”）の演算が実行される間、次の処理、すなわち演算処理８４の第２行目（”ｊ  ＝  ｉ＋  ２”）の演算処理を行うことができる。
【０１２０】
順序入れ換えた場合の実動作速度は、変数ｗｏｒｋを読み出している８サイクルの間に、３サイクル必要な第２行目の命令（”ｊ  ＝  ｉ＋  ２”）を実行するため、第２行目（”ｊ  ＝  ｉ＋  ２”）、３行目（”ｏｕｔ  ＝  ｗｏｒｋ”）の実動作速度は９サイクル（変数ｏｕｔへの書き込みに１サイクル必要なので８サイクル＋１サイクル＝９サイクル）、さらに第１行目（”ｆｏｒ（ｉ＝  ０；  ｉ＜２；  ｉ＋＋）”）により２回この命令を繰り返すことになるので、全部で９サイクル×２＝１８サイクル必要となる。
【０１２１】
一方、順序を入れ換えない場合の実動作速度は、演算処理８４の第２行目の命令（”ｊ  ＝  ｉ＋  ２”）に３サイクル、第３行目の命令  （”ｏｕｔ  ＝  ｗｏｒｋ”）に９サイクル、さらに第１行目（”ｆｏｒ（ｉ＝  ０；  ｉ＜２；  ｉ＋＋）”）によりこの命令を２回繰り返しているので全部で、１２サイクル×２＝２４サイクル必要となる。
【０１２２】
この順序を入れ換えたプログラムの実動作速度は、オブジェクトコードが格納される図１のメモリ４の所定領域に格納されるよう、ＣＰＵ２がメモリ４を制御することで、例えばオブジェクトコードのラベル、コメントとして直接オブジェクトコードに記述されることになる。
【０１２３】
図７のフローチャートに戻って、命令順序変換処理（ステップＳ７２１）によって順序が入れ換えられたオブジェクトコードがメモリ４に格納され、その後ＣＰＵ２の制御によりメモリ４から記録手段６に転送されて上述した記録等の処理が行われる（オブジェクトコード出力処理：ステップＳ７３）。以上によりコンパイルの動作が終了する（ステップＳ７４）。
【０１２４】
上述のソースプログラム（ｓａｍｐｌｅ２．ｃ）８１は読み込みの例だけで説明したが、もちろん書き込みの例の場合も同様に処理され、命令の順序入れ換えが可能であれば、入れ換えが行われることになる。例えば、ソースプログラム（ｓａｍｐｌｅ２．ｃ）８１の演算処理８４の第３行目が”ｗｏｒｋ  ＝  ｏｕｔ”と記述されていれば、外部ペリフェラル３７への変数書き込みになるので、これがＣＰＵ３２で実行される間に処理可能な命令を同様に検索して、第２行目の命令”ｊ  ＝  ｉ＋  ２”と順序を入れ換えてオブジェクトコードが作成されることになる。
【０１２５】
図２のアクセススピード演算処理２４や図４の命令順序入れ換え処理７３で演算した実動作速度は、さまざまな用途に使用されることが考えられる。例えば、プログラムのシュミレーションである。
【０１２６】
例えば図３に示す実行環境で、実際に作成したプログラムがどれほどの実動作速度を有するかを知ることにより、ソースプログラムで命令数を削減して処理スピードを高めるなどのプログラムの変更を容易に行うことができる。
【０１２７】
従来技術で述べたように従来はプログラムの実行命令はすべて１サイクルとして演算されていたが、外部メモリとのデータの読み書きに実際には数サイクル必要であるので、実動作時とシュミレーション時とで実行スピードの乖離があった。
【０１２８】
このように演算された実動作速度をオブジェクトコードとともに表示されていれば、プログラムのシュミレーションを行っても正確な見積もり作業を行うことが可能である。
【０１２９】
図９は、デバック情報として実動作速度が記述されたオブジェクトコードの例である。
【０１３０】
上述したようにアクセススピードを演算するソースプログラムのコンパイル時（図２参照）には、オブジェクトコードが格納されたメモリ４に対してＣＰＵ２がメモリ４の所定領域に演算した実動作速度が格納されるようメモリ４を制御することで記述することができる。あるいは、命令順序を入れ換えるコンパイル時（図７参照）には、オブジェクトコードが格納される図１のメモリ４の所定領域に演算した実動作速度が格納されるよう、ＣＰＵ２がメモリ４を制御することで、例えばオブジェクトコードのラベル、コメントとして直接オブジェクトコードに記述されることになる。
【０１３１】
これにより図９に示すよう、コメントやラベル表示により実動作速度がオブジェクトコードに直接記述されることになる。
【０１３２】
図９に示す例は、ｇｃｃコンパイラによって生成されたコードに、実動作速度を記述したオブジェクトコードの一例である。
【０１３３】
この例では、通常のオブジェクトコード９１の所定位置に実行速度がサイクル数として表示９２されている。すなわち、コメント表示として記号（＃）以降にソースプログラム４１の演算処理４４に対する実行速度がサイクル数（８サイクル）として表示されている。
【０１３４】
これにより、目視により容易にコードの実行速度を把握することが可能となる。
【０１３５】
（付記１）外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第１のステップと、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第２のステップと、前記第２のステップで演算した実動作速度を比較して、実動作速度の速い前記第１のステップで作成したオブジェクトコードを選択して出力する第３のステップとを有することを特徴とするコンパイル方法。
【０１３６】
（付記２）前記第３のステップは、前記出力されるオブジェクトプログラムに前記第２のステップで演算した実動作速度を記述する、ことを特徴とする付記１記載のコンパイル方法。
【０１３７】
（付記３）前記アクセス速度は、前記オブジェクトコードが実行されるプロセッサのサイクル数であることを特徴とする付記１記載のコンパイル方法。
【０１３８】
（付記４）前記アクセス速度は、プラグマ方式で記述されることを特徴とする付記１記載のコンパイル方法。
【０１３９】
（付記５）外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第１のステップと、前記ソースプログラムに記述された外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第２のステップと、前記第２のステップで演算した実動作速度を比較して、実動作速度の速いオブジェクトコードを選択して出力する第３のステップと、を有することを特徴とするコンパイルプログラムが格納されたプログラム記録媒体。
【０１４０】
（付記６）前記第３のステップは、前記出力されるオブジェクトプログラムに前記第２のステップで演算した実動作速度を記述する、ことを特徴とする付記５記載のコンパイラプログラムが格納されたプログラム記録媒体。
【０１４１】
（付記７）外部記憶手段へのアクセスが必要な命令を含むソースプログラムが格納される記憶手段と、前記ソースプログラムをオブジェクトプログラムに変換し、ソースプログラムに記述された外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算し、前記実動作速度の速い前記オブジェクトプログラムを選択して出力する処理手段と、を有することを特徴とするコンパイリング装置。
【０１４２】
（付記８）前記処理手段は、前記アクセス速度に基づいて前記ソースプログラムの実動作速度を前記出力されるオブジェクトプログラムに記述する、ことを特徴とする付記７記載のコンパイリング装置。
【０１４３】
（付記９）オブジェクトプログラムが格納される内部記憶手段と、前記内部記憶手段に記憶されたオブジェクトプログラムを処理する処理手段とを有し、前記オブジェクトプログラムは、ソースプログラムに記述された外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算した結果、実動作速度の速いオブジェクトプログラムであること、を特徴とするシステムＬＳＩ。
【０１４４】
（付記１０）前記オブジェクトプログラムには、演算した前記実動作速度が記述される、ことを特徴とする付記９記載のシステムＬＳＩ。
【０１４５】
（付記１１）外部記憶手段に記憶されたデータが入力されるレジスタと、前記レジスタに記憶された前記データに基づいて演算を行う演算手段と、前記演算手段から前記外部記憶手段へのアクセス要求命令が入力されて、前記データの入力を行うレジスタへのアクセスが行われないように前記レジスタを制御する外部アクセス制御部とを備え、前記演算部は前記外部アクセス制御部が前記外部記憶手段へアクセスを行っている間、他の命令に対する演算を行うことを特徴とするデータ処理装置。
【０１４６】
（付記１２）外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第１のステップと、前記ソースプログラムにおいて、前記外部記憶手段へのアクセスが必要な命令と、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて前記外部記憶手段へのアクセスを行っている間に実行可能な他の命令との順序を、前記ソースプログラムに記述されている順序が、前記アクセスが必要な命令よりも前記他の命令が先にある場合に入れ換える第２のステップと、前記第２のステップで順序を入れ換えたオブジェクトコードを出力する第３のステップと、を有することを特徴とするコンパイル方法。
【０１４７】
（付記１３）前記第３のステップは、前記アクセス速度に基づいて前記ソースプログラムの実動作速度を前記出力されるオブジェクトプログラムに記述する、ことを特徴とする付記１２記載のコンパイル方法。
【０１４８】
【発明の効果】
本発明によれば、ソースプログラム内に外部ペリフェラルに対するアクセススピードが定義されているので、コンパイル時に外部ペリフェラルへのアクセスを考慮した最適なオブジェクトコードを作成することができるとともに、短い設計時間で高性能のオブジェクトコードを作成することができる。また、ソースプログラムの設計途中に外部ペリフェラルが変更された場合でも、アクセススピード定義を変更するだけで、ソースプログラムの設計変更が可能になり、仕様変更に対しても柔軟に対応することができる。変更前のソースプログラムの再利用も可能となる。さらに、オブジェクトコードに実動作速度が記述されるので、シュミレーションを行った場合でも実動作とシュミレーションとの実行スピードについて正確な見積もり作業を行うことができる。
【図面の簡単な説明】
【図１】図１は、本発明が適用されるコンパイリング装置１の構成図を示す。
【図２】図２は、ソースプログラムの実行速度の演算を行うコンパイル動作のフローチャートを示す図である。
【図３】図３は、コンパイルされたオブジェクトコードが実行される実行環境の構成図を示す。
【図４】図４は、実行速度の演算を行うコンパイル対象のソースプログラムの一例を示す図である。
【図５】図５は、ＣＰＵ３２の内部構成を示す図である。
【図６】図６は、ＣＰＵ３２の詳細な内部構成を示す図である。
【図７】図７は、ソースプログラムの演算命令の順序を入れ換えるコンパイル動作のフローチャートを示す図である。
【図８】図８は、命令順序の入れ換えを行うコンパイル対象のソースプログラムの一例を示す図である。
【図９】図９は、プログラムの実行速度が付与されたオブジェクトコードの一例を示す図である。
【図１０】図１０は、複数のプログラムを同時に実行するときのパイプライン処理についての説明図である。
【図１１】図１１は、プログラムに外部装置へのアクセスを行う命令が含まれているときのパイプライン処理についての説明図である。
【符号の説明】
１  コンパイリング装置  ２  ＣＰＵ  ３  ＨＤＤ  ４  メモリ  ６  記録部７  記録媒体  ３１  システムＬＳＩ  ３２  ＣＰＵ  ３３  内部ペリフェラル  ３５  バッファ  ３７  外部ペリフェラル  ５１  演算部  ５２  レジスタ群  ５３  外部アクセス制御部  ６１  レジスタフラグ群
【図１】
2004220085.tif 000003
【図２】
2004220085.tif 000004
【図３】
2004220085.tif 000005
【図４】
2004220085.tif 000006
【図５】
2004220085.tif 000007
【図６】
2004220085.tif 000008
【図７】
2004220085.tif 000009
【図８】
2004220085.tif 000010
【図９】
2004220085.tif 000011
【図１０】
2004220085.tif 000012
【図１１】
2004220085.tif 000013