JP2011233085A - プロセッサ、電子制御ユニット、負荷分散方法 - Google Patents

プロセッサ、電子制御ユニット、負荷分散方法 Download PDF

Info

Publication number
JP2011233085A
JP2011233085A JP2010105291A JP2010105291A JP2011233085A JP 2011233085 A JP2011233085 A JP 2011233085A JP 2010105291 A JP2010105291 A JP 2010105291A JP 2010105291 A JP2010105291 A JP 2010105291A JP 2011233085 A JP2011233085 A JP 2011233085A
Authority
JP
Japan
Prior art keywords
simd
arithmetic
calculation
alu
instruction
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.)
Pending
Application number
JP2010105291A
Other languages
English (en)
Inventor
Toshiro Isomura
俊郎 磯村
Tetsu Nakaima
哲 中嶋
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.)
Toshiba Corp
Toyota Motor Corp
Original Assignee
Toshiba Corp
Toyota Motor 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 Toshiba Corp, Toyota Motor Corp filed Critical Toshiba Corp
Priority to JP2010105291A priority Critical patent/JP2011233085A/ja
Publication of JP2011233085A publication Critical patent/JP2011233085A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】演算時間を最小化するようにSIMD型演算処理手段と逐次型演算処理手段とに処理データを配分するプロセッサ、電子制御ユニット及び負荷分散方法を提供すること。
【解決手段】互いに並列に演算を実行可能なSIMD型演算装置16及び演算装置14を1つの集積回路に搭載したプロセッサ100であって、所定の命令の演算時間が最小になるように、前記命令に伴う演算をSIMD型演算装置16と前記演算装置14に配分するスケジュール制御装置11、を有することを特徴とする。
【選択図】図2

Description

