JP6660991B2 - マルチスレッドプロセッサでのタスクのスケジューリング - Google Patents

マルチスレッドプロセッサでのタスクのスケジューリング Download PDF

Info

Publication number
JP6660991B2
JP6660991B2 JP2018197310A JP2018197310A JP6660991B2 JP 6660991 B2 JP6660991 B2 JP 6660991B2 JP 2018197310 A JP2018197310 A JP 2018197310A JP 2018197310 A JP2018197310 A JP 2018197310A JP 6660991 B2 JP6660991 B2 JP 6660991B2
Authority
JP
Japan
Prior art keywords
thread
instruction
worker
processor
supervisor
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
JP2018197310A
Other languages
English (en)
Other versions
JP2019079530A (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.)
Graphcore Ltd
Original Assignee
Graphcore 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 Graphcore Ltd filed Critical Graphcore Ltd
Publication of JP2019079530A publication Critical patent/JP2019079530A/ja
Application granted granted Critical
Publication of JP6660991B2 publication Critical patent/JP6660991B2/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • G06F9/4887Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Description

本開示は、マルチスレッドプロセッサにおける異なる同時スレッドによって実行されるタスクのスケジューリングに関する。
マルチスレッドプロセッサは、互いに並行して複数のプログラムスレッドを実行することができるプロセッサである。プロセッサは、複数の異なるスレッドに共通のいくつかのハードウェア(例えば、共通命令メモリ、データメモリ及び/又は実行ユニット)を備え得るが、マルチスレッドをサポートするために、プロセッサは各スレッドに固有の専用ハードウェアも備えている。
専用ハードウェアは、一度に実行可能なスレッド数の各々に対して少なくとも1つの個別のコンテキストレジスタファイルを備える。「コンテキスト」は、マルチスレッドプロセッサについて言及するとき、互いに並行して実行されるスレッドの個別のプログラム状態(例えば、プログラムカウンタ値、ステータス及び現行のオペランド値)を指す。コンテキストレジスタファイルは、各スレッドにおけるこのプログラム状態を表すためのレジスタの個別の集合を指す。レジスタファイル内のレジスタは汎用メモリとは異なり、レジスタアドレスは命令語のビットとして固定されるが、メモリアドレスは命令を実行することによって計算することができる。所与のコンテキストレジスタは、典型的には、個別のスレッドのための個別のプログラムカウンタと、そのスレッドによって実行される計算中に個別のスレッドに作用して出力されるデータを一時的に保持するためのオペランドレジスタの個別のセットを備える。各コンテキストは、個別のスレッドの状態(例えば、一時停止中であるか実行中であるか)を記憶するために個別のステータスレジスタを有していてもよい。従って、現在実行中のスレッドの各々は、それ自体の個別のプログラムカウンタと、任意にオペランドレジスタ及びステータスレジスタとを有している。
マルチスレッドの1つの可能な形態は並列処理である。すなわち複数のコンテキストと同様に、複数の実行パイプライン、すなわち並列に実行されるべき命令の各ストリームのために別の実行パイプラインが提供される。しかし、これにはハードウェアの点で多量の重複を必要とする。
その代わりに、マルチスレッドプロセッサの別の形態では、並列処理ではなく同時処理を用いて、スレッドが共通実行パイプライン(又は少なくともパイプラインの共通部分)を共有し、異なるスレッドはこの同じ共有実行パイプラインを介してインターリーブされる。マルチスレッドプロセッサのパフォーマンスは、パイプラインレイテンシを隠す機会が増えるため、同時処理がない場合、あるいは、並列処理に比べてさらに改善され得る。また、このアプローチでは、複数の実行パイプラインを備えた完全並列プロセッサとして各スレッド専用のハードウェアを余分に必要とせず、従って、沢山の余分なシリコンを必要としない。
マルチスレッドプロセッサはまた、異なる同時スレッドの実行を調整するための手段を必要とする。例えば、どの計算タスクをどのスレッドに割り当てるかを判定する必要がある。別の例として、同時スレッドの第1の1つ以上は、同時スレッドの1つ以上の他のスレッドによる計算の結果に依存する計算を含んでいてもよい。この場合、当該スレッドを実行の共通ポイントに持っていく(bring)ためにバリア同期を実行する必要があり、1つ以上の他のスレッドはそれらが依存する計算を実行する前に、1つ以上の第1のスレッドがこれらの依存する計算を実行しようとすることはない。代わりに、バリア同期では、最初のスレッドが処理できるようになる前に、他のスレッドが指定されたポイントに到達する必要がある。
同時スレッドの実行を調整するための1つ又は複数のこのような機能は、専用ハードウェアで実施することができる。しかし、これはプロセッサのシリコン占有面積を増加させ、プログラム的なソフトウェアアプローチほど柔軟なものではない。一方、完全にプログラム的なソフトウェアアプローチは、コード密度の面で効率的ではない。これらの2つのアプローチのバランスを取って、スレッドを調整するためのより巧妙なアプローチを見出すことが望ましい。
本明細書で開示される1つの態様によれば、
異なるタイムスロットの反復シーケンスのそれぞれにおいて個別のスレッドを実行するように構成された実行ユニットであって、シーケンスは実行ロジックが個別のスレッドの実行をインターリーブするように動作可能な複数のタイムスロットからなる実行ユニットと、
それぞれが個別のスレッドの個別の状態を表すためのレジスタの個別のセットからなる複数のコンテキストレジスタセットと、を備え、ここでコンテキストレジスタセットは、実行ユニットが前記シーケンス内でインターリーブするように動作可能なタイムスロットの数と、少なくとも1つの追加コンテキストレジスタセットとの各々に対して個別のワーカーコンテキストレジスタセットから構成され、コンテキストレジスタセットの数は、実行ユニットがインターリーブするように動作可能なタイムスロットの数より少なくとも1つ多くなるように備えられており、ワーカーコンテキストレジスタセットは、計算タスクを実行する個別のワーカースレッドの個別の状態を表すように構成され、追加コンテキストレジスタセットは、ワーカースレッドによって実行されるタスクの実行をスケジュールするスーパーバイザスレッドの状態を表すように構成され、
ここでプロセッサは、タイムスロットの各々においてスーパーバイザスレッドを実行し始め、次にスーパーバイザスレッドが、実行中のタイムスロットの各々をワーカースレッドに個別の1つに放棄できるように構成されるプロセッサが提供される。
実施形態では、プロセッサは、スーパーバイザスレッドが、実行中のタイムスロット内の1つ又は複数の放棄命令を実行することによって前記放棄を実行できるように構成されてもよい。
実施形態では、前記1つ以上の放棄命令は、単一の放棄命令である。
実施形態では、実行ユニットは、プロセッサによって認識される機械コード命令のタイプを定義する命令セットに従って動作するように構成されてもよく、各機械コード命令は個別のオペコードによって定義され、ここで1つ又は複数の放棄命令の少なくとも1つは、実行されたときに前記放棄をトリガするオペコードを有する命令セットの専用命令であってもよい。
実施形態では、少なくとも1つの前記放棄命令のオペコードには、放棄されているタイムスロットが少なくとも1つの前記放棄命令が実行される前記タイムスロットであることが暗黙的に含まれている。
実施形態では、前記少なくとも1つの放棄命令を含む命令セットの前記1つ又は複数の命令は、スーパーバイザスレッドが使用するために確保され、ワーカースレッドによって実行可能ではなくてもよい。
実施形態では、1つ又は複数の放棄命令は、放棄されたタイムスロットがこれに対して放棄されているワーカースレッドのアドレスをオペランドとして指定してもよい。
実施形態では、プロセッサは、タイムスロットの1つが放棄されたワーカースレッドが、これに対して実行されているタイムスロットを、これが実行されているタイムスロットで終了命令を実行することによってスーパーバイザスレッドに戻すことができるように構成してもよい。
実施形態では、実行ユニットは、プロセッサによって認識される機械コード命令のタイプを定義する命令セットに従って動作するように構成されてもよく、各機械コード命令は個別のオペコードによって定義され、ここで終了命令は、実行されたときに放棄されたタイムスロットをスーパーバイザスレッドへ復帰させるオペコードを有する命令セットの専用命令であってもよい。
実施形態では、戻されるタイムスロットが終了命令が実行されるタイムスロットであることが前記終了命令のオペコードに暗黙的となっている。
実施形態では、タイムスロットが戻されるスレッドがスーパーバイザスレッドであることが前記終了命令のオペコードに暗黙的となっている。
実施形態では、少なくとも前記終了命令を含む命令セットの1つ又は複数の命令は、ワーカースレッドによって使用されるために確保され、スーパーバイザスレッドによって実行可能ではなくてもよい。
実施形態では、スーパーバイザスレッドは、ワーカースレッドを同期させるためのバリア同期を実行してもよい。
実施形態では、スーパーバイザスレッドは、1つ又は複数のワーカースレッドに代わって外部リソースとの通信を実行してもよい。
実施形態では、放棄命令は、スーパバイザコンテキストレジスタセットの1つ又は複数のステータスレジスタから、放棄命令によって起動されたワーカーの対応する1つ又は複数のステータスレジスタに、1つ又は複数のモードをさらにコピーして、ワーカーが前記1つ以上のモードを採用するように制御してもよい。
実施形態では、プロセッサは、前記スロットの1つで一緒に複数のワーカースレッドのセットを起動する命令を実行し、すべてが同じコードを実行するようにさらに構成されてもよい。
実施形態では、プロセッサが実行するように構成された命令セットは、前記スロットの1つと一緒に複数のワーカースレッドを起動するマルチラン命令をさらに含んでもよく、複数のワーカースレッドが3つ以上であり、ここでワーカースレッドの1つは、マルチラン命令のオペランドによって指定される第1のアドレスからフェッチされたコードを含み、複数のワーカースレッドのうちの他のワーカースレッドは、第1のアドレスに対するストライド(stride)値のステップだけ離れたアドレスからフェッチされたコードを含み、ストライド値はマルチラン命令の別のオペランドによって指定される。すなわち、複数のワーカースレッドのそれぞれが、ストライド値の整数倍だけ前記第1のアドレスからオフセットされたアドレスからフェッチされたコードを含み、この整数倍は、自然数の列(1,2,3、・・・)、すなわち1から始まり1のインクリメントで間隔を置いて(各タイムスロットで1ずつ増加する)正の整数の列を形成する。
実施形態では、前記ワーカースレッドの数は、前記タイムスロットの数と等しくてもよく、すなわちマルチラン命令は、それぞれがマルチラン命令の第1アドレス及びストライド値オペランドによって指定されたストライドアドレスのセットの異なる個別の1つから、タイムスロットの各々でスレッドを起動する。
本明細書で開示される別の態様によれば、プロセッサを動作させる方法であって、
異なるタイムスロットの反復シーケンスの各々において個別のスレッドを実行する実行ユニットを使用することを含み、このシーケンスは実行ロジックが個別のスレッドの実行をインターリーブするように動作可能な複数のタイムスロットからなり、
そのプロセッサは複数のコンテキストレジスタセットを備え、各々が個別のスレッドの個別の状態を表すためのレジスタの個別のセットを備え、コンテキストレジスタセットは、実行ユニットが前記シーケンス内でインターリーブするように動作可能なタイムスロットの数と、少なくとも1つの追加コンテキストレジスタセットとのそれぞれについて個別のワーカーコンテキストレジスタセットを備え、
コンテキストレジスタセットの数は、実行ユニットがインターリーブするように動作可能なタイムスロットの数より少なくとも1つ多くなっており、ワーカーコンテキストレジスタセットは、計算タスクを実行する個別のワーカースレッドの個別の状態を表すために使用され、追加コンテキストレジスタセットは、ワーカースレッドによって実行されるタスクの実行をスケジュールするスーパーバイザスレッドの状態を表すために使用され、
この方法はさらに、タイムスロットの各々においてスーパーバイザスレッドの実行を開始すると、そのスーパーバイザスレッドが、それが実行しているタイムスロットの各々をワーカースレッドの個別の1つに個々に放棄することを含む方法が提供される。
本明細書で開示される別の態様によれば、コンピュータ可読記憶装置に具現化されたコードを含み、本明細書で開示される任意の実施形態のプロセッサ上で実行するように構成され、コードがスーパーバイザスレッドとワーカースレッドからなるコンピュータプログラムが提供される。
本開示の理解を支援し、実施形態がどのように実施され得るかを示すために、実施例として添付の図面を参照する。
マルチスレッドプロセッサの概略ブロック図。 複数のスレッドコンテキストの概略ブロック図。 インターリーブされたスロットのスキームを概略的に示す。 スーパーバイザスレッド及び複数のインターリーブされたタイムスロットで動作する複数のワーカースレッドを概略的に示す。 構成プロセッサのアレイを含むプロセッサの概略ブロック図。 機械知能アルゴリズムで使用されるグラフの概略図。
図1は、本開示の実施形態によるプロセッサモジュール4の一実施例を示す。例えば、プロセッサモジュール4は、同じチップ上の同様なプロセッサタイルアレイの1つであってもよく、又はそれ自体のチップ上に実装されてもよい。プロセッサ4は、バレルスレッド処理ユニットの形態をしたマルチスレッド処理ユニット10と、ローカルメモリ11(すなわち、マルチタイルアレイの場合は同じタイル上の、又はシングルプロセッサチップの場合は同じチップ上の)を備えている。バレルスレッド処理ユニットは、パイプラインの実行時間がインターリーブされたタイムスロットの反復シーケンスに分割され、これらの各々が所与のスレッドによって所有され得るマルチスレッド処理ユニットの一種である。これについては後ほど詳しく説明する。メモリ11は、命令メモリ12及びデータメモリ22(異なるアドレス可能なメモリユニットに、又は同一のアドレス可能なメモリユニットの異なる領域に実装することができる)を備えている。命令メモリ12は、処理ユニット10によって実行される機械コードを記憶する一方、データメモリ22は、実行されたコードによって操作されるべきデータと、実行されたコードによって出力されるデータ(例えば、そのような操作の結果として)の両方を記憶する。
メモリ12は、プログラムの様々な異なるスレッドを記憶し、各スレッドは、特定のタスクの実行を命令する個別のシーケンスを含む。本明細書で言及される命令は、機械コード命令、すなわち、プロセッサの命令セットにおける基本命令の1つのインスタンスであって、単一のオペコード及び0個以上のオペランドからなるものを意味していることに留意されたい。
本明細書で説明するプログラムは、複数のワーカースレッドと、1つ又は複数のスーパーバイザスレッドとして構成することができる監視サブプログラムとを含む。これらについては後ほど詳しく説明する。実施形態では、ワーカースレッドの一部又は全部の各々は、それぞれ「コードレット(codelet)」の形態をとる。コードレットは特定のタイプのスレッドであり、時には「アトミック」スレッドとも呼ばれている。これはスレッドの開始から(起動時から)実行する必要があるすべての入力情報を有し、すなわち、プログラムの他の部分又は起動後のメモリからの入力を全く取り込まない。さらに、プログラムの他の部分は、スレッドが終了する(完了する)までスレッドのいかなる出力(アウトカム)を使用しないことがある。エラーが発生しない限り、終了することが保証される。但し、いくつかの文献では、コードレットはステートレスであると定義されていて、2回実行すると最初の実行から情報を継承できなかったが、本明細書ではこのような追加の定義は採用していない。また、ワーカースレッドのすべてがコードレット(アトミック)である必要はなく、実施形態によっては、ワーカーの一部又はすべてが代わりに相互に通信することができることにも留意されたい。
処理ユニット10内で、命令メモリ12からの複数の異なるスレッドは、単一の実行パイプライン13を介してインターリーブされ得る(典型的には、命令メモリに記憶された全スレッドのサブセットのみが、プログラム全体の任意の時点でインターリーブされ得るのであるが)。マルチスレッドの処理ユニット10は、同時に実行される異なるスレッドの状態(コンテキスト)をそれぞれ表すように配列された複数のコンテキストレジスタファイル26と、同時に実行されるスレッドに共通の共有実行パイプライン13、インターリーブされた態様で、好ましくはラウンドロビン方式で共有パイプラインを介して実行するための同時スレッドをスケジューリングするためのスケジューラ24とを備えている。処理ユニット10は、複数のスレッドに共通の共有命令メモリ12と、複数のスレッドに同様に共通な共有データメモリ22とに接続されている。
実行パイプライン13は、フェッチステージ14、デコードステージ16、及び命令セットアーキテクチャによって定義されるような算術及び論理演算、アドレス計算、ロード及びストア演算、及び他の演算を実行する実行ユニットからなる実行ステージ18を含む。コンテキストレジスタファイル26の各々は、個別のスレッドのプログラム状態を表すためのレジスタの個別のセットからなっている。
コンテキストレジスタファイル26の各々を構成するレジスタの一実施例が図2に概略的に示されている。コンテキストレジスタファイル26の各々は、それぞれのスレッドについて(スレッドが現在実行中の命令アドレスを追跡するため)少なくとも1つのプログラムカウンタ(PC)からなるそれぞれ1つ以上の制御レジスタ28を備え、実施形態では各スレッドの現在の状態(例えば、エラーに遭遇したために、現在実行中であるか一時停止中であるかなど)を記録する1つ又は複数のステータスレジスタ(SR)のセットも備えている。コンテキストレジスタファイル26の各々は、また、オペランドレジスタ(OP)32の個別のセットを備えており、それぞれのスレッドによって実行される命令のオペランド、すなわちオペレーション実行時に、各スレッドの命令のオペコードによって定義されたオペレーションで操作される値又はオペレーションによって生じる値を一時的に保持する。コンテキストレジスタファイル26の各々は、任意に、それぞれ1つ以上の他のタイプのレジスタ(図示せず)からなっていてもよいことが理解されよう。また、用語「レジスタファイル」は、時には共通アドレス空間内のレジスタの群を言うために使用されるが、必ずしも本開示で当てはまる必要はなく、各ハードウェアコンテキスト26(コンテキストの各々が各レジスタセット26を表している)は、より一般的には、1つ又は複数のこのようなレジスタファイルから構成されていてもよい。
詳細は後述するが、開示された構成は、並行して実行可能なM個のスレッド(図示の例ではM=3であるが、限定するものではない)のそれぞれについて1つのワーカーコンテキストレジスタファイルCX0・・・CX(M−1)と、1つの追加スーパーバイザコンテキストレジスタファイルCXSを有している。ワーカーコンテキストレジスタファイルは、ワーカースレッドのコンテキストを記憶するために別にしてあって、スーパーバイザコンテキストレジスタファイルは、スーパーバイザスレッドのコンテキストを記憶するために別にしてある。実施形態では、スーパーバイザコンテキストは、各ワーカーと異なる数のレジスタを有する点で特殊であることに留意されたい。ワーカーコンテキストの各々は、好ましくは、互いに同じ数のステータスレジスタ及びオペランドレジスタを有している。実施形態では、スーパーバイザコンテキストは、ワーカーの各々より少ないオペランドレジスタを有していてもよい。オペランドレジスタの実施例では、ワーカーコンテキストは有するがスーパーバイザが含まないオペランドレジスタの例は、浮動小数点レジスタ、累算レジスタ、及び/又は専用のウェイトレジスタ(ニューラルネットワークの重みを保持するための)である。実施形態では、スーパーバイザは、異なる数のステータスレジスタを有していてもよい。さらに、実施形態では、プロセッサモジュール4の命令セットアーキテクチャは、ワーカースレッド及びスーパーバイザスレッドがいくつかの異なるタイプの命令を実行するが、いくつかの命令タイプを共有するように構成されてもよい。
フェッチステージ14は、スケジューラ24の制御の下で、命令メモリ12から実行すべき命令をフェッチするように接続されている。スケジューラ24は、フェッチステージ14を制御して、一組の同時実行スレッドのそれぞれからの命令を、時間スロットの反復シーケンスで順番に取り出し、パイプライン13のリソースを時間的にインターリーブして複数のタイムスロットに分割するように構成されているが、これについては後ほど詳しく説明する。例えば、スケジューリング方式は、ラウンドロビン方式又は重み付けラウンドロビン方式とすることができる。このように動作するプロセッサの別の用語はバレルスレッドプロセッサである。
いくつかの実施形態では、スケジューラ24は、スレッドが一時停止しているかどうかを示す各スレッドの状態レジスタSRの1つにアクセスして、スケジューラ24が実際にフェッチステージ14を制御して、現在アクティブであるスレッドの命令のみをフェッチするようにする。実施形態では、好ましくは、各タイムスロット(及び対応するコンテキストレジスタファイル)が常に1つのスレッド又は他のスレッドによって所有される。すなわち、各スロットが常にスレッドによって占有され、各スロットは常にスケジューラ24のシーケンスに含まれる。しかし、任意で所与のスロットを占有するスレッドは、その時点で一時停止してもよいが、この場合、そのスロットにシーケンスが回ってくると、それぞれのスレッドの命令フェッチが渡される。代替的に、あまり好ましくない実施例では、いくつかのスロットは一時的に空いており、スケジュールされたシーケンスから除外することができる。実行ユニットがインターリーブするように動作可能なタイムスロットの数などに言及する場合、これは、実行ユニットが同時に実行できるスロットの最大数、すなわち、実行ユニットのハードウェアがサポートする同時スロットの数をいう。
フェッチステージ14は、各コンテキストのプログラムカウンタ(PC)にアクセスする。それぞれのスレッドについて、フェッチステージ14は、プログラムカウンタによって示されるように、プログラムメモリ12内の次のアドレスからそのスレッドの次の命令をフェッチする。プログラムカウンタは、分岐命令によって分岐されない限り、各実行サイクルをインクリメントする。その後、フェッチステージ14はフェッチされた命令をデコードステージ16に渡してデコードされ、デコードステージ16はその命令で指定された任意のオペランドレジスタ32のデコードされたアドレスとともに、デコードされた命令の指示を実行ユニット18に渡す命令が実行されるようにする。実行ユニット18は、オペランドレジスタ32及び制御レジスタ28へのアクセスを有する。実行ユニット18は、オペランドレジスタ32及び制御レジスタ28を、算術命令の場合(例えば、2つのオペランドレジスタ内の値を加算、乗算、減算又は除算し、そのアウトカムをそれぞれのスレッドの別のオペランドレジスタに出力することによって)のように、復号されたレジスタアドレスに基づいて命令を実行する際に使用することができる。あるいは、命令がメモリアクセス(ロード又はストア)を定義する場合、実行ユニット18のロード/ストアロジックは、その命令に従ってデータメモリからの値を個別のスレッドのオペランドレジスタにロードするか、各スレッドのオペランドレジスタからの値をデータメモリ22に記憶する。あるいは、命令が分岐又は状態変化を定義する場合、実行ユニットはプログラムカウンタPC又は状態レジスタSRの1つの値をそれに応じて変更する。1つのスレッドの命令が実行ユニット18によって実行されている間に、インターリーブされたシーケンスにおける次のタイムスロットのスレッドからの命令は、デコードステージ16によってデコードされることが可能であり、及び/又は1つの命令がデコードステージ16によってデコードされている間に、その次のタイムスロットのスレッドからの命令をフェッチステージ14によってフェッチすることができる(一般に、本開示の範囲は、タイムスロットごとに1つの命令に限定されないし、例えば、別のシナリオでは、2つ以上の命令のバッチを、タイムスロットごとに所与のスレッドから発することができることもあり得る)。従って、インターリーブは、既知のバレルスレッド処理技術に従って、パイプライン13のレイテンシを効果的に隠す。
スケジューラ24によって実行されるインターリーブ方式の実施例が図3に示されている。ここでは、同時スレッドは、ラウンドロビン方式に従ってインターリーブされ、スキームの各ラウンド内で、ラウンドはタイムスロットS0、S1、S2・・・のシーケンスに分割され、各々が個別のスレッドを実行する。典型的に、各スロットは1プロセッササイクルであり、異なるスロットは均等なサイズであるが、すべての可能な実施形態では必ずしもそうではなく、例えば、重み付けラウンドロビン方式も可能であり、これにより、いくつかのスレッドは、実行ラウンドごとに他のスレッドより多くのサイクルが得られる。一般に、バレルスレッドは、偶数ラウンドロビン又は重み付けラウンドロビンスケジュールのいずれかを使用することができ、後者の場合、重み付けを固定又は適応化させてもよい。
実行ラウンドごとのシーケンスが何であれ、このパターンが繰り返され、各ラウンドは各タイムスロットのそれぞれのインスタンスを含む。従って、本明細書で言及されるタイムスロットは、シーケンスの所与の反復におけるタイムスロットの特定の例ではなく、シーケンスにおける反復割り当てされた場所を意味することに留意されたい。別の言い方をすれば、スケジューラ24は、パイプライン13の実行サイクルを複数の時間的にインターリーブされた(時分割多重化された)実行チャネルに振り分けるとともに、各々がタイムスロットの反復シーケンスにおける個別のタイムスロットの繰り返しを含む。図示された実施形態では、4つのタイムスロットが存在するが、これは例示のためのものであり、他の数も可能である。例えば、1つの好ましい実施形態では、実際には6つのタイムスロットが存在する。
ラウンドロビン方式で分割されるタイムスロットの数が何であっても、本開示によれば、処理ユニット10は、タイムスロットが存在する数よりも1つ多いコンテキストレジスタファイル26を備えていて、インターリーブされたタイムスロットの数よりも1つ多いコンテキストをサポートし、バレルスレッディングが可能である。
これは、図2の実施例として示されており、図3に示すように4つのタイムスロットS0・・・S3がある場合、ここではCX0、CX1、CX2、CX3及びCXSという5つのコンテキストレジスタファイルが存在する。すなわち、バレルスレッド方式の実行時間スロットS0・・・S3が4つしかなく、同時に4つのスレッドしか実行できないとしても、本明細書では、第5のプログラムカウンタ(PC)と、オペランドレジスタ32の第5のセットからなり、実施形態では1つ以上のステータスレジスタ(SR)の第5のセットも含む第5のコンテキストレジスタファイルCXSを追加することが開示されている。上述したように留意されたいが、実施形態では、スーパーバイザコンテキストは他のコンテキストCX0・・・3と異なる場合があり、スーパーバイザスレッドは、実行パイプライン13を動作させるための命令の異なるセットをサポートすることができる。
第1の4つのコンテキストCX0・・・CX3の各々は、プログラマが望むアプリケーション固有の計算タスクを何でも実行するために、4つの実行タイムスロットS0・・・S3のうちの1つに現在割り当てられている複数の「ワーカースレッド」の対応する1つの状態を表すために使用される(これは、命令メモリ12に記憶されたプログラムのワーカースレッド総数のサブセットでしかないことに今一度留意されたい)。しかし、第5のコンテキストCXSは、特別な機能のために予約されており、全体プログラムのどのポイントにおいてS0、S1、S2、・・・のどのタイムスロットでどのワーカースレッドWを実行すべきかを割り当てるという点において少なくとも、ワーカースレッドの実行を調整する役割を果たす「スーパーバイザスレッド」(SV)の状態を表すものである。任意に、スーパーバイザスレッドは、他の「スーパーバイザ」又は調整責任を有していてもよい。例えば、スーパーバイザスレッドは、特定の実行順序を保証するためにバリア同期を実行する責任を負うことがある。例として、1つ又は複数の第2のスレッドが同じプロセッサモジュール4上で実行される1つ又は複数の第1のスレッドによって出力されるデータに依存する場合、スーパーバイザは、第1のスレッドが終了するまで第2のスレッドのいずれも開始しないようにバリア同期を実行してもよい。及び/又は、スーパーバイザは、別のタイル又はプロセッサチップなどの特定の外部データソースがそのデータを利用可能にするために必要な処理を完了するまで、プロセッサモジュール4上の1つ又は複数のスレッドが開始しないことを保証するためにバリア同期を実行することができる。スーパーバイザスレッドは、複数のワーカースレッドに関する他の機能を実行するためにも使用できる。例えば、スーパーバイザスレッドは、プロセッサモジュール4に対して外的にデータを通信する責任を負ってもよい(1つ以上のスレッドによって作用される外部データを受信し、及び/又は1つ以上のワーカースレッドによって出力されたデータを送信する)。一般に、スーパーバイザスレッドは、プログラマが望むあらゆる種類のスーパーバイザ機能又は調整機能を提供するために使用されてもよい。例えば、別の実施例として、スーパーバイザは、タイルローカルメモリ12と記憶ディスク又はネットワークカードのようなより広範なシステム(アレイ6の外部)の1つ又は複数のリソースとの間の転送を管理することができる。
当然のことながら、4つのタイムスロットは一実施例に過ぎず、一般に他の実施形態では、1ラウンドあたり最大M個のタイムスロット0・・・M−1が存在する場合、プロセッサモジュール4は、M+1個のコンテキストCX・・・CX(M−1)とCXS、つまり任意の時点でインターリーブされ得る各ワーカースレッドためのコンテキストと、スーパーバイザのための追加コンテキストとを備えてもよい。例えば、1つの例示的な実施形態では、6つのタイムスロットと7つのコンテキストが存在する。
図4を参照すると、本明細書の教示に従うと、スーパーバイザスレッドSVは、インターリーブされた実行タイムスロットのスキームにおいてそれ自体のタイムスロットを有さない。ワーカースレッドへのスロット割り当ては柔軟に定義されるので、ワーカーもそれ自体のタイムスロットを有さない。むしろ、各タイムスロットは、ワーカーコンテキストを記憶するための独自の専用コンテキストレジスタファイル(CX0・・・CXM−1)を有しており、スロットがワーカーに割り当てられたときにワーカーによって使用されるが、スロットがスーパーバイザに割り当てられると使用されない。所与のスロットがスーパーバイザに割り当てられると、そのスロットは代わりにスーパーバイザのコンテキストレジスタファイルCVSを使用する。スーパーバイザは常に独自のコンテキストにアクセスでき、ワーカーはスーパーバイザコンテキストレジスタファイルCXSを占有することはできないことに留意されたい。
スーパーバイザスレッドSVは、任意の時間スロットS0・・・S3(又は、より一般的にはS0・・・SM−1)及びこれらの時間スロットすべてにおいて動作する能力を有する。スケジューラ24は、全体としてプログラムが起動すると、すべてのタイムスロットにスーパーバイザスレッドを割り当てること、すなわちスーパーバイザSVがS0・・・S3のすべてで実行を開始するように構成されている。しかし、スーパーバイザスレッドには、後続のあるポイント(1つ又は複数のスーパーバイザタスクを実行した直後又はその後のいずれか)で、実行中のスロットのそれぞれをワーカースレッドのそれぞれの1つに一時的に放棄するメカニズムが提供される。例えば、図4に示す実施例では、最初はワーカーW0・・・W3に放棄する。これは、スーパーバイザスレッドが本明細書の一実施例として「RUN」と呼ばれる放棄命令を実行することによって達成される。実施形態では、この命令は、命令メモリ12内のワーカースレッドのアドレスと、データメモリ22内のそのワーカースレッド用のいくつかのデータのアドレスの2つのオペランドを取る。すなわち、RUN task_addr,data_addr。
ワーカースレッドは、互いに並行して実行することができるコードの部分であり、それぞれが実行されるべき1つ以上の個別の計算タスクを表す。データアドレスは、ワーカースレッドによって実行されるいくつかのデータを指定してもよい。あるいは、放棄命令はワーカースレッドのアドレスを指定する単一のオペランドのみを取り、データアドレスはワーカースレッドのコードに含めることもでき、別の実施例では、単一オペランドが、ワーカースレッド及びデータのアドレスを指定するデータ構造を指し示すこともできる。上述したように、実施形態では、ワーカーの少なくとも一部は、コードレットの形態、すなわち同時に実行可能なコードの原子単位をとることができる。代替的に又は追加的に、ワーカーのいくつかはコードレットである必要はなく、代わりに相互に通信することができてもよい。
放棄命令(「RUN」)は、スケジューラ24に対して作用し、この命令自体が実行される現行のタイムスロットを、オペランドによって指定されたワーカースレッドに放棄する。放棄されるのがこの命令が実行されるタイムスロットであることが放棄命令で暗示されていることに留意されたい(マシンコード命令の文脈において暗黙の意味は、これを指定するためのオペランドを必要としないことを意味するもので、オペコード自体から暗黙的に理解されるものである)。従って、放棄されるタイムスロットは、スーパーバイザが放棄命令を実行するタイムスロットである。別の言い方をすれば、スーパーバイザは、それが放棄するのと同じ空間で実行している。スーパーバイザは「この場所でこのコード部分を実行する」と言うと、その時点以降、反復スロットは関連するワーカースレッドによって(一時的に)所有される。
スーパーバイザスレッドSVは、1つ又は複数のタイムスロットの各々において同様の動作を実行して、そのタイムスロットの一部又は全部をワーカースレッドW0・・・W3(命令メモリ12内のより大きなセットW0・・・Wjから選択されたワーカースレッド)の異なるそれぞれに放棄する。最後のスロットでそれが実行されると、スーパーバイザは中断される(その後、スロットの1つがワーカーWによって戻されたとき中断したところから再開する)。
このように、スーパーバイザスレッドSVは、インターリーブされた実行時間スロットS0・・・S3の異なるスレッドに、1つ又は複数のタスクを実行する異なるワーカースレッドを割り当てることができる。スーパーバイザスレッドがワーカースレッドを実行する時間であると決定すると、放棄命令(RUN)を使用して、このワーカーをRUN命令が実行されたタイムスロットに割り当てる。
いくつかの実施形態では、命令セットはまた、実行命令RUNALL(「すべて実行」)の変形を含む。この命令は、複数のワーカーをまとめて起動し、すべて同じコードを実行する。実施形態では、これは、処理ユニットのスロットS0・・・S3(又は、より一般的にはS0・・・S(M−1))の全てにおいてワーカーを立ち上げる。
RUNALL命令の代わりに、又はRUNALL命令に加えて、いくつかの実施形態では、命令セットは、「マルチラン」命令、MULTIRUNを含んでいてもよい。この命令はまた、タイムスロットの個別の1つにそれぞれ複数のワーカースレッドを起動する。好ましい実施形態では、すべてのスロットS0・・・S(M−1)(すなわち、起動されたワーカースレッドの総数はハードウェアワーカーコンテキストの数Mに等しい)の各々において個別のワーカースレッドWを起動する。ただし、MULTIRUNは、複数の起動されたスレッドがすべて同じタスクアドレスから取得した同じコードで構成されているわけではない点で、RUNALL命令と異なるものである。むしろ、MULTIRUNは、少なくとも2つのオペランド、すなわち第1の明示的なタスクアドレス、及びストライド値を取る。すなわち、MULTIRUN task_addr、stride。
複数の起動されたスレッドのうちの最初のスレッドは、MULTIRUN命令のアドレスオペランドによって指定されたアドレスtask_addrから得られる。複数の起動された他のスレッドのそれぞれが、第1のスレッドのアドレスに等しいアドレスからストライド値の対応する増分整数倍を加えたアドレスから得られ、その倍数は1から始まる正の整数の列であり、倍数は、1から始まり各タイムスロットで1ずつ増加する正の整数の列である。言い換えれば、起動されたワーカースレッドは、最初のアドレスに対してストライド値のステップだけ離れている。すなわち、スレッドの第2のものは、task_addr+strideのアドレスから取り込まれ、スレッドの第3のものはtask_addr+2*strideのアドレスから取り込まれ、スレッドの第4のものはtask_addr+3*strideのアドレスから取り込まれようになる(起動されたスレッドの数に応じて以下同様、実施形態ではスロットSの数に等しい)。MULTIRUN命令の実行は、M個の複数のワーカーの各々がスロットS0・・・S(M−1)の1つで起動されるようにトリガし、それぞれが上記のように判定された個別のアドレス値によって定義されるプログラムカウンタで開始する。
さらに、いくつかの実施形態では、RUN、RUNALL及び/又はMULTIRUN命令はまた、これが実行されると、1つ又は複数のスーパーバイザステータスレジスタCXS(SR)からのいくつかの状態を、RUN又はRUNALLによって起動されたワーカースレッド(複数可)の対応する1つ又は複数にコピーする。例えば、コピーされた状態は、浮動小数点丸めモード(例えば、最近傍への丸め又はゼロへの丸め)及び/又はオーバーフローモード(例えば、飽和又は無限大を表す別個の値の使用)などの1つ又は複数のモードからなっていてもよい。次に、コピーされた状態又はモードは、コピーされた状態又はモードに従って動作するように当該ワーカーを制御する。実施形態では、ワーカーは後でこれを自身のステータスレジスタに上書きすることができる(ただし、スーパーバイザの状態を変更することはできない)。更なる代替又は追加の実施形態では、ワーカーは、スーパーバイザの1つ又は複数のステータスレジスタからいくつかの状態を読み出すことを選択することができる(そしてさらに、後で自身の状態を変更することもできる)。例えば、ここでもスーパーバイザステータスレジスタから浮動小数点モードや丸めモードなどのモードを採用することができる。しかし、実施形態では、スーパーバイザは、ワーカーのコンテキストレジスタCX0・・・のいずれも読み取ることができない。
一旦起動されると、現在割り当てられているワーカースレッドW0・・・W3のそれぞれは、個別の放棄命令によって指定されたコードで定義された1つ又は複数の計算タスクを実行する。最後に、それぞれのワーカースレッドは、実行中のタイムスロットをスーパーバイザスレッドに戻す。これは、終了命令(「EXIT」)を実行することによって達成される。いくつかの実施形態では、これはオペランドを取らない。すなわち、EXIT。
あるいは、他の実施形態では、EXIT命令は、終了時にそれぞれのコードレットの状態(例えば、一定の端末条件が条件に満たされたか、エラーが発生したなど)を示すために、プログラマが望む任意の目的に使用される単一のオペランドexit_state(例えばバイナリ値)を取る。すなわち、EXIT exit_state。
どちらにしても、EXIT命令はスケジューラ24に作用し、命令が実行されたタイムスロットがスーパーバイザスレッドに返ってくるようにする。その後、スーパーバイザスレッドは、1つ又は複数の継続するスーパーバイザタスク(例えば、バリア同期及び/又は他のタイルのような外部リソースとのデータ交換)を実行し、及び/又は、新たなワーキングスレッド(W4など)を当該スロットに割り当てるための別の放棄命令を実行し続けることができる。従って、命令メモリ12内のスレッドの総数は、バレルスレッド処理ユニット10がいつでもインターリーブすることができる数よりも大きくてよいことに再度留意されたい。スーパーバイザスレッドSVの役割は、スケジューラ24のラウンドロビンスケジュール内でインターリーブされたタイムスロットS0・・・SMのどれに、プログラム全体のどの段階で命令メモリ12からのワーカースレッドW0・・・Wjのどれを割り当てるかをスケジュールすることである。
実施形態では、ワーカースレッドがそのタイムスロットをスーパーバイザスレッドに戻す別の方法もある。すなわち、実行ユニット18は、ワーカースレッドが例外に遭遇したときに自動的にそのタイムスロットをスーパーバイザに返すように構成された例外機構を備える。この場合、個々の終了状態はデフォルト値に設定されてもよいし、そのまま残されてもよい。
さらに、実施形態では、処理ユニット10は、命令セットの1つ又は複数の命令が、ワーカースレッドではなくスーパーバイザスレッドの使用のために予約され、及び/又は、命令セットの1つ又は複数の命令がスーパーバイザスレッドではなくワーカースレッドの使用のために予約される。例えば、(RUN)命令及び終了(EXIT)命令が関連するステージで動作して、どのタイプのスレッドが当該スロットを現在占有しているかを通知すると仮定すれば、これは実行ステージ18、デコードステージ16又はフェッチステージ14において実行されてもよい。そのような場合、スーパーバイザ特有の命令は、少なくとも放棄命令を含むが、処理ユニット10がバリア同期を実行するための専用ロジックを含む場合には、1つ以上のバリア同期命令など他の命令も含むこともあり得る。また、ワーカー特有の命令には、少なくとも終了命令が含まれるが、浮動小数点演算(エラーが発生しやすい)などの他の命令を含んでいてもよい。
上述したプロセッサ4は、処理ユニット10及びメモリ11の単一のインスタンスを含む単一の独立型プロセッサとして使用されてもよい。しかし、図5に示すように、いくつかの実施形態では、プロセッサ4は、アレイ6内の複数のプロセッサのうちの1つであってもよく、同じチップ上に統合されてもよく、複数のチップにまたがってもよい。この場合、プロセッサ4は、適切な相互接続34を介して互いに接続されており、アレイにわたって異なるワーカースレッドのうちの1つ、いくつか、又はすべてによって実行される1つ又は複数の計算結果などを、互いにデータ通信することができる。例えば、プロセッサ4は、単一のチップ上に実装されたより幅広いマルチタイルプロセッサ内の複数のタイルのうちの1つであってもよく、各タイルは、図1〜図4に関連して上述したように構成されたバレルスレッド処理ユニット10及び関連メモリ11のそれ自体の個別のインスタンスを含んでもよい。完全を期すため、本明細書で言及する「アレイ」は、タイル又はプロセッサ4の任意な特定の数の次元又は物理的レイアウトを必ずしも意味しないことにも留意されたい。いくつかのそのような実施形態では、スーパーバイザは、タイル間の交換を実行する責任があり得る。
いくつかの実施形態では、EXIT命令には特別な機能、すなわち、EXIT命令のオペランドに指定された終了状態を同じパイプライン13を介して実行される複数の他のワーカースレッドの終了状態に自動的に集合させる(専用のハードウェアロジックによって)機能を与えられる。そのような各ワーカーは、EXIT命令の自身のインスタンスのオペランドとして指定される対応する終了状態を有する。これは、指定された終了状態を、同じプロセッサモジュール4によって(すなわち、所与の処理ユニット10の同じパイプライン13を介して)実行されているすべてのワーカースレッドの終了状態に、又は少なくとも指定された段階におけるすべてのワーカースレッドの終了状態に集合させることであってもよい。いくつかの実施形態では、アレイ6(同じチップ上の他のタイルにあってもよく、又は他のチップ上にあってもよい)内の1つ以上の他のプロセッサ上で実行されるワーカースレッドの終了状態を集合するさらなる命令が実行されてもよい。いずれにしても、プロセッサ4は、プロセッサ4のローカルに集合された終了状態を記憶するように特に構成された少なくとも1つのレジスタ38を備える。実施形態では、これは、スーパーバイザのコンテキストレジスタファイルCXSにおけるスーパーバイザのステータスレジスタの1つである。個別のスレッドによって各EXIT命令が実行されると、専用アグリゲーションロジックは、EXIT命令のオペランドで指定された終了状態を、終了状態レジスタ38に格納された集約終了状態に寄与させる。いつでも、例えば着目ワーカーのすべてが個別の終了命令によって終了すると、スーパーバイザスレッドは終了状態レジスタ38から終了状態にアクセスすることができる。これは、それ自体のステータスレジスタSRにアクセスすることを含んでもよい。
集合ロジックは、実行ユニット18の専用ハードウェア回路に実装される。従って、ワーカースレッドを終了させる命令には、追加で暗黙的な機能が含まれている。専用回路又はハードウェアとは、汎用コードを使用してソフトウェアでプログラムされるのではなく、ハードワイヤード機能を有する回路を意味する。ローカルに集合された終了状態の更新(レジスタ38における)は、プロセッサ4の命令セット内における基本的な機械コード命令の1つである特別なEXIT命令のオペコードの実行によってトリガされ、終了状態を集合する固有の機能性を有する。また、ローカルに集合された終了状態はレジスタ38に記憶され、その値はパイプライン上で実行されるコードによってアクセスすることができる専用の記憶装置(実施形態では単一ビットの記憶装置)を意味する。好ましくは、終了状態レジスタ38は、スーパーバイザの状態レジスタの1つを形成する。
一実施例として、個々のスレッドの終了状態及び集合された終了状態は、それぞれ単一のビット、すなわち0又は1の形態をとることができ、集合ロジックは、個々のワーカー終了状態の論理積を取るように構成することができる。つまり、0である入力は0の集合をもたらすが、すべての入力が1の場合、集合は1となる。すなわち真又は成功のアウトカムを表すために1が使用された場合、これは、ワーカースレッドのいずれかのローカル終了状態のいずれかが偽又は不成功である場合、集合された全体の終了状態も偽であるか、不成功のアウトカムを表すことを意味する。例えば、これは、ワーカーがすべて終端条件を満たしているかどうかを判定するために使用することができる可能性がある。従って、スーパーバイザサブプログラムは、単一のレジスタ(実施形態では単一ビット)に「何かが間違っているか」と質問することができ、個々のタイル上で個々のワーカースレッドの個々の状態を調べる必要はなくなる。実際に実施形態では、スーパーバイザは、任意の時点でワーカーに問い合わせることができず、且つワーカーの状態にアクセスすることができず、終了状態レジスタ38をワーカースレッドのアウトカムを判定する唯一の手段にする。スーパーバイザは、どのコンテキストレジスタファイルがどのワーカースレッドに対応するかを識別せず、ワーカーのEXIT後にワーカー状態が消失する。スーパーバイザがワーカースレッドの出力を判断する他の唯一の方法は、ワーカーが汎用データメモリ22にメッセージを残すということになる。
上記のロジックに相当するのは、ANDをORゲートで置き換え、ソフトウェアにおける終了状態0及び1の解釈を反転することであろう、すなわち0→真、1→偽である。同様に、ANDゲートがORゲートで置き換えられるが終了状態の解釈は反転もされずリセット値も反転されない場合、$LC内の集合状態は、ワーカー状態のいずれかが(すべてではなく)が状態1で終了したかどうかを記録することになる。他の実施形態では、終了状態は単一ビットである必要はない。例えば、個々のワーカーの終了状態は1ビットであってもよいが、集合された終了状態は、3値の状態、すなわち、すべてのワーカーが状態1で終了した、すべてのワーカーが状態0で終了した、又はワーカーの終了状態が混合であったかを表す2ビットからなっていてもよい。これを実現するロジックの一実施例として、3値を符号化する2つのビットのうちの1つは、個々の終了状態のブールAND(又はOR)であって、3値の他のビットは、個々の終了状態のブールORであってもよい。次いで、これらの2つのビットの排他的論理和として、ワーカーの終了状態が混在していることを示す第3の符号化されたケースを形成することができる。
終了状態は、プログラマが望むものは何でも表すために使用することができるが、具体的に想定される1つの実施例は、それぞれのワーカースレッドが「成功」状態又は「真」状態で抜け出たことを示すために1の終了状態を使用する一方、0の終了状態はそれぞれのワーカースレッドが「不成功」又は「偽」状態で抜け出たことを示す(アグリゲーション回路がANDの代わりにORを実行し、レジスタ$LC38が最初に0にリセットされる場合、その逆になる)。例えば、各ワーカースレッドが、機械知能アルゴリズムのグラフ内で個別のノードの1つ又は複数のパラメータにおけるエラーが、所定のメトリックに従って許容可能なレベルに収まっているかどうかを示す条件など、各ワーカースレッドが関連する条件を有する計算を実行するアプリケーションを考える。この場合、1つの論理レベル(例えば、1)の個々の終了状態を使用して、条件が満たされている(例えば、ノードの1つ又は複数のパラメータにおける1つ又は複数のエラーが、いくつかのメトリックに従って許容可能なレベル内にある)ことを示してもよいが、一方では反対の論理レベル(例えば、0)の個々の終了状態は、条件が満たされなかったこと(例えば、エラーが当該メトリックに従って許容レベル内にないこと)を示すために使用することができる。条件は、例えば、単一のパラメータ又は各パラメータに置かれたエラー閾値であってもよく、ワーカースレッドによって実行されるそれぞれの計算に関連する複数のパラメータのより複雑な関数にもなり得る。
別のより複雑な実施例として、ワーカーの個々の終了状態及び集合された終了状態は、それぞれ2つ以上のビットから構成されていてもよく、これらは、例えば、ワーカースレッドのアウトカムにおける信頼度を表すために使用され得る。例えば、各ワーカースレッドの終了状態は、個別のワーカースレッドのアウトカムにおける確信度の尺度を表し、アグリゲーションロジック37は、ハードウェア内の個々の信頼レベルの確率的な集合を実行するためにより複雑な回路で置き換えてもよい。
プログラマが終了状態にどのような意味を与えても、次に、スーパーバイザスレッドSVは終了状態レジスタ38から集計された値を取得して、例えば、最後の同期点で、最後にリセットされてから抜け出たすべてのワーカースレッドの集合された終了状態を特定すること、例えば、すべてのワーカーが成功又は真の状態で抜け出たかどうかを特定することができる。この集合された値に依存して、スーパーバイザスレッドはプログラマの設計に従ってその後に判定を下してもよい。プログラマは、自身が望むローカルに集合された終了状態をどのように使っても構わず、例えば、例外を発生させるか、集合された終了状態に依存して分岐決定を実行するかを判定する。例えば、スーパーバイザスレッドは、ローカル集合された終了状態を参照して、複数のワーカースレッドで構成されたプログラムの特定の一部が、期待どおりに又は所望どおりに完了したかどうかを特定することができる。そうでない場合(例えば、ワーカースレッドの少なくとも1つが不成功又は偽の状態で抜け出たとき)、それはホストプロセッサに報告してもよく、あるいは、同じワーカースレッドを含むプログラムの部分で別の反復を実行してもよいが、もしそうであれば(例えば、すべてのワーカースレッドが成功又は真の状態で終了した場合)、代わりに1つ又は複数の新たなワーカーを含むプログラムの別の部分に分岐してもよい。
好ましくは、スーパーバイザスレッドは、そこに記憶された値がすべて所望するスレッドの正確で最新の集合状態を表すように、当該すべてのワーカースレッドが終了するまで、終了状態レジスタ38内の値にアクセスすべきではない。これを待機することは、現在実行中のすべてのローカルワーカースレッド(すなわち、同じプロセッサモジュール4上のもので、同じパイプライン13を介して実行中のスレッド)が終了するのを待機するために、スーパーバイザスレッドによって達成されるバリア同期によって実行されてもよい。換言すれば、スーパーバイザが終了状態レジスタ38から集合された終了状態を取得することを許可される前に、すべての未処理のワーカースレッドが終了するのを待機するために、スーパーバイザスレッドは、終了状態レジスタ38リセットして、複数のワーカースレッドを起動し、次に、バリア同期を開始する。
図6は、本明細書で開示されるプロセッサアーキテクチャの応用例、すなわち機械知能への適用例を示す。
機械知能の分野の当業者にはよく知られているように、機械知能は、機械知能アルゴリズムが知識モデルを学習する学習段階から始まる。このモデルは、相互接続されたノード(すなわち、頂点)102とエッジ(すなわち、リンク)104のグラフからなっている。グラフ内の各ノード102は、1つ又は複数の入力エッジ及び1つ又は複数の出力エッジを有する。ノード102のいくつかの入力エッジのいくつかは、ノードのいくつかの他の出力エッジであり、それにより、ノードを一緒に接続してグラフを形成する。さらに、1つ又は複数のノード102の1つ又は複数の入力エッジが全体としてグラフへの入力を形成し、1つ又は複数のノード102の出力エッジの1つ又は複数が全体としてグラフの出力を形成する。時には、所与のノードが、グラフへの入力、グラフからの出力、及び他のノードへの接続など、これらのすべてを有している場合もある。各エッジ104は、値又はより頻繁にテンソル(n次元行列)を伝達し、これらは入力エッジ及び出力エッジでノード102に且つノードから提供される入力及び出力をそれぞれ形成する。
各ノード102は、その1つ又は複数の入力エッジで受信されたその1つ又は複数の入力の関数を表し、この関数の結果は1つ又は複数の出力エッジに提供される出力である。各関数は、1つ又は複数の個別のパラメータ(乗算型重みである必要はないが、時には重みとも呼ばれる)によってパラメータ化される。一般に、異なるノード102によって表される関数は、異なる形態の関数であってもよく、及び/又は異なるパラメータによってパラメータ化されてもよい。
さらに、各ノード関数の1以上のパラメータの各々は、それぞれのエラー値によって特徴付けられる。さらに、それぞれの条件は、各ノード102のパラメータ内のエラーに関連付けされてもよい。単一のパラメータによってパラメータ化された関数を表すノード102については、条件は単純な閾値であってもよく、すなわち、エラーが指定された閾値内にある場合に条件が満たされるが、エラーが閾値を超えている場合には満たされない。2つ以上の個別のパラメータによってパラメータ化されたノード102については、許容可能なエラーレベルに達したそのノード102に対する条件がより複雑であり得る。例えば、条件は、そのノード102の各パラメータがそれぞれの閾値内にある場合にのみ満たすことができる。別の実施例として、結合されたメトリックは、同じノード102に対する異なるパラメータにおけるエラーを組み合わせて定義され、結合されたメトリックの値が指定された閾値内にあるという条件で満たすことができるが、さもなければ、結合されたメトリックの値が閾値を超えている場合(メトリックの定義に応じてその逆も可)、条件は満足されない。条件が何であっても、これは、ノードのパラメータにおけるエラーが一定のレベル又は受容度以下になるかどうかの尺度を与える。一般に、任意の適切なメトリックを使用してもよい。条件又はメトリックは、すべてのノードについて同じであってもよく、ノードの各々について異なるものであってもよい。
学習段階では、アルゴリズムは経験データ、すなわち、グラフへの入力の異なる可能な組み合わせを表す複数のデータポイントを受信する。より多くの経験データが受信されるにつれて、アルゴリズムは、経験データに基づいてグラフ内の様々なノード102のパラメータを徐々に調整して、パラメータの誤差を最小限に抑えるように試行する。目標は、グラフの出力が所与の入力に対する所望の出力に可能な限り近づくようにパラメータの値を探し出すことである。グラフ全体がこのような状態に向かうにつれて、グラフは収束すると言われる。適切な収束度の後に、グラフを使用して、予測又は推論を実行する、すなわち、いくつか所与の入力に対するアウトカムを予測するか、又はいくつか所与の出力についての原因を推測することができる。
学習段階は、さまざまな可能な形態をとることができる。例えば、教師付きアプローチでは、入力経験データはトレーニングデータ、すなわち既知の出力に対応する入力の形をとる。各データポイントで、アルゴリズムは、出力が与えられた入力の既知の出力にさらに近づくようにパラメータを調整することができる。その後の予測段階では、グラフを使用して、入力クエリーを近似予測出力に(又は推論する場合、その逆も可)マッピングすることができる。他のアプローチも可能である。例えば、教師なしのアプローチでは、入力データごとに参照アウトカムの概念がなく、代わりに機械知能アルゴリズムが出力データ内で独自の構造を識別するために残される。あるいは、補強アプローチでは、アルゴリズムは、入力経験データ内の各データポイントに対して少なくとも1つの可能な出力を試行し、この出力が正か負か(そして潜在的にそれが正又は負である可能性の度合い)、勝ち負け、報酬又は罰、又はそのようなものを通知される。多くの試行を経て、アルゴリズムは、ポジティブなアウトカムをもたらすであろう入力を予測することができるように、グラフのパラメータを徐々に調整することができる。グラフを学習するための様々なアプローチ及びアルゴリズムは、多分、機械学習の当業者には周知であると思われる。
本明細書に開示された技術の例示的な適用によれば、各ワーカースレッドは、機械知能グラフにおいてノード102のそれぞれ個別の1つに関連付けられた計算を実行するようにプログラムされる。この場合、ノード102間のエッジ104の少なくとも一部は、スレッド間のデータの交換に対応し、一部は、タイル間の交換を伴い得る。さらに、ワーカースレッドの個別の終了状態は、個別のノード102がそのノードのパラメータの収束のために個別の条件を満たしているかどうか、すなわち、誤差空間内の許容可能なレベル又は領域内に収まる1つのパラメータ又は複数のパラメータにエラーを有しているかどうかを表すためにプログラマによって使用される。例えば、これは、個々の終了状態の各々が個々のビットであり、集合された終了状態が個々の終了状態のAND(又は0が正であるとみなされる場合には同等にOR)の場合、あるいは、個々の終了状態がすべて真であるか、偽又はミックスであるかを表す3値である場合の実施形態の一使用例である。従って、終了状態レジスタ38内の単一のレジスタ値を調べることによって、プログラムはグラフ全体又は少なくともグラフのサブ領域が許容可能な程度に収束したかどうかを特定することができる。
これの別の変形として、集合体が個々の信頼値の統計的集合体の形態をとる実施形態を使用することができる。この場合、個々の終了状態は、それぞれのスレッドによって表されるノードのパラメータが許容誤差に達したという確信度(例えば、百分率のような)を表す。次いで、集合された終了状態を使用して、グラフ又はグラフのサブ領域が許容可能な程度に収束したかどうかに関する全体的な信頼度を特定することができる。
マルチタイルアレイ6の場合、各タイルはグラフのサブグラフを実行する。各サブグラフは、1つ以上のスーパーバイザスレッドからなるスーパーバイザサブプログラムと、ワーカーのいくつか又はすべてがコードレットの形態をとるワーカースレッドのセットとを含む。
そのような適用、又は実際には、グラフ内の各ノードを表すために各ワーカースレッドが使用されるグラフベースの適用では、各ワーカーに含まれる「コードレット」は、持続状態及び1つの頂点の入力及び/出力で動作するソフトウェア手順として定義することができ、ここでコードレットは:
・1つのワーカースレッドレジスタコンテキストで起動され、「実行」命令を遂行するスーパーバイザスレッドによって1つのバレルスロットで実行され、
・他のコードレット又はスーパーバイザとの通信なしで完了し(コードレットが終了したときのスーパーバイザへの返信を除く)、
・「実行」命令によって提供されるメモリポインタを介して頂点の持続状態と、そのバレルスロットに固有のメモリ内の非持続的な作業領域とにアクセスし、
・その最後の命令として「EXIT」を実行すると、使用していたバレルスロットがスーパーバイザに返され、終了命令で指定された終了状態がスーパーバイザで可視なタイルのローカル終了状態に集合される。
グラフ(又はサブグラフ)を更新するとは、エッジによって定義される因果関係と一致する順序で、各構成要素の頂点を一度更新することを意味する。頂点を更新するとは、頂点状態でコードレットを実行することを意味する。コードレットは、頂点の更新手順であって、通常、1つのコードレットは多くの頂点に関連付けられている。スーパーバイザは頂点ごとに1つのRUN命令を実行し、そのような各命令は頂点状態アドレス及びコードレットアドレスを指定する。
上記の実施形態はほんの一例として記載されていることが理解されよう。
例えば、本開示の適用可能性は、図2及び図3に関連して概説された特定のプロセッサアーキテクチャに限定されず、一般に、本明細書で開示される概念は、見込まれるタイムスロットが存在するよりも少なくとも1つ多くのコンテキストを追加することにより、複数の実行タイムスロットを有する任意のプロセッサアーキテクチャに適用可能である。
また、タイムスロットの数を超えたさらなるコンテキストが他の目的のために含まれる可能性は排除されないことにも留意されたい。例えば、一部のプロセッサは、実際に実行中のスレッドを決して表わすことがないデバッグコンテキストを含むが、デバッグ目的のために後にプログラム開発者によって解析されるべき誤ったスレッドのプログラム状態を記憶するためにエラーに遭遇したときスレッドによって使用される。
さらに、スーパーバイザスレッドの役割は、バリア同期及び/又はスレッド間のデータ交換にのみ限定されず、他の実施形態では、これに代えて又はそれに加えて、2つ以上のワーカースレッドの可視性を含む任意の他の機能性を担うことがあり得る。例えば、プログラムがグラフの複数回の反復を含む実施形態では、スーパーバイザスレッドは、グラフの反復を何回実行すべきかを決定する役割を果たしてもよく、これを前の反復に依存させてもよい。
開示された技術の他の変形及び応用は、本明細書の開示が与えられると当業者には明らかになるであろう。本開示の範囲は、記載された実施形態によって制限されるのではなく、添付の特許請求の範囲によってのみ限定される。

Claims (20)

  1. 異なるタイムスロットの反復シーケンスのそれぞれにおいて個別のスレッドを実行するように構成された実行ユニットであって、前記シーケンスは実行ロジックが個別の前記スレッドの実行をインターリーブするように動作可能な複数のタイムスロットからなる前記実行ユニットと、
    それぞれが個別のスレッドの個別の状態を表すためのレジスタの個別のセットからなる複数のコンテキストレジスタセットと、を備えたプロセッサであって、
    前記コンテキストレジスタセットは、前記実行ユニットが前記シーケンス内でインターリーブするように動作可能な数のタイムスロットの各々に対する個別のワーカーコンテキストレジスタセットと、少なくとも1つの追加コンテキストレジスタセットとを含み、
    前記コンテキストレジスタセットの数は、前記実行ユニットがインターリーブするように動作可能な前記タイムスロットの数より少なくとも1つ多くなるように備えられており、
    前記ワーカーコンテキストレジスタセットは、計算タスクを実行する個別のワーカースレッドの個別の状態を表すように構成され、
    前記追加コンテキストレジスタセットは、前記ワーカースレッドによって実行される前記タスクの実行をスケジュールするスーパーバイザスレッドの状態を表すように構成され、
    前記プロセッサは、前記タイムスロットの各々において前記スーパーバイザスレッドを実行し始め、次に前記スーパーバイザスレッドが、実行中の前記タイムスロットの各々を前記ワーカースレッドの個別の1つに個別に放棄できるように構成されているプロセッサ。
  2. 前記プロセッサは、前記スーパーバイザスレッドが、実行中の前記タイムスロット内の1つ又は複数の放棄命令を実行することによって前記放棄を実行できるように構成されている、請求項1に記載のプロセッサ。
  3. 前記1つ以上の放棄命令は、単一の放棄命令である、請求項2に記載のプロセッサ。
  4. 前記実行ユニットは、前記プロセッサによって認識される機械コード命令のタイプを定義する命令セットに従って動作するように構成されており、各機械コード命令は個別のオペコードによって定義され、
    前記1つ又は複数の放棄命令の少なくとも1つは、実行されたときに前記放棄をトリガするオペコードを有する前記命令セットの専用命令である、請求項2又は3に記載のプロセッサ。
  5. 前記少なくとも1つの放棄命令の前記オペコードでは、放棄されている前記タイムスロットが前記少なくとも1つの放棄命令が実行される前記タイムスロットであることが暗黙的になっている、請求項4に記載のプロセッサ。
  6. 前記少なくとも1つの放棄命令を含む前記命令セットの1つ又は複数の命令は、前記スーパーバイザスレッドが使用するために予約され、前記ワーカースレッドによって実行可能ではない、請求項4又は5に記載のプロセッサ。
  7. 前記1つ又は複数の放棄命令は、前記放棄命令のオペランドにおいて、タイムスロットを放棄する少なくとも1つの前記ワーカースレッドのアドレスを指定する、請求項1〜6のいずれか1項に記載のプロセッサ。
  8. 前記プロセッサは、前記タイムスロットの1つがそのために放棄された前記ワーカースレッドが、自身が動作している前記タイムスロットにおいて終了命令を実行することによって、自身が動作している前記タイムスロットを前記スーパーバイザスレッドに戻すことができるように構成されている、請求項1〜7のいずれか1項に記載のプロセッサ。
  9. 前記実行ユニットは、前記プロセッサによって認識される機械コード命令のタイプを定義する命令セットに従って動作するように構成されており、各機械コード命令は個別のオペコードによって定義され、
    前記終了命令は、実行されたときに前記放棄されたタイムスロットを前記スーパーバイザスレッドへ前記戻すことを実行するオペコードを有する前記命令セットの専用命令である、請求項8に記載のプロセッサ。
  10. 前記終了命令の前記オペコードでは、前記戻されるタイムスロットが前記終了命令が実行される前記タイムスロットであることが暗黙的になっている、請求項9に記載のプロセッサ。
  11. 前記終了命令の前記オペコードでは、前記戻されるタイムスロットが戻される前記スレッドが前記スーパーバイザスレッドであることが暗黙的になっている、請求項9又は10に記載のプロセッサ。
  12. 少なくとも前記終了命令を含む前記命令セットの1つ又は複数の命令は、前記ワーカースレッドによって使用されるために予約され、前記スーパーバイザスレッドによって実行可能ではない、請求項〜11のいずれか1項に記載のプロセッサ。
  13. 前記スーパーバイザスレッドは、前記ワーカースレッドを同期させるためのバリア同期を実行するように構成されている、請求項1〜12のいずれか1項に記載のプロセッサ。
  14. 前記スーパーバイザスレッドは、前記ワーカースレッドの1つ又は複数に代わって外部リソースとの通信を実行するように構成されている、請求項1〜13のいずれか1項に記載のプロセッサ。
  15. 前記放棄命令は、スーパバイザコンテキストレジスタセットの1つ又は複数のステータスレジスタから、前記放棄命令によって起動されたワーカーの対応する1つ又は複数のステータスレジスタに、1つ又は複数のモードをさらにコピーして、前記ワーカーが前記1つ以上のモードを採用するように制御する、請求項2に記載のプロセッサ。
  16. 前記プロセッサは、前記スロットの1つで、同じプログラムコードを実行する全てのワーカースレッドのセットを一緒に起動する命令を実行するようにさらに構成されている、請求項1〜15のいずれか1項に記載のプロセッサ。
  17. 前記プロセッサが実行するように構成された前記命令セットは、前記スロットの1つと一緒に複数のワーカースレッドを起動するマルチラン命令をさらに含み、前記複数のワーカースレッドは3つ以上であり、
    前記ワーカースレッドの1つは、前記マルチラン命令のオペランドによって指定される第1のアドレスからフェッチされたコードを含み、前記複数のワーカースレッドの他のワーカースレッドは、前記第1のアドレスに対してストライド値だけ離れた個別のアドレスからフェッチされたコードを含み、前記ストライド値は前記マルチラン命令の別のオペランドによって指定される、請求項4に記載のプロセッサ。
  18. 前記ワーカースレッドの数は、前記タイムスロットの数と等しい、請求項17に記載のプロセッサ。
  19. プロセッサを動作させる方法であって、
    異なるタイムスロットの反復シーケンスの各々において個別のスレッドを実行するために実行ユニットを使用することを含み、前記シーケンスは、実行ユニットが個別の前記スレッドの実行をインターリーブするように動作可能な複数のタイムスロットからなり、
    前記プロセッサは、各々が個別のスレッドの個別の状態を表すためのレジスタの個別のセットを含む複数のコンテキストレジスタセットを備え、
    前記コンテキストレジスタセットは、前記実行ユニットが前記シーケンス内でインターリーブするように動作可能な数のタイムスロットの各々に対する個別のワーカーコンテキストレジスタセットと、少なくとも1つの追加コンテキストレジスタセットとを備え、
    前記コンテキストレジスタセットの数は、前記実行ユニットがインターリーブするように動作可能なタイムスロットの数より少なくとも1つ多くなっており、
    前記ワーカーコンテキストレジスタセットは、計算タスクを実行する個別のワーカースレッドの個別の状態を表すために使用され、
    前記追加コンテキストレジスタセットは、前記ワーカースレッドによって実行される前記タスクの実行をスケジュールするスーパーバイザスレッドの状態を表すために使用され、
    前記方法はさらに、前記タイムスロットの各々において前記スーパーバイザスレッドの実行を開始し、次に、前記スーパーバイザスレッドは、それが実行している前記タイムスロットの各々を前記ワーカースレッドの1つに個々に放棄することを含む、方法。
  20. 請求項19に記載の方法をコンピュータに実行させるプログラム
