JP6400296B2 - マルチモード支援プロセッサ及びマルチモードを支援する処理方法 - Google Patents

マルチモード支援プロセッサ及びマルチモードを支援する処理方法 Download PDF

Info

Publication number
JP6400296B2
JP6400296B2 JP2014013823A JP2014013823A JP6400296B2 JP 6400296 B2 JP6400296 B2 JP 6400296B2 JP 2014013823 A JP2014013823 A JP 2014013823A JP 2014013823 A JP2014013823 A JP 2014013823A JP 6400296 B2 JP6400296 B2 JP 6400296B2
Authority
JP
Japan
Prior art keywords
end unit
processing
processing element
unit
activated
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
JP2014013823A
Other languages
English (en)
Other versions
JP2014146335A (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.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co 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 Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2014146335A publication Critical patent/JP2014146335A/ja
Application granted granted Critical
Publication of JP6400296B2 publication Critical patent/JP6400296B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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 or 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • G06F9/38885Divergence aspects
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Description

SIMD及びMIMDモードを支援するプロセッサ及びそのプロセッサにおけるマルチモードを支援する処理方法と関連する。
SIMD(Single Instruction Multiple Data)構造に基づいたプロセッサは、すべてのプロセシングエレメント(Processing Element)がインストラクションフェッチ(Instruction Fetch)及びデコード(Decode)機能を担当する一つのフロントエンドユニット(Front End Unit)を使用して命令語を共有することによって、ハードウェア資源を最小化し、データ並列処理による性能向上を最大化する。SIMDストラクチャーを使用するプロセッサにおいて、プロセッサが条件分岐を処理すると、各条件分岐文を順次に行うようになって、与えられた資源を效率的に使用することができなくなる。しかしながら、SIMDストラクチャーは、条件分岐が順次に行われることを必要とする。ただ一つのフロントエンドユニットが存在するので、SIMDストラクチャーは、コードがスレッドダイバージェンスを引き起こす状況が順次に解決されることを必要とする。SIMDストラクチャーによってスレッドが互いに相互依存的(interdependent)になるためである。したがって、SIMDストラクチャーは、SIMDストラクチャーが単一のフロントエンドユニットのみを必要とする場合には、プロセッサの複雑度(complexity)を軽減させることができるが、スレッドダイバージェンスは、SIMD環境において問題を引き起こす。
これに対し、MIMD(Multiple Instruction Multiple Data)ストラクチャーに基づいたプロセッサは、すべてのプロセシングエレメントが独立的なフロントエンドユニットを有して動作する。MIMDストラクチャーは、独立的なスレッド(thread)を同時に処理するために、速い演算処理が可能で条件分岐文処理に適している。しかしながら、プロセッサのフロントエンドユニットがMIMDストラクチャーを使用する場合、ハードウェアが複雑になり、サイズが増加し、かつ費用が増加するという問題がある。また、固定MIMDストラクチャー(fixed MIMD structure)を有するプロセッサは、複数のフロントエンドユニットを有するように設計されることを必要とし、はなはだしきは複数のフロントエンドユニットのうち、一部のみが実際に使用される場合にも同様である。
本発明は、上記の問題を解決するためになされたものであって、その目的は、SIMD及びMIMDモードを支援するプロセッサ及びそのプロセッサにおけるマルチモードを支援する処理方法を提供することにある。
一様相によれば、プロセッサは、フロントエンドユニットと、前記フロントエンドユニットよりさらに多くの数のプロセシングエレメントと、前記フロントエンドユニットにおいて条件分岐命令によりスレッドダイバージェンス(thread divergence)が発生するかどうかを判断し、前記条件分岐命令が発生する場合、前記プロセシングエレメントが現在活性化されたフロントエンドユニットを利用して命令を処理するように制御命令を設定し、前記条件分岐命令が発生しない場合、前記プロセシングエレメントが現在活性化された一つのフロントエンドユニットを利用して命令を処理するように、前記プロセシングエレメントを制御する制御情報を設定する制御部とを備える。
このとき、前記制御情報に基づいて前記現在活性化されたフロントエンドユニットの命令語を処理するのに使用するプロセシングエレメントを判断し、前記命令語を前記使用するプロセシングエレメントに伝達するインターコネクション部をさらに備えることができる。
また、複数のレジスタを備え、前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納することができる。
また、前記制御情報は、前記各フロントエンドユニットに対するプロセシングエレメント割り当て情報を含むことができる。
複数のレジスタは、対応するフロントエンドユニットに対するプロセシングエレメント割り当て情報を格納するための全体プロセシングエレメント数分だけのビット領域を含むことができる。
また、前記制御部は、前記現在活性化されたフロントエンドユニットにより検出された条件分岐命令語を処理したプロセシングエレメントから処理結果を受信してスレッドダイバージェンス有無を判断し、スレッドダイバージェンスが発生すると判断されると、活性化されていないフロントエンドユニットのうちの何れか一つをさらに活性化することができる。
また、制御部は、前記さらに活性化されたフロントエンドユニットに前記プロセシングエレメントの一部を割り当てて、その割り当て情報を前記さらに活性化されたフロントエンドユニットに対応するレジスタに格納することができる。
また、制御部は、前記現在活性化されたフロントエンドユニットと前記さらに活性化されたフロントエンドユニットにより条件分岐文の処理がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化し、そのさらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定することができる。
他の様相によるマルチモードを支援する処理方法は、現在活性化されたフロントエンドユニットが条件分岐命令語を検出するステップと、制御部が前記検出された条件分岐命令語によりスレッドダイバージェンスが発生するかどうかを判断するステップと、制御部が前記判断結果スレッドダイバージェンスが発生する場合、非活性化されているフロントエンドユニットのうちの何れか一つをさらに活性化するステップと、制御部が前記活性化されたフロントエンドユニットを利用してプロセシングエレメントが命令語を処理するように制御情報を設定するステップとを含む。
このとき、前記プロセッサは、複数のフロントエンドユニットを含み、前記プロセシングエレメントは、前記フロントエンドユニットよりさらに多くの数からなることができる。
スレッドダイバージェンスの発生有無を判断するステップにおいて、前記制御部が前記条件分岐命令語を処理したプロセシングエレメントから処理結果を受信し、その受信された処理結果に基づいてスレッドダイバージェンスが発生するかどうかを判断することができる。
制御部は、前記レジスタ内において前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納する二つ以上のレジスタを含むことができる。
制御情報は、前記各フロントエンドユニットに対するプロセシングエレメントの割り当て情報を含むことができる。
各レジスタは、対応するフロントエンドユニットに対するプロセシングエレメントの割り当て情報を格納するためのプロセシングエレメント数分だけのビット領域を含むことができる。
制御情報設定ステップは、前記さらに活性化されたフロントエンドユニットに対応するレジスタのビット領域において前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応するビット値を設定することができる。
また、制御部が前記現在活性化されたフロントエンドユニットとさらに活性化されたフロントエンドユニットにより処理される条件分岐がすべて終了しているかどうかを判断するステップと、前記判断結果、条件分岐がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化するステップと、前記さらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定するステップとを含むことができる。
さらに他の様相によるマルチモードプロセッサは、条件分岐命令を検出する現在活性化されたフロントエンドユニットと、検出された前記条件分岐命令に基づいて、スレッドダイバージェンスが発生するかどうかを判断し、前記スレッドダイバージェンスが発生する場合、現在非活性化されたフロントエンドユニットをさらに活性化し、プロセシングエレメントが前記活性化されたフロントエンドユニットから受信された命令を処理するように制御情報を設定する制御部とを備える。
このとき、1またはそれ以上の非活性化されたフロントエンドユニットと、フロントエンドユニットの総個数より多い数のプロセシングエレメントとを備えることができる。
また、前記スレッドダイバージェンスが発生するかどうかを判断する時に、前記条件分岐命令を処理した結果を前記プロセシングエレメントから受信し、前記スレッドダイバージェンスが発生するかどうかを受信された結果に基づいて判断することができる。
さらに他の様相によるマルチモードプロセッサは、条件分岐を個別的に実行する現在活性化されたフロントエンドユニットと、前記条件分岐がすべて終了したかどうかを判断し、前記条件分岐がすべて終了したと判断した場合、少なくとも一つのフロントエンドユニットを非活性化する制御部とを備える。
制御部は、前記非活性化されたフロントエンドユニットの前記プロセシングエレメントを他のフロントエンドユニットに再度割り当てることができる。
また、制御部は、前記フロントエンドユニットの各々に関するレジスタをさらに備え、前記レジスタ内に前記フロントエンドユニットの各々に関する制御情報を格納することができる。
制御情報は、前記フロントエンドユニットの各々のプロセシングエレメント割り当て情報をさらに含むことができる。
前記レジスタの各々は、プロセシングエレメントの総個数分だけのビット領域を含み、前記プロセシングエレメント割り当て情報を前記レジスタに格納することができる。
また、前記制御情報を設定する時に、さらに活性化されたフロントエンドユニットに関するレジスタのビット領域のビット値を設定し、前記ビット値は、前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応する値になるようにすることができる。
再度割り当ては、前記非活性化されたフロントエンドユニット及び前記他のフロントエンドユニットの前記ビット領域上において論理和(logical OR)演算を行うことによってなされるようにすることができる。
本発明によれば、プロセシングエレメントが動的にフロントエンドユニットを共有するようにすることができ、プロセッサがSIMDモードとMIMDモードとの間で実行モードを転換できるので、フロントエンドユニットの費用を低減し処理速度を向上させることができる。
一実施形態に係るプロセッサを示す図である。 一般的なプロセッサにおける条件分岐文処理を説明するための例である。 一実施形態に係るプロセッサにおける条件分岐文処理を説明するための例である。 一実施形態に係るプロセッサにおけるマルチモードを支援する処理方法のフローチャートである。
その他の実施形態の具体的な事項は、詳細な説明及び図面らに含まれている。記載された技術の利点及び特徴、そしてそれらを達成する方法は、添付される図面と共に詳細に後述されている実施形態を参照すると明確になるはずである。明細書全体にわたって同一の参照符号は、同一の構成要素を指し示す。
プロセッサ、例えば複数のプロセシングエレメントを有する並列プロセッサは、SIMDモードまたはMIMDモードプロセッサでありうる。プロセシングエレメントが動的にフロントエンドユニットを共有するように許すプロセッサに関する実施形態、及びプロセッサがSIMDモードとMIMDモードとの間でモードを転換するプロセッサに関する実施形態を説明する。フロントエンドユニットを共有しSIMDモードとMIMDモードとの間でモードを転換することによって、実施形態は、フロントエンドユニットに関する設計費用を最小化しながらもスレッドダイバージェンスが発生する状況においてMIMDモードで動作するようにする性能的利点を得ることができる。
図1は、一実施形態に係るプロセッサを示す。図1に示すように、プロセッサ100は、フロントエンドユニット120、インターコネクション部130、プロセシングエレメント140及び制御部150を備える。
フロントエンドユニット120は、少なくとも二つ以上FEU_0〜FEU_M−1であり、今後のプロセッサ100の拡張性を考慮して適切な数が構成される。プロセッサ100の拡張性は、プロセッサ100が増加する作業の量に耐えることができる能力を意味する。拡張性は、増加した作業の特性に左右される他の考慮事項を含むこともできる。例えば、フロントエンドユニット120の数は、与えられた作業時間の間にプロセッサ100が処理しなければならないデータの量に基づいて選択されることもできる。しかし、拡張性は、並列性を利用してデータを処理できる能力を考慮することもでき、特定プロセシングタスクは、並列遂行にさらに適合することもできる。
例えば、プロセッサ100の処理条件が、主にダイバージェンスが少なく発生する順次的スレッドの場合には、ダイバージェンスが頻繁に発生する複数のスレッドをプロセスが取扱う場合とは異なる拡張性を考慮しなければならない。スレッドのダイバージェンスが拡張性と関連する理由は、仮にスレッドが順次的であれば、スレッドを実行する前に他のスレッドの実行終了を待たなくても並列にスレッドを実行させることが極めて容易であるためである。プロセッサ100が処理するように設計されたデータの量と特性及び処理しなければならないタイミングに基づいて、適切なフロントエンドユニット120の数は変わることができる。例えば、仮にプロセッサ100が処理するデータが複雑で高度に分岐されたコードを含む場合、相対的に多くの数のフロントエンドユニット120を含む実施形態が適切である。仮に、処理されるデータがスレッドダイバージェンスが少なく発生する高度に順次的なコードを含むと、プロセッサ100は、少ない数のフロントエンドユニット120を含むように設計されることができる。一方、適切なフロントエンドユニット120の数は、性能とプロセッサ複雑度の間で収容可能な程度の均衡を提供できる数で、実験やヒューリスティックまたは原理に基づいて選択されることができる。例えば、フロントエンドユニット120の数はプロセッサが処理するデータの特性を決定づける多様なファクターや統計に関する情報を使用するアルゴリズムや公式に基づいて導き出されることができる。
例えば、実施形態においてM個のフロントエンドユニット120があると仮定すると、Mという数が上で説明された方式を利用して決定されるか、またはその他の方式を利用して決定されることができる。フロントエンドユニット120は、インストラクションキャッシュ110から命令語をフェッチ(Fetch)しデコード(decode)する機能を行う。インストラクションキャッシュ110は、プロセッサ100がインストラクションをアクセスするために必要な時間を低減するために用意した、メインメモリ以外のさらに高速の代替的(alternative)メモリであり、インストラクションを格納する。例えば、インストラクションキャッシュ110は、フロントエンドユニット120による高速のアクセスのためにインストラクションを提供することによって、実行するインストラクションのフェッチ速度を向上させることができる。キャッシュは、多様な実施形態において互いに異なるインストラクションキャッシュ110を利用して多様な類型により具現化されることができる。例えば、キャッシュが複数のレベルを有する互いに異なる類型と速度のメモリを使用するように具現化されることができる。
先に言及したように、インストラクションキャッシュ110は、プロセッサ100の処理のために、実行するインストラクションをフェッチしデコードする。多様な類型にインストラクションキャッシュ110が具現化されて、インストラクションキャッシュ110の機能を提供できる。しかしながら、ある状況ではインストラクションキャッシュ110が特定実行インストラクションを含むことができない場合もある。そういう状況は、キャッシュ「ミス(miss)」状況と呼ばれる。これは所望の情報をキャッシュから得ることができ、メインメモリ内で所望の情報を探索する必要のない状況をいうキャッシュ「ヒット(hit)」状況と相反する。キャッシュ「ヒット」状況では、キャッシュは、適切なインストラクションをキャッシュ内でアクセスすることによってインストラクションをフェッチする。しかしながら、キャッシュ「ミス」状況では、所望の情報にアクセスするために、キャッシュは、該当情報をメインメモリから引き出さなければならず(retrieve)、速度がかなり遅い。キャッシングをする原則の一つは、一度使用された情報は再度使用される可能性が高いので、キャッシュメモリに維持しなければならないということであるから、一般に情報がメインメモリから引き出されると、キャッシュに格納される。しかし、キャッシュが一般的に限定された格納容量を有するために、可能なかぎりメインメモリをアクセスする必要性がないように、多様なアルゴリズムとテクニックを利用してキャッシュ内のあまり要らない情報を除去しなければならない。
実行するインストラクションは、機械語インストラクションであってもよい。そういう機械語インストラクションは、プロセシングエレメント140が単一の処理手順を行うのに必要な情報を提供する。例えば、実行するインストラクションは、オペコード(opcode)とオペランド(operands)とを備えることができる。オペコードは、フロントエンドユニット120においてデコードされると、行われる命令を識別する役割を果たし、オペランドは、命令遂行の対象になるデータである。例えば、オペランドは、オペコードによって行われる情報を含むプロセッサ100のレジスタを示すことができる。例えば、オペコードは、演算、データ送信、論理、条件分岐または無条件ジャンプ(unconditional jump)のような多様なカテゴリーを有することができる。先に言及したように、プロセッサ100は、条件分岐オペコードに対して特別な方式で応答するように設計されることができる。オペコードは、一般にスレッドダイバージェンスを引き起こさずに並列的に実行されることのできる一連の命令を提供する。しかし、条件分岐オペコードは、多様な方式で実行されることができるので、実行される時にスレッドダイバージェンスを引き起こすことがあり、条件分岐の影響を直ちに解決できない場合もある。したがって、条件分岐の発生する場合にも並列実行を続けるためには、プロセッサ100は、スレッドダイバージェンスが解決されるまで複数のフロントエンドユニット120を使用して処理し続けなければならない。
フロントエンドユニット120のフェッチされた命令語をデコードすることによって、プロセッサ100は、フェッチされた命令を解析して命令を実行できる。フロントエンドユニット120は、インストラクションキャッシュ110に命令語がある場合、インストラクションキャッシュ110に要請するか、またはキャッシュミスの場合、メインメモリ(図示せず)に要請することによって、命令語をフェッチする。フロントエンドユニット120は、命令語をデコードしてどんな動作が行われるかをオペコードに基づいて判断し、どんなデータに対して行うかをオペランドに基づいて判断する。一般に、オペランドの重要性は、オペコードに対応する動作によって異なりうる。例えば、「加算(add)」オペコードの場合、2個のオペランドが加算された後、第3のオペランドにその合計が配置される。または、「ワード読み出し(load−word)」オペコードの場合、オペランドは、メモリ情報を読み出すメモリアドレス及びメモリ情報を格納するデスティネーションレジスタを表すことができる。プロセシングエレメント140は、フロントエンドユニット120から出力された命令語を処理する機能を行い、少なくとも二つ以上PE_0〜PE_N−1から構成される。NがMより大きいと、M個のフロントエンドユニット120のうち、少なくとも一つがデコードされたインストラクションを1以上のプロセシングエレメント140に送信するようになる。したがって、フロントエンドユニット120は、プロセシングエレメント140間の並列性(parallelism)及び関係(relationship)を管理する。
このとき、プロセシングエレメント140は、フロントエンドユニット120より多くの数からなることができる。複数のプロセシングエレメント140は、状況により一つのフロントエンドユニット120を介して命令語を処理するか、または二つ以上のフロントエンドユニット120を介して命令語を処理できる。複数のプロセシングエレメント140が一つのフロントエンドユニット120を使用すると、プロセッサ100は、SIMDプロセッサとして動作する。複数のプロセシングエレメント140は、2またはそれ以上のフロントエンドユニット120を使用すると、プロセッサ100は、MIMDプロセッサとして動作する。実施形態において、プロセッサ100は、命令語のデコード及び複数のプロセシングエレメント140への送信を実際に行うフロントエンドユニット120の数を調整する能力を有することによって、プロセッサ100の性能を最適化する。
インストラクションキャッシュ110とプロセシングエレメント140との間のデータフローは、それぞれの命令語がフロントエンドユニット120を介してどのように経路が設定されてプロセシングエレメント140によって処理されるかによって変わることがある。また、データフローは、経路設定される命令語の類型によって変わることがある。例えば、一般的な命令語は、単純に順次に行われることができ、フロントエンドユニット120によってプロセシングエレメント140に並列的に分配されることができる。しかしながら、仮に条件分岐命令語がある場合、プロセシングエレメント140をどのように管理して遅延と速度低下を最小化させながらも正確な結果を保証できるかをフロントエンドユニット120が判断しなければならない場合もある。制御部150は、実施形態の構成によってインストラクションキャッシュ110から命令語をフェッチしデコードするフロントエンドユニット120と、そのフロントエンドユニット120を利用して命令語を処理するプロセシングエレメント140を動的に決定できる。
したがって、制御部150は、フロントエンドユニット120とプロセシングエレメント140との間の動的マッピングを行う仲介者として動作する。動的マッピングが制御部150によって提供されるので、プロセッサ100は、SIMDモードとMIMDモードの長所をすべて取ることができる。仮に、分岐とスレッドダイバージェンスがなくてSIMDモードでも十分であると、制御部150は、単一のフロントエンドユニット120とプロセシングエレメント140との間で命令語の経路を設定することによって、プロセッサ100がSIMDモードプロセッサと同様に動作するようにする。一方、制御部150は、複数のフロントエンドユニット120とプロセシングエレメント140との間で命令語を動的にマッピングすることもできる。このとき、プロセッサ100は、MIMDモードで動作する。制御部150は、どのフロントエンドユニット120が命令語をどのプロセシングエレメント140に送信するかを動的に選択できるので、制御部150は、どのように性能を改善させる方向に命令語を処理するかを適応させることができる。制御部150は、非効率性を軽減させる方向で資源を管理して処理速度を向上させることができるためである。例えば、制御部150は、活性化されたフロントエンドユニット120の数を特定処理作業に必要な数で最小化することによって、プロセシングオーバーヘッドを最小化できる。一方、制御部150は、必要な個数分だけフロントエンドユニット120を活性化させることができるので、処理作業に複数のフロントエンドユニット120が必要な場合、制御部150は、追加のフロントエンドユニット120を活性化させることもできる。例えば、制御部150は、初めスレッドダイバージェンスや分岐のない時には、単一のフロントエンドユニット120を使用することができるので、プロセッサ100がSIMDプロセッサとして動作するようにすることができる。その後、プロセッサ100が分岐命令語に出会うと、制御部150が動的にフロントエンドユニット120を活性化して複数の分岐を並列に処理することによって、プロセッサ100が待機する必要がなく、潜在的なSIMDモードのその他の短所を回避できるので、スレッドダイバージェンスが発生しても、ダイバージェンスされたスレッドが解決されるのを待つ間に、並列処理の全体過程を遅らせる必要がない。プロセスを最適化するための動的活性化及び非活性化については、以下でさらに具体的に説明する。
実施形態において、フロントエンドユニット120を動的に選択して資源管理をするためには、SIMDモードとMIMDモードとの間でモードを変更しなければならない。各々のモードは、並列コンピューティングを扱う互いに異なる方式を意味する。SIMDプロセシングでは、複数のプロセシングエレメントが複数のデータポイントで同時に同じ演算を行う。したがって、SIMDは、データレベル並列性(data level parallelism)を含む。すなわち、すべてのデータが同じ方式で処理されることを意味する。しかしながら、SIMDアプローチは、すべてのデータが同じ方式で処理されなければならないので、仮に分岐やスレッドダイバージェンスが発生する時に問題が生じうる。SIMDは、データが共に処理されなければならないので、ダイバージェンスするスレッドが解決されるまで並列処理の全体過程が待機しなければならないためである。
MIMDプロセシングでは、MIMDを使用する装置が自動に、また非同期式で動作する多数のプロセッサを有する。MIMDでは、各々のプロセッサのプロセシングは、他のプロセッサのプロセシングと独立的であり、互いに異なるプロセッサは、互いに異なるデータ部分に対して互いに異なる命令語を行うことができる。しかし、MIMDが提供する独立性のおかげで各々のプロセッサは他のプロセッサの動作とは関係なく動作を行うことができるが、プロセッサがこのように独立的に動作するためには、プロセッサ間に動作を干渉しないことを保証するための追加的なインフラストラクチャーが必要である。例えば、メモリをアクセスする時にプロセッサが他のプロセッサを妨害しないようにするために、MIMDのメモリアーキテクチャーは共有メモリモデル(shared memory model)や分散メモリモデル(distributed memory model)でなければならない。
先に説明したように、各々のモードは、特定用途に応じるシナリオにさらによく適応されることができる。MIMDモードは、ダイバージェンススレッドを同時に取扱うことができる能力を提供し、これを通じて特に分岐コードに対するさらに優れた並列性を得ることができるが、MIMDは、スレッドを分離する機能のために豊かな支援を必要とするので、オーバーヘッドが多く発生するようになる。したがって、フロントエンドユニット120を動的に選択するようになれば、SIMDモードとMIMDモードとの間で選択的にモード変更できるので、MIMDモードを利用すると性能が改善される場合には、MIMDモードが選択されることができる。例えば、ある実施形態ではSIMDモードで実行を開始した後、実行途中に分岐及びスレッドダイバージェンスが発生すると、可能なかぎり多くの並列性を提供するために、スレッドの数、ダイバージェンスの特性及び使用可能なフロントエンドユニット120の数に基づいて、使用可能なフロントエンドユニット120を活性化する。
例えば、SIMDは、ダイバージェンスしないスレッドを実行する場合に選択されることができ、そういう状況ではMIMDモードで発生するプロセシングオーバーヘッドがMIMDモードを利用することによって得られる長所より勝る。上述したように、SIMDモードは、データレベル並列性が存在する場合によく適応できる。仮に、すべてのプロセシングエレメント140が同じ動作を行っており、唯一の差異点は、プロセシングエレメント140が互いに異なるデータに対して動作していることならば、複数のフロントエンドユニット120を利用して命令語をフェッチしデコードする必要がない。すべてのプロセシングエレメント140が同じ命令語を単一のフロントエンドユニット120から容易に受信できるためである。
すなわち、制御部150は、条件分岐文によるスレッドダイバージェンス(thread divergence)が発生する前であるか、又はすべての条件分岐文が終了した場合には、一つのフロントエンドユニット120のみを活性化して、すべてのプロセシングエレメント140がその現在活性化されたフロントエンドユニット120を利用して命令語を処理するSIMDモードで動作できるように制御情報を設定できる。このとき、すべてのプロセシングエレメント140は、同じ一つの命令語を実行する。ただ一つの活性化されたフロントエンドユニットのみを使用することによって、プロセッサ100は、インストラクションキャッシュ110から受信した命令語を管理する時に複数のフロントエンドユニット120を識別する必要がなく、MIMD動作において発生するフロントエンドユニットに関わる高いコストを避けることができる。複数のフロントエンドユニット120を利用すると、プロセシングエレメント140がさらに独自に動作できるので、複数のダイバージェンススレッドを管理する時に長所がある反面、複数のフロントエンドユニット120を利用すると、複数のフロントエンドユニット120による命令語の管理と配分を必要とするので、プロセッサの複雑度が高まり、追加的なオーバーヘッドによって速度が低下する可能性がある。
SIMDが使用される実施形態において、一つのフロントエンドユニット120は予め設定されることができ、例えば、図1に示したように、フロントエンドユニット120のうち、FEU_0を活性化して命令語を処理するように制御情報を設定できる。活性化されたフロントエンドユニット120が一つだけで、プロセッサ100がSIMDモードで動作する場合、一つの活性化されたフロントエンドユニット120は、インストラクションキャッシュ110からの命令語をフェッチしデコードする唯一のフロントエンドユニット120になり、他のフロントエンドユニット120は、非活性化状態でインストラクションキャッシュ110とは何らの相互作用をしない。プロセッサ100は、あたかも活性化されたフロントエンドユニット120が唯一のフロントエンドユニット120のように動作する。しかし、他の実施形態では、フロントエンドユニット120のうちの何れか一つでも単一のフロントエンドユニット120として選択されることができる。追加的な実施形態において、単一のフロントエンドユニット120が予め指定されない場合には、動的に単一のフロントエンドユニット120が決定されることができる。例えば、仮に特定フロントエンドユニット120がプロセッサ100の他の部分と高速の接続を有するならば、その特定フロントエンドユニット120が動的に選択されることもできる。また、さらに他の実施形態として、特定フロントエンドユニット120が選択されることができる。仮に、特定フロントエンドユニット120を他のフロントエンドユニットと区別されるようにするある明確な特徴がある場合ならば、その特定フロントエンドユニット120が選択されることもできる。
仮に、現在活性化されたフロントエンドユニット120により条件分岐命令語が検出され、インストラクションキャッシュ110からの命令語がフェッチされデコードされたとき、その条件分岐文によりスレッドダイバージェンスが発生すると、活性化されていない少なくとも一つの使用可能なフロントエンドユニット120において何れか一つのフロントエンドユニット120をさらに活性化し、プロセシングエレメント140が二つ以上の活性化されたフロントエンドユニット120を共に利用して並列に命令語を処理するMIMDモードで動作するように制御情報を設定できる。複数の活性化されたフロントエンドユニット120を使用することによって、制御部150は、ダイバージェンスするスレッドが統一された実行フローに戻るまでフロントエンドユニット120が独立的に個別分岐を実行するようにすることができる。一旦、条件分岐命令語及びスレッドダイバージェンスが発生すると、MIMDモードを使用することが適切であるが、MIMDモードでは、複数のスレッドを同時に実行して条件分岐命令語を処理するためである。制御部150は、現在活性化されたフロントエンドユニット120により検出された条件分岐命令語を処理したプロセシングエレメント140からその処理結果を受信してスレッドダイバージェンス有無を判断でき、その判断結果によってフロントエンドユニット120の追加活性化有無を判断できる。例えば、条件分岐命令語を処理したとき、「True」または「False」のようなブール(Boolean)値を結果として得ることができる。条件分岐命令語は、他の形式で似た結果を提供することもできる。例えば、条件分岐命令語のリターン値(return value)が「0」または「1」になりうるが、このとき「0」は「False」を、「1」は「True」を意味できる。一方、条件分岐命令語は、分岐をするかどうかに関して羅列された判断をリターンすることもできる。本質的に、条件分岐命令語は、続く実行を2通りの可能な方式で指定する。一つのシナリオは、プログラムの実行が分岐無しで続くことである。このシナリオでは、いかなる分岐も発生せず、他のフロントエンドユニットをさらに介入させる必要無しで実行を継続することができる。他の可能なシナリオは、条件分岐命令語によって主な実行経路から離脱して分岐を実行することである。分岐を実行する際には、一つ以上の命令語の集合が実行される。したがって、追加的なフロントエンドユニット120が追加的な命令語の集合を担当する。SIMDモードの場合には、1回に一つの分岐のみを処理しなければならなかったが、MIMDモードでは、追加的なフロントエンドユニット120が追加的な命令語を相互独立的でかつ非同期的に実行させうるので、相互従属性(interdependency)も防止できる。
制御部120は、フロントエンドユニット120がさらに活性化されると、現在活性化された少なくとも一つのフロントエンドユニット120に割り当てられているか、または如何なるフロントエンドユニット120にも割り当てられていないプロセシングエレメント140中の一部をさらに活性化されたフロントエンドユニット120に再び割り当てられるよう、制御情報を設定できる。プロセシングエレメント140を新規フロントエンドユニット120に再度割り当てることで、制御部150は、複数のフロントエンドユニット120からの情報のフローを適切なプロセシングエレメント140で制御できるようになって、フロントエンドユニット120から引き出された命令語がスレッドがダイバージェンスする時間の間に相互干渉の発生無しで並列的に適切に実行されることができる。
インターコネクション部130は、フロントエンドユニット120からプロセシングエレメント140に命令語を伝達する。例えば、インターコネクション部130は、制御部150により設定された制御情報を利用して現在活性化されたフロントエンドユニット120の命令語を処理するプロセシングエレメント140を判断し、その命令語を判断されたプロセシングエレメント140に伝達する。制御部150及びインターコネクション部130は、どんなフロントエンドユニット120が活性化され、どのように命令語がフロントエンドユニット120からプロセシングエレメント140に実行のために伝達されるかを共に決定する。
例えば、図1のインターコネクション部130は、M個のフロントエンドユニット20からN個のプロセシングエレメント140へのマルチプレクサ(multiplexer)を備える。言い換えれば、インターコネクション部130は、N個のプロセシングエレメント140のうちの何れか一つのプロセシングエレメントを、プロセシングエレメント140が命令語を受信するM個のフロントエンドユニット120のうちの何れか一つと接続する。インターコネクション部130においてこのようなマルチプレクサを使用するために、マルチプレクサは、M個のフロントエンドユニット120のうちの何れか一つからどんな入力信号がその信号を受信するN個のプロセシングユニット140へのどの出力と接続されるかを指示するマルチプレクサー選択情報(mux−selection information)を受信する。制御部150は、分岐命令語を検出した場合、このようなコネクション情報を提供することによって、フロントエンドユニット120をプロセシングエレメント140とマッピングする。
図2は、一般的なプロセッサにおける条件分岐文処理を説明するための例である。例えば、図2は、SIMDモードでどのように条件分岐が処理され、これと同じ条件分岐がMIMDモードではどのように処理されるかを示す。図3は、一実施形態に係るプロセッサにおける条件分岐文処理を説明するための例である。図3が図2と異なる点は、図3の実施形態では、純粋なSIMDまたは純粋なMIMDに従って条件分岐を処理する代わりに、プロセッサがハイブリッドモードを使用することによって、SIMDとMIMDの短所は最小化され、長所は最大化されるということである。したがって、図2は、純粋なSIMDモード及びMIMDモードの動作を示す比較資料を提供することによって、実施形態に係るマルチモードプロセシングがSIMD及びMIMDモード動作を具現する具体的な特徴を明確にすることを手伝うものである。図2は、SIMDプロセッサ210及びMIMDプロセッサ230を示し、これらのプロセッサがどのように分岐コードブロック260を実行するかを示す。
図2の左側は、一つのフロントエンドユニットを利用して8個のプロセシングエレメントがフェッチされデコードされた命令語を処理するSIMDモード実行構成を示す図である。図2は、SIMDモードプロセッサ210を示す。SIMDプロセッサ210は、一つのFEU212を使用する。SIMDプロセッサ210を介したデータフローは220に示し、8個のプロセシングエレメント(0から7まで)を介して実行が追跡される。条件分岐文が発生する前(ライン0〜7)と、すべての条件分岐文が終了した以後(ライン100〜)の命令語は、8個のプロセシングエレメント0〜7がデータを並列に処理することによって、極めて効果的な処理性能を得ることができる。コードのこの部分には条件分岐がないので、スレッドは、個別的に実行される必要がなく、実行速度を低下させない。したがって、すべてのプロセシングエレメントは、同時に命令語を処理できる。これに対し、条件分岐文が発生した以後(ライン8〜99)には、一部のプロセシングエレメントが命令語を順次に処理することによって、むしろ処理性能が低下する。例えば、第1条件分岐は、ライン8〜19を実行する。この分岐が解決されるまでは、次のプロセシングエレメントがライン20〜44によって定義された次の条件分岐を行うことができない。他の条件分岐は、ライン45〜69、70〜99を実行する。図2は、ライン45〜69のコードによって定義された条件分岐がプロセシングエレメント2、3、7によって同時に実行されることができ、ライン70〜99のコードによって定義された分岐がプロセシングエレメント4、5、6によって同時に実行されうることを示す。図2において、SIMDモードでは、条件分岐があるとき、分岐の一部のみが一度に実行されうるので、ある分岐は、他の分岐の結果を知った後に実行を続けることができる。図2に示したように、時々複数のプロセシングエレメントは、同じ分岐からの命令語を処理でき、命令語を同時に実行することもできる。例えば、図2は、ライン45〜69から提供される命令語がプロセシングエレメント2、3、7によって同時に実行され、ライン70〜99から提供される命令語がプロセシングエレメント4、5、6によって同時に実行されることを示す。したがって、条件分岐がSIMDモードにおいて発生しても、複数のプロセシングエレメントがプロセシングを同時に行って並列性を提供することも可能である。しかし、ライン8〜19及びライン20〜44において示したように、SIMDモードですべての実行が一つの条件分岐が解決されるのを待つようにすることも可能である。したがって、SIMDモードは、複数のプロセシングエレメントを並列的に実行する場合もあるが、他のプロセシングエレメント上において実行されるダイバージェンスするスレッドが解決されることを一部プロセシングエレメントの実行が待機しなければならない場合もある。
図2の右側は、8個のフロントエンドユニットFEU 0〜FEU7と8個のプロセシングエレメント0〜7を利用して命令語を処理するMIMDモード実行構成を示した図である。図2は、MIMDモードプロセッサ230を示す。MIMDプロセッサ230は、8個のフロントエンドユニット240を使用する。MIMDプロセッサ230を介したデータフローが250に示されている。8個のフロントエンドユニット240と8個のプロセシングエレメントがあるので、各々のプロセシングエレメントは、そのプロセシングエレメントのみのために命令語をフェッチしデコードする各々のフロントエンドユニットによって命令語の提供を受ける。したがって、各々のフロントエンドユニット/プロセシングエレメント対(pair)は、他の如何なる対とも独立的にデータを処理し命令語を実行できるので、他のスレッドが実行を完了するまでいかなる対も待機する必要がない。例えば、MIMDモードにおいて、8個のフロントエンドユニットFEU 0〜FEU7を介して各条件分岐文による命令語を独立的に処理することによって、迅速な条件分岐文の処理が可能になる。したがって、図2は、どのようにすべてのフロントエンドユニット240がライン0〜7をステップ250にて共に実行するかを示す。FEU 0は、プロセシングエレメント0が第1条件分岐であるFEU 1を実行するようにし、プロセシングエレメント1が第2条件分岐FEU2、3、7を実行するようにし、プロセシングエレメント2、3、7が第3条件分岐FUE4、5、6を実行するようにし、プロセシングエレメント4、5、6が第4条件分岐を実行するようにする。したがって、すべてのフロントエンドユニットが条件分岐が完了された後に共に実行を続ける。MIMDモードでも条件分岐に応じる遅延はある程度以上は除去されないが、各々のフロントエンドユニットは、そのプロセシングエレメントを独立的に指定するので、各々のプロセシングエレメントが分岐を完了することを待った後に他の分岐が完了するようにフロントエンドユニット/プロセシングエレメント対を管理する必要はない。したがって、プロセッサが必要とする時間の殆どは、分岐が完了するのを待つ時間であるから、プロセッサは、分岐の処理を開始する前に他の分岐が完了するのを待つ必要がない。
しかしながら、MIMDは、複数の独立的なフロントエンドユニットを管理してプロセシングエレメントに提供される命令語を個別的にフェッチしデコードするよう管理しなければならないので、プロセッサ設計の複雑度及びサイズが増加するようになる。このような制約により、適当な設計複雑度と大きさを有するプロセッサを作るためには、一般的なSIMD構造のプロセッサに比べて少ないプロセシングエレメントを持たざるをえない。MIMDプロセッサでは、各々のプロセシングエレメントがその自身のフロントエンドユニットに対応しなければならない。これは、SIMDプロセッサでは管理できるはずの個数の複数のプロセシングエレメントを、MIMDプロセッサでは管理できない可能性もあることを意味する。このような理由で、与えられた個数のプロセシングエレメントを有するMIMDは、同じ個数のプロセシングエレメントを有するSIMDよりさらに複雑でサイズが増加できる。したがって、SIMDモードプロセッサとMIMDモードプロセッサの設計にはこのようなトレードオフがあるので、各々のモードは、特定状況と用途ごとに長所と短所を有するようになる。
図3は、4個のフロントエンドユニットFEU 0〜FEU 3 312、314、316、318と8個のプロセシングエレメント0〜7とから構成されたプロセッサ100において命令語を処理することを示したものである。図3は、実施形態に係る例示的使用を示す。図3に示したように、実施形態は、「動的MIMD(Dynamic MIMD)」という類型のモードを提供する。例えば、動的MIMDプロセッサが310から提供される。動的MIMDプロセッサ310を通過するデータフローは320に示す。このモードにおいて、フロントエンドユニット312、314、316、318は、分岐コードの実行を扱うためにフロントエンドユニット312、314、316、318を使用することが効率的であるかどうかによって動的に活性化及び非活性化される。したがって、「動的MIMD」は、SIMDモードとDIMDモード処理のハイブリッド動作モードである。SIMDモードプロセシングでも十分な状況では「動的MIMD」プロセッサは、一つのフロントエンドユニットのみを利用する。この場合、コードが分岐されて並列性を許す追加的なフロントエンドユニットを活性化することが好ましいと、フロントエンドユニットは、引続き活性化されて、そういう並列性を分岐中に許すようになる。分岐が完了すると、不必要なフロントエンドユニットが非活性化されることによって、不必要な資源使用を最小化する。したがって、「動的MIMD」は、オーバーヘッドと資源使用とを最小化しながらも並列性を最大化する能力を提供する。
例えば、実施形態は、次のような「動的MIMD」に対した例示的なアプローチにおいて、以下のような動作を行う。フロントエンドユニットは、潜在的にスレッド間のダイバージェンスを生じる条件分岐命令語を検出する。以後、プロセシングエレメント及び制御部は、スレッドに対応するどのプロセシングエレメントが分岐ターゲット(branch target)プログラムカウンタ(PC:program counter)命令語にジャンプを持っているか及びどのプロセシングエレメントが次のPC命令語に移動しなければならないかを決定できる。ジャンプするプロセシングエレメントはジャンプを実行するので、テイクン(taken)プロセシングエレメントと言い、他のプロセシングエレメントはジャンプを実行しないので、ノット−テイクン(not−taken)エレメントと言う。プロセシングエレメントにより実行されるスレッドの間にダイバージェンスが存在する場合、制御部は、現在活性化されない新しいフロントエンドユニットを分岐ターゲットプログラムカウンタにジャンプするプロセシングエレメントに割り当てる。次に、制御部は、インターコネクション部に対する接続情報をアップデートする。ここで、制御部は、イネイブル(enable)信号及び分岐ターゲットプログラムカウンタ情報を新しく割り当てられたフロントエンドユニットに送信する。その後に、フロントエンドユニットは、一つのSIMT(Single Instruction Multiple Thread)スレッドに併合(merge)しなければならないダイバージェンスされたスレッドを表す復帰命令語(reconversion instructions)を検出する。以後、制御部は、インターコネクション部に対する接続情報をアップデートする。最後に、制御部は、ディセーブル(disable)信号を送信し、フロントエンドユニットを非活性化する。
復帰命令語と関連して、復帰命令語をデコードするとき、フロントエンドユニットが復帰命令語を検出すると、フロントエンドユニットは、他のフロントエンドユニットに割り当てられたダイバージェンスされたスレッドがそれらの復帰命令語に到達するまで待機する。制御部は、ダイバージェンスされたフロントエンドユニットから情報を受信し、これらのうちの何れか一つを非活性化する。
図3において、初めにはFEU 0 312のみが活性化される。図3は、初めにはFEU 0 312が活性化され、フロントエンドユニットのうちの何れか一つが活性化されたフロントエンドユニットになる例を示す。8個のプロセシングエレメント0〜7のすべては、条件分岐文が検出される前(ライン0〜7)までFEU 0を利用して命令語を処理する。すなわち、FEU 0 312がすべてのプロセシングエレメント0〜7からの命令語をフェッチしデコードすることを意味する。分岐がないので、各々のプロセシングエレメントは、FEU 0 312から受信した同じ命令語を並列に処理する。この地点まで、プロセッサは、效率的にSIMDモードで動作する。MIMDプロセッサ310には他のフロントエンドユニットがあるが、非活性化された状態である。したがって、フロントエンドユニットが非活性化されてオーバーヘッドがないので、活性化された単一のフロントエンドユニットのみがプロセッサ内の唯一のフロントエンドユニットのように動作する。活性化されたその他のフロントエンドユニットがないので、複数のフロントエンドユニットがこの地点では互いに協力する必要がない。分岐がなくていくつかのフロントエンドユニットを必要としないので、すべてのプロセシングは並列的になされ、複数のフロントエンドユニットに必要なフェッチとデコードを個別的にする必要がない。
しかし、図3に示したコードでは、ライン8において分岐が発生する。FEU 0 312がライン8の条件分岐命令語if(c.0==c.1)をインストラクションキャッシュ110からフェッチすると、プロセシングエレメント0がその条件分岐命令語if(c.0==c.1)を処理し、FEU 0 312において次のライン9の条件分岐文命令語if(d.0==d.1)をフェッチすると、これを処理する。しかし、必ずFEU 1を活性化しなければならないことではなく、FEU 2 316やFEU 3 318のような有効な他のフロントエンドユニットを選択して活性化することもできる。このとき、スレッドダイバージェンスが発生すると、次の使用可能なフロントエンドユニットFEU 1〜FEU 3の中でFEU 1 314を活性化しFEU 1 314を利用してプロセシングエレメント1がその条件分岐命令語if(d.0==d.1)と対をなす条件分岐命令語else以下を処理するようにする。したがって、このような二つのフロントエンドユニットFEU 0 312及びFEU 1 314を利用してスレッドダイバージェンスが完了することを待たずに実行を続けることができる。図3は、実施形態においてFEU 0ないしFEU 3 312、314、316、318の各々のフロントエンドユニットの観点でフェッチされたコードを示した図である。図3に示した最初分岐に関しては、FEU 0 312の観点ではc.0はc.1と同じで、d.0はd.1と同じであるという分岐シナリオに基づいてコードがフェッチされる。FEU 1 314の観点では、c.0はc.1と同じであるが、d.0はd.1と同じでないというシナリオに基づいてコードがフェッチされる。FEU 0 312は、プロセシングエレメント0のために命令語をフェッチしデコードし、FEU 1 314は、プロセシングエレメント1のために命令語をフェッチしデコードする。しかし、使用可能なフロントエンドユニットが複数であるから、FEU 1 314は、プロセシングエレメント1に命令語を直ちに並列的に送信でき、プロセシングエレメント0が処理を終えた後にプロセシングエレメント1が処理を終える必要がない。
このような方式で、FEU 0 312(ライン8)がフェッチした条件分岐命令語if(c.0==c.1)の処理結果、スレッドダイバージェンスが発生すると、FEU 2 316を活性化し、FEU 2 316を介して条件分岐命令語if(c.0==c.1)と対をなす条件分岐命令語else if(c.0==c.2)以下(ライン34まで)をプロセシングエレメント2、3、7が処理するようにする。FEU 2 316を介して処理した条件分岐命令語else if(c.0==c.2)、ライン9によりスレッドダイバージェンスが発生すると、FEU 3 318を活性化し、FEU 3 318を介してその条件分岐命令語else if(c.0==c.2)と対をなす条件分岐命令語else以下(ライン39まで)をプロセシングエレメント4、5、6が処理するようにする。したがって、各々のフロントエンドユニットFEU 0 312、FEU 1 314、FEU 2 316、FEU 3 318がスレッドがダイバージェンスすることにつれて引続き活性化されるので、各々のフロントエンドユニットを活性化するという利点が生じる。追加的に、各々のフロントエンドユニットは、プロセシングエレメントの集合(family)をフェッチしデコードできる。例えば、FEU 2 316は、プロセシングエレメント2、3、7に対した同じ命令語をフェッチしデコードできる。これらのプロセシングエレメントは、全てFEU 2 316によって管理されるコード領域内の同じコードに対応するためである。したがって、実施形態においてこれらのプロセシングエレメントは、プロセシングエレメントごとに個別的なフロントエンドユニットを使用して命令語をフェッチしデコードする必要無しで並列的に動作できる。
図3に示されたように(図3は、FEU 0 312、FEU 1 314、FEU 2 316、FEU 3 318)を備える4個のフロントエンドユニット120を例示する。)、一実施形態によるプロセッサ100によれば、コード内の条件分岐によるスレッドダイバージェンス有無によってフロントエンドユニット120を動的に活性化して命令語を処理できるようにすることによって、データ並列処理及び条件分岐文の処理に効果的になされることができる。例えば、制御部150は、フロントエンドユニット120が活性化されることが適切であるかどうかによって、フロントエンドユニット120に信号を送信できる。なお、制御部150は、フロントエンドユニット12のための動作パラメーターを含むレジスタ160を備えることができる。上述したように、ある実施形態では、プロセシングエレメント140ごとに各々のフロントエンドユニットを有するようにする代わりに、フロントエンドユニット120が同じコードを実行するプロセシングエレメント140の集合に対して並列に命令語を提供できる。フロントエンドユニット120は、動的に活性化されることができるので、必要とするごとに使用されることもでき、必要としない時には非活性化されることができるので、オーバーヘッドを最小化できる。
追加的な様相によれば、図1に示すように制御部150は、二つ以上のレジスタ160を備えることができる。例えば、制御部150は、複数のレジスタ160をフロントエンドユニット120と同じ数(M個)で備えることができ、複数のレジスタ160は、各フロントエンドユニットFEU_0〜FEU_M−1 120に対応し、各フロントエンドユニット120に対し設定された制御情報を格納することができる。したがって、各々のレジスタ160は、動作パラメーターを定義する情報を格納し、制御部150がフロントエンドユニット120のうち、一つの動作を制御できるように一時的格納空間を提供する。
制御情報は、各フロントエンドユニット120に対したプロセシングエレメント割り当て情報、占有PC(Program Counter)情報、非占有PC情報、復帰PC情報及び分岐FEU情報を含むことができる。しかし、制御情報は、追加情報も格納することができ、各々のフロントエンドユニット120に関する情報は、異なる順序で格納されることもできる。一般に、プログラムカウンタ(PC)は、実行するプログラムに対するアクセスを管理するための命令語のメモリアドレスを含むレジスタのことを言う。このとき、占有PC情報162は、条件分岐命令語に含まれたPC情報を利用して計算された値であって、現在PCと条件分岐がTrueのブーリアン値の場合、ジャンプする相手位置を表す相手ターゲットPCを加算した値でありうる。例えば、現在PC値は、現在命令語のアドレスを格納することができ、相手PC値は、分岐状況においていくつの命令語を飛ぶかを示す数字を格納することができる。非占有PC情報163は、現在PCの次のPCを意味し、復帰PC情報164は、復帰命令語(reconversion instruction)に含まれた条件分岐が終了すると、復帰する相手位置を表す相手復帰PC情報を利用して計算された値であって、現在PCにその相手復帰PCを加算した値でありうる。
例えば、分岐FEU情報が接続情報の場合、FEUが条件分岐命令語または復帰命令語を検出した時にアップデートされる。分岐FEU情報は、どんなFEUが命令語をプロセシングエレメントに提供するかを表す情報であり、インターコネクション部を構成するために使用される。
また、各々のFEUは、いかなる形態の分岐も発見しない場合、サイクルごとにプログラムカウンタ(PC)をPCと命令語のサイズとの和(PC+instruction size)にアップデートする。例えば、命令語のサイズは、プロセシングアーキテクチャーによって32ビットまたは64ビットでありうる。これに対し、FEUがジャンプまたは条件分岐命令語を検出した場合、FEUは、PC値を現在PCと関連したPC値の和(current PC+relative PC value)のような分岐ターゲットPC値にアップデートする。PC値をアップデートするこのようなアプローチは、プログラムフロー(flow)が分岐を考慮するステップに適切に進むようにする。
また、分岐FEU情報165は、条件分岐命令語によりスレッドダイバージェンスが発生した場合、各スレッドの処理を管理するのを手伝うフロントエンドユニット120に対した情報である。フロントエンドユニット120が条件分岐命令語を処理するように活性化された場合、条件分岐を処理するフロントエンドユニット12間のペアレント(parent)とチャイルド(child)との関係を定義する関係情報(relationship information)を表すことができる。そういう関係に対する情報によって、プロセッサ100は、スレッドダイバージェンス中に分岐に対する再分岐(sub−branch)が起きたとき、フロントエンドユニット120間の関係を調整できるようになる。
図1に示すように、各フロントエンドユニット120に対応する制御部150の各レジスタ160は、上記の制御情報を格納するために対応する一つ以上の領域161〜165からなることができる。このとき、各フロントエンドユニット120に対したプロセシングエレメント140割り当て情報を格納するための、レジスタのうちの何れか一つが割り当てた領域161は、全体プロセシングエレメント140の数分だけのビット領域V0〜VN−1からなることができる。その領域161のビットV0〜VN−1のそれぞれは、各プロセシングエレメント140に静的にマッピングされて各ビット値の設定に応じてマッピングされるプロセシングエレメント140の割り当て有無を表すことができる。例えば、プロセシングエレメントPE_0からPE_N−1は、ビットV0からVN−1に順にマッピングされ、制御部150は、フロントエンドユニット120に割り当てられたプロセシングエレメント120はマッピングされるビットを「1」に設定し、そうでないビットは「0」に設定できる。したがって、ビット領域161内の各々のビットは、フロントエンドユニット12がプロセシングエレメントに命令語を送信するかどうかを示すブルリアン値を表す。
最初にプロセッサ100をSIMDモードで動作するように一つのフロントエンドユニット120、例えば、FEU 0120が予め設定されていると、制御部150は、そのFEU 0を活性化してプロセシングエレメント140のために命令語をフェッチしデコードする。制御部150は、プロセシングエレメント140の割り当て情報を格納するためのレジスタ160のビット領域V0〜VN−1においてその活性化された現在フロントエンドユニットFEU 0 120の命令語を処理する一つ以上のプロセシングエレメント140とマッピングされるビットの値を「1」に設定する。例えば、FEU 0が4個のビットV0〜V3を含み、V0とV1が「1」に設定され、V2とV3が「0」に設定されると、これはFEU 0がプロセシングエレメントPE_0及びプロセシングエレメントPE_1には命令語を提供するが、プロセシングエレメントPE_2及びプロセシングエレメントPE_3には命令語を提供しないのを意味する。
現在活性化されたフロントエンドユニット120FEU 0がインストラクションキャッシュ110から命令語をフェッチしデコードする過程において条件分岐命令語を検出すると、その条件分岐命令語に含まれたPC情報に基づいて占有PC情報と非占有PC情報とを制御部150に送信する。一例として、占有PC情報は、ブランチ命令語が実行されたテイクンPC情報に対応するPC情報を表し、非占有PCは、ブランチ命令語が実行されないノット−テイクンPC情報に対応するPC情報を表す。制御部150は、現在活性化されたフロントエンドユニット120FEU 0から占有PC情報と非占有PC情報とを受信すると、そのFEU 0に対応するレジスタ160の占有PC情報格納領域162と非占有PC情報格納領域163に格納する。PC情報のこの部分を格納することによって、同時に実行される複数の分岐に関するプログラムフローを調整するのに使用されるメモリアドレスを確認することができる。
例えば、現在活性化されたフロントエンドユニット120がFEU 0一つだけである場合、インターコネクション部130は、レジスタ160に格納された制御情報を参照して現在活性化されたフロントエンドユニット120FEU 0に割り当てられたプロセシングエレメント140を判断して、その現在活性化されたフロントエンドユニット120FEU 0から出力される命令語をプロセシングエレメント140に伝達する。
条件分岐命令から得られた処理結果を判断するインターコネクション部130から条件分岐命令語を受信したプロセシングエレメント140は、その条件分岐命令語を処理してその処理結果(TrueまたはFalse)を制御部150に送信する。
制御部150は、その処理結果に基づいてスレッドダイバージェンスの発生有無を判断できる。例えば、処理結果がTrueの場合、スレッドダイバージェンスが発生していないと判断し、現在活性化されたフロントエンドユニットFEU 0に割り当てられたプロセシングエレメント140が占有PC位置に移動してFEU 0を介して引続き命令語を処理するようにすることができる。このとき、処理結果が「True」の場合、「True」という結果はダイバージェンスしない条件分岐命令語に提供される。占有PC値は、条件分岐命令語がダイバージェンスしない次の命令語に対応するメモリアドレスである。
処理結果がFalseの場合、制御部150は、スレッドダイバージェンスが発生したと判断する。「False」結果は、ダイバージェンスを意味するので、スレッドダイバージェンスが発生したことである。スレッドのダイバージェンスが発生したので、これから新しくフロントエンドユニット120を活性化してダイバージェンスされた実行を並列的に扱うことによって、追加的な遅延を回避する必要がある。制御部150は、新しいフロントエンドユニット120FEU 1を活性化し、現在活性化されたフロントエンドユニット120FEU 0とさらに活性化されたフロントエンドユニット120FEU 1に対応するレジスタのビット領域をアップデートして、プロセシングエレメント140を各々割り当てる。
また、制御部150は、さらに活性化されたフロントエンドユニット120FEU 1に対応するレジスタ160の占有PC情報格納領域162に現在フロントエンドユニット120FEU 0から受信した非占有PC情報を格納して、プロセシングエレメント140が非占有PCに位置に移動してフロントエンドユニット120FEU 1を介して命令語を処理するようにすることができる。
また、制御部150は、現在活性化されたフロントエンドユニットFEU 0の分岐FEU情報にチャイルドFEUとしてFEU 1を設定して、レジスタの分岐FEU情報格納領域165に格納し、さらに活性化されたフロントエンドユニットFEU 1の分岐FEU情報にペアレントFEUとしてFEU 0を設定してレジスタ160の分岐FEU情報格納領域165に格納することができる。FEU 0とFEU 1との間のペアレント−チャイルド関係は、FEU 0の分岐FEU情報は、「FEU 1はFEU 0のチャイルドである」ことを示し、FEU 1の分岐FEU情報は、「FEU 0はFEU 1のペアレントである」ことを示すように格納される。
現在活性化されたフロントエンドユニット120FEU 0またはさらに活性化されたフロントエンドユニット120FEU 1が復帰命令語を検出すると、復帰命令語を検出したフロントエンドユニットがその復帰命令語に含まれたPC情報に基づいた復帰PC情報を制御部150に送信する。復帰PC情報は、例えば、スレッドがもうこれ以上ダイバージェンスしなくなった後に実行を再開するようになるメモリアドレスを含むことができる。そういう再開時命令語は、スレッドがもうこれ以上ダイバージェンスしなくなって個別的に実行経路を管理する必要がなくなった後のプログラムの一部分を示すことができる。制御部150は、その復帰命令語を検出したフロントエンドユニットに対応するレジスタの復帰PC情報格納領域に受信した復帰PC情報を格納する。例えば、復帰PC情報は、レジスタの領域164に格納されることができる。また、制御部150は、その復帰命令語を検出したフロントエンドユニット120の分岐FEU情報を利用して、対をなすフロントエンドユニット120を決定し、その対をなすフロントエンドユニット120による条件分岐文処理が終了するまで待機できる。この情報を利用すると、実行を続ける前に条件分岐の両側がすべて完了するように処理を調整できる。複数のフロントエンドユニット120を使用すると、条件分岐の両側が相手を待つ必要無しで同時に実行されうるが、実施形態によってはそうでない場合もありうる。
制御部150は、対をなすフロントエンドユニットが復帰命令語を検出して条件分岐が終了する場合、さらに活性化されたチャイルドフロントエンドユニット120FEU 1を非活性化する。条件分岐が終了するので、追加にチャイルドフロントエンドユニット120によって処理する必要がなく、処理が一つのフロントエンドユニット120のみを利用して再度管理されることができる。そして、FEU 1に対応するレジスタのビット領域とFEU 0に対応するレジスタのビット領域を論理和(logical ‘or’)して、FEU 1に割り当てられていたプロセシングエレメント140がFEU 0に割り当てられるように制御情報を設定できる。論理和(logical OR)演算を利用することによって、以前にFEU 0またはFEU 1のうち、少なくとも一つに指定されたプロセシングエレメント140は、レジスタに対して論理和演算が行われた後にはFEU 0に指定されるはずである。したがって、FEU 1に割り当てられたダイバージェンススレッドは、FEU 0に再統合されて動的基盤で実行されるフロントエンドユニット120の数を最小化できる。
図4は、一実施形態に係るプロセッサにおけるマルチモードを支援する処理方法のフローチャートである。すなわち、図1の実施形態に係るプロセッサ100における動的にマルチモードを支援する方法である。
まず、プロセッサ100の現在活性化されたフロントエンドユニット120がインストラクションキャッシュ110から命令語をフェッチしデコードする過程において条件分岐命令語を検出すると、その条件分岐命令語に含まれたPC情報に基づいて占有PC情報と非占有PC情報とを制御部150に送信する(ステップ410)。占有PC情報は、スレッドがダイバージェンスしない場合と関連し、非占有CP情報は、スレッドがダイバージェンスする場合と関連する。このとき、現在活性化されたフロントエンドユニット120は、最初には予め設定された何れか一つのフロントエンドユニット120になり、以下のステップを行う過程においてフロントエンドユニット120がさらに活性化されると、その活性化されたすべてのフロントエンドユニット120を意味する。
次に、現在活性化されたフロントエンドユニット120に割り当てられたプロセシングエレメント140がインターコネクション部130から条件分岐命令語の伝達を受けて処理し、その処理結果(TrueまたはFalse)を制御部150に送信する(ステップ420)。インターコネクション部130は、現在活性化されたフロントエンドユニット120に関するレジスタ160に格納された制御情報に基づいて、その現在活性化されたフロントエンドユニット120から出力される命令語を伝達するプロセシングエレメント140を判断できる。例えば、命令語出力送信の対象になるプロセシングエレメント140は、どんなプロセシングエレメントが活性化されたフロントエンドユニット120に対応するかを指定するビットの領域161に基づいて選択されることができる。
その次に、制御部150は、現在活性化されたフロントエンドユニット120から占有PC情報と非占有PC情報を受信する。制御部150は、現在活性化されたフロントエンドユニット120に対応するレジスタ160の占有PC情報格納領域162と非占有PC情報格納領域163に格納し、プロセシングエレメント140から条件分岐命令語に対応する処理結果をステップ420の結果として受信して、スレッドダイバージェンスが発生したかどうかを判断できる(ステップ430)。
判断結果、スレッドダイバージェンスが発生しない場合、例えば、ステップ420の処理結果がTrueの場合、現在活性化されたフロントエンドユニット120に割り当てられたプロセシングエレメント140が占有PC位置に移動して、その現在活性化されたフロントエンドユニット20を介して次の命令語を処理し続けるようにすることができる(ステップ490)。このとき、他のフロントエンドユニット120を活性化する必要がないので、フロントエンドユニット120が現在割り当てたとおりに実行が続く。
仮に、判断結果、スレッドダイバージェンスが発生した場合、例えば、ステップ420の処理結果がFalseの場合、制御部150は、現在活性化されていないフロントエンドユニット120の中で何れか一つをさらに活性化する(ステップ440)。このとき、プロセッサ100を構成するすべてのフロントエンドユニット120が活性化されている状態である場合には、もうこれ以上可用のフロントエンドユニット120が存在しないから、その条件分岐命令語を検出した現在活性化されたフロントエンドユニット120を利用して命令語を順次に処理するようにすることができる。多様な実施形態において、M個のフロントエンドユニット120を使用することができ、個数Mは、プロセシングエレメント140の数であるNと同一であるか、またはNより小さい。仮に、すべてのフロントエンドユニットが使用中であると、条件分岐命令語が順次に処理されなければならない場合もある。
その次に、現在活性化されたフロントエンドユニット120とさらに活性化されたフロントエンドユニット120に対して制御情報をアップデートするか、または設定する(ステップ450)。例えば、各フロントエンドユニット120に対応するレジスタ160のビット領域をアップデートして、各フロントエンドユニット120にプロセシングエレメント140を割り当てることができる。各々のビット領域のビットは、特定フロントエンドユニット120が与えられたプロセシングエレメント140に命令語を送信するかどうかを示す。また、さらに活性化されたフロントエンドユニット120の占有PC情報として現在活性化されたフロントエンドユニット120から受信した非占有PC情報を格納して、プロセシングエレメント140が非占有PC位置に移動して、命令語を処理するようにすることができる。現在活性化されたフロントエンドユニット120の非占有PC情報とさらに活性化されたフロントエンドユニット120の占有PC情報との関係は維持される。現在活性化されたフロントエンドユニット120をさらに分岐させることを要する非占有実行経路は、さらに活性化されたフロントエンドユニット120をさらに分岐させることを要しない占有実行経路であるためである。
また、制御部150は、現在活性化されたフロントエンドユニット120の分岐FEU情報にチャイルドFEUとしてさらに活性化されたフロントエンドユニット120を設定して、レジスタの分岐FEU情報格納領域165に格納し、さらに活性化されたフロントエンドユニット120の分岐FEU情報にペアレントFEUとして現在活性化されたフロントエンドユニット120を設定して、レジスタ160の分岐FEU情報格納領域165に格納することができる。したがって、分岐FEU情報は、ペアレントフロントエンドユニットとチャイルドフロントエンドユニットとの間の関係を管理し、これを通じてフロントエンドユニット120とプロセシングエレメント140との間でインターコネクション部130を経由して命令語を送信する時にブランチの階層を維持できる。
その次に、現在活性化されたフロントエンドユニット120またはさらに活性化されたフロントエンドユニット120が復帰命令語を検出して復帰PC情報を制御部150に送信すると、制御部150は、その復帰命令語を検出したフロントエンドユニット120の分岐FEU情報を利用して対をなすフロントエンドユニット120を決定し、その対をなすフロントエンドユニット120による条件分岐文処理が終了するまで待機できる(ステップ460)。復帰PC情報が受信されると、復帰PC情報は、条件分岐文処理が終了したことを意味する信号として機能する。これは、この命令語を送信するフロントエンドユニット120の側面では、条件分岐文が終了したことを示す復帰命令語に該当する。しかし、分岐FEU情報は、実行を続ける前にどんな他のフロントエンドユニット120が実行を終了しなければならないかに関する情報を提供する。また、制御部150は、その復帰命令語を検出したフロントエンドユニット120に対応するレジスタ160の復帰PC情報格納領域164に受信した復帰PC情報を格納する。仮に、受信された復帰PC情報が格納されると、適切な順序でプログラムフローが続くのを保証するのに使用される。
その次に、制御部150は、対をなすフロントエンドユニット120が復帰命令語を検出してすべての条件分岐が終了する場合、さらに活性化されたフロントエンドユニット120を非活性化する(ステップ470)。このとき、さらに活性化されたフロントエンドユニット120を利用する必要がないので、現在活性化されて使用されているフロントエンドユニット120のみが実行を続ける。
その次に、ステップ470にて非活性化されたフロントエンドユニット120に対応するレジスタのビット領域と現在活性化されたフロントエンドユニット120に対応するレジスタのビット領域を論理和(logical ‘or’)して、非活性化されたフロントエンドユニット120に割り当てられていたプロセシングエレメント140を現在活性化されたフロントエンドユニット120に割り当てられるように制御情報を設定できる(ステップ480)。非活性化されたフロントエンドユニット120に割り当てられたプロセシングエレメント140は、以前に割り当てられたプロセシングエレメント140を除去せずにも現在活性化されたフロントエンドユニット120に再度割り当てられることができる。
その次に、現在活性化されたフロントエンドユニット120を利用して、次の命令語を処理し続けるようにする(ステップ490)。例えば、現在活性化されたフロントエンドユニット120は、インストラクションキャッシュ110から次に処理する命令語をフェッチし続け、ステップ410以下は繰り返して行われることができる。
マルチモードを支援するプロセッサ及びこれに関するマルチモード支援方法に関する実施形態は、データを並列処理する場合に利点を提供する。実施形態によれば、プロセシングエレメントが動的にフロントエンドユニットを共有するようにすることができ、プロセッサがSIMDモードとMIMDモードとの間で実行モードを転換できるので、フロントエンドユニットの費用を低減し処理速度を向上させることができる。
一方、本実施形態は、コンピュータで読むことのできる記録媒体にコンピュータが読むことのできるコードにより具現化することが可能である。コンピュータが読むことのできる記録媒体は、コンピュータシステムによって読まれることのできるデータが格納されるすべての種類の記録装置を含む。
コンピュータが読むことのできる記録媒体の例には、ROM、RAM、CD−ROM、磁気テープ、フロッピー(登録商標)ディスク、光データ格納装置などがあり、またキャリアウェーブ(例えばインターネットを介した送信)の形態で具現化するのを含む。また、コンピュータが読むことのできる記録媒体は、ネットワークで接続したコンピュータシステムに分散されて、分散方式でコンピュータが読むことのできるコードが格納され実行されることができる。そして、本実施形態を具現するための機能的な(functional)プログラム、コード及びコードセグメントは、本発明の属する技術分野におけるプログラマーによって容易に推論できる。
本開示が属する技術分野の通常の知識を有した者は、本発明がその技術的思想や必須な特徴を変更せずに他の具体的な形態で実施されうるということを理解できるはずである。したがって、以上で述べた実施形態は、すべての面で例示的であり、限定的でないものと理解しなければならない。
100 プロセッサ
110 インストラクションキャッシュ
120 フロントエンドユニット
130 インターコネクション部
140 プロセッシングエレメント
150 制御部
160 レジスタ

