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

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

Info

Publication number
JP4520788B2
JP4520788B2 JP2004222042A JP2004222042A JP4520788B2 JP 4520788 B2 JP4520788 B2 JP 4520788B2 JP 2004222042 A JP2004222042 A JP 2004222042A JP 2004222042 A JP2004222042 A JP 2004222042A JP 4520788 B2 JP4520788 B2 JP 4520788B2
Authority
JP
Japan
Prior art keywords
cache
thread
instruction
control unit
identifier
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
JP2004222042A
Other languages
English (en)
Other versions
JP2006040141A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004222042A priority Critical patent/JP4520788B2/ja
Priority to US10/981,772 priority patent/US7310705B2/en
Priority to EP04257247A priority patent/EP1622003B1/en
Priority to DE602004023386T priority patent/DE602004023386D1/de
Publication of JP2006040141A publication Critical patent/JP2006040141A/ja
Application granted granted Critical
Publication of JP4520788B2 publication Critical patent/JP4520788B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • G06F12/0859Overlapped cache accessing, e.g. pipeline with reload from main memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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, 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking

Description

本発明は、マルチスレッドプロセッサにおけるスレッドの切り替え制御に関する。
近年、コンピュータアーキテクチャの代表的なものとしては、複雑な処理を一命令で行なうCISC(Complex Instruction Set Computer)アーキテクチャの他、一命令中に実行する処理を簡素化したRISC(Reduced Instruction Set Computer)アーキテクチャ,複数の同時処理可能な命令をソフトウェアで1つの長い命令にまとめたVLIW(Very Long Instruction Word)アーキテクチャ等が知られている。
また、これらのアーキテクチャを実現するコンピュータの中央演算器装置(CPU;Central Processing Unit)における処理手法は、インオーダ実行型とアウトオブオーダ実行型との2つに大別することができる。
図23はインオーダ実行型の処理方法を説明するための図、図24はアウトオブオーダ実行型の処理方法を説明するための図である。インオーダ実行型は、図23に示すように、プログラム順に沿って命令処理を行なう手法であり、アウトオブオーダ実行型は、図24に示すように、命令間の依存関係を見て、依存関係のない命令ならばプログラム順を追い越してでも処理を行なう手法である。
そして、近年においては、一のプロセッサにおいて一のプログラム(スレッド)を実行するシングルスレッド処理の他に、物理的に一のプロセッサにおいて複数のスレッドを並列的に実行するマルチスレッドプロセッサ方式が注目されている。
図25(a),(b)はマルチスレッドプロセッサ方式を説明するための図であり、図25(a)はシングルスレッド処理を説明するための図、図25(b)はマルチスレッド処理を説明するための図である。なお、図25(b)においては、1つのCPUでA,Bの2つのプログラムを並列的に処理するマルチスレッド処理の例を示している。
一般に、CPUは、ソフトウェアから可視なレジスタや状態レジスタ(CPU状態レジスタ)に加え、加減算や乗算,除算、またメモリデータをレジスタに読み出すロード処理や、レジスタのデータをメモリに書き込むストア処理を実行する資源を有する。マルチスレッドプロセッサとは、1つのCPU内にソフトウェアから可視なレジスタを多重化し、別々なプログラムを実行するようにしながら、加減算などの命令実行資源を複数のプログラムで共有するものである。
上述の如きマルチスレッド処理を実現するための方式としては、複数のスレッドを同時に実行する、fine grained multithreading方式やSimultaneous multithreading(SMT;同時マルチスレッディング)方式(図26参照)の他、複数のスレッドを同時には実行せず、キャッシュミスのような事象が起きたときに別のスレッドに切り替えて実行する、coarse grained multithreading方式やVertical multithreading(VMT;時分割型マルチスレッディング)方式(図27参照)がある(特許文献1参照)。
図26はSMT方式を説明するための図、図27はVMT方式を説明するための図である。
VMT方式は、処理に長時間かかるキャッシュミスした命令処理を隠蔽することを狙い、キャッシュミスを検出したときに、メモリからキャッシュまでデータを持ってくる処理をキャッシュ制御部(図示省略)が実行している間に、メモリアクセス以外の処理について、実行部や制御部(ともに図示省略)において他のスレッドに切り替え、実行するというものである。又、このVMT方式においては、キャッシュミスが発生しにくいスレッドに関しては、一定時間経過した時点で他のスレッドに切り替えるようになっている。
図28はインオーダ方式におけるキャッシュミス時の処理を説明するための図、図29はアウトオブオーダ方式におけるキャッシュミス時の処理を説明するための図、図30はアウトオブオーダ方式における従来のスレッド切り替え手法を説明するための図である。
さて、従来、VMT方式は、前述したインオーダ型プロセッサ上でのみ実装されている。インオーダ実行するプロセッサでは、キャッシュミスの事象はプログラム順に起こり、又、キャッシュミスしたデータがメモリから応答するのも、プログラム順に行なわれる(図28参照)。一方、アウトオブオーダで実行をするプロセッサでは、メモリアクセスがプログラム内の命令順序に生じるわけではなく、図29に示すように、キャッシュミスの事象は、必ずしもプログラム順では起こらない。
例えば、図30に示すように、それぞれキャッシュミスが生じるスレッドX上の2つの命令A,Bがあり、スレッドX上の順番では命令A,命令Bの順であった場合において、命令Bの実行を命令Aよりも先に実行できる場合には、命令Aがキャッシュミスしたことを検出する前に、命令Bがキャッシュミスしたことを検出することになる。例えば、図30に示す例において、命令Bのキャッシュミスを検出して、命令Aがキャッシュミスをする前にスレッドXから別のスレッドYに切り替えてしまうと、スレッドXの実行を再開してから命令Aのキャッシュミスが発生する。
なお、インオーダ実行型のプロセッサでは、命令Bの実行開始が命令Aの実行開始を待って行なわれるので、キャッシュミスは命令A,命令Bの順番で生じる。
特開2002−163121号公報
しかしながら、従来のVMT方式のマルチスレッドプロセッサにおいては、キャッシュミスが生じる毎にスレッドの切り替えを行なっているので、スレッドの切り替え回数が多くなり非効率的であるという課題があり、スレッドの切り替えを効率良く行なうことにより、処理速度を短縮させたいという要求もある。
本発明は、このような課題に鑑み創案されたもので、スレッドの切り替えを効率良く行なうことにより、処理速度を短縮させることを目的とする。
このため、本発明のマルチスレッドプロセッサは、1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、該演算器により処理を実行する該スレッドを選択的に切り替えるとともに、該命令が前記複数のスレッドのうちいずれの該スレッドに属するものであるかを示すスレッド識別子を設定するマルチスレッド制御部と、該スレッド上の該命令に対して当該命令を特定する命令識別子を設定する命令制御部と、データを一時的に保持可能であり階層的にそなえられた複数のキャッシュと、前記複数のキャッシュへの該データの書き込み・読み出しを管理するキャッシュ制御部とをそなえ、前記複数のキャッシュのうち最下位階層の該キャッシュにおいて該命令にかかる要求についてキャッシュミスが生じた際に、当該キャッシュミスにかかる該要求に関して、該キャッシュ制御部が、当該命令にかかる該命令識別子および該スレッド識別子を該マルチスレッド制御部に通知し、該マルチスレッド制御部が、該キャッシュ制御部から通知された該命令識別子および該スレッド識別子に基づいて、該演算器により実行中の該スレッドを他のスレッドに切り替え、該キャッシュ制御部が、前記複数のキャッシュのうちキャッシュミスが生じた上位階層の該キャッシュから下位階層の該キャッシュに対して当該キャッシュミスにかかる要求を出す際に、該要求に対する前記下位階層のキャッシュからのデータ応答を格納する格納領域を確保して、当該格納領域を特定するためのキャッシュ要求識別子を設定するとともに、該命令が、前記スレッド上の命令であり、該演算器が演算処理を行なうために該データを格納するレジスタと当該マルチスレッドプロセッサ外部の外部記憶部との間において該データの授受を生じるデマンド要求である場合には、当該命令にかかる該スレッド識別子と該キャッシュ要求識別子と該命令識別子とを該マルチスレッド制御部に対して通知することを特徴としている。
また、該キャッシュ制御部が、該命令が、予め該外部記憶部から取得した該データを該レジスタに格納するプリフェッチ要求である場合に、前記マルチスレッド制御部に対して当該命令にかかる該スレッド識別子,該キャッシュ要求識別子および該命令識別子の通知を行なわないようにしてもよい。
さらに、該キャッシュ制御部が、該プリフェッチ要求が該外部記憶部に発行されてからの経過時間を監視し、該命令によってアクセスされる該データが、先行するプリフェッチ要求によって該外部記憶部から取得された該データと一致するとともに、該経過時間が所定時間以上経過した場合に、前記マルチスレッド制御部に対して当該命令にかかる該スレッド識別子,該キャッシュ要求識別子および該命令識別子の通知を行なわないようにしてもよい。
また、フェッチにかかる該命令の命令完了予定順序を管理するフェッチ順序管理部をそなえ、該キャッシュ制御部が、該フェッチ順序管理部における該命令完了予定順序が先頭の該デマンド要求に対して前記上位階層のキャッシュ上で割り当てられたキャッシュラインが、該スレッド上の順番は該デマンド要求よりも後続するものであって、該デマンド要求よりも先に該キャッシュミスが生じており該格納領域が確保されている該命令に対して前記上位階層のキャッシュ上で割り当てられたキャッシュラインと同一である場合に、該デマンド要求にかかるスレッド識別子および命令識別子を該命令の該キャッシュ要求識別子とともに、該マルチスレッド制御部に通知してもよい。
さらに、少なくとも、該キャッシュミスが生じた旨を示す情報,当該キャッシュミスにかかる該キャッシュ要求識別子,当該要求にかかるスレッド識別子および該命令識別子を相互に関連付けて登録可能なキャッシュミス情報格納部をそなえ、該マルチスレッド制御部が、該キャッシュミス情報格納部に格納された情報に基づいて、該キャッシュミスに関する情報を取得してもよい。
また、該キャッシュ制御部が、該キャッシュミス情報格納部に、少なくとも、該キャッシュミスが生じた旨を示す情報,該キャッシュ要求識別子,当該命令にかかるスレッド識別子および該命令識別子がそれぞれ格納された後に、該命令に対するデータ応答が該外部記憶部から行なわれる際に、該データ応答を示す情報と当該データ応答にかかる該キャッシュ要求識別子とを該マルチスレッド制御部に通知するとともに、該キャッシュミス情報格納部における該当する前記キャッシュミスが生じた旨を示す情報をリセットしてもよい。
さらに、該マルチスレッド制御部が、該キャッシュミス情報格納部において、前記キャッシュミスが生じた旨を示す情報が登録されるとともに、そのキャッシュ要求にかかる該命令識別子および該スレッド識別子が、該フェッチ順序管理部において管理される該命令完了予定順序が先頭の命令にかかる命令識別子およびスレッド識別子と一致した時に、該スレッドを切り替えてもよい。
また、 該キャッシュミス情報格納部が、該スレッドの切り替えの要因となった該キャッシュミスが生じた該要求に対して、該スレッドが休止状態に遷移する要因となったことを示す情報を格納するとともに、該キャッシュ制御部が、該キャッシュミスにかかるデータ応答が行なわれた際に、当該データ応答を示す信号とそのキャッシュ要求識別子とをマルチスレッド制御部に報告し、該マルチスレッド制御部が、該キャッシュミス情報格納部において、前記スレッドが休止状態に遷移する要因となったことを示す情報が格納されている場合に、該スレッドを切り替えて復帰させてもよい。
さらに、該命令がストア命令である場合に、そのストア対象のアドレスがキャッシュミスした場合には、該命令制御部が、前記ストア対象のアドレスにかかるデータ応答を待たずにストア命令を完了したものとして扱う突き放し制御を行なうとともに、該キャッシュ制御部が、該マルチスレッド制御部に対して、当該ストア命令についてのキャッシュミスにかかる通知を行なわないようにしてもよい。
本発明によれば、複数のスレッドを効率良く切り替えることにより処理時間を短縮することができるとともに、スレッドの切り替えによる外部記憶部へのデータ応答処理時間の隠蔽を効果的に行なうことができる利点がある。
以下、図面を参照して本発明の実施の形態を説明する。
図1は本発明の一実施形態としてのマルチスレッドプロセッサの構成を示すブロック図である。
本発明の一実施形態としてのマルチスレッドプロセッサであるCPU(Central Processing Unit)1は、例えば複数のスレッド(プログラム)を1以上の演算器15(図2参照)により並列的に実行可能なマルチスレッドプロセッサとして構成されている。
本CPU1は、図1に示すように、マルチスレッド制御部11,レジスタ13,実行部150,命令制御部16,TLB(論理アドレス・物理アドレス変換部)17,L1命令キャッシュ18,L1データキャッシュ19,L2キャッシュ20,L1命令キャッシュ制御部23,L1データキャッシュ制御部(キャッシュ制御部)24およびL2キャッシュ制御部(キャッシュ制御部)25をそなえて構成され、又、バス22を介してメインメモリ21と通信可能に接続されている。
命令制御部16は、1次命令キャッシュ18やL2キャッシュ20,メインメモリ21から命令を取得して実行部150により実行させるための制御を行なうものであり、スレッド上の各命令に対して、これらの命令を特定するための命令識別子(IID:Instruction Identifier)を設定(割り当て)するようになっている。
図2は本発明の一実施形態としてのマルチスレッドプロセッサ(CPU1)におけるIIDの設定手法を説明するための図である。この図2に示すように、本CPU1においては、0〜63までの64個のIIDを予め用意しておき、命令解読(デコード)時において、各命令に対して0から昇順に1,2,3,・・・とIIDを割り当てる(設定する)ようになっており、63まで割り当てを行なった後には、0に戻って再度昇順に割り当てを行なうようになっている。
また、完了(コミット)についても、同様に、0から昇順に行なうようになっている。例えば、IIDが10番の命令が実行終了していない場合には、IIDが11番の命令が実行終了していてもこの11番の完了処理は行なわずに、その結果をレジスタ13やメモリ21に書き込むことに留めておくようになっている。
そして、命令が完了すると、その命令に設定されたIIDは解放され他の命令に割り当てられるようになっている。これにより、命令の解読から実行、完了までを識別することができるようになっている。又、このIIDは、プロセッサ上で実行しているスレッドを切り替えて命令がキャンセルされた場合や、分岐予測ミスやトラップが生じた場合には無効化され、次に解読される命令列は0番から割り当てられていくようになっている。
また、L1データキャッシュ制御部24は、フェッチにかかる要求の命令完了予定順序を管理するフェッチキュー28(フェッチ順序管理部;図4参照)をそなえている。このフェッチキュー28は、複数(例えば16個)のデータ格納領域によって実現され、命令解読時にキャッシュ(L1命令キャッシュ18,L1データキャッシュ19,L2キャッシュ20)にアクセスする命令に対しプログラム順に従って順次確保されるようになっている。
さらに、命令制御部16は、ストア命令に対して、ストア対象のアドレスにかかるデータ応答を待たずにストア命令を完了したものとして扱う突き放し制御を行なうようになっている(詳細は後述)。
TLB(Translation Look-aside Buffer;論理アドレス・物理アドレス変換部)17は、論理アドレスから物理アドレスへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュであり、参照されたアドレスと変換情報の履歴を保存しておき、アドレス変換の高速化を実現するものである。
実行部(演算器)150は、レジスタウィンドウ12等を用いて演算等の種々の処理(命令処理)を行なうものであり、例えば種々の演算処理を実行する演算器(実行演算器)として機能するようになっている。
メインメモリ21は、CPU1の外部にそなえられたメモリであって、種々の命令やデータを格納するものであり、バス22を介してCPU1と通信可能に接続され、実行部150による処理・実行に必要とされる命令やデータがL1命令キャッシュ18,L1データキャッシュ19およびL2キャッシュ20に格納されていない場合(キャッシュミス時)には、CPU1はバス22等を介してこのメインメモリ21から命令やデータを読み出すようになっている。
L1命令キャッシュ18は、実行部150が実行する命令を格納するための1次キャッシュであり、L1データキャッシュ19は、実行部150が命令の実行に際して使用された各種データを格納するための1次キャッシュである。L2キャッシュ20は、各種命令やデータを格納するための2次キャッシュである。すなわち、本CPU1においては、複数のキャッシュ(L1命令キャッシュ18,L1データキャッシュ19,L2キャッシュ20)が階層的にそなえられている。
そして、本実施形態においては、CPU1にそなえられた複数のキャッシュのうち、CPU1の外部にそなえられるメインメモリ21に最も近い位置にそなえられたL2キャッシュ20が最下位階層のキャッシュであり、このL2キャッシュ20に対してL1命令キャッシュ18やL1データキャッシュ19が上位階層(上位側)のキャッシュである。
以下、本CPU1におけるスレッド切り替え手法を、L1データキャッシュ19およびL2キャッシュ20におけるキャッシュミスに着目して説明する。
なお、以下、L1データキャッシュ19を単にL1キャッシュという場合があり、又、L1データキャッシュ制御部24を単にL1キャッシュ制御部という場合がある。
L1データキャッシュ制御部(キャッシュ制御部)24は、L1データキャッシュ19に対応してそなえられており、L1データキャッシュ19へのデータの書き込み・読み出しを管理・制御するものである。又、L1命令キャッシュ制御部23は、L1命令キャッシュ18に対応してそなえられており、L1命令キャッシュ18へのデータ(命令データ)の書き込み・読み出しを管理・制御するものである。L2キャッシュ制御部(キャッシュ制御部)25は、L2キャッシュ20に対応してそなえられており、L2キャッシュ20へのデータ(命令データ,データ)の書き込み・読み出しを管理・制御するものである。
また、L1データキャッシュ制御部24は、L2キャッシュ20(L2キャッシュ制御部25)に出した要求に対する応答データを一時的に格納するバッファ(L1MIB;L1 ムーブ・イン・バッファ)26をそれぞれ複数個そなえており(図4等参照)、同様に、L2キャッシュ制御部25も、L2キャッシュミスによりメインメモリ21に出した要求に対する応答データを一時的に格納するバッファ(L2MIB;L2 ムーブ・イン・バッファ)27を複数個そなえている(図4等参照)。
L2キャッシュ制御部25は、L2キャッシュ20においてキャッシュミスが生じた場合には、メインメモリ21に出した要求に対する応答データを一旦格納するバッファ(L2MIB;L2 ムーブ・イン・バッファ)を確保してからメインメモリへの要求を発行するようになっている。
なお、これらのMIBについての詳細な説明は後述する。
図3はアウトオブオーダ方式のパイプラインを模式的に示す図である。ここで、アウトオブオーダ制御について、命令フェッチ,命令解読(デコード),実行および完了の4つのステージに分けて説明する。
まず、命令コードをプログラム順序に命令キャッシュからフェッチしてくる。次に、取得した命令コードを解読(デコード)ステージにおいて解読し、何を実行する命令か解読する。また自身の命令の入力データと前の命令の結果データと依存関係があるかを検出する。
命令コードの解読後は、実行ステージに移り、加減算等の演算やメモリアクセスを行なう。具体的には、解読済みの命令をフェッチキュー28に入れて、未実行の命令の結果と入力データに依存関係がない場合に、実行部(演算器)150に投入してメモリアクセスを行なう。依存関係がある場合には、入力データが前命令から出力されるまでフェッチキュー28に滞留させておく。
実行処理後の出力データに関しては、レジスタ13、メインメモリ21等のソフトから可視の資源の更新は、割り込み処理発生時などでのプログラム順序を保障しなければならないので、一時的なデータを格納するバッファに書き込んで保持する。レジスタ13を更新する演算の結果はレジスタ更新バッファ(Register Update Buffer;図示省略)に格納し、メインメモリ21を更新するデータはストアバッファ(図示省略)に格納する。
完了(コミット)ステージでは、プログラム順序(命令解読した順序)に従ってレジスタ13やメインメモリ21の更新を行なう。つまり、レジスタ更新バッファからレジスタ13に書き込みを行なったり、ストアデータバッファからメインメモリ21に書き込みを行なう。
次に、図4〜図11を参照しながら、本CPU1におけるL1キャッシュやL2キャッシュ20,メインメモリ21にアクセスするときの動作概要を説明する。なお、図4は本CPU1における命令制御部16,L1キャッシュ制御部およびL2キャッシュ制御部25間において授受される制御信号を説明するための図、図5は本CPU1においてロード命令に対してL1キャッシュヒットしたケースにかかるデータの流れを示す図、図6は本CPU1においてロード命令に対してL1キャッシュミスが生じ且つL2キャッシュヒットしたケースにかかるデータの流れを示す図、図7は本CPU1においてロード命令に対してL1キャッシュミスおよびL2キャッシュミスが生じたケースにかかるデータの流れを示す図、図8はL1プリフェッチ処理を説明するための図、図9はL2プリフェッチ処理を説明するための図、図10は本CPU1における命令制御部のキャンセル時のキャンセル範囲のイメージを示す図、図11は本CPU1におけるキャンセル時の処理を説明するための図である。
さて、L1キャッシュからのアクセスとして、プログラム上の命令によってメモリデータを必ずレジスタ13に書き込むロード命令や、レジスタ13内のデータを必ずメインメモリ21上に書き込むストア命令がある。以下、本実施形態においては、これらのロード命令やストア命令をデマンド要求と呼ぶ場合がある。
また、キャッシュミスが生じた場合にメインメモリ21から持って来るまでの時間を隠蔽するための手法として、レジスタ13には書き込まないが、あらかじめL1キャッシュやL2キャッシュ20上にデータを持ってきておくためのプログラムの命令であるプリフェッチ命令(ソフトウェアプリフェッチ)や、キャッシュミスするデータのアドレスの規則性をハードウェアによって検出し、プログラム上にプリフェッチ命令は指示されていない場合においてもメインメモリ21からデータを先読みするハードウェアプリフェッチ機能がある。
以下、本実施形態においては、上述した、プログラムのプリフェッチ命令とハードウェアによるプリフェッチ(ハードウェアプリフェッチ機能)とをあわせてL2キャッシュ20ではプリフェッチ要求と呼ぶ。又、このプリフェッチ要求には、L1キャッシュまでデータを持ってくるL1プリフェッチ(L1プリフェッチ処理;図8参照)と、L2キャッシュ20までしかデータを持ってこないL2プリフェッチ(L2プリフェッチ処理;図9参照)とがある。なお、プリフェッチ要求はキャッシュ制御部24で行なうため、このキャッシュミスの処理ペナルティは直接命令処理に影響しないようになっている。
L1データキャッシュ制御部24は、図4に示すように、メモリアクセスのためのアドレスの他、ロード命令やストア命令,プリフェッチ命令等の命令コードやIID等、実行に必要な種々の情報を命令制御部16から受け取り、複数のキャッシュアクセス命令をフェッチキュー28に入れる。又、同時にL1データキャッシュ19にアクセスして、キャッシュヒットしてロード命令であれば(図5の矢印(1)参照)、データをレジスタ13へ応答する(図5矢印(2)参照)。
フェッチキュー28は、命令解読時にキャッシュにアクセスする命令に対し、プログラム順で確保される。アドレス計算などのキャッシュアクセスに必要な情報は、プログラム順とは無関係に行なわれ、またL1データキャッシュ19からレジスタ13へのデータ応答も、プログラム順とは無関係にアウトオブオーダで行なわれる。フェッチキュー28は命令解読時に割り当てられた順で開放される。
L1キャッシュミス時には、図6〜図8に示すように、下位階層のL2キャッシュ20に対してデータ要求が行なわれる。ここで、デマンド要求やプリフェッチ要求には、それぞれ必ず有限数のMIB(L1MIB26,L2MIB27;格納領域)の中から1つが確保されるようになっている(図6〜図8の矢印(1)参照)。そして、データ応答があった場合には(図6の矢印(3)参照)、L1キャッシュ制御部24は、L1データキャッシュ19に書き込みを行なうとともに(図6の矢印(4)参照)、L1MIB26を開放し、更に、レジスタ13にデータ応答を行なう(図6の矢印(5)参照)。
L2キャッシュ制御部25は、L2キャッシュミスしたリクエストの後に、L2キャッシュ20にヒット(L2キャッシュヒット)する要求を受け付けた場合に、ヒットしたデータを先に返すような処理を行なうようになっている。つまり、L2キャッシュ制御部25からの応答は、L1データキャッシュ制御部24(L1データキャッシュ19)から見てアウトオブオーダで行なわれる。
L2キャッシュ20にヒットしたときには(図6の矢印(2)参照)、L2キャッシュ制御部25は、L1MIB26を割り当てられた要求に関しては、対応するL1MIB26を特定するための識別子(L1MIB−ID:キャッシュ要求識別子)とともにデータ応答する(図6の矢印(3)参照)。L2キャッシュミスした場合は(図7〜図9の矢印(2)参照)、メインメモリに出した要求に対する応答データを一旦格納するバッファ(L2MIB27)を確保してからメインメモリ21への要求を発行する(図7〜図9の矢印(3)参照)。メインメモリ21からのデータ応答(図7〜図9の矢印(4)参照)も、発行順序と別に図示しないメインメモリ制御部から返ってくる。
このようにして帰ってきたデータ応答はL2MIB27に格納された後に、L2キャッシュ制御部25によってL2キャッシュ20に書き込まれ、又、L2MIB27の解放が行なわれる。その後、データ応答は対応するL1MIB26に格納される(図7,図8の矢印(5)参照)。L1キャッシュ制御部24は、L1データキャッシュ19に書き込みを行なうとともに(図7,図8の矢印(6)参照)、L1MIB26を開放し、更に、レジスタ13にデータ応答を行なう(図7の矢印(7)参照)。
次にL2プリフェッチ要求について説明する。
L2プリフェッチ要求に関しては、図9に示すように、L1キャッシュ19への書き込みを行なわない。そのためL1MIB26を確保しない。そのため、L2プリフェッチ要求はL1MIB26がすべて占有された場合もL2キャッシュ20に要求を発行することが可能である。L2キャッシュ20にヒットしたときはL1データキャッシュ19へのデータ応答も行なわず何もしない。L2キャッシュミスした場合は、L2MIB27を確保して、メインメモリ21からデータを要求する。メインメモリ21にデータ応答が返ってきて、L2キャッシュ20に書き込みが完了してL2MIB27を開放する。
次にL1MIB26,L2MIB27の確保の仕方について述べる。
図9に示すように、L1キャッシュミスした要求がL2キャッシュ20にアクセスしようとするときに、先行するL1MIB26を確保した要求がL1データキャッシュ19の同一ラインであった場合は、後続のL1キャッシュミスした要求を一旦中止し、キャッシュラインが同一であったL1MIB26の開放をフェッチキュー28内で待つ。これは、同一キャッシュラインに対し、複数のキャッシュミスが発生すると、データ応答の際にどのウェイに書き込むか選択する回路が複雑になることや、実際に同一キャッシュラインにぶつかるケースが稀であることからこのような制御を行なっている。L1キャッシュ19にヒットした要求は、L1MIB26と同一キャッシュラインであっても通常のヒット時と同様に振舞う。
L2キャッシュミスした要求に関しても、メインメモリ21にアクセスしようとして、先行するL2MIB27を確保した要求がL2キャッシュ20の同一ラインであった場合は、後続のL2キャッシュミスした要求を一旦中止して、キャッシュラインが同一であったL2MIB27の開放をフェッチキュー28内で待つ。L2キャッシュにヒットした要求は、L2MIB27と同一キャッシュラインかどうかに関わらず、データ応答など通常のヒット時と同様に振舞う。
命令制御部16で、分岐予測ミスもしくはトラップ処理ルーチンに入るため命令実行をキャンセルした場合には、図10に示すように、フェッチキュー28にある情報を無効化する。つまり、レジスタへの書き込みは行なわないようになっている。しかし、キャンセル時にすでにL1MIB26を確保してあれば、L2キャッシュアクセスを起動したデマンド要求、及びL1プリフェッチ要求に関しては、L1キャッシュへの書き込みまで行なう。また、L2プリフェッチに関しては、L2キャッシュ20への書き込みまで行なう
(図11参照)。
マルチスレッド制御部11は、実行部150による処理対象のスレッドを選択的に切り替えるものである。なお、このマルチスレッド制御部11は、実行部150(演算器)により処理を実行するスレッドを識別するための識別子(実行スレッド識別子)に基づいて、レジスタ(レジスタウィンドウ)13と実行部150との間におけるデータ転送を制御するようになっている。
また、マルチスレッド制御部11は、本CPU1において並列的に実行される複数のスレッドをそれぞれ識別するための識別子(スレッド識別子)を設定するようになっており、これらのスレッド上の各命令に対して、その命令がどのスレッドに属するものであるかを示す識別子(スレッド識別子)を設定するようになっている。
そして、マルチスレッド制御部11は、L1命令キャッシュ制御部23やL1データキャッシュ制御部24から通知された命令識別子やスレッド識別子に基づいて、次に命令完了すべき命令にキャッシュミスが生じた場合に、スレッドを切り替えるよう制御するようになっている。
図12は本CPU1におけるマルチスレッド制御部11からL1データキャッシュ制御部24やL2キャッシュ制御部25へのマルチスレッド制御用信号の流れを示す図、図13は本CPU1におけるL2キャッシュミス時のマルチスレッド制御部11への報告手法を説明するための図である。
マルチスレッド制御部11は、図12に示すように、走行しているスレッドの識別子(スレッド識別子)をL1データキャッシュ制御部24およびL2キャッシュ制御部25に送るようになっている。そして、L1データキャッシュ制御部24は、L2キャッシュ要求でL1MIB26を確保する際に、その命令(要求)のスレッド識別子をL1MIB26に登録するようになっている。更に、例えば、命令がデマンド要求であれば、その要求がデマンドであることを示すフラグやIID(命令識別子)も登録する。
L2キャッシュ制御部25は、図13に示すように、L2キャッシュミスを検出すると、L1MIB26を確保しているデマンド要求やL1プリフェッチ要求に対して、キャッシュアクセス要求リクエスト識別子として、L1MIB−ID(L1MIB番号;キャッシュ要求識別子)と、L2キャッシュミスしたことを示すフラグとを、その命令にかかるスレッドIDとともにL1データキャッシュ制御部24に送信する。
一方、L1データキャッシュ制御部24では、図13に示すように、L2キャッシュミスしたL1MIB26に対して、L2キャッシュしたことを示すフラグをセットする。更に、例えば、L1MIB26にかかる命令がデマンド要求であった場合には、マルチスレッド制御部11に対して、スレッドID,IID,L1MIB−IDおよびL2キャッシュミスフラグを送信するようになっている。
すなわち、L1データキャッシュ制御部24は、命令が、スレッド上の命令であり、演算部150が演算処理を行なうためにデータを格納するレジスタとそのマルチスレッドプロセッサ外部のメインメモリ(外部記憶部)21との間においてデータの授受を生じるデマンド要求である場合に、その命令にかかるスレッド識別子とキャッシュ要求識別子と命令識別子とをマルチスレッド制御部11に対して通知するようになっている。
なお、プリフェッチ要求に関しては、キャッシュミスするようなデマンドリクエストのペナルティを隠蔽する目的で発行されるものであり、又、キャッシュに書き込む操作はキャッシュ制御部で行ない、メインメモリ21からのデータを待つ場合も命令制御部16からはペナルティが見えない。そのためL2キャッシュミスの報告(スレッドID,IID,L1MIB−IDの通知)は命令制御部16まで行なわないようにする。
また、ストア命令に対しては、ストア対象のアドレスがキャッシュミスした場合であっても、命令制御部16は、L2データキャッシュ19もしくはメインメモリ21からの該当アドレスのデータ応答を待たずにストア命令を完了する突き放し制御を行なっている。
図14は本CPU1におけるストア命令の突き放し制御を説明するためのパイプライン図である。この突き放し制御は、命令制御部16がストア命令を完了するときに、キャッシュ制御部24がストアデータを専用のバッファ(図示省略)に格納し、データを書き込むべきアドレスのデータがL1データキャッシュ19に返ってきたときに、L1データキャッシュ制御部24がデータ更新を行なう処理である。
すなわち、バックグラウンドにおいて(1)ストアデータをバッファに一時的に格納し、キャッシュミスしたデータを待ち、(2)データ応答が行なわれると、(3)応答データにストアデータの変更を与え、キャッシュに書き込むのである。
ストア命令のキャッシュミスによるペナルティは命令制御部16から直接見えず、最下位階層(本実施形態ではL2)でキャッシュミスを検出するときにはIIDはすでに更新されている。
そして、デマンド要求であるストア命令に対しては、L2キャッシュミスの報告を抑止している。具体的には、L1データキャッシュ制御部24が、L1MIB26を確保する時にその要求がストア命令であるかを示すフラグをL1MIB26にセットし、このフラグがセットされている場合はマルチスレッド制御部11への報告を抑止するようになっている。
図15は本CPU1におけるL2キャッシュミス時における処理を説明するための図である。
L2プリフェッチで、L2MIB27を確保しているときに、同一キャッシュラインに後続のデマンド要求またはL1プリフェッチ要求がきて、L2キャッシュミスが生じた場合は、前述のとおり先行して発行されたプリフェッチがL2MIB27を開放するまで、メインメモリまで要求を発行することができないが、後続のL1MIB26を確保した命令にL2キャッシュミスが発生した旨をL1キャッシュに報告するようになっている。
さらに、プリフェッチで応答されるデータが後続の要求のデータとして用いられる場合には、図15に示すように、先のプリフェッチがL2MIB27を確保してからの経過時間をタイマー(L2MIBx−Timer)等を用いて監視し、ある一定時間経過している場合は、もうすぐメインメモリからの応答があるとして、L2キャッシュミスを報告しない制御を可能としている。
すなわち、L2キャッシュ制御部25は、プリフェッチ要求がメインメモリ21に発行されてからの経過時間を監視し、その命令によってアクセスされるデータが、先行するプリフェッチ要求によってメインメモリ21から取得されたデータと一致するとともに、経過時間が所定時間以上経過した場合に、マルチスレッド制御部11に対して当該命令にかかるスレッドID,L1MIB−IDおよびIIDにかかる通知を行なわないようになっている。
図16は本CPU1におけるマルチスレッド制御部11への報告手法を説明するための図である。
フェッチキュー28において先頭の(一番古い)デマンド要求(便宜上、デマンド要求Aという)に対してL1データキャッシュ19上で割り当てられたキャッシュラインが、プログラム順序上ではデマンド要求Aよりも後続するデマンド要求もしくはL1プリフェッチ要求であって、デマンド要求Aよりも先にL1キャッシュミスが生じL1MIB26が確保されてL2キャッシュ20に発行されたもの(以下、要求Bとする)に割り当てられたキャッシュラインと同一(図16の例ではキャッシュラインX)であり、その要求BにかかるL1MIB26にL2ミスフラグがセットされている状態を考える。
このような状態において、L1データキャッシュ制御部24は、L1MIB26に登録されているスレッド識別子およびIIDに代えて、デマンド要求Aにかかるスレッド識別子およびIIDを要求BのL1MIB−ID とともに、スレッド制御部11に通知するようになっている。
すなわち、先にL1MIB26を確保したものがデマンド要求の場合には、マルチスレッド制御部11に対し、同じL1MIB−IDに対して異なるIIDで2回L2キャッシュミスしたと報告することになる。後述するように、L2キャッシュミスによるスレッドの切り替えは、キャッシュミスした要求のうちプログラム順で一番古い命令が、次に完了するべき状態になったときに起こすので、フェッチキュー28のなかで一番古い要求を優先させて報告するのである。
これらの方式により、先行して出したL1プリフェッチ、またはプログラム順序では後のデマンド要求が、アウトオブオーダ処理のために先に発行されてキャッシュラインがぶつかって、L2キャッシュ20に発行されない場合も、一番古いフェッチキュー28の要求が他のL2キャッシュミス処理を待つことになることを検出し、マルチスレッド制御部11に報告する。
マルチスレッド制御部11においては、フェッチキュー28において先頭のデマンド要求AでL2キャッシュミスが生じたとみなして、スレッド切り替えを行なう。これにより、要求Bにかかるデータ応答待ちの時間を他のスレッドの処理に回すことができるのである。
すなわち、L1データキャッシュ制御部24は、先行するデマンド要求、もしくはL1プリフェッチ要求のL1キャッシュミスでL1データキャッシュ19までデータ応答を待つ間、後続のデマンド要求、もしくはL1プリフェッチ要求でL1データキャッシュ19の同一キャッシュラインでキャッシュミスした場合に限り、L2キャッシュ20への要求を出せないL1キャッシュ制御部24において、後続のデマンド要求がプログラム順で最も古いキャッシュ要求である場合、且つ先行するL2キャッシュ要求がL2キャッシュミスを起こしている場合、後続のデマンド要求がL2キャッシュミス処理を待つと判断して、スレッド識別子と命令識別子に、先行する同一キャッシュラインの要求のキャッシュ要求識別子を、マルチスレッド制御部11に報告するのである。
図17は本CPU1のマルチスレッド制御部11におけるL2キャッシュミス情報バッファの例を示す図である。
本CPU1においては、マルチスレッド制御部11は、図17に示すようなL2キャッシュミス情報バッファ29をL1MIB26の数と同数(図17に示す例においては、L1MIB0〜L1MIB3の4つ)そなえて構成されている。L2キャッシュミス情報バッファ29は、L2キャッシュミスが生じたことを示すフラグ(L2MISS)と、そのスレッドIDとIIDとをL1MIB26に関連付けて登録することにより構成されている。すなわち、L2キャッシュミス情報バッファ29は、L2キャッシュミスしたことを報告されたIIDを保持するバッファであって、L1MIBの数だけそなえられたものである。
マルチスレッド制御部11においては、L1データキャッシュ制御部24からIIDと同時に送られてくるL1MIB−IDを解読して、対応するL2キャッシュミス情報バッファにIIDを書き込み、かつL2キャッシュミスのフラグをセットするようになっている。又、同じL1MIBに対して複数回報告があった場合は、常に上書きするようにしている。
なお、L2キャッシュミス情報バッファ29は、以下の式(1),(2)で表わされる論理でセットされる。
SET - MIB(N) - L2MISS = L2MISS & MIB - ID - EQ - N ・・・(1)
RESET - MIB(N) - L2MISS
= (L2MISS - DATA - RETURN & MIB - ID - EQ - N) or CANCEL ・・・(2)
なお、NはL1MIB−ID(L1MIBの番号)である。
図18は本CPU1におけるL2キャッシュへのデータ応答時の処理を示す図である。L2キャッシュミスした命令(要求)のデータが、メインメモリ21から応答されたときには、L2キャッシュ制御部25からL2キャッシュミスデータの応答を示すフラグ(L2ミスデータリターン)と、これに対応する要求識別子L1MIB−ID(L1MIB番号)とがL1データキャッシュ制御部24に送信される。L1データキャッシュ制御部24はその信号をそのままスルーでマルチスレッド制御部11に送信する。
マルチスレッド制御部11は、この信号を受け付けると、対応するL2キャッシュミス情報バッファ29にあるL2キャッシュミスのフラグをリセットする。
また、分岐予測ミスやトラップ処理などに入って、L2キャッシュミスしたリクエストがキャンセルされる場合には、キャンセルされたリクエストでスレッドの切り替え処理を行なわない。そのためL2キャッシュミス情報バッファ(L1MIBスレッド切り替え制御バッファ)29のL2キャッシュミスフラグがすでにオン状態の場合はこれをリセットする。またL1キャッシュ部では、キャンセルを受け付けた後、それまでに受け付けたキャッシュミスをキャッシュ要求のL2キャッシュミスをマルチスレッド制御部11に報告しないようにしている。
図19は本CPU1におけるL2キャッシュミスによるスレッド切り替え手法を説明するための図である。
マルチスレッド制御部11は、図19に示すように、命令完了(コミット)の制御部の次にコミットするべき命令のIIDを監視し、L2キャッシュミス情報バッファ29のL2キャッシュミスフラグがオン、かつバッファ内に保持しているIIDと一致したときに、走行中のスレッドから他のスレッドに切り替えるようになっている。
すなわち、マルチスレッド制御部11は、次に命令完了すべき命令に関してキャッシュミスが生じた場合に、スレッドの切り替えを行なうのである。
また、このとき、スレッド切り替えトリガーとなったL1MIB26のキャッシュ要求であることを示すフラグをMIBスレッド切り替え制御バッファにセットする。又、この切り替えトリガーとなったことを示すフラグは、スレッドが復帰したときにリセットする。
図20は本CPU1におけるマルチスレッド制御部11によるスレッド切り替え手法を示す概念図である。この図20に示すように、L2キャッシュ制御部25からミスデータリターンかつMIB−IDを受け付けたときに、切り替えトリガーフラグがオンであれば、キャッシュミスした命令の処理を再開できるものとしてスレッドを切り替え、L2キャッシュミス情報バッファ29の持つスレッドIDのスレッドを復帰させる。
図21は本CPU1におけるスレッド切り替えのタイミングを示す図、図22は本CPU1におけるスレッド再開時の処理を示す図である。
図21に示すように、本発明の一実施形態としてのCPU1によれば、VMT方式において、命令A,BがスレッドXの命令であったとして、命令Bのキャッシュミスが発生してもスレッドXを切り替えずに、その前の命令Aがキャッシュミスしてメインメモリ21へのメモリアクセスを開始するのを待って切り替えることにより、その後スレッドXを再開したときに命令A,Bのデータをメモリから持ってくる処理に対して隠蔽効果が得られる。
なお、図22に示すように、スレッドの復帰後は、L1データキャッシュ19内に既にデータがある場合は、L1キャッシュヒットとして命令は処理される。
またL1データキャッシュ19でのL1MIB26が確保できずに、フェッチキュー28のプログラム順で一番古い要求となって切り替わっていた場合は、同一のキャッシュラインでL1MIB26を確保していた命令が完了したことの報告となっているので、スレッドの復帰後にL1MIB26を確保してL2キャッシュ20に要求を出すことができることになる。
データ応答の報告は、スレッドがすでに復帰している場合は、切り替えトリガーフラグがリセットされており、データリターンを示す信号は無視されるようになっている。
さて、VMT方式においては、並列的に実行するスレッドの組み合わせにより処理時間にばらつきが発生してしまう場合がある。例えば、2つのスレッドを走行させる場合に、組み合わせとして、両スレッドが同種(つまり、キャッシュミスするスレッド同士やキャッシュミスしないスレッド同士)のものである場合や、異なる性質のキャッシュミスするスレッドとキャッシュミスしないスレッド等のパターンが考えられる。
キャッシュミスするもの同士、もしくはしないもの同士の場合には、両スレッドが同じように切り替えを行なうのでスレッド処理のばらつきが生じにくいが、例えば、一方がキャッシュミスして他方がキャッシュミスしない組み合わせの場合には、キャッシュミスするスレッドはすぐ休止状態に移り、キャッシュミスしない方のスレッドは一定時間目一杯走行することになる。
また、キャッシュミスしたデータの応答があって、キャッシュミス後の処理を再開できる場合においても、キャッシュミスしないスレッドから切り替わるまでの間、処理を待つ必要があるので、キャッシュミスするスレッドの処理時間が大きく延びてしまう。
本発明の一実施形態としてのマルチスレッドプロセッサ(CPU1)においては、スレッド切り替えの要因になったキャッシュ要求が、メインメモリ21からの応答により処理を再開できるとしてスレッドを復帰させることで、キャッシュミスしないパターンのプログラムとのキャッシュミスするプログラムとの組み合わせであっても、キャッシュミスするプログラムの処理時間が大きく延びることを緩和できる。
本CPU1においては、デマンド要求だけでなくプリフェッチ要求も扱うようになっているが、スレッドの切り替え要因となるキャッシュミスの報告を、必ずしもすべてのキャッシュミスを報告するのではなく、キャッシュミスの要因によって選択して報告することにより、効果的にスレッドの切り替えを行なうことができる。
そして、キャッシュミスが、必ずしもプログラム命令順に行なわれずに処理を行ない、プリフェッチ処理を備え、ストア命令の突き放し処理を行なうマルチスレッドプロセッサにおいて、メインメモリ21へのデータ応答処理に起因する命令実行及び完了を阻害することの隠蔽を、スレッド切り替えによって効果的に行なうことができる。
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態においては、1次キャッシュ(L1命令キャッシュ18,L1データキャッシュ19)と2次キャッシュ(L2キャッシュ20)とからなる2階層のキャッシュ(キャッシュ)をそなえたCPU1について説明しているが、これに限定されるものではなく、3次(3階層)以上のキャッシュをそなえてもよい。
また、上述した実施形態においては、メインメモリ21とCPU1とは、CPU1の内部バス(図示省略)に比較してデータ転送速度が遅いバス22を介して接続されており、このバス22の内側(CPU1側)であって、このバス22を介してメインメモリ21に接続されているL2キャッシュ20が最下位階層のキャッシュとして認定されている。従って、例えば、CPU1の内部バスと遜色の無いデータ転送速度を有する通信手段を介して他の記憶装置(メモリ)が接続されている場合には、その記憶装置についても階層的にそなえられたキャッシュとして含めてもよい。
そして、CPU1の内部バスと比較してデータ転送速度が大きく落ちる通信手段(バス等)を介して接続される記憶装置が外部記憶部として扱われるのである。
なお、本発明の各実施形態が開示されていれば、本発明を当業者によって実施・製造することが可能である。
そして、本発明は、以下に示すように要約することができる。
(付記1) 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、
該演算器により処理を実行する該スレッドを選択的に切り替えるとともに、該命令が前記複数のスレッドのうちいずれの該スレッドに属するものであるかを示すスレッド識別子を設定するマルチスレッド制御部と、
該スレッド上の該命令に対して当該命令を特定する命令識別子を設定する命令制御部と、
データを一時的に保持可能であり階層的にそなえられた複数のキャッシュと、
前記複数のキャッシュへの該データの書き込み・読み出しを管理するキャッシュ制御部とをそなえ、
前記複数のキャッシュのうち最下位階層の該キャッシュにおいて該命令にかかる要求についてキャッシュミスが生じた際に、当該キャッシュミスにかかる該要求に関して、該キャッシュ制御部が、当該命令にかかる該命令識別子および該スレッド識別子を該マルチスレッド制御部に通知し、
該マルチスレッド制御部が、該キャッシュ制御部から通知された該命令識別子および該スレッド識別子に基づいて、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴とする、マルチスレッドプロセッサ。
(付記2) 該キャッシュ制御部が、
前記複数のキャッシュのうちキャッシュミスが生じた上位階層の該キャッシュから下位階層の該キャッシュに対して当該キャッシュミスにかかる要求を出す際に、該要求に対する前記下位階層のキャッシュからのデータ応答を格納する格納領域を確保して、当該格納領域を特定するためのキャッシュ要求識別子を設定するとともに、
該命令が、前記スレッド上の命令であり、該演算器が演算処理を行なうために該データを格納するレジスタと当該マルチスレッドプロセッサ外部の外部記憶部との間において該データの授受を生じるデマンド要求である場合には、当該命令にかかる該スレッド識別子と該キャッシュ要求識別子と該命令識別子とを該マルチスレッド制御部に対して通知することを特徴とする、付記1記載のマルチスレッドプロセッサ。
(付記3) 該キャッシュ制御部が、
該命令が、予め該外部記憶部から取得した該データを該レジスタに格納するプリフェッチ要求である場合に、前記マルチスレッド制御部に対して当該命令にかかる該スレッド識別子,該キャッシュ要求識別子および該命令識別子の通知を行なわないことを特徴とする、付記2記載のマルチスレッドプロセッサ。
(付記4) 該キャッシュ制御部が、
該プリフェッチ要求が該外部記憶部に発行されてからの経過時間を監視し、該命令によってアクセスされる該データが、先行するプリフェッチ要求によって該外部記憶部から取得された該データと一致するとともに、該経過時間が所定時間以上経過した場合に、前記マルチスレッド制御部に対して当該命令にかかる該スレッド識別子,該キャッシュ要求識別子および該命令識別子の通知を行なわないことを特徴とする、付記2又は付記3記載のマルチスレッドプロセッサ。
(付記5) フェッチにかかる該命令の命令完了予定順序を管理するフェッチ順序管理部をそなえ、
該キャッシュ制御部が、
該フェッチ順序管理部における該命令完了予定順序が先頭の該デマンド要求に対して前記上位階層のキャッシュ上で割り当てられたキャッシュラインが、該スレッド上の順番は該デマンド要求よりも後続するものであって、該デマンド要求よりも先に該キャッシュミスが生じており該格納領域が確保されている該命令に対して前記上位階層のキャッシュ上で割り当てられたキャッシュラインと同一である場合に、
該デマンド要求にかかるスレッド識別子および命令識別子を該命令の該キャッシュ要求識別子とともに、該マルチスレッド制御部に通知することを特徴とする、付記2〜付記4のいずれか1項に記載のマルチスレッドプロセッサ。
(付記6) 少なくとも、該キャッシュミスが生じた旨を示す情報,当該キャッシュミスにかかる該キャッシュ要求識別子,当該要求にかかるスレッド識別子および該命令識別子を相互に関連付けて登録可能なキャッシュミス情報格納部をそなえ、
該マルチスレッド制御部が、該キャッシュミス情報格納部に格納された情報に基づいて、該キャッシュミスに関する情報を取得することを特徴とする、付記2〜付記4のいずれか1項に記載のマルチスレッドプロセッサ。
(付記7) 少なくとも、該キャッシュミスが生じた旨を示す情報,当該キャッシュミスにかかる該キャッシュ要求識別子,当該要求にかかるスレッド識別子および該命令識別子を相互に関連付けて登録可能なキャッシュミス情報格納部をそなえ、
該マルチスレッド制御部が、該キャッシュミス情報格納部に格納された情報に基づいて、該キャッシュミスに関する情報を取得することを特徴とする、付記5記載のマルチスレッドプロセッサ。
(付記8) 該キャッシュミスの発生に伴って下位階層の該キャッシュもしくは該外部記憶部に出した要求に対する応答データを一時的に格納可能なムーブ・イン・バッファを
特定するための情報を、該キャッシュ要求識別子として用いることを特徴とする、付記7記載のマルチスレッドプロセッサ。
(付記9) 該キャッシュ制御部が、
該キャッシュミス情報格納部に、少なくとも、該キャッシュミスが生じた旨を示す情報,該キャッシュ要求識別子,当該命令にかかるスレッド識別子および該命令識別子がそれぞれ格納された後に、該命令に対するデータ応答が該外部記憶部から行なわれる際に、該データ応答を示す情報と当該データ応答にかかる該キャッシュ要求識別子とを該マルチスレッド制御部に通知するとともに、該キャッシュミス情報格納部における該当する前記キャッシュミスが生じた旨を示す情報をリセットすることを特徴とする、付記7又は付記8記載のマルチスレッドプロセッサ。
(付記10) 該キャッシュミス情報格納部が、少なくとも、該キャッシュミスが生じた旨を示す情報,当該要求にかかるスレッド識別子および該命令識別子を相互に関連付けて登録可能であり、該ムーブ・イン・バッファ毎にそれぞれそなえられたキャッシュミス情報バッファとして構成されることを特徴とする、付記8又は付記9記載のマルチスレッドプロセッサ。
(付記11) 該マルチスレッド制御部が、
該キャッシュミス情報格納部において、前記キャッシュミスが生じた旨を示す情報が登録されるとともに、そのキャッシュ要求にかかる該命令識別子および該スレッド識別子が、該フェッチ順序管理部において管理される該命令完了予定順序が先頭の命令にかかる命令識別子およびスレッド識別子と一致した時に、該スレッドを切り替えることを特徴とする、付記7〜付記10のいずれか1項に記載のマルチスレッドプロセッサ。
(付記12) 該マルチスレッド制御部が、
実行中で未完了の該命令をキャンセルするときに該キャッシュミスが生じた場合に、該キャッシュミス情報格納部における該当するキャッシュ要求に対する前記キャッシュミスが生じた旨を示す情報をリセットすることを特徴とする、付記7〜付記11のいずれか1項に記載のマルチスレッドプロセッサ。
(付記13) 該キャッシュミス情報格納部が、該スレッドの切り替えの要因となった該キャッシュミスが生じた該要求に対して、該スレッドが休止状態に遷移する要因となったことを示す情報を格納することを特徴とする、付記7〜付記12のいずれか1項に記載のマルチスレッドプロセッサ。
(付記14) 該スレッドが切り替わって復帰したときに、該キャッシュミス情報格納部における前記スレッドが休止状態に遷移する要因となったことを示す情報をリセットすることを特徴とする、付記13記載のマルチスレッドプロセッサ。
(付記15) 該キャッシュ制御部が、該キャッシュミスにかかるデータ応答が行なわれた際に、当該データ応答を示す信号とそのキャッシュ要求識別子とをマルチスレッド制御部に報告し、
該マルチスレッド制御部が、該キャッシュミス情報格納部において、前記スレッドが休止状態に遷移する要因となったことを示す情報が格納されている場合に、該スレッドを切り替えて復帰させることを特徴とする、付記13又は付記14記載のマルチスレッドプロセッサ。
(付記16) 該命令がストア命令である場合に、そのストア対象のアドレスがキャッシュミスした場合には、
該命令制御部が、前記ストア対象のアドレスにかかるデータ応答を待たずにストア命令を完了したものとして扱う突き放し制御を行なうとともに、
該キャッシュ制御部が、該マルチスレッド制御部に対して、当該ストア命令についてのキャッシュミスにかかる通知を行なわないことを特徴とする、付記1〜付記15のいずれか1項に記載のマルチスレッドプロセッサ。
(付記17) 該キャッシュ制御部が、
実行中で未完了の該命令をキャンセルするに際して、当該命令に関して該キャッシュミスが生じた場合においても、該キャッシュミスが生じたこと,該キャッシュ要求識別子,該スレッド識別子および該命令識別子のマルチスレッド制御部への通知を行なわないことを特徴とする、付記1〜付記16のいずれか1項に記載のマルチスレッドプロセッサ。
(付記18) 該キャッシュ制御部が、前記複数のキャッシュに対応してそれぞれそなえられることを特徴とする、付記1〜付記17のいずれか1項に記載のマルチスレッドプロセッサ。
(付記19) 複数のスレッドを1以上の演算器により並列的に実行可能なマルチスレッドプロセッサにおけるスレッド切り替え制御方法であって、
命令が前記複数のスレッドのうちいずれの該スレッドに属するものであるかを示すスレッド識別子を設定するスレッド識別子設定ステップと、
該スレッド上の該命令に対して当該命令を特定する命令識別子を設定する命令識別子設定ステップと、
データを一時的に保持可能であり階層的にそなえられた複数のキャッシュへの該データの書き込み・読み出しを管理するキャッシュ制御ステップと、
前記複数のキャッシュのうち最下位階層の該キャッシュにおいて該命令にかかる要求についてキャッシュミスが生じた際に、当該キャッシュミスにかかる該要求に関して、当該要求にかかる該命令識別子および該スレッド識別子に基づいて、該演算器により実行中の該スレッドを他のスレッドに切り替える切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。
本発明の一実施形態としてのマルチスレッドプロセッサの構成を示すブロック図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるIIDの設定手法を説明するための図である。 アウトオブオーダ方式のパイプラインを模式的に示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおける命令制御部,L1キャッシュ制御部およびL2キャッシュ制御部間において授受される制御信号を説明するための図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおいてロード命令に対してL1キャッシュヒットしたケースにかかるデータの流れを示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおいてロード命令に対してL1キャッシュミスが生じ且つL2キャッシュヒットしたケースにかかるデータの流れを示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおいてロード命令に対してL1キャッシュミスおよびL2キャッシュミスが生じたケースにかかるデータの流れを示す図である。 L1プリフェッチ処理を説明するための図である。 L2プリフェッチ処理を説明するための図である。 本CPUにおける命令制御部のキャンセル時のキャンセル範囲のイメージを示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるキャンセル時の処理を説明するための図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるマルチスレッド制御部からL1データキャッシュ制御部やL2キャッシュ制御部へのマルチスレッド制御用信号の流れを示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるL2キャッシュミス時のマルチスレッド制御部への報告手法を説明するための図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるストア命令の突き放し制御を説明するためのパイプライン図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるL2キャッシュミス時における処理を説明するための図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるマルチスレッド制御部への報告手法を説明するための図である。 本発明の一実施形態としてのマルチスレッドプロセッサのマルチスレッド制御部11におけるL2キャッシュミス情報バッファの例を示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるL2キャッシュへのデータ応答時の処理を示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるL2キャッシュミスによるスレッド切り替え手法を説明するための図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるマルチスレッド制御部によるスレッド切り替え手法を示す概念図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるスレッド切り替えのタイミングを示す図である。 本発明の一実施形態としてのマルチスレッドプロセッサにおけるスレッド再開時の処理を示す図である。 インオーダ実行型の処理方法を説明するための図である。 アウトオブオーダ実行型の処理方法を説明するための図である。 (a),(b)はマルチスレッドプロセッサ方式を説明するための図である。 SMT方式を説明するための図である。 VMT方式を説明するための図である。 インオーダ方式におけるキャッシュミス時の処理を説明するための図である。 アウトオブオーダ方式におけるキャッシュミス時の処理を説明するための図である。 アウトオブオーダ方式における従来のスレッド切り替え手法を説明するための図である。
符号の説明
1 CPU(マルチスレッドプロセッサ)
11 マルチスレッド制御部
13 レジスタ
16 命令制御部
17 TLB
18 L1命令キャッシュ
19 L1データキャッシュ
20 L2キャッシュ
21 メインメモリ
22 バス
23 L1命令キャッシュ制御部(キャッシュ制御部)
24 L1データキャッシュ制御部(キャッシュ制御部)
25 L2キャッシュ制御部(キャッシュ制御部)
26 L1MIB(格納領域)
27 L2MIB(格納領域)
28 フェッチキュー(フェッチ順序管理部)
29 L2キャッシュミス情報バッファ
150 実行部(演算器)

