JP7323478B2 - プログラム並列化方法、プログラム並列化装置、電子制御装置 - Google Patents

プログラム並列化方法、プログラム並列化装置、電子制御装置 Download PDF

Info

Publication number
JP7323478B2
JP7323478B2 JP2020030512A JP2020030512A JP7323478B2 JP 7323478 B2 JP7323478 B2 JP 7323478B2 JP 2020030512 A JP2020030512 A JP 2020030512A JP 2020030512 A JP2020030512 A JP 2020030512A JP 7323478 B2 JP7323478 B2 JP 7323478B2
Authority
JP
Japan
Prior art keywords
program
parallelization
unit
processing
core processor
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
JP2020030512A
Other languages
English (en)
Other versions
JP2021135664A (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.)
Hitachi Astemo Ltd
Original Assignee
Hitachi Astemo Ltd
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 Hitachi Astemo Ltd filed Critical Hitachi Astemo Ltd
Priority to JP2020030512A priority Critical patent/JP7323478B2/ja
Priority to PCT/JP2021/003111 priority patent/WO2021171897A1/ja
Publication of JP2021135664A publication Critical patent/JP2021135664A/ja
Application granted granted Critical
Publication of JP7323478B2 publication Critical patent/JP7323478B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Landscapes

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

Description

本発明は、プログラム並列化方法、プログラム並列化装置、および電子制御装置に関する。
車両の自動運転を目指した技術開発が進められている。自動運転は運転者に代わり周囲の認識、車両の制御を行う必要があり、膨大な情報処理が求められる。増大する情報処理に対応するために、マルチコアプロセッサを活用する検討が進められており、使用するコア数の増加に伴う実装の複雑化を考慮した適切な処理が求められる。その中で、シングルコアプロセッサ向けの逐次プログラムから、マルチコアプロセッサ向けの並列プログラムを自動的に作成するプログラム並列化に期待が寄せられており、そのツールである自動並列化ツールを活用する検討も進められている。
特許文献1には、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化した並列プログラムを生成する並列化コンパイル方法であって、前記逐次プログラムを構成する処理群を、前記マルチコアプロセッサを構成する単一コア上で逐次動作する逐次処理と、前記マルチコアプロセッサを構成する複数コア上で並列動作する並列処理とに分類する分類手順と、前記分類手順によって前記並列処理に分類された処理を前記複数コアに対して不均一に割り当てる不均一割当処理を実行する割当手順と、前記分類手順の分類結果及び前記割当手順の割当結果に基づいて前記並列プログラムを生成する生成手順と、を備えることを特徴とする並列化コンパイル方法が開示されている。
特開2016-218503号公報
特許文献1に記載されている技術では、生成されるプログラムの性能に改善の余地がある。
本発明の第1の態様によるプログラム並列化方法は、コンピュータが実行するシングルコアプロセッサ用プログラムからマルチコアプロセッサ用プログラムを生成するプログラム並列化方法であって、前記シングルコアプロセッサ用プログラムのプログラム並列化処理のための事前変換を実行する事前変換ステップと、前記事前変換された前記シングルコアプロセッサ用プログラムを並列化処理する並列化処理ステップと、前記並列化処理された前記シングルコアプロセッサ用プログラムのうち並列化されなかった領域に前記事前変換の逆変換を実行する逆変換ステップとを含む。
本発明の第2の態様によるプログラム並列化装置は、上述のプログラム並列化方法を実行する。
本発明の第3の態様による電子制御装置は、上述のプログラム並列化方法を用いて作成された前記マルチコアプロセッサ用プログラムを格納する記憶部と、前記記憶部に格納される前記マルチコアプロセッサ用プログラムを実行するマルチコアプロセッサとを備える。
本発明によれば、プログラムの性能を向上させることができる。
プログラム並列化装置および車載システムの全体構成図 プログラム並列化装置および自律走行制御装置のハードウェア構成図 自律走行制御装置の機能構成図 プログラム並列化装置の機能構成図 プログラム並列化装置の処理を示すフローチャート 各処理とプログラムとの関係を示す図 プログラムの変化の概要を示す図 プログラム並列化装置から自律走行制御装置への情報送信を示すシーケンス図
―第1の実施の形態―
以下、図1~図8を参照して、プログラム並列化装置の第1の実施の形態を説明する。本実施の形態では、「プログラム」とはコンピュータが解釈可能でありコンピュータに実行させる処理を記述したものである。本実施の形態では、コンパイル型のプログラム言語の使用を想定しているが、インタプリタ型のプログラム言語にも適用可能である。また本実施の形態では、「プログラム」を人間が読み書き可能な「ソースコード」と同じ意味で用いるが、「プログラム」は人間による直接の理解が困難でコンピュータには理解が容易な「バイナリコード」であってもよい。
<システム構成>
図1は、プログラム並列化装置111、およびプログラム並列化装置111が出力するプログラムを利用する自律走行制御装置2を含む車載システム1の全体構成図である。プログラム並列化装置111の構成および動作は後に詳述する。
車載システム1は、車両100に搭載され、車両100の外界状況をカメラにより取得するカメラ情報取得部101と、車両100の外界状況をレーダにより取得するレーダ情報取得部102と、車両100の外界状況をレーザにより取得するレーザ情報取得部103と、衛星航法システム、たとえばGPS(Global Positioning System)の受信機を用いて車両100の位置を検出する自車位置情報取得部104とを備える。車載システム1はさらに、車両100の自動運転を設定するための自動運転設定部105と、OTA(Over-The-Air)により車載システム1の情報を更新するための無線通信部106を備える。無線通信部106は例えば、無線ネットワークを介してプログラム並列化装置111に接続される。プログラム並列化装置111は、後述するプログラム並列化処理を実行する。
車載システム1はさらに、電子制御装置である自律走行制御装置2と、補助制御部107と、ブレーキ制御部108と、エンジン制御部109と、パワーステアリング制御部110とを備える。自律走行制御装置2、補助制御部107、ブレーキ制御部108、エンジン制御部109、およびパワーステアリング制御部110のそれぞれは、たとえばECU(Electronic Control Unit)である。
カメラ情報取得部101、レーダ情報取得部102、レーザ情報取得部103、自車位置情報取得部104、自動運転設定部105、無線通信部106、自律走行制御装置2、補助制御部107、ブレーキ制御部108、エンジン制御部109、およびパワーステアリング制御部110は、CAN(Controller Area Network)やイーサネット(登録商標)等の車載ネットワークによって相互に通信可能に接続される。
カメラ情報取得部101、レーダ情報取得部102、レーザ情報取得部103、および自車位置情報取得部104は、それぞれがセンサなどから受信した情報を自律走行制御装置2に送信する。自動運転設定部105は、自動運転時の目的地、ルート、走行速度等の設定情報を自律走行制御装置2に送信する。
自律走行制御装置2は、自動運転制御のための処理を行い処理結果に基づいて制御指令を、ブレーキ制御部108、エンジン制御部109、およびパワーステアリング制御部110へ出力する。補助制御部107は、自律走行制御装置2と同様の制御を補助として行う。ブレーキ制御部108は、車両100の制動力を制御する。エンジン制御部109は、車両100の駆動力を制御する。パワーステアリング制御部110は、車両100のステアリングを制御する。
自律走行制御装置2は、自動運転設定部105により自動運転の設定要求を受け付けると、カメラ情報取得部101、レーダ情報取得部102、レーザ情報取得部103、および自車位置情報取得部104等からの外界の情報を基に車両100が移動する軌道を算出する。そして、自律走行制御装置2は、算出した軌道に従って車両100を移動させるように、制動力、駆動力、操舵などの制御指令を、ブレーキ制御部108、エンジン制御部109、およびパワーステアリング制御部110に出力する。ブレーキ制御部108、エンジン制御部109、およびパワーステアリング制御部110は、自律走行制御装置2から制御指令を受けて、それぞれ不図示の制御対象であるアクチュエータに操作信号を出力する。
<ハードウェア構成>
図2は、プログラム並列化装置111および自律走行制御装置2のハードウェア構成図である。両者のハードウェア構成は共通するので、ここでは代表してプログラム並列化装置111のハードウェア構成を説明する。プログラム並列化装置111は、CPU251と、ROM252と、RAM253と、フラッシュメモリ254と、通信インタフェース256とを備える。フラッシュメモリ254は不揮発性の記憶領域である。CPU251は、ROM252およびフラッシュメモリ254の少なくとも一方に格納されたプログラムをRAM253に展開して実行することで後述する機能を実現する。
プログラム並列化装置111を構成するCPU251、ROM252、RAM253、フラッシュメモリ254、通信インタフェース256のハードウェアは、複数のデバイスとして構成されてもよい。また、CPU251、ROM252、RAM253、フラッシュメモリ254は、SoC(System on Chip)のように、複数のハードウェアを1つのデバイスとして構成されてもよい。
自律走行制御装置2のフラッシュメモリ254に格納されるプログラムは、プログラム並列化装置111から受信したプログラムであってもよい。自律走行制御装置2の通信インタフェース256は、CAN等の所定のプロトコルで通信するインタフェースである。プログラム並列化装置111の通信インタフェース256は、車両100の無線通信部106と通信するための、たとえば無線通信モジュールである。自律走行制御装置2は、1つのECU(Electronic Control Unit;電子制御装置)で構成されてもよいし、複数のECUから構成されてもよい。
<自律走行制御装置の機能構成>
図3は、自律走行制御装置2の機能構成図である。自律走行制御装置2は、第1通信インタフェース201-1、第2通信インタフェース201-2、第1コア203-1~第Nコア203-N(Nは任意の2以上の自然数)を備えるマルチコアプロセッサ202、および記憶部204を有する。以下では、第1通信インタフェース201-1、第2通信インタフェース201-2をまとめて、「通信インタフェース201」と呼ぶ。また、第1コア203-1~第Nコア203-Nをまとめて、「コア203」と呼ぶ。
通信インタフェース201は、図2の通信インタフェース256により実現される。マルチコアプロセッサ202は、CPU251により実現され、コア203はCPU251が備えるマルチコアにより構成される。マルチコアプロセッサ202は、SoCにより実現されてもよい。記憶部204は、CPU251内に構成されてもよいし、ROM252、RAM253、または、フラッシュメモリ254により実現されてもよい。記憶部204は、マルチコアプロセッサ202がROM252に格納されたプログラムをRAM253等に展開して実行する際などの、必要となる記憶領域の総称と考えてもよい。
自律走行制御装置2は、第1通信インタフェース201-1を介して、図1のカメラ情報取得部101、レーダ情報取得部102、レーザ情報取得部103、自車位置情報取得部104、自動運転設定部105、および無線通信部106と接続され、第2通信インタフェース201-2を介して補助制御部107、ブレーキ制御部108、エンジン制御部109、およびパワーステアリング制御部110と接続される。
自律走行制御装置2は、マルチコアプロセッサ202において、自動運転制御のための処理を実行する。マルチコアプロセッサ202は、第1通信インタフェース201-1から入力される、カメラ情報取得部101、レーダ情報取得部102、レーザ情報取得部103、及び自車位置情報取得部104からのセンサ情報、自動運転設定部105からの自動運転設定情報を取得する。取得した情報を用いて周辺の認知処理や軌道の算出処理を実行し、算出処理結果を基に、制動力や駆動力などの制御指令を第2通信インタフェース201-2から出力する。
自律走行制御装置2が処理を実行するためのプログラムはプログラム並列化装置111において作成される。自律走行制御装置2は、無線通信部106からプログラム情報を取得し、記憶部204に格納してもよい。
<プログラム並列化装置の機能構成>
図4は、プログラム並列化装置111の機能構成図である。プログラム並列化装置111は、判別部31と、事前処理部32と、並列化部33と、事後処理部34と、統合部35と、コンパイラ39と、装置記憶部37とを備える。判別部31、事前処理部32、並列化部33、事後処理部34、統合部35、およびコンパイラ39は、CPU251がROM252に格納されるプログラムを実行することにより実現される。
装置記憶部37には、オリジナルプログラム51と、対象プログラム52と、事前処理後プログラム53と、変換済プログラム54と、逆変換付加プログラム55と、対象外プログラム56と、統合済プログラム57とが格納される。なお装置記憶部37とは、図2に示したRAM253とフラッシュメモリ254を含む概念であり、両者のいずれでもよいし両者をあわせることで実現されてもよい。ただし符号51~符号57で示すプログラムは、説明のために列記したにすぎず、この全てが装置記憶部37に同時に存在することは必須ではない。
オリジナルプログラム51は、あらかじめ作成されたプログラムコードであり、たとえばプログラマやソースコードの自動生成ツールにより作成される。オリジナルプログラム51には、後述するような並列化に関する明示の指令は記載されていない。すなわちオリジナルプログラム51はマルチコアプロセッサでの処理に特化していないので、オリジナルプログラム51は「シングルコアプロセッサ用プログラム」とも呼べる。
対象プログラム52は、オリジナルプログラム51のうち、判別部31により並列処理の対象と判断されたプログラムである。対象外プログラム56は、オリジナルプログラム51のうち、判別部31により並列処理の対象でないと判断されプログラムである。すなわち、対象プログラム52と対象外プログラム56とをあわせると、オリジナルプログラム51となる。
事前処理後プログラム53は、事前処理部32により事前処理が施された対象プログラム52である。変換済プログラム54は、並列化部33により並列化処理が施された事前処理後プログラム53である。逆変換付加プログラム55は、事後処理部34により出力されるプログラムであり、並列化部33が並列化しなかった変換済プログラム54の部分を逆変換したプログラムである。詳しくは後述する。
統合済プログラム57は、逆変換付加プログラム55と対象外プログラム56とを結合したプログラムである。対象外プログラム56は、オリジナルプログラム51から対象プログラム52を除いたプログラムであり、対象プログラム52は様々な処理により並列処理に適した逆変換付加プログラム55に変換された。そのため統合済プログラム57は、並列処理に最適化されたオリジナルプログラム51とも言える。
判別部31は、オリジナルプログラム51を処理対象として、対象プログラム52および対象外プログラム56を出力する。判別部31はオリジナルプログラム51を読み込み、並列処理の対象と判断する部分を対象プログラム52として出力し、並列処理の対象外と判断する部分を対象外プログラム56として出力する。判別部31が並列処理の対象と判断するのは、向上可能性と処理可能性の両方を満たす対象プログラム52の一部分である。向上可能性とは、並列化により処理速度が向上する可能性が高いことを意味する。処理可能性とは、並列化部33による並列化の処理が可能なことである。
並列化部33による並列化の処理が可能な場合には、特別な処理を施すことなくそのまま並列化部33が処理可能である場合と、事前処理部32が記述変換処理を施すことで並列化部33が処理可能になる場合とが含まれる。すなわち処理可能性が否定される場合とは、そのままでは並列化部33による並列化の処理が不可能であり、かつ事前処理部32による記述変換処理が不可能な場合である。
判別部31は、オリジナルプログラム51に対してプロファイリングを行い、並列化により処理速度が向上する可能性が高く、かつ並列化部33が処理可能なように記述変換が可能な関数を並列処理の対象と判断する。判別部31はたとえばプロファイラを用いて実現される。判別部31は、各関数の実行時間の計測や関数同士の依存関係を考慮して並列化の対象を決定してもよい。
事前処理部32は、対象プログラム52を処理対象とし、事前処理後プログラム53を出力する。事前処理部32は、既知である並列化部33の処理制限に沿うように対象プログラム52を書き換える。この書き換えを「記述変換処理」とも呼ぶ。並列化部33の処理制限とはたとえば、変数の型の制限や関数呼び出しの制限である。たとえば事前処理部32は、変数の型において並列化部33に浮動小数点形式の倍精度の変数である「double」型が使用できない制限が存在する場合は、浮動小数点形式の単精度である「float」型に書き換える。また事前処理部32は、関数呼び出しにおいて並列化部33は再帰呼び出しに対応できない制限がある場合には、再帰関数を非再帰関数に書き換える。
なお事前処理部32は、事後処理部34による逆変換処理が可能なように、事前処理の内容を記録する。この記録は、事前処理後プログラム53に特定の書式を有するコメントとして記録してもよいし、事前処理後プログラム53に特定の文字列を埋め込んでもよいし、不図示の中間処理ファイルに書き出してもよい。事前処理後プログラム53へのコメントとしての記録とはたとえば、「// #preconv32# double value1 >> float value1」である。このコメントは、冒頭の「#preconv32#」が事前処理部32の記載であることを示し、さらに「double value1」を「float value1」に書き換えたことを示している。
事前処理後プログラム53に特定の文字列を埋め込む方法とは、たとえば事前処理後プログラム53に「typedef float _preconv32_double_float」および「_preconv32_double_float value1」と記載する方法である。この記載は、「typedef」で規定する新規な名称の冒頭に「_preconv32_」を記載することで事前処理部32の処理であることを示している。さらに「double_float」が「double」型を「float」型に変更したことを示している。
並列化部33は、事前処理後プログラム53を処理対象とし、変換済プログラム54を出力する。並列化部33は、既知の並列化ツールであり、ソースコードをソースコードに変換する。すなわち並列化部33はコンパイラではなくソースコードを書き換えるプログラムである。並列化部33は、事前処理後プログラム53を書き換えてコンパイラ39に並列化に関する明示の指令を与える。並列化部33が書き換えた箇所は、たとえば「#pragma parallel」などの特定の文字列に続けて、具体的な並列処理の指令が挿入さる。
なお並列化部33は、少なくとも事前処理部32が記載するコメントは消去せずに変換済プログラム54にそのまま残す。並列化部33は、事前処理部32が記載するコメントの特徴を事前に指定されることで、自動処理により事前処理部32が記載するコメントのみを選択して残して他のコメントは削除してもよい。また並列化部33は、動作オプションによりオペレータからコメントを削除しない動作モードが指定されてもよい。
事後処理部34は、変換済プログラム54を処理対象とし、逆変換付加プログラム55を出力する。事後処理部34は、変換済プログラム54を読み込んで、並列化部33による書き換えが行われていない箇所、たとえば並列化部33により書き換えられていない関数を特定する。たとえば関数の直前に「#pragma parallel」などの特定の文字列が記載されていない関数を特定する。そして事後処理部34は、並列化部33による書き換えが行われていない箇所を事前処理部32による事前処理が行われる前の状態に書き換える。換言すると、事前処理部32はプログラムを並列化に適した形式に変換したが、事後処理部34は元の形式に逆変換する。
事後処理部34による逆変換の処理は、事前処理部32が前述のようにその処理内容を記録しているので、その記録を参照することで行われる。事後処理部34はたとえば、変換済プログラム54に「// #preconv32# double value1 >> float value1」というコメントが含まれており、かつ「float value1」の宣言が含まれる関数の直前に「#pragma parallel」などの特定の文字列が記載されていない場合は、「float value1」を「double value1」に書き換える。
統合部35は、逆変換付加プログラム55および対象外プログラム56を処理対象とし、統合済プログラム57を出力する。すなわち統合部35は、逆変換付加プログラム55の記載内容、および対象外プログラム56の記載内容をあわせて、統合済プログラム57を作成する。
<動作フローチャート>
図5は、プログラム並列化装置111の処理を示すフローチャートである。プログラム並列化装置111はたとえば、オリジナルプログラム51が記憶部に保存されると、または外部から処理実行の指令を受け取ると、以下のフローチャートで示される動作を実行する。なお以下に説明するステップS401~S404は判別部31が実行し、ステップS405は事前処理部32が実行し、ステップS406は並列化部33が実行し、ステップS407は事後処理部34が実行し、ステップS408は統合部35が実行し、ステップS409はコンパイラ39が実行する。以下では、プログラム並列化装置111がオリジナルプログラム51に基づき統合済プログラム57を作成する方法を「プログラム並列化方法」と呼ぶ。
ステップS401では、プログラム並列化装置111は、オリジナルプログラム51をプロファイリングする。具体的には、プログラム並列化装置111は、逐次処理から並列処理に変更することで高速化できる箇所を抽出する。
ステップS402では、プログラム並列化装置111は、ステップS401で抽出した結果に基づいて、前述の向上可能性の評価、すなわち並列処理により高速化できる見込みがあるか否かを判断する。具体的には判別部31は、並列処理によりオリジナルプログラム51の少なくとも一部が高速化できる見込みがあると判断するとステップS403に進む。判別部31は、オリジナルプログラム51のいずれの箇所も並列処理により高速化できる見込みがないと判断するとステップS409に進む。
ステップS403では、プログラム並列化装置111の事前処理部32は、ステップS402で高速化が見込まれたプログラムについて、前述の処理可能性の評価、換言すると、記述変換できるか否かを判断する。ここで実施する記述変換は、プログラム並列化を実施するために必要なプログラムの変換であり、後述する並列化部33が解析できる範囲の記述に変換することを示す。プログラムの型や処理するビットサイズを調整することが一般的に求められ、具体的な変換例としては、倍精度を単精度に調整するために、OS(Operation System)が採用するデータモデルに応じてlong long型の長いビットサイズの型をint型などの短いビットサイズの型に変換することがあげられる。
ステップS403において判別部31は、高速化が見込まれたプログラムが記述変換できると判断する場合はステップS404に進む。判別部31は、高速化が見込まれたプログラムの全てが記述変換できない、すなわち、並列化部33がプログラムを解析できないと判断するとステップS409に進む。ステップS404では、プログラム並列化装置111の判別部31は、並列処理による高速化が見込め、記述変換が可能なプログラムを抽出する。具体的には判別部31、シングルコアプロセッサ用のままとして使用する部分を対象プログラム52として保存し、マルチコアプロセッサ用にプログラム並列化を実施する部分を対象外プログラム56として保存する。
ステップS405では、プログラム並列化装置111の事前処理後プログラム53は、抽出したプログラムの記述変換を実施する。具体的には、ステップS404において保存した対象プログラム52に対して記述変換を実施して事前処理後プログラム53を出力する。ステップS406では、プログラム並列化装置111の並列化部33は、ステップS405において出力した事前処理後プログラム53を対象として並列化を行い、変換済プログラム54を出力する。換言するとステップS406では、シングルコアプロセッサ用のプログラムである逐次プログラム、すなわち事前処理後プログラム53からマルチコアプロセッサ用のプログラムである並列プログラム、すなわち変換済プログラム54が作成される。
ステップS407では、プログラム並列化装置111の事後処理部34は、ステップS406において並列化部33によって並列化されなかったプログラムに対して記述逆変換を実施する。並列化されなかったプログラムにおいて、ステップS405において事前処理部32が実行した記述変換を、処理開始時に入力された元々のプログラムの記述にもどすように逆変換を実施する。
ステップS408では、プログラム並列化装置111の統合部35は、ステップS407で記述逆変換した逆変換付加プログラム55、およびステップS404で記述変換を実施しなかった対象外プログラム56を結合して統合済プログラム57を生成する。続くステップS409では、コンパイラ39は統合済プログラム57をコンパイルしてバイナリコード59を生成し、図5に示す処理を終了する。ただしコンパイラ39は、ステップS402およびステップS403からステップS409に進んだ場合には、統合済プログラム57ではなくオリジナルプログラム51をコンパイルする。以上が図5の説明である。
<各処理とプログラムとの関係>
図6は、プログラム並列化装置111における統合済プログラム57の作成までの各処理とプログラムとの関係を示す図である。図5に示したフローチャートと合わせて説明する。オリジナルプログラム51は、プログラム並列化装置111に入力されるシングルコアプロセッサ用の逐次プログラムである。「C」の記載は、例えばC言語で書かれたプログラムであることを示す。
オリジナルプログラム51は、並列化抽出ステップS501において、対象プログラム52と、対象外プログラム56に分けられる。並列化抽出ステップS501は、図5に示したステップS401からステップS404に相当する。対象プログラム52は、ステップS404においてマルチコアプロセッサ用にプログラム並列化を実施する部分として抽出されたプログラムである。対象外プログラム56は、ステップS404に抽出されなかったプログラム、すなわちオリジナルプログラム51から対象プログラム52を除いたプログラムである。ステップS402およびステップS403において、ステップS409に進むと判断された場合には、並列化抽出ステップS501において対象プログラム52が空集合の場合と考えてもよい。
次に、対象プログラム52は、記述変換ステップS502において、事前処理後プログラム53に変換される。記述変換ステップS502は、図5に示したステップS405に相当する。次に、事前処理後プログラム53は、並列化処理ステップS503において、変換済プログラム54に変換される。並列化処理ステップS503は、図5に示したステップS406に相当する。
次に、変換済プログラム54は、記述逆変換ステップS504において、逆変換付加プログラム55に変換される。記述逆変換ステップS504は、図5に示したステップS407に相当する。次に、逆変換付加プログラム55及び対象外プログラム56は、結合ステップS505において、統合済プログラム57に変換される。結合ステップS505は、図5に示したステップS408に相当する。
<プログラムの変化の概要>
図7は、プログラム並列化装置111における、プログラムの変化の概要を示す図である。図7では、各プログラム内部に具体的なソースコードの名称を記載しており、図示横方向の長さがそのソースコードをそのままコンパイルして実行したと仮定した場合の処理時間を示す。また図7の説明では、「ソースコードXをそのままコンパイルして実行したと仮定した場合の処理時間」のことを、「ソースコードXの処理時間」と省略して記載する。さらに図7では、Nが3であり、3つのコア203を備えるマルチコアプロセッサ202を用いた例で説明する。
図7に示すオリジナルプログラム51は、ソースコードA~Cに記載される処理を順番に実施する逐次プログラムであることを示す。なおオリジナルプログラム51は、処理A~Cを順番に実施する逐次プログラムとも言える。並列化抽出ステップS501により、ソースコードAおよびソースコードBは高速化が見込まれ記述変換が可能と判断されて対象プログラム52となり、残りのソースコードCは対象外プログラム56となった。対象プログラム52に含まれる、ソースコードAおよびBは、オリジナルプログラム51から何ら変化がないため、図示横方向の長さである処理時間は変化がない。
事前処理後プログラム53は、図6に示した記述変換ステップS502により、ソースコードA1およびB1に記載される処理を順番に実施するプログラムとして構成されている。ソースコードA1は、ソースコードAに対して並列化部33が処理可能なように記述変換が適用されたソースコードである。ソースコードB1は、ソースコードBに対して記述変換が適用されたソースコードである。図7では、ソースコードA1,B1のようにハッチングを施しているソースコードは、記述変換が適用されていることを示す。
ここで、事前処理後プログラム53は、対象プログラム52より処理時間が長くなっている。この理由は以下のとおりである。すなわち、記述変換により並列化部33が解析できる範囲にプログラムの型や処理するビットサイズ調整などを実施する場合は、制約された条件の中で同じ処理を実行できるように対応する必要がある。そしてこの記述変換を行ったソースコードをそのままコンパイルして得られるバイナリは、一般的には処理時間が長くなることなどのデメリットが存在すると考えられるからである。
変換済プログラム54は、図6に示した並列化処理ステップS503の処理により、ソースコードA1に示される処理が3つに並列化されて、A2-1,A2-2,およびA2-3として並列に実行され、その後にソースコードB2に示される逐次処理が実行されることを示している。すなわち図7に示す例では、並列化部33により、ソースコードA1は並列化のための記述がなされ、ソースコードB1は並列化のための処理がなされなかったことを示す。ソースコードA1の処理は変換済プログラム54では処理A2-1~処理A2-3として3つに並列化されるため、図示横方向の長さで示す実行時間はソースコードA1よりも短いだけでなく、ソースコードAよりも短い。記述変換や並列化のためのオーバーヘッドが存在しても、並列化による利点が大きく処理時間が短縮されるためである。
なお並列化部33により並列化のための記述がされなかったソースコードB1も、並列化部33によりソースコードB2に書き換えられている。これは、並列化部33によりコンパイル処理がしやすい記述に書き換えられたことを意味する。なおソースコードB1の処理時間と、ソースコードB2の処理時間とは略同一である。
逆変換付加プログラム55は、図6に示した記述逆変換ステップS504により、3つに並列化された並列プログラム(処理A2-1~処理A2-3)及び処理Bの逐次プログラムを順番に実施するプログラムとして構成されている。
ここで、逆変換付加プログラム55は、変換済プログラム54より処理時間が短くなっている。並列化部33で並列化されなかったソースコードB2に対して記述逆変換を実施し、調整していたプログラムの型や処理するビットサイズを元に戻すなど、記述変換前と同じ処理に戻すように対応することで、処理時間を短くすることができる。統合済プログラム57は、図6に示した結合ステップS505により、逆変換付加プログラム55と対象外プログラム56とを結合したものである。
<情報受信シーケンスの例>
図8は、プログラム並列化装置111から自律走行制御装置2への情報受信を示すシーケンス図である。図8では、例えば、自律走行制御装置2がマルチコアプロセッサ202の異常を検知した場合に、クラウド上などに設置されたプログラム並列化装置111に通知し、OTAにより無線ネットワーク経由で新しいプログラム情報を受信する例を示す。
はじめに、自律走行制御装置2は、マルチコアプロセッサ202の障害を検知すると(S701)、検知した情報を車載システム1の無線通信部106に転送する(S702)。次に、無線通信部106は、無線ネットワークを経由し、受信した検知情報をプログラム並列化装置111に転送する(S703)。
検知情報を受信したプログラム並列化装置111は、マルチコアプロセッサ202向けのプログラムを再構成する(S704)。具体的には、例えば、検知情報に基づき、障害の影響が無く、使用可能なコア203の数に応じたプログラム並列化処理を実施する。次に、プログラム並列化装置111は、再構成したプログラムの情報を無線通信部106に転送する(S705)。次に、無線通信部106は、受信したプログラム情報を自律走行制御装置2に転送する(S706)。その後、自律走行制御装置2が、車載システム1における更新タイミングやその方法に従って新しいプログラムで稼働し(S707)、処理を完了するとしてもよい。
本実施の形態によれば、自動変換ツールに合わせた記述変換を実施するだけでなく、記述逆変換を組み合わせることで、プログラム並列化における処理時間を短縮することができる。したがって、プログラム並列化を通して作成された並列プログラムにより動作するマルチコアプロセッサの性能を向上することができる。また、本実施例によれば、プログラムを実行するマルチコアプロセッサの状態に応じてプログラムを再構成することができる。
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)プログラム並列化装置111は、シングルコアプロセッサ用プログラムであるオリジナルプログラム51からマルチコアプロセッサ用プログラムである統合済プログラム57を生成するプログラム並列化方法を実行する。プログラム並列化方法は、シングルコアプロセッサ用プログラムのプログラム並列化処理のための事前変換を実行する事前変換ステップ(図5のステップS405)と、事前変換されたシングルコアプロセッサ用プログラムである事前処理後プログラム53を並列化部33が並列化処理する並列化処理ステップ(図5のステップS406)と、並列化処理されたシングルコアプロセッサ用プログラムのうち並列化されなかった領域、たとえば図7に示す例ではソースコードB2に事前変換の逆変換を実行する逆変換ステップ(図5のステップS407)と、を含む。そのため、並列化部33により並列化されなかったプログラムの記述を逆変換することで、記述変換によるデメリットを解消できる。ここでいうデメリットとは、並列化部33による処理が可能なように、変数のビット数を減らすことで計算の精度が低下することや、再帰的な表現を避けるように書き換えることで演算時間が延びることなどである。すなわちプログラム並列化装置111は、事後処理部34が逆変換を行うことで、出力するプログラムの性能を向上させることができる。
(2)プログラム並列化方法には、シングルコアプロセッサ用プログラムのうち、プログラム並列化処理による高速化効果が見込まれ、プログラム並列化処理のための事前変換が可能である第1のプログラム領域である対象プログラム52を抽出する抽出ステップ(図5のステップS402およびS403)が含まれる。事前変換ステップでは、第1のプログラム領域である対象プログラム52に事前変換を実行する。そのため事前変換の対象をオリジナルプログラム51の全体ではなくその一部に限定することで、ステップS404~S407における処理負荷を軽減できる。
(3)オリジナルプログラム51のうち、対象プログラム52以外の第2のプログラム領域である対象外プログラム56及び、事前変換と並列化処理と逆変換とを実行された第1のプログラムである逆変換付加プログラム55を結合して統合済プログラム57を得る結合ステップ(図5のステップS408)を含む。そのため並列化処理に適しないプログラムをあらかじめ分離しておき、並列化処理の後に結合することで、オリジナルプログラム51の全体をまとめてコンパイラ39で処理ができる。
(4)事前変換処理(図5のステップS405)は、大きいビットサイズの型を小さいビットサイズの型に記述を変更する処理、たとえば倍精度型を単精度型に変更する処理を含む。逆変換処理(図5のステップS407)は、小さいビットサイズの型を大きいビットサイズの型に記述を変更する処理、たとえば単精度型を倍精度型に変更する処理を含む。そのため処理可能な変数のビットサイズに制限がある並列化部33を用いて並列化処理を実行することができる。
(5)プログラム並列化装置111は、前述のプログラム並列化方法を実行する。そのためプログラム並列化装置111は、並列化されていない部分についての記述変換によるデメリットが解消されたプログラムである統合済プログラム57を出力できる。
(6)自律走行制御装置2は、マルチコアプロセッサ202と、記憶部204と、を備える。記憶部204は、前述のプログラム並列化方法により作成されたマルチコアプロセッサ用プログラムである統合済プログラム57をコンパイルして得られるバイナリコード59を有する。そのため自律走行制御装置2は、並列化部33の働きにより並列化され、かつ並列化されていない部分については事後処理部34により記述変換によるデメリットが解消されたバイナリコード59を実行できる。
(変形例1)
上述した実施の形態では、プログラム並列化装置111は、図7において並列化部33で並列化されなかったソースコードB2のみに対して記述逆変換を実施した。しかし事後処理部34は、並列処理の順序の依存関係を壊さず、コア間の同期を確保できる範囲であれば、並列化部33で並列化されたソースコードA2に対しても記述逆変換を実施してもよい。
(変形例2)
上述した実施の形態では、プログラム並列化装置111はコンパイラ39を含んで構成された。しかしプログラム並列化装置111はコンパイラ39を含まず、ネットワーク等を介して接続される他の装置に含まれるコンパイラを利用してもよい。
(変形例3)
プログラム並列化装置111は判別部31を備えず、オリジナルプログラム51の全体を事前処理部32が処理対象としてもよい。またこの場合は、対象外プログラム56が存在しないので、プログラム並列化装置111は統合部35も備えなくてよい。
(変形例4)
プログラム並列化装置111が作成したプログラムは、あらかじめ自律走行制御装置2のROM252に格納されてもよい。
上述した各実施の形態および変形例において、機能ブロックの構成は一例に過ぎない。別々の機能ブロックとして示したいくつかの機能構成を一体に構成してもよいし、1つの機能ブロック図で表した構成を2以上の機能に分割してもよい。また各機能ブロックが有する機能の一部を他の機能ブロックが備える構成としてもよい。
本発明は前述した実施例や変形例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例や変形例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されるものではない。また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
1…車載システム
2…自律走行制御装置
31…判別部
32…事前処理部
33…並列化部
34…事後処理部
35…統合部
39…コンパイラ
51…オリジナルプログラム
52…対象プログラム
53…事前処理後プログラム
54…変換済プログラム
55…逆変換付加プログラム
56…対象外プログラム
57…統合済プログラム
59…バイナリコード
111…プログラム並列化装置
202…マルチコアプロセッサ
204…記憶部

