JP5263844B2 - パイプラインプロセッサにおける長い待ち時間命令の処理 - Google Patents

パイプラインプロセッサにおける長い待ち時間命令の処理 Download PDF

Info

Publication number
JP5263844B2
JP5263844B2 JP2010500342A JP2010500342A JP5263844B2 JP 5263844 B2 JP5263844 B2 JP 5263844B2 JP 2010500342 A JP2010500342 A JP 2010500342A JP 2010500342 A JP2010500342 A JP 2010500342A JP 5263844 B2 JP5263844 B2 JP 5263844B2
Authority
JP
Japan
Prior art keywords
instruction
thread
counter
processed
processor
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.)
Active
Application number
JP2010500342A
Other languages
English (en)
Other versions
JP2010522920A (ja
Inventor
モリー バーグラス
ユーン チャート フー
Original Assignee
イマジネイション テクノロジーズ リミテッド
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 イマジネイション テクノロジーズ リミテッド filed Critical イマジネイション テクノロジーズ リミテッド
Publication of JP2010522920A publication Critical patent/JP2010522920A/ja
Application granted granted Critical
Publication of JP5263844B2 publication Critical patent/JP5263844B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Description

本発明は、パイプラインプロセッサにおいてスレッドを処理する方法及びそのようなパイプラインプロセッサに関する。特に、しかし、非限定的に、本発明は、マルチスレッドパイプラインプロセッサにおいて複数のスレッドを処理する方法、及びそのようなマルチスレッドパイプラインプロセッサに関する。
コンピュータアーキテクチャでは、パイプラインプロセッサ内で発生する可能性があるデータ障害が問題である。パイプラインプロセッサにおける命令は、いかなる所定の時点においてもいくつかの命令が実行中であるように、いくつかの段で実行され、これらの命令は、望ましい順序で完了しない場合がある。データ障害は、これらの同時の場合によっては順序が狂った命令のうちの2つ又はそれよりも多くが衝突してエラーを引き起こす時に発生する。
データ障害は、データが修正される時に発生する。データ障害は、以下の状況で発生する可能性がある。1)書込み後の読取り(RAW):オペランドが修正され、その直後に読み出される。最初の命令がオペランドへの書込を終了していない場合があるから、第2の命令は、不正なデータを用いる場合がある。2)読取り後の書込み(WAR):オペランドを読取り、その直後にその同じオペランドに書込みを行う。読取りの前に書込みが終了している場合があるから、読取り命令は、新しい書込み値を不正に取得する場合がある。3)書込み後の書込み(WAW):同じオペランドに書込みを行う2つの命令が実行される。最初のものが第2のものを終了させる場合があり、従って、オペランドに不正なデータ値を残す。データ障害に係わるオペランドは、メモリ又はレジスタに常駐する可能性がある。
パイプラインプロセッサの命令セットは、標準の命令と比較して非常に長い待ち時間を有する特別な命令を含む場合がある。主な例は、メモリからデータを取り出す命令であろう。データ障害問題は、短い待ち時間命令、すなわち、少ないクロック刻み回数内で完了することができる命令では回避することが比較的容易であり、なぜなら、そのために特定のスレッド内の命令を出された順序で完了することを保証することが比較的容易であるからである。しかし、スレッド内に長い待ち時間命令が含まれる時には、特定のスレッド内にある命令は、出された順序で完了することにはならない可能性が高いので、データ障害問題はより重大である。
これらの問題は、あらゆる種類の状況、例えば、3Dグラフィックプロセッサにおいて、実時間入力を受け取る専用メディアCPUを含む「中央演算処理装置(CPU)」において、更にマルチプロセッサシステムとの通信において発生する。
長い待ち時間命令に対処するために、プロセッサは、理想的には、命令が完了するのを待っているスレッドをスワップアウトする機構を提供すべきである。しかし、ある一定の要件も満たす必要がある。
第一に、マルチスレッドプロセッサでは、多くのスレッドが、潜在的データ障害、すなわち、処理される前に先行命令が完了していることに依存する命令を有するかもしれない。
第二に、各スレッドは、全てがストリーム内で隣接する可能性がある大量の長い待ち時間命令を有するかもしれない。長い待ち時間命令からの戻りデータが、それらが送出されたものとは異なる順序で戻って来ることを許すことができなければならない。いくつかの長い待ち時間命令が一度に処理される可能性があるとすると、長い待ち時間命令からのデータ障害に起因するプロセッサの停止をできる限り低減すべきである。
第三に、スレッド内に分岐が存在するスレッド内のあらゆる命令、特に、処理される前に先行命令が完了していることに依存することからデータ障害を引き起こすかもしれないものを飛ばして進むことができなければならない。
第四に、書き込まれたものとは異なる順序で結果を読取ることができなければならない。第五に、宛先の複数の読取りアクセスに対するペナルティがあってはならない。第六に、同じ宛先が別の長い待ち時間命令に対する宛先として書込まれ、かつ再使用されることも同じく許されるべきである。
最後に、長い待ち時間命令及び潜在的データ障害命令を処理するのに専用又は大容量ストレージが必要とされないことが好ましい。また、ゲート費用が最小に保たれることも好ましい。
本発明の目的は、長い待ち時間演算におけるデータ障害問題を軽減又は克服するスレッドを処理する方法及び装置を提供することである。
本発明の第1の態様に従って、パイプラインプロセッサにおいてスレッドを処理する方法を提供し、スレッドは、複数の逐次命令を含み、複数の逐次命令は、一部の短い待ち時間命令、及び一部の長い待ち時間命令、並びに少なくとも1つの障害命令を含み、障害命令は、この障害命令が処理される前に1つ又はそれよりも多くの先行命令が処理されることを必要とし、本方法は、a)各長い待ち時間命令を処理する前に、スレッドに関連付けられたカウンタを1だけ増分する段階、b)各長い待ち時間命令が処理された後に、スレッドに関連付けられたカウンタを1だけ減分する段階、c)各障害命令を処理する前に、スレッドに関連付けられたカウンタの値を検査する段階、及びi)カウンタの値がゼロであった場合に障害命令を処理する段階、又はii)カウンタの値が非ゼロであった場合に障害命令の処理を後の時点まで休止する段階を含む。
従って、1つ又はそれよりも多くの長い待ち時間命令が処理中であり、依然として未処理であることを意味するカウンタが非ゼロである場合には、障害命令は、保留される。これは、いずれかの先行スレッドの前に障害命令が処理され、それによってデータ障害を引き起こす可能性がないことを意味する。短い待ち時間命令は、ある一定の所定のクロック刻み回数内で完了することができる命令である。長い待ち時間命令は、完了するのに所定のクロック刻み回数よりも多くのクロック刻み回数を必要とする命令である。
好ましくは、本方法は、複数のスレッドを処理するためのものであり、各スレッドは、これらのスレッドに関連付けられたそれぞれのカウンタを有する。複数のスレッドは、いかなる一時点でも常駐することができるスレッドである。好ましい実施形態では、常駐スレッドの個数は16である。
好ましくは、プロセッサ内の上述の又は各スレッドは、いかなる一時点においても、処理されているか、又は処理されるのを待っているか、又は段階c)ii)に従って休止されているかのいずれかである。好ましくは、いかなる一時点においても、複数のスレッドの部分集合が処理されている。1つの好ましい実施形態では、部分集合内のスレッドの個数は4である。好ましくは、本方法は、更に、スレッドの部分集合を、部分集合内の各スレッドからの1つの命令をラウンドロビン方式で実行することによって処理する段階を含む。
有利な態様においては、部分集合内のスレッドの個数は、短い待ち時間命令を処理するのに必要とされる最大クロック刻み回数に等しい。従って、短い待ち時間命令では、データ障害の可能性は存在しない。
一実施形態では、本方法は、更に、スレッドの最後の命令を処理した後に、このスレッドを複数のスレッドの部分集合から削除する段階を含む。従って、スレッドが完全に処理された状態で、部分集合内に利用可能な空間ができる。
好ましくは、本方法は、更に、段階c)ii)に従って休止されている命令を有するあらゆるスレッドに関連付けられたカウンタの値を定期的に検査する段階、及びスレッドのカウンタの値がゼロであった場合に、このスレッドを処理待ち状態へと移行する段階を含む。従って、スレッドのカウンタがゼロまで減少した状態で、未処理のままの長い待ち時間命令が存在しないことが分る。すなわち、スレッドの休止(段階c)ii)による)を解除することができる。一実施形態では、検査段階は、全てのクロック刻みにおいて実施される。
好ましくは、プロセッサは、いかなる一時点においても、複数のスレッド位置のうちのゼロ、1つ、又はそれよりも多くが空きであるようにこの複数のスレッドを最大数とするあらゆる個数のスレッドを処理するように構成される。
好ましくは、上述の又は各スレッドは、これらのスレッドに関連付けられた複数のN個のそれぞれのカウンタを有し、本方法の段階c)は、各障害命令を処理する前に、スレッドに関連付けられたN個のカウンタのうちの少なくとも1つの値を検査する段階、及びi)少なくとも1つのカウンタの値の全てがゼロであった場合に障害命令を処理する段階、又はii)少なくとも1つのカウンタの値のうちの1つ又はそれよりも多くが非ゼロであった場合に障害命令の処理を後の時点まで休止する段階を含む。
次に、好ましくは、各長い待ち時間命令は、この長い待ち時間命令が処理される前に、少なくともN個のカウンタのうちのどれを増分すべきであるか、並びにこの長い待ち時間命令が処理された後に、少なくともN個のカウンタのうちのどれを減分すべきであるかという指示を含む。
また、好ましくは、各障害命令には、その障害命令が処理される前に、N個のカウンタのうちのどれを検査すべきであるかという指示を含む命令が先行するか、又は各障害命令自体が、その障害命令が処理される前に、N個のカウンタのうちのどれを検査すべきであるかという指示を含むかのいずれかである。
この構成を用いて、N個の障害カウンタの使用を最適化することができる。例えば、特定の障害命令は、最初の長い待ち時間命令が処理されることに依存するものとすることができるが、第2の長い待ち時間命令には依存しないものとすることができる。この場合には、最初の長い待ち時間命令は、この最初の命令が処理される前にn番目のカウンタを増分すべきであるという指示を含むことができ、第2の長い待ち時間命令は、この第2の命令が処理される前にm番目のカウンタを増分すべきであるという指示を含むことができる。次に、障害命令は、この障害命令が処理される前に、N個のカウンタのうちのn番目のカウンタを検査するだけでよいという指示を含むことができる。
また、コンピュータ手段上で実行された時に、このコンピュータ手段に本発明の第1の態様の方法を実施させるコンピュータプログラムも提供する。そのようなコンピュータプログラムが記憶された記録担体も提供する。
本発明の第2の態様に従って、スレッドを処理するためのパイプラインプロセッサを提供し、スレッドは、複数の逐次命令を含み、複数の逐次命令は、一部の短い待ち時間命令、及び一部の長い待ち時間命令、並びに少なくとも1つの障害命令を含み、障害命令は、この障害命令が処理される前に1つ又はそれよりも多くの先行命令が処理されることを必要とし、プロセッサは、スレッドに関連付けられたカウンタ、各長い待ち時間命令が処理される前にカウンタを1だけ増分するための手段、各長い待ち時間命令が処理された後にカウンタを1だけ減分するための手段、及び各障害命令が処理される前にスレッドに関連付けられたカウンタの値を検査して、i)カウンタの値がゼロで合った場合に障害命令を処理するか、又はii)カウンタの値が非ゼロであった場合に障害命令の処理を後の時点まで休止するための手段を含む。
1つの好ましい実施形態では、カウンタを増分し、カウンタを減分するための手段は、短い待ち時間命令と長い待ち時間命令の間の区別を付けることができる命令復号器を含む。
1つの好ましい実施形態では、プロセッサは、更にスレッドマネージャを含み、カウンタは、命令復号器によって維持されるが、スレッドマネージャによってアクセス可能である。
好ましくは、障害命令が処理される前にスレッドに関連付けられたカウンタの値を検査するための手段は、障害命令と残りの命令の間の区別を付けることができる命令復号器を含む。
好ましくは、プロセッサは、複数のスレッドを処理するのに適し、各スレッドは、これらのスレッドに関連付けられたそれぞれのカウンタを有する。1つの好ましい実施形態では、複数のスレッドに16個のスレッドが存在する。
好ましくは、プロセッサ内の上述の又は各スレッドは、いかなる一時点においても、処理されているか、又は処理されるのを待っているか、又はii)に従って休止されているかのいずれかである。好ましくは、スレッドマネージャは、プロセッサ内の各常駐スレッドの状態を記録する。好ましくは、いかなる一時点においても、複数のスレッドの部分集合が処理されている。1つの好ましい構成では、部分集合内のスレッドの個数は4である。一実施形態では、プロセッサは、更に、スレッドの部分集合を、部分集合内の各スレッドから1つの命令をラウンドロビン方式で実行することによって処理するための手段を含む。
有利な態様においては、部分集合内のスレッドの個数は、短い待ち時間命令を処理するのに必要とされる最大クロック刻み回数に等しい。従って、短い待ち時間命令では、データ障害問題は存在しないことになる。
好ましくは、プロセッサは、スレッドの最後の命令を処理した後に、このスレッドを複数のスレッドの部分集合から削除するように構成される。状態間のこの移行は、好ましくは、スレッドマネージャによって実行される。
好ましくは、プロセッサは、ii)に従って休止されている命令を有するあらゆるスレッドに関連付けられたカウンタの値を定期的に検査し、スレッドのカウンタの値がゼロであった場合には、このスレッドを処理待ち状態へと移行させるように構成される。ここでもまた、好ましくは、検査段階及び移行段階がスレッドマネージャによって実行される。検査段階は、クロック刻み毎に一度実施することができる。
好ましくは、プロセッサは、いかなる一時点においても、複数のスレッド位置のうちのゼロ、1つ、又はそれよりも多くが空きであるようにこの複数のスレッドを最大数とするあらゆる個数のスレッドを処理するように構成される。
一実施形態では、上述の又は各スレッドは、これらのスレッドに関連付けられた複数のN個のそれぞれのカウンタを有し、これらのスレッドに関連付けられたカウンタの値を検査するための手段は、各障害命令が処理される前に、これらのスレッドに関連付けられたN個のカウンタのうちの少なくとも1つの値を検査して、i)少なくとも1つのカウンタの値の全てがゼロであった場合に障害命令を処理するか、又はii)少なくとも1つのカウンタの値のうちの1つ又はそれよりも多くが非ゼロであった場合に障害命令の処理を後の時点まで休止するための手段を含む。
その場合、各長い待ち時間命令は、長い待ち時間命令が処理される前に少なくともN個のカウンタのうちのどれを増分すべきであるか、並びに長い待ち時間命令が処理された後に少なくともN個のカウンタのうちのどれを減分すべきであるかという指示を含む。
また、各障害命令には、その障害命令が処理される前にN個のカウンタのうちのどれを検査すべきであるかという指示を含む命令が先行する。代替的に、各障害命令は、その障害命令が処理される前にN個のカウンタのうちのどれを検査すべきであるかという指示を含むことができる。
本発明の一態様に関連して説明した特徴は、本発明の他の態様にも適用可能である場合がある。
これより本発明の例示的な実施形態を添付図面を参照して以下に説明する。
本発明の実施形態によるマルチスレッドプロセッサの図である。 図1のスレッドマネージャ101の概略図である。 4つの可能なスレッド状態の間の移行を示す概略図である。 32ビットの長い待ち時間メモリロード命令の概略図である。 32ビットのWHC命令の概略図である。
図1は、本発明の一実施形態によるマルチスレッドプロセッサを示している。プロセッサ100は、処理されるスレッドの提出を受け取るスレッドマネージャ101を含む。スレッドマネージャ101は、スレッドマネージャ101によって示された適切な命令を外部メモリ105又は内部キャッシュ107から取り出すことができる命令フェッチ装置103に接続される。次に、取り出された命令は、命令復号器109に行く。レジスタストア111は、実行に向けて命令を転送し、その結果は、レジスタストアに戻されて入力される。また、レジスタストアは、命令実行へと順送りされるソース引数を取り出す。
この実施形態では、マルチスレッドプロセッサは、2つの命令カテゴリを処理することができる。第1のカテゴリは、命令結果が、確定的で僅かなクロック刻み回数でレジスタストアに書き戻される低い待ち時間(又は短い待ち時間)命令を含む。これらの命令は、プロセッサ100内で実行される。そのような命令の例は、単純な加算及び乗算である。これらの低い待ち時間命令は、扱いが比較的容易であり、図1のループ113に示している。
第2のカテゴリは、命令結果が、数十回のクロック刻み程度の長さである場合がある可変長の予測不能待ち時間で外部ユニットからレジスタストアに書き戻される高い待ち時間(又は長い待ち時間)命令を含む。図1では、これらをループ115で示している。これらの長い待ち時間命令は、メモリインタフェース、テクスチャサンプリングユニット、及び数値演算コプロセッサのような外部ユニット117に処理要求を送る。図1では、これらのユニットをプロセッサモジュール100の外側に存在するように示しているが、これは、必ずしもそうではないことに注意されたい。これらのユニットは、プロセッサ100と密接に結合され、同じダイ上に存在する可能性が高い。
ここで、図1のプロセッサ100の演算を最初に低い待ち時間命令、次に長い待ち時間命令に対して以下に説明する。演算は、データ障害を回避するように実行される。このプロセッサでは、命令は、実行され始めると、すなわち、スレッドマネージャ101を離れ、命令フェッチ装置に送られた状態では、停止することができない。あらゆる障害は、データ障害がなくなるまでプロセッサパイプラインを停止させる。
図2は、スレッドマネージャ101の概略図である。マルチスレッドプロセッサ100は、プロセッサ上に同時に存在することができるある一定個数の常駐スレッドを有するように構成される。図2に示している例では、この個数は16である。16個の常駐スレッドの各々は、ID201を有する。いかなる所定の時点でも、各スレッドは特定の状態205にある。4つの可能な状態は、「空き」、「待機」、「実行中」、及び「障害」であり、これらの4つの状態を更に以下に説明する。また、列203及び207における値も以下に説明する。
これら16個の常駐スレッドから、スレッドの部分集合209は、いかなる一時点でも「実行中」状態にある。スレッドマネージャ101は、各実行中スレッドから1つの命令をクロック刻み単位のラウンドロビン方式で実行する。いかなる一時点でも「実行中」状態に置くことができる部分集合内のスレッドの個数は、低い待ち時間命令を処理するのに要する最大クロック刻み回数に等しい。これから、前の命令が処理し終わるまで同じスレッド内の後の命令を処理することができないように、特定の命令の処理が単一のサイクル内で完了することが保証される。図2の例では、「実行中」部分集合209内の個数は4に等しい。すなわち、4個の実行中常駐スレッドが存在する限り、低い待ち時間命令に対するデータ障害ペナルティは存在しないことになる。
再度図2を参照すると、スレッドマネージャ101は、各常駐スレッドの状態を記録する。既に解説したように、「実行中」状態は、現時点でスレッドが実行されていることを意味する。「空き」状態は、このID201に対して常駐スレッドが存在しないことを意味する。「待機」状態は、スレッドが、「実行中」部分集合209内に空間ができ次第実行されるのを待機していることを意味する。「障害」状態に対して以下に説明する。
4つの状態の間の移行を図3に略示している。
最初に、「空き」から「待機」への移行301を考える。この移行は、新しいスレッドが提出された時に発生し、次に、このスレッドは、「実行中」部分集合209に入力されるのを常駐スレッド内で待つ。
ここで、「待機」から「実行中」303への移行を考える。「待機」部分集合内で空間が利用可能になる時に(実行中のスレッドがその最後の命令を終了し、それによって「実行中」部分集合内の空間を解放する時に発生させることができる)、スレッドマネージャは、「待機」スレッドのうちの1つを選択し、それを「実行中」状態へと移行させる。これは、スレッドスケジューリングとして公知である。スレッドマネージャは、移行に向けて常駐待機スレッドから待機スレッドを選択するアルゴリズムを用いることができ、例えば、単純なラウンドロビン手法を用いることができる。
ここで、「実行中」から「空き」への移行305を考える。命令復号器は、特定のスレッドの最後の命令をいつ受け取るかを通知することができる。この受け取りが起こると、命令復号器は、インタフェース119(図1を参照されたい)に沿ってスレッドID201を含む指令及びスレッドを「空き」にする指令を通信することにより、スレッドマネージャに、そのスレッドの状態を「実行中」から「空き」へと移すように通知する。この通知により、次に、「実行中」部分集合内の空間が解放されることになり、それによって別の待機常駐スレッドを「実行中」へと移行させることができる(303)。
最後に、実行中から「待機」に戻る移行307を考える。この移行は、プロセッサが、いかなる所定のスレッドも実行中のままに留まることができるクロック刻み回数が制限されたタイマーをサポートする場合に発生させることができる。従って、スレッドがこの閾値を超えた場合には、このスレッドは、「実行中」状態から「待機」状態に移行して戻ることになる。この移行は、図1のインタフェース119を通じた命令復号器からスレッドマネージャへの指令を通じて達成することができ、この指令は、スレッドID201及びスレッドを「待機」にする指令を含む。この種のスレッド間移行は、スレッドスケジューリング解除として公知である。スレッドは完了していないので、このスレッドは、「空き」ではなく「待機」へと移行し、完了させるためには、後の時点でこのスレッドを再度スケジューリングすることが必要になる。スレッドをスケジューリング解除する行為は、「実行中」部分集合内で空間が利用可能になるので、スレッドマネージャに、「待機」スレッドのうちの1つをスケジューリングするように選択するアルゴリズムを実行させることになる。
障害状態への移行及びそこからの移行309及び311に対して以下に説明する。
スレッドマネージャは、スレッドが常駐のものであるから、スレッド状態を単一のクロック刻みで移行させることができることに注意されたい。
以上の説明は、「実行中」部分集合内に存在することが許されるスレッドの個数を選択することにより、データ障害を比較的容易に回避することができる短い待ち時間命令にだけに関する。これより長い待ち時間命令の処理に対して以下に説明する。
長い待ち時間命令の待ち時間を吸収するために、障害カウンタ及び障害状態という2つの特徴を用いる。
図2を参照すると、列207は、各スレッドにおける障害カウンタ値を記憶する。この例では、3個の障害カウンタが存在し、これらのカウンタは、各々0から7のいずれかの値を取ることができる。しかし、障害カウンタの個数は異なるものとすることができ、及び/又は各障害カウンタが取ることができる値の個数も異なるものとすることができる。障害カウンタ値は、実際には命令復号器に記憶されるが、スレッドマネージャは、これらの障害カウンタ値へのアクセスを有する。
命令復号器は、受け取ったばかりの命令が、短い待ち時間命令又は長い待ち時間命令のいずれであるのかを通知することができる。命令が長い待ち時間命令であった場合には、命令復号器は、障害カウンタのうちの1つを1だけ自動的に増分する(その後の長い待ち時間命令で更に)。次に、命令復号器は、いずれかの短い待ち時間命令に対して行うことになるのと同様に、実行に向けて命令を送る。指定された障害カウンタ及びスレッドIDが、これらの長い待ち時間命令に対してプロセッサパイプラインを順方向に渡され、それによってデータが宛先レジスタに最終的に書き込まれる時には、障害カウンタ及びスレッドIDは、インタフェース上に存在する。
データは、レジスタストア111に書き込まれているので、命令復号器は、障害カウンタ及びスレッドIDを調べて(図1の121を参照されたい)、この特定のスレッドに対する障害カウンタを減分し、それによってループが閉じる。
そのような長い待ち時間命令の例を図4に示している。図4に示している命令は、32ビットメモリロード命令であり、24ビットのペイロード、6ビットの演算命令、及び増分される障害カウンタを示す2ビットを含む。
従って、長い待ち時間命令が命令復号器に供給されると、命令復号器は、適切な障害カウンタを増分する。長い待ち時間命令が完了すると、命令復号器は、障害カウンタを減分する。従って、あらゆるスレッドの障害カウンタは、そのスレッドの長い待ち時間命令のうちの何個が現時点で実行中であるかに依存することになる。すなわち、未処理の宛先レジスタ書込みがない場合には、障害カウンタはゼロになるが、いずれか未処理の宛先レジスタ書込みがある場合には、障害カウンタは非ゼロになる。従って、図2を参照すると、スレッドID11の障害カウンタ値は2であるから、スレッドID11が現時点で未処理の2つの書込みを有することが分る。
いかなる一時点でも実行中とすることができる長い待ち時間命令の個数は、障害カウンタの個数及びこれらの障害カウンタが各々取ることができる最大値に依存する。この事例では、特定のスレッドにおいて21(3×7)個の長い待ち時間命令を実行中とすることができる。更に、別の長い待ち時間命令が命令復号器に入力される場合には、プロセッサは、現時点で実行中の長い待ち時間命令のうちの1つが完了し、従って、障害カウンタが減少し、その時点でプロセッサが再始動することができるまで停止することになる。
好ましい実施形態では、WHC(障害カウンタを待つ)命令は、正しく実施することができる前に前の命令が完了していることに依存する(すなわち、仮に先に処理された場合はデータ障害になるかもしれない)命令に先行する。(代替的手法は、命令自体の中にWHCビットを含むことであると考えられ、この可能性に対しては下記で更に解説する。)命令復号器は、WHC命令を受け取ると、WHC命令内に示されている1つ又は複数のスレッドに対する障害カウンタを検査すべきであることを認識する。これは、WHC命令が、前の命令が完了していることに依存する1つの命令(又は複数の命令)に先行するからである。この1つ又は複数のスレッドに対して非ゼロの障害カウンタが存在する場合には、未処理のレジスタ書込みがあることが分る。命令復号器が、このスレッドに対する障害カウンタを検査する時に、障害カウンタがゼロの場合は何も発生せず、命令復号器は、通常通りに実行に向けて次の命令へと進むことになる。(WHC命令自体は、その目的を実行し終えているので、命令復号器内で単純に消滅する。)一方、障害カウンタが非ゼロである場合には、命令復号器は、インタフェース119(図1)を通じて、スレッドマネージャにこのスレッドを「障害」状態へと移行させるように通知する。
WHC命令は、正しく実施することができる前に前の命令が完了していることに依存する命令の直前にある必要はない。WHC命令が、長い待ち時間命令と、この長い待ち時間命令の完了に依存する命令との間のどこかにある限り、WHC命令は、その目的を達成することになる。また、例えば、1つの長い待ち時間命令の結果が、後に多くの命令によって用いられる場合には、1つのWHC命令が、多くのその後の命令を「有効化」することができる。これらのその後の命令は、WHC命令に示されることになる。
スレッドが「実行中」状態から「障害」状態に移された時には、「実行中」部分集合209内で空間が利用可能になる。従って、このスレッドが「障害」状態のままに留まる間に、このスレッドの待ち時間を吸収するように、「待機」状態にある別の常駐スレッドをスケジューリングし、すなわち、「実行中」状態へと移す移行303を行うことができる。常駐スレッドの個数(この事例では16)と「実行中」部分集合内で許されるスレッドの個数(この事例では4)との間の格差が大きい程、スレッドマネージャが、「障害」スレッドの待ち時間を吸収するようにスケジューリングすることができる「待機」状態にあるスレッドを見出すことになる可能性が高くなる。
しかし、スレッドが障害状態に置かれた状態で、このスレッドは、如何にして障害状態から移行して抜け出す(すなわち、移行311)のであろうか?全てのクロック刻みにおいて、スレッドマネージャは、障害状態にあるあらゆるスレッドの障害カウンタを調べる。障害カウンタは、長い待ち時間命令が完了すると減少することになることを思い出すべきである。障害カウンタが依然非ゼロの場合には、スレッドマネージャは行為を起こさず、このスレッドを「障害」状態のままに残す。障害カウンタが既にゼロに減少している場合には、スレッドマネージャによってスレッドを「障害」状態から「待機」状態へと移行させることができる。この移行は、図3の移行311である。従って、障害カウンタがゼロに減少した場合には、未処理の宛先レジスタ書込みが存在しないことが分る。従って、WHC命令が乱れた順序で処理されることになることによってデータ障害が引き起こされる可能性はない。
実際には、スレッドマネージャは、各全てのクロック刻みにおいて「障害」スレッドの障害カウンタを調べる必要はない。最終的にスレッドが「障害」状態から「待機」状態への移行を行う限り、数回のクロック刻み毎に検査を行うことができる。実際には、これは、高周波数で作業する時に有利になり、それによってゲート計数も低減することができるであろう。
いくつかの障害カウンタを存在させることができ、命令復号器が、各長い待ち時間命令に対して増分される障害カウンタを指定することは前に解説した。この例では、各々が0から7の値を取ることができる3個の障害カウンタが存在する。
図5は、WHC命令(すなわち、前の命令に依存する命令に先行するもの)を示している。WHC命令は、各々が1つの障害カウンタに対応する3ビットを含む。ビットのうちのいずれかが非ゼロであった場合には、これは、そのビットに対応する障害カウンタを次の命令が実施される前に検査すべきであることを示すものである。コンパイラは、どの障害カウンタを各長い待ち時間命令に割り当てるかを待ち時間の吸収性能を最適化するように選ばなければならない。
プロセッサによって実行される命令を生成するコンパイラは、WHC命令を長い待ち時間命令の結果を用いる命令の直前に配置するように最適化すべきである。従って、WHCの指示は、命令が処理される前に受け取られる。また、コンパイラは、WHC命令をスレッド内で、対応するカウンタを増分する長い待ち時間命令からできる限り遠くに位置決めするように試みなければならない。それによって障害状態にあるスレッドの個数は最小にされることになる。これは、コンパイラにより、命令の順序を再編成することによって行うことができる。
例えば、WHC命令は、それが処理される前に処理された全ての長い待ち時間命令に依存せず、単にそのスレッド内の長い待ち時間命令のうちの一部に依存するかもしれない。この場合、WHC命令が依存する長い待ち時間命令は、例えば、第1の障害カウンタを増分するように指定することができる。一方、WHC命令が依存しない長い待ち時間命令は、例えば、第2の障害カウンタを増分するように指定することができる。次に、WHC命令内で、第1の障害カウンタに対応するビットは非ゼロになり、これに対して他の障害カウンタに対応するビットはゼロになる。従って、命令復号器は、検査する必要がある唯一の障害カウンタが第1の障害カウンタであることを認識し、これは、他の障害カウンタが、この特定のWHC命令に関連しないからである。図4を参照すると、増分される障害カウンタがビット番号25及び26に示されていることが分る。
障害カウンタの適切な使用である下記の命令ストリームの例を考える。以下の例では「ロード」命令は、長い待ち時間命令であり、「加算」命令は、短い待ち時間命令であることに注意されたい。
1)レジスタ位置(r)0をロードし、障害カウンタ(HC)0を増分する。
2)r1をロードし、HC0を増分する。
3)r2をロードし、HC1を増分する。
4)r3をロードし、HC1を増分する。
5)r4をロードし、HC2を増分する。
6)r5をロードし、HC2を増分する。
7)HC0が値0に減少するのを待つ。
8)r0とr1とを加算し、r9の中に入れる。
9)HC1が値0に減少するのを待つ。
10)r2とr3とを加算し、r10の中に入れる。
11)HC2が値0に減少するのを待つ。
12)r4とr5とを加算し、r11の中に入れる。
これを、障害カウンタを良好に使用していない以下の命令ストリームと比較する。
1)r0をロードし、HC0を増分する。
2)r1をロードし、HC0を増分する。
3)r2をロードし、HC1を増分する。
4)r3をロードし、HC1を増分する。
5)r4をロードし、HC2を増分する。
6)r5をロードし、HC2を増分する。
7)HC0、HC1、及びHC2が値0に減少するのを待つ。
8)r0とr1とを加算し、r9の中に入れる。
9)r2とr3とを加算し、r10の中に入れる。
10)r4とr5とを加算し、r11の中に入れる。
第2の例では、全ての3つの障害カウンタは、その後の命令のうちのいずれかを実施することができる前にゼロに減らさなければならない。しかし、例えば、r0とr1の合計をr9の中に入れる命令は、r0及びr1だけに依存し、他のレジスタ位置には依存しないので、上記ストリームは、特に効率的というわけではない。従って、スレッドは、より長く「障害」状態にあることになる。最初の例は、障害カウンタをより良好に使用する。利用可能な障害カウンタにわたって長い待ち時間命令を分割することにより、命令をより早く始動することができ、それによって実行中のスレッドが他のスレッドの障害を吸収することを可能にする。コンパイラは、長い待ち時間命令と短い待ち時間命令の間の差を認識し、また、どの命令がどの前の命令に依存するかも認識し、従って、障害カウンタを効率的に使用することができる。
図4の例では、障害カウンタは、長い待ち時間命令内で指定される。しかし、これはそうである必要はなく、代替方法は、障害カウンタ番号を宛先レジスタアドレスの最下位ビットに結び付けるものになる。従って、例えば、レジスタ位置0内へのあらゆるロードは、障害カウンタ0を増分することになるが、レジスタ位置5内へのあらゆるロードは、障害カウンタ1を増分することになる。それによって貴重な命令符号化空間は節約されるが、実際の宛先レジスタアドレスがコンパイラ又は命令復号器によって認識されない場合のインデキシングのような複雑なアドレス指定モードを実施することが困難になる。
この例では、WHC命令は、1つよりも多い障害カウンタの一度での検査をサポートする。すなわち、図5の例では、3個のWHCビットがWHC命令内に存在するので、WHCは、3個の障害カウンタの検査をサポートする。しかし、これは必ずしもそうである必要はなく、各WHC命令は、単に、検査すべきである1つの障害カウンタを指定するものとすることができる。この場合には、第1のWHC命令は、HC1を検査することを指定することができ、第2のWHCは、HC2を検査することを指定することができ、以降同様に続く。それによって少数のゲートを節約するであろう。
上述の実施形態に関していくつかの一般的な点に注意すべきである。説明した実施形態は、16個の常駐スレッドを含み、そのうちの4つまでは、いかなる一時点においても「実行中」部分集合内にある。しかし、このシステムは、非常に高いクロック周波数にも対応する。クロック周波数が高まる時に、短い待ち時間命令及び長い待ち時間命令の両方のクロック刻みにおける待ち時間は高まる。これは、短い待ち時間命令の新しいより長い待ち時間を満たすために、「実行中」部分集合内のスレッドの個数を増すことができることを意味する。更に、補償を行うために、常駐スレッドの個数を増すことができる。
説明した実施形態に関する他の点は以下の通りである。
スレッドを終えることができる前に、障害カウンタは、全てゼロでなければならない。(非ゼロ障害カウンタは、未処理命令が存在することを意味するので、これは明らかである。)
命令復号器は、全てのスレッドに対する障害カウンタを記憶する。障害カウンタは、スレッドが障害状態にある時に非ゼロとすることができる。障害カウンタがゼロになると直ぐに、スレッドマネージャは、次の検査でこれらのスレッドを待機状態へと移行させることになる。
一部の場合には、障害カウンタは、実行中状態において非ゼロとすることができる。これは、長い待ち時間命令が実行されるが(それによって障害カウンタが増分される)、WHC命令が到着する前に実行される時に発生する。あるいは、WHC命令が到着している時でさえも、長い待ち時間命令がその障害カウンタに対応しない場合があり、従って、スレッドは、実行中状態に留まることになる。
図1から5を参照して上記に解説した例は、本発明の方法を実行するためのハードウエアを示している。本発明の方法は、当然ながら代替的にソフトウエアで実施することができる。
代替として、障害カウンタの効率的な使用は以下の通りである。SIMDプロセッサでは、1つの長い待ち時間命令が、外部ユニットを通じていくつかのレジスタ書込みを起動するかもしれない。命令復号器は、最初に1だけ障害カウンタを単に増分するかもしれないが、終了時には各レジスタ書込みに対して一度づつ、何度か障害カウンタを減分しようと試みるかもしれないので、上述のことによって問題に遭遇する場合がある。この問題は、命令における最後のレジスタ書込みだけを示すフラグをパイプラインを巡って渡すことによって対処することができる。命令復号器がこのフラグを参照すると、命令復号器は、障害カウンタを減分することを認識することになる。従って、複数のレジスタ書込みが存在する場合であっても、各長い待ち時間命令は、1だけ障害カウンタを増分するのみである。障害カウンタを異なる方法で用いることが可能である。例えば、障害カウンタは、長い待ち時間命令全体に対して1回ではなく、各レジスタ書込みに対して1回、開始時に増分することができる。従って、命令復号器は、各レジスタ書込みが完了すると1だけ障害カウンタを減分するだけになるので、フラグを必要としないことになる。障害カウンタを用いるこの方法は、同様に有効であるが、障害カウンタがより急速に使い果たされ、パイプライン内でより少数の長い待ち時間命令しか停止しない可能性が高まることを意味しない。
更に、WHC命令を若干異なる方法で用いることができる。WHC命令の機能は、全ての「標準」命令内に統合することができ、それによって追加命令としてのWHC命令が排除される。この場合、命令符号化において、いずれか存在するとすればどの障害カウンタを待つべきかを命令復号器に通知するビットが存在する。これらのビットは、全ての命令上に存在する必要はなく、これらのビットを持たず、長い待ち時間命令からデータが戻るのを待つように構成することができないものにおいて存在すべきである。利点は、プログラム及び命令バンド幅のサイズの低減であるが、この低減は、命令符号化ビットという代償を有する。
序論において、本発明が問題を解決すると同時に満たさなければならないいくつかの要件を提供した。
最初に、マルチスレッドプロセッサでは、多くのスレッドが、潜在的データ障害を有する場合がある。説明した実施形態では、16個の常駐スレッドのうちの12つまでを障害状態におき、それと同時に4個を依然として実行中とすることができるので、この要件が満たされる。異なる実施形態(異なる個数のスレッドが常駐を許され、異なる個数を実行中部分集合内に置くことが許される)においてもこれは成り立つことになる。
次に、各スレッドは、大量の長い待ち時間命令を有する場合がある。ここではこの要件もまた、障害カウンタの個数及び各障害カウンタが取ることができる値の範囲によって満たされる。説明した実施形態では、ハードウエアは、各々が値0から値7にわたるものとすることができる3個の障害カウンタを設ける。従って、各常駐スレッドは、プロセッサが停止する前に、21つの長い待ち時間命令を未処理及び被処理中とすることができることを保証することができる。長い待ち時間命令の個数が特に高いことが既知である場合には、障害カウンタの個数又は各々が取ることができる値の範囲を増すことができ、又は十分であると判断される場合には、障害カウンタの個数を低減することができる。実際に用いられる好ましい実施形態では、各々が0と15の間の値を取る障害カウンタが2つのみ用いられる。
長い待ち時間命令からの戻りデータが、これらのデータが送出されたものとは異なる順序で戻ってくることも可能でなければならない。この要件は、実行することができる以下の命令ストリームによって満たされる。
1)r0をロードし、HC0を増分する(長い待ち時間ロード命令)。
2)r1をサンプリングし、HC0を増分する(これは、長い待ち時間サンプリング命令である)。
3)HC0が値0に減少するのを待つ。
4)r0とr4を加算し、r2の中に入れる(短い待ち時間加算命令)。
5)r1とr5とを加算し、r3の中に入れる。
本発明によって作動するこの例では、r1は、r0がメモリインタフェースによって書き込まれる前に、テクスチャサンプリングユニットによって書き込むことができる。これらの命令の両方が、HC0のみを減分し、従って、順序は重要ではない。
また、長い待ち時間命令からのデータ障害に起因するプロセッサの停止をできる限り低減すべきである。最大利得は、スレッドがWHC命令でスケジューリング解除されることに起因するものと期待され、これは、新しいスレッドがスケジューリングされることになり、確実に行けばこれらのスレッドが、それ自体いずれかのWHC命令に遭遇する前に十分に長い間実行されることになるからである。更に、WHC命令は、長い待ち時間命令の直後にくる必要はない。WHC命令は、データソースの直前にこなければならない。有利な命令を長い待ち時間命令とWHCの間に挿入することができ、それによって待ち時間が更に吸収されることになる。複数の障害カウンタを有することにより、実際には不要な、データを待つのに費やされる時間が低減される。例えば、2つの障害カウンタ、HC0及びHC1しか持たないシステムにおける以下の命令ストリームを考える。
1)r0をロードし、HC0を増分する(長い待ち時間ロード命令)。
2)r1をロードし、HC0を増分する。
3)r2をロードし、HC1を増分する。
4)HC0が値0に減少するのを待つ(すなわち、r0及びr1を待つ)。
5)r0とr10とを加算し、r3の中に入れる(短い待ち時間加算命令)。
6)r3とr11とを加算し、r4の中に入れる。
7)r4とr12とを加算し、r5の中に入れる。
8)r5とr1とを加算し、r6の中に入れる(初めてr1が用いられる)。
9)r6とr13とを加算し、r6の中に入れ戻す。
10)r6とr14とを加算し、r6の中に入れ戻す。
11)r6とr15とを加算し、r6の中に入れ戻す。
12)HC1が値0に減少するのを待つ。
13)r2とr6とを加算し、r6の中に入れ戻す。
この例では、2つのカウンタを有するためのシステムの待ち時間の吸収は、3個のカウンタを有するものよりも悪い。
分岐のようなフロー制御をサポートするように、スレッド内のあらゆる命令を飛ばして進むことができなければならない。ここではこの要件は、全ての長い待ち時間命令が、復号される時に障害カウンタを増分し、宛先レジスタに書き込まれる時に障害カウンタを減分することによって満たされる。WHC命令が存在するか否かに関わらず、この増分及び減分は常時発生し、障害カウンタの一貫性は常時維持される。スレッドは、このスレッドに対する全ての障害カウンタがゼロになるまで終了することができない。
また、書き込まれたものとは異なる順序で結果を読み取ることができなければならない。以下の例は、この点を示している。
1)r0をロードし、HC0を増分する。
2)r1をロードし、HC0を増分する。
3)HC0が値0に減少するのを待つ。
4)41とr4とを加算し、r2の中に入れる。
5)r0とr5とを加算し、r3の中に入れる。
この例では、r0のロードは、r1のロードの前に実施されるが、r0の加算は、r1の加算の後に実施される。
また、宛先への複数の読取りアクセスができなければならない。以下の例はこの点を示している。
1)r0をロードし、HC0を増分する。
2)HC0が値0に減少するのを待つ。
3)r0とr4とを加算し、r2の中に入れる。
4)r0とr5とを加算し、r3の中に入れる。
この例では、r0は、命令3)及び4)の各々において2度読み出すべきである。
また、同じ宛先に書込みが行われ、この宛先を別の長い待ち時間命令に対する宛先として再使用することが許すべきである。以下の例はこの点を示している。
1)r0をロードし、HC0を増分する。
2)HC0が値0に減少するのを待つ。
3)r0とr4とを加算し、r2の中に入れる。
4)r0をロードし、HC0を増分する。
5)HC0が値0に減少するのを待つ。
6)r0とr5とを加算し、r3の中に入れる。
この例では、r0は2度書き込まれる。
最後に、長い待ち時間命令及び潜在的データ障害命令を処理するのに、特別又は付加的なストレージが必要とされないことが好ましい。外部ユニットから戻るデータは、FIFOのような特別ストレージへと進める必要はなく、指定の宛先レジスタ内に直接進めることができる。同じ宛先レジスタへの命令書込みがないことを保証するか、又はそうでなければ最初にWHC命令を必要とするかは、コンパイラに任される。
また、ゲート費用が最小限に保たれることが好ましい。システムは拡張可能であり、障害カウンタの個数は調節することができ、更に最大障害カウンタ値も同様に調節することができる。これが影響を及ぼす1つの事は、障害カウンタの飽和に起因して停止が発生する前に、スレッド毎に何個の長い待ち時間命令を送出することができるかである。常駐スレッド毎のストレージ量は最小であり、0…7の範囲に及ぶ3個の障害カウンタでは、スレッド毎に正確に12ビットである。
100 プロセッサ
101 スレッドマネージャ
103 命令フェッチ装置
105 外部メモリ
107 内部キャッシュ