Claims (9)

  1. 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、
    該演算器により処理を実行する該スレッドを選択的に切り替えるとともに、該命令が前記複数のスレッドのうちいずれの該スレッドに属するものであるかを示すスレッド識別子を設定するマルチスレッド制御部と、
    該スレッド上の該命令に対して当該命令を特定する命令識別子を設定する命令制御部と、
    データを一時的に保持可能であり階層的にそなえられた複数のキャッシュと、
    前記複数のキャッシュへの該データの書き込み・読み出しを管理するキャッシュ制御部とをそなえ、
    前記複数のキャッシュのうち最下位階層の該キャッシュにおいて該命令にかかる要求についてキャッシュミスが生じた際に、当該キャッシュミスにかかる該要求に関して、該キャッシュ制御部が、当該命令にかかる該命令識別子および該スレッド識別子を該マルチスレッド制御部に通知し、
    該マルチスレッド制御部が、該キャッシュ制御部から通知された該命令識別子および該スレッド識別子に基づいて、該演算器により実行中の該スレッドを他のスレッドに切り替え
    該キャッシュ制御部が、
    前記複数のキャッシュのうちキャッシュミスが生じた上位階層の該キャッシュから下位階層の該キャッシュに対して当該キャッシュミスにかかる要求を出す際に、該要求に対する前記下位階層のキャッシュからのデータ応答を格納する格納領域を確保して、当該格納領域を特定するためのキャッシュ要求識別子を設定するとともに、
    該命令が、前記スレッド上の命令であり、該演算器が演算処理を行なうために該データを格納するレジスタと当該マルチスレッドプロセッサ外部の外部記憶部との間において該データの授受を生じるデマンド要求である場合には、当該命令にかかる該スレッド識別子と該キャッシュ要求識別子と該命令識別子とを該マルチスレッド制御部に対して通知することを特徴とする、マルチスレッドプロセッサ。
  2. 該キャッシュ制御部が、
    該命令が、予め該外部記憶部から取得した該データを該レジスタに格納するプリフェッチ要求である場合に、前記マルチスレッド制御部に対して当該命令にかかる該スレッド識別子,該キャッシュ要求識別子および該命令識別子の通知を行なわないことを特徴とする、請求項記載のマルチスレッドプロセッサ。
  3. 該キャッシュ制御部が、
    該プリフェッチ要求が該外部記憶部に発行されてからの経過時間を監視し、該命令によってアクセスされる該データが、先行するプリフェッチ要求によって該外部記憶部から取得された該データと一致するとともに、該経過時間が所定時間以上経過した場合に、前記マルチスレッド制御部に対して当該命令にかかる該スレッド識別子,該キャッシュ要求識別子および該命令識別子の通知を行なわないことを特徴とする、請求項又は請求項記載のマルチスレッドプロセッサ。
  4. フェッチにかかる該命令の命令完了予定順序を管理するフェッチ順序管理部をそなえ、
    該キャッシュ制御部が、
    該フェッチ順序管理部における該命令完了予定順序が先頭の該デマンド要求に対して前記上位階層のキャッシュ上で割り当てられたキャッシュラインが、該スレッド上の順番は該デマンド要求よりも後続するものであって、該デマンド要求よりも先に該キャッシュミ
    スが生じており該格納領域が確保されている該命令に対して前記上位階層のキャッシュ上で割り当てられたキャッシュラインと同一である場合に、
    該デマンド要求にかかるスレッド識別子および命令識別子を該命令の該キャッシュ要求識別子とともに、該マルチスレッド制御部に通知することを特徴とする、請求項〜請求項のいずれか1項に記載のマルチスレッドプロセッサ。
  5. 少なくとも、該キャッシュミスが生じた旨を示す情報,当該キャッシュミスにかかる該キャッシュ要求識別子,当該要求にかかるスレッド識別子および該命令識別子を相互に関連付けて登録可能なキャッシュミス情報格納部をそなえ、
    該マルチスレッド制御部が、該キャッシュミス情報格納部に格納された情報に基づいて、該キャッシュミスに関する情報を取得することを特徴とする、請求項記載のマルチスレッドプロセッサ。
  6. 該キャッシュ制御部が、
    該キャッシュミス情報格納部に、少なくとも、該キャッシュミスが生じた旨を示す情報,該キャッシュ要求識別子,当該命令にかかるスレッド識別子および該命令識別子がそれぞれ格納された後に、該命令に対するデータ応答が該外部記憶部から行なわれる際に、該データ応答を示す情報と当該データ応答にかかる該キャッシュ要求識別子とを該マルチスレッド制御部に通知するとともに、該キャッシュミス情報格納部における該当する前記キャッシュミスが生じた旨を示す情報をリセットすることを特徴とする、請求項記載のマルチスレッドプロセッサ。
  7. 該マルチスレッド制御部が、
    該キャッシュミス情報格納部において、前記キャッシュミスが生じた旨を示す情報が登録されるとともに、そのキャッシュ要求にかかる該命令識別子および該スレッド識別子が、該フェッチ順序管理部において管理される該命令完了予定順序が先頭の命令にかかる命令識別子およびスレッド識別子と一致した時に、該スレッドを切り替えることを特徴とする、請求項又は請求項記載のマルチスレッドプロセッサ。
  8. 該キャッシュミス情報格納部が、該スレッドの切り替えの要因となった該キャッシュミスが生じた該要求に対して、該スレッドが休止状態に遷移する要因となったことを示す情報を格納するとともに、
    該キャッシュ制御部が、該キャッシュミスにかかるデータ応答が行なわれた際に、当該データ応答を示す信号とそのキャッシュ要求識別子とをマルチスレッド制御部に報告し、
    該マルチスレッド制御部が、該キャッシュミス情報格納部において、前記スレッドが休止状態に遷移する要因となったことを示す情報が格納されている場合に、該スレッドを切り替えて復帰させることを特徴とする、請求項〜請求項のいずれか1項に記載のマルチスレッドプロセッサ。
  9. 該命令がストア命令である場合に、そのストア対象のアドレスがキャッシュミスした場合には、
    該命令制御部が、前記ストア対象のアドレスにかかるデータ応答を待たずにストア命令を完了したものとして扱う突き放し制御を行なうとともに、
    該キャッシュ制御部が、該マルチスレッド制御部に対して、当該ストア命令についてのキャッシュミスにかかる通知を行なわないことを特徴とする、請求項1〜請求項8のいずれか1項に記載のマルチスレッドプロセッサ。
JP2004222042A 2004-07-29 2004-07-29 マルチスレッドプロセッサ Expired - Fee Related JP4520788B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2004222042A JP4520788B2 (ja) 2004-07-29 2004-07-29 マルチスレッドプロセッサ
US10/981,772 US7310705B2 (en) 2004-07-29 2004-11-05 Multithread processor and thread switching control method
EP04257247A EP1622003B1 (en) 2004-07-29 2004-11-23 Multithread processor and thread switching control method
DE602004023386T DE602004023386D1 (de) 2004-07-29 2004-11-23 Multithreaded Prozessor und Threadumschaltungssteuerungsverfahren

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004222042A JP4520788B2 (ja) 2004-07-29 2004-07-29 マルチスレッドプロセッサ

Publications (2)

Publication Number Publication Date
JP2006040141A JP2006040141A (ja) 2006-02-09
JP4520788B2 true JP4520788B2 (ja) 2010-08-11

Family

ID=34930820

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004222042A Expired - Fee Related JP4520788B2 (ja) 2004-07-29 2004-07-29 マルチスレッドプロセッサ

Country Status (4)

Country Link
US (1) US7310705B2 (ja)
EP (1) EP1622003B1 (ja)
JP (1) JP4520788B2 (ja)
DE (1) DE602004023386D1 (ja)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7383403B1 (en) * 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US20060206902A1 (en) * 2005-03-14 2006-09-14 Sujat Jamil Variable interleaved multithreaded processor method and system
CA2538503C (en) * 2005-03-14 2014-05-13 Attilla Danko Process scheduler employing adaptive partitioning of process threads
US8387052B2 (en) * 2005-03-14 2013-02-26 Qnx Software Systems Limited Adaptive partitioning for operating system
US9361156B2 (en) 2005-03-14 2016-06-07 2236008 Ontario Inc. Adaptive partitioning for operating system
US8245230B2 (en) * 2005-03-14 2012-08-14 Qnx Software Systems Limited Adaptive partitioning scheduler for multiprocessing system
US7818747B1 (en) * 2005-11-03 2010-10-19 Oracle America, Inc. Cache-aware scheduling for a chip multithreading processor
EP1990729A4 (en) * 2006-02-27 2010-08-25 Fujitsu Ltd PROCESSOR DEVICE AND INSTRUCTION PROCESSING METHOD
JP4574712B2 (ja) 2006-02-28 2010-11-04 富士通株式会社 演算処理装置、情報処理装置及び制御方法
JP4327237B2 (ja) 2006-02-28 2009-09-09 富士通株式会社 プリフェッチ制御装置
US7502913B2 (en) * 2006-06-16 2009-03-10 Microsoft Corporation Switch prefetch in a multicore computer chip
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8533530B2 (en) * 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
JP5101128B2 (ja) * 2007-02-21 2012-12-19 株式会社東芝 メモリ管理システム
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
WO2008155822A1 (ja) 2007-06-19 2008-12-24 Fujitsu Limited キャッシュ制御装置及び制御方法
JP5115555B2 (ja) * 2007-06-20 2013-01-09 富士通株式会社 演算処理装置
JP5104862B2 (ja) * 2007-06-20 2012-12-19 富士通株式会社 命令実行制御装置及び命令実行制御方法
JP2009098934A (ja) * 2007-10-17 2009-05-07 Hitachi Ltd プロセッサ及びキャッシュメモリ
US8589925B2 (en) * 2007-10-25 2013-11-19 Microsoft Corporation Techniques for switching threads within routines
US7941646B2 (en) 2007-12-31 2011-05-10 Freescale Semicondoctor, Inc. Completion continue on thread switch based on instruction progress metric mechanism for a microprocessor
JP4843717B2 (ja) 2008-02-18 2011-12-21 富士通株式会社 演算処理装置および演算処理装置の制御方法
JP5444889B2 (ja) * 2009-06-30 2014-03-19 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8850410B2 (en) * 2010-01-29 2014-09-30 International Business Machines Corporation System using a unique marker with each software code-block
JP2010176692A (ja) * 2010-03-15 2010-08-12 Fujitsu Ltd 演算処理装置、情報処理装置及び制御方法
AU2010201718B2 (en) * 2010-04-29 2012-08-23 Canon Kabushiki Kaisha Method, system and apparatus for identifying a cache line
JP2012033001A (ja) * 2010-07-30 2012-02-16 Toshiba Corp 情報処理装置および情報処理方法
US9529594B2 (en) * 2010-11-30 2016-12-27 Oracle International Corporation Miss buffer for a multi-threaded processor
US20130086364A1 (en) * 2011-10-03 2013-04-04 International Business Machines Corporation Managing a Register Cache Based on an Architected Computer Instruction Set Having Operand Last-User Information
EP2862063B1 (en) * 2012-06-15 2022-09-14 Intel Corporation A lock-based and synch-based method for out of order loads in a memory consistency model using shared memory resources
EP2862072B1 (en) * 2012-06-15 2022-09-07 Intel Corporation A load store buffer agnostic to threads implementing forwarding from different threads based on store seniority
WO2013188701A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A method and system for implementing recovery from speculative forwarding miss-predictions/errors resulting from load store reordering and optimization
WO2013188696A2 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. An instruction definition to implement load store reordering and optimization
WO2013188306A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
EP2862060A4 (en) * 2012-06-15 2016-11-30 Soft Machines Inc METHOD AND SYSTEM FOR FILTERING SAVES FOR PREVENTING THE REQUIREMENT OF CHECKING ALL THE WORDS OF A CACHE MEMORY
KR101996351B1 (ko) 2012-06-15 2019-07-05 인텔 코포레이션 통합된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
KR102248470B1 (ko) * 2012-06-15 2021-05-06 인텔 코포레이션 메모리로부터 순차적으로 판독하는 load들을 구성하는 메모리 일관성 모델에서 비순차 load들을 갖는 세마포어 방법 및 시스템
TWI599879B (zh) 2012-06-15 2017-09-21 英特爾股份有限公司 在處理器中之免消歧義失序載入儲存佇列方法和微處理器
WO2013188460A2 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A virtual load store queue having a dynamic dispatch window with a distributed structure
JP2014006807A (ja) * 2012-06-26 2014-01-16 Fujitsu Ltd 演算処理装置、キャッシュメモリ制御装置及びキャッシュメモリの制御方法
US10140210B2 (en) 2013-09-24 2018-11-27 Intel Corporation Method and apparatus for cache occupancy determination and instruction scheduling
EP3111333B1 (en) 2014-02-27 2022-03-30 Mercury Kingdom Assets Limited Thread and data assignment in multi-core processors
US9715449B2 (en) * 2014-03-31 2017-07-25 International Business Machines Corporation Hierarchical translation structures providing separate translations for instruction fetches and data accesses
JP6390748B1 (ja) * 2017-04-19 2018-09-19 富士通株式会社 情報処理装置、情報処理方法および情報処理プログラム
US11221767B2 (en) * 2017-10-16 2022-01-11 Vmware, Inc. Cache line persistence indicator for non-volatile memory using coherence states
US10572389B2 (en) * 2017-12-12 2020-02-25 Advanced Micro Devices, Inc. Cache control aware memory controller
JP7014965B2 (ja) * 2018-06-06 2022-02-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11281589B2 (en) * 2018-08-30 2022-03-22 Micron Technology, Inc. Asynchronous forward caching memory systems and methods
CN110413822B (zh) * 2019-06-19 2021-11-19 北京旷视科技有限公司 离线图像结构化分析方法、装置、系统和存储介质
US11288072B2 (en) * 2019-09-11 2022-03-29 Ceremorphic, Inc. Multi-threaded processor with thread granularity
CN113626348A (zh) * 2021-07-22 2021-11-09 支付宝(杭州)信息技术有限公司 业务执行方法、装置和电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6049867A (en) * 1995-06-07 2000-04-11 International Business Machines Corporation Method and system for multi-thread switching only when a cache miss occurs at a second or higher level
US6269425B1 (en) * 1998-08-20 2001-07-31 International Business Machines Corporation Accessing data from a multiple entry fully associative cache buffer in a multithread data processing system
JP2002132402A (ja) * 2000-10-20 2002-05-10 Mitsubishi Electric Corp 負荷調整ボード及び情報処理装置
JP2002163121A (ja) * 2000-11-22 2002-06-07 Toshiba Corp 仮想マルチスレッドプロセッサ及びスレッド実行方法
JP2002268897A (ja) * 2001-03-08 2002-09-20 Fujitsu Ltd スレッド管理方法及び情報処理装置
JP2002342163A (ja) * 2001-05-15 2002-11-29 Fujitsu Ltd マルチスレッドプロセッサ用キャッシュ制御方式
US20030191927A1 (en) * 1999-05-11 2003-10-09 Sun Microsystems, Inc. Multiple-thread processor with in-pipeline, thread selectable storage
US20050138333A1 (en) * 2003-12-19 2005-06-23 Samra Nicholas G. Thread switching mechanism

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2522176B2 (ja) * 1993-08-13 1996-08-07 日本電気株式会社 プロセッサの制御方法
JP3569014B2 (ja) 1994-11-25 2004-09-22 富士通株式会社 マルチコンテキストをサポートするプロセッサおよび処理方法
US6073159A (en) 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US6571318B1 (en) * 2001-03-02 2003-05-27 Advanced Micro Devices, Inc. Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6049867A (en) * 1995-06-07 2000-04-11 International Business Machines Corporation Method and system for multi-thread switching only when a cache miss occurs at a second or higher level
US6269425B1 (en) * 1998-08-20 2001-07-31 International Business Machines Corporation Accessing data from a multiple entry fully associative cache buffer in a multithread data processing system
US20030191927A1 (en) * 1999-05-11 2003-10-09 Sun Microsystems, Inc. Multiple-thread processor with in-pipeline, thread selectable storage
JP2002132402A (ja) * 2000-10-20 2002-05-10 Mitsubishi Electric Corp 負荷調整ボード及び情報処理装置
JP2002163121A (ja) * 2000-11-22 2002-06-07 Toshiba Corp 仮想マルチスレッドプロセッサ及びスレッド実行方法
JP2002268897A (ja) * 2001-03-08 2002-09-20 Fujitsu Ltd スレッド管理方法及び情報処理装置
JP2002342163A (ja) * 2001-05-15 2002-11-29 Fujitsu Ltd マルチスレッドプロセッサ用キャッシュ制御方式
US20050138333A1 (en) * 2003-12-19 2005-06-23 Samra Nicholas G. Thread switching mechanism

