IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ネクスト シリコン リミテッドの特許一覧

特開2025-10109再構成可能な処理グリッド上での同時実行スレッドの実行
<>
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図1
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図2
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図3
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図4
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図5
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図6
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図7
  • 特開-再構成可能な処理グリッド上での同時実行スレッドの実行 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025010109
(43)【公開日】2025-01-20
(54)【発明の名称】再構成可能な処理グリッド上での同時実行スレッドの実行
(51)【国際特許分類】
   G06F 9/46 20060101AFI20250109BHJP
【FI】
G06F9/46 410
【審査請求】未請求
【請求項の数】30
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024108160
(22)【出願日】2024-07-04
(31)【優先権主張番号】18/218,152
(32)【優先日】2023-07-05
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】18/409,869
(32)【優先日】2024-01-11
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.JAVASCRIPT
3.PYTHON
(71)【出願人】
【識別番号】520039124
【氏名又は名称】ネクスト シリコン リミテッド
【氏名又は名称原語表記】Next Silicon Ltd
【住所又は居所原語表記】33 Derech Yitshak Rabin Street, Givatayim, Israel
(74)【代理人】
【識別番号】110002952
【氏名又は名称】弁理士法人鷲田国際特許事務所
(72)【発明者】
【氏名】ラズ エラド
(72)【発明者】
【氏名】タヤリ イラン
(57)【要約】      (修正有)
【課題】複数の同時実行スレッドを処理するためのシステムを提供する。
【解決手段】システム200において、各スレッドコンテキストが、複数の同時実行スレッドのうちの1つのためのものであり、特定された演算を備えるデータフローグラフを実施する再構成可能な処理グリッド210と、再構成可能な処理グリッドを構成するハードウェアプロセッサ201は、複数の同時実行スレッドのうちの第1のスレッドを実行し、第1のスレッドを実行する間、第1のスレッドの実行時コンテキスト値をコンテキストストレージに格納し、特定された論理素子による特定された演算の完了を待機する間に、特定された論理素子によって第2のスレッドの特定された演算を実行し、第1のスレッドの特定された演算の実行が完了すると、第1のスレッドの実行時コンテキスト値をコンテキストストレージから取得し、第1のスレッドの他の演算を実行する。
【選択図】図2
【特許請求の範囲】
【請求項1】
複数の同時実行スレッドを処理するためのシステムであって、
少なくとも1つの再構成可能な処理グリッドであって、
複数の論理素子と、
複数のスレッドコンテキストを格納するように構成されたコンテキストストレージであって、各スレッドコンテキストは、複数の同時実行スレッドのうちの1つのためのものであり、各同時実行スレッドは、少なくとも1つの特定された演算を含む複数の演算を備えるデータフローグラフを実施し、前記複数のスレッドコンテキストの各々は、その同時実行スレッドに対して、前記その同時実行スレッドによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を備える、コンテキストストレージと、
を備える、少なくとも1つの再構成可能な処理グリッドと、
少なくとも1つのハードウェアプロセッサであって、前記少なくとも1つの再構成可能な処理グリッドを、
前記複数の同時実行スレッドのうちの第1のスレッドを実行し、
前記第1のスレッドを実行する間に、
前記第1のスレッドの前記少なくとも1つの実行時コンテキスト値を前記コンテキストストレージに格納し、
前記複数の論理素子のうちの少なくとも1つの特定された論理素子による、第1のスレッドの複数の演算のうちの少なくとも1つの特定された演算の実行の完了を待機する間に、前記少なくとも1つの特定された論理素子によって、前記複数の同時実行スレッドの第2のスレッドの少なくとも1つの特定された演算を実行し、
前記第1のスレッドの前記少なくとも1つの特定された演算の実行が完了したときに、
前記コンテキストストレージから前記第1のスレッドの前記少なくとも1つの実行時コンテキスト値を取得し、
前記第1のスレッドの前記複数の演算のうちの少なくとも1つの他の演算を実行する、
ように構成する、少なくとも1つのハードウェアプロセッサと、
を備える、システム。
【請求項2】
前記コンテキストストレージは、複数のコンテキストエントリを備え、前記複数のコンテキストエントリの各々は、前記複数のスレッドコンテキストのうちの1つの複数の実行時コンテキスト値を格納するためのものである、請求項1に記載のシステム。
【請求項3】
前記複数の同時実行スレッドのうちの少なくとも1つのスレッドに対して、前記少なくとも1つのスレッドの前記複数の実行時コンテキスト値が、前記複数のコンテキストエントリのうちの複数のコンテキストエントリに格納される、請求項2に記載のシステム。
【請求項4】
前記複数のコンテキストエントリは、前記複数のコンテキストエントリの各々に対して1行ずつ、複数の行を有する表内に編成され、
前記複数の行の各行は、前記行に格納されたスレッドコンテキストの前記複数の実行時コンテキスト値の各々が複数の列の1列に格納されるように、前記複数の列を有する、請求項3に記載のシステム。
【請求項5】
前記データフローグラフは、複数のノードと複数のエッジとを備え、
前記複数のノードのうちの少なくとも1つのノードは、ルックアップテーブルを実装し、
前記第1のスレッドを実行するために前記少なくとも1つの再構成可能な処理グリッドを構成することは、前記複数の列のうちの少なくとも1つの他の列に前記ルックアップテーブルを格納することを備える、請求項4に記載のシステム。
【請求項6】
前記少なくとも1つの再構成可能な処理グリッドは、
前記第1のスレッドの前記少なくとも1つの特定された演算の実行が完了したときに、
前記複数のコンテキストエントリのコンテキストエントリであって、前記第1のスレッドの前記スレッドコンテキストの少なくとも一部を格納するためのものである、コンテキストエントリに、前記第1のスレッドの前記少なくとも1つの特定された演算の実行の結果である少なくとも1つの結果値を格納する、
ようにさらに構成される、請求項2に記載のシステム。
【請求項7】
前記複数のコンテキストエントリのうちの第1のコンテキストエントリは、前記第1のスレッドの複数の実行時コンテキスト値を格納し、
前記少なくとも1つの再構成可能な処理グリッドは、
前記第1のコンテキストエントリの前記複数の実行時コンテキスト値に適用される少なくとも1つのテストの結果に従って、前記第1のコンテキストが完了したという特定情報を計算し、
前記第1のスレッドの前記少なくとも1つの実行時コンテキスト値を取得し、前記第1のコンテキストが完了したという特定情報を条件として、前記少なくとも1つの他の演算を実行する、
ように構成される、請求項2に記載のシステム。
【請求項8】
前記少なくとも1つの再構成可能な処理グリッドは、前記少なくとも1つのテストを前記複数の実行時コンテキスト値に適用するためのディスパッチ回路をさらに備える、請求項7に記載のシステム。
【請求項9】
前記複数の実行時コンテキスト値に前記少なくとも1つのテストを適用することは、前記ディスパッチ回路がテスト命令のセットを実行することを備える、請求項8に記載のシステム。
【請求項10】
前記少なくとも1つの再構成可能な処理グリッドは、ディスパッチポリシーに従って、その前記複数の演算のうちの前記少なくとも1つの他の演算を実行するために前記第1のスレッドを選択するようにさらに構成される、請求項7に記載のシステム。
【請求項11】
前記少なくとも1つの再構成可能な処理グリッドは、
前記複数のコンテキストエントリのうちの、前記第1のスレッドの前記スレッドコンテキストの少なくとも一部を格納するための1つまたは複数のコンテキストエントリに追加されたマークを条件として、
前記第1のスレッドの前記複数の演算のうちの前記少なくとも1つの他の演算の実行を拒否することと、
前記第1のスレッドの前記複数のスレッドコンテキスト値の少なくとも1つを少なくとも1つの他のソフトウェアオブジェクトに提供することと、
のうちの少なくとも1つを実行するようにさらに構成される、請求項7に記載のシステム。
【請求項12】
前記データフローグラフは、複数のノードと複数のエッジとを備え、
前記少なくとも1つの特定された演算は、前記複数のノードのうちの少なくとも1つの特定されたノードによって前記データフローグラフにおいて表され、
前記少なくとも1つのハードウェアプロセッサは、前記データフローグラフにおいて、前記複数のノード、のノードの部分集合と前記複数のエッジの、エッジの部分集合とからなるような部分グラフ(残余部分グラフ)を特定するようにさらに構成され、前記少なくとも1つの特定されたノードのうちの任意の2つのノードの間でデータフローグラフにパスは存在せず、前記ノードの部分集合の各ノードについて、前記少なくとも1つの特定されたノードと前記ノードとの間で前記データフローグラフにパスは存在せず、前記エッジの部分集合の各エッジについて、前記少なくとも1つの特定されたノードと前記エッジとの間でデータフローグラフにパスは存在せず、
前記少なくとも1つの実行時コンテキスト値は、前記エッジの部分集合の少なくとも1つの、少なくとも1つのエッジ値である、
請求項1に記載のシステム。
【請求項13】
前記データフローグラフは、有向グラフであり、
前記複数のエッジの各々は、前記複数のノードの先頭ノードおよび前記複数のノードの末尾ノードを有し、
前記ノードの部分集合は、1つまたは複数のエントリノードの各々は、前記残余部分グラフのエントリノードであり、前記エントリノードが、前記エッジの部分集合のいずれの先頭ノードでもないような、前記1つまたは複数のエントリノードを備え、
前記少なくとも1つの実行時コンテキスト値は、前記1つまたは複数のエントリノードの少なくとも1つの、少なくとも1つの入力値である、
請求項12に記載のシステム。
【請求項14】
前記少なくとも1つの特定された演算は、メモリアクセス演算、浮動小数点数学演算、他の計算グラフの実行、コプロセッサへのアクセス、および前記少なくとも1つの再構成可能な処理グリッドに接続された周辺デバイスへのアクセスのうちの少なくとも1つを備える、請求項1に記載のシステム。
【請求項15】
前記複数の同時実行スレッドは、同時実行スレッドのセットの部分集合であり、前記同時実行スレッドのセットの各々は、データフローグラフを実施し、
前記システムは、他の複数のスレッドコンテキストであって、各々が前記同時実行スレッドのセットの少なくとも1つのためのものである、他の複数のスレッドコンテキストを格納するための、バッファストレージをさらに備え、
前記少なくとも1つのハードウェアプロセッサは、前記少なくとも1つの再構成可能な処理グリッドをさらに構成するために、
1つまたは複数の待機スレッドの1つまたは複数の追加の実行時コンテキスト値を前記バッファストレージに格納することであって、前記1つまたは複数の待機スレッドは、前記複数の同時実行スレッドのメンバではない、格納することと、
複数の反復の各々において、
前記複数の同時実行スレッドのうちの少なくとも1つの追加スレッドの実行が完了したことを特定することと、
前記1つまたは複数の待機スレッドの少なくとも1つについて、その少なくとも1つの追加の実行時コンテキスト値を前記バッファストレージから取得することと、
前記複数の論理素子による実行のために、前記少なくとも1つの待機スレッドを複数の同時実行スレッドに追加することと、
を行うようにさらに構成される、
請求項1に記載のシステム。
【請求項16】
前記少なくとも1つの再構成可能な処理グリッドは、
前記1つまたは複数の待機スレッドを追跡するための登録器回路と、
前記複数の同時実行スレッドの実行を管理するための追加のディスパッチ回路と、
をさらに備え、
前記追加のディスパッチ回路は、
前記登録器回路から前記少なくとも1つの待機スレッドを選択することと、
前記少なくとも1つの待機スレッドの前記少なくとも1つの追加の実行時コンテキスト値を前記バッファストレージから取得することと、
前記複数の論理素子による実行のために、前記少なくとも1つの待機スレッドを前記複数の同時実行スレッドに追加することと、
を行うように構成された、請求項15に記載のシステム。
【請求項17】
前記少なくとも1つの待機スレッドを前記複数の同時実行スレッドに追加することは、前記少なくとも1つの待機スレッドの前記少なくとも1つの追加の実行時コンテキスト値を、前記コンテキストストレージに格納することを備える、
請求項16に記載のシステム。
【請求項18】
前記追加のディスパッチ回路は、
前記少なくとも1つの待機スレッドの各々に、前記コンテキストストレージにおける前記待機スレッドのスレッドコンテキストを示すコンテキスト識別値を関連付ける、
ようにさらに構成される、請求項16に記載のシステム。
【請求項19】
前記バッファストレージは、それぞれが前記1つまたは複数の待機スレッドのうちの少なくとも1つ、のスレッドコンテキストを格納するための、複数のバッファエントリを備え、
前記登録器回路は、それぞれが前記1つまたは複数の待機スレッドのうちの少なくとも1つを追跡するための複数の登録器エントリを備え、
前記追加のディスパッチ回路は、
前記1つまたは複数の待機スレッドのうちの少なくとも1つの待機スレッドのグループに対して、前記少なくとも1つの待機スレッドのグループの各々に関連付けられた共通のスレッドコンテキストを前記バッファストレージに生成することと、
前記少なくとも1つの待機スレッドのグループの各々に関連付けられた共通の登録器エントリを登録器回路に生成することと、
前記少なくとも1つの待機スレッドとして前記少なくとも1つの待機スレッドのグループの新しいスレッドを前記登録器回路から選択するときに、前記新しいスレッドの少なくとも1つのプライベートコンテキスト値を計算することと、
を行うようにさらに構成される、請求項16に記載のシステム。
【請求項20】
前記登録器回路は、前記1つまたは複数の待機スレッドの量が閾値を超えるまで、前記同時実行スレッドのセットの少なくとも一部の実行をストールするようにさらに構成される、請求項16に記載のシステム。
【請求項21】
前記複数の論理素子は、複数の計算グループに編成された、複数の再構成可能な論理素子であり、
前記少なくとも1つの特定された論理素子は、前記複数の計算グループの部分集合である、請求項1に記載のシステム。
【請求項22】
前記データフローグラフの実行時コンテキスト値は、前記データフローグラフの複数のノードの、ノードの入力値または出力値である、請求項1に記載のシステム。
【請求項23】
前記少なくとも1つのハードウェアプロセッサは、複数のスレッド反復の各々において前記第1のスレッドを実行するために前記少なくとも1つの再構成可能な処理グリッドを構成するようにさらに構成され、
前記コンテキストストレージは、前記データフローグラフの追加の複数の実行時コンテキスト値を格納するための少なくとも1つの追加のコンテキストエントリを備え、前記追加の複数の実行時コンテキスト値は、前記複数のスレッド反復に共通であり、
前記第1のスレッドの前記少なくとも1つの特定された演算の実行が完了すると、前記再構成可能な処理グリッドは、前記追加の複数の実行時コンテキスト値のうちの少なくとも1つを前記コンテキストストレージから取得するようにさらに構成される、
請求項1に記載のシステム。
【請求項24】
前記少なくとも1つの再構成可能な処理グリッドは、少なくとも1つの他のコンテキストストレージをさらに備え、
前記少なくとも1つのハードウェアプロセッサは、前記少なくとも1つの再構成可能な処理グリッド構成するために、
前記第1のスレッドの前記少なくとも1つの特定された演算の実行が完了したときに、
前記第1のスレッドの少なくとも1つの追加の実行時コンテキスト値を前記少なくとも1つの他のコンテキストストレージに格納することと、
前記第1のスレッドをさらに実行することと、
前記第1のスレッドをさらに実行する間に、
前記複数の論理素子のうちの少なくとも1つの他の特定された論理素子による、前記第1のスレッドの前記複数の演算のうちの少なくとも1つの他の特定された演算のさらなる実行の完了を待機する間に、前記少なくとも1つの他の特定された論理素子によって、前記複数のスレッドのうちの他の第2のスレッドの前記少なくとも1つの他の特定された演算を実行する、
ようにさらに構成される、
請求項1に記載のシステム。
【請求項25】
前記少なくとも1つの再構成可能な処理グリッドは、少なくとも1つのカウンタをさらに備え、
前記複数の同時実行スレッドは、前記少なくとも1つのカウンタに関連付けられた同時実行スレッドのグループを備え、
前記少なくとも1つの実行時コンテキスト値は、前記少なくとも1つのカウンタにアクセスすることによって前記少なくとも1つのカウンタから読み出される少なくとも1つのカウンタ値を備える、請求項1に記載のシステム。
【請求項26】
前記同時実行スレッドのグループの各々は、特定されたデータフローグラフを実施する、請求項25に記載のシステム。
【請求項27】
前記少なくとも1つのカウンタにアクセスすることは、前記少なくとも1つのカウンタの読み出しと前記少なくとも1つのカウンタのインクリメントとを備えるアトミックアクセスを備える、請求項25に記載のシステム。
【請求項28】
前記少なくとも1つのカウンタは、カウンタのシーケンスであり、
前記少なくとも1つのカウンタをインクリメントすることは、
モジュラ算術を用いて前記カウンタのシーケンスの第1のカウンタをインクリメントし、インクリメントされた後に前記第1のカウンタが折り返す(wrap around)ことを条件として、前記カウンタのシーケンスで前記第1のカウンタに連続する第2のカウンタをインクリメントすることと、
前記カウンタのシーケンスの第1のカウンタをインクリメントすることであって、前記第1のカウンタが最大値を超えることを条件として、
前記カウンタのシーケンスで前記第1のカウンタに連続する第2のカウンタをインクリメントすることと、
前記第1のカウンタを、前記第2のカウンタを使用して計算された新しい値に設定すること、および、
前記最大値を、前記第2のカウンタを使用して計算された他の新しい値に設定すること、
の少なくとも1つと、を行う、第1のカウンタをインクリメントすることと、
の少なくとも1つを備える、請求項27に記載のシステム。
【請求項29】
複数の同時実行スレッドを処理する方法であって、
前記複数の同時実行スレッドの第1のスレッドを実行することであって、各同時実行スレッドは、少なくとも1つの特定された演算を備える複数の演算を備えるデータフローグラフを実施する、実行することと、
前記第1のスレッドの実行中に、
前記第1のスレッドによって実施される前記データフローグラフの少なくとも1つの実行時コンテキスト値を、コンテキストストレージに格納することであって、前記コンテキストストレージは、複数のスレッドコンテキストを格納するように構成され、各スレッドコンテキストは、前記複数の同時実行スレッドのうちの1つのためのものであり、前記複数のスレッドコンテキストの各々は、その同時実行スレッドに対して、前記その同時実行スレッドによって実施されるデータフローグラフの前記少なくとも1つの実行時コンテキスト値を備える、格納することと、
複数の論理素子のうちの前記少なくとも1つの特定された論理素子による、前記第1のスレッドの前記複数の演算のうちの前記少なくとも1つの特定された演算の実行の完了を待機する間に、前記少なくとも1つの特定された論理素子によって、前記複数の同時実行スレッドのうちの第2のスレッドの前記少なくとも1つの特定された演算を実行することと、
前記第1のスレッドの前記少なくとも1つの特定された演算の実行が完了したときに、
前記コンテキストストレージから前記第1のスレッドの前記少なくとも1つの実行時コンテキスト値を取得することと、
前記第1のスレッドの前記複数の演算のうちの少なくとも1つの他の演算を実行することと、
を備える、方法。
【請求項30】
複数の同時実行スレッドを実行するためのソフトウェアプログラム製品であって、
非一過性のコンピュータ可読記憶媒体と、
複数の同時実行スレッドの第1のスレッドを実行するための第1のプログラム命令であって、各同時実行スレッドは、少なくとも1つの特定された演算を備える複数の演算を備えるデータフローグラフを実施する、第1のプログラム命令と、
第2のプログラム命令であって、前記第1のスレッドの実行中に、
前記第1のスレッドによって実施される前記データフローグラフの少なくとも1つの実行時コンテキスト値を、コンテキストストレージに格納することであって、前記コンテキストストレージは、複数のスレッドコンテキストを格納するように構成され、各スレッドコンテキストは、前記複数の同時実行スレッドのうちの1つのためのものであり、前記複数のスレッドコンテキストの各々は、その同時実行スレッドに対して、前記その同時実行スレッドによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を備える、格納することと、
複数の論理素子のうちの前記少なくとも1つの特定された論理素子による、前記第1のスレッドの前記複数の演算のうちの前記少なくとも1つの特定された演算の実行の完了を待機する間に、前記少なくとも1つの特定された論理素子によって、前記複数の同時実行スレッドのうちの第2のスレッドの前記少なくとも1つの特定された演算を実行することと、
前記第1のスレッドの前記少なくとも1つの特定された演算の実行が完了したときに、
前記コンテキストストレージから前記第1のスレッドの前記少なくとも1つの実行時コンテキスト値を取得することと、
前記第1のスレッドの前記複数の演算のうちの少なくとも1つの他の演算を実行することと、
を行うための、第2のプログラム命令と、
を備え、
前記第1および第2のプログラム命令は、前記非一過性のコンピュータ可読記憶媒体から、少なくとも1つのコンピュータ化プロセッサによって実行される、
ソフトウェアプログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願]
本出願は、2023年7月5日に出願された米国特許出願第18/218,152号の優先権の利益を主張するものであり、その内容は参照によりその全体が本明細書に組み込まれる。
【0002】
本出願は、2023年7月5日に出願された米国特許出願第18/409,869号とも関連する。上記出願の内容は、参照により、その全体が本明細書に完全に記載されているかの如く組み込まれる。
【0003】
本開示に記載されるいくつかの実施形態は、再構成可能な処理グリッドに関し、より具体的には、これに限定されないが、再構成可能な処理グリッド上で1つまたは複数のデータフローグラフを実行することに関する。
【背景技術】
【0004】
本明細書で使用されるように、再構成可能な処理グリッドという用語は、複数の再構成可能なデータ経路制御分岐によって接続された複数の再構成可能な論理素子を含む処理回路を意味し、複数の再構成可能な論理素子および追加的または代替的に複数の再構成可能なデータ経路制御分岐は、1つまたは複数の反復の各々において、1つまたは複数の演算を実行するように操作され得る。本明細書で使用されるように、データフローという用語は、ソフトウェアプログラムの少なくとも一部を、演算のシーケンスがデータフローグラフのデータ要素のシーケンス内の各データ要素に適用されるように、演算の間を流れるデータの有向グラフ(データフローグラフ)としてモデル化するコンピュータプログラミングのパラダイムを意味する。任意選択で、データフローグラフは、それぞれがデータ要素に演算を適用する複数のノードと、それぞれが複数のノードの2つを接続し、2つのノード間のデータの流れを示す複数の有向エッジと、を備える。コンピュータサイエンスの分野では、実行スレッドとは、スケジューラによって独立して管理できるコンピュータ命令のシーケンスのことである。簡潔にするために、「スレッド」という用語は、「実行スレッド」という意味で使用され、この用語は、本明細書では、互換的に使用される。スレッドは、データフローグラフを実施することができる。本明細書で使用されるように、「投影」という用語は、データフローグラフを実行するために、再構成可能な処理グリッドの1つまたは複数の再構成可能な論理素子を操作するプロセス、追加的または代替的に、再構成可能な処理グリッドの1つまたは複数の再構成可能なデータ経路制御分岐を操作するプロセスを指す。したがって、データフローグラフを実施するスレッドを再構成可能な処理グリッドに投影するとは、スレッドによって実施されるデータフローグラフを実行するために、再構成可能な処理グリッドの1つまたは複数の再構成可能な論理素子を操作することによって再構成可能な処理グリッドを構成すること、追加的または代替的に、再構成可能な処理グリッドの1つまたは複数の再構成可能なデータ経路制御分岐を操作することを指す。
【0005】
コンピュータサイエンスの分野では、同時実行コンピュータ演算(concurrent computing)とは、ソフトウェアプログラムの複数の実行スレッドを同時に実行することを指す。ソフトウェアプログラムの複数のスレッドを同時に実行することで、システム全体の性能と応答性を向上させることができる。システムの性能を測定するために使用されるメトリックには、特定された時間内にシステムによって実行されるタスクの量(スループット)、タスクの実行が完了するまでの時間の両(レイテンシ)、およびシステムが動作時に使用するコンピュータメモリの量が含まれるが、これらに限定されない。同時実行コンピュータ演算は、システムのスループットを向上させ、レイテンシを短縮するために使用することができる。
【0006】
複数の同時実行スレッドの各々は、1つまたは複数の特定された演算を備えてもよい。再構成可能な処理グリッド上で複数の同時実行スレッドを同時に実行する場合、複数の同時実行スレッドの各同時実行スレッドは、再構成可能な処理グリッドの一部に投影される、すなわち、再構成可能な処理グリッドの複数の論理素子の一部が、例えば、同時実行スレッドによって実施されるデータフローグラフを実行するために、同時実行スレッドを実行するように操作される。
【0007】
完了までのレイテンシが一定でないコンピュータ命令が存在する。このような動作は、複数回実行されたときに実行に必要な時間が異なる場合があり、追加的または代替的に、他の命令よりも完了までに多くの時間を必要とする場合がある。このような不整合レイテンシの演算の例には、メモリアクセス、周辺デバイスへのアクセス、演算カーネルの実行などが含まれるが、これらに限定されるものではない。
【発明の概要】
【課題を解決するための手段】
【0008】
本開示に記載されるいくつかの実施形態の目的は、それぞれが複数の同時実行スレッドの1つのためのものである複数のスレッドコンテキストをそれぞれコンテキストストレージに格納し、再構成可能な処理グリッド上で複数の同時実行スレッドの実行を管理するためにコンテキストストレージを使用することによって、複数の同時実行スレッドを実行するシステムおよび方法を提供することである。任意選択で、第1のスレッドの特定された演算を実行するために操作される1つまたは複数の論理素子は、第1のスレッドがその特定された演算の完了を保留している間、第2のスレッドの特定された演算を実行するために1つまたは複数の論理素子を再構成することなく使用される。任意選択で、特定された演算は、不整合レイテンシを有する。
【0009】
前述の目的および他の目的は、独立請求項の特徴によって達成される。さらなる実施形態は、従属請求項、明細書、および図面から明らかである。
【0010】
第1の態様によれば、複数の同時実行スレッドを処理するためのシステムは、複数の論理素子と、複数のスレッドコンテキストを格納するように構成されたコンテキストストレージとを備える、少なくとも1つの再構成可能な処理グリッドであって、各スレッドコンテキストは、複数の同時実行スレッドのうちの1つのためのものであり、各同時実行スレッドは、少なくとも1つの特定された演算を含む複数の演算を備えるデータフローグラフを実施し、複数のスレッドコンテキストの各々は、その同時実行スレッドについて、それによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を備える、再構成可能な処理グリッドと、前記少なくとも1つの再構成可能な処理グリッドを構成するための少なくとも1つのハードウェアプロセッサであって、前記複数の同時実行スレッドの第1のスレッドを実行することと、前記第1のスレッドを実行中に、第1のスレッドの少なくとも1つの実行時コンテキスト値をコンテキストストレージに格納することと、複数の論理素子のうちの少なくとも1つの特定された論理素子による第1のスレッドの複数の演算のうちの少なくとも1つの特定された演算の実行の完了を待機する間に、少なくとも1つの特定された論理素子によって複数のスレッドのうちの第2のスレッドの少なくとも1つの特定された演算を実行することと、第1のスレッドの少なくとも1つの特定された演算の実行が完了したときに、コンテキストストレージから第1のスレッドの少なくとも1つの実行時コンテキスト値を取得することと、第1のスレッドの複数の演算のうちの少なくとも1つの他の演算を実行することと、を行うように構成される。複数の同時実行スレッドの各々についてスレッドコンテキストをコンテキストストレージに格納することにより、処理グリッドを操作することなく、複数の同時実行スレッドのうちの1つまたは複数の実行を一時停止および再開することが可能になり、したがって、1つまたは複数の特定された論理素子が、第1のスレッドの1つまたは複数の演算の実行が完了するのを待機するアイドル状態である時間の量を低減する複雑さが低減される。これにより、システムのスループットが増加し、その1つまたは複数のタスクを実行する際のシステムのレイテンシが短縮される。
【0011】
第2の態様によれば、複数の同時実行スレッドを処理するための方法は、複数の同時実行スレッドの第1のスレッドを実行することであって、各同時実行スレッドは、少なくとも1つの特定された演算を備える複数の演算を備えるデータフローグラフを実施する、実行することと、第1のスレッドを実行している間に、複数のスレッドコンテキストを格納するように構成され たコンテキストストレージに第1のスレッドによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を格納することであって、各スレッドコンテキストは、複数の同時実行スレッドのうちの1つのためのスレッドコンテキストであり、複数のスレッドコンテキストの各々は、その同時実行スレッドについて、それによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を含備える、格納することと、複数の論理素子のうちの少なくとも1つの特定された論理素子によって第1のスレッドの複数の演算のうちの少なくとも1つの特定された演算の実行の完了を待機する間に、少なくとも1つの特定された論理素子によって複数のスレッドのうちの第2のスレッドの少なくとも1つの特定された演算を実行することと、第1のスレッドの少なくとも1つの特定された演算の実行が完了したときに、コンテキストストレージから第1のスレッドの少なくとも1つの実行時コンテキスト値を取得することと、第1のスレッドの複数の演算のうちの少なくとも1つの他の演算を実行することと、を備える。
【0012】
第3の態様によれば、複数の同時実行スレッドを実行するためのソフトウェアプログラム製品は、非一過性のコンピュータ可読記憶媒体と、複数の同時実行スレッドの第1のスレッドを実行するための第1のプログラム命令であって、各同時実行スレッドは、少なくとも1つの特定された演算を備える複数の演算を備えるデータフローグラフを実施する、第1のプログラム命令と、第1のスレッドの実行中に、第1のスレッドによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を、コンテキストストレージに格納することであって、コンテキストストレージは、複数のスレッドコンテキストを格納するように構成され、各スレッドコンテキストは、複数の同時実行スレッドのうちの1つのためのスレッドコンテキストであり、複数のスレッドコンテキストの各々は、その同時実行スレッドについて、それによって実施されるデータフローグラフの少なくとも1つの実行時コンテキスト値を備える、格納することと、複数の論理素子のうちの少なくとも1つの特定された論理素子による、第1のスレッドの複数の演算のうちの少なくとも1つの特定された演算の実行の完了を待機する間に、少なくとも1つの特定された論理素子によって、複数のスレッドのうちの第2のスレッドの少なくとも1つの特定された演算を実行することと、第1のスレッドの少なくとも1つの特定された演算の実行が完了したときに、第1のスレッドの少なくとも1つの実行時コンテキスト値をコンテキストストレージから取得するステップと、第1のスレッドの複数の演算のうちの少なくとも1つの他の演算を実行するステップとを含む、第2のプログラム命令とを備え、第1および第2のプログラム命令は、非一過性のコンピュータ可読記憶媒体から少なくとも1つのコンピュータ化されたプロセッサによって実行される。
【0013】
第1および第2の態様を参照すると、第1および第2の態様の第1の可能な実施態様では、コンテキストストレージは、複数のコンテキストエントリを備え、各コンテキストエントリは、複数のスレッドコンテキストのうちの1つの複数の実行時コンテキスト値を格納するためのものである。複数のスレッドコンテキストのうちの1つの複数の実行時コンテキスト値を格納するためにコンテキストエントリを使用することにより、複数のスレッドの各スレッドを他のスレッドから独立して復元することが可能になり、1つまたは複数の特定された論理素子の使用における柔軟性が向上し、したがって、1つまたは複数の特定された論理素子が第1のスレッドの1つまたは複数の演算の実行が完了するのを待機するアイドル状態の時間が短縮される。
【0014】
第1および第2の態様、または第1および第2の態様の第1の実施態様を参照すると、複数の同時実行スレッドの少なくとも1つのスレッドに対する第1および第2の態様の第2の可能な実施態様では、少なくとも1つのスレッドの複数の実行時コンテキスト値は、複数のコンテキストエントリのうちの複数のコンテキストエントリに格納される。複数のコンテキストエントリを使用して1つのスレッドの複数の実行時コンテキスト値を格納することにより、スレッドは、単一のエントリに収まらない量の実行時コンテキスト値を有する大きなコンテキストを有することができ、単一のエントリにスレッドの複数の実行時コンテキスト値を格納することに比べてシステムの使い勝手が向上する。任意選択で、複数のコンテキストエントリは、複数のコンテキストエントリのそれぞれに1つ、複数の行を有する表に編成される。任意選択で、複数の行の各行は複数の列を有し、行に格納されたスレッドコンテキストの複数の実行時コンテキスト値の各々は複数の列の1列に格納される。複数のコンテキストエントリを表に編成することにより、複数のコンテキストエントリの使いやすさが向上し、エントリのインデックス番号による値の参照、および追加的または代替的に列のインデックス番号による値の参照が可能になる。任意選択で、少なくとも1つの再構成可能な処理グリッドは、第1のスレッドを実行している間、第1のスレッドの少なくとも1つの実行時コンテキスト値をコンテキストストレージの少なくとも1つの特定された列に格納し、第1のスレッドの少なくとも1つの他の実行時コンテキスト値をコンテキストストレージの少なくとも1つの特定された列に格納するようにさらに構成される。コンテキストエントリを再利用することにより、コンテキストストレージを実施するために必要なストレージの量を削減することができ、実装コストを削減することができる。任意選択で、データフローグラフは、複数のノードと複数のエッジとを備える。任意選択で、複数のノードのうちの少なくとも1つのノードは、ルックアップテーブルを実装し、第1のスレッドを実行するために少なくとも1つの再構成可能な処理グリッドを構成することは、複数の列のうちの少なくとも1つの他の列にルックアップテーブルを格納することを備える。ルックアップテーブルをコンテキストストレージの1つまたは複数の列に格納することで、アプリケーションメモリに実装するよりもルックアップテーブルの値へのアクセスが高速になり、スレッドがルックアップテーブルの値にアクセスする時間が短縮され、追加的または代替的に、コンテキスト値がルックアップテーブルから駆動されるときにスレッドのコンテキストを作成する時間が短縮される。
【0015】
第1および第2の態様、または第1および第2の態様の第1の実施態様を参照すると、第1および第2の態様の第3の可能な実施態様において、少なくとも1つの再構成可能な処理グリッドは、第1のスレッドの少なくとも1つの特定された演算の実行が完了すると、複数のコンテキストエントリの、第1のスレッドのスレッドコンテキストの少なくとも一部を格納するためのものであるコンテキストエントリに、第1のスレッドの少なくとも1つの特定された演算の実行の結果である少なくとも1つの結果値を格納するように、さらに構成される。コンテキストエントリに結果値を格納することで、1つまたは複数の特定された演算の実行が完了した後に再開されたときのスレッドのコンテキストの精度が増加する。
【0016】
第1および第2の態様、または第1および第2の態様の第1の実施態様を参照すると、第1および第2の態様の第4の可能な実施では、複数のコンテキストエントリの第1のコンテキストエントリが、第1のスレッドの複数の実行時コンテキスト値を格納し、少なくとも1つの再構成可能な処理グリッドは、第1のコンテキストエントリの複数の実行時コンテキスト値に適用される少なくとも1つのテストの結果に従って、第1のコンテキストが完了したという特定情報を計算することと、第1のスレッドの少なくとも1つの実行時コンテキスト値を取得し、第1のコンテキストが完了したという特定情報を条件として少なくとも1つの他の演算を実行することとを行うように構成される。任意選択で、少なくとも1つの再構成可能な処理グリッドは、複数の実行時コンテキスト値に少なくとも1つのテストを適用するためのディスパッチ回路をさらに備える。任意選択で、少なくとも1つのテストを複数の実行時コンテキスト値に適用することは、ディスパッチ回路がテスト命令のセットを実行することを備える。テスト命令のセットを実行するディスパッチ回路を使用することにより、各テストについて異なるテスト命令のセットを実行することによって複数のテストを実施することができ、1つまたは複数のテストを適用する結果の精度を高めることが容易になり、したがって、第1のコンテキストが完了したという特定情報の精度を増加させることが容易になる。任意選択で、第1のコンテキストエントリは、それぞれが複数の実行時コンテキスト値のうちの1つに関連付けられた複数の有効性ビットを備え、複数の実行時コンテキスト値に少なくとも1つのテストを適用することは、複数の有効性ビットに特定されたビット単位のマスクを適用することを備える。複数の有効性ビットにビット単位のマスクを適用することにより、複数の実行時コンテキスト値の複数の有効性値をチェックするのに必要な時間が短縮される。任意選択で、少なくとも1つの再構成可能な処理グリッドは、ディスパッチポリシーに従って、その複数の演算のうちの少なくとも1つの他の演算を実行するための第1のスレッドを選択するようにさらに構成される。1つまたは複数の再構成可能な処理グリッドによって第1のスレッドを選択することは、例えば、1つまたは複数のハードウェアプロセッサが1つまたは複数の処理グリッドの一部でない場合に、処理グリッドの外部の処理回路によって第1のスレッドを選択することと比較して、1つまたは複数の他の演算の実行までのレイテンシを短縮する。任意選択で、少なくとも1つの再構成可能な処理グリッドは、第1のスレッドを選択する前に、少なくとも1つの他のコンテキストエントリの少なくとも1つの他の複数の実行時コンテキスト値に少なくとも1つのテストを適用した少なくとも1つの他の結果に従って、少なくとも1つの他のコンテキストが完了したという他の特定情報を計算するようにさらに構成される。第1のスレッドを選択する前に1つまたは複数の他のコンテキストが完了したことを特定することにより、実行するスレッド、例えば、コンテキストが1つまたは複数の他のコンテキストである他のスレッドを柔軟に選択することができ、第1のスレッドのみを選択することに制限されることに比べて、システム全体の性能を向上させることが容易になる。任意選択で、少なくとも1つの再構成可能な処理グリッドは、複数のコンテキストエントリのうちの、第1のスレッドのスレッドコンテキストの少なくとも一部を格納するためのものである1つまたは複数のコンテキストエントリに追加されたマークを条件として、第1のスレッドの複数の演算のうちの少なくとも1つの他の演算の実行を拒否することと、第1のスレッドの複数のスレッドコンテキスト値のうちの少なくとも1つを少なくとも1つの他のソフトウェアオブジェクトに提供することと、のうちの少なくとも1つを実行するようにさらに構成される。マークを使用することで、どのスレッドを誰が実行するかを柔軟に選択することができ、第1のスレッドの実行を再開し、再開後にスレッドを終了することに限定される場合と比較して、システム全体の性能を向上させることが容易になる。
【0017】
第1および第2の態様を参照すると、第1および第2の態様の第5の可能な実施態様では、データフローグラフは、複数のノードと複数のエッジとを備える。任意選択で、少なくとも1つの特定された演算は、複数のノードのうちの少なくとも1つの特定されたノードによってデータフローグラフにおいて表される。任意選択で、少なくとも1つのハードウェアプロセッサは、データフローグラフにおいて、複数のノードのうちのノードの部分集合と複数のエッジのうちのエッジの部分集合とから構成されるような部分グラフ(残余部分グラフ)を特定するようにさらに構成され、残余部分グラフは、少なくとも1つの特定されたノードのうちの任意の2つのノードの間にデータフローグラフでパスが存在せず、ノードの部分集合の各ノードについて、少なくとも1つの特定されたノードとノードとの間にデータフローグラフでパスは存在せず、エッジの部分集合の各エッジについて、少なくとも1つの特定されたノードとエッジとの間にデータフローグラフでパスは存在せず、少なくとも1つの実行時コンテキスト値は、エッジの部分集合の少なくとも1つのエッジ値である。1つまたは複数の特定されたノードと残余部分グラフ内の任意のノードとの間のパスがデータフローグラフに存在しない残余部分グラフをフローのコンテキストとして使用すると、1つまたは複数の特定された演算の実行が完了したときに、残余部分グラフの一部でないデータフローグラフの他の部分の実行が残余部分グラフの実行に影響せず、その逆も同様である ため、コンテキストの精度が向上する。任意選択で、データフローグラフは、有向グラフである。任意選択で、複数のエッジの各々は、複数のノードの先頭ノードと複数のノードの末尾ノードとを有し、ノードの部分集合は、1つまたは複数のエントリノードの各々が、エントリノードがエッジの部分集合のいずれの先頭ノードでもない残余部分グラフのエントリノードであるように、1つまたは複数のエントリノードを備える、少なくとも1つの実行時コンテキスト値は、1つまたは複数のエントリノードの少なくとも1つの少なくとも1つの入力値である。
【0018】
第1および第2の態様を参照すると、第1および第2の態様の第6の可能な実施態様では、少なくとも1つの特定された演算は、メモリアクセス演算、浮動小数点数学演算、他の計算グラフの実行、コプロセッサへのアクセス、および少なくとも1つの再構成可能な処理グリッドに接続された周辺デバイスへのアクセスのうちの少なくとも1つを備える。
【0019】
第1および第2の態様を参照すると、第1および第2の態様の第7の可能な実施態様では、複数の同時実行スレッドは、同時実行スレッドのセットの部分集合であり、同時実行スレッドのセットの各々は、データフローグラフを実施する。任意選択で、システムはさらに、同時実行スレッドのセットの少なくとも1つについてそれぞれ他の複数のスレッドコンテキストを格納するための、バッファストレージを備える。任意選択で、少なくとも1つのハードウェアプロセッサは、少なくとも1つの再構成可能な処理グリッドをさらに構成するために、1つまたは複数の待機スレッドの1つまたは複数の追加の実行時コンテキスト値をバッファストレージに格納することであって、1つまたは複数の待機スレッドは、複数の同時実行スレッドのメンバではない、格納することと、複数の反復の各々において、複数の同時実行スレッドの少なくとも1つの追加スレッドの実行が完了したことを特定することと、1つまたは複数の待機スレッドの少なくとも1つについて、その少なくとも1つの追加の実行時コンテキスト値をバッファストレージから取得することと、複数の論理素子による実行のために、複数の同時実行スレッドに少なくとも1つの待機スレッドを追加することと、を行うように構成される。複数の同時実行スレッドのメンバでない待機スレッドの1つまたは複数の追加の実行時コンテキスト値を格納するためにバッファストレージを使用することにより、コンテキストストレージによって一度に同時にサポートされるスレッドよりも多くのスレッドを実行するために複数の論理素子を再利用することができ、レイテンシを短縮し、追加的または代替的にスループットを向上させるという点で、システムの全体的な性能をさらに向上させることができる。任意選択で、少なくとも1つの再構成可能な処理グリッドは、1つまたは複数の待機スレッドを追跡するための登録器回路と、複数の同時実行スレッドの実行を管理するための追加のディスパッチ回路とをさらに備える。任意選択で、追加のディスパッチ回路は、登録器回路から少なくとも1つの待機スレッドを選択することと、バッファストレージから少なくとも1つの待機スレッドの少なくとも1つの追加の実行時コンテキスト値を取得することと、複数の論理素子による実行のために少なくとも1つの待機スレッドを複数の同時実行スレッドに追加することと、を行うように構成される。1つまたは複数の待機スレッドを追跡するための登録器回路と、複数の同時実行スレッドの実行を管理するための追加のディスパッチ回路とを使用することにより、1つまたは複数のハードウェアプロセッサによる実行の管理と比較して、複数の同時実行スレッドの1つまたは複数のスレッドを実行のためにスケジューリングする際のレイテンシが短縮される。任意選択で、少なくとも1つの待機スレッドを複数の同時実行スレッドに追加することは、少なくとも1つの待機スレッドの少なくとも1つの追加実行時コンテキスト値をコンテキストストレージに格納することを含む。任意選択で、追加ディスパッチ回路は、少なくとも1つの待機スレッドのそれぞれに、コンテキストストレージにおける待機スレッドのスレッドコンテキストを示すコンテキスト識別値を関連付けるようにさらに構成される。任意選択で、追加のディスパッチ回路は、複数の反復の第1の反復において、特定されたコンテキスト識別値を1つまたは複数の待機スレッドの第1の待機スレッドに関連付けることと、複数の反復の第2の反復において、第1の待機スレッドの実行が完了したことを特定することと、特定されたコンテキスト識別値を1つまたは複数の待機スレッドの第2の待機スレッドに関連付けることと、を行うようにさらに構成される。任意選択で、バッファストレージは、複数のバッファエントリを備え、それぞれが1つまたは複数の待機スレッドの少なくとも1つの、スレッドコンテキストを格納する。任意選択で、登録器回路は、それぞれが1つまたは複数の待機スレッドのうちの少なくとも1つを追跡するための複数の登録器エントリを備える。任意選択で、追加のディスパッチ回路は、1つまたは複数の待機スレッドのうちの少なくとも1つの待機スレッドのグループに対して、少なくとも1つの待機スレッドのグループのそれぞれに関連付けられた共通のスレッドコンテキストをバッファストレージで生成することと、少なくとも1つの待機スレッドのグループのそれぞれに関連付けられた共通の登録器エントリを登録器回路で生成することと、少なくとも1つの待機スレッドとして少なくとも1つの待機スレッドのグループの新しいスレッドを登録器回路から選択するときに、新しいスレッドの少なくとも1つのプライベートコンテキスト値を計算することと、を行うようにさらに構成される。任意選択で、登録器回路は、1つまたは複数の待機スレッドの量が閾値を超えるまで、同時実行スレッドのセットの少なくとも一部の実行をストールするようにさらに構成される。1つまたは複数の待機スレッドの量が閾値を超えるのを待機することで、1つまたは複数の待機スレッドをバッチで複数の同時実行スレッドに追加することが可能になり、そのような構成のオーバーヘッドが削減され、待機スレッドが利用可能になったときに実行するのに比べてシステム性能のさらなる向上が容易になる。
【0020】
第1および第2の態様を参照すると、第1および第2の態様の第8の可能な実施態様では、複数の論理素子は、複数の計算グループに編成された複数の再構成可能な論理素子であり、少なくとも1つの特定された論理素子は、複数の計算グループの部分集合である。
【0021】
第1および第2の態様を参照すると、第1および第2の態様の第9の可能な実施態様では、データフローグラフの実行時コンテキスト値は、データフローグラフの複数のノードの、ノードの入力値または出力値である。
【0022】
第1および第2の態様を参照すると、第1および第2の態様の第10の可能な実施態様では、少なくとも1つのハードウェアプロセッサは、複数のスレッド反復の各々において第1のスレッドを実行するために少なくとも1つの再構成可能な処理グリッドを構成するようにさらに構成される。任意選択で、コンテキストストレージは、データフローグラフの追加の複数の実行時コンテキスト値を格納するための少なくとも1つの追加のコンテキストエントリを備え、追加の複数の実行時コンテキスト値は、複数のスレッド反復に共通であり、第1のスレッドの少なくとも1つの特定された演算の実行が完了すると、再構成可能な処理グリッドは、追加の複数の実行時コンテキスト値のうちの少なくとも1つをコンテキストストレージから取得するようにさらに構成される。複数のスレッドの反復に共通する追加のコンテキスト値を格納するために1つまたは複数の追加のコンテキストエントリを使用することは、複数のスレッドの反復のうちの複数のために追加のコンテキスト値を複製することと比較して、コンテキストストレージのサイズを縮小し、実装のコストを低減することを可能にする。
【0023】
第1および第2の態様を参照して、第1および第2の態様の第11の可能な実施態様では、少なくとも1つの再構成可能な処理グリッドは、少なくとも1つの他のコンテキストストレージをさらに備える。任意選択で、少なくとも1つのハードウェアプロセッサは、少なくとも1つの再構成可能な処理グリッドを構成するために、第1のスレッドの少なくとも1つの特定された演算の実行が完了したときに、第1のスレッドの少なくとも1つの追加の実行時コンテキスト値を少なくとも1つの他のコンテキストストレージに格納することと、第1のスレッドをさらに実行することと、第1のスレッドをさらに実行する間に、複数の論理素子のうちの少なくとも1つの他の特定された論理素子による、第1のスレッドの複数の演算のうちの少なくとも1つの他の特定された演算のさらなる実行の完了を待機する間に、少なくとも1つの他の特定された論理素子によって、複数のスレッドのうちの他の第2のスレッドの少なくとも1つの他の特定された演算を実行することと、を行うように構成される。1つまたは複数のコンテキストストレージを使用することで、1つまたは複数の予測不可能なレイテンシ演算に対して別々のスケジューリングをカスケードすることができ、レイテンシの削減と、追加的または代替的にスループットの向上という点で、システム性能をさらに向上させることができる。
【0024】
第1および第2の態様を参照すると、第1および第2の態様の第12の可能な実施態様では、少なくとも1つの再構成可能な処理グリッドは、少なくとも1つのカウンタをさらに備え、複数の同時実行スレッドは、少なくとも1つのカウンタに関連付けられた同時実行スレッドのグループを備え、少なくとも1つの実行時コンテキスト値は、少なくとも1つのカウンタにアクセスすることによって少なくとも1つのカウンタから読み出される少なくとも1つのカウンタ値を備える。同時実行スレッドのグループに関連付けられた共通のカウンタを維持することで、他のコンテキスト値が共通である場合に、同時実行スレッドのグループの各々に固有の値を提供することができ、同時実行スレッドのグループの演算の精度が向上する。任意選択で、同時実行スレッドのグループの各々は、特定されたデータフローグラフを実施する。任意選択で、少なくとも1つのカウンタへのアクセスは、少なくとも1つのカウンタを読み取り、少なくとも1つのカウンタをインクリメントすることを備えるアトミックアクセスを備える。任意選択で、少なくとも1つのカウンタは、カウンタのシーケンスである。任意選択で、少なくとも1つのカウンタをインクリメントすることは、モジュラ算術を使用してカウンタのシーケンスの第1のカウンタをインクリメントすることと、カウンタのシーケンスで第1のカウンタに連続する第2のカウンタをインクリメントすることであって、インクリメントされた後に第1のカウンタが折り返す(wrap around)ことを条件とすることと、を備える。任意選択で、少なくとも1つのカウンタはカウンタのシーケンスであり、少なくとも1つのカウンタをインクリメントすることは、カウンタのシーケンスの第1のカウンタをインクリメントすることと、第1のカウンタが最大値を超えることを条件として、カウンタのシーケンスの第1のカウンタに連続する第2のカウンタをインクリメントすることと、第2のカウンタを使用して計算された新しい値に第1のカウンタを設定することと、第2のカウンタを使用して計算された他の新しい値に最大値を設定することの少なくとも1つを含む。
【0025】
本開示の他のシステム、方法、特徴、および利点は、以下の図面および詳細な説明を検討することにより、当業者に明らかでなるか、または明らかになるであろう。このような追加のシステム、方法、特徴、および利点はすべて、本明細書内に含まれ、本開示の範囲内にあり、添付の特許請求の範囲によって保護されることが意図される。
【0026】
別様に定義されない限り、本明細書で使用される全ての技術用語および/または科学用語は、実施形態が関連する当業者によって一般的に理解されるのと同じ意味を有する。本明細書に記載されるものと類似または同等の方法および材料が、実施形態の実施または試験において使用され得るが、例示的な方法および/または材料が以下に記載される。矛盾がある場合は、定義を含む特許明細書が優先する。さらに、材料、方法、および実施例は例示に過ぎず、必ずしも限定することを意図していない。
【図面の簡単な説明】
【0027】
本明細書では、いくつかの実施形態について、添付の図面を参照して例示的にのみ説明する。本明細書で図面を具体的に詳細に参照すると、示された特定事項は例示であり、実施形態の例示的な議論のためのものであることが強調される。この点に関して、図面と共に取られる説明は、実施形態がどのように実施され得るかを当業者に明らかにする。
【0028】
図1図1は、いくつかの実施形態による、例示的なデータフローグラフの概略ブロック図である。
図2図2は、いくつかの実施形態による、例示的なシステムの概略ブロック図である。
図3図3は、いくつかの実施形態による、例示的なコンテキストストレージの概略ブロック図である。
図4図4は、いくつかの実施形態による、他の例示的なシステムの概略ブロック図である。
図5図5は、いくつかの実施形態による、任意の動作の流れを概略的に表すフローチャートである。
図6図6は、いくつかの実施形態による、処理グリッドのための任意選択の演算の流れを概略的に表すフローチャートである。
図7図7は、いくつかの実施形態による、処理グリッドのための他の任意選択の演算の流れを概略的に表すフローチャートである。
図8図8は、いくつかの実施形態による、処理グリッドのためのさらに他の任意選択の演算の流れを概略的に表すフローチャートである。
【発明を実施するための形態】
【0029】
コンピュータプログラミングの分野では、「コンテキスト」という用語は、演算の実行時に存在する状態を指す。スレッドに関して言えば、スレッドのコンテキストとは、スレッドが演算を実行するときにアクセス可能な値の集合のことである。スレッドが中央処理装置(CPU)によって実行される場合、スレッドのコンテキストは、他の値の中でも、CPUの複数のレジスタの複数の値、スレッドローカルストレージ(TLS)の1つまたは複数の値、スタックメモリの複数の値、およびプログラムカウンタの値を含む。
【0030】
第1のスレッドが不整合レイテンシを持つ演算を含む場合、CPUは演算の完了を待機する間、アイドルのままになることがある。スレッドを実行するシステムの性能を向上させるために、第1のスレッドの演算の完了を待機する間に第2のスレッドを実行するようにCPUを構成するのが一般的な慣行である。CPUによるスレッドの実行が中断されたときにスレッドのコンテキストを保存し、CPUによるスレッドの実行が再開されたときにスレッドのコンテキストを復元する方法が存在する。スレッドがCPUによって実行されるとき、スレッドにアクセス可能な値はCPUのレジスタに存在するか、アドレスバスを介してアクセス可能である。したがって、CPUによって実行されるスレッドのコンテキストは、CPUで利用可能なリソースによって決定され、通常、CPUによって実行されるすべてのスレッドで類似している。スレッドの機能に関係なく、スレッドのコンテキストには、レジスタの特定されたセットとスタックメモリの特定されたサイズの値が含まれる。
【0031】
高スループットと低レイテンシを提供する高性能コンピュータ化システムに対する要求が高まるにつれて、ソフトウェアアプリケーションを実装する際に超並列プログラミングパラダイムを使用することが増えている。このようなプログラミングパラダイムでは、大規模なプログラムは、並列に解くことができる複数の小さな問題に分割され、各問題は、データに大きく依存することなく、また、追加的または代替的に、複数の小さな問題間の制御に依存することなく、別々に解かれる。ソフトウェアプログラム(プログラム)には、このような並列領域が1つまたは複数含まれることがあり、プログラムの実行は、順番に(シリアルに)実行される1つのスレッドから、それぞれがより小さな問題を解決するタスクを実行する複数の同時実行スレッドに分割される。これはフォーク演算としても知られている。複数の同時実行スレッドが完了すると、プログラムの実行は、直列に実行される1つのスレッドに戻される。このプロセスは、複数の同時実行スレッドを1つの直列スレッドに結合することとして知られている。
【0032】
いつ計算が超並列になるかを決定する同時実行スレッドの正確な閾値量は存在しないが、所与のシステムに対して、スレッドおよびプロセスコンテキストの生成と、追加的または代替的に同時実行スレッドの実行(例えば、処理回路よりも同時実行スレッドの数が多い場合)に、メモリと計算時間の点で大きな処理リソースが必要となり、プログラム実行のオーバーヘッドが増大する同時実行スレッドの量が存在する。
【0033】
コンテキストスイッチングのオーバーヘッドを低減するための既存の解決策の1つは、例えばループを実行する分散実装において、分散メソッドを実装する際にデータフローグラフを使用することである。それぞれがデータフローグラフを実施する複数の同時実行スレッドを使用することで、複数の同時実行スレッドのそれぞれを再構成可能な処理グリッドの一部に投影して同時に実行することができる。さらに、複数の同時実行スレッドは、スレッドのデータを使用して実行される各スレッドに共通のデータフローグラフを実施するので、処理グリッドへのデータフローグラフの1つの投影は、スレッドの入力データを各スレッドのデータフローグラフに提供するパイプラインにおいて、複数の同時実行スレッドのうちの複数のスレッドを実行するために使用することができる。処理グリッドにおけるデータフローグラフの使用は、少なくとも部分的には、処理グリッドにおけるデータフローグラフの投影上で複数の同時実行スレッドの少なくともいくつかを実行するパイプラインの性質のために、複数のCPUを使用して可能であるよりも大きな程度まで分散処理をスケーリングすることを可能にする。しかし、システムは、処理グリッド上で同時に実行できるスレッド数よりも多くのスレッドを備えることがある。
【0034】
さらに、データフローグラフ実行のパイプラインの性質は、データフローグラフが不整合レイテンシを有する演算(不整合レイテンシ演算)を含むとき、データフローグラフの他の部分の実行が、複数の同時実行スレッドのスレッドについて不整合レイテンシ演算が完了するのを待機する間、ストールされるようなものである。そのような他の部分は、処理グリッド上のデータフローグラフの投影によって実行される複数の同時実行スレッドの少なくともいくつかのスレッドを含み得る。その結果、少なくともいくつかのスレッドの1つまたは複数の実行が遅延し、システムのスループットが低下し、同時に(処理グリッド内の)処理リソースがアイドル状態になる可能性がある。
【0035】
さらに、データフローグラフを実施するスレッドが処理グリッドに投影される場合、スレッドにアクセス可能な値は、処理グリッドの任意の論理素子に位置する可能性があり、スレッドの投影によって決定される。データフローグラフが不整合レイテンシを有する演算(不整合レイテンシ演算)を含む場合、スレッドを実行するように操作された1つまたは複数の論理素子は、再度操作されることなく、他のデータフローグラフを実施する他のスレッドを実行するために再利用することはできない。通常、第1のスレッドの不整合レイテンシ演算が完了するのを待機する時間の量は、第2のスレッドを実行するのに十分であるが、処理グリッドを再構成し、第2のスレッドを実行し、第1のスレッドの実行を再開するために、再び、処理グリッドを再構成するのに十分ではない。その結果、第2のスレッドの実行が遅れ、システムのスループットが低下すると同時に、(処理グリッド内の)処理リソースがアイドル状態になる可能性がある。
【0036】
本開示は、その少なくともいくつかの実施形態において、処理グリッド内の処理リソースがアイドル状態である時間の量を、例えば、不整合レイテンシの演算の実行が完了するのを待機する間、特に、1つまたは複数の特定された演算からなるデータフローグラフを実施する複数の同時実行スレッドをパイプラインで実行するときに低減するという技術的問題に対処する。処理グリッド内の処理リソースがアイドル状態である時間の量を緩和することによって、処理グリッド上で複数の同時実行スレッドを実行するための標準的なアプローチと比較して、本明細書に記載される少なくともいくつかの実施形態は、システムの性能を向上させ、例えば、システムのレイテンシを短縮し、追加的または代替的にシステムのスループットを向上させる。
【0037】
そのために、本開示は、そのいくつかの実施形態において、複数の同時実行スレッドの各々のためのスレッドコンテキストをコンテキストストレージに格納し、コンテキストストレージを使用して、処理グリッドを操作することなく、複数の同時実行スレッドのうちの1つまたは複数の同時実行スレッドの実行を一時停止および再開することを提案する。
【0038】
特に断りのない限り、以後、簡潔にするために、「コンテキスト」という用語は「スレッドコンテキスト」を意味し、この用語は互換的に使用される。任意選択で、スレッドコンテキストは、それぞれがデータフローグラフのノードへの入力値またはデータフローグラフのノードの出力値である値のセットを備える。そのような実施形態において、本開示は、1つまたは複数の特定された演算を備えるデータフローグラフを実行する第1のスレッドの1つまたは複数の実行時コンテキスト値をコンテキストストレージに格納することを提案する。スレッドの実行時コンテキスト値とは、スレッドが実行中にスレッドにアクセス可能な値である。任意選択で、1つまたは複数の特定された演算の少なくとも1つは、不整合レイテンシの演算である。任意選択で、処理グリッドの複数の論理素子のうちの1つまたは複数の特定された論理素子による第1のスレッドの1つまたは複数の特定された演算の実行の完了を待機する間に、本開示は、1つまたは複数の特定された論理素子による第2のスレッドの1つまたは複数の特定された演算の実行を提案する。任意選択で、第2のスレッドは、1つまたは複数の特定された論理素子によって、パイプラインで第1のスレッドと同時に実行される。したがって、第1のスレッドの1つまたは複数の特定された演算の完了を待機する間、1つまたは複数の特定された論理素子がアイドル状態のままである代わりに、および追加的または代替的に、パイプライン全体がストールしているため、1つまたは複数の論理素子が同時にアイドル状態のままである代わりに、1つまたは複数の論理素子を使用して、第2のスレッドの1つまたは複数の特定された演算を実行することができる。
【0039】
処理グリッドを再構成する、すなわち、1つまたは複数の特定された論理素子を操作する必要はなく、それらは、1つまたは複数の特定された演算を実行するように既に構成されているからである。任意選択で、第1のスレッドの1つまたは複数の特定された演算の実行が完了すると、本開示は、第1のスレッドの1つまたは複数の実行時コンテキスト値をコンテキストストレージから取得し、第1のスレッドの実行を再開すること、すなわち第1のスレッドの1つまたは複数の他の演算を実行することを提案する。任意選択で、1つまたは複数の実行時コンテキスト値は、1つまたは複数の他の演算を実行する前に、処理グリッドの1つまたは複数の論理素子にロードされる。第2のスレッドの1つまたは複数の特定された演算を実行する前に、第1のスレッドの1つまたは複数の実行時コンテキスト値をコンテキストストレージに格納し、第1のスレッドの1つまたは複数の特定された演算の実行が完了したときに1つまたは複数の実行時コンテキスト値を取得することによって、1つまたは複数の特定された演算の実行が完了した後にその実行を再開することが、1つまたは複数の特定された論理素子を使用して第2のスレッドの1つまたは複数の特定された演算を実行することによって影響を受けないように、第1のスレッドのコンテキストを保持することができる。これにより、第1のスレッドの1つまたは複数の演算の実行が完了するのを待機する1つまたは複数の特定された論理素子がアイドル状態である時間を短縮し、システムのスループットの増加およびその1つまたは複数のタスクを実行する際のシステムのレイテンシの短縮を容易にするという利点が提供される。
【0040】
任意選択で、1つまたは複数の特定された演算は、データフローグラフの複数のノードのうちの1つまたは複数の特定されたノードによってデータフローグラフで表される。1つまたは複数の特定された演算のコンテキストは、1つまたは複数の特定されたノードにつながる、または1つまたは複数の特定されたノードからつながるパスを含まない、データフローグラフの部分グラフ(残余部分グラフ)を備える。したがって、残余部分グラフは、1つまたは複数の特定されたノードからノードの部分集合のいずれかに至るパスがデータフローグラフに存在しないような、データフローグラフの複数のノードの部分集合を備え、その逆も同様である。さらに、残余部分グラフは、1つまたは複数の特定されたノードからエッジの部分集合のいずれかに至るパスがデータフローグラフに存在しないような、データフローグラフの複数のエッジの部分集合を備え、その逆も同様である。1つまたは複数の特定されたノードへの、または1つまたは複数の特定されたノードからの、データフローグラフにパスが存在しない残余部分グラフを使用することにより、1つまたは複数の特定された演算の実行に影響を与えず、1つまたは複数の特定された演算の実行結果に影響を受けない1つまたは複数のコンテキスト値が定義され、したがって、1つまたは複数の特定された演算の実行が完了した後にスレッドの実行を再開するために必要な値の正しい復元が可能になる。さらに、コンテキストがCPUの予め定めされた名前付き汎用レジスタに関連付けられた値を備える、CPU上で実行されるスレッドとは異なり、データフローグラフを実施し、処理グリッド上で実行されるスレッドのスレッドコンテキストは、データフローグラフの構造に由来し、スレッドを実行する回路の構造に由来しない、値を備える。
【0041】
任意選択で、1つまたは複数の特定された演算は、不整合レイテンシを有する複数の演算を備える。
【0042】
任意選択で、コンテキストストレージは複数のコンテキストエントリを備え、複数のコンテキストエントリの各コンテキストエントリは、複数の同時実行スレッドのうちの1つのスレッドコンテキストの複数の実行時コンテキスト値を格納するためのものである。スレッドコンテキストは、1つのコンテキストエントリに収まるよりも多くの値を備えてもよい。任意選択で、複数の同時実行スレッドのうちの少なくとも1つのスレッドについて、少なくとも1つのスレッドのスレッドコンテキストの複数の実行時コンテキスト値は、複数のコンテキストエントリのうちの1つまたは複数のコンテキストエントリに格納される。任意選択で、複数のコンテキストエントリは、複数のコンテキストエントリごとに1行ずつ、複数の行を有する表に編成される。任意選択で、コンテキストストレージは、予約ステーションである。
【0043】
任意選択で、コンテキストストレージは、複数の同時実行スレッドによって実施されるデータフローグラフのノードによって実装されるルックアップテーブルを格納するために追加的または代替的に使用される。
【0044】
任意選択で、システムは、複数のコンテキストストレージを備え、特定された演算のシーケンスに対する個別のスケジューリングを可能にする。第1のコンテキストストレージは、スレッドの1つまたは複数の第1の特定された演算を実施する第1の特定された論理素子のセットの再利用を管理するために使用され、第2のコンテキストストレージは、スレッドの1つまたは複数の第2の特定された演算を実施する第2の特定された論理素子のセットの再利用を管理するために使用される。これにより、複数の同時実行スレッドの実行をスケジューリングする際の柔軟性が増し、1つまたは複数の第1の特定された演算を1つまたは複数の第2の特定された演算とともに考慮しながら複数の同時実行スレッドの実行をスケジューリングする場合と比較して、処理グリッドの処理リソースがアイドルである時間の量がさらに減少するという利点が得られる。
【0045】
さらに、そのいくつかの実施形態において、本開示は、所与の処理グリッドの構成において処理グリッドによって同時に実行可能なスレッドの量を超える大量の同時実行スレッドの実行を管理するという別の技術的問題に対処する。そのような実施形態において、複数の同時実行スレッドは、同時実行スレッドのセットの部分集合であり、同時実行スレッドのセットの各々は、データフローグラフを実施する。本明細書に記載される少なくともいくつかの実施形態は、大量の同時実行スレッドをスケジューリングするための標準的な方法と比較して、コンテキストスイッチングおよびスケジューリングのためのオーバーヘッドの量を低減することによって、システムの性能を向上させる。
【0046】
そのために、本開示は、本明細書に記載されるいくつかの実施形態において、他の複数のスレッドコンテキストを、同時実行スレッドのセットの各々に対して1つずつ、バッファストレージに格納し、複数の反復の各々において、同時実行スレッドのセットの他のスレッドの他のスレッドコンテキストをバッファストレージから取得し、処理グリッドによる実行のために他のスレッドを複数のスレッドに追加するときに、他のスレッドコンテキストを使用することを提案する。
【0047】
任意選択で、同時実行スレッドのセットは、複数の同時実行スレッドのメンバではない1つまたは複数の待機スレッドを備え、他のスレッドは1つまたは複数の待機スレッドの待機スレッドである。任意選択で、待機スレッドは複数の同時実行スレッドに追加され、その実行は、コンテキストストレージを使用して管理され、任意選択で、バッファストレージから取得された他のスレッドコンテキストをコンテキストストレージに格納する。任意選択で、待機スレッドは、複数の同時実行スレッドに追加されることなく処理グリッドに投影され、任意選択で、処理グリッドの1つまたは複数の他の論理素子に他のスレッドコンテキストの1つまたは複数の値をロードする。任意選択で、待機スレッドは、複数の同時実行スレッドの少なくとも1つの追加スレッドの実行が完了したことを特定することに応答して選択される。
【0048】
任意選択で、複数の同時実行スレッドは、他の複数のスレッドコンテキストをバッファストレージに格納した後、同時実行スレッドのセットから選択される。
【0049】
任意選択で、処理グリッドは、1つまたは複数の待機スレッドを追跡するための回路(登録器回路)を備える。任意選択で、登録器回路は、それぞれが1つまたは複数の待機スレッドの少なくとも1つを追跡するための複数の登録器エントリを備える。本明細書で説明するいくつかの実施形態では、同時実行スレッドのセットは、待機スレッドの1つまたは複数のグループを備え、待機スレッドのグループは共有コンテキストを有する。このような待機スレッドのグループに対して、バッファストレージは、待機スレッドのグループの各々に関連付けられた共通のスレッドコンテキストを有することができ、登録器回路は、待機スレッドのグループの各々に関連付けられた共通の登録器エントリを有することができる。他のスレッドが待機スレッドのグループから選択されると、任意選択で、他のスレッドの1つまたは複数のプライベートコンテキスト値が生成され、処理グリッドによる実行のために他のスレッドを複数のスレッドに追加するときに使用される。
【0050】
そのために、本開示は、本明細書に記載されるいくつかの実施形態において、他の複数のスレッドコンテキストを、同時実行スレッドのセットの各々に対して1つずつ、バッファストレージに格納し、複数の反復の各々において、同時実行スレッドのセットの他のスレッドの他のスレッドコンテキストをバッファストレージから取得し、処理グリッドによる実行のために他のスレッドを複数のスレッドに追加するときに、他のスレッドコンテキストを使用することを提案する。
【0051】
任意選択で、システムは、複数のバッファストレージを備え、複数のデータフローグラフを実施する複数の同時実行スレッドのセットに対する個別のスケジューリングを可能にする。第1のバッファストレージは、同時実行スレッドの第1のセットのスケジューリング管理に使用され、第2のバッファストレージは、同時実行スレッドの第2のセットのスケジューリングに使用される。これにより、同時実行スレッドの1つまたは複数のセットの実行を互いに独立してスケジューリングする際の柔軟性が増し、同時実行スレッドの1つまたは複数のセットの実行をスレッドの単一のセットとしてスケジューリングする場合と比較して、処理グリッドの処理リソースがアイドル状態である時間がさらに短縮されるという利点が得られる。
【0052】
本開示によるいくつかの実施形態は上述した両方の技術的問題に対処しているが、他のいくつかの実施形態はどちらか一方に対処していることに留意すべきである。
【0053】
少なくとも1つの実施形態を詳細に説明する前に、実施形態は、その適用において、以下の説明に記載される、並びに/或いは図面および/または実施例に例示される、構成の詳細および構成要素の配置並びに/或いは方法に必ずしも限定されないことを理解されたい。本明細書に記載された実施形態は、他の実施形態、または様々な方法で実施もしくは実行することが可能である。
【0054】
実施形態は、システム、方法、および/またはコンピュータプログラム製品であってもよい。コンピュータプログラム製品は、実施形態の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または媒体)を含んでもよい。
【0055】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持および格納することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージデバイス、磁気ストレージデバイス、光学ストレージデバイス、電磁気ストレージデバイス、半導体ストレージデバイス、またはこれらの任意の適切な組み合わせであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、消去可能プログラマブルリードオンリーメモリ(EPROMまたはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリーメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスク、およびこれらの任意の適切な組み合わせが含まれる。本明細書で使用するコンピュータ可読記憶媒体は、電波やその他の自由に伝播する電磁波、導波管やその他の伝送媒体を伝播する電磁波(例えば、光ファイバーケーブルを通過する光パルス)、電線を介して伝送される電気信号など、一過性の信号そのものであると解釈されるものではない。
【0056】
本明細書で説明するコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピュータ演算/処理デバイスに、或いは、ネットワーク、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワークおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部ストレージデバイスに、ダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび/またはエッジサーバを備えてもよい。各コンピュータ演算/処理デバイス内のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、各コンピュータ演算/処理デバイス内のコンピュータ可読記憶媒体に格納するために、コンピュータ可読プログラム命令を転送する。
【0057】
実施形態の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはネイティブにコンパイルまたはジャストインタイム(JIT)にコンパイルされたソースコードまたはオブジェクトコードのいずれかであってもよい、Smalltalk、C++、Java、オブジェクト指向Fortranなどのオブジェクト指向プログラミング言語、JavaScript、Pythonなどのインタプリタ型プログラミング言語、および「C」プログラミング言語、Fortranなどの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで記述される。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行してもよいし、一部はユーザのコンピュータ上で実行してもよいし、スタンドアロンソフトウェアパッケージとして実行してもよいし、一部はユーザのコンピュータ上で実行し、一部はリモートコンピュータ上で実行してもよいし、完全にリモートコンピュータまたはサーバ上で実行してもよい。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または接続は、外部コンピュータに(例えば、インターネットサービスプロバイダを使用してインターネットを介して)行われてもよい。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)、粗粒度再構成可能アーキテクチャ(CGRA)、またはプログラマブルロジックアレイ(PLA)を含む電子回路は、実施形態の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。
【0058】
本明細書では、実施形態の態様を、実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して説明する。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図のブロックの組み合わせは、コンピュータ可読プログラム命令によって実施され得ることが理解されるであろう。
【0059】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、フローチャートおよび/またはブロック図の1つまたは複数のブロックに指定された機能/動作を実施するための手段を作成するように、マシンを生成するための汎用コンピュータ、特殊用途コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供されてもよい。これらのコンピュータ可読プログラム命令は、中に格納された命令を有するコンピュータ可読記憶媒体が、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された機能/動作の態様を実施する命令を含む製造品を備えるように、コンピュータ、プログラム可能なデータ処理装置、および/または他の装置に、特定の態様で機能するように指示することができるコンピュータ可読記憶媒体に格納されてもよい。
【0060】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブルなデータ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラマブルな装置、または他のデバイス上で実行される命令が、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された機能/動作を実施するように、コンピュータ実施プロセスを生成するための一連の動作ステップをコンピュータ、他のプログラマブルな装置、または他のデバイス上で実行させることもできる。
【0061】
図中のフローチャートおよびブロック図は、様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実施のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を構成する、命令のモジュール、セグメント、または部分を表すことができる。いくつかの代替的な実施では、ブロックに記された機能は、図面に記された順序から外れて発生してもよい。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されるかもしれないし、ブロックは、関係する機能に応じて、時には逆の順序で実行されるかもしれない。また、ブロック図および/またはフローチャート図示の各ブロック、ならびにブロック図および/またはフローチャート図示の複数のブロックの組み合わせは、指定された機能または動作を実行する、または特殊目的ハードウェアおよびコンピュータ命令の組み合わせを実行する、特殊目的ハードウェアベースのシステムによって実施できることに留意されたい。
【0062】
ここで、いくつかの実施形態による、例示的なデータフローグラフ100の概略ブロック図を示す図1を参照する。任意選択で、データフローグラフ100は、複数の演算を備える。任意選択で、データフローグラフ100は、複数のノードを備え、例えば、ノード110A1、ノード110A2、ノード110A3、ノード110A4、ノード110A5、ノード110A6、ノード110A7、ノード110A8、ノード110B1、ノード110B2、ノード110B3、ノード110B4、および複数のノード110と総称される1つまたは複数の特定されたノード110Cを備える。任意選択で、データフローグラフ100は、複数のエッジ、例えば、エッジ120A1、エッジ120A2、エッジ120A3、エッジ120A4、エッジ120A5、エッジ120A6、エッジ120A7、エッジ120A8、エッジ120A9、エッジ120B1、エッジ120B2、エッジ120B3、エッジ120B4、エッジ120C1、およびエッジ120C2を備え、複数のエッジ120と総称される。任意選択で、複数のエッジ120の各々は、複数のノード110のうちの2つを接続し、先頭ノードおよび末尾ノードを有する有向エッジである。例えば、ノード110A2は、エッジ120B1の末尾ノードであり、ノード110B1は、エッジ120B1の先頭ノードである。
【0063】
任意選択で、複数の演算は、1つまたは複数の特定された演算を備える。任意選択で、1つまたは複数のノード110Cは、1つまたは複数の特定された演算を実施する。任意選択で、1つまたは複数の特定された演算は、不整合レイテンシを有する。不整合レイテンシを有する演算のいくつかの例には、メモリアクセス演算、浮動小数点数学演算、他の計算グラフの実行、コプロセッサへのアクセス、および処理グリッドに接続された周辺デバイスへのアクセスが含まれるが、これらに限定されない。コプロセッサの例としては、テンソルコアユニットやグラフィカル処理ユニットなどがある。
【0064】
1つまたは複数の特定された演算に関するデータフローグラフ100のコンテキストは、任意選択で、1つまたは複数の特定されたノード110Cのうちの任意の2つの間のパスがデータフローグラフ100に存在せず、ノードの部分集合の各ノードについて、ノードと1つまたは複数の特定されたノード110Cとの間のパスがデータフローグラフ100に存在しない、複数のノード110のノードの部分集合を備える、残余部分グラフの値を備える。任意選択で、残余部分グラフは、複数のエッジ120のエッジの部分集合を備え、エッジの部分集合の各エッジについて、エッジと1つまたは複数の特定されたノード110Cとの間のパスがデータフローグラフ100に存在しない。この例では、残余部分グラフ111は、ノード110B1、ノード110B2、ノード110B3、およびノード110B4を備えるノードの部分集合を備え、ノード110Bの部分集合と総称される。この例では、1つまたは複数の特定されたノード110Cと、ノード110B1、ノード110B2、ノード110B3、およびノード110B4のいずれかと、の間のパスは、データフローグラフ100に存在しない。さらに、この例では、残余部分グラフ111は、エッジ120C1およびエッジ120C2を備えるエッジの部分集合を備え、集合的にエッジ120Cの部分集合と呼ばれる。この例では、1つまたは複数の特定されたノード110Cと、エッジ120C1およびエッジ120C2のいずれかと、の間のパスは、データフローグラフ100に存在しない。
【0065】
任意選択で、データフローグラフ100の実行時コンテキスト値は、複数のノード120のノードの入力値、例えばノード110A2の入力値またはノード110B3の入力値である。任意選択で、データフローグラフ100の実行時コンテキスト値は、残余グラフ111のノードの入力値であり、例えば、ノード110B2の入力値またはエッジ120B2の値である。
【0066】
任意選択で、データフローグラフ100の実行時コンテキスト値は、複数のノード120のノードの出力値、例えばノード110B2の出力値またはエッジ120C1の値である。任意選択で、データフローグラフ100の実行時コンテキスト値は、残余グラフ111のノードの出力値であり、例えば、ノード110B3の出力値またはエッジ120B4の値である。任意選択で、データフローグラフ100の実行時コンテキスト値は、1つまたは複数の特定されたノード110Cの出力値である。
【0067】
一実施形態では、1つまたは複数の特定された演算に関するデータフローグラフ100のコンテキストは、エッジ120B1の値、エッジ120B2の値、およびエッジ120A7の値を備える。他の実施形態では、1つまたは複数の特定された演算に関するデータフローグラフ100のコンテキストは、エッジ120B3の値、エッジ120B4の値、およびエッジ120A7の値を備える。他の実施形態では、1つまたは複数の特定された演算に関するデータフローグラフ100のコンテキストは、エッジ120B3の値、エッジ120C1の値、エッジ120C2の値、およびエッジ120A7の値を備える。
【0068】
グラフへのエントリノードとは、グラフのどの辺の先頭ノードでもないノードのことである。任意選択で、1つまたは複数の特定された演算に関するデータフローグラフ100のコンテキストは、残余部分グラフへのエントリノードと、1つまたは複数の特定されたノードの出力値のみを備える。この例では、そのようなコンテキストは、エッジ120B1の値(またはノード110B1の入力値)、エッジ120B2の値(またはノード110B2の入力値)、およびエッジ120A7の値を備える。
【0069】
いくつかの実施形態では、システムは、それぞれがデータフローグラフ100を実施する複数の同時実行スレッドを実行する。
【0070】
ここで、いくつかの実施形態による例示的なシステム200の概略ブロック図を示す図2も参照する。このような実施形態では、少なくとも1つのハードウェアプロセッサ201が、少なくとも1つの再構成可能な処理グリッド210に接続される。
【0071】
簡潔にするために、以後、「処理ユニット」という用語は、「少なくとも1つのハードウェアプロセッサ」を意味するために使用され、この用語は互換的に使用される。処理ユニットは、以下に説明する動作を実行するように構成された、プログラマブルまたは非プログラマブルな回路であればどのようなものであってもよい。処理ユニットは、ソフトウェアだけでなくハードウェアを備えてもよい。例えば、処理ユニットは、1つまたは複数のプロセッサと、プログラムが1つまたは複数のプロセッサによって実行されたときに処理ユニットにそれぞれの動作を実行させるプログラムを担持する一過性または非一過性のメモリと、を備えてもよい。
【0072】
さらに、以後、簡潔にするために、「処理グリッド」という用語は、「少なくとも1つの再構成可能な処理グリッド」を意味するために使用され、この用語は互換的に使用される。任意選択で、相互接続された処理グリッドは、複数の構成可能なデータ配線分岐によって接続された複数の再構成可能な論理素子を備える。再構成可能な論理素子の一例は、特定された数学演算および論理演算のセットのうちの1つを実行するように操作され得る処理回路である。数学演算の例としては、加算と減算がある。論理演算の例としては、論理NOT演算および論理AND演算がある。任意選択で、処理グリッド210は、複数の論理素子211と総称される、論理素子211A、論理素子211B、論理素子211C、論理素子211D、および論理素子211Eからなる複数の論理素子を備える。任意選択で、複数の論理素子211は、複数の再構成可能な論理素子である。任意選択で、複数の論理素子211は、複数の演算グループに編成される。
【0073】
任意選択で、処理グリッド210は、1つまたは複数のコンテキストストレージ、例えばコンテキストストレージ212および追加的または代替的に他のコンテキストストレージ222を備える。任意選択で、コンテキストストレージ212は、複数のスレッドコンテキストを格納するように構成され、各スレッドコンテキストは、複数の同時実行スレッドのうちの1つのためのものである。任意選択で、複数のスレッドコンテキストの各スレッドコンテキストは、その同時実行スレッドについて、同時実行スレッドによって実施されるデータフローグラフの1つまたは複数の実行時コンテキスト値を備える。例えば、各スレッドコンテキストは、そのスレッドのためのエッジ120B1の値を含み得る。任意選択で、コンテキストストレージ212は、予約ステーションである。任意選択で、他のコンテキストストレージ222は、予約ステーションである。
【0074】
ここで、いくつかの実施形態による、例示的なコンテキストストレージ212の概略ブロック図を示す図3も参照する。そのような実施形態では、コンテキストストレージは、例えば、集合的に複数のコンテキストエントリ301と呼ばれるコンテキストエントリ301A、コンテキストエントリ301B、コンテキストエントリ301C、およびコンテキストエントリ301Dからなる複数のコンテキストエントリを備える。任意選択で、複数のコンテキストエントリ301の各々は、複数のスレッドコンテキストのうちの1つの複数の実行時コンテキスト値を格納するためのものである。例えば、コンテキストエントリ301Dは、複数の同時実行スレッドの第1のスレッドの第1のスレッドコンテキストを格納するためのものであってもよい。任意選択で、第1のスレッドの複数の実行時コンテキスト値は、集合的に複数の実行時コンテキスト値310と呼ばれる、実行時コンテキスト値310A、実行時コンテキスト値310B、実行時コンテキスト値310C、および実行時コンテキスト値310Dを備える。任意選択で、コンテキストエントリ301Cは、複数の同時実行スレッドの第2のスレッドの第2のスレッドコンテキストを格納するためのものである。任意選択で、少なくとも1つのスレッドの少なくとも1つのスレッドコンテキストの複数の実行時コンテキスト値は、複数のコンテキストエントリ301の複数のコンテキストエントリに格納される。
【0075】
任意選択で、複数のコンテキストエントリ301は表に編成される。任意選択で、表は複数の行を有する。任意選択で、複数のコンテキストエントリ301の各々は、複数の行の行を有する。任意選択で、複数の行の各行は複数の列を有する。任意選択で、複数の実行時コンテキスト値310の各々は、コンテキストエントリ301Dを格納するための行の複数の列の1列に格納される。
【0076】
ここで、再び図2を参照する。任意選択で、コンテキストストレージ212は、処理グリッド210のメモリ領域に実装される。任意選択で、コンテキストストレージ212は、処理グリッド210に接続された1つまたは複数のメモリコンポーネント230に実装される。任意選択で、コンテキストストレージ212の一部は、処理グリッド210のメモリ領域に実装され、コンテキストストレージ212の他の一部は、1つまたは複数のメモリコンポーネント230に実装される。同様に、他のコンテキストストレージ222の全部または一部は、処理グリッド210の他のメモリ領域および1つまたは複数のメモリコンポーネント230のうちの1つまたは複数に実装されてもよい。
【0077】
任意選択で、処理グリッド210は、任意選択でコンテキストストレージ212に接続されたディスパッチ回路213を備える。任意選択で、ディスパッチ回路213は、複数のコンテキストのコンテキストが完了したことの特定情報を計算するために使用される。スレッドのコンテキストが完了するのは、スレッドの処理が、例えば不整合レイテンシの演算が完了するのを待機して、前記処理が中断された時点から継続することができるときである。任意選択で、ディスパッチ回路213は、複数の論理素子211の1つまたは複数の論理素子を、任意選択で、コンテキストストレージ212から取得された1つまたは複数のスレッドの1つまたは複数の実行時コンテキスト値を1つまたは複数の論理素子にロードすることによって、複数の同時実行スレッドの1つまたは複数のスレッドを実行するように構成するために使用される。任意選択で、ディスパッチ回路213は、ハードウェアで実施される。任意選択で、ディスパッチ回路213は、ディスパッチコンピュータ命令のセットを実行する。任意選択で、ディスパッチコンピュータ命令のセットは、テスト命令のセットを備える。
【0078】
同様に、処理グリッド210は、任意選択で、他のコンテキストストレージ222に接続され、任意選択で、他のコンテキストストレージ222を使用して複数の同時実行スレッドの実行を管理するための他のディスパッチ回路223を備える。
【0079】
任意選択で、処理グリッド210は、1つまたは複数のカウンタ240を備える。任意選択で、複数の同時実行スレッドは、1つまたは複数のカウンタ240に関連付けられる同時実行スレッドのグループを備える。複数の同時実行スレッドのスレッドが、1つまたは複数のカウンタ240の1つまたは複数のカウンタ値に従って実行するタスクを特定できる実装が存在する。例えば、複数の同時実行スレッドがループを実施し、1つまたは複数のカウンタ240のうちの1つがループの反復をカウントするために使用される場合である。他の例では、複数の同時実行スレッドが2つ以上の入れ子ループを実施し、1つまたは複数のカウンタの各々が、2つ以上の入れ子ループのうちの1つのループの反復をカウントする。1つまたは複数のカウンタ240の1つまたは複数のカウンタ値は、実行すべきループの反復を示すことができる。任意選択で、1つまたは複数のカウンタ240へのアクセスは、1つまたは複数のカウンタ240を読み取り、1つまたは複数のカウンタ240の少なくとも1つをインクリメントまたはデクリメントすることからなるアトミックアクセスを備える。したがって、最初のスレッドが1つまたは複数のカウンタ240にアクセスした後、1つまたは複数のカウンタ240にアクセスする複数の同時実行スレッドの各スレッドが1つまたは複数のカウンタ値の一意の組み合わせを取得するように、1つまたは複数のカウンタ240の少なくとも1つがインクリメントまたはデクリメントされる。
【0080】
任意選択で、1つまたは複数のカウンタ240は、例えば、2つ以上の入れ子ループを実施する場合、カウンタのシーケンスである。このような実施形態では、1つまたは複数のカウンタの第1のカウンタは、2つ以上の入れ子ループの内側ループのカウンタを実装し、1つまたは複数のカウンタ240の第2のカウンタは、カウンタのシーケンスにおいて第1のカウンタに連続して、2つ以上の入れ子ループの外側ループの他のカウンタを実装する。「第1のカウンタ」および「第2のカウンタ」という呼称は、カウンタのシーケンスにおける絶対的な序数識別子を指すのではなく、カウンタのシーケンスにおける連続する2つのカウンタを特定するためのものであることに留意されたい。
【0081】
任意選択で、1つまたは複数の入れ子ループの少なくとも1つは、反復の目標量を有する。例えば、1つまたは複数のカウンタ240が、例えばタスクのアレイのような、タスクのセットの複数の次元を表す場合である。任意選択で、1つまたは複数のカウンタ240をインクリメントすることは、モジュラ算術を用いて第1のカウントをインクリメントすることを備える。任意選択で、1つまたは複数のカウンタ240の各々はモジュラスを有する。1つまたは複数のカウンタ240のすべてが共通のモジュラスを共有するわけではない。任意選択で、1つまたは複数のカウンタ240をインクリメントすることは、第1のカウンタがインクリメントされた後に折り返すことを条件として、第2のカウンタをインクリメントすることを備える。任意選択で、1つまたは複数のカウンタ240をインクリメントすることは、カウンタのシーケンスの第1のカウンタをインクリメントすることと、第1のカウンタが最大値を超えることを条件として、第2のカウンタをインクリメントすることと、第1のカウンタを、第2のカウンタを使用して計算された新しい値に設定することとを含む。追加的または代替的に、1つまたは複数のカウンタ240をインクリメントすることは、例えば、外側ループのカウンタから導出される値から内側ループが開始されるとき、例えば、外側ループの各反復が、第2のカウンタの現在値を使用して導出される回数だけ内側ループを実行することを備えるとき、第2のカウンタを使用して計算される他の新しい値に最大値を設定することを備える。
【0082】
上記の説明はカウンタのインクリメントに焦点を当てているが、同様に、第1のカウンタはデクリメントされてもよく、第2のカウンタは、第1のカウンタが最小値よりも低いことを条件として、修正されてもよいことに留意すべきである。任意選択で、カウンタは、1とは異なるストライド値を使用してインクリメントまたはデクリメントされる。
【0083】
いくつかの実施形態では、複数の同時実行スレッドは、それぞれがデータフローグラフ100を実施する同時実行スレッドのセットの部分集合である。任意選択で、同時実行スレッドのセットは、複数の同時実行スレッドのメンバではなく、実行を保留している1つまたは複数の待機スレッドを備える。
【0084】
ここで、いくつかの実施形態による他の例示的なシステム400の概略ブロック図を示す図4も参照する。そのような実施形態では、処理グリッド210は、バッファストレージ410を備える。任意選択で、バッファストレージ410は、同時実行スレッドのセットのうちの1つまたは複数のスレッドの各々に対して、別の複数のスレッドコンテキストを格納する。任意選択で、バッファストレージ410は、処理グリッド210のさらに他のメモリ領域に実装される。任意選択で、バッファストレージ410は、1つまたは複数のメモリコンポーネント230に実装される。任意選択で、バッファストレージ410は複数のバッファエントリを備え、複数のバッファエントリの各々は、同時実行スレッドのセットの1つまたは複数の待機スレッドのうちの少なくとも1つのスレッドコンテキストを格納するためのものである。
【0085】
任意選択で、処理グリッド210は、1つまたは複数の待機スレッドを追跡するための登録器回路411を備える。任意選択で、登録器回路411は、それぞれが1つまたは複数の待機スレッドの少なくとも1つを追跡するための複数の登録器エントリを備える。任意選択で、処理グリッド210は、複数の同時実行スレッドの実行を管理するためのバッファディスパッチ回路412を備える。任意選択で、バッファディスパッチ回路412はバッファストレージ410に接続される。任意選択で、バッファディスパッチ回路412は登録器回路411に接続される。任意選択で、バッファディスパッチ回路412は、任意選択で、1つまたは複数のイングレスポート(図示せず)を介して、コンテキストストレージ212に接続される。
【0086】
任意選択で、処理グリッド210は、1つまたは複数のバッファストレージを備える。任意選択で、1つまたは複数の他のバッファストレージは、それぞれが同時実行スレッドの1つまたは複数の他のセットの1つまたは複数のためのものである、さらに別の複数のスレッドコンテキストを格納する。同様に、処理グリッド210は、任意選択で、1つまたは複数の他のバッファストレージに接続された1つまたは複数の他のバッファディスパッチ回路と、追加的または代替的に、1つまたは複数の他のバッファディスパッチ回路に接続された1つまたは複数の他の登録器回路とを備える。
【0087】
いくつかの実施形態では、処理ユニット201は、複数の同時実行スレッドを実行し、追加的または代替的に同時実行スレッドのセットを実行するように処理グリッド210を構成する。
【0088】
ここで、いくつかの実施形態による、任意選択の演算の流れ500を概略的に表すフローチャートを示す図5も参照する。そのような実施形態では、510において、処理ユニット201は、残余部分グラフ111を特定する。任意選択で、処理ユニット201は、図1で上述したように、複数の同時実行スレッドの各々の複数の実行時コンテキスト値を決定するために残余部分グラフ111を使用する。
【0089】
任意選択で、520において、処理ユニット201は、処理グリッド210を構成する。任意選択で、処理グリッド210を構成することは、複数の論理素子211のうちの1つまたは複数を操作することを備える。任意選択で、処理グリッド210を構成することは、コンテキストストレージ212、ディスパッチ回路213、バッファストレージ410、登録器411、およびバッファディスパッチ回路412のうちの1つまたは複数を操作することを備えるが、これらに限定されない。任意選択で、処理グリッド210を構成することは、コンテキストストレージ212およびバッファストレージ410のうちの1つまたは複数に1つまたは複数の値をロードすることを備える。
【0090】
いくつかの実施形態では、処理ユニット201は、1つまたは複数の方法を実施するように処理グリッド210を構成する。ここで、いくつかの実施形態による、処理グリッドのための任意選択の演算の流れ600を概略的に表すフローチャートを示す図6も参照する。任意選択で、処理ユニット201は、方法600を実施するために処理グリッド210を構成する。そのような実施形態では、601において、処理グリッド210は、複数の論理素子211の少なくともいくつかを使用して、複数の同時実行スレッドの第1のスレッドを実行する。任意選択で、データフローグラフ100の1つまたは複数の特定された演算は、複数の論理素子211のうちの1つまたは複数の特定された論理素子、例えば特定された論理素子211Cによって実行される。任意選択で、複数の論理素子211が複数の計算グループに編成される場合、1つまたは複数の特定された論理素子は、複数の計算グループの部分集合である。610において、処理グリッド201は、任意選択で、第1のスレッドの1つまたは複数の実行時コンテキスト値、例えば実行時コンテキスト値310Aを備える実行時コンテキスト値をコンテキストストレージ212、例えばコンテキストエントリ301Dに格納する。複数のコンテキストエントリ310が、コンテキストエントリ301Dが表の行である表に編成されるとき、任意選択で、処理グリッド201は、行の複数の列の1列に実行時コンテキスト値310Aを格納する。任意選択で、実行時コンテキスト値310Aは、残余部分グラフ111へのエントリノードの入力値、例えばノード110B1の入力値である。任意選択で、コンテキストエントリ301Dが表の行であるとき、処理グリッド210は、コンテキストストレージ212の1つまたは複数の特定された列に実行時コンテキスト値310Aを格納する。任意選択で、処理グリッド201は、特定された論理素子211Cによる第1のスレッドの1つまたは複数の特定された演算の実行が完了するのを待機する間、実行時コンテキスト値310Aを格納する。さらに、特定された論理素子211Cによる第1のスレッドの1つまたは複数の特定された演算の実行が完了するのを待機する間に、612において、処理グリッド210は、任意選択で、処理グリッド210が特定された論理素子211Cによって第2のスレッドの1つまたは複数の特定された演算を実行するように、複数の同時実行スレッドの第2のスレッドを実行するように少なくともいくつかの論理素子を構成する。
【0091】
任意選択で、第1のスレッドの1つまたは複数の特定された演算の実行が完了すると、615において、処理グリッド210は、任意選択で、1つまたは複数の結果値をコンテキストエントリ301Dに格納する。任意選択で、1つまたは複数の結果値は、1つまたは複数の特定された演算を実行した結果である。例えば、1つまたは複数の特定された演算がメモリアクセスを備える場合、1つまたは複数の結果値は、メモリアクセスによって取得されたデータ値を含み得る。
【0092】
620において、処理グリッド210は、任意選択で、コンテキストエントリ301Dが完了したという特定情報を計算する。任意選択で、コンテキストエントリ301Dが完了したという特定情報は、複数の実行時コンテキスト値310に1つまたは複数のテストを適用した結果に従って計算される。任意選択で、1つまたは複数のテストは、ディスパッチ回路213によって適用される。任意選択で、ディスパッチ回路は、1つまたは複数のテストを適用するために、テスト命令のシーケンスを実行する。任意選択で、1つまたは複数のテストを適用することは、複数の実行時コンテキスト値310が有効であるかどうかをチェックすることを含む。いくつかの実施形態によれば、そのために、コンテキストエントリ301Dは、複数の有効性ビットを備える。任意選択で、複数の有効性ビットの各々は、複数の実行時コンテキスト値310のうちの1つと関連付けられる。任意選択で、1つまたは複数のテストを適用することは、複数の有効性ビットに特定されたビット単位のマスクを適用することを含み、特定されたビット単位のマスクは、コンテキストエントリ301Dが完了するために複数の実行時コンテキスト値310のうちのどれが有効である必要があるかを示す。いくつかの実施形態では、特定されたビット単位のマスクは、コンテキストエントリの表の行を記述する複数の有効性ビットに適用される。
【0093】
任意選択で、630において、処理グリッド210は実行のために第1のスレッドを選択する。任意選択で、処理グリッド210は、ディスパッチ回路213を使用して第1のスレッドを選択する。
【0094】
複数の同時実行スレッドのうちの複数のスレッドが、それぞれの1つまたは複数の特定された演算の実行を完了することもある。任意選択で、第1のスレッドは、ディスパッチポリシーに従って選択される。例えば、第1のスレッドは最初に見つかったスレッドであってもよい。任意選択で、ディスパッチポリシーは、スレッドスタベーションを防ぐためにラウンドロビンを使用することを備える。任意選択で、ディスパッチポリシーは、タイムスタンプに基づき、例えば最も早く完了したスレッドまたは最も遅く完了したスレッドをディスパッチする。任意選択で、ディスパッチポリシーは、優先度値に基づいている。任意選択で、優先度値は、スレッドに割り当てられる。任意選択で、優先度値は、スレッド自身によって計算される。任意選択で、優先度値は、複数の同時実行スレッド間の優先度の部分的な順序を決定する。
【0095】
任意選択で、622において、処理グリッド210は、複数のコンテキストエントリ301のうちの1つまたは複数の他のコンテキストエントリが完了したという他の特定情報を計算することによって、複数のスレッドがそれぞれの1つまたは複数の特定された演算の実行を完了したことを特定する。任意選択で、他の特定情報は、1つまたは複数の他のコンテキストエントリの1つまたは複数の他の複数の実行時コンテキスト値に1つまたは複数のテストを適用する1つまたは複数の他の結果に従って計算される。任意選択で、処理グリッドは、例えば優先度ベースのディスパッチポリシーを使用するとき、630において第1のスレッドを選択する前に622を実行する。
【0096】
632において、処理グリッド210は、任意選択で、コンテキストストレージ212から実行時コンテキスト値310Aを取得する。任意選択で、処理グリッド210は、コンテキストエントリ301Dが完了したことを条件として、632を実行する。任意選択で、処理グリッド210は、ディスパッチ回路212を使用してコンテキストストレージ212から実行時コンテキスト値310Aを取得する。任意選択で、640において、処理グリッド210は、第1のスレッドの複数の演算のうちの1つまたは複数の他の演算、例えばノード110A6において実施される1つまたは複数の演算を実行することによって、第1のスレッドの実行を再開する。任意選択で、処理グリッドは、取得された実行時コンテキスト値310Aを複数の論理素子211のうちの1つまたは複数にロードする。任意選択で、処理グリッド210は、ディスパッチ回路212を使用して640を実行する。任意選択で、処理グリッド210は、コンテキストエントリ301Dが完了していることを条件として、640を実行する。
【0097】
いくつかの実施形態では、第1のスレッドの実行を中断する必要があるかもしれない。いくつかの例には、デバッグのために設定されたブレークポイントが含まれる。任意選択で、ブレークポイントは、複数の実行時コンテキスト値311の1つまたは複数の値に基づいて条件付けられる。第1のスレッドの実行を一時停止すると、処理グリッド210は第1のスレッドの実行を停止することができる。追加的または代替的に、処理グリッド210は、システム200内で実行される1つまたは複数の他のソフトウェアオブジェクト(いくつかの例は、デバッガおよびロガーである)に、第1のスレッドに関するコンテキスト情報を提供してもよい。任意選択で、コンテキストエントリ301Dに追加されたマークを条件として、処理グリッド210は、第1のスレッドの1つまたは複数の他の演算の実行を拒否する。追加的または代替的に、マークを条件として、処理グリッド210は、任意選択で、複数の実行時コンテキスト値310のうちの1つまたは複数を、1つまたは複数の他のソフトウェアオブジェクトに任意選択で提供する。任意選択で、1つまたは複数の他のソフトウェアオブジェクトは、処理グリッド210の別の部分に実装される。任意選択で、1つまたは複数の他のソフトウェアオブジェクトは、処理ユニット201によって実行される。任意選択で、1つまたは複数の他のソフトウェアオブジェクトは、処理グリッド210に接続された他の処理ユニット(図示せず)によって実行される。
【0098】
いくつかの実施形態では、コンテキストエントリは再利用されてもよい。例えば、複数のコンテキストエントリ301が表に編成される場合、表の行の複数の列のうちの1つの列が再利用されてもよい。650のそのような実施形態では、処理グリッド210は、任意選択で、610で実行時コンテキスト値310Aを備える1つまたは複数の実行時コンテキスト値を格納するために使用される列に、第1のスレッドの1つまたは複数の他の実行時コンテキスト値を格納する。コンテキストエントリは、不整合レイテンシを有する第1のスレッドの他の特定された演算を実行するときに再利用され得る。任意選択で、コンテキストエントリは、第1のスレッドの1つまたは複数の特定された演算の他の実行が完了するのを待機する間に再利用される。任意選択で、第1のスレッドは、複数の反復の各々において実行される。任意選択で、処理グリッド210は、複数の反復のうちの1つにおいて610を実行し、複数の反復のうちの他の反復において650を実行する。
【0099】
いくつかの実施形態では、データフローグラフ100の1つまたは複数のノードは、ルックアップテーブルを実装する。複数のコンテキストエントリ301が表内に編成されるとき、第1のスレッドを実行するために処理グリッド210を構成することは、任意選択で、表の複数の列のうち、実行時コンテキスト値310Aを格納するための1つまたは複数の列以外の1つまたは複数の他の列にルックアップテーブルを格納することを備える。ルックアップテーブルが1つまたは複数の他の列に格納される場合、1つまたは複数の他の列は、複数の同時実行スレッドのいずれかによって読み取られることはあるが、書き込まれることはない。
【0100】
任意選択で、スレッドは、1つまたは複数の他の列のインデックスと値とを備える命令を使用してルックアップテーブルにアクセスする。任意選択で、インデックスがルックアップテーブルの一部である列を特定する場合、値はアクセスする行の指示として使用される。
【0101】
任意選択で、処理グリッド210は、複数のスレッド反復の各々において第1のスレッドを実行するように処理ユニット201によってさらに構成される。いくつかの実施形態では、複数のコンテキストエントリ301のうちの1つまたは複数の追加のコンテキストエントリは、それぞれが第1のスレッドを実行する複数のスレッド反復に共通する第1のスレッドのコンテキストの少なくとも一部を提供するために使用される。任意選択で、1つまたは複数の追加のコンテキストエントリは、例えばノード110B2の入力値など、残余部分グラフへのエントリ値である1つまたは複数の追加のコンテキスト値を備える。任意選択で、1つまたは複数の他のコンテキストエントリは、スレッドを実行するための複数のスレッド反復のためのコンテキストの他の部分を提供し、例えばエッジ120C2の値など、残余部分グラフの内部であり、複数のスレッド反復のいくつかについて異なっていてもよい、1つまたは複数のさらに他のコンテキスト値を備える。任意選択で、処理グリッド210は、第1のスレッドの1つまたは複数の特定された演算の実行が完了すると、任意選択で、第1のスレッドを実行するための次のスレッド反復のために、1つまたは複数の追加のコンテキスト値のうちの少なくとも1つをコンテキストストレージ212から取得するように構成される。任意選択で、1つまたは複数の追加コンテキスト値のうちの少なくとも1つは、他の値がロードされる前に、複数の論理素子211のうちの1つまたは複数にロードされる。
【0102】
複数のコンテキストストレージを備えるいくつかの実施形態では、処理ユニット201は、以下の任意の方法を実行するように処理グリッド210を構成する。
【0103】
ここで、いくつかの実施形態による、処理グリッドについて動作700の他の任意選択の流れを概略的に表すフローチャートを示す図7も参照する。そのような実施形態では、第1のスレッドの1つまたは複数の特定された演算の実行が完了すると、710において、処理グリッド210は、第1のスレッドの1つまたは複数のさらに追加の実行時コンテキスト値を他のコンテキストストレージ222に格納する。任意選択で、720において処理グリッド210は、第1のスレッドをさらに実行し、730において処理グリッド210は第1のスレッドをさらに実行しながら、任意選択で、論理素子211Eによる第1のスレッドの1つまたは複数の他の特定された演算の実行が完了するのを待機する間に、1つまたは複数の他の特定された論理素子、例えば論理素子211Eによって他の第2のスレッドの1つまたは複数の他の特定された演算を実行する。任意選択で、処理グリッド210は、他のコンテキストストレージ222を使用して、複数の同時実行スレッドの実行を管理するために他のディスパッチ回路223を使用する。
【0104】
上述したように、本明細書で説明するいくつかの実施形態では、複数の同時実行スレッドは、それぞれがデータフローグラフ100を実施する同時実行スレッドのセットの部分集合である。そのような実施形態では、同時実行スレッドのセットは、複数の同時実行スレッドのメンバではなく、実行を保留している1つまたは複数の待機スレッドを備える。任意選択で、処理グリッド210は、バッファストレージ410を使用して同時実行スレッドのセットの実行を管理する。任意選択で、同時実行スレッドのセットの実行を管理するために、処理ユニット201は、以下の方法を実行するように処理グリッド210を構成する。
【0105】
ここで、いくつかの実施形態による、処理グリッドのための動作800のさらに別のオプションの流れを概略的に表すフローチャートを示す図8も参照する。任意選択で、810において、処理回路210は、1つまたは複数の待機スレッドの1つまたは複数の追加の実行時コンテキスト値をバッファストレージ410に格納する。同時実行スレッドのセットのうちの1つまたは複数の特定された演算の実行が完了するのを待機する間に複数の論理素子の利用率を高めるために、十分な待機スレッドがある場合にのみ同時実行スレッドのセットの実行を開始することが有益であり得る。したがって、805において、処理グリッド210は、任意選択で、1つまたは複数の待機スレッドの量が閾値を超えるまで、同時実行スレッドのセットの少なくとも一部の実行をストールする。任意選択で、処理グリッド210は、同時実行スレッドのセットの少なくとも一部の実行をストールするために登録器回路411を使用する。
【0106】
任意選択で、複数の反復の各々において、815において、処理グリッド210は、複数の同時実行スレッドのうちの1つまたは複数の追加のスレッドの実行が完了したことを特定する。任意選択で、820において、処理グリッド210は、少なくとも1つの待機スレッドを登録器回路411から選択し、822において、処理グリッド210は、任意選択で、少なくとも1つの待機スレッドの1つまたは複数の追加の実行時コンテキスト値をバッファストレージ410から取得する。任意選択で、処理グリッド210は、バッファディスパッチ回路412を使用して、1つまたは複数の追加の実行時コンテキスト値を取得する。
【0107】
任意選択で、処理グリッド210は、完了した1つまたは複数の追加スレッドを1つまたは複数の他のバッファストレージに追加する。
【0108】
830において、処理グリッド210は、任意選択で、複数の論理素子211による実行のために、少なくとも1つの待機スレッドを複数の同時実行スレッドに追加する。任意選択で、少なくとも1つの待機スレッドを複数の同時実行スレッドに追加することは、少なくとも1つの待機スレッドの1つまたは複数の追加の実行時コンテキスト値をコンテキストストレージ212に格納することを備える。少なくとも1つの待機スレッドの1つまたは複数の追加の実行時コンテキスト値をコンテキストストレージ212に格納することにより、上記方法600の612における少なくとも1つの待機スレッドの実行が容易になる。
【0109】
任意選択で、830において、処理グリッド210は、少なくとも1つの待機スレッドの1つまたは複数の追加の実行時コンテキスト値を複数の論理素子の1つまたは複数にロードし、コンテキストストレージ212を使用せずに少なくとも1つの待機スレッドの実行を開始する。
【0110】
任意選択で、821において、処理グリッド210は、(830において複数の同時実行スレッドに追加される)少なくとも1つの待機スレッドの各待機スレッドをコンテキスト識別値と関連付ける。任意選択で、コンテキスト識別値は、コンテキストストレージ212における待機スレッドのコンテキストを示す。例えば、コンテキスト識別値は、待機スレッドのスレッド識別値であってもよい。
【0111】
いくつかの実施形態では、1つまたは複数の待機スレッドの、1つまたは複数の待機スレッドのグループの、待機スレッドの各グループは、いくつかの共通リソースを使用して管理され得る。そのような実施形態では、バッファディスパッチ412は、任意選択で、1つまたは複数の待機スレッドのグループの、少なくとも1つのグループに対して、少なくとも1つの待機スレッドのグループのそれぞれに関連付けられる共通スレッドコンテキストをバッファストレージ410に生成するように構成される。任意選択で、バッファディスパッチ412は、少なくとも1つのグループの待機スレッドのそれぞれに関連付けられた共通の登録器エントリを登録器回路411に生成するように構成される。任意選択で、820において少なくとも1つの待機スレッドとして少なくとも1つの待機スレッドのグループの新しいスレッドを選択するとき、任意選択で、バッファディスパッチ412は、新しいスレッドの1つまたは複数のプライベートコンテキスト値を計算するように構成される。任意選択で、1つまたは複数のプライベートコンテキスト値は、バッファストレージ410内の行インデックスまたはコンテキストストレージ212内の他の行インデックスから導出される。任意選択で、1つまたは複数のプライベートコンテキスト値は、バッファストレージ410内の列インデックスまたはコンテキストストレージ212内の他の列インデックスから導出される。任意選択で、プライベート値は、実行カウンタであり、ステップ値を使用して順次インクリメントまたはデクリメントし、任意でモジュロ演算を使用する。任意選択で、プライベート値は、ハッシュ関数を使用して計算される。任意選択で、プライベート値は、データ構造体の局所性に対する関数を使用して計算される。任意選択で、プライベート値は、特定された値である。
【0112】
様々な実施形態の説明は、説明の目的で提示されたが、開示された実施形態を網羅的または限定することを意図するものではない。説明した実施形態の範囲および精神から逸脱することなく、多くの修正および変形が当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、市場で見出される技術に対する実用化または技術的改良を最もよく説明するように、または当業者が本明細書で開示される実施形態を理解できるようにするように選択された。
【0113】
本出願から開始する特許権の存続期間中に、多くの関連する処理グリッドが開発されることが予想され、処理グリッドという用語の範囲は、そのようなすべての新技術を先験的に含むことを意図している。
【0114】
本明細書では、「約」という用語は±10%を指す。
【0115】
用語「備える」、「備えている」、「含む」、「含んでいる」、「有している」およびそれらの活用形は、「~を含むが、~に限定されない」を意味する。この用語は、「~からなる」及び「~から本質的になる」という用語を包含する。
【0116】
「~から本質的になる」とは、組成物または方法が追加の成分および/または工程を含んでもよいことを意味するが、追加の成分および/または工程が、クレームされた組成物または方法の基本的かつ新規な特性を実質的に変更しない場合に限る。
【0117】
本明細書において、単数形の「a」、「an」、および「the」は、文脈が明らかに別様に記述しない限り、複数の参照を含む。例えば、用語「化合物」または「少なくとも1つの化合物」は、それらの混合物を含む複数の化合物を含み得る。
【0118】
本明細書において、「例示的」という語は、「例、実例、または説明として役立つ」という意味で使用される。「例示的」として記載される実施形態は、必ずしも、他の実施形態よりも好ましい又は有利であると解釈されるものではなく、及び/又は他の実施形態からの特徴の組み込みを排除するものではない。
【0119】
本明細書において、「任意選択で」という語は、「いくつかの実施形態では提供され、他の実施形態では提供されない」という意味で使用される。任意の特定の実施形態は、複数の「任意選択的な」特徴を、そのような特徴が矛盾しない限り、含むことができる。
【0120】
本出願を通じて、様々な実施形態が範囲形式で示される場合がある。範囲形式での説明は、単に便宜的かつ簡潔にするためのものであり、実施形態の範囲に対する柔軟性のない限定として解釈されるべきではないことを理解されたい。したがって、範囲の説明は、その範囲内の個々の数値だけでなく、すべての可能な部分範囲を具体的に開示したとみなされるべきである。例えば、1から6までのような範囲の記述は、1から3まで、1から4まで、1から5まで、2から4まで、2から6まで、3から6までのような部分範囲、およびその範囲内の個々の数値、例えば、1、2、3、4、5、および6を具体的に開示したとみなされるべきである。これは、範囲の広さに関係なく適用される。
【0121】
本明細書において数値範囲が示される場合は常に、示された範囲内の任意の引用数字(分数または整数)を含むことを意味する。本明細書では、第一の指示数値と第二の指示数値の「範囲に亘る/間の範囲」、および第一の指示数値「から」第二の指示数値までの「範囲に亘る/範囲」という表現は、互換的に使用され、第一および第二の指示数値ならびにその間のすべての分数および整数を含むことを意味する。
【0122】
明確にするために、別々の実施形態の文脈で説明されている実施形態の特定の特徴も、単一の実施形態において組み合わせて提供されてもよいことが理解される。逆に、簡潔にするために、単一の実施形態の文脈で記載されている実施形態の様々な特徴も、別個に、または任意の適切な部分的な組み合わせで、または任意の他の記載された実施形態において適切に提供されてもよい。様々な実施形態の文脈で説明される特定の特徴は、実施形態がそれらの要素なしでは動作不能でない限り、それらの実施形態の本質的な特徴とはみなされない。
【0123】
実施形態をその特定の実施形態と併せて説明したが、多くの代替案、修正例および変形例が当業者に明らかであることは明らかである。従って、添付の特許請求の範囲の主旨および広範な範囲内に入る、そのような代替案、修正例および変形例をすべて包含することが意図される。
【0124】
本明細書において参照されるすべての刊行物、特許および特許出願は、参照により本明細書に組み込まれることを参照される際に、個々の刊行物、特許または特許出願が具体的かつ個別に記載されているかのように、参照によりその全体が本明細書に組み込まれることが出願人の意図である。さらに、本出願における参考文献の引用または特定は、当該参考文献が本発明の先行技術として利用可能であることを認めるものと解釈してはならない。セクションの見出しが使用されている限りにおいて、それらは必ずしも限定的であると解釈されるべきではない。さらに、本出願の優先権文書は、参照によりその全体が本明細書に組み込まれる。
図1
図2
図3
図4
図5
図6
図7
図8
【外国語明細書】