Claims (6)

  1. コンピュータが実行する、シングルコアプロセッサ用プログラムからマルチコアプロセッサ用プログラムを生成するプログラム並列化方法であって、
    前記シングルコアプロセッサ用プログラムのプログラム並列化処理のための事前変換を実行する事前変換ステップと、
    前記事前変換された前記シングルコアプロセッサ用プログラムを並列化処理する並列化処理ステップと、
    前記並列化処理された前記シングルコアプロセッサ用プログラムのうち並列化されなかった領域に前記事前変換の逆変換を実行する逆変換ステップと、を含むプログラム並列化方法。
  2. 請求項1に記載のプログラム並列化方法であって、
    前記シングルコアプロセッサ用プログラムのうち、前記プログラム並列化処理による高速化効果が見込まれ、前記プログラム並列化処理のための前記事前変換が可能である第1のプログラム領域を抽出する抽出ステップをさらに含み、
    前記事前変換ステップは、前記第1のプログラム領域に前記事前変換を実行するプログラム並列化方法。
  3. 請求項2に記載のプログラム並列化方法であって、
    前記シングルコアプロセッサ用プログラムのうち、前記第1のプログラム領域以外の第2のプログラム領域及び、前記事前変換と前記並列化処理と前記逆変換とを実行された第1のプログラム、を結合する結合ステップをさらに含むプログラム並列化方法。
  4. 請求項1に記載のプログラム並列化方法であって、
    前記事前変換は、大きいビットサイズの型を小さいビットサイズの型に記述を変更する処理を含み、
    前記逆変換は、小さいビットサイズの型を大きいビットサイズの型に記述を変更する処理を含むプログラム並列化方法。
  5. 請求項1に記載のプログラム並列化方法を実行するプログラム並列化装置。
  6. 請求項1に記載のプログラム並列化方法を用いて作成された前記マルチコアプロセッサ用プログラムを格納する記憶部と、
    前記記憶部に格納される前記マルチコアプロセッサ用プログラムを実行するマルチコアプロセッサとを備える電子制御装置。
JP2020030512A 2020-02-26 2020-02-26 プログラム並列化方法、プログラム並列化装置、電子制御装置 Active JP7323478B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020030512A JP7323478B2 (ja) 2020-02-26 2020-02-26 プログラム並列化方法、プログラム並列化装置、電子制御装置
PCT/JP2021/003111 WO2021171897A1 (ja) 2020-02-26 2021-01-28 プログラム並列化方法、プログラム並列化装置、電子制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020030512A JP7323478B2 (ja) 2020-02-26 2020-02-26 プログラム並列化方法、プログラム並列化装置、電子制御装置

Publications (2)

Publication Number Publication Date
JP2021135664A JP2021135664A (ja) 2021-09-13
JP7323478B2 true JP7323478B2 (ja) 2023-08-08

Family

ID=77490092

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020030512A Active JP7323478B2 (ja) 2020-02-26 2020-02-26 プログラム並列化方法、プログラム並列化装置、電子制御装置

Country Status (2)

Country Link
JP (1) JP7323478B2 (ja)
WO (1) WO2021171897A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004157893A (ja) 2002-11-08 2004-06-03 Hitachi Ltd 擬寸法配列の整合配列化方法
WO2014104912A1 (en) 2012-12-26 2014-07-03 Huawei Technologies Co., Ltd Processing method for a multicore processor and milticore processor
JP7261992B2 (ja) 2017-10-31 2023-04-21 パナソニックIpマネジメント株式会社 通信装置、通信システム、機器制御システム、通信制御方法及びプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07261992A (ja) * 1994-03-22 1995-10-13 Matsushita Electric Ind Co Ltd プログラム変換編集方法およびプログラム変換編集装置
JP3395646B2 (ja) * 1998-03-31 2003-04-14 日本電気株式会社 プログラム並列化装置及び並列化用プログラムを記録した記録媒体
JP2012014526A (ja) * 2010-07-01 2012-01-19 Hitachi Ltd プログラムコードの構造変換装置、並びにコード構造変換プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004157893A (ja) 2002-11-08 2004-06-03 Hitachi Ltd 擬寸法配列の整合配列化方法
WO2014104912A1 (en) 2012-12-26 2014-07-03 Huawei Technologies Co., Ltd Processing method for a multicore processor and milticore processor
JP7261992B2 (ja) 2017-10-31 2023-04-21 パナソニックIpマネジメント株式会社 通信装置、通信システム、機器制御システム、通信制御方法及びプログラム

