(57)【要約】【課題】  マルチモードを支援するプロセッサ及びマルチモードを支援する処理方法を提供すること。【解決手段】  一例に係るマルチモードを支援するプロセッサは、フロントエンドユニットと、前記フロントエンドユニットよりさらに多くの数のプロセシングエレメントと、前記フロントエンドユニットにおいて条件分岐命令によりスレッド発散（ｔｈｒｅａｄ  ｄｉｖｅｒｇｅｎｃｅ）が発生するかどうかを判断し、前記条件分岐命令が発生する場合、前記プロセシングエレメントが現在活性化されたフロントエンドユニットを利用して命令を処理するように制御命令を設定し、前記条件分岐命令が発生しない場合、前記プロセシングエレメントが現在活性化された一つのフロントエンドユニットを利用して命令を処理するように、前記プロセシングエレメントを制御する制御情報を設定する制御部とを備える。【選択図】      図１
2014146335.tif 000002
【特許請求の範囲】
【請求項１】
複数のフロントエンドユニットと、
前記フロントエンドユニットより多いプロセシングエレメントと、
一フロントエンドユニットにより検出された条件分岐命令によりスレッド発散（ｔｈｒｅａｄ  ｄｉｖｅｒｇｅｎｃｅ）が発生するかどうかを判断し、前記条件分岐命令が発生すると判断した場合、前記プロセシングエレメントが現在活性化されたフロントエンドユニットを利用して命令を処理するように制御命令を設定し、前記条件分岐命令が発生しない場合、前記プロセシングエレメントが現在活性化された一つのフロントエンドユニットを利用して命令を処理するように、前記プロセシングエレメントを制御する制御情報を設定する制御部とを備えるプロセッサ。
【請求項２】
前記制御情報に基づいて前記現在活性化されたフロントエンドユニットの命令語を処理するのに使用するプロセシングエレメントを判断し、前記命令語を前記使用するプロセシングエレメントに伝達するインターコネクション部をさらに備える請求項１に記載のプロセッサ。
【請求項３】
前記制御部は
複数のレジスタを備え、前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納する請求項１または２に記載のプロセッサ。
【請求項４】
前記制御情報は、
前記各フロントエンドユニットに対するプロセシングエレメント割り当て情報を含む請求項３に記載のプロセッサ。
【請求項５】
前記複数のレジスタは、
対応するフロントエンドユニットに対するプロセシングエレメント割り当て情報を格納するための全体プロセシングエレメント数分だけのビット領域を含む請求項４に記載のプロセッサ。
【請求項６】
前記制御部は、
前記現在活性化されたフロントエンドユニットにより検出された条件分岐命令語を処理したプロセシングエレメントから処理結果を受信してスレッド発散有無を判断し、スレッド発散が発生すると判断されると、活性化されていないフロントエンドユニットのうちの何れか一つをさらに活性化する請求項１ないし５いずれか一項に記載のプロセッサ。
【請求項７】
前記制御部は、
前記さらに活性化されたフロントエンドユニットに前記プロセシングエレメントの一部を割り当てて、その割り当て情報を前記さらに活性化されたフロントエンドユニットに対応するレジスタに格納する請求項６に記載のプロセッサ。
【請求項８】
前記制御部は、
前記現在活性化されたフロントエンドユニットと前記さらに活性化されたフロントエンドユニットにより条件分岐文の処理がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化し、そのさらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定する請求項６に記載のプロセッサ。
【請求項９】
現在活性化されたフロントエンドユニットが条件分岐命令語を検出するステップと、
制御部が前記検出された条件分岐命令語によりスレッド発散が発生するかどうかを判断するステップと、
制御部が前記判断結果スレッド発散が発生する場合、非活性化されているフロントエンドユニットのうちの何れか一つをさらに活性化するステップと、
制御部が前記活性化されたフロントエンドユニットを利用してプロセシングエレメントが命令語を処理するように制御情報を設定するステップと
を含むマルチモードを支援する処理方法。
【請求項１０】
前記プロセッサは、複数のフロントエンドユニットを含み、前記プロセシングエレメントは、前記フロントエンドユニットよりさらに多くの数からなる請求項９に記載のマルチモードを支援する処理方法。
【請求項１１】
前記スレッド発散の発生有無を判断するステップは、
前記制御部が前記条件分岐命令語を処理したプロセシングエレメントから処理結果を受信し、その受信された処理結果に基づいてスレッド発散が発生するかどうかを判断する請求項９または１０に記載のマルチモードを支援する処理方法。
【請求項１２】
前記制御部は、
前記レジスタ内において前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納する二つ以上のレジスタを含む請求項９ないし１１いずれか一項に記載のマルチモードを支援する処理方法。
【請求項１３】
前記制御情報は、
前記各フロントエンドユニットに対するプロセシングエレメントの割り当て情報を含む請求項１２に記載のマルチモードを支援する処理方法。
【請求項１４】
前記各レジスタは、
対応するフロントエンドユニットに対するプロセシングエレメントの割り当て情報を格納するためのプロセシングエレメント数分だけのビット領域を含む請求項１３に記載のマルチモードを支援する処理方法。
【請求項１５】
前記制御情報設定ステップは、
前記さらに活性化されたフロントエンドユニットに対応するレジスタのビット領域において前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応するビット値を設定する請求項１４に記載のマルチモードを支援する処理方法。
【請求項１６】
制御部が前記現在活性化されたフロントエンドユニットとさらに活性化されたフロントエンドユニットにより処理される条件分岐がすべて終了しているかどうかを判断するステップと、
前記判断結果、条件分岐がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化するステップと、
前記さらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定するステップと
を含む請求項９ないし１５いずれか一項に記載のマルチモードを支援する処理方法。
【請求項１７】
条件分岐命令を検出する現在活性化されたフロントエンドユニットと、
検出された前記条件分岐命令に基づいて、スレッド発散が発生するかどうかを判断し、前記スレッド発散が発生する場合、現在非活性化されたフロントエンドユニットをさらに活性化し、プロセシングエレメントが前記活性化されたフロントエンドユニットから受信された命令を処理するように制御情報を設定する制御部と
を備えるマルチモードプロセッサ。
【請求項１８】
１またはそれ以上の非活性化されたフロントエンドユニットと、
フロントエンドユニットの総個数より多い数のプロセシングエレメントと
を備える請求項１７に記載のマルチモードプロセッサ。
【請求項１９】
前記スレッド発散が発生するかどうかを判断する時に、前記条件分岐命令を処理した結果を前記プロセシングエレメントから受信し、前記スレッド発散が発生するかどうかを受信された結果に基づいて判断する、請求項１７または１８に記載のマルチモードプロセッサ。
【請求項２０】
条件分岐を個別的に実行する現在活性化されたフロントエンドユニットと、
前記条件分岐がすべて終了したかどうかを判断し、前記条件分岐がすべて終了したと判断した場合、少なくとも一つのフロントエンドユニットを非活性化する制御部と
を備えるマルチモードプロセッサ。
【請求項２１】
前記制御部は、前記非活性化されたフロントエンドユニットの前記プロセシングエレメントを他のフロントエンドユニットに再度割り当てる、請求項２０に記載のマルチモードプロセッサ。
【請求項２２】
前記制御部は、前記フロントエンドユニットの各々に関するレジスタをさらに備え、前記レジスタ内に前記フロントエンドユニットの各々に関する制御情報を格納する、請求項２１に記載のマルチモードプロセッサ。
【請求項２３】
前記制御情報は、前記フロントエンドユニットの各々のプロセシングエレメント割り当て情報をさらに含む、請求項２２に記載のマルチモードプロセッサ。
【請求項２４】
前記レジスタの各々は、プロセシングエレメントの総個数分だけのビット領域を含み、前記プロセシングエレメント割り当て情報を前記レジスタに格納する、請求項２３に記載のマルチモードプロセッサ。
【請求項２５】
前記制御情報を設定する時に、さらに活性化されたフロントエンドユニットに関するレジスタのビット領域のビット値を設定し、
前記ビット値は、前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応する値である、請求項２４に記載のマルチモードプロセッサ。
【請求項２６】
前記再度割り当ては、前記非活性化されたフロントエンドユニット及び前記他のフロントエンドユニットの前記ビット領域上において論理和（ｌｏｇｉｃａｌ  ＯＲ）演算を行うことによってなされる、請求項２５に記載のマルチモードプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
ＳＩＭＤ及びＭＩＭＤモードを支援するプロセッサ及びそのプロセッサにおけるマルチモードを支援する処理方法と関連する。
【背景技術】
【０００２】
ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）構造に基づいたプロセッサは、すべてのプロセシングエレメント（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）がインストラクションフェッチ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）及びデコード（Ｄｅｃｏｄｅ）機能を担当する一つのフロントエンドユニット（Ｆｒｏｎｔ  Ｅｎｄ  Ｕｎｉｔ）を使用して命令語を共有することによって、ハードウェア資源を最小化し、データ並列処理による性能向上を最大化する。ＳＩＭＤストラクチャーを使用するプロセッサにおいて、プロセッサが条件分岐を処理すると、各条件分岐文を順次に行うようになって、与えられた資源を效率的に使用することができなくなる。しかしながら、ＳＩＭＤストラクチャーは、条件分岐が順次に行われることを必要とする。ただ一つのフロントエンドユニットが存在するので、ＳＩＭＤストラクチャーは、コードがスレッド発散を引き起こす状況が順次に解決されることを必要とする。ＳＩＭＤストラクチャーによってスレッドが互いに相互依存的（ｉｎｔｅｒｄｅｐｅｎｄｅｎｔ）になるためである。したがって、ＳＩＭＤストラクチャーは、ＳＩＭＤストラクチャーが単一のフロントエンドユニットのみを必要とする場合には、プロセッサの複雑度（ｃｏｍｐｌｅｘｉｔｙ）を軽減させることができるが、スレッド発散は、ＳＩＭＤ環境において問題を引き起こす。
【０００３】
これに対し、ＭＩＭＤ（Ｍｕｌｔｉｐｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）ストラクチャーに基づいたプロセッサは、すべてのプロセシングエレメントが独立的なフロントエンドユニットを有して動作する。ＭＩＭＤストラクチャーは、独立的なスレッド（ｔｈｒｅａｄ）を同時に処理するために、速い演算処理が可能で条件分岐文処理に適している。しかしながら、プロセッサのフロントエンドユニットがＭＩＭＤストラクチャーを使用する場合、ハードウェアが複雑になり、サイズが増加し、かつ費用が増加するという問題がある。また、固定ＭＩＭＤストラクチャー（ｆｉｘｅｄ  ＭＩＭＤ  ｓｔｒｕｃｔｕｒｅ）を有するプロセッサは、複数のフロントエンドユニットを有するように設計されることを必要とし、はなはだしきは複数のフロントエンドユニットのうち、一部のみが実際に使用される場合にも同様である。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、上記の問題を解決するためになされたものであって、その目的は、ＳＩＭＤ及びＭＩＭＤモードを支援するプロセッサ及びそのプロセッサにおけるマルチモードを支援する処理方法を提供することにある。
【課題を解決するための手段】
【０００５】
一様相によれば、プロセッサは、フロントエンドユニットと、前記フロントエンドユニットよりさらに多くの数のプロセシングエレメントと、前記フロントエンドユニットにおいて条件分岐命令によりスレッド発散（ｔｈｒｅａｄ  ｄｉｖｅｒｇｅｎｃｅ）が発生するかどうかを判断し、前記条件分岐命令が発生する場合、前記プロセシングエレメントが現在活性化されたフロントエンドユニットを利用して命令を処理するように制御命令を設定し、前記条件分岐命令が発生しない場合、前記プロセシングエレメントが現在活性化された一つのフロントエンドユニットを利用して命令を処理するように、前記プロセシングエレメントを制御する制御情報を設定する制御部とを備える。
【０００６】
このとき、前記制御情報に基づいて前記現在活性化されたフロントエンドユニットの命令語を処理するのに使用するプロセシングエレメントを判断し、前記命令語を前記使用するプロセシングエレメントに伝達するインターコネクション部をさらに備えることができる。
【０００７】
また、複数のレジスタを備え、前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納することができる。
【０００８】
また、前記制御情報は、前記各フロントエンドユニットに対するプロセシングエレメント割り当て情報を含むことができる。
【０００９】
複数のレジスタは、対応するフロントエンドユニットに対するプロセシングエレメント割り当て情報を格納するための全体プロセシングエレメント数分だけのビット領域を含むことができる。
【００１０】
また、前記制御部は、前記現在活性化されたフロントエンドユニットにより検出された条件分岐命令語を処理したプロセシングエレメントから処理結果を受信してスレッド発散有無を判断し、スレッド発散が発生すると判断されると、活性化されていないフロントエンドユニットのうちの何れか一つをさらに活性化することができる。
【００１１】
また、制御部は、前記さらに活性化されたフロントエンドユニットに前記プロセシングエレメントの一部を割り当てて、その割り当て情報を前記さらに活性化されたフロントエンドユニットに対応するレジスタに格納することができる。
【００１２】
また、制御部は、前記現在活性化されたフロントエンドユニットと前記さらに活性化されたフロントエンドユニットにより条件分岐文の処理がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化し、そのさらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定することができる。
【００１３】
他の様相によるマルチモードを支援する処理方法は、現在活性化されたフロントエンドユニットが条件分岐命令語を検出するステップと、制御部が前記検出された条件分岐命令語によりスレッド発散が発生するかどうかを判断するステップと、制御部が前記判断結果スレッド発散が発生する場合、非活性化されているフロントエンドユニットのうちの何れか一つをさらに活性化するステップと、制御部が前記活性化されたフロントエンドユニットを利用してプロセシングエレメントが命令語を処理するように制御情報を設定するステップとを含む。
【００１４】
このとき、前記プロセッサは、複数のフロントエンドユニットを含み、前記プロセシングエレメントは、前記フロントエンドユニットよりさらに多くの数からなることができる。
【００１５】
スレッド発散の発生有無を判断するステップにおいて、前記制御部が前記条件分岐命令語を処理したプロセシングエレメントから処理結果を受信し、その受信された処理結果に基づいてスレッド発散が発生するかどうかを判断することができる。
【００１６】
制御部は、前記レジスタ内において前記各フロントエンドユニットに対応して各フロントエンドユニットに対する制御情報を格納する二つ以上のレジスタを含むことができる。
【００１７】
制御情報は、前記各フロントエンドユニットに対するプロセシングエレメントの割り当て情報を含むことができる。
【００１８】
各レジスタは、対応するフロントエンドユニットに対するプロセシングエレメントの割り当て情報を格納するためのプロセシングエレメント数分だけのビット領域を含むことができる。
【００１９】
制御情報設定ステップは、前記さらに活性化されたフロントエンドユニットに対応するレジスタのビット領域において前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応するビット値を設定することができる。
【００２０】
また、制御部が前記現在活性化されたフロントエンドユニットとさらに活性化されたフロントエンドユニットにより処理される条件分岐がすべて終了しているかどうかを判断するステップと、前記判断結果、条件分岐がすべて終了すると、前記さらに活性化されたフロントエンドユニットを非活性化するステップと、前記さらに活性化されたフロントエンドユニットに割り当てられていたプロセシングエレメントを前記現在活性化されたフロントエンドユニットに割り当てられるように制御情報を設定するステップとを含むことができる。
【００２１】
さらに他の様相によるマルチモードプロセッサは、条件分岐命令を検出する現在活性化されたフロントエンドユニットと、検出された前記条件分岐命令に基づいて、スレッド発散が発生するかどうかを判断し、前記スレッド発散が発生する場合、現在非活性化されたフロントエンドユニットをさらに活性化し、プロセシングエレメントが前記活性化されたフロントエンドユニットから受信された命令を処理するように制御情報を設定する制御部とを備える。
【００２２】
このとき、１またはそれ以上の非活性化されたフロントエンドユニットと、フロントエンドユニットの総個数より多い数のプロセシングエレメントとを備えることができる。
【００２３】
また、前記スレッド発散が発生するかどうかを判断する時に、前記条件分岐命令を処理した結果を前記プロセシングエレメントから受信し、前記スレッド発散が発生するかどうかを受信された結果に基づいて判断することができる。
【００２４】
さらに他の様相によるマルチモードプロセッサは、条件分岐を個別的に実行する現在活性化されたフロントエンドユニットと、前記条件分岐がすべて終了したかどうかを判断し、前記条件分岐がすべて終了したと判断した場合、少なくとも一つのフロントエンドユニットを非活性化する制御部とを備える。
【００２５】
制御部は、前記非活性化されたフロントエンドユニットの前記プロセシングエレメントを他のフロントエンドユニットに再度割り当てることができる。
【００２６】
また、制御部は、前記フロントエンドユニットの各々に関するレジスタをさらに備え、前記レジスタ内に前記フロントエンドユニットの各々に関する制御情報を格納することができる。
【００２７】
制御情報は、前記フロントエンドユニットの各々のプロセシングエレメント割り当て情報をさらに含むことができる。
【００２８】
前記レジスタの各々は、プロセシングエレメントの総個数分だけのビット領域を含み、前記プロセシングエレメント割り当て情報を前記レジスタに格納することができる。
【００２９】
また、前記制御情報を設定する時に、さらに活性化されたフロントエンドユニットに関するレジスタのビット領域のビット値を設定し、前記ビット値は、前記さらに活性化されたフロントエンドユニットに割り当てられたプロセシングエレメントに対応する値になるようにすることができる。
【００３０】
再度割り当ては、前記非活性化されたフロントエンドユニット及び前記他のフロントエンドユニットの前記ビット領域上において論理和（ｌｏｇｉｃａｌ  ＯＲ）演算を行うことによってなされるようにすることができる。
【発明の効果】
【００３１】
本発明によれば、プロセシングエレメントが動的にフロントエンドユニットを共有するようにすることができ、プロセッサがＳＩＭＤモードとＭＩＭＤモードとの間で実行モードを転換できるので、フロントエンドユニットの費用を低減し処理速度を向上させることができる。
【図面の簡単な説明】
【００３２】
【図１】一実施形態に係るプロセッサを示す図である。
【図２】一般的なプロセッサにおける条件分岐文処理を説明するための例である。
【図３】一実施形態に係るプロセッサにおける条件分岐文処理を説明するための例である。
【図４】一実施形態に係るプロセッサにおけるマルチモードを支援する処理方法のフローチャートである。
【発明を実施するための形態】
【００３３】
その他の実施形態の具体的な事項は、詳細な説明及び図面らに含まれている。記載された技術の利点及び特徴、そしてそれらを達成する方法は、添付される図面と共に詳細に後述されている実施形態を参照すると明確になるはずである。明細書全体にわたって同一の参照符号は、同一の構成要素を指し示す。
【００３４】
プロセッサ、例えば複数のプロセシングエレメントを有する並列プロセッサは、ＳＩＭＤモードまたはＭＩＭＤモードプロセッサでありうる。プロセシングエレメントが動的にフロントエンドユニットを共有するように許すプロセッサに関する実施形態、及びプロセッサがＳＩＭＤモードとＭＩＭＤモードとの間でモードを転換するプロセッサに関する実施形態を説明する。フロントエンドユニットを共有しＳＩＭＤモードとＭＩＭＤモードとの間でモードを転換することによって、実施形態は、フロントエンドユニットに関する設計費用を最小化しながらもスレッド発散が発生する状況においてＭＩＭＤモードで動作するようにする性能的利点を得ることができる。
【００３５】
図１は、一実施形態に係るプロセッサを示す。図１に示すように、プロセッサ１００は、フロントエンドユニット１２０、インターコネクション部１３０、プロセシングエレメント１４０及び制御部１５０を備える。
【００３６】
フロントエンドユニット１２０は、少なくとも二つ以上ＦＥＵ＿０〜ＦＥＵ＿Ｍ−１であり、今後のプロセッサ１００の拡張性を考慮して適切な数が構成される。プロセッサ１００の拡張性は、プロセッサ１００が増加する作業の量に耐えることができる能力を意味する。拡張性は、増加した作業の特性に左右される他の考慮事項を含むこともできる。例えば、フロントエンドユニット１２０の数は、与えられた作業時間の間にプロセッサ１００が処理しなければならないデータの量に基づいて選択されることもできる。しかし、拡張性は、並列性を利用してデータを処理できる能力を考慮することもでき、特定プロセシングタスクは、並列遂行にさらに適合することもできる。
【００３７】
例えば、プロセッサ１００の処理条件が、主に発散が少なく発生する順次的スレッドの場合には、発散が頻繁に発生する複数のスレッドをプロセスが取扱う場合とは異なる拡張性を考慮しなければならない。スレッドの発散が拡張性と関連する理由は、仮にスレッドが順次的であれば、スレッドを実行する前に他のスレッドの実行終了を待たなくても並列にスレッドを実行させることが極めて容易であるためである。プロセッサ１００が処理するように設計されたデータの量と特性及び処理しなければならないタイミングに基づいて、適切なフロントエンドユニット１２０の数は変わることができる。例えば、仮にプロセッサ１００が処理するデータが複雑で高度に分岐されたコードを含む場合、相対的に多くの数のフロントエンドユニット１２０を含む実施形態が適切である。仮に、処理されるデータがスレッド発散が少なく発生する高度に順次的なコードを含むと、プロセッサ１００は、少ない数のフロントエンドユニット１２０を含むように設計されることができる。一方、適切なフロントエンドユニット１２０の数は、性能とプロセッサ複雑度の間で収容可能な程度の均衡を提供できる数で、実験やヒューリスティックまたは原理に基づいて選択されることができる。例えば、フロントエンドユニット１２０の数はプロセッサが処理するデータの特性を決定づける多様なファクターや統計に関する情報を使用するアルゴリズムや公式に基づいて導き出されることができる。
【００３８】
例えば、実施形態においてＭ個のフロントエンドユニット１２０があると仮定すると、Ｍという数が上で説明された方式を利用して決定されるか、またはその他の方式を利用して決定されることができる。フロントエンドユニット１２０は、インストラクションキャッシュ１１０から命令語をフェッチ（Ｆｅｔｃｈ）しデコード（ｄｅｃｏｄｅ）する機能を行う。インストラクションキャッシュ１１０は、プロセッサ１００がインストラクションをアクセスするために必要な時間を低減するために用意した、メインメモリ以外のさらに高速の代替的（ａｌｔｅｒｎａｔｉｖｅ）メモリであり、インストラクションを格納する。例えば、インストラクションキャッシュ１１０は、フロントエンドユニット１２０による高速のアクセスのためにインストラクションを提供することによって、実行するインストラクションのフェッチ速度を向上させることができる。キャッシュは、多様な実施形態において互いに異なるインストラクションキャッシュ１１０を利用して多様な類型により具現化されることができる。例えば、キャッシュが複数のレベルを有する互いに異なる類型と速度のメモリを使用するように具現化されることができる。
【００３９】
先に言及したように、インストラクションキャッシュ１１０は、プロセッサ１００の処理のために、実行するインストラクションをフェッチしデコードする。多様な類型にインストラクションキャッシュ１１０が具現化されて、インストラクションキャッシュ１１０の機能を提供できる。しかしながら、ある状況ではインストラクションキャッシュ１１０が特定実行インストラクションを含むことができない場合もある。そういう状況は、キャッシュ「ミス（ｍｉｓｓ）」状況と呼ばれる。これは所望の情報をキャッシュから得ることができ、メインメモリ内で所望の情報を探索する必要のない状況をいうキャッシュ「ヒット（ｈｉｔ）」状況と相反する。キャッシュ「ヒット」状況では、キャッシュは、適切なインストラクションをキャッシュ内でアクセスすることによってインストラクションをフェッチする。しかしながら、キャッシュ「ミス」状況では、所望の情報にアクセスするために、キャッシュは、該当情報をメインメモリから引き出さなければならず（ｒｅｔｒｉｅｖｅ）、速度がかなり遅い。キャッシングをする原則の一つは、一度使用された情報は再度使用される可能性が高いので、キャッシュメモリに維持しなければならないということであるから、一般に情報がメインメモリから引き出されると、キャッシュに格納される。しかし、キャッシュが一般的に限定された格納容量を有するために、可能なかぎりメインメモリをアクセスする必要性がないように、多様なアルゴリズムとテクニックを利用してキャッシュ内のあまり要らない情報を除去しなければならない。
【００４０】
実行するインストラクションは、機械語インストラクションであってもよい。そういう機械語インストラクションは、プロセシングエレメント１４０が単一の処理手順を行うのに必要な情報を提供する。例えば、実行するインストラクションは、オペコード（ｏｐｃｏｄｅ）とオペランド（ｏｐｅｒａｎｄｓ）とを備えることができる。オペコードは、フロントエンドユニット１２０においてデコードされると、行われる命令を識別する役割を果たし、オペランドは、命令遂行の対象になるデータである。例えば、オペランドは、オペコードによって行われる情報を含むプロセッサ１００のレジスタを示すことができる。例えば、オペコードは、演算、データ送信、論理、条件分岐または無条件ジャンプ（ｕｎｃｏｎｄｉｔｉｏｎａｌ  ｊｕｍｐ）のような多様なカテゴリーを有することができる。先に言及したように、プロセッサ１００は、条件分岐オペコードに対して特別な方式で応答するように設計されることができる。オペコードは、一般にスレッド発散を引き起こさずに並列的に実行されることのできる一連の命令を提供する。しかし、条件分岐オペコードは、多様な方式で実行されることができるので、実行される時にスレッド発散を引き起こすことがあり、条件分岐の影響を直ちに解決できない場合もある。したがって、条件分岐の発生する場合にも並列実行を続けるためには、プロセッサ１００は、スレッド発散が解決されるまで複数のフロントエンドユニット１２０を使用して処理し続けなければならない。
【００４１】
フロントエンドユニット１２０のフェッチされた命令語をデコードすることによって、プロセッサ１００は、フェッチされた命令を解析して命令を実行できる。フロントエンドユニット１２０は、インストラクションキャッシュ１１０に命令語がある場合、インストラクションキャッシュ１１０に要請するか、またはキャッシュミスの場合、メインメモリ（図示せず）に要請することによって、命令語をフェッチする。フロントエンドユニット１２０は、命令語をデコードしてどんな動作が行われるかをオペコードに基づいて判断し、どんなデータに対して行うかをオペランドに基づいて判断する。一般に、オペランドの重要性は、オペコードに対応する動作によって異なりうる。例えば、「加算（ａｄｄ）」オペコードの場合、２個のオペランドが加算された後、第３のオペランドにその合計が配置される。または、「ワード読み出し（ｌｏａｄ−ｗｏｒｄ）」オペコードの場合、オペランドは、メモリ情報を読み出すメモリアドレス及びメモリ情報を格納するデスティネーションレジスタを表すことができる。プロセシングエレメント１４０は、フロントエンドユニット１２０から出力された命令語を処理する機能を行い、少なくとも二つ以上ＰＥ＿０〜ＰＥ＿Ｎ−１から構成される。ＮがＭより大きいと、Ｍ個のフロントエンドユニット１２０のうち、少なくとも一つがデコードされたインストラクションを１以上のプロセシングエレメント１４０に送信するようになる。したがって、フロントエンドユニット１２０は、プロセシングエレメント１４０間の並列性（ｐａｒａｌｌｅｌｉｓｍ）及び関係（ｒｅｌａｔｉｏｎｓｈｉｐ）を管理する。
【００４２】
このとき、プロセシングエレメント１４０は、フロントエンドユニット１２０より多くの数からなることができる。複数のプロセシングエレメント１４０は、状況により一つのフロントエンドユニット１２０を介して命令語を処理するか、または二つ以上のフロントエンドユニット１２０を介して命令語を処理できる。複数のプロセシングエレメント１４０が一つのフロントエンドユニット１２０を使用すると、プロセッサ１００は、ＳＩＭＤプロセッサとして動作する。複数のプロセシングエレメント１４０は、２またはそれ以上のフロントエンドユニット１２０を使用すると、プロセッサ１００は、ＭＩＭＤプロセッサとして動作する。実施形態において、プロセッサ１００は、命令語のデコード及び複数のプロセシングエレメント１４０への送信を実際に行うフロントエンドユニット１２０の数を調整する能力を有することによって、プロセッサ１００の性能を最適化する。
【００４３】
インストラクションキャッシュ１１０とプロセシングエレメント１４０との間のデータフローは、それぞれの命令語がフロントエンドユニット１２０を介してどのように経路が設定されてプロセシングエレメント１４０によって処理されるかによって変わることがある。また、データフローは、経路設定される命令語の類型によって変わることがある。例えば、一般的な命令語は、単純に順次に行われることができ、フロントエンドユニット１２０によってプロセシングエレメント１４０に並列的に分配されることができる。しかしながら、仮に条件分岐命令語がある場合、プロセシングエレメント１４０をどのように管理して遅延と速度低下を最小化させながらも正確な結果を保証できるかをフロントエンドユニット１２０が判断しなければならない場合もある。制御部１５０は、実施形態の構成によってインストラクションキャッシュ１１０から命令語をフェッチしデコードするフロントエンドユニット１２０と、そのフロントエンドユニット１２０を利用して命令語を処理するプロセシングエレメント１４０を動的に決定できる。
【００４４】
したがって、制御部１５０は、フロントエンドユニット１２０とプロセシングエレメント１４０との間の動的マッピングを行う仲介者として動作する。動的マッピングが制御部１５０によって提供されるので、プロセッサ１００は、ＳＩＭＤモードとＭＩＭＤモードの長所をすべて取ることができる。仮に、分岐とスレッド発散がなくてＳＩＭＤモードでも十分であると、制御部１５０は、単一のフロントエンドユニット１２０とプロセシングエレメント１４０との間で命令語の経路を設定することによって、プロセッサ１００がＳＩＭＤモードプロセッサと同様に動作するようにする。一方、制御部１５０は、複数のフロントエンドユニット１２０とプロセシングエレメント１４０との間で命令語を動的にマッピングすることもできる。このとき、プロセッサ１００は、ＭＩＭＤモードで動作する。制御部１５０は、どのフロントエンドユニット１２０が命令語をどのプロセシングエレメント１４０に送信するかを動的に選択できるので、制御部１５０は、どのように性能を改善させる方向に命令語を処理するかを適応させることができる。制御部１５０は、非効率性を軽減させる方向で資源を管理して処理速度を向上させることができるためである。例えば、制御部１５０は、活性化されたフロントエンドユニット１２０の数を特定処理作業に必要な数で最小化することによって、プロセシングオーバーヘッドを最小化できる。一方、制御部１５０は、必要な個数分だけフロントエンドユニット１２０を活性化させることができるので、処理作業に複数のフロントエンドユニット１２０が必要な場合、制御部１５０は、追加のフロントエンドユニット１２０を活性化させることもできる。例えば、制御部１５０は、初めスレッド発散や分岐のない時には、単一のフロントエンドユニット１２０を使用することができるので、プロセッサ１００がＳＩＭＤプロセッサとして動作するようにすることができる。その後、プロセッサ１００が分岐命令語に出会うと、制御部１５０が動的にフロントエンドユニット１２０を活性化して複数の分岐を並列に処理することによって、プロセッサ１００が待機する必要がなく、潜在的なＳＩＭＤモードのその他の短所を回避できるので、スレッド発散が発生しても、発散されたスレッドが解決されるのを待つ間に、並列処理の全体過程を遅らせる必要がない。プロセスを最適化するための動的活性化及び非活性化については、以下でさらに具体的に説明する。
【００４５】
実施形態において、フロントエンドユニット１２０を動的に選択して資源管理をするためには、ＳＩＭＤモードとＭＩＭＤモードとの間でモードを変更しなければならない。各々のモードは、並列コンピューティングを扱う互いに異なる方式を意味する。ＳＩＭＤプロセシングでは、複数のプロセシングエレメントが複数のデータポイントで同時に同じ演算を行う。したがって、ＳＩＭＤは、データレベル並列性（ｄａｔａ  ｌｅｖｅｌ  ｐａｒａｌｌｅｌｉｓｍ）を含む。すなわち、すべてのデータが同じ方式で処理されることを意味する。しかしながら、ＳＩＭＤアプローチは、すべてのデータが同じ方式で処理されなければならないので、仮に分岐やスレッド発散が発生する時に問題が生じうる。ＳＩＭＤは、データが共に処理されなければならないので、発散するスレッドが解決されるまで並列処理の全体過程が待機しなければならないためである。
【００４６】
ＭＩＭＤプロセシングでは、ＭＩＭＤを使用する装置が自動に、また非同期式で動作する多数のプロセッサを有する。ＭＩＭＤでは、各々のプロセッサのプロセシングは、他のプロセッサのプロセシングと独立的であり、互いに異なるプロセッサは、互いに異なるデータ部分に対して互いに異なる命令語を行うことができる。しかし、ＭＩＭＤが提供する独立性のおかげで各々のプロセッサは他のプロセッサの動作とは関係なく動作を行うことができるが、プロセッサがこのように独立的に動作するためには、プロセッサ間に動作を干渉しないことを保証するための追加的なインフラストラクチャーが必要である。例えば、メモリをアクセスする時にプロセッサが他のプロセッサを妨害しないようにするために、ＭＩＭＤのメモリアーキテクチャーは共有メモリモデル（ｓｈａｒｅｄ  ｍｅｍｏｒｙ  ｍｏｄｅｌ）や分散メモリモデル（ｄｉｓｔｒｉｂｕｔｅｄ  ｍｅｍｏｒｙ  ｍｏｄｅｌ）でなければならない。
【００４７】
先に説明したように、各々のモードは、特定用途に応じるシナリオにさらによく適応されることができる。ＭＩＭＤモードは、発散スレッドを同時に取扱うことができる能力を提供し、これを通じて特に分岐コードに対するさらに優れた並列性を得ることができるが、ＭＩＭＤは、スレッドを分離する機能のために豊かな支援を必要とするので、オーバーヘッドが多く発生するようになる。したがって、フロントエンドユニット１２０を動的に選択するようになれば、ＳＩＭＤモードとＭＩＭＤモードとの間で選択的にモード変更できるので、ＭＩＭＤモードを利用すると性能が改善される場合には、ＭＩＭＤモードが選択されることができる。例えば、ある実施形態ではＳＩＭＤモードで実行を開始した後、実行途中に分岐及びスレッド発散が発生すると、可能なかぎり多くの並列性を提供するために、スレッドの数、発散の特性及び使用可能なフロントエンドユニット１２０の数に基づいて、使用可能なフロントエンドユニット１２０を活性化する。
【００４８】
例えば、ＳＩＭＤは、発散しないスレッドを実行する場合に選択されることができ、そういう状況ではＭＩＭＤモードで発生するプロセシングオーバーヘッドがＭＩＭＤモードを利用することによって得られる長所より勝る。上述したように、ＳＩＭＤモードは、データレベル並列性が存在する場合によく適応できる。仮に、すべてのプロセシングエレメント１４０が同じ動作を行っており、唯一の差異点は、プロセシングエレメント１４０が互いに異なるデータに対して動作していることならば、複数のフロントエンドユニット１２０を利用して命令語をフェッチしデコードする必要がない。すべてのプロセシングエレメント１４０が同じ命令語を単一のフロントエンドユニット１２０から容易に受信できるためである。
【００４９】
すなわち、制御部１５０は、条件分岐文によるスレッド発散（ｔｈｒｅａｄ  ｄｉｖｅｒｇｅｎｃｅ）が発生する前であるか、又はすべての条件分岐文が終了した場合には、一つのフロントエンドユニット１２０のみを活性化して、すべてのプロセシングエレメント１４０がその現在活性化されたフロントエンドユニット１２０を利用して命令語を処理するＳＩＭＤモードで動作できるように制御情報を設定できる。このとき、すべてのプロセシングエレメント１４０は、同じ一つの命令語を実行する。ただ一つの活性化されたフロントエンドユニットのみを使用することによって、プロセッサ１００は、インストラクションキャッシュ１１０から受信した命令語を管理する時に複数のフロントエンドユニット１２０を識別する必要がなく、ＭＩＭＤ動作において発生するフロントエンドユニットに関わる高いコストを避けることができる。複数のフロントエンドユニット１２０を利用すると、プロセシングエレメント１４０がさらに独自に動作できるので、複数の発散スレッドを管理する時に長所がある反面、複数のフロントエンドユニット１２０を利用すると、複数のフロントエンドユニット１２０による命令語の管理と配分を必要とするので、プロセッサの複雑度が高まり、追加的なオーバーヘッドによって速度が低下する可能性がある。
【００５０】
ＳＩＭＤが使用される実施形態において、一つのフロントエンドユニット１２０は予め設定されることができ、例えば、図１に示したように、フロントエンドユニット１２０のうち、ＦＥＵ＿０を活性化して命令語を処理するように制御情報を設定できる。活性化されたフロントエンドユニット１２０が一つだけで、プロセッサ１００がＳＩＭＤモードで動作する場合、一つの活性化されたフロントエンドユニット１２０は、インストラクションキャッシュ１１０からの命令語をフェッチしデコードする唯一のフロントエンドユニット１２０になり、他のフロントエンドユニット１２０は、非活性化状態でインストラクションキャッシュ１１０とは何らの相互作用をしない。プロセッサ１００は、あたかも活性化されたフロントエンドユニット１２０が唯一のフロントエンドユニット１２０のように動作する。しかし、他の実施形態では、フロントエンドユニット１２０のうちの何れか一つでも単一のフロントエンドユニット１２０として選択されることができる。追加的な実施形態において、単一のフロントエンドユニット１２０が予め指定されない場合には、動的に単一のフロントエンドユニット１２０が決定されることができる。例えば、仮に特定フロントエンドユニット１２０がプロセッサ１００の他の部分と高速の接続を有するならば、その特定フロントエンドユニット１２０が動的に選択されることもできる。また、さらに他の実施形態として、特定フロントエンドユニット１２０が選択されることができる。仮に、特定フロントエンドユニット１２０を他のフロントエンドユニットと区別されるようにするある明確な特徴がある場合ならば、その特定フロントエンドユニット１２０が選択されることもできる。
【００５１】
仮に、現在活性化されたフロントエンドユニット１２０により条件分岐命令語が検出され、インストラクションキャッシュ１１０からの命令語がフェッチされデコードされたとき、その条件分岐文によりスレッド発散が発生すると、活性化されていない少なくとも一つの使用可能なフロントエンドユニット１２０において何れか一つのフロントエンドユニット１２０をさらに活性化し、プロセシングエレメント１４０が二つ以上の活性化されたフロントエンドユニット１２０を共に利用して並列に命令語を処理するＭＩＭＤモードで動作するように制御情報を設定できる。複数の活性化されたフロントエンドユニット１２０を使用することによって、制御部１５０は、発散するスレッドが統一された実行フローに戻るまでフロントエンドユニット１２０が独立的に個別分岐を実行するようにすることができる。一旦、条件分岐命令語及びスレッド発散が発生すると、ＭＩＭＤモードを使用することが適切であるが、ＭＩＭＤモードでは、複数のスレッドを同時に実行して条件分岐命令語を処理するためである。制御部１５０は、現在活性化されたフロントエンドユニット１２０により検出された条件分岐命令語を処理したプロセシングエレメント１４０からその処理結果を受信してスレッド発散有無を判断でき、その判断結果によってフロントエンドユニット１２０の追加活性化有無を判断できる。例えば、条件分岐命令語を処理したとき、「Ｔｒｕｅ」または「Ｆａｌｓｅ」のようなブール（Ｂｏｏｌｅａｎ）値を結果として得ることができる。条件分岐命令語は、他の形式で似た結果を提供することもできる。例えば、条件分岐命令語のリターン値（ｒｅｔｕｒｎ  ｖａｌｕｅ）が「０」または「１」になりうるが、このとき「０」は「Ｆａｌｓｅ」を、「１」は「Ｔｒｕｅ」を意味できる。一方、条件分岐命令語は、分岐をするかどうかに関して羅列された判断をリターンすることもできる。本質的に、条件分岐命令語は、続く実行を２通りの可能な方式で指定する。一つのシナリオは、プログラムの実行が分岐無しで続くことである。このシナリオでは、いかなる分岐も発生せず、他のフロントエンドユニットをさらに介入させる必要無しで実行を継続することができる。他の可能なシナリオは、条件分岐命令語によって主な実行経路から離脱して分岐を実行することである。分岐を実行する際には、一つ以上の命令語の集合が実行される。したがって、追加的なフロントエンドユニット１２０が追加的な命令語の集合を担当する。ＳＩＭＤモードの場合には、１回に一つの分岐のみを処理しなければならなかったが、ＭＩＭＤモードでは、追加的なフロントエンドユニット１２０が追加的な命令語を相互独立的でかつ非同期的に実行させうるので、相互従属性（ｉｎｔｅｒｄｅｐｅｎｄｅｎｃｙ）も防止できる。
【００５２】
制御部１２０は、フロントエンドユニット１２０がさらに活性化されると、現在活性化された少なくとも一つのフロントエンドユニット１２０に割り当てられているか、または如何なるフロントエンドユニット１２０にも割り当てられていないプロセシングエレメント１４０中の一部をさらに活性化されたフロントエンドユニット１２０に再び割り当てられるよう、制御情報を設定できる。プロセシングエレメント１４０を新規フロントエンドユニット１２０に再度割り当てることで、制御部１５０は、複数のフロントエンドユニット１２０からの情報のフローを適切なプロセシングエレメント１４０で制御できるようになって、フロントエンドユニット１２０から引き出された命令語がスレッドが発散する時間の間に相互干渉の発生無しで並列的に適切に実行されることができる。
【００５３】
インターコネクション部１３０は、フロントエンドユニット１２０からプロセシングエレメント１４０に命令語を伝達する。例えば、インターコネクション部１３０は、制御部１５０により設定された制御情報を利用して現在活性化されたフロントエンドユニット１２０の命令語を処理するプロセシングエレメント１４０を判断し、その命令語を判断されたプロセシングエレメント１４０に伝達する。制御部１５０及びインターコネクション部１３０は、どんなフロントエンドユニット１２０が活性化され、どのように命令語がフロントエンドユニット１２０からプロセシングエレメント１４０に実行のために伝達されるかを共に決定する。
【００５４】
例えば、図１のインターコネクション部１３０は、Ｍ個のフロントエンドユニット２０からＮ個のプロセシングエレメント１４０へのマルチプレクサ（ｍｕｌｔｉｐｌｅｘｅｒ）を備える。言い換えれば、インターコネクション部１３０は、Ｎ個のプロセシングエレメント１４０のうちの何れか一つのプロセシングエレメントを、プロセシングエレメント１４０が命令語を受信するＭ個のフロントエンドユニット１２０のうちの何れか一つと接続する。インターコネクション部１３０においてこのようなマルチプレクサを使用するために、マルチプレクサは、Ｍ個のフロントエンドユニット１２０のうちの何れか一つからどんな入力信号がその信号を受信するＮ個のプロセシングユニット１４０へのどの出力と接続されるかを指示するマルチプレクサー選択情報（ｍｕｘ−ｓｅｌｅｃｔｉｏｎ  ｉｎｆｏｒｍａｔｉｏｎ）を受信する。制御部１５０は、分岐命令語を検出した場合、このようなコネクション情報を提供することによって、フロントエンドユニット１２０をプロセシングエレメント１４０とマッピングする。
【００５５】
図２は、一般的なプロセッサにおける条件分岐文処理を説明するための例である。例えば、図２は、ＳＩＭＤモードでどのように条件分岐が処理され、これと同じ条件分岐がＭＩＭＤモードではどのように処理されるかを示す。図３は、一実施形態に係るプロセッサにおける条件分岐文処理を説明するための例である。図３が図２と異なる点は、図３の実施形態では、純粋なＳＩＭＤまたは純粋なＭＩＭＤに従って条件分岐を処理する代わりに、プロセッサがハイブリッドモードを使用することによって、ＳＩＭＤとＭＩＭＤの短所は最小化され、長所は最大化されるということである。したがって、図２は、純粋なＳＩＭＤモード及びＭＩＭＤモードの動作を示す比較資料を提供することによって、実施形態に係るマルチモードプロセシングがＳＩＭＤ及びＭＩＭＤモード動作を具現する具体的な特徴を明確にすることを手伝うものである。図２は、ＳＩＭＤプロセッサ２１０及びＭＩＭＤプロセッサ２３０を示し、これらのプロセッサがどのように分岐コードブロック２６０を実行するかを示す。
【００５６】
図２の左側は、一つのフロントエンドユニットを利用して８個のプロセシングエレメントがフェッチされデコードされた命令語を処理するＳＩＭＤモード実行構成を示す図である。図２は、ＳＩＭＤモードプロセッサ２１０を示す。ＳＩＭＤプロセッサ２１０は、一つのＦＥＵ２１２を使用する。ＳＩＭＤプロセッサ２１０を介したデータフローは２２０に示し、８個のプロセシングエレメント（０から７まで）を介して実行が追跡される。条件分岐文が発生する前（ライン０〜７）と、すべての条件分岐文が終了した以後（ライン１００〜）の命令語は、８個のプロセシングエレメント０〜７がデータを並列に処理することによって、極めて効果的な処理性能を得ることができる。コードのこの部分には条件分岐がないので、スレッドは、個別的に実行される必要がなく、実行速度を低下させない。したがって、すべてのプロセシングエレメントは、同時に命令語を処理できる。これに対し、条件分岐文が発生した以後（ライン８〜９９）には、一部のプロセシングエレメントが命令語を順次に処理することによって、むしろ処理性能が低下する。例えば、第１条件分岐は、ライン８〜１９を実行する。この分岐が解決されるまでは、次のプロセシングエレメントがライン２０〜４４によって定義された次の条件分岐を行うことができない。他の条件分岐は、ライン４５〜６９、７０〜９９を実行する。図２は、ライン４５〜６９のコードによって定義された条件分岐がプロセシングエレメント２、３、７によって同時に実行されることができ、ライン７０〜９９のコードによって定義された分岐がプロセシングエレメント４、５、６によって同時に実行されうることを示す。図２において、ＳＩＭＤモードでは、条件分岐があるとき、分岐の一部のみが一度に実行されうるので、ある分岐は、他の分岐の結果を知った後に実行を続けることができる。図２に示したように、時々複数のプロセシングエレメントは、同じ分岐からの命令語を処理でき、命令語を同時に実行することもできる。例えば、図２は、ライン４５〜６９から提供される命令語がプロセシングエレメント２、３、７によって同時に実行され、ライン７０〜９９から提供される命令語がプロセシングエレメント４、５、６によって同時に実行されることを示す。したがって、条件分岐がＳＩＭＤモードにおいて発生しても、複数のプロセシングエレメントがプロセシングを同時に行って並列性を提供することも可能である。しかし、ライン８〜１９及びライン２０〜４４において示したように、ＳＩＭＤモードですべての実行が一つの条件分岐が解決されるのを待つようにすることも可能である。したがって、ＳＩＭＤモードは、複数のプロセシングエレメントを並列的に実行する場合もあるが、他のプロセシングエレメント上において実行される発散するスレッドが解決されることを一部プロセシングエレメントの実行が待機しなければならない場合もある。
【００５７】
図２の右側は、８個のフロントエンドユニットＦＥＵ  ０〜ＦＥＵ７と８個のプロセシングエレメント０〜７を利用して命令語を処理するＭＩＭＤモード実行構成を示した図である。図２は、ＭＩＭＤモードプロセッサ２３０を示す。ＭＩＭＤプロセッサ２３０は、８個のフロントエンドユニット２４０を使用する。ＭＩＭＤプロセッサ２３０を介したデータフローが２５０に示されている。８個のフロントエンドユニット２４０と８個のプロセシングエレメントがあるので、各々のプロセシングエレメントは、そのプロセシングエレメントのみのために命令語をフェッチしデコードする各々のフロントエンドユニットによって命令語の提供を受ける。したがって、各々のフロントエンドユニット／プロセシングエレメント対（ｐａｉｒ）は、他の如何なる対とも独立的にデータを処理し命令語を実行できるので、他のスレッドが実行を完了するまでいかなる対も待機する必要がない。例えば、ＭＩＭＤモードにおいて、８個のフロントエンドユニットＦＥＵ  ０〜ＦＥＵ７を介して各条件分岐文による命令語を独立的に処理することによって、迅速な条件分岐文の処理が可能になる。したがって、図２は、どのようにすべてのフロントエンドユニット２４０がライン０〜７をステップ２５０にて共に実行するかを示す。ＦＥＵ  ０は、プロセシングエレメント０が第１条件分岐であるＦＥＵ  １を実行するようにし、プロセシングエレメント１が第２条件分岐ＦＥＵ２、３、７を実行するようにし、プロセシングエレメント２、３、７が第３条件分岐ＦＵＥ４、５、６を実行するようにし、プロセシングエレメント４、５、６が第４条件分岐を実行するようにする。したがって、すべてのフロントエンドユニットが条件分岐が完了された後に共に実行を続ける。ＭＩＭＤモードでも条件分岐に応じる遅延はある程度以上は除去されないが、各々のフロントエンドユニットは、そのプロセシングエレメントを独立的に指定するので、各々のプロセシングエレメントが分岐を完了することを待った後に他の分岐が完了するようにフロントエンドユニット／プロセシングエレメント対を管理する必要はない。したがって、プロセッサが必要とする時間の殆どは、分岐が完了するのを待つ時間であるから、プロセッサは、分岐の処理を開始する前に他の分岐が完了するのを待つ必要がない。
【００５８】
しかしながら、ＭＩＭＤは、複数の独立的なフロントエンドユニットを管理してプロセシングエレメントに提供される命令語を個別的にフェッチしデコードするよう管理しなければならないので、プロセッサ設計の複雑度及びサイズが増加するようになる。このような制約により、適当な設計複雑度と大きさを有するプロセッサを作るためには、一般的なＳＩＭＤ構造のプロセッサに比べて少ないプロセシングエレメントを持たざるをえない。ＭＩＭＤプロセッサでは、各々のプロセシングエレメントがその自身のフロントエンドユニットに対応しなければならない。これは、ＳＩＭＤプロセッサでは管理できるはずの個数の複数のプロセシングエレメントを、ＭＩＭＤプロセッサでは管理できない可能性もあることを意味する。このような理由で、与えられた個数のプロセシングエレメントを有するＭＩＭＤは、同じ個数のプロセシングエレメントを有するＳＩＭＤよりさらに複雑でサイズが増加できる。したがって、ＳＩＭＤモードプロセッサとＭＩＭＤモードプロセッサの設計にはこのようなトレードオフがあるので、各々のモードは、特定状況と用途ごとに長所と短所を有するようになる。
【００５９】
図３は、４個のフロントエンドユニットＦＥＵ  ０〜ＦＥＵ  ３  ３１２、３１４、３１６、３１８と８個のプロセシングエレメント０〜７とから構成されたプロセッサ１００において命令語を処理することを示したものである。図３は、実施形態に係る例示的使用を示す。図３に示したように、実施形態は、「動的ＭＩＭＤ（Ｄｙｎａｍｉｃ  ＭＩＭＤ）」という類型のモードを提供する。例えば、動的ＭＩＭＤプロセッサが３１０から提供される。動的ＭＩＭＤプロセッサ３１０を通過するデータフローは３２０に示す。このモードにおいて、フロントエンドユニット３１２、３１４、３１６、３１８は、分岐コードの実行を扱うためにフロントエンドユニット３１２、３１４、３１６、３１８を使用することが効率的であるかどうかによって動的に活性化及び非活性化される。したがって、「動的ＭＩＭＤ」は、ＳＩＭＤモードとＤＩＭＤモード処理のハイブリッド動作モードである。ＳＩＭＤモードプロセシングでも十分な状況では「動的ＭＩＭＤ」プロセッサは、一つのフロントエンドユニットのみを利用する。この場合、コードが分岐されて並列性を許す追加的なフロントエンドユニットを活性化することが好ましいと、フロントエンドユニットは、引続き活性化されて、そういう並列性を分岐中に許すようになる。分岐が完了すると、不必要なフロントエンドユニットが非活性化されることによって、不必要な資源使用を最小化する。したがって、「動的ＭＩＭＤ」は、オーバーヘッドと資源使用とを最小化しながらも並列性を最大化する能力を提供する。
【００６０】
例えば、実施形態は、次のような「動的ＭＩＭＤ」に対した例示的なアプローチにおいて、以下のような動作を行う。フロントエンドユニットは、潜在的にスレッド間の発散を生じる条件分岐命令語を検出する。以後、プロセシングエレメント及び制御部は、スレッドに対応するどのプロセシングエレメントが分岐ターゲット（ｂｒａｎｃｈ  ｔａｒｇｅｔ）プログラムカウンタ（ＰＣ：ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ）命令語にジャンプを持っているか及びどのプロセシングエレメントが次のＰＣ命令語に移動しなければならないかを決定できる。ジャンプするプロセシングエレメントはジャンプを実行するので、テイクン（ｔａｋｅｎ）プロセシングエレメントと言い、他のプロセシングエレメントはジャンプを実行しないので、ノット−テイクン（ｎｏｔ−ｔａｋｅｎ）エレメントと言う。プロセシングエレメントにより実行されるスレッドの間に発散が存在する場合、制御部は、現在活性化されない新しいフロントエンドユニットを分岐ターゲットプログラムカウンタにジャンプするプロセシングエレメントに割り当てる。次に、制御部は、インターコネクション部に対する接続情報をアップデートする。ここで、制御部は、イネイブル（ｅｎａｂｌｅ）信号及び分岐ターゲットプログラムカウンタ情報を新しく割り当てられたフロントエンドユニットに送信する。その後に、フロントエンドユニットは、一つのＳＩＭＴ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｔｈｒｅａｄ）スレッドに併合（ｍｅｒｇｅ）しなければならない発散されたスレッドを表す復帰命令語（ｒｅｃｏｎｖｅｒｓｉｏｎ  ｉｎｓｔｒｕｃｔｉｏｎｓ）を検出する。以後、制御部は、インターコネクション部に対する接続情報をアップデートする。最後に、制御部は、ディセーブル（ｄｉｓａｂｌｅ）信号を送信し、フロントエンドユニットを非活性化する。
【００６１】
復帰命令語と関連して、復帰命令語をデコードするとき、フロントエンドユニットが復帰命令語を検出すると、フロントエンドユニットは、他のフロントエンドユニットに割り当てられた発散されたスレッドがそれらの復帰命令語に到達するまで待機する。制御部は、発散されたフロントエンドユニットから情報を受信し、これらのうちの何れか一つを非活性化する。
【００６２】
図３において、初めにはＦＥＵ  ０  ３１２のみが活性化される。図３は、初めにはＦＥＵ  ０  ３１２が活性化され、フロントエンドユニットのうちの何れか一つが活性化されたフロントエンドユニットになる例を示す。８個のプロセシングエレメント０〜７のすべては、条件分岐文が検出される前（ライン０〜７）までＦＥＵ  ０を利用して命令語を処理する。すなわち、ＦＥＵ  ０  ３１２がすべてのプロセシングエレメント０〜７からの命令語をフェッチしデコードすることを意味する。分岐がないので、各々のプロセシングエレメントは、ＦＥＵ  ０  ３１２から受信した同じ命令語を並列に処理する。この地点まで、プロセッサは、效率的にＳＩＭＤモードで動作する。ＭＩＭＤプロセッサ３１０には他のフロントエンドユニットがあるが、非活性化された状態である。したがって、フロントエンドユニットが非活性化されてオーバーヘッドがないので、活性化された単一のフロントエンドユニットのみがプロセッサ内の唯一のフロントエンドユニットのように動作する。活性化されたその他のフロントエンドユニットがないので、複数のフロントエンドユニットがこの地点では互いに協力する必要がない。分岐がなくていくつかのフロントエンドユニットを必要としないので、すべてのプロセシングは並列的になされ、複数のフロントエンドユニットに必要なフェッチとデコードを個別的にする必要がない。
【００６３】
しかし、図３に示したコードでは、ライン８において分岐が発生する。ＦＥＵ  ０  ３１２がライン８の条件分岐命令語ｉｆ（ｃ．０＝＝ｃ．１）をインストラクションキャッシュ１１０からフェッチすると、プロセシングエレメント０がその条件分岐命令語ｉｆ（ｃ．０＝＝ｃ．１）を処理し、ＦＥＵ  ０  ３１２において次のライン９の条件分岐文命令語ｉｆ（ｄ．０＝＝ｄ．１）をフェッチすると、これを処理する。しかし、必ずＦＥＵ  １を活性化しなければならないことではなく、ＦＥＵ  ２  ３１６やＦＥＵ  ３  ３１８のような有効な他のフロントエンドユニットを選択して活性化することもできる。このとき、スレッド発散が発生すると、次の使用可能なフロントエンドユニットＦＥＵ  １〜ＦＥＵ  ３の中でＦＥＵ  １  ３１４を活性化しＦＥＵ  １  ３１４を利用してプロセシングエレメント１がその条件分岐命令語ｉｆ（ｄ．０＝＝ｄ．１）と対をなす条件分岐命令語ｅｌｓｅ以下を処理するようにする。したがって、このような二つのフロントエンドユニットＦＥＵ  ０  ３１２及びＦＥＵ  １  ３１４を利用してスレッド発散が完了することを待たずに実行を続けることができる。図３は、実施形態においてＦＥＵ  ０ないしＦＥＵ  ３  ３１２、３１４、３１６、３１８の各々のフロントエンドユニットの観点でフェッチされたコードを示した図である。図３に示した最初分岐に関しては、ＦＥＵ  ０  ３１２の観点ではｃ．０はｃ．１と同じで、ｄ．０はｄ．１と同じであるという分岐シナリオに基づいてコードがフェッチされる。ＦＥＵ  １  ３１４の観点では、ｃ．０はｃ．１と同じであるが、ｄ．０はｄ．１と同じでないというシナリオに基づいてコードがフェッチされる。ＦＥＵ  ０  ３１２は、プロセシングエレメント０のために命令語をフェッチしデコードし、ＦＥＵ  １  ３１４は、プロセシングエレメント１のために命令語をフェッチしデコードする。しかし、使用可能なフロントエンドユニットが複数であるから、ＦＥＵ  １  ３１４は、プロセシングエレメント１に命令語を直ちに並列的に送信でき、プロセシングエレメント０が処理を終えた後にプロセシングエレメント１が処理を終える必要がない。
【００６４】
このような方式で、ＦＥＵ  ０  ３１２（ライン８）がフェッチした条件分岐命令語ｉｆ（ｃ．０＝＝ｃ．１）の処理結果、スレッド発散が発生すると、ＦＥＵ  ２  ３１６を活性化し、ＦＥＵ  ２  ３１６を介して条件分岐命令語ｉｆ（ｃ．０＝＝ｃ．１）と対をなす条件分岐命令語ｅｌｓｅ  ｉｆ（ｃ．０＝＝ｃ．２）以下（ライン３４まで）をプロセシングエレメント２、３、７が処理するようにする。ＦＥＵ  ２  ３１６を介して処理した条件分岐命令語ｅｌｓｅ  ｉｆ（ｃ．０＝＝ｃ．２）、ライン９によりスレッド発散が発生すると、ＦＥＵ  ３  ３１８を活性化し、ＦＥＵ  ３  ３１８を介してその条件分岐命令語ｅｌｓｅ  ｉｆ（ｃ．０＝＝ｃ．２）と対をなす条件分岐命令語ｅｌｓｅ以下（ライン３９まで）をプロセシングエレメント４、５、６が処理するようにする。したがって、各々のフロントエンドユニットＦＥＵ  ０  ３１２、ＦＥＵ  １  ３１４、ＦＥＵ  ２  ３１６、ＦＥＵ  ３  ３１８がスレッドが発散することにつれて引続き活性化されるので、各々のフロントエンドユニットを活性化するという利点が生じる。追加的に、各々のフロントエンドユニットは、プロセシングエレメントの集合（ｆａｍｉｌｙ）をフェッチしデコードできる。例えば、ＦＥＵ  ２  ３１６は、プロセシングエレメント２、３、７に対した同じ命令語をフェッチしデコードできる。これらのプロセシングエレメントは、全てＦＥＵ  ２  ３１６によって管理されるコード領域内の同じコードに対応するためである。したがって、実施形態においてこれらのプロセシングエレメントは、プロセシングエレメントごとに個別的なフロントエンドユニットを使用して命令語をフェッチしデコードする必要無しで並列的に動作できる。
【００６５】
図３に示されたように（図３は、ＦＥＵ  ０  ３１２、ＦＥＵ  １  ３１４、ＦＥＵ  ２  ３１６、ＦＥＵ  ３  ３１８）を備える４個のフロントエンドユニット１２０を例示する。）、一実施形態によるプロセッサ１００によれば、コード内の条件分岐によるスレッド発散有無によってフロントエンドユニット１２０を動的に活性化して命令語を処理できるようにすることによって、データ並列処理及び条件分岐文の処理に効果的になされることができる。例えば、制御部１５０は、フロントエンドユニット１２０が活性化されることが適切であるかどうかによって、フロントエンドユニット１２０に信号を送信できる。なお、制御部１５０は、フロントエンドユニット１２のための動作パラメーターを含むレジスタ１６０を備えることができる。上述したように、ある実施形態では、プロセシングエレメント１４０ごとに各々のフロントエンドユニットを有するようにする代わりに、フロントエンドユニット１２０が同じコードを実行するプロセシングエレメント１４０の集合に対して並列に命令語を提供できる。フロントエンドユニット１２０は、動的に活性化されることができるので、必要とするごとに使用されることもでき、必要としない時には非活性化されることができるので、オーバーヘッドを最小化できる。
【００６６】
追加的な様相によれば、図１に示すように制御部１５０は、二つ以上のレジスタ１６０を備えることができる。例えば、制御部１５０は、複数のレジスタ１６０をフロントエンドユニット１２０と同じ数（Ｍ個）で備えることができ、複数のレジスタ１６０は、各フロントエンドユニットＦＥＵ＿０〜ＦＥＵ＿Ｍ−１  １２０に対応し、各フロントエンドユニット１２０に対し設定された制御情報を格納することができる。したがって、各々のレジスタ１６０は、動作パラメーターを定義する情報を格納し、制御部１５０がフロントエンドユニット１２０のうち、一つの動作を制御できるように一時的格納空間を提供する。
【００６７】
制御情報は、各フロントエンドユニット１２０に対したプロセシングエレメント割り当て情報、占有ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）情報、非占有ＰＣ情報、復帰ＰＣ情報及び分岐ＦＥＵ情報を含むことができる。しかし、制御情報は、追加情報も格納することができ、各々のフロントエンドユニット１２０に関する情報は、異なる順序で格納されることもできる。一般に、プログラムカウンタ（ＰＣ）は、実行するプログラムに対するアクセスを管理するための命令語のメモリアドレスを含むレジスタのことを言う。このとき、占有ＰＣ情報１６２は、条件分岐命令語に含まれたＰＣ情報を利用して計算された値であって、現在ＰＣと条件分岐がＴｒｕｅのブーリアン値の場合、ジャンプする相手位置を表す相手ターゲットＰＣを加算した値でありうる。例えば、現在ＰＣ値は、現在命令語のアドレスを格納することができ、相手ＰＣ値は、分岐状況においていくつの命令語を飛ぶかを示す数字を格納することができる。非占有ＰＣ情報１６３は、現在ＰＣの次のＰＣを意味し、復帰ＰＣ情報１６４は、復帰命令語（ｒｅｃｏｎｖｅｒｓｉｏｎ  ｉｎｓｔｒｕｃｔｉｏｎ）に含まれた条件分岐が終了すると、復帰する相手位置を表す相手復帰ＰＣ情報を利用して計算された値であって、現在ＰＣにその相手復帰ＰＣを加算した値でありうる。
【００６８】
例えば、分岐ＦＥＵ情報が接続情報の場合、ＦＥＵが条件分岐命令語または復帰命令語を検出した時にアップデートされる。分岐ＦＥＵ情報は、どんなＦＥＵが命令語をプロセシングエレメントに提供するかを表す情報であり、インターコネクション部を構成するために使用される。
【００６９】
また、各々のＦＥＵは、いかなる形態の分岐も発見しない場合、サイクルごとにプログラムカウンタ（ＰＣ）をＰＣと命令語のサイズとの和（ＰＣ＋ｉｎｓｔｒｕｃｔｉｏｎ  ｓｉｚｅ）にアップデートする。例えば、命令語のサイズは、プロセシングアーキテクチャーによって３２ビットまたは６４ビットでありうる。これに対し、ＦＥＵがジャンプまたは条件分岐命令語を検出した場合、ＦＥＵは、ＰＣ値を現在ＰＣと関連したＰＣ値の和（ｃｕｒｒｅｎｔ  ＰＣ＋ｒｅｌａｔｉｖｅ  ＰＣ  ｖａｌｕｅ）のような分岐ターゲットＰＣ値にアップデートする。ＰＣ値をアップデートするこのようなアプローチは、プログラムフロー（ｆｌｏｗ）が分岐を考慮するステップに適切に進むようにする。
【００７０】
また、分岐ＦＥＵ情報１６５は、条件分岐命令語によりスレッド発散が発生した場合、各スレッドの処理を管理するのを手伝うフロントエンドユニット１２０に対した情報である。フロントエンドユニット１２０が条件分岐命令語を処理するように活性化された場合、条件分岐を処理するフロントエンドユニット１２間のペアレント（ｐａｒｅｎｔ）とチャイルド（ｃｈｉｌｄ）との関係を定義する関係情報（ｒｅｌａｔｉｏｎｓｈｉｐ  ｉｎｆｏｒｍａｔｉｏｎ）を表すことができる。そういう関係に対する情報によって、プロセッサ１００は、スレッド発散中に分岐に対する再分岐（ｓｕｂ−ｂｒａｎｃｈ）が起きたとき、フロントエンドユニット１２０間の関係を調整できるようになる。
【００７１】
図１に示すように、各フロントエンドユニット１２０に対応する制御部１５０の各レジスタ１６０は、上記の制御情報を格納するために対応する一つ以上の領域１６１〜１６５からなることができる。このとき、各フロントエンドユニット１２０に対したプロセシングエレメント１４０割り当て情報を格納するための、レジスタのうちの何れか一つが割り当てた領域１６１は、全体プロセシングエレメント１４０の数分だけのビット領域Ｖ０〜ＶＮ−１からなることができる。その領域１６１のビットＶ０〜ＶＮ−１のそれぞれは、各プロセシングエレメント１４０に静的にマッピングされて各ビット値の設定に応じてマッピングされるプロセシングエレメント１４０の割り当て有無を表すことができる。例えば、プロセシングエレメントＰＥ＿０からＰＥ＿Ｎ−１は、ビットＶ０からＶＮ−１に順にマッピングされ、制御部１５０は、フロントエンドユニット１２０に割り当てられたプロセシングエレメント１２０はマッピングされるビットを「１」に設定し、そうでないビットは「０」に設定できる。したがって、ビット領域１６１内の各々のビットは、フロントエンドユニット１２がプロセシングエレメントに命令語を送信するかどうかを示すブルリアン値を表す。
【００７２】
最初にプロセッサ１００をＳＩＭＤモードで動作するように一つのフロントエンドユニット１２０、例えば、ＦＥＵ  ０１２０が予め設定されていると、制御部１５０は、そのＦＥＵ  ０を活性化してプロセシングエレメント１４０のために命令語をフェッチしデコードする。制御部１５０は、プロセシングエレメント１４０の割り当て情報を格納するためのレジスタ１６０のビット領域Ｖ０〜ＶＮ−１においてその活性化された現在フロントエンドユニットＦＥＵ  ０  １２０の命令語を処理する一つ以上のプロセシングエレメント１４０とマッピングされるビットの値を「１」に設定する。例えば、ＦＥＵ  ０が４個のビットＶ０〜Ｖ３を含み、Ｖ０とＶ１が「１」に設定され、Ｖ２とＶ３が「０」に設定されると、これはＦＥＵ  ０がプロセシングエレメントＰＥ＿０及びプロセシングエレメントＰＥ＿１には命令語を提供するが、プロセシングエレメントＰＥ＿２及びプロセシングエレメントＰＥ＿３には命令語を提供しないのを意味する。
【００７３】
現在活性化されたフロントエンドユニット１２０ＦＥＵ  ０がインストラクションキャッシュ１１０から命令語をフェッチしデコードする過程において条件分岐命令語を検出すると、その条件分岐命令語に含まれたＰＣ情報に基づいて占有ＰＣ情報と非占有ＰＣ情報とを制御部１５０に送信する。一例として、占有ＰＣ情報は、ブランチ命令語が実行されたテイクンＰＣ情報に対応するＰＣ情報を表し、非占有ＰＣは、ブランチ命令語が実行されないノット−テイクンＰＣ情報に対応するＰＣ情報を表す。制御部１５０は、現在活性化されたフロントエンドユニット１２０ＦＥＵ  ０から占有ＰＣ情報と非占有ＰＣ情報とを受信すると、そのＦＥＵ  ０に対応するレジスタ１６０の占有ＰＣ情報格納領域１６２と非占有ＰＣ情報格納領域１６３に格納する。ＰＣ情報のこの部分を格納することによって、同時に実行される複数の分岐に関するプログラムフローを調整するのに使用されるメモリアドレスを確認することができる。
【００７４】
例えば、現在活性化されたフロントエンドユニット１２０がＦＥＵ  ０一つだけである場合、インターコネクション部１３０は、レジスタ１６０に格納された制御情報を参照して現在活性化されたフロントエンドユニット１２０ＦＥＵ  ０に割り当てられたプロセシングエレメント１４０を判断して、その現在活性化されたフロントエンドユニット１２０ＦＥＵ  ０から出力される命令語をプロセシングエレメント１４０に伝達する。
【００７５】
条件分岐命令から得られた処理結果を判断するインターコネクション部１３０から条件分岐命令語を受信したプロセシングエレメント１４０は、その条件分岐命令語を処理してその処理結果（ＴｒｕｅまたはＦａｌｓｅ）を制御部１５０に送信する。
【００７６】
制御部１５０は、その処理結果に基づいてスレッド発散の発生有無を判断できる。例えば、処理結果がＴｒｕｅの場合、スレッド発散が発生していないと判断し、現在活性化されたフロントエンドユニットＦＥＵ  ０に割り当てられたプロセシングエレメント１４０が占有ＰＣ位置に移動してＦＥＵ  ０を介して引続き命令語を処理するようにすることができる。このとき、処理結果が「Ｔｒｕｅ」の場合、「Ｔｒｕｅ」という結果は発散しない条件分岐命令語に提供される。占有ＰＣ値は、条件分岐命令語が発散しない次の命令語に対応するメモリアドレスである。
【００７７】
処理結果がＦａｌｓｅの場合、制御部１５０は、スレッド発散が発生したと判断する。「Ｆａｌｓｅ」結果は、発散を意味するので、スレッド発散が発生したことである。スレッドの発散が発生したので、これから新しくフロントエンドユニット１２０を活性化して発散された実行を並列的に扱うことによって、追加的な遅延を回避する必要がある。制御部１５０は、新しいフロントエンドユニット１２０ＦＥＵ  １を活性化し、現在活性化されたフロントエンドユニット１２０ＦＥＵ  ０とさらに活性化されたフロントエンドユニット１２０ＦＥＵ  １に対応するレジスタのビット領域をアップデートして、プロセシングエレメント１４０を各々割り当てる。
【００７８】
また、制御部１５０は、さらに活性化されたフロントエンドユニット１２０ＦＥＵ  １に対応するレジスタ１６０の占有ＰＣ情報格納領域１６２に現在フロントエンドユニット１２０ＦＥＵ  ０から受信した非占有ＰＣ情報を格納して、プロセシングエレメント１４０が非占有ＰＣに位置に移動してフロントエンドユニット１２０ＦＥＵ  １を介して命令語を処理するようにすることができる。
【００７９】
また、制御部１５０は、現在活性化されたフロントエンドユニットＦＥＵ  ０の分岐ＦＥＵ情報にチャイルドＦＥＵとしてＦＥＵ  １を設定して、レジスタの分岐ＦＥＵ情報格納領域１６５に格納し、さらに活性化されたフロントエンドユニットＦＥＵ  １の分岐ＦＥＵ情報にペアレントＦＥＵとしてＦＥＵ  ０を設定してレジスタ１６０の分岐ＦＥＵ情報格納領域１６５に格納することができる。ＦＥＵ  ０とＦＥＵ  １との間のペアレント−チャイルド関係は、ＦＥＵ  ０の分岐ＦＥＵ情報は、「ＦＥＵ  １はＦＥＵ  ０のチャイルドである」ことを示し、ＦＥＵ  １の分岐ＦＥＵ情報は、「ＦＥＵ  ０はＦＥＵ  １のペアレントである」ことを示すように格納される。
【００８０】
現在活性化されたフロントエンドユニット１２０ＦＥＵ  ０またはさらに活性化されたフロントエンドユニット１２０ＦＥＵ  １が復帰命令語を検出すると、復帰命令語を検出したフロントエンドユニットがその復帰命令語に含まれたＰＣ情報に基づいた復帰ＰＣ情報を制御部１５０に送信する。復帰ＰＣ情報は、例えば、スレッドがもうこれ以上発散しなくなった後に実行を再開するようになるメモリアドレスを含むことができる。そういう再開時命令語は、スレッドがもうこれ以上発散しなくなって個別的に実行経路を管理する必要がなくなった後のプログラムの一部分を示すことができる。制御部１５０は、その復帰命令語を検出したフロントエンドユニットに対応するレジスタの復帰ＰＣ情報格納領域に受信した復帰ＰＣ情報を格納する。例えば、復帰ＰＣ情報は、レジスタの領域１６４に格納されることができる。また、制御部１５０は、その復帰命令語を検出したフロントエンドユニット１２０の分岐ＦＥＵ情報を利用して、対をなすフロントエンドユニット１２０を決定し、その対をなすフロントエンドユニット１２０による条件分岐文処理が終了するまで待機できる。この情報を利用すると、実行を続ける前に条件分岐の両側がすべて完了するように処理を調整できる。複数のフロントエンドユニット１２０を使用すると、条件分岐の両側が相手を待つ必要無しで同時に実行されうるが、実施形態によってはそうでない場合もありうる。
【００８１】
制御部１５０は、対をなすフロントエンドユニットが復帰命令語を検出して条件分岐が終了する場合、さらに活性化されたチャイルドフロントエンドユニット１２０ＦＥＵ  １を非活性化する。条件分岐が終了するので、追加にチャイルドフロントエンドユニット１２０によって処理する必要がなく、処理が一つのフロントエンドユニット１２０のみを利用して再度管理されることができる。そして、ＦＥＵ  １に対応するレジスタのビット領域とＦＥＵ  ０に対応するレジスタのビット領域を論理和（ｌｏｇｉｃａｌ  ‘ｏｒ’）して、ＦＥＵ  １に割り当てられていたプロセシングエレメント１４０がＦＥＵ  ０に割り当てられるように制御情報を設定できる。論理和（ｌｏｇｉｃａｌ  ＯＲ）演算を利用することによって、以前にＦＥＵ  ０またはＦＥＵ  １のうち、少なくとも一つに指定されたプロセシングエレメント１４０は、レジスタに対して論理和演算が行われた後にはＦＥＵ  ０に指定されるはずである。したがって、ＦＥＵ  １に割り当てられた発散スレッドは、ＦＥＵ  ０に再統合されて動的基盤で実行されるフロントエンドユニット１２０の数を最小化できる。
【００８２】
図４は、一実施形態に係るプロセッサにおけるマルチモードを支援する処理方法のフローチャートである。すなわち、図１の実施形態に係るプロセッサ１００における動的にマルチモードを支援する方法である。
【００８３】
まず、プロセッサ１００の現在活性化されたフロントエンドユニット１２０がインストラクションキャッシュ１１０から命令語をフェッチしデコードする過程において条件分岐命令語を検出すると、その条件分岐命令語に含まれたＰＣ情報に基づいて占有ＰＣ情報と非占有ＰＣ情報とを制御部１５０に送信する（ステップ４１０）。占有ＰＣ情報は、スレッドが発散しない場合と関連し、非占有ＣＰ情報は、スレッドが発散する場合と関連する。このとき、現在活性化されたフロントエンドユニット１２０は、最初には予め設定された何れか一つのフロントエンドユニット１２０になり、以下のステップを行う過程においてフロントエンドユニット１２０がさらに活性化されると、その活性化されたすべてのフロントエンドユニット１２０を意味する。
【００８４】
次に、現在活性化されたフロントエンドユニット１２０に割り当てられたプロセシングエレメント１４０がインターコネクション部１３０から条件分岐命令語の伝達を受けて処理し、その処理結果（ＴｒｕｅまたはＦａｌｓｅ）を制御部１５０に送信する（ステップ４２０）。インターコネクション部１３０は、現在活性化されたフロントエンドユニット１２０に関するレジスタ１６０に格納された制御情報に基づいて、その現在活性化されたフロントエンドユニット１２０から出力される命令語を伝達するプロセシングエレメント１４０を判断できる。例えば、命令語出力送信の対象になるプロセシングエレメント１４０は、どんなプロセシングエレメントが活性化されたフロントエンドユニット１２０に対応するかを指定するビットの領域１６１に基づいて選択されることができる。
【００８５】
その次に、制御部１５０は、現在活性化されたフロントエンドユニット１２０から占有ＰＣ情報と非占有ＰＣ情報を受信する。制御部１５０は、現在活性化されたフロントエンドユニット１２０に対応するレジスタ１６０の占有ＰＣ情報格納領域１６２と非占有ＰＣ情報格納領域１６３に格納し、プロセシングエレメント１４０から条件分岐命令語に対応する処理結果をステップ４２０の結果として受信して、スレッド発散が発生したかどうかを判断できる（ステップ４３０）。
【００８６】
判断結果、スレッド発散が発生しない場合、例えば、ステップ４２０の処理結果がＴｒｕｅの場合、現在活性化されたフロントエンドユニット１２０に割り当てられたプロセシングエレメント１４０が占有ＰＣ位置に移動して、その現在活性化されたフロントエンドユニット２０を介して次の命令語を処理し続けるようにすることができる（ステップ４９０）。このとき、他のフロントエンドユニット１２０を活性化する必要がないので、フロントエンドユニット１２０が現在割り当てたとおりに実行が続く。
【００８７】
仮に、判断結果、スレッド発散が発生した場合、例えば、ステップ４２０の処理結果がＦａｌｓｅの場合、制御部１５０は、現在活性化されていないフロントエンドユニット１２０の中で何れか一つをさらに活性化する（ステップ４４０）。このとき、プロセッサ１００を構成するすべてのフロントエンドユニット１２０が活性化されている状態である場合には、もうこれ以上可用のフロントエンドユニット１２０が存在しないから、その条件分岐命令語を検出した現在活性化されたフロントエンドユニット１２０を利用して命令語を順次に処理するようにすることができる。多様な実施形態において、Ｍ個のフロントエンドユニット１２０を使用することができ、個数Ｍは、プロセシングエレメント１４０の数であるＮと同一であるか、またはＮより小さい。仮に、すべてのフロントエンドユニットが使用中であると、条件分岐命令語が順次に処理されなければならない場合もある。
【００８８】
その次に、現在活性化されたフロントエンドユニット１２０とさらに活性化されたフロントエンドユニット１２０に対して制御情報をアップデートするか、または設定する（ステップ４５０）。例えば、各フロントエンドユニット１２０に対応するレジスタ１６０のビット領域をアップデートして、各フロントエンドユニット１２０にプロセシングエレメント１４０を割り当てることができる。各々のビット領域のビットは、特定フロントエンドユニット１２０が与えられたプロセシングエレメント１４０に命令語を送信するかどうかを示す。また、さらに活性化されたフロントエンドユニット１２０の占有ＰＣ情報として現在活性化されたフロントエンドユニット１２０から受信した非占有ＰＣ情報を格納して、プロセシングエレメント１４０が非占有ＰＣ位置に移動して、命令語を処理するようにすることができる。現在活性化されたフロントエンドユニット１２０の非占有ＰＣ情報とさらに活性化されたフロントエンドユニット１２０の占有ＰＣ情報との関係は維持される。現在活性化されたフロントエンドユニット１２０をさらに分岐させることを要する非占有実行経路は、さらに活性化されたフロントエンドユニット１２０をさらに分岐させることを要しない占有実行経路であるためである。
【００８９】
また、制御部１５０は、現在活性化されたフロントエンドユニット１２０の分岐ＦＥＵ情報にチャイルドＦＥＵとしてさらに活性化されたフロントエンドユニット１２０を設定して、レジスタの分岐ＦＥＵ情報格納領域１６５に格納し、さらに活性化されたフロントエンドユニット１２０の分岐ＦＥＵ情報にペアレントＦＥＵとして現在活性化されたフロントエンドユニット１２０を設定して、レジスタ１６０の分岐ＦＥＵ情報格納領域１６５に格納することができる。したがって、分岐ＦＥＵ情報は、ペアレントフロントエンドユニットとチャイルドフロントエンドユニットとの間の関係を管理し、これを通じてフロントエンドユニット１２０とプロセシングエレメント１４０との間でインターコネクション部１３０を経由して命令語を送信する時にブランチの階層を維持できる。
【００９０】
その次に、現在活性化されたフロントエンドユニット１２０またはさらに活性化されたフロントエンドユニット１２０が復帰命令語を検出して復帰ＰＣ情報を制御部１５０に送信すると、制御部１５０は、その復帰命令語を検出したフロントエンドユニット１２０の分岐ＦＥＵ情報を利用して対をなすフロントエンドユニット１２０を決定し、その対をなすフロントエンドユニット１２０による条件分岐文処理が終了するまで待機できる（ステップ４６０）。復帰ＰＣ情報が受信されると、復帰ＰＣ情報は、条件分岐文処理が終了したことを意味する信号として機能する。これは、この命令語を送信するフロントエンドユニット１２０の側面では、条件分岐文が終了したことを示す復帰命令語に該当する。しかし、分岐ＦＥＵ情報は、実行を続ける前にどんな他のフロントエンドユニット１２０が実行を終了しなければならないかに関する情報を提供する。また、制御部１５０は、その復帰命令語を検出したフロントエンドユニット１２０に対応するレジスタ１６０の復帰ＰＣ情報格納領域１６４に受信した復帰ＰＣ情報を格納する。仮に、受信された復帰ＰＣ情報が格納されると、適切な順序でプログラムフローが続くのを保証するのに使用される。
【００９１】
その次に、制御部１５０は、対をなすフロントエンドユニット１２０が復帰命令語を検出してすべての条件分岐が終了する場合、さらに活性化されたフロントエンドユニット１２０を非活性化する（ステップ４７０）。このとき、さらに活性化されたフロントエンドユニット１２０を利用する必要がないので、現在活性化されて使用されているフロントエンドユニット１２０のみが実行を続ける。
【００９２】
その次に、ステップ４７０にて非活性化されたフロントエンドユニット１２０に対応するレジスタのビット領域と現在活性化されたフロントエンドユニット１２０に対応するレジスタのビット領域を論理和（ｌｏｇｉｃａｌ  ‘ｏｒ’）して、非活性化されたフロントエンドユニット１２０に割り当てられていたプロセシングエレメント１４０を現在活性化されたフロントエンドユニット１２０に割り当てられるように制御情報を設定できる（ステップ４８０）。非活性化されたフロントエンドユニット１２０に割り当てられたプロセシングエレメント１４０は、以前に割り当てられたプロセシングエレメント１４０を除去せずにも現在活性化されたフロントエンドユニット１２０に再度割り当てられることができる。
【００９３】
その次に、現在活性化されたフロントエンドユニット１２０を利用して、次の命令語を処理し続けるようにする（ステップ４９０）。例えば、現在活性化されたフロントエンドユニット１２０は、インストラクションキャッシュ１１０から次に処理する命令語をフェッチし続け、ステップ４１０以下は繰り返して行われることができる。
【００９４】
マルチモードを支援するプロセッサ及びこれに関するマルチモード支援方法に関する実施形態は、データを並列処理する場合に利点を提供する。実施形態によれば、プロセシングエレメントが動的にフロントエンドユニットを共有するようにすることができ、プロセッサがＳＩＭＤモードとＭＩＭＤモードとの間で実行モードを転換できるので、フロントエンドユニットの費用を低減し処理速度を向上させることができる。
【００９５】
一方、本実施形態は、コンピュータで読むことのできる記録媒体にコンピュータが読むことのできるコードにより具現化することが可能である。コンピュータが読むことのできる記録媒体は、コンピュータシステムによって読まれることのできるデータが格納されるすべての種類の記録装置を含む。
【００９６】
コンピュータが読むことのできる記録媒体の例には、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光データ格納装置などがあり、またキャリアウェーブ（例えばインターネットを介した送信）の形態で具現化するのを含む。また、コンピュータが読むことのできる記録媒体は、ネットワークで接続したコンピュータシステムに分散されて、分散方式でコンピュータが読むことのできるコードが格納され実行されることができる。そして、本実施形態を具現するための機能的な（ｆｕｎｃｔｉｏｎａｌ）プログラム、コード及びコードセグメントは、本発明の属する技術分野におけるプログラマーによって容易に推論できる。
【００９７】
本開示が属する技術分野の通常の知識を有した者は、本発明がその技術的思想や必須な特徴を変更せずに他の具体的な形態で実施されうるということを理解できるはずである。したがって、以上で述べた実施形態は、すべての面で例示的であり、限定的でないものと理解しなければならない。
【符号の説明】
【００９８】
１００  プロセッサ
１１０  インストラクションキャッシュ
１２０  フロントエンドユニット
１３０  インターコネクション部
１４０  プロセッシングエレメント
１５０  制御部
１６０  レジスタ
【図１】
2014146335.tif 000003
【図２】
2014146335.tif 000004
【図３】
2014146335.tif 000005
【図４】
2014146335.tif 000006