Claims (23)

  1. 複数のフロントエンドユニットと、
    前記フロントエンドユニットより多いプロセシングエレメントと、
    一フロントエンドユニットにより検出された条件分岐命令によりスレッドダイバージェンス(thread divergence)が発生するかどうかを判断し、前記条件分岐命令が発生すると判断した場合、前記プロセシングエレメントが現在活性化されたフロントエンドユニットを利用して命令を処理するように制御情報を設定し、前記条件分岐命令が発生しない場合、前記プロセシングエレメントが現在活性化された一つのフロントエンドユニットを利用して命令を処理するように、前記プロセシングエレメントを制御する制御情報を設定する制御部とを備えるプロセッサ。
  2. 前記制御情報に基づいて前記現在活性化されたフロントエンドユニットの命令語を処理するのに使用するプロセシングエレメントを判断し、前記命令語を前記使用するプロセシングエレメントに伝達するインターコネクション部をさらに備える請求項1に記載のプロセッサ。
  3. 前記制御部は
    複数のレジスタを備え、前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納する請求項1または2に記載のプロセッサ。
  4. 前記制御情報は、
    前記各フロントエンドユニットに対するプロセシングエレメント割り当て情報を含む請求項3に記載のプロセッサ。
  5. 前記複数のレジスタは、
    対応するフロントエンドユニットに対するプロセシングエレメント割り当て情報を格納するための全体プロセシングエレメント数分だけのビット領域を含む請求項4に記載のプロセッサ。
  6. 前記制御部は、
    前記現在活性化されたフロントエンドユニットにより検出された条件分岐命令語を処理したプロセシングエレメントから処理結果を受信してスレッドダイバージェンスの有無を判断し、スレッドダイバージェンスが発生すると判断されると、活性化されていないフロントエンドユニットのうちの何れか一つをさらに活性化する請求項1ないし5いずれか一項に記載のプロセッサ。
  7. 前記制御部は、
    前記さらに活性化されたフロントエンドユニットに前記プロセシングエレメントの一部を割り当てて、その割り当て情報を前記さらに活性化されたフロントエンドユニットに対応するレジスタに格納する請求項6に記載のプロセッサ。
  8. 前記制御部は、
    前記現在活性化されたフロントエンドユニットと前記さらに活性化されたフロントエンドユニットにより条件分岐文の処理がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化し、そのさらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定する請求項6に記載のプロセッサ。
  9. 現在活性化されたフロントエンドユニットが条件分岐命令語を検出するステップと、
    制御部が前記検出された条件分岐命令語によりスレッドダイバージェンスが発生するかどうかを判断するステップと、
    制御部が前記判断結果スレッドダイバージェンスが発生する場合、非活性化されているフロントエンドユニットのうちの何れか一つをさらに活性化するステップと、
    制御部が前記活性化されたフロントエンドユニットを利用してプロセシングエレメントが命令語を処理するように制御情報を設定するステップと
    を含むマルチモードを支援する処理方法。
  10. 前記制御部は、複数のフロントエンドユニットを含み、前記プロセシングエレメントは、前記フロントエンドユニットよりさらに多くの数からなる請求項9に記載のマルチモードを支援する処理方法。
  11. 前記スレッドダイバージェンスの発生有無を判断するステップは、
    前記制御部が前記条件分岐命令語を処理したプロセシングエレメントから処理結果を受信し、その受信された処理結果に基づいてスレッドダイバージェンスが発生するかどうかを判断する請求項9または10に記載のマルチモードを支援する処理方法。
  12. 前記制御部は、
    ジスタ内において前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納する二つ以上のレジスタを含む請求項9ないし11いずれか一項に記載のマルチモードを支援する処理方法。
  13. 前記制御情報は、
    前記各フロントエンドユニットに対するプロセシングエレメントの割り当て情報を含む請求項12に記載のマルチモードを支援する処理方法。
  14. 前記各レジスタは、
    対応するフロントエンドユニットに対するプロセシングエレメントの割り当て情報を格納するためのプロセシングエレメント数分だけのビット領域を含む請求項13に記載のマルチモードを支援する処理方法。
  15. 前記制御情報設定ステップは、
    前記さらに活性化されたフロントエンドユニットに対応するレジスタのビット領域において前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応するビット値を設定する請求項14に記載のマルチモードを支援する処理方法。
  16. 制御部が前記現在活性化されたフロントエンドユニットとさらに活性化されたフロントエンドユニットにより処理される条件分岐がすべて終了しているかどうかを判断するステップと、
    前記判断結果、条件分岐がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化するステップと、
    前記さらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定するステップと
    を含む請求項9ないし15いずれか一項に記載のマルチモードを支援する処理方法。
  17. 条件分岐命令を検出する現在活性化されたフロントエンドユニットと、
    検出された前記条件分岐命令に基づいて、スレッドダイバージェンスが発生するかどうかを判断し、前記スレッドダイバージェンスが発生する場合、現在非活性化されたフロントエンドユニットをさらに活性化し、プロセシングエレメントが前記活性化されたフロントエンドユニットから受信された命令を処理するように制御情報を設定する制御部と
    を備えるマルチモードプロセッサ。
  18. 1またはそれ以上の非活性化されたフロントエンドユニットと、
    フロントエンドユニットの総個数より多い数のプロセシングエレメントと
    を備える請求項17に記載のマルチモードプロセッサ。
  19. 前記スレッドダイバージェンスが発生するかどうかを判断する時に、前記条件分岐命令を処理した結果を前記プロセシングエレメントから受信し、前記スレッドダイバージェンスが発生するかどうかを受信された結果に基づいて判断する、請求項17または18に記載のマルチモードプロセッサ。
  20. 条件分岐を個別的に実行する現在活性化されたフロントエンドユニットと、
    前記条件分岐がすべて終了したかどうかを判断し、前記条件分岐がすべて終了したと判断した場合、少なくとも一つのフロントエンドユニットを非活性化する制御部と
    備え、
    前記制御部は、前記非活性化されたフロントエンドユニットのプロセシングエレメントを他のフロントエンドユニットに再度割り当て、
    前記制御部は、前記フロントエンドユニットの各々に関するレジスタをさらに備え、前記レジスタ内に前記フロントエンドユニットの各々に関する制御情報を格納し、
    前記制御情報は、前記フロントエンドユニットの各々のプロセシングエレメント割り当て情報をさらに含む、
    マルチモードプロセッサ。
  21. 前記レジスタの各々は、プロセシングエレメントの総個数分だけのビット領域を含み、前記プロセシングエレメント割り当て情報を前記レジスタに格納する、請求項20に記載のマルチモードプロセッサ。
  22. 前記制御情報を設定する時に、さらに活性化されたフロントエンドユニットに関するレジスタのビット領域のビット値を設定し、
    前記ビット値は、前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応する値である、請求項21に記載のマルチモードプロセッサ。
  23. 前記再度割り当ては、前記非活性化されたフロントエンドユニット及び前記他のフロントエンドユニットの前記ビット領域上において論理和(logical OR)演算に基づいて制御情報を設定することによってなされる、請求項22に記載のマルチモードプロセッサ。
