[go: up one dir, main page]

JP5411587B2 - マルチスレッド実行装置、マルチスレッド実行方法 - Google Patents

マルチスレッド実行装置、マルチスレッド実行方法 Download PDF

Info

Publication number
JP5411587B2
JP5411587B2 JP2009138327A JP2009138327A JP5411587B2 JP 5411587 B2 JP5411587 B2 JP 5411587B2 JP 2009138327 A JP2009138327 A JP 2009138327A JP 2009138327 A JP2009138327 A JP 2009138327A JP 5411587 B2 JP5411587 B2 JP 5411587B2
Authority
JP
Japan
Prior art keywords
execution
instruction
thread
target
program
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.)
Expired - Fee Related
Application number
JP2009138327A
Other languages
English (en)
Other versions
JP2010286898A (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.)
Denso Corp
Toyota Motor Corp
Renesas Electronics Corp
Original Assignee
Denso Corp
Toyota Motor Corp
Renesas Electronics 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 Denso Corp, Toyota Motor Corp, Renesas Electronics Corp filed Critical Denso Corp
Priority to JP2009138327A priority Critical patent/JP5411587B2/ja
Priority to US12/783,958 priority patent/US8560812B2/en
Publication of JP2010286898A publication Critical patent/JP2010286898A/ja
Application granted granted Critical
Publication of JP5411587B2 publication Critical patent/JP5411587B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Description