Claims (33)

  1. スレッドが、複数の逐次命令を含み、該複数の逐次命令が、短い待ち時間命令、及び長い待ち時間命令、及び少なくとも1つの障害命令を含み、該障害命令が、該障害命令が処理される前に1つ又はそれよりも多くの先行命令が処理されることを要求する、パイプラインプロセッサにおいてスレッドを処理する方法であって、
    a)各長い待ち時間命令を処理する前に、スレッドに関連付けられたカウンタを1だけ増分する段階、
    b)各長い待ち時間命令が処理された後に、前記スレッドに関連付けられた前記カウンタを1だけ減分する段階、
    c)各障害命令を処理する前に、前記スレッドに関連付けられた前記カウンタの値を検査する段階、及び
    i)前記カウンタの値がゼロであった場合に前記障害命令を処理する段階、又は
    ii)前記カウンタの値が非ゼロであった場合に前記障害命令を処理する段階を後の時点まで休止する段階、
    を含むことを特徴とする方法。
  2. 各々にそれぞれのカウンタが関連付けられた複数のスレッドを処理するためのものであることを特徴とする請求項1に記載の方法。
  3. 前記プロセッサにおける前記又は各スレッドは、いかなる一時点においても、処理されているか、又は処理されるのを待っているか、又は請求項1の段階c)ii)に従って休止されているかのいずれかであることを特徴とする請求項1又は請求項2に記載の方法。
  4. いかなる一時点においても、複数のスレッドの部分集合が、処理されていることを特徴とする請求項3に記載の方法。
  5. 前記スレッドの部分集合を該部分集合内の各スレッドから1つの命令をラウンドロビン方式で実行することによって処理する段階を更に含むことを特徴とする請求項4に記載の方法。
  6. 前記部分集合内のスレッドの個数が、短い待ち時間命令を処理するのに必要とされる最大クロック刻み回数に等しいことを特徴とする請求項4又は請求項5に記載の方法。
  7. スレッドの最後の命令を処理した後に、該スレッドを前記複数のスレッドの前記部分集合から削除する段階、
    を更に含むことを特徴とする請求項4から請求項6のいずれか1項に記載の方法。
  8. 請求項1の段階c)ii)に従って休止された命令を有するあらゆるスレッドに関連付けられた前記カウンタの前記値を定期的に検査して、スレッドの該カウンタの該値がゼロであった場合に、このスレッドを処理されるのを待っている状態へと移行する段階、
    を更に含むことを特徴とする請求項3から請求項7のいずれか1項に記載の方法。
  9. 前記検査する段階は、クロック刻み毎に実施されることを特徴とする請求項8に記載の方法。
  10. 前記プロセッサは、複数のスレッドの個数以下の任意数のスレッドを処理するように構成されており、いかなる一時点においても、複数のスレッドのうち、ゼロ、1又は複数が空きであるようにすることを特徴とする請求項2から請求項9のいずれか1項に記載の方法。
  11. 前記又は各スレッドには、複数N個のそれぞれのカウンタが関連付けられており、
    段階c)は、
    各障害命令を処理する前に、前記スレッドに関連付けられた前記N個のカウンタのうちの少なくとも1つの前記値を検査する段階、及び
    i)前記少なくとも1つのカウンタの前記値の全てがゼロであった場合に前記障害命令を処理する段階、又は
    ii)前記少なくとも1つのカウンタの前記値の1つ又はそれよりも多くが非ゼロであった場合に、前記障害命令を処理する段階を後の時点まで休止する段階、
    を含む、
    ことを特徴とする請求項1から請求項10のいずれか1項に記載の方法。
  12. 各長い待ち時間命令は、前記N個のカウンタのうちのどれを該長い待ち時間命令が処理される前に増分し、かつ該長い待ち時間命令が処理された後に減分すべきであるかの指示を含むことを特徴とする請求項11に記載の方法。
  13. 各障害命令には、該障害命令が処理される前に前記N個のカウンタのうちのどれを検査すべきであるかの指示を含む命令が先行することを特徴とする請求項12に記載の方法。
  14. 各障害命令が、該障害命令が処理される前に前記N個のカウンタのうちのどれを検査すべきであるかの指示を含むことを特徴とする請求項12に記載の方法。
  15. コンピュータ手段上で実行された時に請求項1から請求項14のいずれか1項に記載の方法を該コンピュータ手段に実施させるコンピュータプログラム。
  16. 請求項15に記載のコンピュータプログラムを記憶した記録担体。
  17. スレッドが、複数の逐次命令を含み、該複数の逐次命令が、短い待ち時間命令、及び長い待ち時間命令、及び少なくとも1つの障害命令を含み、該障害命令が、該障害命令が処理される前に1つ又はそれよりも多くの先行命令が処理されることを要求する、スレッドを処理するためのパイプラインプロセッサであって、
    スレッドに関連付けられたカウンタ、
    各長い待ち時間命令が処理される前に前記カウンタを1だけ増分するための手段、
    各長い待ち時間命令が処理された後に前記カウンタを1だけ減分するための手段、及び 各障害命令が処理される前に前記スレッドに関連付けられた前記カウンタの値を検査して、i)該カウンタの値がゼロであった場合に該障害命令を処理し、又はii)該カウンタの値が非ゼロであった場合に該障害命令の処理を後の時点まで休止するための手段、
    を含むことを特徴とするプロセッサ。
  18. 前記カウンタを増分するための前記手段、及び、該カウンタを減分するための前記手段は、短い待ち時間命令と長い待ち時間命令の間の区別を付けることができる命令復号器に含まれることを特徴とする請求項17に記載のプロセッサ。
  19. スレッドマネージャを更に含み、
    前記カウンタは、前記命令復号器によって維持されるが、前記スレッドマネージャによってアクセスすることができる、
    ことを特徴とする請求項18に記載のプロセッサ。
  20. 障害命令が処理される前に前記スレッドに関連付けられた前記カウンタの値を検査するための前記手段は、該障害命令と残りの命令との間の区別を付けることができる前記命令復号器に含まれることを特徴とする請求項18又は請求項19に記載のプロセッサ。
  21. 各々がそれぞれのカウンタに関連付けられた複数のスレッドを処理するのに適することを特徴とする請求項17から請求項20のいずれか1項に記載のプロセッサ。
  22. プロセッサにおける前記又は各スレッドは、いかなる一時点においても、処理されているか、又は処理されるのを待っているか、又は請求項17のii)に従って休止されているかのいずれかであることを特徴とする請求項17から請求項21のいずれか1項に記載のプロセッサ。
  23. いかなる一時点においても、複数のスレッドの部分集合が、処理されていることを特徴とする請求項22に記載のプロセッサ。
  24. スレッドの前記部分集合を該部分集合内の各スレッドから1つの命令をラウンドロビン方式で実行することによって処理するための手段を更に含むことを特徴とする請求項23に記載のプロセッサ。
  25. 前記部分集合内のスレッドの個数が、短い待ち時間命令を処理するのに要求される最大クロック刻み回数に等しいことを特徴とする請求項23又は請求項24に記載のプロセッサ。
  26. スレッドの最後の命令を処理した後に、該スレッドを前記複数のスレッドの前記部分集合から削除するように構成されることを特徴とする請求項23から請求項25のいずれか1項に記載のプロセッサ。
  27. 請求項17のii)に従って休止された命令を有するあらゆるスレッドに関連付けられた前記カウンタの前記値を定期的に検査して、スレッドの該カウンタの該値がゼロであった場合にこのスレッドを処理されるのを待っている状態へと移行させるように構成されることを特徴とする請求項23から請求項26のいずれか1項に記載のプロセッサ。
  28. クロック刻み毎に前記カウンタの前記値を検査するように構成されることを特徴とする請求項27に記載のプロセッサ。
  29. 複数のスレッドの個数以下の任意数のスレッドを処理するように構成されており、いかなる一時点においても、複数のスレッドのうち、ゼロ、1又は複数が空きであるようにすることを特徴とする請求項21から請求項28のいずれか1項に記載のプロセッサ。
  30. 前記又は各スレッドには、複数N個のそれぞれのカウンタが関連付けられており、該スレッドに関連付けられた該カウンタの値を検査するための前記手段は、
    各障害命令が処理される前に前記スレッドに関連付けられた前記N個のカウンタのうちの少なくとも1つの前記値を検査して、i)該少なくとも1つのカウンタの該値の全てがゼロであった場合に該障害命令を処理し、又はii)該少なくとも1つのカウンタの該値のうちの1つ又はそれよりも多くが非ゼロであった場合に該障害命令の処理を後の時点まで休止するための手段、
    を含む、
    ことを特徴とする請求項17から請求項29のいずれか1項に記載のプロセッサ。
  31. 各長い待ち時間命令が、前記N個のカウンタのうちのどれを該長い待ち時間命令が処理される前に増分し、かつ該長い待ち時間命令が処理された後に減分すべきかの指示を含むことを特徴とする請求項30に記載のプロセッサ。
  32. 各障害命令には、該障害命令が処理される前に前記N個のカウンタのうちのどれを検査すべきかの指示を含む命令が先行することを特徴とする請求項31に記載のプロセッサ。
  33. 各障害命令が、該障害命令が処理される前に前記N個のカウンタのうちのどれを検査すべきかの指示を含むことを特徴とする請求項31に記載のプロセッサ。
JP2010500342A 2007-03-26 2008-02-12 パイプラインプロセッサにおける長い待ち時間命令の処理 Active JP5263844B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0705804A GB2447907B (en) 2007-03-26 2007-03-26 Processing long-latency instructions in a pipelined processor
GB0705804.3 2007-03-26
PCT/GB2008/000479 WO2008117008A1 (en) 2007-03-26 2008-02-12 Processing long-latency instructions in a pipelined processor

Publications (2)

Publication Number Publication Date
JP2010522920A JP2010522920A (ja) 2010-07-08
JP5263844B2 true JP5263844B2 (ja) 2013-08-14

Family

ID=38024884

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010500342A Active JP5263844B2 (ja) 2007-03-26 2008-02-12 パイプラインプロセッサにおける長い待ち時間命令の処理

Country Status (5)

Country Link
US (2) US8214624B2 (ja)
EP (1) EP2140347B1 (ja)
JP (1) JP5263844B2 (ja)
GB (1) GB2447907B (ja)
WO (1) WO2008117008A1 (ja)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8261025B2 (en) 2007-11-12 2012-09-04 International Business Machines Corporation Software pipelining on a network on chip
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution
US8423715B2 (en) 2008-05-01 2013-04-16 International Business Machines Corporation Memory management among levels of cache in a memory hierarchy
GB2469299B (en) 2009-04-07 2011-02-16 Imagination Tech Ltd Ensuring consistency between a data cache and a main memory
US11210098B2 (en) 2013-07-15 2021-12-28 Texas Instruments Incorporated Variable latency instructions
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US10649780B2 (en) * 2014-04-01 2020-05-12 The Regents Of The University Of Michigan Data processing apparatus and method for executing a stream of instructions out of order with respect to original program order
US20150277925A1 (en) * 2014-04-01 2015-10-01 The Regents Of The University Of Michigan Data processing apparatus and method for executing a stream of instructions out of order with respect to original program order
GB2544994A (en) * 2015-12-02 2017-06-07 Swarm64 As Data processing
US11074075B2 (en) * 2017-02-24 2021-07-27 Advanced Micro Devices, Inc. Wait instruction for preventing execution of one or more instructions until a load counter or store counter reaches a specified value
GB2584227B (en) * 2017-06-16 2021-06-23 Imagination Tech Ltd Inter-pipeline data hazard avoidance
GB2563582B (en) * 2017-06-16 2020-01-01 Imagination Tech Ltd Methods and systems for inter-pipeline data hazard avoidance
US9934287B1 (en) * 2017-07-25 2018-04-03 Capital One Services, Llc Systems and methods for expedited large file processing
US11093251B2 (en) 2017-10-31 2021-08-17 Micron Technology, Inc. System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network
US11157286B2 (en) 2018-05-07 2021-10-26 Micron Technology, Inc. Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US11513838B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread state monitoring in a system having a multi-threaded, self-scheduling processor
US11513839B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Memory request size management in a multi-threaded, self-scheduling processor
US11513840B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US11119782B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11513837B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric
US11126587B2 (en) 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US11132233B2 (en) 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11074078B2 (en) 2018-05-07 2021-07-27 Micron Technology, Inc. Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion
US11068305B2 (en) 2018-05-07 2021-07-20 Micron Technology, Inc. System call management in a user-mode, multi-threaded, self-scheduling processor
US11119972B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
WO2020214624A1 (en) * 2019-04-15 2020-10-22 Texas Instruments Incorporated Variable latency instructions
US11455171B2 (en) * 2019-05-29 2022-09-27 Gray Research LLC Multiported parity scoreboard circuit
US11188406B1 (en) * 2021-03-31 2021-11-30 Advanced Micro Devices, Inc. Detecting execution hazards in offloaded operations
US11467841B1 (en) * 2021-06-01 2022-10-11 Andes Technology Corporation Microprocessor with shared functional unit for executing multi-type instructions
US11762661B2 (en) * 2021-07-28 2023-09-19 Micron Technology, Inc. Counter for preventing completion of a thread including a non-blocking external device call with no-return indication

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5961639A (en) * 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US5996064A (en) * 1997-12-30 1999-11-30 Intel Corporation Method and apparatus for guaranteeing minimum variable schedule distance by using post-ready latency
US5961630A (en) * 1997-12-30 1999-10-05 Intel Corporation Method and apparatus for handling dynamic structural hazards and exceptions by using post-ready latency
US6035389A (en) * 1998-08-11 2000-03-07 Intel Corporation Scheduling instructions with different latencies
US6311266B1 (en) * 1998-12-23 2001-10-30 Cray Inc. Instruction look-ahead system and hardware
US6711670B1 (en) * 1999-10-14 2004-03-23 Hewlett-Packard Development Company, L.P. System and method for detecting data hazards within an instruction group of a compiled computer program
US6715060B1 (en) * 2000-01-28 2004-03-30 Hewlett-Packard Development Company, L.P. Utilizing a scoreboard with multi-bit registers to indicate a progression status of an instruction that retrieves data
US6490674B1 (en) * 2000-01-28 2002-12-03 Hewlett-Packard Company System and method for coalescing data utilized to detect data hazards
US6931641B1 (en) * 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US6598122B2 (en) * 2000-04-19 2003-07-22 Hewlett-Packard Development Company, L.P. Active load address buffer
US6757811B1 (en) * 2000-04-19 2004-06-29 Hewlett-Packard Development Company, L.P. Slack fetch to improve performance in a simultaneous and redundantly threaded processor
US6792525B2 (en) * 2000-04-19 2004-09-14 Hewlett-Packard Development Company, L.P. Input replicator for interrupts in a simultaneous and redundantly threaded processor
JP3796124B2 (ja) * 2001-03-07 2006-07-12 株式会社ルネサステクノロジ スレッド間優先度可変プロセッサ
US7096470B2 (en) * 2002-09-19 2006-08-22 International Business Machines Corporation Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure
US20040111594A1 (en) * 2002-12-05 2004-06-10 International Business Machines Corporation Multithreading recycle and dispatch mechanism
US7487502B2 (en) * 2003-02-19 2009-02-03 Intel Corporation Programmable event driven yield mechanism which may activate other threads
US7000047B2 (en) * 2003-04-23 2006-02-14 International Business Machines Corporation Mechanism for effectively handling livelocks in a simultaneous multithreading processor
US20040225868A1 (en) * 2003-05-07 2004-11-11 International Business Machines Corporation An integrated circuit having parallel execution units with differing execution latencies
US7257699B2 (en) * 2004-07-08 2007-08-14 Sun Microsystems, Inc. Selective execution of deferred instructions in a processor that supports speculative execution
US7664936B2 (en) 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages

Also Published As

Publication number Publication date
US20120246451A1 (en) 2012-09-27
GB0705804D0 (en) 2007-05-02
GB2447907A (en) 2008-10-01
EP2140347A1 (en) 2010-01-06
US8214624B2 (en) 2012-07-03
WO2008117008A1 (en) 2008-10-02
GB2447907B (en) 2009-02-18
JP2010522920A (ja) 2010-07-08
US8407454B2 (en) 2013-03-26
EP2140347B1 (en) 2017-05-31
US20080244247A1 (en) 2008-10-02

Similar Documents

Publication Publication Date Title
JP5263844B2 (ja) パイプラインプロセッサにおける長い待ち時間命令の処理
US6671827B2 (en) Journaling for parallel hardware threads in multithreaded processor
US9690581B2 (en) Computer processor with deferred operations
EP1008053B1 (en) Controlling memory access ordering in a multi-processing system
US7734897B2 (en) Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads
JP4759273B2 (ja) データ処理装置及び共用資源へのアクセス制御方法
US6944850B2 (en) Hop method for stepping parallel hardware threads
JP5548037B2 (ja) 命令発行制御装置及び方法
US20120284720A1 (en) Hardware assisted scheduling in computer system
US20120159125A1 (en) Efficiency of short loop instruction fetch
US8478971B1 (en) Multithread handling
JPS63127368A (ja) ベクトル処理装置の制御方式
KR100983135B1 (ko) 패킷의 의존성 명령을 그룹핑하여 실행하는 프로세서 및 방법
US20100332800A1 (en) Instruction control device, instruction control method, and processor
US20080155237A1 (en) System and method for implementing and utilizing a zero overhead loop
US20070260857A1 (en) Electronic Circuit
JP5316407B2 (ja) 演算処理装置および演算処理装置の制御方法
US10481913B2 (en) Token-based data dependency protection for memory access
EP1299801A1 (en) Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US7124288B2 (en) Programmable unit with a stack buffer storage device configurable into discrete shadow storage elements accessible by a plurality of command execution units
EP1384145B1 (en) Expanded functionality of processor operations within a fixed width instruction encoding
JP4151497B2 (ja) パイプライン処理装置
CN117520038A (zh) 一种超标量的低功耗处理器中处理异常和中断的方法及装置
JP2002351658A (ja) 演算処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120924

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121225

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130325

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130424

R150 Certificate of patent or registration of utility model

Ref document number: 5263844

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250