IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝テック株式会社の特許一覧

<>
  • 特開-計算機およびプログラム 図1
  • 特開-計算機およびプログラム 図2
  • 特開-計算機およびプログラム 図3
  • 特開-計算機およびプログラム 図4
  • 特開-計算機およびプログラム 図5
  • 特開-計算機およびプログラム 図6
  • 特開-計算機およびプログラム 図7
  • 特開-計算機およびプログラム 図8
  • 特開-計算機およびプログラム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024119527
(43)【公開日】2024-09-03
(54)【発明の名称】計算機およびプログラム
(51)【国際特許分類】
   G06F 8/41 20180101AFI20240827BHJP
   G06F 8/76 20180101ALI20240827BHJP
【FI】
G06F8/41 170
G06F8/41 130
G06F8/76
【審査請求】未請求
【請求項の数】2
【出願形態】OL
(21)【出願番号】P 2023026504
(22)【出願日】2023-02-22
(71)【出願人】
【識別番号】000003562
【氏名又は名称】東芝テック株式会社
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】佐藤 直哉
【テーマコード(参考)】
5B081
5B376
【Fターム(参考)】
5B081CC24
5B081CC41
5B376BC25
5B376BC57
(57)【要約】      (修正有)
【課題】バイトコードを実行するシステムに最適なネーティブコードを生成する計算機およびプログラムを提供する。
【解決手段】計算機100は、CPUと、記憶装置と、を有する。記憶装置は、バイトコードと、バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISAを指定しないと最適化が行えないシステムと、拡張ISA(命令セットアーキテクチャ)を表す拡張フィールドの値と、システムにおいて拡張ISAに対応する最適化を有効にするために必要なコマンドライン引数との対応を表す対応表と、CPUに、CPUがサポートするISAを取得させる機能と、ISAから拡張ISAを取得させる機能と、対応表を参照してシステムのコマンドライン引数に拡張ISAを自動的に設定させる機能と、拡張ISAに最適なネーティブコードを生成させる機能とを実現させるプログラムと、を記憶している。
【選択図】図1
【特許請求の範囲】
【請求項1】
CPUと、
バイトコードと、前記バイトコードを実行するシステムのコマンドライン引数に前記CPUがサポートする拡張ISAを指定しないと最適化が行えない前記システムとを記憶している記憶装置と、
を有する計算機であって、
前記記憶装置は、
前記拡張ISAを表す拡張フィールドの値と、前記システムにおいて前記拡張ISAに対応する最適化を有効にするために必要なコマンドライン引数との対応を表す対応表と、
前記CPUに、前記CPUがサポートするISAを取得させる機能と、前記ISAから前記拡張ISAを取得させる機能と、前記対応表を参照して前記システムのコマンドライン引数に前記拡張ISAを自動的に設定させる機能と、前記拡張ISAに最適なネーティブコードを生成させる機能とを実現させるプログラムとを記憶している、
計算機。
【請求項2】
バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISAを指定しないと最適化が行えない前記システムを有する計算機に、
前記CPUがサポートするISAを取得させる機能と、
前記ISAから拡張ISAを取得させる機能と、
前記拡張ISAを表す拡張フィールドの値と、前記システムにおいて前記拡張ISAに対応する最適化を有効にするために必要なコマンドライン引数との対応を表す対応表を参照して、前記システムのコマンドライン引数に前記拡張ISAを自動的に設定させる機能と、
前記拡張ISAに最適なネーティブコードを生成させる機能と、
を実現させるプログラム。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、バイトコードを実行する計算機およびプログラムに関する。
【背景技術】
【0002】
コンパイラに提示したバイトコード群から、実行時コンパイラにおいてネーティブコードを生成し最適化するシステムが知られている。
【0003】
また、バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISA(命令セットアーキテクチャ)を指定しないと、実行時コンパイラにおいてCPUがサポートする拡張ISAに最適なネーティブコードを生成できないシステムが知られている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000-40007号公報
【非特許文献】
【0005】
【非特許文献1】https://wiki.openjdk.org/display/RISCVPort
【発明の概要】
【発明が解決しようとする課題】
【0006】
コンパイラに提示したバイトコード群から、実行時コンパイラにおいてネーティブコードを生成し最適化するシステムでは、バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISAを手動で指定しないと最適化が行えないシステムにおいて、コマンドライン引数を設定する手段がないため実行時コンパイラにおいてネーティブコードを生成し最適化することができない。
【0007】
本発明が解決しようとする課題は、バイトコードを実行するシステムに最適なネーティブコードを生成することができる計算機およびプログラムを提供することである。
【課題を解決するための手段】
【0008】
実施形態に係る計算機は、CPUと記憶装置とを有する。記憶装置は、バイトコードと、バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISAを指定しないと最適化が行えないシステムと、拡張ISAを表す拡張フィールドの値と、システムにおいて拡張ISAに対応する最適化を有効にするために必要なコマンドライン引数との対応を表す対応表と、CPUに、CPUがサポートするISAを取得させる機能と、ISAから拡張ISAを取得させる機能と、対応表を参照してシステムのコマンドライン引数に拡張ISAを自動的に設定させる機能と、拡張ISAに最適なネーティブコードを生成させる機能とを実現させるプログラムとを記憶している。
【図面の簡単な説明】
【0009】
図1】実施形態に係る計算機のハードウェア構成を示す図である。
図2】実施形態に係る計算機のソフトウェア構成を示す図である。
図3】実施形態に係る計算機のCPUに含まれるIDレジスタを示す図である。
図4】実施形態に係る計算機のCPUに含まれるIDレジスタのBaseフィールドを示す図である。
図5】実施形態に係る計算機のCPUに含まれるIDレジスタのExtensionsフィールドを示す図である。
図6】実施形態に係る計算機におけるISA-コマンドライン対応表を示す図である。
図7】実施形態に係る計算機においてJava(登録商標)仮想マシン呼出部が実行する処理を示すフローチャートである。
図8】実施形態に係る計算機におけるJava仮想マシン呼出部の実行コマンドを示す図である。
図9】実施形態に係る計算機における実際のJava仮想マシンの呼出しコマンドを示す図である。
【発明を実施するための形態】
【0010】
(ハードウェア構成)
まず、図1を参照して、実施形態に係る計算機100のハードウェア構成について説明する。図1は、計算機100のハードウェア構成を示す図である。計算機100は、たとえば、コンピュータである。コンピュータは、パーソナルコンピュータやサーバコンピュータ等である。
【0011】
計算機100は、CPU101と、バス102と、RAM103と、ソリッドステートドライブ(SSD)104と、Ethernet(登録商標)インタフェース(I/F)105と、キーボード106と、ディスプレイ107とを有する。計算機100は、これらに加えて、他の機器を有していてもよい。
【0012】
CPU101は、たとえば、RISC-V CPUである。RISC-V CPUは、例として、RV64IMAFDCのISAを持ち、基本ISAはRV64I、拡張ISAはMAFDCを持つ。
【0013】
RISC-VのISAと、ISAを表すアルファベットの文字との関連については、「https://github.com/riscv/riscv-isa-manual/releases」の「riscv-privileged.pdf」に記されている。
【0014】
ここでは、CPU101がRISC-V CPUである例をあげたが、RISC-V CPUと同じように拡張命令セットや専用命令セットといったように、基本命令セット以外のオプションの命令セットを持つCPUであれば、他のCPUであってもよい。
【0015】
CPU101とRAM103とソリッドステートドライブ104とEthernetインタフェース105とキーボード106とディスプレイ107は、バス102を介して互いに電気的に接続されており、バス102を介して命令やプログラムやデータをやりとりする。
【0016】
CPU101は、ハードウェアプロセッサであり、RAM103とソリッドステートドライブ104とEthernetインタフェース105とディスプレイ107とキーボード106を制御する。
【0017】
RAM103は、CPU101が実行する処理に必要なプログラムとデータを一時的に記憶する主記憶装置(メインメモリ)である。
【0018】
ソリッドステートドライブ104は、RAM103が一時的に記憶するプログラムとデータを非一時的に記憶する補助記憶装置である。
【0019】
CPU101は、ソリッドステートドライブ104内のプログラムとデータをRAM103内に読み込み、プログラムを実行することにより各種機能を実行する。
【0020】
ディスプレイ107は、データを出力する出力装置である。ディスプレイ107は、種々の情報をユーザに提示する。
【0021】
キーボード106は、命令やデータを受け取る入力装置である。キーボード106は、ユーザの操作によって、命令やデータを受け取る。
【0022】
Ethernetインタフェース105は、ネットワークや他の機器と接続するためのインタフェースである。たとえば、計算機100は、Ethernetインタフェース105を介して、ネットワークや他の機器と接続可能である。
【0023】
バス102とRAM103とソリッドステートドライブ104とEthernetインタフェース105とキーボード106とディスプレイ107は一般的なものを利用してよい。
【0024】
(ソフトウェア構成)
計算機100は、起動時に、ソリッドステートドライブ104に記憶されているオペレーティングシステムをRAM103内に読み込み動作する。たとえば、オペレーティングシステムは、Linux(登録商標)である。以下では、オペレーティングシステムがLinuxである例について説明するが、これに限定されるものではなく、オペレーティングシステムは、他のオペレーティングシステムであってもよい。
【0025】
以下、図2を参照して、計算機100のソフトウェア構成について説明する。図2は、計算機100のソフトウェア構成を示す図である。詳しくは、図2は、ソリッドステートドライブ104が記憶しているLinux201の構成を示す図である。
【0026】
ソリッドステートドライブ104は、Linux201を記憶している。Linux201は、たとえば、RISC-V CPUで動作するDebian GNU Linuxなどでよい。
【0027】
Linux201は、Java開発環境202を有する。Java開発環境202は、Javaコンパイラ204を有する。Linux201には、ユーザが用意するJavaソースコード203が記憶される。Javaコンパイラ204は、Javaソースコード203をコンパイルしてJavaバイトコード205を生成するプログラムである。Javaコンパイラ204は、たとえば、javacでよい。Javaコンパイラ204によってJavaソースコード203から生成されたJavaバイトコード205は、Linux201に記憶される。Javaバイトコード205は、classファイルやjarアーカイブなどでよい。
【0028】
Java開発環境202は、Javaバイトコード205を実行するシステムのコマンドライン引数にCPU101がサポートする拡張ISA(命令セットアーキテクチャ)を指定しないと、実行時コンパイラにおいてCPU101がサポートする拡張ISAに最適なネーティブコードを生成できないシステムである。そのようなJava開発環境202の一例は、非特許文献1に記載のOpenJDKである。
【0029】
Java開発環境202はまた、Java仮想マシン208を有する。Java仮想マシン208は、Java開発環境202に含まれるjavaコマンドでよい。Java仮想マシン208は、インタープリタ209と動的コンパイラ210を有し、内部でネーティブコード211を生成できる。ネーティブコード211は、RISC-V CPUの機械語でよい。
【0030】
Linux201はまた、Java仮想マシン呼出部206と、ISA-コマンドライン対応表207を有する。Java仮想マシン呼出部206は、ISA-コマンドライン対応表207を参照し、Java開発環境202のコマンドライン引数に拡張ISAを自動的に設定するプログラムを有する。Java仮想マシン呼出部206とISA-コマンドライン対応表207の詳細については後述する。
【0031】
(CPU)
続いて、図3図5を参照して、CPU101(RISC-V CPU)について説明する。図3は、CPU101(RISC-V CPU)に含まれるCPU IDレジスタ300を示す図である。図4は、図3に示すCPU IDレジスタ300(mcpuid)のBaseフィールドを示す図である。図5は、図3に示すCPU IDレジスタ300(mcpuid)のExtensions(拡張)フィールドを示す図である。
【0032】
CPU101(RISC-V CPU)は、図3に示すCPU IDレジスタ300を有する。CPU IDレジスタ300は、基本ISAを表すBaseフィールド301と、拡張ISAを表すExtensionsフィールド302とを有する。
【0033】
基本ISAを表すBaseフィールド301は、2bitで構成される。図4に示すように、Baseフィールド301の0、1、2、3のValue(値)に対して、それぞれ、RV32I、RV32E、RV64I、RV128IのDescription(記述)が対応している。
【0034】
拡張ISAを表すExtensionsフィールド302は、26bitで構成される。図4に示すように、最下位のbitが0ビット、最上位のbitが25ビットとなっている。言い換えれば、右側から0bit、1bit、…、25bitの位となっている。各bitは、0または1の値をとる。0bit、1bit、…、25bitは、それぞれ、A、B、…、Zの文字に対応している。A、B、…、Zのそれぞれの文字は、拡張ISAを表す。
【0035】
CPU101(RISC-V CPU)は、機械語のmcpuid命令を実行することによって、図4に示す基本ISAを表すBaseフィールド301の値と、図5に示す拡張ISAを表すExtensionsフィールド302の値を取得できる。
【0036】
(ISA-コマンドライン対応表)
図6は、ISA-コマンドライン対応表207を示す図である。ISA-コマンドライン対応表207は、拡張ISAを表すExtensionsフィールド302の値と、Java仮想マシン208において拡張ISAに対応する最適化を有効にするために必要なコマンドライン引数との対応を表している。
【0037】
ISA-コマンドライン対応表207において、拡張ISAは、Extensionsフィールド302の文字を表し、値は、その文字に対応するbitの位を表し、引数は、その文字に対応するコマンドライン引数を表している。すなわち、ISA-コマンドライン対応表207は、以下のことを示している。
【0038】
Java仮想マシン208において最適化を有効にする拡張ISAは文字Cと文字Vである。すなわち、文字Cと文字Vにフラグが立っている。さらに、拡張ISAの文字Cに対応するbitの位は2であり、2bitの位の値は1であり、拡張ISAの文字Cのコマンドライン引数は-XX:+UseRVCである。また、拡張ISAの文字Vに対応するbitの位は21であり、21bitの位の値は1であり、拡張ISAの文字Vのコマンドライン引数が-XX:+UseRVCである。
【0039】
(Java仮想マシン呼出部)
Java仮想マシン呼出部206は、CPU101に、CPU101がサポートするISAを取得させる機能と、取得したISAから拡張ISAを取得させる機能と、ISA-コマンドライン対応表207を参照して、Java開発環境202のコマンドライン引数に拡張ISAを自動的に設定させる機能と、拡張ISAに最適なネーティブコードを生成させる機能とを実現させるプログラムである。
【0040】
以下、図7図9を参照して、Java仮想マシン呼出部206の動作例について説明する。図7は、Java仮想マシン呼出部206が実行する処理を示すフローチャートである。図8は、Java仮想マシン呼出部206の実行コマンドを示す図である。図9は、Java仮想マシン208を呼び出すコマンドの一例を示す図である。
【0041】
この動作例では、ユーザはコマンドラインから、図8に示すように、sampleという引数801をつけて、Java仮想マシン呼出部206を表すjavawrapコマンドを実行する。ここで、Javaバイトコード205はsample.classであるとし、引数801のsampleの文字列はsample.classを実行することを表すものとする。
【0042】
javawrapコマンドを実行することにより、Java仮想マシン呼出部206は、CPU101に、以下に述べる処理を行わせる。
【0043】
ステップS101において、CPU101は、mcpuid命令を実行し、CPU IDレジスタ300の値をRAM103にコピーする。
【0044】
ステップS102において、CPU101は、RAM103にコピーしたCPU IDレジスタ300の値に含まれるExtensionsフィールド302の値を変数eにコピーする。
【0045】
ステップS103において、CPU101は、コマンドライン引数を文字列sに設定する。
【0046】
ステップS104において、CPU101は、ISA-コマンドライン対応表207を参照し、e&2=0であるかを判定する。ここで、e&2は、変数eの2bitの位に対応する文字Cにフラグが立っているかを調べるビット演算を意味している。詳しくは、e&2は、変数eの2bitの位の値と、ISA-コマンドライン対応表207の2bitの位の値とを比較し、いずれかの値が0である場合に0を返す。
【0047】
ステップS104の判定結果がNo、すなわち、e&2=0でない場合、変数eの2bitの位の値とISA-コマンドライン対応表207の2bitの位の値は共に1であり、2bitの位に対応する拡張ISAの文字Cは、Java仮想マシン208における最適化に有効であることを示している。この場合、続いて、ステップS105において、文字列sを、-XX:+UseRVC+sに変更する。その後、ステップS106の処理に進む。
【0048】
ステップS104の判定結果がYes、すなわち、e&2=0である場合、変数eの2bitの位の値とISA-コマンドライン対応表207の2bitの位の値のいずれかは0であり、2bitの位に対応する拡張ISAの文字Cは、Java仮想マシン208における最適化に有効でないことを示している。この場合、ステップS105の処理は省いて、ステップS106の処理に進む。
【0049】
ステップS106において、CPU101は、ISA-コマンドライン対応表207を参照し、e&21=0であるかを判定する。ここで、e&21は、変数eの21bitの位に対応する文字Vにフラグが立っているかを調べるビット演算を意味している。詳しくは、e&21は、変数eの21bitの位の値と、ISA-コマンドライン対応表207の21bitの位の値とを比較し、いずれかの値が0である場合に0を返す。
【0050】
ステップS106の判定結果がNo、すなわち、e&21=0でない場合、変数eの21bitの位の値とISA-コマンドライン対応表207の21bitの位の値は共に1であり、21bitの位に対応する拡張ISAの文字Vは、Java仮想マシン208における最適化に有効であることを示している。この場合、続いて、ステップS107において、文字列sを、-XX:+UseRVV+sに変更する。その後、ステップS108の処理に進む。
【0051】
ステップS106の判定結果がYes、すなわち、e&21=0である場合、変数eの21bitの位の値とISA-コマンドライン対応表207の21bitの位の値のいずれかは0であり、21bitの位に対応する拡張ISAの文字Vは、Java仮想マシン208における最適化に有効でないことを示している。この場合、ステップS107の処理は省いて、ステップS108の処理に進む。
【0052】
ステップS108において、CPU101は、sを引数として、Java仮想マシン208を表すjavaコマンドを実行する。図9は、Java仮想マシン208を呼び出すコマンドの一例を示す図である。図9に示すコマンドは、図7に示すフローチャートにおいて、ステップS104の判定結果がNoであり、ステップS106の判定結果がYesである例におけるコマンドである。この例では、sampleの引数801に、Java仮想マシン208における最適化に有効なコマンドライン引数である-XX:+UseRVCが付与されている。
【0053】
なお、ステップS104の判定結果とステップS106の判定結果が共にYesである場合には、javaコマンドの引数801は、sampleとなる。ステップS104の判定結果がYesであり、ステップS106の判定結果がNoである場合には、javaコマンドの引数801は、-XX:+UseRVV sampleとなる。ステップS104の判定結果とステップS106の判定結果が共にNoである場合には、javaコマンドの引数801は、-XX:+UseRVV -XX:+UseRVC sampleとなる。
【0054】
このように、Java仮想マシン208における最適化に有効な引数でjavaコマンドを実行することにより、Java開発環境202は、拡張ISAに最適なネーティブコードを生成できる。
【0055】
(効果)
以上の説明から分かるように、実施形態によれば、バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISAを指定しないと最適化が行えないシステムを有する計算機に、拡張ISAに最適なネーティブコードを生成させることができるようになる。
【0056】
実施形態では、バイトコードを実行するシステムのコマンドライン引数にCPUがサポートする拡張ISAを指定しないと最適化が行えないシステムとして、javaを使用した環境を例示したが、本発明は、これに限定されるものではなく、他のプログラミング言語たとえばパイソン等を使用した環境にも適用可能である。
【0057】
本実施形態に係るプログラムは、電子機器に記憶された状態で譲渡されてよいし、電子機器に記憶されていない状態で譲渡されてもよい。後者の場合は、プログラムは、ネットワークを介して譲渡されてよいし、記憶媒体に記憶された状態で譲渡されてもよい。記憶媒体は、非一時的な有形の媒体である。記憶媒体は、コンピュータ可読媒体である。記憶媒体は、CD-ROM、メモリカード等のプログラムを記憶可能かつコンピュータで読取可能な媒体であればよく、その形態は問わない。
【0058】
本発明の実施形態を説明したが、実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0059】
100…計算機、101…CPU、102…バス、103…RAM、104…ソリッドステートドライブ、105…Ethernetインタフェース、106…キーボード、107…ディスプレイ、201…Linux、202…Java開発環境、203…Javaソースコード、204…Javaコンパイラ、205…Javaバイトコード、206…Java仮想マシン呼出部、207…ISA-コマンドライン対応表、208…Java仮想マシン、209…インタープリタ、210…動的コンパイラ、211…ネーティブコード、300…CPU IDレジスタ、301…Baseフィールド、302…Extensionsフィールド、801…コマンドライン引数。

図1
図2
図3
図4
図5
図6
図7
図8
図9