複数のプログラムを独立に実行可能なマルチスレッド実行装置及びマルチスレッド実行方法に関し、特に、プログラム毎に命令の発行比率を調整可能なマルチスレッド実行装置及びマルチスレッド実行方法に関する。
プログラムを効率よく実行するための種々の方法が考えられている。従来における実行効率の向上のアプローチの多くは、CPUの演算回路がプログラムを実行していない時間を少なくしようとするものである。例えば、分岐やユーザの操作による処理内容の確定待ちを低減する技術(例えば、特許文献1、3参照。)、入出力割り込みによるソフト的なオーバーヘッドを低減する技術(例えば、特許文献2参照。)、コンテキストの切り替え等、ハード的なオーバーヘッドを低減する技術(例えば、特許文献4参照。)が提案されている。
特許文献1では、静的に処理順序を決定可能なプログラムの部分を、コンパイル時にPU(Processing Unit)の特性に応じて配置しておくヘテロジニアスなマルチプロセッサが開示されている。また、特許文献2には、共有資源にアクセスするためのサブシステムコールをマスクすることで、ハイパバイザーによる介入を制御する入出力サブシステムコール命令制御方法が開示されている。ハイパバイザーによる介入を制御することで、割り込みによるオーバーヘッドを抑制することができるとしている。また、特許文献3には、複数のプロセッサに投機的に命令を発行するマルチスレッド処理装置において、各プロセッサのスレッド実行開始、終了、実行状態の切り替え、及び、スレッド間のデータ転送を制御するスレッドマネージャを有するマルチスレッド処理装置が開示されている。複数のプログラム経路を同時に実行することで、投機的実行の予測精度を向上させることができるとしている。また、特許文献4には、複数のハードウェアスレッドを有するマルチスレッドプロセッサにおいて、スレッドにプログラムカウンタとレジスタセットを固定的に割り当て、待機状態のスレッドと実行状態のスレッドを切り替えるマルチスレッド実行方法が開示されている。スレッドの準備に要する時間を削減できるので処理速度を向上できるとしている。
特開2007−328416号公報 特開平6−35731号公報 特開2000−47887号公報 特開2004−234123号公報
しかしながら、特許文献1〜4に代表される従来の技術のように実行効率を単に向上させるだけでは、2つのプログラム間に実行タイミングの依存性があるシステムに影響を及ぼすおそれがあるという問題がある。
図1(a)は、プログラム#0の実行タイミングとプログラム#1の実行タイミングの関係を説明する図の一例である。プログラム#0はCPU_A1により実行され、プログラム#1はCPU_B1により実行されている。CPU_A1とCPU_B1は、一般的には別のマイコンに実装されている。
プログラム#0は処理aを実行し、プログラム#1は、処理b1と処理b2を実行する。処理b2は、処理aの処理結果を利用して実行されるものである。図1(a)ではプログラム#0とプログラム#1の実行タイミングが同期するよう設計されているので、CPU_B1は処理aの処理結果を利用して処理b2を実行することができる。
図1(b)は、CPU_B2がプログラム#1を実行する際の、プログラム#0の実行タイミングとプログラム#1の実行タイミングの関係の一例を示す図である。CPU_B2はCPU_B1よりIPC(Instructions Per Clock cycle)が大きいか又は単位処理の実行サイクル数が小さいCPU、いわゆる実行速度の速いCPUである。CPU_B2がプログラム#1を実行することで、処理b1の実行タイミングが早まる。一方、処理b1が完了した時にはCPU_A1は処理aを完了してない。このため、CPU_B2が処理b2を実行する際に、処理aの処理結果を利用できず、例えば、CPU_B2は1つ前の処理aの処理結果を利用して処理b2を実行してしまうなどの不具合が生じる。
ところで、ハードウェア・マルチスレッド技術を搭載したCPUや、1つのCPUに複数のコアを搭載したマルチコアCPU、が利用できるようになってきた。そこで、それまでは複数のCPU_A1で実行していたプログラム#0とCPU_B1で実行していたプログラム#1を、1つのCPUに移植して実行することが考えられている。このような技術は、例えば、車載LANに接続された複数のECU(Electronic Control Unit)をより少ない数のECUに統合する際に利用することができる。
しかしながら、統合後のECUに搭載されたCPUは、統合前のECUに搭載されていたCPUとアーキテクチャが異なるため、実行タイミングに依存関係のあるプログラム#0とプログラム#1を単に統合後のECUに移植しただけでは、図1(b)と同様の不都合が生じてしまう。
このような不都合に対し、統合用CPUに異なるプログラム#0,1を移植した場合、命令の発行比率を調整することが考えられる。
図2(a)は、統合前のCPU_A1とCPU_B1、及び、統合用CPUの関係を説明する図の一例である。CPU_A1の動作クロックは60MHz、CPU_B1の動作クロックは180MHzである。説明を簡単にするため両者のIPCは同じ(IPC=1)としたが、両者のIPCは異なっていてもよい。また、統合用CPUのCPU動作クロックは180MHzである。したがって、CPU_B1の実行速度はCPU_A1の3倍である。なお、統合用CPUが有するvCPU_A1、vCPU_B1は仮想CPUを意味する。
CPU_A1が実行していたプログラム#0とCPU_B1が実行していたプログラム#1の実行タイミングを合わせるためには、元の実行速度に応じて、統合用CPUにおける命令発行比率を変えればよい。
図2(b)は命令の発行比率と実行完了数の関係の一例を示す図である。実行速度が3倍異なるのであれば、統合用CPUは、vCPU_B1に3回、命令を発行する毎に、vCPU_A1に1回、命令を発行する。こうすることで、統合前にCPU_A1が実行していたプログラム#0と、CPU_B1が実行していたるプログラム#1の実行タイミングを、統合用ECPUにおいても、ある程度、揃えられる可能性がある。
しかしながら、統合用CPUとCPU_A1及びCPU_B1は動作周波数だけでなく、命令セットやIPCなど単位時間当たりの命令実行完了数が異なる。また、統合用CPUが、段数の多いパイプラインや、複数のパイプラインを備えている場合、ハザードやストールにより単位時間当たりの命令実行完了数が変わるため、IPCを考慮して命令の発行比率を決定しても、所望の命令実行比率は得られない。
このため、命令の発行比率を制御するだけでは、vCPU_A1の単位時間当たりの命令実行完了数とCPU_A1の単位時間当たりの命令実行完了数、及び、vCPU_B1の単位時間当たりの命令実行完了数とCPU_B1の単位時間当たりの命令実行完了数、を一致させることができない。例えば、命令の発行比率を制御しても、単位時間におけるプログラム#0と#1の命令実行完了数はそれぞれ変動を繰り返し、最終的にはプログラム#0とプログラム#1実行タイミングが大きく異なることになってしまう。
すなわち、従来のマルチスレッド技術又はマルチコアを利用して、複数のプログラム#0,1を統合した場合、統合前の複数のプログラム#0,1の実行タイミングを保証することができないという問題があった。
本発明は、上記課題に鑑み、CPUによる単位時間の命令の実行完了回数を動的に最適化できるマルチスレッド実行装置及びマルチスレッド実行方法を提供することを目的とする。
上記課題に鑑み、本発明は、複数のプログラムが記憶されたプログラム記憶手段と、前記プログラム記憶手段から読み出した命令を発行する命令発行手段と、前記命令を実行する命令実行手段と、を有するマルチスレッド実行装置であって、前記プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段と、命令の実行完了速度を監視する実行速度監視手段と、前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させるフィードバック制御手段と、を有し、前記フィードバック制御手段は、前記実行完了速度と前記目標実行速度情報との乖離が大きい前記プログラムから順に、前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させる、ことを特徴とする。
CPUによる単位時間の命令の実行完了回数を動的に最適化できるマルチスレッド実行装置及びマルチスレッド実行方法を提供することができる。
プログラムAの実行タイミングとプログラムBの実行タイミングの関係を説明する図の一例である。 統合前のCPU_A1とCPU_B1、及び、統合後のCPUの関係を説明する図の一例である。 マルチスレッド実行装置の概略構成図の一例である。 実行状況監視装置14の概略構成図の一例である。 スケジュールフィードバック装置の概略構成図の一例である。 ターゲットプロファイルを模式的に説明する図の一例である。 ターゲットプロファイル(IPC)及びターゲットプロファイル(単位処理の実行サイクル数)の一例を示す図である。 目標IPCの算出手順及び目標実行サイクル数の算出手順の一例を示す図である。 目標IPCと単位時間毎の命令実行完了数から生成されるスケジュールパラメータ、目標実行サイクル数と単位処理毎の実行サイクル数から生成されるスケジュールパラメータの一例を示す図である。 スレッドスケジューリングの制御系を模式的に示す図の一例である。 各スレッドの実行状態の一例を示す図である。 マルチスレッド装置の効果を説明する図である。 マルチスレッド実行装置がスレッドの割り当て時間を制御する手順を示すフローチャート図の一例である。 マルチスレッド実行装置の概略構成図の一例である。 命令発行比率に基づくスケジュールパラメータの一例を示す図である。 スレッドスケジューリングの制御系を模式的に示す図の一例である。
以下、本発明を実施するための形態について図面を参照しながら説明する。
図3は、マルチスレッド実行装置100の概略構成図の一例を示す。始めにマルチスレッド実行装置100が、プログラムの実行回数を動的に最適化する手順の概略を説明する。
(1)アプリ実行プロファイル又は標準プロファイル(以下、両者を区別しない場合、「ターゲットプロファイル」という)を用意する。
くわしくは後述するが、アプリ実行プロファイルは、統合前のCPU(以下、エミュレート対象CPUという)によるプログラムの単位時間毎の命令実行完了数、又は、単位処理毎の実行サイクル数である。すわなち、エミュレート対象CPUの実行速度の指標となる情報である。また、標準プロファイルは、アプリ実行プロファイルが得られない場合の、標準的な単位時間毎の命令実行完了数又は単位処理毎の実行サイクル数である。
(2)実行状況監視装置14が、各プログラム毎に(ハードウェア・マルチスレッド毎に)、単位時間毎の命令実行完了数又は単位処理毎の実行サイクル数をカウントする。
(3)スケジュールフィードバック装置12が、ターゲットプロファイルと命令実行完了数又は単位処理の実行サイクル数を比較して、プログラム毎に、スレッドスケジュール装置11にスケジュールパラメータをフィードバックする。
(4)スレッドスケジュール装置11は、スケジュールパラメータに応じて各プログラムの命令の発行比率を制御する。これにより、スレッドスケジュール装置11は、ターゲットプロファイルと略一致するように各プログラムの命令発行比率を調整する。
したがって、本実施形態のマルチスレッド実行装置100は、複数のECUを1つに統合しても各プログラムの単位時間毎の命令実行完了数又は単位処理の実行サイクル数を統合前とほぼ同じにできるので、ECUの統合時に各プログラムを再コーディングする必要がない。また、各プログラム間の実行タイミングの検討も不要である。特に、後述するように、単位処理の実行サイクル数をフィードバック制御に用いることで、異種マイコンへの統合が可能となる。
〔マルチスレッド実行装置100のハードウェア構成〕
マルチスレッド実行装置100はプロセッサ50と、プロセッサ50と接続されたアプリ実行プロファイル記憶部60又は標準プロファイル記憶部70と、を有する。アプリ実行プロファイル記憶部60又は標準プロファイル記憶部70はいずれか一方があればよいが、両方を備えていてもよい。両方を備える場合、スケジュールフィードバック装置12は、どちらからターゲットプロファイルを読み出すかを選択できる。例えば、あるプログラムはエミュレート対象CPUでアプリ実行プロファイルが取得できたが、別のプログラムは取得できなかった場合、スケジュールフィードバック装置12は、プログラムに応じて読み出すターゲットプロファイルを切り替える。アプリ実行プロファイル記憶部60又は標準プロファイル記憶部70は、例えばフラッシュメモリ等の不揮発メモリを実体とする。両者を別体に設ける必要はなく、また、プロセッサ50内に搭載されていてもよい。
プロセッサ50は、ハードウェア・マルチスレッド型の実行環境を有する。ハードウェア・マルチスレッドとは、命令バッファ17、レジスタファイル16(システムレジスタ等)をそれぞれ複数備え、これらを適宜切り替えて命令を実行する構造をいう。なお、プログラムやその一部の関数等を処理の実行単位としてスレッドと呼ぶことがあるが、本実施形態のスレッドとはハード的な命令の供給手段をいう。図3(a)では、3つの命令バッファ17と3つのレジスタファイル16を有するので、マルチスレッド実行装置100は3つのスレッド#0〜#2を有する。図3(b)はスレッド#0〜#2とハードウェアリソースの関係の一例を示す図である。
マルチスレッド実行装置100は、各スレッドを1クロックで切り替えて異なるプログラムを実行するので、物理的に存在する1つのプロセッサ50により複数の仮想的なCPUを有するように振る舞う。このため、命令バッファ#0から演算回路15をスレッド#0、命令バッファ#1から演算回路15をスレッド#1、命令バッファ#2から演算回路15をスレッド#2、といい、スレッド#0〜#2とその他の周辺回路を併せてvCPU(virtual CPU)#0〜#2と称する。このように、仮想的なvCPU#0〜#2を複数有することで、統合前のCPUでそれぞれ独立に実行されていた異なるプログラム#0〜#2を独立に実行することができる。
なお、本実施形態は、ハードウェア・マルチスレッドを対象に説明するが、マルチコアに対しても命令実行完了数のフィードバック制御を適用することができる。この場合、マルチコアがそれぞれフィードバック制御を有していてもよいし、各マルチコアが実行するスレッドをスケジュールする別のCPUコアを有していてもよい。また、マルチコアに共通のスケジューラ(OS)がフィードバック制御してもよい。
命令バッファ#0〜#2は、それぞれ命令側メモリバス22と接続されている。命令側メモリバス22は、プログラム#0〜#2を記憶したEEPROM等のプログラム記憶部26と接続されている。スレッドスケジュール装置11は、命令バッファ#0〜#2毎に設けられた不図示のプログラムカウンタのアドレスを命令側メモリバス22に出力して、命令バッファ#0〜#2にプログラム#0〜#2の命令を1つずつ読み出す。命令バッファ#0〜#2は、切り替えスイッチ19に接続されている。切り替えスイッチ19は、同時に1つの命令バッファ17だけを命令デコーダ18に接続するスイッチである。
スレッドスケジュール装置11は、命令を発行する命令バッファ#0〜#2を選択する装置である。後述するように、スレッドスケジュール装置11は、スケジュールフィードバック装置12からフィードバックされたスケジュールパラメータに基づき、命令を発行するスレッドを決定する。こうすることで、プログラム毎に独立にIPC(Instructions Per Clock cycle)を制御でき、命令発行比率を制御できる。なお、各スレッド#0〜#2の命令の発行比率を静的に決定することもできる。
スレッドスケジュール装置11は2つの切り替えスイッチ19、21とそれぞれ接続されており、切り替えスイッチ19の接続先を命令バッファ#0〜#2のいずれかに切り替えることで、命令デコーダ18に接続する命令バッファ#0〜#2を切り替える。スレッドスケジュール装置11が選択したスレッド#0〜#2の命令が命令バッファ#0〜#2から読み出され、命令デコーダ18に送出される。また、スレッドスケジュール装置11は、命令バッファ#0〜#2の全てを命令デコーダ18と切り離すこともできる。同様に、スレッドスケジュール装置11は、切り替えスイッチ21の接続先をレジスタファイル#0〜#2のいずれかに切り替えることで、命令デコーダ18と演算回路15が使用するレジスタファイル#0〜#2を切り替える。
命令デコーダ18は命令を解読し、解読結果をそのスレッドのレジスタファイル#0〜#2に転送すると共に、パイプライン制御回路13に送出する。レジスタファイル#0〜#2は、演算回路15の演算結果、及び、データ側メモリバス23に接続されたデータ記憶部27から読み出されたデータを一時的に記憶する一群のレジスタである。命令デコーダ18による解読結果は、例えば、演算の種別、1以上のソースオペランド、結果の格納場所、等である。ソースオペランドはレジスタファイル16に供給されるので、演算回路15が演算に使用するレジスタが指定される。
命令デコーダ18が演算の種類をパイプライン制御回路13に送出すると、パイプライン制御回路13は演算回路15が実行する演算を指定する。演算回路15は、演算の種類に応じて、レジスタファイル16に記憶されたデータに演算を施す。演算の内容は、ストア、ロード、加算、乗算、除算、分岐等、演算回路15に応じて種々のものが用意されている。そして、ストアやロード命令の場合、演算回路15は演算したアドレスを指定してデータ側メモリバス23からデータをフェッチする。そして、演算回路15は、加算等の演算結果、又は、読み出したデータを、レジスタファイル16の、結果の格納場所により指定されるレジスタにライトバックする。
パイプライン制御回路13は、以上のパイプライン制御の各ステージ(命令フェッチ、命令デコード、命令実行、オペランドフェッチ、ライトバック等)を動作クロックに基づき制御する。また、パイプライン処理ではハザード(各ステージの処理を決まった時間内に終わらせることを阻害する要因)が不可避なので、パイプライン制御回路13は、演算の種類やソースオペランド等を参照して、パイプラインにストールを発生させたり、NOP命令を挿入したり、分岐により不要となった各ステージの内容をフラッシュするなどの処理を行う。例えば、あるスレッド(例えばスレッド#0)にI/O待ちのようなハザードが生じた場合、パイプライン制御回路13はスレッドスケジュール装置11にそのスレッド#0を停止させ、別のスレッド(例えばスレッド#1)を実行するよう要求する。
パイプライン制御回路13は実行状況監視装置14と、実行状況監視装置14はスケジュールフィードバック装置12とそれぞれ接続されている。実行状況監視装置14は、スレッド毎に、単位時間当たりの命令実行完了数又は単位処理の実行サイクル数をカウントする(以下、両者を区別しない場合、単に「カウント値」という。)。また、スケジュールフィードバック装置12は、スレッド#0〜#2毎に、カウント値とターゲットプロファイルを比較して、スケジュールパラメータを生成し、スレッドスケジュール装置11に出力する。以下、これらについて詳細に説明する。
〔実行状況監視装置14〕
図4は、実行状況監視装置14の概略構成図の一例を示す。実行状況監視装置14は、実行状況監視部141とカウンタ部142を有する。単位時間当たりの命令実行完了数又は単位処理の実行サイクル数は、いずれも広い意味で命令の実行速度を表すものである。単位時間当たりの命令実行完了数は、エミュレート対象CPUとvCPU#0〜#2の命令セットアーキテクチャ(ISA)が同一の場合に、単位処理の実行サイクル数はISAが異なる場合に、それぞれスケジュールフィードバック装置12がスケジュールパラメータを生成するために用いられる。
ISAは、CPUに実装された一式の命令形式(二進数のオペコード)を意味する。したがって、ISAが同一であればある命令を実行完了するまでの実行命令数は、エミュレート対象CPUとvCPU#0〜#2で同じである。ISAが同一でもパイプライン構成等で実行サイクル数は変化する。ある処理の命令数が同一なので命令実行完了数で進捗を一致させることができる。
一方、ISAが異なる場合はある処理を実行完了するまでの実行命令数がエミュレート対象CPUとvCPUで異なるので、単位時間当たりの命令実行完了数がソースコード上の命令実行完了の進捗と一致しない。このため、エミュレート対象CPUとvCPU#0〜#2のISAが異なる場合、単位処理の実行サイクル数を利用して、ソースコード上の実行の進捗が一致するようにスケジュールパラメータを生成する。
・単位時間毎の命令実行完了数
まず、単位時間毎の命令実行完了数のカウントについて説明する。パイプライン制御回路13は、1つの命令をパイプライン処理の各ステージに遷移させながら、回路やレジスタにデータを送出する。したがって、1つの命令が実行完了したこと(例えば、レジスタファイル16へのライトバック時)は、パイプライン制御回路13にとって既知である。また、どのスレッドの命令を実行完了したかは、スレッドスケジュール装置11や切り替えスイッチ19の状態から明らかとなる。パイプライン制御回路13は、1つの命令が実行完了すると命令実行完了情報を実行状況監視装置14に出力する。具体的には、パイプライン制御回路13と実行状況監視装置14がスレッドの数だけ信号線で接続されており、パイプライン制御回路13は実行完了したスレッドに対応した信号線にHigh信号を出力する。
実行状況監視部141は命令実行完了情報を取得すると、カウンタ部142にカウントアップを要求する。具体的にはスレッド毎に設けられたカウント回路#0〜#2にHigh信号を出力する。これにより、カウンタ部142は、スレッド毎に実行完了した実行完了命令数をカウントできる。単位時間の命令実行完了数は、大きいほど実行速度が大きいことを意味する。
そして、カウンタ部142は、単位時間毎に、カウント値をスケジュールフィードバック装置12に出力する。また、実行状況監視部141は、カウンタ部142がカウント値をスケジュールフィードバック装置12に出力した直後に、カウンタ部142をリセット(ゼロに戻す)する。したがって、カウンタ部142は、単位時間毎の命令実行完了数をスケジュールフィードバック装置12に出力することができる。なお、単位時間は、例えば、動作クロックの×10〜1000程度である。単位時間が余り短いとカウント値の変動が大きく、長いとフィードバック制御に好ましくないので、単位時間として極端に短くない程度の実行サイクル数が、実行状況監視装置14に設定されている。
・単位処理の実行サイクル数
単位処理の実行サイクル数のカウントについて説明する。単位処理とは、例えば一連の処理をまとめた関数である。例えばC言語では「関数名〜{Return;}」が1つの単位処理である。プロセッサ50がコンパイルされたオブジェクトコードを実行する場合、コンパイルにより、オブジェクトコードには、関数の始まり・終わりにそれぞれスタックポインタの初期化・後処理する所定のコードが記述される。パイプライン制御回路13は、命令デコーダ18から、これら関数の始まりを示すコードと終わり示すコードを検出するとHigh信号を実行状況監視装置14に出力する。
実行状況監視部141は、関数の始まりのHigh信号を取得するとカウンタ部142に動作クロックのカウント開始を要求し、次に終わりのHigh信号を取得するとカウンタ部142にカウント値をスケジュールフィードバック装置12に出力させる。また、実行状況監視部141は、High信号を取得する度にカウンタ部142をリセット(ゼロに戻す)する。したがって、カウンタ部142は、関数の実行完了に必要な実行サイクル数(単位処理毎の実行サイクル数)をカウントして出力することができる。単位処理毎の実行サイクル数は、大きいほど実行速度が遅いことを意味する。
単位処理の実行サイクル数をフィードバック制御に用いることで、ISAが異なる例えば異種マイコンへ複数のプログラム#0〜#2を移植することが可能となる。
〔スケジュールフィードバック装置12〕
図5は、スケジュールフィードバック装置12の概略構成図の一例を示す。スケジュールフィードバック装置12は、フィードバック値生成部121とターゲットパラメータ保存部122を有する。
<ターゲットプロファイル>
図6は、ターゲットプロファイルを模式的に説明する図の一例である。図6(a)はエミュレート対象CPU#0〜#2の演算量(広い意味での処理負荷)を示す。時間と共に演算量が変動し、エミュレート対象CPU#0〜#2によって変動態様も異なることが示されている。プログラム#0〜2を移植する際は、エミュレート対象CPU#0〜#2が実行していたプログラム#0〜#2を、処理能力の高いvCPU#0〜#2に実行させることが多い。
vCPU#0〜#2の処理能力を最大に活用してプログラム#0〜#2を実行すると、単位時間の演算量が多くなるので、図6(b)の点線で示すように、各プログラム#0〜#2の実行が早まる傾向になる。これでは、vCPU#0〜#2によるプログラム#0〜#2の実行タイミングを保証できない。そこで、図6(b)の実線に示すように、エミュレート対象CPU#0〜#2の演算量がvCPU#0〜#2にて再現されるように、vCPU#0〜#2の処理能力に応じて演算量を換算する。換算後の演算量は一様に低下するが演算量の変動態様はエミュレート対象CPUと変わっていない。換算後の演算量と一致するように、vCPU#0〜#2に発行する命令をスケジューリングすることで、エミュレート対象CPUとvCPU#0〜#2の単位時間当たりの命令実行完了数又は単位処理の実行サイクル数を一致させることができる。換算後の演算量が、ターゲットプロファイルである。
図6(c)はプロセッサ50全体の演算量を示す。プロセッサ50全体の演算量は、図6(b)の演算量を時間毎にそのまま累計した形状となる。マルチスレッド実行装置は、このような複雑に変動する演算量が得られるように動的に命令発行比率を制御できる。
図5に戻り、ターゲットパラメータ保存部122は、ターゲットプロファイル値を保存する。ターゲットプロファイルについて説明する。図7(a)と図7(b)は、ターゲットプロファイルの一例を示す。上記のとおり、ターゲットプロファイルには、アプリ実行プロファイルと、標準プロファイルがある。
・アプリ実行プロファイル
まず、アプリ実行プロファイルについて説明する。アプリ実行プロファイルも、単位時間当たりの命令実行完了数と単位処理の実行サイクル数のいずれかの場合がある。これらの取得には、実行状況監視装置14が単位時間当たりの命令実行完了数又は単位処理の実行サイクル数をカウントした方法と同様の方法を利用すればよい。
図7(a)は単位時間当たりの命令実行完了数から求めたIPCを示す。IPCは、「命令実行完了数÷単位時間(1クロック当たりの時間)」から算出される。時刻Tn毎にIPCがプロットされている。単位時間当たりの命令実行完了数は単位時間毎にカウントされるので、IPCは等間隔にプロットされている。
図7(b)は単位処理の実行サイクル数を示す。単位処理は、それぞれ実行サイクル数が異なるので、単位処理の実行サイクル数は時間に対し必ずしも等間隔にプロットされない。
上述したように、エミュレート対象CPUとvCPU#0〜#2のISAが同一の場合は、図7(a)のIPCをターゲットプロファイルとし、ISAが異なる場合は、図7(b)の単位処理の実行サイクル数をターゲットプロファイルとする。エミュレート対象CPUは明らかであるし、移植先のプロセッサ50のISAも明らかなので、図7(a)又は図7(b)のターゲットプロファイルのうちいずれか一方をアプリ実行プロファイル記憶部60に記憶しておけばよい。
なお、エミュレート対象CPUがOS(Operating System)上でプログラムを実行する場合、OSのコードも含んだ形でアプリ実行プロファイルを測定する。または、OS実行区間は標準プロファイルを適用してもよい。
・標準プロファイル
アプリ実行プロファイルが、エミュレート対象CPUがプログラム#0〜#2を実行した際の実測値であるのに対し、標準プロファイルは人為的又は機械的に設定されたターゲットプロファイルである。例えば、エミュレート対象CPUでは、単位時間当たりの命令実行完了数又は単位処理の実行サイクル数のカウントが困難な場合、スケジュールフィードバック装置12は標準プロファイルを利用する。
最も簡易に標準プロファイルを設定する場合、例えば設計者が一定のIPC又は単位処理の実行サイクル数を標準プロファイル記憶部70に登録する。エミュレート対象CPUにおけるプログラムを開発した段階で、エミュレート対象CPUのおよそのIPCや単位処理の実行サイクル数は設計者が把握していることが多い。したがって、開発者はエミュレート対象CPU毎にIPCや単位処理の実行サイクル数を設定することができる。例えば、エンジン制御用のプログラムではIPC=0.2、単位処理の実行サイクル数=100、等のように設定する。
また、機械的に標準プロファイルを求めることができる。あるエミュレート対象CPUについて、演算の種類毎に必要なクロック数は統計的に知られていることが多い。演算には、加算、乗算、除算等の種類があるが、演算毎に最小限必要なクロック数はほぼ固定である。一方、分岐命令や入出力待ちがあると演算の実行完了に必要なクロック数は多くなるが、これらによる実行完了までのクロック数の増加がどの程度か統計的に算出できる。したがって、エミュレート対象CPUが実行していたオブジェクトコードの各命令を固定のクロック数で重み付けし、また、分岐命令や入出力待ちを生じさせる命令に統計的な重み付けをすれば、エミュレート対象CPUがプログラムを実行した際の各命令のクロック数は統計的に推定できる。
また、所定数の命令毎に必要なクロック数を算出して所定数毎に平均をとれば、1つの命令を実行するために必要なクロック数が分かる。例えば、10命令の実行完了に50の動作クロックが必要な場合、1つの命令を実行するために「50/10=5クロック」必要となる。この逆数(0.2)がIPCである。1つの動作クロックが費やす時間は、エミュレート対象CPUの動作周波数から算出できる。例えば、エミュレート対象CPUの動作周波数が200MHzの場合、1動作クロックに費やす時間は、1/(2×10)〔s〕である。したがって、図7(a)と同様に時間とIPCが対応づけられたターゲットプロファイルを設定することができる。
また、オブジェクトコードから関数の始まりと終わりを示す所定のコードを検出し、所定のコード間のクロック数を累計すれば、単位処理の実行サイクル数を算出することができる。1動作クロックに費やす時間と、単位処理の実行サイクル数を掛ければ、単位処理の実行時間が分かるので、図7(b)と同様に時間と単位処理の実行サイクル数が対応づけられたターゲットプロファイルを設定することができる。
<スケジュールパラメータの算出>
エミュレート対象CPUとvCPU#0〜#2のISAが同一の場合、フィードバック値生成部121には、実行状況監視装置14から単位時間毎の命令実行完了数が与えられ、ISAが異なる場合、単位処理の実行サイクル数が与えられる。
まず、単位時間毎の命令実行完了数が与えられた場合について説明する。
図8(a)は目標IPCの算出手順の一例を示す図である。図示するように、
目標IPC= エミュレート対象CPUのIPC(ターゲットプロファイル値) ÷ エミュレート対象CPUの動作周波数とvCPUの動作周波数の比 … (1)
エミュレート対象CPUのIPCは、図7(a)のターゲットプロファイルから読み出したIPCである。また、一般にはプロセッサ50が新しいほど(プロセスルールが微細であるほど)動作周波数が大きくなるため、エミュレート対象CPUの動作周波数とvCPU#0〜#2の動作周波数の比は1以上となることが多い。以上から、エミュレート対象CPUのIPCが例えば「0.8」であり、エミュレート対象CPUの動作周波数とvCPU#0〜#2の動作周波数の比が「2」の場合、目標IPCは「0.4」となる。フィードバック値生成部121は、時刻Tnが経過する毎に、式(1)の算出を実行する。なお、これに対しスケジュールパラメータは動作クロック毎にスレッドスケジュール装置11に送出される。
図9(a)は、目標IPCと単位時間毎の命令実行完了数から生成されるスケジュールパラメータの一例を示す図である。スケジュールパラメータを生成するため、まず、フィードバック値生成部121は単位時間毎の命令実行完了数(実測値)を実測IPCに変換する。実測IPCは、「命令実行完了数÷単位時間(1クロック当たりの時間)」である。
フィードバック値生成部121は、目標IPCと実測IPCを比較して、スケジュールパラメータを決定する。例えば、目標IPCが「0.4」、実測IPCが「0.27」の場合、「0.4−0.27=0.13」を算出し、この差に応じてスケジュールパラメータを決定する。フィードバック値生成部121は、目標IPCと実測IPCの差の大きさを、例えば5段階程度に分類することでスケジュールパラメータを決定する。差が大きいほどスケジュールパラメータが大きくなる。差が負値の場合は、スケジュールパラメータも負値となる。このようにスケジュールパラメータを生成すると、例えば、スケジュールパラメータは「−5〜+5」の整数となる。
図9(a)では、アプリ実行プロファイル記憶部80又は標準プロファイル記憶部70から読み出したターゲットプロファイル値が切り替わる毎に、目標IPCが算出されている。同じ目標IPCに対し、例えばクロック毎に、スケジュールフィードバック装置12がスケジュールパラメータをスレッドスケジュール装置11にフィードバックした結果、徐々に実測IPCが目標IPCに近づいている。
次に、スケジュールフィードバック装置12に、単位処理の実行サイクル数が与えられた場合について説明する。
図8(b)は目標実行サイクル数の算出手順の一例を示す図である。図示するように、
目標実行サイクル数= エミュレート対象CPUの単位処理の実行サイクル数(ターゲットプロファイル値) × エミュレート対象CPUの動作周波数とvCPUの動作周波数の比 … (2)
エミュレート対象CPUの単位処理の実行サイクル数は、図7(b)のターゲットプロファイルから読み出した単位処理の実行サイクル数である。エミュレート対象CPUの単位処理の実行サイクル数が例えば「100」であり、エミュレート対象CPUの動作周波数とvCPU#0〜#2の動作周波数の比が「2」の場合、目標実行サイクル数は「200」となる。フィードバック値生成部121は、時刻Tnが経過する毎に、式(2)の算出を実行する。なお、スケジュールパラメータは動作クロック毎に送出される。
図9(b)は、目標実行サイクル数と単位処理毎の実行サイクル数から生成されるスケジュールパラメータの一例を示す図である。フィードバック値生成部121は、目標実行サイクル数と、単位処理の実行サイクル数(実測値)を比較して、スケジュールパラメータを決定する。例えば、目標実行サイクル数が「200」、単位処理の実行サイクル数(実測値)が「150」の場合、「200−150=50」を算出し、この差に応じてスケジュールパラメータを決定する。フィードバック値生成部121は、目標実行サイクル数と単位処理の実行サイクル数(実測値)の差の大きさを、例えば5段階程度に分類することでスケジュールパラメータを決定する。差が負値の場合は、スケジュールパラメータも負値となる。なお、実行サイクル数は値が大きくなるので、目標IPCと単位時間毎の命令実行完了数の差でなく、比によってスケジュールパラメータを生成してもよい。
〔スレッドスケジューリング〕
スレッドスケジューリングについて説明する。1つのスレッド内でより小さい粒度のタスクについてスケジューリングする場合があるが、本実施形態では、スレッド#0〜#2間のスケジューリングについて説明する。スレッドスケジューリングは、命令デコーダ18にどの命令バッファ#0〜2を接続するか(切り替えスイッチ19の切り替え先を決定する)と同等である。
スレッドスケジューリングには次のような決定要素がある。上位ほど、決定要素としての優先順位が高い。
(P1)ハードウェア割り込み
(P2)スケジュールパラメータ
(P3)スレッド内部要因
ハードウェア割り込みは、スレッドに関係するセンサや電源等に異常が検出された場合や、ユーザ操作が入力された場合に、スレッドに優先的に命令を供給する状況が生じることを言う。スレッド内部要因は、入出力待ち、他のスレッドの処理待ち、ハザード、等の発生と解消により、スレッドへの命令の供給停止・再開が生じることをいう。
これらに対し本実施形態のスレッドスケジュール装置11は「スケジュールパラメータ」に基づきスレッドスケジューリングすることを特徴とする。優先順位の高いハードウェア割り込みは発生することが少ないとしてよいので、スレッドスケジュール装置11は、スレッド内部要因より優先的にスケジュールパラメータに基づきスレッドスケジューリングすることができる。
図10は、スレッドスケジューリングの制御系を模式的に示す図の一例である。これまで説明したように、スケジュールフィードバック装置12には、ターゲットプロファイル値とカウンタ値が入力される。スケジュールフィードバック装置12は両者から生成したスケジュールパラメータをクロック毎にスレッドスケジュール装置11に出力する。スレッドスケジュール装置11は、スケジュールパラメータに応じて、スレッド毎に、切り替えスイッチ19を制御して命令デコーダ18の接続先を命令バッファ#0〜#2のいずれかに切り替える。または、いずれにも接続しない。
なお、プロセッサ50の起動直後は、カウンタ値がカウントされていないので、スレッドスケジュール装置11は初期値のスケジュールパラメータに基づきスレッドスケジューリングする。初期値のスケジュールパラメータは例えば「0」である。この場合、スレッドスケジュール装置11は、スレッド#0〜#2の命令発行比率を均等にする。
ところで、vCPU#0〜#2の時間軸の基準時とターゲットプロファイルの時間軸の基準時を一致させる必要があるので、スレッドスケジュール装置11は予め定めた基準時と、ターゲットプロファイルの時刻Tnを対応づけておく。例えば、プロセッサ50にリセット信号が入力された時をターゲットプロファイルのT0に対応させてたり、プログラム#0〜#2の最初の命令をvCPU#0〜#2がフェッチした時をターゲットプロファイルのT0に対応させておく。
図11(a)は、各スレッドの実行状態の一例を示す図である。図11(a)は比較のために示した図で、スケジュールパラメータによるフィードバックを行わない場合を示す。スレッドスケジュール装置11は、予め定めた比率で各スレッドを命令デコーダ18に接続する(命令を発行する)。図では等分に時分割して各スレッドを実行している。これにスレッド内部要因に応じた切り替えが適宜実行される。時分割により割り当てらえる割り当て時間は、1〜100クロック程度である。
ところで、スレッドスケジュール装置11があるスレッド#0〜#2をスレッドスケジューリングする場合、他のスレッドのスケジュールパラメータを考慮すべきと考えられる。これは、プロセッサ50の処理能力に充分な余裕があるとは限らず、一方のスレッドの割り当て時間の増大が他方のスレッドの割り当て時間の低減になるおそれがあるためである。そこで、マルチスレッド実行装置100は、予めスレッドに優先順位を定めておき、優先順位の高いスレッドから割り当て時間を制御する。
図11(b)は、スケジュールパラメータによりスレッドスケジューリングされた場合のスレッド#0〜#2の割り当て時間の一例を示す。優先順位の最も高いスレッドのスケジュールパラメータが「0」でない場合、スレッドスケジュール装置11はそのスレッドの割り当て時間を制御する。スレッドスケジュール装置11は、例えば、次のようにして割り当て時間を算出する。
スケジュールパラメータが正値の場合:直前の割り当て時間を「α+スケジュールパラメータ」倍する。
スケジュールパラメータが負値の場合:直前の割り当て時間を「1/(α+スケジュールパラメータの絶対値)」倍する。αはスケジュールパラメータに重み付けするパラメータであり、例えば「α=0.5(0<α<1)」である。
例えば、スレッド#0のスケジュールパラメータが「+3」の場合、スレッドスケジュール装置11は、直前の割り当て時間を「0.5+3」倍する。したがって、優先順位の大きいスレッド#0の実行タイミングを、優先的にエミュレート対象CPUの実行タイミングに近づけることができる。なお、割り当て時間には、所定の上限及び下限が設けられている。
優先順位の最も高いスレッド#0のスケジュールパラメータが「0」になると、スレッドスケジュール装置11は次に優先順位の高いスレッド#1の割り当て時間を制御する。例えば、スレッド#1のスケジュールパラメータが「−1」の場合、スレッドスケジュール装置11は、直前の割り当て時間を「1/(0.5+1)」倍する。こうすることで、各スレッドの割り当て時間をスケジュールパラメータに応じて調整できる。
なお、スレッドスケジュール装置11は、優先順位を考慮することなく、スレッド#0〜#2の割り当て時間を制御してもよい。例えば、スレッドスケジュール装置11は順番にスレッド#0〜#2の割り当て時間を制御する。この場合、スケジュールパラメータの絶対値が大きいものから順番に割り当て時間を制御してもよいし、又は、スレッド番号の順に割り当て時間を制御してもよい。スレッドスケジュール装置11は、例えば、次のようにして割り当て時間を制御する。
(i) スケジュールパラメータの絶対値が最も大きいスレッドの割り当て時間を制御する。
(ii)次にスケジュールパラメータの絶対値が大きいスレッドの割り当て時間を制御する。
(iii)これをくりかえして、全てのスケジュールパラメータをゼロに近づける。
このように、各スレッドの割り当て時間をスケジュールパラメータの絶対値が大きい順に制御することで、エミュレート対象CPUの実行タイミングとのずれが大きいスレッドを優先的にエミュレート対象CPUの実行タイミングに近づけることができ、かつ、複数のスレッドの全体を、徐々にエミュレート対象CPUの実行タイミングに近づけることができる。
図12は、マルチスレッド実行装置100の効果を説明する図である。図12(a)は時間に対する実測IPCと目標IPCの関係を示す図の一例である。図示するように、目標IPCの方が実測IPCより小さい。
本実施形態のスレッドスケジューリングを適用することで、実測IPCを目標IPCに一致させることができる。スレッド#0〜#2の割り当て時間を調整することで、図12(b)に示すように、目標IPCと実測IPCの差を小さくすることができる。
〔動作手順〕
図13は、マルチスレッド実行装置100が命令の発行比率を動的に最適化する手順を示すフローチャート図の一例を示す。図13のフローチャート図は、マルチスレッド実行装置100が起動するとスタートする。起動直後、スレッドスケジュール装置11は初期値の命令の発行比率にて命令バッファ#0〜#2と命令デコーダ18を接続している。この間、実行状況監視装置14はカウンタ値をカウントしている。
実行状況監視部141は、リセット信号の検出時を起点にカウンタ値のカウントを開始する。このリセット信号の検出時が例えばターゲットプロファイルの時刻T0に対応する。フィードバック値生成部121は、カウンタ部142から、単位時間毎に、カウント値を取得する(S10)。
ターゲットパラメータ保存部122は、アプリ実行プロファイル記憶部60又は標準プロファイル記憶部70からスレッド#0〜#2毎に、ターゲットプロファイル値を読み出す(S20)。
そして、フィードバック値生成部121は、スレッド#0〜#2毎に、スレッドの時刻Tnのターゲットプロファイル値と、単位時間毎に与えられるカウント値を比較して、スケジュールパラメータを生成する(S30)。スケジュールパラメータはスレッドスケジュール装置11に送出される。
スレッドスケジュール装置11は、最も優先度の高いスレッドを制御対象に決定する(S40)。そして、スレッドスケジュール装置11は、選択したスレッド#0〜#2に対し、
・スケジュールパラメータが正値の場合、スレッド#0〜#2の割り当て時間を長くし(S60)、
・スケジュールパラメータが「0」の場合、スレッド#0〜#2の割り当て時間を制御せず(S70)、
・スケジュールパラメータが負値の場合、スレッド#0〜#2の割り当て時間を短くする(S80)。」
以上説明したように、本実施形態のマルチスレッド実行装置100は、スレッド毎に命令の実行回数を動的に最適化できるので、エミュレート対象CPUのプログラム#0〜#2の実行タイミングを統合したCPUで再現することができる。したがって、複数のECUを1つに統合した場合に、統合前の各ECUの動作を統合したECUで達成することができる。また、プログラムを別のCPUに移植しても、移植先のCPUが移植前と時間的に同じ振る舞いをするので、プログラムの再設計が不要になり、プログラムの流通性が向上する。特に、単位処理の実行サイクル数をフィードバック制御に用いることで、異種マイコンへの統合が可能となる。
〔好適な変形例〕
・シングルスレッド実行装置100
マルチスレッド実行装置100が複数のスレッドを有することを前提に説明したが、マルチスレッド実行装置100が1つのみのスレッドを有していてもよい。
図14は、マルチスレッド実行装置100の概略構成図の一例を示す。図14において図3と同一部には同一の符号を付しその説明は省略する。スレッド#0が1つの場合、命令バッファ及びレジスタファイル16も1つになる。また、スレッドスケジュールが不要なので、スレッドスケジュール装置11の代わりに、命令発行制御回路24が命令バッファ17に接続されている。命令発行制御回路24は、スケジュールパラメータに応じて、命令バッファ17に命令をフェッチするタイミングを制御する。すなわち、スケジュールパラメータが負値の場合、スケジュールパラメータの絶対値に応じて、例えば、パイプラインにストールを発生させたりNOP命令を挿入する。こうすることで、単位時間毎の命令実行完了数を低下させ、又は、単位処理の実行サイクル数を増大させ、エミュレート対象CPUの実行タイミングを再現できる。また、スケジュールパラメータが正値の場合、スケジュールパラメータの大きさに応じて、ストール又はNOP命令に対する命令フェッチの比率を大きくする。こうすることで、単位時間毎の命令実行完了数を増大させ、又は、単位処理の実行サイクル数を低下させ、エミュレート対象CPUの実行タイミングを再現できる。
・スレッド間の命令実行比率に基づくフィードバック
また、本実施形態では、スレッドスケジュール装置11がスレッド#0〜#2毎にカウンタ値とターゲットプロファイル値を比較して、スレッド#0〜#2毎にスケジュールパラメータを生成したが、スレッド間の命令実行比率に基づきスケジュールパラメータを生成してもよい。
図15は、命令発行比率に基づき生成されるスケジュールパラメータの一例を示す図である。エミュレート対象CPUの各ターゲットプロファイルが得られているので、ある時刻TnにおけるターゲットプロファイルのIPC又は単位処理の実行サイクル数が既知である(図6(c))。したがって、ターゲットプロファイルにおける時刻Tnの各プログラム#0〜2の実行比率が分かる。図では、目標とする実行比率が「5:50:45」となる。各数値は合計すると100〔%〕である。
これに対し、実行状況監視装置14は、各スレッド#0〜#2のカウント値をカウントしているので、単位時間毎に実測した各スレッド#0〜#2の実行比率が明らかとなる。図では「10:30:60」となる。
各スレッド#0〜#2毎に実行比率を比較すると、スレッド#0「5−10=−5」、スレッド1「50−30=20」、スレッド2「45−60=−15」である。比較結果(差)が負値の場合、そのスレッドの実行比率を少なくし、正値の場合、そのスレッドの実行比率を多くする必要があることになるので、スケジュールフィードバック装置12は比較結果に応じてスレッド毎にスケジュールパラメータを生成する。
スレッド間の命令実行率に基づき生成されたスケジュールパラメータは、割り当て時間を増大するスレッド#1があれば必ず低減させるスレッド#0、#2もあることになるので、全スレッドの実行比率に整合性を保ちながらスレッドスケジュールすることができる。
・フィードフォワード制御を考慮したスレッドスケジューリング
また、スレッドスケジュール装置11はフィードバック制御により、スレッドスケジュールするとしたが、フィードフォワード制御を加えてもよい。
図16は、スレッドスケジューリングの制御系を模式的に示す図の一例である。スレッドスケジュール装置11にフィードフォワード装置25が接続されている。フィードフォワード装置25は、外乱を検出して検出結果をスレッドスケジュール装置11に送出する。スレッドスケジュール装置11は、スケジュールフィードバック装置12から取得したスケジュールパラメータに、外濫を考慮して各スレッドの割り当て時間を制御する。外濫は、例えば、ハードウェア割り込み、ハザード等、命令実行に影響を及ぼすイベントであり、予め登録されている。パイプライン制御回路13はこのイベントを検出してスレッドスケジュール装置11に通知する。スレッドスケジュール装置11は、イベントの種類に応じてイベントを発生させたスレッド#0〜#2のスケジュールパラメータを補正する。このように外濫を考慮することで、vCPU#0〜#2が実行するプログラム#0〜#2の、ターゲットプロファイルへの追随性を向上させることができる。
11 スレッドスケジュール装置
12 スケジュールフィードバック装置
13 パイプライン制御回路
14 実行状況監視装置
15 演算回路
16 レジスタファイル
17 命令バッファ
18 命令デコーダ
19、21 切り替えスイッチ
50 プロセッサ
60 アプリ実行プロファイル記憶部
100 マルチスレッド実行装置

Claims (11)

  1. 複数のプログラムが記憶されたプログラム記憶手段と、
    前記プログラム記憶手段から読み出した命令を発行する命令発行手段と、
    前記命令を実行する命令実行手段と、を有するマルチスレッド実行装置であって、
    前記プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段と、
    命令の実行完了速度を監視する実行速度監視手段と、
    前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させるフィードバック制御手段と、を有し、
    前記フィードバック制御手段は、
    前記実行完了速度と前記目標実行速度情報との乖離が大きい前記プログラムから順に、前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させる、ことを特徴とするマルチスレッド実行装置。
  2. 複数のプログラムが記憶されたプログラム記憶手段と、
    前記プログラム記憶手段から読み出した命令を発行する命令発行手段と、
    前記命令を実行する命令実行手段と、を有するマルチスレッド実行装置であって、
    前記プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段と、
    命令の実行完了速度を監視する実行速度監視手段と、
    前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させるフィードバック制御手段と、を有し、
    前記フィードバック制御手段は、
    前記プログラム毎の前記目標実行速度情報から求めたスレッド間目標実行比率に、前記実行完了速度から求めたスレッド間の実行比率が略一致するように、前記命令発行手段に命令を発行させる、ことを特徴とするマルチスレッド実行装置。
  3. 複数のプログラムが記憶されたプログラム記憶手段と、
    前記プログラム記憶手段から読み出した命令を発行する命令発行手段と、
    前記命令を実行する命令実行手段と、を有するマルチスレッド実行装置であって、
    前記プログラム毎に、所定のCPUで実行された際の時間に対する演算量が当該マルチスレッド実行装置で再現されるように作成された命令の目標実行速度情報を記憶する目標実行速度情報記憶手段と、
    命令の実行完了速度を監視する実行速度監視手段と、
    前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させるフィードバック制御手段と、
    を有することを特徴とするマルチスレッド実行装置。
  4. 前記目標実行速度情報は、命令の単位時間当たりの目標実行完了数情報を有し、
    前記実行速度監視手段は、命令の単位時間当たりの実行完了数を監視し、
    前記フィードバック制御手段は、前記目標実行完了数情報と、前記実行完了数との差が小さくなるように、前記命令発行手段に命令を発行させる、
    ことを特徴とする請求項1〜3いずれか1項記載のマルチスレッド実行装置。
  5. 前記目標実行完了数情報は、所定のCPUが前記プログラムを実行した際の、単位時間当たりの命令の実行完了数、又は、
    所定のCPUの仕様及び前記プログラムの含む命令から、統計的に求めた単位時間当たりの命令の実行完了数である、
    ことを特徴とする請求項4記載のマルチスレッド実行装置。
  6. 前記目標実行速度情報は、プログラムの単位処理当たりの目標実行サイクル数情報を有し、
    前記実行速度監視手段は、プログラムの単位処理当たりの実行サイクル数を監視し、
    前記フィードバック制御手段は、前記目標実行サイクル数情報と、前記実行サイクル数との差が小さくなるように、前記命令発行手段に命令を発行させる、
    ことを特徴とする請求項1〜3いずれか1項記載のマルチスレッド実行装置。
  7. 前記目標実行サイクル数情報は、所定のCPUが前記プログラムを実行した際の単位処理の実行サイクル数、又は、所定のCPUの仕様及び前記プログラムの含む命令から、統計的に求めた前記プログラムの単位処理の実行サイクル数である、
    ことを特徴とする請求項6記載のマルチスレッド実行装置。
  8. 前記目標実行完了数情報は、
    所定のCPUと当該マルチスレッド実行装置のCPUの動作周波数の比で補正したものである、
    ことを特徴とする請求項5記載のマルチスレッド実行装置。
  9. 前記目標実行速度情報は、所定の基準時から計測開始される前記プログラムの実行時間に対応づけられている、
    ことを特徴とする請求項1〜8いずれか1項記載のマルチスレッド実行装置。
  10. 前記命令発行手段は、予め定められた複数の前記プログラムの優先順位に従い、前記実行完了速度を前記目標実行速度情報に略一致させる前記プログラムを決定する、
    ことを特徴とする請求項1〜9いずれか1項記載のマルチスレッド実行装置。
  11. 複数のスレッドを切り替えて実行するマルチスレッド実行方法であって、
    複数のプログラムが記憶されたプログラム記憶手段から、命令を読み出すステップと
    命令発行手段が、読み出した命令を発行するステップと、
    命令実行手段が、前記命令を実行するステップと、
    実行速度監視手段が、命令の実行完了速度を監視するステップと、
    前記プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段から読み出した前記目標実行速度情報に、前記実行完了速度が略一致するように、フィードバック制御手段が、前記命令発行手段に命令を発行させるステップと、を有し
    前記フィードバック制御手段は、前記実行完了速度と前記目標実行速度情報との乖離が大きい前記プログラムから順に、前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させる、
    ことを特徴とするマルチスレッド実行方法。
JP2009138327A 2009-06-09 2009-06-09 マルチスレッド実行装置、マルチスレッド実行方法 Expired - Fee Related JP5411587B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009138327A JP5411587B2 (ja) 2009-06-09 2009-06-09 マルチスレッド実行装置、マルチスレッド実行方法
US12/783,958 US8560812B2 (en) 2009-06-09 2010-05-20 Device for executing an instruction using a target execution speed

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009138327A JP5411587B2 (ja) 2009-06-09 2009-06-09 マルチスレッド実行装置、マルチスレッド実行方法

Publications (2)

Publication Number Publication Date
JP2010286898A JP2010286898A (ja) 2010-12-24
JP5411587B2 true JP5411587B2 (ja) 2014-02-12

Family

ID=43301584

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009138327A Expired - Fee Related JP5411587B2 (ja) 2009-06-09 2009-06-09 マルチスレッド実行装置、マルチスレッド実行方法

Country Status (2)

Country Link
US (1) US8560812B2 (ja)
JP (1) JP5411587B2 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9182923B2 (en) 2010-08-31 2015-11-10 Nec Corporation Controlling throughput of processing units associated with different load types in storage system
WO2013008325A1 (ja) * 2011-07-13 2013-01-17 富士通株式会社 マルチコアプロセッサシステム、および制御方法
US9411591B2 (en) 2012-03-16 2016-08-09 International Business Machines Corporation Run-time instrumentation sampling in transactional-execution mode
US9454462B2 (en) 2012-03-16 2016-09-27 International Business Machines Corporation Run-time instrumentation monitoring for processor characteristic changes
US9280447B2 (en) 2012-03-16 2016-03-08 International Business Machines Corporation Modifying run-time-instrumentation controls from a lesser-privileged state
US9442824B2 (en) 2012-03-16 2016-09-13 International Business Machines Corporation Transformation of a program-event-recording event into a run-time instrumentation event
US9250902B2 (en) 2012-03-16 2016-02-02 International Business Machines Corporation Determining the status of run-time-instrumentation controls
US9483268B2 (en) 2012-03-16 2016-11-01 International Business Machines Corporation Hardware based run-time instrumentation facility for managed run-times
US9367316B2 (en) 2012-03-16 2016-06-14 International Business Machines Corporation Run-time instrumentation indirect sampling by instruction operation code
US9465716B2 (en) * 2012-03-16 2016-10-11 International Business Machines Corporation Run-time instrumentation directed sampling
US9430238B2 (en) 2012-03-16 2016-08-30 International Business Machines Corporation Run-time-instrumentation controls emit instruction
US9471315B2 (en) 2012-03-16 2016-10-18 International Business Machines Corporation Run-time instrumentation reporting
US9405541B2 (en) 2012-03-16 2016-08-02 International Business Machines Corporation Run-time instrumentation indirect sampling by address
US9158660B2 (en) 2012-03-16 2015-10-13 International Business Machines Corporation Controlling operation of a run-time instrumentation facility
JP5933356B2 (ja) * 2012-06-12 2016-06-08 ルネサスエレクトロニクス株式会社 コンピュータシステム
US10740102B2 (en) * 2017-02-24 2020-08-11 Oracle International Corporation Hardware mechanism to mitigate stalling of a processor core
US11030148B2 (en) * 2018-04-04 2021-06-08 Lawrence Livermore National Security, Llc Massively parallel hierarchical control system and method

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5600805A (en) * 1992-06-15 1997-02-04 International Business Machines Corporation Pass-through for I/O channel subsystem call instructions for accessing shared resources in a computer system having a plurality of operating systems
JP2000047887A (ja) 1998-07-30 2000-02-18 Toshiba Corp 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
JP2002230065A (ja) * 2001-02-02 2002-08-16 Toshiba Corp システムlsi開発装置およびシステムlsi開発方法
GB2372847B (en) * 2001-02-19 2004-12-29 Imagination Tech Ltd Control of priority and instruction rates on a multithreaded processor
JP2004013190A (ja) * 2002-06-03 2004-01-15 Matsushita Electric Ind Co Ltd ソフトウエア開発環境、シミュレータ及び記録媒体
JP2004234123A (ja) 2003-01-28 2004-08-19 Fujitsu Ltd マルチスレッドコンピュータ
US8195922B2 (en) 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ

Also Published As

Publication number Publication date
US20100312992A1 (en) 2010-12-09
JP2010286898A (ja) 2010-12-24
US8560812B2 (en) 2013-10-15

Similar Documents

Publication Publication Date Title
JP5411587B2 (ja) マルチスレッド実行装置、マルチスレッド実行方法
CN101542412B (zh) 用于多线程处理器中自动低功率模式调用的装置和方法
CN101133391B (zh) 多线程微处理器中的二分化线程调度器
CN112445310A (zh) 主动di/dt电压下降抑制
JP5283762B2 (ja) 演算処理装置、情報処理装置及びその制御方法
CN101238425B (zh) 使用低功率虚拟线程的软件指定的电源性能管理装置和方法
US20030154235A1 (en) Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
CN106909444B (zh) 用于指定应用线程性能状态的指令的指令处理装置及相关方法
CN104321747B (zh) 用于多核/众核可编程逻辑控制器的时间裕隙应用流水线平衡
JP5047542B2 (ja) マルチスレッドプロセッサのディスパッチ時にスレッドをブロックする方法、コンピュータプログラム、および装置(精細なマルチスレッドディスパッチロックメカニズム)
US20150150019A1 (en) Scheduling computing tasks for multi-processor systems
CN101128797A (zh) 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器
WO2008145653A1 (en) Scheduling threads in a processor
Feliu et al. Symbiotic job scheduling on the IBM POWER8
Gottschlag et al. Mechanism to mitigate avx-induced frequency reduction
JP2005521937A (ja) コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置
US20110231637A1 (en) Central processing unit and method for workload dependent optimization thereof
JP2013054625A (ja) 情報処理装置、情報処理方法
JP2020091751A (ja) 演算処理装置および演算処理装置の制御方法
Wada et al. Fast interrupt handling scheme by using interrupt wake-up mechanism
Schoeberl et al. Is chip-multiprocessing the end of real-time scheduling?
CN118245187A (zh) 线程调度方法及装置、电子设备及存储介质
US8387053B2 (en) Method and system for enhancing computer processing performance
JP2011248454A (ja) プロセッサ装置及びプロセッサ装置の制御方法
JP2011008617A (ja) マルチスレッド実行装置、オブジェクトプログラムの生成方法、プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120514

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130724

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130730

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130925

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131108

R151 Written notification of patent or utility model registration

Ref document number: 5411587

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees