JP2015064861A - マルチスレッドプロセッサ - Google Patents

マルチスレッドプロセッサ Download PDF

Info

Publication number
JP2015064861A
JP2015064861A JP2014104400A JP2014104400A JP2015064861A JP 2015064861 A JP2015064861 A JP 2015064861A JP 2014104400 A JP2014104400 A JP 2014104400A JP 2014104400 A JP2014104400 A JP 2014104400A JP 2015064861 A JP2015064861 A JP 2015064861A
Authority
JP
Japan
Prior art keywords
thread
priority
threads
execution
executed
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
JP2014104400A
Other languages
English (en)
Inventor
代涵 王
Daihan Wang
代涵 王
山田 健二
Kenji Yamada
健二 山田
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
Original Assignee
Denso 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 filed Critical Denso Corp
Priority to JP2014104400A priority Critical patent/JP2015064861A/ja
Publication of JP2015064861A publication Critical patent/JP2015064861A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】スループットの低下を抑制するとともに、スレッドの応答時間を保証できなくなる事態の発生を抑制【解決手段】マルチスレッドプロセッサ1では、実行状態フラグ群3が、スレッドT1〜3が実行中であるか否かを示すスレッド実行情報を記憶し、優先フラグ群4が、スレッドT1〜3が優先であるか否かを示すスレッド優先情報を記憶する。実行方式選択部5は、スレッド実行情報とスレッド優先情報に基づき、クロックサイクル単位でスレッドT1〜3の中から1つのスレッドを順次選択して切り替えるラウンドロビン方式、および、優先スレッドでストールが発生するまでは優先スレッドを優先して実行し、優先スレッドでストールが発生したときに、非優先スレッドに切り替える優先方式の何れかを選択する。スレッド選択部6は、実行方式選択部5が選択した方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。【選択図】図1

Description

本発明は、複数のスレッドを並列に実行可能なマルチスレッドプロセッサに関する。
従来、複数のスレッドをパイプラインで並列に実行可能なマルチスレッドプロセッサにおいて、クロックサイクル毎に、予め設定された切替順序に基づいて順番に複数のスレッドを切り替えることで、複数のスレッドの実行サイクルを均等に割り当てるラウンドロビン方式が知られている(例えば、特許文献1を参照)。
またマルチスレッドプロセッサにおいて、優先スレッドでストールが発生するまでは優先スレッドの命令を優先して実行し、優先スレッドでストールが発生したときに非優先スレッドに切り替える優先方式が知られている(例えば、特許文献2を参照)。
特表2010−528384号公報 特開2011−28440号公報
しかし、上記のラウンドロビン方式では、複数のスレッドに対して実行サイクルを均等に割り当てているため、実行中のスレッドが少ない場合には、マルチスレッドプロセッサのスループットが低下するおそれがある。
また、上記の優先方式では、優先スレッドが複数になると、全ての優先スレッドの応答時間を保証できなくなる事態の発生が懸念される。
本発明は、こうした問題に鑑みてなされたものであり、スループットの低下を抑制するとともに、スレッドの応答時間を保証できなくなる事態の発生を抑制することを目的とする。
上記目的を達成するためになされた第1発明は、複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサであって、実行情報記憶手段と優先情報記憶手段と第1方式選択手段と第1スレッド選択手段とを備える。
そして第1発明のマルチスレッドプロセッサでは、実行情報記憶手段が、複数のスレッド毎にスレッドが実行中であるか否かを示すスレッド実行情報を記憶する。また優先情報記憶手段が、複数のスレッド毎にスレッドが優先であるか否かを示すスレッド優先情報を記憶する。
そして第1方式選択手段が、スレッド実行情報とスレッド優先情報に基づいて、クロックサイクル単位で複数のスレッドの中から1つのスレッドを順次選択して切り替えるラウンドロビン方式、および、優先に設定されたスレッドである優先スレッドでストールが発生するまでは優先スレッドを優先して実行し、優先スレッドでストールが発生したときに、優先に設定されていないスレッドである非優先スレッドに切り替える優先方式の何れかを選択する。
さらに第1スレッド選択手段が、ラウンドロビン方式および優先方式のうち、第1方式選択手段が選択した方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
このように構成された第1発明のマルチスレッドプロセッサは、上記スレッド実行情報と上記スレッド優先情報とを用いてラウンドロビン方式および優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
このため、第1発明のマルチスレッドプロセッサによれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に優先方式に切り替えることが可能となる。そして、優先方式に切り替えることにより、実行中のスレッドのうち、優先に設定されているスレッド(優先スレッド)が優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。
また、第1発明のマルチスレッドプロセッサによれば、優先方式を選択中に優先スレッドが複数になった場合にラウンドロビン方式に切り替えることが可能となる。そして、ラウンドロビン方式に切り替えることにより、優先に設定されているか否かに関係なく複数のスレッドが均等に実行される。このため、優先スレッドが複数になることに起因して全ての優先スレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
また、上記目的を達成するためになされた第2発明は、複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサであって、実行情報記憶手段と優先度情報記憶手段と第2方式選択手段と第2スレッド選択手段とを備える。
そして第2発明のマルチスレッドプロセッサでは、実行情報記憶手段が、複数のスレッド毎にスレッドが実行中であるか否かを示すスレッド実行情報を記憶する。また優先度情報記憶手段が、複数のスレッド毎にスレッドの優先度を示すスレッド優先度情報を記憶する。
そして第2方式選択手段が、スレッド実行情報とスレッド優先度情報に基づいて、ラウンドロビン方式、第1優先方式および第2優先方式の何れかを選択する。ラウンドロビン方式は、クロックサイクル単位で複数のスレッドの中から1つのスレッドを順次選択して切り替える方式である。第1優先方式は、第1優先度に設定されたスレッドである第1優先スレッドでストールが発生するまでは第1優先スレッドを優先して実行し、第1優先スレッドでストールが発生したときに、第1優先度に設定されていないスレッドである非第1優先スレッドに切り替える方式である。第2優先方式は、少なくとも予め設定された第1優先実行期間と予め設定され第2優先実行期間とを切り替えることが可能であり、第1優先実行期間内において第1優先スレッドを実行し、第2優先実行期間内において、第1優先度より優先度が低い第2優先度に設定されたスレッドである第2優先スレッドを実行する方式である。
さらに第2スレッド選択手段が、ラウンドロビン方式、第1優先方式および第2優先方式のうち、第2方式選択手段が選択した方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
このように構成された第2発明のマルチスレッドプロセッサは、上記スレッド実行情報と上記スレッド優先度情報とを用いて、ラウンドロビン方式、第1優先方式および第2優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
このため、第2発明のマルチスレッドプロセッサによれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に第1優先方式または第2優先方式に切り替えることが可能となる。そして、第1優先方式に切り替えることにより、実行中のスレッドのうち、第1優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。また、第2優先方式に切り替えることにより、第1優先スレッドまたは第2優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。さらに第2優先方式では、第1優先スレッドを実行するための第1優先実行期間と第2優先スレッドを実行するための第2優先実行期間とが設けられている。このため、第1優先方式と異なり、第1優先スレッドでストールが発生しないことに起因して、第2優先スレッドを実行するための時間を確保できないという事態の発生を回避することができる。
また、第2発明のマルチスレッドプロセッサによれば、ラウンドロビン方式に切り替えることにより、優先度の高低に関係なく複数のスレッドが均等に実行される。このため、優先度が高いスレッドの実行に起因して優先度が低いスレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
マルチスレッドプロセッサ1の構成を示すブロック図である。 ラウンドロビン方式と優先方式を用いたパイプラインの構成を説明する図である。 スレッド状態の遷移を示す図である。 実行方式選択部5の構成を示す回路図である。 第1実施形態の実行方式選択処理の手順を示すフローチャートである。 別の実施形態におけるスレッド状態の遷移を示す図である。 マルチスレッドプロセッサ101の構成を示すブロック図である。 中優先方式を用いたパイプラインの構成を説明する図である。 周期管理部109の構成を示すブロック図である。 第2実施形態の実行方式選択処理の手順を示すフローチャートである。
(第1実施形態)
以下に本発明の第1実施形態を図面とともに説明する。
本実施形態のマルチスレッドプロセッサ1は、3つのスレッドT1,T2,T3を並列に実行することが可能に構成されており、図1に示すように、プログラムカウンタ群2、実行状態フラグ群3、優先フラグ群4、実行方式選択部5、スレッド選択部6、命令フェッチ部7および命令実行部8を備える。
プログラムカウンタ群2は、プログラムカウンタ21,22,23により構成されている。プログラムカウンタは、スレッドの命令を記憶するメモリ(不図示)上において、次に実行すべきスレッドの命令が格納されているアドレスを記憶するためのものである。そしてプログラムカウンタ21,22,23はそれぞれ、スレッドT1,T2,T3に対応している。
実行状態フラグ群3は、実行状態フラグ31,32,33により構成されている。実行状態フラグは、スレッドが実行中であるか否かを示すためのものである。実行状態フラグが1に設定されているときは、スレッドが実行中であることを示している。また実行状態フラグが0に設定されているときは、スレッドが停止中であることを示している。そして実行状態フラグ31,32,33はそれぞれ、スレッドT1,T2,T3に対応している。
なお実行状態フラグの設定は、ソフトウエアにより行われる。そして実行状態フラグは、スレッドを生成したとき又はスレッドを再開したときに1に設定される。また実行状態フラグは、スレッドを完了したときに0に設定される。また実行状態フラグは、ハードウエアのイベント待ち又はOSによる優先順位切り替えによりスレッドを待機させたときに0に設定される。
優先フラグ群4は、優先フラグ41,42,43により構成されている。優先フラグは、スレッドが優先であるか非優先であるかを示すためのものである。優先フラグは、スレッドが優先である場合には1に設定され、スレッドが非優先である場合には0に設定される。そして優先フラグ41,42,43はそれぞれ、スレッドT1,T2,T3に対応している。
なお、スレッドの命令を記憶するメモリ(不図示)上には、スレッド毎に優先と非優先が予め設定された優先設定表が設けられている。スレッドが生成されると、対応する生成スレッドが優先であるか非優先であるかを示す情報が優先設定表に書き込まれる。その後、ソフトウエアによって、優先設定表が参照され、生成されたスレッドに対応する優先フラグの設定が行われる。
実行方式選択部5は、実行状態フラグ群3と優先フラグ群4に基づいて、スレッドの実行方式として、ラウンドロビン方式(詳細は後述)および優先方式(詳細は後述)の何れかを選択する。
スレッド選択部6は、実行方式選択部5で選択された実行方式を用いて、スレッドT1,T2,T3の中から、実行するスレッドを選択し、選択したスレッドに対応するプログラムカウンタの値を命令フェッチ部7へ出力する。
命令フェッチ部7は、スレッドの命令を記憶する上記メモリ(不図示)から、スレッド選択部6から入力した値が示すアドレスに記憶されている命令を読み込み、読み込んだ命令を命令実行部8へ出力する。
なお、マルチスレッドプロセッサ1で用いられる命令は、オペコードとオペランドとスレッド切替フラグを含んでいる。そして命令フェッチ部7は、読み込んだ命令のスレッド切替フラグが1に設定されている場合に、スレッド切替要求をスレッド選択部6へ出力する。スレッド切替フラグは、このスレッド切替フラグを含んでいる命令の実行後にスレッドがストールする場合において1になるように予め設定されている。
命令実行部8は、命令フェッチ部7から入力した命令を実行する。
次に、ラウンドロビン方式と優先方式を用いたパイプラインの構成を説明する。
図2(a),(b)に示すように、スレッドは、命令フェッチ(図のIFを参照)、命令デコード(図のDEを参照)、命令実行(図のEXを参照)、メモリアクセス(図のMAを参照)およびライトバック(図のWBを参照)を順次実行するように設定されている。
まずラウンドロビン方式では、図2(a)に示すように、スレッド選択部6は、クロックサイクル(図中のCC1,CC2,CC3,CC4,CC5を参照)が経過する毎に、スレッドT1、スレッドT2、スレッドT3の順にスレッドを選択して実行させる。
図2(a)に示す具体例では、まず、第1クロックサイクルCC1で、スレッドT1が選択されることにより、スレッドT1の命令フェッチが実行される。次の第2クロックサイクルCC2で、スレッドT2が選択されることにより、スレッドT1の命令デコードと、スレッドT2の命令フェッチが実行される。次の第3クロックサイクルCC3で、スレッドT3が選択されることにより、スレッドT1の命令実行と、スレッドT2の命令デコードと、スレッドT3の命令フェッチが実行される。次の第4クロックサイクルCC4で、スレッドT1が選択されることにより、スレッドT1のメモリアクセスと、スレッドT2の命令実行と、スレッドT3の命令デコードと、スレッドT1の命令フェッチが実行される。
次に優先方式では、図2(b)に示すように、スレッド選択部6は、優先に設定されているスレッドを、非優先に設定されているスレッドよりも優先して実行させる。但しスレッド選択部6は、優先に設定されているスレッド(以下、優先スレッドともいう)における命令のスレッド切替フラグが1に設定されている場合(すなわち、優先スレッドを選択中に、命令フェッチ部7からスレッド切替要求を入力した場合)に、非優先に設定されているスレッド(以下、非優先スレッドともいう)を、予め設定された非優先選択条件に基づいて選択して実行させる。またスレッド選択部6は、非優先スレッドにおける命令のスレッド切替フラグが1に設定されている場合(すなわち、非優先スレッドを選択中に、命令フェッチ部7からスレッド切替要求を入力した場合)に、優先スレッドを選択して実行させる。
図2(b)に示す具体例では、スレッドT1が優先に設定され、スレッドT2,T3が非優先に設定されている。また上記の非優先選択条件は、スレッドT2、スレッドT3の順で順次選択することである。
このため、図2(b)に示す具体例では、まず、第1クロックサイクルCC1で、優先に設定されているスレッドT1が選択されることにより、スレッドT1の命令フェッチが実行される。このときに、スレッドT1について読み込んだ命令のスレッド切替フラグが1に設定されているとすると、次の第2クロックサイクルCC2で、非優先に設定されているスレッドT2が選択される。
これにより、スレッドT1の命令デコードと、スレッドT2の命令フェッチが実行される。このときに、スレッドT2について読み込んだ命令のスレッド切替フラグが1に設定されているとすると、次の第3クロックサイクルCC3で、優先に設定されているスレッドT1が選択される。これにより、スレッドT1の命令実行と、スレッドT2の命令デコードと、スレッドT1の命令フェッチが実行される。
このときに、スレッドT1について読み込んだ命令のスレッド切替フラグが1に設定されているとすると、次の第4クロックサイクルCC4で、非優先に設定されているスレッドT3が選択される。これにより、スレッドT1のメモリアクセスと、スレッドT2の命令実行と、スレッドT1の命令デコードと、スレッドT3の命令フェッチが実行される。
このときに、スレッドT3について読み込んだ命令のスレッド切替フラグが1に設定されているとすると、次の第5クロックサイクルCC5で、優先に設定されているスレッドT1が選択されることにより、スレッドT1の命令フェッチが実行される。これにより、スレッドT1のライトバックと、スレッドT2のメモリアクセスと、スレッドT1の命令実行と、スレッドT3の命令デコードと、スレッドT1の命令フェッチが実行される。
スレッドT1、スレッドT2およびスレッドT3は、図3に示すように、実行状態と停止状態との間で、スレッド状態が遷移する(図3の矢印AL1,AL2を参照)。そして実行方式選択部5は、スレッドT1、スレッドT2およびスレッドT3のそれぞれについて、実行状態から停止状態へ遷移する場合(すなわち、スレッドを終了する場合)、および停止状態から実行状態へ遷移する場合(すなわち、スレッドを開始する場合)に、実行方式の選択を行う。
実行方式選択部5は、図4に示すように、実行状態フラグ判断部51と優先フラグ判断部52と論理積回路53を備える。
実行状態フラグ判断部51は、入力端子61,62,63と論理積回路64,65,66と論理和回路67を備える。
入力端子61,62,63はそれぞれ、実行状態フラグ31,32,33の値を入力する。論理積回路64は、入力端子61から入力した値と、入力端子63から入力した値との論理積演算を行う。論理積回路65は、入力端子61から入力した値と、入力端子62から入力した値との論理積演算を行う。論理積回路66は、入力端子62から入力した値と、入力端子63から入力した値との論理積演算を行う。論理和回路67は、論理積回路64,65,66のそれぞれから出力される値を入力し、入力した値の論理和演算を行う。
このように構成された実行状態フラグ判断部51は、実行状態フラグ31,32,33のうち少なくとも2つの値が1である場合に1を出力する。
優先フラグ判断部52は、入力端子71,72,73と論理積回路74,75,76,77と論理和回路78を備える。入力端子71,72,73はそれぞれ、優先フラグ41,42,43の値を入力する。論理積回路74は、入力端子71から入力した値と、入力端子73から入力した値との論理積演算を行う。論理積回路75は、入力端子71から入力した値と、入力端子72から入力した値との論理積演算を行う。論理積回路76は、入力端子72から入力した値と、入力端子73から入力した値との論理積演算を行う。論理積回路77は、入力端子71,72,73からの値を反転した値を入力し、入力した値の論理積演算を行う。論理和回路78は、論理積回路74,75,76,77のそれぞれから出力される値を入力し、入力した値の論理和演算を行う。
このように構成された優先フラグ判断部52は、優先フラグ41,42,43のうち少なくとも2つの値が1である場合、または、優先フラグ41,42,43の全ての値が0である場合に1を出力する。
論理積回路53は、論理和回路67,78のそれぞれから出力される値を入力し、入力した値の論理積演算を行う。
そして実行方式選択部5は、論理積回路53から出力される値が1である場合にラウンドロビン方式を選択し、値が0である場合に優先方式を選択する。
したがって実行方式選択部5は、図5に示す手順で、実行方式を選択する処理(以下、実行方式選択処理ともいう)を実行する。
まず、実行状態と停止状態との間でスレッド状態が遷移すると実行方式選択処理が開始され、まずS10にて、実行状態であるスレッドの数が1より大きいか否かを判断する。ここで、実行状態であるスレッドの数が1より大きい場合には(S10:YES)、S20にて、優先に設定されているスレッドの数が0であるか否か、または、優先に設定されているスレッドの数が1より大きいか否かを判断する。ここで、優先に設定されているスレッドの数が0であるか1より大きい場合には(S20:YES)、S30にて、ラウンドロビン方式を選択し、実行方式選択処理を終了する。
一方、S20にて、優先に設定されているスレッドの数が1である場合には(S20:NO)、S40にて、優先方式を選択し、実行方式選択処理を終了する。またS10にて、実行状態であるスレッドの数が1以下である場合には(S10:NO)、S40にて、優先方式を選択し、実行方式選択処理を終了する。
このように構成されたマルチスレッドプロセッサ1では、実行状態フラグ群3(実行状態フラグ31,32,33)が、スレッドT1,T2,T3毎にスレッドが実行中であるか否かを示す情報(以下、スレッド実行情報という)を記憶する。また優先フラグ群4(優先フラグ41,42,43)が、スレッドT1,T2,T3毎にスレッドが優先であるか否かを示す情報(以下、スレッド優先情報という)を記憶する。
そして実行方式選択部5が、スレッド実行情報とスレッド優先情報に基づいて、クロックサイクル単位でスレッドT1,T2,T3の中から1つのスレッドを順次選択して切り替えるラウンドロビン方式、および、優先に設定されたスレッドである優先スレッドでストールが発生するまでは優先スレッドを優先して実行し、優先スレッドでストールが発生したときに、優先に設定されていないスレッドである非優先スレッドに切り替える優先方式の何れかを選択する。
さらにスレッド選択部6は、ラウンドロビン方式および優先方式のうち、実行方式選択部5が選択した実行方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
このようにマルチスレッドプロセッサ1は、上記スレッド実行情報と上記スレッド優先情報とを用いてラウンドロビン方式および優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
このため、マルチスレッドプロセッサ1によれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に優先方式に切り替えることが可能となる。そして、優先方式に切り替えることにより、実行中のスレッドのうち、優先に設定されているスレッド(優先スレッド)が優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。
また、マルチスレッドプロセッサ1によれば、優先方式を選択中に優先スレッドが複数になった場合にラウンドロビン方式に切り替えることが可能となる。そして、ラウンドロビン方式に切り替えることにより、優先に設定されているか否かに関係なくスレッドT1,T2,T3が均等に実行される。このため、優先スレッドが複数になることに起因して全ての優先スレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
具体的に実行方式選択部5は、実行中のスレッドの数が1以下であること、または、優先スレッドの数が1であることを優先方式選択条件として、スレッド実行情報とスレッド優先情報に基づいて、優先方式選択条件が成立したと判断した場合に優先方式を選択し、優先方式選択条件が成立していないと判断した場合にラウンドロビン方式を選択する。
このため、マルチスレッドプロセッサ1は、ラウンドロビン方式を選択中において、実行中のスレッドの数が1以下である場合に優先方式に切り替える。これにより、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。またマルチスレッドプロセッサ1は、優先方式を選択中に優先スレッドの数が2以上になった場合にラウンドロビン方式に切り替える。これにより、優先スレッドが複数になることに起因して全ての優先スレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
以上説明した実施形態において、実行状態フラグ群3は本発明における実行情報記憶手段、優先フラグ群4は本発明における優先情報記憶手段、実行方式選択部5は本発明における第1方式選択手段、スレッド選択部6は本発明における第1スレッド選択手段である。
(第2実施形態)
以下に本発明の第2実施形態を図面とともに説明する。
本実施形態のマルチスレッドプロセッサ101は、3つのスレッドT1,T2,T3を並列に実行することが可能に構成されており、図7に示すように、プログラムカウンタ群102、実行状態フラグ群103、優先フラグ群104、実行方式選択部105、スレッド選択部106、命令フェッチ部107、命令実行部108および周期管理部109を備える。
プログラムカウンタ群102は、プログラムカウンタ121,122,123により構成されている。プログラムカウンタは、スレッドの命令を記憶するメモリ(不図示)上において、次に実行すべきスレッドの命令が格納されているアドレスを記憶するためのものである。そしてプログラムカウンタ121,122,123はそれぞれ、スレッドT1,T2,T3に対応している。
実行状態フラグ群103は、実行状態フラグ131,132,133により構成されている。実行状態フラグは、スレッドが実行中であるか否かを示すためのものである。実行状態フラグが1に設定されているときは、スレッドが実行中であることを示している。また実行状態フラグが0に設定されているときは、スレッドが停止中であることを示している。そして実行状態フラグ131,132,133はそれぞれ、スレッドT1,T2,T3に対応している。
なお実行状態フラグの設定は、ソフトウエアにより行われる。そして実行状態フラグは、スレッドを生成したとき又はスレッドを再開したときに1に設定される。また実行状態フラグは、スレッドを完了したときに0に設定される。また実行状態フラグは、ハードウエアのイベント待ち又はOSによる優先順位切り替えによりスレッドを待機させたときに0に設定される。
優先フラグ群104は、優先フラグ141,142,143により構成されている。優先フラグは、スレッドが高優先、中優先および非優先の何れであるかを示すためのものである。優先フラグは、2ビットで構成されており、スレッドが高優先である場合には11に設定され、スレッドが中優先である場合には01に設定され、スレッドが非優先である場合には00に設定される。そして優先フラグ141,142,143はそれぞれ、スレッドT1,T2,T3に対応している。
なお、スレッドの命令を記憶するメモリ(不図示)上には、スレッド毎に高優先、中優先および非優先が予め設定された優先設定表が設けられている。スレッドが生成されると、対応する生成スレッドが高優先、中優先および非優先の何れであるかを示す情報が優先設定表に書き込まれる。その後、ソフトウエアによって、優先設定表が参照され、生成されたスレッドに対応する優先フラグの設定が行われる。
実行方式選択部105は、実行状態フラグ群103と優先フラグ群104に基づいて、スレッドの実行方式として、ラウンドロビン方式、高優先方式(詳細は後述)および中優先方式(詳細は後述)の何れかを選択する。
スレッド選択部106は、実行方式選択部105で選択された実行方式を用いて、スレッドT1,T2,T3の中から、実行するスレッドを選択し、選択したスレッドに対応するプログラムカウンタの値を命令フェッチ部107へ出力する。
命令フェッチ部107は、スレッドの命令を記憶する上記メモリ(不図示)から、スレッド選択部106から入力した値が示すアドレスに記憶されている命令を読み込み、読み込んだ命令を命令実行部108へ出力する。
なお、マルチスレッドプロセッサ101で用いられる命令は、オペコードとオペランドとスレッド切替フラグを含んでいる。そして命令フェッチ部107は、読み込んだ命令のスレッド切替フラグが1に設定されている場合に、スレッド切替要求をスレッド選択部106へ出力する。スレッド切替フラグは、このスレッド切替フラグを含んでいる命令の実行後にスレッドがストールする場合において1になるように予め設定されている。
命令実行部108は、命令フェッチ部107から入力した命令を実行する。
周期管理部109は、中優先方式が選択されている場合に、高優先に設定されているスレッド(以下、高優先スレッドともいう)と、中優先に設定されているスレッド(以下、中優先スレッドともいう)の実行周期を管理する。
次に、ラウンドロビン方式、高優先方式および中優先方式を用いたパイプラインの構成を説明する。
まずラウンドロビン方式では、第1実施形態と同様に、スレッド選択部106は、クロックサイクルが経過する毎に、スレッドT1、スレッドT2、スレッドT3の順にスレッドを選択して実行させる。
また高優先方式では、スレッド選択部106は、高優先スレッドを、中優先スレッドよりも優先して実行させる。但しスレッド選択部106は、高優先スレッドにおける命令のスレッド切替フラグが1に設定されている場合(すなわち、高優先スレッドを選択中に、命令フェッチ部107からスレッド切替要求を入力した場合)に、中優先スレッドを、予め設定された中優先選択条件に基づいて選択して実行させる。またスレッド選択部106は、中優先スレッドにおける命令のスレッド切替フラグが1に設定されている場合(すなわち、中優先スレッドを選択中に、命令フェッチ部107からスレッド切替要求を入力した場合)に、高優先スレッドを選択して実行させる。
すなわち高優先方式は、第1実施形態の優先方式において優先スレッドを高優先スレッドに置き換えるとともに非優先スレッドを中優先スレッドに置き換えたものに相当する。
また中優先方式では、スレッド選択部106は、図8に示すように、予め設定された高優先連続実行回数分の高優先スレッドの選択と、予め設定された中優先連続実行回数分の中優先スレッドの選択とを交互に実行する。
具体的には、まず、上記の高優先連続実行回数分(図8では2回)のクロックサイクルが経過するまでの期間(以下、高優先実行期間という)は、クロックサイクルが経過する毎に高優先スレッドを選択する。但し、高優先スレッドが複数の場合には、高優先実行期間内においてクロックサイクルが経過する毎に異なる高優先スレッドを順次選択して実行させる。また、高優先スレッドが1つであり且つ非優先スレッドがある場合において高優先スレッドでストールが発生したときには、非優先スレッドを選択して実行させる。
そして、高優先実行期間が終了すると、次に、上記の中優先連続実行回数分(図8では1回)のクロックサイクルが経過するまでの期間(以下、中優先実行期間という)は、クロックサイクルが経過する毎に同じスレッドの中優先スレッドを選択する。すなわち、中優先スレッドが複数の場合には、中優先実行期間が到来する毎に、選択する中優先スレッドを順次切り替える。また、中優先スレッドでストールが発生したときにおいて非優先スレッドがある場合には、非優先スレッドを選択して実行させる。
図8に示す具体例では、まず、第1クロックサイクルCC1で、高優先に設定されているスレッドT1が選択されることにより、スレッドT1の命令フェッチが実行される。
次の第2クロックサイクルCC2で、高優先に設定されているスレッドT1が選択される。これにより、スレッドT1の命令デコードと、スレッドT1の命令フェッチが実行される。
そして、第2クロックサイクルCC2で高優先実行期間が終了し、中優先実行期間が開始することで、次の第3クロックサイクルCC3で、中優先に設定されているスレッドT2が選択される。これにより、スレッドT1の命令実行と、スレッドT1の命令デコードと、スレッドT2の命令フェッチが実行される。
そして、第3クロックサイクルCC3で中優先実行期間が終了し、高優先実行期間が開始することで、次の第4クロックサイクルCC4で、高優先に設定されているスレッドT1が選択される。これにより、スレッドT1のメモリアクセスと、スレッドT1の命令実行と、スレッドT2の命令デコードと、スレッドT1の命令フェッチが実行される。
さらに、次の第5クロックサイクルCC5で、高優先に設定されているスレッドT1が選択される。これにより、スレッドT1のライトバックと、スレッドT1のメモリアクセスと、スレッドT2の命令実行と、スレッドT1の命令デコードと、スレッドT1の命令フェッチが実行される。
そして、第5クロックサイクルCC5で高優先実行期間が終了し、中優先実行期間が開始することで、次の第6クロックサイクルCC6で、中優先に設定されているスレッドT3が選択される。これにより、スレッドT1のライトバックと、スレッドT2のメモリアクセスと、スレッドT1の命令実行と、スレッドT1の命令デコードと、スレッドT3の命令フェッチが実行される。
また図9に示すように、周期管理部109は、実行周期レジスタ151,152とカウンタ153と比較回路154,155を備える。
実行周期レジスタ151は、上記の高優先連続実行回数を示す値が設定されるレジスタである。実行周期レジスタ152は、上記の中優先連続実行回数を示す値が設定されるレジスタである。なお実行周期レジスタ151,152の設定は、ソフトウエアにより行われる。
カウンタ153は、クロックサイクルが経過する毎にその値をインクリメント(1加算)する。またカウンタ153は、スレッド選択部106からリセット信号(後述)を入力すると、カウンタの値を0に設定する。
比較回路154は、実行周期レジスタ151の値とカウンタ153の値とを比較して、カウンタ153の値が実行周期レジスタ151の値に達すると、一致信号を出力する。比較回路155は、実行周期レジスタ152の値とカウンタ153の値とを比較して、カウンタ153の値が実行周期レジスタ152の値に達すると、一致信号を出力する。
スレッド選択部106は、高優先実行期間内に比較回路154から一致信号を入力すると、その直近のクロックサイクルの開始時に、中優先実行期間を開始させるとともにリセット信号を出力する。またスレッド選択部106は、中優先実行期間内に比較回路155から一致信号を入力すると、その直近のクロックサイクルの開始時に、高優先実行期間を開始させるとともにリセット信号を出力する。
また実行方式選択部105は、図10に示す手順で、実行方式選択処理を実行する。
まず、実行状態と停止状態との間でスレッド状態が遷移すると実行方式選択処理が開始され、S110にて、実行状態であるスレッドの数が1より大きいか否かを判断する。ここで、実行状態であるスレッドの数が1より大きい場合には(S110:YES)、S120にて、高優先に設定されているスレッドの数(以下、高優先数という)が0であるか否かを判断する。ここで、高優先数が0である場合には(S120:YES)、S150に移行する。
一方、高優先数が0でない場合には(S120:NO)、S130にて、中優先に設定されているスレッドの数(以下、中優先数という)が0であるか否かを判断する。ここで、中優先数が0でない場合には(S130:NO)、S160に移行する。一方、中優先数が0である場合には(S130:YES)、S140にて、高優先数が1より大きいか否かを判断する。
ここで、高優先数が1より大きい場合には(S140:YES)、S150に移行する。一方、高優先数が1以下である場合には(S140:NO)、S170に移行する。
またS110にて、実行状態であるスレッドの数が1以下である場合には(S110:NO)、S170に移行する。
そしてS150に移行した場合には、ラウンドロビン方式を選択し、実行方式選択処理を終了する。またS160に移行した場合には、中優先方式を選択し、実行方式選択処理を終了する。またS170に移行した場合には、高優先方式を選択し、実行方式選択処理を終了する。
このように構成されたマルチスレッドプロセッサ101では、実行状態フラグ群103(実行状態フラグ131,132,133)が、スレッドT1,T2,T3毎にスレッドが実行中であるか否かを示すスレッド実行情報を記憶する。また優先フラグ群104(優先フラグ141,142,143)が、スレッドT1,T2,T3毎にスレッドの優先度を示す情報(以下、スレッド優先度情報という)を記憶する。
そして実行方式選択部105が、スレッド実行情報とスレッド優先度情報に基づいて、ラウンドロビン方式、高優先方式および中優先方式の何れかを選択する。ラウンドロビン方式は、クロックサイクル単位でスレッドT1,T2,T3の中から1つのスレッドを順次選択して切り替える方式である。高優先方式は、高優先スレッドでストールが発生するまでは高優先スレッドを優先して実行し、高優先スレッドでストールが発生したときに、中優先スレッドに切り替える方式である。中優先方式は、高優先実行期間と中優先実行期間とを切り替えることが可能であり、高優先実行期間内において高優先スレッドを実行し、中優先実行期間内において、高優先より優先度が低い中優先に設定された中優先スレッドを実行する方式である。
さらに、スレッド選択部106および周期管理部109は、ラウンドロビン方式、高優先方式および中優先方式のうち、実行方式選択部105が選択した実行方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
このようにマルチスレッドプロセッサ101は、上記スレッド実行情報と上記スレッド優先度情報とを用いて、ラウンドロビン方式、高優先方式および中優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
このため、マルチスレッドプロセッサ101によれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に高優先方式または中優先方式に切り替えることが可能となる。そして、高優先方式に切り替えることにより、実行中のスレッドのうち、高優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。また、中優先方式に切り替えることにより、高優先スレッドまたは中優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。さらに中優先方式では、高優先スレッドを実行するための高優先実行期間と中優先スレッドを実行するための中優先実行期間とが設けられている。このため、高優先方式と異なり、高優先スレッドでストールが発生しないことに起因して、中優先スレッドを実行するための時間を確保できないという事態の発生を回避することができる。
また、マルチスレッドプロセッサ101によれば、ラウンドロビン方式に切り替えることにより、優先度の高低に関係なくスレッドT1,T2,T3が均等に実行される。このため、優先度が高いスレッドの実行に起因して優先度が低いスレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
具体的に実行方式選択部105は、実行中の高優先スレッドの数が1以上であり(S120:NO)、且つ、実行中の中優先スレッドの数が1以上である(S130:YES)ことを中優先方式選択条件として、スレッド実行情報とスレッド優先度情報に基づいて、中優先方式選択条件が成立したと判断した場合に、中優先方式を選択する。これにより、実行中の高優先スレッドと実行中の中優先スレッドとの両方が存在する場合において、高優先スレッドでストールが発生しないことに起因して、中優先スレッドを実行するための時間を確保できないという事態の発生を回避することができる。
また実行方式選択部105は、実行中の高優先スレッドの数が1であり(S120:NO,S140:NO)、且つ、実行中の中優先スレッドの数が0である(S140:YES)ことを高優先方式選択条件として、スレッド実行情報とスレッド優先度情報に基づいて、高優先方式選択条件が成立したと判断した場合に、高優先方式を選択する。これにより、実行中の高優先スレッドが優先して実行されるため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。なお、この場合には、実行中の中優先スレッドの数が0であるため、中優先スレッドを実行するための時間を確保できないという問題は発生しない。
以上説明した実施形態において、実行状態フラグ群103は本発明における実行情報記憶手段、優先フラグ群104は本発明における優先度情報記憶手段、実行方式選択部105は本発明における第2方式選択手段、スレッド選択部106および周期管理部109は本発明における第2スレッド選択手段である。
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
例えば上記実施形態では、マルチスレッドプロセッサ1,101が3つのスレッドを並列に実行するものを示した。しかし、スレッドの数はこれに限定されるものではなく、マルチスレッドプロセッサ1,101が2つのスレッドまたは4つ以上のスレッドを並列に実行するようにしてもよい。
また上記実施形態では、実行状態と停止状態との間でスレッド状態が遷移するときに実行方式選択部5が実行方式を選択するものを示した。しかし、図6に示すように、スレッド状態として実行状態、停止状態および待機状態が設定されている場合には、実行状態と停止状態との間でスレッド状態が遷移するときだけではなく、実行状態と待機状態との間でスレッド状態が遷移するときにも、実行方式選択部5が実行方式を選択するようにしてもよい。
また上記第2実施形態では、高優先方式において、高優先スレッドでストールが発生したときに中優先スレッドに切り替えるものを示したが、中優先スレッドの代わりに非優先スレッドに切り替えるようにしてもよい。
1,101…マルチスレッドプロセッサ、3,103…実行状態フラグ群、4,104…優先フラグ群、5,105…実行方式選択部、6,106…スレッド選択部、109…周期管理部

Claims (5)

  1. 複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサ(1)であって、
    複数の前記スレッド毎に前記スレッドが実行中であるか否かを示すスレッド実行情報を記憶する実行情報記憶手段(3)と、
    複数の前記スレッド毎に前記スレッドが優先であるか否かを示すスレッド優先情報を記憶する優先情報記憶手段(4)と、
    前記スレッド実行情報と前記スレッド優先情報に基づいて、クロックサイクル単位で複数の前記スレッドの中から1つの前記スレッドを順次選択して切り替えるラウンドロビン方式、および、優先に設定された前記スレッドである優先スレッドでストールが発生するまでは前記優先スレッドを優先して実行し、前記優先スレッドでストールが発生したときに、優先に設定されていない前記スレッドである非優先スレッドに切り替える優先方式の何れかを選択する第1方式選択手段(5)と、
    前記ラウンドロビン方式および前記優先方式のうち、前記第1方式選択手段が選択した方式を用いて、前記クロックサイクル単位で、実行させる前記スレッドを選択する第1スレッド選択手段(6)とを備える
    ことを特徴とするマルチスレッドプロセッサ。
  2. 実行中の前記スレッドの数が1以下であること、または、前記優先スレッドの数が1であることを優先方式選択条件として、
    前記第1方式選択手段は、
    前記スレッド実行情報と前記スレッド優先情報に基づいて、前記優先方式選択条件が成立したと判断した場合に前記優先方式を選択し、前記優先方式選択条件が成立していないと判断した場合に前記ラウンドロビン方式を選択する
    ことを特徴とする請求項1に記載のマルチスレッドプロセッサ。
  3. 複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサ(101)であって、
    複数の前記スレッド毎に前記スレッドが実行中であるか否かを示すスレッド実行情報を記憶する実行情報記憶手段(103)と、
    複数の前記スレッド毎に前記スレッドの優先度を示すスレッド優先度情報を記憶する優先度情報記憶手段(104)と、
    クロックサイクル単位で複数の前記スレッドの中から1つの前記スレッドを順次選択して切り替える方式をラウンドロビン方式とし、第1優先度に設定された前記スレッドである第1優先スレッドでストールが発生するまでは前記第1優先スレッドを優先して実行し、前記第1優先スレッドでストールが発生したときに、第1優先度に設定されていない前記スレッドである非第1優先スレッドに切り替える方式を第1優先方式とし、少なくとも予め設定された第1優先実行期間と予め設定され第2優先実行期間とを切り替えることが可能であり、前記第1優先実行期間内において前記第1優先スレッドを実行し、前記第2優先実行期間内において、前記第1優先度より優先度が低い第2優先度に設定された前記スレッドである第2優先スレッドを実行する方式を第2優先方式として、前記スレッド実行情報と前記スレッド優先度情報に基づいて、前記ラウンドロビン方式、前記第1優先方式および前記第2優先方式の何れかを選択する第2方式選択手段(105)と、
    前記ラウンドロビン方式、前記第1優先方式および前記第2優先方式のうち、前記第2方式選択手段が選択した方式を用いて、前記クロックサイクル単位で、実行させる前記スレッドを選択する第2スレッド選択手段(106,109)とを備える
    ことを特徴とするマルチスレッドプロセッサ。
  4. 実行中の前記第1優先スレッドの数が1以上であり、且つ、実行中の前記第2優先スレッドの数が1以上であることを第2優先方式選択条件として、
    前記第2方式選択手段は、
    前記スレッド実行情報と前記スレッド優先度情報に基づいて、前記第2優先方式選択条件が成立したと判断した場合に前記第2優先方式を選択する
    ことを特徴とする請求項3に記載のマルチスレッドプロセッサ。
  5. 実行中の前記第1優先スレッドの数が1であり、且つ、実行中の前記第2優先スレッドの数が0であることを第1優先方式選択条件として、
    前記第2方式選択手段は、
    前記スレッド実行情報と前記スレッド優先度情報に基づいて、前記第1優先方式選択条件が成立したと判断した場合に前記第1優先方式を選択する
    ことを特徴とする請求項3または請求項4に記載のマルチスレッドプロセッサ。
