JP6697457B2 - プロセッサ・コアをスレッド・モードからレーン・モードに遷移させ、2つのモードの間のデータ転送を可能にすること - Google Patents

プロセッサ・コアをスレッド・モードからレーン・モードに遷移させ、2つのモードの間のデータ転送を可能にすること Download PDF

Info

Publication number
JP6697457B2
JP6697457B2 JP2017525632A JP2017525632A JP6697457B2 JP 6697457 B2 JP6697457 B2 JP 6697457B2 JP 2017525632 A JP2017525632 A JP 2017525632A JP 2017525632 A JP2017525632 A JP 2017525632A JP 6697457 B2 JP6697457 B2 JP 6697457B2
Authority
JP
Japan
Prior art keywords
lane
mode
thread
registers
instructions
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
JP2017525632A
Other languages
English (en)
Other versions
JP2017535872A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2017535872A publication Critical patent/JP2017535872A/ja
Application granted granted Critical
Publication of JP6697457B2 publication Critical patent/JP6697457B2/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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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

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)
  • Information Transfer Systems (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、デュアル実行モード・プロセッサに関し、より詳細には、実行の2つの(スレッドおよびレーン)モードの間でスイッチするための技法に関する。
典型的な並列プログラムは、交互に配置された直列/並列領域からなる。並列プログラムを走らせる既存の手法は、命令ストリームの「不連続性」に依拠する。例えば実行は、従来のCPUでは、シングル・スレッドからマルチ・スレッドに、CPU+GPUでは、メインCPUから、別個のアクセラレータに移行する。不連続性のオーバヘッド、領域の大きな粒度、および、領域の間の「通信」(共有メモリを用いることさえある)の必要性などの、この手法に対する注目すべき制限がある。
したがって、並列プログラムを実行するための、および、直列領域と並列領域との間でスイッチするための、改善された技法が望ましいことになる。
本発明は、デュアル実行モード・プロセッサでの、実行の2つの(スレッドおよびレーン)モードの間でスイッチするための技法を提供する。より詳細には本発明は、請求項1で請求されるような方法、ならびに、請求されるような対応するシステムおよびコンピュータ・プログラムを提供する。
本発明、ならびに、本発明のさらなる特徴および利点の、より完全な理解が、以下の詳細な説明および図面を参照することにより得られることになる。
本発明の実施形態による、直列領域および並列領域の両方を有する例示的な命令ストリームを示す概略図である。 本発明の実施形態による、同じプロセッサでのシングル命令ストリームの(スレッド・モードおよびレーン・モードでの)デュアル実行のための例示的な方法論を示す図である。 本発明の実施形態による、スレッド・レジスタのセットであって、それに対して、命令ストリームの直列領域内の命令がスレッド・モードで実行され得る、スレッド・レジスタのセットの例を示す図である。 本発明の実施形態による、レーン・レジスタのセットであって、それに対して、命令ストリームの並列領域内の命令がレーン・モードで実行され得る、レーン・レジスタのセットの例を示す図である。 本発明の実施形態による、同じプロセッサで、交互に配置された直列領域および並列領域を有するシングル命令ストリームを実行するための例示的な方法論を示す図である。 本発明の実施形態による、スレッド・モードからレーン・モードに、および、レーン・モードからスレッド・モードに遷移させるための例示的な方法論を示す図である。 本発明の実施形態による、スレッド・モードからレーン・モードにスイッチするための例示的な方法論を示す図である。 本発明の実施形態による、プロセッサ・コアをレーン・モードからスレッド・モードに自発的にスイッチする(遷移させる)ための例示的な方法論を示す図である。 本発明の実施形態による、プロセッサ・コアをレーン・モードからスレッド・モードに非自発的にスイッチする(遷移させる)ための例示的な方法論を示す図である。 本発明の実施形態による、本明細書で提示される方法論の1つまたは複数を実行するための例示的な装置を示す図である。
本明細書で提供されるのは、シングル命令ストリームを実行する同じプロセッサでの、デュアル実行(スレッドおよびレーン)モードを(直列領域と並列領域との間で交互になり得る、ユニファイド・プロセッサ命令セット・アーキテクチャ命令ストリームを使用して)実装するための技法である。したがって、それに応じて本明細書では、1つのプロセッサは、1つの命令ストリームを実行するが、2つのモードで動作し、何を命令が行うかはモードに依存する。具体的には、本技法は、同じ命令を複数の(アーキテクチャ化された(architected))レーンにわたって複製することによる、空間でのベクトル化を達成するものであり、それらのレーンは、レーンごとにレジスタの異なるセットを備えている。任意の所与の時間に、レーンは、2つのステートの1つ、すなわち有効(enabled)または無効(disabled)であり得る。有効レーンは動作を行う。無効レーンは動作を行わない。用語「有効」および「無効」は、本明細書では、アーキテクチャ化されたレーンに関して使用される。実行の2つのモードの間でスイッチするための技法が、次いで本明細書で提供される。
直列領域と並列領域との間で交互になり得る、ユニファイド・プロセッサ命令ストリームの使用によって、非常に労力の少ない、領域の間の遷移、および領域間データ交換が結果として生じ、したがって領域は、シングル命令と同じほど小さくなり得る。本技法の使用は、プログラムの並列領域の効率的な実行につながる。特に、古いモデル(多重CPU、CPU+GPU)上で良好に走るプログラムが、ここでも良好に走る。さらに、より古いモードでは効率的に走らないが、本技法によって良好に走る、他のプログラムがある。
以下で詳細に説明するように、本技法は、交互に配置された直列領域および並列領域からなる命令ストリームを実行することを含む。単に例として、図1は、直列領域および並列領域の両方を有する例示的な命令ストリーム100を概略的に図示する。例えば、命令ストリーム100は、シングル・スレッド(ST)からなる直列領域で始まる。フォーク命令が、複数のレーン(マルチ・レーン)からなる並列領域へのスレッドのフォーキングを起こす。ジョイン命令が、マルチ・レーンを、シングル・スレッドに戻るように、命令ストリーム100の第2の直列領域でジョイン/リジョインし、以下同様である。図1で示されるように、これらの直列領域および並列領域は、命令ストリーム100の内部で交互に現れる。
本技法によれば、命令ストリーム100の直列領域内の命令は、本明細書で「スレッド・モード」と称するもので実行され、命令ストリーム100の並列領域内の命令は、本明細書で「レーン・モード」と称するもので実行される。具体的には、本明細書で提供されるのは、命令の各々のアーキテクチャ化されたスレッドに対して、スレッド・レジスタの1つのセット(以下、「スレッド・レジスタ・セット」という)、および、レーン・レジスタのN個のセット(以下、「レーン・レジスタ・セット」という)を含む、類のないプロセッサ・アーキテクチャである。それに応じて、命令ストリーム100の直列領域内の命令は、スレッド・モードで、スレッド・レジスタに対して実行される。命令ストリーム100の並列領域内の命令は、レーン・モードで、レーン・レジスタに対して実行される。スレッド・レジスタおよびレーン・レジスタを、以下で詳細に説明する。
図2の方法論200は、シングル命令ストリームを実行する同じプロセッサでの、デュアル実行(スレッドおよびレーン)モードのための本技法の概観を提供する。上述のように、命令ストリームは、交互に配置された直列領域および並列領域からなり(したがって、本技法によれば、命令ストリームは、2つのモードの1つ、スレッド・モードまたはレーン・モードであり得る)、プロセッサは、命令の各々のアーキテクチャ化されたスレッドに対して、1つのスレッド・レジスタ・セット、および、N個のレーン・レジスタ・セットを含む。
プロセッサは、シングル命令ストリームを実行する。図2のステップ202で示されるように、分岐命令は、ストリーム展開を制御する。以下で詳細に説明するように、デフォルトにより命令は、連続的なメモリ・アドレス・ロケーションから実行されることになる。分岐命令のみが、そのフローを変化させ得る。1つの例示的な実施形態によれば、分岐は常に、スレッド・レジスタに対して実行される。
命令ストリーム100の直列領域は、ステップ204に従って、スレッド・モードで、スレッド・レジスタを使用して処理され、一方で、命令ストリーム100の並列領域は、ステップ206に従って、レーン・モードで、レーン・レジスタを使用して処理される。図2で示されるように、本技法は一般的には、スカラ(例えば、固定小数点、浮動小数点、論理、その他)演算およびベクトル(固定小数点、浮動小数点、置換、論理、その他)演算の両方を、スレッド・レジスタおよびレーン・レジスタでサポートする。レジスタでのデータのスカラおよびベクトル処理は、一般的に当業者に知られており、したがって、本明細書ではその詳細を省略する。
ステップ208で、操作されたデータがメモリ(ストレージ)に記憶され、プロセスは、ステップ202で、次の分岐命令によって新たに繰り返される。図2で示されるように、データは、レジスタとストレージとの間を両方向に移動する。例えばデータは、ストレージからフェッチされ、(スレッドまたはレーンあるいはその両方の)レジスタ内にロードされ、それらのレジスタでそのデータは、命令ストリームにより操作される。操作されたデータは、次いで、メモリに書き戻すことができる。
次に、スレッド・レジスタおよびレーン・レジスタのより詳細な説明を行う。上述のように、プロセッサでの各々のアーキテクチャ化されたスレッドは、1つのスレッド・レジスタ・セットを有する。例示的な実施形態によれば、スレッド・レジスタ・セットは、以下の構成要素レジスタ、すなわち、汎用レジスタ(GPR)、浮動小数点レジスタ(FPR)、ベクトル・レジスタ(VR)、ステータス・レジスタ(SR)、条件レジスタ(CR)、および補助レジスタ(AR)の少なくとも1つを含む。上述のように、本技法は、シングル命令ストリームを実行するシングル・プロセッサを含み、プロセッサは、スレッド・モードまたはレーン・モードで動作し得る。スレッド・モードで動作する時、命令ストリームは、プロセッサにより、このスレッド・レジスタ・セットに対して実行されることになる。
図3は、本技法によって実装され得るスレッド・レジスタ・セット300の例を示す。当然ながら、実装されるスレッド(およびレーン)・レジスタは、用途に応じて変えることができる。したがって、図3のスレッド・レジスタ・セットは、本技法の単なる例示に過ぎない。ここで重要なことは、(下記のN個のレーン・レジスタ・セットと比較して)命令のアーキテクチャ化されたスレッドごとに、1つのスレッド・レジスタ・セットがあるということである。したがって、何を命令のアーキテクチャ化されたスレッドが行うかは、それが、スレッド・レジスタに対してスレッド・モードで実行されているか、それとも、レーン・レジスタに対してレーン・モードで実行されているかに依存する。
図3に示すように、この非限定的な例では、スレッド・レジスタは、少なくとも1つのカウント・レジスタ(CTR)、少なくとも1つのリンク・レジスタ(LR)、少なくとも1つの条件レジスタ(CR)、複数の汎用レジスタ(GPR、例えばGPR[0]〜[31])、少なくとも1つのXERレジスタ、少なくとも1つの浮動小数点ステータスおよび制御レジスタ(FPSCR)、少なくとも1つのベクトル・ステータスおよび制御レジスタ(VSCR)、少なくとも1つのベクトル退避/復元レジスタ(VRSAVE)、ならびに、複数のベクトル・スカラ・レジスタ(VSR、例えばVSR[0]〜[63])を含む。スレッド・モードでは、命令ストリーム内の命令は、1回ディスパッチされ、オペレーションは、1度に1つの命令で(直列に)実行される。
対照的に、プロセッサの各々のアーキテクチャ化されたスレッドは、N個のレーン・レジスタ・セットを有する。例示的な実施形態によれば、各々のレーン・レジスタ・セットは、以下の構成要素レジスタ、すなわち、汎用レジスタ(GPR)、浮動小数点レジスタ(FPR)、ベクトル・レジスタ(VR)、ステータス・レジスタ(SR)、条件レジスタ(CR)、および補助レジスタ(AR)の少なくとも1つを含む。上述のように、本技法は、シングル命令ストリームを実行するシングル・プロセッサを含み、プロセッサは、スレッド・モードまたはレーン・モードで動作し得る。レーン・モードで動作する時、命令ストリームは、プロセッサにより、各々のレーン・レジスタ・セットに対して実行されることになる。
1つの例示的な実施形態では、スレッド・レジスタは、少なくとも1つのレーン・レジスタ・セットと同じ、構成要素レジスタの組合せを含む。あるいは別の例示的な実施形態によれば、スレッド・レジスタは、レーン・レジスタ・セットと異なる、構成要素レジスタの組合せを含む。スレッド・レジスタ・セットの構成要素が、1つのレーン・レジスタ・セットの構成要素と同じである時、スレッド・レジスタとレーン・レジスタとの間に1対1の対応関係がある。この事例では、レーン・モードでの命令のセマンティクスは、スレッド・モードでの命令のセマンティクスから、対応するレーン・レジスタを対応するスレッド・レジスタの代わりに用いることにより得ることができる。スレッド・レジスタ・セットの構成要素が、1つのレーン・レジスタ・セットの構成要素と異なる時、それらの間の対応関係は、正確に1対1ではない。そのことは、スレッド・モードおよびレーン・モードでの命令のセマンティクスに対する異なる定義を要する。
図4は、本技法によって実装され得るN個のレーン・レジスタ・セット400の例を示す。やはり、スレッド(およびレーン)・レジスタは、用途に応じて変えることができる。したがって、図4のレーン・レジスタ・セットは、本技法の単なる例示に過ぎない。ここで重要なことは、(スレッド・レジスタ・セットと比較して)命令のアーキテクチャ化されたスレッドごとに、N個のレーン・レジスタ・セットがあるということである。したがって、何を命令のアーキテクチャ化されたスレッドが行うかは、それが、スレッド・レジスタに対してスレッド・モードで実行されているか、それとも、レーン・レジスタに対してレーン・モードで実行されているかに依存する。
図4に示すように、この非限定的な例では、各レーン・レジスタ・セットは、少なくとも1つのレーン条件レジスタ(LCR)、複数のレーン汎用レジスタ(LGR、例えばLGR[0]〜[31])、および、少なくとも1つのレーンXERレジスタ(LXER)を含む。上記のスレッド・レジスタ例と同じく、これらのレジスタ・タイプのすべてが必要であるわけではない。N個のレーン・レジスタ・セットは、図4では(0)〜(N−1)で示されている。
1つの例示的な実施形態では、レーン・レジスタの同じ組合せが、各々のセットに存在する。その場合、プロセッサの各々のアーキテクチャ化されたスレッドは、N個の同じレーン・レジスタ・セットを有する。しかしながら、シングル・インスタンス補助レジスタもまた、アーキテクチャ化されたステートの一部であり得る。例えば図4に示すように、シングル・インスタンス補助レーン移動レジスタ(LMR)およびレーン拡張制御レジスタ(LECR)が存在する。
スレッド・モードからレーン・モードへの遷移は、同じオペレーションを、プロセッサの(アーキテクチャ化された)レーンごとに1回ずつ繰り返して実行することを伴う。レーン・モードでの命令の実行に対して、プロセッサは、命令の同時的な実行をサポートするために、複数の物理レーン、例えば複数のハードウェア・リソースによって設計され得る。したがって、スレッド・モードからレーン・モードへの遷移では、プロセッサは、上述のように、1度に1つのレジスタ・セットに対して命令ごとに(直列に)1つのオペレーションを実行することから、複数の(アーキテクチャ化された)レーン上で複数のレジスタ・セットに対して(並列に)命令ごとに複数回同じオペレーションを実行することに移行する。したがってレーン・モードでは、オペレーションは複数のレーンにわたって実行される。ここでは、プロセッサにおける物理レーンと、アーキテクチャ化されたレーンとを区別する。実例として、当技術分野で知られているように、マルチ・レーン・ベクトル・プロセッサは、並列データ処理を可能にする複数の物理レーンを有する。他方で、アーキテクチャ化されたレーンは、プロセッサの物理レーン上で走るように構築される仮想レーンである。物理レーンの数は、面積、電力消費、その他のようなハードウェア制約に基づいて決められる。各々の物理レーンは、命令により定義されるオペレーションを実行する能力のあるハードウェア・ユニットである。プロセッサが複数の物理レーンを有する時、それらのレーンは、並列に実行することができ、それにより複数のオペレーションが同時に実行される。アーキテクチャ化されたレーンは、仮想化を提供するための構築物である。アーキテクチャ化されたレーンは、既存の物理レーンの上で多重化され得る。この仮想化はハードウェア・レベルで実装され、各々の命令は複数のオペレーションを生成する。プロセッサが、N個のアーキテクチャ化されたレーン、および、L個の物理レーンを有するとする。物理レーンへのアーキテクチャ化されたレーンの1対1のマッピング(L=N)の事例では、プロセッサは、以下のように動作する。
1 命令をPCでフェッチする
2 命令をN個すべてのレーンにディスパッチする
3 各々の物理レーンiは、論理アイデンティティiをセットし、命令を、レジスタ・セットR_i(レーンiのレジスタ・セット)を使用して実行する
4 PC=次のPC
5 go to 1
各々の物理レーンにマッピングされる複数のアーキテクチャ化されたレーンによって、プロセッサは、異なる動きをする。最初に、N=K*L個のアーキテクチャ化されたレーンがあり、ここで、Lは物理レーンの数であり、Kは乗数である。ここでプロセッサは、命令を次のように実行する。
1 命令をPCでフェッチする
2 for round=0; round<ceil(K); ++round
3 命令をL個すべてのレーンにディスパッチする
4 各々の物理レーンiは、論理アイデンティティi*roundをセットし、命令を、レジスタ・セットR_(i*round)(アーキテクチャ化されたレーンi*roundのレジスタ・セット)を使用して実行する(i*round<Nであるとき)
5 endfor
6 PC=次のPC
7 go to 1
用語「論理アイデンティティxをセット」は、物理レーンが、アーキテクチャ化されたレーン「x」として挙動することになるということを意味し、このアイデンティティはしばしば、レーン・モードで実行される命令の内側で使用される。したがって、アーキテクチャ化されたレーンを作成することは、アイデンティティ・レジスタを適正にセットした後に命令を複数回物理レーンにディスパッチし、かつ、正しいレジスタ・セットへのルーティングをサポートするために、何らかの追加的な論理をプロセッサ上で追加することである。プロセッサの挙動に関する上記の説明は、命令実行を重複させることの可能性に制限を与えるものではない。例えば、2つの物理レーン(P1、P2)、および、3つのアーキテクチャ化されたレーン(A1、A2、A3)を有するプロセッサでは、2つの命令の実行を3つのアーキテクチャ化されたレーン上で重複させることが可能である。すなわち、それらの命令は、3つの反復(iteration)で実行され、反復1は、命令1を、アーキテクチャ化されたレーンA1、A2で実行し、反復2は、命令1を、アーキテクチャ化されたレーンA3で、命令2を、アーキテクチャ化されたレーンA1で実行し、反復3は、命令2を、アーキテクチャ化されたレーンA2、A3で実行する。
したがって本技法によれば、例えばレーン・モードで、8つのレーン・レジスタ・セット(N=8)、したがって8つのアーキテクチャ化されたレーンがあるとき、命令ストリームをレーン・モードで、4つの物理レーンを有するプロセッサによって処理するためには、プロセスを複数回繰り返す必要がある。簡単な例で説明すると、4つの物理レーンを有するプロセッサについて、命令ストリームをレーン・モードで、8つのアーキテクチャ化されたレーンにわたって処理するためには、プロセスを少なくとも2回反復する必要がある。4つすべての(物理)レーンが使用されているのであれば、必要な反復は2回である。これに対して、プロセッサの一部分のみが本計算に充てられ、したがって、より多くの反復を要するということが実情であることがある。例えば、プロセッサの2つの(物理)レーンが計算に充てられるとき、4回の反復が、命令ストリームをレーン・モードで、8つのアーキテクチャ化されたレーンにわたって処理するために必要とされる。
分岐命令は、命令ストリームの展開を制御する。すなわち、デフォルト条件は、命令を、次の順次的なメモリ・アドレスで実行することである。分岐命令のみが、そのフローを変化させ得る。本技法によれば、モードがスレッドかレーンかには関係なく、分岐は常に、同じセマンティクスを有する。条件分岐は常に、スレッド条件レジスタを検査する。1つの例示的な実施形態では、レジスタに含まれるアドレスへの分岐は、常にスレッド・レジスタを使用する。以下で詳細に説明するように、実行は好ましくは、スレッド・モードで始まり、明示的な命令が、スレッド・モードからレーン・モードに遷移させるために使用される。
上で一般的に説明したように、データは、レジスタとストレージとの間を両方向に移動する。例えばデータは、ストレージからフェッチされ、(スレッドまたはレーンあるいはその両方の)レジスタ内にロードされ、それらのレジスタでそのデータは、命令ストリームにより操作される。操作されたデータは、次いで、メモリに書き戻される。上記の図2の説明を確認されたい。当技術分野で知られているように、例えばロードおよびストアを行うための、命令ストリーム内のストレージ・アクセス命令が、この点に関して、メモリからデータをアクセスし、結果をメモリに書き戻すために、使用される。
本技法の例示的な実施形態によれば、これらのストレージ・アクセス命令は、(スレッドまたはレーン)モード依存である。例えば、命令のストリームがスレッド・モードで実行されている時、ロードおよびストアは常に、スレッド・レジスタに適用される。スレッド・レジスタはしたがって、データ・ソース、データ・ターゲット、およびアドレス・ソースとして使用される。上述のように、スレッド・モードでは、オペレーションは、1度に1つずつ(直列に)実行される。したがって各々のロード/ストアは、無条件にスレッド・モードで実行され、それにより1つのメモリ・オペレーションが生じる。
対照的に、命令がレーン・モードで実行されている時、ロードおよびストアは常に、レーン・レジスタに適用される。したがって、レーン・レジスタは、データ・ソース、データ・ターゲット、およびアドレス・ソースとして使用される。レーン・モードでは、オペレーションは、N個の(アーキテクチャ化された)レーン上で(並列に)実行される。したがって、各々のロード/ストアは、レーンごとに1回実行され、最大でN個のメモリ・オペレーション/命令が実行される。しかしながら、上述のように、レーン・モードでのオペレーションは、各々の(アーキテクチャ化された)レーンのステート(有効/無効)次第である。例えば、ロード/ストアをレーン・モードで、複数のレーンにわたって実行する時、有効であるレーンのみが使用され得る。したがって、レーン・モードでのロード/ストアの実行は、所与のレーンが有効であるか否かに左右される。
同様に、本技法の例示的な実施形態によれば、算術命令および論理命令もまた、(スレッドまたはレーン)モード依存である。例えば、命令ストリームが、スレッド・モードで実行されている時、算術命令および論理命令は常に、スレッド・レジスタに適用される。スレッド・レジスタは、したがって、データ・ソースおよびデータ・ターゲットとして使用される。上述のように、スレッド・モードでは、オペレーションは、1度に1つずつ(直列に)実行される。したがって各々の算術/論理命令は、無条件にスレッド・モードで実行され、それにより1つのオペレーションが行われる。
対照的に、命令がレーン・モードで実行されている時、算術命令および論理命令は常に、レーン・レジスタに適用される。したがって、レーン・レジスタは、データ・ソースおよびデータ・ターゲットとして使用される。レーン・モードでは、オペレーションは、N個の(アーキテクチャ化された)レーン上で(並列に)実行される。したがって各々の算術/論理命令は、レーンごとに1回実行され、最大でN個のオペレーション/命令が実行される。しかしながら、上述のように、レーン・モードでのオペレーションは、各々のレーンのステート(有効/無効)次第である。例えば、算術/論理命令をレーン・モードで、複数のレーンにわたって実行する時、有効であるレーンのみが使用され得る。したがって、レーン・モードでの算術/論理命令の実行は、所与のレーンが有効であるか否かに左右される。
レーン・モードで動作する時、本技法の1つの例示的な実施形態によれば、命令は、ロックステップで、レーンのすべてにわたって実行されるということは注目すべきである。すなわち、レーンの各々にディスパッチされる(同じ)命令は、同時に、レーンの各々で並列に実行される。あるいは、本技法の別の例示的な実施形態によれば、レーン・モードでディスパッチされる命令は、非同期的に(すなわち、同時ではなく)、レーンにわたって実行される。例えば、1つまたは複数のレーンでの命令の実行は、1つまたは複数の他のレーンでのオペレーションの完了に左右され得る。
命令実行は、その実行方法には関係なく、グローバル・プログラム順序またはローカル・プログラム順序に従い得る。グローバル・プログラム順序の場合、各々のレーンで実行中の命令は、すべてのレーンに対する、すべての以前の依存命令の影響を知ることができる。ローカル・プログラム順序の場合は、各々のレーンで分かるのは、同じレーンへの、以前の依存命令の影響のみである。
スレッド・モード実行とレーン・モード実行との間で遷移させることを、以下で詳細に説明する。一般的には、命令ストリームの内部に挿入されるブリッジ命令が、ストリームの実行モードを明示的に制御するために使用され得る。すなわち、ブリッジ命令は、命令ストリームの直列領域または並列領域が、いつ存在し、したがってそれぞれ、スレッド・モードまたはレーン・モードで実行されるべきであるかを符号化し得るものである。例示的な実施形態によれば、命令ストリーム内のブリッジ命令は、いずれの(スレッドまたはレーン)モードでも実行可能であり、モードに関係なく同じセマンティクスを有する。スレッド・モードからレーン・モードに、およびその逆に遷移させることは、スレッド・レジスタをレーン・レジスタに、およびその逆にコピーすることを含み得る。
図5は、同じプロセッサで、交互に配置された直列領域および並列領域を有するシングル命令ストリームを実行するための例示的な方法論500を示す図である。ステップ502で、命令ストリームの各々のアーキテクチャ化されたスレッドに対して、1つのスレッド・レジスタ・セット、および、N個のレーン・レジスタ・セットを有する、プロセッサ・アーキテクチャが作成される。例示的なスレッド・モード構成要素レジスタおよびレーン・モード構成要素レジスタの詳細は、上記したとおりである。図3に示す例示的なスレッド・レジスタ・セット300、および、図4に示す例示的なN個のレーン・レジスタ・セット400も参照されたい。
ステップ504で、命令ストリームの直列領域内の命令が、スレッド・モードでスレッド・レジスタに対して実行される。スレッド・モード実行は、スレッド・モード命令を1回、スレッド・レジスタにディスパッチすることを含み得る。上述のように、スレッド・モードでは、命令は好ましくは常に、スレッド・レジスタに対して適用され、各々の命令は、無条件に実行され、それにより1つのオペレーションが行われる。
ステップ506で、命令ストリームの並列領域内の命令が、レーン・モードでレーン・レジスタに対して実行される。レーン・モード実行は、同じ命令を複数回ディスパッチすること、すなわち、レーン・モード命令を、N個のレーンの各々に対して1回ずつ、合計N回ディスパッチすることを含み得る。上述のように、レーン・モードでは、命令は好ましくは常に、レーン・レジスタに対して適用され、各々の命令は、レーンごとに1回実行され、最大でN個のオペレーション/命令が実行される。しかしながら、レーン・モード命令の実行は、レーンのステート(有効/無効)に左右される。したがって図5に示すように、レーン・モードでの実行において、アーキテクチャ化されたレーンの数Nが、物理レーンの数を上回る時、複数回の反復が、レーン・モード・オペレーションを実行するために必要とされる。
上述のように、命令ストリームの実行を、スレッド・モードからレーン・モードに、またはその逆に遷移させることは、スレッド・レジスタをレーン・レジスタに、またはその逆にコピーすることを含み得る。これは、ステップ508で、ストリームの直列領域から並列領域への、またはその逆の遷移を知らせる、命令ストリーム内で符号化されたブリッジ命令に応答して実行され得る。
命令ストリームに対するデュアル(スレッドおよびレーン)実行モードの上記の説明を考慮に入れて、プロセッサ・コアをスレッド・モードからレーン・モードに(およびその逆に)遷移させるための、および、2つのモードの間のデータ転送を可能にするための技法を次に説明する。上述のように、スレッド・モードでは、1つのレジスタ・セットがあり、レーン・モードでは、複数のレジスタ・セット(レーンごとに1つのセット)がある。これに対して、命令セットは1つだけである。したがって、どのようにして、1つのレジスタ・セットを有することから、レーンごとに1つのレジスタ・セットを有することに遷移させるかが課題になる。以下、スレッドからレーンへの/レーンからスレッドへのモード遷移に従って、命令が異なる意味を有するということをプロセッサに伝えるための技法を説明する。
一般的には、スレッドからレーンへ/レーンからスレッドへモードを遷移させる技法は、以下のアクション、すなわち、必要なステートを準備し、スレッド・リソースからレーン・リソースに転送すること、プロセッサをレーン・モードに変化させること、マルチ・レーン計算を実行すること、必要なステートを準備し、レーン・リソースからスレッド・リソースに転送すること、および、プロセッサをスレッド・モードに変化させることを含む。次に、スレッドからレーンへ/レーンからスレッドへモードを遷移させる技法の詳細を、図6の方法論600を参照して説明する。
例示的な実施形態によれば、命令ストリームの実行は、スレッド・モードで開始する。ステップ602を参照されたい。スレッド・モード実行は、ステップ604に従って、レーン・モード実行に遷移させるための要求(すなわち、レーン・モード要求)が行われるか、計算が完了するかのいずれかまで継続する。計算が完了すると、プロセスは終了する。
他方で、レーン・モード要求があると、ステップ606で、スレッド・モードからレーン・モードへの遷移が行われる。上述のように、命令ストリーム内で符号化されたブリッジ命令は、命令ストリームの直列領域または並列領域が、いつ存在し、したがって、スレッド・モードまたはレーン・モードで実行されるべきであるかを知らせ得るものである。したがって、スレッド・モードからレーン・モードへの、またはその逆の遷移は、命令ストリーム内で符号化されたブリッジ命令に応答して実行することができる。
本技法によれば、スレッド・モードからレーン・モードへの遷移の起動は、かなり簡単なプロセスである。すなわち、スレッド・モードからレーン・モードへの遷移は、レーン・モード要求などの明示的な命令に遭遇することに基づいて(自発的に)発生する。以下で詳細に説明するように、これに対して、レーン・モードからスレッド・モードへの遷移は、自発的に(すなわち、スレッド・モード要求などの明示的な命令に遭遇することに応答して)発生するか、または、レーン・モードでの命令実行中に例外が生じた時に非自発的に発生する(下記参照)。
次に、プロセッサ・コアをスレッド・モードからレーン・モードに(ステップ606に従って)スイッチすることのプロセスの詳細を、図7を参照して説明し、プロセッサ・コアをレーン・モードからスレッド・モードに(ステップ610に従って)スイッチすることのプロセスの詳細を、図8(明示的なスイッチング命令の場合)および図9(例外の場合)を参照して説明する。
コアをスレッド・モードからレーン・モードに遷移させる場合は、特殊命令を呼び出して、例えば、すべての後続命令をレーン・モードで実行させるように、プロセッサ・コア内の特殊フラグ/レジスタをセットするようにしてもよい。例えば、後で説明する図7のステップ706を参照されたい。それに応じて、ステップ608に従って、プロセッサ・コアは、レーン・モード計算を、i)スレッド・モードに遷移させるための明示的な命令(スレッド・モード要求など)に、命令ストリームで遭遇するか、ii)例外が発生するかのいずれかまで、レーン・モードで実行する。あとで説明する図8および図9も参照されたい。レーンからスレッドへの遷移を行う明示的な命令、または例外のいずれかが発生すると、ステップ610に従って、プロセッサ・コアは、実行をスレッド・モードにスイッチする。図6に示すように、プロセスは、計算が完了するまで繰り返される。
図7は、プロセッサ・コアをスレッド・モードからレーン・モードにスイッチする(遷移させる)ための例示的な方法論700を示す図である。図7に示すように、方法論700は、ステップの例示的な系列を表し、それらのステップは、レーン・モード要求などの明示的な命令に遭遇する時に、レーン・モードにスイッチするために、(図6の)方法論600のステップ606によって実行され得るものである。
ステップ702で、プロセッサ・コアのステートが、スレッド・モードからレーン・モードに転送される。例示的な実施形態によれば、ステップ702は、i)コンテンツをスレッド・レジスタからレーン・レジスタに転送すること(上記参照)、ii)レーン・レジスタの1つもしくは複数を初期化すること、iii)メモリ・スタックを各々のレーンに割り振り、それに対応してレーン・スタック・レジスタをセットすること、および、iv)各々のレーンのテーブル・オブ・コンテンツ(TOC:table of contents)ポインタをスレッドTOCにセットすること(そのことによって、プロセスは、スレッド・モード実行が終了したところで、レーン・モードでの実行を継続し得る)、の少なくとも1つを含むが、それらに限定されない。
ステップ704で、(アーキテクチャ化された)レーンのすべてが、有効とマーキングされる。レーンは後で、特殊命令を使用して有効または無効にすることができる。有効/無効レーンについては既に説明した。レーンは、制御フロー発散(control flow divergence)を実装するために、有効/無効にされる。制御フロー発散は、命令ストリームが、レーンの一部では実行されるべきでない命令を含む時に生じる。それらのレーンは、無効にされなければならない。実行での後の時点で、制御フローは再収束(reconverge)し(すなわち、命令は、無効にされたレーンで再び実行されるべきである)、無効レーンは、再び有効にされる。
最後にステップ706で、特殊命令が、プロセッサ・モードをレーン・モードに変化させるために呼び出される。例示的な実施形態によれば、特殊命令は、プロセッサ・コアの内部の特殊フラグ/レジスタをセットし、それによって、すべての後続命令が、レーン・モードで実行される。
本技法によれば、メモリはスレッド計算とレーン計算との間で共有される。レーン・モードでの命令は、スレッド・モードでの命令と同じメモリ・アドレス空間にアクセスし、その逆も同様である。
上述のように、レーン・モードからスレッド・モードへのプロセッサ・コアの遷移は、少し複雑になっている。具体的には、プロセッサ・コアがレーン・モードで動作している時、スレッド・モードへのスイッチは、スレッド・モード要求などの明示的なスイッチング命令に応答して(自発的に)発生するか、または、例外を引き起こす命令が発生する(すなわち、スレッド・モードをデフォルト・ステートにする)時に(非自発的に)発生する。第1の事例(事例A:明示的な命令)を、図8の方法論800Aを参照して説明し、第2の事例(事例B:例外)を、図9の方法論800Bを参照して説明する。
図8は、プロセッサ・コアをレーン・モードからスレッド・モードに自発的にスイッチする(遷移させる)ための例示的な方法論800Aを示す図である。図8に示すように、方法論800Aは、ステップの例示的な系列を表し、それらのステップは、スレッド・モード要求などの明示的な命令に遭遇する時に、スレッド・モードにスイッチするために、(図6の)方法論600のステップ610によって実行され得るものである。
ステップ802Aで、プロセッサ・コアのステートが、レーン・モードからスレッド・モードに転送される。例示的な実施形態によれば、ステップ802Aは、i)レーン・レジスタをメモリに退避させること(例えば、前に説明した、図2のステップ208を参照されたい)、および、ii)コンテンツをレーン・レジスタからスレッド・レジスタに転送する/移動させること(上記を参照されたい)、の少なくとも1つを含むが、それらに限定されない。
ステップ804Aで、特殊命令が、プロセッサ・モードをスレッド・モードに変化させるために呼び出される。例示的な実施形態によれば、特殊命令は、プロセッサ・コアの内部の特殊フラグ/レジスタをセットし、それによって、すべての後続命令が、スレッド・モードで実行される。ステップ806Aで、レーンにより使用されるステートが解放され、ステップ808Aで、命令ストリームはスレッド・モードで実行される。「ステート」は、レーン・モードを開始する前にコンパイラにより割り振られた、可能なcpuおよびメモリ・リソース(例えば、スタック空間)を意味する。
一方、レーン・モードでの命令実行中に例外が発生した時、レーン・モードは割り込みされ、コアは通常のスレッド・モードに戻される。その場合、例外ハンドラが、コアをスレッド・モードに変化させることになり、割り込みからの戻りが、レーン・モード・ステータスを復元することになる。例えば図9を参照されたい。当技術分野で知られているように、例外ハンドラは、例外を解決することを試行するために実行される特定のサブルーチンである。例外ハンドラは、スレッド・モードで、より良好に実行され、そのため、レーン・モードの余分なセマンティクスに関わる必要がない。
図9は、プロセッサ・コアをレーン・モードからスレッド・モードに非自発的にスイッチする(遷移させる)ための例示的な方法論800Bを示す図である。図9に示すように、方法論800Bは、ステップの例示的な系列を表し、それらのステップは、例外がレーン・モードでの命令実行中に発生した時に、スレッド・モードにスイッチするために、(図6の)方法論600のステップ610によって実行され得るものである。当技術分野で知られているように、例外は、命令でのコンフリクトまたはエラーに起因して発生し、オペレーションを停止またはアボートさせ得る。例えば、0による除算を含む計算により例外が発生する。
この例では、ステップ802Bに従って、レーン・モードでの命令ストリームの実行の間に、例外を引き起こす命令が発生する。プログラム・カウンタ(PC)は、実行されている現在の命令(または代替的に、次の命令)をマーキングまたはポイントする。例外が発生した時、レーン・モード実行に割り込みし、コアを通常(デフォルト)スレッド・モードに戻すことが望ましい。例外が対処されると、所望のレーン・モードに戻るための試みが行われることになる。したがってステップ804Bで、必要なステートが、後でレーン・モードを再開するために退避させられる。例示的な実施形態によれば、このことは、例外を引き起こしたレーンのステートを退避させること、または、レーン・レジスタのステートを退避させること、あるいはその両方を含む。
次にステップ806Bで、命令が、レーン・モードからスレッド・モードにスイッチするために呼び出される。コアが、通常スレッド・モードに戻されると、例外を解決する(すなわち、対処する)ことができる。ステップ808Bを参照されたい。例外は、当技術分野で知られているように、例外ハンドラを使用して解決することができる。例外が解決されると、レーン・モード・ステータスが復元される。例えば、ステップ810Bで、レーン・モード・ステートが復元され、ステップ812Bで、コアがレーン・モードに遷移させられる。ステップ814Bで、計算が、それがステップ804B(上記を参照されたい)で中断されたところから再開され、例外を引き起こしたレーンでの命令が再試行される。
スレッドからレーンへ、およびレーンからスレッドへモードを遷移させる技法について説明してきたが、次に、どのようにレジスタが、スレッド・モードからレーン・モードへのシフト、およびその逆のシフトに対して準備されるかの非限定的な例について説明する。
例:ユーザは、関数foo(A,B,…)をレーン・モードで実行することを欲し、Lはレーンの数であり、LGR[0…L][0…32]は、各々のレーンに対する汎用レジスタであり、GPR[32]は、スレッド・モードに対する汎用レジスタであるとする。コンパイラまたはユーザは、関数fooを、以下のアクションを実行することになる、シングル命令マルチ・レーン実行ラッパ内にラップしなければならない。
smile_foo(A,B,…){
for(i=0;i<L;i++){ //必要なステートをスレッドからレーンに転送する
LGR(i)[6]=N; //
LGR(i)[5]=B; // パラメータを、スレッド・レジスタからコピーすることによりコールに対して準備する
LGR(i)[4]=A; // レーン・レジスタに
LGR(i)[2]=GPR[2]; // 各々のレーンは、スレッド・モードでのものと同じTOCを得る
LGR(i)[1]=stack(i); // 各々のレーンは、それ自体のスタックを得る
LGR(i)[0]=i; // 各々のレーンは、レーンidを得る(専用レジスタ(SPR)またはスタック・ロケーションであり得る)

eal // すべてのレーンを有効にする
switch2lm // レーン・モードにスイッチする
各々のレーンがfoo(A,B)をコールする
switch2tm //スレッド・モードにスイッチする
本発明は、システム、方法、またはコンピュータ・プログラム製品であり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるための、コンピュータ可読プログラム命令を有する、コンピュータ可読ストレージ・メディア(または、複数のメディア)を含み得る。
コンピュータ可読ストレージ・メディアは、命令実行デバイスによる使用のための命令を保持および記憶し得る有形デバイスであり得る。コンピュータ可読ストレージ・メディアは、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、または、上述のものの任意の適した組合せであり得るが、それらに限定されない。コンピュータ可読ストレージ・メディアの、より具体的な例の非網羅的な列挙としては、以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、デジタル・バーサタイル・ディスク(DVD)、memory stick(R)、フロッピー(R)・ディスク、命令が記録されるパンチ・カードまたは溝内の一段高い構造などの機械的に符号化されるデバイス、および、上述のものの任意の適した組合せを含む。コンピュータ可読ストレージ・メディアを、本明細書で使用する場合は、本質的には、電波もしくは他の自由伝搬する電磁波、導波路もしくは他の伝送メディアを介して伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または、電線を介して伝送される電気信号などの、一時的な信号であると解釈すべきではない。
本明細書で説明するコンピュータ可読プログラム命令は、それぞれのコンピューティング/処理デバイスにコンピュータ可読ストレージ・メディアから、あるいは、外部コンピュータまたは外部ストレージ・デバイスに、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せを介して、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備え得る。各々のコンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、コンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイスの内部のコンピュータ可読ストレージ・メディアでの記憶のために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、ステート・セッティング・データ、または、1つもしくは複数のプログラミング言語の任意の組合せで書き記される、ソース・コードもしくはオブジェクト・コードのいずれかであり得るものであり、それらのプログラミング言語は、Smalltalk(R)、C++、または類するものなどのオブジェクト指向プログラミング言語、および、「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アローン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上、および部分的にリモート・コンピュータ上で、または、全体的にリモート・コンピュータもしくはサーバ上で実行し得る。後の方のシナリオでは、リモート・コンピュータは、ユーザのコンピュータに、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介して接続され得るものであり、または接続は、外部コンピュータに対して(例えば、インターネットを介して、インターネット・サービス・プロバイダを使用して)行われ得る。一部の実施形態では、例えば、プログラマブル論理回路網、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路網が、本発明の態様を実行するために、コンピュータ可読プログラム命令のステート情報を利用して、電子回路網をパーソナライズすることにより、コンピュータ可読プログラム命令を実行し得る。
本発明の態様を、本明細書では、本発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品の、フローチャート図またはブロック図あるいはその両方を参照して説明している。フローチャート図またはブロック図あるいはその両方の各々のブロック、および、フローチャート図またはブロック図あるいはその両方でのブロックの組合せが、コンピュータ可読プログラム命令により実装され得るということが理解されよう。
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の、1つまたは複数のブロックで指定される機能/行為を実装するための手段を作り出するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はさらには、命令が記憶されたコンピュータ可読ストレージ・メディアが、フローチャートまたはブロック図あるいはその両方の、1つまたは複数のブロックで指定される機能/行為の態様を実装する命令を含む製造品を構成するように、コンピュータ可読ストレージ・メディアに記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはその組合せに、特定の方式で機能するように指示することができるものであってもよい。
コンピュータ可読プログラム命令はさらには、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の、1つまたは複数のブロックで指定される機能/行為を実装するように、コンピュータ実装プロセスを生み出すべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
図でのフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能性、および動作を示すものである。この点に関して、フローチャートまたはブロック図での各々のブロックは、指定される論理機能を実装するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部分を表し得る。一部の代替的実装形態では、ブロックで記される機能は、図で記される順序から外れて発生することがある。例えば、連続して示される2つのブロックは、実際には、実質的に同時発生的に実行されることがあり、または、ブロックは時には、含まれる機能性に依存して、逆の順序で実行されることがある。ブロック図またはフローチャート図あるいはその両方の各々のブロック、および、ブロック図またはフローチャート図あるいはその両方でのブロックの組合せは、指定される機能もしくは行為を実行する、または、専用ハードウェアおよびコンピュータ命令の組合せを実行する、専用ハードウェアに基づくシステムにより実装され得るということが、さらには留意されよう。
ここで図10に目を向けると、本明細書で提示される方法論の1つまたは複数を実装するための装置900のブロック図が示されている。単に例として、装置900は、図5の方法論500のステップの1つもしくは複数、図6の方法論600のステップの1つもしくは複数、図7の方法論700のステップの1つもしくは複数、図8の方法論800Aのステップの1つもしくは複数、または、図9の方法論800Bのステップの1つもしくは複数、あるいはその組合せを実装するように構成される。
装置900は、コンピュータ・システム910と、リムーバブル・メディア950とを含む。コンピュータ・システム910は、プロセッサ・デバイス920と、ネットワーク・インターフェイス925と、メモリ930と、メディア・インターフェイス935と、オプションのディスプレイ940とを含む。ネットワーク・インターフェイス925によって、コンピュータ・システム910が、ネットワークに接続することが可能となり、一方で、メディア・インターフェイス935によって、コンピュータ・システム910が、ハード・ドライブまたはリムーバブル・メディア950などのメディアとインタラクトすることが可能となる。
プロセッサ・デバイス920は、本明細書で開示される方法、ステップ、および機能を実装するように構成され得る。メモリ930は、分散型でもローカルでもよく、プロセッサ・デバイス920は、分散型でも単体でもよい。メモリ930は、電気、磁気、もしくは光メモリ、または、これらもしくは他のタイプのストレージ・デバイスの任意の組合せとして実装され得る。さらに、用語「メモリ」を、プロセッサ・デバイス920によりアクセスされるアドレス指定可能空間内のアドレスから読み出される、または、そのアドレスに書き込まれることが可能な任意の情報を包含するのに十分に、広範に解釈すべきである。この定義によって、ネットワーク・インターフェイス925を介してアクセス可能なネットワーク上の情報は、プロセッサ・デバイス920がその情報をネットワークから検索し得るので、やはりメモリ930の範囲内にある。プロセッサ・デバイス920を構成する各々の分散型プロセッサは、一般的には、それ自体のアドレス指定可能メモリ空間を含む。コンピュータ・システム910の一部またはすべては、特定用途向け、または一般用の集積回路に組み込むことができる。
オプションのディスプレイ940は、装置900の人間のユーザとインタラクトするのに適した、任意のタイプのディスプレイである。一般的にはディスプレイ940は、コンピュータ・モニタ、または他の同様のディスプレイである。
本発明の例示的な実施形態を、本明細書で説明したが、本発明は、それらの実施形態に限定されることはなく、当業者であれば、様々な他の変形および変更を、本発明の範囲から逸脱することなく行うことができるであろう。

Claims (19)

  1. プロセッサで、交互に配置された直列領域および並列領域を有するシングル命令ストリームを実行するための方法であって、
    前記シングル命令ストリームの各々のアーキテクチャ化されたスレッドに対して、スレッド・レジスタの1つのセット、および、N個のレーンにわたるレーン・レジスタのN個のセットを有する、プロセッサ・アーキテクチャを作成するステップと、
    前記シングル命令ストリームの前記直列領域内の命令を、スレッド・モードで前記スレッド・レジスタに対して実行するステップと、
    前記シングル命令ストリームの前記並列領域内の命令を、レーン・モードで前記レーン・レジスタに対して実行するステップと、
    前記シングル命令ストリームの実行を、前記スレッド・モードから前記レーン・モードに、または、前記レーン・モードから前記スレッド・モードに遷移させるステップと
    を含む、方法。
  2. スレッド・レジスタの前記1つのセットは、レーン・レジスタの前記N個のセットの少なくとも1つと同じ、構成要素レジスタの組合せを含む、請求項1に記載の方法。
  3. スレッド・レジスタの前記1つのセットは、レーン・レジスタの前記N個のセットの1つまたは複数と異なる、構成要素レジスタの組合せを含む、請求項1に記載の方法。
  4. 前記シングル命令ストリームの前記直列領域内の前記命令を、前記スレッド・モードで実行する前記ステップは、
    前記シングル命令ストリームの前記直列領域内の前記命令を1回、前記スレッド・レジスタを使用して実行されるようにディスパッチするステップ
    を含む、請求項1に記載の方法。
  5. 前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで実行する前記ステップは、
    前記シングル命令ストリームの前記並列領域内の前記命令を、前記N個のレーンの各々に対して1回ずつ、合計N回ディスパッチするステップ
    を含む、請求項1に記載の方法。
  6. 前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで前記レーン・レジスタに対して実行する前記ステップは、ロックステップで、前記N個のレーンのすべてにわたって生じる、請求項1に記載の方法。
  7. 前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで前記レーン・レジスタに対して実行する前記ステップは、前記N個のレーンにわたって非同期的に進行する、請求項1に記載の方法。
  8. 前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで前記レーン・レジスタに対して実行する前記ステップは、前記N個のレーンの各々のステートに左右される、請求項1に記載の方法。
  9. 前記N個のレーンの各々の前記ステートは、有効または無効のいずれかである、請求項8に記載の方法。
  10. 前記シングル命令ストリームの実行を、前記スレッド・モードから前記レーン・モードに、または、前記レーン・モードから前記スレッド・モードに遷移させる前記ステップは、
    前記スレッド・レジスタが有する情報を前記レーン・レジスタに、または、前記レーン・レジスタが有する情報を前記スレッド・レジスタにコピーするステップ
    を含む、請求項1に記載の方法。
  11. 前記シングル命令ストリームの前記直列領域内の前記命令が、前記スレッド・モードで前記スレッド・レジスタに対して実行され、さらに、前記シングル命令ストリームの実行が、前記スレッド・モードから前記レーン・モードに遷移させられる場合において、
    前記プロセッサのステートを、スレッド・リソースからレーン・リソースに転送するステップと、
    前記N個のレーンのすべてをアクティブとマーキングするステップと、
    特殊命令を呼び出して、前記プロセッサのモードを前記スレッド・モードから前記レーン・モードに変化させるステップと
    実行する、請求項1に記載の方法。
  12. 前記プロセッサの前記ステートを、前記スレッド・リソースから前記レーン・リソースに転送する前記ステップは、
    コンテンツを前記スレッド・レジスタから前記レーン・レジスタに転送するステップ
    を含む、請求項11に記載の方法。
  13. 前記プロセッサの前記ステートを、前記スレッド・リソースから前記レーン・リソースに転送する前記ステップは、
    前記レーン・レジスタの1つまたは複数を初期化するステップ
    を含む、請求項11に記載の方法。
  14. 前記プロセッサの前記ステートを、前記スレッド・リソースから前記レーン・リソースに転送する前記ステップは、
    メモリ・スタックを前記N個のレーンの各々に割り振るステップ
    を含む、請求項11に記載の方法。
  15. 前記シングル命令ストリームの前記並列領域内の前記命令が、前記レーン・モードで前記レーン・レジスタに対して実行され、さらに、前記シングル命令ストリームの実行が、前記レーン・モードから前記スレッド・モードに遷移させられる場合において、
    前記プロセッサのステートを、レーン・リソースからスレッド・リソースに転送するステップと、
    特殊命令を呼び出して、前記プロセッサのモードを前記レーン・モードから前記スレッド・モードに変化させるステップと、
    前記N個のレーンにより使用されるステートを解放するステップと
    実行する、請求項1に記載の方法。
  16. 前記プロセッサの前記ステートを、前記レーン・リソースから前記スレッド・リソースに転送する前記ステップは、
    前記レーン・レジスタが有する情報をメモリに退避させるステップと、
    コンテンツを前記レーン・レジスタから前記スレッド・レジスタ内に移動させるステップと
    を含む、請求項15に記載の方法。
  17. 前記シングル命令ストリームの前記並列領域内の前記命令は、前記レーン・モードで前記レーン・レジスタに対して実行され、さらに、命令の実行により例外が引き起こされる場合において、
    前記レーン・モードを再開するために必要なステートを退避させるステップと、
    特殊命令を呼び出して、前記プロセッサのモードを前記レーン・モードから前記スレッド・モードに変化させるステップと、
    前記例外を解決するステップと、
    レーン・モード・ステートを復元するステップと
    実行する、請求項1に記載の方法。
  18. 請求項1ないし17のいずれかに記載の方法のすべてのステップを実行するように適合された手段を備えるシステム。
  19. コンピュータ・プログラムであって、前記コンピュータ・プログラムがコンピュータ・
    システム上で実行される時、請求項1ないし17のいずれかに記載の方法のすべてのステップを実行するための命令を含む、コンピュータ・プログラム。
JP2017525632A 2014-11-24 2015-11-11 プロセッサ・コアをスレッド・モードからレーン・モードに遷移させ、2つのモードの間のデータ転送を可能にすること Active JP6697457B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/552,145 US20160147536A1 (en) 2014-11-24 2014-11-24 Transitioning the Processor Core from Thread to Lane Mode and Enabling Data Transfer Between the Two Modes
US14/552,145 2014-11-24
PCT/IB2015/058700 WO2016083930A1 (en) 2014-11-24 2015-11-11 Transitioning the processor core from thread to lane mode and enabling data transfer between the two modes

Publications (2)

Publication Number Publication Date
JP2017535872A JP2017535872A (ja) 2017-11-30
JP6697457B2 true JP6697457B2 (ja) 2020-05-20

Family

ID=56010274

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017525632A Active JP6697457B2 (ja) 2014-11-24 2015-11-11 プロセッサ・コアをスレッド・モードからレーン・モードに遷移させ、2つのモードの間のデータ転送を可能にすること

Country Status (5)

Country Link
US (2) US20160147536A1 (ja)
JP (1) JP6697457B2 (ja)
DE (1) DE112015005274T5 (ja)
GB (1) GB2547159B (ja)
WO (1) WO2016083930A1 (ja)

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6003129A (en) * 1996-08-19 1999-12-14 Samsung Electronics Company, Ltd. System and method for handling interrupt and exception events in an asymmetric multiprocessor architecture
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
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
US6574725B1 (en) * 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US6651163B1 (en) * 2000-03-08 2003-11-18 Advanced Micro Devices, Inc. Exception handling with reduced overhead in a multithreaded multiprocessing system
JP2002196924A (ja) * 2000-12-27 2002-07-12 Fujitsu Ltd プロセッサ制御装置及びプロセッサ制御方法
US6954846B2 (en) * 2001-08-07 2005-10-11 Sun Microsystems, Inc. Microprocessor and method for giving each thread exclusive access to one register file in a multi-threading mode and for giving an active thread access to multiple register files in a single thread mode
US6671196B2 (en) * 2002-02-28 2003-12-30 Sun Microsystems, Inc. Register stack in cache memory
US20040268093A1 (en) * 2003-06-26 2004-12-30 Samra Nicholas G Cross-thread register sharing technique
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
US20050144604A1 (en) * 2003-12-30 2005-06-30 Li Xiao F. Methods and apparatus for software value prediction
US7418582B1 (en) * 2004-05-13 2008-08-26 Sun Microsystems, Inc. Versatile register file design for a multi-threaded processor utilizing different modes and register windows
US7437581B2 (en) * 2004-09-28 2008-10-14 Intel Corporation Method and apparatus for varying energy per instruction according to the amount of available parallelism
US7584346B1 (en) * 2007-01-25 2009-09-01 Sun Microsystems, Inc. Method and apparatus for supporting different modes of multi-threaded speculative execution
DE102007025397B4 (de) * 2007-05-31 2010-07-15 Advanced Micro Devices, Inc., Sunnyvale System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
US7809925B2 (en) * 2007-12-07 2010-10-05 International Business Machines Corporation Processing unit incorporating vectorizable execution unit
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
JP5547208B2 (ja) * 2008-11-24 2014-07-09 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
US8650554B2 (en) * 2010-04-27 2014-02-11 International Business Machines Corporation Single thread performance in an in-order multi-threaded processor
US8423750B2 (en) * 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism

Also Published As

Publication number Publication date
GB2547159A (en) 2017-08-09
GB201707830D0 (en) 2017-06-28
US20160147536A1 (en) 2016-05-26
WO2016083930A1 (en) 2016-06-02
DE112015005274T5 (de) 2017-09-28
US20160147537A1 (en) 2016-05-26
GB2547159B (en) 2017-12-13
JP2017535872A (ja) 2017-11-30
GB2547159A8 (en) 2017-09-06

Similar Documents

Publication Publication Date Title
CN106991478B (zh) 用于执行人工神经网络反向训练的装置和方法
CN107341541B (zh) 一种用于执行全连接层神经网络训练的装置和方法
US8607247B2 (en) Method and system for workitem synchronization
CN106991476B (zh) 用于执行人工神经网络正向运算的装置和方法
Kuehn et al. The Horizon supercomputing system: architecture and software
US9052957B2 (en) Method and system for conducting intensive multitask and multiflow calculation in real-time
JP6373425B2 (ja) 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令
US9424099B2 (en) Method and system for synchronization of workitems with divergent control flow
US20140157287A1 (en) Optimized Context Switching for Long-Running Processes
CA2879531A1 (en) Neural processing engine and architecture using the same
US10599404B1 (en) M/A for compiling parallel program having barrier synchronization for programmable hardware
US20160364352A1 (en) Low latency data exchange between processing elements
KR20150019349A (ko) 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US20120029900A1 (en) Simulation method and system for simulating a multi-core hardware platform
US8407453B2 (en) Facilitating processing in a computing environment using an extended drain instruction
KR102228502B1 (ko) 컴퓨터 프로세싱의 타이밍 제어
KR102668340B1 (ko) 설정가능한 하드웨어 런타임 최적화
WO2018149495A1 (en) A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model
Wolf et al. AMIDAR project: lessons learned in 15 years of researching adaptive processors
CN110799955B (zh) 具有预编程功能的高速计算机加速器
Paul et al. Resource-awareness on heterogeneous MPSoCs for image processing
JP2023527227A (ja) プロセッサ、処理方法、および関連デバイス
JP6697457B2 (ja) プロセッサ・コアをスレッド・モードからレーン・モードに遷移させ、2つのモードの間のデータ転送を可能にすること
CN110569105A (zh) 分布式虚拟机自适应内存一致性协议及其设计方法、终端
US9836323B1 (en) Scalable hypervisor scheduling of polling tasks

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180725

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190827

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191121

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200424

R150 Certificate of patent or registration of utility model

Ref document number: 6697457

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150