Also Published As

Publication number Publication date
WO2021171897A1 (ja) 2021-09-02
JP2021135664A (ja) 2021-09-13

Similar Documents

Publication Publication Date Title
CN107976986B (zh) 用于对车辆电子控制模块编程的方法
DE102014211047A1 (de) Parallelisierungskompilierverfahren, Parallelisierungskompilierer, Parallelisierungskompiliervorrichtung und Bordvorrichtung
US20220044149A1 (en) Techniques for generating machine learning trained models
CN111752571A (zh) 程序升级方法、装置、设备及存储介质
CN110554913A (zh) 神经网络系统及其操作方法以及应用处理器
JP2017228029A (ja) 並列化方法、並列化ツール、車載装置
JP3765923B2 (ja) ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体
US10481883B2 (en) Inter-file optimization program generation method, and program generator
JP7323478B2 (ja) プログラム並列化方法、プログラム並列化装置、電子制御装置
CN103488517A (zh) Php代码编译方法、php代码运行方法及装置
KR101826828B1 (ko) 로그 데이터 관리 시스템 및 방법
KR20200053170A (ko) 인공지능 실행가속을 위한 인공지능 실행모델 설정방법 및 인공지능 실행가속시스템
US11789730B2 (en) Electronic control device and control method
CN116596048A (zh) 一种深度学习模型推理部署的方法和系统
CN111198718A (zh) 一种基于fpga的处理器启动方法和处理器
EP2336883B1 (en) Programming system in multi-core environment, and method and program of the same
US10157062B2 (en) Method for operating a microprocessor
US11947975B2 (en) Offload server, offload control method, and offload program
CN112989352A (zh) 用于基于模型的分析的方法和设备
WO2021074874A1 (en) Techniques for training systems for autonomous vehicle navigation
JP6933001B2 (ja) 並列化方法、並列化ツール
US10088834B2 (en) Control system having function for optimizing control software of numerical controller in accordance with machining program
CN117313700B (zh) 汽车场景编排文件的条件表达式生成方法、装置及介质
US20230289085A1 (en) Computer-implemented method for optimizing the memory of a partitioned system
JP7201381B2 (ja) 電子制御装置、並列処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220602

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: 20230725

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230727

R150 Certificate of patent or registration of utility model

Ref document number: 7323478

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150