(57)【要約】      （修正有）【課題】メモリの一部を一時的にゲストハードウエアのレジスタによって代行させる際に、ソースコード上での区別を不要にし、設計や検証の効率化を図る。【解決手段】プロセッサとメモリとゲストハードウエアからなるシステムに組み込む転送機構と、プロセッサの実行する命令列を再構成するリアセンブラとを備える。リアセンブラは、ソースコードおよび該ソースコードからコンパイルされた第１のバイナリコードを取り込んで、転送機構の動作の手がかりとなり且つプロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成してメモリにロードする。転送機構は、プロセッサが実行するメモリとの間の読み書き処理のうち、ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、ゲストハードウエアと所定のレジスタとの間で読み書きを実行させる。【選択図】図１
2009230545.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリとゲストハードウエアとの間でのデータ転送を処理する転送機構と、前記プロセッサの実行する命令列を再構成するリアセンブラとを備えた処理装置であって、
前記リアセンブラは、ソースコードおよび該ソースコードからコンパイルされた第１のバイナリコードを取り込んで、前記転送機構の動作の手がかりとなり且つ前記プロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成して前記メモリにロードし、
前記転送機構は、前記プロセッサと前記メモリとの間の命令およびデータの読み書きの監視を行い、前記プロセッサが実行する前記メモリとの間の読み書き処理のうち、前記ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、前記ゲストハードウエアと所定のレジスタとの間で読み書きを実行させることを特徴とする処理装置。
【請求項２】
請求項１に記載の処理装置において、
前記リアセンブラは、前記ソースコードと前記第１のバイナリコードを取り込んで、前記プロセッサが前記メモリに書き込みを行った際に前記転送機構が読み書きする前記レジスタの内容を決定するためのアドレステーブルを生成し、前記転送機構に与えることを特徴とする処理装置。
【請求項３】
プロセッサとメモリとゲストハードウエアとの間でのデータ転送を処理する転送機構と、前記プロセッサの実行する命令列を再構成するリアセンブラとを備える処理装置を動作させるプログラムであって、
前記ソースコードおよび前記ソースコードからコンパイルされた第１のバイナリコードに基づき、前記転送機構の動作の手がかりとなり且つ前記プロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成して前記メモリにロードする処理ステップと、
前記プロセッサと前記メモリとの間の命令およびデータの読み書きの監視を行い、前記プロセッサが実行する前記メモリとの間の読み書き処理のうち、前記ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、前記ゲストハードウエアと所定のレジスタとの間で読み書きを実行させる処理ステップと、
を備えることを特徴とするプログラム。
【請求項４】
プロセッサと、該プロセッサが逐次処理に使用するメモリと、前記プロセッサが行う処理の一部を分担するゲストハードウエアとを備えるコンピュータシステムにおいて、
前記プロセッサと前記メモリと前記ゲストハードウエアとの間でのデータ転送を処理する転送機構と、前記プロセッサの実行する命令列を再構成するリアセンブラとを備え、
前記リアセンブラは、ソースコードおよび該ソースコードからコンパイルされた第１のバイナリコードを取り込んで、前記転送機構の動作の手がかりとなり且つ前記プロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成して前記メモリにロードし、
前記転送機構は、前記プロセッサと前記メモリとの間の命令およびデータの読み書きの監視を行い、前記プロセッサが実行する前記メモリとの間の読み書き処理のうち、前記ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、前記ゲストハードウエアと所定のレジスタとの間で読み書きを実行させることを特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサとメモリにより遂次処理を行うシステムに、その行っている処理の一部を分担するゲストハードウエアを付加したシステムにおいて、プロセッサと、ゲストハードウエアに関連するレジスタと、メモリとの間のデータ転送について、メモリの一部を一時的にそのレジスタによって代行させるようにする技術に関する。
【背景技術】
【０００２】
従来のコンピュータシステムでは、多くの場合は、固定的な専用ハードウエアの中に、処理で参照する値と処理結果の値を格納するレジスタを設け、そのレジスタへの読み書きについては、バス上のアドレス情報により制御する機構を専用ハードウエアの中に設けておき、プロセッサが当該バス上にアドレスと読み書きの命令を出力することで、読み書きを実行していた。その際、レジスタからの特に読み出しの場合、同じバスに接続しているメモリからも読み出しが行われてしまうと故障となるため、専用ハードウエアのレジスタに割り当てるアドレスとメモリに割り当てるアドレスとは、同じ値のものが無いように設計していた。
【０００３】
プロセッサの行なう処理の中から、一部の処理のみを専用ハードウェアにて実行させ、残りをプロセッサで行なうことにして、コンピュータシステム全体の性能改善を行なうには、データの転送の仕組みが必要となる。
【０００４】
このための先行文献としては、非特許文献１が挙げられる。特に、第７章、第８章には、記憶階層の利用や外部記憶装置に関する従来技術の記述があり、また、５４１頁にはプロセッサの入出力システム構成の典型例も記されている。この５４１頁の図８．１１を用いて、グラフィック出力用の専用ハードウェアの例にとって、従来の設計の特徴を説明すると以下のようになる。
【０００５】
プロセッサはあらかじめ設計しておいたメモリ（主記憶装置）の領域に必要なデータを書き込んでおく。専用ハードウェアであるグラフィックコントローラ（グラフィック出力）は、メモリコントローラハブを経由してこの内容を獲得し、表示装置の規格を満たす信号を生成する処理を担う。グラフィックコントローラがこの処理を行なっている間は、プロセッサは別の処理にあたることができるため、システムの性能を向上させることができている。
【０００６】
このように、従来の技術でも、一般に、「プロセッサがメモリに格納したデータに対して処理を行なっているシステム」を根幹として、そのシステムを改変して、途中にある処理を専用ハードウェア（以下、ゲストハードウエアと称す。）で処理させるといった手法がみられる。その場合には、ゲストハードウエアでの処理のために使用（処理対象のデータとして参照・結果を代入）するレジスタに対して、たとえば、プロセッサからアドレス等の方法で読み書きすることになる。
【非特許文献１】パターソン＆ヘネシー、「コンピュータの構成と設計  第３版下  ハードウエアとソフトウエアのインターフェース」、日経ＢＰ社、２００６年３月２０日
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記の従来の技術についての課題を、図１３で説明する。「プロセッサがメモリに格納したデータに対して処理を行なっているシステム」を前提とし、変数Ｘを当初メモリ２００のデータ部分２０２の中に格納するとして、まず、開発を行うことで処理全体の機能確認や修正補正を行う。
【０００８】
その後、変数の一部Ｙをゲストハードウエア３００での処理のために使用するレジスタ３０１に格納するという変更を加える。この変更は、たとえばソースコード２０に加える。ここで、変数Ｘのメモリ２００への読み書きと変数Ｙのレジスタ４０１への読み書きは、たとえばアドレスを変えるなど異なる手段でなければならない。もし、異ならないと、システム動作の障害になってしまうからである。もしも、アドレスが同じであると、すくなくとも読み出しの際に異なる出力値が電気的に接触することになり、動作不良や装置故障の原因となる。
【０００９】
以上から、当初のソースコード２０における変数Ｘについて読み書きの記載のすべてを単純に変数Ｙに変更するというわけではなく、そのなかでゲストハードウエア３００での処理のために使用するレジスタ３０１としての読み書きに当たるかどうかをそれぞれ検討確認し、レジスタ３０１としての読み書きについては、変数Ｙに書き改め、そうでないところはそのままにしておかねばならず、その手間は大きい。
【００１０】
また、該当する箇所をすべて数え上げるということに間違いを起こした場合には、ゲストハードウエア３００のためにレジスタ３０１に読み書きすべきとき、メモリ２００に読み書きしてしまうという設計ミスとなる。
【００１１】
このミスはソースコード２０の機能変更を行った場合に起こしやすく、起こした場合も変数としての読み書きをメモリ２００に対して行うことはできるため、文法エラーや動作の停止に至るような顕著な現象とならないため、検出が非常に困難であった。
【００１２】
以上のように、メモリ内の変数への読み書きの手段を書き換えねばならないことが、上記課題を引き起こしていることから、本発明では、それを変えることなくそのままとしても、ゲストハードウエアに関連するレジスタへの読み書きを意図する箇所について、そのレジスタへの読み書きが実現でき、設計の手間や間違い、検証の手数、ライブラリの動作による性能損失等を無くすことができるようにすることを目的とする。
【課題を解決するための手段】
【００１３】
請求項１にかかる発明は、プロセッサとメモリとゲストハードウエアとの間でのデータ転送を処理する転送機構と、前記プロセッサの実行する命令列を再構成するリアセンブラとを備えた処理装置であって、前記リアセンブラは、ソースコードおよび該ソースコードからコンパイルされた第１のバイナリコードを取り込んで、前記転送機構の動作の手がかりとなり且つ前記プロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成して前記メモリにロードし、前記転送機構は、前記プロセッサと前記メモリとの間の命令およびデータの読み書きの監視を行い、前記プロセッサが実行する前記メモリとの間の読み書き処理のうち、前記ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、前記ゲストハードウエアと所定のレジスタとの間で読み書きを実行させることを特徴とする。
請求項２にかかる発明は、請求項１に記載の処理装置において、前記リアセンブラは、前記ソースコードと前記第１のバイナリコードを取り込んで、前記プロセッサが前記メモリに書き込みを行った際に前記転送機構が読み書きする前記レジスタの内容を決定するためのアドレステーブルを生成し、前記転送機構に与えることを特徴とする。
請求項３にかかる発明は、プロセッサとメモリとゲストハードウエアとの間でのデータ転送を処理する転送機構と、前記プロセッサの実行する命令列を再構成するリアセンブラとを備える処理装置を動作させるプログラムであって、前記ソースコードおよび前記ソースコードからコンパイルされた第１のバイナリコードに基づき、前記転送機構の動作の手がかりとなり且つ前記プロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成して前記メモリにロードする処理ステップと、前記プロセッサと前記メモリとの間の命令およびデータの読み書きの監視を行い、前記プロセッサが実行する前記メモリとの間の読み書き処理のうち、前記ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、前記ゲストハードウエアと所定のレジスタとの間で読み書きを実行させる処理ステップと、を備えることを特徴とする。
請求項４にかかる発明は、プロセッサと、該プロセッサが逐次処理に使用するメモリと、前記プロセッサが行う処理の一部を分担するゲストハードウエアとを備えるコンピュータシステムにおいて、前記プロセッサと前記メモリと前記ゲストハードウエアとの間でのデータ転送を処理する転送機構と、前記プロセッサの実行する命令列を再構成するリアセンブラとを備え、前記リアセンブラは、ソースコードおよび該ソースコードからコンパイルされた第１のバイナリコードを取り込んで、前記転送機構の動作の手がかりとなり且つ前記プロセッサの処理に影響を与えない標識命令を書き込んだ第２のバイナリコードを再構成して前記メモリにロードし、前記転送機構は、前記プロセッサと前記メモリとの間の命令およびデータの読み書きの監視を行い、前記プロセッサが実行する前記メモリとの間の読み書き処理のうち、前記ゲストハードウエアが実行すべき処理で参照／代入される変数の読み書き処理を検出し、当該検出した読み書き処理について、前記ゲストハードウエアと所定のレジスタとの間で読み書きを実行させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、メモリの一部を一時的にゲストハードウエアに関連するレジスタによって代行させる際に、ソースコードの記述としてメモリかゲストハードウエアに関連するレジスタかの区別を不要にし、設計の手間や間違い、検証の手数、ライブラリの動作による性能損失等を無くすことができる。
【発明を実施するための最良の形態】
【００１５】
本発明の処理装置は、プロセッサとメモリとゲストハードウエアとからなるコンピュータシステムに組み込む転送機構と、プロセッサの実行する命令列（バイナリコード）を再構成する機械語命令再構成部（リアセンブラ）とを備える点に特徴を有する。転送機構は、プロセッサが行うメモリへの読み書きを検出し、ゲストハードウエアの行う処理で参照／代入（変更）する変数の読み書きに該当するものは、メモリにではなく所定のレジスタにデータを読み書きする。この動作の手がかりとして、プロセッサの処理に影響を与えない標識命令を書き込んだバイナリコードをリアセンブラが準備する。これにより、ソースコードにゲストハードウエアを指示する書式を書き込むだけで、ソースコードの記述としてはメモリかゲストハードウエアのレジスタかを区別する必要はなく、従来のようなハードウェア専用のライブラリを作ることなく、プロセッサとゲストハードウエアとのデータ転送を実現することができ、設計の手間や間違い、検証の手数、ライブラリの動作による性能損失等をなくすことができる。
【００１６】
本発明の実施例のコンピュータシステムの全体構成を図１に示す。本実施例は、プロセッサ１００とメモリ２００とゲストハードウエア３００からなるシステムに対して組み込む転送機構４００と、プロセッサ１００の実行する命令列（バイナリコード）を再構成する機械語命令再構成部（以下、リアセンブラと称する。）５００とを備える。
【００１７】
リアセンブラ５００は、プロセッサ１００の実行する命令列（バイナリコード）の一部に、プロセッサ１００には意味を持たないが転送機構４００に動作を起こさせるための標識命令を書き加え（命令語数の変化による相対ジャンプの調整なども行い）、ゲストハードウエア３００が処理するため、プロセッサ１００での実行が不要になつたコードの部分をスキップするためのジャンプ命令なども書き加え、メモリ２００の命令部分２０１にロードする。
【００１８】
転送機構４００は、プロセッサ１００が行うメモリ２００への読み書きを、プロセッサ１００の命令フェッチの検出やリアセンブラ５００が処理によってバイナリコードに挿入してある標識命令や読み書きの制御やそのアドレスから、検出する。そして、そのうちの、ゲストハードウエア３００の行う処理で参照／代入（変更）する変数の読み書きに該当するものについては、メモリ２００ではなく、転送機構４００内の所定のレジスタ４０１との間で読み書きする。
【００１９】
リアセンブラ５００は、ゲストハードウエア３００に行わせる処理については、ソースコード２０上に所定の書式で指示してあるものとする（図２Ａ，図２Ｂ参照）。そして、そのソースコード２０から既存のコンパイラ１０で生成される従来のバイナリコード３０を利用して、プロファイルツールが提供するプロファイラＤＢ（データベース）３０Ａにより、ソースコード２０上のテキスト位置からバイナリコード３０上のアドレスを対応付け、バイナリコード３０上に標識命令を書き込んだバイナリコード６０を生成する。また、転送機構４００の動作に用いるアドレス対応データベースであるアドレステーブル５０を生成する。
【００２０】
＜１：全体の動作概要＞
既存のコンパイラ１０を利用してソースコード２０からコンパイルされたバイナリコード３０と、図２Ａ，図２Ｂに示すように、ソフトウエアの一部をゲストハードウエア３００に処理させることをソースコード上にコメント（実行に関与しない文法要素）等の手段で「開始指示」と「終了指示」で示したものと、既存のプロファイラによって得られるプロファイルＤＢ３０Ａとによって、リアセンブラ５００は、アドレステーブル５０を生成し、これをあらかじめ転送機構４００に搭載しておく。また、このリアセンブラ５００は、バイナリコード６０を再構成し、これをあらかじめ、メモリ２００の命令部分２０１に格納しておく。そして、システム全体を動作させる。なお、図２Ａはソースコードのうち、ゲストハードウエア３００で処理させる部分についての記述例であり、図２Ｂはソースコードのうち、ゲストハードウエア３００の実行中にプロセッサ１００で処理させる部分についての記述例である。
【００２１】
＜２：リアセンブラの動作概要＞
リアセンブラ５００は、前記したように、プロセッサ１００がメモリ２００の読み書きを行った際に転送機構４００が読み書きするレジスタ４０１を決定するためのアドレステーブル５０の生成と、転送機構４００の起動停止の目印や転送機構４００がアクティブである場合にプロセッサ１００に所定のジャンプを行わせるための目印となる標識命令を埋め込んだバイナリコード６０の再構成を行なう。
【００２２】
＜２−１：リアセンブラの動作（アドレステーブルの生成）＞
リアセンブラ５００のアドレステーブル５０の生成にかかわる構成部５００Ａを図３に示す。また、アドレステーブル５０の生成にかかわる、リアセンアラ５００の動作についてのフローチャートを図５Ａに示す。
【００２３】
変数リスト生成部５０１は、ソースコード（図２Ａ）に記述しておいた開始指示から終了指示の範囲内において、参照される変数と、影響を受ける変数、つまり代入される変数を検出する。参照されているならば参照変数の識別子として(f)を、代入されているならば代入変数の識別子として（ｔ）を付与し、その識別子を変数リスト格納部５０２の変数リストのフィールドＶへ登録する。(t)と(f)の両方が付与される場合もある。変数リストのフィールドＮには変数を登録する。
【００２４】
アドレスリスト生成部５０２は、文法的な変数名および変数の有効範囲（スコープ）をプロファイルＤＢ格納部７０へ照会する。プロファイルＤＢ格納部７０はソースコードの記述位置に対応するバイナリコードのアドレスを提供する。そして、変数のメモリ２００上でのアドレス値を獲得し、変数と組のレコードとして、アドレスリスト格納部５０４のアドレスリストへ登録する。アドレスリストのフィールドＮには変数を、フィールドＭにはメモリ２００のアドレスを登録する。つまり、このアドレスリスト生成部５０２では、前記した開始指示から終了指示の範囲内の変数とメモリアドレスとの対応リストを生成する。
【００２５】
検索合成部５０５は、変数リストの中に付与された識別子(t)、(f)に応じて、変数を、「参照変数」の表（参照アドレステーブル５０６）と「代入変数」の表（代入アドレステーブル５０７）の２つの表に分類して登録していく。その際、識別番号（ＩＤ）を与える。この登録においては、変数リストから取り出した変数をアドレスリストによってアドレス値に変換し、フィールドＩＤと組み合わせてフィールドＭに登録する。
【００２６】
表組部５０８は、参照アドレステーブル５０６と代入アドレステーブル５０７の２つの表をマージする。さらに、図２Ａに示したソースコードにおいて開始指示の要素として記述している並列処理識別子を抽出し、これをマージした表のタグ５０９Ａとして付与し、さらに、並行して（識別記述）構成されている標識命令ＤＢ（図６）に照会して、並列実行先（開始）アドレス５０９Ｂを獲得し、これも組み合わせる。リアセンブラ５００は、こうして得られたデータ構造５０９を、セット番号（タグ５０９Ａ）ごとに、アドレステーブル５０に登録する。
【００２７】
＜２−２：リアセンブラの動作（バイナリコードの再構成）＞
リアセンブラの動作フローチャートを図５Ａ〜図５Ｅに示す。リアセンブラ５００は、ゲストハードウエア３００のないシステムのために既存のコンパイラ１０で生成したバイナリコード３０を再構成して、転送機構４００およびゲストハードウエア３００のあるシステムで再構成前のバイナリコード３０と互換動作を行える上位互換バイナリコード６０に変換する。
【００２８】
主な再構成内容は、標識命令（セット切替）の挿入、標識命令（ジャンプ）およびジャンプマークの挿入、標識命令（ストップ）の挿入、並列実行先から戻るジャンプ命令の挿入である。
【００２９】
図５Ａ〜図５Ｄのフローチャートに示す手順で、図４に示すバイナリコード生成部５００Ｂのソースコード格納部５２１、ソースコード検索部５２２、変数リスト格納部５０３、変数リスト作業用格納部２５４、標識命令登録部５２５を機能させ、標識命令ＤＢ５２６（その構造は前記した図６）を生成する。また、図５Ｅのフローチャートに示す手順でバイナリコード６０への変更を、バイナリコード統合部５２７およびバイナリコード格納部（既存技術）５２８により実現し、それをバイナリコード出力部５２９が、システムのメモリ２０の命令部分２０１へロードさせる。以上全体の動作制御をリアセンブラ制御部５３０が行う。なお、バイナリコード格納部５２８は、バイナリコード全体を保持し、命令語の追加・削除に対して、命令語のジャンプ等の相対関係や追加する命令語のアドレスが崩れないように維持する。
【００３０】
処理の前半は、図６に示す標識命令ＤＢ５２６の構成である。標識命令ＤＢ５２６に登録するのは、標識の種別（合計６種類）と、対応する所定のパラメータ（識別子等）と、そのバイナリコード上のアドレスで構成するレコードである。図５Ｂはセット切替開始標識のレコード生成および登録手順を示す。図５Ｃはセット切替終了標識のレコード生成および登録の手順を示す。図７にそれらセット切替開始標識およびセット切替終了標識の登録手順において判定に使用する作業用のデータ構造（変数リスト作業用格納部５２４の内容）を示す。図５Ｄはゲストハードウエア３００が処理するためプロセッサ１００での実行が不要になったコードの部分をスキップし、ゲストハードウエア３００の処理と並列してプロセッサ１００で実施する処理の命令へプロセッサ１００をジャンプさせるためのスキップ領域開始標識等、あわせて４つの標識のレコード生成および登録の手順を示す。
【００３１】
セット切替開始標識は、ゲストハードウエア３００が処理において参照する値を代入しているプロセッサ１００（すなわちソフトウェア）の処理について、すべてを揃えるためには、ゲストハードウエア３００の処理について記載されている箇所から実行順序をどこまでさかのぼるか、を示すものである。
【００３２】
このセット切替開始標識の登録について、図５Ｂ、図６、図７を使用して説明する。図５Ａの処理で、○囲みの１のラベルに処理が到来したときに、図５Ｂの処理（○囲みの１のラベルから）を開始する。リアセンブラ制御部５３０は、変数リスト格納部５０３から変数リストを、変数リスト作業用格納部５２４へ選択的に登録する。これは、変数リストの参照変数（フィールドＶの値がｆであるレコード）の変数名（変数を個別に識別できる文字列等）と、代入判定の初期値として偽（ｆａｌｓｅ）からなるレコードを選択して、登録するものである。
【００３３】
つぎに、この変数リスト作業用格納部５２４のすべての変数のフィールドの集合をつくり、ソースコード内で、この集合に属する変数への代入を、実行順序に対して逐次遡及検索する。発見した変数について、その変数への代入の実行が無条件である場合には、変数リスト作業用格納部５２４のその変数の代入判定のフィールドに、ただちに真（ｔｒｕｅ）を書き込む。また、条件付の実行の場合には、その時点でのその変数の代入判定の条件式との論理和を構成し、これを代入判定フィールドに書き込んでおく。そして、さらに逐次検索を継続する。なお、検索の開始は、ソースコードにおける該当セット番号の開始指示のテキスト位置である。
【００３４】
検索の該当がない場合、また、上記の判定フィールドの更新によって、変数リスト作業用格納部５２４の代入判定フィールドがすべて真（ｔｒｕｅ）になったとき、逐次検査の繰り返しを終了し、そのテキスト位置をプロファイルＤＢ格納部７０へ照会することにより、バイナリコード上のアドレスを獲得し、アドレス値、セット番号とセット切替開始の標識からなるレコードを構成して、標識命令ＤＢ５２６（図６）に登録する。ここまでを終えると、○囲みの２に到達し、図５Ａでの○囲みの２での処理の待ち合わせで合流して、開始指示の検索の繰り返しに戻る。
【００３５】
セット切替終了標識は、ゲストハードウエア３００が処理において代入（生成、計算結果）した値を参照しているプロセッサ１００（すなわちソフトウェア）の処理について、全てを一度でも参照する（利用する）のは、ゲストハードウエア３００の処理について記載されている箇所から実行順序をどこまですすめるか、を示すものである。
【００３６】
このセット切替終了標識については、図５Ｃに示す。セット切替開始標識と類似であるが、検索の方向が実行順序の方向であることと、代入変数に対して、参照箇所の検索を行うこととが異なっている。
【００３７】
以上のセット切替開始標識の生成および登録の処理と、セット切替終了標識の生成および登録の処理は、変数リスト作業用格納部５２４をそれぞれ独自でもつことにより、並列して実行することができる。
【００３８】
図５Ｄは、ゲストハードウエア３００が処理するためプロセッサ１００での実行が不要になったコードの部分をスキップし、ゲストハードウエア３００の処理と並列してプロセッサ１００で実施する処理の命令へプロセッサ１００をジャンプさせるためのスキップ領域開始標識等、あわせて４つの標織のレコード生成、および登録手順である。
【００３９】
図５Ａの処理において、○囲みの５のラベルに処理が到来したときに、図５Ｄの処理（○囲みの５のラベルから）を開始する。ソースコード検索部５２２により、ソースコード２０上で開始指示に付与されている並列実行識別子を検出する。また、ソースコード２０上で、終了指示のテキスト位置を検出する。さらに、検出した並列実行識別子により、ソースコード内で並列して実行する処理の開始と終了のテキスト位置を検出する。
【００４０】
これら４種のテキスト位置を、プロファイルＤＢ格納部７０へ照会し、バイナリファイル３０上のアドレスを獲得する。それぞれ図５Ｄに示すレコードを組み立て、この４レコードを、標識命令ＤＢ５２６へ登録する。
【００４１】
処理の後半は、構成された標識命令ＤＢ５２６にもとづいて、バイナリコード６０の再構成を実行する。これは、以下、図５Ｅに示すフローチャートに沿って説明する。図４に示すバイナリコード統合部５２７は、図５Ｅのフローチャートの動作を制御する。
【００４２】
まず、標識命令ＤＢ５２６から１レコードを取り出し、この内容により以下の処理を実施する。処理のあと次のレコードを取り出し、すべてのレコードについて処理が完了すると、リアセンブラ制御部５３０に制御が移行し、バイナリコード出力部５２９により、システムのメモリ２００の命令部分２０１へのバイナリコード６０の搭載を実施する。
【００４３】
＜２−３：セット切替開始＞
レコードがセット切替開始であった場合、レコードのセット番号と組み合わせて「標識命令（セット切替）」を生成し、レコードのアドレスが示すバイナリコード内の位置に命令として追加する。標識命令（セット切替）の例を図８に示す。
【００４４】
＜２−４：セット切替終了＞
レコードがセット切替終了であった場合、「標識命令（ストップ）」を生成し、レコードのアドレスが示すバイナリコード内の位置に命令として追加する。標識命令（ストップ）の例を図８に示す。
【００４５】
＜２−５：スキップ領域開始＞
レコードがスキップ領域開始であった場合、ジャンプマークという第１〜第３の３命令からなる構造を生成する。ジャンプマークは、転送機構４００の動作（機能）に対応させて１命令だけで構成することもできる。図８に標識命令（ジャンプ）の例を示す。
【００４６】
以下、まず、転送機構４００の動作とジャンプマークの組み合わせが図９における「組み合わせ１」の場合について説明する。レコードがスキップ領域開始であるとき、説明の便宜上、このレコードをスキップ領域開始レコードという。まずスキップレコードのセット番号をとりだし、これと所定のビットパタンをくみ上げて、「標識命令（ジャンプ）」とし、これを第１命令とする。また、プロセッサ１００が無条件で次の１命令を実行せずジャンプする（スキップする）命令を生成し、これを第２命令とする。さらに、スキップ領域開始レコードの並列処理識別子をとりだし、それをキーとして、標識命令ＤＢ５２６内の検索を行う。これによって、次の３つのレコードを得る。
Ａ＝スキップ領域終了
Ｂ＝並列実行先処理開始
Ｃ＝並列実行先処理終了
Ｂのアドレスフィールドが示すアドレスの値により、並列実行先処理の開始アドレスへのジャンプ命令を生成し、これを第３命令とする。以上の３命令をこの順にならべて、スキップ領域開始レコードのアドレスが示すバイナリコード上の位置に追加する。さらに、Ａのアドレスフィールドの示すアドレスの次の命令にジャンプする命令を生成し、これを、Ｃのアドレスフィールドの示す位置に追加する。
【００４７】
以上により、転送機構４００が機能していない（後述：プロセッサ１００とメモリ２００が直接バス接続）場合には、第１命令の標識命令でのプロセッサ１００の処理は起こらず、第２命令の１命令スキップが実行され、第３命令の並列実行先処理については、実行されずに、リアセンブラ５００が作用を行う前の、ゲストハードウエア３００についてのソースコード２０から生成されたバイナリコード３０の内容が実行されることになる。
【００４８】
なお、転送機構４００が機能している場合には、後述のように第１命令を転送機構４００が読むことにより第２命令をプロセッサ１００に伝えることを転送機構４００が止め、プロセッサ１００は、第３命令によって並列実行先の処理を開始することになる。その間、プロセッサ１００は並列実行先の任意のコードを実行しているが、ゲストハードウエア３００は、ソースコードの開始指定から終了指定までの処理を行うよう設計してあり、ハードウェアとして処理を並列して実施している。プロセッサ１００は所定の時刻で並列実行先の処理を行いゲストハードウエア３００の処理が終わったことを想定して、ソースコード２０上のゲストハードウエア３００の処理の次のコードに相当する処理から実行を継続することになる。
【００４９】
上記は、「組み合わせ１」の場合であったが、「組み合わせ２」の場合には、第１命令として標識命令（ジャンプ）を追加することだけが異なる。この場合には、転送機構４００がこの標識命令を検出し（後述のとおり）そのセット番号から、アドレステーブル５０の構造にもとづき、並列実行先のアドレスをとりだし、プロセッサ１００に並列実行先の開始アドレスへのジャンプを行わせる。「組み合わせ１」および「組み合わせ２」の場合の、プロセッサ１００の実行の稚移を図１０Ａ、図１０Ｂに示す。
【００５０】
＜３：転送機構の動作＞
図１１に転送機構４００の構成図を示す。レジスタ４０１はレジスタ値を格納し、付与されたＩＤで読み書きする。テーブル制御部４０２はテーブルセット切り替えを行う。テーブルメモリ４０３はテーブル初期化部４０で初期化され、アドレステーブル５０を登録して、一致検出やＩＤへの変換を行う。転送制御部４０４は転送機構４００の制御・状態監視や、命令フェッチの監視や、メモリも２００の読み書き込みの監視や、レジスタ４０１への読み書きや、メモリ２００の書き込みを行う。このような転送機構４００は、プロセッサ１００とメモリ２００の間の命令およびデータ読み書きのアドレスの監視を行い、条件に応じて以下の動作を行う。
【００５１】
＜３−１：標識命令（セット切替）＞
転送機構４００はプロセッサ１００が標識命令（セット切替）にフェッチしたことを検出する。これを検出すると、転送機構４００がそれまでストップ状態にあった場合でも、テーブル制御部４０２は、テーブルメモリ４０３に対して、標識命令（セット切替）から取り出した識別番号ＴＩを発行し、アドレステーブル５０におけるＴＩ番目のセットに転送制御部４０４がアクセスできるように切り替える。転送機構４００はアクティブ状態に遷移する。
【００５２】
＜３−２：メモリデータ読み出し＞
転送機構４００はプロセッサ１００がメモリ２００からの読み出し（を行う通常の）読み出し命令をフェッチしたことを検出する。これを検出すると、転送制御部４０４は、プロセッサ１００からメモリ２００へ読み出す指示として送られるアドレスを監視し、そのアドレスについて、テーブルメモリ４０３内のＭフィールドに一致するものがあった場合、レジスタ４０１流出の動作を行う。レジスタ４０１流出の動作は、テーブルメモリ４０３内でＭフィールドの値ｍに対応するＩＤフィールドｉをとりだし、該当するＩＤをもつレジスタ４０１の値を、プロセッサ１００に提供する。さらに、メモリ２００の該当するアドレスにはこの値を書き込む。２ポートメモリであれば、レジスタ４０１流出については、専用のポートから書き込むという構成で動作させることができる。
【００５３】
なお、上記では、転送機構４００が読み出し命令のフェッチを検出するものとしたが、プロセッサ１００がメモリ２００からの読み出しを行う際に、制御信号によってメモリ２００に対して読み出しを行うことを伝えるものである場合には、この制御信号を検出することによってもよい。なお、メモリ２００の読み出しに対する転送機構４００の動作は、転送機構４００がアクティブの状態のときに実行する。ストップ状態のときには、上記の動作はどれも実行しない。
【００５４】
＜３−３：メモリデータ書き込み＞
転送機構４００はプロセッサ１００がメモリ２００への書き込み（を行う通常の）書き込み命令をフェッチしたことを検出する。これを検出すると、転送制御部４００は、プロセッサ１００からメモリ２００への書き込み指示として送られるアドレスを監視し、そのアドレスについて、テーブルメモリ４０３内のＭフィールドに一致するものがあった場合、そのＩＤフィールドｉをとりだし、該当するＩＤをもつレジスタ４０１に、プロセッサ１００から提供されるデータを書き込む。なお、上記では、転送機構４００が書き込み命令のフェッチを検出するものとしたが、プロセッサ１００がメモリ２００への書き込みを行う際に、制御信号によってメモリ２００に対して書き込みを行うことを伝えるものである場合には、この制御信号を検出することによってもよい。なお、メモリ２００の書き込みに対する転送機構４００の動作は、転送機構４００がアクティブの状態のときに実行する。ストップ状態のときには、上記の動作はどれも実行しない。
【００５５】
＜３−４：標識命令（ストップ）＞
転送機構４００はプロセッサ１００が標識命令（ストップ）にフェッチしたことを検出する。これを検出すると、転送制御部４０４はストップ状態に遷移する。プロセッサ１００とメモリ２００を直結し、テーブルメモリ４０３への検索やレジスタ４０１への読み書きを停止する。ゲストハードウエア３００はレジスタ４０１へのアクセスを継続することができる。標識命令（セット切替）の検出については実行を継続する。
【００５６】
＜３−５：標識命令（ジャンプ）＞
転送機構４００はプロセッサ１００が標識命令（ジャンプ）にフェッチしたことを検出する。これを検出すると、転送機構４００はプロセッサ１００がフェッチし、その結果メモリ２００から読み出されたこの標識命令自体を１命令ジャンプの命令に変えプロセッサ１００に渡す。これは、図９の「組み合わせ１」に相当する。また、転送機構４００について別の実現例として、プロセッサ１００が次の命令をフェッチした際に、メモリ２００からプロセッサ１００に伝わる命令を無条件で無効命令に変えるという方法もあり得る。プロセッサ１００が実行する無効命令が１命令増えるが、図９の「組み合わせ１」と同じ結果をもたらす。
【００５７】
図９の「組み合わせ２」を実現する際にはつぎのような動作を行う転送機構４００とする。転送機構４００はプロセッサ１００が標識命令（ジャンプ）にフェッチしたことを検出する。これを検出すると、転送機構４００はプロセッサ１００がフェッチし、その結果メモリ２００から読み出されたこの標識命令自体を、並列実行先へのジャンプ命令に変え、プロセッサ１００に渡す。並列実行先のアドレスは、あらかじめ、図３に示されているとおり、リアセンブラ５００により、アドレステーブル５０の中に、セット番号ごとに格納されており、転送制御部４０４が取り出して、上記のジャンプ命令の生成を行う。
【００５８】
これらの動作は、転送機構４００がアクティブの状態のときに実行する。ストップ状態のときには、上記の動作はどれも実行しない。その結果、転送機構４００がストップ状態のときは、「組み合わせ１」の場合には、プロセッサ１００が第１番目の標識命令（ジャンプ）は無効命令として何も処理せず、第２番目の命令を実行することによって、並列実行先へのジャンプは実行せず、既存の命令を実行する。「組み合わせ２」の場合には、プロセッサ１００が標識命令を無効命令としてなにも処理せず、既存の命令を実行する。どちらの場合にも、ゲストハードウエア３００が行っている処理に対応する一連の命令の実行を行うことになる。
【００５９】
＜３−６：外部入力によるストップ＞
転送機構４００にあらかじめ専用の入力を用意しておき、この信号が制御されているときには、転送機構４００がストップ状態のままになる（アクティブ状態にはならない）ようにしておくこともできる。この信号の制御を切断すれば、アクティブ／ストップの状態遷移が起こるようになる。
【００６０】
＜４：実施例の効果＞
まず、設計ミスの減少が挙げられる。すなわち、ハードウェアとソフトウェアのインターフェース性能の改善である。従来の技術では、その課題で示したように、メモリ上の変数とゲストハードウエアのレジスタで処理する変数とを取り違えることによる設計ミスがあったが、本実施例ではその両者を区別する必要はなく、ただゲストハードウエアで処理を行わせることになるソースコード上の箇所を示すだけなので、このミスは本質的にまったく起こらなくなる。
【００６１】
また、従来技術ではハードウェアとのデータの転送は、ソフトウェアからＡＰＩ（アプリケーションプログラムインターフェース）といったライブラリ群をあらかじめ用意しておき、そのなかから、必要な関数の呼び出しにより実現していたため、プロセッサが関数呼び出しの一連の処理を行うためのムダが少なくとも１変数あたり数命令はあり、変数の数が多くなるとこれを少なくするためにＡＰＩの機能を工夫する必要すらあった。
【００６２】
本技術では、プロセッサ（ソフトウェア処理）とゲストハードウエアとのデータ転送は、プロセッサ（ソフトウェア処理）が進むにつれ、必要な段階で、標識命令（セット切替開始）により用意され、不要となった段階で、標識命令（ストップ）により閉鎖され、あらためてなんらかのライブラリを呼ぶ必要はない。さらには、ゲストハードウエアが処理を行っている間に、独立して行える並列処理実行も指定できることから、ハードウェアとソフトウェアのインターフェースでのムダはゲストハードウエアの処理あたり数命令程度に減りかつ、並列実行効果を得ることができる。
【００６３】
次に、耐故障性を挙げることができる。たとえば、外部から操作できるスイッチや故障の検出器を用意し、その検出信号によつて転送機構をストップ状態に固定すると、システムのゲストハードウエアが故障した際にゲストハードウエアがシステムに影響しないように切り離すことができ、さらに、この技術でリアセンブラが再構成したバイナリコードは、ゲストハードウエアに行わせていた処理を保存していて、転送機構がストップ状態であるとプロセッサにこれを実行させるように働くので、一時的な復旧が容易に可能なシステムを構築できる。
【００６４】
次に、検証効率の向上・システムの乗軟性の向上を挙げることができる。従来の技術やノウハウの蓄積を生かして、最初にソフトウェアのソースコードのみでシステムの概略設計と検証を行い、検証条件や検証環境を開発しつつ、ハードウェアで処理させる部分をこの技術でゲストハードウエアとして組み込むことができる。このとき、ゲストハードウエアに処理させる、すなわちハードウェア化した機能に何らかの疑義が生じた場合にも、システムの全体をハードウェアとしては作り変えることもなく、容易に、かつ必要な箇所だけ、ソースコード上の変更や、転送機構への直接的な制御信号だけで、容易にもとの状態、ソフトウェアでの処理に戻すことができる。これにより、開発過程における検証の手間を著しく削減することができる。また、ゲストハードウエアでの処理の効果（速度や性能の向上、消費電力等）をシステム自体で確認して、そのままハードウェアにしておくことも、なんらかの理由でソフトウェアでの処理に戻すことも、あらたにライブラリを作り変えたり、そのライブラリの検証をしたりということがない。ソースコードからコンパイルし、リアセンブラで処理したバイナリコードを入れ替えるだけで済む。変更の手間がすくないため、環境や要求条件にあわせた柔軟な変更を施すことが可能となる。
【００６５】
次に、再構成可能なゲストハードウエアに対して適用が可能・消費電力の削減を挙げることができる。本技術を用いれば、ゲストハードウエアが処理した結果をプロセッサ（ソフトウェア）が参照し終えたあと、転送機構がストップ状態にある間は、必要であればゲストハードウエアの構造を変えても、プロセッサ側には何の影響も生じない。そこで、ゲストハードウエアを再構成可能な部品（ＦＰＧＡ等）で構成しておけば、ゲストハードウエアへの電力供給を減らす、もしくは止める、ゲストハードウエアを新たな構成に変更してまったく異なる処理にも流用する、といったこともできる。これにより、消費電力や装置の部品量の追加なく、ソフトウェアの一部の処理をハードウェアで実行するといった用途を、多様なアプリケーションプログラムに適用することが可能となる。
【００６６】
なお、本発明の処理装置は、コンピュータとプロセッサによっても実現でき、プログラムを記録媒体に記録することも、ネットワークを通じて提供することも可能である。
【図面の簡単な説明】
【００６７】
【図１】本実施例のコンピュータシステムの全体構成の概略構成図である。
【図２Ａ】本実施例のソースコードの一例である。
【図２Ｂ】本実施例のソースコードの一例である。
【図３】本実施例のリアセンブラのアドレステーブル生成部の概略構成図である。
【図４】本実施例のリアセンブラのバイナリコード生成部の概略構成図である。
【図５Ａ】本実施例のリアセンブラの全体およびアドレステーブル生成のフローチャートである。
【図５Ｂ】本実施例のリアセンブラのバイナリコード再構成１（セット切替開始標識登録）のフローチャートである。
【図５Ｃ】本実施例のリアセンブラのバイナリコード再構成２（セット切替終了標識登録）のフローチャートである。
【図５Ｄ】本実施例のリアセンブラのバイナリコード再構成３のフローチャートである。
【図５Ｅ】本実施例のリアセンブラのバイナリコード再構成４のフローチャートである。
【図６】本実施例の標識命令ＤＢの構造を示す図である。
【図７】本実施例の変数リスト作業用格納部の内容を示す図である。
【図８】本実施例の標識命令フォーマットの一例を示す図である。
【図９】本実施例の転送機構の動作に応じたジャンプマークの説明図である。
【図１０Ａ】本実施例の転送機構の動作と「組み合わせ１」における動作の説明図である。
【図１０Ｂ】本実施例の転送機構の動作と「組み合わせ２」における動作の説明図である。
【図１１】本実施例の転送機構の概略構成図である。
【図１２】本実施例の転送機構の動作のフローチャートである。
【図１３】従来のコンピュータシステムの概略構成図である。
【符号の説明】
【００６８】
１０：コンパイラ、２０：ソースコード、３０：バイナリコード、３０Ａ：プロファイルＤＢ、４０：テーブル初期化部、５０：アドレステーブル、６０：バイナリコード、７０：プロファイルＤＢ格納部
１００：プロセッサ
２００：メモリ、２０１：命令部分、２０２：データ部分
３００：ゲストハードウエア
４００：転送機構、４０１：レジスタ、４０２：テーブル制御部、４０３：テーブルメモリ、４０４：転送制御部
５００：リアセンブラ、５００Ａ：アドレステーブル生成部、５００Ｂ：バイナリコード生成部、５０１：変数リスト生成ぶ、５０２：アドレスリスト生成部、５０３：変数リスト格納部、５０４：アドレスリスト格納部、５０５：検索合成部、５０６：参照アドレステーブル、５０７：代入アドレステーブル、５０８：表組部、５０９：データ構造、５０９Ａ：タグ、５０９Ｂ：並列実行先（開始）アドレス、５２１：アドレス格納部、５２２：ソースコード格納部、５２４：変数リスト作業用格納部、５２５：標識命令登録部、５２６：標識命令ＤＢ、５２７：バイナリコード統合部、５２８：バイナリコード格納部、５２９：バイナリコード出力部
【図１】
2009230545.tif 000003
【図２Ａ】
2009230545.tif 000004
【図２Ｂ】
2009230545.tif 000005
【図３】
2009230545.tif 000006
【図４】
2009230545.tif 000007
【図５Ａ】
2009230545.tif 000008
【図５Ｂ】
2009230545.tif 000009
【図５Ｃ】
2009230545.tif 000010
【図５Ｄ】
2009230545.tif 000011
【図５Ｅ】
2009230545.tif 000012
【図６】
2009230545.tif 000013
【図７】
2009230545.tif 000014
【図８】
2009230545.tif 000015
【図９】
2009230545.tif 000016
【図１０Ａ】
2009230545.tif 000017
【図１０Ｂ】
2009230545.tif 000018
【図１１】
2009230545.tif 000019
【図１２】
2009230545.tif 000020
【図１３】
2009230545.tif 000021