JP2014013823A 2013-01-28 2014-01-28 マルチモード支援プロセッサ及びマルチモードを支援する処理方法 Active JP6400296B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020130009326A KR101603752B1 (ko) 2013-01-28 2013-01-28 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법
KR10-2013-0009326 2013-01-28

Publications (2)

Publication Number Publication Date
JP2014146335A JP2014146335A (ja) 2014-08-14
JP6400296B2 true JP6400296B2 (ja) 2018-10-03

Family

ID=51224349

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014013823A Active JP6400296B2 (ja) 2013-01-28 2014-01-28 マルチモード支援プロセッサ及びマルチモードを支援する処理方法

Country Status (4)

Country Link
US (2) US10120833B2 (ja)
JP (1) JP6400296B2 (ja)
KR (1) KR101603752B1 (ja)
CN (1) CN103970511B (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170365237A1 (en) * 2010-06-17 2017-12-21 Thincl, Inc. Processing a Plurality of Threads of a Single Instruction Multiple Data Group
US10133572B2 (en) * 2014-05-02 2018-11-20 Qualcomm Incorporated Techniques for serialized execution in a SIMD processing system
US9690361B2 (en) * 2014-12-24 2017-06-27 Intel Corporation Low-power context-aware control for analog frontend
US10996959B2 (en) * 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
CN111712793B (zh) * 2018-02-14 2023-10-20 华为技术有限公司 线程处理方法和图形处理器
CN111930428B (zh) * 2020-09-27 2021-01-15 南京芯瞳半导体技术有限公司 一种条件分支指令的融合方法、装置及计算机存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5212777A (en) * 1989-11-17 1993-05-18 Texas Instruments Incorporated Multi-processor reconfigurable in single instruction multiple data (SIMD) and multiple instruction multiple data (MIMD) modes and method of operation
US6272616B1 (en) * 1998-06-17 2001-08-07 Agere Systems Guardian Corp. Method and apparatus for executing multiple instruction streams in a digital processor with multiple data paths
JP3604029B2 (ja) 1999-01-12 2004-12-22 日本電気株式会社 マルチスレッドプロセッサ
US6643763B1 (en) * 2000-02-28 2003-11-04 International Business Machines Corporation Register pipe for multi-processing engine environment
US7472390B2 (en) 2003-10-01 2008-12-30 Intel Corporation Method and apparatus to enable execution of a thread in a multi-threaded computer system
US7324112B1 (en) * 2004-04-12 2008-01-29 Nvidia Corporation System and method for processing divergent samples in a programmable graphics processing unit
US20050289329A1 (en) * 2004-06-29 2005-12-29 Dwyer Michael K Conditional instruction for a single instruction, multiple data execution engine
US7418576B1 (en) 2004-11-17 2008-08-26 Nvidia Corporation Prioritized issuing of operation dedicated execution unit tagged instructions from multiple different type threads performing different set of operations
US7353369B1 (en) * 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US7594095B1 (en) 2005-11-29 2009-09-22 Nvidia Corporation Multithreaded SIMD parallel processor with launching of groups of threads
WO2008023576A1 (fr) * 2006-08-23 2008-02-28 Nec Corporation Élément de traitement, système de processeur parallèle en mode mixte, procédé pour élément de traitement, procédé pour processeur parallèle en mode mixte, programme pour élément de traitement, et programme pour processeur parallèle en mode mixte
US8381203B1 (en) * 2006-11-03 2013-02-19 Nvidia Corporation Insertion of multithreaded execution synchronization points in a software program
US8677106B2 (en) * 2009-09-24 2014-03-18 Nvidia Corporation Unanimous branch instructions in a parallel thread processor
US8959319B2 (en) * 2010-12-13 2015-02-17 Advanced Micro Devices, Inc. Executing first instructions for smaller set of SIMD threads diverging upon conditional branch instruction
US9606808B2 (en) * 2012-01-11 2017-03-28 Nvidia Corporation Method and system for resolving thread divergences

Also Published As

Publication number Publication date
US20150143081A1 (en) 2015-05-21
US20140215193A1 (en) 2014-07-31
US10120833B2 (en) 2018-11-06
JP2014146335A (ja) 2014-08-14
CN103970511B (zh) 2018-06-05
KR20140097651A (ko) 2014-08-07
KR101603752B1 (ko) 2016-03-28
CN103970511A (zh) 2014-08-06

Similar Documents

Publication Publication Date Title
JP6400296B2 (ja) マルチモード支援プロセッサ及びマルチモードを支援する処理方法
US7577826B2 (en) Stall prediction thread management
US8205200B2 (en) Compiler-based scheduling optimization hints for user-level threads
US20070150895A1 (en) Methods and apparatus for multi-core processing with dedicated thread management
US9244883B2 (en) Reconfigurable processor and method of reconfiguring the same
JP6317065B2 (ja) 再構成可能プロセッサ及びそのコード変換装置及び方法
KR102177871B1 (ko) 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법
CN110308982B (zh) 一种共享内存复用方法及装置
JP2019160352A (ja) 多重スレッド実行プロセッサ及び動作方法
JP6457200B2 (ja) プロセッシング装置
KR20140131472A (ko) 상수 저장 레지스터를 구비하는 재구성 가능 프로세서
KR20110106717A (ko) 재구성 가능 어레이 및 재구성 가능 어레이의 제어 방법
JP2003076667A (ja) マルチプロセッサシステムおよびプログラム最適化方法
KR20220016993A (ko) 그래픽 처리 유닛(Graphics Processing Unit, GPU)의 명시적 독립 마스크 레지스터의 마스크 조작 방법
US7617494B2 (en) Process for running programs with selectable instruction length processors and corresponding processor system
JP2004529405A (ja) 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ
EP3329361A1 (en) Vector operand bitsize control
JP4420055B2 (ja) マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法
JP4439288B2 (ja) 同時多重スレッディングプロセッサ、動作するスレッドの数に基づいて相異なる性能レベルで動作するように構成されるコンピュータプログラム格納媒体及びこれらを動作させる方法
JP5238876B2 (ja) 情報処理装置及び情報処理方法
US20120023317A1 (en) Digital data processing systems
JP2004240953A (ja) コンピュータシステム、その同時多重スレッディング方法およびキャッシュコントローラシステム。
EP1378825B1 (en) A method for executing programs on selectable-instruction-length processors and corresponding processor system
KR102055617B1 (ko) 운영 체제에서 수행되는 프로세스의 가상 주소 공간을 확장하는 방법 및 시스템
JP2006139645A (ja) プロセッサおよび演算処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170104

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180227

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180525

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180905

R150 Certificate of patent or registration of utility model

Ref document number: 6400296

Country of ref document: JP

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