(57)【特許請求の範囲】
【請求項１】
それぞれが配置バッファを含む複数の処理素子（ＰＥ）と、
前記複数のＰＥのそれぞれの配置バッファに結合され、１つ又は複数のＰＥ配置を前記複数のＰＥに割り当てるように構成されるシーケンサと、
前記複数のＰＥに結合され、前記複数のＰＥのうちの少なくとも１つのＰＥの実行結果を記憶するように構成されるガスケットメモリとを備え、
仮想データパスを分割した各物理データパスに対応する期間毎に、前記複数のＰＥのそれぞれの配置バッファに、当該物理データパスの相異なる命令に対応するＰＥ配置が割り当てられ、
前記複数のＰＥのそれぞれにおいては、前記各物理データパスに対応する期間内において、当該ＰＥの配置バッファに割り当てられたＰＥ配置のもとで複数のスレッドが実行される
プロセッサ。
【請求項２】
前記シーケンサからスイッチボックス配置を受信するために前記シーケンサに結合され、それぞれが、前記複数のＰＥのうちの対応するＰＥに関連付けられ、そして前記スイッチボックス配置に従って前記対応するＰＥに入力データ切り替えを提供するように構成される、複数のスイッチボックスをさらに備え、
前記複数のスイッチボックス及びそれらに関連付けられたＰＥは複数列に配置され、前記複数列の第１列における第一のスイッチボックスは、前記ガスケットメモリと前記複数列の第１列における１番目のＰＥの間に結合され、前記複数列の最後の列における２番目のＰＥが前記ガスケットメモリに結合されることを特徴とする
請求項１に記載のプロセッサ。
【請求項３】
前記複数のＰＥにデータ記憶を提供するように構成されるメモリユニットと、
それぞれが前記複数列の異なる列に配置され、前記メモリユニットにアクセスするために前記複数のＰＥによって用いられる複数のメモリポートと、
前記シーケンサからＩＣＳＢ配置を受信するために前記シーケンサに結合され、前記ＩＣＳＢ配置に従って前記複数列の隣接する列間にデータ切り替えを提供するように構成される複数の列間スイッチボックス（ＩＣＳＢ）とをさらに備え、
前記複数のメモリポート（ＭＰ）は、前記シーケンサから前記ＭＰ配置を受信するために前記シーケンサに結合され、一つのＭＰ配置期間にプライベートアクセスモード又は共有アクセスモードで動作するように構成されることを特徴とする
請求項２に記載のプロセッサ。
【請求項４】
前記メモリユニットに記憶された一つのセグメントのデータは、前記メモリユニット内で移動することなく、プログラムの異なる部分で前記プライベートアクセスモード及び前記共有アクセスモードを通じてアクセスされることを特徴とする
請求項３に記載のプロセッサ。
【請求項５】
前記複数列のそれぞれに２つ又はそれ以上のＰＥが含まれ、前記複数のＰＥが２行又はそれ以上に形成され、
第１行のＰＥは、第一のグループの命令を実行するように構成され、第２行のＰＥは、第二のグループの命令を実行するように構成され、前記第二のグループの命令のうちの少なくとも一つの命令が前記第一のグループの命令に位置しなく、前記複数列が同じであり且つ重複列を形成することを特徴とする
請求項２から請求項４のいずれか一項に記載のプロセッサ。
【請求項６】
前記複数のメモリポートのそれぞれは、ベクトルアドレスを使用して前記メモリユニットにアクセスするように構成され、前記プライベートアクセスモードで、前記ベクトルアドレスの１つのアドレスがスレッドインデックスに従って前記メモリユニットの１つのメモリバンクにルーティングされ、一つのスレッドの全てのプライベートデータが同一のメモリバンクに位置し、
前記複数のメモリポートのそれぞれは、ベクトルアドレスを使用して前記メモリユニットにアクセスするように構成され、前記共有アクセスモードで、前記ベクトルアドレスの１つのアドレスが前記スレッドインデックスに関わらずに定義された領域においてメモリバンクにわたってルーティングされ、全てのスレッドに共有されるデータが全てのメモリバンクに分散することを特徴とする
請求項３に記載のプロセッサ。
【請求項７】
それぞれが配置バッファを含む複数の処理素子（ＰＥ）と、
前記複数のＰＥのそれぞれの配置バッファに結合され、１つ又は複数のＰＥ配置を前記複数のＰＥに割り当てるように構成されるシーケンサと、
前記複数のＰＥに結合され、前記複数のＰＥのうちの少なくとも１つのＰＥの実行結果を記憶するように構成されるガスケットメモリとを備えるプロセッサの動作方法であって、
仮想データパスを分割した各物理データパスに対応する期間毎に、前記複数のＰＥのそれぞれの配置バッファに、当該物理データパスの相異なる命令に対応するＰＥ配置を割り当て、
前記複数のＰＥのそれぞれにおいて、前記各物理データパスに対応する期間内において、当該ＰＥの配置バッファに割り当てられたＰＥ配置のもとで複数のスレッドを実行させる
プロセッサの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[関連する出願]
本出願は２０１７年３月１４日に提出されたタイトルが「Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｉｎｇ」である米国特許仮出願６２／４７１，３４０、２０１７年３月１５日に提出されたタイトルが「Ｃｉｒｃｕｌａｒ  Ｒｅｃｏｎｆｉｇｕｒａｔｉｏｎ  ｆｏｒ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｏｒ」である米国特許仮出願６２／４７１，３６７、２０１７年３月１５日に提出されたタイトルが「Ｐｒｉｖａｔｅ  Ｍｅｍｏｒｙ  Ｓｔｒｕｃｔｕｒｅ  ｆｏｒ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｏｒ」である米国特許仮出願６２／４７１，３６８、２０１７年３月１５日に提出されたタイトルが「Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｓｔｒｕｃｔｕｒｅ  ｆｏｒ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｏｒ」である米国特許仮出願６２／４７１，３７２、２０１７年３月１７日に提出されたタイトルが「Ｓｔａｔｉｃ  Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  ｆｏｒ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｏｒ」である米国特許仮出願６２／４７２，５７９の優先権を主張し、これらの出願の内容が参照により本明細書に取り組まれる。
【０００２】
本明細書の開示内容はコンピュータアーキテクチャに関し、特に再構成可能プロセッサに関する。
【背景技術】
【０００３】
大量の処理アレイを備えた再構成可能コンピューティングアーキテクチャは、計算能力のニーズを満たしながら電力及びシリコン面積効率を維持することができる。フィールドプログラマブルゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）とは異なり、粗粒度再構成可能アーキテクチャ（ＣＧＰＡ：Ｃｏａｒｓｅ−Ｇｒａｉｎｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ）は、算術論理演算ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）などのより大きな処理素子をその構築モジュールとして用いる。それは、高レベル言語を用いて処理素子（ＰＥ）アレイを迅速にプログラムする再構成可能性特徴を提供する。ＣＧＲＡの一つの典型的な設計は図１に示される。それは、ＰＥアレイ、配置メモリ、フレームバッファーとしてのメモリユニット、ＰＥ間の相互接続部材及びＰＥからフレームバッファーまでの相互接続部材から構成される。
【０００４】
一般的には、ＣＧＲＡはループレベルの並列性を探索するための方法である。それはスレッドレベルの並列性の処理に専用されない。一回の反復から次回の反復のいかなるデータ依存性、並列性は大きく制限される。したがって、多数の設計では、２Ｄアレイのサイズは８×８ＰＥアレイに制限される。
【０００５】
グラフィック処理ユニット（ＧＰＵ：Ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）アーキテクチャは、同じ命令複数スレッド（ＳＩＭＴ：Ｓａｍｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｔｈｒｅａｄ）方式で並列スレッドを実行する方法を提供する。それは特に大規模な並列コンピューティングアプリケーションに適す。これらのアプリケーションでは、通常、スレッド間に依存性がないと仮定される。このタイプの並列性がソフトウェアタスク内のループレベルの並列性を超えている（ＣＧＲＡはループレベルの並列性のために設計される）。スレッドレベルの並列性はシングルコア実行を超えてマルチコア実行まで容易に拡張することができる。スレッドレベルの並列性が最適化チャンスを提供し、そしてＰＥアレイをより効率的かつ高性能にし、８×８よりも容易に大きくする。しかしながら、ＧＰＵは再構成可能ではない。したがって、本分野においてＣＧＲＡとＧＰＵの両者の処理能力を利用できる次世代のプロセッサを開発する必要がある。
【発明の概要】
【０００６】
本開示の内容は大規模な並列データ処理のための装置、方法及びシステムを説明する。本開示の内容の様々な実施形態によるプロセッサは、ＣＧＲＡに類似したプログラマブルプロセッサアレイを使用してＧＰＵに類似した大規模なスレッドレベル並列性を利用するように設計されてもよい。一つの実施形態では、プロセッサは、ＳＩＭＴアーキテクチャと同様に、互いに同一であるが異なるデータを有するスレッドを効果的に処理することができる。ソフトウェアプログラムのデータ依存グラフは、無限の長さの仮想データパスにマッピングされてもよい。その後、仮想データパスは複数の物理データパスに適することができるセグメントに分割されてもよく、各物理データパスがその配置環境を有することができる。シーケンサは、各ＰＥの配置をその配置ＦＩＦＯに割り当てることができ、そしてスイッチボックスに類似する。ガスケットメモリ（ｇａｓｋｅｔ  ｍｅｍｏｒｙ）は１つの物理データパス配置の出力を一時的に記憶し、次の配置のための処理素子に返すことに用いられてもよい。メモリポートは読み取り及び書き込みのためのアドレスを計算することに用いられてもよい。ＦＩＦＯは各ＰＥが独立して動作することを許可することに用いられてもよい。メモリユニットに記憶されたデータは、プライベート又は共有メモリアクセス方法でアクセスされてもよい。ソフトウェアプログラムの異なる部分の同じデータは、メモリ間のデータ移動を減らすように異なるアクセス方法でアクセスされてもよい。
【図面の簡単な説明】
【０００７】
【図１】ＰＥアレイを有する従来技術のＣＧＲＡを概略的に示す。
【図２】本開示の実施形態によるプロセッサを概略的に示す。
【図３Ａ】本開示の実施形態によるプロセッサのためのメモリシステムを概略的に示す。
【図３Ｂ】本開示の実施形態によるプライベートメモリアクセスモードのための第一のメモリマッピングを概略的に示す。
【図３Ｃ】本開示の実施形態によるプライベートメモリアクセスモードのための第二のメモリマッピングを概略的に示す。
【図３Ｄ】本開示の実施形態による共有メモリアクセスのためのメモリマッピングを概略的に示す。
【図４Ａ】本開示の実施形態によるメモリポートのための第一のメモリアクセス配置を概略的に示す。
【図４Ｂ】本開示の実施形態によるメモリポートのための第二のメモリアクセス配置を概略的に示す。
【図５】本開示の実施形態によるプロセッサのためのスイッチボックスを概略的に示す。
【図６Ａ】本開示の実施形態によるプロセッサのための処理素子を概略的に示す。
【図６Ｂ】本開示の実施形態によるプロセッサのための別の処理素子を概略的に示す。
【図７】本開示の実施形態によるプロセッサのための列間スイッチボックスを概略的に示す。
【図８】本開示の実施形態によるプロセッサのためのガスケットメモリを概略的に示す。
【図９Ａ】本開示の実施形態による実行カーネルの依存グラフを概略的に示す。
【図９Ｂ】本開示の実施形態によるプロセッサにマッピングされる仮想データパスにおける図９Ａの実行カーネルの依存グラフを概略的に示す。
【図９Ｃ】本開示の実施形態によるプロセッサの物理データパスに分割される図９Ｂの仮想データパスを概略的に示す。
【図１０】本開示の実施形態によるプロセッサのためのパイプライン動作を概略的に示す。
【図１１Ａ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｂ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｃ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｄ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｅ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｆ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｇ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｈ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１１Ｉ】本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。
【図１２Ａ】本開示の実施形態によるプロセッサを使用して命令ストリームを実行するためのパイプライン動作を概略的に示す。
【図１２Ｂ】本開示の実施形態によるプロセッサを使用して命令ストリームを実行するための減少されたパイプライン動作を概略的に示す。
【図１３】本開示の実施形態による実行カーネルを実行するための方法のフローチャートである。
【図１４】本開示の実施形態による再構成のための方法のフローチャートである。
【図１５】本開示の実施形態による再構成のための別の方法のフローチャートである。
【図１６】本開示の実施形態による再構成のための別の方法のフローチャートである。
【図１７】本開示の実施形態によるメモリにアクセスするための方法のフローチャートである。
【図１８】本開示の実施形態によるメモリにアクセスするための別の方法のフローチャートである。
【図１９】本開示の実施形態による一つのセグメントのデータを再利用するための方法のフローチャートである。
【発明を実施するための形態】
【０００８】
ここで本教示の実施形態を詳細に参照し、その例が図面に示される。一致性のために、異なる図面における同じ素子は同じ図面記号で表される。実施形態と組み合わせて本教示を説明するが、理解すべきものとして、それは本教示をこれらの実施形態に限定することを意図するものではない。逆に、本教示は、代替実施形態、修正及び同等物をカバーすることを意図しており、これらの代替実施形態、修正と同等物が添付の特許請求の範囲によって限定された本教示の精神及び範囲内に含まれてもよい。
【０００９】
また、本教示の実施形態の以下の詳細な説明では、本教示に対する完全な理解を提供するように、多くの具体的な詳細を説明する。しかしながら、当業者は、これらの具体的な詳細がない場合でも本教示を実践することができることを理解する。他の場合でも、本教示の実施形態の各態様を不必要に曖昧にしないために、周知の方法、プロセス、コンポーネント及び回路を詳細に説明しない。
【００１０】
図２はプロセッサの実施形態によるプロセッサ２００を概略的に示す。プロセッサ２００はダイレクトメモリアクセス（ＤＭＡ）モジュール２０２、配置メモリ２０４、シーケンサ２０６、制御プロセッサ２０８、プログラムキャッシュ２１０、メモリユニット２１２、ＰＥアレイ２１４及びガスケットメモリ２１６を備えることができる。ＤＭＡモジュール２０２は、外部バス２３０に結合されてもよく、そして制御プロセッサ２０８によって制御されてもよい。ＤＭＡモジュール２０２は、実行可能命令と実行不可能データを外部バス２３０から出し入れすることに用いられてもよい。プログラムキャッシュ２１０は、ＤＭＡモジュール２０２の動作を制御するために制御プロセッサ２０８によって用いられる命令とデータを記憶することができる。一つの実施形態では、プログラムキャッシュ２１０に記憶された命令とデータは、シーケンサプログラムを処理するために制御プロセッサ２０８によって用いられてもよい。
【００１１】
注意すべきものとして、本明細書に用いられる、２つのコンポーネント間の「結合」（例えば一つのコンポーネントが別のコンポーネントに「結合」されること）は、２つのコンポーネントの間の電子接続を指すことができ、それが電子配線、電子素子（例えば抵抗器、トランジスタ）などを介する接続を含むことができるがこれらに限定されない。また、いくつかの実施形態では、プロセッサ２００は大規模なスレッドレベルの並列処理に用いられるように構成されてもよい。例えば、ＰＥアレイ２１４における一つの処理素子（ＰＥ）は複数の算術論理演算ユニット（ＡＬＵ）を含むことができ、これらの算術論理演算ユニットが（例えばそれぞれ別々のスレッドで）異なるデータに対して同じ動作を実行するように構成されてもよい。即ち、複数のＡＬＵを有するこれらの実施形態では、各ＰＥは、単一命令複数スレッド（ＳＩＭＴ：Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｔｈｒｅａｄｓ）方式で動作するように構成されてもよい。一つの実施形態では、ベクトルアドレスとベクトルデータ入力を有するＰＥはベクトルデータ出力を生成することができる。いくつかの実施形態では、スレッドはストリームとも呼ばれてもよい。
【００１２】
同時に実行されるマルチスレッドにデータを提供するために、いくつかの実施形態では、プロセッサ２００のコンポーネント間のいくつかの関連する電子接続はベクトル形態を呈する。例えば、ＨｘＧのベクトルアドレスはＨつのＧビットアドレスを有することができ、ＫｘＷのベクトルデータ接続はＫつのＷビットデータを有することができる。注意すべきものとして、いかなる図面に示されないが、異なるコンポーネント間のデータ又はアドレス接続に１つ又は複数の信号線が付随することができる。例えば、ビジー信号線は第一のコンポーネントと第二のコンポーネントの間に存在してもよく、そして第一のコンポーネントが有効なデータ又はアドレス信号の受信を準備しないことを示すためのビジー信号を第二のコンポーネントに伝送するために第一のコンポーネントによって用いられてもよい。また、有効な信号線は第一のコンポーネントと第二のコンポーネントの間に存在してもよく、そして有効なデータ又はアドレス信号が既に接続線に配置されたことを示すための有効信号を第一のコンポーネントに伝送するために第二のコンポーネントによって用いられてもよい。
【００１３】
配置メモリ２０４は、１つ又は複数のデータパスのための実行可能命令及び／又はデータロード命令からなるデータパスプログラムを記憶することができる。一つの実施形態では、配置メモリ２０４に記憶されたデータパスプログラムはコンパイルされた命令の（複数の）シーケンスであってもよい。例えば、データパスプログラムはＰＥアレイ２１４によって実行される命令を含むことができ、該命令が、条件が満たされる場合にどのＰＥによって実行される構成情報、及び各データパスコンポーネントがどのようにデータを保存又は送信するかを示す。
【００１４】
シーケンサ２０６は配置メモリ２０４に記憶された命令を復号し、復号された命令をメモリユニット２１２と物理データパスに移動することができる。物理データパスはＰＥアレイ２１４の様々なコンポーネント（例えば、ＰＥアレイ２１４の、データの実行、ステージング及び／又は移動に関与するコンポーネント）とガスケットメモリ２１６を含むことができる。復号された命令は、配置パッケージと呼ばれ又は配置と簡単に呼ばれてもよいパッケージの内の様々なコンポーネントに送信されてもよい。復号された命令以外、一つのコンポーネントの配置パッケージは、いくつかの他のパラメータ（例えば、一つの配置設定で、指定された命令が繰り返し実行される回数又はデータがデータ切り替えユニットを通過する回数）を含むことができる。一つの実施形態では、物理データパス配置は、物理データパスプログラムと呼ばれてもよく、該物理データパスプログラムが物理データパスに含まれる様々なコンポーネントの個々の配置を含むことができる。示されないが、シーケンサ２０６をデータパスのコンポーネントに接続する配置バスが存在してもよく、バスをそれぞれ介してこれらのコンポーネントに伝送される各配置によって用いられてもよい。
【００１５】
メモリユニット２１２は、外部バス２３０から受信されたデータを記憶し、そしてＰＥアレイ２１４によって生成された実行結果データを（これらの結果が外部バス２３０を介して送信される前に）記憶するためのデータステージングエリアであってもよい。いくつかの実施形態では、メモリユニット２１２はプロセッサ２００の外部の大型メモリシステムのプロセッサ内のキャッシュであってもよい。ＰＥアレイ２１４は複数のメモリポート（ＭＰ）２２０．１−２２０．Ｎ、複数のスイッチボックス（ＳＢ）２２２．１−２２２．Ｎ、複数の処理素子（ＰＥ）２１８．１−２１８．Ｎと複数の列間スイッチボックス（ＩＣＳＢ）２２４．１−２２４．Ｎを含むことができる。図２に示す例では、ＰＥアレイ２１４は１行の処理素子２１８．１−２１８．Ｎ（例えば１次元アレイ）を含むことができ、それがＮつのＰＥを含むことができ、ここでＮが整数である。本明細書の実施形態では、数Ｎが３２であってもよい。しかし、これは例であり、そして他の実施形態で１６、３２、６４などの別の整数であってもよいがこれらに限定されない。示されたこれらの例数は２の冪であってもよいが、一つの実施形態では、１行におけるＰＥの数が２の冪である必要がない。いくつかの実施形態では、ＰＥアレイ２１４は、複数行の処理素子（例えば１行又は複数行のＰＥがＰＥ２１８．１−２１８．Ｎの下に配置されてもよい）を含むことができる２次元アレイであってもよい。注意すべきものとして、説明するために、ＰＥアレイ２１４は、ＭＰ、ＳＢ、ＩＣＳＢとＰＥの複合体であってもよく、そしてこれらのコンポーネントをまとめて呼ばれるために用いられる。いくつかの実施形態では、メモリユニット２１２とＭＰ２２０．１−２２０．Ｎはマルチポートメモリユニットとまとめて呼ばれてもよい。
【００１６】
複数のＭＰ２２０．１−２２０．ＮはＰＥアレイ２４１とメモリユニット２１２の間のデータストリームのゲートウェイであってもよい。各ＭＰ２２０．１−２２０．Ｎはそれぞれメモリユニット２１２に結合されてメモリユニット２１２から読み取られ、メモリユニット２１２に書き込むことができる。ＭＰ２２０．１とＭＰ２２０．Ｎ以外、全てのＭＰはいずれも２つの隣接するＭＰに結合されてもよく、これにより、各ＭＰは１番目のＭＰからデータを受信し、及び／又は第二のＭＰへデータを送信するように構成されてもよい。ＭＰ間の電子結合は一方向のデータフロー（例えば、一つの計算配置指定データが１つのＭＰから次のＭＰに流れることができる）を提供することができる。例えば、図２に示すように、一方向のデータフローに対して、ＭＰ２２０．１はＭＰ２２０．２に結合されてもよく、一方向のデータフローに対して、ＭＰ２２０．２はＭＰ２２０．３に結合されてもよい。最後のＭＰ２２０．Ｎは例外であってもよく、そしてデータの一時的な記憶を提供できるガスケットメモリに２１６に結合される。１番目のＭＰ２２０．１は、ガスケットメモリ２１６から一方向のデータフローを受信することができるため、別の例外であってもよい。いくつかの実施形態では、ＭＰ２２０．１−２２０．ＮはＰＥ行方向に沿ってデータルーティングバスを形成することができる。即ち、データがＭＰ間にルーティングする方向は、データがＰＥ間にルーティングする方向に平行することができる。２次元ＰＥアレイを有する実施形態では、各ＭＰ２２０．１−２２０．Ｎは１列のＰＥによって共有されてもよい。一つの実施形態では、ガスケットメモリ２１６は、ＰＥアレイからデータを収集して新しい配置のためにＰＥアレイにフィードバックするように、データバッファ（例えば先入れ先出し（ＦＩＦＯ：Ｆｉｒｓｔ−Ｉｎ−Ｆｉｒｓｔ−Ｏｕｔ）型）として用いてもよい。
【００１７】
いくつかの実施形態では、ＰＥとＭＰは、一つの配置のための命令で静的にプログラムすることができる。例えば、命令はパイプライン段階としてＰＥ及びＭＰにプログラムされてもよく、そして一つの配置期間に命令が変更されない。アドレス計算命令とメモリアクセス命令（例えば読み取り又は記憶）はメモリポート（ＭＰ）にマッピングされてもよく、そして他の命令はＰＥにマッピングされてもよい。
【００１８】
図２に示すように、ＩＣＳＢ２２４．１−２２４．Ｎのそれぞれが対応するＳＢ２２２．１−２２２．Ｎと２つの隣接するＩＣＳＢに結合されてもよく、ＩＣＳＢ２２４．１及びＩＣＳＢ２２４．Ｎを除く。ＩＣＳＢ２２４．１はＭＰ２２２．１、ガスケットメモリ２１６とＩＣＳＢ２２４．２に結合されてもよい。また、ＩＣＳＢ２２４．Ｎは、ＭＰ２２２．Ｎ、ガスケットメモリ２１６とＩＣＳＢ２２４．Ｎ−１に結合されてもよい。いくつかの実施形態では、ＩＣＳＢ２２０．１−２２０．ＮはＰＥ行方向に沿って別のデータルーティングバスを形成することができる。即ち、データがＩＣＳＢ間にルーティングする方向は、データがＰＥ間にルーティングする方向に平行することができる。ＩＣＳＢもデータ切り替えユニットと呼ばれてもよい。一つの実施形態では、１つ又は複数のＩＣＳＢは１つ又は複数のＰＥをバイパスするようにデータをルーティングすることに用いられてもよい。
【００１９】
ＳＢ２２２．１−２２２．Ｎは、隣接するＰＥに、ＰＥからデータルーティングバス及びＭＰ２２０．１−２２０．Ｎによって形成されたデータルーティングバスとＩＣＳＢ２２４．１−２２４．Ｎによって形成されたデータルーティングバスまでのデータ切り替えを提供するように構成されてもよい。例えば、スイッチボックス２２２．１は、データをガスケットメモリ２１６、ＭＰ２２０．１とＩＣＳＢ２２４．１から処理素子２１８．１に伝送するためのデータ切り替えを提供するように構成されてもよい。また、スイッチボックス２２２．１は、ガスケットメモリ２１６、ＭＰ２２０．１とＩＣＳＢ２２４．１の間にデータをルーティングするように構成されてもよい。別の例として、スイッチボックス２２２．２は、データを処理素子２１８．１、ＭＰ２２０．２とＩＣＳＢ２２４．２から処理素子２１８．２に伝送するためのデータ切り替えを提供するように構成されてもよい。また、スイッチボックス２２２．２は、処理素子２１８．２、ＭＰ２２０．２とＩＣＳＢ２２４．２の間にデータをルーティングするように構成されてもよい。別の例として、スイッチボックス２２２．Ｎは、データをＰＥ２１８．Ｎ−１、ＭＰ２２０．ＮとＩＣＳＢ２２４．Ｎから処理素子２１８．Ｎに伝送するためのデータ切り替えを提供するように構成されてもよい。また、スイッチボックス２２２．Ｎは、ＰＥ２１８．Ｎ−１、ＭＰ２２０．ＮとＩＣＳＢ２２４．Ｎの間にデータをルーティングするように構成されてもよい。ＳＢもデータ切り替えユニットと呼ばれてもよい。
【００２０】
例示的なデータパスはＭＰ２２２．１〜２２２．Ｎの例示的な内部接続によって示されてもよい。例えば、図２に示すように、ＭＰ２２２．１はＰＥ２１８．１の２つの入力がＭＰ２２０１からの２つの出力に結合されてもよいことを示すことができ、ＭＰ２２２．２はＰＥ２１８．２の２つの入力がＭＰ２２０．２からの２つの出力に結合されてもよいこと、及びＰＥ２１８．２の２つの入力がＰＥ２１８．１からの２つの出力に結合されてもよいことを示すことができ、ＭＰ２２２．３はＰＥ２１８．３の２つの入力がＭＰ２２０．３からの２つの出力に結合されてもよいこと、及びＰＥ２１８．３の２つの入力がＰＥ２１８．２からの２つの出力に結合されてもいことを示すことができ、これによって類推し、ＭＰ２２２．Ｎが、ＰＥ２１８．Ｎの２つの入力がＭＰ２２０．Ｎからの２つの出力に結合されてもよいこと及びＰＥ２１８．Ｎの２つの入力がＰＥ２１８．Ｎ−１からの２つの出力に結合されてもよいことを示すことができるまで続く。
【００２１】
言葉遣いを簡素化するために、ＭＰ２２０はＭＰ２２０．１〜２２０．Ｎのうちの一つを指すことができ、ＳＢ２２２はＳＢ２２．１〜２２２．Ｎのうちの一つを指すことができ、ＰＥ２１８はＰＥ２１８．１〜２１８．Ｎのうちの一つを指すことができ、ＩＣＳＢ２２４はＩＣＳＢ２２４．１〜２２４．Ｎのうちの一つを指すことができる。
【００２２】
図３Ａは本開示の実施形態によるプロセッサのためのメモリシステムを概略的に示す。メモリシステムはメモリユニット３００と複数のメモリポート２２０．１〜２２０．Ｎを備えることができる。メモリユニット３００は図２におけるメモリユニット２１２の実施形態であってもよく、そして複数のメモリバンク（例えば、３０２．１と表記されるメモリバンク０、３０２．Ｎと表記されるメモリバンク１、３０２．Ｎと表記されるメモリバンクＮ−１など）と複数のメモリキャッシュ３０４．１〜３０４．Ｎを含むことができる。メモリバンク３０２のそれぞれが対応するメモリキャッシュ３０４に結合されてもよい。例えば、メモリバンク３０２．１はメモリキャッシュ３０４．１に結合されてもよく、メモリバンク３０２．２はメモリキャッシュ３０４．２に結合されてもよく、メモリバンク３０２．Ｎはメモリキャッシュ３０４．Ｎに結合されてもよく、これによって類推する。各メモリキャッシュ３０４は複数のメモリポート２２０．１〜２２０．Ｎの全てに個別に結合されてもよい。例えば、メモリキャッシュ３０４．１はＭＰ２２０．１〜２２０．Ｎに結合されてもよく、メモリキャッシュ３０４．２はＭＰ２２０．１〜２２０．Ｎに結合されてもよく、メモリキャッシュ３０４．ＮはＭＰ２２０．１〜２２０．Ｎに結合されてもよく、これによって類推する。
【００２３】
メモリユニット３００に個別に結合された全てのメモリキャッシュ３０４．１〜３０４．Ｎに加えて、ＭＰ２２０．１〜２２０．４は行方向データルーティングバスを形成するために連鎖されてもよく、同時に、ＭＰ２２０．１とＭＰ２２０．Ｎはそれぞれガスケットメモリ２１６に一端で結合される（図２に示される）。ＭＰ２２０．１〜２２０．Ｎのそれぞれはさらに書き込みデータ（ＷＤａｔａ）入力３０６と読み取りデータ（ＲＤａｔａ）出力３０８を含むことができる。例えば、ＭＰ２２０．１は書き込みデータ入力３０６．１と読み取りデータ出力３０８．１を含むことができ、ＭＰ２２０．２は書き込みデータ入力３０６．２と読み取りデータ出力３０８．２を含むことができ、ＭＰ２２０．Ｎは書き込みデータ入力３０６．Ｎと読み取りデータ出力３０８．Ｎを含むことができる。書き込みデータ入力３０６と読み取りデータ出力３０８はＳＢ２２２．１〜２２２．Ｎの対応する出力及び入力に結合されてもよい。一つの実施形態では、書き込みデータ入力３０６のそれぞれと読み取りデータ出力データ３０８のそれぞれがベクトルデータ接続用に構成されてもよい。例えば、書き込みデータ入力３０６．１は一つの３２ｘ３２入力又は２つの３２ｘ１６入力であってもよく、そして読み取りデータ出力３０８．１は一つの３２ｘ３２出力又は２つの３２ｘ３２出力であってもよい。本明細書で使用される場合、データ入力又はデータ出力もデータポートと呼ばれてもよい。
【００２４】
メモリユニット３００とＭＰ２２０．１〜２２０．Ｎは、プライベートメモリアクセスモードと共有メモリアクセスモードの２つのアクセスモードをサポートすることができ、これらのモードがプライベートメモリアクセス方法と共有メモリアクセス方法とも呼ばれてもよい。一つのＭＰでは、ベクトルアドレスを使用して複数のデータユニットを読み取り又は書き込むことができる。一つのベクトルのためのこれらのアドレスは互いに異なる可能性がある。ライベートメモリアクセスモードにおいて、ベクトルアドレスのうちの一つのアドレスはスレッドインデックスに従って一つのメモリバンクにルーティングされてもよい。一つのスレッドのための全てのプライベートデータは、同じメモリバンクに配置されてもよい。共有メモリアクセスモードにおいて、各ＭＰは、スレッドインデックスに関わらず、定義された領域のいずれかの位置にアクセスすることができる。スレッドで共有される全てのデータは、全てのメモリバンクに分散されてもよい。
【００２５】
メモリユニットの構造は、エラー!レファレンスソース取得できなかったに示される。一つの例として、ＰＥアレイの各列には、複数のバスが通過する一つのＭＰがある可能性がある。メモリポートは、共有（例えば共有メモリアクセスモード）又はプライベート（例えばプライベートメモリアクセスモード）として構成されてもよい。各メモリポートはさらにデータキャッシュネットワークに結合されてもよい。
【００２６】
図３Ｂは本開示の実施形態によるプライベートメモリアクセスモードのための第一のメモリマッピングを概略的に示す。各メモリバンク３０２．１〜３０２．Ｎは複数の「ワード（ｗｏｒｄ）」を含むことができる。図３Ｂに示す実施形態では、メモリバンクにおける各ワードは５１２ビット幅であってもよく、そして３２つのデータユニットを含むことができ、これらのデータユニットがそれぞれ１６ビットであってもよい。エラー!レファレンスソース取得できなかった。スレッド「ｉ」の連続したデータユニットは、Ｓｉ（０）、Ｓｉ（１）、．．．．．．と呼ばれてもよく、そしてメモリバンクｉに記憶される。例えば、スレッドゼロ（「０」）のためのデータユニットＳ０（０）、Ｓ０（１）〜Ｓ０（３１）は、メモリバンク３０２．１の１番目のワードに記憶されてもよく、そしてスレッド０のためのデータユニットＳ０（３２）、Ｓ０（３３）〜Ｓ０（６３）は、メモリバンク３０２．１の２番目のワードに記憶されてもよく、これによって類推する。同様に、スレッド１（「１」）のためのデータユニットＳ１（０）、Ｓ１（１）〜Ｓ１（３１）は、メモリバンク３０２．２の１番目のワードに記憶されてもよく、そしてスレッド１のためのデータユニットＳ１（３２）、Ｓ１（３３）〜Ｓ１（６３）は、メモリバンク３０２．２の２番目のワードに記憶されてもよく、これによって類推する。また、スレッド３１のためのデータユニットＳ３１（０）、Ｓ３１（１）〜Ｓ３１（３１）は、メモリバンク３０２．Ｎの１番目のワードに記憶されてもよく、そしてスレッド３１のためのデータユニットＳ３１（３２）、Ｓ３１（３３）〜Ｓ３１（６３）は、メモリバンクＮ−１の２番目のワードに記憶されてもよく、これによって類推する。
【００２７】
この第一のメモリマッピングの一つの実施形態では、異なるスレッドのためのデータユニットは、異なるメモリバンクに記憶されてスレッドＮのための第一のバンクに折り返すことを意図することができる。例えば、Ｎ＝３２の場合、３２番目のスレッドのためのデータユニットはメモリバンク０に記憶されてもよく（例えば、メモリバンク０のデータユニットＳ３２（０）〜Ｓ３２（３１））、３３番目のスレッドのためのデータユニットはメモリバンク１に記憶されてもよく（例えば、メモリバンク１のデータユニットＳ３３（０）〜Ｓ３３（３１））、６３番目のスレッドのためのデータユニットはメモリバンクＮ−１に記憶されてもよく（例えば、メモリバンク０のデータユニットＳ６３（０）〜Ｓ６３（３１））、これによって類推する。
【００２８】
図３Ｂの同じメモリ構造の場合、異なる方式でデータをマッピングすることができる。図３Ｃは本開示の実施形態によるプライベートメモリアクセスモードのための第二のメモリマッピングを概略的に示す。図３Ｃに示すメモリユニット３００は図３Ａにおける同じ複数のメモリバンクを含むことができ、図３Ｃのメモリバンク３０２．１〜３０２．Ｎの各ワードも５１２ビット幅であってもよく、そして各データユニットは１６ビット幅である。エラー!レファレンスソース取得できなかった。スレッドｉの連続したデータユニットは、依然としてメモリバンクｉに記憶されてもよいが、異なるワードに記憶される。例えば、スレッド０のためのデータユニットＳ０（０）、Ｓ０（１）などは、メモリバンク３０２．１で列方向に異なるワードに記憶されてもよく、スレッド１のためのデータユニットＳ１（０）、Ｓ０（１）などは、メモリバンク３０２．２で列方向に異なるワードに記憶されてもよく、スレッド３２のためのデータユニットＳ３１（０）、Ｓ３１（１）などは、メモリバンク３０２．Ｎで列方向に異なるワードに記憶されてもよく、これによって類似する。
【００２９】
この第二のメモリマッピングの一つの実施形態では、異なるスレッドのためのデータユニットは、異なるメモリバンクに記憶されてスレッドＮとＮの整数倍（例えば２Ｎ、３Ｎなど）の第一のバンクに折り返すことを意図することができる。そして、同じインデックスを有する異なるスレッドの一つのグループのデータユニットはメモリバンクの同じワードにマッピングされてもよい。例えば、Ｎ＝３２の場合、３２番目のスレッドのためのデータユニットはメモリバンク３０２．１の異なるワードに記憶されてもよく（例えば、第二列のメモリバンク３０２．１のデータユニットＳ３２（０）〜Ｓ３２（９９）、その中データユニットＳ０（ｍ）とＳ３２（ｍ）が同じワードに位置し、ｍがスレッド内のデータインデックスである）、３３番目のスレッドのためのデータユニットはメモリバンク３０２．２の異なるワードに記憶されてもよく（例えば、第二列のメモリバンク３０２．２のデータユニットＳ３３（０）〜Ｓ３３（９９）、その中データユニットＳ１（ｍ）とＳ３３（ｍ）が同じワードに位置し、ｍがスレッド内のデータインデックスである）、６３番目のスレッドのためのデータユニットはメモリバンク３０２．Ｎの異なるワードに記憶されてもよく（例えば、メモリバンク０のデータユニットＳ６３（０）〜Ｓ６３（９９）、その中データユニットＳ３１（ｍ）とＳ６３（ｍ）が同じワードに位置し、ｍがスレッド内のデータインデックスである）、これによって類推する。各ワードが３２つのデータユニットを有するため、メモリバンク３０２．１の第１行の最後のデータユニットはスレッド９９２の第一のデータユニットＳ９９２（０）であってもよく、メモリバンク３０２．２の第１行の最後のデータユニットはスレッド９９３の第一のデータユニットＳ９９３（０）であってもよく、これによって類推し、メモリバンク３０２．Ｎの第１行の最後のデータユニットはスレッド１０２３の第一のデータユニットＳ１０２３（０）であってもよいまで続く。注意すべきものとして、スレッドは９９つ以上のデータユニットを有することで、そしてＳｉ（９９）（例えばＳ０（９９）など）はスレッドの最後のデータユニットではない可能性があり、そして点線はより多くのデータユニットが存在し且つメモリバンクに記憶されることを示す可能性がある。
【００３０】
スレッド１０２４とより多くのスレッドのためのデータユニットはメモリバンク０の第１列からラップアラウンドされてもよく、これによって類推する。例えば、ｍがインデックスである場合、スレッド１０２４、１０５６そのまま２０１６までのデータユニット（例えばＳ１０２４（ｍ）、Ｓ１０５６（ｍ）そのままＳ２０１６（ｍ）まで）はメモリバンク０の一つのワードに記憶さてもよく、スレッド１０２５、１０５７そのまま１０５７までのデータユニット（例えばＳ１０２５（ｍ）、Ｓ１０５７（ｍ）そのままＳ２０１７（ｍ）まで）はメモリバンク１の一つのワードに記憶さてもよく、スレッド１０５、１０８７そのまま２０４７までのデータユニット（例えばＳ１０５５（ｍ）、Ｓ１０８７（ｍ）そのままＳ２０４７（ｍ）まで）はメモリバンクＮ−１の一つのワードに記憶さてもよい。
【００３１】
図３Ｄは本開示の実施形態による共有メモリアクセスのためのメモリマッピングの一つの例を概略的に示す。図３Ｄに示すメモリユニット３００は図３Ａにおける同じ複数のメモリバンクを含むことができ、図３Ｄのメモリバンク３０２．１〜３０２．Ｎの各ワードも５１２ビット幅であってもよく、そして各データユニットは１６ビット幅である。この例では、共有メモリアクセスのためのメモリマッピング（連続したデータユニットＡ（０）、Ａ（１））はインターリーブ方式で異なるメモリバンクに記憶されてもよい。例えば、Ｎ＝３２の場合、Ａ（０）、Ａ（１）、Ａ（２）などはＮつのメモリバンクに分散してもよく、ここでＡ（１）がメモリバンク０に存在し、Ａ（２）がメモリバンク１に存在し、これによって類推して、Ａ（３１）がメモリバンクＮ−１に存在するまで続き、そしてラップアラウンドし、ここでＡ（Ｎ）がメモリバンク０のＡ（０）と同じワードに存在し、Ａ（Ｎ＋１）がメモリバンク１のＡ（１）と同じワードに存在し、これによって類推して、Ａ（Ｎ＋３１）がメモリバンクＮ−１のＡ（３１）と同じワードに存在するまで続き、そしてこれによって類推してラップアラウンドし、Ａ（９９２）（例えばＡ（３１Ｎ））がメモリバンク０のＡ（０）と同じワードに存在するまで続き、Ａ（９９３）（例えばＡ（３１Ｎ＋１））がメモリバンク１のＡ（１）と同じワードに存在するまで続き、これによって類推してＡ（１０２３）（例えばＡ（３１Ｎ＋３１））がメモリバンクＮ−１のＡ（３１）と同じワードに存在するまで続く。メモリバンクの１つのワードが充填されてもよい場合、より多くの連続したデータユニットはメモリバンクの別のワードに分散してもよい。例えば、Ａ（１０２４）、Ａ（１０５６）〜Ａ（２０１６）はメモリバンク０の別のワードに存在してもよく、Ａ（１０２５）、Ａ（１０５７）〜Ａ（２０１７）はメモリバンク１の別のワードに存在してもよく、これによって類推して、Ａ（１０５５）、Ａ（１０８７）〜Ａ（２０４７）がメモリバンクＮ−１の別のワードに存在するまで続く。
【００３２】
プライベート又は共有メモリアクセスモードに関わらず、メモリユニット３００のキャッシュ３０４．１−３０４．Ｎのそれぞれは、対応するメモリバンクからのメモリワードをそれぞれ一時的に格納できる複数のキャッシュラインを含むことができる。例えば、キャッシュ３０４．１は、メモリバンク３０２．１（例えばメモリバンク０）から取得された一つのワードを一時的に記憶するようにそれぞれ構成されてもよい複数のキャッシュラインを含むことができ、キャッシュ３０４．２は、メモリバンク３０２．２（例えばメモリバンク１）から取得された一つのワードを一時的に記憶するようにそれぞれ構成される複数のキャッシュラインを含むことができ、キャッシュ３０４．Ｎは、メモリバンク３０２．Ｎから取り出された一つのワードを一時的に記憶するようにそれぞれ構成される複数のキャッシュラインを含むことができ、これによって類推する。要求された１つ又は複数のデータセグメント（例えば１つ又は複数のデータユニット）がキャッシュに存在しない場合、キャッシュミスが発生する可能性がある。一つの実施形態では、キャッシュミスが発生する場合、メモリユニット３００のメモリバンク（例えば図３Ｂ、図３Ｃ又は図３Ｄ）の一つのメモリワードを一つのキャッシュラインとしてキャッシュに抽出することができる。一般的には、キャッシュサイズが大きくなるほど、メモリワードを記憶するためのキャッシュラインがより多くなり、そしてキャッシュミス率が低くなることが予想される。いくつかの実施形態では、キャッシュのメモリユニットはレジスタとして実施されてもよい。
【００３３】
メモリユニット２１２におけるデータ記憶はキャッシュ３０４．１〜３０４．Ｎを介してＭＰ２２０．１〜２２０．Ｎによってアクセスされてもよい。各列のメモリポート（ＭＰ）は、メモリの動作、例えばアドレス計算と発行読み取り及び／又は記憶動作を実行するために同じコンポーネントが配置されてもよい。いくつかの実施形態では、一つのキャッシュ３０４は同時に複数のＭＰによってアクセスされてもよい。各ＭＰはプライベートメモリアクセスモードと共有メモリアクセスモードの２つのアクセスモードを提供するように構成されてもよい。ＳＩＭＴの性質により、異なるスレッドのためのＭＰにマップされたメモリ読み取り又は書き込み命令は、同一のタイプに属し、即ち共有又はプライベートである。また、ＭＰは、配置期間におけるプライベート又は共有メモリアクセスモードのために構成されてもよい。
【００３４】
図４Ａは本開示の実施形態によるメモリポート（ＭＰ）４００のための第一のメモリアクセス配置を概略的に示す。ＭＰ４００はメモリポート２２０の実施形態であってもよい。図４Ａに示す第一のメモリアクセス配置はプライベートメモリアクセスモードのための一つの配置例であってもよい。動作中、ＭＰ４００は、シーケンサから物理データパスのためのメモリポート（ＭＰ）配置を受信することができ、そしてＭＰ配置が、該物理データパスに対してＭＰ４００がプライベートメモリアクセスモードのために構成されてもよいことを指定することができる。ＭＰ４００は、アドレス計算ユニット４０２とカウンタ４０４を含むことができる。アドレス計算ユニット４０２は、ベースアドレスを第一の入力とし、オフセットを第２の入力とし、そしてカウンタ４０４から第三の入力を取得することができる。ベースアドレスは全てのスレッドのための共通アドレスであってもよい。オフセットはＭＰ４００のアドレス入力ポートに結合されてもよく、該ポートがベクトルアドレスを受信するように構成されてもよい。ベクトルアドレスは、各並列スレッドのための各アドレスを含むことができ、そしてこれらのアドレスがアドレスオフセットと呼ばれてもよい。一つの実施形態では、第一のメモリアクセス配置におけるベースアドレスはスレッド０のデータユニット０（例えば５０（０））の開始アドレスを含むことができる。並列スレッドの数はＰＥにおけるＡＬＵの数及びベクトルアドレスとベクトルデータバスの幅によって制限される可能性がある。例えば、ＰＥのＡＬＵベクトル内のＡＬＵの数がＮであり、ベクトルアドレスがＮつのアドレスを含むことができ、ベクトルデータバスがＮつのデータバスを含むことができる場合、並列スレッドがＮつであってもよい。オフセット入力はＮつのスレッドのためのベクトルアドレスであってもよい。各アドレスオフセット（例えばベクトルアドレスにおける各アドレス）は個別にプログラム／計算されてもよい。
【００３５】
カウンタ４０４からの第三の入力は、アドレス計算ユニット４０２にスレッド番号（例えばインデックス）を提供することができ、したがって、カウンタ４０４は、スレッドカウンタと呼ばれてもよい。一つの実施形態では、アドレスベクトル、読み取りデータベクトルと書き込みデータベクトルは、異なるスレッドのデータが異なるメモリバンクにマッピングされるように、一対一のマッピングにより各メモリバンクに簡単に分割されてもよい。例えば、ベクトルアドレスのうちのｉ番目のアドレスは、スレッドｉ（小文字「ｉ」がスレッド番号を表し、１番目のスレッドに対して０から始まることができる）に用いられてもよく、カウンタ４０４は、アドレス計算ユニット４０２にスレッド番号ベクトルを提供することができ、これにより、アドレス計算ユニット４０２はＮつのアドレスを、この例でＡＬＵのベクトルサイズに対応するＡ＿０、Ａ＿１、．．．．．．、Ａ＿Ｎ−１として生成することができる。ベクトルアドレスのうちの各アドレスは、アドレスＡ＿ｉ及び対応するメモリバンクの対応するアドレス出力にマッピングされてもよい（例えば、Ａ＿０がメモリバンク０のキャッシュ３０４．１のためのアドレスポート４１０．１に結合され、Ａ＿Ｎ−１がメモリバンクＮ−１のキャッシュ３０４．Ｎのためのアドレスポート４１０．Ｎに結合されるなど）。ベクトル書き込みデータポートＷＤａｔａ  ４０６のｉ番目のデータラインはＷＤ＿ｉにマッピングされてもよい（例えばＷＤ＿０がメモリバンク０のキャッシュ３０４．１のための書き込みデータポート４１２．１に結合され、ＷＤ＿Ｎ−１がメモリバンクＮ−１のキャッシュ３０４．Ｎのための書き込みデータポート４１２．Ｎに結合されるなど）。ベクトル読み取りデータポートＲＤａｔａ  ４０８のｉ番目のデータラインはＲＤ＿ｉにマッピングされてもよい（例えばＲＤ＿０がメモリバンク０のキャッシュ３０４．１のための書き込みデータポート４１４．１に結合され、ＲＤ＿Ｎ−１がメモリバンクＮ−１のキャッシュ３０４．Ｎのための読み取りデータポート４１４．Ｎに結合されるなど）。この配置では、バススイッチが不要である可能性があり、このレベルでメモリの競合がない可能性がある。
【００３６】
注意すべきものとして、メモリバンクの数は、ベクトルサイズと同じである必要がない。例えば、ベクトル（例えばベクトルＡＬＵ、ベクトルアドレス、ベクトルデータポート）のベクトルサイズ＝Ｖ、ＰＥアレイの列数＝Ｎ、メモリユニットのメモリバンク数＝Ｍが可能であり、Ｖ、Ｎ及びＭは全て異なってもよい。便宜上、本明細書で大文字Ｎは、本明細書でベクトルサイズ、ＰＥの列数及びメモリバンクの数を表すことができるが、異なるコンポーネントにおいてＮで表される数は同じでも異なってもよい。
【００３７】
数字Ｎより大きいスレッド数に対して、アドレス計算ユニット４０２とカウンタ４０４はＮつのメモリバンクにラップアラウンドするメモリマッピングを生成することができる。例えば、スレッド３２は、メモリバンク０のキャッシュ３０４．１にマップされてもよく（例えば、図３Ｂ及び図３ＣでＳ３２（０）がメモリバンク３０２．１にマッピングされる）、スレッド６３は、メモリバンクＮ−１のキャッシュ３０４．Ｎにマップされてもよい（例えば、図３Ｂと図３ＣでＳ６３（０）がメモリバンク３０２．Ｎにマッピングされる）。
【００３８】
図４Ｂは本開示の実施形態によるＭＰ４００のための第二のメモリアクセス配置を概略的に示す。図４Ｂに示す第二のメモリアクセス配置は共有メモリアクセスモードのための一つの配置例であってもい。動作中、ＭＰ４００は、シーケンサから物理データパスのためのメモリポート（ＭＰ）配置を受信することができ、そしてＭＰ配置が、該物理データパスに対してＭＰ４００が共有メモリアクセスモードのために構成されてもよいことを指定することができる。アドレス計算ユニット４０２は、ベースアドレスを第一の入力とし、オフセットを第２の入力とすることができ、図４Ａにおける第一のメモリアクセス配置と同じである。しかし、カウンタ４０４は共有メモリアクセスモードに用いられなく、そしてカウンタ４０４からの入力を無視することができる。共有メモリのベースアドレスは全てのスレッドに共通であるが、オフセットはスレッドごとに異なる可能性がある。アドレス計算ユニット４０２はＮつのアドレスを、この例でＡＬＵのベクトルサイズに対応するＡ＿０、Ａ＿１、……、Ａ＿Ｎ−１として生成することができる。図４Ａにおける第一のメモリアクセス配置（各アドレスＡ＿ｉが１つのメモリバンクにマッピングされてもよく）と逆に、第二のメモリアクセス配置では、アドレス計算ユニット４０２からのＮつのアドレスは、複数のアドレス選択ユニット（例えば、「選択２」ユニット４１６．１〜４１６．Ｎ）に送信されてもよい。各アドレス選択ユニット４１６．１〜４１６．Ｎは、マスクを入力（例えば「バンク０」、．．．．．、及び「バンクＮ−１」）として用いることができ、そして特定のメモリバンクのアドレスに対して、対応する選択ユニットによって選択することができ、そのためいくつかのアドレスを選択することができる。選択可能なアドレスの上限数は、設計上の考慮事項に依存してもよく、例えば２、３又はそれ以上である。
【００３９】
また、ベクトルアドレスは固定数のアドレスを有するため、複数のアドレスが１つのメモリバンクに向けられている場合、１つ又は複数のメモリバンクが指定されたアドレスを有しない可能性がある。選択されたアドレスはメモリバンクのキャッシュのためのメモリポート（例えば、メモリバンク０のキャッシュ３０４．１のためのアドレスポート４２６．１、メモリバンクＮ−１のキャッシュ３０４．Ｎのためのアドレスポート４２６．Ｎなど）にマッピングされてもよい。例えば、一つの実施例では、Ｎつのアドレスから最大２つのアドレスを選択することができ、そして各アドレスポート４２６．１〜４２６．Ｎは、対応するメモリバンクに最大２つのメモリアドレスを送信するように構成されてもよい。
【００４０】
１つのメモリバンクに対して複数のアドレスを選択できるため、書き込みデータ選択ユニット（例えば「選択２」ユニット４１８．１〜４１８．Ｎ）と読み取りデータ選択ユニット（例えば「選択」ユニット４２０．１〜４２０．Ｎ）を提供し、複数のデータポートをベクトルデータポートＷＤａｔａ  ４０６とＲＤａｔａ  ４０８から一つのメモリバンクにマッピングすることができる。書き込みデータ選択ユニット４１８．１〜４１８．Ｎのそれぞれは、対応するデータ選択ユニット４１６．１〜４１６．Ｎから入力を取得し、書き込みデータラインＷＤ＿０〜ＷＤ＿Ｎ−１からの複数の書き込みデータラインを、選択されたメモリバンクのための対応する書き込みデータポート（例えば、メモリバンク０のキャッシュ３０４．１のための書き込みデータポート４２２．１、メモリバンクＮ−１のキャッシュ３０４．Ｎのための書き込みデータポート４２２．Ｎ）にマッピングすることができる。読み取りデータ選択ユニット４２０．１〜４２０．Ｎのそれぞれは、対応するデータ選択ユニット４１８．１〜４１８．Ｎから送信された、対応するデータ選択ユニット４１６．１〜４１６．Ｎから入力を取得し、読み取りデータラインＲＤ＿０〜ＲＤ＿Ｎ−１からの複数の読み取りデータラインを、選択されたメモリバンクのための対応する読み取りデータポート（例えば、メモリバンク０のキャッシュ３０４．１のための読み取りデータポート４２４．１、メモリバンクＮ−１のキャッシュ３０４．Ｎのための読み取りデータポート４２２．Ｎ）にマッピングすることができる。Ｎつのアドレスから最大２つのアドレスを選択することができる実施形態では、アドレスポート４２６．１〜４２６．Ｎ、書き込みデータポート４２２．１〜４２２．Ｎと読み取りデータポート４２４．１〜４２４．Ｎの幅はアドレスポート４１０．１〜４１０．Ｎ、書き込みデータポート４１２．１〜４１２．Ｎと読み取りデータポート４１４．Ｎの幅の２倍であってもよい。
【００４１】
プロセッサの実施形態は、大量のＡＬＵを含み、大規模な並列スレッドをサポートすることができる。メモリアクセスが非常に忙しい可能性がある。要求を満たすためにマルチポートメモリを使用すると、コストが非常に高い可能性がある。大量のメモリバンクを使用すると、複雑さも非常に高くなる可能性がある。プライベートメモリアクセスの例は、メモリ構造の複雑さを軽減し、並列処理のための多くの典型的なメモリアクセスモードをサポートすることができる。いくつかの典型的なプライベートメモリアクセスモードがリストされる。
【表１】
0006960479.tif 000002
0006960479.tif 000003
【００４２】
いくつかの実施形態では、プライベートメモリアクセスにより、全てのスレッドからのランダムスデータアクセスが同時に許可されてもよく、しかし、スレッドごとに異なるメモリ領域にアクセスすることができる。これにより、プログラマーは、複雑なデータのベクトル化と基礎となるプロセッサハードウェアアーキテクチャの詳細な知識を必要とせずに、従来のスタイルでソフトウェアを作成することができる。これにより、同じ命令マルチスレッド（ＳＩＭＴ）プログラミングがＰＥアレイの実施形態に応用されてもよい。即ち、１つの命令が１つのＰＥの複数のスレッドによって同時に実行されてもよい。
【００４３】
オーバーラップしない性質のため、合計スループットは、全てのスレッドのスループットの合計になる可能性がある。プライベートメモリアクセスモードの実施形態は、各スレッドからの同時アクセスによる大きなスループットをサポートすることができる。第一及び第二のメモリデータマッピングは典型的なプライベートメモリアクセスモードで最小のメモリ競合を許可することができる。プライベートメモリアクセスの実施形態はメモリシステムの複雑さを低減させることができる。メモリバンクの数を大幅に削減することができる。並列キャッシュ構造は、キャッシュ内の各コンテンツが一意である可能性があるため、合計キャッシュサイズを削減することができる。また、プライベートメモリアクセスの実施形態は、複数のメモリポートからの同時キャッシュアクセスを許可することにより、メモリバンクへのアクセスを大幅に減らすことができる。
【００４４】
一つの実施形態では、３２ｘ３２のＡＬＵを有するＰＥアレイサイズの場合、プライベートメモリアクセス配置を使用すると、３２つのメモリバンクのみを必要とする可能性がある（例えば、図４Ａに示される）。各スレッドで使用される異なるアドレスをサポートするための従来設計に対して、これは１０２４つのメモリバンクからのメモリバンクの数を大幅に削減させることができる。
【００４５】
異なるメモリアクセスモードでは、異なるマッピング方法を使用することができ、図３Ｂと図３Ｃのマッピングは図４Ａに示すメモリアクセス配置の実施形態によってアドレス生成命令を使用してサポートされてもよい。
【００４６】
図３Ｂの第一のメモリマッピングは表１におけるケース１、ケース２、ケース３とケース４をよく処理することができる。表１におけるケース６では、範囲がキャッシュサイズ内であれば、よく処理することもできる。図３Ｃの第二のメモリマッピングは表１におけるケース１、ケース２、ケース３とケース５をよく処理することができる。
【００４７】
いくつかの実施形態では、レジスタオーバーフローが発生する可能性がある。レジスタオーバーフローは、コンパイラがマシンコードを生成している時に、マシンが有するレジスタの数よりも多くのライブ変数があるため、一部の変数がメモリに転送又はオーバーフローされる可能性があるというシナリオを指す可能性がある。レジスタオーバーフローのためのメモリは、各スレッドに対してプライベートである可能性があり、これらのオーバーフローした変数はプライベートメモリに記憶される必要がある可能性がある。レジスタオーバーフローのための全てのアドレスオフセットが各スレッドに対して同じである可能性があるため、それは表１のケース５の非ユニティストライドモードに類似しており、図３Ｃに示すように、オーバーフローした変数が第二のメモリマッピングを使用して記憶されてもよく、メモリの競合がない可能性がある。
【００４８】
共有メモリアクセスモードの例は、メモリ構造の複雑さを軽減し、並列処理のための多くの典型的なメモリアクセスモードをサポートすることができる。いくつかの典型的な共有メモリアクセスモードがリストされる。
【表２】
0006960479.tif 000004
0006960479.tif 000005
【００４９】
いくつかの実施形態では、共有メモリアクセスにより、各並列スレッドからのランダムデータアクセスが同時に許可されてもよい。全てのスレッドは、メモリユニットの共通領域のいずれかの箇所にアクセスすることができる。一つの実施形態では、共通領域は、全てのメモリバンクを含む共有メモリ空間であってもよい。別の実施形態では、共通領域は、複数のメモリバンクにわたる共有メモリ空間であってもよい。これにより、プログラマーは、複雑なデータのベクトル化と基礎となるプロセッサハードウェアアーキテクチャの詳細な知識を必要とせずに、従来のスタイルでソフトウェアを作成することができる。これにより、ＳＩＭＴプログラミングがＰＥアレイの実施形態に応用されてもよい。
【００５０】
共有メモリアクセスの実施形態はメモリシステムの複雑さを低減させることができる。メモリバンクの数を大幅に削減することができる。並列キャッシュ構造は、キャッシュ内の各コンテンツが一意である可能性があるため、合計キャッシュサイズを削減することができる。また、共有メモリアクセスの実施形態は、複数のメモリポートからの同時キャッシュアクセスを許可することにより、メモリバンクへのアクセスを大幅に減らすことができる。
【００５１】
注意すべきものとして、図２に示すように、各ＭＰは２つの読み取りデータポート（メモリユニット２１２からＭＰへの２つの矢印と対応するＳＢへの２つの矢印、例えばＭＰ２２０．１の場合、上部のメモリユニット２１２からの２つの矢印と下部のＳＢ２２２．１への２つの矢印）と２つの書き込みデータポート（メモリユニット２１２への２つの矢印と対応するＳＢからの２つの矢印、例えば、ＭＰ２２０．１の場合、上部のメモリユニット２１２からの２つの矢印と下部のＳＢ２２２．１への２つの矢印）を提供することができ、次のＭＰ又はガスケットメモリ２１６からの２つの入力と次のＭＰ又はガスケットメモリ２１６への２つの出力（例えば、ＭＰ間の左から右へ、ＭＰ２２０．Ｎからガスケットメモリ２１６へ、ガスケットメモリ２１６からＭＰ２２０．１への２つの水平矢印）をさらに提供することができる。即ち、いくつかの実施例では、ＭＰ４００は、２つの並列データアクセス動作のための２つの並列メモリアクセス、例えば２つの読み取り、２つの書き込み又は１つの読み取りと１つの書き込みを提供するように図４Ａ及び図４Ｂに示す重複する一つのグループのコンポーネントを有することができる。いくつかの実施形態では、２つの並列データアクセス動作はベクトルデータ動作であってもよい。即ち、２つの読み取り動作は２つのベクトルデータ読み取り（例えば、２Ｎセグメントのデータを読み取り、Ｎが並列スレッドの数である）であってもよく、２つの書き込み動作は２つのベクトルデータ書き込み（例えば、２Ｎのセグメントのデータを書き込み、Ｎが並列スレッドの数である）であってもよく、一つの読み取りと一つの書き込み動作は一つのベクトルデータ読み取りと一つのベクトルデータ書き込み（例えば、Ｎセグメントのデータを読み取り、Ｎセグメントのデータを書き込み、Ｎが並列スレッドの数である）であってもよい。例えば、一つの実施形態では、並列する一つの読み取りと一つの書き込み動作を実行するために、ＭＰは同じ列のＰＥのためにＮセグメントのデータを読み取り、同時に前の列のＰＥによって生成されたＮセグメントのデータを書き込むことができる。
【００５２】
一つの実施形態では、３２ｘ３２のＡＬＵを有するＰＥアレイサイズの場合、共有メモリアクセス配置を使用すると、３２つのメモリバンクのみを必要とする可能性がある（例えば、図４Ｂに示すように）。各スレッドで使用される異なるアドレスをサポートするための従来設計に対して、これは１０２４つのメモリバンクからのメモリバンクの数を大幅に削減させることができる。
【００５３】
図５は本開示の実施形態によるスイッチボックス（ＳＢ）５００を概略的に示す。ＳＢ５００はＳＢ２２２の実施形態であってもよく、そして複数のデータ入力とデータ出力、及びデータ出力をデータ入力に結合してデータ切り替えを行うための相互接続部材を含むことができる。ＳＢ５００のデータ入力はデータ入力５０２．１、５０２．２、５１２．１、５１２．２、５１４．１と５１４．２を含むことができる。ＳＢ５００のデータ出力はデータ出力５０４．１、５０４．２、５０６．１、５０６．２、５０８．１、５０８．２、５１０．１と５１０．２を含むことができる。ＳＢ５００はさらに配置バッファ５１８及び対応する配置入力５１６を含むことができる。配置バッファ５１８は、先入れ先出しバッファとして実施されてもよく、Ｃ−ＦＩＦＯ５１８と呼ばれる。配置入力５１６は、外部から配置バスに結合されてもよく、ＳＢ５００がシーケンサ２０６から配置を受信するために該配置バスがシーケンサ２０６に結合される。ＳＢ５００のための配置はＳＢ配置と呼ばれてもよい。また、ＳＢ５００はさらに複数のカウンタ５２０．１〜５２０．８を含むことができ、該複数のカウンタがそれぞれデータ出力に対応し、例えば、カウンタ５２０．１がデータ出力５０４．１に用いられ、カウンタ５２０．２がデータ出力５０４．２に用いられ、カウンタ５２０．３がデータ出力５０６．１に用いられ、カウンタ５２０．４がデータ出力５０６．２に用いられ、カウンタ５２０．５がデータ出力５０８．１に用いられ、カウンタ５２０．６がデータ出力５０８．２に用いられ、カウンタ５２０．７がデータ出力５１０．１に用いられ、カウンタ５２０．８がデータ出力５１０．２に用いられる。
【００５４】
ＳＢ５００の各データ入力はいくつかのデータ出力に結合されてもよい。例えば、データ入力５０２．１はデータ出力５０６．１、５０６．２、５０８．２、５１０．１と５１０．２に結合されてもよく、データ入力５０２．２はデータ出力５０６．１、５０６．２、５０８．１、５１０．１と５１０．２に結合されてもよく、データ入力５１２．１はデータ出力５０４．１、５０４．２、５０６．１、５０６．２と５０８．１に結合されてもよく、データ入力５１２．２はデータ出力５０４．１、５０４．２、５０６．１、５０６．２と５０８．２に結合されてもよく、データ入力５１４．１はデータ出力５０４．１、５０６．１、５０６．２、５０８．１と５１０．２に結合されてもよく、データ入力５１４．１はデータ出力５０４．２、５０６．１、５０６．２、５０８．２と５１０．１に結合されてもよい。
【００５５】
外部的に、ＰＥアレイ２１４内のＳＢ５００の位置に応じて、データ入力５０２．１及び５０２．２、データ出力５０４．１及び５０４．２は、ＭＰ２２０又は別のＳＢ２２２（例えば複数行のＰＥアレイ内）に結合されてもよい。データ入力５１４．１及び５１４．２はＰＥ２１８又はガスケットメモリ２１６に結合されてもよい。データ入力５１２．１及び５１２．２、データ出力５１０．１及び５１０．２は、別のＳＢ２２２（例えば複数行のＰＥアレイ内）又はＩＣＳＢ２２４に結合されてもよい。データ出力５０６．１、５０６．２、５０８．１及び５０８．２はＰＥ２１８に結合されてもよい。データ出力５０６．１、５０６．２、５０８．１及び５０８．２から出力されたデータ信号は、Ａ、Ｂ、Ｃ、Ｄとして示されてもよく、そしてデータ入力５１４．１、５１４．２から入力されたデータ信号は、Ｘ、Ｙとして示されてもよい。これらのデータ信号Ａ、Ｂ、Ｃ、Ｄ及びＸ、Ｙは、本明細書で説明されるように、ＰＥ２１８への入力データ信号、ＰＥ２１８からの出力データ信号であってもよい。
【００５６】
データ出力のカウンタ５２０．１−５２０．８のそれぞれは、通過するデータのカウントを個別に行うことができる。１つ又は複数の配置がＣ−ＦＩＦＯ５１８にロードされてもよい場合、各配置はカウント数を指定することができる。一つの配置の実行期間に、全てのカウンタはデータが通過する回数を個別にカウントすることができる。全てのカウンタが配置によって指定されたカウント数に達する場合、次の配置を応用することができる。類似の方法はＩＣＳＢ２２４、ＰＥ２１８、ガスケットメモリ２１６とメモリポート２２０の内部に応用されてもよい。これらのカウンタがこのようなカウンタを備える可能性のある各コンポーネントの配置と再構成を容易にするため、これらのカウンタは再構成カウンタと呼ばれてもよく、そしてこのようなカウンタを備えるコンポーネントは、再構成可能ユニットと呼ばれてもよい。プロセッサ２００の実施形態は、様々な再構成可能ユニットを使用して大規模な並列データ処理を提供することができ、そして再構成可能並列プロセッサ（ＲＰＰ：ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｏｒ）と呼ばれてもよい。
【００５７】
図６は本開示の実施形態による処理素子（ＰＥ）６００を概略的に示す。ＰＥ６００はＰＥ２１８の実施形態であってもよい。ＰＥ６００は算術論理演算ユニット（ＡＬＵ）６０２、複数のデータバッファ（例えば、Ｄ−ＦＩＦＯ６０４．１、６０４．２、６０４．３及び６０４．４）、カウンタ６０６、複数のデータ出力（例えば６０８．１及び６０８．２）、複数のデータ入力（例えば６１０．１、６１０．２、６１０．３及び６１０．４）、配置入力６１２と配置バッファ（例えばＣ−ＦＩＦＯ）６１４）を備えることができる。一つの実施形態では、ＡＬＵ６０２は、１つのＡＬＵ（例えば、１つのＡＬＵは、一つのセグメントのデータを一回処理するように構成され、スカラーＡＬＵと呼ばれてもよい）であってもよい。いくつかの他の実施形態では、ＡＬＵ６０２は、ＡＬＵのベクトル（又はベクトルＡＬＵと呼ばれる）、例えば、ＮつのＡＬＵ（ＮがＡＬＵのベクトルサイズと呼ばれてもよい）であってもよく、同じ命令マルチデータ（ＳＩＭＤ）はベクトルの全てのＡＬＵに応用されてもよい。注意すべきものとして、スカラーＡＬＵはベクトルサイズが１であるベクトルＡＬＵの特殊な例である可能性がある。
【００５８】
データ入力６１０．１、６１０．２、６１０．３及び６１０．４から受信されたデータ信号はＡ、Ｂ、Ｃ、Ｄとして示されてもよく、そしてデータ出力６０８．１及び６０８．２から出力されたデータ信号は、Ｘ、Ｙとして示されてもよい。ＡＬＵ６０２が１つのＡＬＵであってもよい実施形態では、各データ入力６１０．１、６１０．２、６１０．３又は６１０．４及び各データ出力６０８．１又は６０８．２は、Ｍビット幅（それがＡＬＵの幅と一致することができる）を有することができる。例えば、８ビットのＡＬＵの場合、各入力と出力は８ビットであってもよく、１６ビットのＡＬＵの場合、各入力と出力は１６ビットであってもよく、３２ビットのＡＬＵの場合、各入力と出力は３２ビットであってもよく、これによって類推する。また、各入力データ信号Ａ、Ｂ、Ｃ、Ｄと各出力データ信号Ｘ、Ｙは、Ｍビットであってもよい。ＡＬＵ６０２がＡＬＵのベクトルであってもよい実施形態では、各データ入力６１０．１、６１０．２、６１０．３又は６１０．４はＮつのＭビットの入力のベクトルであってもよく、各データ出力６０８．１又は６０８．２はＮつのＭビットの出力のベクトルであってもよい。また、各入力データ信号Ａ、Ｂ、Ｃ、Ｄと各出力データ信号Ｘ、Ｙは、ＮｘＭビットであってもよい。
【００５９】
データバッファ６０４．１〜６０４．４は、入力６１０．１、６１０．２、６１０．３及び６１０．４に結合され、データセグメントを一時的に記憶することができる。しかしながら、いくつかの実施形態では、データバッファは出力として構成されてもよい。ＰＥが独立して動作することを許可するように、Ｄ−ＦＩＦＯ６０４．１−６０４．４は、ＰＥのタイミングを分離することに用いられてもよい。一つの実施形態では、バッファはＦＩＦＯ（例えば、データバッファのためのＤ−ＦＩＦＯ、配置バッファのためのＣ−ＦＩＦＯ）として実施されてもよい。
【００６０】
配置バッファＣ−ＦＩＦＯ６１４は、配置入力６１２から配置を受信することができ、該配置入力が配置バスを介して外部からシーケンサ２０６に結合されてもよく、そしてデータパスの実行が開始する前に受信された配置を記憶することができる。ＰＥ６００のための配置はＰＥ配置と呼ばれてもよい。ＰＥ６００は、１つの配置のための命令で静的にプログラムされてもよく、例えば、命令がパイプライン段階としてＰＥ６００にプログラムされてもよい。１つの配置期間に、命令を変更しなくてもよい。配置を行う場合、Ｄ−ＦＩＦＯ６１０．１、６１０．２、６１０．３及び６１０．４にデータがあり、出力ポート６０８．１及び６０８．２が忙しくないと、ＡＬＵ６０２（例えば、特定の実施形態の１つのＡＬＵ又はＡＬＵのベクトルに依存する）の動作をトリガすることができる。配置パラメータのうちの一つは命令のための指定された実行回数に対する数であってもよい。カウンタ６０６は、指定された数でプログラムされてもよく、命令を実行することによりデータを処理する回数をカウントすることに用いられる。実行の回数が指定された数に達する場合、新しい配置を応用することができる。したがって、各ＰＥで再構成能力を提供することができる。一つの実施形態では、命令のための指定された実行回数はＮＵＭ＿ＥＸＥＣと呼ばれ、このＮＵＭ＿ＥＸＥＣが１つの配置のためのデータパスにわたって使用されてもよい。
【００６１】
複数行のＰＥアレイ２１４を有する一つの実施形態では、各列内のＰＥは機能的に互いに異なってもよいが、各行に沿ったＰＥは、重複パターン（例えば機能的に重複する）に従う。第１行のＰＥにおけるＡＬＵは第一のグループの命令を実行することができ、第２行のＰＥにおけるＡＬＵは第一のグループの命令と異なる第二のグループの命令を実行することができる。即ち、ＰＥ６００の異なる実施形態では、ＡＬＵ６０２は、異なる構造又は異なる機能的コンポーネントを含むことができる。いくつかの実施形態では、プロセッサの１行又は複数行のＰＥは、比較的単純で少ないスペースを使用するＡＬＵを含むことができ、同じプロセッサの別の行のＰＥは、比較的複雑でより多くのスペースを使用するＡＬＵを含むことができる。比較的単純なＡＬＵによって実行される一つのグループの命令は比較的複雑なＡＬＵによって実行される一つのグループの命令と異なってもよい。例えば、ＰＥ６００の一つの実施形態は、一つのグループ命令を実行するＡＬＵ６０２（例えば、一つのＡＬＵ又はＡＬＵのベクトル）を有することができ、これらの命令が比較的単純な構造、例えば加算（例えばＡ＋Ｂ）、減算（例えば、Ａ−Ｂ）などを必要とするがこれらに限定されなく、ＰＥ６００の別の実施形態は命令を実行するＡＬＵ６０２を有することができ、これらの命令がより複雑な構造、例えば乗算（例えば、ＡにＢを掛ける（Ａ＊Ｂ）、ＭＡＤ（積和演算（ＭＡＣ）操作）（例えばＡ＊Ｂ＋Ｃ）を必要とするがこれらに限定されない。
【００６２】
図６Ｂは本開示の別の実施形態による別の処理素子（ＰＥ）６２０を概略的に示す。処理素子６２０はＰＥ２１８の代替実施形態であってもよい。図６Ｂに示すように、ＰＥ６２０は処理素子６００に類似する構造を有し、そして複数のインジケータ「Ｓ」６２２．１〜６２２．４を含み、これらのインジケータのそれぞれが１つの対応するＤ−ＦＩＦＯに関連付けられてもよい点で異なる。例えば、インジケータ６２２．１はＤ−ＦＩＦＯ６０４．１に関連付けられてもよく、インジケータ６２２．２はＤ−ＦＩＦＯ  ６０４．２に関連付けられてもよく、インジケータ６２２．３はＤ−ＦＩＦＯ６０４．３に関連付けられてもよく、インジケータ６２２．４はＤ−ＦＩＦＯ６０４．４に関連付けられてもよい。これらのインジケータは、静的読み取り配置（静的ロード配置とも呼ばれる）に用いられてもよい。例えば、一つの配置期間に、該配置に従って、命令がＰＥによって指定された回数（例えばＮＵＭ＿ＥＸＥＣ＝３）実行されるように設定されてもよい。命令を実行すると、４つのＤ−ＦＩＦＯ６０４．１〜６０４．４からの全てのデータを使用することができる。インジケータ６２２．２を設定してもよく、他のインジケータ６２２．１、６２２．３及び６２２．４を設定しなくてもよい。命令を繰り返すとともに、Ｄ−ＦＩＦＯ６０４．２のデータを使用することができるが、Ｄ−ＦＩＦＯ６０４．１、６０４．３及び６０４の新しいデータが命令の繰り返しごとに用いられてもよい。
【００６３】
図７は本開示の実施形態による列間スイッチボックス（ＩＣＳＢ）７００を概略的に示す。ＩＣＳＢ７００はＩＣＳＢ７２２４の実施形態であってもよく、そして複数のデータ入力とデータ出力、及びデータ出力をデータ入力に結合してデータ切り替えを行うための相互接続部材を含むことができる。ＩＣＳＢ７００のデータ入力はデータ入力７０４．１、７０４．２と７１０．１〜７１０．４を含むことができる。ＩＣＳＢ７００のデータ出力はデータ出力５０６．１、５０６．２、５０６．１と７０８．１〜７０８．４を含むことができる。ＩＣＳＢ７００はさらに配置バッファ７０２及び対応する配置入力７１２を含むことができる。配置バッファ７０２は、先入れ先出しバッファとして実施されてもよく、Ｃ−ＦＩＦＯ７０２と呼ばれる。配置入力７１２は、外部から配置バスに結合されてもよく、該配置バスがシーケンサ２０６に結合される。また、ＩＣＳＢ７００はさらに複数のカウンタ７１４．１〜７１４．６を含むことができ、該複数のカウンタがそれぞれデータ出力に対応し、例えば、カウンタ７１４．１がデータ出力７０８．１に用いられ、カウンタ７１４．２がデータ出力７０８．２に用いられ、カウンタ７１４．３がデータ出力７０８．３に用いられ、カウンタ７１４．４がデータ出力７０８．４に用いられ、カウンタ７１４．５がデータ出力７０６．１に用いられ、カウンタ７１４．６がデータ出力７０６．２に用いられる。
【００６４】
ＩＣＳＢ７００の各データ入力はいくつかの選択されたデータ出力に結合されてもよい。例えば、データ入力７０４．１はデータ出力７０８．１〜７０８．４に結合されてもよく、データ入力７０４．２はデータ出力７０８．１〜７０８．４に結合されてもよく、データ入力７１０．１はデータ出力７０６．１〜７０６．２、及び７０８．１に結合されてもよく、データ入力７１０．２．２はデータ出力７０６．１〜７０６．２、及び７０８．２に結合されてもよく、データ入力７１０．３はデータ出力７０６．１〜７０６．２、及び７０８．３に結合され、データ入力７１０．４はデータ出力７０６．１〜７０６．２、及び７０８．４に結合されてもよい。
【００６５】
外部的に、データ入力７０４．１及び７０４．２、データ出力７０６．１及び７０６．２は、ＳＢ２２２に結合されてもよい。データ入力７１０．１〜７１０．４は隣接するＩＣＳＢ２２４又はガスケットメモリ２１６に結合されてもよい。データ出力７０８．１〜７０８．４は別の隣接するＩＣＳＢ２２４又はガスケットメモリ２１６に結合されてもよい。
【００６６】
データ出力のカウンタ７１４．１−７１４．６のそれぞれは、通過するデータのカウントを個別に行うことができる。１つ又は複数の配置がＣ−ＦＩＦＯ７０２にロードされてもよい場合、各配置はカウント数を指定することができる。ＩＣＳＢ７００のための配置はＩＣＳＢ配置と呼ばれてもよい。ＰＥアレイ２１４の一つの配置の実行期間に、全てのカウンタはデータが通過する回数を個別にカウントすることができる。全てのカウンタが配置によって指定されたカウント数に達する場合、次の配置を応用することができる。この実施形態はＳＢ２２２、ＰＥ２１８、ガスケットメモリ２１６とメモリポート２２０の内部に応用されてもよい実施形態に類似することができる。
【００６７】
図８は本開示の実施形態によるガスケットメモリ８００を概略的に示す。ガスケットメモリ８００は図２に示すガスケットメモリ２１６の実施形態であってもよい。ガスケットメモリ８００はデータを一時的に記憶するための複数のデータバッファを備えることができる。データバッファは、先入れ先出し（ＦＩＦＯ）バッファとして実施されてもよく、そしてＤ−ＦＩＦＯ（例：Ｄ−ＦＩＦＯ８０２．１−８０２．Ｆ、Ｆが８以上の整数である）と呼ばれる。また、ガスケットメモリ８００は、複数のデータ入力（例えば、８１４．１−８１４．２、８１６．１−８１６．２及び８１８．１−８１８．４）、複数のデータ出力（例えば、８０８．１−８０８．２、８１０．１−８１０．２及び８１２．１−８１２．４）、入力配置バッファ（例えば入力Ｃ−ＦＩＦＯ８０４）、出力配置バッファ（例えば出力Ｃ−ＦＩＦＯ８０６）、配置入力８１６、複数の入力カウンタ８２０．１−８２０．Ｌ（Ｌが４以上の整数である）、及び複数の出力カウンタ８２２．１−８２２．２を含むことができる。
【００６８】
ＭＰ２２０．Ｎ、ＰＥ２１８．Ｎ及びＩＣＳＢ２２４．Ｎからの外部接続は、それぞれデータ入力８１４．１−８１４．２、８１６．１−８１６．２及び８１８．１−８１８．４での入力として使用されてもよい。また、ＭＰ２２０．１、ＳＢ２２２．１及びＩＣＳＢ２２４．１への外部接続は、それぞれデータ出力８０８．１−８０８．２、８１０．１−８１０．２及び８１２．１−８１４．４で出力を生成することができる。配置入力８１６は、シーケンサ２０６から配置を受信するためにガスケットメモリ８００の配置バスを介して外部からシーケンサ２０６に結合されてもよい。ガスケットメモリ８００のための配置はガスケットメモリ配置と呼ばれてもよい。シーケンサ２０６から入力配置と出力配置という２種類の配置を受信することができる。入力Ｃ−ＦＩＦＯ８０４は、ＬつのＤ−ＦＩＦＯ８０２．５−８０２．Ｆから選択された、入力ＩＣＳＢポート８１８．１−８１８．４に結合されるいくつかのデータＦＩＦＯのための入力配置をこれらの選択されたＤ−ＦＩＦＯの入力として記憶することができる。出力Ｃ−ＦＩＦＯ８０６は、ＬつのＤ−ＦＩＦＯ８０２．５−８０２．Ｆから選択された、ＩＣＳＢポート８１２．１−８１２．４に結合されるいくつかのデータＦＩＦＯのための配置を記憶することができる。
【００６９】
ＩＣＳＢ入力を記憶するためのガスケットＤ−ＦＩＦＯ８０２．５−８０２．Ｆの数は入力又は出力ＩＣＳＢポートの数以上になる可能性がある。いくつかの実施形態では、本明細書で説明されるように、物理データパスの少なくとも一部をバイパスできるデータ接続が存在することができる。例えば、同じ物理データパス配置では、１つのＰＥ２１８によって生成された実行結果は、別のＰＥ２１８に対して必要ではない可能性があるが、将来の配置で使用されてもよい。実行結果のためのこれらのデータ信号は、ＳＢ２２２及びＩＣＳＢ２２４を介してガスケットメモリ２１６にルーティングされ、将来の配置のためにガスケットメモリ２１６のＤ−ＦＩＦＯに記憶されてもよい。したがって、いくつかの実施形態では、ガスケットメモリ８００は、入力ポート又は出力ポートの数よりも多くのＤ−ＦＩＦＯを有してもよい。
【００７０】
データ入力での入力カウンタ８２０．１−８２０．Ｌのそれぞれとデータ出力での出力カウンタ８２２．１−８２２．４のそれぞれは通過するデータのカウントを個別に行うことができる。１つ又は複数の入力配置と出力配置が入力Ｃ−ＦＩＦＯ８０４と出力Ｃ−ＦＩＦＯ８０６にロードされてもよい場合、各配置はカウント数を指定することができる。一つの配置の実行期間に、全てのカウンタはデータが通過する回数を個別にカウントすることができる。全てのカウンタが配置によって指定されたカウント数に達する場合、次の配置を応用することができる。
【００７１】
図９Ａは本開示の実施形態による実行カーネル９００の依存グラフを概略的に示す。一つの実施形態では、１つのループ（例えば、１つのルーチン又は１つのサブルーチン）で実行されてもよい命令のシーケンスは、実行カーネルと呼ばれてもよく又は簡単にカーネルと呼ばれてもよい。グループ内の命令には依存関係がある可能性がある。例えば、カーネル９００は、依存グラフでＡ−Ｋとして示される命令を有することができる。命令Ａは、カーネル９００の依存グラフの第一の命令であってもよい。命令Ｂと命令Ｃは、命令Ａの出力を必要とする可能性がある。命令Ｄと命令Ｋの両者は命令Ｂの出力を必要とする可能性がある。命令Ｄも命令Ｃの出力を必要とする可能性がある。命令Ｅと命令Ｆの両者は命令Ｄの出力を必要とする可能性がある。命令Ｇ、命令Ｈと命令Ｉは命令Ｆの出力を必要とする可能性がある。命令Ｆの出力に加えて、命令Ｇは命令Ｅの出力を必要とする可能性がある。命令Ｊはそれぞれ命令Ｇ、命令Ｈと命令Ｉの出力を必要とする可能性がある。また、最後、命令Ｋは命令Ｂと命令Ｉの出力を必要とする可能性がある。本開示の実施形態によれば、カーネル９００の依存グラフは、プロセッサによって実行されるデータパスにマッピングされてもよい。
【００７２】
図９Ｂは本開示の実施形態によるプロセッサにマッピングされる仮想データパス（ＶＤＰ：ｖｉｒｔｕａｌ  ｄａｔａ  ｐａｔｈ）における図９Ａの実行カーネル９００の依存グラフを概略的に示す。いくつかの実施形態では、カーネルの依存グラフからプロセッサへのマッピングは、複数の要因、例えば、ＰＥアレイのサイズ、ＰＥ間の接続、メモリアクセス能力などによって制限される可能性がある。注意すべきものとして、図２におけるプロセッサ２００は１列のＰＥを備えたプロセッサの一つの実施形態を概略的に示しているが、図９Ｂに示す実施形態では、カーネル９００の仮想データパスは、２行（「２」）ＰＥを有するプロセッサにマッピングされてもよい。一般的には、本開示の実施形態によるプロセッサは、１−Ｄ又は２−Ｄデータパス（処理素子（ＰＥ）アレイと相互接続部材を含む）を利用して大規模な並列データを処理することができる。各データパスは複数のセクションに分割されてもよい。１−Ｄデータパスでは、セクションは１列にメモリポート、スイッチボックス、ＰＥ及びＩＣＳＢを含むことができ、２−Ｄデータパスでは、セクションは１列にメモリポート、２つ又はそれ以上のスイッチボックス、２つ又はそれ以上のＰＥ及びＩＣＳＢを含むことができる。データパスを各セクションで同一にすることができる。これにより、カーネルの依存グラフが仮想データパスにマッピングされることを許可し、該仮想データパスが１次元のデータパスセクションの必要な回数の繰り返し（例えば制限されなく、又はさらには理論的に無限）を含むことができる。例えば、カーネルの命令はＰＥの列にマッピングされてもよく、行方向に繰り返して拡張する（例えば、必要に応じて行の先頭からループバックする）ことができる。
【００７３】
図９Ｃは本開示の実施形態によるプロセッサの物理データパスに分割される図９Ｂの仮想データパスを概略的に示す。一つの実施形態では、コンパイラの作業を簡素化するために、物理データパス（ＰＤＰ）が繰り返し構造を有するようにすることができる。例えば、各列が同じであってもよく、各ＰＤＰは同じ量の重複列を含むことができる。図９Ｃに示すように、２ｘ２のＰＥアレイに対して、図９ＢのＶＤＰは３つのＰＤＰ（例えばＰＤＰ１、ＰＤＰ２及びＰＤＰ３）に分割されてもよく、そのためこの３つのＰＤＰが同じ構造を有することができる。２ｘ２のＰＥアレイは、ＲＰＰの実施形態のＰＥアレイ全体であってもよく、又はＲＰＰの別の実施形態のＮｘＮ（例えば、例としてＮが３２である）のＰＥアレイの一部であってもよい。１つのＰＤＰのＰＥ間（例、Ａ−Ｂ及びＣ、Ｂ−Ｄ、Ｃ−Ｄなど）、２つの連続したＰＤＰの間（例Ｄ−Ｅ及びＦ、Ｇ−Ｊ、Ｈ−Ｊ、Ｆ−Ｉなど）と連続しないＰＤＰの間（例えばＢ−Ｋ）に多くの接続が存在する可能性がある。一つのＰＤＰでは、ＰＥアレイ内の全てのＰＥが現在のＰＤＰのための配置を応用することができ、一つの命令からのデータが依存性に従って別の命令に直接流れることができる。例えば、ＰＥはＰＤＰ１で命令Ａを実行するように配置され、このＰＥからのデータはこのＰＥから、命令Ｂ及びＣを実行するように構成されるＰＥに直接流れることができる。ＰＤＰ間では、１つのＰＤＰからのデータは、一時的に記憶するようにガスケットメモリに流れることができる。データは、新しい配置のうちの次の物理データパスへの入力としてガスケットメモリから流れることができる。例えば、一つの配置では、ＰＥはＰＤＰ１で命令Ｂを実行するように構成されてもよく、このＰＥからのデータはガスケットメモリに記憶されてもよく、将来の配置においてＰＤＰ３で命令Ｋを実行するように構成されるＰＥの入力として使用される。
【００７４】
図１０は本開示の実施形態によるプロセッサのためのパイプライン動作を概略的に示す。図１０に示すパイプライン動作の例は図９Ｃの４つのＰＥ（ＰＥ０、ＰＥ１、ＰＥ２とＰＥ３）にマッピングされた２ｘ２ＰＥアレイの物理データパスであってもよい。図９Ｃに示すように、仮想データパスのＡ、Ｂ、Ｃ、…Ｋの命令は、ＰＤＰ即ちＰＤＰ１、ＰＤＰ２とＰＤＰ３に分割されてもよい。ＰＥ０は、ＰＤＰ１で命令Ａを実行し、ＰＤＰ２で命令Ｅを実行し、ＰＤＰ３で命令Ｉを実行するように構成されてもよい。ＰＥ１は、ＰＤＰ１で命令Ｂを実行し、ＰＤＰ２で命令Ｆを実行し、ＰＤＰ３で命令Ｊを実行するように構成されてもよい。ＰＥ２は、ＰＤＰ１で命令Ｃを実行し、ＰＤＰ２で命令Ｇを実行し、ＰＤＰ３で命令Ｋを実行するように構成されてもよい。ＰＥ３は、ＰＤＰ１で命令Ｄを実行し、ＰＤＰ２で命令Ｈを実行し、ＰＤＰ３で命令を実行しないように構成されてもよい。
【００７５】
動作中、１つのＰＥの全ての並列スレッドが同じ命令を実行することができ、各命令が１つのＰＥでパイプライン段階として複数回実行されてもよい。即ち、各ＰＥはパイプライン段階として命令をＮＵＭ＿ＥＸＥＣ回実行するように構成されてもよい。例えば、各ＰＥがベクトルサイズが１であるＡＬＵベクトルを含むことができる実施形態では、各命令は、各ＰＥでＡＬＵベクトルにより４回実行するように構成されてもよい。４回の実行は各スレッドが異なる陰影で処理される４つのスレッドによって表されてもよい。例えば、ＰＤＰ１では、ＰＥ０は命令Ａを４回実行するように構成されてもよく、ＰＥ１は命令Ｂを４回実行するように構成されてもよく、ＰＥ２は命令Ｃを４回実行するように構成されてもよく、ＰＥ３は命令Ｄを４回実行するように構成されてもよい。ＰＤＰ２では、ＰＥ０は命令Ｅを４回実行するように構成されてもよく、ＰＥ１は命令Ｆを４回実行するように構成されてもよく、ＰＥ２は命令Ｇを４回実行するように構成されてもよく、ＰＥ３は命令Ｈを４回実行するように構成されてもよい。ＰＤＰ３では、ＰＥ０は命令Ｉを４回実行するように構成されてもよく、ＰＥ１は命令Ｊを４回実行するように構成されてもよく、ＰＥ２は命令Ｋを４回実行するように構成されてもよく、ＰＥ３は命令を実行しないように構成されてもよい。この実施形態では、異なる命令間にデータ依存性が存在する可能性があるため、別の命令に依存する命令を実行するスレッドが時間的に後に実行されてもよい。例えば、命令Ｂが命令Ａの実行結果からのデータに依存してもよく、そのため、命令Ｂを実行する第一のスレッドは後の周期で、命令Ａを実行するスレッドに従うことができ、命令Ｂを実行する第二のスレッドは後の周期で、命令Ａを実行するスレッドに従うことができ、命令Ｂを実行する第三のスレッドは後の周期で、命令Ａを実行する第三のスレッドに従うことができ、命令Ｂを実行する第四のスレッドは後の周期で、命令Ａを実行する第四のスレッドに従うことができる。静的再構成スキームと命令の依存性により、ＤＰＤ再構成中にいくつかの時間が失われる可能性があり、例えば、ＰＤＰ１からＰＤＰ２への移行中に、ＰＥ２が１つのアイドル周期を有する可能性がある。各ＰＥが、ベクトルサイズＮが１よりも大きいＡＬＵを有する実施形態では、各ＰＥはＮつの並列スレッドを一回実行することができ、図１０の各陰影付きスレッドはＮつのスレッドを表すことができる。
【００７６】
様々な実施形態では、ガスケットメモリは、再構成中に効率損失を低減する方法を提供することができる。例えば、再構成（例えば、ＰＤＰ１の命令ＣとＰＤＰ２の命令Ｇの間のＰＥ２の再構成）中にいくつかのアイドルスロットが存在する可能性があり、スレッドの数が多い場合、アイドルスロットはビジー周期合計と比較して重要ではない可能性がある。
【００７７】
図１１Ａ−図１１Ｉは本開示の実施形態によるプロセッサの配置プロセスを概略的に示す。配置プロセスはデータパス（ＤＰ）配置及び再構成を示すことができる。シーケンサユニット（ＳＥＱ）１１０２は、シーケンサ２０６の実施形態であってもよく、各ＰＥ（例えば、ＰＥ＿０  １１０４、ＰＥ＿１  １１０６とＰＥ＿２  １１０８）とスイッチボックス（ＳＢ）（例えばＳＢ＿１  １１１０、ＳＢ＿２  １１１２、ＩＣＳＢ＿１  １１１４とＩＣＳＢ＿２  １１１６）に命令／配置をスケジューリングすることができる。ＰＥ  １１０４、１１０６及び１１０８のそれぞれはＰＥ２１８の実施形態であってもよい。ＳＢ  １１１０及び１１１２のそれぞれはＳＢ２２２の実施形態であってもよい。ＩＣＳＢ１１１４及び１１１６のそれぞれはＩＣＳＢ２２４の実施形態であってもよい。図１１ＡのＰＥ及びＳＢ（ＳＢ及びＩＣＳＢを含む）のそれぞれは、配置バス（ＳＥＱ１１０２からの点線として示される）を介してＳＥＱ１１０２に結合されてもよい。この例では、実行カーネルの仮想データパス（ＶＤＰ）は、２つの物理データパス（ＰＤＰ）にマッピングされてもよい。注意すべきものとして、この例示的なカーネルは、図９Ａ−図９Ｃ及び図１０に示すデータパスの例と異なってもよい。ＰＥは、図１０の例のＰＥ０、ＰＥ１、ＰＥ２及びＰＥ３と区別するために、数字の前に下線を有する（例え１１Ａ−図１１ＩのＰＥ＿０、ＰＥ＿１及びＰＥ＿２）ように示されてもよい。
【００７８】
図１１Ａ−図１１Ｉの配置プロセスの例では、第一のＰＤＰ（例えば、それは、図９Ｃのデータパスの例と区別するために数字の前に下線を有するＰＤＰ＿１と呼ばれてもよい）は、データルーティングＰＥ＿０→ＰＥ＿１、ＰＥ＿１→ＰＥ＿２を使用することができ、第二のＰＤＰ（例えば、それは図９Ｃに示すデータパスの例と区別するためにＰＤＰ＿２と呼ばれてもよい）は異なるルーティングＰＥ＿０→ＰＥ＿１、（ＰＥ＿０，ＰＥ＿１）→ＰＥ＿２を使用することができる。即ち、１番目のＰＤＰでは、ＰＥ＿１はその動作のためにＰＥ＿０の出力に依存することができ、ＰＥ＿２はその動作のためにＰＥ＿１の出力に依存することができ、２番目のＰＤＰでは、ＰＥ＿１はその動作にＰＥ＿０の出力に依存することができ、ＰＥ＿２はその動作のためにＰＥ＿１の出力とＰＥ＿０の出力の両者に依存することができる。
【００７９】
エラー!レファレンスソース取得できなかった。図１１Ａは、最初にＤＰ全体が構成されていないことを示す。全てのＰＥはデフォルト状態にある可能性がある。一つの実施形態では、このデフォルト状態は、ＳＴＡＬＬと呼ばれるデフォルト動作命令によって実施されてもよい。ＰＥはＳＴＡＬＬとしてプログラムされてもよいが、それぞれの入力データＦＩＦＯは空であってもよく、且つデータの受信を準備する。しかしながら、ビジー信号は０に設定されてもよい。したがって、全てのＳＢは停止（ｓｔａｌｌｅｄ）する可能性があり、そして信号がルーティングされなくてもよい。例えば、コンポーネント間の全てのデータ接続（例えばＰＥ＿０  １１０４とＳＢ＿１１１０の間、ＳＢ＿１  １１１０とＩＣＳＢ＿１  １１１４の間、ＳＢ＿１  １１１０とＰＥ＿１  １１０６の間、ＰＥ＿１  １１０６とＳＢ＿２  １１１２の間、ＳＢ＿２  １１１２とＩＣＳＢ＿２  １１１６の間、ＳＢ＿２  １１１２とＰＥ＿２  １１０８の間のデータ接続）は、データが通過できないことを示すために点線で表されてもよい。
【００８０】
図１１ＢはＳＥＱ１１０２が第一の命令ＩＮＳ１をＰＥ＿０  １１０４にロードし始めることができるが、ＳＢ＿１  １１１０及びＩＣＳＢ＿１  １１１４が依然として停止する可能性があることを示している。例えば、ＳＥＱ１１０２からＰＥ＿０  １１０４までの配置接続は開いていて破線で示されてもよく、逆に他の配置接続は閉じられていて点線で示されてもよい。ＩＮＳＴ１がこの実行カーネルの第一の命令であってもよく、いかなる他の条件に依存しないため、ＰＥ＿０  １１０４は出力の生成を準備することができるが、ＳＢ＿１  １１１０からの出力ビジー信号によってブロックされる。この段階では、データはコンポーネント間のデータ接続を通過できず、データ接続は点線で表されてもよい。
【００８１】
図１１Ｃに示すように、この段階では、ＳＥＱ１１０２は、ＳＢ＿１  １１１０とＩＣＳＢ＿１  １１１４の両者をプログラムした可能性があり、ＰＥ＿０→ＰＥ＿１からのデータルートを開くことができる。例えば、ＳＥＱ１１０２からＳＢ＿１  １１１０及びＩＣＳＢ＿１  １１１４までの配置接続は開いていて破線で示されてもよく、逆に他の配置接続は閉じられていて点線で示されてもよい。ＰＥ＿０  １１０４は出力を生成することができ、これらの出力がＳＢ＿１  １１１０（例えば、内部接続が開いていることを内部の点線で示すＳＢ＿１  １１１０）を介してＰＥ＿１  １１０６にルーティングされてもよい。ＰＥ＿１  １１０６は、ＰＥ＿０  １１０４から出力を受信することができ、ＰＥ＿１  １１０６が構成されない場合でも、これらのデータ信号をそのデータバッファー（例えばＤ−ＦＩＦＯ）に記憶することができる。ＰＥ＿０  １１０４とＳＢ＿１  １１１０の間、及びＳＢ＿１  １１１０とＰＥ＿１  １１０６の間のデータ接続は、データが通過できることを示すために実線で示されてもよい。二重線の矢印１１１８は、このデータフローを示すことができる。
【００８２】
１番目のＰＤＰでは、ＰＥ＿０  １１０４からの出力がＰＥ＿１  １１０６のみによって必要とされるため、この時に、データがＩＣＳＢ＿１  １１１４を通過する必要がない。したがって、ＩＣＳＢ＿１  １１１４の配置が既にプログラムされた（例えばその内部接続が破線で示される）可能性があるが、データがＩＣＳＢ＿１  １１１４（それがＳＢ＿１  １１１０に点線で接続される）に到達しなく、且つＩＣＳＢ＿１  １１１４が静止を維持する可能性がある。
【００８３】
図１１Ｄに示す段階では、ＳＥＱ１１０２からＰＥ＿１  １１０６までの配置接続は開いて破線で示されてもよい。逆に、他の配置接続は閉じられていて点線で示されてもよい。ＳＥＱ１１０２は第二の命令ＩＮＳＴ２をＰＥ＿１  １１０６に配置することができ、そしてＰＥ＿１  １１０６は実行及び出力の生成を準備することができるが、ＳＢ＿２  １１１２からの出力ビジー信号によってブロックされる。同時に、ＰＥ＿０  １１０４から生成されたデータはＰＥ＿１  １１０６のＤ−ＦＩＦＯに連続して送信されてもよい。この段階では、コンポーネント間の全てのデータ接続は図１１Ｃと同じであってもよい。
【００８４】
図１１Ｅにおいて、この段階では、ＳＥＱ１１０２からＳＢ＿２  １１１２とＩＣＳＢ１１１６までの配置接続は開いて破線で示されてもよい。逆に、他の配置接続は閉じられていて点線で示されてもよい。ＳＢ＿２  １１１２を構成して開くことができる場合、ＰＥ＿１  １１０６はＩＮＳ２の実行を開始し、出力を生成することができる。これらの出力はＳＢ＿２  １１１２（例えば、内部接続が開いていることを内部の点線で示すＳＢ＿２  １１１２）を介してＰＥ＿２  １１０８にルーティングされてもよい。ＰＥ＿２  １１０８は、ＰＥ＿１  １１０６から出力を受信することができ、ＰＥ＿２  １１０８が構成されない場合でも、これらのデータ信号をそのデータバッファー（例えばＤ−ＦＩＦＯ）に記憶することができる。ＰＥ＿１  １１０６とＳＢ＿２  １１１２の間、及びＳＢ＿２  １１１２とＰＥ＿２  １１０８の間のデータ接続は、データが通過できることを示すために実線で示されてもよい。二重線の矢印１１２０は、このデータフローを示すことができる。
【００８５】
１番目のＰＤＰでは、ＰＥ＿２  １１０８への入力がＰＥ＿１  １１０６のみからのものである可能性があるため、この時にデータがＩＣＳＢ＿２  １１１６を通過する必要がない。したがって、ＩＣＳＢ＿１  １１１６の配置が既にプログラムされた（例えばその内部接続が破線で示される）可能性があるが、データがＩＣＳＢ＿２  １１１６（例えば、それがＳＢ＿２  １１１２に破線で接続される）を通過しなく、且つＩＣＳＢ＿２  １１１６が静止を維持する可能性がある。
【００８６】
図１１Ｆに示す段階では、ＳＥＱ１１０２からＰＥ＿２  １１０８までの配置接続は開いて破線で示されてもよい。逆に、他の配置接続は閉じられていて点線で示されてもよい。また、第一のＰＤＰの最後の命令ＩＮＳ３はＰＥ＿２  １１０８にプログラムされてもよい。図示されないが、この段階では、ガスケットメモリ（例えば、ガスケットメモリ２１６の実施形態）への配置接続も開かれてもよく、そしてガスケットメモリのデータ接続もプログラムされてもよい。ＰＥ＿２  １１０８はＩＮＳ３を実行することができ、結果がガスケットメモリに記憶されてもよい。一つの実施形態では、現在まで、ＰＤＰ＿１配置全体が完了でき、各ＰＥ（例えば、ＰＥ＿０  １１０４、ＰＥ＿１  １１０６及びＰＥ＿２  １１０８）は、対応する命令を指定された回数（例えば、ＮＵＭ＿ＥＸＥＣ）個別に実行することができる。各ＳＢ（例えばＳＢ＿１  １１１０及びＳＢ＿２  １１１２）と各ＩＣＳＢ（例えばＩＣＳＢ＿１  １１１４及びＩＣＳＢ＿２  １１１６）は、ＰＤＰ＿１に対してそれぞれの配置を指定された回数（例：ＮＵＭ＿ＥＸＥＣ）実行することもできる。
【００８７】
いくつかの実施形態では、（例えば実行カーネルの依存グラフ）ＶＤＰのＰＤＰのための配置は、コンポーネントに個別に送信されてもよく、同時に各コンポーネントが現在の配置に従って動作することができる。例えば、ＰＥ（例えばＰＥ＿０  １１０４、ＰＥ＿１  １１０６及びＰＥ＿２  １１０８）、ＳＢ（例えばＳＢ＿１  １１１０及びＳＢ＿２  １１１２）とＩＣＳＢ（例えばＩＣＳＢ＿１  １１１４及びＩＣＳＢ＿２  １１１６）は、それらのＰＤＰ＿１のための対応する配置で動作するとともに、ＳＥＱ１１０２から同じＶＤＰの他のＰＤＰのこれらのコンポーネントのそれぞれのための後続の配置を受信することができる。一つの実施形態では、配置バスを介してシーケンサ２０６から一つのコンポーネントのための複数の配置をバッチで送信することができ、一つのコンポーネントのための複数の配置を送信する限り、いかなる他のコンポーネントの動作を遅くしたり妨ぐことがない。
【００８８】
したがって、ＰＤＰ＿１を実行することができるが、コンポーネントはＰＤＰ＿２のための全ての配置を受信した可能性がある。図１１Ｇに示すように、この段階で、ＰＥ＿０  １１０４の全てのスレッド（例えば、ＡＬＵベクトル６０２内の全てのＡＬＵ）がＰＤＰ＿１を完了するまでＰＥ＿０  １１０４を第４の命令ＩＮＳ４に再構成することができる。例えば、ＰＥ＿０  １１０４は、配置バッファーＣ−ＦＩＦＯ６１４にあるＰＤＰ＿２配置を適用することにより、それ自体で再構成することができる。同様に、ＩＮＳ１からの最後のデータが既にＳＢ＿１  １１１４を通過した場合でも、ＳＢ＿１  １１１４は再構成することができる。ＳＢ＿１  １１１０の新しいＰＤＰ＿２の配置（例えば、ＩＣＳＢ＿１  １１１４に接続された新しい破線）により、ＩＮＳ４からの第一の出力データは、ＩＣＳＢ＿１  １１１４に送信されてもよい。しかしながら、ＩＣＳＢ＿２  １１１６が再構成されていない可能性があるため、ＩＣＳＢ＿１  １１１４へのデータ信号は、ＩＣＳＢ＿２  １１１６からのビジー信号によってブロックされる可能性がある。
【００８９】
図１５Ｈに示す段階で、ＰＥ＿１  １１０６、ＳＢ＿２  １１１２、ＩＣＳＢ＿２  １１１６は、ＰＤＰ＿１で指定された実行回数に達する可能性があり、そして再構成されてもよい。例えば、ＰＥ＿１  １１０６は、５番目の命令ＩＮＳ５に再構成されてもよく、ＰＥ＿０  １１０４からのデータもＩＣＳＢ＿１  １１１４を介してＰＥ＿２  １１０８のＤ−ＦＩＦＯに到達できるように、ＳＢ＿２  １１１２及びＩＣＳＢ＿２  １１１６は、再構成されてもよい。ＳＢ＿２  １１１２内部の新しい破線は、ＳＢ＿２  １１１２を介してＩＣＳＢ＿２  １１１６をＰＥ＿２  １１０８に接続するように示されてもよい。ＰＥ＿０  １１０４からＰＥ＿２  １１０８へのデータフローは、二重矢印１１２２（例えばＰＥ＿０  １１０４−ＩＣＳＢ＿１  １１１４）及び１１２４（例えばＩＣＳＢ＿１  １１１４−ＰＥ＿２  １１０８）によって示されてもよい。
【００９０】
図１５Ｉに示す段階で、最終に、ＰＥ＿２  １１０８はＰＤＰ＿１のための指定された実行回数に達することができ、ＰＤＰ＿２のための最後の命令ＩＮＳ６に再構成されてもよい。ＰＤＰ＿２配置全体はデータパスコンポーネントに適用されてもよい。ＰＤＰ＿２配置のためのコンポーネントは、ＰＤＰ＿２配置に対して回数実行カーネル全体を完了するために、それぞれ指定された回数実行できる。
【００９１】
図１２Ａは本開示の実施形態によるプロセッサを使用して命令ストリームを実行するためのパイプライン動作を概略的に示す。共有メモリアクセスモードでは、同じ命令を実行する全てのスレッドによって一つのメモリアドレスにアクセスすることができる。同じアドレスから全てのスレッドにデータをロードするために、パイプラインはこれらの全てのスレッドのために同じデータを抽出し続け、メモリユニットに不要なトラフィックを生成することができる。この例における命令は、図１１Ａ−図１１Ｉに示す例における命令と区別するために、数字の前に下線を有するように示されてもよい。図１２Ａに示すパイプライン化された命令の実行例では、命令Ｉｎｓ＿０は、データロード命令「ロードｘ［ｊ］」であってもよく、メモリポートは、パイプラインステージ１２０２としてＩｎｓ＿０を３回実行するように構成されてもよい（例えば、ロード命令を実行するように構成されるメモリポートに対して、ＮＵＭ＿ＥＸＥＣが３である）。データセグメントｘ［ｊ］は全てのスレッドに共通であってもよく、同じアドレスからロードされる。例えば、データセグメントｘ［ｊ］はベクトルｘのｊ番目のデータセグメントであってもよく、そしてこのｊ番目のデータセグメントが全てのスレッドによって使用されてもよい。一つのＰＥがＮつのＡＬＵを有する実施形態では、１つのブロック（例えば、一つのスレッドブロック）で表されるＮつの並列スレッドが存在してもよく、そしてパイプラインステージ１２０２は、Ｉｎｓ＿０を３ｘＮ回実行するように構成されてもよい。
【００９２】
命令Ｉｎｓ＿１はデータロード命令「ロードａ［ｋ］［ｊ］」であってもよく、そしてメモリポートは、パイプラインステージ１２０４としてＩｎｓ＿１を３回実行するように構成されてもよい。Ｉｎｓ＿１によってロードされるデータセグメントは、異なるスレッドに対して異なる可能性があり、異なるスレッドに対して、異なるアドレスからロードすることができる。例えば、ａ［ｋ］［ｊ］はｋ番目のスレッドのｊ番目のデータセグメントであってもよく、ここで１番目のスレッドブロックにおける各スレッドに対して、ｋが０からＮ−１（エンドポイントを含む）の間の整数であってもよく、２番目のスレッドブロックにおける各スレッドに対して、ｋがＮから２Ｎ−１（エンドポイントを含む）の間の整数であってもよく、第三のスレッドブロックにおける各スレッドに対して、ｋが２Ｎから３Ｎ−１（エンドポイントを含む）の間の整数であってもよい。
【００９３】
一つの実施形態では、メモリポートが２つのデータロード命令を並列して実行するように構成される場合、パイプラインステージ１２０２及び１２０４は、同じメモリポートで実行されてもよい。例えば、図２にＭＰ２２０のそれぞれとメモリユニット２１２の間の２つの並列読み取りデータラインと２つの並列書き込みデータラインが示される。また、スイッチボックス５００は、並列入力データラインがどのようにＰＥに切り替えるか（例えば、５０２．１及び５０２．２から５０６．１、５０６．２、５０８．１又は５０８．２に切り替える）を示す。別の実施形態では、パイプラインステージ１２０２及び１２０４は、２つの異なるメモリポートで実行されてもよい。
【００９４】
命令Ｉｎｓ＿２は、乗算命令「ｙ＝ａ［ｋ］［ｊ］＊ｘ［ｊ］」であってもよく、ここでデータセグメントｘ［ｊ］がＩｎｓ＿０によってロードされ、ａ［ｋ］［ｊ］がＩｎｓ＿１によってロードされ、そしてＰＥは、パイプラインステージ１２０６としてＩｎｓ＿２を３回実行するように構成されてもよい（例えば、ＮＵＭ＿ＥＸＥＣが３であり、全てのスレッドに対して合計３ｘＮ回）。したがって、各ＰＥ又はＭＰはパイプラインステージとしてＮＵＭ＿ＥＸＥＣ量の命令を実行するように構成されてもよい。
【００９５】
命令Ｉｎｓ＿４はデータロード命令「ロードｘ［ｊ＋１」であってもよく、そしてメモリポートは、パイプラインステージ１２０８としてＩｎｓ＿４を３回実行するように構成されてもよい。データセグメントｘ［ｊ＋１］は全てのスレッドに共通であってもよく、同じアドレスからロードされる。例えば、データセグメントｘ［ｊ＋１］はベクトルｘのｊ＋１番目のデータセグメントであってもよく、そしてこのｊ＋１番目のデータセグメントが全てのスレッドによって使用されてもよい。命令Ｉｎｓ＿５はデータロード命令「ロードａ［ｋ］［ｊ＋１］」であってもよく、そしてメモリポートは、パイプラインステージ１２１０としてＩｎｓ＿５を３回実行するように構成されてもよい。Ｉｎｓ＿５によってロードされるデータセグメントは、異なるスレッドに対して異なる可能性があり、異なるスレッドに対して、異なるアドレスからロードすることができる。例えば、ａ［ｋ］［ｊ＋１］はｋ番目のスレッドのｊ＋１番目のデータセグメントであってもよく、ここで１番目のスレッドブロックにおける各スレッドに対して、ｋが０からＮ−１（エンドポイントを含む）の間の整数であってもよく、２番目のスレッドブロックにおける各スレッドに対して、ｋがＮから２Ｎ−１（エンドポイントを含む）の間の整数であってもよく、第三のスレッドブロックにおける各スレッドに対して、ｋが２Ｎから３Ｎ−１（エンドポイントを含む）の間の整数であってもよい。一つの実施形態では、メモリポートが２つのデータロード命令を並列して実行するように構成される場合、パイプラインステージ１２０８及び１２１０は、同じメモリポートで実行されてもよい。別の実施形態では、パイプラインステージ１２０８及び１２１０は、２つの異なるメモリポートで実行されてもよい。
【００９６】
命令Ｉｎｓ＿６は、乗算命令「ｙ＝ａ［ｋ］［ｊ＋１］＊ｘ［ｊ＋１］」であってもよく、ここでデータセグメントｘ［ｊ＋１］がＩｎｓ＿４によってロードされ、ａ［ｋ］［ｊ＋１］がＩｎｓ＿５によってロードされ、そしてＰＥは、パイプラインステージ１２１２としてＩｎｓ＿６を６回実行するように構成されてもよい。
【００９７】
図１２Ａのパイプライン化された命令の実行例では、多くのメモリ読み取りを繰り返す必要がない可能性があるが、Ｉｎｓ＿０とＩｎｓ＿４が繰り返すことができる。図１２Ｂは本開示の実施形態によるプロセッサを使用して命令ストリームを実行するための減少されたパイプライン動作を概略的に示す。一つの実施形態では、コンパイラ又は他の方法（例えば、シーケンサ）は、図１２Ａの命令シーケンスにおける静的読取りを識別することができ、そして繰り返し動作が１回に減少されてもよい。例えば、静的ロード命令（例えばＩｎｓ＿０及びＩｎｓ＿４）はＮＵＭ＿ＥＸＥＣ＝１でプログラムされてもよい（例えば、これは実行データを抽出するためのＭＰに応用されてもよい）。図１２Ｂに示すように、パイプラインステージ１２０２Ａおよび１２０８Ａは、それぞれ一つのブロックであってもよい。一つの実施形態では、インジケータＳは、ＰＥ及びＭＰのＤ−ＦＩＦＯと隣接するＰＥ及びＭＰで実施されてもよく（例えばＰＥ６２０におけるインジケータ６２２）、静的負荷からデータを受信するいずれかのＰＥ及びＭＰに対して、静的負荷からデータを受信する、ＰＥ又はＭＰのＤ−ＦＩＦＯと隣接するインジケータＳを設置することができる。例えば、パイプラインステージ１２０６でＩｎｓ＿２を実行するように構成されるＰＥは、パイプラインステージ１２０２Ａのために構成される（複数の）ＭＰ及びＭＰ１２０４からデータをそれぞれ受信するＤ−ＦＩＦＯを含むことができ、そしてインジケータＳがパイプラインステージ１２０２Ａからデータを受信するＤ−ＦＩＦＯと隣接するように構成されてもよい。同様に、パイプラインステージ１２１２でＩｎｓ＿６を実行するように構成されるＰＥは、パイプラインステージ１２０８Ａ及び１２１０のためにそれぞれ構成される（複数の）ＭＰからデータを受信するＤ−ＦＩＦＯを含むことができ、そしてインジケータＳがパイプラインステージ１２０８Ａからデータを受信するＤ−ＦＩＦＯと隣接するように設置されてもよい。ＮＵＭ＿ＥＸＥＣ＝１の場合、パイプラインステージ１２０２Ａ及び１２０８Ａにおけるデータロード動作は、該配置に対して一回だけ実行されてもよい。静的指示Ｓが与えられた場合、パイプラインステージ１２０６及び１２１２を実行するように構成されるＰＥは、その動作を３回実行できる（例えばそのＮＵＭ＿ＥＸＥＣが依然として３に等しい）が、指示Ｓを有するＤ−ＦＩＦＯからのデータはＮＵＭ＿ＥＸＥＣ回数再利用されてもよい。
【００９８】
いくつかの実施形態では、減少されたパイプラインステージを有するこのような動作モードは、他の命令に一般化されてもよい。一つの実施形態では、異なるスレッドに対して同じ結果を生成することができる命令に対して、同じ方法を使用して電力消費を削減することができる。例えば、１つのＰＥからの結果は、同じ物理データパスにおける別のＰＥの異なるスレッドのための入力として使用されてもよく、又は一つの物理データパスにおけるＰＥからの結果は、別の物理データパスにおけるＰＥの異なるスレッドのための入力として使用されてもよく、ここで指示Ｓが対応するＤ−ＦＩＦＯに用いられて繰り返して使用されるように設定される。
【００９９】
図１３を参照すると、本開示の実施形態による実行カーネルを実行するための方法１３００のフローチャートが示される。ブロック１３０２で、実行カーネルはプロセッサで仮想データパスにマッピングされてもよい。例えば、図９Ｂに示すように、例示的なプロセッサ２００によって実行カーネルを仮想データパスにマッピングすることができる。実行カーネルはプロセッサによって実行される命令シーケンスを含むことができる。一つの実施形態では、プロセッサは、ガスケットメモリを含む様々な再構成可能ユニットを含むことができる。また、一つの実施形態では、該プロセスは、重複列を形成する様々な再構成可能ユニットを含むことができる。ブロック１３０４で、仮想データパスは１つ又は複数の物理データパスに分割されてもよい。例えば、図９Ｃに示すように、仮想データパスは３つの物理データパスに分割されてもよい。一つの実施形態では、様々な再構成可能ユニットは、命令シーケンスを実行するための１つ又は複数の物理データパスを形成することができる。また、一つの実施形態では、１つ又は複数の物理データパスのそれぞれは、重複列にそれぞれ適合することができる。例えば、第一の物理データパスと第二の物理データパスは、それぞれ重複列に適合することができる。ブロック１３０６で、配置はプロセッサの様々な再構成可能ユニットに送信されてもよい。様々な再構成可能ユニットは、配置に従って、命令シーケンスを実行するための１つ又は複数の物理データパスを形成することができる。ブロック１３０８で、プロセッサは、配置に従って様々な再構成可能ユニットを動作させることにより、１つ以上の物理データパスを完了するために実行されてもよい。一つの実施形態では、１つの物理データパスからのデータは、ガスケットメモリにルーティングして将来の物理データパスで入力として使用されてもよい。
【０１００】
図１４を参照すると、本開示の実施形態によるプロセッサを再構成するための方法１４００のフローチャートが示される。ブロック１４０２で、複数の配置をプロセッサの複数の再構成可能ユニットに送信することができる。複数の配置は、命令シーケンスを実行するための複数の物理データパスを形成するように複数の再構成可能ユニットに用いられてもよい。一つの実施形態では、複数の配置のそれぞれは、指定された数（例えば、本明細書で説明されるＮＵＭ＿ＥＸＥＣ数）を含むことができる。ブロック１４０４で、複数の再構成可能ユニットのそれぞれで、対応する動作を指定された回数繰り返すことができる。例えば、複数の再構成可能ユニットは、第一の再構成可能処理素子（ＰＥ）を含むことができ、第一の再構成可能ＰＥが複数の物理データパスのうちの第一の物理データパスにおいて、命令シーケンスの第一の命令を指定された回数実行することができる。ブロック１４０６で、各再構成可能ユニットは新しい配置に再構成されてもよい。一つの実施形態では、各再構成可能ユニットがそれぞれの対応する動作を指定された回数繰り返した後、各再構成可能ユニットは再構成することができる。例えば、第一の再構成可能ＰＥは、複数の物理データパスのうちの第２の物理データパスにおいて第２の構成に従って、命令シーケンスにおける第二の命令を指定された回数実行するように構成されてもよい。
【０１０１】
図１５を参照すると、本開示の実施形態によるプロセッサを再構成するための方法１５００のフローチャートが示される。ブロック１５０２で、プロセッサの再構成可能ユニットで第一の配置と第二の配置を受信することができる。例えば、図１１Ａ−図１１ＩのＰＥ＿０  １１０４は、第一の命令ＩＮＳ１を含むことができる第一の配置と、第４の命令ＩＮＳ４を含むことができる第２の配置とを受信することができる。ＰＥ＿０  １１０４は、これらの配置をその配置バッファ（例えば、Ｃ−ＦＩＦＯ６１４）に記憶することができる。ブロック１５０４で、第一の動作は、第一の配置に従って第一回数実行されてもよい。ＰＥ＿０  １１０４は、第一の配置におけるＮＵＭ＿ＥＸＥＣに従って命令ＩＮＳ１を複数回実行することができる。第一の配置は命令シーケンスの第一の部分を実行するための第一の物理データパス（例えばＰＤＰ＿１）の一部であってもよい。ブロック１５０６で、再構成可能ユニットは、第二の構成に従って第二の動作を第２回数実行するように再構成されてもよい。例えば、第二の配置を応用して第二の配置におけるＮＵＭ＿ＥＸＥＣに基づいて命令ＩＮＳ４を複数回実行してＰＥ＿０  １１０４を再構成することができる。第二の配置は命令シーケンスの第二の部分を実行するための第二の物理データパス（例えばＰＤＰ＿２）の一部であってもよい。
【０１０２】
図１６を参照すると、本開示の実施形態によるプロセッサを再構成するための方法１６００のフローチャートが示される。ブロック１６０２で、第一の命令は再構成可能な処理素子で複数回実行されてもよい。該実行は第一の物理データパスの一部とする第一の配置に従って実行されてもよい。例えば、ＰＥ＿２は、ＰＤＰ＿１の一部とする配置に従ってＩＮＳ３をＮＵＭ＿ＥＸＥＣ回実行するように構成されてもよい。ブロック１６０４で、再構成可能ユニットからの実行結果はガスケットメモリに送信されてもよい。例えば、ＩＮＳ３を実行するためのＰＥ＿２からの実行結果は、ガスケットメモリに送信されてもよい。一つの実施形態では、第一の命令が再構成可能ユニットで複数回実行される場合、実行結果は、第一の命令が実行されるたびにガスケットメモリに送信されてもよい。例えば、ガスケットメモリは連続実行結果を、そのデータバッファの１つ（例えばＤ−ＦＩＦＯ８０２．３−８０２．Ｆのいずれか）に記憶する可能性がある。ブロック１６０６では、ガスケットメモリに記憶された実行結果は、ガスケットメモリから第二の物理データパスに送信されてもよい。例えば、命令ＩＮＳ３を実行するためのＰＥ＿２からの実行結果は、第二の物理データパスでＰＥによって実行される命令の入力として用いられてもよい。その後、ガスケットメモリに記憶された実行結果は、第二の物理データパスを実行するためにガスケットメモリからこのＰＥに送信されれてもよい。
【０１０３】
図１７を参照すると、本開示の実施形態によるメモリにアクセスするための方法１７００のフローチャートが示される。ブロック１７０２では、メモリユニットのための複数のメモリアドレスは、並列スレッドのためのメモリポート内のアドレス計算ユニットによって生成されてもよい。例えば、メモリポートは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット（ＡＬＵ）を有することができる処理素子に、メモリユニットへのメモリアクセスを提供することができる。一つの実施形態では、メモリポートは、複数の処理素子（ＰＥ）にメモリユニットへのアクセスを提供する複数のメモリポートのうちの１つであってもよい。複数のＰＥのそれぞれは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット（ＡＬＵ）を有することができる。ブロック１７０４で、メモリユニット内の複数のメモリバンクにアクセスすることができ、ここで各スレッドが異なるメモリバンクにアクセスする。一つの実施形態では、プライベートメモリアクセスモードで、各スレッドは異なるメモリバンクにアクセスしてそのデータを取得することができる。
【０１０４】
図１８を参照すると、本開示の実施形態によるメモリにアクセスするための方法１８００のフローチャートが示される。ブロック１８０２では、メモリユニットのための複数のメモリアドレスは、並列スレッドのためのメモリポート内のアドレス計算ユニットによって生成されてもよい。メモリポートは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット（ＡＬＵ）を有する処理素子にメモリアクセスを提供することができる。一つの実施形態では、メモリポートは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット（ＡＬＵ）を有する複数の処理素子にメモリユニットへのメモリアクセスを提供するための複数のメモリポートのうちの一つであってもよい。ブロック１８０４では、メモリユニット内の複数のメモリバンクにアクセスすることができ、ここで全てのスレッドがメモリユニットの共通領域にアクセスする。一つの実施形態では、共有メモリアクセスモードで、ＰＥによって行われる並列実行のそれぞれは、共通領域内のいずれかの箇所にアクセスすることができる。即ち、共通領域は、全てのスレッドの共有メモリスペースであってもよい。
【０１０５】
図１９は本開示の実施形態による一つのセグメントのデータを再利用するための方法１９００のフローチャートである。ブロック１９０２では、ＰＥで適用される１つの配置期間に、一つのセグメントのデータはプロセッサの処理素子（ＰＥ）で全てのスレッドによって共有及び再利用されることを確定することができる。例えば、一つの実施形態では、ＰＥの一つの配置期間に、共有メモリアクセスモードが応用されてもよい。一つのセグメントのデータ（例えば定数）は、全てのスレッドに共通であってもよく、そして全てのスレッドによって共有及び再利用されてもよい。ブロック１９０４では、該セグメントのデータをＰＥのデータバッファに一回ロードすることができる。一つの実施形態では、該セグメントのデータが共有及び再利用されてもよい。そのため、データロード動作は一回実行される必要がある可能性がある。ブロック１９０６では、該セグメントのデータが再利用されることを示すように、データバッファに関連するインジケータを設置することができる。一つの実施形態では、ＰＥ内のデータバッファはインジケータビット「Ｓ」を有することができ、データバッファ内の一つのセグメントのデータが再利用される必要がある場合、このインジケータ「Ｓ」を設置することができる。ブロック１９０８では、該セグメントのデータを入力として再利用することで、同じ命令を複数回実行することができる。一つの実施形態では、ＰＥは配置によって指定された数（例えばＮＵＭ＿ＥＸＥＣ）に基づき、パイプラインステージとして同じ命令を繰り返して実行することができる。
【０１０６】
本開示の内容は再構成可能並列処理のための装置、システム及び方法を提供する。例えば、ＲＰＰの実施形態は処理素子（ＰＥ）アレイと相互接続部材からなる１−Ｄ又は２−Ｄデータパスを利用して大規模な並列データを処理することができる。データパスは、各セクション（例えば（複数のＰＥの１列、ＭＰとデータルーティングユニット）で同じになることができ、これにより、カーネルの依存グラフから仮想データパスへのマッピングが許可され、該仮想データパスが１次元においてデータパスセクションを無限に繰り返すことができる。
【０１０７】
ＲＰＰの実施形態は、仮想データパスが物理データパスに分割される場合と同様に、ガスケットメモリを利用して仮想データパスのデータ出力を一時的に記憶することができる。ガスケットメモリは、データバッファー（例えばＦＩＦＯ）のように機能してデータを次の配置の物理データパスにフィードバックすることができる。
【０１０８】
ＲＰＰの実施形態は、さらにメモリポート（ＭＰ）が各列のデータパスに接続される１次元メモリユニットを有することができる。仮想データパス全体でアクセスする全てのデータはメモリユニットに記憶されてもよい。新しい配置を行うたびに、ＭＰは、データが変化しないように維持される一方で、異なる方式でメモリユニットにアクセスするように構成されてもよい。ＲＰＰの実施形態は、プライベートメモリアクセスと共有メモリアクセスのメモリアクセスタイプを分けることができる。プライベートメモリアクセスは特定のスレッドに専用されてもよく、同時に異なるスレッド間で重複アクセスを許可しない。共有メモリアクセスは全てのスレッドで共通領域にアクセスすることを許可することができる。共有タイプとプライベートタイプに対して異なるメモリを定義しない。ＲＰＰの実施形態は、データを同じメモリスペースに記憶することができるが、異なるアクセス方法を提供する。これにより、プライベートメモリから共有メモリへの不必要なデータの移動が排除され、逆の場合も同様である。
【０１０９】
ＲＰＰの実施形態は、マルチスレッド処理のための大規模な並列処理を許可するために最適化されてもよい。一つの例では、１行の３２つのＰＥを有し且つ各ＰＥが３２つの算術論理演算ユニット（ＡＬＵ）を有する場合、１０２４つのＡＬＵは一つのＲＰＰコアに含まれてもよい。いくつかの実施形態では、マルチコアプロセッサは複数のＲＰＰを含むことができる。
【０１１０】
ＲＰＰの実施形態は再構成メカニズムに従って再構成されてもよい。１つ又は複数の再構成カウンタを含むＲＰＰの様々なコンポーネントは、再構成可能ユニットと呼ばれてもよい。例えば、ＰＥ（例えばＰＥ２１８）、切り替えユニット（例えばＳＢ２２２とＩＣＳＢ２２４）とメモリユニット（例えばＭＰ２２０、ガスケットメモリ２１６）のそれぞれは、ＰＥにおけるカウンタ６０６、ＳＢにおけるカウンタ５２０、ＩＣＳＢにおけるカウンタ７１４、ガスケットメモリにおけるカウンタ８２０及び８２２とＭＰにおける類似のカウンタ（図４Ａ又は図４Ｂに示されない）などの１つ又は複数の再構成カウンタを含むことができる。スレッド間に依存性がない可能性がる場合、データ処理はパイプライン化されてもよい。全てのスレッド（例えば、１つの物理データパスのための４つのスレッドブロック）が処理されるまで、同一の命令が複数回実行されてもよい。再構成可能ユニットのカウンタがプログラムされた数に達する場合、再構成可能ユニットは、その配置を新しいコンテキストに置き換えることができる。このような再構成は、各ＰＥ、スイッチボックスとメモリアクセスユニットで同じ方式で完了されてもよい。切り替えのための最小アイドル時間で自己再構成を実現することができる。
【０１１１】
例示的な再構成メカニズムは、全てのスレッドが処理された後に配置が一回だけ切り替えられるため、構成に費やされる電力を削減することができる。これにより、各ＰＥを最も早い時間に個別に切り替えることにより、配置間のアイドル時間を短縮することもできる。これにより、中間データを記憶するために必要なメモリを削減することができる。
【０１１２】
いくつかの実施形態では、共有メモリアクセスモードで、全てのスレッドは同じアドレスを用いてデータをロードすることができる。動作のパイプライン性質により、全てのスレッドの１番目のデータロード命令のみを実行する必要がある可能性がある。ロードされたデータは、メモリアクセストラフィックと消費電力を削減するために、全てのスレッドと共有されてもよい。
【０１１３】
本明細書で説明される技術は、デジタル論理ゲートのうちの１つ又は複数の特定用途向け集積回路（ＡＳＩＣ）で実施されてもよく、又は有形のプロセッサ可読メモリ記憶媒体に格納された命令を実行するプロセッサによって実施されてもよい。
【０１１４】
一つの実施形態では、開示された方法及び動作のいずれかは、１つ又は複数のコンピュータ可読記憶媒体に記憶されたコンピュータ実行可能命令を含むソフトウェアで実施されてもよい。１つ又は複数のコンピュータ読み取り可能記憶媒体は、非一時的コンピュータ読み取り可能メディア（例えばリムーバブル又は非リムーバブル磁気ディスク、磁気テープ又はカセット、ソリッドステートドライブ（ＳＳＤ）、ハイブリッドハードドライブ、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ又は他の有形の記憶媒体）、揮発性メモリコンポーネント（例えばＤＲＡＭ又はＳＲＡＭ）又は不揮発性メモリコンポーネント（例えばハードドライブ）を含むことができる。コンピュータ実行可能命令は、プロセッサ（例えば、マイクロコントローラ、マイクロプロセッサ、デジタル信号プロセッサなど）で実行されてもよい。また、本開示の実施形態は、汎用プロセッサ、グラフィックスプロセッサ、マイクロコントローラ、マイクロプロセッサ又はデジタルシグナルプロセッサとして使用されてもよい。
【０１１５】
本明細書では、様々な態様及び実施形態が開示されたが、他の態様及び実施形態は当業者にとって明らかである。本明細書で開示される様々な態様及び実施形態は、例示を目的とするものであり、限定することを意図するものではなく、真の範囲及び精神は添付の特許請求の範囲によって示される。
【図１】
0006960479.tif 000006
【図２】
0006960479.tif 000007
【図３Ａ】
0006960479.tif 000008
【図３Ｂ】
0006960479.tif 000009
【図３Ｃ】
0006960479.tif 000010
【図３Ｄ】
0006960479.tif 000011
【図４Ａ】
0006960479.tif 000012
【図４Ｂ】
0006960479.tif 000013
【図５】
0006960479.tif 000014
【図６Ａ】
0006960479.tif 000015
【図６Ｂ】
0006960479.tif 000016
【図７】
0006960479.tif 000017
【図８】
0006960479.tif 000018
【図９Ａ】
0006960479.tif 000019
【図９Ｂ】
0006960479.tif 000020
【図９Ｃ】
0006960479.tif 000021
【図１０】
0006960479.tif 000022
【図１１Ａ】
0006960479.tif 000023
【図１１Ｂ】
0006960479.tif 000024
【図１１Ｃ】
0006960479.tif 000025
【図１１Ｄ】
0006960479.tif 000026
【図１１Ｅ】
0006960479.tif 000027
【図１１Ｆ】
0006960479.tif 000028
【図１１Ｇ】
0006960479.tif 000029
【図１１Ｈ】
0006960479.tif 000030
【図１１Ｉ】
0006960479.tif 000031
【図１２Ａ】
0006960479.tif 000032
【図１２Ｂ】
0006960479.tif 000033
【図１３】
0006960479.tif 000034
【図１４】
0006960479.tif 000035
【図１５】
0006960479.tif 000036
【図１６】
0006960479.tif 000037
【図１７】
0006960479.tif 000038
【図１８】
0006960479.tif 000039
【図１９】
0006960479.tif 000040