Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP5573038B2 - マルチスレッドプロセッサ及びプログラム - Google Patents
[go: Go Back, main page]

JP5573038B2 - マルチスレッドプロセッサ及びプログラム - Google Patents

マルチスレッドプロセッサ及びプログラム Download PDF

Info

Publication number
JP5573038B2
JP5573038B2 JP2009172204A JP2009172204A JP5573038B2 JP 5573038 B2 JP5573038 B2 JP 5573038B2 JP 2009172204 A JP2009172204 A JP 2009172204A JP 2009172204 A JP2009172204 A JP 2009172204A JP 5573038 B2 JP5573038 B2 JP 5573038B2
Authority
JP
Japan
Prior art keywords
thread
instruction
counter
program
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.)
Expired - Fee Related
Application number
JP2009172204A
Other languages
English (en)
Other versions
JP2011028440A (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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2009172204A priority Critical patent/JP5573038B2/ja
Publication of JP2011028440A publication Critical patent/JP2011028440A/ja
Application granted granted Critical
Publication of JP5573038B2 publication Critical patent/JP5573038B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Advance Control (AREA)

Description

本発明はマルチスレッドプロセッサ及びプログラムに関する。
IT技術の進展に伴い、コンピュータが処理するデータ量は増加の一途にある。これら大量ののデータを高速に処理するため、様々なタイプのプロセッサが提案されている。
例えば、VLIW(Very Long Instruction Word)と称されるプロセッサでは、複数の命令語(例えば、演算命令、ロード命令など)を1つの超長命令(VLIW)にパックし、これら複数の命令語を同時に実行する。この場合、プログラムのコンパイル時に、命令間の順序関係やデータ依存関係を解析し、同時に実行することが可能な命令群を抽出する。
これにより、ランタイムオーバーヘッド無しに、複数命令の同時実行による性能向上を実現している。
一方、アウトオブオーダ実行型のプロセッサの場合は、同時に実行することが可能な命令群の解析を、プログラムのランタイムにおいてハードウェアで実行する。また、多数の実行前の命令を格納するバッファを持ち、実行に必要なオペランドが揃った命令から順に実行する。この方式によれば、プログラム順序に制約されることなく、同時に実行することが可能な命令群を抽出して同時に実行することができる。しかし、1つのプログラム(スレッド)において、同時に実行可能な命令数には限りがあり、平均的には、2〜3命令/1サイクルが上限とされており、これ以上に性能を向上することが困難となっていた。
このため、近年では、複数のスレッドを同時実行することにより、更なる性能向上を実現するマルチスレッドプロセッサが提案されている。マルチスレッドプロセッサでは、複数のスレッドにより、演算器やメモリの読み書きを行う機構を共有する、一方で、ソフトウェアから可視なレジスタや状態レジスタをスレッド毎に別々に用意することにより、1つのプロセッサ上で、複数スレッドの同時実行を可能としている。
マルチスレッドプロセッサにおけるスレッドの切り替え方式として、複数のスレッドをクロックサイクル単位に切り替える細粒度マルチスレッディング方式(Fine grained multithreading)、複数のスレッドの内から、同時に実行可能な命令を抽出して実行する同時マルチスレッディング方式(Simultaneous multithreading)、及びキャッシュミスのような長いストールが発生した場合にのみ、実行するスレッドを切り替える粗粒度マルチスレッディング(Coarse grained multithreading)方式などが提案されている。
この分野の公知例として、例えば、特許文献1には、粗粒度マルチスレッディング方式を採用したマルチスレッドプロセッサの例が開示されている。この特許文献1に開示された技術では、長時間のストールを発生させるキャッシュミスなどの事象の発生をハードウェアで検知し、これをトリガーとして、実行するスレッドの切り替えを行い、異なるスレッドの実行を継続する。これにより、プロセッサが長時間に渡ってストールしてしまうことを防ぎ、単位時間当たりの処理性能を向上させることができる。また、長時間に渡り、ストールなどのスレッドを切り替える事象が発生しない場合には、所定の一定時間が経過した時点で、他のスレッドに切り替える機構も実装している。
特開2006−40141号公報
ところで、上記背景技術にあっては、他方で、より高性能なプロセッサを実現する必要性から、プロセッサで実行する個々の命令の内容も、より複雑化しており、浮動小数演算などのような複雑な命令が出現している。これらの命令では、演算結果が得られるまでの遅延が長いため、命令のオペランド間に依存がある場合などには、依存が無い命令を遅延サイクル内に配置する工夫が考えられる。しかし、遅延が長い命令の場合には、遅延サイクルを埋めるのに十分な、依存が無い命令を確保することが困難なケースも存在する。
このため、前述の特許文献1に開示された技術と同様に、命令間の依存関係をハードウェアで検知し、この検出をトリガーとして、実行するスレッドの切り替えを行い、異なるスレッドの実行を継続する実装が考えられる(図6参照)。
図6は、従来のマルチスレッドプロセッサの1構成例を示す構成図である。
同図に示す従来のマルチスレッドプロセッサは、スレッドの命令流を制御するプログラムカウンタ91(PC0〜PC3 )と、実行するスレッドを選択するスレッド選択部92と、命令メモリから命令を読み出す命令フェッチ部93と、命令を実行する命令実行部94と、命令間のオペランド依存関係を検出する依存検知部95と、から構成される。
図6に示すプロセッサは、近年の他のプロセッサと同様に、動作周波数の向上を実現するため複数のパイプラインステージから構成されている。
図7は、従来のマルチスレッドプロセッサで実行されるプログラムの1例を示す説明図である。
同図に例示するプログラムは、演算結果が得られるまでの遅延が長い浮動少数点命令(fmul/fadd/fsub)を実行するものであり、fmulのデスティネーション(r[1] と、faddのソースオペランド(r[1])間に依存関係が存在する場合である。
図8は、従来のマルチスレッドプロセッサでプログラムを実行した場合のスレッド切り替え方法の1例を示す説明図である。
図6に示すプロセッサで、図7に例示するプログラムを実行すると、実行するスレッドは、図8に示すように切り替わる。
図6に示すプロセッサでは、命令実行部で実行中の命令(図8に示すスレッド1のfmul)のデスティネーション番号と、命令フェッチ部がフェッチ済みの命令(図8に示すスレッド1のfadd)のソースオペランド番号を、依存検知部95(図6)が比較することにより、依存検知部95は、命令間の依存関係を検知する。
依存が検知されたタイミング(図8に示す3サイクル目)では、データ依存関係が存在するために実行できない命令(図8に示すスレッド1のfadd)がフェッチ済みである。このため、図8に示す3サイクル目において、実行するスレッドを、スレッド1からスレッド2へと切り替えたとしても、スレッド2のfmovが命令フェッチ部93(図6)からフェッチできるのは、図8の4サイクル目になってからとなる。このため、図6に示すマルチスレッドプロセッサでは、1サイクルの間、有効な命令を実行することができないことになる。
図9は、図6に示す従来のマルチスレッドプロセッサを改良したマルチスレッドプロセッサの1構成例を示す構成図である。
同図に示すマルチスレッドプロセッサは、図6に示すマルチスレッドプロセッサを拡張したマルチスレッドプロセッサであり、前述のスレッド切り替えに伴って、1サイクルの間、有効な命令を実行することができなくなる状態の発生を防ぐための実装を備える。
図9に示すマルチスレッドプロセッサでは、図6に示すマルチスレッドプロセッサに、スレッド毎の命令バッファ96と、命令選択部97とが追加されており、依存検知部95の接続先としては、スレッド選択部91に加えて、命令選択部97が追加されている。
図9に示すマルチスレッドプロセッサでは、命令フェッチ部93から読み出された命令を、一旦命令バッファ96に格納した後、このバッファ96に格納された命令を命令選択部97が選択し、命令実行部94へと供給する構成となっている。このように構成することにより、スレッド切り替えが発生した際には、連続して有効な命令を実行することができる。
しかし、命令バッファ96の、各スレッドに対応する単位バッファの各々は、2サイクル分以上の命令をバッファできるものであることが必要となる。スレッド切り替えの判断を行った時点では、命令バッファ96からは、切り替える前のスレッドの命令が読み出されている。このため、命令バッファ96が1サイクル分の命令のみをバッファする場合では、スレッドを切り替えた直後のサイクルでは、命令バッファ96から、実行可能な命令を読み出すことができないことになる。
図10は、従来のマルチスレッドプロセッサでプログラムを実行した場合のスレッド切り替え方法の他の1例を示す説明図である。
図9に示す従来のマルチスレッドプロセッサは、演算結果が得られるまでの遅延が長い命令の場合には、データ依存の有無に関わらず、必ずスレッドを切り替えるように制御している。しかし、こうした構成の場合は、図10に示すような、遅延サイクルを利用したプログラミングができない。何故なら、データ依存の有無に関わらず、必ずスレッドを切り替えるように制御すると、遅延が長い命令(図10に示すスレッド1のfmul)の遅延サイクルに、データ依存の無い命令(図10に示すスレッド1のfadd)を配置できる場合であっても、スレッドの切り替えが行われてしまうことになるからである。
また、他に実行可能なスレッドが無い場合などには、有効な命令を継続して実行することができない。
本発明の目的は、上術した課題解決するマルチスレッドプロセッサ及びプログラムを提供することにある。
上記課題を解決するために、本発明の第1の形態、複数のパイプラインステージを備え、所定の細粒度に複数個のスレッドを切り替えられるマルチスレッドプロセッサであって、スレッド毎の命令流を制御するプログラムカウンタと、プログラムカウンタの1つを選択するスレッド選択手段と、スレッド選択手段が選択したプログラムカウンタの値に基づいて命令をフェッチする命令フェッチ手段と、命令フェッチ手段から送出された命令を実行する命令実行手段とを備え、命令に、実行スレッドの切り替えを要求するためのスレッド切り替えフラグを命令語内部にみ、スレッド切り替えフラグは、演算結果を得るのに所定値サイクルの遅延が生じる命令において、当該遅延サイクル中に存在する、当該演算結果を利用しない命令の数が、所定値サイクルの数よりも小さい場合に、実行スレッドの切り替えを要求することを指示するアクティブに設定され、命令フェッチ手段は、フェッチした命令の命令語内部に含む、スレッド切り替えフラグが、アクティブに設定されている場合には、実行スレッドの切り替えを要求する指示をスレッド選択手段に伝達し、スレッド選択手段は、該指示に基づいて、現在実行しているスレッドに対応するプログラムカウンタとは別のプログラムカウンタからのアドレスを選択して命令フェッチ手段に送出する
本発明の第2の形態複数パイプラインステージを備え、所定の細粒度に複数個のスレッドを切り替えられるマルチスレッドプロセッサとして機能させるプログラムであって、マルチスレッドプロセッサを、スレッド毎の命令流制御するプログラムカウンタ、プログラムカウンタの1つを選択するスレッド選択手段、スレッド選択手段が選択したプログラムカウンタの値に基づいて命令をフェッチする命令フェッチ手段、命令フェッチ手段から送出された命令を実行する命令実行手段として機能させ、命令には、実行スレッドの切り替えを要求するためのスレッド切り替えフラグを命令語内部に含み、スレッド切り替えフラグは、演算結果を得るのに所定値サイクルの遅延が生じる命令において、当該遅延サイクル中に存在する、当該演算結果を利用しない命令の数が、所定値サイクルの数よりも小さい場合に、実行スレッドの切り替えを要求することを指示するアクティブに設定され、命令フェッチ手段は、フェッチした命令の命令語内部に含む、スレッド切り替えフラグが、アクティブに設定されている場合には、実行スレッドの切り替えを要求する指示をスレッド選択手段に伝達し、スレッド選択手段は、該指示に基づいて、現在実行しているスレッドに対応するプログラムカウンタとは別のプログラムカウンタからのアドレスを選択して命令フェッチ手段に送出するように機能させる
以上説明したように、本発明のマルチスレッドプロセッサによれば、複数個のスレッドを細粒度のクロックサイクル単位で切り替えるマルチスレッドプロセッサにおいて、実行する命令の命令語内部に設けられたスレッド切り替えフラグに基づいて、実行するスレッドを切り替えることが可能となり、これにより、単位時間当たりの命令処理量を増加させると共にスループット性能を向上させることができるマルチスレッドプロセッサを提供できる効果がある。
本発明の実施形態に係るマルチスレッドプロセッサの基本構成を示す構成図である。 本実施形態に係るマルチスレッドプロセッサで用いられる命令形式の1例を示す命令構成図である。 本発明の実施形態に係るマルチスレッドプロセッサでプログラムを実行した場合のスレッド切り替え方法の1例を示す説明図である。 本発明の実施形態に係るマルチスレッドプロセッサが実行する命令の、命令語中に設けられたスレッド切り替えフラグ(tcf) を設定する処理の手順を説明するフローチャート図である。 本発明の実施形態に係るマルチスレッドプロセッサの1実施例としての構成を示す構成図である。 従来のマルチスレッドプロセッサの1構成例を示す構成図である。 従来のマルチスレッドプロセッサで実行されるプログラムの1例を示す説明図である。 従来のマルチスレッドプロセッサでプログラムを実行した場合のスレッド切り替え方法の1例を示す説明図である。 図6に示す従来のマルチスレッドプロセッサを改良したマルチスレッドプロセッサの1構成例を示す構成図である。 従来のマルチスレッドプロセッサでプログラムを実行した場合のスレッド切り替え方法の他の1例を示す説明図である。
以下、本発明のマルチスレッドプロセッサの実施形態について、図面を参照して詳細に説明する。
但し、本発明の実施の形態は、下記の実施の形態に限定されることはなく、本発明の技術的範囲に属する限り、他の様々な形態をとり得る。
図1は、本発明の実施形態に係るマルチスレッドプロセッサの基本構成を示す構成図である。
同図に示す本発明の実施形態に係るマルチスレッドプロセッサは、実行する命令の命令語内部に設けられたスレッド切り替えフラグに基づいて、実行するスレッドを切り替えることを特徴とする。
図1に示す本実施形態のマルチスレッドプロセッサは、基本構成として、スレッドの命令流を制御するプログラムカウンタ1(PC0〜PC3)と、実行するスレッドを選択するスレッド選択部2と、スレッド選択部2が選択したスレッドのプログラムカウンタ値に基づき、命令メモリ(図示は省略)から命令を読み出す命令フェッチ部3と、命令フェッチ部3が読み出した命令を実行する命令実行部4、とを備える。
図1に示す本実施形態のマルチスレッドプロセッサでは、4つのスレッドを切り替える構成を示しているが、一般に、本発明に係るマルチスレッドプロセッサは、必ずしも、この実施形態に限るものではなく、切り替えることができるスレッドの数は、任意である。
また、本実施形態のマルチスレッドプロセッサは、近年のプロセッサと同様、動作周波数の向上を実現するために、複数のパイプラインステージから構成されるものとする。
さらに、図1に示す本実施形態のマルチスレッドプロセッサでは、命令フェッチステージと命令実行ステージとの2つのパイプラインステージを備えた構成を示しているが、一般に、本発明に係るマルチスレッドプロセッサは、必ずしも、このような構成に限るものではなく、プロセッサを構成するパイプラインステージの数は、任意である。
図2は、本実施形態に係るマルチスレッドプロセッサで用いられる命令形式の1例を示す命令構成図である。
同図に示すように、本実施形態に係るマルチスレッドプロセッサで用いられる命令形式は、実行する命令の種類を指定するオペコード(Opcode)と、演算の対象データを指定するソースオペランド(r1/r2) と、演算結果の保存先を指定するデスティネーション(r3)と、実行するスレッドの切り替えを指示するスレッド切り替えフラグ(tcf)と、を含む。
図2に示す命令形式では、2個のソースオペランドと、1個のデスティネーションとを含む命令形式としたが、一般に、本発明に係るマルチスレッドプロセッサで用いられる命令形式は、必ずしも、これに限定されるものではなく、ソースオペランドの個数や、デスティネーションの個数は、例えば、0個の場合や、3個の場合であっても構わない。また、命令形式に、上記とは異なるフィールド( 例えば、単なる値など) を含んでいても構わない。
以下、本発明の実施形態に係るマルチスレッドプロセッサの機能を説明する。
まず、命令フェッチ部3は、スレッド選択部2から指定されたアドレスに従って、図2に示す命令形式の命令を、命令メモリ(図示は省略)からフェッチする。その後、命令フェッチ部3は、フェッチした命令の命令語の内部に設けられたスレッド切り替えフラグ(tcf)がアクティブである場合に、実行するスレッドの切り替えをスレッド選択部2に要求する(より具体的には、内部フラグ(図示は省略)のスレッド切り替え要求をアクティブに設定する)。
スレッド選択部2は、内部フラグのスレッド切り替え要求がアクティブであることを検知し、現在実行しているスレッドに対応するプログラムカウンタとは、別のプログラムカウンタからのアドレスを選択し、前記アドレスを命令フェッチ部3へと送出する。
図3は、本発明の実施形態に係るマルチスレッドプロセッサでプログラムを実行した場合のスレッド切り替え方法の1例を示す説明図である。
図3では、図1に示すマルチスレッドプロセッサにおいて、前述の図7に示すプログラムを実行した場合に、実行するスレッドがどのように切り替わるかを示している。
前述の図7に示すプログラム例の場合、fmul命令の命令語内部に設けられたスレッド切り替えフラグがアクティブに設定される。また、図3に示すIa-bは、スレッドaのb 番目の命令を示す。
まず、図3に示すように、2サイクル目にスレッド1のfmul(I1-2)がフェッチされた段階で、fmul(I1-2)命令の命令語内部に設けられたスレッド切り替えフラグがアクティブであることをトリガーとして、図1のスレッド選択部が、実行するスレッドを、スレッド1(PC1)からスレッド2(PC2)に切り替える。3サイクル目では、スレッド2のfmov(I2-1)命令が、命令フェッチ部からフェッチされる。同様に、4サイクル目では、スレッド2(PC2)からスレッド3(PC3)への切り替えが行われる。
図4は、本発明の実施形態に係るマルチスレッドプロセッサが実行する命令の、命令語中に設けられたスレッド切り替えフラグ(tcf)を設定する処理の手順を説明するフローチャート図である。
以下、図1〜3を参照しながら、図4に示すフローチャート図を使用して、本実施形態に係るマルチスレッドプロセッサが実行する命令の、命令語中に設けられたスレッド切り替えフラグ(tcf)を設定する処理の手順を説明する。
なお、同図に示すスレッド切り替えフラグ(tcf)の設定は、プログラマが生成したアセンブルプログラムまたはコンパイラが生成したマシン語プログラム、若しくはマシン語プログラムに対応したコンパイラの用いる中間言語記述を対象としてオペランドの依存関係等を分析することにより行うことが可能であり、この分析は、本発明の実施形態に係るコンピュータプログラムである専用のプログラムを実行して行うことが可能である。
また、この専用のプログラムは、前記のコンパイラ自体に含ませることも可能であり、さらに、コンパイラの実行後に実行される他のベーシックソフトに含ませることも可能である。ここでは、この専用のプログラムは、前記コンパイラ等のベーシックソフトに含まれているものとして説明する。
なお、前述の本発明の実施形態に係る専用のプログラムを実行して作成されたプログラムも、また、本発明の実施形態に係るコンピュータプログラムである。
(ステップS1)
まず、入力となるアセンブルプログラム、またはマシン語プログラム、または中間言語記述における各命令に対して、各命令の演算結果を得るのに、N(>0)サイクルの遅延を生じるか否かを検査する。このため、ステップS1では、命令列を出力するコンパイラ等のベーシックソフトが、一時変数Sに1を代入し、以後、1番目の命令から順に、(一時変数Sの値)番目の命令を検査する用意をする。
(ステップS2)
次に、ステップS2では、前記コンパイラ等のベーシックソフトが、(一時変数Sの値)番目の命令が、演算結果を得るのにN(>0)サイクルの遅延が生じるか否かを検証し、演算結果を得るのにN(>0)サイクルの遅延が生じない場合には、一時変数Sの新しい値を、(一時変数Sの値)+1番目とするために、ステップS10に移る。他方、演算結果を得るのにN(>0)サイクルの遅延が生じる場合は、ステップS3に進む。
(ステップS3)
ステップS3では、前記コンパイラ等のベーシックソフトが、一時変数Tに1を代入し、かつ一時変数Cに0を代入し、(一時変数Sの値)に後続する命令間のオペランド依存関係を検証する準備を行う。
(ステップS4)
次に、ステップS4では、前記コンパイラ等のベーシックソフトが、(S+1)番目から(S+N)番目の各命令が、S番目の命令の演算結果を利用するか否かを検証し、(S+1)番目から( S+N)番目の各命令が、S番目の命令の演算結果を利用しない場合はステップS5に進む。他方、(S+1)番目から(S+N)番目の各命令が、S番目の命令の演算結果を利用する場合はステップS6に移る。
(ステップS5)
ステップS5では、前記コンパイラ等のベーシックソフトが、一時変数Cの値に1を加え、ステップS6に進む。
(ステップS6)
ステップS6では、前記コンパイラ等のベーシックソフトが、一時変数Tの値に1を加え、ステップS7に進む。
(ステップS7)
ステップS7では、前記コンパイラ等のベーシックソフトが、T>Nか否かを検証し、T>NであればステップS8に進む。他方、T>Nでない場合はステップS4に戻る。
(ステップS8)
ステップS8では、前記コンパイラ等のベーシックソフトが、C<(N/2)か否かを検証し、C<(N/2)であればステップS9に進む。他方、C<(N/2)でない場合はステップS10に移る。
(ステップS9)
ステップS9では、前記コンパイラ等のベーシックソフトが、S番目の命令のスレッド切り替えフラグ(tcf)をアクティブに設定し、ステップS10に進む。
(ステップS10)
ステップS10では、前記コンパイラ等のベーシックソフトが、一時変数Sの値に1を加え、ステップS11に進む。
(ステップS11)
ステップS11では、前記コンパイラ等のベーシックソフトが、S≧プログラムの命令数か否かを検証し、S≧プログラムの命令数でなければステップS2に戻る。他方、S≧プログラムの命令数であれば直ちに処理を終了する。
この手順では、S番目の命令の演算結果を利用しない命令の数をカウントする。即ち、(S+1)番目の命令から順に、(S+T)番目の命令を検査し、(S+T)番目の命令が、S番目の命令の演算結果を利用しない場合には、一時変数Cをカウントアップする。
この検査を(S+N)番目の各命令に対して、順次行い、S番目の命令の演算結果を利用しない命令の数(C)に基づき、S番目の命令のスレッド切り替えフラグ(tcf)の設定を行うものである。また、利用しない命令の数(C)が、演算結果が得られるまでのサイクル数(N)の半分より小さければ、S番目の命令のスレッド切り替えフラグ(tcf)をアクティブに設定するのである。以上の処理を、プログラム中の全命令に対して行う。
このようにして、各命令のスレッド切り替えフラグ(tcf)を設定することができる。
なお、図4に示す処理手順では、スレッド切り替えフラグ(tcf)を設定するのに、演算結果を利用しない命令の数(C)が、演算結果が得られるまでのサイクル数(N)の半分より小さいことを条件としているが、一般に、本発明では、必ずしもこの条件に限るものではなく、例えば、CがNより小さいことや、CがNの1/4よりも小さいこと等をスレッド切り替えフラグ(tcf)を設定するための条件としてもよい。
図5は、本発明の実施形態に係るマルチスレッドプロセッサの1実施例としての構成を示す構成図である。
同図に示すマルチスレッドプロセッサは、実行する命令の命令語内部に設けられたスレッド切り替えフラグに基づき、実行するスレッドを切り替えるマルチスレッドプロセッサである。
図5に示すように、本発明の実施形態に係るマルチスレッドプロセッサの1実施例としてのマルチスレッドプロセッサは、スレッドの命令流を制御するプログラムカウンタ1(PC0〜PC3)と、スレッド毎に、スレッドが実行されないサイクル数をカウントするスレッドカウンタ10(TC0〜TC3)と、実行するスレッドを選択するスレッド選択部2と、スレッド選択部が選択したスレッドのプログラムカウンタ値に基づき、命令メモリから命令を読み出す命令フェッチ部3と、後述するNOP置換部12が送出する命令を実行する命令実行部4と、NOP(None Operation)命令を送出するNOP11と、スレッド選択部2の指示に基づいてフェッチされた命令をNOP命令に置き換えるNOP置換部12と、から構成される。
図5に示すマルチスレッドプロセッサでは、4つのスレッドを切り替えるマルチスレッドプロセッサを示しているが、一般に、本発明に係るマルチスレッドプロセッサは、必ずしも、この実施例に限定されるものではない。また、切り替えるスレッドの数は任意である。また、図5に示すマルチスレッドプロセッサは、近年の他のマルチスレッドプロセッサと同様に、動作周波数の向上を実現するために、複数のパイプラインステージから構成されるものとする。
さらに、図5に示すマルチスレッドプロセッサでは、命令フェッチステージと命令実行ステージとの2つのステージを示しているが、一般に、本発明に係るマルチスレッドプロセッサは、必ずしも、この実施例に限定されるものではない。プロセッサを構成するパイプラインステージの数は任意である。
以下、図5に示したマルチスレッドプロセッサの機能を、特に、図1に示したマルチスレッドプロセッサの機能との相違点に留意して説明する。
図5に示すマルチスレッドプロセッサは、図1に示したマルチスレッドプロセッサと同様に、図2に示す命令形式の命令を実行し、フェッチされた命令の命令語内部に設けられたスレッド切り替えフラグ(tcf)がアクティブである場合に、スレッド選択部2が、実行するスレッドを切り替える。その際に、スレッド選択部2は、各スレッドに対応するスレッドカウンタ10のカウント値に基づき、次に選択するスレッドを決定する。具体的には、スレッドカウンタ10のカウント値が0であるスレッドを、次に実行するスレッドとして選択する。
スレッドカウンタ10の各スレッドカウンタ(TC0〜TC3)には、初期値として0が格納されていて、スレッドが切り替えられると、元々実行されていたスレッドに対応するスレッドカウンタには、所定の値が格納される。そして、0以外の値が格納されるスレッドカウンタは、対応するスレッドが選択されていないサイクル毎に、0になるまでデクリメントされる。
スレッドが切り替えられる際に、スレッドカウンタ10に格納される所定の値は、元々実行していたスレッドにおいて、最後にフェッチされた命令のオペコード(Opcode)に基づき決定される。例えば、あるオペコードに該当する命令が、演算結果を得るのにN(>0)サイクルの遅延が生じる場合には、所定の値として、(N−1)の値がスレッドカウンタに格納される。このため、スレッドカウンタ10に格納される所定の値は、当該オペコードに基づいて制御されるセレクタ(図示は省略)によって選択され、該選択された値がスレッドカウンタに供給される。
このようなスレッドカウンタ10を用いることにより、スレッドAからスレッドBに切り替えた後、スレッドAにおけるデータ依存関係が解消する前に、再び、スレッドAが選択されることを防ぐことができる。
一方、NOP置換部12は、スレッド選択部2からの制御に基づき、命令フェッチ部3が読み出した命令を、NOP(None OPeration)命令に置き換える。具体的には、スレッドを切り替える際に、スレッド選択部2が、他に実行可能なスレッドが無いことを検知した場合に、スレッド選択部2は、NOP命令への置き換えを、NOP置換部12に対して要求する(より具体的には、NOP置換要求を示す内部フラグをアクティブに設定する) 。なお、スレッド選択部2は、実行中のスレッド以外に、スレッドカウンタ10のカウント値が0である実行待ちのスレッドが、1つも無い場合に、他に実行可能なスレッドが無いと判断する。
この1実施例としてのマルチスレッドプロセッサでは、スレッドカウンタ10の初期値として0を設定し、オペコードに基づいて設定された所定値をデクリメントする構成としているが、一般に、本発明に係るマルチスレッドプロセッサは、必ずしも、この実施例に限定されるものではなく、初期値は0以外の値であっても構わない。また、スレッドカウンタ10をインクリメントする構成であっても構わない。
本発明は、複数個のスレッドを細粒度のクロックサイクル単位で切り替えられるマルチスレッドプロセッサの構築に適用することができる。特に、命令間のオペランド依存関係に基づくスレッド切り替え機能を、確実に(即ち、任意に深い最適化レベルで)実現できると共に、低コストのハードウェアでも実現することができるマルチスレッドプロセッサの構築に好適である。
1 プログラムカウンタ
2 スレッド選択部
3 命令フェッチ部
4 命令実行部
10 スレッドカウンタ
12 NOP置換部

Claims (6)

  1. 複数のパイプラインステージを備え、所定の細粒度に複数個のスレッドを切り替えられるマルチスレッドプロセッサであって、
    スレッド毎の命令流を制御するプログラムカウンタと、
    前記プログラムカウンタの1つを選択するスレッド選択手段と、
    前記スレッド選択手段が選択したプログラムカウンタの値に基づいて命令をフェッチする命令フェッチ手段と、
    前記命令フェッチ手段から送出された前記命令を実行する命令実行手段と
    を備え、
    前記命令には、実行スレッドの切り替えを要求するためのスレッド切り替えフラグを命令語内部に含み、
    前記スレッド切り替えフラグは、演算結果を得るのに所定値サイクルの遅延が生じる命令において、当該遅延サイクル中に存在する、当該演算結果を利用しない命令の数が、前記所定値サイクルの数よりも小さい場合に、実行スレッドの切り替えを要求することを指示するアクティブに設定され、
    前記命令フェッチ手段は、フェッチした命令の命令語内部に含む、前記スレッド切り替えフラグが、アクティブに設定されている場合には、実行スレッドの切り替えを要求する指示を前記スレッド選択手段に伝達し、
    前記スレッド選択手段は、該指示に基づいて、現在実行しているスレッドに対応するプログラムカウンタとは別のプログラムカウンタからのアドレスを選択して前記命令フェッチ手段に送出する
    ことを特徴とするマルチスレッドプロセッサ。
  2. スレッド毎に、スレッドが実行されないサイクル数をカウントするスレッドカウンタと、
    前記命令フェッチ手段がフェッチした命令をNOP命令に置き換えるNOP置換手段と
    を更に備え、
    前記スレッド選択手段は、実行するスレッドを切り替える際に、前記スレッドカウンタのカウンタ値が0である実行待ちのスレッドを次に実行するスレッドとして選択し、前記スレッドカウンタのカウンタ値が0である実行待ちのスレッドが1つもない場合に、NOP命令への置き換えを前記NOP置換手段に要求する
    ことを特徴とする請求項1に記載のマルチスレッドプロセッサ。
  3. 前記スレッドカウンタは、初期値として0を格納し、スレッドが切り替えられると、実行されていたスレッドに対応するスレッドカウンタは、実行されていたスレッドにおいて最後にフェッチされた命令のオペコードに基づいて決定される所定値を設定し、該所定値を、対応するスレッドが選択されていないサイクル毎に、0になるまでデクリメントし、
    前記最後にフェッチされた命令のオペコードに基づいて決定される所定値は、該命令の演算結果を得るのに必要な遅延サイクル数に基づく値である
    ことを特徴とする請求項2に記載のマルチスレッドプロセッサ。
  4. 複数のパイプラインステージを備え、所定の細粒度に複数個のスレッドを切り替えられるマルチスレッドプロセッサとして機能させるプログラムであって、
    前記マルチスレッドプロセッサを、
    スレッド毎の命令流を制御するプログラムカウンタ、
    前記プログラムカウンタの1つを選択するスレッド選択手段、
    前記スレッド選択手段が選択したプログラムカウンタの値に基づいて命令をフェッチする命令フェッチ手段、
    前記命令フェッチ手段から送出された前記命令を実行する命令実行手段
    として機能させ、
    前記命令には、実行スレッドの切り替えを要求するためのスレッド切り替えフラグを命令語内部に含み、
    前記スレッド切り替えフラグは、演算結果を得るのに所定値サイクルの遅延が生じる命令において、当該遅延サイクル中に存在する、当該演算結果を利用しない命令の数が、前記所定値サイクルの数よりも小さい場合に、実行スレッドの切り替えを要求することを指示するアクティブに設定され、
    前記命令フェッチ手段は、フェッチした命令の命令語内部に含む、前記スレッド切り替えフラグが、アクティブに設定されている場合には、実行スレッドの切り替えを要求する指示を前記スレッド選択手段に伝達し、
    前記スレッド選択手段は、該指示に基づいて、現在実行しているスレッドに対応するプログラムカウンタとは別のプログラムカウンタからのアドレスを選択して前記命令フェッチ手段に送出する
    ように機能させることを特徴とするプログラム。
  5. 前記マルチスレッドプロセッサを、
    スレッド毎に、スレッドが実行されないサイクル数をカウントするスレッドカウンタ、
    前記命令フェッチ手段がフェッチした命令をNOP命令に置き換えるNOP置換手段
    として更に機能させ、
    前記スレッド選択手段は、実行するスレッドを切り替える際に、前記スレッドカウンタのカウンタ値が0である実行待ちのスレッドを次に実行するスレッドとして選択し、前記スレッドカウンタのカウンタ値が0である実行待ちのスレッドが1つもない場合に、NOP命令への置き換えを前記NOP置換手段に要求する
    ように機能させることを特徴とする請求項4に記載のプログラム。
  6. 前記スレッドカウンタは、初期値として0を格納し、スレッドが切り替えられると、実行されていたスレッドに対応するスレッドカウンタは、実行されていたスレッドにおいて最後にフェッチされた命令のオペコードに基づいて決定される所定値を設定し、該所定値を、対応するスレッドが選択されていないサイクル毎に、0になるまでデクリメントし、
    前記最後にフェッチされた命令のオペコードに基づいて決定される所定値は、該命令の演算結果を得るのに必要な遅延サイクル数に基づく値である
    ように機能させることを特徴とする請求項5に記載のプログラム。
JP2009172204A 2009-07-23 2009-07-23 マルチスレッドプロセッサ及びプログラム Expired - Fee Related JP5573038B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009172204A JP5573038B2 (ja) 2009-07-23 2009-07-23 マルチスレッドプロセッサ及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009172204A JP5573038B2 (ja) 2009-07-23 2009-07-23 マルチスレッドプロセッサ及びプログラム

Publications (2)

Publication Number Publication Date
JP2011028440A JP2011028440A (ja) 2011-02-10
JP5573038B2 true JP5573038B2 (ja) 2014-08-20

Family

ID=43637135

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009172204A Expired - Fee Related JP5573038B2 (ja) 2009-07-23 2009-07-23 マルチスレッドプロセッサ及びプログラム

Country Status (1)

Country Link
JP (1) JP5573038B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61233838A (ja) * 1985-04-09 1986-10-18 Nec Corp 情報処理装置
JP3569014B2 (ja) * 1994-11-25 2004-09-22 富士通株式会社 マルチコンテキストをサポートするプロセッサおよび処理方法
US6330584B1 (en) * 1998-04-03 2001-12-11 Mmc Networks, Inc. Systems and methods for multi-tasking, resource sharing and execution of computer instructions
KR100498482B1 (ko) * 2003-01-27 2005-07-01 삼성전자주식회사 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법

Also Published As

Publication number Publication date
JP2011028440A (ja) 2011-02-10

Similar Documents

Publication Publication Date Title
KR101109029B1 (ko) 연산 장치
US7269712B2 (en) Thread selection for fetching instructions for pipeline multi-threaded processor
US5724565A (en) Method and system for processing first and second sets of instructions by first and second types of processing systems
US9286072B2 (en) Using register last use infomation to perform decode-time computer instruction optimization
US6061710A (en) Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
CN101681261B (zh) 运算处理装置及其控制方法
JP5081143B2 (ja) マルチスレッド化されたプロセッサ内で低消費電力モードを自動的に呼び出すための装置及び方法
US8650554B2 (en) Single thread performance in an in-order multi-threaded processor
JP5173714B2 (ja) マルチスレッドプロセッサ及びその割り込み処理方法
US8301870B2 (en) Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system
CN101238425B (zh) 使用低功率虚拟线程的软件指定的电源性能管理装置和方法
JP5666473B2 (ja) マルチスレッド式データ処理システム
JP2008525921A (ja) オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構
US20090249037A1 (en) Pipeline processors
CN101763251A (zh) 多线程微处理器的指令译码缓冲装置
CN108920190B (zh) 用于确定从其恢复指令执行的恢复点的装置和方法
US11366669B2 (en) Apparatus for preventing rescheduling of a paused thread based on instruction classification
WO2002006959A1 (en) Instruction fetch and dispatch in multithreaded system
EP2159691B1 (en) Simultaneous multithreaded instruction completion controller
JP2020091751A (ja) 演算処理装置および演算処理装置の制御方法
US20060259741A1 (en) Controlling out of order execution pipelines issue tagging
KR102379886B1 (ko) 벡터 명령 처리
JP5573038B2 (ja) マルチスレッドプロセッサ及びプログラム
JP5696210B2 (ja) プロセッサ及びその命令処理方法
JP5104862B2 (ja) 命令実行制御装置及び命令実行制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120606

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130918

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130924

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140408

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140514

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140616

R150 Certificate of patent or registration of utility model

Ref document number: 5573038

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees