(57)【要約】  可変レーンアーキテクチャのためのシステムおよび方法は、メモリバンク内に位置するメモリブロックと、タスクを実行するためのベクトル命令パイプラインを形成する1つまたは複数のコンピューティングノードであって、コンピューティングノードの各々がメモリバンク内に位置し、コンピューティングノードの各々がコンピューティングノードのうちの他のコンピューティングノードと無関係にタスクの一部分を実行する、コンピューティングノードと、タスクを実行するためのスカラー命令パイプラインを形成するグローバルプログラムコントローラユニット（GPCU）であって、GPCUがコンピューティングノードのうちの1つまたは複数においてタスク用の命令をスケジュールするように構成され、GPCUがコンピューティングノードの各々によって使用されるメモリブロック用のアドレスをコンピューティングノードにディスパッチするようにさらに構成される、GPCUとを含む。
2018521427.tif 000002
【特許請求の範囲】
【請求項１】
メモリバンク内に位置するメモリブロックと、
タスクを実行するためのベクトル命令パイプラインを形成する1つまたは複数のコンピューティングノードであって、前記コンピューティングノードの各々が前記メモリバンク内に位置し、前記コンピューティングノードの各々が前記コンピューティングノードのうちの他のコンピューティングノードと無関係に前記タスクの一部分を実行する、コンピューティングノードと、
前記タスクを実行するためのスカラー命令パイプラインを形成するグローバルプログラムコントローラユニット（GPCU）であって、前記GPCUが前記コンピューティングノードのうちの1つまたは複数において前記タスク用の命令をスケジュールするように構成され、前記GPCUが前記コンピューティングノードの各々によって使用される前記メモリブロック用のアドレスを前記コンピューティングノードにディスパッチするようにさらに構成される、GPCUと
を備える、プロセッサ。
【請求項２】
前記コンピューティングノードがコンピューティングノードの複数のサブセットを備え、コンピューティングノードの前記複数のサブセットの各々が、異なる期間の間に前記タスクの異なる部分を実行する、請求項1に記載のプロセッサ。
【請求項３】
コンピューティングノードの前記複数のサブセットの各々が、コンピューティングノードの前記複数のサブセットの各々にディスパッチされた前記アドレスによって指定された前記メモリブロックにアクセスする、請求項2に記載のプロセッサ。
【請求項４】
前記コンピューティングノードにスケジュールされた前記タスク用の命令を受け取るように構成された命令キュー
をさらに備える、請求項1から3のいずれか一項に記載のプロセッサ。
【請求項５】
前記1つまたは複数のコンピューティングノードの各コンピューティングノードが、
前記コンピューティングノードにスケジュールされた前記タスクの一部分用の命令を受け取るように構成された命令キューと、
前記命令を実行するための計算ユニットと、
前記計算ユニットからの前記命令を実行した結果を記憶するように構成された結果キューと、
前記計算ユニットが前記命令キューからの前記命令の実行を完了すると、前記GPCUに通知するように構成されたローカルプログラムコントローラユニット（LPCU）と
を備える、請求項1から4のいずれか一項に記載のプロセッサ。
【請求項６】
前記GPCUが、コンピューティングノードが前記コンピューティングノードの前記命令キュー内の前記命令の実行を完了したことの通知を受け取ると、前記コンピューティングノードにおいて前記タスク用のさらなる命令をスケジュールするようにさらに構成される、請求項5に記載のプロセッサ。
【請求項７】
前記GPCUが前記タスク用のすべての命令を実施するようにさらに構成される、請求項1から6のいずれか一項に記載のプロセッサ。
【請求項８】
前記1つまたは複数のコンピューティングノードが、各々、同時に異なる命令を実施する、請求項1から7のいずれか一項に記載のプロセッサ。
【請求項９】
前記コンピューティングノードのうちの第2のコンピューティングノードから、前記コンピューティングノードのうちの第1のコンピューティングノードによって必要とされるデータをプリフェッチするように構成されたアービトレータをさらに備える、請求項1から8のいずれか一項に記載のプロセッサ。
【請求項１０】
前記GPCUが、前記タスクが完了すると、前記コンピューティングノードを同期させるようにさらに構成される、請求項1から9のいずれか一項に記載のプロセッサ。
【請求項１１】
前記コンピューティングノードのサブセットが前記タスク用にスケジュールされ、前記コンピューティングノードのうちのスケジュールされていないコンピューティングノードが、前記タスクの実行中に電源を切られる、請求項1から10のいずれか一項に記載のプロセッサ。
【請求項１２】
タスク用のプログラムコードを受信するステップと、
前記タスクを実施するように複数のコンピューティングノードを割り当てるステップと、
前記複数のコンピューティングノードの各々に前記プログラムコード用の第1のフェッチパケットおよび前記第1のフェッチパケット用の第1のそれぞれのデータポインタをディスパッチするステップと、
各ノードが前記ノードにディスパッチされた前記第1のフェッチパケットの実行を完了することに応答して、前記複数のコンピューティングノードの各ノードからビートを受け取るステップと、
前記受け取ったビートに従って前記複数のコンピューティングノードにより前記プログラムコードの実行を追跡するステップと
を備える、方法。
【請求項１３】
前記受け取ったビートに従って前記複数のコンピューティングノードを同期させるステップをさらに備える、請求項12に記載の方法。
【請求項１４】
前記第1のフェッチパケットおよび前記第1のそれぞれのデータポインタをディスパッチするステップが、前記複数のコンピューティングノードの各々のためのバッファに前記第1のフェッチパケットおよび前記第1のそれぞれのデータポインタをキューイングするステップを備える、請求項12から13のいずれか一項に記載の方法。
【請求項１５】
前記バッファ内の前記第1のフェッチパケットを実行するステップと、
前記第1のフェッチパケット用の前記第1のそれぞれのデータポインタによって示されたメモリにアクセスするステップと
をさらに備える、請求項14に記載の方法。
【請求項１６】
前記複数のコンピューティングノードの各ノードにより、前記ノード用の前記バッファ内の前記第1のフェッチパケットのうちの1つを完了することに応答して、前記ビートを送るステップをさらに備える、請求項14に記載の方法。
【請求項１７】
前記プログラムコードの前記実行を追跡するステップが、
前記複数のコンピューティングノードの各ノードから受け取ったビートの数をカウントするステップと、
カウントされたビートの前記数がしきい値を超えることに応答して、前記複数のコンピューティングノードの各々に、前記プログラムコード用の第2のフェッチパケットおよび前記第2のフェッチパケット用の第2のそれぞれのデータポインタをディスパッチするステップと
を備える、請求項12から16のいずれか一項に記載の方法。
【請求項１８】
前記複数のコンピューティングノードの隣接コンピューティングノードから、前記複数のコンピューティングノードの第1のコンピューティングノードにデータを供給するステップをさらに備える、請求項12から17のいずれか一項に記載の方法。
【請求項１９】
第1のタスク用のプログラムコードを復号するように構成された超長命令語（VLIW）バンドルディスパッチャと、
前記プログラムコード用のデータポインタを割り当てるように構成されたデータアドレス生成および編成（DAGO）ユニットと、
複数のコンピューティングノードに結合されるように構成されたスケジューラであって、前記スケジューラが、前記プログラムコードを実行するように前記複数のコンピューティングノードを割り振るように構成され、前記スケジューラが、前記複数のコンピューティングノードの第1のサブセットに第1のスレッドを割り振り、前記複数のコンピューティングノードの第2のサブセットに第2のスレッドを割り振るように構成される、スケジューラと
を備える、プログラム制御ユニット。
【請求項２０】
前記VLIWバンドルディスパッチャが、前記第1のタスク用の前記プログラムコードが完了したことの通知を前記複数のコンピューティングノードから受け取るようにさらに構成され、前記スケジュールが、第2のタスク用のプログラムコードを実行するように前記複数のコンピューティングノードを割り振るようにさらに構成される、請求項19に記載のプログラム制御ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、2016年7月26日に出願され、「System and Method for Variable Lane Architecture」と題する、米国特許通常出願第15／220，067号の利益を主張し、第15／220，067号は、2015年7月30日に出願された米国仮特許出願第62／198，886号に対する優先権を主張し、それらの出願は参照により本明細書に組み込まれる。
【０００２】
本発明は、一般に、コンピュータアーキテクチャに関し、特定の実施形態では、可変レーンアーキテクチャのためのシステムおよび方法に関する。
【背景技術】
【０００３】
一般に、ワイヤレスベースバンド（BB）システムなどのリアルタイムシステムは、データフローシステムである。データフローシステムでは、無線フレーム内のシンボルなどのシーケンシャルデータシンボルは普通異なり、通常、決定性計算のために共有メモリ位置から特定のメモリ位置に移動する。共有メモリは、通常、そのような計算が実施されるところから離れて位置し、特定のメモリは、通常、そのような計算が実施されるところの近くに位置する。
【０００４】
ワイヤレスBBシステムでは、複数のユーザは、様々な無線リソース割振りでサポートされる。これらの様々な割振りは、単一命令複数データ（SIMD）システムにおいて、いくつかの制限付きで、グループとして計算することができる。SIMD計算は、SIMD命令をサポートするために、大量のデータの移動、操作、および再編成を必要とし、それにより、電力消費が増大し、複数の場所にデータの冗長コピーを保持するために余分のメモリが必要とされる。大きなSIMDプロセッサ内のスケジューリングタスクはより複雑な場合がある。さらに、SIMDを効率的に利用するために、アルゴリズムを作成し、コンパイルしなければならない。結果として、大きなSIMDプロセッサは、データフローシステムのパフォーマンスを理論的には向上させることができるが、これらのパフォーマンス向上を得ることは非現実的かつ困難である。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明の好ましい実施形態によれば、プロセッサは、メモリバンク内に位置するメモリブロックと、タスクを実行するためのベクトル命令パイプラインを形成する1つまたは複数のコンピューティングノードであって、コンピューティングノードの各々がメモリバンク内に位置し、コンピューティングノードの各々がコンピューティングノードのうちの他のコンピューティングノードと無関係にタスクの一部分を実行する、コンピューティングノードと、タスクを実行するためのスカラー命令パイプラインを形成するグローバルプログラムコントローラユニット（GPCU）であって、GPCUがコンピューティングノードのうちの1つまたは複数においてタスク用の命令をスケジュールするように構成され、GPCUがコンピューティングノードの各々によって使用されるメモリブロック用のアドレスをコンピューティングノードにディスパッチするようにさらに構成される、GPCUとを含む。
【０００６】
本発明の好ましい実施形態によれば、方法は、タスク用のプログラムコードを受信することと、タスクを実施するように複数のコンピューティングノードを割り当てることと、複数のコンピューティングノードの各々にプログラムコード用の第1のフェッチパケットおよび第1のフェッチパケット用の第1のそれぞれのデータポインタをディスパッチすることと、各ノードがノードにディスパッチされた第1のフェッチパケットの実行を完了することに応答して、複数のコンピューティングノードの各ノードからビートを受け取ることと、受け取ったビートに従って複数のコンピューティングノードによりプログラムコードの実行を追跡することとを含む。
【０００７】
本発明の好ましい実施形態によれば、プログラム制御ユニットは、第1のタスク用のプログラムコードを復号するように構成された超長命令語（VLIW）バンドルディスパッチャと、プログラムコード用のデータポインタを割り当てるように構成されたデータアドレス生成および編成（DAGO）ユニットと、複数のコンピューティングノードに結合されるように構成されたスケジューラであって、スケジューラが、プログラムコードを実行するように複数のコンピューティングノードを割り振るように構成され、スケジューラが、複数のコンピューティングノードの第1のサブセットに第1のスレッドを割り振り、複数のコンピューティングノードの第2のサブセットに第2のスレッドを割り振るように構成される、スケジューラとを含む。
【０００８】
本発明およびその利点をより完全に理解するために、次に、添付図面と併用される以下の説明に対して参照が行われる。
【図面の簡単な説明】
【０００９】
【図１】データフローシステムの図である。
【図２】処理システムのブロック図である。
【図３】処理システムのブロック図である。
【図４】処理システムのブロック図である。
【図５】処理システムのブロック図である。
【図６】RIMDコンピューティングノードのブロック図である。
【図７】RIMD命令実行についてのタイミング図である。
【図８】RIMD処理方法についてのフロー図である。
【図９】処理システムのブロック図である。
【発明を実施するための形態】
【００１０】
様々な実施形態によれば、ベクトルデータは高速メモリおよび演算器の近くに記憶される場合がある。演算器の近くにデータを記憶すると、不均等メモリーアクセス（NUMA）アーキテクチャ上の効率的かつ決定論的なタスク実行が可能になる場合がある。高速メモリは、キャッシュ、プライベートL1（PL1）メモリなどを含む場合がある。高速メモリにデータを記憶すると、データが非常に迅速にアクセスされることが可能になるが、タスク実行より前にデータセット全体がロードされることが必要とされる場合がある。高速メモリは小さく、高速メモリに適合するタスクのサイズを制限し、高速メモリ内のデータがより大容量のメモリにフラッシュアウトされると、タスクの実行が機能停止する。ピンポンスケジューリング方式は、実行より前にデータセットをロードする待ち時間を改善することができるが、そのような方式は、現在のジョブおよび次のジョブ用のデータがメモリにロードされていることを必要とするので、必要なメモリを増大させてしまう。集中型共有メモリ方式は容量問題を解決するように試みるが、より長い待ち時間を被る場合がある。より大きいキャッシュは、容量問題および待ち時間問題を解決する助けになる場合があるが、さらなるレベルの設計を加えると、複雑度が増し、干渉問題が発生する場合がある。
【００１１】
図1はデータフローシステム100の図である。データフローシステム100は、ワイヤレスベースバンドシステム内のベクトル計算中に行われる動作を示す。ベクトル内の各要素は、命令が実行されるときにそこで実施される同じ計算を有する場合がある。そのため、ベクトル計算システムは複数のレーンを含むものと呼ばれる場合があり、各レーンはベクトルの要素に対する命令を実行する。データフローシステム100は、アンテナ空間と、ビーム空間と、ユーザ空間とを含む。データは送信中に各空間を通って流れる。たとえば、ベクトルデータは最初にアンテナ空間を通って流れ、アンテナが選択される。次いで、ベクトルデータはビーム空間を通って流れ、アンテナ用のビームが選択される。次いで、ベクトルデータはユーザ空間を通って流れ、ブロードキャストされるコードまたはシーケンスが選択される。アンテナ空間、ビーム空間、およびユーザ空間では、異なる計算が実施される。すなわち、データフローシステム100内のベクトルデータは、データフローシステム100のポイント102および104において、たとえば、各空間の間で、操作および／または再編成されなければならない。ベクトルデータは、各々の次の空間内のアルゴリズムのために準備され得るように操作される。たとえば、各空間内のアルゴリズムは、異なるサイズのデータベクトルに対して動作することができる。加えて、データはポイント102および104においてあらかじめフェッチされる必要があり得る。本説明はワイヤレスベースバンドシステムとの関連で提示されるが、データフローシステム100は任意のシステムの一部であり得ることを諒解されたい。
【００１２】
実施形態は、動的にプログラム可能で分散されたコンピューティングノードに基づくスケーラブル可変長マルチレーンアーキテクチャを提供する。実施形態のマルチレーンシステムは、「緩和命令複数データ」（RIMD）システムと呼ばれる場合がある。RIMDアーキテクチャはSIMDアーキテクチャよりも効率的であり得る。いくつかの実施形態では、RIMDコンピューティングノードはシステムメモリとコロケートされる。そのような実施形態では、RIMDコンピューティングノードは、最初に近くのメモリバンクにデータをコピーすることなく、リモートメモリバンクに直接アクセスすることができる。リモートメモリバンクから近くのメモリバンクにデータを移動またはコピーすることは、低速動作であり得る。コンピューティングノードをメモリのより近くに配置すると、データ移動の量が低減され、アクセス速度が上がる場合がある。いくつかの実施形態では、タスクまたはプログラム用の命令は、メモリを介して、グローバルプログラムコントローラユニット（GPCU）からコンピューティングノードに伝搬される。
【００１３】
実施形態は、プロセッサのパイプラインをスカラー処理部分とベクトル処理部分に分割する。ベクトル処理部分はRIMDパイプラインである。SIMDプロセッサは、通常、ロックステップ実行でデータベクトルに対する計算を実施し、ベクトル内の各要素はSIMDパイプラインが続く前に処理される。
【００１４】
実施形態は、ロックステップ実行の必要姓を取り除き、可変長マルチレーンが任意の数のコンピューティングノードを含み、したがって任意の長さのデータベクトルを処理することを可能にする。プロセッサのスカラー処理部分は、プロセッサのベクトル処理部分を構成し、ベクトル処理部分にプログラミングをディスパッチする。
【００１５】
RIMDパイプライン内の各コンピューティングノードは、他のコンピューティングノードと無関係な命令を実行する。いくつかの実施形態では、RIMDパイプラインのすべてのレーンは、同時に、または同じクロックサイクルで命令を実行する場合も、実行しない場合もある。そのような実施形態では、RIMDパイプラインの様々なレーンは、時間領域内でシフトされる。シフトは、コンピューティングノードにおいて命令および／またはデータをバッファリングするためにRIMDシステムの能力によって決められるように、1クロックサイクルくらい小さく、最大数のクロックサイクル以下であり得る。
【００１６】
コンピューティングノードは単独で実行し、様々なクロックサイクルであり得るので、コンピューティングノードは、互いに関係なく機能停止する場合があり、単一のコンピューティングノードの機能停止の全体的なパフォーマンスインパクトが低減される。コンピューティングノードは単独で命令を実行するので、リモートメモリから近くのメモリにデータを移動させることなく、メモリにアクセスすることができる。リモートメモリに対するメモリアクセス動作は低速であり得るが、メモリパフォーマンスの不利益は、データを認識しキャッシュする必要性を除去すること、およびロックステップ方式で命令を実行する必要性を除去することから実現されるパフォーマンス向上よりも小さい場合がある。コンピューティングノードはロックステップで命令を実行しないので、ベクトルパイプラインの各レーンは、システムメモリの待ち時間に適応することができる。それに応じて、RIMDプロセッサは、SIMDプロセッサと比較して全体的なパフォーマンス向上を有することができる。そのようなプロセッサは、分割遅延適応パイプライン（SLAP）プロセッサと呼ばれる場合がある。
【００１７】
図2は処理システム200のブロック図である。処理システム200は、データフローシステム100内の空間のうちの1つまたは複数のための複数データ計算を実施する。処理システム200は、GPCU202と、ベクトル命令パイプライン204と、メモリ206とを含む。GPCU202は、ベクトル命令パイプライン204およびメモリ206に結合される。メモリ206も、ベクトル命令パイプライン204に結合される場合がある。
【００１８】
GPCU202は、処理システム200内の命令の実行を追跡し管理する。データ処理は、処理システム200内のレーンのうちの1つまたは複数において機能停止する場合がある。GPCU202は各レーン内の機能停止を追跡し、各レーンの進捗に基づいて処理するために各レーンに命令を分配する。スカラー命令パイプラインを形成する機能ユニットがGPCU202とともに含まれ、それらは、ベクトル命令パイプライン204を作成し維持する制御動作を実施するために使用される場合がある。制御動作には、プログラムフローの変更、入力データアドレスおよび出力データアドレスの計算および／または操作、ローカル、集中型、または分散型のオペレーティングシステムと対話する動作、割込み処理、メモリ割振りなどが含まれる場合がある。スカラー制御動作は、Cデータタイプなどの標準のデータタイプを使用し操作する。いくつかの実施形態では、GPCU202はLinux(登録商標)などのオペレーティングシステムを実行するシステムである。
【００１９】
ベクトル命令パイプライン204は、各々がベクトルデータタイプに対して数学的な計算を実施する複数のレーンを含む。ベクトル命令パイプライン204は、複数のコンピューティングノードを有するRIMDパイプラインであり、各コンピューティングノードは、他のコンピューティングノードと無関係な命令を処理する。ベクトル命令パイプライン204内のコンピューティングノードは、ロックステップ方式で動作しなくてよく、各々、同じかまたは異なるサイクルで命令を実行してよい。タスクまたはスレッドは、ベクトル命令パイプライン204内の任意の数のRIMDコンピューティングノードによる実行用に構築される場合がある。詳細には、GPCU202は、ベクトル命令パイプライン204内の可変数のRIMDコンピューティングノードを動的にグループ化して、SIMDマシンと同様のパイプラインを形成することができる。形成されたパイプラインは、SIMDと互換性があるように再編成されることをデータに要求することなどの、SIMDが有する欠点をもたない場合がある。
【００２０】
ベクトル命令パイプライン204は、様々なタイプのアルゴリズムに対してスケーラブルで、柔軟で、効率的であり得る。特定のアルゴリズムのためにベクトル命令パイプライン204内に割り振られるRIMD計算ノードの数は可変であり得るし、そのアルゴリズム用のレーンの数を最適化するように選択される場合がある。RIMDコンピューティングノードの数を最適化すると、電力の節約が増やされる場合があり、不要なノードの電源が切られる場合がある。
【００２１】
メモリ206はリモートメモリであってよく、またはキャッシュなどの近くのメモリであってよい。メモリ206は複数のメモリブロックを含む共有メモリである。ベクトル命令パイプライン204内の各RIMDは、単独でメモリ206にアクセスする。そのため、ベクトル命令パイプライン204がメモリ206に正しくアクセスするために、データは、再編成、操作、または整列される必要がない場合がある。共有メモリは分散され、ベクトル命令パイプライン204内の各RIMDがアクセスする中央位置をもたなくてよい。それらは別々のブロックとして示されているが、ベクトル命令パイプライン204のコンピューティングノードはメモリ206内に位置することを諒解されたい。メモリ206内のメモリバンクまたはノードは、近くのコンピューティングノードによって共有される。ベクトル命令パイプライン204のコンピューティングノードをメモリ206内に配置すると、パフォーマンスが向上し、データ移動のコストが低減され、メモリアクセス動作の数が低減される場合がある。
【００２２】
図3は処理システム300のブロック図である。処理システム300は、ベクトル命令パイプライン204がコンピューティングノード302と、命令バッファ304と、データバッファ306とを含むことを除き、処理システム200と同様である。GPCU202は、コンピューティングノード302向けの命令を命令バッファ304に送る。命令バッファ304は、たとえばキューであり得る。コンピューティングノード302は、各々、それらのコンピューティングノードが現在の命令の実行を完了すると、命令バッファ304から実行用のさらなる命令をフェッチする。そのため、バッファリングされた命令はフェッチパケットと呼ばれる場合がある。データバッファ306はキューの場合があり、コンピューティングノード302がメモリ206に記憶するデータをバッファリングする。加えて、データバッファ306はメモリ206からの読込みデータをバッファリングすることができ、メモリ206から読み込まれたデータを並び替えることができる。いくつかの実施形態では、GPCU202は、データに対する読込み要求をデータバッファ306にディスパッチし、その結果、データは正しい順序で適切なコンピューティングノード302に到達する。
【００２３】
GPCU202は、いくつかの方式でコンピューティングノード302をスケジュールすることができる。いくつかの実施形態では、GPCU202は半ばランダムにコンピューティングノード302をスケジュールする。いくつかの実施形態では、GPCU202は、命令がアクセスするメモリ206のバンクの近くに位置するコンピューティングノード302に命令を置くことに最大限の努力をするように試みる。
【００２４】
ベクトル命令パイプライン204は、コンピューティングノード302に命令を効率的に分配するアービタ（図示せず）も含む。いくつかの実施形態では、コンピューティングノード302は、直接メモリアクセス（DMA）を使用して、コンピューティングノード302のうちの1つに近いメモリ206の部分から、別のコンピューティングノードに近いメモリ206の部分にデータをコピーする。データを直接コピーすると、中間コピー動作を回避することにより、メモリへのより速いアクセスが可能になる場合がある。そのような実施形態では、DMA動作は、コンピューティングノード302の中のDMAマスタの数のバランスを取って、より少ないオープンDMA接続を有するコンピューティングノード302にスケジュールされる場合がある。
【００２５】
図4は処理システム400のブロック図である。処理システム400は、コンピューティングノード302の各々がそれら自体の命令バッファ402およびデータバッファ404を有することを除き、処理システム300と同様である。コンピューティングノード302の各々とともに命令バッファ402を含むことにより、コンピューティングノード302は、互いおよびGPCU202からさらに分離される。そのため、ベクトル命令パイプライン204のレーンのうちの1つにおける機能停止は、他のレーンにおける機能停止を引き起こさない場合がある。
【００２６】
各命令バッファ402は、GPCU202がプログラム実行を記録する助けとなるビート機構を含む。命令バッファ402は、コンピューティングノード302が命令バッファ402内の命令の実行を終了するたびに、GPCU202にビートを送る。ビートは、たとえば、1ビットの偶数通知であり得る。いくつかの実施形態では、GPCU202は、命令バッファ402から送られたビートをカウントすることにより、コンピューティングノード302の各々における機能停止を追跡する。カウントされたビートの数がしきい値を超えると、たとえば、コンピューティングノード302がかなり遅れ過ぎると、GPCUは命令バッファ402への命令のスケジューリングを減速または停止することができる。いくつかの実施形態では、命令バッファ402は、各々、完全なフェッチパケットをバッファリングすることができる。
【００２７】
上述したように、コンピューティングノード302は、互いと無関係な命令を実行し、そのため、互いと無関係に機能停止する場合がある。無関係な機能停止は、処理システム400における機能停止の全体的な影響を低減することができる。コンピューティングノード302は同じプログラムを実行するが、コンピューティングノード302は単独で停止またはクロック制御される場合があり、それらのメモリアクセスを低減し、他のコンピューティングノード302とは異なるデータのユニークなパターンにアクセスする。そのような単独の実行および機能停止により、RIMDシステム内の電力消費が低減され、コンピューティングノード302のうちの複数が、単一の命令で同じメモリバンク内のデータにアクセスすることが可能になる場合がある。いくつかの実施形態では、コンピューティングノード302のうちの複数が同じメモリ位置に同時にアクセスするように試みると、GPCU202は、メモリ内の共通データにアクセスし、次いで、命令バッファ402を使用して、すべての要求ノードにデータをブロードキャストすることができる。そのような実施形態では、データは命令バッファ402内の命令内のフィールドであり得る。
【００２８】
いくつかの実施形態では、GPCU202は、命令バッファ402の各々からのビートを使用して、コンピューティングノード302のサブセットの間のバリアを形成することができる。バリアは、コンピューティングノード302をGPCU202と同期させるために使用される場合がある。GPCU202は、コンピューティングノード302のすべてが共通（バリア）命令に同期するまで、さらなる命令を送らないことにより、命令フロー内のバリアを形成する。GPCU202は、コンピューティングノード302の各々からの（上記で説明された）ビートをカウントして、各ノードが共通命令にいつ同期したかを判断する。コンピューティングノード302の各々がバリアに到達すると、GPCU202は命令を送ることを再開し、コンピューティングノード302が再び非同期的に流れることを可能にする。コンピューティングノード302を同期させると、ノードが他のノードによって以前生成された古いデータにアクセスするリスクが減少する。そのため、バリアが形成される実施形態では、コンピューティングノードからのメモリアクセス動作は、正しい順序で実施されるように同期する。
【００２９】
図5は処理システム500のブロック図である。処理システム500は、制御ユニット502と、ベクトル命令パイプライン504とを含む。制御ユニット502は、命令を管理し、ベクトル命令パイプライン504に命令をディスパッチする。ベクトル命令パイプライン504はメモリとともに配置され、その結果、ベクトル命令パイプライン504内のコンピューティングノードはメモリサブバンクの間で分散される。
【００３０】
制御ユニット502は、GPCU512と、スケジューラコア514と、部分的に復号された超長命令語（VLIW）バンドルディスパッチユニット516と、データアドレス生成および編成（DAGO）ユニット518と、VLIWバンドルおよびデータアドレスキュー520と、DMAコントローラ522とを含む。
【００３１】
GPCU512は命令の復号およびディスパッチを制御する。スケジューラコア514は、特定のジョブまたはタスクのために（下記で説明される）RIMDコンピューティングノード534をスケジュールする。部分的に復号されたVLIWバンドルディスパッチユニット516は、VLIW命令バンドルから命令を抽出し、それらをVLIWバンドルおよびデータアドレスキュー520に送る。DAGO518は、メモリアドレス（または「データポインタ」）を生成し、コンピューティングユニットにそれらを割り当て、それらをVLIWバンドルおよびデータアドレスキュー520に送る。DAGO518は、必要とされるメモリ動作の再編成を実施することもできる。実行用のプログラムは、グローバルコントローラおよびローカルコントローラに分割される場合がある。複雑度を緩和し、最良のパフォーマンスを実現するために、いくつかの段階の間にいくつかの重複が存在する場合がある。
【００３２】
ベクトル命令パイプライン504は、命令ルータ532と、RIMDコンピューティングノード534と、メモリサブバンク536と、スマートルータおよびプリフェッチャユニット538とを含む。命令ルータ532は、VLIWバンドルおよびデータアドレスキュー520から命令を受け取り、それらをRIMDコンピューティングノード534に分配する。1つまたは複数の命令ルータ532が存在する場合がある。
【００３３】
RIMDコンピューティングノード534の各々は、互いと無関係な命令を実行する。RIMDコンピューティングノード534の各々のためのクロックゲーティングは柔軟な場合があり、その結果、各ノードは、ノードが使用されていないときにノードのためにゲート制御されるそれ自体の入力クロック接続を有する。RIMDコンピューティングノード534は、部分的に復号されたVLIWバンドルディスパッチユニット516に結合される。RIMDコンピューティングノード534が命令の実行を終了するたびに、RIMDコンピューティングノード534は、部分的に復号されたVLIWバンドルディスパッチユニット516に通知する。いくつかの実施形態では、通知は1ビットのビートである。GPCU512はビートの数をカウントし、受け取ったビートの数に従ってベクトル命令パイプライン504にさらなる命令をディスパッチする。RIMDコンピューティングノード534はメモリサブバンク536にアクセスする。RIMDコンピューティングノード534の各々は、それぞれのRIMDコンピューティングノード534によってより迅速にアクセスされ得るメモリサブバンク536のうちの少なくとも1つの近くにある。RIMDコンピューティングノード534は、スマートルータおよびプリフェッチャユニット538を介して、さらに離れた他のメモリサブバンク536にアクセスすることができる。
【００３４】
メモリサブバンク536の間にRIMDコンピューティングノード534を分散させると、RIMDコンピューティングノード534が可変の待ち時間を有する結果になる場合がある。しかしながら、スカラーパイプライン（たとえば、GPCU）とベクトルパイプライン（たとえば、単独のRIMDコンピューティングノード）の間でパイプラインを分割すると、メモリ動作のいかなる追加支出にかかわらず、スケーラブルで高パフォーマンスのシステムがもたらされる場合がある。
【００３５】
スマートルータおよびプリフェッチャユニット538は、メモリアクセス動作をルーティングおよび仲裁し、いくつかのメモリプリフェッチング、書込みバッファリング、およびデータマージングを実施する。スマートルータおよびプリフェッチャユニット538はプログラム可能なプリフェッチャであり、RIMDコンピューティングノード534の各々とともに動作して、離れたデータノードにアクセスすることに関連する待ち時間を低減する。スマートルータおよびプリフェッチャユニット538は、ベースメモリアドレスからのストライドまたはオフセットに基づいてデータをプリフェッチする。いくつかの実施形態では、スマートルータおよびプリフェッチャユニット538は、いくつかの計算ノードからの書込み動作をマージし、それにより、メモリへのアクセスの総数が低減される場合がある。いくつかの実施形態では、DMAコントローラ522は、RIMDコンピューティングノード534がスマートルータおよびプリフェッチャユニット538を介してDMAを実施することを可能にするヘルパモジュールである。スマートルータおよびプリフェッチャユニット538は、スマートアービタおよびプリフェッチャ（SAP）と呼ばれる場合がある。
【００３６】
図6はRIMDコンピューティングノード600のブロック図である。RIMDコンピューティングノード600は、RIMDインターフェース602と、キュー604と、ローカルプログラム制御ユニット（LPCU）606と、計算ユニット608と、オプションのデータバッファ610とを含む。RIMDインターフェース602は、RIMDコンピューティングノード600をプロセッサ内の他のデバイス、たとえば、命令ルータ532とインターフェースする。
【００３７】
キュー604は、命令ルータ532から命令およびデータを受け取り、それらをバッファリングする。命令および入力データをバッファリングすると、RIMDコンピューティングノード600がRIMDプロセッサ内の他のRIMDコンピューティングノードと無関係に動作することが可能にある。キュー604はRIMDコンピューティングノード600内の任意の機能停止を局在化し、その結果、他のRIMDコンピューティングノードは影響を受けない。キュー604は、命令バッファ612（または「命令キュー」）と、入力データバッファ614（または「結果キュー」）とを含む。命令バッファ612は命令をバッファリングし、入力データバッファ614は命令を実行するために必要とされるデータをバッファリングする。
【００３８】
LPCU606は、命令の復号機能およびディスパッチ機能を含む。LPCU606は、RIMDコンピューティングノード600が命令バッファ612内の命令を完了するたびに、GPCU512にビートを送るロジックを含む。
【００３９】
計算ユニット608は、RIMDコンピューティングノード600内の主要計算を実施する機能ユニットを含む。たとえば、計算ユニット608は、多重化ユニット、レジスタ、およびロード／ストアユニットを含む。いくつかの実施形態では、計算ユニット608は、ロード／ストアユニット用の専用ロード／ストア経路を有し、その結果、計算ユニット608は、他のRIMDコンピューティングユニットと無関係にメモリにアクセスすることができる。
【００４０】
いくつかの実施形態はデータバッファ610を含む。データバッファ610は入力データバッファ614と同様であり得るし、メモリアクセス動作をバッファイングするためにロード／ストア経路内にあり得る。データバッファ610を使用すると、RIMDコンピューティングノード600が、別のRIMDコンピューティングノードがアクセスしているメモリにアクセスするように試みるときに、機能停止しないように防止することができる。可変メモリ待ち時間は、連続読込み動作を引き起こして、ばらばらの順序で計算ユニット608にデータを返す場合がある。一時的に読込みデータをバッファリングすると、メモリが順序正しく計算ユニット608によって読み込まれることが可能になる。データバッファ610は、たとえば、コンテンツアドレス可能メモリ（CAM）キャッシュ、先入れ先出し（FIFO）バッファなどであり得る。いくつかの実施形態では、データバッファ610は、約1キロバイト（KB）より小さいサイズなどの小ささであり得る。データバッファ610のサイズは、メモリバンクへの待ち時間に従って決定される場合がある。いくつかの実施形態では、メモリバンクへの最も離れた待ち時間は、データバッファ610のサイズを決定するために使用される場合がある。いくつかの実施形態では、データバッファ610は、命令バッファ612のサイズの約2倍以下であり得る。データバッファ610は、書込み動作もバッファリングする。
【００４１】
図7はRIMD命令実行についてのタイミング図700である。タイミング図700は、システムクロックおよび9つのコンピューティングノードのタイミング状態を示す。タイミング図700は、RIMDコンピューティングノードがどのように単独で命令を実行することができるかを示す。タイミング図700では、サイクル1において、プログラムがGPCUによってディスパッチされる。サイクル2において、コンピューティングノード1、2、および3がプログラムを受け取り、それを実行している。サイクル3において、コンピューティングノード4、5、および6がプログラムを受け取り、それを実行している。サイクル4において、コンピューティングノード7、8、および9がプログラムを受け取り、それを実行している。プログラムは、たとえば、コンピューティングノードがプロセッサ内のどこに物理的に位置するかに基づいて、様々な時間に様々なコンピューティングノードに到達する。さらなるノードがより高い待ち時間を有する場合がある。いつコンピューティングノードがログラムを受け取り、その実行を開始するかに、他の要因が影響する場合もある。
【００４２】
あるタスク用に選択されるRIMDコンピューティングノードの数は、動的に構成可能であり、たとえば、タスク要件に基づく場合がある。タイミング図700では、9つのスレッドがプログラムを実行するように構成される。この数は様々なタスクについて変化する場合がある。加えて、RIMDコンピューティングノードは、並行スレッドにさらに分割される場合がある。RIMDクラスタから割り振られる並行スレッドの数も構成可能であり、たとえば、割り振られるスレッドの数に最大限度が設けられる場合がある。たとえば、タイミング図700に示された例を続けると、RIMDクラスタはいくつかの方式で分割されている可能性がある。（1）RIMDコンピューティングノードのすべてが同じスレッドを実行している場合がある。（2）RIMDコンピューティングノードのすべてが異なるスレッドを実行している場合がある。（3）いくつかのユニットが第1のスレッドを実行している場合があり、他のユニットが第2のスレッドを実行している場合がある。（4）いくつかのユニットが第1および第2のスレッドを実行している場合があり、他のユニットの電源が切られている場合がある。他の構成も可能であり得る。
【００４３】
図8はRIMD処理方法800についてのフロー図である。RIMD処理方法800がステップの順番を示していないことを諒解されたい。むしろ、RIMD処理方法800内のブロックは並行して動作している可能性がある。
【００４４】
最初に、実行用のプログラムがGPCUによってグローバルプログラムメモリに移動する（ステップ802）。プログラムは離れたメモリ内にあってよく、またはプログラムキャッシュもしくはプログラミング用のメモリからフェッチされてよい。プログラムがメモリ内にある実施形態では、プログラムはDMAを介してフェッチされる場合がある。次に、プログラムの実行のために必要とされるデータが離れたメモリから移動する（ステップ804）。いくつかの実施形態では、移動はDMAを用いてデータをコピーすることによって遂行される場合がある。スケジューラが1つまたは複数のRIMDコンピューティングノードにおいてタスクをスケジュールする（ステップ806）。スケジューラはタスク用のコンピューティングノードの数を選択し、各ノードに識別子（ID）を割り当てる。GPCUがタスク用のプログラムコードをフェッチし、タスク用のデータアドレスとともにそれをスケジュールされたRIMDコンピューティングノードにディスパッチする（ステップ808）。次いで、プログラムコードは各RIMDコンピューティングノードにプッシュされる。RIMDコンピューティングノードは分散された共有メモリ内にあるので、プログラミングは、キャッシングまたはDMAなどの高価な動作を使用してノードにコピーされる必要がない場合がある。
【００４５】
各RIMDコンピューティングノードがプログラムコードおよびデータアドレスを受け取り、バッファリングする（ステップ810）。RIMDコンピューティングノードが、それらにディスパッチされたプログラムコードを復号し実行する（ステップ812）。RIMDコンピューティングノードが、各コンピューティングノードに割り当てられたIDを使用して計算されたデータアドレスからのオフセットにおいて、受け取ったデータアドレスを使用して実行中にデータにアクセスする（ステップ814）。アクセスされたデータが、SAPを用いてRIMDコンピューティングノードにより近く運ばれる場合がある（ステップ816）。SAPは、メモリ内の他のSAPと通信することによってデータをプリフェッチすることができる。各RIMDコンピューティングノードが、命令の実行またはディスパッチを終了すると、GPCUにビートを送る（ステップ818）。
【００４６】
GPCUが、各RIMDコンピューティングノードが送ったビートの数をカウントすることにより、各RIMDコンピューティングノードの進捗を記録する（ステップ820）。GPCUは、RIMDコンピューティングノードがそれらのバッファ内の命令を完了すると、RIMDコンピューティングノードにさらなるプログラムコードおよびデータアドレスをディスパッチする。GPCUが、必要な場合、RIMDコンピューティングノードからのビートを使用してノードを同期させることができる（ステップ822）。タスクが完了すると、ステップ802〜822を繰り返すことにより、GPCUが別のタスクのためにRIMDコンピューティングノードをスケジュールすることができるか、または、さらなるタスクが存在しない場合、ノードの電源を切ることができる（ステップ824）。
【００４７】
図9は、ホストデバイス内にインストールされる場合がある、本明細書に記載された方法を実施するための処理システム900のブロック図である。図示されたように、処理システム900は、図9に示されたように配置される場合も（配置されない場合も）ある、プロセッサ902と、メモリ904と、インターフェース906〜910とを含む。プロセッサ902は、計算および／または他の処理に関連するタスクを実施するように適合された任意の構成要素または構成要素の集合であり得るし、メモリ904は、プロセッサ902による実行用のプログラミングおよび／または命令を記憶するように適合された任意の構成要素または構成要素の集合であり得る。一実施形態では、メモリ904には、非一時的コンピュータ可読媒体が含まれる。インターフェース906、908、910は、処理システム900が他のデバイス／構成要素および／またはユーザと通信することを可能にする任意の構成要素または構成要素の集合であり得る。たとえば、インターフェース906、908、910のうちの1つまたは複数は、ホストデバイスおよび／またはリモートデバイスにインストールされたアプリケーションに、プロセッサ902からのデータメッセージ、制御メッセージ、または管理メッセージを通信するように適合される場合がある。別の例として、インターフェース906、908、910のうちの1つまたは複数は、ユーザまたはユーザデバイス（たとえば、パーソナルコンピュータ（PC）など）が処理システム900と対話／通信することを可能にするように適合される場合がある。処理システム900は、長期間ストレージ（たとえば、不揮発性メモリなど）などの、図9に描写されていないさらなる構成要素を含む場合がある。
【００４８】
いくつかの実施形態では、処理システム900は、電気通信ネットワークにアクセスするか、または場合によってはその一部であるネットワークデバイス内に含まれる。一例では、処理システム900は、基地局、中継局、スケジューラ、コントローラ、ゲートウェイ、ルータ、アプリケーションサーバ、または電気通信ネットワーク内の任意の他のデバイスなどの、ワイヤレスまたは有線の電気通信ネットワーク内のネットワーク側デバイス内にある。他の実施形態では、処理システム900は、移動局、ユーザ機器（UE）、パーソナルコンピュータ（PC）、タブレット、ウェアラブル通信デバイス（たとえば、スマートウォッチなど）、または電気通信ネットワークにアクセスするように適合された任意の他のデバイスなどの、ワイヤレスまたは有線の電気通信ネットワークにアクセスするユーザ側デバイス内にある。
【００４９】
例示的な実施形態では、処理システム900は、タスク用のプログラムコードを受信するコード受信モジュールと、タスクを実施するように複数のコンピューティングノードを割り当てる割当てモジュールと、複数のコンピューティングノードの各々にプログラムコード用の第1のフェッチパケットおよび第1のフェッチパケット用の第1のそれぞれのデータポインタをディスパッチするディスパッチモジュールと、各ノードがノードにディスパッチされた第1のフェッチパケットの実行を完了することに応答して、複数のコンピューティングノードの各ノードからビートを受け取るビートモジュールと、受け取ったビートに従って複数のコンピューティングノードによりプログラムコードの実行を追跡する追跡モジュールとを含む。いくつかの実施形態では、処理システム900は、実施形態に記載されたステップのうちのいずれか1つまたはステップの組合せを実施するための他のまたはさらなるモジュールを含む場合がある。
【００５０】
本発明は例示的な実施形態を参照して記載されているが、この説明は限定的な意味で解釈されるものではない。説明を参照すると、例示的な実施形態の様々な修正および組合せ、ならびに本発明の他の実施形態が当業者には明らかであろう。したがって、添付の特許請求の範囲が任意のそのような修正または実施形態を包含することが意図される。
【符号の説明】
【００５１】
100  データフローシステム
102  ポイント
104  ポイント
200  処理システム
202  グローバルプログラムコントローラユニット（GPCU）
204  ベクトル命令パイプライン
206  メモリ
300  処理システム
302  コンピューティングノード
304  命令バッファ
306  データバッファ
400  処理システム
402  命令バッファ
404  データバッファ
500  処理システム
502  制御ユニット
504  ベクトル命令パイプライン
512  GPCU
514  スケジューラコア
516  超長命令語（VLIW）バンドルディスパッチユニット
518  データアドレス生成および編成（DAGO）ユニット
520  VLIWバンドルおよびデータアドレスキュー
522  DMAコントローラ
532  命令ルータ
534  RIMDコンピューティングノード
536  メモリサブバンク
538  スマートルータおよびプリフィッチャユニット
600  RIMDコンピューティングノード
602  RIMDインターフェース
604  キュー
606  ローカルプログラム制御ユニット（LPCU）
608  計算ユニット
610  データバッファ
612  命令バッファ
614  入力データバッファ
700  タイミング図
800  RIMD処理方法
900  処理システム
902  プロセッサ
904  メモリ
906  インターフェース
908  インターフェース
910  インターフェース
【図１】
2018521427.tif 000003
【図２】
2018521427.tif 000004
【図３】
2018521427.tif 000005
【図４】
2018521427.tif 000006
【図５】
2018521427.tif 000007
【図６】
2018521427.tif 000008
【図７】
2018521427.tif 000009
【図８】
2018521427.tif 000010
【図９】
2018521427.tif 000011
【国際調査報告】
2018521427.tif 000012
2018521427.tif 000013