本発明は、複数の演算装置を備えたプロセッサ等に関し、特に、演算を各演算装置に配分可能なプロセッサ、電子制御ユニット及び負荷分散方法に関する。
車両の特徴の1つとしてグレード間の仕様差が大きいことが挙げられる。例えば、エンジンの気筒数、排気量、出力、サスペンションの種類、運転支援のための画像処理の種類、エアバッグの数等は、車両のグレードによって異なることが少なくない。これら種々の車載装置はマイコンを備えたECU(電子制御ユニット)により電子制御されるようになっているが、車両によって仕様差があることは、マイコンに必要な演算能力も異なることを意味する。すなわち、エンジンの気筒毎に制御量を決定する演算であれば、気筒の数だけ演算が必要になるので、マイコンに要求される演算能力も気筒数によって変わってくる。画像処理についても同様に、撮影した画像に施す画像処理の種類が多くなればマイコンに要求される演算能力も高くなる。
従来、マイコンの演算能力を効率的に利用する技術が考えられている(例えば、特許文献1参照。)。特許文献1には、SIMD型演算処理手段と、逐次型演算処理手段とを有し、画像処理アルゴリズムに応じて異なるアーキテクチャによる演算処理手段をSIMD演算処理手段と逐次型演算処理手段とで使い分ける画像処理装置が開示されている。
特開2001−092946号公報
しかしながら、特許文献1に記載の画像処理装置は、複数のSIMD型演算処理手段と逐次型演算処理手段とを組み合わせて演算時間の短縮を図るものであり、SIMD型演算処理手段が1つしか搭載できないようなマイコンでは効果的に作用しない。換言すれば、画像処理の種類と演算処理手段の関係が固定であり、SIMD型演算処理手段に適した画像処理を、逐次型演算処理手段にて演算することは考えられていない。このため、演算時間の短縮には限界があるという問題がある。
ところで、車両のような製品のグレード分けに対応するため、複数のグレードに車両を区分して必要な演算能力を線引きし、グレードに応じた複数のマイコンを設計することが考えられる。
図1は、車両を3つのグレードに区分した場合に、各グレードに対応するマイコンの概略構成図を示す。説明のため、ハイエンドの車両では8気筒のエンジンであるとし、ミドルクラスの車両では6気筒のエンジンであるとし、ローエンドの車両では4気筒のエンジンであるとする。各気筒の制御に必要な演算は同じなので、このような複数の同じ演算を効率的に実行するにはデータの並列処理が可能なSIMD(Single Instruction stream Multiple Data stream)演算装置が有効である。このため、ハイエンド用の車両のマイコンでは8×8の行列演算が可能なSIMD
ALU及びSIMDレジスタが、ミドルクラス用の車両のマイコンでは6×6の行列演算が可能なSIMD
ALU及びSIMDレジスタが、ローエンド用の車両のマイコンでは4×4の行列演算が可能なSIMD
ALU及びSIMDレジスタが、それぞれ搭載されている。
しかしながら、図1のようにグレード毎に最適な構成を採用すると、グレードの数だけマイコンの開発が必要になり、また、多品種少量生産になるため、コスト高となる。
マイコンの開発費を抑制し、少品種大量生産にするため、最大性能のマイコンを全グレードの車両に搭載することが考えられる。しかし、ローエンドの車両にハイエンドの車両用のマイコンを搭載すると、演算のための回路があっても全く使われない、いわゆる回路の付け捨てが発生してしまう。例えば、図1のローエンドの車両にハイエンドのマイコンを搭載すると、8×8のSIMD
ALU及びSIMDレジスタの半分はほとんど使用されない可能性がある。
本発明は、上記課題に鑑み、異なるグレートの車両に搭載可能であって、少品種大量生産に適したプロセッサ、電子制御ユニット及び負荷分散方法を提供することを目的とする。
上記課題に鑑み、本発明は、互いに並列に演算を実行可能なSIMD型演算装置及び演算装置を1つの集積回路に搭載したプロセッサであって、所定の命令の演算時間が最小になるように、前記命令に伴う演算をSIMD型演算装置と前記演算装置に配分するスケジュール制御装置、を有することを特徴とする。
異なるグレートの車両に搭載可能であって、少品種大量生産に適したプロセッサ、電子制御ユニット及び負荷分散方法を提供することができる。
車両を3つのグレードに区分した場合の3つのグレードのマイコンの概略構成図を示す。 本実施形態のCPUの概略を説明する図の一例である。 CPUを搭載したマイコンの構成図の一例である。 SIMD演算命令を説明する図の一例である。 ALU及びSIMD ALUのレイテンシの算出パラメータを説明する図の一例である。 ALUによるレイテンシの合計を説明する図の一例である。 SIMD ALUによるレイテンシの合計を説明する図の一例である。 変化率の算出を説明する図の一例である。 ALUの使用状況の判定を説明する図の一例である。 演算スケジュール制御装置の動作手順の一例を示すフローチャート図である。 SIMD ALUとALUのレイテンシの比較を説明する図の一例である。
以下、本発明を実施するための形態について図面を参照しながら説明する。
〔本実施形態のCPU100の概略〕
図2は、本実施形態のCPU100の概略を説明する図の一例である。図示するCPU100は、4Byte×4のSIMDレジスタ15、SIMD ALU16、ALU19及び演算スケジュール制御装置11を有することを特徴とする。
同じ演算を複数のデータに施すSIMD演算命令は、SIMD ALU16により実行した方がALU19で実行するよりも早いので、SIMD演算命令は優先的にSIMD
ALU16に割り振られる。ALU19は、SIMD演算命令に特化されたアーキテクチャではないが、SIMD ALU16と同じ演算を逐次的に実行することができる。
そこで、演算スケジュール制御装置11は、ALU19が演算を行っていない場合、SIMD演算命令をALU19に割り当てることで、1つのSIMD演算命令の演算時間を最小化することを図る。より具体的には、演算スケジュール制御装置11は、ALU19に、1つのSIMD演算命令のうちどのくらいの命令(データ)を割り当てれば、SIMD ALU16とALU19による1つのSIMD演算命令の演算時間(レイテンシ)が最小になるかを見積もり、演算時間が最小になるようにALU19に割り当てるデータを決定する。
こうすることで、SIMD演算命令の一部をALU19が実行することができるようになるため、SIMD ALU16の演算能力を、ハイエンドの車両の仕様に十分な演算能力となるように設計する必要がなくなる。また、ローエンドの車両では、SIMD
ALU16の全回路がSIMD演算命令に使われるので、回路の付け捨てが発生することがない。
したがって、1つのモデルのCPU100を幅広いグレードの車両に搭載することができるようになるので少品種大量生産が可能となり、CPU100のコストダウンが容易になる。
〔マイコン200〕
図3は、図2のCPU100を搭載したマイコン200の構成図の一例を示す。マイコン200は、命令用メモリ21、CPU100、データ用メモリ22、及び、変化率算出回路23を有する。CPU100と命令用メモリ21は命令側バス24を介して接続されており、CPU100とデータ用メモリ22はデータ側バス25を介して接続されている。
まず、CPU100の一般的な構成について説明する。CPU100は、命令デコーダ12、レジスタファイル13及び演算装置14を有する。演算装置14は、FPU(Floating Point number processing Unit)17、LSU(Load Store Unit)18、及び、ALU(Arithmetic and Logic Unit)19を有する。CPU100は、例えば1チップに集積されている。図示するように、1つのCPU100が、ALU19とSIMD
ALU16を有する構成であることが特徴の1つである。
命令用メモリ21は、例えば、フラッシュメモリなどのEEPROMを実体とする不揮発メモリである。命令用メモリ21には、車載装置の制御用のプログラム、演算マップ、及び、OS(必ずしも必須ではない)等が記憶されている。
命令デコーダ12は、不図示のPC(Program Counter)に記憶されたアドレスをアドレスバスに出力し、命令用メモリ21に記憶された命令コード(例えば、全長32bitの長さのオペコードとオペランド)を読み出す。そして、命令デコーダ12は、読み出した命令コードのオペコードに基づき命令を解読して演算の種類を特定すると共に、オペランドから1つ以上のソースオペランドやデスティネーションオペランドを解読する。なお、オペコードの位置は先頭bitを基準にnbitからmbitのように仕様として定められている。デコード結果(演算の種類、ソースオペランド、デスティネーションオペランド)は、レジスタファイル13に記憶される。
後述する演算スケジュールの制御のため、CPU100は、複数の命令コードを予め読み出す機能を有することが好ましい。本実施形態では、レジスタファイル13が命令キューとして利用され、レジスタファイル13に時系列にいくつかのデコード結果が記憶されるものとする。
レジスタファイル13は、命令デコーダ12のデコード結果、演算器の演算結果(ALU又はFPUの四則演算の結果、LSU18が読み出したデータ)、を一時的に記憶する複数のレジスタの集合である。
レジスタファイル13には演算装置14及びSIMDレジスタ15が接続されている。ALU19は、オペコードの解読結果に応じて、四則演算や論理演算を行ったり、レジスタファイル13のレジスタ操作を行ったりする。ALU19は演算結果をレジスタファイル13にライトバックする。また、FPU17は、数を、数値と小数点の位置(指数)で表すことで実数の四則演算を高速に行う演算装置である。
LSU18は、演算の種類がロード命令又はストア命令の場合の専用の演算装置である。ロード命令は、ソースオペランドが指示するアドレスに基づき、データ側バス25を介してデータ用メモリ22からデータを読み出す。読み出したデータは、デスティネーションオペランドが指示するレジスタに格納する。同様に、LSU18はストア命令の場合、レジスタファイル13のソースオペランドが指示するレジスタの内容を、デスティネーションオペランドが指示するデータ用メモリ22のアドレスに記憶する。
データ用メモリ22は、例えば、RAM又はROMであり、さらにデータ側バス25に設けられたバスブリッジを介して周辺機器(各種のI/O、通信回路等)と接続されている(メモリマップドI/O)。変化率算出回路23は、センサ(センサ1〜N)26のセンサ信号からセンサ信号の変化率を算出する。具体的な算出方法は後述する。RAMには、演算装置14による演算結果や、センサ26が検出したセンサ信号、変化率算出回路23が算出した変化率、SIMD
ALU16が演算した演算結果等が記憶される。
続いて、特徴部の1つであるSIMDレジスタ15、SIMD ALU16、及び、関係する変化率算出回路23について説明する。SIMDレジスタ15は、SIMD演算に利用されるレジスタであり、並列度に応じた容量を備える。本実施形態では、SIMDレジスタ15は4×4の行列演算を1度に実行できるように設計されているものとする。したがって、行列の1つの要素のバイト数を4Byteとすれば、SIMDレジスタ15は16Byteの容量を有する。SIMDレジスタ15は、ソースレジスタとディスティネーションで1つなので、SIMDレジスタA(ソースレジスタ)とSIMDレジスタB(ディスティネーションレジスタ)のそれぞれが16Byteの容量を有する。
SIMD ALU16は、SIMD演算命令に応じて、配列 (ベクトルデータ) や行列等、並列された複数のデータに対し並列して演算を実行する。SIMD
ALU16が可能な演算は行列の四則演算であるが、具体的に可能な演算の種類はSIMD
ALU16の実装に依存する。マイコン200で実行可能なSIMD演算命令もSIMD
ALU16の実装に依存している。
一般的な演算手順の流れでは、命令デコーダ12がデコードしてレジスタファイル13に格納されたデコード結果が、演算装置14により実行される命令であれば、その命令はFPU17、LSU18又はALU19のいずれかにより実行される。デコード結果が、SIMD演算命令の場合、SIMD
ALU16がSIMD演算命令を実行する。したがって、原則的には、SIMD演算命令がALU19により実行されることはなかった。
本実施形態では、演算スケジュール制御装置11が、SIMD演算命令を検出すると、ALU19が演算に使われているか否かを判定して、1つのSIMD演算命令をALU19とSIMD
ALU16に配分する。配分することで負荷分散される。そして、配分の際、SIMD
ALU16とALU19による1つのSIMD演算命令の演算時間(例えば、レイテンシ)が最小になるように、配分することが特徴の1つである。
また、変化率算出回路23は、センサ1〜Nの一定期間のセンサ信号に基づき、センサ信号の変化率を算出し、センサ毎に記憶していく回路である。変化率の絶対値が大きいことは、車両が過渡状態であると見なせるので、イベント発生やCPU100への割り込みが生じる可能性が高いと考えられる。このような状況では、マイコン200の処理負荷が増大する傾向になるので、演算スケジュール制御装置11は、SIMD演算命令をALU19とSIMD
ALU16に配分する。
センサ1〜Nは、車両の状態を検出する各種のセンサである。センサ1〜Nは、例えば、クランク角センサ、アクセル開度センサ、ブレーキペダルセンサ、車速センサ等である。なお、センサ1〜Nは、SIMD
ALU16の演算に直接必要な、センサ信号を検出するセンサである必要はない。すなわち、センサ1〜Nが、FPU17、LSU18又はALU19が演算するセンサ信号を検出するセンサであっても、CPU100の処理負荷を増大させるという意味では同じなので、CPU100の処理負荷に間接的に影響しうるセンサ26は、変化率算出回路23が変化率を算出する対象となる。したがって、図示するセンサ1〜N以外に、他のマイコン(ECU)200に接続されたセンサ26が対象となる場合もある。
なお、変化率の絶対値が所定位置以上の場合にのみ、SIMD ALU16とALU19とにSIMD演算命令の演算を配分する必然性は少ないので、変化率の絶対値が所定位置未満の場合に配分してもよい。しかし、変化率の絶対値を監視することで、処理負荷が大きくなる前に処理負荷が大きくなることを予測できるので、変化率の絶対値が所定位置以上の場合にSIMD演算命令の演算を配分することは有効である。
以上のようなマイコン200は、車両の電子制御ユニット(ECU)に搭載される。車両には、エンジンECU、ブレーキECU、ボディECU、ナビ用ECU等、種々のECUが搭載されているが、本実施形態のマイコン200は車両の過渡状態に負荷分散するので、特に制御系のECUに有効である。もちろん、ナビECUのように情報処理系のECUに搭載してもよい。
〔SIMD演算命令について〕
図4(a)はSIMD演算命令の演算対象となるデータの一例を示す図である。「sighed int vec_in_a[4][4]_attribute_((aligned(16)))」は、行列型(ベクトル型)のデータを定義している。「sighed」は符号付きを、「int」はデータ型を、「vec_in_a」は変数名を、「[4][4]」は配列の大きさを、「attribute_((aligned(16)))」はメモリの先頭アドレスが16Byteの倍数になるよう位置あわせ(アライメント)すること、をそれぞれ意味する。位置あわせすることで、行列の1行の4要素が必ず、先頭アドレスから32Byteに格納されることが保証される。したがって、CPU100にとって各要素のアドレスも既知となる。
上記定義に続いて、{1〜16}までの数値が記述されているが、これらが行列の各要素{a11〜a16}となる。行列B(vec_in_b)を定義する記述についても同様である。SIMD演算命令のデータは、並列度が4であれば4×4の行列のデータ、並列度が6であれば6×6の行列のデータ等、並列度に応じて最適化されている。
図4(b)はSIMD演算命令の一例を示す図である。「simd_add(*vec_in_a,
*vec_in_b, *vec_out)」は、SIMD演算命令のうち加算命令である。したがって、このSIMD演算命令は、ポインタ変数「vec_in_a」が示すアドレスの行列Aの各要素とポインタ変数「vec_in_b」が示すアドレスの行列Bの各要素を加算し、ポインタ変数「vec_out」が示すアドレスに記憶する命令である。実際にはコンパイルされたオブジェクトコードになっている。
なお、車両においてSIMD演算命令が利用されるのは、同じ演算で複数の制御対象物の制御量を決定できる場合である。例えば、気筒毎の燃料噴射量、燃料噴射のタイミングの決定、イグナイタの点火タイミングの決定、エアーフロー量の決定、4輪毎のサスペンションの硬さの決定、インホイールモータの駆動トルクの決定、前方画像を使用した白線認識・信号機認識や顔画像を使用した居眠り検知等の画像処理、エアバッグの展開判定等である。
〔レイテンシの算出〕
レイテンシについて説明する。なお、実際にはレイテンシはSIMD演算命令毎に予め演算されており、SIMD演算命令に伴う演算の配分の際に演算スケジュール制御装置11が算出する必要はない。また、レイテンシは、演算スケジュール制御装置11が演算時間を見積もるための指標なので、レイテンシの他、スループット、実時間等を指標としてもよい。
図5は、ALU19及びSIMD ALU16のレイテンシの算出パラメータを説明する図の一例である。ALU19及びSIMD ALU16のレイテンシは、次の4つの因子に影響される。このうち、「行列のサイズ」はデータ量を意味するので残りの3つのレイテンシに直接影響を与える。
・行列のサイズ
・RAMとレジスタ間のロードレイテンシ
・演算レイテンシ
・ライトレイテンシ
<ALU19のレイテンシ>
まず、ALU19のレイテンシを説明する。LSU18がRAM30からデータを読み出すためのロードレイテンシは1サイクル(クロック)である。なお、ロードレイテンシは、CPU100内蔵のRAM30か外付けのRAM30かによって同じマイコン200でも変わりうる。LSU18は1サイクルでは4Byteのデータを伝送できるが、本実施形態ではALU19とFPU17が並列に演算できるよう少なくとも複数のロード命令を並列に実行できるものとする。このような演算方法は、CPU100の実行手順をステージ毎に分けるパイプライン制御において、同じステージを複数設けたスーパスカラと呼ばれることがある。
よって、LSU18は1サイクルで並列的に少なくとも2つの要素をロードすることができる。ロードされる2つの要素は、例えばa11と対応するb11のように、A行列とB行列のそれぞれの要素である。
演算レイテンシは、ALU19において演算毎に決まっている。本実施形態では、4Byteの加算が1サイクル、4Byteの減算が1サイクル、4Byteの積算が4サイクル、4Byteの除算が6サイクルとする。なお、本実施形態の積算や除算は、行列の積算や除算ではなく、各要素の積算や除算を意味する。
LSU18がRAM30にデータを格納するためのライトレイテンシは1サイクルである。ライトレイテンシも、CPU100内蔵のRAM30か外付けのRAM30かによって同じマイコン200でも変わりうる。加算の場合にライトされる要素は、例えば「c11=a11+b11」のように、A行列とB行列の要素を加算して得られる和の行列Cの1つの要素C11である。
図6は、ALU19によるレイテンシの合計を説明する図の一例である。図6では、実際にはコンパイルされた、3つの命令「LOAD、LOAD、ADD」がパイプラインの各ステージで実行される手順を時系列に示す(右に行くほど時間が経過している)。なお、図では3つの命令を1組に、8組の命令が実行されている。
1つめのLOAD(a11)はRAM30からa11をロードする命令を、2つめのLOAD(b11)はRAM30からb11をロードする命令を、それぞれ意味する。ADDはa11とb11の加算命令を、それぞれ意味する。説明のため、CPU100の1ステージを1サイクルとする。上記のとおり、CPU100は並列的に2つの命令を実行可能なので、2つのLOAD命令が並列して実行されている。
図6から明らかなように、3つの命令1組のレイテンシは厳密には5サイクルである。しかし、本実施形態では、デコードまでのステージは、演算スケジュール制御装置11がSIMD演算命令を検出した時点で完了しているので、各命令のデコードのステージまでのレイテンシは考慮しなくてよい。したがって、行列の要素の1つの加算命令の場合、レイテンシは3である。なお、このレイテンシはあくまで一例であって、CPU100の設計に応じて異なる場合がある。
ところで、SIMD演算命令は、SIMD ALU16やSIMDレジスタ15の並列度以下のデータ数では、1度に演算結果が得られる。すなわち、本実施形態のように並列度が4の場合、SIMD
ALU16が行列の4個の要素を加算しても、3つの要素を加算してもレイテンシは同じである。このため、SIMD
ALU16とALU19にSIMD演算命令の演算を配分する場合は、行列の4つの要素を1塊(以下、「ブロック」という)の配分単位とする。
例えば、4×4行列では要素を4つのブロックに区分できるので、3つのブロックをSIMD ALU16で演算した場合、ALU19に配分すべき要素はちょうど1ブロックとなる。なお、ブロックを配分することは、付随する演算もALU16に割り当てることになるので、ブロックの配分とSIMD演算命令の演算の配分は同義である。
図6ではSIMD ALU16の並列度を考慮して、2ブロック(a11〜a22とb11〜b22、a13〜a24とb13〜b24)をALU19で実行した場合のレイテンシを算出している。図示するように、パイプライン制御の利点を生かして、1つの要素の加算に3サイクルかかったのに対し、残りの3つの要素の加算には3サイクルしかかかっていない。以上から、1ブロックを加算する際のレイテンシは「6」となり、2ブロックを加算する際のレイテンシは「10」となっている。同様に、ALU19が、3ブロックを加算する際のレイテンシは「14」、ALU19が4ブロックを加算する際のレイテンシは「18」である。
減算については加算と同じレイテンシである。積算の場合、例えば、「LOAD、LOAD、MUL」の3命令で1つの要素の積算が演算され、除算の場合「LOAD、LOAD、DIV」の4命令で1つの要素の除算が演算される。したがって、積算については実行ステージをMULの4サイクルと、除算については実行ステージをDIVの6サイクルと、それぞれ置き換えれば演算の種類毎のレイテンシを算出することができる。
・加算、減算 1ブロック:6サイクル
2ブロック:10サイクル
3ブロック:14サイクル
4ブロック:18サイクル
・積算 :1ブロック:9サイクル
2ブロック:13サイクル
3ブロック:17サイクル
4ブロック:21サイクル
・除算 :1ブロック:11サイクル
2ブロック:15サイクル
3ブロック:19サイクル
4ブロック:23サイクル
このようなレイテンシのデータが、例えば演算の種類毎かつブロック単位で、演算スケジュール制御装置11がアクセス可能なCPU100のレジスタに登録されている。
<SIMD ALUのレイテンシ>
図5に戻り、SIMD ALU16のレイテンシを説明する。SIMD
ALU16がRAM30からデータを読み出すためのロードレイテンシは1サイクル(クロック)である。なお、ロードレイテンシは、CPU100内蔵のRAM30か外付けのRAM30かによって同じマイコン200でも変わりうる。RAM30からSIMDレジスタ15へのロードは、1サイクルで4Byte×4のデータを伝送できる。これは、CPU100がSIMD
ALU16の並列度に応じて設計されているためである。並列度が6であれば、SIMD
ALU16は1サイクルで4Byte×6のデータをロードできる。したがって、SIMDレジスタ15には、1サイクルで、「a11、a12、a21,a22」「b11、b12、b21,b22」がそれぞれロードされる。
演算のレイテンシは、SIMD ALU16において演算毎に決まっている。本実施形態では、4Byte×4の加算が1サイクル、4Byte×4の減算が1サイクル、4Byte×4の積算が4サイクル、4Byte×4の除算が6サイクルとする。
また、SIMD ALU16がRAM30にデータを格納するためのライトレイテンシは1サイクル(クロック)である。すなわち、4Byte×4のデータを1サイクルでライトできる。ライトレイテンシも、CPU100内蔵のRAM30か外付けのRAM30かによって同じマイコン200でも変わりうる。SIMD
ALU16がRAM30に1サイクルでライトする値は、例えば「c11=a11+b11、c12=a12+b12、c21=a21+b21、c22=a22+b22」である。
図7は、SIMD ALU16によるレイテンシの合計を説明する図の一例である。SIMD
ALU16の演算ではパイプライン制御を考慮しない場合を説明する。これは、単にCPU100がSIMD演算命令にパイプライン制御を実装していない場合を想定しただけであるので、SIMD
ALU16の演算においてもパイプライン制御を考慮してもよい。
図7では、実際にはコンパイルされた、1つの命令「SIMD_ADD」がパイプラインの各ステージで実行される手順を時系列に示す(右に行くほど時間が経過している)。
「R→Sreg」はRAM30からSIMDレジスタ15へのロードを、「SIMD ALU」はSIMD ALU16による演算を、「Sreg→R」はSIMDレジスタ15からRAM30へのライトを、意味する。図示するように、SIMD
ALU16は、1サイクルで行列AとBの4つの要素をロードし、次の1サイクルで加算し、次の1サイクルでRAM30に格納(ライト)している。ALU19の場合と同様に、デコードまでのステージは、演算スケジュール制御装置11がSIMD演算命令を検出した時点で完了しているので、デコードのステージまでのレイテンシは考慮しなくてよい。したがって、行列の4つの要素(1ブロック)の加算の場合、レイテンシは3である。なお、このレイテンシはあくまで一例であって、CPU100の設計に応じて異なる場合がある。
以降は、同じレイテンシで3つのブロックが順番に実行されている。2つめのブロックは6サイクルで、3つめのブロックは9サイクルで、4つめのブロックは12サイクルで、ライトが完了する。以上から、SIMD
ALU16において、1ブロックを加算する際のレイテンシは「3」、2ブロックでは「6」、3ブロックでは「9」、4ブロックでは「12」となる。
減算については加算と同じレイテンシである。積算の場合、例えば、「SIMD ALU」のステージが「4」に、除算の場合「6」になる。したがって、SIMD
ALU16によるレイテンシは以下のようになる
・加算、減算 1ブロック:3サイクル
2ブロック:6サイクル
3ブロック:9サイクル
4ブロック:12サイクル
・積算 1ブロック:6サイクル(1+4+1)
2ブロック:12サイクル(×2)
3ブロック:18サイクル(×3)
4ブロック:24サイクル(×4)
・除算 1ブロック:8サイクル(1+6+1)
2ブロック:16サイクル(×2)
3ブロック:24サイクル(×3)
4ブロック:32サイクル(×4)
これらのレイテンシは、演算スケジュール制御装置11がアクセス可能なCPU100のレジスタに登録されている。
〔変化率について〕
図8は、変化率の算出を説明する図の一例である。図8の右側のグラフは、変化率算出回路23が検出するクランク角センサ27のセンサ値を時系列に示す。クランク角センサ27は、クランクシャフトの回転角度を検知するセンサであり、インジェクションの点火時期や燃料の噴射タイミングの制御、エンジンの回転速度を算出するため等に用いられる。したがって、クランク角が急激に変化する状況は、車両が過渡状態と判定してよい。
図8では、クランク角が増加する過程と減少する過程が図示されているが、いずれの場合も変化率が大きければ、車両が過渡状態となりうるので、変化率は正又は負のいずれでもよい。
変化率算出回路23は、所定のサイクル時間毎に、クランク角センサ27が検出したクランク角D(t)を取得し、直前のクランク角D(t−1)との差から微分値Tを算出する。
変化率=微分値T=|D(t−1)− D(t)| …(1)
最も簡単には、式(1)の微分値Tを変化率とすることができる。また、変化率を安定化させるため、次式のように、複数の微分値Tの移動平均を変化率としてもよい。なお、式(2)のNは、平均の母数であり、3〜10個程度である。
Figure 2011233085
また、センサ26が複数ある場合、変化率算出回路23はセンサ26毎に変化率を算出する。変化率算出回路23は、式(1)又は(2)から算出した変化率をRAM30に記憶するか、又は、演算スケジュール制御装置11に通知する。
また、図示する変化率は一例であって、例えば、アクセルペダルのオン/オフを「1」「0」の信号とみなして「1」から「0」又は「0」から「1」の変化を所定の変化率とみなしてもよい。
なお、センサ26が複数あるため変化率算出回路23が複数の変化率を算出する場合、演算スケジュール制御装置11は、各変化率に重み付けして最終的な変化率を算出する。次式ではa〜cが重み係数であり、予めセンサ26毎に予め決まっている。
変化率=a・変化率1+b・変化率2+c・変化率3
演算スケジュール制御装置11は、変化率が閾値以上か否かに基づき、車両が過渡状態か否かを判定する。過渡状態か否かは、変化率算出回路23が判定してもよい。この場合、変化率算出回路23は、過渡状態であると判定した場合に所定の制御線をHighにすることで演算スケジュール制御装置11に通知する。
〔SIMD演算命令、ALU19の使用状況〕
命令デコーダ12がデコードしたデコード結果はレジスタファイル13に記憶されるので、演算スケジュール制御装置11は、例えば、新しいデコード結果がレジスタファイル13に記憶される毎に、命令がSIMD演算命令か否かを判定する。命令デコーダ12がデコード結果に基づきSIMD演算命令がデコードされたことを演算スケジュール制御装置11に通知してもよい。
そして、演算スケジュール制御装置11は、時系列にレジスタファイル13に記憶されたいくつかデコード結果を参照して、ALU19の使用状況を検出する。
図9は、ALU19の使用状況の判定を説明する図の一例である。レジスタファイル13には例えばFIFO形式でデコード結果が記憶され、実行される順番に命令が記憶されている。図9では、SIMD演算命令が検出された時点で、SIMD演算命令よりも先に実行されるALU演算命令がまだレジスタファイル13に残っている。このような場合、ALU19のレイテンシによっては、SIMD演算命令の実行を開始する際にALU19が使用状態となる。このため、演算スケジュール制御装置11は、SIMD演算命令よりも前の所定数(例えば、1〜数命令)の命令内にALU演算命令が検出されると、ALU19は使用状態であると判定する。
また、SIMD演算命令をALU19に配分した場合、最低でも6サイクル経過するので、SIMD演算命令の後のALU演算命令も、ALU19が使用状態か否かを判定するための検出対象となる。このため、演算スケジュール制御装置11は、SIMD演算命令よりも後の所定数(例えば、1〜数命令)の命令内にALU演算命令が検出されると、ALU19は使用状態である判定する。
演算スケジュール制御装置11は、ALU19が使用状態であると判定するとSIMD演算命令をALU19に配分せず、使用状態でないと判定すると配分する。
なお、レジスタファイル13のSIMD演算命令の前後にALU演算命令が記憶されていても、FPU17にて実行できるALU演算命令であれば、ALU19が使用状態であると判定せず、ALU19にSIMD演算命令の演算を配分することもできる。
〔動作手順〕
図10は、演算スケジュール制御装置11の動作手順の一例を示すフローチャート図である。図10の手順は、例えば、マイコン200が起動するとスタートする。
演算スケジュール制御装置11は、例えば命令デコーダ12が命令をデコードする毎に、レジスタファイル13を監視してSIMD演算命令か否かを判定する(S10)。SIMD演算命令でない場合(S10のNo)、図10の処理は終了する。
SIMD演算命令が検出された場合(S10のYes)、演算スケジュール制御装置11はエンジンに代表される車両の状態が過渡状態か否かを、変化率算出回路23が算出した変化率に基づき判定する(S20)。本実施形態では、過渡状態でない場合(S20のNo)、演算スケジュール制御装置11はSIMD
ALU16のみでSIMD演算命令を実行する(S80)。こうすることで、ALU19の演算がSIMD演算命令で遅延することを防止できる。また、ALU19に十分な処理能力がある場合、車両が過渡状態でも、ALU19にSIMD演算命令の演算を配分してもよい。
過渡状態である場合(S20のYes)、処理負荷が増大することが予測されるので、演算スケジュール制御装置11はALU19の使用状態を検出する(S30)。演算スケジュール制御装置11は、レジスタファイル13を参照して、ALU19にSIMD演算命令の演算を配分してよいかどうか、すなわちALU19が使用状態か否かを判定する。
そして、ALU19が使用状態の場合(S40のNo)、ALU19にSIMD演算命令の演算を配分すべきでないので、演算スケジュール制御装置11はSIMD
ALU16のみでSIMD演算命令を実行する(S80)。
そして、ALU19が使用状態でない場合(S40のNo)、ALU19にSIMD演算命令の演算を配分することができるので、演算スケジュール制御装置11はSIMD
ALU16とALU19のそれぞれのレイテンシを算出する(S50)。演算スケジュール制御装置11は、不図示のレジスタに記憶された、四則演算毎のレイテンシを参照して、今回のSIMD演算命令の演算時間が最小になる、ALU19に配分するブロック数を決定する。
図11は、SIMD ALU16とALU19のレイテンシの比較を説明する図の一例である。上方のマスから説明すると「行列処理分散のイメージ」は何ブロックをALU19に配分したかを示し、「実行シーケンス」はSIMD
ALU16とALU19それぞれの演算内容を示し、「ALU側の演算」はパイプライン制御した場合のレイテンシを説明する図であり、「レイテンシ」はSIMD
ALU16とALU19それぞれのレイテンシを示す。
なお、「ALU側の演算」は、縦方向の3マスで1つの要素の加算を意味している。例えば、1〜3のサイクルでa11とb11の加算、2〜4のサイクルでa12とb12の加算、3〜5のサイクルでa21とb21の加算、4〜6のサイクルでa22とb22の加算、をそれぞれ実行している。
「行列処理分散のイメージ」に示すように、図11の左の1列は「全てのブロックをSIMD ALU16で実行した場合」を、図11の中央の1列は点線の「1ブロックをALU19で実行した場合」を、図11の右の1列は点線の「2つのブロックをALU19で実行した場合」を、それぞれ示す。なお、丸数字はブロックの番号である。
・全てSIMD ALUを利用(図11の左の1列)
全てのブロックをSIMD ALU16で実行した場合の加算命令のレイテンシは12である。この場合、ALU19のレイテンシは考慮しなくてよい。
・1ブロックをALU19が実行した場合(図11の中央の1列)
3つのブロックをSIMD ALU16が実行した場合の加算命令のレイテンシは9である。また、1つのブロックをALU19が実行した場合の加算命令のレイテンシは6である。レイテンシが6であることは図6で説明したとおりであるが、図11の「ALU側の演算」においても1ブロックの加算命令のレイテンシは6になっている。
・2ブロックをALU19が実行した場合(図11の右の1列)
2つのブロックをSIMD ALU16が実行した場合の加算命令のレイテンシは6である。また、2つのブロックをALU19が実行した場合の加算命令のレイテンシは10である。
図11の最下のマスには「各配分のレイテンシ」が示されている。1つのSIMD演算命令の演算時間は、SIMD
ALU16とALU19のレイテンシのうち長い方である。よって、「全てSIMD ALUを利用」の場合のレイテンシは12、「1ブロックをALUが実行した場合」のレイテンシは9、「2ブロックをALUが実行した場合」のレイテンシは10、である。
したがって、演算スケジュール制御装置11は、「1ブロックをALUが実行した場合」に演算時間が最小になると判定する。
図10に戻り、演算スケジュール制御装置11は、レイテンシの算出結果に基づき、ALU19にSIMD演算命令の演算を配分するか否かを判定する(S60)。図11では、1ブロックをALU19に配分することでSIMD演算命令の演算時間が短くなったので、演算スケジュール制御装置11はALU19にSIMD演算命令の演算を配分すると判定する。ALU19にSIMD演算命令の演算を配分する必要がない場合(S60No)、演算スケジュール制御装置11はSIMD
ALU16のみでSIMD演算命令を実行する(S80)。
ALU19に演算を配分する場合(S70No)、演算スケジュール制御装置11は、演算時間が最小になるように1ブロックの演算をALU19に配分する(S70)。これにより、ALU19とSIMD
ALU16が1つの行列の演算を時間的に並列に処理できる。
具体的には、演算スケジュール制御装置11は、SIMD演算命令からALU19の命令を生成しレジスタファイル13に登録する。加算命令であれば、1ブロック分となる4組の「LOAD、LOAD、ADD」を演算スケジュール制御装置11は生成する。LOAD命令ではRAM30の行列の要素のアドレスが必要になるが、各行列の要素のアドレスはポインタ変数「vec_in_a」「vec_in_b」が示す先頭のアドレスから、要素番号に応じて決まっている。また、演算結果を格納するアドレスも、ポインタ変数「vec_out」が示す先頭のアドレスを基準に要素番号に応じて決まっている。
演算スケジュール制御装置11は、LOAD命令とADD命令のオペランド(アドレス)を決定して、レジスタファイル13に登録する。ALU19は使用状況でないのでレジスタファイル13にはこれらの命令を登録する空きスペースもある。こうすることで、ALU19とSIMD
ALU16が並列にSIMD演算命令を実行できる。演算スケジュール制御装置11は以上の処理を繰り返す。
本実施形態のCPU100は、演算時間が最小になるように、SIMD ALU16とALU19に負荷分散することで(1つのSIMD演算命令をALU19に配分することで)、SIMD
ALU16の演算能力をハイエンドの車両の仕様に合わせたり、ローエンド車両で回路の付け捨てが発生することを抑制できる。
11 演算スケジュール制御装置
12 命令デコーダ
13 レジスタファイル
14 演算装置
15 SIMDレジスタ
16 SIMD ALU
21 命令用メモリ
22 データ用メモリ
23 変化率算出回路
26 センサ

Claims (14)

  1. 互いに並列に演算を実行可能なSIMD型演算装置及び演算装置を1つの集積回路に搭載したプロセッサであって、
    所定の命令の演算時間が最小になるように、前記命令に伴う演算を前記SIMD型演算装置と前記演算装置に配分するスケジュール制御装置、
    を有することを特徴とするプロセッサ。
  2. 前記スケジュール制御装置は、演算に使われるプロセッサ内部の動作クロックを単位に前記演算時間をカウントする、ことを特徴とする請求項1記載のプロセッサ。
  3. 前記スケジュール制御装置は、前記命令の演算対象となるデータ量、メモリからレジスタへのロードレイテンシ、演算レイテンシ、又は、レジスタからメモリへのライトレイテンシ、の少なくとも1つ以上をパラメータに、前記演算時間をカウントする、
    ことを特徴とする請求項1又は2記載のプロセッサ。
  4. 前記命令は前記SIMD型演算装置に特有のSIMD演算命令である、
    ことを特徴とする請求項1〜3いずれか1項記載のプロセッサ。
  5. 前記スケジュール制御装置は、前記演算装置の使用状態に基づき、前記演算を前記演算装置に配分するか否かを決定する、
    ことを特徴とする請求項1〜4いずれか1項記載のプロセッサ。
  6. 前記スケジュール制御装置は、前記演算装置が使用中の場合又は使用予定が検出された場合、前記演算を全て前記SIMD型演算装置にて実行させる、
    ことを特徴とする請求項5項記載のプロセッサ。
  7. 前記スケジュール制御装置は、前記命令の種類を特定し、前記種類と前記演算の配分量に応じて、前記SIMD型演算装置及び前記演算装置ぞれぞれのレイテンシを見積もり、
    当該プロセッサ全体の前記レイテンシが最小になるように前記演算を前記SIMD型演算装置及び前記演算装置に配分する、
    ことを特徴とする請求項1〜6いずれか1項記載のプロセッサ。
  8. 前記スケジュール制御装置は、前記SIMD型演算装置及び前記演算装置毎に、予め、前記種類と前記演算の配分量に対応づけて記憶されている、前記ロードレイテンシ、前記演算レイテンシ及び前記ライトレイテンシの合計を参照して前記レイテンシを見積もる、
    ことを特徴とする請求項7記載のプロセッサ。
  9. 前記スケジュール制御装置は、
    前記SIMD型演算装置に特有のSIMD演算命令を前記演算装置に配分する際、
    前記SIMD型演算命令を前記演算装置の命令に変換する、
    ことを特徴とする請求項1〜8いずれか1項記載のプロセッサ。
  10. 前記演算装置は、少なくとも逐次演算を行うALUを有する、ことを特徴とする請求項1〜9いずれか1項記載のプロセッサ。
  11. 前記演算装置は、浮動小数点演算を実行するFPU又はロード・ストア命令を実行するLSUを有する、
    ことを特徴とする請求項10記載のプロセッサ。
  12. 前記スケジュール制御装置は、
    センサのセンサ信号の変化率を算出する変化率算出手段から前記変化率を取得し、該変化率が閾値を超えた場合に、前記演算をSIMD型演算装置と前記演算装置に配分する、
    ことを特徴とする請求項1〜11いずれか1項記載のプロセッサ。
  13. 請求項1〜12いずれか1項記載のプロセッサと、
    命令又はデータを記憶するメモリと、
    を有することを特徴とする電子制御ユニット。
  14. 互いに並列に演算を実行可能なSIMD型演算装置及び演算装置を1つの集積回路に搭載したプロセッサの負荷分散方法であって、
    所定の命令の演算時間が最小になるように、前記命令に伴う演算をSIMD型演算装置と前記演算装置に配分する、
    ことを特徴とする負荷分散方法。
JP2010105291A 2010-04-30 2010-04-30 プロセッサ、電子制御ユニット、負荷分散方法 Pending JP2011233085A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010105291A JP2011233085A (ja) 2010-04-30 2010-04-30 プロセッサ、電子制御ユニット、負荷分散方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010105291A JP2011233085A (ja) 2010-04-30 2010-04-30 プロセッサ、電子制御ユニット、負荷分散方法

Publications (1)

Publication Number Publication Date
JP2011233085A true JP2011233085A (ja) 2011-11-17

Family

ID=45322313

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010105291A Pending JP2011233085A (ja) 2010-04-30 2010-04-30 プロセッサ、電子制御ユニット、負荷分散方法

Country Status (1)

Country Link
JP (1) JP2011233085A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015041176A (ja) * 2013-08-21 2015-03-02 日本電気株式会社 プロセッサおよびプロセッサの処理方法
US9436465B2 (en) 2013-05-23 2016-09-06 Fujitsu Limited Moving average processing in processor and processor

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436465B2 (en) 2013-05-23 2016-09-06 Fujitsu Limited Moving average processing in processor and processor
JP2015041176A (ja) * 2013-08-21 2015-03-02 日本電気株式会社 プロセッサおよびプロセッサの処理方法

Similar Documents

Publication Publication Date Title
Zhou et al. S^ 3dnn: Supervised streaming and scheduling for gpu-accelerated real-time dnn workloads
CN108292229B (zh) 用于重新出现的相邻聚集的指令和逻辑
US20080072011A1 (en) SIMD type microprocessor
US11132199B1 (en) Processor having latency shifter and controlling method using the same
US8949663B2 (en) Multi-core processor including a monitored processor core whose process result is to be monitored by a number of processors based on processing load
EP3685275B1 (en) Configurable hardware accelerators
US10223298B2 (en) Urgency based reordering for priority order servicing of memory requests
WO2017105719A1 (en) Instructions and logic for blend and permute operation sequences
US20170286117A1 (en) Instruction and Logic for Configurable Arithmetic Logic Unit Pipeline
US8127183B2 (en) Microcomputer system
KR20160113677A (ko) 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법
JP2011233085A (ja) プロセッサ、電子制御ユニット、負荷分散方法
JP5699896B2 (ja) 情報処理装置、異常判定方法
CN117501254A (zh) 使用近存储器计算为复杂操作提供原子性
JP2011150532A (ja) 情報処理装置
CN114253606A (zh) 用于早期流水线重定向的指令集架构和微架构
US11080054B2 (en) Data processing apparatus and method for generating a status flag using predicate indicators
JP2010196619A (ja) 内燃機関の制御装置
US8001358B2 (en) Microprocessor and method of processing data including peak value candidate selecting part and peak value calculating part
JP4916151B2 (ja) 並列演算装置
US11847462B2 (en) Software-based instruction scoreboard for arithmetic logic units
WO2022063269A1 (en) Method and apparatus for configurable hardware accelerator
JP2008071037A (ja) Simd型マイクロプロセッサ
KR20220057610A (ko) 실행 파이프 균형을 제공하는 분산 스케줄러
WO2019188171A1 (ja) コード生成方法、コード生成装置