JP2011248454A - プロセッサ装置及びプロセッサ装置の制御方法 - Google Patents

プロセッサ装置及びプロセッサ装置の制御方法 Download PDF

Info

Publication number
JP2011248454A
JP2011248454A JP2010118467A JP2010118467A JP2011248454A JP 2011248454 A JP2011248454 A JP 2011248454A JP 2010118467 A JP2010118467 A JP 2010118467A JP 2010118467 A JP2010118467 A JP 2010118467A JP 2011248454 A JP2011248454 A JP 2011248454A
Authority
JP
Japan
Prior art keywords
thread
access
program
processor
time
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
JP2010118467A
Other languages
English (en)
Inventor
Takashi Motoizumi
隆志 本泉
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.)
Renesas Electronics Corp
Original Assignee
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2010118467A priority Critical patent/JP2011248454A/ja
Publication of JP2011248454A publication Critical patent/JP2011248454A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Bus Control (AREA)

Abstract

【課題】特定のプログラムがバスアクセスを占有するのを回避する。
【解決手段】マルチスレッドプロセッサ10は、少なくとも第1及び第2のプログラムを含む複数のプログラムを切り替えて実行するプロセッサであって、複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、複数のプログラムの実行権を制御するディスパッチユニット12を備える。ディスパッチユニット12は、少なくともコントロールユニットによる第1のプログラムにかかる外部資源との第1のアクセスの開始から、第1のアクセスの終了後に引き続き行われる第2のプログラムにかかるアクセスの開始後までの間、第1のプログラムの実行を停止させる、
【選択図】図1

Description

本発明はプロセッサ装置及びプロセッサ装置の制御方法に関する。
一定以上の規模を持つソフトウェア開発においては、モジュールを個別開発し、それらのモジュールを結合してソフトウェアを完成させる開発手法が用いられる。組み込みソフト開発においては、ソフトの提供と同時にスペックを提示することが必須となる。このスペック値は、通常の使用条件での値(Typical time:Typ.)の他にワーストケースを規定した値(Min/Max)が必要である。このとき、スペック値は、実行されるハードウェアの構造や設定に極力依存しないことが望ましい。
また、1つのプロセッサ内に複数のコンテキストブロックを持ち、独立した命令流をスレッド単位で切り替えながら処理するマルチスレッドプロセッサが存在する(例えば、非特許文献1参照)。ここで命令流とは、プログラムされた一連の処理である。
マルチスレッドプロセッサは、それぞれが独立した命令流を実行することで、複数スレッドの並列実行を擬似的に実現する。マルチスレッドプロセッサは、複数のコンテキストブロックと、1つのディスパッチユニットを有する。ディスパッチユニットは、周期的あるいは優先度順にコンテキストブロックを切り替え、それぞれのコンテキストブロックに応じた命令流を命令パイプラインに投入する。
マルチスレッドプロセッサは、1つのスレッドにより生成された命令をパイプライン中の1つの実行ステージで実行しながら、他の実行ステージにおいて他のスレッドにより生成された命令を処理する。つまり、マルチスレッドプロセッサは、互いに独立関係にある命令をそれぞれ異なる実行ステージで実行する。これにより、マルチスレッドプロセッサは、それぞれの命令流を円滑に処理しながら、パイプラインの実行ステージが何も処理しない時間を削減し、プロセッサの処理能力を向上させる。
図5に、マルチスレッドプロセッサの例を示す。マルチスレッドプロセッサ30は、コンテキストブロック11と、ディスパッチユニット31と、メモリコントロールユニット13と、バスコントロールユニット14と、コプロセッサ15と、演算論理装置(ALU)36を備える。
また、マルチスレッドプロセッサ30には、プロセッサ全体クロック発振器18と、RAM(Random Access Memory)38と、ROM(Read only memory)39と、メモリバス21と、拡張ユニット(I/O)41と、I/Oバス23が接続されている。
マルチスレッドプロセッサ30は、複数のコンテキストブロック11を備えている。ここで、各コンテキストブロック11は、スレッドの設定情報を格納しており、複数のスレッドのいずれか一つと対応関係にある。コンテキストブロック11は、ディスパッチユニット31によるスレッドの切り替えに応じて、切り替わりながら動作する。
コンテキストブロック11は、プログラムカウンタ24、システムレジスタ25、汎用レジスタ26を備える。プログラムカウンタ24は、実行すべき命令が格納されているメモリ上の番地を指定する。システムレジスタ25は、マルチスレッドプロセッサ30の動作を制御する命令を格納する。汎用レジスタ26は、計算に使う値や、RAM19やROM20のデータアドレスを格納する。また、例えば、後述するALU16やコプロセッサ15により演算された演算結果を格納する。
ディスパッチユニット31は、各スレッドに実行権を与える。実行権が与えられたスレッドが動作を実行される。また、実行されるスレッドの切り替えに応じて、コンテキストブロック11を切り替える。
メモリコントロールユニット13は、マルチスレッドプロセッサ30が、メモリバス21を介して、外部資源であるRAM19やROM20にアクセスするのを制御する。メモリコントロールユニット13は、あるスレッドからメモリバス21へのアクセス要求があった場合に、他のスレッドからメモリバス21へのアクセスが実行中でなければ要求を実行する。メモリコントロールユニット13は、アクセスが実行中であればその旨を伝える信号を返却し、要求元のスレッドを待たせる動作を行う。
バスコントロールユニット14は、マルチスレッドプロセッサ30が、I/Oバス23を介して、I/O22にアクセスするのを制御する。バスコントロールユニット14は、あるスレッドからI/Oバス23へのアクセス要求があった場合に、他のスレッドからI/Oバス23へのアクセスが実行中でなければ要求を実行する。アクセスが実行中であればその旨を伝える信号を返却し、要求元のスレッドを待たせる動作を行う。
マルチスレッドプロセッサ30は、コンテキストブロック11と同数のコプロセッサ15を備える。コプロセッサ15は、入力された命令に従い、演算をスレッド毎に独立して実行する。例えば、特定分野に特化した補助プロセッサであり、例えば浮動小数点演算を行なうものである。コプロセッサ15はディスパッチユニット31を介して、システムレジスタ25から命令を入力する。また、コプロセッサ15は入力された命令を実行し、ディスパッチユニット31を介して、実行結果を汎用レジスタ26に出力する。
ALU16は、入力された命令に従い演算を行う。例えばALU16は、実行中のスレッドの命令流に基づいて演算を行う。例えばALU16は、ディスパッチユニット31を介して、システムレジスタ25から命令を入力する。また、ALU16は入力された命令を実行し、ディスパッチユニット31を介して、実行結果を汎用レジスタ26に出力する。ALU16は、複数のスレッド間の共有資源である。
プロセッサ全体クロック発振器18は、マルチスレッドプロセッサ30の全体にかかるクロックを生成し、供給する。マルチスレッドプロセッサ30は、プロセッサ全体クロック発振器18で生成されたクロック単位で、処理の実行を行う。
RAM19は、読み込み及び書き込みが可能なメモリである。ROM20は、読み込みが可能なメモリである。メモリバス21は、マルチスレッドプロセッサ30と、RAM19及びROM20を接続する経路である。
I/O22は、マルチスレッドプロセッサ30の外部に設けられた機器であり、例えばディスプレイや、キーボード等である。I/Oバス23は、マルチスレッドプロセッサ30と、I/O22を接続する経路である。
ここで、RAM19やROM20やI/O22は各スレッドの共有資源である。一般に、演算処理を行う部分(コンテキストブロック11、ディスパッチユニット31、コプロセッサ15、ALU16等)は高速で動作し、RAM19、ROM20、I/O22は低速で動作する。
このようなハードウェア構成により、マルチスレッドプロセッサ30は、コンテキストブロック11と同数のスレッドを、自動的に切り替えながら並行動作させる。大抵の場合、マルチスレッドプロセッサ30では、クロック単位で複数のスレッドが切り替わるのに対し、メモリバス21やI/Oバス23に接続されている外部資源にはクロック単位での切り替えができない。したがって、外部資源へのアクセスの競合が発生した場合には、例えば優先度の低いスレッドが、アクセスを待たされることとなる。
ここで、2つのスレッド(スレッドA及びスレッドB)が1クロック毎に切り替わりながら動作する場合において、2つのスレッドがほぼ同時にメモリへのデータリード要求を発行する例を図6に示す。ここでスレッドAを第1のスレッド、スレッドBを第2のスレッドとする。図6に示す例において、ディスパッチユニット31は、第1のスレッド及び第2のスレッドの実行権を、1クロック毎に交互に切り替える。
時刻T1において、第1のスレッドがメモリリード要求(Q1)を発生させる。この時点で他のバスアクセスは行われていないため、第1のスレッドがバスアクセス権を獲得し、バスアクセス(Q1)を開始する。
時刻T2において、第2のスレッドがメモリリード要求(Q2)を発生させる。ここで、時刻T2ではバスアクセス(Q1)が実行中のため、第2のスレッドはバスアクセス権の獲得を待つ。
時刻T3において、バスアクセス(Q1)が終了し、バスアクセス権が開放される。ここで第2のスレッドがバスアクセス権を獲得し、バスアクセス(Q2)を開始する。
時刻T4において、バスアクセス(Q2)が終了する。
ここで、第1のスレッドの処理時間L1は、第1のスレッドのデータリード要求が発生したT1からデータリードが終了するT3までである。これは、データリードが保留されないため待ち時間がなく、バスアクセス(Q1)を行う時間と等しい。一方、第2のスレッドの処理時間L2は、第2のスレッドのデータリード要求が発生したT2から、バスアクセス(Q1)が終了するT3まではシステムバスの解放待ちである。その後、バスアクセス(Q1)によって占有されていたシステムバスが、T3において解放され、バスアクセス(Q2)が開始する。すなわち、バスアクセス権獲得を保留されたT2〜T3の時間だけ、第2のスレッドの処理時間が長くなる。
次に、3つのスレッド(スレッドA、スレッドB、及びスレッドC)がメモリアクセスを行う場合の例を図7に示す。ここでスレッドAを第1のスレッド、スレッドBを第2のスレッド、スレッドCを第3のスレッドとする。スレッドの優先度は、第1のスレッド>第2のスレッド>第3のスレッドとする。
時刻T1において、第1のスレッドがメモリリード要求(Q1)を発行する。第1のスレッドは即座にバスアクセス権を獲得し、バスアクセス(Q1)を開始する。時刻T2において、第2のスレッドがメモリリード要求(Q2)を発行する。しかし、時刻T2ではバスアクセス(Q1)が実行中であり、第2のスレッドはバスアクセス権が獲得できず、メモリリード要求(Q2)は保留される。時刻T3において、第3のスレッドがメモリリード要求(Q3)を発行する。しかし、時刻T3ではバスアクセス(Q1)が実行中であり、第3のスレッドはバスアクセス権が獲得できず、メモリリード要求(Q3)は保留される。
時刻T4において、第1のスレッドによるバスアクセス(Q1)が終了する。ここで第2のスレッドと第3のスレッドのバスアクセスの優先度の比較を行う。これにより、優先度が高い第2のスレッドがアクセス権を獲得し、バスアクセス(Q2)が開始する。第3のスレッドのメモリリード要求(Q3)は、引き続き保留される。時刻T5において、第1のスレッドが新たなメモリリード要求(Q4)を発行する。メモリリード要求(Q4)は、バスアクセス権獲得まで保留される。
時刻T6において、第2のスレッドによるバスアクセス(Q2)が終了する。ここで、第1のスレッドと第3のスレッドのバスアクセスの優先度の比較が行われる。これにより、優先度が高い第1のスレッドがアクセス権を獲得し、バスアクセス(Q4)が開始する。第3のスレッドのメモリリード要求(Q3)は、引き続き保留される。時刻T7において、バスアクセス(Q4)が終了する。その後、第3のスレッドのバスアクセス(Q3)が開始される。時刻T8において、バスアクセス(Q3)が終了する。
この場合、図7に示すように動作時間L1〜L4は、それぞれのバスの空き待ち時間によってそれぞれ異なる。また、上述した第3のスレッドのように、バスアクセスが要求順序と異なる順序で実行されることにより、スレッドの動作が保留され続ける場合がある。例えば、第1のスレッド及び第2のスレッドのバスアクセスが交互に繰り返されると、第3のスレッドのバスアクセスが保留され続けることとなる。
特許文献1には、スレッドの実行時間をカウントし、カウントされた時間がスレッドの割り当て時間に達したときに、実行するスレッドを切り替える。これによると、スレッドの実行時間に基づいてスレッドの切り替えを制御することにより、スレッド切り替え時のオーバーヘッドを短縮し、プロセッサの稼働率を向上させる。
特許文献2には、プロセッサにおけるスレッドの切り替えを、ハードウェアレジスタを用いて行う。これによれば、ハードウェアレジスタは、ソフトウェアスレッド切り替え制御よりはるかに高速に動作することができ、プロセッサの性能を改善することができる。
特開2007−317171号公報 特表2001−521215号公報
"MIPS32 34K", MIPS Technologies, Inc, [online], [平成22年4月22日検索], インターネット<URL:http://www.mips.com/media/files/MIPS32_34K_410.pdf>
図6に示したように、マルチスレッドプロセッサのアクセス対象が共有資源の場合には、あるスレッドの処理が他スレッド処理に起因して保留され、処理時間が伸びる場合がある。また図7に示したように、外部資源へのアクセスの競合に起因してスレッドの処理が保留される場合がある。ワーストケースでは、特定のスレッドの処理が保留され続け、該スレッドの動作時間が無限大となる。そのため、ワーストケースの動作時間を見積もることが不可能となる。
特許文献1及び特許文献2は、複数のスレッドによる外部資源へのアクセスの競合により、特定のスレッドの実行が保留されるのを解消するものではない。
本発明の第1の態様にかかるプロセッサ装置は、少なくとも第1及び第2のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置であって、前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、前記複数のプログラムの実行権を制御するディスパッチユニットを備え、前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第1のプログラムにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる前記第2のプログラムにかかるアクセスの開始後までの間、前記第1のプログラムの実行を停止させる。
本発明の第2の態様にかかるプロセッサ装置は、少なくとも第1及び第2のプロセッサを備えるプロセッサ装置であって、前記プロセッサ装置は、少なくとも前記第1のプロセッサにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる第2のプロセッサの前記外部資源との第2のアクセスの開始後までの間、前記第1のプロセッサの実行を停止させる。
本発明の第3の態様にかかるプロセッサ装置の制御方法は、少なくとも第1及び第2のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置の制御方法であって、プロセッサ装置は、前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、前記複数のプログラムの実行権を制御するディスパッチユニットを備え、前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第1のプログラムにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる前記第2のプログラムにかかるアクセスの開始後までの間、前記第1のプログラムの実行を停止させる。
本発明の第4の態様にかかるプロセッサ装置の制御方法は、少なくとも第1及び第2のプロセッサを備えるプロセッサ装置の制御方法であって、前記プロセッサ装置は、少なくとも前記第1のプロセッサにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる第2のプロセッサの前記外部資源との第2のアクセスの開始後までの間、前記第1のプロセッサの実行を停止させる。
これにより、複数のスレッドによる外部資源へのアクセスの競合に起因して、特定のプログラムの実行が保留され続けるのを回避することができる。
プロセッサにおいて、競合しうるプログラムが複数実行されている場合であっても、特定のプログラムがバスアクセスを占有するのを回避することができる。
実施の形態1にかかるプロセッサの概略を示すブロック図である。 実施の形態1にかかるスレッド時間管理カウンタの詳細図である。 実施の形態1にかかるプロセッサの処理のタイミング図である。 実施の形態1にかかるプロセッサの処理のタイミング図である。 関連するマルチスレッドプロセッサのブロック図である。 関連するマルチスレッドプロセッサの処理のタイミング図である。 関連するマルチスレッドプロセッサの処理のタイミング図である。
実施の形態1
以下、図面を参照して本発明の実施の形態について説明する。図1に、本実施の形態にかかるマルチスレッドプロセッサ10のブロック図を示す。なお、以下で説明する実施の形態について、図5にかかるマルチスレッドプロセッサと同一の構成要素に対しては同一の符号を付加し、適宜、該構成要素に関する説明を省略する。
マルチスレッドプロセッサ10は、コンテキストブロック11と、ディスパッチユニット12と、メモリコントロールユニット13と、バスコントロールユニット14と、コプロセッサ15と、ALU16と、スレッド時間管理カウンタ17を備える。またプロセッサ10には、プロセッサ全体クロック発振器18と、RAM19と、ROM20と、メモリバス21と、I/O22と、I/Oバス23が接続されている。なお、マルチスレッドプロセッサ10において、命令の実行はスレッド単位で処理を行うものとするが、これに限定されない。例えば、プロセス単位やタスク単位であってもよい。
マルチスレッドプロセッサ10は、複数のコンテキストブロック11を備える。各コンテキストブロック11は、スレッドの設定情報を格納しており、複数のスレッドのいずれか一つと対応関係にある。コンテキストブロック11は、ディスパッチユニット12によるスレッドの切り替えに応じて、切り替わりながら動作する。
ディスパッチユニット12は、動作中のスレッドについてクロックを生成して出力するスレッド動作クロック生成器27と、特定スレッドの動作を一時停止させるスレッド一時停止器28とを備える。スレッド動作クロック生成器27と、スレッド一時停止器28については後に詳述する。
ディスパッチユニット12は、各スレッドの実行権を制御する。ディスパッチユニット12により実行権を与える。実行権が与えられたスレッドのみが動作を実行することができる。なお、ディスパッチユニット12は、複数のスレッドに対し順番に実行権を与える。
メモリコントロールユニット13は、動作中のスレッドがメモリバス21を介して、外部資源であるRAM19やROM20にアクセスするのを制御する。バスコントロールユニット14は、複数のスレッドにかかるデータについて、プロセッサ10からI/Oバス23を介して、外部資源であるI/O22に対し入出力するのを制御する。なお、プロセッサ10とI/O22などの外部資源とを接続する動作のクロックを、バス動作クロック60とする。
スレッド動作クロック生成器27は、該当スレッドが動作状態である場合にはスレッド動作クロック700〜703を生成し、スレッド動作クロックをスレッド時間管理カウンタ17に出力する。このとき、スレッド動作クロック700〜703の位相は、プロセッサ全体クロック50と同位相とする。該当スレッドが停止状態である場合には、該当スレッドのスレッド動作クロック700〜703を生成しない。なお、本例でのスレッド動作クロック700〜703は、プロセッサ全体クロック50と異なるクロックで動作するユニットが存在する場合の例である。マルチスレッドプロセッサ10の場合には、コプロセッサ15のように、スレッドに同期して動作するユニットが存在するため必要となる。
スレッド時間管理カウンタ17は、スレッド数と同数のカウンタ100〜103を備える。スレッド時間管理カウンタ17は、バスなどの共有資源を使用せずにディスパッチユニット12に接続される。スレッド時間管理カウンタ17には、プロセッサ全体クロック発振器18からマルチスレッドプロセッサ10の全体に供給されるプロセッサ全体クロック50と、ディスパッチユニット12からのスレッド動作クロック700〜703と、バス動作クロック60が入力される。
図2に、スレッド時間管理カウンタ17の詳細図を示す。スレッド時間管理カウンタ17のカウンタ数はスレッド数と同一である。ここでカウンタはスレッド数と同様に4つの場合の例を示す。
スレッド時間管理カウンタ17において、カウンタ100〜103は、それぞれに対応するカウント値制御信号200〜203によって、カウント値の設定および動作開始及び停止を制御される。カウンタ100〜103のカウント源は、アクセスする資源の動作クロックから選択して使用できる。本例では、プロセッサ全体クロック50、バス動作クロック60、該当スレッド動作クロック700〜703の中から選択可能である。カウンタ100〜103のカウント源は、それぞれに対応するカウント源切り替え信号300〜303により切り替えることができる。該当スレッド動作クロック700〜703は、スレッド動作クロック生成器27から出力される信号である。また、カウンタ100〜103は、値が設定されると、対応するスレッドのスレッド停止要求信号400〜403をスレッド一時停止器28に出力する。以後、カウント源切り替え信号300〜303で選択されたクロックに同期してカウンタ値をデクリメントし、カウンタ値が0になった時点でスレッド停止要求信号400〜403の出力を停止する。
スレッド一時停止器28は、スレッド時間管理カウンタ17から出力されたスレッド停止要求信号に基づいて、該当スレッドを個別に停止させる。例えばスレッド一時停止器28は、該当スレッドを停止する制御信号を生成する。ディスパッチユニット12は、生成された制御信号に基づき、該当スレッドに実行権を与えないよう動作する。ただし、スレッド時間管理カウンタ17から、スレッド停止要求信号400〜403がスレッド一時停止器28に出力されている場合であっても、メモリコントロールユニット13やバスコントロールユニット14の外部共有資源や、演算を継続可能なコプロセッサ15は動作を継続するものとする。
コプロセッサ15は、マルチスレッドプロセッサ10において、コンテキストブロック11と同数備えられている。ALU16は、四則演算や論理演算などの処理を行う。ALU16は複数のスレッドの共有資源である。プロセッサ全体クロック発振器18は、マルチスレッドプロセッサ10の全体にかかるプロセッサ全体クロック50を生成する。
RAM19は、読み込み及び書き込みが可能なメモリである。ROM20は、読み込みが可能なメモリである。メモリバス21は、マルチスレッドプロセッサ10と、RAM19及びROM20を接続する経路である。I/O22は、マルチスレッドプロセッサ10の外部に設けられた機器であり、例えばディスプレイや、キーボード等である。I/Oバス23は、マルチスレッドプロセッサ10とI/O22を接続する経路である。ROM20やRAM19やI/O22はスレッド間で共有資源である。
次に、実施の形態1にかかるマルチスレッドプロセッサ10の動作について説明する。
ここで、マルチスレッドプロセッサ10は第1及び第2のスレッドを含む複数のスレッドを切り替えて実行するマルチスレッドプロセッサとする。マルチスレッドプロセッサ10では、前述したスレッド時間管理カウンタ17を用い、アクセス対象の外部資源のクロックに同期してスレッドの動作を管理する。これにより各スレッドが並列して実行され、メモリバス21やI/Oバス23などのシステムバスへのアクセスの競合が想定されるパターンでのスレッド動作を行う。なお、バスアクセスにおけるスレッドの優先度は、第1のスレッド>第2のスレッドとする。
第1のスレッドは、バスアクセスを要求後に一定時間を経過するまで、バスアクセスが完了しても次処理を行わず待機する。第1のスレッドは、一度バスアクセスを要求しバスアクセスを開始した後は、一定時間次のバスアクセスを要求しない。この一定時間とは、第2のスレッドがバスアクセスを開始するまでの時間である。すなわち、本実施の形態では、第1のスレッドにかかるバスアクセスと、第2のスレッドにかかるバスアクセスとの競合が、1回発生することを見込んでいる。
最初に、第1のスレッドにかかるアクセス要求と、第2のスレッドにかかるアクセス要求が競合する。ここで、優先度が高い第1のスレッドにかかるバスアクセスが実行される。第2のスレッドにかかるアクセス要求は保留される。その後、第1のスレッドにかかるバスアクセスが終了する。
ここで、第2のスレッドにかかるバスアクセスが開始されるまで、第1のスレッドでは次処理を行わないよう、スレッド動作を停止する。その後、第2のスレッドにかかるバスアクセスが開始する。第2のスレッドにかかるバスアクセスの開始後に、第1のスレッドの動作を開始する。
これにより、第1のスレッドにかかるアクセス要求は、第2のスレッドにかかるバスアクセスの開始後となる。このとき、すでに開始している第2のスレッドにかかるバスアクセスは、第1のスレッドにかかるアクセス要求により割り込まれない。そのため、第1のスレッドにかかるバスアクセスが繰り返し実行されることによって、第2のスレッドのバスアクセスが保留され続けることはない。
(変形例1)
マルチスレッドプロセッサ10は、3つのスレッドを切り替えて実行するマルチスレッドプロセッサとする。マルチスレッドプロセッサ10では、前述したスレッド時間管理カウンタ17を用い、アクセス対象の外部資源のクロックに同期してスレッドの動作を管理する。これにより各スレッドが並列して実行され、システムバスへのバスアクセスの競合が想定されるパターンでのスレッド動作を行う。なお、バスアクセスにおけるスレッドの優先度は、第1のスレッド>第2のスレッド>第3のスレッドとする。
第1のスレッドは、バスへのアクセス要求後に一定時間を経過するまで、アクセスが完了しても次処理を行わず待機する。また第1のスレッドは、バスへのアクセスを要求後、一定時間、次のアクセスを要求しない。この一定時間とは、少なくとも第1のスレッド以外のスレッドのそれぞれが、バスアクセスを開始するまでの時間である。本変形例では、各スレッドによるバスアクセス時に、互いに他スレッドとの競合が1回ずつ発生することを見込んでいる。
最初に、第1のスレッドにかかるアクセス要求と、第1のスレッド以外のスレッドにかかるアクセス要求が競合する。ここで、優先度が高い第1のスレッドにかかるバスアクセスが実行される。第1のスレッド以外のアクセス要求は保留される。その後、第1のスレッドにかかるバスアクセスが終了する。
ここで、第1のスレッドでは次処理を行わないよう、スレッド動作を停止する。その後、保留されていたアクセス要求の優先度が比較される。すなわち、第2のスレッドと第3のスレッドの優先度が比較され、優先度の高い第2のスレッドのバスアクセスが実行される。第3のスレッドのアクセス要求は保留される。その後、第2のスレッドにかかるバスアクセスが終了する。
ここで、第2のスレッドでは次処理を行わないよう、スレッド動作を停止する。その後、第3のスレッドにかかるバスアクセスが開始する。マルチスレッドプロセッサ10の有するスレッド数は3であり、第3のスレッドの開始により、それぞれのスレッドが、バスへのアクセスを一度ずつ開始した状態となる。第1のスレッド及び第2のスレッドは、第3のスレッドにかかるバスアクセスの開始後に次処理を開始する。
このとき、すでに開始している第3のスレッドにかかるバスアクセスは、第1のスレッド及び第2のスレッドにかかるアクセス要求により割り込まれない。そのため、第1のスレッド及び第2のスレッドにかかるバスアクセスが繰り返し実行されることによって、第3のスレッドのバスアクセスが保留され続けることはない。すなわち、各スレッドが最悪でも順次1回ずつのバスアクセスを行うことが可能となる。そのため、特定スレッドが延々とバスアクセス権を待つことがなく、最大処理時間を想定することが可能となる。
(変形例2)
マルチスレッドプロセッサ10は、3つのスレッドを切り替えて実行するマルチスレッドプロセッサとする。第1のスレッドは、バスアクセスを要求後に一定時間を経過するまで、バスアクセスが完了しても次処理を行わず待機する。また第1のスレッドは、バスアクセスを要求後、一定時間、次のバスアクセスを要求しない。この一定時間とは、少なくとも他のスレッドが各1回ずつのバスアクセスを行うことが可能な時間である。すなわち、1回のバスアクセス時間を(1回のバスアクセス時間×競合しうるスレッド数)と規定し、この規定時間が経過するまでは次のバスアクセスを行わずに他スレッドのためにバスを空けておく。
本変形例の動作の概略を図3に示す。なお、プロセッサ10は3つのスレッド(スレッドA、スレッドB、スレッドC)が並行して動作するものとする。ここでスレッドAを第1のスレッド、スレッドBを第2のスレッド、スレッドCを第3のスレッドとする。スレッドの優先度は、第1のスレッド>第2のスレッド>第3のスレッドとする。
まず、規定時間L1〜L4を設定する。競合を発生しうるスレッドが1回ずつ共有資源をアクセスする時間の合計(1回のバスアクセス時間×競合しうるスレッド数)=L1=L2=L3=L4とする。
時刻T1において、第1のスレッドがメモリリード要求(Q1)を発行し、バスアクセス(Q1)が開始される。時刻T2において、第2のスレッドがメモリリード要求(Q2)を発行するが保留される。時刻T3において、第3のスレッドがメモリリード要求(Q3)を発行するが保留される。
時刻T4において、バスアクセス(Q1)が終了し、保留されている要求(Q2)と((Q3)のうち、優先度が高いバスアクセス(Q2)が開始される。
ここで、バスアクセス(Q1)が終了した第1のスレッドは、規定時間L1経過まで次の処理を行わない。次のバスアクセス(Q4)を要求することも無いため、保留されている要求(Q2)および(Q3)との競合を発生させない。
時刻T5において、バスアクセス(Q2)が終了するが、規定時間L2経過まで次処理を行わない。時刻T6において、バスアクセス(Q3)が終了するが、規定時間L3経過まで次処理を行わない。
ここで、時刻T6は、第1のスレッドの規定時間L1完了時刻である。以後、第1のスレッドは動作を再開する。時刻T7は、第2のスレッドの規定時間L2完了時刻である。以後、第2のスレッドは動作を再開する。時刻T8は、第3のスレッドの規定時間L3完了時刻である。以後、第3のスレッドは動作を再開する。
時刻T9において、動作を再開した第1のスレッドがバスアクセス(Q4)を要求し、バスアクセスがT10に終了する。ここでは第2のスレッドや第3のスレッドは別処理を行っており第1のスレッドとの競合を発生させることは無いが、第1のスレッドは規定時間L4を経過するまで、L1期間、L2期間、L3期間と同様に、次処理を行わない。
時刻T11において、規定時間L4が終了し、第1のスレッドが処理を再開する。
さらに詳細な動作例を図4に示す。なおマルチスレッドプロセッサ10は、2つのスレッド(スレッドA、スレッドB)が並行して動作しているものとして説明する。ここでスレッドAを第1のスレッド、スレッドBを第2のスレッドとする。
時刻T1において、第1のスレッドのメモリリード要求(Q1)の発行に伴い、カウント源切り替え信号300およびカウンタ100に対する設定を行う。カウンタ100の設定は以下のように行う。
本例でのアクセス対象として、バス動作クロック60に同期してアクセスを行うメモリを例とする。この場合、カウント源切り替え信号300としてバス動作クロック60を選択する。またカウンタ100に、1回のバスアクセス時間(本例では9クロック)に競合しうるスレッド数(本例では2)を乗じた、18を設定する。
カウンタ100は、時刻T2において、第1のスレッドを停止させるためのスレッド停止要求信号400をアクティブ状態にして出力する。アクティブ状態のスレッド停止要求信号400を受信したスレッド一時停止器28は、第1のスレッドを停止する制御信号を生成する。ディスパッチユニット12は、該制御信号に基づき、第1のスレッドに実行権を与えないよう動作する。
以後、カウンタ100は、カウント源切り替え信号300に従いバス動作クロック60に同期してデクリメントされる。カウンタ100は、カウンタ100の値がゼロになるまで、スレッド停止要求信号400をアクティブ状態の出力を継続する。
また、時刻T2では、他のバスアクセスは行われていないため、第1のスレッドがバスアクセス権を獲得しバスアクセス(Q1)が開始される。
時刻T3において、第2のスレッドのメモリリード要求(Q2)の発行に伴い、時刻T1での動作と同様に、カウント源切り替え信号301およびカウンタ101が設定される。
ここでアクセス要求(Q2)は、アクセス要求(Q1)と同一資源に対するアクセス要求である。したがって、カウント源切り替え信号301及びカウンタ101の設定内容は、カウント源切り替え信号300及びカウンタ100と同様である。ただし既にバスアクセス(Q1)が実行中のため、アクセス要求(Q2)はアクセス権獲得まで保留される。
時刻T4において、時刻T2での動作と同様に、カウンタ101はスレッド停止要求信号401をアクティブ状態にして出力する。アクティブ状態のスレッド停止要求信号401を受信したスレッド一時停止器28は、第2のスレッドを停止する制御信号を生成する。ディスパッチユニット12は、該制御信号に基づき、第2のスレッドに実行権を与えないよう動作する。
以後、カウンタ101は、カウント源切り替え信号301に従いバス動作クロック60に同期してデクリメントされる。カウンタ101は、カウンタ101の値がゼロになるまで、スレッド停止要求信号401をアクティブ状態の出力を継続する。
また、時刻T4において、既にシステムバスがバスアクセス(Q1)で占有されているため、バスアクセス(Q2)はバスアクセス(Q1)が終了するまで保留される。
時刻T5において、バスアクセス(Q1)が完了し、結果が第1のスレッドに返却される。ただし、スレッド停止要求信号400がアクティブ状態のため、第1のスレッドは停止状態を継続する。
時刻T6において、第2のスレッドがアクセス権を獲得し、バスアクセス(Q2)が開始される。時刻T7において、第2のスレッドによるバスアクセスが終了する。ただし、スレッド停止要求信号401がアクティブ状態のため、第2のスレッドは停止状態を継続する。
時刻T8において、カウンタ100のカウントが満了し、スレッド停止要求信号400が非アクティブ状態となる。これにより、スレッド一時停止器28は第1のスレッドを停止させる制御を解除し、ディスパッチユニット12は第1のスレッドに実行権を適宜与えるよう動作する。
時刻T9において、時刻T8と同様にカウンタ101のカウントが満了し、スレッド停止要求信号401が非アクティブ状態となる。これにより、スレッド一時停止器28は第2のスレッドを停止させる制御を解除し、ディスパッチユニット12は第2のスレッドに実行権を適宜与えるよう動作する。これにより、共有バスアクセス時に、先にバスアクセス権を獲得した第1のスレッドが先に処理を進めることも無く、カウンタ100及び101に設定した同一の時間で2つのスレッドのバスアクセスを終了することができる。
上記ではシステムバスに接続されバス動作クロック60で動作するメモリの場合を例としたが、プロセッサ10構成によっては、プロセッサ全体クロック50やスレッド動作クロック700〜703に同期して動作するユニットであっても、カウント源切り替え信号300〜303を適切に設定することで、同様の動作が可能である。
この結果、各スレッドは連続してバスアクセスを行うことがなくなり、最悪でも順次1回ずつのバスアクセスを行うことが可能となる。したがって、特定スレッドが延々とバスアクセス権を待つことがなく、最大処理時間を想定することが可能となる。また、先にバスアクセスを終えたスレッドも、想定した時間が経過するまで以後の処理を行わないため、最小処理時間を明確化できる。
ここで、各スレッドにおける以後の処理を行わないためのウェイト処理を、スレッド停止によって実行するため、さらなる競合を引き起こさない。もし本発明を適用せず、ウェイト処理をループ処理などで実現した場合には、命令実行のためにメモリからの命令フェッチなどを発生させるため、さらなる競合要因となることが予想される。また、バスを空けておくことで本動作を実現するため、実際に競合が起きなくとも動作時間は変化しない。すなわち、各スレッドに搭載するソフトウェアをモジュール単位で開発している時点から動作時間の想定および実測が可能となる。この結果、本発明適用前に比べてバスアクセス時の時間(Typ.)が悪化するという弊害はあるが、時間(Min/Max)をモジュール開発時点から明確化できる。
実施の形態2
複数の独立したプロセッサが外部資源を共有し、該複数のプロセッサがプログラムを実行している場合に、該複数のプロセッサからの外部資源のバスへのアクセス制御に本発明を適用した例について説明する。
プロセッサ29は、第1のプロセッサと、第2のプロセッサと、第3のプロセッサを備える。ここで典型的には、複数のプロセッサは複数のCPU(Central Processing Unit)コアとして実現される。典型的には、プロセッサ29はマルチコアプロセッサである。
第1のプロセッサは、第1のプロセッサがバスに対するアクセスを終了した後、一定時間を経過するまで、次処理を行わず待機する。
この一定時間は、プロセッサ29の備える複数のプロセッサの個数が2である場合に、第2のプロセッサがバスアクセスを開始するまでの時間とする。また一定時間は、プロセッサ29の備える複数のプロセッサの個数が3以上である場合に、第1のプロセッサ以外のプロセッサのそれぞれがアクセスを開始するまでとしても良い。また一定時間は、他のプロセッサが各1回ずつのバスアクセスを行うことが可能な時間としても良い。すなわち1回のバスアクセス時間を(1回のバスアクセス時間×競合しうるスレッド数)と規定しても良い。
本変形例では、1のプロセッサによるバスアクセス時に、互いに他プロセッサとの競合が1回ずつ発生することを見込んでいる。
このようにして、複数のプロセッサが独立してプログラムを実行し、1つのプロセッサとして動作するプロセッサにおいて、発明を適用することができる。その結果、特定のプロセッサによるバスアクセスが連続して発生せず、バスアクセスを占有することはない。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。前述した例ではシステムバスに接続されたメモリを例としたが、本発明はメモリに限らず、システムバスに接続されたI/Oなどであっても同様に適用可能である。
10 マルチスレッドプロセッサ
11 コンテキストブロック
12 ディスパッチユニット
13 メモリコントロールユニット
14 バスコントロールユニット
15 コプロセッサ
16 ALU
17 スレッド時間管理カウンタ
18 プロセッサ全体クロック発振器
19 RAM
20 ROM
21 メモリバス
22 I/O
23 I/Oバス
24 プログラムカウンタ
25 システムレジスタ
26 汎用レジスタ
27 スレッド動作クロック生成器
28 スレッド一時停止器
29 プロセッサ
30 マルチスレッドプロセッサ
31 ディスパッチユニット
100〜103 カウンタ
200〜203 カウント値制御信号
300〜303 カウント源切り替え信号
400〜403 スレッド停止要求信号
50 プロセッサ全体クロック
60 バス動作クロック
700〜703 該当スレッド動作クロック

Claims (12)

  1. 少なくとも第1及び第2のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置であって、
    前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、
    前記複数のプログラムの実行権を制御するディスパッチユニットを備え、
    前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第1のプログラムにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる前記第2のプログラムにかかるアクセスの開始後までの間、前記第1のプログラムの実行を停止させる、
    プロセッサ装置。
  2. 前記複数のプログラムは、第3のプログラムをさらに含み、
    前記ディスパッチユニットは、少なくとも前記第1のアクセスの開始から、前記第2のアクセスの終了後に引き続き行われる前記第3のプログラムにかかるアクセスの開始後までの間、前記第1のプログラムの実行を停止させる、
    請求項1に記載のプロセッサ装置。
  3. 前記ディスパッチユニットは、前記第1のアクセスの開始から、一定時間が経過するまで前記第1のプログラムの実行を停止させる、
    請求項1又は請求項2に記載のプロセッサ装置。
  4. 前記ディスパッチユニットがプログラムの実行を停止するよう制御するプログラム一時停止器と、
    前記プログラム一時停止器がプログラムを停止させる期間をカウントするプログラム時間管理カウンタと、をさらに備える、
    請求項1乃至請求項3のいずれか一項に記載のプロセッサ装置。
  5. 前記時間管理カウンタは、前記第1のプログラムが外部資源に対しアクセスを行う場合に、他のそれぞれのプログラムとのアクセス要求が1回ずつ競合することを見込んだ時間を設定し、
    前記ディスパッチユニットは、前記時間管理カウンタに設定された時間の満了まで前記第1のプログラムの実行を停止させる、
    請求項4に記載のプロセッサ装置。
  6. 少なくとも第1及び第2のプロセッサを備えるプロセッサ装置であって、
    前記プロセッサ装置は、少なくとも前記第1のプロセッサにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる第2のプロセッサの前記外部資源との第2のアクセスの開始後までの間、前記第1のプロセッサの実行を停止させる、
    プロセッサ装置。
  7. 少なくとも第1及び第2のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置の制御方法であって、
    プロセッサ装置は、
    前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、
    前記複数のプログラムの実行権を制御するディスパッチユニットを備え、
    前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第1のプログラムにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる前記第2のプログラムにかかるアクセスの開始後までの間、前記第1のプログラムの実行を停止させる、
    プロセッサ装置の制御方法。
  8. 前記複数のプログラムは、第3のプログラムをさらに含み、
    前記ディスパッチユニットは、少なくとも前記第1のアクセスの開始から、前記第2のアクセスの終了後に引き続き行われる前記第3のプログラムにかかるアクセスの開始後までの間、前記第1のプログラムの実行を停止させる、
    請求項7に記載のプロセッサ装置の制御方法。
  9. 前記ディスパッチユニットは、前記第1のアクセスの開始から、一定時間が経過するまで前記第1のプログラムの実行を停止させる、
    請求項7又は請求項8に記載のプロセッサ装置の制御方法。
  10. 前記プロセッサ装置は、
    プログラム一時停止器と、
    プログラム時間管理カウンタと、をさらに備え、
    前記プログラム一時停止器は、前記ディスパッチユニットがプログラムの実行を停止するよう制御し、
    前記プログラム時間管理カウンタは、プログラムを停止させる期間をカウントする、
    請求項7乃至請求項9のいずれか一項に記載のプロセッサ装置の制御方法。
  11. 前記時間管理カウンタは、前記第1のプログラムが外部資源に対しアクセスを行う場合に、他のそれぞれのプログラムとのアクセス要求が1回ずつ競合することを見込んだ時間を設定し、
    前記ディスパッチユニットは、前記時間管理カウンタに設定された時間の満了まで前記第1のプログラムの実行を停止させる、
    請求項10に記載のプロセッサ装置の制御方法。
  12. 少なくとも第1及び第2のプロセッサを備えるプロセッサ装置の制御方法であって、
    前記プロセッサ装置は、少なくとも前記第1のプロセッサにかかる外部資源との第1のアクセスの開始から、前記第1のアクセスの終了後に引き続き行われる第2のプロセッサの前記外部資源との第2のアクセスの開始後までの間、前記第1のプロセッサの実行を停止させる、
    プロセッサ装置の制御方法。
JP2010118467A 2010-05-24 2010-05-24 プロセッサ装置及びプロセッサ装置の制御方法 Pending JP2011248454A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010118467A JP2011248454A (ja) 2010-05-24 2010-05-24 プロセッサ装置及びプロセッサ装置の制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010118467A JP2011248454A (ja) 2010-05-24 2010-05-24 プロセッサ装置及びプロセッサ装置の制御方法

Publications (1)

Publication Number Publication Date
JP2011248454A true JP2011248454A (ja) 2011-12-08

Family

ID=45413673

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010118467A Pending JP2011248454A (ja) 2010-05-24 2010-05-24 プロセッサ装置及びプロセッサ装置の制御方法

Country Status (1)

Country Link
JP (1) JP2011248454A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014203181A (ja) * 2013-04-03 2014-10-27 三菱電機株式会社 障害診断装置およびプログラム
CN109697128A (zh) * 2018-12-19 2019-04-30 北京爱奇艺科技有限公司 一种线程维护方法、装置及电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014203181A (ja) * 2013-04-03 2014-10-27 三菱電機株式会社 障害診断装置およびプログラム
CN109697128A (zh) * 2018-12-19 2019-04-30 北京爱奇艺科技有限公司 一种线程维护方法、装置及电子设备

Similar Documents

Publication Publication Date Title
US6542921B1 (en) Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US9069605B2 (en) Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
KR101100470B1 (ko) 멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한장치 및 방법
JP6294586B2 (ja) 命令スレッドを組み合わせた実行の管理システムおよび管理方法
KR101486025B1 (ko) 프로세서에서의 쓰레드 스케쥴링
JP5411587B2 (ja) マルチスレッド実行装置、マルチスレッド実行方法
US8516483B2 (en) Transparent support for operating system services for a sequestered sequencer
JP2005284749A (ja) 並列処理コンピュータ
JP2009093665A (ja) マルチスレッド・プロセッサ性能を制御する装置及び方法
TWI489266B (zh) 指定應用程式執行緒的效能狀態之指令
JP2006351008A (ja) マルチスレッドプロセッサのディスパッチ時にスレッドをブロックする方法、コンピュータプログラム、および装置(精細なマルチスレッドディスパッチロックメカニズム)
KR20120070303A (ko) 실시간 멀티코어 시스템의 동기화 스케쥴링 장치 및 방법
EP3028143A1 (en) System and method for an asynchronous processor with multiple threading
EP2666087A1 (en) Multiprocessor system
JP2007004382A (ja) マルチプロセッサシステム
JP2004326765A (ja) マルチスレッド・プロセッサにおいて処理する命令スレッドを選択するための方法および装置
CN116414541B (zh) 兼容多种任务工作模式的任务执行方法和装置
US8782293B1 (en) Intra-processor operation control
JP2011248454A (ja) プロセッサ装置及びプロセッサ装置の制御方法
US20150074378A1 (en) System and Method for an Asynchronous Processor with Heterogeneous Processors
JP2008217623A (ja) データプロセッサ
US20230305872A1 (en) Efficient central processing unit overcommit for virtual machines with symmetric multi-processing
US11288095B2 (en) Enhanced atomics for workgroup synchronization
US20240231867A9 (en) Paravirtual pause loops in guest user space
Woo et al. Catnap: A Backoff Scheme for Kernel Spinlocks in Many-Core Systems