(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024061058
(43)【公開日】2024-05-07
(54)【発明の名称】コンパイラ
(51)【国際特許分類】
G06F 8/41 20180101AFI20240425BHJP
【FI】
G06F8/41 130
【審査請求】未請求
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2022168738
(22)【出願日】2022-10-21
(71)【出願人】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(71)【出願人】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(71)【出願人】
【識別番号】520124752
【氏名又は名称】株式会社ミライズテクノロジーズ
(74)【代理人】
【識別番号】110000028
【氏名又は名称】弁理士法人明成国際特許事務所
(72)【発明者】
【氏名】鈴木 清登
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081CC23
(57)【要約】
【課題】プログラムの処理速度の低下を抑制する。
【解決手段】コンパイラ100は、入力されたソースコードのうち、ループ処理を抽出するループ処理抽出部142と、抽出されたループ処理を高速化した高速化コードを生成する高速化コード生成部143と、高速化コードをバイナリコードに変換するコンパイル部145と、を備え、高速化コード生成部は、抽出されたループ処理のうち、ループ変数を参照しない変数または式を特定し、特定された変数または式をループ処理内からループ処理外に移動させた高速化コードを生成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンパイラ(100)であって、
入力されたソースコードのうち、ループ処理を抽出するループ処理抽出部(142)と、
抽出された前記ループ処理を高速化した高速化コードを生成する高速化コード生成部(143)と、
前記高速化コードをバイナリコードに変換するコンパイル部(145)と、
を備え、
前記高速化コード生成部は、抽出された前記ループ処理のうち、ループ変数を参照しない変数または式を特定し、特定された前記変数または前記式を前記ループ処理内から前記ループ処理外に移動させた前記高速化コードを生成する、
コンパイラ。
【請求項2】
請求項1に記載のコンパイラであって、
前記高速化コード生成部は、特定された前記式のうち、項および演算子が多い式から優先的に前記ループ処理内から前記ループ処理外に移動させる、
コンパイラ。
【請求項3】
請求項1または請求項2に記載のコンパイラであって、
前記ソースコードと前記高速化コードとが論理等価であるか否かを判定する等価検証部(144)をさらに備え、
前記等価検証部は、前記ソースコードと前記高速化コードとに同一のデータを入力して出力されたそれぞれの演算結果が互いに一致した場合に、前記ソースコードと前記高速化コードとが論理等価であると判定する、
コンパイラ。
【請求項4】
請求項3に記載のコンパイラであって、
前記コンパイル部は、前記ソースコードと前記高速化コードとが論理等価であると判定された場合に、前記高速化コードを前記バイナリコードに変換し、
前記ソースコードと前記高速化コードとが論理等価でないと判定された場合に、前記高速化コードを前記バイナリコードに変換しない、
コンパイラ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンパイラに関する。
【背景技術】
【0002】
シングルコアプロセッサ用の逐次プログラムを分割して、マルチコアプロセッサ用の並列プログラムを生成することにより、プログラム処理を高速化する技術が知られている(特許文献1、2)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2017-10077号公報
【特許文献2】特開2015-1807号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、並列化されたプログラムであっても、分割後のタスクが繰り返し量の多いループ処理を含むことにより処理負荷が重くなる場合があり、プログラム処理の高速化には未だ改善の余地がある。
【課題を解決するための手段】
【0005】
本開示は、以下の形態として実現することが可能である。
【0006】
本開示の一形態によれば、コンパイラ(100)が提供される。このコンパイラは、入力されたソースコードのうち、ループ処理を抽出するループ処理抽出部(142)と、抽出された前記ループ処理を高速化した高速化コードを生成する高速化コード生成部(143)と、前記高速化コードをバイナリコードに変換するコンパイル部(145)と、を備え、前記高速化コード生成部は、抽出された前記ループ処理のうち、ループ変数を参照しない変数または式を特定し、特定された前記変数または前記式を前記ループ処理内から前記ループ処理外に移動させた前記高速化コードを生成する。
【0007】
この形態のコンパイラによれば、ソースコードのうちのループ処理において、ループ変数を参照しない変数または式を特定し、特定された変数または式をループ処理内からループ処理外に移動させた高速化コードを生成するので、ループ処理の処理負荷を軽減しプログラムの処理速度の低下を抑制できる。
【0008】
本開示は、コンパイラ以外の種々の形態で実現することも可能である。例えば、コンパイル方法、かかる方法を実現するためのコンピュータプログラム、かかるコンピュータプログラムを記憶した記憶媒体等の形態で実現することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態のコンパイラの概略構成を示すブロック図である。
【
図2】本実施形態のコンパイル処理の手順を示すフローチャートである。
【発明を実施するための形態】
【0010】
A.第1実施形態:
A-1.装置構成:
図1に示すように、コンパイラ100は、演算装置200から入力されたソースコードを変換して、バイナリコードを生成し出力する。本実施形態で演算装置200から入力されるソースコードは、C言語により記述されたシングルコアプロセッサ用の逐次プログラムである。なお、ソースコードは、C言語に限らず、C++、FORTRAN等の任意のプログラミング言語により記述されていてもよい。
【0011】
本実施形態のコンパイラ100は、通信装置110と、ROM120と、RAM130と、CPU140とを備えるコンピュータとして構成されている。通信装置110と、ROM120と、RAM130と、CPU140とは、バスを介して互いに通信可能に接続されている。通信装置110は、演算装置200から出力されたソースコードを入力し、生成されたバイナリコードを演算装置200へ出力する。CPU140は、予めROM120に保存されたプログラムをRAM130に展開して実行することにより、並列化処理部141と、ループ処理抽出部142と、高速化コード生成部143と、等価検証部144と、コンパイル部145と、として機能する。
【0012】
並列化処理部141は、演算装置200から入力されたソースコードをマルチコアプロセッサ用の並列プログラムに変換する。ループ処理抽出部142は、変換された並列プログラムのうち、ループ処理を抽出する。高速化コード生成部143は、抽出されたループ処理を高速化したコード(以下、「高速化コード」とも呼ぶ)を生成する。等価検証部144は、ソースコードと高速化コードとが論理等価であるか否かを判定する。コンパイル部145は、ソースコードと高速化コードとが論理等価であると判定された場合に高速化コードをバイナリコードに変換する。
【0013】
A-2.コンパイル処理:
コンパイラ100は、
図2に示すコンパイル処理を実行することにより、入力されたソースコードを変換してバイナリコードを生成し出力する。本実施形態では、コンパイラ100は、起動状態で演算装置200からソースコードを入力された際に、コンパイル処理を実行する。
【0014】
ステップS10において、並列化処理部141は、入力されたソースコードを並列プログラムに変換する。本実施形態では、並列化処理部141は、特開2015-1807号公報に記載の並列化方法を適用することにより、ソースコードを並列プログラムに変換する。なお、並列化処理部141は、特開2015-1807号公報に記載の並列化方法に限定されない任意の並列化方法により並列プログラムを生成してもよい。
【0015】
ステップS20おいて、ループ処理抽出部142は、変換された並列プログラムのうち、ループ処理を抽出する。より具体的には、ループ処理抽出部142は、並列プログラムに含まれる、ループ処理の開始を示す文字列である「for」または「while」を探索することによりループ処理を抽出する。
【0016】
ステップS30において、高速化コード生成部143は、高速化コードを生成する。本実施形態では、高速化コード生成部143は、抽出されたループ処理のうち、ループ変数を参照しない変数または式を特定し、特定された変数または式をループ処理内からループ処理外に移動させることにより高速化コードを生成する。より具体的には、高速化コード生成部143は、各ループ処理において、ループ変数として宣言された変数を認識し、かかるループ変数を含まない変数または式を特定する。以下の説明において、ループ変数を参照しない変数または式を特定し、特定された変数または式をループ処理内からループ処理外に移動させる処理を「高速化処理」とも呼ぶ。
【0017】
ステップS40において、等価検証部144は、生成された高速化コードとソースコードとが論理等価であるか否かを判定する。より具体的には、等価検証部144は、ソースコードと高速化コードとに同一のデータを入力して出力されたそれぞれの演算結果が互いに一致した場合に高速化コードとソースコードとが論理等価であると判定し、一致しない場合に論理等価でないと判定する。
【0018】
高速化コードとソースコードとが論理等価である場合(ステップS40:Yes)、コンパイル部145は、高速化コードを変換してバイナリコードを生成・出力し(ステップS50)、コンパイル処理を終了する。
【0019】
他方、高速化コードとソースコードとが論理等価でない場合(ステップS40:No)、コンパイル部145は高速化コードをバイナリコードに変換しない。この場合、本実施形態では、等価検証部144は、高速化コードとソースコードとが論理等価でない旨および高速化コードのうち論理等価でない箇所を示すレポートを出力し(ステップS52)、コンパイル処理を終了する。かかるレポートを出力することにより、ソースコードと論理等価でない高速化コードが生成された場合であっても、ユーザーは、高速化コードのうち論理等価でない箇所を容易に特定し修正できる。
【0020】
以上説明した実施形態のコンパイラ100によれば、ソースコードのうちのループ処理において、ループ変数を参照しない変数または式を特定し、特定された変数または式をループ処理内からループ処理外に移動させた高速化コードを生成するので、ループ処理の処理負荷を軽減しプログラムの処理速度の低下を抑制できる。
【0021】
また、コンパイラ100は、等価検証部144を備え、ソースコードと高速化コードとが論理等価であるか否かを判定するので、高速化コードの論理等価性の信頼性の低下を抑制できる。
【0022】
また、コンパイラ100は、ソースコードと高速化コードとが論理等価であると判定された場合に高速化コードをバイナリコードに変換し、論理等価でないと判定された場合には変換しないので、高速化コードからバイナリコードへの無駄な変換を抑制でき、コンパイル処理の効率の低下を抑制できる。
【0023】
B.他の実施形態:
(B1)上記実施形態において、コンパイラ100は、コンパイル処理においてステップS10を実行するが、本開示はこれに限定されない。コンパイラ100は、ステップS10を実行せずに、ソースコードとして入力された逐次プログラムを対象としてステップS20を実行してもよい。また、コンパイラ100は、別途作成された並列プログラムをソースコードとして入力されて、ステップS10を実行せずに、かかる並列プログラムを対象としてステップS20を実行してもよい。かかる構成のコンパイラ100によっても、上記実施形態と同様の効果を奏する。
【0024】
(B2)上記実施形態において、高速化コード生成部143は、コンパイル処理のステップS30において、特定された式のうち、項および演算子が多い式から優先的に高速化処理を実行してもよい。また、高速化コード生成部143は、ループ回数が多いループ処理から優先的に高速化処理を実行してもよい。また、高速化コード生成部143は、当該ループ処理におけるループ変数を参照しない式の項の数と、ループ回数との積が大きいループ処理から優先的に高速化処理を実行してもよい。かかる構成のコンパイラ100によれば、例えば開発期間が短い場合等、すべてのループ処理を高速化することができない場合であっても、処理負荷の高い式から優先的に高速化でき、効率よくプログラムの処理速度の低下を抑制できる。
【0025】
(B3)上記実施形態において、コンパイラ100は、高速化コードとソースコードとが論理等価であると判定された場合に高速化コードをバイナリコードに変換するが、本開示はこれに限定されない。コンパイラ100は、高速化コードとソースコードとが論理等価であるか否かを判定することなく高速化コードをバイナリコードに変換してもよい。かかる構成のコンパイラ100によっても、ループ処理の処理負荷を軽減しプログラムの処理速度の低下を抑制できる。加えて、論理等価であるか否かを判定しなので、コンパイル処理が煩雑になることを抑制できる。
【0026】
(B4)上記実施形態において、コンパイラ100は、高速化コードとソースコードとが論理等価でないと判定された場合にレポートを出力するが、本開示はこれに限定されない。コンパイラ100は、高速化コードとソースコードとが論理等価でないと判定された場合にレポートを出力せず、高速化コードのうち論理等価でない箇所を示す情報をROM120に保存してもよい。かかる構成のコンパイラ100によっても、上記実施形態と同様の効果を奏する。
【0027】
本開示は、上述の実施形態に限られるものではなく、その趣旨を逸脱しない範囲において種々の構成で実現することができる。例えば、発明の概要の欄に記載した形態中の技術的特徴に対応する各実施形態中の技術的特徴は、上述の課題の一部または全部を解決するために、あるいは、上述の効果の一部または全部を達成するために、適宜、差し替えや、組み合わせを行うことが可能である。また、その技術的特徴が本明細書中に必須なものとして説明されていなければ、適宜、削除することが可能である。
【0028】
本開示に記載のコンパイラ100およびその手法は、コンピュータプログラムにより具体化された一つ乃至は複数の機能を実行するようにプログラムされたプロセッサおよびメモリを構成することによって提供された専用コンピュータにより、実現されてもよい。あるいは、本開示に記載のコンパイラ100およびその手法は、一つ以上の専用ハードウエア論理回路によってプロセッサを構成することによって提供された専用コンピュータにより、実現されてもよい。もしくは、本開示に記載のコンパイラ100およびその手法は、一つ乃至は複数の機能を実行するようにプログラムされたプロセッサおよびメモリと一つ以上のハードウエア論理回路によって構成されたプロセッサとの組み合わせにより構成された一つ以上の専用コンピュータにより、実現されてもよい。また、コンピュータプログラムは、コンピュータにより実行されるインストラクションとして、コンピュータ読み取り可能な非遷移有形記録媒体に記憶されていてもよい。
【符号の説明】
【0029】
100…コンパイラ、142…ループ処理抽出部、143…高速化コード生成部、145…コンパイル部