JP2014104400A 2013-08-29 2014-05-20 マルチスレッドプロセッサ Pending JP2015064861A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014104400A JP2015064861A (ja) 2013-08-29 2014-05-20 マルチスレッドプロセッサ

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2013178362 2013-08-29
JP2013178362 2013-08-29
JP2014104400A JP2015064861A (ja) 2013-08-29 2014-05-20 マルチスレッドプロセッサ

Publications (1)

Publication Number Publication Date
JP2015064861A true JP2015064861A (ja) 2015-04-09

Family

ID=52832659

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014104400A Pending JP2015064861A (ja) 2013-08-29 2014-05-20 マルチスレッドプロセッサ

Country Status (1)

Country Link
JP (1) JP2015064861A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018519582A (ja) * 2015-05-29 2018-07-19 クアルコム,インコーポレイテッド マルチスレッドプロセッサのための帯域幅/リソース管理

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018519582A (ja) * 2015-05-29 2018-07-19 クアルコム,インコーポレイテッド マルチスレッドプロセッサのための帯域幅/リソース管理

Similar Documents

Publication Publication Date Title
JP5173713B2 (ja) マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法
US8001549B2 (en) Multithreaded computer system and multithread execution control method
JP5173711B2 (ja) マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法
JP6017260B2 (ja) マルチスレッドプロセッサ
US8117618B2 (en) Forward progress mechanism for a multithreaded processor
US9170841B2 (en) Multiprocessor system for comparing execution order of tasks to a failure pattern
JP5173712B2 (ja) マルチスレッドプロセッサ
JP5548037B2 (ja) 命令発行制御装置及び方法
JP2008047145A (ja) デュアルスレッドプロセッサ
WO2009150815A1 (ja) マルチプロセッサシステム
US10732976B2 (en) Integrated circuit processor and method of operating the integrated circuit processor in different modes of differing thread counts
JP2006092042A (ja) 情報処理装置及びコンテキスト切り替え方法
JP2015064861A (ja) マルチスレッドプロセッサ
US20200012524A1 (en) Processor and Instruction Scheduling Method
JP5536862B2 (ja) マルチスレッドプロセッサ
JP2022550064A (ja) マルチスレッドマイクロプロセッサにおける共有リソース割り当て
JP5770334B2 (ja) マルチスレッドプロセッサ
JP2012059195A (ja) マルチスレッドプロセッサ
JP5536863B2 (ja) マルチスレッドプロセッサ
JP5946566B2 (ja) マルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法
JP5770333B2 (ja) マルチスレッドプロセッサ
US20220156074A1 (en) Electronic device and multiplexing method of spatial
JP5838237B2 (ja) マルチスレッドプロセッサ
JP5536864B2 (ja) マルチスレッドプロセッサ
JP2013058265A (ja) マルチスレッドプロセッサ及びその割り込み処理方法