(57)【要約】  デバイスに対するハードウェアアクセス処理の実行時間短縮することが可能な電子装置、デバイスアクセス方法、およびプログラムを提供する。電子装置は、バスコントローラと接続されたデバイスとプログラムを格納するメモリと、バスコントローラを介したデバイスへのアクセスをプログラムに従って実行する処理部であって、デバイスへのアクセスと並行して、デバイスへの過去の一回以上のアクセスの実行結果に基づきデバイスへのアクセスの実行結果の予測値を生成し、過去の一回以上のアクセスの実行結果と過去の一回以上のアクセスの実行結果の予測値との一致回数が所定回数に達している場合には、デバイスへのアクセスの実行結果を用いるデバイスへのアクセスの後処理を、デバイスへのアクセスの実行結果の予測値を用いてデバイスへのアクセスの完了前に実行する処理部とを含む。
2013014779.tif 000002
【特許請求の範囲】
【請求項１】
バスコントローラと接続されたデバイスと、
プログラムを格納するメモリと、
前記バスコントローラを介した前記デバイスへのアクセスを前記プログラムに従って実行する処理部とを備え、
前記処理部は、
前記デバイスへのアクセスと並行して、前記デバイスへの過去のアクセスの実行結果に基づき前記デバイスへのアクセスの実行予測値を生成し、
前記過去のアクセスの実行結果と過去のアクセス実行予測値との一致回数が所定回数に達している場合には、前記デバイスへのアクセスの実行結果を用いる前記デバイスへのアクセスの後処理を、前記デバイスへのアクセスの実行予測値を用いて前記デバイスへのアクセスの完了前に実行することを特徴とする、電子装置。
【請求項２】
前記処理部は、
前記デバイスが属するデバイスタイプ毎の予測ポリシーに従って、前記デバイスへのアクセスの実行予測値を生成することを特徴とする、請求項１に記載の電子装置。
【請求項３】
前記処理部は、
前記デバイスへのアクセスの完了前に実行した前記デバイスへのアクセスの後処理の実行結果を一時保持し、
前記デバイスへのアクセスの完了後に、前記デバイスへのアクセスの実行結果と前記デバイスへのアクセスの実行予測値とを比較し、
前記デバイスへのアクセスの実行結果と前記デバイスへのアクセスの実行予測値とが一致する場合に、前記デバイスへのアクセスの完了前に実行した前記デバイスへのアクセスの後処理の実行結果に基づく状態反映を行なう
ことを特徴とする、請求項１または２に記載の電子装置。
【請求項４】
前記処理部は、
前記一致回数が所定回数を上回る場合には、前記デバイスへのアクセスの完了前に実行する前記デバイスへのアクセスの後処理を最適化するための情報を収集することを特徴とする、請求項１〜３の何れか一項に記載の電子装置。
【請求項５】
電子装置の処理部によって実行されるデバイスアクセス方法であって、
バスコントローラと接続されたデバイスへのアクセスと並行して、前記デバイスへの過去の一回以上のアクセスの実行結果に基づき前記デバイスへのアクセスの実行結果の予測値を生成し、
前記過去の一回以上のアクセスの実行結果と前記過去の一回以上のアクセスの実行結果の予測値との一致回数が所定回数に達している場合には、前記デバイスへのアクセスの実行結果を用いる前記デバイスへのアクセスの後処理を、前記デバイスへのアクセスの実行結果の予測値を用いて前記デバイスへのアクセスの完了前に実行する
ことを特徴とするデバイスアクセス方法。
【請求項６】
バスコントローラと接続されたデバイスへのアクセスと並行して、前記デバイスへの過去の一回以上のアクセスの実行結果に基づき前記デバイスへのアクセスの実行結果の予測値を生成し、
前記過去の一回以上のアクセスの実行結果と前記過去の一回以上のアクセスの実行結果の予測値との一致回数が所定回数に達する場合には、前記デバイスへのアクセスの実行結果を用いる前記デバイスへのアクセスの後処理を、前記デバイスへのアクセスの実行結果の予測値を用いて前記デバイスへのアクセスの完了前に実行する
ことを電子装置の処理部に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイスへのアクセスを行なう電子装置、デバイスアクセス方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、Central Processing Unit（ＣＰＵ）およびメモリを含むコンピュータシステムが組み込まれた電子装置が存在する。このような電子装置に含まれる各種デバイスは、コンピュータシステムのメモリに格納されたプログラム（ファームウェア）をＣＰＵが実行することにより、所望の動作をなすように制御される。【０００３】
図１は、コンピュータシステムが組み込まれた電子装置のハードウェア構成例である。図１に示した電子装置１００には、ＣＰＵ１０１、メモリ１０２、Ｉ２Ｃコントローラ１０３、およびＩ２Ｃデバイス１０４ａ〜１０４ｃが含まれる。なお、電子装置１００に含まれるこれらのハードウェアは、１つの基板上に実装されてもよい。【０００４】
図１は、ＣＰＵ１０１およびデバイス１０４ａ〜１０４ｃ間の通信がInter Integrated Circuit（Ｉ２Ｃ）通信である場合を例示している。しかし、ＣＰＵ１０１およびデバイス１０４ａ〜１０４ｃ間の通信は、マスタ・スレーブ方式の通信であればよい。すなわち、Ｉ２Ｃコントローラなどのバスコントローラを介してＩ２Ｃデバイスなどのスレーブデバイスが直接通信できるデバイスは、ＣＰＵなどのマスタデバイスに限るという方式の通信であればよい。【０００５】
図１に示したＩ２Ｃデバイス１０４ａ〜１０４ｃの例としては、温度センサや電圧センサなどのセンサ、レジスタなどの高速アクセスが可能な記憶素子、Electrically Erasable Programmable Read Only Memory（ＥＥＰＲＯＭ）などの不揮発性メモリ、Large Scale Integration（ＬＳＩ）などの論理回路などが挙げられる。なお、図１には、３つのＩ２Ｃデバイス１０４ａ〜１０４ｃが例示されているが、ＣＰＵ１０１と通信を行なうＩ２Ｃデバイスの数は、任意の数であってよい。【０００６】
ＣＰＵ１０１により実行され、各デバイス１０４ａ〜１０４ｃを制御するためのファームウェアは、メモリ１０２に格納される。ファームウェアを実行するＣＰＵ１０１による各デバイス１０４ａ〜１０４ｃへのアクセスは、メモリ１０２に格納されたドライバを介して、Ｉ２Ｃコントローラ１０３経由で行われる。【０００７】
図２は、従来のファームウェアを実行するＣＰＵによるハードウェアアクセス処理フロー図である。【０００８】
ＣＰＵ１０１により実行されるデバイス１０４ａ〜１０４ｃに対するハードウェアアクセス処理には、デバイス１０４ａ〜１０４ｃへのアクセス、デバイス１０４ａ〜１０４ｃへのアクセスに後続する後処理、およびファイルやメモリなどへの後処理の反映が含まれる。【０００９】
図２に示すように、任意のデバイス１０４ａ〜１０４ｃに対するハードウェアアクセス処理を開始すると（ｓｔｅｐ２０１）、ＣＰＵ１０１は、そのデバイス１０４ａ〜１０４ｃへのアクセスを、ドライバを介してＩ２Ｃコントローラ１０３に依頼する（ｓｔｅｐ２０２）。依頼を受けたＩ２Ｃコントローラ１０３は、デバイス１０４ａ〜１０４ｃへのアクセスを行なう（ｓｔｅｐ２０３およびｓｔｅｐ２０４）。【００１０】
デバイス１０４ａ〜１０４ｃへのアクセスが完了すると（ｓｔｅｐ２０５）、ＣＰＵ１０１は、完了したデバイスへのアクセスに後続するデバイスアクセスの後処理を開始する（ｓｔｅｐ２０６）。【００１１】
デバイスアクセスの後処理とは、デバイスから読み出した読み出し値などのデバイスへのアクセス実行結果を使用したファームウェアを実行するＣＰＵよる処理を指す。例えば、デバイスのリセット処理では、デバイスから読み出した値によって、設定値を変更したり必要な情報収集を行うＣＰＵによる処理を指す。【００１２】
デバイスアクセスの後処理を完了すると（ｓｔｅｐ２０７）、ＣＰＵ１０１は、後処理の実行結果をファイルやメモリなどに反映する（ｓｔｅｐ２０８）。そして、任意のデバイス１０４ａ〜１０４ｃに対する一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０９）。【００１３】
以上のように、ＣＰＵによるハードウェアアクセス処理フローの従来例では、Ｉ２Ｃコントローラがデバイスへのアクセスを行なっている間、ＣＰＵは、そのデバイスへのアクセス完了を待ち合わせる必要がある。このため、ＣＰＵは、デバイスへのアクセス完了以降の後処理に関するプログラム（ファームウェア）を実行することができない。【００１４】
なお、複数のハードウェア資源を用いて、予測される後続の命令を並列処理する技術が知られている。【００１５】
また、蓄積された環境情報に基づいて、現在時刻よりも先の時刻の環境情報を予測し、予測結果に基づき店舗内の機器制御情報やアナウンス情報を生成する技術が知られている。【００１６】
さらに、予測対象の時系列データに対して直前のデータとの比や差を取るなどの前処理を施し、前処理が施された時系列データを新たな予測対象として予測を行い、後処理としてその逆変換を行なうことにより、予測値を求める技術が知られている。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２００２−９１７６１号公報
【特許文献２】特開２００６−１９０１４５号公報
【特許文献３】特開平９−１４６９１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
図２を示して前述したように、デバイスに対するハードウェアアクセス処理を行う場合、バスコントローラがデバイスへのアクセスを行ってデータ転送処理を完了するまでは、ＣＰＵは、デバイスアクセスの後処理に関するプログラムを実行できない。すなわち、図３に示したアプリケーションプログラムのコード例にみられるように、ＣＰＵは、Operating System（ＯＳ）経由で呼び出したドライバを介してデバイスへのアクセスを行なっている間、デバイスアクセスの後処理に関するプログラムを実行できない。【００１９】
本発明の課題は、デバイスに対するハードウェアアクセス処理の実行時間を短縮することが可能な電子装置、デバイスアクセス方法、およびプログラムを提供することである。
【課題を解決するための手段】
【００２０】
実施形態に従った電子装置は、バスコントローラと接続されたデバイスと、プログラムを格納するメモリと、バスコントローラを介したデバイスへのアクセスをプログラムに従って実行する処理部とを備え、処理部は、デバイスへのアクセスと並行して、デバイスへの過去のアクセスの実行結果に基づきデバイスへのアクセスの実行予測値を生成し、過去のアクセスの実行結果と過去のアクセス実行予測値との一致回数が所定回数に達している場合には、デバイスへのアクセスの実行結果を用いるデバイスへのアクセスの後処理を、デバイスへのアクセスの実行予測値を用いてデバイスへのアクセスの完了前に実行する。【００２１】
実施形態に従った、電子装置の処理部によって実行されるデバイスアクセス方法は、バスコントローラと接続されたデバイスへのアクセスと並行して、デバイスへの過去の一回以上のアクセスの実行結果に基づきデバイスへのアクセスの実行結果の予測値を生成し、過去の一回以上のアクセスの実行結果と過去の一回以上のアクセスの実行結果の予測値との一致回数が所定回数に達している場合には、デバイスへのアクセスの実行結果を用いるデバイスへのアクセスの後処理を、デバイスへのアクセスの実行結果の予測値を用いてデバイスへのアクセスの完了前に実行する。【００２２】
実施形態に従ったプログラムは、バスコントローラと接続されたデバイスへのアクセスと並行して、デバイスへの過去の一回以上のアクセスの実行結果に基づきデバイスへのアクセスの実行結果の予測値を生成し、過去の一回以上のアクセスの実行結果と過去の一回以上のアクセスの実行結果の予測値との一致回数が所定回数に達する場合には、デバイスへのアクセスの実行結果を用いるデバイスへのアクセスの後処理を、デバイスへのアクセスの実行結果の予測値を用いてデバイスへのアクセスの完了前に実行することを電子装置の処理部に実行させる。
【発明の効果】
【００２３】
実施形態に従った電子装置、デバイスアクセス方法、およびプログラムによれば、デバイスに対するハードウェアアクセス処理の実行時間を短縮することができる。
【図面の簡単な説明】
【００２４】
【図１】コンピュータシステムが組み込まれた電子装置のハードウェア構成例である。
【図２】従来のファームウェアを実行するＣＰＵによるハードウェアアクセス処理フロー図である。
【図３】デバイスへのアクセスが完了するまでアクセスの後処理を行うことができないアプリケーションプログラムコードの一例である。
【図４】実施形態に従ったファームウェアを実行するＣＰＵによるハードウェアアクセス処理フロー図である。
【図５】従来のハードウェアアクセス処理と実施形態のハードウェアアクセス処理の処理時間の比較図である。
【図６】実施形態に従ったファームウェアを実行するＣＰＵの機能的構成図である。
【図７】センサタイプ向け値予測処理部が有する値履歴テーブルの一例である。
【図８】センサタイプ向け値予測処理部が有する復帰値履歴テーブルの一例である。
【図９】記憶素子タイプ向け値予測処理部が有する値履歴テーブルの一例である。
【図１０】記憶素子タイプ向け値予測処理部が有する復帰値履歴テーブルの一例である。
【図１１】値予測処理を実行する、デバイスのタイプ毎の値予測処理部の指定についての説明図である。
【図１２】デバイスのタイプ毎の値予測処理部による値予測処理のフロー図である。
【図１３】アクセス対象のデバイスがセンサタイプである場合の値予測フェーズにおけるＣＰＵの動作説明図である。
【図１４】アクセス対象のデバイスが記憶素子タイプである場合の値予測フェーズにおけるＣＰＵの動作説明図である。
【図１５】情報収集フェーズにおけるＣＰＵの動作説明図である。
【図１６】値定数化前の後処理実行関数のソースコードの一例である。
【図１７】値定数化後の後処理実行関数のソースコードの一例である。
【図１８】投機実行フェーズにおけるＣＰＵの動作説明図である。
【図１９】実施形態に従ったファームウェアを実行するＣＰＵのハードウェアアクセス処理の実行フェーズの遷移図である。
【図２０Ａ】実施形態に従ったファームウェアを実行するＣＰＵのデバイスへのアクセス開始からデバイスアクセスの後処理までの処理フロー図である。
【図２０Ｂ】実施形態に従ったファームウェアを実行するＣＰＵのデバイスへのアクセス開始からデバイスアクセスの後処理までの処理フロー図である。
【図２１】本発明の実施形態に従ったファームウェアのクラス図である。
【図２２】値予測フェーズにおけるスレッド間の相互作用図である。
【図２３】値予測フェーズにおける処理シーケンス図である。
【図２４】情報収集フェーズにおけるスレッド間の相互作用図である。
【図２５】情報収集フェーズにおける処理シーケンス図である。
【図２６】投機実行フェーズにおけるスレッド間の相互作用図である。
【図２７】投機実行フェーズにおける処理シーケンス図である。
【発明を実施するための形態】
【００２５】
以下、図面を参照しながら、実施形態を詳細に説明する。
図１に示した電子装置のハードウェア構成例では、デバイスへアクセスしたときのデータ転送処理は、Ｉ２Ｃコントローラ１０３により行われる。このため、Ｉ２Ｃコントローラ１０３によるデータ転送処理中は、ＣＰＵ１０１により実行されるＩ２Ｃドライバは、割り込み待ちとなり、ＣＰＵ１０１は、ほとんど使用されていない。
【００２６】
そこで、本発明の実施形態に従った投機実行プログラム（ファームウェア）は、デバイスからの応答待ちの間に空いているＣＰＵ資源を有効利用する。すなわち、本発明の実施形態に従ったファームウェアを実行するＣＰＵは、デバイスへのアクセス中にＩ２Ｃコントローラによるデータ転送処理完了待ち状態にある空き時間を利用して、デバイスアクセスの後処理を投機的に実行する。
【００２７】
図４は、実施形態に従ったファームウェアを実行するＣＰＵによるハードウェアアクセス処理フロー図である。
【００２８】
図４に示すように、任意のデバイス１０４ａ〜１０４ｃに対するハードウェアアクセス処理を開始すると（ｓｔｅｐ４０１）、ＣＰＵ１０１は、そのデバイス１０４ａ〜１０４ｃへのアクセスを、ドライバを介してＩ２Ｃコントローラ１０３に依頼する（ｓｔｅｐ４０２）。依頼を受けたＩ２Ｃコントローラ１０３は、デバイス１０４ａ〜１０４ｃへのアクセスを行い（ｓｔｅｐ４０３およびｓｔｅｐ４０４）、ＣＰＵ１０１は、デバイス１０４ａ〜１０４ｃへのアクセスを完了する（ｓｔｅｐ４０５）。
【００２９】
また、図４に示した実施形態に従ったファームウェアを実行するＣＰＵ１０１は、従来のファームウェアを実行するＣＰＵがデバイスへのアクセス完了後に実行する後処理（図２のｓｔｅｐ２０６およびｓｔｅｐ２０７）をデバイスへのアクセス（ｓｔｅｐ４０２〜ｓｔｅｐ４０５）と並行して実行する。
【００３０】
すなわち、任意のデバイス１０４ａ〜１０４ｃに対するハードウェアアクセス処理を開始すると（ｓｔｅｐ４０１）、実施形態に従ったファームウェアを実行するＣＰ１０１は、予測状態の確認および予測値の取得を実行する（ｓｔｅｐ４０６）。すなわち、ＣＰＵ１０１は、デバイス１０４ａ〜１０４ｃへのアクセスと並行して、デバイスアクセスの後処理を予測精度が高く投機実行できるか否かという予測状態の確認と予測値の取得とを行なう。
【００３１】
ｓｔｅｐ４０６での予測状態の確認の結果、デバイスアクセスの後処理を予測精度が高く投機実行できると判定する場合には、実施形態のファームウェアを実行するＣＰＵ１０１は、取得した予測値に基づくデバイスアクセスの後処理を投機実行する（ｓｔｅｐ４０７）。
【００３２】
デバイスへのアクセスが完了し（ｓｔｅｐ４０５）かつ投機実行したデバイスアクセスの後処理が完了すると（ｓｔｅｐ４０８）、ＣＰＵ１０１は、ｓｔｅｐ４０６で取得した予測値とデバイスへのアクセスにより得られた値とを比較して、予測値に対する予測結果の検証を行なう（ｓｔｅｐ４０９）。
【００３３】
そして、実施形態のファームウェアを実行するＣＰＵ１０１は、予測結果の検証結果に基づいて、予測値および予測状態に関する履歴を更新する（ｓｔｅｐ４１０）。また、予測結果の検証の結果、その予測が成功している場合には、ＣＰＵ１０１は、予測値を用いて投機実行した後処理の結果をファイルやメモリなどに反映させる（ｓｔｅｐ４１１）。そして、任意のデバイス１０４ａ〜１０４ｃに対する一連のハードウェアアクセス処理を終了する（ｓｔｅｐ４１２）。
【００３４】
以上のように、図４に示した実施形態のファームウェアを実行するＣＰＵ１０１によるハードウェアアクセス処理には、図２に示した従来例とは異なり、予測状態の確認および予測値の取得（ｓｔｅｐ４０６）、予測結果の検証（ｓｔｅｐ４０９）、および履歴・予測値の更新（ｓｔｅｐ４１０）の各処理が追加される。実施形態に従ったファームウェアを実行するＣＰＵ１０１は、これらの処理を追加して、デバイスへのアクセスと並行してデバイスアクセスの後処理を実行する。
【００３５】
図５は、従来のハードウェアアクセス処理と実施形態のハードウェアアクセス処理の処理時間の比較図である。
【００３６】
図５に示すように、前述した追加の処理のうち、予測状態の確認および予測値の取得（ｓｔｅｐ４０６）は、実施形態に従ったハードウェアアクセス処理においては、デバイスへのアクセスと並行して実行される。
【００３７】
また、前述した追加の処理のうち、予測結果の検証（ｓｔｅｐ４０９）および履歴・予測値の更新（ｓｔｅｐ４１０）にかかる実行時間は、従来のハードウェアアクセス処理における後処理の実行時間と比較して短い。
【００３８】
従って、図５に示すように、実施形態に従ったファームウェアを実行するＣＰＵは、従来のファームウェアによるハードウェアアクセス処理よりも処理時間を短縮して、ハードウェアアクセス処理を実行することができる。
【００３９】
図６は、実施形態に従ったファームウェアを実行するＣＰＵの機能的構成図である。
図６に示すように、実施形態に従ったファームウェアを実行するＣＰＵ１０１には、ハードウェアアクセス処理部６０１、値予測処理部６０２、関数管理部６０３、値定数化コード生成処理部６０４、コンパイラ６０５、および出力データペンディング処理部６０６が含まれる。
【００４０】
ハードウェアアクセス処理部６０１は、デバイスへのアクセスを行なうための処理を行う。デバイスへのアクセスとしては、デバイスからのデータの読み取り、デバイスへのデータの書き込み、ならびにデータの読み取りおよび書き込みが挙げられる。
【００４１】
なお、データの読み取りおよび書き込みとは、デバイスへのデータの書き込みとデバイスからのデータの読み取りが複合して行なわれることを指す。データの読み取りおよび書き込みの一例としては、ＥＥＰＲＯＭのように、データを読み取る前に読み取るＲＯＭ上のアドレスを指定する必要がある場合が挙げられる。
【００４２】
さらに、ハードウェアアクセス処理部６０１は、関数管理部６０３に対してデバイスアクセスの後処理の実行を指示する。また、ハードウェアアクセス処理部６０１は、値予測処理部６０２への値予測の指示を通じて、関数管理部６０３に対してデバイスアクセスの後処理を投機実行させる。
【００４３】
値予測処理部６０２は、デバイスからの読み出し値、およびデバイスへのアクセスが成功した否かを表す復帰値を予測する。また、値予測処理部６０２は、これらの予測値の予測精度の管理を行う。
【００４４】
値予測処理部６０２は、ハードウェアアクセス処理部６０１がアクセス対象とするデバイスのタイプに応じて予測を行なう。そこで、図６に示したセンサタイプ向け予測処理部６０２ａおよび記憶素子タイプ向け値処理部６０２ｂのように、値予測処理部６０２は、ハードウェアアクセス処理部６０１がアクセス対象とするデバイスのタイプ毎に値予測処理部を有する。
【００４５】
また、値予測処理部６０２は、過去にデバイスへアクセスしたときの読み出し値もしくは書き込み値の履歴および復帰値の履歴を用いて、デバイスへのアクセス実行結果を予測する。そこで、デバイスのタイプ毎の値予測処理部６０２ａおよび６０２ｂは、過去の読み出し値もしくは書き込み値を保持するための値履歴テーブル、および過去の復帰値を保持するための復帰値履歴テーブルをそれぞれ有する。
【００４６】
関数管理部６０３は、後処理実行関数６０３ａ〜６０３ｃを管理する。後処理実行関数６０３ａ〜６０３ｃは、デバイスアクセスの後処理を実行する関数である。
【００４７】
本発明の実施形態では、デバイスアクセスの後処理を行う関数は、一連のハードウェアアクセス処理を行う従来のハードウェアアクセス処理関数から別関数化され、別関数化された後処理実行関数６０３ａ〜６０３ｃは、関数管理部６０３により管理される。
【００４８】
後処理実行関数６０３ａ〜６０３ｃに対するライブラリは動的にロードされ、その動的ライブラリへの内部ハンドルが関数管理部６０３により保持される。
【００４９】
本発明の実施形態では、後処理実行関数６０３ａ〜６０３ｃには、通常実行用関数、情報処理用関数、および最適化済み関数の３種類がある。
【００５０】
通常実行用関数は、デバイスへのアクセス実行結果に基づいてデバイスアクセスの後処理を実行する場合に使用される後処理実行関数である。
【００５１】
情報処理用関数は、最適化された後処理実行関数を生成するために必要な情報収集のために使用される後処理実行関数である。
【００５２】
最適化済み関数は、デバイスアクセスの後処理を投機実行する場合に使用される最適化された後処理実行関数である。
【００５３】
関数管理部６０３は、ハードウェアアクセス処理の実行フェーズに応じて、３種類の後処理実行関数６０３ａ〜６０３ｃから後処理実行関数を選択し、選択した後処理実行関数を実行する。
【００５４】
値定数化コード生成処理部６０４およびコンパイラ６０５は、投機実行のために使用する後処理実行関数を最適化する。すなわち、デバイスへのアクセス実行結果に対する値予測の精度が高い場合に、値定数化コード生成処理部６０４は、予測値を定数化した後処理実行関数のソースコードを生成する。コンパイラ６０５は、予測値を定数化した後処理実行関数のソースコードを、最適化およびプロファイルオプション付きでコンパイルする。
【００５５】
出力データペンディング処理部６０６は、最適化実行関数を投機実行した場合の実行結果である出力データを一時保管する。そして、予測結果を検証した結果予測が当たった場合には、出力データペンディング処理部６０６は、保管した出力データの状態反映をメモリやファイルなどに行なう。
【００５６】
一方、予測結果を検証した結果予測が失敗していた場合には、出力データペンディング処理部６０６は、一時保管した出力データを破棄する。この場合、デバイスへのアクセスにより実際に読み出された読み出し値を用いて、デバイスアクセスの後処理実行関数（通常実行用関数）が関数管理部６０３により実行される。
【００５７】
このようなペンディング処理部６０６の処理により、値予測が失敗したと判断される場合のリカバリ処理が不要となる。すなわち、値予測が失敗していた場合に、デバイスへのアクセスによる読み出し値を用いたデバイスアクセスの後処理の実行結果をメモリやファイルに反映させるために、投機実行された後処理実行関数の出力データを用いて書き換えられたメモリやファイルを書き換え前の状態に戻す処理が不要となる。
【００５８】
図６に示した値予測処理部６０２の機能的構成についてさらに説明する。
デバイスアクセスの後処理の投機実行を行なうためには、ハードウェアアクセス処理部６０１によるデバイスへのアクセス実行結果を予測する必要がある。
【００５９】
デバイスへのアクセスパターンは、デバイスによって異なるが、デバイス毎に特徴的なアクセスパターンが存在する。そこで、値予測処理部６０２は、デバイスへのアクセスパターンに基づいた予測ポリシーにより、デバイスへのアクセス実行結果を予測する。
【００６０】
デバイスの種類としてセンサ、レジスタ、ＥＥＰＲＯＭ、およびＬＳＩを例示すると、デバイスへのアクセス実行結果を予測する予測ポリシーは、次のように説明できる。
【００６１】
温度センサおよび電圧センサなどのセンサは、アクセス実行結果としてそのセンサが測定した測定値を返す。従って、センサの予測ポリシーとしては、アクセスにより最後に読み出されたデータが次回のアクセス時にそのまま読み出されるか、あるいは過去のアクセス実行結果から一定パターンのデータが読み出される可能性が高いと言える。そこで、センサに対しては、デバイスのアドレス毎に予測値を管理する最終値型予測またはコンテキスト型予測を行なう。
【００６２】
なお、最終値型予測とは、命令などの演算結果が前回実行時の値と同じであるという値予測を指す。また、コンテキスト型予測とは、例えば0,1,1,0,1,1,0,1,1と言ったように、命令などの演算結果があるパターンで繰り返される場合の値予測を指す。
【００６３】
レジスタは、高速にアクセスが可能な記憶素子であり、書き込みのアクセスによりレジスタに書き込まれた値を、読み取りのアクセスによりレジスタから読み取ることができる。従って、レジスタの予測ポリシーとしては、書き込みのアクセスによりレジスタに書き込んだデータを、読み取りのアクセスによりそのまま読み取れる可能性が高いと言える。そこで、レジスタに対しては、レジスタのデバイスアドレス毎に予測値の履歴を管理する最終値型予測を行う。
【００６４】
不揮発性メモリであるＥＥＰＲＯＭでは、指定したＥＥＰＲＯＭのアドレスに対してデータの書き込みおよび読み込みが行われる。従って、ＥＥＰＲＯＭの予測ポリシーとしては、書き込みのアクセスにより書き込んだデータを、読み取りのアクセスによりそのまま読み取れる可能性が高いと言える。そこで、ＥＥＰＲＯＭに対しては、ＥＥＰＲＯＭのデバイスアドレスおよび書き込みアドレス毎に予測値の履歴を管理する最終値型予測を行う。
【００６５】
論理回路であるＬＳＩは、書き込みのアクセスにより書き込まれたデータに従って、後続の読み出しのアクセスの際に、一定パターンの読み出し値を返す。従って、ＬＳＩの予測ポリシーとしては、読み出しのアクセスの際に、書き込みのアクセスにより最後に書き込んだデータに従って、一定パターンの値を読み出せる可能性が高いと言える。そこで、ＬＳＩに対しては、ＬＳＩのデバイスアドレスおよび書き込んだデータ毎に予測値の履歴を管理する最終値型予測を行う。
【００６６】
このように、デバイスへのアクセス実行結果を予測する予測ポリシーは、デバイス毎に考え得る。しかし、これらのデバイスの予測ポリシーの間には共通点を見出すことが可能である。そこで、予測ポリシーの共通点に着目して、例えば、以下のようなセンサタイプ向け値予測および記憶素子タイプ向け値予測に基づいて値予測処理を実行することが可能である。
【００６７】
センサタイプ向け値予測は、温度センサや電圧センサなどのデバイスからの読み出し値の予測であり、所定の値がデバイスから読み出されるであろうと予測する方式である。
【００６８】
センサタイプ向け値予測には、前述した最終値型予測およびコンテキスト型予測を用いることができる。例えば、最終値型予測を用いたセンサタイプ向け値予測では、デバイスアドレス毎に最後の読み出し値を履歴テーブルに格納し、次回のハードウェアアクセス処理の実行時には履歴テーブルに格納された最後の読み出し値を予測値として用いる。
【００６９】
記憶素子タイプ向け値予測は、レジスタおよびＥＥＰＲＯＭなどの記憶素子タイプのデバイスからの読み出し値の予測であり、デバイスへの最後の書き込み値がデバイスから読み出されるであろうと予測する方式である。
【００７０】
記憶素子タイプ向け値予測には、前述した最終値型予測を用いることができる。そこで、記憶素子タイプ向け値予測では、デバイスアドレス毎に最後の書き込み値を履歴テーブルに格納し、読み出しのアクセス実行時には履歴テーブルに格納された最後の書き込み値を予測値として用いる。
【００７１】
デバイスのタイプ毎の値予測処理部の一例として、図６に示したセンサタイプ向け値予測処理部６０２ａおよび記憶素子タイプ向け値予測処理部６０２ｂを説明する。なお、これらはあくまで例示であり、その他のデバイスのタイプ毎の値予測処理部をアクセス対象のデバイスのタイプに応じて値予測処理部６０２内に追加することが可能である。
【００７２】
図６に示したセンサタイプ向け値予測処理部６０２ａは、例えば、前述した最終値型予測を用いたセンサタイプ向け値予測に従って、ハードウェアアクセス処理部６０１がアクセス対象とするデバイスに対する値予測を行なう。
【００７３】
センサタイプ向け値予測処理部６０２ａは、値履歴テーブルおよび復帰履歴テーブルを有する。
【００７４】
図７は、センサタイプ向け値予測処理部が有する値履歴テーブルの一例である。また、図８は、センサタイプ向け値予測処理部が有する復帰値履歴テーブルの一例である。
【００７５】
図７に示すように、値履歴テーブルは、例えば、デバイスのアドレスをキーとしてハッシュ値が生成され、キーに対応する値として読み出し値、読み出し値サイズ、および予測精度が保持されたハッシュテーブルである。
【００７６】
値履歴テーブルに保持される読み出し値は、デバイスへのアクセス時に読み出されたデータである。また、値履歴テーブルに保持される読み出し値サイズは、読み出し値のデータサイズである。値履歴テーブルに保持される予測精度は、読み出し値を用いた値予測が可能か否か、および読み出し値を用いた投機実行が可能か否かの状態を表す。
【００７７】
値履歴テーブルに保持される読み出し値、読み出し値サイズ、および予測精度は、デバイスへのアクセス完了時に更新される。
【００７８】
値履歴テーブルに保持される予測精度の種類には、予測不可、予測可、および投機実行可がある。
【００７９】
値予測不可は、値履歴テーブルに格納された読み出し値を用いた値予測ができない状態を表す。値予測可は、値履歴テーブルに格納された読み出し値を用いた値予測が可能な状態を表す。投機実行可は、値予測に基づく投機実行が可能な状態を表す。
【００８０】
例えば、デバイスアドレスを基に値履歴テーブルから検索した予測精度が予測可または投機実行可である場合、センサタイプ向け値予測処理部６０２ａは、値履歴テーブルに保持された対応する読み出し値を予測値として扱う。
【００８１】
図８に示すように、復帰値履歴テーブルは、例えば、デバイスのアドレスをキーとしてハッシュ値が生成され、キーに対応する値として復帰値、復帰値サイズ、および予測精度が保持されたハッシュテーブルである。
【００８２】
復帰値履歴テーブルに保持される復帰値は、デバイスへのアクセスが成功したか否か、およびデバイスへのアクセスに失敗した場合には如何なるエラーが発生したかを表すデータである。また、復帰値履歴テーブルに保持される復帰値サイズは、復帰値のデータサイズである。復帰値履歴テーブルに保持される予測精度は、復帰値を用いた値予測が可能か否か、および復帰値を用いた投機実行が可能か否かの状態を表す。
【００８３】
復帰値履歴テーブルに保持される復帰値、復帰値サイズ、および予測精度は、デバイスへのアクセス完了時に更新される。
【００８４】
復帰値履歴テーブルに保持される予測精度の種類には、予測不可、予測可、および投機実行可がある。
【００８５】
例えば、デバイスアドレスを基に復帰値履歴テーブルから検索した予測精度が予測可または投機実行可である場合、センサタイプ向け値予測処理部６０２ａは、復帰値履歴テーブルに保持された対応する復帰値を予測値として扱う。
【００８６】
図６に示した記憶素子タイプ向け値予測処理部６０２ｂは、例えば、前述した記憶素子タイプ向け値予測に従って、ハードウェアアクセス処理部６０１がアクセス対象とするデバイスへのアクセス実行結果に対する値予測を行なう。
【００８７】
記憶素子向け値予測処理部６０２ｂは、値履歴テーブルおよび復帰履歴テーブルを有する。図９は、記憶素子タイプ向け値予測処理部が有する値履歴テーブルの一例である。また、図１０は、記憶素子タイプ向け値予測処理部が有する復帰値履歴テーブルの一例である。
【００８８】
図９に示すように、値履歴テーブルは、例えば、デバイスのアドレスおよびデータオフセットをキーとしてハッシュ値が生成され、キーに対応する値として読み出し値、読み出し値サイズ、および予測精度が保持されたハッシュテーブルである。
【００８９】
図９に示した値履歴テーブルに保持される書き込み値は、デバイスへのアクセス時に書き込まれたデータである。また、値履歴テーブルに保持される書き込み値サイズは、書き込み値のデータサイズである。値履歴テーブルに保持される予測精度は、書き込み値を用いた値予測が可能か否か、および書き込み値を用いた投機実行が可能か否かの状態を表す。予測精度の種類には、予測不可、予測可、および投機実行可がある。
【００９０】
値履歴テーブルに保持される書き込み値および書き込み値サイズは、書き込みのアクセス完了時に更新される。また、値履歴テーブルに保持される予測精度は、読み出しのアクセス完了時に更新される。
【００９１】
図１０に示すように、復帰値履歴テーブルは、例えば、デバイスのアドレスおよびデータオフセットをキーとしてハッシュ値が生成され、キーに対応する値として復帰値、復帰値サイズ、および予測精度が保持されたハッシュテーブルである。
【００９２】
図１０に示した復帰値履歴テーブルに保持される復帰値、復帰値サイズ、および予測精度のそれぞれの内容は、図８を示して説明したセンサタイプ向け値予測処理部が有する復帰値履歴テーブルと同様である。
【００９３】
値予測を実行する、デバイスのタイプ毎の値予測処理部６０２ａおよび６０２ｂの指定は、ハードウェアアクセス処理部６０１による値予測の指示時に行なわれる。
【００９４】
例えば、ハードウェアアクセス処理部６０１のアクセス対象がセンサタイプのデバイスである場合、図１１に示す一例のように、ハードウェアアクセス処理部６０１によりセンサタイプ向け値予測処理部６０１ａが値予測の指示時に指定される。そして、指定されたセンサタイプ向け値予測処理部６０１ａによる予測が行なわれる。
【００９５】
また、デバイスのタイプ毎の値予測処理部６０２ａおよび６０２ｂは、ハードウェアアクセス処理部６０１がアクセス対象とするデバイスの種類に応じてエントリを追加することが可能である。
【００９６】
図１２は、デバイスのタイプ毎の値予測処理部による値予測処理のフロー図である。
ハードウェアアクセス処理部６０１による値予測指示により値予測処理が開始されると（ｓｔｅｐ１２０１）、ハードウェアアクセス処理部６０１がアクセス対象とするデバイスのアドレスが値予測履歴テーブルおよび復帰値履歴テーブルに登録されているか否かを判定する（ｓｔｅｐ１２０２）。
【００９７】
ｓｔｅｐ１２０２での判定の結果デバイスのアドレスが登録されていない場合には、値予測履歴テーブルおよび復帰値履歴テーブルにそのデバイスのアドレスをキーとするエントリを追加し（ｓｔｅｐ１２０３）、一連の値予測処理を終了する（ｓｔｅｐ１２０７）。
【００９８】
ｓｔｅｐ１２０２での判定の結果デバイスのアドレスが登録されている場合には、デバイスへのアクセス実行結果に対する予測が可能か否かを、値予測履歴テーブルおよび復帰値履歴テーブルに保存された対応する予測精度を参照して判定する（ｓｔｅｐ１２０４）。
【００９９】
ｓｔｅｐ１２０４での判定の結果、予測が可能である場合、値予測履歴テーブルおよび復帰値履歴テーブルに保存された対応する読み出し値もしくは書き込み値および復帰値を予測値として使用する（ｓｔｅｐ１２０５）。そして、ｓｔｅｐ１２０５での処理が終了した後に、一連の値予測処理を終了する（ｓｔｅｐ１２０７）。
【０１００】
ｓｔｅｐ１２０４での判定の結果、予測が可能でない場合、値予測履歴テーブルおよび復帰値履歴テーブルに保存された対応する読み出し値もしくは書き込み値および復帰値を予測値として使用しない（ｓｔｅｐ１２０６）。そして、ｓｔｅｐ１２０６での処理が終了した後に、一連の値予測処理を終了する（ｓｔｅｐ１２０７）。
【０１０１】
実施形態では、図６に示したような機能的構成を有するＣＰＵ１０１により、デバイスへのアクセス実行結果を予測して、本来ならばデバイスへのアクセス完了後にしか実行できないコードを投機的に実行する。
【０１０２】
デバイスアクセスの後処理を値予測に基づき投機実行するための実施形態に従ったファームウェアを実行するＣＰＵ１０１により、デバイスへのアクセスの度に実行される処理を説明する。
【０１０３】
デバイスへのアクセスの度にＣＰＵ１０１により実行される処理は、アクセスにより読み出される読み出し値に対する予測精度に応じて、値予測フェーズ、情報収集フェーズ、および投機実行フェーズの３つの実行フェーズに分けられる。
【０１０４】
値予測フェーズでは、読み出し／書き込みのアクセス時に、デバイスへのアクセスにより読み出される読み出し値および復帰値の予測が行われる。
【０１０５】
前述したように、値予測処理部６０２では、アクセス対象であるデバイスのタイプ毎に値予測処理が行われる。
【０１０６】
図１３は、アクセス対象のデバイスがセンサタイプである場合の値予測フェーズにおけるＣＰＵの動作説明図である。
【０１０７】
図１３に示すように、デバイスへの読み出しのアクセスには、ハードウェアアクセス処理部６０１に含まれるハードウェアリーダ６０１ａと称されるクラスが用いられる。
【０１０８】
ハードウェアリーダ６０１ａによるデバイスへのアクセスの結果、デバイスから読み出された読み出し値および復帰値は、デバイスアドレスでハッシュされている値予測処理部６０２内の値履歴テーブルおよび復帰値履歴テーブルにそれぞれ格納される。
【０１０９】
値予測フェーズでは、ハードウェアリーダ６０１ａによるデバイスへのアクセスと並行して、デバイスへのアクセス実行結果に対する値予測が値予測処理部６０２により行なわれる。
【０１１０】
値予測処理部６０２は、ハードウェアリーダ６０１ａから値予測の指示を受けると、値履歴テーブルおよび復帰値履歴テーブルにそれぞれ格納されているアクセス対象のデバイスの読み出し値および復帰値に基づいて、デバイスへのアクセス実行結果に対する予測値を生成し取得する。例えば、最終値型予測の場合では、値予測処理部６０２は、デバイスのアドレス毎に保存された読み出し値および復帰値をそれぞれ予測値として取得する。
【０１１１】
そして、値予測処理部６０２は、取得した予測値とデバイスへのアクセスにより読み出された読み出し値および復帰値とを比較し、両者の値が一致して予測が当たっているか否かを判定する。
【０１１２】
図１３に示すように、値予測フェーズではさらに、関数管理部６０３は、ハードウェアリーダ６０１ａの指示に従って、デバイスへのアクセス実行結果を用いて後処理実行関数を実行し、デバイスアクセスの後処理を行う。
【０１１３】
図１４は、アクセス対象のデバイスが記憶素子タイプである場合の値予測フェーズにおけるＣＰＵの動作説明図である。
【０１１４】
図１４に示すように、デバイスへの書き込みのアクセスには、ハードウェアアクセス処理部６０１に含まれるハードウェアライタ６０１ｂと称されるクラスが用いられる。
【０１１５】
ハードウェアライタ６０１ｂによるデバイスへのアクセスの結果、デバイスに書き込まれた書き込み値および復帰値は、デバイスのアドレスでハッシュされている値予測処理部６０２内の値履歴テーブルおよび復帰値履歴テーブルにそれぞれ格納される。
【０１１６】
また、図１４に示すように、デバイスへの読み出しのアクセスには、ハードウェアアクセス処理部６０１に含まれるハードウェアリーダ６０１ａと称されるクラスが用いられる。
【０１１７】
値予測フェーズでは、ハードウェアリーダ６０１ａによるデバイスへのアクセスと並行して、デバイスへのアクセス実行結果に対する値予測が値予測処理部６０２により行なわれる。
【０１１８】
値予測処理部６０２は、ハードウェアリーダ６０１ａから値予測の指示を受けると、値履歴テーブルおよび復帰値履歴テーブルにそれぞれ格納されているアクセス対象のデバイスの書き込み値および復帰値に基づき、デバイスへのアクセス実行結果に対する予測値を生成し取得する。例えば、最終値型予測の場合では、値予測処理部６０２は、デバイスのアドレス毎に保存された書き込み値および復帰値をそれぞれ予測値として取得する。
【０１１９】
そして、値予測処理部６０２は、取得した予測値とデバイスへのアクセスにより読み出された読み出し値および復帰値とを比較し、両者の値が一致して予測が当たっているか否かを判定する。
【０１２０】
図１４に示すように、値予測フェーズではさらに、関数管理部６０３は、ハードウェアリーダ６０１ａの指示に従って、デバイスへのアクセス実行結果を用いて後処理実行関数を実行し、デバイスアクセスの後処理を行う。
【０１２１】
なお、図１３および図１４を示して前述した一例とは異なり、最適な予測を試行するために、値予測処理部６０２は、アクセス対象であるデバイスのタイプに最も有効な値予測戦略をまず用いて値予測を行い、かかる値予測戦略では高い予測精度が得られない場合にはその他の値予測戦略を次に用いて値予測を行ってもよい。
【０１２２】
値予測フェーズにおいてある程度高い値予測精度が得られる場合には、情報収集フェーズに移行する。
【０１２３】
情報収集フェーズでは、デバイスアクセスの後処理実行関数を最適化するための情報収集が行なわれる。
【０１２４】
図１５は、情報収集フェーズにおけるＣＰＵの動作説明図である。
図１５に示すように、値定数化コード生成処理部６０４に含まれるコードジェネレータ６０４ａと称されるクラスにより、後処理実行関数のソースコードの値定数化が実行される。
【０１２５】
値定数化とは、図１６に示すような後処理実行関数の引数を図１７に示すように予測値に基づき定数化することを指す。
【０１２６】
コードジェネレータ６０４ａにより値定数化された後処理実行関数のソースコードは、図１５に示すように、最適化およびプロファイルオプション付きでコンパイラ６０５によりコンパイルされる。コンパイルされた後処理実行関数は、デバイスアクセスの後処理実行関数を最適化するための情報収集用関数として動的にロードされる。
【０１２７】
情報収集用関数は、情報収集フェーズに移行後デバイスへのアクセスが行なわれる度に、関数管理部６０２により実行される。そして、実行された情報収集用関数のプロファイリングの結果に基づいて、値定数化コード生成処理部６０４による後処理実行関数のソースコードの値定数化とコンパイラ６０５によるコンパイルとが再度行なわれる。
【０１２８】
情報収集関数を所定回数実行して情報収集が完了すると、投機実行フェーズに移行する。
【０１２９】
投機実行フェーズでは、デバイスアクセスの後処理が予測値に基づき投機実行される。
図１８は、投機実行フェーズにおけるＣＰＵの動作説明図である。
【０１３０】
図１８に示すように、ハードウェアリーダ６０１ａからの値予測の指示に従い、値予測処理部６０２は、アクセス対象のデバイスの読み出し値および復帰値の値予測を行なう。
【０１３１】
関数管理部６０３は、値予測により生成され取得された予測値に基づき、情報収集フェーズにおいて最適化された最適化済み関数を取得する。そして、関数管理部６０３は、値予測管理部６０２による投機実行の指示に従い、取得した最適化済み関数を投機実行する。
【０１３２】
このように、投機実行フェーズでは、プロファイリングの結果と予測値を用いて最適化された最適化済み関数がロードされる。したがって、実施形態に従ったファームウェアを実行するＣＰＵによれば、デバイスアクセスの後処理の投機実行を高速に行うことが可能である。
【０１３３】
関数管理部６０３による投機実行により得られた実行結果は、出力データペンディング処理部６０６により一時保管される。ハードウェアリーダ６０１ａによるデバイスへのアクセスが完了すると、値予測処理部６０２は、デバイスへのアクセス実行結果と予測値とを比較する。
【０１３４】
比較の結果、両者の値が一致して予測が当たったと判定する場合には、ハードウェアアクセス処理部６０１は、投機実行により得られた実行結果に基づきデバイスアクセスの後処理の内容を確定し、確定した内容をメモリやファイルなどへ反映する。
【０１３５】
一方、比較の結果、両者の値が一致せず予測がはずれたと判定する場合には、出力データペンディング処理部６０６は、一時保管した投機実行により得られた実行結果を破棄する。そして、ハードウェアアクセス処理部６０１は、デバイスへのアクセス実行結果を用いてデバイスアクセスの後処理を通常実行するように関数管理部６０３に指示する。ハードウェアアクセス処理部６０１は、関数管理部６０３によるデバイスアクセスの後処理の通常実行の結果をメモリやファイルなどへ反映する。
【０１３６】
このように、実施形態に従えば、デバイスへのアクセス実行結果に対する値予測が成功した場合には、デバイスへのアクセスと並行してデバイスアクセスの後処理を実行できるため、ハードウェアアクセス処理の実行時間を短縮することができる。
【０１３７】
また、実施形態に従えば、デバイスアクセスの後処理を投機実行することにより、デバイスへのアクセス中にデバイスからの応答待ち状態にあるＣＰＵ資源を有効に使用することができる。
【０１３８】
そして、実施形態に従えば、デバイスアクセスの後処理の投機実行の結果を予測結果の検証後にメモリやファイルなどに反映するため、値予測失敗時のリカバリ処理は不要であり、オーバヘッドを少なくすることができる。
【０１３９】
図１９は、実施形態に従ったファームウェアを実行するＣＰＵのハードウェアアクセス処理の実行フェーズの遷移図である。
【０１４０】
ハードウェアアクセス処理部６０１により当該デバイスへのアクセスが初めて行なわれる場合には、値予測処理部６０２内の値履歴テーブルおよび復帰値履歴テーブルには、当該デバイスのエントリは登録されていない。そこで、値予測処理部６０２は、当該デバイスのアドレスをキーとするエントリを値履歴テーブルおよび復帰値履歴テーブルに追加する。このとき、実施形態に従ったファームウェアを実行するＣＰＵ１０１は、値予測不可状態ｓｔａｔｅ１９０１にある。
【０１４１】
そこで、値予測フェーズにおいて、値予測処理部６０２による値予測と、関数管理部６０３によるデバイスアクセスの後処理の通常実行とが、ハードウェアアクセス処理部６０１によるデバイスへのアクセスが行なわれる度に行なわれる。
【０１４２】
値予測フェーズにおいて、デバイスへのアクセス実行結果に対する値予測が所定回数のＮ回成功すると、値予測処理部６０２内の値履歴テーブルおよび復帰値履歴テーブルに保存される予測精度は、予測不可から予測可に変更される。また、値定数化コード生成処理部６０４により後処理実行関数のソースコードが値定数化され、値定数化された後処理実行関数のソースコードは、コンパイラ６０５により最適化およびプロファイルオプション付きでコンパイルされる。コンパイルされた後処理実行関数は、デバイスアクセスの後処理実行関数を最適化するための情報収集用関数として動的にロードされる。そして、実施形態に従ったファームウェアを実行するＣＰＵ１０１は、値予測不可状態ｓｔａｔｅ１９０１から値予測可能状態ｓｔａｔｅ１９０２に遷移する。
【０１４３】
そこで、情報収集フェーズにおいて、値予測処理部６０２による値予測と、関数管理部６０３による、情報収集用関数を実行することによる情報収集とが、ハードウェアアクセス処理部６０１によるデバイスへのアクセスが行なわれる度に行われる。
【０１４４】
情報収集フェーズにおいて、デバイスへのアクセス実行結果に対する値予測が所定回数のＮ回成功し、かつ情報収集が完了すると、値予測処理部６０２内の値履歴テーブルおよび復帰値履歴テーブルに保存される予測精度は、予測可から投機実行可に変更される。また、値定数化コード生成処理部６０４による後処理実行関数のソースコードの値定数化と、コンパイラ６０５による値定数化された後処理実行関数のソースコードのコンパイルとが情報収集の結果に基づいて再度行なわれ、最適化された後処理実行関数が生成される。そして、実施形態に従ったファームウェアを実行するＣＰＵ１０１は、値予測可能状態ｓｔａｔｅ１９０２から投機実行可能状態ｓｔａｔｅ１９０３に遷移する。
【０１４５】
そこで、投機実行フェーズにおいて、値予測処理部６０２による値予測と、関数管理部６０３によるデバイスアクセスの後処理の投機実行とが、ハードウェアアクセス処理部６０１によるデバイスへのアクセスが行なわれる度に行われる。
【０１４６】
投機実行フェーズにおいて、デバイスへのアクセス実行結果に対する値予測が所定回数のＭ回はずれると、値予測処理部６０２内の値履歴テーブルおよび復帰値履歴テーブルに保存される予測精度は、投機実行可から予測不可に変更される。そして、実施形態に従ったファームウェアを実行するＣＰＵ１０１は、投機実行可能状態ｓｔａｔｅ１９０３から値予測不可状態ｓｔａｔｅ１９０１に遷移する。
【０１４７】
そこで、値予測フェーズにおいて、値予測処理部６０２による値予測と、関数管理部６０３によるデバイスアクセスの後処理の通常実行とが、ハードウェアアクセス処理部６０１によるデバイスへのアクセスが行なわれる度に行われる。
【０１４８】
図２０は、実施形態に従ったファームウェアを実行するＣＰＵのデバイスへのアクセス開始からデバイスアクセスの後処理までの処理フロー図である。
【０１４９】
ハードウェアアクセス処理部６０１は、デバイスへのアクセスを開始すると、アクセス対象のデバイスに対する読み出し値および復帰値の予測を値予測処理部６０２に指示する（ｓｔｅｐ２００１）。
【０１５０】
値予測の指示を受けた値予測処理部６０２は、アクセス対象のデバイスの値履歴テーブルおよび復帰値履歴テーブルを参照する（ｓｔｅｐ２００２）。そして、値予測処理部６０２は、アクセス対象のデバイスに対するハードウェアアクセス処理が、値予測フェーズ、情報収集フェーズ、および投機実行フェーズの何れの実行フェーズにあるかを、値履歴テーブルおよび復帰値履歴テーブル内の予測精度を参照して判定する（ｓｔｅｐ２００３）。
【０１５１】
まず、ｓｔｅｐ２００３において値履歴テーブルおよび復帰値履歴テーブル内の予測精度が予測不可である場合、値予測処理部６０２は、アクセス対象のデバイスに対するハードウェアアクセス処理が値予測フェーズにあると判定し、ｓｔｅｐ２００４の処理に進む。
【０１５２】
ｓｔｅｐ２００４では、ハードウェアアクセス処理部６０１によるデバイスへのアクセスが実行された後に、関数管理部６０３は、デバイスへのアクセス実行結果と通常実行用関数とを用いてデバイスアクセスの後処理を実行する。そして、ハードウェアアクセス処理部６０１は、デバイスアクセスの後処理の実行結果をメモリやファイルなどに反映する。
【０１５３】
ｓｔｅｐ２００５では、値予測処理部６０２は、値履歴テーブル内の読み出し値もしくは書き込み値および復帰値履歴テーブル内の復帰値に基づき生成し取得した予測値と、ハードウェアアクセス処理部６０１によるデバイスへのアクセス実行結果とを比較する。そして、値予測処理部６０２は、比較の結果、デバイスへのアクセス実行結果に対する予測が当たったか否かを判定する（ｓｔｅｐ２００６）。
【０１５４】
ｓｔｅｐ２００６において両者の値が一致せず予測がはずれたと判定する場合には、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１０）。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１５５】
一方、ｓｔｅｐ２００６において両者の値が一致して予測が当たったと判定する場合には、値予測処理部６０２は、所定回数のＮ回連続で予測が当たったか否かを判定する（ｓｔｅｐ２００７）。
【０１５６】
ｓｔｅｐ２００７において所定回数のＮ回連続で予測が当たったのではないと判定する場合には、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１０）。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１５７】
一方、ｓｔｅｐ２００７において所定回数のＮ回連続で予測が当たったと判定する場合には、値定数化コード生成処理部６０４は、予測値を埋め込んだ後処理実行関数のソースコードを生成する（ｓｔｅｐ２００８）。また、コンパイラ６０５は、値定数化コード生成処理部６０４により生成された後処理実行関数のソースコードを、最適化およびプロファイルオプション付きでコンパイルする。
【０１５８】
ｓｔｅｐ２００８においてコンパイラ６０５によりコンパイルされた後処理実行関数のコードは、情報収集用関数として動的にロードされ、情報収集フェーズに遷移した後のデバイスアクセスの後処理の実行時に使用される（ｓｔｅｐ２００９）。
【０１５９】
値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１０）。この更新により、値履歴テーブルおよび復帰値履歴テーブル内の予測精度は、予測不可から予測可に変更される。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１６０】
次に、ｓｔｅｐ２００３において値履歴テーブルおよび復帰値履歴テーブル内の予測精度が予測可である場合、値予測処理部６０２は、アクセス対象のデバイスに対するハードウェアアクセス処理が情報収集フェーズにあると判定し、ｓｔｅｐ２０１１の処理に進む。
【０１６１】
ｓｔｅｐ２０１１では、ハードウェアアクセス処理部６０１によりデバイスへのアクセスが実行された後、関数管理部６０３は、動的にロードされた情報処理用関数を用いてデバイスアクセスの後処理を実行する。情報収集用関数を実行することにより、分岐情報などの各種情報が収集され、情報処理用コードのプロファイリングが行われる。
【０１６２】
ｓｔｅｐ２０１２では、値予測処理部６０２は、値履歴テーブル内の読み出し値もしくは書き込み値および復帰値履歴テーブル内の復帰値に基づき生成し取得した予測値と、ハードウェアアクセス処理部６０１によるデバイスへのアクセス実行結果とを比較する。そして、値予測処理部６０２は、比較の結果、デバイスへのアクセス実行結果に対する予測が当たったか否かを判定する（ｓｔｅｐ２０１３）。
ｓｔｅｐ２０１３において両者の値が一致せず予測がはずれたと判定する場合には、値予測処理部６０２は、所定回数のＭ回連続で予測がはずずれたか否かを判定する（ｓｔｅｐ２０１４）。
【０１６３】
ｓｔｅｐ２０１４において所定回数のＭ回連続で予測がはずれたのではないと判定する場合には、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１９）。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１６４】
一方、ｓｔｅｐ２０１４において所定回数のＭ回連続で予測がはずずれたと判定する場合には、次回のデバイスへのアクセス処理時に値予測フェーズに遷移して、値予測を実行する必要がある（ｓｔｅｐ２０１５）。
【０１６５】
そこで、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１９）。この更新により、値履歴テーブルおよび復帰値履歴テーブル内の予測精度は、予測可から予測不可に変更される。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１６６】
ｓｔｅｐ２０１３において両者の値が一致して予測が当たったと判定する場合には、値予測処理部６０２は、所定回数のＮ回連続で予測が当たったか否かを判定する（ｓｔｅｐ２０１６）。
【０１６７】
ｓｔｅｐ２０１６において所定回数のＮ回連続で予測が当たったのではないと判定する場合には、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１９）。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１６８】
一方、ｓｔｅｐ２０１６において所定回数のＮ回連続で予測が当たったと判定する場合には、高い予測精度で値予測が可能であるため、デバイスアクセスの後処理を値予測に基づき投機実行できるといえる。そこで、値定数化コード生成処理部６０４は、予測値を埋め込んだ後処理実行関数のソースコードを生成する（ｓｔｅｐ２０１７）。また、コンパイラ６０５は、値定数化コード生成処理部６０４により生成された後処理実行関数のソースコードを、プロファイリングの結果に基づきコンパイルする。
【０１６９】
ｓｔｅｐ２０１７においてコンパイラ６０５によりコンパイルされた後処理実行関数のコードは、最適化済み関数としてロードされ、投機実行フェーズに遷移した後のデバイスアクセスの後処理の実行時に使用される（ｓｔｅｐ２０１８）。
【０１７０】
値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１９）。この更新により、値履歴テーブルおよび復帰値履歴テーブル内の予測精度は、予測可から投機実行可に変更される。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１７１】
ｓｔｅｐ２００３において値履歴テーブルおよび復帰値履歴テーブル内の予測精度が投機実行可である場合、値予測処理部６０２は、アクセス対象のデバイスに対するハードウェアアクセス処理が投機実行フェーズにあると判定し、ｓｔｅｐ２０２０の処理に進む。
【０１７２】
ｓｔｅｐ２０２０では、値予測処理部６０２は、値履歴テーブル内の読み出し値または書き込み値および復帰値履歴テーブル内の復帰値に基づき、予測値を生成し取得する。関数管理部６０３は、値予測処理部６０２により取得された予測値に基づき、動的にロードされた最適化済み関数を取得し、取得した最適化済み関数を用いてデバイスアクセスの後処理を投機実行する。出力データペンディング処理部６０４は、関数管理部６０３による投機実行の結果を保持する。
【０１７３】
ハードウェアアクセス処理部６０１によるデバイスへのアクセス実行後、値予測処理部６０２は、予測値とデバイスへのアクセス実行結果とを比較する（ｓｔｅｐ２０２１）。そして、値予測処理部６０２は、比較の結果、デバイスへのアクセス実行結果に対する予測が当たったか否かを判定する（ｓｔｅｐ２０２２）。
【０１７４】
ｓｔｅｐ２０２２において両者の値が一致して予測が当たったと判定する場合には、出力データペンディング処理部６０６により保持されている投機実行の結果をメモリやファイルなどに反映する（ｓｔｅｐ２０２３）。また、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０２７）。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１７５】
一方、ｓｔｅｐ２０２２において両者の値が一致せず予測がはずれたと判定する場合には、出力データペンディング処理部６０４は、保持する投機実行の結果を破棄する。また、関数管理部６０３は、デバイスへのアクセス実行結果と通常実行関数とを用いて、デバイスアクセスの後処理を実行する（ｓｔｅｐ２０２４）。
【０１７６】
そして、値予測処理部６０２は、所定回数のＭ回連続で予測がはずずれたか否かを判定する（ｓｔｅｐ２０２５）。
【０１７７】
ｓｔｅｐ２０２５において所定回数のＭ回連続で予測がはずれたのではないと判定する場合には、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブル内をデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１９）。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１７８】
一方、ｓｔｅｐ２０２５において所定回数のＭ回連続で予測がはずずれたと判定する場合には、次回のハードウェアアクセス処理時に値予測フェーズに遷移して、値予測を実行する必要がある（ｓｔｅｐ２０１５）。
【０１７９】
そこで、値予測処理部６０２は、値履歴テーブルおよび復帰値履歴テーブルをデバイスへのアクセス実行結果に基づき更新する（ｓｔｅｐ２０１９）。この更新により、値履歴テーブルおよび復帰値履歴テーブル内の予測精度は、投機実行可から予測不可に変更される。そして、一連のハードウェアアクセス処理を終了する（ｓｔｅｐ２０２８）。
【０１８０】
本発明の実施形態に従ったファームウェアの一例をさらに詳述する。
図２１は、本発明の実施形態に従ったファームウェアのクラス図である。
【０１８１】
図２１に示したファームウェアは、ＣＰＵ１０１により実行される。
図２１に示すように、本発明の実施形態に従ったファームウェアのスレッドには、ハードウェアアクセススレッド２１０１、値予測スレッド２１０２、および投機実行スレッド２１０３がある。
【０１８２】
ハードウェアアクセススレッド２１０１は、アクセス対象のデバイスへのアクセスを行なうスレッドである。値予測スレッド２１０２は、デバイスへのアクセス実行結果に対する値予測を行なうスレッドである。投機実行スレッド２１０３は、デバイスアクセスの後処理を投機実行するスレッドである。
【０１８３】
なお、値予測スレッド２１０２および投機実行スレッド２１０３は、ファームウェアを実行するハードウェアに応じて多重度を増やしてもよい。
【０１８４】
図２１に示すように、ハードウェアアクセススレッド２１０１には、クラスとして、ハードウェアアクセッサ２１０１ａ、ハードウェアリーダ２１０１ｂ、およびハードウェアライタ２１０１ｃが含まれる。
【０１８５】
ハードウェアアクセッサ２１０１ａは、デバイスへのアクセスを行なうクラスである。
図２１に示すように、ハードウェアアクセッサ２１０１ａは、属性として、ファイルディスクリプタ、ハンドラ管理、ハンドラ・ソースファイルパス、後処理実行結果、およびデバイスアクセス実行結果を有する。
【０１８６】
ファイルディスクリプタは、デバイスへのアクセス時のドライバの呼び出しに使用される。ファイルディスクリプタは、int型であり、その可視性は、privateである。
【０１８７】
ハンドラ管理は、ハンドラ管理部２１０３ｂのインスタンスへのポインタ変数である。ハンドラ管理は、値予測フェーズにおいてデバイスアクセスの後処理の実行指示を行なうために保持される。ハンドラ管理の可視性は、privateである。
【０１８８】
ハンドラ・ソースファイルパスは、デバイスアクセスの後処理を実行するハンドラのソースコードのファイルパスである。ハンドラ・ソースファイルパスは、最適化コードの生成およびコンパイル時に使用される。ハンドラ・ソースファイルパスは、string型であり、その可視性は、privateである。
【０１８９】
後処理実行結果は、デバイスアクセスの後処理の実行結果を保持するポインタ変数である。後処理実行結果の可視性は、privateである。
【０１９０】
デバイスアクセス実行結果は、デバイスへのアクセス実行結果を保持するポインタ変数である。デバイスアクセス実行結果の可視性は、privateである。
【０１９１】
図２１に示すように、ハードウェアアクセッサ２１０１ａは、メソッドとして、ターゲットアドレス取得、ハンドラ取得、後処理実行結果設定、および実行結果取得を有する。
【０１９２】
ターゲットアドレス取得は、アクセス対象のデバイスのアドレスを取得するメソッドである。ターゲットアドレス取得の引数は、ターゲットアドレスであり、戻り値は、voidである。ターゲットアドレス取得の可視性は、publicである。
【０１９３】
ハンドラ取得は、ハンドラ管理部２１０３ｂのインスタンスへのポインタを取得するメソッドである。ハンドラ取得の引数は、voidであり、戻り値は、ポインタ変数であるハンドラ管理である。ハンドラ取得の可視性は、publicである。
【０１９４】
後処理実行結果設定は、デバイスアクセスの後処理の実行結果を設定するメソッドである。後処理実行結果設定の引数は、ポインタ変数である後処理実行結果データであり、戻り値は、voidである。後処理実行結果設定の可視性は、publicである。
【０１９５】
実行結果取得は、デバイスへのアクセス実行結果を取得するメソッドである。実行結果取得の引数は、ポインタ変数であるデバイスアクセス実行結果データであり、戻り値は、voidである。実行結果取得の可視性は、publicである。
【０１９６】
ハードウェアリーダ２１０１ｂおよびハードウェアライタ２１０１ｃは、ハードウェアアクセッサ２１０１ａを継承した、ハードウェアアクセッサ２１０１ａのサブクラスである。
【０１９７】
ハードウェアリーダ２１０１ｂおよびハードウェアライタ２１０１ｃは、本発明の実施形態に従ったハードウェアアクセス処理モジュールを利用する利用者により作成される。
【０１９８】
ハードウェアリーダ２１０１ｂは、メソッドとしてreadを有する。
readは、デバイスからの読み出し処理を行うメソッドでる。readの引数および戻り値はvoidである。readの可視性は、publicである。
【０１９９】
ハードウェアリーダ２１０１ｃは、メソッドとしてwriteを有する。
writeは、デバイスへの書き込み処理を行うメソッドである。writeの引数および戻り値はvoidである。writeの可視性は、publicである。
【０２００】
図２１に示すように、値予測スレッド２１０２には、クラスとして、値予測要求受信部２１０２ａ、値予測管理部２１０２ｂ、予測戦略部２１０２ｃ、センサタイプ向け予測部２１０２ｄ、記憶素子タイプ予測部２１０２ｅ、読み出し値履歴部２１０２ｆ、書き込み値履歴部２１０２ｇ、および復帰値履歴部２１０２ｈが含まれる。
【０２０１】
値予測要求受信部２１０２ａは、値予測スレッドへの要求を受信するクラスである。図２１に示すように、値予測要求受信部２１０２ａとハードウェアアクセッサ２１０１ａとの間には、依存関係がある。
【０２０２】
値予測管理部２１０２ｂは、値予測機構の管理を行うクラスである。図２１に示すように、値予測管理部２１０２ｂと値予測要求受信部２１０２ａとの間には、依存関係がある。
【０２０３】
図２１に示すように、値予測管理部２１０２ｂは、メソッドとして、予測状態取得および予測結果検証を有する。
【０２０４】
予測状態取得は、予測精度を取得するメソッドである。予測状態取得の引数は、ポインタ変数であるハードウェアアクセッサであり、戻り値はvoidである。予測状態取得の可視性は、publicである。投機実行フェーズにおいては、予測状態取得は、投機実行スレッドへの投機実行指示を行なう。
【０２０５】
予測結果検証は、デバイスへのアクセスにより取得された実行結果と、デバイスへのアクセス実行結果に対する予測値とを比較検証するメソッドでる。予測結果検証の引数は、ポインタ変数であるハードウェアアクセッサであり、戻り値はvoidである。予測結果検証の可視性は、publicである。
【０２０６】
予測戦略部２１０２ｃは、値予測管理部２１０２ｂの一部であり、図２１に示すように、予測戦略部２１０２ｃと値予測管理部２１０２ｂとの間には、集約の関係がある。
【０２０７】
予測戦略部２１０２ｃは、アクセス対象のデバイスのタイプ毎の予測ポリシーに基づいた予測戦略を実行する抽象クラスである。
【０２０８】
図２１に示すように、予測戦略部２１０２ｃは、メソッドとして、予測状態取得、値予測実行、および予測結果検証を有する。
【０２０９】
予測状態取得は、予測精度を取得するメソッドである。
値予測実行は、値予測を行なうメソッドである。値予測実行の引数は、ポインタ変数であるハードウェアアクセッサであり、戻り値はvoidである。値予測実行の可視性は、publicである。
【０２１０】
予測結果検証は、デバイスへのアクセスにより取得された実行結果と、デバイスへのアクセス実行結果に対する予測値とを比較検証するメソッドである。値履歴テーブルおよび復帰値履歴テーブル上の予測精度は、予測結果検証の検証結果に基づいて更新される。
【０２１１】
センサタイプ向け予測部２１０２ｄおよび記憶素子タイプ予測部２１０２ｅは、図２１に示すように、予測戦略部２１０２ｃのサブクラスである。
【０２１２】
センサタイプ向け予測部２１０２ｄおよび記憶素子タイプ予測部２１０２ｅは、アクセス対象のデバイスのタイプ毎の予測ポリシーに基づいた個別の予測処理を行うクラスである。
【０２１３】
すなわち、センサタイプ向け予測部２１０２ｄは、センサタイプ向けの予測処理を実装する。また、記憶素子タイプ向け予測部２１０２ｅは、記憶素子タイプ向けの予測処理を実装する。
【０２１４】
読み出し値履歴部２１０２ｆは、復帰値履歴部２１０２ｈと共にセンサタイプ向け予測部２１０２ｄのサブクラスである。書き込み値履歴部２１０２ｇは、復帰値履歴部２１０２ｈと共にセンサタイプ向け予測部２１０２ｄのサブクラスである。
【０２１５】
読み出し値履歴部２１０２ｆは、アクセスによりデバイスから読み出された読み出し値の履歴を保持するクラスである。
【０２１６】
読み出し値履歴部２１０２ｆは、属性として、履歴を有する。履歴は、アクセス対象のデバイスアドレスであるターゲットアドレスでハッシュされており、読み出し値および予測精度が保持される。履歴の可視性は、privateである。
【０２１７】
書き込み値履歴部２１０２ｇは、アクセスによりデバイスに書き込まれた書き込み値の履歴を保持するクラスである。
【０２１８】
書き込み値履歴部２１０２ｇは、属性として、履歴を有する。履歴は、アクセス対象のデバイスアドレスであるターゲットアドレスでハッシュされており、書き込みデータおよび予測精度が保持される。履歴の可視性は、privateである。
【０２１９】
復帰値履歴部２１０２ｈは、デバイスへのアクセスに対する復帰値を保持するクラスである。復帰値履歴部２１０２ｈは、属性として履歴を有する。履歴には、復帰値および予測精度が保持されており、履歴の可視性は、privateである。
【０２２０】
図２１に示すように、投機実行スレッド２１０３には、クラスとして、投機実行要求受信部２１０３ａ、ハンドラ管理部２１０３ｂ、およびハンドラ２１０３ｃが含まれる。
【０２２１】
投機実行要求受信部２１０３ａは、投機実行スレッドへの要求を受信するクラスである。図２１に示すように、投機実行要求受信部２１０３ａとハードウェアアクセッサ２１０１ａとの間には、依存関係がある。
【０２２２】
ハンドラ管理部２１０３ｂは、デバイスアクセスの後処理を実行するハンドラの管理を行うクラスである。図２１に示すように、ハンドラ管理部２１０３ｂと投機実行要求受信部２１０３ａとの間には、依存関係がある。
【０２２３】
図２１に示すように、ハンドラ管理部２１０３ｂは、属性として、ハンドラおよび最適化済みハンドラマップを有する。
【０２２４】
ハンドラは、デバイスアクセスの後処理を実行するハンドラの呼び出しに使用されるポインタ変数であり、その可視性は、privateである。
【０２２５】
最適化済みハンドラマップは、最適化済みまたは情報収集用のハンドラを保持する属性であり、その可視性は、privateである。最適化済みハンドラマップは、予測値と予測値に対応する、ポインタ変数であるハンドラとを保持する。
【０２２６】
図２１に示すように、ハンドラ管理部２１０３ｂは、メソッドとして、後処理実行および投機実行を有する。
【０２２７】
後処理実行は、デバイスへのアクセス実行結果を用いて、デバイスアクセスの後処理の実行を行なうメソッドである。後処理実行の引数は、デバイスへのアクセス実行結果であるパラメータデータであり、戻り値は、voidである。後処理実行の可視性は、publicである。
【０２２８】
投機実行は、デバイスアクセスの後処理の投機実行を行なうメソッドである。投機実行の引数は、デバイスへのアクセス実行結果に対する予測値であるパラメータデータであり、戻り値は、voidである。投機実行の可視性は、publicである。
【０２２９】
ハンドラ２１０３ｃは、デバイスアクセスの後処理の実行関数である。図２１に示すように、ハンドラ２１０３ｃとハンドラ管理部２１０３ｂの間は、コンポジション関係がある。
【０２３０】
ハンドラ２１０３ｃは、本発明の実施形態に従ったハードウェアアクセス処理モジュールを利用する利用者により作成される。
【０２３１】
ハンドラ２１０３ｃは、メソッドとして実行を有する。実行は、デバイスアクセスの後処理を実行する。実行の引数は、デバイスへのアクセス実行結果またはその予測値であるパラメータデータであり、戻り値はvoidである。実行の可視性は、publicである。
【０２３２】
次に、図２１に示したファームウェアによる処理シーケンスを説明する。
なお、以下で説明する処理シーケンスには、一例にすぎず、必ずしも時系列的に処理されなくてもよく、並列的にもしくは個別に実行されてもよい処理が含まれる。また、以下で記載するクラス名は、理がない限り、クラスのインスタンスを指す。
【０２３３】
まず、値予測フェーズにおける処理シーケンスを説明する。
図２２は、値予測フェーズにおけるスレッド間の相互作用図である。
【０２３４】
値予測フェーズでは、ハードウェアアクセススレッド２１０１および値予測スレッド２１０２が協調して動作する。
【０２３５】
図２２に示すように、値予測フェーズでは、ハードウェアアクセススレッド２１０１においてアクセス対象のデバイスのドライバがＯＳ経由で起動され、デバイスへのアクセスが行なわれる（Ｍ２２１１）。
【０２３６】
また、値予測フェーズでは、ハードウェアアクセススレッド２１０１におけるデバイスへのアクセスと並行して、値予測スレッド２１０２における値予測が行なわれる。
【０２３７】
すなわち、ハードウェアアクセススレッド２１０１から値予測スレッド２１０２に、デバイスへのアクセス開始前にデバイスへのアクセス開始が通知される（Ｍ２２１０）。そして、値予測スレッド２１０２において、デバイスへのアクセス実行結果に対する値予測が開始される。
【０２３８】
値予測スレッド２１０２では、デバイスへのアクセス実行結果に対する値予測が可能か否かの予測状態の確認（Ｍ２２１２）と、予測値の計算（Ｍ２２１３）とが行なわれる。
【０２３９】
ハードウェアアクセススレッド２１１０におけるデバイスへのアクセスが完了すると、ハードウェアアクセススレッド２１０１から値予測スレッド２１０２にデバイスへのアクセス完了が通知される（Ｍ２２２０）。
【０２４０】
値予測スレッド２１０２では、予測値とデバイスへのアクセスにより読み出された値とを比較して、予測が当たったか否かの予測結果の検証が行なわれる（Ｍ２２２１）。
【０２４１】
値予測スレッド２１０２における予測結果の検証が行なわれた後、ハードウェアアクセススレッド２１０１においてデバイスアクセスの後処理が行われる。
【０２４２】
図２３は、値予測フェーズにおける処理シーケンス図である。図２３には、センサタイプのデバイスに対するハードウェアアクセス処理の一例が示されている。
【０２４３】
まず、デバイスへのアクセス要求をハードウェアリーダ２１０１ｂが受けると（Ｍ２３０１）、ハードウェアリーダ２１０１ｂは、デバイスへのアクセス開始を値予測要求受信部２１０２ａに通知する（Ｍ２３０２）。
【０２４４】
値予測要求受信部２１０２ａは、予測精度の取得を値予測管理部２１０２ｂに要求し（Ｍ２３０３）、要求を受けた値予測管理部２１０２ｂは、予測精度の取得をセンサタイプ向け予測部２１０２ｄに要求する（Ｍ２３０４）。
【０２４５】
また、ハードウェアリーダ２１０１ｂは、デバイスへのアクセスを開始する（Ｍ２３０５）。
【０２４６】
図２３に示したハードウェアリーダ２１０１ｂの生存線に見られるように、ハードウェアリーダ２１０１ｂは、デバイスへのアクセスを開始後に非動作状態になる。実施形態では、ハードウェアリーダ２１０１ｂがデバイスへのアクセスを開始後に非動作状態になった間に、デバイスへのアクセス実行結果に対する値予測を値予測スレッドにおいて行なう。
【０２４７】
予測精度の取得の要求を受けたセンサタイプ向け予測部２１０２ｄは、アクセス対象のデバイスのアドレスであるターゲットアドレスをハードウェアリーダ２１０１ｂから取得する（Ｍ２３０６）。
【０２４８】
センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた予測精度を読み出し値履歴部２１０２ｆから取得する（Ｍ２３０７）。また、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた予測精度を復帰値履歴部２１０２ｈから取得する（Ｍ２３０８）。図２３に示した一例では、取得される予測精度は、予測不可である。
【０２４９】
値予測管理部２１０２ｂは、値予測の実行をセンサタイプ向け予測部２１０２ｄに要求する（Ｍ２３０９）。要求を受けたセンサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた読み出し値を予測値として読み出し値履歴部２１０２ｆから取得する（Ｍ２３１０）。また、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた復帰値を予測値として復帰値履歴部２１０２ｈから取得する（Ｍ２３１１）。
【０２５０】
ハードウェアリーダ２１０１ｂは、デバイスへのアクセスを完了すると（Ｍ２３１２）、デバイスへのアクセス完了を値予測要求受信部２１０２ａに通知する（Ｍ２３１３）。通知を受けた値予測要求受信部２１０２ａは、予測の結果検証を値予測管理部２１０３に要求する（Ｍ２３１４）。
【０２５１】
値予測管理部２１０３は、デバイスへのアクセス実行結果の取得をハードウェアリーダ２１０１ｂに要求する（Ｍ２３１５）。そして、値予測管理部２１０３は、予測値とデバイスへのアクセス実行結果とを比較して予測の結果の検証をセンサタイプ向け予測部２１０２ｄに要求する（Ｍ２３１６）。
【０２５２】
予測結果の検証の結果、センサタイプ向け予測部２１０２ｄは、予測値とデバイスへのアクセス実行結果とが一致しないため、予測が失敗したと判定したと仮定する。あるいは、センサタイプ向け予測部２１０２ｄは、予測値とデバイスへのアクセス実行結果とが一致して予測が成功したが、予測の成功回数が所定回数に満たないと判定したと仮定する。
【０２５３】
これらの判定結果の場合、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスをハードウェアリーダ２１０１ｂから取得する（Ｍ２３１７）。そして、センサタイプ向け予測部２１０２ｄは、ターゲトアドレスでハッシュされた読み出し値履歴部２１０２ｆの読み出し値および予測精度を、予測結果の検証結果に基づき更新する（Ｍ２３１８）。また、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた復帰値履歴部２１０２ｆの復帰値および予測精度を予測結果の検証結果に基づき更新する（Ｍ２３１９）。
【０２５４】
ハードウェアリーダ２１０１ｂは、デバイスへのアクセス実行結果に基づくデバイスアクセスの後処理の実行をハンドラ管理部２１０３に要求する（Ｍ２３２０）。要求を受けたハンドラ管理部２１０３ｂは、デバイスへのアクセス実行結果に基づきデバイスアクセスの後処理を実行する通常実行用のハンドラを実行する（Ｍ２３２１）。
【０２５５】
通常実行用ハンドラが実行されると、ハードウェアリーダ２１０１ｂは、デバイスアクセスの後処理の実行結果の設定要求を受ける（Ｍ２３２２）。ハードウェアリーダ２１０ｂは、デバイスアクセスの後処理の実行結果をファイルやメモリなどに設定する（Ｍ２１２３）。
【０２５６】
次に、情報収集フェーズにおける処理シーケンスを説明する。
図２４は、情報収集フェーズにおけるスレッド間の相互作用図である。図２２と同じメッセージに対しては、図２４中のメッセージにも同じ参照符号が付されている。
【０２５７】
図２４に示すように、Ｍ２３２１における予測結果の検証の結果、デバイスへのアクセス実行結果に対する値予測が所定回数成功し、値予測が可能と判定された場合には、値予測フェーズから情報収集フェーズへと遷移する。
【０２５８】
すなわち、情報収集フェーズでは、デバイスアクセスの後処理を実行するハンドラを最適化するために必要な情報収集を行う情報収集モジュールの作成が値予測スレッド２１０２から投機実行スレッド２１０３に指示される（Ｍ２４２０）。
【０２５９】
投機実行スレッド２１０３では、予測値を埋め込んだハンドラのソースコードの生成（Ｍ２４２１）、生成したソースコードの最適化および情報収集オプション付きコンパイル（Ｍ２４２２）、およびコンパイルしたハンドラの登録が、情報収集スレッド２１０２と協働して行われる（Ｍ２４２３）。登録された情報収集用ハンドラは、デバイスアクセスの後処理の次回実行時に使用される。
【０２６０】
情報収集用ハンドラが実行されて情報収集が完了すると、図２４に示したＭ２４２０〜Ｍ２４２３と同様の動作により、最適化されたハンドラが作成される。
【０２６１】
図２５は、情報収集フェーズにおける処理シーケンス図である。図２５には、センサタイプのデバイスに対するハードウェアアクセス処理の一例が示されている。また、図２３と同じメッセージに対しては、図２５中のメッセージにも同じ参照符号が付されている。
【０２６２】
図２４を示して前述したように、デバイスへのアクセス実行結果に対する値予測が所定回数成功し、値予測が可能と判定された場合に、値予測フェーズから情報収集フェーズへと遷移する。
【０２６３】
情報収集フェーズへの移行後にハードウェアリーダ２１０１ｂにより実行されたデバイスへのアクセスが完了すると（Ｍ２３１２）、センサタイプ向け予測部２１０２ｄは、予測値とデバイスへのアクセス実行結果とを比較して予測結果の検証を実行する（Ｍ２３１６）。
【０２６４】
予測結果の検証結果、センサタイプ向け予測部２１０２ｄは、予測値とデバイスへのアクセス実行結果とが一致して予測が成功し、かつ予測の成功回数が所定回数に達したと判定したと仮定する。この場合、デバイスアクセスの後処理を実行するハンドラを最適化するための情報収集が完了し、デバイスアクセスの後処理の投機実行が可能になる。
【０２６５】
センサタイプ向け予測部２１０２ｄは、ターゲットアドレスをハードウェアリーダ２１０１ｂから取得する（Ｍ２３１７）。そして、センサタイプ向け予測部２１０２ｄは、ターゲトアドレスでハッシュされた読み出し値履歴部２１０２ｆの読み出し値および予測精度を、予測結果の検証結果に基づき更新する（Ｍ２３１８）。前述した仮定の場合、更新される予測精度は、投機実行可である。
【０２６６】
また、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた復帰値履歴部２１０２ｆの復帰値および予測精度を予測結果の検証結果に基づき更新する（Ｍ２３１９）。前述した仮定の場合、更新される予測精度は、投機実行可である。
【０２６７】
そして、センサタイプ向け予測部２１０２ｄは、情報収集の結果に基づいたデバイスアクセスの後処理の最適化モジュールの作成を投機実行要求受信部２１０３ｂに指示する（Ｍ２５０１）。
【０２６８】
一方、ハードウェアリーダ２１０１ｂは、デバイスアクセスの後処理の実行をハンドラ管理部２１０３に要求する（Ｍ２３２０）。要求を受けたハンドラ管理部２１０３ｂは、動的にロードした情報収集用ハンドラを実行する（Ｍ２３２１）。
【０２６９】
デバイスアクセスの後処理がハンドラ２１０３により実行されると、ハードウェアリーダ２１０１ｂは、デバイスアクセスの後処理の実行結果の設定要求を受ける（Ｍ２３２２）。ハードウェアリーダ２１０ｂは、デバイスアクセスの後処理の実行結果をファイルやメモリなどに設定する（Ｍ２１２３）。
【０２７０】
一方、投機実行要求受信部２１０３ｂは、最適化モジュールの作成をハンドラ管理部２１０３ｂに要求する（Ｍ２５０２）。
【０２７１】
ハンドラ管理部２１０３ｂは、予測値を埋め込んだ後処理実行ハンドラのソースコードの生成し（Ｍ２５０２）、生成したソースコードをコンパイルする（Ｍ２５０３）。コンパイルされたハンドラは、最適化済みハンドラとして動的にロードされる（Ｍ２５０５）。
【０２７２】
ハンドラ管理部２１０３ｂは、コンパイルしたハンドラの登録を行なう（Ｍ２５０６）。
【０２７３】
最後に、投機実行フェーズにおける処理シーケンスを説明する。
図２６は、投機実行フェーズにおけるスレッド間の相互作用図である。図２２と同じメッセージに対しては、図２６中のメッセージにも同じ参照符号が付されている。
【０２７４】
情報収集フェーズにおいて生成された、最適化されたハンドラは、ハードウェアアクセス処理の次回実行時に、デバイスアクセスの後処理の投機実行に使用される。
【０２７５】
図２６に示すように、値予測スレッド２１０２における予測精度の確認（Ｍ２２１２）の結果、投機実行可である場合、デバイスアクセスの後処理の投機実行が値予測スレッド２１０２から投機実行スレッド２１０３に指示される（Ｍ２６１４）。
【０２７６】
投機実行スレッド２１０３において実行されたデバイスアクセスの後処理の実行結果は、ファイルやメモリなどへ直ちに状態反映されず、一時保持される。そして、値予測スレッド２１０２における予測結果の検証（Ｍ２２２１）の結果、予測が成功したと判定されると、一時保管されたデバイスアクセスの後処理の実行結果の状態反映が値予測スレッド２１０２から投機実行スレッド２１０３に指示される（Ｍ２６２２）。
【０２７７】
図２７は、投機実行フェーズにおける処理シーケンス図である。図２７には、センサタイプのデバイスに対するハードウェアアクセス処理の一例が示されている。また、図２３と同じメッセージに対しては、図２７中のメッセージにも同じ参照符号が付されている。
【０２７８】
図２７に示すように、ハードウェアリーダ２１０１ｂによりデバイスへのアクセスが開始された後（Ｍ２３０５）、センサタイプ向け予測部２１０２ｄは、アクセス対象のデバイスのアドレスであるターゲットアドレスをハードウェアリーダ２１０１ｂから取得する（Ｍ２３０６）。
【０２７９】
センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた予測精度を読み出し値履歴部２１０２ｆから取得する（Ｍ２３０７）。また、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた予測精度を復帰値履歴部２１０２ｈから取得する（Ｍ２３０８）。図２７に示した例では、読み出し値履歴部２１０２ｆおよび復帰値履歴部２１０２ｈから取得される予測精度は、投機実行可である。
【０２８０】
値予測管理部２１０２ｂは、値予測の実行をセンサタイプ向け予測部２１０２ｄに要求する（Ｍ２３０９）。要求を受けたセンサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた読み出し値を予測値として読み出し値履歴部２１０２ｆから取得する（Ｍ２３１０）。また、センサタイプ向け予測部２１０２ｄは、ターゲットアドレスでハッシュされた復帰値を予測値として復帰値履歴部２１０２ｈから取得する（Ｍ２３１１）。
【０２８１】
センサタイプ向け予測部２１０２ｄが取得した予測精度が投機実行可である場合、値予測管理部２１０２ｂは、デバイスアクセスの後処理の投機実行を投機実行要求受信部２１０３ａに指示する（Ｍ２７０１）。
【０２８２】
投機実行要求受信部２１０３ａは、ハードウェアリーダ２１０１ｂにハンドラ管理部２１０３ａへのポインタを取得するように要求する（Ｍ２７０２）。そして、投機実行要求受信部２１０３ａは、ハンドラ管理部２１０３ａに予測値に基づくデバイスアクセスの後処理の投機実行を指示する（Ｍ２７０３）。
【０２８３】
ハンドラ管理部２１０３ｂは、デバイスアクセスの後処理を最適化済みハンドラにより投機実行する（Ｍ２７０４）。
【０２８４】
ハードウェアリーダ２１０１ｂは、投機実行されたデバイスアクセスの後処理の実行結果を設定するように要求されると（Ｍ２７０５）、デバイスアクセスの後処理の実行結果を一時保持する。
【０２８５】
ハードウェアリーダ２１０１ｂは、デバイスへのアクセスを完了すると（Ｍ２３１２）、デバイスへのアクセス完了を値予測要求受信部２１０２ａに通知する（Ｍ２３１３）。通知を受けた値予測要求受信部２１０２ａは、予測結果の検証を値予測管理部２１０３に要求する（Ｍ２３１４）。
【０２８６】
値予測管理部２１０３は、デバイスへのアクセス実行結果の取得をハードウェアリーダ２１０１ｂに要求する（Ｍ２３１５）。そして、値予測管理部２１０３は、予測値とデバイスへのアクセス実行結果とを比較して予測結果の検証をセンサタイプ向け予測部２１０２ｄに要求する（Ｍ２３１６）。
【０２８７】
予測結果の検証の結果、センサタイプ向け予測部２１０２ｄは、予測値とデバイスへのアクセス実行結果とが一致して予測が成功したと判定したと仮定する。この場合、ハードウェアリーダ２１０１ｂは、一時保持したデバイスアクセスの後処理の実行結果をファイルやメモリなどに状態反映する（Ｍ２７０７）。
【０２８８】
一方、予測結果の検証の結果、センサタイプ向け予測部２１０２ｄは、予測値とデバイスへのアクセス実行結果とが一致せず予測が失敗したと判定したと仮定する。この場合、ハードウェアリーダ２１０１ｂは、デバイスへのアクセス実行結果に基づくデバイスアクセスの後処理の実行をハンドラ管理部２１０３に要求する（Ｍ２３２０）。要求を受けたハンドラ管理部２１０３ｂは、通常実行用ハンドラによりデバイスアクセスの後処理を実行する（Ｍ２３２１）。ハードウェアリーダ２１０１ｂは、デバイスアクセスの後処理の実行結果の設定要求を受けると（Ｍ２３２２）、一時保持したデバイスアクセスの後処理の投機実行結果を破棄する。そして、ハードウェアリーダ２１０１ｂは、デバイスアクセスの後処理の実行結果をファイルやメモリなどに設定する（Ｍ２１２３）。
【０２８９】
このように、実施形態に従えば、デバイスへのアクセス実行結果に対する値予測が成功した場合には、デバイスへのアクセスと並行してデバイスアクセスの後処理を投機実行するため、ハードウェアアクセス処理の実行時間を短縮することができる。
【０２９０】
また、実施形態に従えば、デバイスアクセスの後処理の投機実行の結果を予測結果の検証後にメモリやファイルなどに反映するため、値予測失敗時のリカバリ処理は不要であり、オーバヘッドを少なくすることができる。
【符号の説明】
【０２９１】
１００      電子装置
１０１      ＣＰＵ
１０２      メモリ
１０３      Ｉ２Ｃコントローラ
１０４ａ、１０４ｂ、１０４ｃ      Ｉ２Ｃデバイス
６０１      ハードウェアアクセス処理部
６０２      値予測処理部
６０２ａ      センサタイプ向け値予測処理部
６０２ｂ      記憶素子タイプ向け値予測処理部
６０３      関数処理部
６０４      値定数化コード生成処理部
６０５      コンパイラ
６０６      出力データペンディング処理部
２１０１      ハードウェアアクセススレッド
２１０１ａ      ハードウェアアクセッサ
２１０１ｂ      ハードウェアリーダ
２１０１ｃ      ハードウェアライタ
２１０２      値予測スレッド
２１０２ａ      値予測要求受信部
２１０２ｂ      値予測管理部
２１０２ｃ      予測戦略部
２１０２ｄ      センサタイプ向け予測部
２１０２ｅ      記憶素子タイプ向け予測部
２１０２ｆ      読み出し値履歴部
２１０２ｇ      書き込み値履歴部
２１０２ｈ      復帰値履歴部
２１０３      投機実行スレッド
２１０３ａ      投機実行要求受信部
２１０３ｂ      ハンドラ管理部
２１０３ｃ      ハンドラ
【図１】
2013014779.tif 000003
【図２】
2013014779.tif 000004
【図３】
2013014779.tif 000005
【図４】
2013014779.tif 000006
【図５】
2013014779.tif 000007
【図６】
2013014779.tif 000008
【図７】
2013014779.tif 000009
【図８】
2013014779.tif 000010
【図９】
2013014779.tif 000011
【図１０】
2013014779.tif 000012
【図１１】
2013014779.tif 000013
【図１２】
2013014779.tif 000014
【図１３】
2013014779.tif 000015
【図１４】
2013014779.tif 000016
【図１５】
2013014779.tif 000017
【図１６】
2013014779.tif 000018
【図１７】
2013014779.tif 000019
【図１８】
2013014779.tif 000020
【図１９】
2013014779.tif 000021
【図２０Ａ】
2013014779.tif 000022
【図２０Ｂ】
2013014779.tif 000023
【図２１】
2013014779.tif 000024
【図２２】
2013014779.tif 000025
【図２３】
2013014779.tif 000026
【図２４】
2013014779.tif 000027
【図２５】
2013014779.tif 000028
【図２６】
2013014779.tif 000029
【図２７】
2013014779.tif 000030
【国際調査報告】
2013014779.tif 000031
2013014779.tif 000032