Also Published As

Publication number Publication date
US7310705B2 (en) 2007-12-18
EP1622003A1 (en) 2006-02-01
JP2006040141A (ja) 2006-02-09
EP1622003B1 (en) 2009-09-30
US20060026594A1 (en) 2006-02-02
DE602004023386D1 (de) 2009-11-12

Similar Documents

Publication Publication Date Title
JP4520788B2 (ja) マルチスレッドプロセッサ
US7870369B1 (en) Abort prioritization in a trace-based processor
US6687809B2 (en) Maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US5613083A (en) Translation lookaside buffer that is non-blocking in response to a miss for use within a microprocessor capable of processing speculative instructions
US7610473B2 (en) Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US20040128448A1 (en) Apparatus for memory communication during runahead execution
CN112543916B (zh) 多表分支目标缓冲器
KR101996462B1 (ko) 명확화 없는 비순차 load store 큐
US20090132796A1 (en) Polling using reservation mechanism
US20060149931A1 (en) Runahead execution in a central processing unit
US5751986A (en) Computer system with self-consistent ordering mechanism
US11836080B2 (en) Physical address proxy (PAP) residency determination for reduction of PAP reuse
US6915395B1 (en) Active address content addressable memory
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
GB2520731A (en) Soft-partitioning of a register file cache
JP2006039815A (ja) マルチスレッドプロセッサおよびレジスタ制御方法
JP4608099B2 (ja) ジョブ信号を処理する多数の処理ユニットを有する処理システムにおけるジョブ信号処理方法および処理システム
EP2159691B1 (en) Simultaneous multithreaded instruction completion controller
US8701122B2 (en) Method and system for exception-less system calls in an operating system
JP2002530735A5 (ja)
CN110402434B (zh) 缓存未命中线程平衡
JP2002530736A5 (ja)
US7783863B1 (en) Graceful degradation in a trace-based processor
JP2024040922A (ja) 演算処理装置、演算処理方法及び情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100223

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100422

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100521

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130528

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4520788

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130528

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees