(57)【特許請求の範囲】
【請求項１】
命令コードと、前記命令コードに関連付けられた前記命令コードの変換前のコードを特定する情報と、を受け付ける受付部と、
前記受付部によって受け付けた前記変換前のコードを特定する情報が、前記変換前のコードが存在しないことを示す情報であるか否かを判断する判断部と、
前記判断部によって前記変換前のコードを特定する情報が前記変換前のコードが存在しないことを示す情報でないと判断された場合、前記命令コードの実行により、前記変換前のコードを特定する情報を記録し、前記判断部によって前記変換前のコードを特定する情報が前記変換前のコードが存在しないことを示す情報であると判断された場合、前記命令コードの実行により、前記変換前のコードを特定する情報を記録しない記録部と、
を備えることを特徴とするデータ処理装置。
【請求項２】
一連の命令コードに対する注釈を示す情報と前記一連の命令コードの変換前のコードを特定する情報とを含む注釈コードまたは前記一連の命令コードを受け付ける受付部と、
前記受付部によって前記注釈コードが受け付けられた場合、前記一連の命令コードの実行前に、前記一連の命令コードの変換前のコードを特定する情報を記録する記録部と、
前記受付部によって前記一連の命令コードが受け付けられた場合、前記一連の命令コードを実行する実行部と、
を備えることを特徴とするデータ処理装置。
【請求項３】
前記注釈コードの後続コードが、前記一連の命令コードの中のいずれかの命令コードであるか、前記一連の命令コードの変換前のコードとは異なる他の変換前のコードと１対１対応する命令コードであるか否かを判断する判断部を備え、
前記実行部は、
前記他の変換前のコードと１対１対応する命令コードであると判断された場合、前記他の変換前のコードと１対１対応する命令コードを実行し、
前記記録部は、
前記他の変換前のコードと１対１対応する命令コードを記録する、
ことを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記他の変換前のコードと１対１対応する命令コードと前記他の変換前のコードを特定する情報との組合せを記憶する記憶部を備え、
前記記録部は、
前記記憶部を参照して、前記他の変換前のコードを特定する情報を記録する、
ことを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部と、
前記変換前のコードが検出された場合、前記記憶部を参照して、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とに変換し、前記変換前のコードが２以上の前記命令コードに変換された場合、２命令目以降の前記命令コードには、前記命令コードに関連付けられた前記変換前のコードを特定する情報として、前記変換前のコードが存在しないことを示す情報を格納する変換部と、
前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを、自装置から他装置に送信する送信部と、
を備えることを特徴とする変換装置。
【請求項６】
第１の装置と、特定の処理を実行する第２の装置と、を含むデータ処理システムであって、
前記第２の装置が実行可能な命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部と、
前記変換前のコードが検出された場合、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報と、に変換し、前記変換前のコードが２以上の前記命令コードに変換された場合、２命令目以降の前記命令コードには、前記命令コードに関連付けられた前記変換前のコードを特定する情報として、前記変換前のコードが存在しないことを示す情報を格納する変換部と、
前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを、前記第１の装置から前記第２の装置に送信する送信部と、
前記第２の装置によって、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを受け付ける受付部と、
前記第２の装置によって、受け付けた前記変換前のコードを特定する情報が、前記変換前のコードが存在しないことを示す情報であるか否かを判断する判断部と、
前記第２の装置によって、前記変換前のコードを特定する情報が前記変換前のコードが存在しないことを示す情報でないと判断された場合、前記命令コードの実行により、前記変換前のコードを特定する情報を記録し、前記判断部によって前記変換前のコードを特定する情報が前記変換前のコードが存在しないことを示す情報であると判断された場合、前記命令コードの実行により、前記変換前のコードを特定する情報を記録しない記録部と、
を備えることを特徴とするデータ処理システム。
【請求項７】
命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部にアクセス可能なコンピュータが、
前記変換前のコードが検出された場合、前記記憶部を参照して、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とに変換し、前記変換前のコードが２以上の前記命令コードに変換された場合、２命令目以降の前記命令コードには、前記命令コードに関連付けられた前記変換前のコードを特定する情報として、前記変換前のコードが存在しないことを示す情報を格納し、
前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを、他装置へ送信する、
処理を実行することを特徴とする変換方法。
【請求項８】
命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部にアクセス可能なコンピュータに、
前記変換前のコードが検出された場合、前記組合せを参照して、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とに変換し、前記変換前のコードが２以上の前記命令コードに変換された場合、２命令目以降の前記命令コードには、前記命令コードに関連付けられた前記変換前のコードを特定する情報として、前記変換前のコードが存在しないことを示す情報を格納する、
処理を実行させることを特徴とする変換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェア・アクセラレーションに関するデータ処理装置、変換装置、データ処理システム、変換方法、および変換プログラムに関する。
【背景技術】
【０００２】
従来から、特定の処理に対して、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の上でソフトウェアを実行する場合より高速に行うために、ＣＰＵに対し付加的なハードウェアを用意して、特定の処理を高速に実行することが行われている。このような技術は、ハードウェア・アクセラレーションと呼ばれ、また、付加的なハードウェアは、アクセラレータと呼ばれる。アクセラレータとして、たとえば、画像処理を行うＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、デジタル信号処理を行うＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等が存在する。
【０００３】
アクセラレータは、アクセラレータが実行可能なネイティブ命令を有している。または、互換性のために抽象化された中間命令も存在し、開発者は、中間命令にてアプリケーションソフトウェアの開発を行ってもよい。以下の説明では、アプリケーションソフトウェアをアプリと称する。中間命令が含まれたアプリの実行時、ＣＰＵは、ＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラによって、中間命令をネイティブ命令に変換し、アクセラレータに変換後のネイティブ命令を実行させる。
【０００４】
たとえば、アクセラレータを用いる技術として、Ｊａｖａ（登録商標）の中間命令に関して、Ｊａｖａアクセラレータが実行可能な中間命令についてはネイティブ命令に変換してＪａｖａアクセラレータが実行し、他の中間命令についてはＣＰＵが実行するものがある。また、Ｊａｖａアクセラレータに関して、Ｊａｖａスタックマシンをレジスタマシンで再現する場合、冗長となるＬｏａｄ命令を供給しないことで、Ｊａｖａプログラムの実行速度を向上させる技術が開示されている（たとえば、下記特許文献１、２を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２８０７６６号公報
【特許文献２】特開２００９−１７６３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、開発者が、アクセラレータの動作のデバッグや、チューニングのために、実行履歴や実行回数を取得したい場合、アクセラレータ側の機構を用いるので、アクセラレータのネイティブ命令の単位で取得することになる。開発者は、中間命令を用いて開発を行っているため、ネイティブ命令の単位による実行履歴、実行回数を取得しても、デバッグ、チューニングが行い難いという問題がある。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、デバッグを効率化できるデータ処理装置、変換装置、データ処理システム、変換方法、および変換プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、命令コードと、命令コードに関連付けられた命令コードの変換前のコードを特定する情報と、を受け付け、命令コードの実行により、変換前のコードを特定する情報を記録するデータ処理装置が提案される。
【０００９】
また、他の側面によれば、一連の命令コードに対する注釈を示す情報と一連の命令コードの変換前のコードを特定する情報とを含む注釈コードまたは一連の命令コードを受け付け、注釈コードが受け付けられた場合、一連の命令コードの実行前に、一連の命令コードの変換前のコードを特定する情報を記録し、一連の命令コードが受け付けられた場合、一連の命令コードを実行するデータ処理装置が提案される。
【００１０】
また、他の側面によれば、命令コードと命令コードの変換前のコードとの組合せを記憶し、変換前のコードが検出された場合、記憶された組合せを参照して、変換前のコードを、命令コードと命令コードに関連付けられた変換前のコードを特定する情報とに変換し、命令コードと命令コードに関連付けられた変換前のコードを特定する情報とを、自装置から他装置に送信する変換装置、変換方法、および変換プログラムが提案される。
【００１１】
また、他の側面によれば、第１の装置と、特定の処理を実行する第２の装置と、を含むデータ処理システムであって、第２の装置が実行可能な命令コードと命令コードの変換前のコードとの組合せを記憶し、変換前のコードが検出された場合、変換前のコードを、命令コードと命令コードに関連付けられた変換前のコードを特定する情報と、に変換し、命令コードと命令コードに関連付けられた変換前のコードを特定する情報とを、第１の装置から第２の装置に送信し、第２の装置によって、命令コードと命令コードに関連付けられた変換前のコードを特定する情報とを受け付け、第２の装置によって、命令コードの実行により、変換前のコードを特定する情報を記録するデータ処理システムが提案される。
【発明の効果】
【００１２】
本発明の一側面によれば、デバッグの効率化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施の形態１におけるアクセラレータの動作例を示す説明図である。
【図２】図２は、実施の形態１にかかるデータ処理システムのハードウェアの一例を示すブロック図である。
【図３】図３は、実施の形態１にかかるデータ処理システムの機能例を示すブロック図である。
【図４】図４は、ソフトウェアおよび入出力データの一例を示す説明図である。
【図５】図５は、データ処理システムの動作例を示すシーケンス図である。
【図６】図６は、テンプレート情報の記憶内容の一例を示す説明図である。
【図７】図７は、実施の形態１におけるＪＩＴコンパイラによる中間命令の変換例を示す説明図である。
【図８】図８は、中間命令での実行履歴および実行回数の具体例を示す説明図である。
【図９】図９は、ＪＩＴコンパイラによる変換処理の一例を示すフローチャートである。
【図１０】図１０は、実施の形態１におけるアクセラレータの動作例を示すフローチャートである。
【図１１】図１１は、実施の形態２にかかるデータ処理システムの機能例を示すブロック図である。
【図１２】図１２は、実施の形態２におけるＪＩＴコンパイラによる中間命令の変換例を示す説明図である。
【図１３】図１３は、実施の形態２におけるアクセラレータの動作例を示すフローチャートである。
【図１４】図１４は、実施の形態３にかかるデータ処理システムの機能例を示すフローチャートである。
【図１５】図１５は、実施の形態３におけるＪＩＴコンパイラによる中間命令の変換例を示す説明図である。
【図１６】図１６は、実施の形態３におけるアクセラレータの動作例を示すフローチャートである。
【図１７】図１７は、実施の形態１〜３にかかるコンピュータを用いたシステムの適用例を示す説明図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、開示のデータ処理装置、変換装置、データ処理システム、変換方法、および変換プログラムの実施の形態を詳細に説明する。以下の説明では、データ処理装置をアクセラレータとして、変換装置をＣＰＵとして説明している。
【００１５】
（実施の形態１の説明）
図１は、実施の形態１におけるアクセラレータの動作例を示す説明図である。データ処理システム１００は、ＣＰＵ１０１と、ＧＰＵ、ＤＳＰなどのアクセラレータ１０２と、を含む。ＣＰＵ１０１とアクセラレータ１０２は、バス１０３で接続されている。
【００１６】
ＣＰＵ１０１は、事前に、中間命令１１１を、アクセラレータ１０２のネイティブ命令１１２と中間命令１１１を特定する情報１１３とに変換している。また、実施の形態１では、アクセラレータ１０２は、特定の処理を高速に実行することの他に、中間命令１１１単位で示された性能情報１２１を提供することも目的としている。性能情報１２１は、命令の実行履歴や実行回数が記録された情報である。
【００１７】
アクセラレータ１０２は、ＣＰＵ１０１から、アクセラレータ１０２のネイティブ命令１１２と、ネイティブ命令１１２に関連付けられた中間命令１１１を特定する情報１１３と、を受け付ける。
【００１８】
図１の例では、アクセラレータ１０２は、１命令目として、ネイティブ命令１１２−１が“ＮＯＴ  Ｒ３，１”であり、情報１１３−１として、“ｌｄｒｐ”を受け付ける。また、アクセラレータ１０２は、２命令目として、ネイティブ命令１１２−２が“ＡＮＤ  Ｒ３，Ｒ２，Ｒ３”であり、情報１１３−２として、“ａｎｄ”を受け付ける。
【００１９】
次に、アクセラレータ１０２は、ネイティブ命令１１２“ＮＯＴ  Ｒ３，１”、“ＡＮＤ  Ｒ３，Ｒ２，Ｒ３”を実行し、中間命令を特定する情報１１３“ｌｄｒｐ”、“ａｎｄ”を記録する。これにより、ＣＰＵ１０１は、中間命令単位で命令の実行履歴や実行回数を開発者に提供できるため、開発者によるデバッグを効率化できる。以下、図１に示した動作を行うデータ処理システム１００の詳細を、図２〜図１０を用いて説明する。
【００２０】
（データ処理システム１００のハードウェア）
図２は、実施の形態１にかかるデータ処理システムのハードウェアの一例を示すブロック図である。図２において、データ処理システム１００は、ＣＰＵ１０１と、アクセラレータ１０２と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０２と、を含む。また、データ処理システム１００は、磁気ディスクドライブ２０３と、磁気ディスク２０４と、光ディスクドライブ２０５と、光ディスク２０６と、を含む。また、ユーザやその他の機器との入出力装置としてデータ処理システム１００は、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、マウス２１０と、を含む。また、各部はバス１０３によってそれぞれ接続されている。
【００２１】
ここで、ＣＰＵ１０１は、データ処理システム１００の全体の制御を司る。アクセラレータ１０２は、ＣＰＵ１０１からの指示により、特定の処理を実行する。また、アクセラレータ１０２がＧＰＵである場合、ＧＰＵを画像処理以外となる、より一般的な計算処理に使用するＧＰＧＰＵ（Ｇｅｎｅｒａｌ−Ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｏｎ  ＧＰＵ）という技術が適用される場合もある。
【００２２】
ＲＯＭ２０１は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０２は、ＣＰＵ１０１のワークエリアとして使用される。磁気ディスクドライブ２０３は、ＣＰＵ１０１の制御にしたがって磁気ディスク２０４に対するデータのリード／ライトを制御する。磁気ディスク２０４は、磁気ディスクドライブ２０３の制御で書き込まれたデータを記憶する。
【００２３】
光ディスクドライブ２０５は、ＣＰＵ１０１の制御にしたがって光ディスク２０６に対するデータのリード／ライトを制御する。光ディスク２０６は、光ディスクドライブ２０５の制御で書き込まれたデータを記憶したり、光ディスク２０６に記憶されたデータをコンピュータに読み取らせたりする。なお、ＲＯＭ２０１、磁気ディスク２０４、光ディスク２０６のいずれかの記憶装置に、実施の形態１〜３にかかる変換プログラムが格納されていてもよい。
【００２４】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイ２０７は、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２５】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２６】
キーボード２０９は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１０は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。また、データ処理システム１００は、マウス２１０の代わりとして、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００２７】
（データ処理システム１００の機能）
次に、データ処理システム１００の機能について説明する。図３は、実施の形態１にかかるデータ処理システムの機能例を示すブロック図である。データ処理システム１００では、ＣＰＵ１０１がＪＩＴコンパイラ３０１と、デバイスドライバ３０２を実行する。また、実施の形態１にかかるデータ処理システム１００は、受付部３１１と、判断部３１２と、実行部３１３と、記録部３１４と、出力部３１５と、記憶部３２１と、検出部３２２と、変換部３２３と、送信部３２４と、取得部３２５を含む。検出部３２２〜取得部３２５は、記憶装置に記憶されたプログラムをＣＰＵ１０１が実行することにより、その機能を実現する。ここで、記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０１、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などである。
【００２８】
また、アクセラレータ１０２は、性能情報１２１にアクセス可能である。性能情報１２１は、中間面例単位での命令の実行履歴や実行回数が記録された情報である。性能情報１２１が、実行履歴と、実行回数と、のうちいずれを記録するのかについては、アクセラレータ１０２の初期時に、ＣＰＵ１０１により設定されてもよいし、アクセラレータ１０２を用いるアプリの初期設定によって設定されてもよい。
【００２９】
また、ＣＰＵ１０１は、テンプレート情報３３１にアクセス可能である。テンプレート情報３３１は、中間命令とネイティブ命令との変換方法を示すテーブルである。テンプレート情報３３１の詳細は、図６にて後述する。また、テンプレート情報３３１は、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などの記憶領域に存在する。
【００３０】
ＪＩＴコンパイラ３０１は、中間命令から、中間命令の情報を含んだネイティブ命令に変換する機能を有する。具体的な変換方法については、図６、図７にて後述する。デバイスドライバ３０２は、アクセラレータ１０２を制御するソフトウェアである。具体的な動作については、図４にて説明する。なお、受付部３１１〜出力部３１５は、アクセラレータ１０２が有する機能であり、変換部３２３は、ＪＩＴコンパイラ３０１が有する機能であり、送信部３２４、取得部３２５は、デバイスドライバ３０２が有する機能である。
【００３１】
受付部３１１は、命令コードと、命令コードに関連付けられた命令コードの変換前のコードを特定する情報と、を受け付ける機能を有する。ここで、命令コードは、アクセラレータ１０２のネイティブ命令であり、変換前のコードは、中間命令である。関連付けの方法としては、たとえば、命令コードと変換前のコードが１命令内の前後で結合していてもよいし、順序が入れ替わってもよい。また、変換前のコードを特定する情報とは、変換前のコードを一意にする識別情報であり、たとえば、中間命令のオペコード部分である。また、変換前のコードを特定する情報は、変換前のコードそのものであってもよい。
【００３２】
たとえば、受付部３１１は、命令コードである“ＮＯＴ  Ｒ３，１”と、変換前のコードである“ｌｄｒｐ”を受け付ける。なお、受け付けた情報は、アクセラレータ１０２のレジスタ等といった記憶領域に記憶される。
【００３３】
判断部３１２は、受付部３１１によって受け付けた変換前のコードを特定する情報が、変換前のコードが存在しないことを示す情報であるか否かを判断する機能を有する。変換前のコードが存在しないことを示す情報は、たとえば、全ての中間命令に対応しないビットコードでもよいし、また、全ての中間命令に対応しないビット列がなければ、“ｎｏｐ”を示すビットコードでもよい。なお、判断結果は、アクセラレータ１０２のレジスタ等といった記憶領域に記憶される。
【００３４】
実行部３１３は、命令コードを実行する機能を有する。たとえば、実行部３１３は、ネイティブ命令“ＮＯＴ”、ネイティブ命令“ＡＮＤ”といった命令コードを実行する。なお、実行結果は、アクセラレータ１０２のレジスタ等といった記憶領域に記憶される。
【００３５】
記録部３１４は、実行部３１３による命令コードの実行により、変換前のコードを特定する情報を記録する機能を有する。たとえば、記録部３１４は、ネイティブ命令“ＮＯＴ”の実行により、変換前のコードを特定する情報“ｌｄｒｐ”を記録する。また、記録するタイミングは、実行部３１３による命令コードの実行と同時でもよいし、前でも後でもよい。なお、記録部３１４は、変換前のコードを特定する情報を性能情報１２１として、アクセラレータ１０２のレジスタ等といった記憶領域に記録する。
【００３６】
また、記録部３１４は、判断部３１２によって変換前のコードを特定する情報が変換前のコードが存在しないことを示す情報であると判断された場合、命令コードの実行により、変換前のコードを特定する情報を記録しない。
【００３７】
また、記録部３１４は、命令コードの実行により、命令コードの実行順に変換前のコードを特定する情報を記録してもよい。たとえば、“ＮＯＴ”、“ＡＮＤ”の順に実行した場合、記録部３１４は、“ｌｄｒｐ”、“ａｎｄ”の順に記録する。
【００３８】
また、記録部３１４は、命令コードの実行により、命令コードの実行回数を変換前のコードを特定する情報と対応づけて記録してもよい。たとえば、“ＮＯＴ”、“ＡＮＤ”を１回ずつ実行した場合、記録部３１４は、“ｌｄｒｐ”が１回、“ａｎｄ”が１回というように記録する。
【００３９】
出力部３１５は、性能情報１２１を出力する機能を有する。たとえば、出力部３１５は、性能情報１２１となる中間命令単位となる実行履歴、実行回数を、アクセラレータ１０２内の、ＣＰＵ１０１がアクセス可能な記憶領域に出力する。
【００４０】
記憶部３２１は、命令コードと命令コードの変換前のコードとの組合せを記憶する機能を有する。なお、各組は、テンプレート情報３３１の１レコードとして記録されている。なお、記憶部３２１は、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などの記憶領域に存在する。
【００４１】
検出部３２２は、変換前のコードを検出する機能を有する。たとえば、検出部３２２は、画像処理を実行する中間命令を検出する。なお、検出結果は、ＣＰＵ１０１のレジスタ、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などの記憶領域に存在する。
【００４２】
変換部３２３は、記憶部３２１を参照して、変換前のコードを、命令コードと命令コードに関連付けられた変換前のコードを特定する情報とに変換する機能を有する。具体的な変換方法については、図６、図７にて説明する。なお、変換された情報は、ＣＰＵ１０１のレジスタ、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などの記憶領域に存在する。
【００４３】
送信部３２４は、命令コードと命令コードに関連付けられた変換前のコードを特定する情報とを、他装置に送信する機能を有する。たとえば、送信部３２４は、命令コード“ＮＯＴ  Ｒ３，１”、変換前のコードを特定する情報“ｌｄｒｐ”をアクセラレータ１０２に送信する。
【００４４】
取得部３２５は、アクセラレータ１０２から性能情報１２１を取得する。たとえば、取得部３２５は、所定の周期で、アクセラレータ１０２から性能情報１２１を取得する。取得した性能情報１２１は、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などの記憶領域に存在する。次に、図４にて、データ処理システム１００で使用されるソフトウェアおよび入出力データについて説明する。
【００４５】
図４は、ソフトウェアおよび入出力データの一例を示す説明図である。データ処理システム１００にて実行されるソフトウェア、またはアクセラレータ１０２に対して入力、または出力されるデータとして、性能情報１２１、ソースコード４０１、ネイティブ命令４０２、入力データ４０３、出力データ４０４がある。データ処理システム１００にて実行されるソフトウェアとして、ＪＩＴコンパイラ３０１、コンパイラ４１１、アプリ４１２、デバイスドライバ３０２がある。
【００４６】
ソースコード４０１は、プログラミング言語にしたがって記述されたコンピュータプログラムである。ソースコード４０１の中には、ＣＰＵ１０１にて実行される部分と、アクセラレータ１０２によって実行される部分が存在する。
【００４７】
ネイティブ命令４０２は、アクセラレータ１０２が直接実行可能な命令で記載された実行コードである。入力データ４０３は、アクセラレータ１０２に対して入力されるデータである。出力データ４０４は、アクセラレータ１０２から出力されるデータである。
【００４８】
コンパイラ４１１は、ソースコード４０１から、ＣＰＵ１０１が実行可能なソフトウェアを生成する機能を有する。図４の例では、コンパイラ４１１は、ソースコード４０１からアプリ４１２を生成する。
【００４９】
アプリ４１２は、データ処理システム１００にて実行可能なソフトウェアである。アプリ４１２は、ＣＰＵ１０１にて実行される実行コードと、アクセラレータ１０２によって実行される中間命令が含まれている。
【００５０】
デバイスドライバ３０２は、アクセラレータ１０２を制御するソフトウェアである。具体的に、デバイスドライバ３０２は、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を有し、アプリ４１２とアクセラレータ１０２のデータの入出力を行う。たとえば、デバイスドライバ３０２は、入力データ４０３を受け付け、アクセラレータ１０２がアクセス可能なバッファに、入力データ４０３を書き込む。
【００５１】
また、デバイスドライバ３０２は、アクセラレータ１０２のレジスタを参照し、出力データ４０４が読込可能である場合、出力データ４０４を読み込み、ＣＰＵ１０１がアクセス可能な記憶領域に退避する。同様に、デバイスドライバ３０２は、性能情報１２１を取得し、ＣＰＵ１０１がアクセス可能な記憶領域に退避する。続けて、図５にて、図４で説明したソフトウェア、アクセラレータ１０２の動作をシーケンス図にて示す。
【００５２】
図５は、データ処理システムの動作例を示すシーケンス図である。アプリ４１２は、中間命令の実行要求をＪＩＴコンパイラ３０１に送信する（ステップＳ５０１）。中間命令を受け付けたＪＩＴコンパイラ３０１は、中間命令をネイティブ命令４０２に変換する（ステップＳ５０２）。次に、ＪＩＴコンパイラ３０１は、デバイスドライバ３０２にネイティブ命令を送信する（ステップＳ５０３）。ネイティブ命令を受け付けたデバイスドライバ３０２は、アクセラレータ１０２にネイティブ命令を送信する（ステップＳ５０４）。
【００５３】
ネイティブ命令を受け付けたアクセラレータ１０２は、ネイティブ命令４０２を実行し（ステップＳ５０５）、さらに、性能情報１２１となる、中間命令を特定する情報を記録する（ステップＳ５０６）。次に、アクセラレータ１０２は、デバイスドライバ３０２に出力データ４０４を送信する（ステップＳ５０７）。出力データ４０４を受け付けたデバイスドライバ３０２は、アプリ４１２に出力データ４０４を送信する（ステップＳ５０８）。また、アクセラレータ１０２は、所定の周期で、デバイスドライバ３０２に性能情報１２１を出力する（ステップＳ５０９）。
【００５４】
図６は、テンプレート情報の記憶内容の一例を示す説明図である。テンプレート情報３３１は、レコード３３１−１〜レコード３３１−７までを登録している。テンプレート情報３３１は、パターン、パターン適合条件、テンプレートコードという３つのフィールドを含む。パターンフィールドには、変換元の中間命令が格納される。パターン適合条件フィールドには、パターンフィールドに格納された中間命令の適合条件が格納される。テンプレートコードフィールドには、変換後のネイティブ命令の元となる情報が格納される。また、図６で示す＜ａｄｄｒ＞はアドレスを示しており、＜ｒｅｇ＞はレジスタ名を示しており、＜ｉｍｍ＞は即値を示している。
【００５５】
たとえば、レコード３３１−１は、中間命令ｂｒａｎｃｈ（分岐命令）が条件によらず、ネイティブ命令ＢＲＡ（分岐命令）に変換されることを示している。また、変換後のネイティブ命令内に、中間命令に関する情報として、テンプレートコードフィールドの最後の引数であるｂｒａｎｃｈを示すビットコードが格納される。具体的な格納箇所については、図７にて説明する。
【００５６】
また、レコード３３１−２は、中間命令ｌｄｒｐ（即値ロード命令）に関して、即値が０から０ｘｆｆｆｆまでであれば、ネイティブ命令ＭＯＶ（レジスタ転送命令）に変換されることを示している。また、変換後のネイティブ命令内に、ｌｄｒｐのビットコードが格納される。
【００５７】
また、レコード３３１−３は、中間命令ｌｄｒｐ（即値ロード命令）に関して、即値が０ｘｆｆｆｆ００００から０ｘｆｆｆｆｆｆｆｆまでであれば、ネイティブ命令ＮＯＴ（ビット反転命令）に変換されることを示している。また、変換後のネイティブ命令内に、ｌｄｒｐを示すビットコードが格納される。
【００５８】
また、レコード３３１−４は、中間命令ｌｄｒｐ（即値ロード命令）に関して、即値が０ｘ１００００から０ｘｆｆｆｅｆｆｆｆまでであり、かつ、即値の下４ビットが全て０であれば、ネイティブ命令ＳＨＬ（左シフト命令）に変換されることを示している。また、変換後のネイティブ命令内に、ｌｄｒｐを示すビットコードが格納される。
【００５９】
また、レコード３３１−５は、中間命令ｌｄｒｐ（即値ロード命令）に関して、即値が０ｘ１００００から０ｘｆｆｆｅｆｆｆｆまでであり、かつ、即値の下４ビットが０でないビットがあれば、ネイティブ命令ＳＨＬと、ネイティブ命令ＡＤＤＩ（即値加算命令）に変換されることを示している。また、変換後のネイティブ命令の１命令目に、ｌｄｒｐを示すビットコードが格納され、２命令目に対応する中間命令がないことを示す“”を示すビットコードが格納される。レコード３３１−６、レコード３３１−７も同様に、中間命令からネイティブ命令に変換する内容を示している。
【００６０】
図７は、実施の形態１におけるＪＩＴコンパイラによる中間命令の変換例を示す説明図である。図７中の（ａ）は、変換後のネイティブ命令のフォーマットを示しており、図７中の（ｂ）は、中間命令の具体的な変換例を示している。
【００６１】
変換後のネイティブ命令７０１は、中間命令、ネイティブ命令という２つのフィールドを有する。中間命令フィールドは、ネイティブ命令に対応する中間命令を特定する情報が格納される。たとえば、中間命令フィールドは、中間命令の全ビットが格納されてもよいし、中間命令のオペコード部分のビットが格納されてもよい。また、性能情報１２１が、命令ごとの実行回数を提供する場合、中間命令フィールドは、中間命令を識別可能な最小限のビットが格納されてもよい。ネイティブ命令は、アクセラレータ１０２が実行可能な実行コードである。なお、実行履歴、または実行回数のいずれかを提供するか否かは、たとえば、アクセラレータ１０２の初期時に、ＣＰＵによって設定される。
【００６２】
たとえば、中間命令７０２＿Ｍとして、“ｓｅｔｚｅｒｏ  ｒ３”を変換する場合を示す。このとき、ＪＩＴコンパイラ３０１は、テンプレート情報３３１のレコード３３１−６から、中間命令７０２＿Ｍをネイティブ命令７０２＿Ｎに変換する。以下、接尾記号“＿Ｍ”は中間命令を示し、接尾記号“＿Ｎ”はネイティブ命令を示す。ネイティブ命令７０２＿Ｎの中間命令フィールドには、ｓｅｔｚｅｒｏを示すビットが格納されており、ネイティブ命令フィールドには、“ＭＯＶ  Ｒ３，Ｒ０”を示すビットが格納されている。
【００６３】
また、中間命令７０３＿Ｍとして、“ｌｄｒｐ  ｒ３，０ｘ１０００１”を変換する場合を示す。このとき、ＪＩＴコンパイラ３０１は、テンプレート情報３３１のレコード３３１−５から、中間命令７０３＿Ｍをネイティブ命令７０３＿Ｎに変換する。ネイティブ命令７０３＿Ｎの１命令目の中間命令フィールドには、“ｌｄｒｐ”を示すビットが格納されており、１列目のネイティブ命令フィールドには、“ＳＨＬ  Ｒ３，１，１６”を示すビットが格納されている。また、２命令目の中間命令フィールドには、何も処理を行わない“ｎｏｐ”を示すビットが格納されており、２列目のネイティブ命令フィールドには、“ＡＤＤＩ  Ｒ３，  Ｒ３，  １”を示すビットが格納されている。
【００６４】
このように、中間命令１に対してネイティブ命令が２以上となる場合、テンプレート情報３３１の対応するレコードの２命令目以降には対応する中間命令が存在しないことを示す“”を示すビットコードが格納されている。これに基づいて、ＪＩＴコンパイラ３０１は、２命令目以降の中間命令フィールドに、“ｎｏｐ”を示すビットを格納する。または、ＪＩＴコンパイラ３０１は、全ての中間命令に対応しないビットを格納してもよい。この理由として、“ｎｏｐ”命令がコンパイラ４１１にて使用されている場合、ｎｏｐ命令が実行されたとカウントされるためである。したがって、ＪＩＴコンパイラ３０１は、全ての中間命令に対応しないビットがあれば、該当のビットを格納し、なければ、“ｎｏｐ”を示すビットを格納してもよい。
【００６５】
また、図７では図示していないが、中間命令２以上に対してネイティブ命令が１となる場合、ＪＩＴコンパイラ３０１は、２命令以降のネイティブ命令フィールドに、“ｎｏｐ”を示すビットを格納する。または、アクセラレータ１０２が、コードを読み飛ばす命令が存在すれば、該当の命令を示すビットを格納してもよい。
【００６６】
このように、整数ｍ、ｎが１以上の整数であって、中間命令ｍに対してネイティブ命令ｎであり、ｍとｎが異なる場合、ＪＩＴコンパイラ３０１は、多い命令に対応するフィールドに“ｎｏｐ”を格納する。または、ＪＩＴコンパイラ３０１は、ｍよりｎが大きい場合、中間命令フィールドに全ての中間命令に対応しないビットを格納し、ｎよりｍが大きい場合、ネイティブ命令フィールドにコードを読み飛ばす命令を格納してもよい。
【００６７】
図８は、中間命令での実行履歴および実行回数の具体例を示す説明図である。図８では、ネイティブ命令８０１＿Ｎが実行された場合の実行履歴および実行回数を示している。また、表８０２がネイティブ命令の実行履歴を示し、表８０３が中間命令の実行履歴を示し、表８０４が中間命令の実行回数を示している。
【００６８】
たとえば、レジスタＲ１が１である場合、アクセラレータ１０２は、４命令目の“ＢＥＱ  Ｌ２”を実行し、ラベルＬ２へ遷移する。次に、アクセラレータ１０２は、ラベルＬ２から３命令目の“ＢＲＡ  Ｌ４”を実行し、ラベルＬ４へ遷移する。したがって、ネイティブ命令での実行履歴は、表８０２となる。
【００６９】
中間命令の実行履歴を出力する場合、アクセラレータ１０２は、ネイティブ命令８０１＿Ｎの１命令目である“ＣＭＰ  Ｒ１，０”の実行により、中間命令フィールドに格納された“ｓｗｉｔｃｈ２ｄ”を取得し、性能情報１２１として記録する。また、アクセラレータ１０２は、ネイティブ命令８０１＿ＮのラベルＬ２から１命令目の“ＳＨＬ  Ｒ３，１，１６”の実行を契機として、中間命令フィールドに格納された“ｌｄｒｐ”を取得し、性能情報１２１として格納する。また、アクセラレータ１０２は、ネイティブ命令８０１＿ＮのラベルＬ２から３命令目の“ＢＲＡ  Ｌ４”の実行を契機として、中間命令フィールドに格納されたｂｒａｎｃｈを取得し、性能情報１２１として格納する。最終的に、性能情報１２１は、表８０３で示すような値となる。
【００７０】
また、中間命令の実行回数を出力する場合、アクセラレータ１０２は、“ｓｗｉｔｃｈ２ｄ”を取得して、“ｓｗｉｔｃｈ２ｄ”の実行回数を１インクリメントする。同様に、アクセラレータ１０２は、“ｌｄｒｐ”を取得して、“ｌｄｒｐ”の実行回数を１インクリメントし、“ｂｒａｎｃｈ”を取得して、“ｂｒａｎｃｈ”の実行回数を１インクリメントする。
【００７１】
図９は、ＪＩＴコンパイラによる変換処理の一例を示すフローチャートである。初めに、ＪＩＴコンパイラ３０１は、中間命令を受け付ける（ステップＳ９０１）。次に、ＪＩＴコンパイラ３０１は、テンプレート情報３３１から、中間命令に一致するパターンが存在するか否かを判断する（ステップＳ９０２）。パターンが存在する場合（ステップＳ９０２：Ｙｅｓ）、ＪＩＴコンパイラ３０１は、一致した中間命令を、テンプレートコードを用いて変換し（ステップＳ９０３）、ステップＳ９０２の処理に移行する。パターンが存在しない場合（ステップＳ９０２：Ｎｏ）、全て変換し終えたことを示しているため、ＪＩＴコンパイラ３０１は、中間命令を特定する情報を含んだ、ネイティブ命令をアクセラレータ１０２に送信し（ステップＳ９０４）、変換処理を終了する。
【００７２】
図１０は、実施の形態１におけるアクセラレータの動作例を示すフローチャートである。アクセラレータ１０２は、ネイティブ命令を受け付ける（ステップＳ１００１）。次に、アクセラレータ１０２は、中間命令フィールドに中間命令が存在しないことを示す情報が格納されているか否かを判断する（ステップＳ１００２）。中間命令を特定する情報である場合（ステップＳ１００２：Ｎｏ）、アクセラレータ１０２は、ネイティブ命令フィールドの命令を実行する（ステップＳ１００３）。続けて、アクセラレータ１０２は、中間命令フィールドに格納された中間命令を特定する情報を記録する（ステップＳ１００４）。なお、ステップＳ１００３とステップＳ１００４は、同一クロックサイクル内で実行されることが望ましいが、別のクロックサイクルで実行する形態でもかまわない。その場合、ステップＳ１００３とステップＳ１００４はどちらか先に実行されてもかまわない。
【００７３】
また、中間命令が存在しないことを示す情報である場合（ステップＳ１００２：Ｙｅｓ）、アクセラレータ１０２は、ネイティブ命令フィールドの命令を実行する（ステップＳ１００５）。ステップＳ１００３とステップＳ１００４の両方、またはステップＳ１００５の実行後、アクセラレータ１０２は、アクセラレータ１０２の実行が終了したか否かを判断する（ステップＳ１００６）。実行が終了していない場合（ステップＳ１００６：Ｎｏ）、アクセラレータ１０２は、ステップＳ１００２の処理に移行する。実行が終了した場合（ステップＳ１００６：Ｙｅｓ）、アクセラレータ１０２は、性能情報１２１を出力し（ステップＳ１００７）、動作を終了する。
【００７４】
以上説明したように、データ処理装置によれば、ネイティブ命令と中間命令を特定する情報とを受け付けて、ネイティブ命令の実行により、中間命令を実行したことを記録する。これにより、データ処理装置は、中間命令単位で命令の実行履歴や実行回数を提供できるため、開発者によるデバッグを効率化できる。また、ネイティブ命令と中間命令を特定する情報が１命令であれば、中間命令を特定する情報が入っていない場合と、命令数が変わらないため、実行タイミングを従来例にかかるデータ処理装置と同一にすることができる。
【００７５】
また、データ処理装置は、中間命令を特定する情報が、中間命令が存在しないことを示す情報である場合、中間命令を実行したことを記録しなくてよい。これにより、データ処理装置は、中間命令が２つ以上のネイティブ命令に変換された場合も、変換前の中間命令１つを記録することができる。
【００７６】
また、データ処理装置は、ネイティブ命令の実行により、ネイティブ命令の実行順に中間命令を特定する情報を記録してもよい。これにより、データ処理システムは、中間命令単位での命令の実行履歴を提供することができる。従来例におけるデータ処理システムにて、中間命令単位での実行履歴を開発者に提供する場合、ＣＰＵがネイティブ命令の実行履歴から中間命令のいずれに当たるかを推定することになる。この方法の場合、アクセラレータの実行後に、複雑なパターンマッチを行うことになるという問題がある。また、引数等を含めてまったく同一のネイティブ命令に変換される中間命令が複数存在する場合、従来例におけるデータ処理システムは、正しい情報を提供することが困難となる。
【００７７】
また、データ処理装置は、ネイティブ命令コードの実行回数を、中間命令を特定する情報と対応づけて記録してもよい。これにより、データ処理システムは、中間命令単位での命令の実行回数を提供することができる。従来例におけるデータ処理システムにて、中間命令単位での実行回数を開発者に提供しようとする場合、ＣＰＵが実行回数の変換処理を行うことになる。この変換処理は、命令の種類数が多いほど大量の計算を行うことになるという問題がある。また、同一のネイティブ命令に変換される中間命令が複数存在する場合、この変換処理方法では元の中間命令に変換することができなくなってしまう。また、ネイティブ命令の実行履歴から、中間命令の実行履歴を得て、中間命令の実行回数を取得する方法もあるが、実行回数を得たいがために、実行履歴を蓄えるメモリが要求されるため、オーバヘッドが大きくなってしまう。
【００７８】
（実施の形態２の説明）
実施の形態１では、全てのネイティブ命令に対して中間命令を特定する情報が付与されている。実施の形態２では、実施の形態１より使用するメモリ量を削減する方法を提案する。なお、実施の形態２にかかるデータ処理システム１００のハードウェアは、実施の形態１にかかるデータ処理システム１００のハードウェアと同一であるため、説明を省略する。
【００７９】
図１１は、実施の形態２にかかるデータ処理システムの機能例を示すブロック図である。実施の形態２にかかるデータ処理システム１００は、受付部１１０１と、判断部１１０２と、実行部１１０３と、記録部１１０４と、出力部３１５と、記憶部３２１と、検出部３２２と、変換部１１１１と、送信部１１１２と、取得部３２５を含む。検出部３２２、取得部３２５、変換部１１１１、送信部１１１２は、記憶装置に記憶されたプログラムをＣＰＵ１０１が実行することにより、その機能を実現する。ここで、記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０１、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などである。なお、実施の形態１と同一の符号の機能部については、実施の形態１と同一の機能を有するため、説明を省略する。
【００８０】
受付部１１０１は、一連の命令コードに対する注釈を示す情報と一連の命令コードの変換前のコードを特定する情報とを含む注釈コードまたは一連の命令コードを受け付ける機能を有する。注釈を示す情報は、たとえば、アクセラレータのネイティブ命令のオペコードのうち、未使用であるビットコードを採用する。注釈コードは、ネイティブ命令の一つとなる。
【００８１】
たとえば、受付部１１０１は、注釈を示す情報と中間命令を特定する情報“ｓｗｉｔｃｈ２ｄ”を含む注釈コード、または一連の命令コード“ＣＭＰ  Ｒ１，０”、“ＢＥＱ  Ｌ１”、“ＣＭＰ  Ｒ１，１”、“ＢＥＱ  Ｌ２”、“ＢＲＡ  Ｌ３”を受け付ける。なお、受け付けた注釈コードまたは一連の命令コードは、アクセラレータ１０２のレジスタ等といった記憶領域に記憶される。
【００８２】
判断部１１０２は、受付部１１０１によって一連の命令コードが受け付けられたか、または注釈コードが受け付けられたかを判断する機能を有する。判断結果は、アクセラレータ１０２のレジスタ等といった記憶領域に記憶される。
【００８３】
実行部１１０３は、受付部１１０１によって一連の命令コードが受け付けられた場合、一連の命令コードを実行する機能を有する。たとえば、実行部１１０３は、一連の命令コード“ＣＭＰ  Ｒ１，０”、“ＢＥＱ  Ｌ１”、“ＣＭＰ  Ｒ１，１”、“ＢＥＱ  Ｌ２”、“ＢＲＡ  Ｌ３”を順次実行する。
【００８４】
記録部１１０４は、受付部１１０１によって注釈コードが受け付けられた場合、一連の命令コードの実行前に、一連の命令コードの変換前のコードを特定する情報を記録する機能を有する。たとえば、記録部１１０４は、注釈コードが受け付けられた場合、“ｓｗｉｔｃｈ２ｄ”を記録する。また、記録部１１０４は、命令コードの実行順に変換前のコードを特定する情報を記録してもよいし、命令コードの実行回数を変換前のコードを特定する情報と対応づけて記録してもよい。
【００８５】
変換部１１１１は、記憶部３２１を参照して、変換前のコードを、一連の命令コードに対する注釈を示す情報と一連の命令コードの変換前のコードを特定する情報とを含む注釈コードと、一連の命令コードと、に変換する機能を有する。なお、具体的な変換方法については、図１２にて後述する。送信部１１１２は、注釈コードと、一連のネイティブ命令とを、他装置に送信する機能を有する。
【００８６】
図１２は、実施の形態２におけるＪＩＴコンパイラによる中間命令の変換例を示す説明図である。図１２中の（ａ）は、実施の形態２で用いる注釈コード１２０１のフォーマットを示しており、図１２中の（ｂ）は、中間命令の具体的な変換例を示している。
【００８７】
注釈コード１２０１は、オペコード、中間命令という２つのフィールドを有する。オペコードフィールドには、注釈を示す情報が格納されている。注釈を示す情報は、たとえば、図１２で示すような“１１１”である。以下、オペコードフィールドに“１１１”が格納されている場合、注釈コード（ＡＮＯＮ）と表記する。中間命令フィールドは、注釈コード１２０１の後続のネイティブ命令に対応する中間命令を特定する情報が格納される。たとえば、中間命令フィールドは、中間命令の全ビットが格納されてもよいし、中間命令のオペコード部分のビットが格納されてもよい。
【００８８】
ＪＩＴコンパイラ３０１は、中間命令１２０２＿Ｍからネイティブ命令１２０２＿Ｎに変換する。より詳細な例として、中間命令１２０２＿Ｍに含まれる、中間命令１２０２−１＿Ｍ“ｓｗｉｔｃｈ２ｄ  ｒ１，０，Ｌ１，１，Ｌ２，Ｌ３”を変換する場合について説明する。このとき、ＪＩＴコンパイラ３０１は、中間命令１２０２−１＿Ｍを、注釈を示す情報と中間命令を特定する情報“ｓｗｉｔｃｈ２ｄ”を含むネイティブ命令とレコード３３１−７による変換とネイティブ命令とを含むネイティブ命令１２０２−１＿Ｎに変換する。
【００８９】
このように、ネイティブ命令の１命令あたりの消費ビット数が、実施の形態１にかかる変換例に比べて削減されることになる。具体的に、実施の形態２にかかる変換例では、中間命令とネイティブ命令の対応と特定する情報を埋め込むことができる。一方、実施の形態１にかかる変換例では、対応する中間命令とネイティブ命令でいずれか一方が多い場合は無効である旨を示す情報をフィールドに埋め込むこととなるため、総ビット数は実施の形態２より等しいか多くなる。したがって、実施の形態２にかかる変換例は、同一の命令メモリサイズで、実施の形態１以上の命令数を実行することができる。
【００９０】
図１３は、実施の形態２におけるアクセラレータの動作例を示すフローチャートである。なお、図１３で示すステップＳ１３０１、ステップＳ１３０５、ステップＳ１３０６は、ステップＳ１００１、ステップＳ１００６、ステップＳ１００７と同一の処理であるため、説明を省略する。
【００９１】
ステップＳ１３０１の処理後、アクセラレータ１０２は、オペコードフィールドに注釈を示す情報が格納されているか否かを判断する（ステップＳ１３０２）。注釈を示す情報が格納されている場合（ステップＳ１３０２：Ｙｅｓ）、アクセラレータ１０２は、中間命令フィールドに格納された中間命令を特定する情報を記録し（ステップＳ１３０３）、ステップＳ１３０５の処理に移行する。注釈を示す情報が格納されていない場合（ステップＳ１３０２：Ｎｏ）、アクセラレータ１０２は、ネイティブ命令を実行し（ステップＳ１３０４）、ステップＳ１３０５の処理に移行する。
【００９２】
以上説明したように、データ処理装置によれば、注釈コードを受け付けた場合、注釈コード内の中間命令を特定する情報を記録する。これにより、データ処理システムは、ネイティブ命令１つあたりの使用メモリ量を、実施の形態１に比べて削減することができる。
【００９３】
（実施の形態３の説明）
実施の形態２にかかるデータ処理システム１００は、ネイティブ命令１つあたりの使用メモリ量を実施の形態１より削減していた。実施の形態３にかかるデータ処理システム１００は、実施の形態２にかかるデータ処理システム１００よりさらに使用メモリ量を削減できる方法を提供する。なお、実施の形態３にかかるデータ処理システム１００のハードウェアは、実施の形態１にかかるデータ処理システム１００のハードウェアと同一であるため、説明を省略する。
【００９４】
図１４は、実施の形態３にかかるデータ処理システムの機能例を示すブロック図である。実施の形態３にかかるデータ処理システム１００は、記憶部１４０１と、受付部１１０１と、判断部１４０２と、実行部１４０３と、記録部１４０４と、出力部３１５と、記憶部３２１と、検出部３２２と、変換部１４１１と、送信部１１１２と、取得部３２５を含む。検出部３２２、取得部３２５、変換部１４１１、送信部１１１２は、記憶装置に記憶されたプログラムをＣＰＵ１０１が実行することにより、その機能を実現する。ここで、記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０１、ＲＡＭ２０２、磁気ディスク２０４、光ディスク２０６などである。なお、実施の形態１、または実施の形態２と同一の符号の機能部については、実施の形態１、または実施の形態２と同一の機能を有するため、説明を省略する。
【００９５】
記憶部１４０１は、変換前のコードと１対１対応する命令コードと、変換前のコードを特定する情報との組合せを記憶する機能を有する。ここで、変換前のコードと１対１対応する命令コードとは、変換前のコードに対応する命令コードが、他の変換前コードに対応する命令コードに含まれないものである。たとえば、記憶部１４０１は、変換前のコードとなる“ａｎｄ”と、“ａｎｄ”と１対１対応するネイティブ命令“ＡＮＤ”と、を記憶する。
【００９６】
判断部１４０２は、注釈コードの後続コードが、一連の命令コードの中のいずれかの命令コードであるか、一連の命令コードの変換前のコードとは異なる他の変換前のコードと１対１対応する命令コードであるか否かを判断する機能を有する。たとえば、判断部１４０２は、後続コードが１対１対応する命令コードである“ＡＮＤ”か否かを判断する。なお、判断結果は、アクセラレータ１０２のレジスタ等といった記憶領域に記憶される。
【００９７】
実行部１４０３は、判断部１４０２によって他の変換前のコードと１対１対応する命令コードであると判断された場合、他の変換前のコードと１対１対応する命令コードを実行する機能を有する。たとえば、実行部１４０３は、ネイティブ命令“ＡＮＤ”を実行する。
【００９８】
記録部１４０４は、他の変換前のコードと１対１対応する命令コードを記録する。たとえば、記録部１４０４は、“ＡＮＤ”を記録する。また、記録部１４０４は、記憶部１４０１を参照して、他の変換前のコードを特定する情報を記憶してもよい。
【００９９】
変換部１４１１は、記憶部３２１を参照して、変換前のコードを、変換前のコードが命令コードと１対１対応する場合、命令コードに変換し、対応しない場合、注釈コードと一連の命令コードとに変換する機能を有する。なお、変換前のコードが命令コードと１対１対応するか否かの判断方法については、たとえば、テンプレート情報３３１に１対１対応するか否かを示す識別子を格納する新たなフィールドを設定しておき、新たなフィールドを参照して判断してもよい。また、設定される内容は、記録部１４０４と同一の情報となる。
【０１００】
図１５は、実施の形態３におけるＪＩＴコンパイラによる中間命令の変換例を示す説明図である。図１５では、中間命令の具体的な変換例を示している。ＪＩＴコンパイラ３０１は、中間命令１５０１＿Ｍからネイティブ命令１５０１＿Ｎに変換する。より詳細な例として、中間命令１５０１＿Ｍに含まれる、中間命令１５０１−１＿Ｍ“ａｎｄ  ｒ３，ｒ２，ｒ３”を変換する場合について説明する。
【０１０１】
ＪＩＴコンパイラ３０１は、中間命令１５０１−１＿Ｍのオペコード部分より、ネイティブ命令と１対１対応する中間命令であることを判断し、注釈コードを付与せずに、ネイティブ命令１５０１−１＿Ｎに変換する。また、他の中間命令に関しては、１対１対応ではないため、ＪＩＴコンパイラ３０１は、注釈コードを付与している。
【０１０２】
このように、中間命令と１対１対応するネイティブ命令には、注釈コードを付与しないことで、実施の形態３におけるデータ処理システム１００は、使用メモリ量を実施の形態２におけるデータ処理システム１００より削減することができる。
【０１０３】
図１６は、実施の形態３におけるアクセラレータの動作例を示すフローチャートである。なお、図１６で示すステップＳ１６０１〜ステップＳ１６０３、ステップＳ１６０８、ステップＳ１６０９は、ステップＳ１３０１〜ステップＳ１３０３、ステップＳ１３０５、ステップＳ１３０６と同一の処理であるため、説明を省略する。
【０１０４】
注釈を示す情報が格納されていない場合（ステップＳ１６０２：Ｎｏ）、アクセラレータ１０２は、中間命令と１対１対応するネイティブ命令か否かを判断する（ステップＳ１６０４）。１対１対応するネイティブ命令である場合（ステップＳ１６０４：Ｙｅｓ）、アクセラレータ１０２は、ネイティブ命令を実行する（ステップＳ１６０５）。続けて、アクセラレータ１０２は、ネイティブ命令に対応する中間命令を特定する情報を記録し（ステップＳ１６０６）、ステップＳ１６０８の処理に移行する。なお、ステップＳ１６０５とステップＳ１６０６は、同一クロックサイクル内で実行しても、ステップＳ１６０６、ステップＳ１６０５の順に実行してもかまわない。１対１対応するネイティブ命令でない場合（ステップＳ１６０４：Ｎｏ）、アクセラレータ１０２は、ネイティブ命令を実行し（ステップＳ１６０７）、ステップＳ１６０８の処理に移行する。
【０１０５】
図１７は、実施の形態１〜３にかかるコンピュータを用いたシステムの適用例を示す説明図である。図１７において、ネットワークＮＷは、サーバ１７０１とクライアント１７１１〜クライアント１７１４とが通信可能なネットワークであり、たとえば、ＬＡＮ、ＷＡＮ、インターネット、携帯電話網などを含む。
【０１０６】
クライアント１７１１はノート型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。クライアント１７１２はデスクトップ型ＰＣ、クライアント１７１３は携帯電話機である。携帯電話機として、クライアント１７１３は、スマートフォンであってもよいし、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）であってもよい。クライアント１７１４はタブレット型端末である。図１７のサーバ１７０１、クライアント１７１１〜クライアント１７１４は、それぞれＣＰＵとアクセラレータを有し、本実施の形態１〜３のいずれかにかかる動作を実行する。
【０１０７】
以上説明したように、データ処理装置によれば、中間命令と１対１対応するネイティブ命令を受け付けた場合、ネイティブ命令を記録する。これにより、データ処理システムは、ネイティブ命令１つあたりの使用メモリ量を、実施の形態２に比べて削減することができる。したがって、データ処理システムは、同一の命令メモリサイズで、実施の形態２以上の命令数を実行することができる。
【０１０８】
また、データ処理装置は、変換前のコードと１対１対応する命令コードと、変換前のコードを特定する情報との組合せを記憶し、１対１対応するネイティブ命令を受け付けた場合、対応する変換前のコードを特定する情報を記録してもよい。これにより、データ処理システムは、開発者に対して提供する性能情報を、全て中間命令単位にすることができる。また、データ処理装置は、１対１対応する命令コードと、変換前のコードを特定する情報との組合せを記憶してなくてもよい。この場合、性能情報にネイティブ命令が含まれることになるが、１対１対応しているため、ＣＰＵがネイティブ命令から中間命令に変換することは容易である。
【０１０９】
なお、本実施の形態で説明した変換方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本変換プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また変換プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１１０】
また、本実施の形態で説明したアクセラレータ１０２は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、上述したアクセラレータ１０２の機能（受付部３１１〜出力部３１５、受付部１１０１〜記録部１１０４、記憶部１４０１〜記録部１４０４）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、アクセラレータ１０２を製造することができる。
【０１１１】
上述した実施の形態１〜３に関し、さらに以下の付記を開示する。
【０１１２】
（付記１）命令コードと、前記命令コードに関連付けられた前記命令コードの変換前のコードを特定する情報と、を受け付ける受付部と、
前記命令コードの実行により、前記変換前のコードを特定する情報を記録する記録部と、
を備えることを特徴とするデータ処理装置。
【０１１３】
（付記２）前記受付部によって受け付けた前記変換前のコードを特定する情報が、前記変換前のコードが存在しないことを示す情報であるか否かを判断する判断部をさらに備え、
前記記録部は、
前記判断部によって前記変換前のコードを特定する情報が前記変換前のコードが存在しないことを示す情報であると判断された場合、前記命令コードの実行により、前記変換前のコードを特定する情報を記録しない、
ことを特徴とする付記１に記載のデータ処理装置。
【０１１４】
（付記３）一連の命令コードに対する注釈を示す情報と前記一連の命令コードの変換前のコードを特定する情報とを含む注釈コードまたは前記一連の命令コードを受け付ける受付部と、
前記受付部によって前記注釈コードが受け付けられた場合、前記一連の命令コードの実行前に、前記一連の命令コードの変換前のコードを特定する情報を記録する記録部と、
前記受付部によって前記一連の命令コードが受け付けられた場合、前記一連の命令コードを実行する実行部と、
を備えることを特徴とするデータ処理装置。
【０１１５】
（付記４）前記記録部は、
前記命令コードの実行により、前記命令コードの実行順に前記変換前のコードを特定する情報を記録する、
ことを特徴とする付記１または３に記載のデータ処理装置。
【０１１６】
（付記５）前記記録部は、
前記命令コードの実行により、前記命令コードの実行回数を前記変換前のコードを特定する情報と対応づけて記録する、
ことを特徴とする付記１または３に記載のデータ処理装置。
【０１１７】
（付記６）前記注釈コードの後続コードが、前記一連の命令コードの中のいずれかの命令コードであるか、前記一連の命令コードの変換前のコードとは異なる他の変換前のコードと１対１対応する命令コードであるか否かを判断する判断部を備え、
前記実行部は、
前記他の変換前のコードと１対１対応する命令コードであると判断された場合、前記他の変換前のコードと１対１対応する命令コードを実行し、
前記記録部は、
前記他の変換前のコードと１対１対応する命令コードを記録する、
ことを特徴とする付記３に記載のデータ処理装置。
【０１１８】
（付記７）前記他の変換前のコードと１対１対応する命令コードと前記他の変換前のコードを特定する情報との組合せを記憶する記憶部を備え、
前記記録部は、
前記記憶部を参照して、前記他の変換前のコードを特定する情報を記録する、
ことを特徴とする付記６に記載のデータ処理装置。
【０１１９】
（付記８）前記記録部は、
前記命令コードと、前記他の変換前のコードと１対１対応する命令コードと、の実行順に、前記変換前のコードを特定する情報と、前記他の変換前のコードを特定する情報と、を記録する、
ことを特徴とする付記７に記載のデータ処理装置。
【０１２０】
（付記９）前記記録部は、
前記他の変換前のコードと１対１対応する命令コードの実行回数を前記他の変換前のコードを特定する情報と対応づけて記録する、
ことを特徴とする付記７に記載のデータ処理装置。
【０１２１】
（付記１０）命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部と、
前記変換前のコードが検出された場合、前記記憶部を参照して、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とに変換する変換部と、
前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを、自装置から他装置に送信する送信部と、
を備えることを特徴とする変換装置。
【０１２２】
（付記１１）第１の装置と、特定の処理を実行する第２の装置と、を含むデータ処理システムであって、
前記第２の装置が実行可能な命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部と、
前記変換前のコードが検出された場合、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報と、に変換する変換部と、
前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを、前記第１の装置から前記第２の装置に送信する送信部と、
前記第２の装置によって、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを受け付ける受付部と、
前記第２の装置によって、前記命令コードの実行により、前記変換前のコードを特定する情報を記録する記録部と、
を備えることを特徴とするデータ処理システム。
【０１２３】
（付記１２）命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部にアクセス可能なコンピュータが、
前記変換前のコードが検出された場合、前記記憶部を参照して、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とに変換し、
前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とを、他装置へ送信する、
処理を実行することを特徴とする変換方法。
【０１２４】
（付記１３）命令コードと前記命令コードの変換前のコードとの組合せを記憶する記憶部にアクセス可能なコンピュータに、
前記変換前のコードが検出された場合、前記組合せを参照して、前記変換前のコードを、前記命令コードと前記命令コードに関連付けられた前記変換前のコードを特定する情報とに変換する、
処理を実行させることを特徴とする変換プログラム。
【符号の説明】
【０１２５】
１００  データ処理システム
１０１  ＣＰＵ
１０２  アクセラレータ
３０１  ＪＩＴコンパイラ
３０２  デバイスドライバ
３１１、１１０１  受付部
３１２、１１０２、１４０２  判断部
３１３、１１０３、１４０３  実行部
３１４、１１０４、１４０４  記録部
３１５  出力部
３２１  記憶部
３２２  検出部
３２３、１１１１、１４１１  変換部
３２４、１１１２、１４１２  送信部
３２５  取得部
３３１  テンプレート情報
１４０１  記憶部
【図１】
0005794133.tif 000002
【図２】
0005794133.tif 000003
【図３】
0005794133.tif 000004
【図４】
0005794133.tif 000005
【図５】
0005794133.tif 000006
【図６】
0005794133.tif 000007
【図７】
0005794133.tif 000008
【図８】
0005794133.tif 000009
【図９】
0005794133.tif 000010
【図１０】
0005794133.tif 000011
【図１１】
0005794133.tif 000012
【図１２】
0005794133.tif 000013
【図１３】
0005794133.tif 000014
【図１４】
0005794133.tif 000015
【図１５】
0005794133.tif 000016
【図１６】
0005794133.tif 000017
【図１７】
0005794133.tif 000018