JP2018197310A 2017-10-20 2018-10-19 マルチスレッドプロセッサでのタスクのスケジューリング Active JP6660991B2 (ja)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
GB1717303.0 2017-10-20
GBGB1717303.0A GB201717303D0 (en) 2017-10-20 2017-10-20 Scheduling tasks in a multi-threaded processor
US15/885925 2018-02-01
US15/885,925 US10956165B2 (en) 2017-10-20 2018-02-01 Scheduling tasks in a multi-threaded processor
GB1816891.4A GB2569843B (en) 2017-10-20 2018-10-17 Scheduling tasks in a multi-threaded processor
GB1816891.4 2018-10-17

Publications (2)

Publication Number Publication Date
JP2019079530A JP2019079530A (ja) 2019-05-23
JP6660991B2 true JP6660991B2 (ja) 2020-03-11

Family

ID=60481909

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018197310A Active JP6660991B2 (ja) 2017-10-20 2018-10-19 マルチスレッドプロセッサでのタスクのスケジューリング

Country Status (8)

Country Link
US (2) US10956165B2 (ja)
JP (1) JP6660991B2 (ja)
KR (1) KR102159730B1 (ja)
CN (1) CN109697111B (ja)
CA (1) CA3021447C (ja)
FR (1) FR3072798B1 (ja)
GB (2) GB201717303D0 (ja)
TW (1) TWI687866B (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201819616D0 (en) * 2018-11-30 2019-01-16 Graphcore Ltd Virtualised gateways
GB2580316B (en) 2018-12-27 2021-02-24 Graphcore Ltd Instruction cache in a multi-threaded processor
US10943323B2 (en) * 2018-12-28 2021-03-09 Arm Limited Data processing systems
GB201904265D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A partitionable networked computer
GB201904266D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with embedded rings
GB201904267D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with multiple embedded rings
GB201904263D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer
CN112084122B (zh) * 2019-09-30 2021-09-28 成都海光微电子技术有限公司 计算机存储器中对区域预取器的置信度和侵略性控制
US11327690B2 (en) * 2019-11-13 2022-05-10 Google Llc Enhanced input of machine-learning accelerator activations
EP3973406A1 (en) 2020-03-26 2022-03-30 Graphcore Limited Embedding rings on a toroid computer network
GB2596872B (en) * 2020-07-10 2022-12-14 Graphcore Ltd Handling injected instructions in a processor
GB2597078B (en) * 2020-07-14 2022-07-13 Graphcore Ltd Communication between host and accelerator over network
CN112463327B (zh) * 2020-11-25 2023-01-31 海光信息技术股份有限公司 逻辑线程快速切换的方法、装置、cpu芯片及服务器

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69429204T2 (de) * 1993-03-26 2002-07-25 Cabletron Systems Inc Ablaufssteuerungsverfahren und -gerät für ein Kommunikationsnetzwerk
US6233599B1 (en) 1997-07-10 2001-05-15 International Business Machines Corporation Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers
US6986141B1 (en) * 1998-03-10 2006-01-10 Agere Systems Inc. Context controller having instruction-based time slice task switching capability and processor employing the same
US6401155B1 (en) * 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
US6957432B2 (en) 2000-03-21 2005-10-18 Microsoft Corporation Real-time scheduler
EP1317832B1 (en) * 2000-07-31 2016-12-14 Intel Deutschland GmbH Method and apparatus for time-sliced and multi-threaded data processing in a communication system
US20030126416A1 (en) * 2001-12-31 2003-07-03 Marr Deborah T. Suspending execution of a thread in a multi-threaded processor
CN1842770A (zh) * 2003-08-28 2006-10-04 美普思科技有限公司 一种在处理器中挂起和释放执行过程中计算线程的整体机制
US8099110B2 (en) 2004-07-29 2012-01-17 Samsung Electronics Co., Ltd. Apparatus and method for efficient determination of mobile station location in a wireless network
US7203822B2 (en) 2004-07-31 2007-04-10 Hewlett-Packard Development Company, L.P. Unprivileged context management
US20060146864A1 (en) * 2004-12-30 2006-07-06 Rosenbluth Mark B Flexible use of compute allocation in a multi-threaded compute engines
US7810083B2 (en) 2004-12-30 2010-10-05 Intel Corporation Mechanism to emulate user-level multithreading on an OS-sequestered sequencer
CN102968302B (zh) * 2005-03-02 2016-01-27 英特尔公司 利用同步开销以改善多线程性能的机制
US8195922B2 (en) * 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US7743233B2 (en) 2005-04-05 2010-06-22 Intel Corporation Sequencer address management
US7849466B2 (en) 2005-07-12 2010-12-07 Qualcomm Incorporated Controlling execution mode of program threads by applying a mask to a control register in a multi-threaded processor
US7685409B2 (en) 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
US7958333B2 (en) * 2007-05-30 2011-06-07 XMOS Ltd. Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution
JP2010176403A (ja) * 2009-01-29 2010-08-12 Toyota Motor Corp マルチスレッドプロセッサ装置
US8214831B2 (en) * 2009-05-05 2012-07-03 International Business Machines Corporation Runtime dependence-aware scheduling using assist thread
GB2489708B (en) 2011-04-05 2020-04-15 Advanced Risc Mach Ltd Thread selection for multithreaded processing
EP2828748A4 (en) 2012-03-21 2016-01-13 Nokia Technologies Oy METHOD IN A PROCESSOR, DEVICE AND COMPUTER PROGRAM PRODUCT
JP5894496B2 (ja) 2012-05-01 2016-03-30 ルネサスエレクトロニクス株式会社 半導体装置
JP2014153860A (ja) 2013-02-07 2014-08-25 Renesas Electronics Corp マルチスレッドプロセッサ
US20150074353A1 (en) * 2013-09-06 2015-03-12 Futurewei Technologies, Inc. System and Method for an Asynchronous Processor with Multiple Threading
US9558000B2 (en) * 2014-02-06 2017-01-31 Optimum Semiconductor Technologies, Inc. Multithreading using an ordered list of hardware contexts

Also Published As

Publication number Publication date
GB2569843A (en) 2019-07-03
GB2569843B (en) 2020-06-10
GB201717303D0 (en) 2017-12-06
US20210165660A1 (en) 2021-06-03
US11550591B2 (en) 2023-01-10
TWI687866B (zh) 2020-03-11
CN109697111A (zh) 2019-04-30
FR3072798B1 (fr) 2021-04-30
CA3021447C (en) 2021-12-14
US10956165B2 (en) 2021-03-23
KR20190044551A (ko) 2019-04-30
TW201923561A (zh) 2019-06-16
CA3021447A1 (en) 2019-04-20
US20190121668A1 (en) 2019-04-25
JP2019079530A (ja) 2019-05-23
FR3072798A1 (fr) 2019-04-26
CN109697111B (zh) 2023-05-02
KR102159730B1 (ko) 2020-09-24
GB201816891D0 (en) 2018-11-28

Similar Documents

Publication Publication Date Title
JP6660991B2 (ja) マルチスレッドプロセッサでのタスクのスケジューリング
CN110214317B (zh) 多瓦片处理布置中的同步
US11113060B2 (en) Combining states of multiple threads in a multi threaded processor
US11893390B2 (en) Method of debugging a processor that executes vertices of an application, each vertex being assigned to a programming thread of the processor
US10606641B2 (en) Scheduling tasks in a multi-threaded processor
US11449338B2 (en) Handling exceptions in a multi-tile processing arrangement
US11645081B2 (en) Handling exceptions in a multi-tile processing arrangement
US20220197645A1 (en) Repeat Instruction for Loading and/or Executing Code in a Claimable Repeat Cache a Specified Number of Times
GB2583574A (en) Handling exceptions in a multi-tile processing arrangement
JP2020119504A (ja) 分岐予測器

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190218

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190218

AA79 Non-delivery of priority document

Free format text: JAPANESE INTERMEDIATE CODE: A24379

Effective date: 20190226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191015

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191016

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200110

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200210

R150 Certificate of patent or registration of utility model

Ref document number: 6660991

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