JP6358323B2 - 情報処理装置、情報処理方法、およびプログラム - Google Patents

情報処理装置、情報処理方法、およびプログラム Download PDF

Info

Publication number
JP6358323B2
JP6358323B2 JP2016255187A JP2016255187A JP6358323B2 JP 6358323 B2 JP6358323 B2 JP 6358323B2 JP 2016255187 A JP2016255187 A JP 2016255187A JP 2016255187 A JP2016255187 A JP 2016255187A JP 6358323 B2 JP6358323 B2 JP 6358323B2
Authority
JP
Japan
Prior art keywords
instruction
compiled
unit
address
identifier
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016255187A
Other languages
English (en)
Other versions
JP2018106590A (ja
Inventor
祐樹 丹野
祐樹 丹野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2016255187A priority Critical patent/JP6358323B2/ja
Priority to US15/838,477 priority patent/US20180181399A1/en
Publication of JP2018106590A publication Critical patent/JP2018106590A/ja
Application granted granted Critical
Publication of JP6358323B2 publication Critical patent/JP6358323B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本開示は、情報処理装置による、命令を実行する処理に関する。
コンピュータシステムにおいて、プロセッサが処理する命令(「コード」とも称す)は、定義された命令セットアーキテクチャ(Instruction Set Architecture,ISA)に基づく。たとえばコンピュータがエミュレーションを行う場合において、実行対象となるプログラムが、命令を処理するプロセッサのISAとは異なるISAに基づく命令で構成される場合、それらのISA間に互換性が無ければ、プログラムは正しく実行されない。したがって、プロセッサが、そのプロセッサのISAとは異なるISAに基づくプログラムを実行する場合は、そのプログラムの命令を、そのプロセッサのISAに基づく命令(「ネイティブコード」とも称す)に変換する必要がある。
実行されようとしている命令をネイティブコードに置き換えて命令を実行する方法には、主に2つの種類がある。1つは、命令を1つずつネイティブコードに置き換え、逐次実行する、インタプリタ方式である。もう1つは、複数の命令をまとめてネイティブコード群にコンパイルし、コンパイルの結果生成したネイティブコードを実行する、コンパイル方式である。
コンパイル方式では、命令の前後関係を考慮して、ネイティブコードの最適化ができるため、インタプリタ方式よりも、命令の実行に関するスループットは高い。但し、多くの命令をまとめてコンパイルすると、コンパイルが終了するまでに時間がかかる。コンパイル処理中はネイティブコードの実行が中断されるので、コンパイル処理にかかる時間が長いと、スループットは低下する。
特許文献1および2は、コンパイル処理とインタプリタ処理を併用する技術を開示している。
特許文献1に開示される技術では、命令実行処理部は、あるメソッドを実行する際、そのメソッドがコンパイル済みである場合は、コンパイルされた結果であるネイティブコードを実行する。そのメソッドがコンパイル済みでなかった場合は、命令実行処理部は、そのメソッドのバイトコード列を、命令単位で逐次取り出し、逐次解釈して実行する。その時、命令実行処理部は、コンパイル要求管理部に対し、当該メソッドのコンパイル要求を送信する。コンパイル処理部は、コンパイル要求管理部が受信したコンパイル要求に係る、メソッドのバイトコード列をネイティブコードにコンパイルし、コンパイルによって生成したネイティブコードをネイティブコード記憶部に記憶させる。
特許文献2にも、上記の特徴と同様の特徴を有する2つのCPU(Central Processing Unit)を有する情報処理装置が開示されている。
特許第4713820号公報 特開2013−61810号公報
特許文献1に開示される技術では、命令実行処理部は、コンパイル済みでないメソッドを実行する度に、コンパイル要求管理部に対しコンパイル要求を送信する必要がある。コンパイル要求を送信するための処理が行われる分、命令実行処理部による、命令の実行に関するスループットは低下する可能性がある。
特許文献2に開示される技術においても、命令を実行するCPUは、コンパイルを実行するCPUに対して、コンパイルの実行を指示する。そのため、特許文献1に開示される技術と同じく、スループットが低下する可能性があるという問題がある。
本発明は、ネイティブコードのISAと異なるISAに基づく命令を処理する際のスループットをより良くする情報処理装置を提供することを目的の1つとする。
本発明の一態様に係る情報処理装置は、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出手段と、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、を備える。前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する。
本発明の一態様に係る情報処理方法は、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出し、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込む。前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する。
本発明の一態様に係るプログラムは、コンピュータに、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出処理と、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、を実行させる。
本発明によれば、ネイティブコードのISAと異なるISAに基づく命令を処理する際のスループットが向上する。
本発明の第1の実施形態に係る情報処理装置の構成を示すブロック図である。 第1の実施形態に係る命令実行プロセッサの処理の流れの例を示すフローチャートである。 第1の実施形態に係るコンパイルプロセッサの処理の流れの例を示すフローチャートである。 第1の実施形態に係るコンパイルプロセッサの処理の流れの別の例を示すフローチャートである。 本発明の第2の実施形態に係る情報処理装置の構成を示すブロック図である。 本発明の第3の実施形態に係る情報処理装置の構成を示すブロック図である。 第3の実施形態に係る情報処理装置の構成の別の例を示すブロック図である。 本発明の一実施形態に係る情報処理装置の構成を示すブロック図である。 本発明の一実施形態に係る情報処理装置の処理の流れの例を示すフローチャートである。 本発明の各実施形態の各部を構成しうるコンピュータの例を示すブロック図である。
以下、図面を参照しながら、本発明の実施形態を詳細に説明する。
<<第1の実施形態>>
まず、本発明の第1の実施形態について説明する。
第1の実施形態では、命令を実行する命令実行プロセッサと、コンパイルを行うコンパイルプロセッサとを備える情報処理装置1を例として挙げる。しかし、情報処理装置1と同等の機能を実現する構成は、説明例に限られない。たとえば、命令実行プロセッサとコンパイルプロセッサとの両方の機能が、1つのマルチコアプロセッサによって実現されてもよい。
<構成>
図1は、第1の実施形態に係る情報処理装置1の構成を示すブロック図である。
情報処理装置1は、コンパイルプロセッサ10と、命令実行プロセッサ11と、記憶部12と、を備える。コンパイルプロセッサ10、命令実行プロセッサ11、および記憶部12は、内部バス5に接続されている。
===記憶部12===
記憶部12は、命令に関するデータを記憶する。記憶部12の一部または全部は、たとえば記憶回路の集まりである。記憶部12の一部または全部は、たとえば情報処理装置1の主記憶装置(メモリ)の一部でもよい。記憶部12は、命令記憶部120と、コンパイル済み情報記憶部121と、コンパイル済み命令記憶部122とを含む。記憶部12に含まれるそれぞれの構成は、同じコンポーネントによって構成されていてもよいし、別々のコンポーネントによって構成されてもよい。記憶部12の一部または全部は、命令実行プロセッサ11に含まれていてもよいし、コンパイルプロセッサ10に含まれていてもよい。
命令記憶部120は、実行対象となる一連の命令を記憶する。本実施形態では、命令記憶部120に記憶された、実行対象となる命令を、「ターゲットコード」とも称す。ターゲットコードは、たとえば中間コードやマシンコード(機械語の命令)である。ターゲットコードは、ソースコードで記述されたプログラムが変換されることにより生成したコードであってもよい。ターゲットコードは、命令実行プロセッサ11のISAとは異なるISAに基づく命令である。
なお、本実施形態では、一連のターゲットコードのことを、プログラムとも称す。
ターゲットコードはそれぞれ、命令記憶部120の、アドレス(たとえば、メモリアドレス)が割り当てられた記憶領域に、記憶領域ごとに格納されている。すなわち、アドレスを指定することによって、命令記憶部120に記憶されているターゲットコードは一意に特定される。以下、ターゲットコードが格納されている記憶領域のアドレスを、単に「ターゲットコードのアドレス」とも称す。
コンパイル済み情報記憶部121は、コンパイル済み情報を記憶する。コンパイル済み情報は、ターゲットコードのそれぞれについてコンパイル済みであるか否かを示す情報である。コンパイル済みであるか否かを示す情報は、たとえば、「コンパイル済みである」ことを示す値と「コンパイル済みでない」ことを示す値をとりうる、コンパイル済みフラグによって表されうる。すなわち、コンパイル済み情報記憶部121には、たとえば、ターゲットコードを識別する識別子(例として、アドレス)と、コンパイル済みフラグとが、関連付けられて記憶される。
コンパイル済み情報記憶部121は、アドレスを受信すると、受信したアドレスのコンパイル済み情報を出力する。たとえば、受信したアドレスにより特定されるコンパイル済みフラグの値が「コンパイル済みである」ことを示す値であれば、コンパイル済み情報記憶部121は、受信したアドレスにより特定される命令がコンパイル済みであることを示す情報を出力する。
なお、コンパイル済み情報記憶部121は、コンパイル済みの命令のアドレスのみを記憶するよう構成されていてもよい。コンパイル済みの命令のアドレスのみがコンパイル済み情報記憶部121に記憶されるのであれば、受信したアドレスがコンパイル済み情報記憶部121に記憶されていることが、すなわちその命令がコンパイル済みであることを意味する。この場合も、コンパイル済み情報記憶部121はコンパイル済み情報を記憶している、といえる。この場合、コンパイル済み情報記憶部121は、アドレスを受信すると、受信したアドレスを受信したアドレスがコンパイル済み情報記憶部121に記憶されているか否かをチェックする。受信したアドレスが記憶されている場合、コンパイル済み情報記憶部121は、受信したアドレスにより特定される命令がコンパイル済みであることを示す情報を出力する。受信したアドレスが記憶されていない場合、コンパイル済み情報記憶部121は、受信したアドレスにより特定される命令がコンパイル済みでないことを示す情報を出力する。
コンパイル済み命令記憶部122は、コンパイル済みの命令を記憶する。本実施形態におけるコンパイル済みの命令とは、命令記憶部120に含まれる命令が、後述のコンパイル部102によってコンパイルされることにより生成するネイティブコードである。コンパイル済み命令記憶部122が記憶する命令のそれぞれには、識別子が関連付けられる。識別子は、たとえば、その命令のコンパイル前の命令が格納されている記憶領域のアドレスである。
===命令実行プロセッサ11===
命令実行プロセッサ11は、ターゲットコードを実行するための処理を行う。
図1に示される通り、命令実行プロセッサ11は、判定部110と、取得部111と、解釈部112と、実行部113とを有する。
判定部110は、実行されるべき命令がコンパイル済みであるか否かを判定する。具体的には、たとえば、判定部110は、実行されるべき命令のアドレスを記憶部12のコンパイル済み情報記憶部121に送る。コンパイル済み情報記憶部121は、送られてきたアドレスにより特定される命令のコンパイル済み情報を判定部110に送る。これにより、判定部110は、読み出された命令がコンパイル済みであるか否かを判定する。
なお、実行されるべき命令とは、プログラムのフローに従って実行部113が次に処理することになっているターゲットコードである。
取得部111は、実行されるべき命令がコンパイル済みであると判定された場合、その命令のコンパイル後の命令(ネイティブコード)をコンパイル済み命令記憶部122から取得する。また、取得部111は、実行されるべき命令がコンパイル済みでないと判定された場合、その命令(ターゲットコード)を、命令記憶部120から読み出す。この場合、取得部111は、たとえば、内部バス5を通じて命令記憶部120に対してその命令のアドレスを指定することによって、その命令を読み出す。
解釈部112は、コンパイル済みでないと判定されて命令記憶部120から読み出された命令を、逐次解釈する。命令を解釈するとは、命令をネイティブコードに変換することである。
実行部113は、ネイティブコードを実行する。すなわち、実行部113は、取得部111および解釈部112からネイティブコードを受け取り、そのネイティブコードに従った処理を実行する。
===コンパイルプロセッサ10===
コンパイルプロセッサ10は、ターゲットコードをコンパイルする。図1に示される通り、コンパイルプロセッサ10は、検出部100と、アドレス記憶部101と、コンパイル部102と、を有する。
検出部100は、命令実行プロセッサ11による記憶部12へのアクセスを検出する。そして、検出部100は、そのアクセスに基づき、命令実行プロセッサ11が処理している(または処理した)命令のアドレスを検出する。たとえば、検出部100は、内部バス5を監視する。そして、検出部100は、たとえば、取得部111が命令記憶部120から命令を読み出す際に命令記憶部120に送るアドレスを、そのアドレスの情報が流れる内部バス5から捕捉する。あるいは、たとえば、検出部100は、判定部110がコンパイル済み情報記憶部121に対して送るアドレスを、内部バス5から捕捉する。
アドレス記憶部101は、検出された命令のアドレスを記憶する。
コンパイル部102は、記憶されたアドレスに基づき、コンパイル済みでない命令(以下、「未コンパイルの命令」とも称す)をコンパイルする。本実施形態において、「コンパイル」とは、ターゲットコードをネイティブコードに変換することである。コンパイル部102によるコンパイルは、解釈部112による処理と同様にターゲットコード1つずつの変換でもよい。コンパイル部102は、複数のターゲットコードをまとめてネイティブコード群に変換してもよい。複数のターゲットコードをまとめて変換する場合については、[変形例3]の項目において説明する。
コンパイル部102は、コンパイルによって生成したネイティブコードを、コンパイル前の命令のアドレスを関連付ける形式で、コンパイル済み命令記憶部122に記憶させる。
<動作>
(命令実行プロセッサ11の動作)
図2は、命令実行プロセッサ11の動作の流れを示すフローチャートである。
まず、判定部110が、初めに実行されるべき命令のアドレスを特定する(ステップS21)。プログラムの実行開始時であれば、初めに実行されるべき命令のアドレスは、プログラムの1行目のアドレスである。
次に、判定部110は、特定された、実行されるべき命令がコンパイル済みであるか否かを判定する(ステップS22)。たとえば、判定部110は、実行されるべき命令のアドレスをコンパイル済み情報記憶部121に送り、送った結果としてその命令に関連付けられたコンパイル済み情報を取得する。コンパイル済み情報が、コンパイル済みであることを示していれば、判定部110は、その命令がコンパイル済みであると判定する。コンパイル済み情報が、コンパイル済みでないことを示していれば、判定部110は、その命令がコンパイル済みでないと判定する。
実行されるべき命令がコンパイル済みでない場合(ステップS22においてNO)、取得部111が、実行されるべき命令のアドレスに基づき、命令記憶部120から実行されるべき命令を読み出す(ステップS23)。そして、解釈部112が、読み出された命令を解釈する(ステップS24)。解釈部112は、解釈によって生成したネイティブコードを、実行部113に送る。これにより、次にステップS26の処理が行われる。
実行されるべき命令がコンパイル済みである命令である場合(ステップS22においてYES)、取得部111は、実行されるべき命令のアドレスに基づき、コンパイル済み命令記憶部122から、実行されるべき命令のコンパイル後の命令を取得する(ステップS25)。取得部111は、取得された命令を実行部113に送る。これにより、次にステップS26の処理が行われる。
ステップS26においては、実行部113が、取得部111または解釈部112から受け取った命令を実行する。
命令の実行後、プログラムの実行処理を終了させる場合は(ステップS27においてYES)、処理は終了する。プログラムの実行処理を続行する場合は(ステップS27においてNO)、判定部110が次に実行されるべき命令のアドレスを特定する(ステップS28)。たとえば、最後に実行した命令がジャンプ命令であれば、実行されるべき命令のアドレスは、そのジャンプ命令のジャンプ先のアドレスである。最後に実行した命令がジャンプ命令でなければ、実行されるべき命令のアドレスは、直前に実行した命令のアドレスの次のアドレスである。
特定されたアドレスについて、判定部110は再びステップS22の判定を行う。以下同様に、命令実行プロセッサ11は、実行されるべき命令のアドレスについて、ステップS23からステップS26の処理を、判定に基づいて行う。
(コンパイルプロセッサ10の動作)
図3は、コンパイルプロセッサ10の処理の流れを示すフローチャートである。
コンパイルプロセッサ10は、たとえば、命令実行プロセッサ11が、命令記憶部120に含まれるターゲットコードの実行を開始してから、動作を終了するまで、図3のフローチャートに示される流れの処理を繰り返し行う。
まず、検出部100は、内部バス5を流れるデータから、命令実行プロセッサ11が処理しようとしている命令のアドレスを取得する(ステップS31)。たとえば、検出部100は、内部バス5に流れている、命令実行プロセッサ11が行う処理内容を監視する。そして、検出部100は、その処理内容から、命令記憶部120に含まれる命令のアドレスを検出する。
検出部100が監視する処理内容とは、具体的には、たとえば、図2に示されるフローチャートのステップS22の処理(コンパイル済み情報の取得)や、ステップS23の処理(命令記憶部120からの命令の読み出し)において送受信されるデータである。検出部100は、いわば、命令実行プロセッサ11が送受信するデータに含まれるアドレスを捕捉(capture)する。
そして、検出部100は、検出したアドレスを、アドレス記憶部101に記憶させる。アドレス記憶部101は、検出部100が検出したアドレスを記憶する(ステップS32)。ただし、アドレス記憶部101は、既に記憶されているアドレスと同一のアドレスが検出された場合に、そのアドレスを新たに記憶しなくてもよい。
ステップS33では、コンパイル部102が、検出されたアドレスの数が所定の数になったか否かを判定する。この判定のため、コンパイル部102は、たとえば、アドレスが検出される度に、カウントを1増やす処理を行ってもよい。そして、コンパイル部102は、アドレスが検出される度に、カウントが所定値になったか否かを判定してもよい。なお、カウントを増やす契機は、検出部100がアドレスを検出する時でもよいし、アドレス記憶部101がアドレスを記憶する時でもよい。アドレス記憶部101がアドレスを記憶する時に、アドレス記憶部101がコンパイル部102に対して、記憶されるアドレスを送信してもよい。あるいは、コンパイル部102は、アドレス記憶部101が記憶するアドレスを、割り込み等を用いて監視することで、アドレス記憶部101に記憶されたアドレスの数を把握してもよい。なお、コンパイル部102は、相異なるアドレスの数をカウントしてもよい。すなわち、カウントの値が0から現在の値になるまでの間に検出されたアドレスに一致するアドレスが検出されても、コンパイル部102は、カウントを増やさなくてもよい。
なお、このステップS33の判定処理は、コンパイル部102以外の構成(たとえば、アドレス記憶部101や、図示されない他のコンポーネント)により行われてもよい。
検出されたアドレスの数が所定の数になっていない場合(ステップS33においてNO)、コンパイル部102は引き続きアドレスがさらに検出されるのを待つ。検出されたアドレスの数が所定の数になった場合(ステップS33においてYES)、ステップS34の処理が行われる。なお、ステップS34の処理が行われた場合には、カウントはリセットされてよい。
なお、ステップS33における「所定の数」は、コンパイルプロセッサ10の設計時に設定されてもよいし、外部からの指示等により設定および変更がされ得る数値でもよい。所定の数は、1以上の任意の数に設定され得る。また、ステップS33における「所定の数になったか」という判定は、「(カウントが)所定値を超えたか」という判定でもよい。このような場合は、所定値は0以上の数である。
ステップS34において、コンパイル部102は、検出されたアドレスに、未コンパイルの命令のアドレスが含まれているかを判定する。この説明における「検出されたアドレス」とは、たとえば、カウントが0であった時から所定値に達するまでに検出されたアドレスを指す。たとえば、コンパイル部102は、検出されたアドレスにより特定される命令のそれぞれが、コンパイル済みであるか否かをチェックする。
チェックする方法として、コンパイル部102は、たとえば、検出されたアドレスをコンパイル済み情報記憶部121に送信し、送信した結果として、各々のアドレスのコンパイル済み情報を取得してもよい。あるいは、コンパイルプロセッサ10は、内部レジスタ等に、コンパイル済み情報を別途保持していてもよい。そうすれば、コンパイル部102は、そのコンパイル済み情報を参照することで、各々のアドレスのコンパイル済み情報を取得できる。
検出されたアドレスの中に未コンパイルの命令のアドレスが含まれていない場合(ステップS34においてNO)、処理は終了する。この場合、カウントを0とし、アドレス記憶部101に記憶されるアドレスをクリアした上で、再びステップS31の処理が開始されてもよい。アドレス記憶部101に記憶されるアドレスはクリアされなくてもよい。その場合は、アドレス記憶部101は、カウントの値が0になる前に記憶されるアドレスと、後に記憶されるアドレスとが、区別できるような形態で記憶する。
検出されたアドレスの中に未コンパイルの命令のアドレスが含まれている場合(ステップS34においてYES)、コンパイル部102は、その未コンパイルの命令をコンパイルする(ステップS35)。コンパイル部102は、たとえば、未コンパイルの命令を、その命令のアドレスを基に、命令記憶部120から読み出す。そして、コンパイル部102は、読み出した命令をネイティブコードにコンパイルする。
コンパイル部102は、未コンパイルの命令のみをコンパイルしてもよいし、未コンパイルの命令と、コンパイル済みの命令とをまとめてコンパイルしてもよい。
コンパイルが完了したら、コンパイル部102は、コンパイルの結果として生成したネイティブコードを、コンパイル済み命令記憶部122に書き込む(ステップS36)。この時、コンパイル部102は、それぞれのネイティブコードが、コンパイル前の命令のアドレスから特定可能であるように、アドレスとネイティブコードとを関連付ける形式で、ネイティブコードを書き込む。これにより、取得部111が、ステップS25の処理において、アドレスを用いてコンパイル済みのネイティブコードを読み出すことができる。
コンパイル部102は、さらに、コンパイル済み情報記憶部121に記憶されている、コンパイル済み情報を更新する(ステップS37)。具体的には、例えば、コンパイル部102は、コンパイルが完了した命令に関連付けられるコンパイル済み情報を、コンパイル済であることを示す値に書き換える。コンパイル済み情報記憶部121がコンパイル済みの命令のアドレスのみを記憶する構成である場合は、コンパイル部102は、コンパイルが完了した命令のアドレスをコンパイル済み情報記憶部121に書き込むだけでよい。
(コンパイルプロセッサ10の動作の別の例)
図4は、コンパイルプロセッサ10の動作の流れの別の例を示すフローチャートである。コンパイルプロセッサ10は、たとえば、命令実行プロセッサ11が、命令記憶部120に含まれるターゲットコードの実行を開始してから、動作を終了するまで、図4のフローチャートに示される流れの処理を繰り返し行う。
図4に示すフローチャートでは、ステップS41において、検出部100は、バスを流れるデータから未コンパイルの命令のアドレスを検出する。
検出部100は、例えば、命令実行プロセッサ11が図2に示されるフローチャートのステップS23の処理(内部バス経由での命令の読み出し)を捕捉する。そして、命令実行プロセッサ11が指定するアドレスを検出する。命令実行プロセッサ11が指定するアドレスは、未コンパイルの命令のアドレスである。
あるいは、検出部100は、例えば、命令実行プロセッサ11による図2に示されるフローチャートのステップS22の処理における、内部バス5経由でのコンパイル済み情報の読み出し処理を捕捉してもよい。そして、検出部100は、命令実行プロセッサ11がコンパイル済み情報を読み出すために送信しているアドレスを検出してもよい。ただし、このアドレスは、未コンパイルの命令のアドレスとは限らない。検出部100は、コンパイル済み情報記憶部121から提供されるコンパイル済み情報をさらに検出してもよい。コンパイル済み情報がコンパイル済みを示していれば、検出部100は、検出したアドレスがコンパイル済みの命令のアドレスであると特定してもよい。あるいは、検出部100は、検出したアドレスが既に検出したことのあるアドレスであるかを調べてもよい。検出したアドレスを、たとえばアドレス記憶部101にすべて記憶させておけば、検出部100は、検出したアドレスが既に検出したことのあるアドレスであるかを特定することができる。
以上のようにして、検出部100は、未コンパイルの命令のアドレスを検出する。検出部100は、検出した未コンパイルの命令のアドレスを、アドレス記憶部101に記憶させる。
アドレス記憶部101は、検出された、未コンパイルの命令のアドレスを記憶する(ステップS42)。ただし、アドレス記憶部101は、既に記憶されているアドレスと同一のアドレスが検出された場合に、そのアドレスを新たに記憶しなくてもよい。
コンパイル部102は、検出されたアドレスの数が所定値を超えたか否かを判定する(ステップS43)。この判定処理はアドレス記憶部101以外の構成により行われてもよい。検出されたアドレスの数が所定値を超えていない場合(ステップS43においてNO)、コンパイル部102は引き続き未コンパイルの命令のアドレスが新たに検出されるのを待つ。検出されたアドレスの数が所定値を超えた場合(ステップS43においてYES)、ステップS44の処理が行われる。
ステップS44において、コンパイル部102は、検出されアドレス記憶部101に記憶されたアドレスに基づき、当該アドレスの命令をコンパイルする。具体的には、コンパイル部102は、アドレス記憶部101に記憶されているアドレスを用いて、命令記憶部120から当該命令を読み出す。そして、コンパイル部102は、読み出された命令をコンパイルし、その結果としてネイティブコードを生成する。
コンパイル部102は、コンパイルにより生成されたネイティブコードを、コンパイル済み命令記憶部122に書き込む(ステップS45)。また、コンパイル部102は、コンパイルした命令のコンパイル済み情報を更新する(ステップS46)。ステップS45およびステップS46の処理は、それぞれ、ステップS36およびステップS37の処理と同様でよい。
ステップS45およびステップS46の処理が完了したら、一連の処理は終了する。プログラムがまだ実行中であれば、再びステップS41の処理が開始されてよい。
<効果>
第1の実施形態に係る情報処理装置1は、命令を実行する効率を改善できるという効果がある。
情報処理装置1の命令実行プロセッサ11は、実行対象の命令がコンパイル済みであればネイティブコードを取得して実行し、未コンパイルであれば解釈しながら実行する。この時、命令実行プロセッサ11は、未コンパイルの命令をコンパイルする要求をコンパイルプロセッサ10に対して行う必要がない。その理由は、コンパイルプロセッサ10は、命令実行プロセッサ11の処理内容を監視することで、処理内容に含まれるアドレスを検出するからである。
このように、命令実行プロセッサ11がコンパイル要求を行う処理が不要であるため、命令実行プロセッサ11による命令の実行に関するスループットは、特許文献1や2よりも良いことが期待される。
なお、コンパイル部102は、ステップS33の処理によれば、アドレスが所定の数検出される毎に、検出されたアドレスの命令であってコンパイル済みでない命令をコンパイルする。「所定の数」が2以上である場合、所定の数が1である場合(すなわち、アドレスが検出される度にコンパイルを行う場合)に比べて、コンパイル部102がコンパイルに関する処理を行う頻度は低減される。たとえば、ステップS34の処理の回数は低減される。また、コンパイル部102は、ステップS35からステップS37の処理を、複数の命令についてまとめて行うことができるため、逐一行うよりも効率よく処理を行うことができる。
[変形例1]
上記実施形態では、命令、コンパイル後のネイティブコード、およびコンパイル済み情報には、アドレスが関連付けられるとして説明されている。しかし、命令に関する情報を識別および特定するのにあたっては、その情報を一意に識別する識別子であれば、必ずしもアドレスが用いられなくともよい。たとえば、コンパイル後のネイティブコード、およびコンパイル済み情報には、アドレスとは異なる番号が関連付けられてもよい。この場合、判定部110によるステップS22、S25の処理や、コンパイルプロセッサ10による各処理においては、アドレスの代わりにその番号が用いられてもよい。
[変形例2]
検出部100は、命令を検出してもよい。たとえば、検出部100は、アドレスを検出した場合に、命令記憶部120にアクセスし、検出されたアドレスの命令を取得してもよい。あるいは、たとえば、検出部100は、取得部111が命令記憶部120からターゲットコードを読み出すためのバスから、読み出された命令を検出してもよい。
そして、検出部100は、検出した命令をコンパイル部102に送ってもよい。
コンパイル部102は、検出された命令を保持していてもよい。コンパイル部102が命令を保持しておけば、コンパイル部102はステップS35の処理において、命令を命令記憶部120から読み出す必要はなく、コンパイルの実行における処理が速くなるという効果がある。
[変形例3]
コンパイル部102は、複数のターゲットコードをまとめてネイティブコード群に変換してもよい。すなわち、コンパイル部102は、複数のターゲットコードを、逐次解釈される場合よりも効率的に処理されるようなネイティブコード群に変換してもよい。
このような場合、コンパイル部102は、生成するネイティブコード群を、コンパイル前の複数のターゲットコードのアドレスの群を関連付ける形式で、コンパイル済み命令記憶部122に記憶させてもよい。たとえば、コンパイル部102は、アドレスが「00000100」から「00001000」までの命令をまとめてコンパイルした場合、生成したネイティブコード群に対して、「00000100から00001000」という情報を関連付ける形式で、生成したネイティブコード群を記憶させる。また、コンパイル部102は、コンパイル済み情報記憶部121に、アドレス「00000100」から「00001000」の命令群がコンパイル済みであることを示す情報を記憶させる。
この場合に、判定部110が、実行されるべき命令のアドレスとして「00000100」のコンパイル済み情報を問い合わせた場合、コンパイル済み情報記憶部121は、アドレス「00000100」から「00001000」の命令群がコンパイル済みであることを示す情報を判定部110に返す。その場合、取得部111は、コンパイル済み命令記憶部122から、「00000100から00001000」という情報が関連付けられたネイティブコード群を取得する。このネイティブコード群が示す処理を行ったあとは、次に実行されるべき命令のアドレスは、「00001000」の次のアドレス(「00001001」)である。
別の態様として、コンパイル部102は、複数のターゲットコードをまとめてコンパイルする場合、生成したターゲットコード群が実行された場合に次に実行されるべき命令のアドレスにジャンプするジャンプ命令を生成して付加してもよい。この場合、コンパイル済み命令記憶部120において、ネイティブコード群は、コンパイル前のターゲットコード群の最初のアドレスだけが関連付けられてもよい。たとえば、アドレスが「00000100」から「00001000」までの命令がまとめてコンパイルされた場合、コンパイル部102は、コンパイル後のネイティブコード群の末尾に、アドレス「00001001」にジャンプする命令を付加する。すると、アドレス「00000100」に基づいて読み出されるネイティブコード群を命令処理部31が実行した後、実行されるべき命令のアドレスは「00001001」と特定される。
以上の処理において、プログラムが正しく実行されるよう、コンパイル部102は、コンパイル時に、分岐がない(すなわち、実行される命令の内容および順番が処理内容に依存しない)ターゲットコードのまとまりを、コンパイルする。
このような変形例によれば、より効率的な実行手順を示すネイティブコードがコンパイル部102によって生成され、命令を実行する効率がさらに向上する。
<<第2の実施形態>>
本発明の第2の実施形態について説明する。
図5は、第2の実施形態に係る情報処理装置2の構成を示すブロック図である。情報処理装置2は、切替部123を備えるよう構成される。命令実行プロセッサ11は、判定部110を有さなくてもよい。
取得部111は、実行されるべき命令のアドレスを、切替部123に送る。
切替部123は、取得部111から送られたアドレスに応じて、命令実行プロセッサ11の取得部111が命令を読み出す経路を切り替える。具体的には、切替部123は、受け取ったアドレスがコンパイル済みの命令のアドレスであれば、経路を、取得部111がコンパイル済み命令記憶部122から命令を読み出す経路に設定する。切替部123は、受け取ったアドレスがコンパイル済みでない命令のアドレスであれば、経路を、取得部111が命令記憶部120から命令を読み出す経路に設定する。切替部123は、いわば、受信したアドレスにより特定される命令がコンパイル済みであるか否かに応じて、異なる経路を設定する。
切替部123は、上記の機能を実現するため、アドレス毎に特定される命令がコンパイル済みであるか否かを示すコンパイル済み情報を有する。したがって、切替部123は、第1の実施形態のコンパイル済み情報記憶部121の変形例といえる。
切替部123の機能により、取得部111は、実行すべき命令がコンパイル済みであった場合はコンパイル済み命令記憶部122から命令を取得し、コンパイル済みでない場合は命令記憶部120から命令を読み出すことができる。
本実施形態の説明において特に言及されていない構成要素の機能は、第1の実施形態における同一の符号が付された構成要素の機能と同等である。
なお、検出部100は、たとえば、取得部111と切替部123とをつなぐバスから、取得部111が出力するアドレスを検出する。検出部100は、たとえば、取得部111が命令記憶部120またはコンパイル済み命令記憶部122から命令を読み出す際に出力する処理内容から、アドレスを検出する。
以上のような構成により、情報処理装置2は、情報処理装置1と同様、スループットの良い命令実行を行うことができる。また、第1の実施形態に比べ、コンパイル済み情報を命令実行プロセッサ11が受信する処理が不要であるため、命令実行プロセッサ11の処理の効率が向上するという効果がある。
なお、第1の実施形態で説明された変形例や変更可能な事項は、第2の実施形態においても適用されてよい。
<<第3の実施形態>>
本発明の第3の実施形態について説明する。
図6は、本発明の第3の実施形態に係る情報処理装置3の構成を示すブロック図である。情報処理装置3は、コンパイル処理部30と、命令処理部31と、記憶部32とを備える。
情報処理装置3の各部は、情報処理装置1の各部と異なり、各部が同一のバスで接続されている必要はない。
記憶部32は、命令記憶部320、コンパイル済み情報記憶部321、およびコンパイル済み命令記憶部322を有する。
命令記憶部320は、実行の対象であるターゲットコードを記憶する。第3の実施形態における命令記憶部320は、第1の実施形態における命令記憶部120と同様でよい。
コンパイル済み情報記憶部321は、コンパイル済み情報を記憶する。
コンパイル済み命令記憶部322は、ターゲットコードがコンパイルされた結果であるネイティブコードを記憶する。
命令処理部31は、判定部310、取得部311、解釈部312、および実行部313を備える。命令処理部31の各部の機能は、ソフトウェアを実行するプロセッサによって実現されてもよい。命令処理部31の一部または全部が、回路によって実現されていてもよい。
判定部310は、実行されるべき命令がコンパイル済みの命令であるか否かを判定する。判定部310は、判定のため、コンパイル済み情報記憶部321のコンパイル済み情報を参照する。
取得部311は、判定部310の判定に基づいて、命令記憶部320またはコンパイル済み命令記憶部322から命令を取得する。具体的には、取得部311は、実行されるべき命令がコンパイル済みである場合は、コンパイル済み命令記憶部322からその命令のネイティブコードを取得する。実行されるべき命令がコンパイル済みでない場合は、取得部311は、命令記憶部320からその命令を取得する。
解釈部312は、取得部311により命令記憶部320から取得された命令を解釈する。解釈部312の機能は第1の実施形態の解釈部112の機能と同様でよい。
実行部313は、取得部311および解釈部312からネイティブコードを受け取り、そのネイティブコードが示す処理を実行する。実行部313は、プロセッサでもよいし、プロセッサにネイティブコードの実行を指示するシステムでもよい。
コンパイル処理部30は、検出部300、命令情報記憶部301、およびコンパイル実行部302を有する。
検出部300は、命令処理部31が扱った命令に関する情報(以下、命令情報とも称す)を検出する。命令に関する情報は、たとえば命令が格納されているアドレスである。検出部300による命令情報を検出する方法としては、たとえば、コンパイル済み情報記憶部321から、コンパイル済み情報が参照された命令の情報を取得する方法がある。たとえば、コンパイル済み情報記憶部321が、命令処理部31の判定部310からコンパイル済み情報の参照を受ける際に、参照される命令の命令情報をデータとして記憶する。そうすれば、検出部300は、コンパイル済み情報記憶部321が記憶したそのデータを参照することにより、コンパイル済み情報が参照された命令、すなわち命令処理部31が扱った命令を特定することができる。あるいは、たとえば、コンパイル済み情報記憶部321が、判定部310によるコンパイル済み情報の参照があった場合に、参照される命令の命令情報を検出部300に送ってもよい。
別の方法として、検出部300は、取得部311が命令記憶部320から取得した命令の情報を、命令記憶部320から取得してもよい。取得された命令の情報を命令記憶部320が記憶し、その記憶された情報を検出部300が読み出してもよい。あるいは、命令記憶部320が、命令が読み出される度に、読み出された命令の情報を検出部300に送ってもよい。
情報処理装置3は、図7のように、記憶部32に含まれる構成として、処理履歴記憶部323を有していてもよい。すなわち、処理履歴記憶部323により、命令処理部31が扱った命令に関する情報が記憶されてもよい。処理履歴記憶部323は、たとえば、コンパイル済み情報記憶部321から、コンパイル済み情報が参照された命令の情報を取得してもよいし、命令記憶部320から、命令処理部31により読み出された命令の情報を取得してもよい。あるいは、処理履歴記憶部323は、命令処理部31から直接、実行されるべき命令のアドレスを受信してもよい。そして、検出部300は、処理履歴記憶部323を参照することにより、命令処理部31が扱った命令の命令情報を検出してもよい。
命令情報記憶部301は、検出部300が検出した命令情報を記憶する。
コンパイル実行部302は、命令情報記憶部301に記憶された命令情報が示す命令をコンパイルする。コンパイル実行部302は、たとえば、最後にコンパイルを実行した時から命令情報記憶部301に新たに記憶された命令情報の数が、所定の数になる毎に、記憶された命令情報が示す命令をコンパイルしてもよい。コンパイル実行部302は、まだコンパイルされていない命令を特定して、特定された命令のみをコンパイルしてもよい。コンパイル実行部302の機能は、第1の実施形態のコンパイル部102の機能と同様でよい。
コンパイル実行部302は、コンパイルした結果生成するネイティブコードをコンパイル済み命令記憶部322に書き込む。
以上のような構成により、情報処理装置3は、情報処理装置1と同様、より効率的に命令の実行を行うことができる。
<<第4の実施形態>>
本発明の一実施形態に係る情報処理装置4について説明する。図8は、情報処理装置4の構成を示すブロック図である。情報処理装置4は、検出部400と、コンパイル実行部402とを含む。
検出部400は、命令実行部による記憶部へのアクセスを検出し、検出したアクセスに基づき命令の識別子を検出する。なお、命令実行部は、ネイティブコードとは異なる命令を記憶部から読み出して解釈の上実行する部である。命令実行部および記憶部は、情報処理装置4に備えられていてもよいし、情報処理装置4の外部の構成として存在していてもよい。
コンパイル実行部402は、検出された識別子により特定される命令をコンパイルし、コンパイル後のネイティブコードを記憶部に書き込む。
図9は、情報処理装置4の処理の流れを示すフローチャートである。まず、検出部400は、命令実行部による記憶部へのアクセスを検出する(ステップS91)。検出部400が検出するアクセスは、たとえば、ネイティブコードとは異なる命令を記憶部から読み出すためのアクセスである。あるいは、検出部400は、既に説明された実施形態のように、実行されるべき命令がコンパイル済みであるか否かを確認するためのアクセスを検出してもよい。そして、検出部400は、検出したアクセスに基づき、そのアクセスにおいて用いられている(または用いられた)命令の識別子を検出する(ステップS92)。次に、コンパイル実行部402は、検出された識別子により特定される命令をコンパイルする(ステップS93)。そして、コンパイル実行部402は、コンパイル後のネイティブコードを記憶部に書き込む(ステップS94)。
情報処理装置4によれば、命令実行部は、記憶部からコンパイル後のネイティブコードを取得することができる。命令実行部による命令の実行に関するスループットは、全ての命令を解釈しながら実行する場合や、コンパイルを要求する場合に比べ、向上する。
(ハードウェアの構成について)
以上、説明した本発明の各実施形態において、各装置の各構成要素は、機能単位のブロックを示している。
各装置の各構成要素の一部または全部は、たとえば、汎用または専用の回路によって実現される。各構成要素は、それぞれ単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。
本発明の技術思想を超えない限りにおいて、各実施形態の一部または全部の構成要素は、たとえば、コンピュータシステムが、プログラムを記憶したコンピュータ読み取り可能な記憶媒体からプログラムを読み出して実行することによって、実現されてもよい。「コンピュータシステム」とは、一例として、以下のような構成を含むコンピュータ900を含むシステムである。
・CPU(Central Processing Unit)901
・ROM902
・RAM(Random Access Memory)903
・RAM903へロードされるプログラム904Aおよび記憶情報904B
・プログラム904Aおよび記憶情報904Bを記憶する記憶装置905
・記憶媒体906の読み書きを行うドライブ装置907
・通信ネットワーク909と接続する通信インタフェース908
・データの入出力を行う入出力インタフェース910
・各構成要素を接続するバス911
たとえば、各実施形態における各装置の各構成要素は、その構成要素の機能を実現するプログラム904AをCPU901がRAM903にロードして実行することで実現される。各装置の各構成要素の機能を実現するプログラム904Aは、例えば、予め、記憶装置905やROM902に格納される。そして、必要に応じてCPU901がプログラム904Aを読み出す。記憶装置905は、たとえば、ハードディスクである。プログラム904Aは、通信ネットワーク909を介してCPU901に供給されてもよいし、予め記憶媒体906に格納されており、ドライブ装置907に読み出され、CPU901に供給されてもよい。なお、記憶媒体906は、たとえば、光ディスク、磁気ディスク、光磁気ディスク、および不揮発性半導体メモリ等の、可搬媒体である。
上述のROM902、記憶装置905、および記憶媒体906は、「コンピュータ読み取り可能な記憶媒体」の一例である。「コンピュータ読み取り可能な記憶媒体」は、この他、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントにあたるコンピュータシステム内部の揮発性メモリのように、プログラムを一時的に保持しているものも含む。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、更に前述した機能をコンピュータシステムにすでに記憶されているプログラムとの組み合わせで実現できるものであってもよい。
コンピュータ900は、求められる機能を実現する限りにおいて、図10に示される構成の一部(たとえばドライブ装置907、通信インタフェース908等)を含んでいなくてもよい。
各装置の実現方法には、様々な変形例がある。例えば、各装置は、構成要素毎にそれぞれ別個のコンピュータ900とプログラムとの可能な組み合わせにより実現されてもよい。また、各装置が備える複数の構成要素が、一つのコンピュータ900とプログラムとの可能な組み合わせにより実現されてもよい。
各装置の各構成要素の一部または全部が複数のコンピュータや回路等により実現される場合には、複数のコンピュータや回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、コンピュータや回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
本願発明は以上に説明した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
上記実施形態の一部または全部は以下の付記のようにも記載され得るが、以下には限られない。
<<付記>>
[付記1]
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出手段と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、
を備え、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理装置。
[付記2]
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
付記1に記載の情報処理装置。
[付記3]
前記コンパイル実行手段は、前記検出手段により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
付記1または2に記載の情報処理装置。
[付記4]
前記コンパイル実行手段は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
付記1または2に記載の情報処理装置。
[付記5]
前記検出手段は、前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
付記1から4のいずれか一つに記載の情報処理装置。
[付記6]
前記検出手段は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行手段によりコンパイルされる前記命令の識別子として検出する、
付記1から4のいずれか一つに記載の情報処理装置。
[付記7]
前記検出手段は、前記識別子を検出した際に前記命令をも読み出し、
前記コンパイル実行手段は、前記検出手段により読み出された前記命令をコンパイルする、
付記1から6のいずれか一つに記載の情報処理装置。
[付記8]
前記命令実行手段と、
前記記憶手段と、
をさらに備える付記1から7のいずれか一つに記載の情報処理装置。
[付記9]
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出し、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込み、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理方法。
[付記10]
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
付記9に記載の情報処理方法。
[付記11]
識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
付記9または10に記載の情報処理方法。
[付記12]
所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
付記9または10に記載の情報処理方法。
[付記13]
前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
付記9から12のいずれか一つに記載の情報処理方法。
[付記14]
前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、コンパイルされる前記命令の識別子として検出する、
付記9から12のいずれか一つに記載の情報処理方法。
[付記15]
前記識別子を検出した際に前記命令をも読み出し、
読み出した前記命令をコンパイルする、
付記9から14のいずれか一つに記載の情報処理方法。
[付記16]
コンピュータに、
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出処理と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、
を実行させ、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
プログラム。
[付記17]
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
付記16に記載のプログラム。
[付記18]
前記コンパイル実行処理は、前記検出処理により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
付記16または17に記載のプログラム。
[付記19]
前記コンパイル実行処理は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
付記16または17に記載のプログラム。
[付記20]
前記検出処理は、前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
付記16から19のいずれか一つに記載のプログラム。
[付記21]
前記検出処理は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行処理によりコンパイルされる前記命令の識別子として検出する、
付記16から19のいずれか一つに記載のプログラム。
[付記22]
前記検出処理は、前記識別子を検出した際に前記命令をも読み出し、
前記コンパイル実行処理は、前記検出処理により読み出された前記命令をコンパイルする、
付記16から21のいずれか一つに記載のプログラム。
1〜4 情報処理装置
5 内部バス
10 コンパイルプロセッサ
100 検出部
101 アドレス記憶部
102 コンパイル部
11 命令実行プロセッサ
110 判定部
111 取得部
112 解釈部
113 実行部
12、32 記憶部
120、320 命令記憶部
121、321 コンパイル済み情報記憶部
122、322 コンパイル済み命令記憶部
123 切替部
30 コンパイル処理部
300 検出部
301 命令情報記憶部
302 コンパイル実行部
31 命令処理部
310 判定部
311 取得部
312 解釈部
313 実行部
323 処理履歴記憶部
400 検出部
402 コンパイル実行部
900 コンピュータ
901 CPU
902 ROM
903 RAM
904A プログラム
904B 記憶情報
905 記憶装置
906 記憶媒体
907 ドライブ装置
908 通信インタフェース
909 通信ネットワーク
910 入出力インタフェース
911 バス

Claims (10)

  1. ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段への前記命令を読み出すためのアクセスを検出し、検出したアクセスに基づき、読み出されている前記命令の識別子を検出する検出手段と、
    検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、
    を備え、
    前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
    情報処理装置。
  2. 前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
    前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
    請求項1に記載の情報処理装置。
  3. 前記コンパイル実行手段は、前記検出手段により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
    請求項1または2に記載の情報処理装置。
  4. 前記コンパイル実行手段は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
    請求項1または2に記載の情報処理装置。
  5. 前記命令実行手段と前記記憶手段とはバスに接続され、
    前記検出手段は、前記命令実行手段が前記記憶手段から読み出している前記命令の、前記識別子を、前記バスから捕捉することにより検出する、
    請求項1から4のいずれか一項に記載の情報処理装置。
  6. 前記検出手段は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行手段によりコンパイルされる前記命令の識別子として検出する、
    請求項1から4のいずれか一項に記載の情報処理装置。
  7. 前記検出手段は、前記識別子を検出した際に前記命令をも読み出し、
    前記コンパイル実行手段は、前記検出手段により読み出された前記命令をコンパイルする、
    請求項1から6のいずれか一項に記載の情報処理装置。
  8. 前記命令実行手段と、
    前記記憶手段と、
    をさらに備える請求項1から7のいずれか一項に記載の情報処理装置。
  9. ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段への前記命令を読み出すためのアクセスを検出し、検出したアクセスに基づき、読み出されている前記命令の識別子を検出し、
    検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込み、
    前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
    情報処理方法。
  10. コンピュータに、
    ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段への前記命令を読み出すためのアクセスを検出し、検出したアクセスに基づき、読み出されている前記命令の識別子を検出する検出処理と、
    検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、
    を実行させ、
    前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
    プログラム。
JP2016255187A 2016-12-28 2016-12-28 情報処理装置、情報処理方法、およびプログラム Active JP6358323B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016255187A JP6358323B2 (ja) 2016-12-28 2016-12-28 情報処理装置、情報処理方法、およびプログラム
US15/838,477 US20180181399A1 (en) 2016-12-28 2017-12-12 Information processing device, information processing method, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016255187A JP6358323B2 (ja) 2016-12-28 2016-12-28 情報処理装置、情報処理方法、およびプログラム

Publications (2)

Publication Number Publication Date
JP2018106590A JP2018106590A (ja) 2018-07-05
JP6358323B2 true JP6358323B2 (ja) 2018-07-18

Family

ID=62630096

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016255187A Active JP6358323B2 (ja) 2016-12-28 2016-12-28 情報処理装置、情報処理方法、およびプログラム

Country Status (2)

Country Link
US (1) US20180181399A1 (ja)
JP (1) JP6358323B2 (ja)

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6470492B2 (en) * 1999-05-14 2002-10-22 Hewlett-Packard Company Low overhead speculative selection of hot traces in a caching dynamic translator
US7124407B1 (en) * 2000-08-16 2006-10-17 Sun Microsystems, Inc. Method and apparatus for caching native code in a virtual machine interpreter
JP2002312180A (ja) * 2001-04-11 2002-10-25 Hitachi Ltd 動的命令変換機能を有するプロセッサシステム、該プロセッサシステムを備えたコンピュータにて実行されるバイナリートランスレーションプログラム及びそのプロセッサシステムを実装した半導体デバイス
US7242765B2 (en) * 2002-06-28 2007-07-10 Tommy Lee Hairston Headset cellular telephones
US7107585B2 (en) * 2002-07-29 2006-09-12 Arm Limited Compilation of application code in a data processing apparatus
US7444495B1 (en) * 2002-08-30 2008-10-28 Hewlett-Packard Development Company, L.P. Processor and programmable logic computing arrangement
US7146607B2 (en) * 2002-09-17 2006-12-05 International Business Machines Corporation Method and system for transparent dynamic optimization in a multiprocessing environment
US7340564B2 (en) * 2004-08-25 2008-03-04 Broadcom Corporation Tracing instruction flow in an integrated processor
US7685381B2 (en) * 2007-03-01 2010-03-23 International Business Machines Corporation Employing a data structure of readily accessible units of memory to facilitate memory access
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
JP6690813B2 (ja) * 2014-07-25 2020-04-28 インテル・コーポレーション 変換ルックアサイドバッファを用いた命令セットアグノスティックランタイムアーキテクチャの実施

Also Published As

Publication number Publication date
JP2018106590A (ja) 2018-07-05
US20180181399A1 (en) 2018-06-28

Similar Documents

Publication Publication Date Title
CN110297689B (zh) 智能合约执行方法、装置、设备及介质
US8332845B2 (en) Compile timing based on execution frequency of a procedure
CN103069385B (zh) 用于动态加载基于图的计算的系统和方法
CN107632828B (zh) 多dts文件支持方法、编译装置及嵌入式设备
US20130007720A1 (en) Dynamic Isolated Debugging via Class Instrumentation
CN111967017B (zh) 生成依赖关系的方法、装置、终端设备及存储介质
US9612837B2 (en) Trace method and information processing apparatus
US20110276794A1 (en) Information processing device having configuration changing function and system configuration method
JP6003699B2 (ja) テストデータ生成プログラム、方法及び装置
JP6179331B2 (ja) ログ出力条件設定プログラム、装置、および方法
JP2012079130A (ja) デバッグ支援プログラム、デバッグ支援装置、及びデバッグ支援方法
US8245085B2 (en) Dump output control apparatus and dump output control method
KR20180110482A (ko) 메모리 테스트 시스템 및 방법
JP2018032082A (ja) プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム
US9064042B2 (en) Instrumenting computer program code by merging template and target code methods
JP6358323B2 (ja) 情報処理装置、情報処理方法、およびプログラム
CN109977005B (zh) 端到端测试方法、介质、装置和计算设备
US10310871B2 (en) Non-transitory computer-readable recording medium storing control program, control device and control method
CN113342431B (zh) 函数调用栈回溯、程序异常处理方法、装置、设备及介质
JP2018106257A (ja) プログラム書き込み方法、装置の制御方法、プログラム書き込みのためのプログラム、および装置の制御プログラム
JP2010140233A (ja) エミュレーションシステム及びエミュレーション方法
CN112612531A (zh) 应用程序启动方法、装置、电子设备及存储介质
CN110764997B (zh) 一种数据库接口符合性测试方法以及装置
US11397572B2 (en) Image forming apparatus capable of executing extension application, method of controlling same, and storage medium
JP2018116517A (ja) 開発支援装置、開発支援方法、およびプログラム

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180522

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180604

R150 Certificate of patent or registration of utility model

Ref document number: 6358323

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150