(57)【要約】  本開示は、分散型プロセッサと、分散型プロセッサによって実行されるコードをコンパイルする方法と、を含む。一実装では、分散型プロセッサは、基板と、基板に配置されるメモリアレイと、基板に配置される処理アレイと、を含み得る。メモリアレイは複数の個別のメモリバンクを含み得て、処理アレイは複数のプロセッササブユニットを含み得る。複数のプロセッササブユニットの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる。分散型プロセッサはさらに、各々が複数のプロセッササブユニットの１つを自らの対応する専用メモリバンクに接続する第１の複数のバスと、各々が複数のプロセッササブユニットの１つを複数のプロセッササブユニットの別のプロセッササブユニットに接続する第２の複数のバスとを含み得る。
2020529676.tif 000002
【特許請求の範囲】
【請求項１】
分散型プロセッサであって、
基板と、
前記基板に配置されるメモリアレイであって、前記メモリアレイが複数の個別のメモリバンクを有する、メモリアレイと、
前記基板に配置される処理アレイであって、前記処理アレイが複数のプロセッササブユニットを有し、前記複数のプロセッササブユニットの各々が前記複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、
第１の複数のバスであって、各バスが前記複数のプロセッササブユニットの１つをその対応する専用メモリバンクに接続する、第１の複数のバスと、
第２の複数のバスであって、各バスが前記複数のプロセッササブユニットの１つを前記複数のプロセッササブユニットの別のプロセッササブユニットに接続する、第２の複数のバスと
を備える分散型プロセッサ。
【請求項２】
前記基板が半導体基板である、請求項１に記載の分散型プロセッサ。
【請求項３】
前記基板が回路基板である、請求項１または２に記載の分散型プロセッサ。
【請求項４】
前記処理アレイの前記複数のプロセッササブユニットが前記メモリアレイの前記複数の個別のメモリバンク間に空間的に分散される、請求項１から３のいずれか一項に記載の分散型プロセッサ。
【請求項５】
チップ上の前記分散型プロセッサが人工知能アクセラレータプロセッサである、請求項１から４のいずれか一項に記載の分散型プロセッサ。
【請求項６】
前記複数のプロセッササブユニット内に含まれる他のプロセッササブユニットに対して独立した特定のアプリケーションと関連付けられるソフトウェアコードを前記複数のプロセッササブユニットの各々が実行するように構成される、請求項１から５のいずれか一項に記載の分散型プロセッサ。
【請求項７】
前記複数のプロセッササブユニットが少なくとも１つの行および少なくとも１つの列内に配置され、前記第２の複数のバスが、各プロセッササブユニットを同じ行における少なくとも１つの隣接するプロセッササブユニットおよび同じ列における少なくとも１つの隣接するプロセッササブユニットに接続する、請求項１から６のいずれか一項に記載の分散型プロセッサ。
【請求項８】
前記複数のプロセッササブユニットがスター型パターンで配置され、前記第２の複数のバスが各プロセッササブユニットを前記スター型パターン内の少なくとも１つの隣接するプロセッササブユニットに接続する、請求項１から７のいずれか一項に記載の分散型プロセッサ。
【請求項９】
各プロセッササブユニットが少なくとも２つの専用メモリバンクと関連付けられる、請求項１から８のいずれか一項に記載の分散型プロセッサ。
【請求項１０】
各専用メモリバンクが少なくとも１つのダイナミックランダムアクセスメモリを含む、請求項１から９のいずれか一項に記載の分散型プロセッサ。
【請求項１１】
メモリチップであって、
基板と、
前記基板に配置されるメモリアレイであって、前記メモリアレイが複数の個別のメモリバンクを有する、メモリアレイと、
前記基板に配置される処理アレイであって、前記処理アレイが複数の論理部分を有し、各論理部分がアドレスジェネレータを含み、複数の前記アドレスジェネレータの各々が前記複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、
複数のバスであって、各バスが前記複数のアドレスジェネレータの１つをその対応する専用メモリバンクに接続する、複数のバスと
を備えるメモリチップ。
【請求項１２】
各アドレスジェネレータが、前記アドレスジェネレータに対応するメモリバンク内で処理するためにアクセスされるアドレスを決定するように構成される、請求項１１に記載のメモリチップ。
【請求項１３】
前記処理アレイがさらに複数のアクセラレータを有し、各アクセラレータが、対応するアドレスジェネレータと関連付けられ、前記各アクセラレータが特定の機能を実行するように構成される、請求項１１または１２に記載のメモリチップ。
【請求項１４】
前記特定の機能が乗累算機能、最小機能、最大機能、比較機能、またはカウント機能を含む、請求項１３に記載のメモリチップ。
【請求項１５】
前記メモリチップが、ＤＲＡＭメモリチップ、Ｆｌａｓｈメモリチップ、ＳＲＡＭメモリチップ、ＲｅＲＡＭメモリチップ、ＰＲＡＭメモリチップ、ＭＲＡＭメモリチップまたはＲＯＭメモリチップの少なくとも１つである、請求項１３または１４に記載のメモリチップ。
【請求項１６】
各プロセッササブユニットが縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ、または複雑命令セットコンピュータ（ＣＩＳＣ）プロセッサを含む、請求項１１から１５のいずれか一項に記載のメモリチップ。
【請求項１７】
外部ホストに接続されるメモリインタフェースをさらに含む、請求項１１から１６のいずれか一項に記載のメモリチップ。
【請求項１８】
前記メモリインタフェースが、少なくとも１つの電子素子技術連合評議会（ＪＥＤＥＣ）規格に準拠したインタフェースまたはその変種のインタフェースを含む、請求項１７に記載のメモリチップ。
【請求項１９】
前記複数の論理部分の各々が前記複数の個別のメモリバンクの少なくとも１つのメモリバンクに対応し、複数のメモリマットが前記複数の個別のメモリバンクの単一メモリバンク内に含まれ、単一メモリマットが前記複数の個別のメモリバンクの単一メモリバンク内に含まれる、請求項１１から１８のいずれか一項に記載のメモリチップ。
【請求項２０】
分散型プロセッサであって、
基板と、
前記基板に配置されるメモリアレイであって、前記メモリアレイが複数の個別のメモリバンクを有し、前記複数の個別のメモリバンクの各々が１メガバイトよりも大きい容量を有する、メモリアレイと、
前記基板に配置される処理アレイであって、前記処理アレイが複数のプロセッササブユニットを有し、前記複数のプロセッササブユニットの各々が前記複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと
を備える分散型プロセッサ。
【請求項２１】
第１の複数のバスであって、各々が前記複数のプロセッササブユニットの１つを、対応する専用メモリバンクに接続する、第１の複数のバスと、
第２の複数のバスであって、各々が前記複数のプロセッササブユニットの１つを前記複数のプロセッササブユニットの別の１つに接続する、第２の複数のバスと、
をさらに備える、請求項２０に記載の分散型プロセッサ。
【請求項２２】
各専用メモリバンクが少なくとも１つのダイナミックランダムアクセスメモリバンクを含む、請求項２０または２１に記載の分散型プロセッサ。
【請求項２３】
各専用メモリバンクが少なくとも１つのスタティックランダムアクセスメモリバンクを含む、請求項２０から２２のいずれか一項に記載の分散型プロセッサ。
【請求項２４】
各専用メモリバンクが同じサイズである、請求項２０から２３のいずれか一項に記載の分散型プロセッサ。
【請求項２５】
前記複数の個別のメモリバンクのうち少なくとも２つが異なるサイズを有する、請求項２０から２４のいずれか一項に記載の分散型プロセッサ。
【請求項２６】
前記複数のプロセッササブユニットが前記メモリアレイ内の前記複数の個別のメモリバンク間に空間的に分散される、請求項２０から２５のいずれか一項に記載の分散型プロセッサ。
【請求項２７】
前記基板が半導体基板を有する、請求項２０から２６のいずれか一項に記載の分散型プロセッサ。
【請求項２８】
分散型プロセッサであって、
基板と、
前記基板に配置されるメモリアレイであって、前記メモリアレイが複数の個別のメモリバンクを有する、メモリアレイと、
前記基板に配置される処理アレイであって、前記処理アレイが複数のプロセッササブユニットを有し、前記複数のプロセッササブユニットの各々が前記複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、
複数のバスであって、前記複数のバスの各々が前記複数のプロセッササブユニットの１つを前記複数のプロセッササブユニットの少なくとも別の１つに接続する、複数のバスと、
を備え、
前記複数のバスにはタイミングハードウェア論理コンポーネントがなく、その結果、プロセッササブユニット間の、および前記複数のバスのうち対応するバス全体にわたるデータ転送がタイミングハードウェア論理コンポーネントによって制御されない、
分散型プロセッサ。
【請求項２９】
前記複数のバスにはバスアービタがなく、その結果、プロセッササブユニット間、および前記複数のバスのうち対応するバス全体にわたるデータ転送がバスアービタによって制御されない、請求項２８に記載の分散型プロセッサ。
【請求項３０】
前記複数のバスが、前記複数のプロセッササブユニットの対応するプロセッササブユニット間にワイヤまたは光ファイバの少なくとも１つを有する、請求項２８または２９に記載の分散型プロセッサ。
【請求項３１】
前記複数のプロセッササブユニットが、前記複数のプロセッササブユニットによって実行されるコードに従って、前記複数のバスの少なくとも１つにわたりデータを転送するように構成される、請求項２８から３０のいずれか一項に記載の分散型プロセッサ。
【請求項３２】
前記コードが、前記複数のバスの少なくとも１つにわたるデータ転送のタイミングを規定する、請求項３１に記載の分散型プロセッサ。
【請求項３３】
第２の複数のバスをさらに含み、前記第２の複数のバスの各々が前記複数のプロセッササブユニットの１つを、対応する専用メモリバンクに接続する、請求項２８から３２のいずれか一項に記載の分散型プロセッサ。
【請求項３４】
前記第２の複数のバスにはタイミングハードウェア論理コンポーネントがなく、その結果、プロセッササブユニットと、対応する専用メモリバンクとの間のデータ転送がタイミングハードウェア論理コンポーネントによって制御されない、請求項３３に記載の分散型プロセッサ。
【請求項３５】
前記第２の複数のバスにはバスアービタがなく、その結果、プロセッササブユニットと、対応する専用メモリバンクとの間のデータ転送がバスアービタによって制御されない、請求項３３に記載の分散型プロセッサ。
【請求項３６】
前記複数のプロセッササブユニットが前記メモリアレイ内の前記複数の個別のメモリバンク間に空間的に分散される、請求項２８から３５のいずれか一項に記載の分散型プロセッサ。
【請求項３７】
前記基板が半導体基板を含む、請求項２８から３６のいずれか一項に記載の分散型プロセッサ。
【請求項３８】
メモリチップ上の分散型プロセッサであって、
基板と、
前記基板に配置されるメモリアレイであって、前記メモリアレイが複数の個別のメモリバンクを有する、メモリアレイと、
前記基板に配置される処理アレイであって、前記処理アレイが複数のプロセッササブユニットを有し、前記複数のプロセッササブユニットの各々が前記複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、
複数のバスであって、前記複数のバスの各々が前記複数のプロセッササブユニットの１つを前記複数の個別のメモリバンクの対応する専用の１つに接続する、複数のバスと、
を備え、
前記複数のバスにはタイミングハードウェア論理コンポーネントがなく、その結果、プロセッササブユニットと、前記複数の個別のメモリバンクの対応する専用の１つとの間のデータ転送、および前記複数のバスの対応する１つのバス全体にわたるデータ転送が、タイミングハードウェア論理コンポーネントによって制御されない、
メモリチップ上の分散型プロセッサ。
【請求項３９】
分散型プロセッサであって、
基板と、
前記基板に配置されるメモリアレイであって、前記メモリアレイが複数の個別のメモリバンクを有する、メモリアレイと、
前記基板に配置される処理アレイであって、前記処理アレイが複数のプロセッササブユニットを有し、前記複数のプロセッササブユニットの各々が前記複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、
複数のバスであって、前記複数のバスの各々が前記複数のプロセッササブユニットの１つを前記複数のプロセッササブユニットの少なくとも別の１つのプロセッササブユニットに接続する、複数のバスと、
を備え、
前記複数のプロセッササブユニットが、前記複数のバス全体にわたるデータ転送のタイミングを制御するソフトウェアを実行することで、前記複数のバスの少なくとも１つのバス上でデータ転送が衝突しないように構成される、
分散型プロセッサ。
【請求項４０】
メモリチップ上の分散型プロセッサであって、
基板と、
前記基板に配置される複数のプロセッササブユニットであって、各プロセッササブユニットが他のプロセッササブユニットから独立した一連の命令を実行するように構成され、各一連の命令が単一プロセッササブユニットによって実行される一連のタスクを定義する、複数のプロセッササブユニットと、
前記基板に配置される対応する複数のメモリバンクであって、前記複数のプロセッササブユニットの各々が、前記複数のプロセッササブユニットの他のあらゆるプロセッササブユニットによって共有されない少なくとも１つの専用メモリバンクに接続される、対応する複数のメモリバンクと、
複数のバスであって、前記複数のバスの各々が前記複数のプロセッササブユニットの１つを前記複数のプロセッササブユニットの少なくとも他の１つのプロセッササブユニットに接続する、複数のバスと、
を備え、
前記複数のバスの少なくとも１つのバス全体にわたるデータ転送が、前記複数のバスの前記少なくとも１つに接続されるプロセッササブユニット内に含まれる前記一連の命令によって予め定義される、
メモリチップ上の分散型プロセッサ。
【請求項４１】
各一連の命令が、対応する一連のタスクを定義するマシンコードのセットを含む、請求項４０に記載のメモリチップ上の分散型プロセッサ。
【請求項４２】
前記一連のタスクは、一連の上位タスクを複数の一連のタスクとして複数の論理回路間に分散させるように構成されるコンパイラによって定義される、請求項４１に記載のメモリチップ上の分散型プロセッサ。
【請求項４３】
前記一連の上位タスクが、人間が読めるプログラミング言語における命令のセットを含む、請求項４２に記載のメモリチップ上の分散型プロセッサ。
【請求項４４】
前記複数のバスの前記少なくとも１つのバスに接続される前記プロセッササブユニット内に含まれる前記一連の命令が送信タスクを含み、前記送信タスクは、前記複数のバスの前記少なくとも１つのバスに接続される前記プロセッササブユニットが前記複数のバスの前記少なくとも１つのバスにデータを書き込むためのコマンドを含む、請求項４０から４３のいずれか一項に記載のメモリチップ上の分散型プロセッサ。
【請求項４５】
前記複数のバスの前記少なくとも１つのバスに接続される前記プロセッササブユニット内に含まれる前記一連の命令が受信タスクを含み、前記受信タスクは、前記複数のバスの前記少なくとも１つのバスに接続される前記プロセッササブユニットが前記複数のバスの前記少なくとも１つのバスからデータを読み出すためのコマンドを含む、請求項４０から４４のいずれか一項に記載のメモリチップ上の分散型プロセッサ。
【請求項４６】
メモリチップ上の分散型プロセッサであって、
前記メモリチップ上に配置される複数のプロセッササブユニットと、
前記メモリチップ上に配置される複数のメモリバンクであって、前記複数のメモリバンクの各々が、前記複数のメモリバンクのうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成され、前記複数のプロセッササブユニットの各々が前記複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続される、複数のメモリバンクと、
複数のバスであって、前記複数のバスの各々が前記複数のプロセッササブユニットの１つを前記複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する、複数のバスと、
を備え、
前記複数のバスのうち特定のバス全体にわたるデータ転送が、前記複数のバスの前記特定のバスに接続される対応するプロセッササブユニットよって制御される、
メモリチップ上の分散型プロセッサ。
【請求項４７】
前記複数のメモリバンクの各々に記憶される前記データが、前記複数のメモリバンク間にデータを分散させるように構成されるコンパイラによって定義される、請求項４６に記載のメモリチップ上の分散型プロセッサ。
【請求項４８】
前記コンパイラが、対応するプロセッササブユニット間に分散された複数の下位タスクを利用して、一連の上位タスク内に定義されるデータを前記複数のメモリバンク間に分散させるように構成される、請求項４７に記載のメモリチップ上の分散型プロセッサ。
【請求項４９】
前記一連の上位タスクが、人間が読めるプログラミング言語における命令のセットを含む、請求項４８に記載のメモリチップ上の分散型プロセッサ。
【請求項５０】
前記一連の下位タスクが、マシンコードにおける命令のセットを含む、請求項４８または４９に記載のメモリチップ上の分散型プロセッサ。
【請求項５１】
メモリチップ上の分散型プロセッサであって、
前記メモリチップ上に配置される複数のプロセッササブユニットと、
前記メモリチップ上に配置される複数のメモリバンクであって、前記複数のプロセッササブユニットの各々が前記複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続され、前記複数のメモリバンクの各メモリバンクが、前記複数のメモリバンクのうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成され、前記複数のメモリバンク間から１つの特定のメモリバンク内に記憶される少なくともいくつかのデータが、前記複数のメモリバンクの少なくとも別のメモリバンク内に記憶されるデータの複製を含む、複数のメモリバンクと、
複数のバスであって、前記複数のバスの各々が前記複数のプロセッササブユニットの１つを前記複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する、複数のバスと、
を備え、
前記複数のバスのうち特定のバス全体にわたるデータ転送が、前記複数のバスの前記特定のバスに接続される対応するプロセッササブユニットよって制御される、
メモリチップ上の分散型プロセッサ。
【請求項５２】
前記複数のメモリバンク、および前記複数のメモリバンクの前記少なくとも別のメモリバンク間から前記１つの特定のメモリバンク全体にわたり複製される前記少なくともいくつかのデータが、メモリバンク全体にわたりデータを複製するように構成されるコンパイラによって定義される、請求項５１に記載のメモリチップ上の分散型プロセッサ。
【請求項５３】
前記複数のメモリバンク、および前記複数のメモリバンクの前記少なくとも別のメモリバンク間から前記１つの特定のメモリバンク全体にわたり複製される前記少なくともいくつかのデータが、ニューラルネットワークのウェイトを含む、請求項５１または５２に記載のメモリチップ上の分散型プロセッサ。
【請求項５４】
前記ニューラルネットワークにおけるノードの各々が、前記複数のプロセッササブユニット間から少なくとも１つのプロセッササブユニットによって定義される、請求項５３に記載のメモリチップ上の分散型プロセッサ。
【請求項５５】
ノードの各々が、前記ノードを定義する前記少なくとも１つのプロセッササブユニットによって実行されるマシンコードを含む、請求項５４に記載のメモリチップ上の分散型プロセッサ。
【請求項５６】
複数のプロセッササブユニットおよび複数のメモリバンクを含むメモリチップ上で一連の実行命令をコンパイルするプログラムであって、前記複数のプロセッササブユニット間からの前記複数のプロセッササブユニットの各々が前記複数のメモリバンク間から少なくとも１つの対応する専用メモリバンクに接続され、前記プログラムは少なくとも１つのプロセッサに、
前記一連の命令をサブシリーズ命令の複数のグループに分割する手順であって、
前記分割する手順は、前記一連の命令と関連付けられたタスクを前記複数のプロセッササブユニットの異なるものに割り当てる手順であって、前記複数のプロセッササブユニットが、前記メモリチップに配置される前記複数のメモリバンク間に空間的に分散される、手順と、前記メモリチップの前記複数のプロセッササブユニットの複数対の間でデータを転送するタスクを生成し、前記複数のプロセッササブユニットの前記複数対の各々がバスによって接続される、手順と、前記割り当てられたタスクおよび前記生成されたタスクをサブシリーズ命令の前記複数のグループに分類し、サブシリーズ命令の前記複数のグループの各々が前記複数のプロセッササブユニットの異なる１つに対応する、手順と、を含む、手順と、
サブシリーズ命令の前記複数のグループの各々に対応するマシンコードを生成する手順と、
前記分割に従って、サブシリーズ命令の前記複数のグループの各々に対応する、生成された前記マシンコードを、前記複数のプロセッササブユニットのうち対応する１つのプロセッササブユニットに割り当てる手順と
を実行させるためのプログラム。
【請求項５７】
前記一連の命令と関連付けられたタスクを前記プロセッササブユニットの前記異なるものに割り当てる前記手順は、前記メモリチップ上の２つ以上の前記プロセッササブユニット間の空間的近接によって決まる、請求項５６に記載のプログラム。
【請求項５８】
前記少なくとも１つのプロセッサに、
前記分類に基づいて前記一連の命令と関連付けられたデータを分類する手順と、
前記分割に従って前記データを前記複数のメモリバンクに割り当てる手順と
を実行させるための、請求項５６または５７に記載のプログラム。
【請求項５９】
前記データを分類する手順は、前記データのうち前記複数のメモリバンクの２つ以上に複製するための少なくとも一部分を決定する手順を含む、請求項５８に記載のプログラム。
【請求項６０】
メモリチップであって、自らの専用の少なくとも１つのメモリバンクに各々が接続された複数のプロセッササブユニットと、対応する複数のメモリバンクとを含み、前記メモリチップの前記複数のプロセッササブユニットが、請求項５６から５９のいずれか一項に記載のプログラムに従って生成されるマシンコードを実行するように構成される、メモリチップ。
【請求項６１】
メモリチップであって、前記メモリチップが、
複数のメモリバンクであって、各メモリバンクがバンク行デコーダおよびバンク列デコーダを有する、複数のメモリバンクと、
複数のメモリサブバンクであって、各メモリサブバンクが、読み書きを可能にするサブバンク行デコーダおよびサブバンク列デコーダを自らの位置に有し、各メモリサブバンクが、複数のメモリセルを各々が含む複数のメモリマットを有する、複数のメモリサブバンクと、
を備え、
各サブバンク行デコーダおよび各サブバンク列デコーダが前記バンク行デコーダおよび前記バンク列デコーダに接続される、
メモリチップ。
【請求項６２】
各メモリサブバンクがさらに、各メモリバンクのコントローラからの読み要求および書き要求を処理するか否かを決定するように構成されるサブバンクコントローラを有する、請求項６１に記載のメモリチップ。
【請求項６３】
各メモリバンクの前記コントローラがシステムクロックに同期される、請求項６２に記載のメモリチップ。
【請求項６４】
各メモリサブバンクの前記サブバンクコントローラがシステムクロックに同期されない、請求項６２に記載のメモリチップ。
【請求項６５】
各メモリサブバンクがさらに、各メモリサブバンクを専用メモリとして使用するプロセッササブユニットを有する、請求項６１から６４のいずれか一項に記載のメモリチップ。
【請求項６６】
前記プロセッササブユニットが、構成可能プロセッササブユニットまたはアクセラレータを含む、請求項６５に記載のメモリチップ。
【請求項６７】
各プロセッササブユニットが、前記バンク行デコーダおよび前記バンク列デコーダを使用せずに前記サブバンク行デコーダおよび前記サブバンク列デコーダを使用して各プロセッササブユニット専用のサブバンクにアクセスするように構成される、請求項６５または６６に記載のメモリチップ。
【請求項６８】
メモリチップであって、前記メモリチップが、
複数のメモリバンクであって、各メモリバンクがバンクコントローラおよび複数のメモリサブバンクを有する、複数のメモリバンクと、
複数のメモリサブバンクであって、各メモリサブバンクが、読み書きを可能にするサブバンク行デコーダおよびサブバンク列デコーダを自らの位置に有し、各メモリサブバンクが、複数のメモリセルを各々が含む複数のメモリマットを有する、複数のメモリサブバンクと、
を備え、
各サブバンク行デコーダおよび各サブバンク列デコーダが前記バンクコントローラからの読み要求および書き要求を処理する、
メモリチップ。
【請求項６９】
各メモリサブバンクがさらに、前記バンクコントローラからの読み要求および書き要求を処理するか否かを決定するように構成されるサブバンクコントローラを有する、請求項６８に記載のメモリチップ。
【請求項７０】
前記バンクコントローラがシステムクロックに同期される、請求項６９に記載のメモリチップ。
【請求項７１】
各メモリサブバンクの前記サブバンクコントローラがシステムクロックに同期されない、請求項６９に記載のメモリチップ。
【請求項７２】
各メモリサブバンクがさらに、各メモリサブバンクを専用メモリとして使用するプロセッササブユニットを有する、請求項６８から７１のいずれか一項に記載のメモリチップ。
【請求項７３】
各プロセッササブユニットが、前記バンクコントローラを使用せずに各メモリサブバンクの行デコーダおよび列デコーダを使用して各プロセッササブユニット専用のサブバンクにアクセスするように構成された、請求項７２に記載のメモリチップ。
【請求項７４】
メモリチップであって、前記メモリチップが、
複数のメモリバンクであって、各メモリバンクが、読み書きを処理するバンクコントローラを自らの位置に有し、各メモリバンクが、複数のメモリセルと、マット行デコーダおよびマット列デコーダとを各々が含む複数のメモリマットを有する、複数のメモリバンク
を備え、
前記マット行デコーダおよび前記マット列デコーダがサブバンクコントローラからの読み要求および書き要求を処理する、
メモリチップ。
【請求項７５】
各メモリマットがさらに、前記バンクコントローラからのコマンドアドレスに基づいて前記サブバンクコントローラからの読み要求および書き要求を処理するか否かを決定するように構成されるコンパレータを有する、請求項７４に記載のメモリチップ。
【請求項７６】
各メモリマットが、１または複数のヒューズによって決定される割り当てられたアドレスレンジを有する、請求項７４または７５に記載のメモリチップ。
【請求項７７】
前記１または複数のヒューズが、不良であるメモリマットを無効にするように構成される、請求項７６に記載のメモリチップ。
【請求項７８】
各サブバンクがさらに、各サブバンクを専用メモリとして使用するプロセッササブユニットを有する、請求項７４から７７のいずれか一項に記載のメモリチップ。
【請求項７９】
メモリチップであって、
複数のメモリバンクであって、各メモリバンクが、読み書きを可能にするバンクコントローラと、行デコーダと、列デコーダと、を自らの位置に有する、複数のメモリバンクと、
各バンクコントローラを少なくとも他の１つのバンクコントローラに接続する複数のバスと、
を備えるメモリチップ。
【請求項８０】
データ転送が前記複数のメモリバンクのメインバスに割り込むことなく前記複数のバスにアクセスできる、請求項７９に記載のメモリチップ。
【請求項８１】
各バンクコントローラが、複数の他のバンクコントローラに接続され、データを送信または受信するために前記複数の他のバンクコントローラのうちもう１つを選択するように構成可能である、請求項７９または８０に記載のメモリチップ。
【請求項８２】
各メモリバンクがダイナミックランダムアクセスメモリバンクを含む、請求項７９から８１のいずれか一項に記載のメモリチップ。
【請求項８３】
各バンクコントローラが、構成可能であり、前記複数のメモリバンクのうち自らを有するものの中での読み書きのためのアドレスを決定するように構成される、請求項７９から８２のいずれか一項に記載のメモリチップ。
【請求項８４】
各バンクコントローラが、他のバンクコントローラから入ってくるデータを処理してから、前記複数のメモリバンクのうち自らを有するものに前記データを渡すように構成される、請求項７９から８３のいずれか一項に記載のメモリチップ。
【請求項８５】
各コントローラが、別の空間的に隣接するコントローラに接続される、請求項７９から８４のいずれか一項に記載のメモリチップ。
【請求項８６】
メモリデバイスであって、
基板と、
前記基板上の複数のメモリバンクと、
前記基板上の複数のプライマリ論理ブロックであって、前記複数のプライマリ論理ブロックの各々が前記複数のメモリバンクの少なくとも１つに接続される、複数のプライマリ論理ブロックと、
前記基板上の複数の余剰ブロックであって、前記複数の余剰ブロックの各々が前記複数のメモリバンクの少なくとも１つに接続され、前記複数の余剰ブロックの各々が前記複数のプライマリ論理ブロックの少なくとも１つを複製する、複数の余剰ブロックと、
前記基板上の複数の設定スイッチであって、前記複数の設定スイッチの各々が前記複数のプライマリ論理ブロックの少なくとも１つまたは前記複数の余剰ブロックの少なくとも１つに接続される、複数の設定スイッチと、
を備え、
前記複数のプライマリ論理ブロックの１つと関連付けられる不良を検出すると、
前記複数の設定スイッチの第１の設定スイッチが前記複数のプライマリ論理ブロックの前記１つを無効にするように構成され、
前記複数の設定スイッチの第２の設定スイッチが、前記複数のプライマリ論理ブロックの前記１つを複製する前記複数の余剰ブロックの１つを有効にするように構成される、
メモリデバイス。
【請求項８７】
前記複数の設定スイッチが複数のアクティブ化スイッチおよび複数の非アクティブ化スイッチを含み、
前記複数のアクティブ化スイッチの各々および前記複数の非アクティブ化スイッチの各々が外部入力を含み、
前記複数のアクティブ化スイッチの各々は、前記外部入力におけるアクティブ化信号がスイッチを閉じた状態にさせるように構成され、
前記複数の非アクティブ化スイッチの各々は、前記外部入力における非アクティブ化信号がスイッチを開けた状態にさせるように構成される、
請求項８６に記載のメモリデバイス。
【請求項８８】
前記複数のプライマリ論理ブロックの少なくとも１つが第１の専用接続で前記複数のメモリバンクのサブセットに接続され、前記複数のプライマリ論理ブロックの前記少なくとも１つを複製する前記複数の余剰ブロックの少なくとも１つが第２の専用接続で前記複数のメモリバンクの前記サブセットに接続される、請求項８６または８７に記載のメモリデバイス。
【請求項８９】
前記複数の設定スイッチの各々が、前記複数のプライマリ論理ブロックまたは前記複数の余剰ブロックの少なくとも１つをクロックノードまたはパワーノードの少なくとも１つに連結する、請求項８６から８８のいずれか一項に記載のメモリデバイス。
【請求項９０】
前記複数のプライマリ論理ブロックが、
前記複数のメモリバンクのうちの１つの内部の読み取りオペレーションおよび書き込みオペレーションを有効にするように構成される少なくとも１つのメモリ論理ブロックと、
メモリ内計算を実行するように構成される少なくとも１つのビジネス論理ブロックと、
を含む、請求項８６から８９のいずれか一項に記載のメモリデバイス。
【請求項９１】
前記少なくとも１つのビジネス論理ブロックが第１のビジネス論理ブロックを含み、
前記複数の余剰ブロックが、前記第１のビジネス論理ブロックを複製する第２のビジネス論理ブロックを含む、
請求項９０に記載のメモリデバイス。
【請求項９２】
前記複数の設定スイッチが、ヒューズ、アンチヒューズ、不揮発性メモリデバイスまたはワンタイムプログラマブルデバイスの少なくとも１つを含む、請求項８６から９１のいずれか一項に記載のメモリデバイス。
【請求項９３】
前記複数のプライマリ論理ブロックの各々および前記複数の余剰ブロックの各々がアドレスバスおよびデータバスに接続される、請求項８６から９２のいずれか一項に記載のメモリデバイス。
【請求項９４】
前記複数のプライマリ論理ブロックの少なくとも１つが、
少なくとも１つのローカル論理ユニットと、
少なくとも１つの計算ユニットと、
少なくとも１つの複製ユニットと、
を含み、
前記少なくとも１つの複製ユニットが前記少なくとも１つの計算ユニットを複製し、
前記少なくとも１つのローカル論理ユニットが前記少なくとも１つの計算ユニットよりも小サイズを有する、
請求項８６から９３のいずれか一項に記載のメモリデバイス。
【請求項９５】
前記複数のプライマリ論理ブロックの前記少なくとも１つが、
複数のローカル設定スイッチであって、前記複数のローカル設定スイッチの各々が前記少なくとも１つの計算ユニットまたは前記少なくとも１つの複製ユニットの少なくとも１つに接続される、複数のローカル設定スイッチ
を含み、
不良が前記少なくとも１つの計算ユニット内で検出された場合に、前記複数のローカル設定スイッチが、前記少なくとも１つのローカル計算ユニットを無効にし、前記少なくとも１つの複製ユニットを有効にするように構成される、
請求項９４に記載のメモリデバイス。
【請求項９６】
アドレスマネージャと、
前記アドレスマネージャを前記複数のメモリバンクの各々、前記複数のプライマリ論理ブロックの各々、および前記複数の余剰ブロックの各々に連結するアドレスバスと、
をさらに備え、
前記複数のプライマリ論理ブロックの前記１つと関連付けられる前記不良を検出すると、無効アドレスが前記複数のプライマリ論理ブロックの前記１つに割り当てられ、有効アドレスが前記複数の余剰ブロックの前記１つに割り当てられる、請求項８６から９５のいずれか一項に記載のメモリデバイス。
【請求項９７】
前記複数のプライマリ論理ブロックが直列に接続され、
前記複数のプライマリ論理ブロックの各々が並列スイッチと並列に接続され、
前記複数のプライマリ論理ブロックの前記１つと関連付けられる前記不良を検出すると、前記複数のプライマリ論理ブロックの前記１つに接続される前記並列スイッチが前記複数のプライマリ論理ブロックの２つを連結するようにアクティブ化される、請求項８６から９６のいずれか一項に記載のメモリデバイス。
【請求項９８】
前記並列スイッチがアンチヒューズを含む、請求項９７に記載のメモリデバイス。
【請求項９９】
前記並列スイッチが、選択されたサイクル遅延を含むサンプリング回路を有する、請求項９７に記載のメモリデバイス。
【請求項１００】
前記複数のプライマリ論理ブロックおよび前記複数の余剰ブロックが２次元格子内の前記基板上に配置され、
前記複数のプライマリ論理ブロックの各々および前記複数の余剰ブロックの各々が接続盤と相互接続され、入力ブロックが前記２次元格子の各ラインおよび各列の周辺に配置される、
請求項８６から９９のいずれか一項に記載のメモリデバイス。
【請求項１０１】
メモリチップがＤＲＡＭメモリ、Ｆｌａｓｈメモリ、ＳＲＡＭメモリ、ＲｅＲＡＭメモリ、ＰＲＡＭメモリまたはＭＲＡＭメモリの少なくとも１つを含む、請求項８６から１００のいずれか一項に記載のメモリデバイス。
【請求項１０２】
前記複数のプライマリ論理ブロックの各々が、前記複数の余剰ブロックの少なくとも１つと同等の計算能力を有する、請求項８６から１０１のいずれか一項に記載のメモリデバイス。
【請求項１０３】
前記複数のプライマリ論理ブロックが、少なくとも１つのローカル計算ユニットと、少なくとも１つの余剰計算ユニットと、前記少なくとも１つのローカル計算ユニットを複製する前記少なくとも１つの余剰計算ユニットと、を含む、請求項８６から１０２のいずれか一項に記載のメモリデバイス。
【請求項１０４】
前記第１の設定スイッチがさらに、前記複数のプライマリ論理ブロックの前記１つを複製する前記複数の余剰ブロックの前記１つを有効にするように構成される、請求項８６から１０３のいずれか一項に記載のメモリデバイス。
【請求項１０５】
メモリチップ上の分散型プロセッサであって、
基板と、
前記基板上のアドレスマネージャと、
前記基板上の複数のプライマリ論理ブロックであって、前記複数のプライマリ論理ブロックの各々が複数のメモリバンクの少なくとも１つに接続される、複数のプライマリ論理ブロックと、
前記基板上の複数の余剰ブロックであって、前記複数の余剰ブロックの各々が前記複数のメモリバンクの少なくとも１つに接続され、前記複数の余剰ブロックの各々が前記複数のプライマリ論理ブロックの少なくとも１つを複製する、複数の余剰ブロックと、
前記複数のプライマリ論理ブロックの各々と、前記複数の余剰ブロックの各々と、前記アドレスマネージャに接続される前記基板上のバスと、
を備え、
前記メモリチップ上の分散型プロセッサが、
試験プロトコルに合格している前記複数のプライマリ論理ブロック内のブロックに実行ＩＤ番号を割り当て、
前記試験プロトコルに合格していない前記複数のプライマリ論理ブロック内のブロックに不正ＩＤ番号を割り当て、
前記試験プロトコルに合格している前記複数の余剰ブロック内のブロックに実行ＩＤ番号を割り当てるように構成される、
メモリチップ上の分散型プロセッサ。
【請求項１０６】
実行ＩＤ番号が割り当てられた前記複数の余剰ブロック内の前記ブロックが、不正ＩＤ番号が割り当てられた前記複数のプライマリ論理ブロック内の前記ブロックと等しいかまたはより大きい、請求項１０５に記載のメモリチップ上の分散型プロセッサ。
【請求項１０７】
前記複数のプライマリ論理ブロックの各々および前記複数の余剰ブロックの各々が、ヒューズ付き識別回路を含む、請求項１０６に記載のメモリチップ上の分散型プロセッサ。
【請求項１０８】
前記バスがコマンドライン、データライン、およびアドレスラインを含む、請求項１０７に記載のメモリチップ上の分散型プロセッサ。
【請求項１０９】
メモリチップ上の分散型プロセッサを構成する方法であって、
前記メモリチップの基板上の複数のプライマリ論理ブロックの各々に少なくとも１つの回路機能があるかを試験する段階と、
前記試験の結果に基づいて前記複数のプライマリ論理ブロック内に少なくとも１つの不良論理ブロックを識別する段階であって、前記少なくとも１つの不良論理ブロックが前記メモリチップの前記基板に配置される少なくとも１つのメモリバンクに接続される段階と、
前記メモリチップの前記基板上の少なくとも１つの余剰ブロックに前記少なくとも１つの回路機能があるかを試験する段階であって、前記少なくとも１つの余剰ブロックが前記少なくとも１つの不良論理ブロックを複製し、前記少なくとも１つのメモリバンクに接続される段階と、
外部信号を非アクティブ化スイッチに印加することによって前記少なくとも１つの不良論理ブロックを無効にする段階であって、前記非アクティブ化スイッチが前記少なくとも１つの不良論理ブロックに接続され、前記メモリチップの前記基板に配置される段階と、
前記外部信号をアクティブ化スイッチに印加することによって前記少なくとも１つの余剰ブロックを有効にする段階であって、前記アクティブ化スイッチが前記少なくとも１つの余剰ブロックに接続され、前記メモリチップの前記基板に配置される段階と
を備える、メモリチップ上の分散型プロセッサを構成する方法。
【請求項１１０】
メモリチップ上の分散型プロセッサを構成する方法であって、
前記メモリチップの基板上の複数のプライマリ論理ブロックおよび複数の余剰ブロックを有効にする段階と、
前記メモリチップの前記基板上の前記複数のプライマリ論理ブロックの各々に少なくとも１つの回路機能があるかを試験する段階と、
前記試験の結果に基づいて前記複数のプライマリ論理ブロック内に少なくとも１つの不良論理ブロックを識別する段階であって、前記少なくとも１つの不良論理ブロックが前記メモリチップの前記基板に配置される少なくとも１つのメモリバンクに接続される段階と、
前記メモリチップの前記基板上の少なくとも１つの余剰ブロックに前記少なくとも１つの回路機能があるかを試験する段階であって、前記少なくとも１つの余剰ブロックが前記少なくとも１つの不良論理ブロックを複製し、前記少なくとも１つのメモリバンクに接続される段階と、
外部信号をアクティブ化スイッチに印加することによって少なくとも１つの余剰ブロックを無効にする段階であって、前記アクティブ化スイッチが前記少なくとも１つの余剰ブロックに接続され、前記メモリチップの前記基板に配置される段階と、
を備える、メモリチップ上の分散型プロセッサを構成する方法。
【請求項１１１】
処理デバイスであって、
基板と、
前記基板上の複数のメモリバンクと、
前記複数のメモリバンクの各々に接続される前記基板上のメモリコントローラと、
前記基板上の複数の処理ユニットであって、前記複数の処理ユニットの各々が前記メモリコントローラに接続され、前記複数の処理ユニットが構成マネージャを有する、複数の処理ユニットと、
を備え、
前記構成マネージャが、
実行されるタスクであって、少なくとも１つの計算を要求するタスクの第１の指示を受信するように構成され、
前記少なくとも１つの計算を実行する少なくとも１つの選択された処理ユニットの能力に基づいて、前記複数の処理ユニットから前記少なくとも１つの選択された処理ユニットに信号を送るように構成され、
第２の指示を前記少なくとも１つの選択された処理ユニットに送信するように構成され、
前記メモリコントローラが、
少なくとも１つの通信ラインを利用して、少なくとも２つのメモリバンクから前記少なくとも１つの選択された処理ユニットにデータを送るように構成され、前記メモリコントローラを介して、前記少なくとも１つの通信ラインが、前記少なくとも２つのメモリバンクおよび前記少なくとも１つの選択された処理ユニットに接続されるように構成される、
処理デバイス。
【請求項１１２】
前記第２の指示を送信する段階が、前記少なくとも１つの選択された処理ユニットによって前記タスクを実行する命令を伝達する段階を含み、前記少なくとも１つの選択された処理ユニットがデータを前記メモリコントローラに送信する、またはデータを前記メモリコントローラから受信するように構成される、請求項１１１に記載の処理デバイス。
【請求項１１３】
前記第２の指示を送信する段階が、データを前記メモリコントローラに送る命令を伝達する段階を含む、請求項１１１または１１２に記載の処理デバイス。
【請求項１１４】
前記少なくとも１つの選択された処理ユニットが、前記少なくとも２つのメモリバンクから第１のメモリバンク内の開放されたメモリラインへの一連のアクセス中に、前記少なくとも２つのメモリバンクから第２のメモリバンク内のメモリラインを開放するように構成される、請求項１１１から１１３のいずれか一項に記載の処理デバイス。
【請求項１１５】
通信ラインが前記第１のメモリバンクに開放されるラインアクセス期間中に、前記選択された処理ユニットがデータを前記第２のメモリバンクに転送するように構成される、請求項１１４に記載の処理デバイス。
【請求項１１６】
前記メモリコントローラが、前記複数のメモリバンクからの少なくとも２つのデータ入力と、前記複数の処理ユニットの各々に接続される少なくとも２つのデータ出力と、を含み、
前記メモリコントローラが、前記２つのデータ入力を介して２つのメモリバンクからデータを同時に受信するように構成され、
前記メモリコントローラが、前記２つのデータ入力を介して受信されたデータを、前記少なくとも１つの選択された処理ユニットに前記２つのデータ出力を介して同時に送信するように構成される、請求項１１１から１１５のいずれか一項に記載の処理デバイス。
【請求項１１７】
前記複数の処理ユニットが、予め定義されたタスク用に構成される複数のアクセラレータを含む、請求項１１１から１１６のいずれか一項に記載の処理デバイス。
【請求項１１８】
前記複数のアクセラレータが、ベクトル乗累算ユニットまたはダイレクトメモリアクセスの少なくとも１つを含む、請求項１１７に記載の処理デバイス。
【請求項１１９】
前記構成マネージャが、ＲＩＳＣプロセッサまたはマイクロコントローラの少なくとも１つを含む、請求項１１７に記載の処理デバイス。
【請求項１２０】
前記メモリバンクに接続される外部インタフェースをさらに含む、請求項１１１から１１９のいずれか一項に記載の処理デバイス。
【請求項１２１】
前記処理デバイスがさらに、
第１のメモリラインを通じて第１のアドレスから前記複数の処理ユニットの少なくとも１つにデータを供給し、ラインアクセス期間内に第２のメモリライン内の第２のアドレスを開放し、前記第１のアドレスが前記複数のメモリバンクの第１のメモリバンク内に存在し、前記第２のアドレスが前記複数のメモリバンクの第２のメモリバンク内に存在するように構成され、
前記第２のメモリラインを通じて前記第２のアドレスから前記複数の処理ユニットの前記少なくとも１つにデータを供給し、第２のラインアクセス期間内に前記第１のメモリライン内の前記第１のメモリバンクにおける第３のアドレスを開放するように構成される、
請求項１１１から１２０のいずれか一項に記載の処理デバイス。
【請求項１２２】
コンパイラは、
タスクを実行するために同時に要求されるワードの数を決定し、
前記複数のメモリバンクの各々から同時にアクセスできるワードの数を決定し、
同時に要求される前記ワードの数が同時にアクセスできる前記ワードの数よりも大きい場合に、同時に要求される前記ワードの数を複数のメモリバンク間で分割するように構成される、
請求項１１１から１２１のいずれか一項に記載の処理デバイス。
【請求項１２３】
前記ワードがマシン命令を含む、請求項１２２に記載の処理デバイス。
【請求項１２４】
前記構成マネージャが、前記複数の処理ユニットの少なくとも１つに送信されるコマンドを記憶するローカルメモリを含む、請求項１１１から１２３のいずれか一項に記載の処理デバイス。
【請求項１２５】
前記メモリコントローラが、外部インタフェースからの要求の受信に応答して前記タスクを割り込ませるように構成される、請求項１１１から１２４のいずれか一項に記載の処理デバイス。
【請求項１２６】
前駆複数のメモリバンクが、ＤＲＡＭマット、ＤＲＡＭ、バンク、フラッシュマットＳＲＡＭマット、の少なくとも１つを含む、請求項１１１から１２５のいずれか一項に記載の処理デバイス。
【請求項１２７】
前記複数の処理ユニットが、少なくとも１つの演算論理ユニットと、少なくとも１つのベクトル処理論理ユニットと、少なくとも１つのレジスタと、少なくとも１つのダイレクトメモリアクセスと、を含む、請求項１１１から１２６のいずれか一項に記載の処理デバイス。
【請求項１２８】
前記構成マネージャおよび前記複数の処理ユニットが、タスクを終了させた後で互いに前記メモリコントローラにアクセスをハンドオーバするように構成される、請求項１１１から１２７のいずれか一項に記載の処理デバイス。
【請求項１２９】
分散型メモリデバイスを動作するために実行される方法であって、
前記分散型メモリデバイスのタスクをコンパイラによってコンパイルする段階であって、前記タスクが少なくとも１つの計算を要求する段階を備え、前記コンパイルする段階が、
前記タスクを実行するために同時に要求されるワードの数を決定する段階と、
複数のメモリバンクの１つから同時にアクセスできるワードの数が、同時に要求される前記ワードの数よりも少ない場合に、基板に配置される前記複数のメモリバンク内に同時にアクセスされる必要のあるワードを書き込む命令を与える段階と、
前記基板に配置される構成マネージャによって、前記タスクを実行する指示を受信する段階と、
前記指示を受信する段階に応答して、前記基板に配置されるメモリコントローラが、
第１のラインアクセスサイクル内で、
第１のメモリラインを使用して前記複数のメモリバンクからの第１のメモリバンクから少なくとも１つの第１のワードにアクセスするように、
前記少なくとも１つの第１のワードを少なくとも１つの処理ユニットに送信するように、
第２のメモリバンク内の第１のメモリラインを開放して前記複数のメモリバンクからの前記第２のメモリバンクから第２のアドレスにアクセスするように、および、
第２のラインアクセスサイクル内で、
前記第１のメモリラインを使用して前記第２のメモリバンクから少なくとも１つの第２のワードにアクセスするように、
前記少なくとも１つの第２のワードを少なくとも１つの処理ユニットに送信するように、
前記第１のメモリバンク内の第２のメモリラインを使用して前記第１のメモリバンクから第３のアドレスにアクセスするように、構成する段階と、を有する、
方法。
【請求項１３０】
前記タスクをコンパイルする前記段階がさらに、
前記タスクを実行するのに必要なサイクル数を決定する段階と、
前記複数のメモリバンクの単一メモリバンク内で一連のサイクルで必要されるワードを書き込む段階と、を含む、請求項１２９に記載の方法。
【請求項１３１】
少なくとも１つのプロセッサに、
少なくとも１つの計算を要求するタスクを実行するために同時に要求されるワードの数を決定することと、
複数のメモリバンクの１つから同時にアクセスできるワードの数が、同時に要求される前記ワードの数よりも少ない場合に、基板に配置される前記複数のメモリバンク内に同時にアクセスされる必要のあるワードを書き込むことと、
前記タスクを実行する指示を、前記基板に配置される構成マネージャに送信することと、
前記基板に配置されるメモリコントローラが、
第１のラインアクセスサイクル内で、第１のメモリラインを使用して前記複数のメモリバンクからの第１のメモリバンクから少なくとも１つの第１のワードにアクセスするように、前記少なくとも１つの第１のワードを少なくとも１つの処理ユニットに送信するように、第２のメモリバンク内の第１のメモリラインを開放して前記複数のメモリバンクからの前記第２のメモリバンクから第２のアドレスにアクセスするように、および、
第２のラインアクセスサイクル内で、前記第１のメモリラインを使用して前記第２のメモリバンクから少なくとも１つの第２のワードにアクセスするように、前記少なくとも１つの第２のワードを少なくとも１つの処理ユニットに送信するように、前記第１のメモリバンク内の第２のメモリラインを使用して前記第１のメモリバンクから第３のアドレスにアクセスするように構成する命令を送信することと
をさせる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、２０１７年７月３０日に出願された米国仮特許出願第６２／５３８７２２号、２０１７年７月３０日に出願された米国仮特許出願第６２／５３８７２４号、および２０１７年８月２３日に出願された米国仮特許出願第６２／５４８９９０号に対する優先権の利益を主張するものである。上記の全出願の内容全体を参照によって本願明細書に引用したものとする。
【背景技術】
【０００２】
本開示は全体的に、メモリ負荷の高い動作を促進する装置に関する。詳細には、本開示は、専用メモリバンクに連結される処理要素を含むハードウェアチップに関する。背景情報
【０００３】
プロセッサの速度が上がり続け、メモリサイズの大型化が続く場合、効果的な処理速度に対する著しい制限がフォンノイマンボトルネックとなる。フォンノイマンボトルネックは、従来のコンピュータアーキテクチャに起因するスループット限界から生じる。詳細には、プロセッが着手する実際の計算に比べ、メモリからプロセッサまでのデータ転送がボトルネックになることが多い。したがって、メモリから読み込みおよび書き込みをするクロックサイクル数は、メモリ負荷の高い処理に伴い著しく増える。このような増えたクロックサイクル数は処理速度の効率をかなり悪くする。これは、メモリからの読み込みおよび書き込みがデータ演算用に使用できないクロックサイクルを消費してしまうためである。さらに、プロセッサの計算帯域幅は、プロセッサがメモリにアクセスするために使用するバスの計算帯域幅よりも一般的にかなり広い。
【０００４】
これらのボトルネックは、ニューラルネットワークおよび、データベース構築、インデックスサーチ、クエリといったその他の機械学習アルゴリズム、および、データ処理動作というよりはむしろ読み込みおよび書き込み動作を含むその他のタスク、などメモリ負荷の高い処理で特に顕著である。
【０００５】
その上、利用可能なデジタルデータ量の急増、および利用可能なデジタルデータ粒度により、機械学習アルゴリズムを開発する機会が創出され、新しい技術が可能になった。ところが、このことはさらに、データベースおよび並列計算の世界に扱いにくい難題をもたらしている。例えば、ソーシャルメディアおよびモノのインターネット（ＩｏＴ）の台頭により、記録的な速度でデジタルデータが創出されている。この新しいデジタルデータは、新しい広告技法から工業プロセスのより正確な制御法まで多岐にわたるアルゴリズムを様々な目的で作成するのに使用することができる。しかしながら、この新しいデジタルデータは、記憶、処理、解析、および取り扱いが困難である。
【０００６】
新しいデータ資源は、場合によってはペタバイトからゼタバイトの順に大容量になり得る。さらに、これらのデータ資源の増加速度はデータ処理能力を上回る可能性がある。したがって、データサイエンティストたちは、こうした難題に取り組むために、並列データ処理技術に救いを求めた。計算能力を高めるために、および大容量のデータを処理するために、データサイエンティストたちは負荷の高い並列処理を可能にするシステムおよび方法を創出することに努めている。しかし、こうした現存するシステムおよび方法はデータ処理要件に追いついていない。現存するシステムおよび方法がデータ管理用の追加リソースを要求したり、分離されたデータを統合したり、分割されたデータを解析したりすることによって、利用される技術が制限されているというのが大きな理由である。
【０００７】
大容量データセットの処理を促進するために、エンジニアおよびサイエンティストたちは現在、データ解析に使用されるハードウェアを改善しようと努めている。例えば、算術演算ではなくメモリ操作により適合した技術で製造される単一基板内にメモリ機能および処理機能を組み込むことによって、新しい半導体プロセッサまたは半導体チップ（例えば本明細書で記載されるもの）をデータ量の多いタスク用に特別に設計することができる。データ量の多いタスク用に特別に設計された集積回路を用いれば、新しいデータ処理要件を満たすことが可能になる。しかしながら、大容量データセットのデータ処理に取り組むこうした新しいアプローチには、チップ設計およびチップ製造における新しい問題を解決することが求められる。例えば、データ量の多いタスク用に設計された新しいチップが通常のチップ用に使用される製造技術および製造アーキテクチャで製造された場合、新しいチップは低性能および／または不適格の歩留りを有することになろう。さらに、新しいチップが現在のデータ処理法で動作するように設計された場合、新しいチップは低性能を有することになろう。なぜなら、現在のデータ処理法は並列演算を処理するチップの能力を制限する可能性があるためである。
【０００８】
本開示は、上記の１または複数の問題、とりわけ先行技術における問題を軽減または克服するための解決策を記載する。
【発明の概要】
【０００９】
本開示と一致する実施形態は、ハードウェア処理チップを含む装置を提供する。本開示の実施形態は、処理要素と対になる専用メモリバンクを使用して従来のプロセッサに比べてより効率的でより効果的な処理速度をもたらすことができる。例えば、開示された実施形態と一致する本発明のチップは、各処理要素と、処理要素に対応するメモリバンクとの間に専用バスを含み得る。さらに、本開示のチップは、処理要素間のデータ転送のタイミングを制御するアービタおよび／またはその他のハードウェアがなくてもよい。開示されたその他の非一時的コンピュータ可読媒体は、上位命令を、本明細書で開示されるハードウェアチップによって実行される下位命令にコンパイルする命令を記憶することができる。
【００１０】
本開示のいくつかの実施形態は分散型プロセッサを備え、分散型プロセッサは、基板と、基板に配置されるメモリアレイであって、メモリアレイが複数の個別のメモリバンクを含む、メモリアレイと、基板に配置される処理アレイであって、処理アレイが複数のプロセッササブユニットを含み、複数のプロセッササブユニットの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、第１の複数のバスであって、各バスが複数のプロセッササブユニットの１つをその対応する専用メモリバンクに接続する、第１の複数のバスと、第２の複数のバスであって、各バスが複数のプロセッササブユニットの１つを複数のプロセッササブユニットの別のプロセッササブユニットに接続する、第２の複数のバスと、を含む。
【００１１】
本開示と一致する他の実施形態はメモリチップを備え、メモリチップは、基板と、基板に配置されるメモリアレイであって、メモリアレイが複数の個別のメモリバンクを含む、メモリアレイと、基板に配置される処理アレイであって、処理アレイが複数のアドレスジェネレータを含み、アドレスジェネレータの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、複数のバスであって、各バスが複数のアドレスジェネレータの１つをその対応する専用メモリバンクに接続する、複数のバスと、を含む。
【００１２】
本開示と一致する別の実施形態は分散型プロセッサを備え得る。分散型プロセッサは、基板と、基板に配置されるメモリアレイであって、メモリアレイが複数の個別のメモリバンクを含み、個別のメモリバンクの各々が１メガバイトよりも大きい容量を有する、メモリアレイと、基板に配置される処理アレイであって、処理アレイが複数のプロセッササブユニットを含み、プロセッササブユニットの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、を含む。
【００１３】
本開示と一致するさらに他の実施形態は分散型プロセッサを備え得る。分散型プロセッサは、基板と、基板に配置されるメモリアレイであって、メモリアレイが複数の個別のメモリバンクを含む、メモリアレイと、基板に配置される処理アレイであって、処理アレイが複数のプロセッササブユニットを含み、複数のプロセッササブユニットの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも別の１つに接続する、複数のバスと、を含み、複数のバスにはタイミングハードウェア論理コンポーネントがなく、その結果、プロセッササブユニット間の、および複数のバスのうち対応するバス全体にわたるデータ転送がタイミングハードウェア論理コンポーネントによって制御されない。
【００１４】
他の実施形態はメモリチップ上の分散型プロセッサを備え得る。メモリチップ上の分散型プロセッサは、基板と、基板に配置されるメモリアレイであって、メモリアレイが複数の個別のメモリバンクを有する、メモリアレイと、基板に配置される処理アレイであって、処理アレイが複数のプロセッササブユニットを有し、複数のプロセッササブユニットの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数の個別のメモリバンクの対応する専用の１つに接続する複数のバスと、を含み、複数のバスにはタイミングハードウェア論理コンポーネントがなく、その結果、プロセッササブユニットと、複数の個別のメモリバンクの対応する専用の１つとの間の、および複数のバスのうち対応するバス全体にわたるデータ転送がタイミングハードウェア論理コンポーネントによって制御されない。
【００１５】
他の実施形態は分散型プロセッサを備え得る。分散型プロセッサは、基板と、基板に配置されるメモリアレイであって、メモリアレイが複数の個別のメモリバンクを含む、メモリアレイと、基板に配置される処理アレイであって、処理アレイが複数のプロセッササブユニットを含み、複数のプロセッササブユニットの各々が複数の個別のメモリバンクの対応する専用の１つと関連付けられる、処理アレイと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも別の１つのプロセッササブユニットに接続する、複数のバスと、を含み、複数のプロセッササブユニットが、複数のバス全体にわたるデータ転送のタイミングを制御するソフトウェアを実行することで、複数のバスの少なくとも１つのバス上でデータ転送が衝突しないように構成される。
【００１６】
他の実施形態はメモリチップ上の分散型プロセッサを備え得る。メモリチップ上の分散型プロセッサは、基板と、基板に配置される複数のプロセッササブユニットであって、各プロセッササブユニットが他のプロセッササブユニットから独立した一連の命令を実行するように構成され、各一連の命令が単一プロセッササブユニットによって実行される一連のタスクを定義する、複数のプロセッササブユニットと、基板に配置される対応する複数のメモリバンクであって、複数のプロセッササブユニットの各々が、複数のプロセッササブユニットの他のあらゆるプロセッササブユニットによって共有されない少なくとも１つの専用メモリバンクに接続される、対応する複数のメモリバンクと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも他の１つのプロセッササブユニットに接続する、複数のバスと、を含み、複数のバスの少なくとも１つのバス全体にわたるデータ転送が、複数のバスの少なくとも１つに接続されるプロセッササブユニット内に含まれる一連の命令によって予め定義される。
【００１７】
他の実施形態はメモリチップ上の分散型プロセッサを備え得る。メモリチップ上の分散型プロセッサは、メモリチップ上に配置される複数のプロセッササブユニットと、メモリチップ上に配置される複数のメモリバンクであって、複数のメモリバンクの各々が、複数のメモリバンクのうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成され、複数のプロセッササブユニットの各々が複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続される、複数のメモリバンクと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する、複数のバスと、を含み、複数のバスのうち特定のバス全体にわたるデータ転送が、複数のバスの特定のバスに接続される対応するプロセッササブユニットよって制御される。
【００１８】
他の実施形態はメモリチップ上の分散型プロセッサを備え得る。メモリチップ上の分散型プロセッサは、メモリチップ上に配置される複数のプロセッササブユニットと、メモリチップ上に配置される複数のメモリバンクであって、複数のプロセッササブユニットの各々が複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続され、複数のメモリバンクの各メモリバンクが、複数のメモリバンクのうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成され、複数のメモリバンク間から１つの特定のメモリバンク内に記憶される少なくともいくつかのデータが、複数のメモリバンクの少なくとも別のメモリバンク内に記憶されるデータの複製を含む、複数のメモリバンクと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する、複数のバスと、を含み、複数のバスのうち特定のバス全体にわたるデータ転送が、複数のバスの特定のバスに接続される対応するプロセッササブユニットよって制御される。
【００１９】
他の実施形態はメモリチップ上の分散型プロセッサを備え得る。メモリチップ上の分散型プロセッサは、メモリチップ上に配置される複数のプロセッササブユニットと、メモリチップ上に配置される複数のメモリバンクであって、複数のプロセッササブユニットの各々が複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続され、複数のメモリバンクの各メモリバンクが、複数のメモリバンクのうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成され、複数のメモリバンク間から１つの特定のメモリバンク内に記憶される少なくともいくつかのデータが、複数のメモリバンクの少なくとも別のメモリバンク内に記憶されるデータの複製を含む、複数のメモリバンクと、複数のバスであって、複数のバスの各々が複数のプロセッササブユニットの１つを複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する、複数のバスと、を含み、複数のバスのうち特定のバス全体にわたるデータ転送が、複数のバスの特定のバスに接続される対応するプロセッササブユニットよって制御される。
【００２０】
他の実施形態は、複数のプロセッササブユニットおよび複数のメモリバンクを含むメモリチップ上で一連の実行命令をコンパイルする命令を記憶する非一時的コンピュータ可読媒体を備え得る。複数のプロセッササブユニット間からの各プロセッササブユニットが複数のメモリバンク間から少なくとも１つの対応する専用メモリバンクに接続され、命令は少なくとも１つのプロセッサに、一連の命令をサブシリーズ命令の複数のグループに分割させ、分割は、一連の命令と関連付けられたタスクを複数のプロセッササブユニットの異なるものに割り当てる段階であって、複数のプロセッササブユニットが、メモリチップに配置される複数のメモリバンク間に空間的に分散される、段階と、メモリチップの複数のプロセッササブユニットの複数対の間でデータを転送するタスクを生成し、複数のプロセッササブユニットの複数対の各々がバスによって接続される、段階と、割り当てられたタスクおよび生成されたタスクをサブシリーズ命令の複数のグループに分類し、サブシリーズ命令の複数のグループの各々が複数のプロセッササブユニットの異なる１つに対応する、段階と、を含み、サブシリーズ命令の複数のグループの各々に対応するマシンコードを生成させ、分割に従って、サブシリーズ命令の複数のグループの各々に対応する、生成されたマシンコードを、複数のプロセッササブユニットのうち対応する１つのプロセッササブユニットに割り当てさせる、非一時的コンピュータ可読媒体である。
【００２１】
他の実施形態はメモリチップを備え得る。メモリチップは、複数のメモリバンクであって、各メモリバンクがバンク行デコーダおよびバンク列デコーダを有する、複数のメモリバンクと、複数のメモリサブバンクであって、各メモリサブバンクが、読み書きを可能にするサブバンク行デコーダおよびサブバンク列デコーダを自らの位置に有し、各メモリサブバンクが、複数のメモリセルを各々が含む複数のメモリマットを含む、複数のメモリサブバンクと、を含み、サブバンク行デコーダおよびサブバンク列デコーダがバンク行デコーダおよびバンク列デコーダに接続される。
【００２２】
他の実施形態はメモリチップを備え得る。メモリチップは、複数のメモリバンクであって、各メモリバンクがバンクコントローラおよび複数のメモリサブバンクを有する、複数のメモリバンクと、複数のメモリサブバンクであって、各メモリサブバンクが、読み書きを可能にするサブバンク行デコーダおよびサブバンク列デコーダを自らの位置に有し、各メモリサブバンクが、複数のメモリセルを各々が含む複数のメモリマットを含む、複数のメモリサブバンクと、を有し、各サブバンク行デコーダおよび各サブバンク列デコーダがバンクコントローラからの読み要求および書き要求を処理する。
【００２３】
他の実施形態はメモリチップを備え得る。メモリチップは、複数のメモリバンクであって、各メモリバンクが、読み書きを処理するバンクコントローラを自らの位置に有し、各メモリバンクが、複数のメモリセルと、マット行デコーダおよびマット列デコーダとを各々が有する複数のメモリマットを含む、複数のメモリバンクを備え、マット行デコーダおよびマット列デコーダがサブバンクコントローラからの読み要求および書き要求を処理する。
【００２４】
他の実施形態はメモリチップを備え得る。メモリチップは、各メモリバンクが、読み書きを可能にするバンクコントローラと、行デコーダと、列デコーダと、を自らの位置に有する、複数のメモリバンクと、複数のバンクコントローラの各コントローラを複数のバンクコントローラの少なくとも他の１つのバンクコントローラに接続する複数のバスと、を含む。
【００２５】
本開示の一態様はメモリデバイスに関し、メモリデバイスは、基板と、基板上の複数のメモリバンクと、基板上の複数のプライマリ論理ブロックであって、複数のプライマリ論理ブロックの各々が複数のメモリバンクの少なくとも１つに接続される、複数のプライマリ論理ブロックと、基板上の複数の余剰ブロックであって、複数の余剰ブロックの各々が複数のメモリバンクの少なくとも１つに接続され、複数の余剰ブロックの各々が複数のプライマリ論理ブロックの少なくとも１つを複製する、複数の余剰ブロックと、基板上の複数の設定スイッチであって、複数の設定スイッチの各々が複数のプライマリ論理ブロックの少なくとも１つまたは複数の余剰ブロックの少なくとも１つに接続される、複数の設定スイッチと、を含む。メモリデバイスでは、複数のプライマリ論理ブロックの１つと関連付けられる不良を検出すると、複数の設定スイッチの第１の設定スイッチは複数のプライマリ論理ブロックの１つを無効にするように構成することができ、複数の設定スイッチの第２の設定スイッチは、複数のプライマリ論理ブロックの１つを複製する複数の余剰ブロックの１つを有効にするように構成することができる。
【００２６】
本開示の別の態様はメモリチップ上の分散型プロセッサに関し、メモリチップ上の分散型プロセッサは、基板と、基板上のアドレスマネージャと、基板上の複数のプライマリ論理ブロックであって、複数のプライマリ論理ブロックの各々が複数のメモリバンクの少なくとも１つに接続される、複数のプライマリ論理ブロックと、基板上の複数の余剰ブロックであって、複数の余剰ブロックの各々が複数のメモリバンクの少なくとも１つに接続され、複数の余剰ブロックの各々が複数のプライマリ論理ブロックの少なくとも１つを複製する、複数の余剰ブロックと、複数のプライマリ論理ブロックの各々と、複数の余剰ブロックの各々と、アドレスマネージャに接続される基板上のバスと、を含む。メモリチップ上の分散型プロセッサは、試験プロトコルに合格している複数のプライマリ論理ブロック内のブロックに実行ＩＤ番号を割り当てることができ、試験プロトコルに合格していない複数のプライマリ論理ブロック内のブロックに不正ＩＤ番号を割り当てることができ、試験プロトコルに合格している複数の余剰ブロック内のブロックに実行ＩＤ番号を割り当てることができる。
【００２７】
本開示のさらに別の態様は、メモリチップ上の分散型プロセッサを構成する方法に関する。この方法は、メモリチップの基板上の複数のプライマリ論理ブロックの各々に少なくとも１つの回路機能があるかを試験する段階と、試験の結果に基づいて複数のプライマリ論理ブロック内に少なくとも１つの不良論理ブロックを識別する段階であって、少なくとも１つの不良論理ブロックがメモリチップの基板に配置される少なくとも１つのメモリバンクに接続される段階と、メモリチップの基板上の少なくとも１つの余剰ブロックに少なくとも１つの回路機能があるかを試験する段階であって、少なくとも１つの余剰ブロックが少なくとも１つの不良論理ブロックを複製し、少なくとも１つのメモリバンクに接続される段階と、外部信号を非アクティブ化スイッチに印加することによって少なくとも１つの不良論理ブロックを無効にする段階であって、非アクティブ化スイッチが少なくとも１つの不良論理ブロックに接続され、メモリチップの基板に配置される段階と、外部信号をアクティブ化スイッチに印加することによって少なくとも１つの余剰ブロックを有効にする段階であって、アクティブ化スイッチが少なくとも１つの余剰ブロックに接続され、メモリチップの基板に配置される段階と、を含む。
【００２８】
本開示の別の態様は、メモリチップ上の分散型プロセッサを構成する方法に関する。この方法は、メモリチップの基板上の複数のプライマリ論理ブロックおよび複数の余剰ブロックを有効にする段階と、メモリチップの基板上の複数のプライマリ論理ブロックの各々に少なくとも１つの回路機能があるかを試験する段階と、試験の結果に基づいて複数のプライマリ論理ブロック内に少なくとも１つの不良論理ブロックを識別する段階であって、少なくとも１つの不良論理ブロックがメモリチップの基板に配置される少なくとも１つのメモリバンクに接続される段階と、メモリチップの基板上の少なくとも１つの余剰ブロックに少なくとも１つの回路機能があるかを試験する段階であって、少なくとも１つの余剰ブロックが少なくとも１つの不良論理ブロックを複製し、少なくとも１つのメモリバンクに接続される段階と、外部信号をアクティブ化スイッチに印加することによって少なくとも１つの余剰ブロックを無効にする段階であって、アクティブ化スイッチが少なくとも１つの余剰ブロックに接続され、メモリチップの基板に配置される段階と、を含む。
【００２９】
本開示の一態様は処理デバイスに関する。処理デバイスは、基板と、基板上の複数のメモリバンクと、複数のメモリバンクの各々に接続される基板上のメモリコントローラと、基板上の複数の処理ユニットであって、複数の処理ユニットの各々がメモリコントローラに接続され、複数の処理ユニットが構成マネージャを有する、複数の処理ユニットと、を含み得る。処理デバイスでは、構成マネージャは、実行されるタスクであって、少なくとも１つの計算を要求するタスクの第１の指示を受信するように構成され、少なくとも１つの計算を実行する少なくとも１つの選択された処理ユニットの能力に基づいて、複数の処理ユニットから少なくとも１つの選択された処理ユニットに信号を送るように構成され、第２の指示を少なくとも１つの選択された処理ユニットに送信するように構成され、メモリコントローラが、少なくとも１つの通信ラインを利用して、少なくとも２つのメモリバンクから少なくとも１つの選択された処理ユニットにデータを送るように構成され、メモリコントローラを介して、少なくとも１つの通信ラインが、少なくとも２つのメモリバンクおよび少なくとも１つの選択された処理ユニットに接続されるように構成される。
【００３０】
本開示の別の態様は、分散型メモリデバイスを動作するために実行される方法に関する。この方法は、分散型メモリデバイスのタスクをコンパイラによってコンパイルする段階であって、タスクが少なくとも１つの計算を要求する段階を備え、コンパイルする段階が、タスクを実行するために同時に要求されるワードの数を決定する段階と、複数のメモリバンクの１つから同時にアクセスできるワードの数が、同時に要求されるワードの数よりも少ない場合に、基板に配置される複数のメモリバンク内に同時にアクセスされる必要のあるワードを書き込む命令を与える段階と、基板に配置される構成マネージャによって、タスクを実行する指示を受信する段階と、指示を受信する段階に応答して、基板に配置されるメモリコントローラが、第１のラインアクセスサイクル内で、第１のメモリラインを使用して複数のメモリバンクからの第１のメモリバンクから少なくとも１つの第１のワードにアクセスするように、少なくとも１つの第１のワードを少なくとも１つの処理ユニットに送信するように、第２のメモリバンク内の第１のメモリラインを開放して複数のメモリバンクからの第２のメモリバンクから第２のアドレスにアクセスするように、および、第２のラインアクセスサイクル内で、第１のメモリラインを使用して第２のメモリバンクから少なくとも１つの第２のワードにアクセスするように、少なくとも１つの第２のワードを少なくとも１つの処理ユニットに送信するように、第１のメモリバンク内の第２のメモリラインを使用して第１のメモリバンクから第３のアドレスにアクセスするように、構成する段階と、を含み得る。
【００３１】
本開示のさらに別の態様は、少なくとも１つのプロセッサによって実行される場合に命令を記憶する非一時的コンピュータ可読媒体に関し、少なくとも１つのプロセッサに、少なくとも１つの計算を要求するタスクを実行するために同時に要求されるワードの数を決定することと、複数のメモリバンクの１つから同時にアクセスできるワードの数が、同時に要求されるワードの数よりも少ない場合に、基板に配置される複数のメモリバンク内に同時にアクセスされる必要のあるワードを書き込むことと、タスクを実行する指示を、基板に配置される構成マネージャに送信することと、基板に配置されるメモリコントローラが、第１のラインアクセスサイクル内で、第１のメモリラインを使用して複数のメモリバンクからの第１のメモリバンクから少なくとも１つの第１のワードにアクセスするように、少なくとも１つの第１のワードを少なくとも１つの処理ユニットに送信するように、第２のメモリバンク内の第１のメモリラインを開放して複数のメモリバンクからの第２のメモリバンクから第２のアドレスにアクセスするように、および、第２のラインアクセスサイクル内で、第１のメモリラインを使用して第２のメモリバンクから少なくとも１つの第２のワードにアクセスするように、少なくとも１つの第２のワードを少なくとも１つの処理ユニットに送信するように、第１のメモリバンク内の第２のメモリラインを使用して第１のメモリバンクから第３のアドレスにアクセスするように構成する命令を送信することと、をさせる、非一時的コンピュータ可読媒体。
【００３２】
開示された他の実施形態と一致する非一時的コンピュータ可読記憶媒体は、少なくとも１つの処理デバイスによって実行されるプログラム命令を記憶し、本明細書で記載されるあらゆる方法を実行することができる。
【００３３】
前述の概要および以下の詳述は、例示および説明に過ぎず、そうした主張に限定しない。
【図面の簡単な説明】
【００３４】
本開示の一部に引用され、本開示の一部を構成する添付図面は、開示される様々な実施形態を示す。図面
【００３５】
【図１】中央処理装置（ＣＰＵ）の概略図である。
【００３６】
【図２】グラフィックス処理ユニット（ＧＰＵ）の概略図である。
【００３７】
【図３Ａ】本開示の実施形態と一致する例示的なハードウェアチップの一実施形態の概略図である。
【００３８】
【図３Ｂ】本開示の実施形態と一致する例示的なハードウェアチップの別の実施形態の概略図である。
【００３９】
【図４】本開示の実施形態と一致する例示的なハードウェアチップによって実行される汎用コマンドの概略図である。
【００４０】
【図５】本開示の実施形態と一致する例示的なハードウェアチップによって実行される専用コマンドの概略図である。
【００４１】
【図６】本開示の実施形態と一致する例示的なハードウェアチップ内で用いられる処理グループの概略図である。
【００４２】
【図７Ａ】本開示の実施形態と一致する処理グループの矩形アレイの概略図である。
【００４３】
【図７Ｂ】本開示の実施形態と一致する処理グループの楕円アレイの概略図である。
【００４４】
【図７Ｃ】本開示の実施形態と一致するハードウェアチップのアレイの概略図である。
【００４５】
【図７Ｄ】本開示の実施形態と一致するハードウェアチップの別のアレイの概略図である。
【００４６】
【図８】本開示の実施形態と一致する例示的なハードウェアチップ上で実行する一連の命令をコンパイルする例示的方法を示したフローチャートである。
【００４７】
【図９】メモリバンクの概略図である。
【００４８】
【図１０】メモリバンクの概略図である。
【００４９】
【図１１】本開示の実施形態と一致するサブバンク制御を備える例示的なメモリバンクの一実施形態の概略図である。
【００５０】
【図１２】本開示の実施形態と一致するサブバンク制御を備える例示的なメモリバンクの別の実施形態の概略図である。
【００５１】
【図１３】本開示の実施形態と一致する例示的なメモリチップのブロック図である。
【００５２】
【図１４】本開示の実施形態と一致する例示的な余剰論理ブロックセットのブロック図である。
【００５３】
【図１５】本開示の実施形態と一致する例示的な論理ブロックのブロック図である。
【００５４】
【図１６】本開示の実施形態と一致する、バスと接続された例示的な論理ブロックのブロック図である。
【００５５】
【図１７】本開示の実施形態と一致する、並列接続された例示的な論理ブロックのブロック図である。
【００５６】
【図１８】本開示の実施形態と一致する、２次元アレイで接続された例示的な論理ブロックのブロック図である。
【００５７】
【図１９】本開示の実施形態と一致する、複雑な接続の例示的な論理ブロックのブロック図である。
【００５８】
【図２０】本開示の実施形態と一致する、余剰ブロックを有効にするプロセスを示す例示的なフローチャートである。
【００５９】
【図２１】本開示の実施形態と一致する、アドレス割り当てプロセスを示す例示的なフローチャートである。
【００６０】
【図２２】本開示の実施形態と一致する、例示的な処理装置のブロック図を提供する。
【００６１】
【図２３】本開示の実施形態と一致する、例示的な処理装置のブロック図である。
【００６２】
【図２４】本開示の実施形態と一致する、例示的なメモリ構成図を含む。
【００６３】
【図２５】本開示の実施形態と一致する、メモリ構成プロセスを示す例示的なフローチャートである。
【００６４】
【図２６】本開示の実施形態と一致する、メモリ読み込みプロセスを示す例示的なフローチャートである。
【００６５】
【図２７】本開示の実施形態と一致する、プロセス実行を示す例示的なフローチャートである。
【発明を実施するための形態】
【００６６】
以下の詳細な説明では添付図面を参照する。図面および以下の説明において、同一または類似部分に言及するために、好都合であるときは常に、同一の参照符号を使用する。いくつかの例示的な実施形態を本明細書で記載するが、修正、適応、およびその他の実装も可能である。例えば、図面で示されるコンポーネントに置換、追加または修正を行うことができ、本開示の方法に段階を置換、並べ替え、削除、または追加することによって、本明細書に記載される例示的な方法を修正することができる。したがって、以下の詳細な説明は、開示された実施形態および事例に限定されない、  代わりに、適切な範囲が添付の特許請求の範囲によって定義される。
【００６７】
［プロセッサアーキテクチャ］
本開示全体にわたり使用されるように、「ハードウェアチップ」という用語は、１または複数の回路要素（例えばトランジスタ、コンデンサ、抵抗器および／またはその他同種のもの）が形成される半導体ウェハ（例えばシリコンまたはその他同種のもの）を指す。これらの回路要素は処理要素またはメモリデバイスを形成することができる。「処理要素」は、少なくとも１つの論理関数（例えば演算関数、論理ゲート、その他のブール演算、またはその他同種のもの）を共に実行する１または複数の回路要素を指す。処理要素は、汎用処理要素（例えば構成可能な複数のトランジスタ）、または専用処理要素（例えば特定の論理ゲート、または特定の論理関数を実行するように設計される複数の回路要素）であってもよい。「メモリ要素」は、データを記憶するのに使用できる１または複数の回路要素を指す。「メモリ要素」はさらに「メモリセル」とも呼ばれ得る。メモリ要素は、（データ記憶を維持するには電気的リフレッシュが必要である）ダイナミックメモリ、（電力損失後データが少なくともしばらくの間続く）スタティックメモリ、または不揮発性メモリであってもよい。
【００６８】
処理要素はプロセッササブユニットを形成するように連結され得る。したがって「プロセッササブユニット」は、（例えば、プロセッサ命令セットの）少なくとも１つのタスクまたは命令を実行できる処理要素の最小グループを含み得る。例えば、サブユニットは、互いに命令を実行するように構成される１または複数の汎用処理要素と、補完的に命令を実行するように構成される１または複数の専用処理要素と組み合わされる１または複数の汎用処理要素と、またはその他同種のものと、を含み得る。プロセッササブユニットは、基板（例えば、ウェーハ）にアレイ形式で配置することができる。「アレイ」は矩形を含んでもよいが、アレイ形式でのサブユニットのあらゆる配置を基板に形成することができる。
【００６９】
メモリ要素はメモリバンクを形成するように連結され得る。例えば、メモリバンクは、少なくとも１つのワイヤ（またはその他の導電接続）を介して連結される１または複数のメモリ要素のラインを含み得る。さらに、メモリ要素は、別の方向で少なくとも１つの追加のワイヤを介して連結することができる。例えば、メモリ要素は、下記で説明するように、ワード線およびビット線を介して配置することができる。メモリバンクはラインを含んでもよいが、メモリバンク内のメモリ要素のあらゆる配置を利用して基板にメモリバンクを形成することができる。さらに１または複数のメモリバンクは、メモリアレイを形成するように、少なくとも１つのメモリコントローラと電気的に結合され得る。メモリアレイはメモリバンクの矩形配置を含んでもよいが、アレイ形式でのメモリバンクのあらゆる配置を基板に形成することができる。
【００７０】
さらに本開示を通して使用されるように、「バス」は、基板の要素間のあらゆる通信接続部を指す。例えば、（電気接続部を形成する）ワイヤもしくはライン、（光学接続部を形成する）光ファイバ、またはコンポーネント間で通信を行うあらゆるその他の接続が「バス」と呼ばれ得る。
【００７１】
従来のプロセッサは、共有メモリと汎用論理回路を組み合わせる。共有メモリは、論理回路によって実行する命令のセット、ならびに命令のセットを実行するのに使用される、および命令のセットを実行することで生じるデータ、の両方を記憶することができる。下記のように、いくつかの従来のプロセッサは、共有メモリからプルを実行する際にキャッシュシステムを利用して遅延を短くするが、従来のキャッシュシステムは依然として共有されたままである。従来のプロセッサは、中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、様々な特定用途向け集積回路（ＡＳＩＣ）、またはその他同種のもの、を含む。図１はＣＰＵの一例を示し、図２はＧＰＵの一例を示す。
【００７２】
図１で示されるように、ＣＰＵ１００は、プロセッササブユニット１２０ａおよびプロセッササブユニット１２０ｂなど、１または複数のプロセッササブユニットを含む処理ユニット１１０を備え得る。図１では示されていないが、各プロセッササブユニットは、複数の処理要素を含んでもよい。さらに、処理ユニット１１０は、オンチップキャッシュの１または複数のレベルを含んでもよい。こうしたキャッシュ要素は一般的に、プロセッササブユニット１２０ａおよび１２０ｂに接続されるというよりも、プロセッササブユニット１２０ａおよび１２０ｂならびにキャッシュ要素を含む基板内に形成される１または複数のバスを介して処理ユニット１１０と同じ半導体ダイに形成される。バスを介して接続されるのではなく、同じダイに直接配置されることは、従来のプロセッサ内の１次（Ｌ１）キャッシュおよび２次（Ｌ２）キャッシュの両方に共通している。あるいは、より旧型のプロセッサでは、プロセッササブユニットと２次（Ｌ２）キャッシュ間でバックサイドバスを用いてプロセッササブユニット間で２次（Ｌ２）キャッシュが共有される。バックサイドバスは一般的に、以下で記載するフロントサイドバスよりも大きい。したがって、キャッシュはダイ上で全てのプロセッササブユニットと共有されるため、キャッシュ１３０はプロセッササブユニット１２０ａおよび１２０ｂと同じダイ上に形成することができる、または１または複数のバックサイドバスを介してプロセッササブユニット１２０ａおよび１２０ｂに通信可能に連結することができる。（例えば、キャッシュが直接ダイに形成される）バスのない実施形態、ならびにバックサイドバスを用いた実施形態の両方の実施形態では、キャッシュはＣＰＵのプロセッササブユニット間で共有される。
【００７３】
さらに、処理ユニット１１０は、共有メモリ１４０ａおよびメモリ１４０ｂと通信する。例えば、メモリ１４０ａおよびメモリ１４０ｂは、共有ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のメモリバンクを表し得る。２つのメモリバンクで示されているが、最も従来的なメモリチップは８個から１６個のメモリバンクを含んでいる。したがって、プロセッササブユニット１２０ａおよび１２０ｂは、共有メモリ１４０ａおよび１４０ｂを用いて、その後プロセッササブユニット１２０ａおよび１２０ｂによって動作されるデータを記憶することができる。ただし、この配置により、処理ユニット１１０のクロック速度がバスのデータ転送速度を上回る場合に、メモリ１４０ａおよび１４０ｂと処理ユニット１１０との間のバスがボトルネックとして作用することになる。このことは一般的に従来のプロセッサに当てはまることであり、その結果、クロック速度およびトランジスタの数に基づいて、上述の処理速度よりも処理速度の効率が悪くなる。
【００７４】
図２で示されるように、類似の欠陥がＧＰＵ内で持続している。ＧＰＵ２００は、１または複数のプロセッササブユニット（例えば、サブユニット２２０ａ、 ２２０ｂ、２２０ｃ、 ２２０ｄ、 ２２０e、 ２２０ｆ、 ２２０ｇ、 ２２０ｈ、 ２２０ｉ、 ２２０ｊ、 ２２０ｋ、 ２２０ｌ、 ２２０ｍ、 ２２０ｎ、 ２２０ｏ、および２２０ｐ）を含む処理ユニット２１０を備え得る。さらに、処理ユニット２１０は、オンチップキャッシュの１または複数のレベルおよび／またはレジスタファイルを含んでもよい。このようなキャッシュ要素は一般的に処理ユニット２１０と同じ半導体ダイで形成される。実際、図２の例では、キャッシュ２１０は処理ユニット２１０と同じダイで形成され、全てのプロセッササブユニット間で共有される一方、キャッシュ２３０ａ、２３０ｂ、２３０ｃ、および２３０ｄはそれぞれプロセッササブユニットのサブセットに形成され、そのプロセッササブユニットのサブユニットの専用となる。
【００７５】
さらに、処理ユニット２１０は共有メモリ２５０ａ、２５０ｂ、２５０ｃ、および２５０ｄと通信する。例えば、メモリ２５０ａ、２５０ｂ、２５０ｃ、および２５０ｄは、共有ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のメモリバンクを表し得る。したがって、処理ユニット２１０のプロセッササブユニットは共有メモリ２５０ａ、２５０ｂ、２５０ｃ、および２５０ｂを用いて、その後プロセッササブユニットによって動作されるデータを記憶することができる。ただし、この配置により、メモリ２５０ａ、２５０ｂ、２５０ｃ、および２５０ｂと処理ユニット２１０との間のバスが、上記のＣＰＵのボトルネックに似たボトルネックとして作用することになる。
【００７６】
［開示されるハードウェアチップの概要］
図３Ａは、例示的なハードウェアチップ３００を示す一実施形態の概略図である。ハードウェアチップ３００は、ＣＰＵ、ＧＰＵ、および他の従来のプロセッサの上記のボトルネックを軽減するように設計された分散型プロセッサを含み得る。分散型プロセッサは、単一基板に空間的に分散される複数のプロセッササブユニットを含み得る。さらに、前述のように、本開示の分散型プロセッサでは、対応するメモリバンクがさらに単一基板に空間的に分散される。いくつかの実施形態では、分散型プロセッサは命令のセットと関連付けることができ、分散型プロセッサのプロセッササブユニットの各々は、命令のセット内に含まれる１または複数のタスクの実行を担うことができる。
【００７７】
図３Ａで示されるように、ハードウェアチップ３００は、複数のプロセッササブユニット、例えば、論理および制御サブユニット３２０ａ、３２０ｂ、３２０ｃ、３２０ｄ、３２０e、３２０ｆ、３２０ｇ、および３２０ｈを含んでもよい。さらに図３Ａで示されるように、各プロセッササブユニットは、専用メモリインスタンスを含み得る。例えば、論理および制御サブユニット３２０ａは専用メモリインスタンス３３０ａに動作可能に接続され、論理および制御サブユニット３２０ｂは専用メモリインスタンス３３０ｂに動作可能に接続され、論理および制御サブユニット３２０ｃは専用メモリインスタンス３３０ｃに動作可能に接続され、論理および制御サブユニット３２０ｄは専用メモリインスタンス３３０ｄに動作可能に接続され、論理および制御サブユニット３２０ｅは専用メモリインスタンス３３０ｅに動作可能に接続され、論理および制御サブユニット３２０ｆは専用メモリインスタンス３３０ｆに動作可能に接続され、論理および制御サブユニット３２０ｇは専用メモリインスタンス３３０ｇに動作可能に接続され、論理および制御サブユニット３２０ｈは専用メモリインスタンス３３０ｈに動作可能に接続される。
【００７８】
図３Ａは各メモリインスタンスを単一メモリバンクとして示すが、ハードウェアチップ３００は、ハードウェアチップ３００上のプロセッササブユニットの専用メモリインスタンスとして２つ以上のメモリバンクを含み得る。さらに、図３Ａは、論理コンポーネントと、専用メモリバンクの制御と、の両方を含むものとして各プロセッササブユニットを示すが、ハードウェアチップ３００は、少なくとも部分的に論理コンポーネントから分離するメモリバンクのコントロールを利用することができる。さらに、図３Ａで示されるように、２つ以上のプロセッササブユニットおよびプロセッササブユニットに対応するメモリバンクは、例えば、処理グループ３１０ａ、３１０ｂ、３１０ｃ、および３１０ｄに分類することができる。「処理グループ」は、ハードウェアチップ３００が形成される基板上の空間的区別を表し得る。したがって、処理グループはさらに、グループ内のメモリバンクの制御、例えば、制御３４０ａ、３４０ｂ、３４０ｃ、および３４０ｄを含み得る。この代わりに、またはこれに加えて、「処理グループ」は、ハードウェアチップ３００で実行するコードをコンパイルするための論理グループを表し得る。したがって、ハードウェアチップ３００のコンパイラ（以下でさらに記載する）は、命令のセット全体をハードウェアチップ３００上の処理グループ間に分割することができる。
【００７９】
さらに、ホスト３５０は、命令、データ、およびその他の入力をハードウェアチップ３００に提供し、同ハードウェアチップからの出力を読み込むことができる。したがって、命令のセットは、単一ダイ、例えばハードウェアチップ３００のホストとして働くダイ上に全体的に実行することができる。実際、オフダイ通信は、ハードウェアチップ３００への命令のローディング、ハードウェアチップ３００に送信されるあらゆる入力、ハードウェアチップ３００から読み込まれるあらゆる出力を含み得るだけである。したがって、全ての計算および全てのメモリ動作はオンダイで（ハードウェアチップ３００上で）実行することができる。これは、ハードウェアチップ３００のプロセッササブユニットがハードウェアチップ３００の専用メモリバンクと通信するからである。
【００８０】
図３Ｂは、別の例示的なハードウェアチップ３００′を示す一実施形態の概略図である。図３Ｂで示されるアーキテクチャは、ハードウェアチップ３００の代替として示されるが、図３Ａで示されるアーキテクチャと少なくとも部分的に組み合わせることができる。
【００８１】
図３Ｂで示されるように、ハードウェアチップ３００′は、複数のプロセッササブユニット、例えば、プロセッササブユニット３５０ａ、３５０ｂ、３５０ｃ、および３５０ｄを含み得る。さらに図３Ｂで示されるように、各プロセッササブユニットは、複数の専用メモリインスタンスを含み得る。例えば、プロセッササブユニット３５０ａは専用メモリインスタンス３３０ａおよび３３０ｂに動作可能に接続され、プロセッササブユニット３５０ｂは専用メモリインスタンス３３０ｃおよび３３０ｄに動作可能に接続され、プロセッササブユニット３５０ｃは専用メモリインスタンス３３０ｅおよび３３０ｆに動作可能に接続され、プロセッササブユニット３５０ｄは専用メモリインスタンス３３０ｇおよび３３０ｈに動作可能に接続される。さらに、図３Ｂで示されるように、プロセッササブユニットおよびプロセッササブユニットに対応するメモリバンクは、例えば処理グループ３１０ａ、３１０ｂ、３１０ｃ、および３１０ｄに分類することができる。前述のように、「処理グループ」は、ハードウェアチップ３００′が形成される基板上の空間的区別、および／またはハードウェアチップ３００′で実行するコードをコンパイルするための論理グループ、を表し得る。
【００８２】
さらに図３Ｂで示されるように、プロセッササブユニットはバスを介して互いに通信することができる。例えば、図３Ｂで示されるように、プロセッササブユニット３５０ａは、バス３６０ａを介してプロセッササブユニット３５０ｂと、バス３６０ｃを介してプロセッササブユニット３５０ｃと、バス３６０ｆを介してプロセッササブユニット３５０ｄと、通信することができる。同様に、プロセッササブユニット３５０ｂは、（上記のように）バス３６０ａを介してプロセッササブユニット３５０ａと、バス３６０ｅを介してプロセッササブユニット３５０ｃと、バス３６０ｄを介してプロセッササブユニット３５０ｄと、通信することができる。さらに、プロセッササブユニット３５０ｃは、（上記のように）バス３６０ｃを介してプロセッササブユニット３５０ａと、（上記のように）バス３６０ｅを介してプロセッササブユニット３５０ｂと、バス３６０ｂを介してプロセッササブユニット３５０ｄと、通信することができる。したがって、プロセッササブユニット３５０ｄは、（上記のように）バス３６０ｆを介してプロセッササブユニット３５０ａと、（上記のように）バス３６０ｄを介してプロセッササブユニット３５０ｂと、（上記のように）バス３６０ｂを介してプロセッササブユニット３５０ｃと、通信することができる。当業者は、図３Ｂで示されるよりも少ないバスを利用することができることを理解するであろう。例えば、バス３６０ｅを無くすことによって、結果プロセッササブユニット３５０ｂおよび３５０ｃ間の通信はプロセッササブユニット３５０ａおよび／または３５０ｄを経由して伝えることができる。同様に、バス３６０ｆを無くすことによって、結果プロセッササブユニット３５０ａおよびプロセッササブユニット３５０ｄ間の通信はプロセッササブユニット３５０ｂまたは３５０ｃを経由して伝えることができる。
【００８３】
さらに、当業者は、図３Ａおよび図３Ｂで示されるアーキテクチャとは異なるアーキテクチャを利用することができることを理解するであろう。例えば、各々が単一のプロセッササブユニットおよび単一のメモリインスタンスを備える処理グループのアレイを基板上に配置することができる。プロセッササブユニットは、対応する専用メモリバンクのコントローラの一部、対応する専用メモリバンクのメモリマットのコントローラの一部、またはその他同種のものを追加的または代替的に形成することができる。
【００８４】
上記のアーキテクチャを鑑みると、ハードウェアチップ３００および３００′は、従来のアーキテクチャと比べてメモリ負荷の高いタスクの効率性を著しく高めることができる。例えば、データベース演算および（ニューラルネットワークなどの）人工知能アルゴリズムは、従来のアーキテクチャが効率性でハードウェアチップ３００および３００′に劣るメモリ負荷の高いタスクの例である。したがって、ハードウェアチップ３００および３００′は、データベースアクセラレータプロセッサおよび／または人工知能アクセラレータプロセッサと呼ばれ得る。
【００８５】
［開示されるハードウェアチップの構成］
上記のハードウェアチップのアーキテクチャはコードを実行するように構成することができる。例えば、各プロセッササブユニットは、ハードウェアチップ内の他のプロセッササブユニットとは別の（命令のセットを定義する）コードを個別に実行することができる。したがって、マルチスレッディングを管理するオペレーティングシステムに依存するのではなく、または（並列処理ではなく同時実行する）マルチタスキングを利用するのではなく、本開示のハードウェアチップによりプロセッササブユニットは完全並列演算をすることが可能となり得る。
【００８６】
上記の完全並列の実装に加えて、各プロセッササブユニットに割り当てられる命令の少なくともいくつかがオーバーラップし得る。例えば、分散型プロセッサ上の複数のプロセッササブユニットは、例えば、オペレーティングシステムまたはその他の管理ソフトウェアの実装としてオーバーラップ命令を実行することができる一方、オペレーティングシステムまたはその他の管理ソフトウェアのコンテキスト内で並列タスクを実行するために非オーバーラップ命令を実行することができる。
【００８７】
図４は、汎用コマンドを処理グループ４１０で実行する例示的なプロセス４００を示す。例えば、処理グループ４１０は、本開示のハードウェアチップ、例えば、ハードウェアチップ３００、ハードウェアチップ３００′の一部分、またはその他同種のものを含み得る。
【００８８】
図４で示されるように、コマンドは、専用メモリインスタンス４２０と組み合わされるプロセッササブユニット４３０に送信することができる。外部ホスト（例えば、ホスト３５０）は実行するためにコマンドを処理グループ４１０に送信することができる。あるいは、ホスト３５０は記憶するためのコマンドを含む命令のセットをメモリインスタンス４２０内に送信することで、結果、プロセッササブユニット４３０がメモリインスタンス４２０からコマンドを引き出し、引き出したコマンドを実行することができる。したがって、コマンドは、受信したコマンドを実行するように構成可能である汎用処理要素である処理要素４４０によって実行されてもよい。さらに、処理グループ４１０は、メモリインスタンス４２０の制御４６０を含み得る。図４で示されるように、制御４６０は、受信したコマンドを実行する際に処理要素４４０が必要とするメモリインスタンス４２０に対してあらゆる読み込みおよび／または書き込みを実行できる。コマンドを実行した後、処理グループ４１０は、例えば、外部ホストまたは同ハードウェアチップ上の異なる処理グループにコマンドの結果を出力することができる。
【００８９】
いくつかの実施形態では、図４で示されるように、プロセッササブユニット４３０はさらに、アドレスジェネレータ４５０を含み得る。「アドレスジェネレータ」は、読み込みおよび書き込みを実行するために１または複数のメモリバンク内のアドレスを決定するように構成される複数の処理要素を含み得て、さらに、決定されたアドレスに配置されるデータを演算すること（例えば、加算、減算、乗算、またはその他同種のもの）ができる。例えば、アドレスジェネレータ４５０は、メモリにあらゆる読み込みまたは書き込みを行うアドレスを決定することができる。一例では、アドレスジェネレータ４５０は、読み込み値がもはや不要となった場合にコマンドに基づいて決定される新しい値を読み込み値に上書きすることによって効率性を高めることができる。この代わりに、またはこれに加えて、アドレスジェネレータ４５０は、コマンドの実行結果を記憶するために利用可能なアドレスを選択することができる。これにより、外部ホストにとってさらに都合が良いその後のクロックサイクル時に、読み込んだ結果をスケジューリングすることが可能となり得る。別の例では、アドレスジェネレータ４５０は、ベクトルまたは行列の積和計算などの複数サイクル計算中に読み込みおよび書き込みを行うアドレスを決定することができる。したがって、アドレスジェネレータ４５０は、プロセッササブユニット４３０がメモリアドレスを記憶する必要なく継続して処理できるように、データを読み込み、複数サイクル計算の中間結果を書き込むこれらのメモリアドレスを管理または計算することができる。
【００９０】
図５は、専用コマンドを処理グループ５１０で実行する例示的なプロセス５００を示す。例えば、処理グループ５１０は、本開示のハードウェアチップ、例えば、ハードウェアチップ３００、ハードウェアチップ３００′の一部分、またはその他同種のものを含み得る。
【００９１】
図５で示されるように、専用コマンド（例えば、乗累算コマンド）は、専用メモリインスタンス５２０と組み合わされる処理要素５３０に送信することができる。外部ホスト（例えば、ホスト３５０）は実行するためにコマンドを処理要素５３０に送信することができる。したがって、コマンドは、処理要素５３０、すなわち（受信したコマンドを含む）特定のコマンドを実行するように構成可能である専用処理要素によってホストからの所定の信号で実行することができる。あるいは、処理要素５３０は、実行するためにメモリインスタンス５２０からコマンドを引き出すことができる。このように、図５の例では、処理要素５３０は、外部ホストから受信され、メモリインスタンス５２０から引き出される乗累算（ＭＡＣ）コマンドを実行するように構成される乗累算（ＭＡＣ）回路である。コマンドを実行した後、処理グループ５１０は、例えば、外部ホストまたは同ハードウェアチップ上の異なる処理グループにコマンドの結果を出力することができる。単一のコマンドおよび単一の結果で示されるが、複数のコマンドを受信または引き出し、および実行することができ、複数の結果を出力前に処理グループ５１０に組み合わせることができる。
【００９２】
図５でＭＡＣ回路として示されるが、追加的または代替的な専用回路を処理グループ５１０内に含めることができる。例えば、ＭＡＸ読み込みコマンド（ベクトルの最大値を戻す）と、ＭＡＸ―０読み込みコマンド（整流器とも呼ばれ、全ベクトルを戻すが、さらにＭＡＸを０で戻す共通関数）と、またはその他同種のものと、を実装することができる。
【００９３】
別々に示されるが、図４の汎用処理グループ４１０および図５の専用処理グループ５１０は組み合わせることができる。例えば、汎用プロセッササブユニットを１または複数の専用プロセッササブユニットに連結してプロセッササブユニットを形成することができる。したがって、汎用プロセッササブユニットは、１または複数の専用プロセッササブユニットによって実行可能ではない全ての命令用に利用することができる。
【００９４】
ニューラルネットワークの実装およびその他のメモリ負荷の高いタスクは専用論理回路で処理できることが当業者には理解されよう。例えば、データベースクエリ、パケットインスペクション、ストリング比較、およびその他の機能は、本明細書で記載されるハードウェアチップによって実行されれば効率性を高めることができる。
【００９５】
分散型処理用のメモリベースアーキテクチャ  本開示と一致するハードウェアチップ上で、専用バスは、ハードウェアチップ上のプロセッササブユニット間、および／またはプロセッササブユニットとプロセッササブユニットに対応する専用メモリバンクとの間でデータを転送することができる。専用バスを使用することによりアービトレーションコストを削減できる。これは、競合要求が起こり得なくなるため、またはハードウェアではなくソフトウェアを使用して競合要求を容易に回避するためである。
【００９６】
図６は、処理グループ６００の概略図を図式的に示す。処理グループ６００は、ハードウェアチップ、例えば、ハードウェアチップ３００、ハードウェアチップ３００′、またはその他同種のものに使用されてもよい。プロセッササブユニット６１０は、バス６３０を介してメモリ６２０に接続することができる。メモリ６２０は、プロセッササブユニット６１０が実行するデータおよびコードを記憶するランダムアクセスメモリ（ＲＡＭ）要素を含んでもよい。いくつかの実施形態では、メモリ６２０は、Ｎウェイ（Ｎ−ｗａｙ）メモリであってもよい（Ｎは、インタリーブドメモリ６２０内のセグメントの数を示す１以上の数である）。プロセッササブユニット６１０はバス６３０を介してプロセッササブユニット６１０専用のメモリ６２０に連結されるため、Ｎは実効性能を損なうことなく比較的少数のままに維持できる。これは、Ｎの数が少数になると概して実効性能がかなり落ちることにつながり、Ｎの数が多くなると概して大面積となり電力損失がもたらされる従来のマルチウェイレジスタファイルまたはマルチウェイキャッシュの改善を示す。
【００９７】
メモリ６２０のサイズ、ウェイの数、およびバス６３０の幅は、例えばタスクまたは複数のタスク内に含まれるデータサイズに従って、処理グループ６００を使用してシステムのタスクおよびアプリケーション実装の要件を満たすように調節することができる。メモリ要素６２０は、当該技術分野で知られる１または複数のメモリタイプ、例えば、揮発性メモリ（ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、相変化ＲＡＭ（ＰＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）、抵抗ＲＡＭ（ＲｅＲＡＭ）、またはその他同種のもの）、または不揮発性メモリ（フラッシュメモリまたはＲＯＭ）を含み得る。いくつかの実施形態によると、メモリ要素６２０部分は第１のメモリタイプを含んでもよく、別の部分は別のメモリタイプを含んでもよい。例えば、メモリ要素６２０のコード領域はＲＯＭ要素を含んでもよく、メモリ要素６２０のデータ領域はＤＲＡＭ要素を含んでもよい。このような区分の別の例は、ニューラルネットワークのウェイトをＦｌａｓｈ内に記憶し、計算データをＤＲＡＭ内に記憶する。
【００９８】
プロセッササブユニット６１０は、プロセッサを含み得る処理要素６４０を備えてもよい。本プロセッサはパイプライン化してもよいし、またはパイプライン化しなくてもよく、当業者によって理解されるように、カスタマイズされた縮小命令セットコンピューティング（ＲＩＳＣ）要素またはその他の処理スキームが、当技術分野にて周知であるあらゆる市販の集積回路（ＩＣ）（例えばＡＲＭ，ＡＲＣ，ＲＩＳＣ−Ｖなど）上に実装される。処理要素６４０は、いくつかの実施形態において、算術論理演算ユニット（ＡＬＵ）を含むコントローラ、またはその他のコントローラを備え得る。
【００９９】
いくつかの実施形態によると、受信コードまたは記憶コードを実行する処理要素６４０は、汎用処理要素を含んでもよいため、フレキシブルになり得、様々な処理動作を実行することができる。非専用回路は一般的に、特定演算の実行時に消費される電力と比較すると、特定演算専用回路よりも電力を消費する。したがって、特殊で複雑な算術計算を実行する場合、処理要素６４０は、専用ハードウェアよりも多くの電力を消費し、効果的に実行しない場合がある。したがって、いくつかの実施形態によると、処理要素６４０のコントローラは、特定演算（例えば、加算演算または「移動」演算）を実行するように設計することができる。
【０１００】
一例では、特定演算は、１または複数のアクセラレータ６５０によって実行することができる。各アクセラレータは、（乗算、浮動小数点ベクトル演算、またはその他同種のものなど）特殊計算の実行を専門に、およびプログラムできる。アクセラレータを使用することによって、プロセッササブユニット毎の１計算あたりの平均電力消費を削減でき、その後計算スループットが向上する。このシステムが実装する（例えば、ニューラルネットワークを実行する、データベースクエリ、またはその他同種のものを実行する）ように設計されるアプリケーションに従って、アクセラレータ６５０を選ぶことができる。アクセラレータ６５０は処理要素６４０によって構成することができ、電力消費を削減し、計算および演算を加速するために処理要素６４０と同時に動作することができる。追加または代替として、アクセラレータを使用してメモリと、スマートＤＭＡ（ダイレクトメモリアクセス）の周辺装置などの処理グループ６００のマルチプレクサ（ＭＵＸ）／デマルチプレクサ（ＤＥＭＵＸ）／入力ポート／出力ポート（例えば、マルチプレクサ（ＭＵＸ）６５０およびデマルチプレクサ（ＤＥＭＵＸ）６６０）との間でデータを転送することができる。
【０１０１】
アクセラレータ６５０は、様々な機能を実行するように構成することができる。例えば、１つのアクセラレータは、ニューラルネットワークで頻繁に使用される１６ビットの浮動小数点計算または８ビットの整数計算を実行するように構成することができる。アクセラレータ機能の別の例は、ニューラルネットワークのトレーニング段階中に頻繁に使用される３２ビットの浮動小数点の計算である。アクセラレータ機能のさらに別の例は、データベース内で使用されるものなど、クエリ処理である。いくつかの実施形態では、アクセラレータ６５０は、これらの機能を実行する専用処理要素を含み得て、および／またはアクセラレータ６５０は、メモリ要素６２０に記憶される構成データに従って、構成データが修正できるように構成することができる。
【０１０２】
アクセラレータ６５０は、追加または代替として、メモリ６２０に／メモリ６２０から、またはその他のアクセラレータに／その他のアクセラレータからデータを移動させる時間を決める、および／またはデータ入力／データ出力の時間を決めるメモリ移動の構成可能なスクリプトリストを実装することができる。したがって、さらに以下で詳述するように、処理グループ６００を使用したハードウェアチップ内の全てのデータ移動は、ハードウェア同期ではなくソフトウェア同期を利用してもよい。例えば、１つの処理グループ（例えば、グループ６００）内のアクセラレータは、入力からのデータを１０サイクル毎にアクセラレータに転送し、次いで次のサイクルでデータを出力することができる。こうすることによって、データが処理グループのメモリから別のメモリに流れる。
【０１０３】
図６でさらに示されるように、いくつかの実施形態では、処理グループ６００はさらに、入力ポートに接続される少なくとも１つの入力マルチプレクサ（ＭＵＸ）６６０と、出力ポートに接続される少なくとも１つの出力デマルチプレクサＤＥＭＵＸ６７０と、を含んでもよい。これらのＭＵＸ／ＤＥＭＵＸは、処理要素６４０からの、および／またはアクセラレータ６５０のうち１つのアクセラレータからの制御信号（図示せず）によって制御でき、処理要素６４０によって実行される最新の命令および／またはアクセラレータ６５０のうち１つのアクセラレータによって実行される演算に従ってＭＵＸ／ＤＥＭＵＸを決定することができる。いくつかのシナリオでは、入力ポートから出力ポートにデータを転送するように（コードメモリからの予め定義された命令に従って）処理グループ６００に要求することができる。したがって、１または複数の入力ＭＵＸ（例えば、ＭＵＸ６６０）は、１または複数のバスを介して出力ＤＥＭＵＸ（例えば、ＤＥＭＵＸ６７０）に直接接続することができ、さらにＤＥＭＵＸ／ＭＵＸの各々は処理要素６４０およびアクセラレータ６５０に接続される。
【０１０４】
図６の処理グループ６００は、例えば図７Ａで示されるように、分散型プロセッサを形成するように配列することができる。処理グループを基板７１０上に配置してアレイを形成することができる。いくつかの実施形態では、基板７１０はシリコンなどの半導体基板を含んでもよい。この代わりに、またはこれに加えて、基板７１０は、フレキシブル回路基板などの回路基板を含んでもよい。
【０１０５】
図７Ａで示されるように、基板７１０は、その基板上に配置される処理グループ６００などの複数の処理グループを含んでもよい。したがって、基板７１０は、バンク７２０ａ、７２０ｂ、７２０ｃ、７２０ｄ、７２０ｅ、７２０ｆ、７２０ｇ、および７２０ｈなどの複数のバンクを含むメモリアレイを備える。さらに、基板７１０は、サブユニット７３０ａ、７３０ｂ、７３０ｃ、７３０ｄ、７３０ｅ、７３０ｆ、７３０ｇ、および７３０ｈなどの複数のプロセッササブユニットを含み得る処理アレイを備える。
【０１０６】
さらに、前述のように、各処理グループは、プロセッササブユニットと、プロセッササブユニット専用の１または複数の対応する専用メモリバンクと、含み得る。したがって、図７Ａで示されるように、各サブユニットは、対応する専用メモリバンクと関連付けられる。すなわち、プロセッササブユニット７３０ａはメモリバンク７２０ａと関連付けられ、プロセッササブユニット７３０ｂはメモリバンク７２０ｂと関連付けられ、プロセッササブユニット７３０ｃはメモリバンク７２０ｃと関連付けられ、プロセッササブユニット７３０ｄはメモリバンク７２０ｄと関連付けられ、プロセッササブユニット７３０ｅはメモリバンク７２０ｅと関連付けられ、プロセッササブユニット７３０ｆはメモリバンク７２０ｆと関連付けられ、プロセッササブユニット７３０ｇはメモリバンク７２０ｇと関連付けられ、プロセッササブユニット７３０ｈはメモリバンク７２０ｈと関連付けられる。
【０１０７】
各プロセッササブユニットがプロセッササブユニットに対応する専用メモリバンクと通信できるようにするために、基板７１０は、プロセッササブユニットの１つをプロセッササブユニットに対応する専用メモリバンクに接続する第１の複数のバスを含み得る。したがって、バス７４０ａはプロセッササブユニット７３０ａをメモリバンク７２０ａに接続し、バス７４０ｂはプロセッササブユニット７３０ｂをメモリバンク７２０ｂに接続し、バス７４０ｃはプロセッササブユニット７３０ｃをメモリバンク７２０ｃに接続し、バス７４０ｄはプロセッササブユニット７３０ｄをメモリバンク７２０ｄに接続し、バス７４０ｅはプロセッササブユニット７３０ｅをメモリバンク７２０ｅに接続し、バス７４０ｆはプロセッササブユニット７３０ｆをメモリバンク７２０ｆに接続し、バス７４０ｇはプロセッササブユニット７３０ｇをメモリバンク７２０ｇに接続し、バス７４０ｈはプロセッササブユニット７３０ｈをメモリバンク７２０ｈに接続する。さらに、各プロセッササブユニットがその他のプロセッササブユニットと通信できるようにするために、基板７１０は、プロセッササブユニットの１つを別のプロセッササブユニットに接続する第２の複数のバスを含み得る。図７Ａの例では、バス７５０ａはプロセッササブユニット７３０ａをプロセッササブユニット７５０eに接続し、バス７５０ｂはプロセッササブユニット７３０ａをプロセッササブユニット７５０ｂに接続し、バス７５０ｃはプロセッササブユニット７３０ｂをプロセッササブユニット７５０ｆに接続し、バス７５０ｄはプロセッササブユニット７３０ｂをプロセッササブユニット７５０ｃに接続し、バス７５０ｅはプロセッササブユニット７３０ｃをプロセッササブユニット７５０ｇに接続し、バス７５０ｆはプロセッササブユニット７３０ｃをプロセッササブユニット７５０ｄに接続し、バス７５０ｇはプロセッササブユニット７３０ｄをプロセッササブユニット７５０ｈに接続し、バス７５０ｈはプロセッササブユニット７３０ｈをプロセッササブユニット７５０ｇに接続し、バス７５０ｉはプロセッササブユニット７３０ｇをプロセッササブユニット７５０ｇに接続し、バス７５０ｊはプロセッササブユニット７３０ｆをプロセッササブユニット７５０ｅに接続する。
【０１０８】
したがって、図７Ａで示される例示的な配置では、複数の論理プロセッササブユニットが少なくとも１つの行および少なくとも１つの列内に配置される。第２の複数のバスが、同じ行における少なくとも１つの隣接するプロセッササブユニットおよび同じ列における少なくとも１つの隣接するプロセッササブユニットに各プロセッササブユニットを接続する。図７Ａは「タイル部分接続」と呼んでもよい。
【０１０９】
図７Ａで示される配置を修正して「タイル全域接続」を形成してもよい。タイル全域接続は、対角線のプロセッササブユニットを接続する追加のバスを含む。例えば、第２の複数のバスは、プロセッササブユニット７３０ａとプロセッササブユニット７３０ｆ間に、プロセッササブユニット７３０ｂとプロセッササブユニット７３０ｅ間に、プロセッササブユニット７３０ｂとプロセッササブユニット７３０ｇ間に、プロセッササブユニット７３０ｃとプロセッササブユニット７３０ｆ間に、プロセッササブユニット７３０ｃとプロセッササブユニット７３０ｈ間に、プロセッササブユニット７３０ｄとプロセッササブユニット７３０ｇ間に、追加のバスを含み得る。
【０１１０】
タイル全域接続は、近傍のプロセッササブユニット内に記憶されるデータおよび結果を使用するコンボリューション計算用に利用することができる。例えば、画像のコンボリューション処理時に、各プロセッササブユニットは画像のタイル（画素または画素群など）を受信することができる。コンボリューション結果を計算するために、各プロセッササブユニットは、隣接する８つ全てのプロセッササブユニットからデータを取得することができ、プロセッササブユニットの各々は対応するタイルを受信する。タイル部分接続では、対角線上の隣接するプロセッササブユニットからのデータを、プロセッササブユニットに接続される他の隣接するプロセッササブユニットを介して渡すことができる。したがって、チップ上の分散型プロセッサは、人工知能アクセラレータプロセッサであってもよい。
【０１１１】
コンボリューション計算の具体例では、Ｎ×Ｍ画像を複数のプロセッササブユニット全体に分割することができる。各プロセッササブユニットは、プロセッササブユニットの対応するタイル上のＡ×Ｂフィルタでコンボリューションを実行することができる。タイル間の境界上の１または複数の画素にフィルタリングを実行するために、各プロセッササブユニットは、同境界上の画素を含んだタイルを有する隣接するプロセッササブユニットからデータを要求できる。したがって、各プロセッササブユニット用に生成されるコードは、隣接するサブユニットからデータが必要となる場合にいつでもサブユニットがコンボリューションを計算する、および第２の複数のバスのうち１つのバスからプルするように構成される。必要とされるデータ転送の適切なタイミングを確保するために、データを第２の複数のバスに出力するための対応するコマンドがサブユニットに提供される。
【０１１２】
図７Ａのタイル部分接続を変更してＮタイル部分接続にしてもよい。この変更では、第２の複数のバスはさらに、図７Ａのバスが実行する４つの方向（すなわち、上、下、左、右）で各プロセッササブユニットをプロセッササブユニットの閾値距離内（例えば、ｎプロセッササブユニット内）のプロセッササブユニットに接続することができる。同様の変更をタイル全域接続に行う（結果Ｎタイル全域接続になる）ことで、結果、第２の複数のバスはさらに、２つの対角線方向に加えて、図７Ａのバスが実行する４つの方向で各プロセッササブユニットをプロセッササブユニットの閾値距離内（例えば、ｎプロセッササブユニット内）のプロセッササブユニットに接続することができる。
【０１１３】
その他の配置も可能である。例えば、図７Ｂで示される配置では、バス７５０ａはプロセッササブユニット７３０ａをプロセッササブユニット７３０ｄに接続し、バス７５０ｂはプロセッササブユニット７３０ａをプロセッササブユニット７３０ｂに接続し、バス７５０ｃはプロセッササブユニット７３０ｂをプロセッササブユニット７３０ｃに接続し、バス７５０ｄはプロセッササブユニット７３０ｃをプロセッササブユニット７３０ｄに接続する。したがって、図７Ｂで示される例示的な配置では、複数のプロセッササブユニットはスター型パターンで配置される。第２の複数のバスが各プロセッササブユニットを少なくとも１つの隣接するプロセッササブユニットにスター型パターンで接続する。
【０１１４】
さらなる配置（図示せず）も可能である。例えば、隣接接続配置を利用することによって、複数のプロセッササブユニットを１または複数のラインで配置することができる（例えば、図７Ａで示される配置に類似する）。隣接接続配置では、第２の複数のバスが各プロセッササブユニットを同ラインの左側のプロセッササブユニットに、同ラインの右側のプロセッササブユニットに、同ラインの左側および右側の両方のプロセッササブユニットに接続する。
【０１１５】
別の例では、Ｎライン接続配置を利用することができる。Ｎライン接続配置では、第２の複数のバスが、各プロセッササブユニットをプロセッササブユニットの閾値距離内（例えば、ｎプロセッササブユニット内）のプロセッササブユニットに接続する。Ｎライン接続配置は、ラインアレイ（上記）、矩形アレイ（図７Ａで図示）、楕円アレイ（図７Ｂで図示）、またはその他のあらゆる幾何学的アレイで利用することができる。
【０１１６】
さらに別の例では、Ｎログ接続配置を利用することができる。Ｎログ接続配置では、第２の複数のバスが、各プロセッササブユニットをプロセッササブユニットの２つの距離の閾値パワー内（例えば、２ｎプロセッササブユニット内）のプロセッササブユニットに接続する。Ｎログ接続配置は、ラインアレイ（上記）、矩形アレイ（図７Ａで図示）、楕円アレイ（図７Ｂで図示）、またはその他のあらゆる幾何学的アレイで利用することができる。
【０１１７】
上記のあらゆる接続方式は、同じハードウェアチップ用に組み合わせることができる。例えば、ある領域ではタイル全域接続を利用することができ、別の領域ではタイル部分接続を利用する。別の例では、ある領域ではＮライン接続配置を利用することができ、別の領域ではＮタイル全域接続を利用する。
【０１１８】
メモリチップのプロセッササブユニット間の専用バスの追加として、または代替として、１または複数の共有バスを利用して分散型プロセッサの全てのプロセッササブユニット（またはそのサブセット）を相互接続できる。さらに、以下で詳述するように、プロセッササブユニットによって実行されるコードを使用して、共有バス上でのデータ転送の時間を調節することによって共有バス上での衝突を回避できる。共有バスの追加として、または代替として、設定可能なバスを使用してプロセッササブユニットを動的に接続し、分離したバスに接続されるプロセッサユニットのグループを形成することができる。例えば、設定可能なバスは、データ転送を選択されたプロセッササブユニットに導くためにプロセッササブユニットによって制御され得るトランジスタまたはその他の機構を含んでもよい。
【０１１９】
図７Ａおよび図７Ｂの両方では、処理アレイの複数のプロセッササブユニットがメモリアレイの複数の個別のメモリバンク間に空間的に分散される。他の代替実施形態（図示せず）では、基板の１または複数の領域内に複数のプロセッササブユニットを集めてグループにすることができ、基板の１または複数の他の領域内に複数のメモリバンクを集めてグループにすることができる。いくつかの実施形態では、空間的分散およびグループ分類の組み合わせを利用することができる（図示せず）。例えば、基板のある領域はプロセッササブユニットのグループを含んでもよく、基板の別の領域はメモリバンクのグループを含んでもよく、基板のさらに別の領域はメモリバンク間に分散される処理アレイを含んでもよい。
【０１２０】
当業者は、処理グループ６００を基板に配置することは、排他的な実施形態ではないことを理解するであろう。例えば、各プロセッササブユニットは少なくとも２つの専用メモリバンクと関連付けることができる。したがって、図３Ｂの処理グループ３１０ａ、３１０ｂ、３１０ｃ、および３１０ｄは、処理グループ６００の代わりに、または処理グループ６００と組み合わせて利用して、処理アレイおよびメモリアレイを形成することができる。例えば３および４以上の専用メモリバンク（図示せず）を含む他の処理グループを利用することができる。
【０１２１】
複数のプロセッササブユニットの各々は、複数のプロセッササブユニット内に含まれる他のプロセッササブユニットに対して、独立した特定のアプリケーションと関連付けられるソフトウェアコードを実行するように構成してもよい。例えば、以下で説明するように、複数のサブシリーズ命令をマシンコードとして分類し、実行するために各プロセッササブユニットに与えることができる。
【０１２２】
いくつかの実施形態では、各専用メモリバンクは少なくとも１つのダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含む。あるいは、メモリバンクは、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＤＲＡＭ、Ｆｌａｓｈ、またはその他同種のものなどのメモリタイプの組み合わせを含んでもよい。
【０１２３】
従来のプロセッサでは、プロセッササブユニット間のデータ共有は、共有メモリで通常実行される。共有メモリは一般的にチップ領域の大部分を必要とし、および／または追加のハードウェア（アービタなど）によって管理されるバスを実行してきた。上記のように、バスがボトルネックにつながる。さらに、チップの外部にあってもよい共有メモリは一般的に、正確かつ最新のデータをプロセッササブユニットに提供するためのキャッシュコヒーレンス機構、およびより複雑なキャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、および共有ＤＲＡＭ）を含む。以下で詳述するように、図７Ａおよび図７Ｂで示される専用バスは、ハードウェア管理（アービタなど）がないハードウェアチップを可能にする。さらに、図７Ａおよび図７Ｂで示される専用バスを使用することによって、複雑なキャッシュ層および複雑なキャッシュコヒーレンス機構を無くすことができる。
【０１２４】
代わりに、他のプロセッササブユニットによって計算される、および／または他のプロセッササブユニット専用のメモリバンク内に記憶されるデータに各プロセッササブユニットがアクセスできるようにするために、各プロセッササブユニットによって個別に実行されるコードを使用してタイミングが動的に実行されるバスを提供する。これにより、従来使用していたバス管理ハードウェアのほぼ全てを無くすことが可能となる  さらに、複雑なキャッシュ機構が、これらのバスを利用した直接転送に取って代わられ、結果メモリの読み込みおよび書き込み時の待ち時間がより短くなる。
【０１２５】
［メモリベース処理アレイ］
図７Ａおよび図７Ｂで示されるように、本開示のメモリチップは独立して動作することができる。あるいは、本開示のメモリチップは、メモリデバイス（例えば、１または複数のＤＲＡＭバンク）、システムオンチップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはその他の処理チップおよび／またはメモリチップなど、１または複数の追加の集積回路と動作可能に接続することができる。こうした実施形態では、アーキテクチャによって実行される一連の命令におけるタスクは（例えば下記のコンパイラによって）、メモリチップのプロセッササブユニットと、追加の集積回路のあらゆるプロセッササブユニットとの間に分割することができる。例えば、その他の集積回路は、命令および／またはデータをメモリチップに入力し、メモリチップから出力を受信するホスト（例えば、図３Ａのホスト３５０）を含んでもよい。
【０１２６】
本開示のメモリチップを１または複数の追加の集積回路と相互接続するために、メモリチップは、電子素子技術連合評議会（ＪＥＤＥＣ）規格に準拠したメモリインタフェースまたはその変種のメモリインタフェースなどのメモリインタフェースを含んでもよい。次いで１または複数の追加の集積回路はメモリインタフェースに接続することができる。したがって、１または複数の追加の集積回路が本開示の複数のメモリチップに接続される場合、データは１または複数の追加の集積回路を介してメモリチップ間で共有することができる。この代わりに、またはこれに加えて、１または複数の追加の集積回路は本開示のメモリチップ上のバスに接続するバスを含み得るため、結果、１または複数の追加の集積回路は本開示のメモリチップと同時にコードを実行することができる。このような実施形態では、１または複数の追加の集積回路が本開示のメモリチップとは異なる基板上にある場合でも、１または複数の追加の集積回路はさらに分散処理を支援する。
【０１２７】
さらに、本開示のメモリチップは分散型プロセッサのアレイを形成するために配置してもよい。例えば、１または複数のバスは、図７Ｃで示されるように、メモリチップ７７０ａを追加のメモリチップ７７０ｂに接続できる  図７Ｃの例では、メモリチップ７７０ａは、各プロセッササブユニット専用の１または複数の対応するメモリバンクを備えるプロセッササブユニットを含む。例えば、プロセッササブユニット７３０ａはメモリバンク７２０ａと関連付けられ、プロセッササブユニット７３０ｂはメモリバンク７２０ｂと関連付けられ、プロセッササブユニット７３０ｅはメモリバンク７２０ｃと関連付けられ、プロセッササブユニット７３０ｆはメモリバンク７２０ｄと関連付けられる。バスは各プロセッササブユニットをプロセッササブユニットに対応するメモリバンクに接続する。したがって、バス７４０ａはプロセッササブユニット７３０ａをメモリバンク７２０ａに接続し、バス７４０ｂはプロセッササブユニット７３０ｂをメモリバンク７２０ｂに接続し、バス７４０ｃはプロセッササブユニット７３０ｅをメモリバンク７２０ｃに接続し、バス７４０ｄはプロセッササブユニット７３０ｆをメモリバンク７２０ｄに接続する。さらに、バス７５０ａはプロセッササブユニット７３０ａをプロセッササブユニット７５０ｅに接続し、バス７５０ｂはプロセッササブユニット７３０ａをプロセッササブユニット７５０ｂに接続し、バス７５０ｃはプロセッササブユニット７３０ｂをプロセッササブユニット７５０ｆに接続し、バス７５０ｄはプロセッササブユニット７３０ｅをプロセッササブユニット７５０ｆに接続する。例えば、上記のように、メモリチップ７７０ａのその他の配置を利用してもよい。
【０１２８】
同様に、メモリチップ７７０ｂは、各プロセッササブユニット専用の１または複数の対応するメモリバンクを備えるプロセッササブユニットを含む。例えば、プロセッササブユニット７３０ｃはメモリバンク７２０ｅと関連付けられ、プロセッササブユニット７３０ｄはメモリバンク７２０ｆと関連付けられ、プロセッササブユニット７３０ｇはメモリバンク７２０ｇと関連付けられ、プロセッササブユニット７３０ｈはメモリバンク７２０ｈと関連付けられる。バスは各プロセッササブユニットをプロセッササブユニットに対応するメモリバンクに接続する。したがって、バス７４０ｅはプロセッササブユニット７３０ｃをメモリバンク７２０ｅに接続し、バス７４０ｆはプロセッササブユニット７３０ｄをメモリバンク７２０ｆに接続し、バス７４０ｇはプロセッササブユニット７３０ｇをメモリバンク７２０ｇに接続し、バス７４０ｈはプロセッササブユニット７３０ｈをメモリバンク７２０ｈに接続する。さらに、バス７５０ｇはプロセッササブユニット７３０ｃをプロセッササブユニット７５０ｇに接続し、バス７５０ｈはプロセッササブユニット７３０ｄをプロセッササブユニット７５０ｈに接続し、バス７５０ｉはプロセッササブユニット７３０ｃをプロセッササブユニット７５０ｄに接続し、バス７５０ｊはプロセッササブユニット７３０ｇをプロセッササブユニット７５０ｈに接続する。例えば、上記のように、メモリチップ７７０ｂのその他の配置を利用してもよい。
【０１２９】
メモリチップ７７０ａおよび７７０ｂのプロセッササブユニットは、１または複数のバスを使用して接続することができる。したがって、図７Ｃの例では、バス７５０ｅはメモリチップ７７０ａのプロセッササブユニット７３０ｂおよびメモリチップ７７０ｂのプロセッササブユニット７３０ｃを接続することができ、バス７５０ｆはメモリチップ７７０ａのプロセッササブユニット７３０ｆおよびメモリチップ７７０ｂのプロセッササブユニット７３０ｃを接続することができる。例えば、バス７５０ｅはメモリチップ７７０ｂへの入力バス（したがってメモリチップ７７０ａへの出力バス）として機能することができ、バス７５０ｆはメモリチップ７７０ａへの入力バス（したがってメモリチップ７７０ｂへの出力バス）として機能することができ、逆の場合も同じである。あるいは、バス７５０ｅおよび７５０ｆは両方ともメモリチップ７７０ａと７７０ｂとの間の双方バスとして機能することができる。
【０１３０】
バス７５０ｅおよび７５０ｆは、メモリチップ７７０ａと集積回路７７０ｂとの間のチップ間インタフェースとして使用されるピンを少なくするために直接ワイヤを含み得て、または高速接続で交互配置することができる。さらに、メモリチップそのものに使用される上記のあらゆる接続配置を利用してメモリチップを１または複数の追加の集積回路に接続することができる。例えば、メモリチップ７７０ａおよび７７０ｂは、図７Ｃで示されるように２つのバスだけでなくタイル全域接続またはタイル部分接続を利用して接続することができる。
【０１３１】
したがって、アーキテクチャ７６０がバス７５０ｅおよび７５０ｆを使用して示されているが、アーキテクチャ７６０は少ないバス、または追加のバスを含んでもよい。例えば、プロセッササブユニット７３０ｂと７３０ｃ、またはプロセッササブユニット７３０ｆと７３０ｃとの間で単一バスを使用することができる。あるいは、例えば、プロセッササブユニット７３０ｂと７３０ｄ、プロセッササブユニット７３０ｆと７３０ｄ、またはその他同種のものとの間で追加のバスを使用することができる。
【０１３２】
さらに、複数のメモリチップが単一メモリチップおよび追加の集積回路を使用して示されるが、複数のメモリチップは上述のようにバスを使用して接続することができる。例えば、図７Ｃの例で示されるように、メモリチップ７７０ａ、７７０ｂ、７７０ｃ、および７７０ｄがアレイ形式で接続される。各メモリチップは、上記のメモリチップに類似するプロセッササブユニットおよび専用のメモリバンクを含む。したがって、これらのコンポーネントの記載はここでは繰り返さない。
【０１３３】
図７Ｃの例では、メモリチップ７７０ａ、７７０ｂ、７７０ｃ、および７７０ｄは、ループで接続される。したがって、バス７５０ａはメモリチップ７７０ａおよび７７０ｄを接続し、バス７５０ｃはメモリチップ７７０ａおよび７７０ｂを接続し、バス７５０ｅはメモリチップ７７０ｂおよび７７０ｃを接続し、バス７５０ｇはメモリチップ７７０ｃおよび７７０ｄを接続する。メモリチップ７７０ａ、７７０ｂ、７７０ｃ、および７７０ｄは、タイル全域接続、タイル部分接続、またはその他の接続配置で接続することができるが、図７Ｃの例は、メモリチップ７７０ａ、７７０ｂ、７７０ｃ、および７７０ｄ間において少ないピンでの接続を可能にする。
【０１３４】
［相対的に大型なメモリ］
本開示の実施形態は、従来のプロセッサの共有メモリと比べて相対的に大型サイズの専用メモリを使用することができる。共有メモリではなく専用メモリを使用することで、メモリが増えると同時に効率が衰えることなく効率向上を持続させることが可能となる。これにより、増える共有メモリの効率向上がフォンノイマンボトルネックにより続かなくなる従来のプロセッサよりもより効率的にニューラルネットワーク処理およびデータベースクエリなどメモリ負荷の高いタスクを実行することが可能となる。
【０１３５】
例えば、本開示の分散型プロセッサでは、分散型プロセッサの基板に配置されるメモリアレイは、複数の個別のメモリバンクを含み得る。個別のメモリバンクの各々は、１メガバイト以上の容量と、基板上に配置され、複数のプロセッササブユニットを含む処理アレイと、を有することができる。前述のように、プロセッササブユニットの各々は、複数の個別のメモリバンクのうち対応する専用メモリバンクと関連付けることができる。いくつかの実施形態では、複数のプロセッササブユニットは、メモリアレイ内の複数の個別のメモリバンク間に空間的に分散することができる。大型ＣＰＵまたは大型ＧＰＵの数メガバイトの共有キャッシュではなく、少なくとも１メガバイトの専用メモリを使用することによって、本開示の分散型プロセッサはＣＰＵまたはＧＰＵ内のフォンノイマンボトルネックにより従来システムでは不可能である効率性を向上させる。
【０１３６】
専用メモリとして異なるメモリを使用することができる。例えば、各専用メモリバンクは少なくとも１つのＤＲＡＭバンクを含み得る。あるいは、各専用メモリバンクは少なくとも１つのスタティックランダムアクセスメモリバンクを含み得る。他の実施形態では、異なるタイプのメモリを単一ハードウェアチップ上に組み合わせることができる。
【０１３７】
前述のように、各専用メモリは少なくとも１メガバイトであってもよい。したがって、各専用メモリバンクは同じサイズであってもよく、または、複数のメモリバンクのうち少なくとも２つは異なるサイズを有してもよい。
【０１３８】
さらに、上記のように、分散型プロセッサは、各バスが複数のプロセッササブユニットの１つを対応する専用メモリバンクに接続する、第１の複数のバスと、各バスが複数のプロセッササブユニットの１つを複数のプロセッササブユニットの別のプロセッササブユニットに接続する、第２の複数のバスと、を含み得る。
【０１３９】
［ソフトウェアを用いた同期］
前述のように、本開示のハードウェアチップは、ハードウェアではなくソフトウェアを使用してデータ転送を管理することができる。詳細には、バス上での転送のタイミング、メモリへの読み込みおよび書き込み、およびプロセッササブユニットの計算はプロセッササブユニットが実行するサブシリーズ命令によって設定されるため、本開示のハードウェアチップは、バス上で衝突しないようにするコードを実行することができる。したがって、本開示のハードウェアチップは、データ転送（チップ内のネットワークコントローラ、プロセッササブユニット間のパケットパーサおよびパケット転送者、バスアービテータ、アービテータを回避する複数のバス、またはその他同種のものなど）を管理するために従来から使われているハードウェア機構を回避することができる。
【０１４０】
本開示のハードウェアチップが従来の方法でデータを転送した場合、Ｎプロセッササブユニットをバスと接続するには、アービタによって制御されるバスアービトレーションまたはワイドマルチプレクサ（ＭＵＸ）が必要になるであろう。代わりに、上記のように、本開示の実施形態は、プロセッササブユニット間のワイヤ、光ケーブル、またはその他同種のものだけであるバスを使用することができ、プロセッササブユニットはバス上で衝突しないようにするコードを個別に実行する。したがって、本開示の実施形態は、基板上の空きを失わないようにすることに加え、マテリアルコストを維持し、および（例えば、アービトレーションによる電力消費および無駄な時間が原因となる）効率損失から守ることができる。先入れ先出し（ＦＩＦＯ）コントローラおよび／またはメールボックスを利用した他のアーキテクチャと比べて、効率性および空きの確保が今以上に高まる。
【０１４１】
さらに、前述のように、各プロセッササブユニットは、１または複数の処理要素に加えて１または複数のアクセラレータを含み得る。いくつかの実施形態では、アクセラレータは、処理要素ではなく、バスから読み込みおよび書き込み行うことができる。このような実施形態では、処理要素が１または複数の計算を実行する同サイクル時に、アクセラレータがデータを送信できるようにさせることによって追加の効率性が得られる場合がある。ただし、このような実施形態は、アクセラレータに対して追加のマテリアルを必要とする。例えば、アクセラレータの製造に追加のトランジスタが必要となる場合がある。
【０１４２】
コードはさらに、タイミングおよび待ち時間を含む、プロセッササブユニット（例えば、プロセッササブユニット部を形成する処理要素および／またはアクセラレータを含む）の内部挙動を構成できる。例えば、コンパイラ（以下で記載する）は、データ転送を制御するサブシリーズ命令を生成する際にタイミングおよび待ち時間を構成する前処理を実行できる。
【０１４３】
一例では、複数のプロセッササブユニットには、ニューラルネットワーク層を計算するタスクを割り当てることができる。ニューラルネットワーク層は複数の大型ニューロンの前層に完全接続される複数のニューロンを含む。ニューロンの前層のデータがプロセッササブユニット間に均等に広まることを想定すると、この計算を実行する１つの方法は、各プロセッササブユニットがニューロンの前層のデータをメインバスに次々に送信するように構成でき、次いで各プロセッササブユニットは、サブユニットが実装する対応するニューロンのウェイトによってこのデータを逓倍することになる。各プロセッササブユニットが１つ以上のニューロンを計算するため、各プロセッササブユニットはニューロンの数に等しい回数分前層のデータを送信することになる。つまり、サブユニットは時間的に別々に送信するため、各プロセッササブユニットのコードは他のプロセッササブユニットのコードと同じではない。
【０１４４】
いくつかの実施形態では、分散型プロセッサは、例えば図７Ａおよび図７Ｂで示されるように、基板上に配置されるメモリアレイを備える基板（例えば、シリコンなどの半導体基板および／またはフレキシブル回路基板などの回路基板）を備え得る。メモリアレイは複数の個別のメモリバンクを含み、処理アレイが基板に配置され、処理アレイが複数のプロセッササブユニットを含む。前述のようにプロセッササブユニットの各々は、複数の個別のメモリバンクのうち対応する専用メモリバンクと関連付けることができる。さらに、例えば図７Ａおよび図７Ｂで示されるように、分散型プロセッサはさらに複数のバスを含み得て、複数のバスの各々が、複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも別のプロセッササブユニットに接続する。
【０１４５】
前述のように、複数のバスはソフトウェアで制御できる。したがって、複数のバスにはタイミングハードウェア論理コンポーネントがない場合があるため、結果プロセッササブユニット間、および複数のバスのうち対応するバス全体にわたるデータ転送がタイミングハードウェア論理コンポーネントによって制御されない。一例では、複数のバスにはバスアービタがない場合があるため、結果、プロセッササブユニット間、および複数のバスのうち対応するバス全体にわたるデータ転送がバスアービタによって制御されない。
【０１４６】
いくつかの実施形態では、例えば図７Ａおよび図７Ｂで示されるように、分散型プロセッサはさらに、複数のプロセッササブユニットの１つを対応する専用メモリバンクに接続する第２の複数のバスを含み得る。上記の複数のバスと同様に、第２の複数のバスにはタイミングハードウェア論理コンポーネントがない場合があるため、結果プロセッササブユニットおよび対応する専用メモリバンク間でのデータ転送がタイミングハードウェア論理コンポーネントによって制御されない。一例では、第２の複数のバスにはバスアービタがない場合があるため、結果プロセッササブユニットおよび対応する専用メモリバンク間でのデータ転送がバスアービタによって制御されない。
【０１４７】
本明細書で使用される「ない（ｆｒｅｅ  ｏｆ）」というフレーズは、必ずしもタイミングハードウェア論理コンポーネント（例えば、バスアービタ、アービトレーションツリー、ＦＩＦＯコントローラ、メールボックス、またはその他同種のもの）などのコンポーネントが完全にないということを意味しない。さらにこうしたコンポーネントは、これらのコンポーネントが「ない（ｆｒｅｅ  ｏｆ）」と記載されるハードウェアチップ内に含まれる場合がある。代わりに、「ない（ｆｒｅｅ  ｏｆ）」というフレーズはハードウェアチップの機能を指す。つまり、タイミングハードウェア論理コンポーネントが「ない（ｆｒｅｅ  ｏｆ）」ハードウェアチップは、タイミングハードウェア論理コンポーネントがある場合、ハードウェアチップ内に含まれるタイミングハードウェア論理コンポーネントを使用せずにデータ転送のタイミングを制御する。例えば、ハードウェアチップは、実行されるコード内のエラーによる衝突から守る補助予防措置としてのタイミングハードウェア論理コンポーネントを含むとはいえ、ハードウェアチップはハードウェアチップのプロセッササブユニット間のデータ転送を制御するサブシリーズ命令を含むコードを実行する。
【０１４８】
前述のように、複数のバスは、複数のプロセッササブユニットの対応するプロセッササブユニット間に少なくとも１つのワイヤまたは光ファイバを含んでもよい。したがって、一例では、タイミングハードウェア論理コンポーネントがない分散型プロセッサは、バスアービタ、アービトレーションツリー、ＦＩＦＯコントローラ、メールボックス、またはその他同種のものを使用せず、ワイヤまたは光ファイバのみを含み得る。
【０１４９】
いくつかの実施形態では、複数のプロセッササブユニットは、複数のプロセッササブユニットによって実行されるコードに従って複数のバスの少なくとも１つの全体にわたりデータを転送するように構成される。したがって、以下で説明するように、コンパイラはサブシリーズ命令を編成することができ、各サブシリーズは単一プロセッササブユニットによって実行されるコードを含む。サブシリーズ命令は、バスの１つにデータを転送する時期、およびバスからデータを引き出す時期をプロセッササブユニットに命令できる。サブシリーズが分散型プロセッサ全体に平行して実行される場合、サブシリーズ内に含まれる転送命令および引き出し命令がプロセッササブユニット間の転送するタイミングを制御できる。このように、コードは、複数のバスの少なくとも１つの全体にデータ転送のタイミングを規定する。コンパイラは、単一プロセッササブユニットによって実行されるコードを生成することができる。さらに、コンパイラは、プロセッササブユニットのグループによって実行されるコードを生成することができる。場合によっては、コンパイラは、全てのプロセッササブユニットがあたかも１つのスーパープロセッサ（例えば、分散型プロセッサ）であるかのように全てのプロセッササブユニットを共に処理することができ、コンパイラは、その定義されたスーパープロセッサ／分散型プロセッサによって実行するコードを生成することができる。
【０１５０】
上記のように、および図７Ａおよび図７Ｂで示されるように、複数のプロセッササブユニットがメモリアレイ内の複数の個別のメモリバンク間に空間的に分散される。あるいは、基板の１または複数の領域内に複数のプロセッササブユニットを集めてグループにすることができ、基板の１または複数の他の領域内に複数のメモリバンクを集めてグループにすることができる。いくつかの実施形態では、前述のように、空間的分散およびグループ分類の組み合わせを利用することができる。
【０１５１】
いくつかの実施形態では、分散型プロセッサは、基板上に配置されるメモリアレイを備える基板（例えば、シリコンなどの半導体基板および／またはフレキシブル回路基板などの回路基板）を備え得る。メモリアレイは複数の個別のメモリバンクを含む。例えば、図７Ａおよび図７Ｂで示されるように、処理アレイはさらに基板に配置され、処理アレイが複数のプロセッササブユニットを含む。前述のようにプロセッササブユニットの各々は、複数の個別のメモリバンクのうち対応する専用メモリバンクと関連付けることができる。さらに、例えば図７Ａおよび図７Ｂで示されるように、分散型プロセッサはさらに複数のバスを含み得て、複数のバスの各々が、複数のプロセッササブユニットの１つを複数の個別のメモリバンクのうち対応する専用メモリバンクに接続する。
【０１５２】
前述のように、複数のバスはソフトウェアで制御できる。したがって、複数のバスにはタイミングハードウェア論理コンポーネントがない場合があるため、結果プロセッササブユニットと複数の個別のメモリバンクのうち対応する専用メモリバンクとの間、および複数のバスのうち対応するバス全体にわたるデータ転送がタイミングハードウェア論理コンポーネントによって制御されない。一例では、複数のバスにはバスアービタがない場合があるため、結果、プロセッササブユニット間、および複数のバスのうち対応するバス全体にわたるデータ転送がバスアービタによって制御されない。
【０１５３】
いくつかの実施形態では、例えば図７Ａおよび図７Ｂで示されるように、分散型プロセッサはさらに、複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも別のプロセッササブユニットに接続する第２の複数のバスを含み得る。上記の複数のバスと同様に、第２の複数のバスにはタイミングハードウェア論理コンポーネントがない場合があるため、結果プロセッササブユニットおよび対応する専用メモリバンク間でのデータ転送がタイミングハードウェア論理コンポーネントによって制御されない。一例では、第２の複数のバスにはバスアービタがない場合があるため、結果プロセッササブユニットおよび対応する専用メモリバンク間でのデータ転送がバスアービタによって制御されない。
【０１５４】
いくつかの実施形態では、分散型プロセッサは、ソフトウェアタイミングコンポーネントとハードウェアタイミングコンポーネントとの組み合わせを利用することができる。例えば、分散型プロセッサは、基板上に配置されるメモリアレイを備える基板（例えば、シリコンなどの半導体基板および／またはフレキシブル回路基板などの回路基板）を備え得る。メモリアレイは複数の個別のメモリバンクを含む。例えば、図７Ａおよび図７Ｂで示されるように、処理アレイがさらに基板に配置され、処理アレイが複数のプロセッササブユニットを含む。前述のようにプロセッササブユニットの各々は、複数の個別のメモリバンクのうち対応する専用メモリバンクと関連付けることができる。さらに、例えば図７Ａおよび図７Ｂで示されるように、分散型プロセッサはさらに複数のバスを含み得て、複数のバスの各々が、複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも別のプロセッササブユニットに接続する。さらに、前述のように、複数のプロセッササブユニットは、複数のバス全体にわたるデータ転送のタイミングを制御して、複数のバスの少なくとも１つにデータ転送が衝突しないようにするソフトウェアを実行するように構成することができる。この一例では、ソフトウェアがデータ転送のタイミングを制御することができるが、データ転送自体は１または複数のハードウェアコンポーネントによって少なくとも部分的に制御される場合がある。
【０１５５】
このような実施形態において、分散型プロセッサはさらに、複数のプロセッササブユニットの１つを対応する専用メモリバンクに接続する第２の複数のバスを含み得る。上記の複数のバスと同様に、複数のプロセッササブユニットは、第２の複数のバス全体にわたるデータ転送のタイミングを制御して、第２の複数のバスの少なくとも１つにデータ転送が衝突しないようにするソフトウェアを実行するように構成することができる。この一例では、前述のように、ソフトウェアがデータ転送のタイミングを制御することができるが、データ転送自体は１または複数のハードウェアコンポーネントによって少なくとも部分的に制御される場合がある。
【０１５６】
コードの分割  前述のように、本開示のハードウェアチップは、ハードウェアチップを形成する基板上に含まれるプロセッササブユニット全体にわたり並列でコードを実行することができる。さらに、本開示のハードウェアチップはマルチタスキングを実行することができる。例えば、本開示のハードウェアチップはエリアマルチタスキングを実行することができる。エリアマルチタスキングでは、ハードウェアチップのプロセッササブユニットの１グループが１つのタスク（例えば、音声処理）を実行し、ハードウェアチップのプロセッササブユニットの別グループが別のタスク（例えば、画像処理）を実行する。別の例では、本開示のハードウェアチップはタイミングマルチタスキングを実行することができる。タイミングマルチタスキングでは、ハードウェアチップの１または複数のプロセッササブユニットが第１の期間中に１つのタスクを実行し、第２の期間中に別のタスクを実行する。さらに、第１の期間中に１つのタスクをプロセッササブユニットの第１のグループに割り当てることができ、第１の期間中に別のタスクをプロセッササブユニットの第２のグループに割り当てることができ、その後、第２の期間中に第３のタスクを第１のグループおよび第２のグループ内に含まれるプロセッササブユニットに割り当てることができるように、エリアマルチタスキングとタイミングマルチタスキングの組み合わせを利用することができる。
【０１５７】
本開示のメモリチップ上で実行するマシンコードを編成するために、マシンコードをメモリチップのプロセッササブユニット間に分割することができる。例えば、メモリチップ上のプロセッサは、基板と、基板上に配置される複数のプロセッササブユニットと、を含み得る。メモリチップはさらに、基板上に配置される対応する複数のメモリバンクを含み得て、複数のプロセッササブユニットの各々が、複数のプロセッササブユニットの他のあらゆるプロセッササブユニットによって共有されない少なくとも１つの専用メモリバンクに接続される。メモリチップ上の各プロセッササブユニットは、他のプロセッササブユニットから独立した一連の命令を実行するように構成することができる。各一連の命令は、一連の命令を定義するコードに従ってプロセッササブユニットの１または複数の汎用処理要素を構成することによって、および／または、一連の命令を定義するコード内に提供されるシーケンスに従ってプロセッササブユニットの１または複数の専用処理要素（例えば、１または複数のアクセラレータ）をアクティブ化させることによって、実行することができる。
【０１５８】
したがって、各一連の命令は、単一プロセッササブユニットによって実行される一連のタスクを定義することができる。単一のタスクは、プロセッササブユニット内の１または複数の処理要素のアーキテクチャによって定義される命令セット内の命令を含み得る。例えば、プロセッササブユニットは特定のレジスタを含み得て、単一タスクは、データをレジスタで処理し、レジスタからデータを引き出し、レジスタ内のデータ上に演算関数を実行し、レジスタ内のデータ上に論理演算を実行し、またはその他同種のことを実行することができる。さらに、プロセッササブユニットは、０オペランドプロセッササブユニット（「スタックマシン」とも呼ばれる）、１オペランドプロセッササブユニット（アキュムレータマシンとも呼ばれる）、２オペランドプロセッササブユニット（ＲＩＳＣなど）、３オペランドプロセッササブユニット（複雑な命令セットコンピューティング（ＣＩＳＣなど））、またはその他同種のもの、など、あらゆる複数のオペランドを構成することができる。別の例では、プロセッササブユニットは１または複数のアクセラレータを含み得て、単一タスクはアクセラレータをアクティブ化させてＭＡＣ関数、ＭＡＸ関数、ＭＡＸ―０関数、またはその他同種の関数など、特殊関数を実行することができる。
【０１５９】
一連の命令はさらに、メモリチップの専用メモリバンクから読み込みおよび書き込みを行うタスクを含み得る。例えば、タスクは、タスクを実行するプロセッササブユニット専用のメモリバンクにデータを書き込む段階と、タスクを実行するプロセッササブユニット専用のメモリバンクからデータを読み込む段階と、またはその他同種の段階と、を含み得る。いくつかの実施形態では、読み込みおよび書き込みは、メモリバンクのコントローラと同時にプロセッササブユニットによって実行することができる。例えば、プロセッササブユニットは、コントローラに制御信号を送信して読み込みまたは書き込みを実行することによって読み込みタスクまたは書き込みタスクを実行することができる。いくつかの実施形態では、制御信号は、読み込みおよび書き込み用の特定のアドレスを含み得る。あるいは、プロセッササブユニットは、読み込みおよび書き込み用の利用可能なアドレスを選択するためにメモリコントローラに従う場合がある。
【０１６０】
この代わりに、またはこれに加えて、読み込みおよび書き込みは、メモリバンクのコントローラと同時に１または複数のアクセラレータによって実行することができる。例えば、アクセラレータはメモリコントローラの制御信号を生成することができる。これは、上記のようにプロセッササブユニットがどのように制御信号を生成するかに似ている。
【０１６１】
上記のあらゆる実施形態では、アドレスジェネレータはさらに、読み込みおよび書き込みをメモリバンクの特定のアドレスに導くために使用することができる。例えば、アドレスジェネレータは、読み込みおよび書き込み用のメモリアドレスを生成するように構成される処理要素を含み得る。アドレスジェネレータは、例えば、もはや不要である前の計算結果と同じアドレスに後の計算結果を書き込むことによって効率を高めるためにアドレスを生成するように構成することができる。したがって、アドレスジェネレータは、プロセッササブユニットから（例えば、プロセッササブユニット内に含まれる処理要素から、またはプロセッササブユニット内に含まれる１または複数のアクセラレータから）のコマンドに応答して、またはプロセッササブユニットと同時に、のいずれかで、メモリコントローラの制御信号を生成することができる。この代わりに、またはこれに加えて、アドレスジェネレータは、いくつかの構成に基づいてアドレスを、または例えばメモリ内の特定のアドレス上に特定のパターンで繰り返すループが何重にも入れ子になった構造を生成するレジスタ、を生成することができる。
【０１６２】
いくつかの実施形態では、各一連の命令は、対応する一連のタスクを定義するマシンコードのセットを含み得る。したがって、上記の一連のタスクは、一連の命令を含むマシンコード内にカプセル化することができる。いくつかの実施形態では、図８に関連して以下で説明するように、一連のタスクはコンパイラによって定義することができる。コンパイラは一連の複数のタスクとしての複数の論理回路間に一連の上位タスクを分散するように構成される。例えば、コンパイラは、各対応する一連のタスクを同時に実行するプロセッササブユニットが一連の上位タスクが概説した同じ機能を実行するように、一連の上位タスクに基づいて一連の複数のタスクを生成することができる。
【０１６３】
さらに以下で詳述するように、一連の上位タスクは、人間が読めるプログラミング言語における命令のセットを含み得る。同様に、各プロセッササブユニットの一連のタスクは一連の下位タスクを含み得て、一連の下位タスクの各々はマシンコード内の命令のセットを含む。
【０１６４】
図７Ａおよび図７Ｂに関連して上記で説明したように、メモリチップはさらに複数のバスを含み得て、各バスは、複数のプロセッササブユニットの１つを複数のプロセッササブユニットの少なくとも１つの他のプロセッササブユニットに接続する。さらに、上記のように、複数のバス上でのデータ転送はソフトウェアを使用して制御できる。したがって、複数のバスの少なくとも１つのバス全体にわたるデータ転送は、複数のバスの少なくとも１つのバスに接続されるプロセッササブユニット内に含まれる一連の命令によって予め定義することができる。したがって、一連の命令の中に含まれるタスクの１つは、データをバスの１つに出力する段階、またはデータをバスの１つから引き出す段階を含み得る。このようなタスクは、プロセッササブユニットの処理要素によって、または、プロセッササブユニット内に含まれる１または複数のアクセラレータによって実行することができる。後者の実施形態では、プロセッササブユニットは、アクセラレータがデータをバスの１つから引き出すまたはデータをバスの１つに入れる同じサイクルで計算を実行し、または制御信号を対応するメモリバンクに送信することができる。
【０１６５】
一例では、複数のバスの少なくとも１つに接続されるプロセッササブユニット内に含まれる一連の命令は送信タスクを含み得る。送信タスクは、複数のバスの少なくとも１つに接続されるプロセッササブユニットがデータを複数のバスの少なくとも１つに書き込むコマンドを含む。この代わりに、またはこれに加えて、複数のバスの少なくとも１つに接続されるプロセッササブユニット内に含まれる一連の命令は受信タスクを含み得る。受信タスクは、複数のバスの少なくとも１つに接続されるプロセッササブユニットが複数のバスの少なくとも１つからデータを読み込むコマンドを含む。
【０１６６】
コードをプロセッササブユニット間に分散する代わりに、またはそのことに加えて、データをメモリチップのメモリバンク間に分割することができる。例えば、前述のように、メモリチップ上の分散型プロセッサは、メモリチップ上に配置される複数のプロセッササブユニットと、メモリチップ上に配置される複数のメモリバンクと、を含み得る。複数のメモリバンクの各々は、複数のメモリバンクうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成することができ、複数のプロセッササブユニットの各々は、複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続することができる  例えば、各プロセッササブユニットはプロセッササブユニット専用の１または複数の対応するメモリバンクの１または複数のメモリコントローラへのアクセス権を有することができ、他のプロセッササブユニットはこれらの対応する１または複数のメモリコントローラへのアクセス権を有することができない。したがって、各メモリバンク内に記憶されるデータは専用プロセッササブユニットに特有になり得る。さらに、各メモリバンク内に記憶されるデータは他のメモリバンク内に記憶されるメモリから独立してもよい。これは、メモリコントローラがメモリバンク間で共有することができないためである。
【０１６７】
いくつかの実施形態では、図８に関連して以下で説明されるように、複数のメモリバンクの各々に記憶されるデータは、データを複数のメモリバンク間に分散するように構成されるコンパイラによって定義することができる。さらに、コンパイラは、対応するプロセッササブユニット間に分散される複数の下位タスクを利用して、一連の上位タスク内で定義されるデータを複数のメモリバンク間に分散するように構成することができる。
【０１６８】
以下で詳述するように、一連の上位タスクは、人間が読めるプログラミング言語における命令のセットを含み得る。同時に、各プロセッササブユニットの一連のタスクは一連の下位タスクを含み得て、一連の下位タスクの各々はマシンコードにおける命令のセットを含む。
【０１６９】
図７Ａおよび図７Ｂに関連して上記で説明したように、メモリチップはさらに複数のバスを含み得て、各バスは、複数のプロセッササブユニットの１つを、複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する。さらに、前述のように、複数のバス上でのデータ転送はソフトウェアを使用して制御できる。したがって、複数のバスの特定の１つのバス全体にわたるデータ転送は、複数のバスの特定の１つのバスに接続される対応するプロセッササブユニットによって制御することができる。したがって、一連の命令の中に含まれるタスクの１つは、データをバスの１つに出力する段階と、またはデータをバスの１つから引き出す段階と、を含み得る。前述のように、このようなタスクは、（ｉ）プロセッササブユニットの処理要素によって、または、（ｉｉ）プロセッササブユニット内に含まれる１または複数のアクセラレータによって実行することができる。後者の実施形態では、プロセッササブユニットは、アクセラレータが１または複数の対応する専用メモリバンクに接続されるバスの１つからデータを引き出す、またはそのバスの１つにデータを入れる同じサイクルで計算を実行する、またはプロセッササブユニットを他のプロセッササブユニットに接続するバスを使用することができる。
【０１７０】
したがって、一例では、複数のバスの少なくとも１つに接続されるプロセッササブユニット内に含まれる一連の命令は送信タスクを含み得る。送信タスクは、複数のバスの少なくとも１つに接続されるプロセッササブユニットが１または複数の対応する専用メモリバンク内に記憶するためにデータを複数のバスの少なくとも１つに書き込むコマンドを含み得る。この代わりに、またはこれに加えて、複数のバスの少なくとも１つに接続されるプロセッササブユニット内に含まれる一連の命令は受信タスクを含み得る。受信タスクは、複数のバスの少なくとも１つに接続されるプロセッササブユニットが１または複数の対応する専用メモリバンク内に記憶するために複数のバスの少なくとも１つからデータを読み込むコマンドを含み得る。したがって、このような実施形態における送信タスクおよび受信タスクは、複数のバスの少なくとも１つを介して１または複数の対応する専用メモリバンクの１または複数のメモリコントローラに送信される制御信号を含み得る。さらに、送信タスクおよび受信タスクは、プロセッササブユニットの一部分によって（例えば、プロセッササブユニットの１または複数のアクセラレータによって）計算と同時に実行することができ、またはその他のタスクはプロセッササブユニットの別部分よって（例えば、プロセッササブユニットの１または複数の異なるアクセラレータによって）実行することができる。こうした同時実行の一例は、受信、逓倍、および送信が同時に実行されるＭＡＣリレーコマンドを含み得る。
【０１７１】
データをメモリバンク間に分散することに加え、異なるメモリバンク全体にわたりデータの特定の部分を複製することができる。例えば、前述のように、メモリチップ上の分散型プロセッサは、メモリチップ上に配置される複数のプロセッササブユニットと、メモリチップ上に配置される複数のメモリバンクと、を含み得る。複数のプロセッササブユニットの各々は、複数のメモリバンク間から少なくとも１つの専用メモリバンクに接続することができ、複数のメモリバンクの各メモリバンクは、複数のメモリバンクのうち他のメモリバンク内に記憶されるデータから独立したデータを記憶するように構成することができる。さらに、複数のメモリバンク間からの特定の１つのメモリバンク内に記憶されるデータの少なくともいくつかは、複数のメモリバンクの少なくとも別のメモリバンク内に記憶されるデータの複製を含み得る。例えば、一連の命令において使用されるデータの数、データストリング、またはその他のデータ型は、メモリチップ内の１つのメモリバンクから他のプロセッササブユニットに転送されるのではなく、異なるプロセッササブユニット専用の複数のメモリバンク内に記憶することができる。
【０１７２】
一例では、並列ストリングマッチングが上記のデータ複製を使用することができる。例えば、複数のストリングは同じストリングと比較することができる。従来のプロセッサであれば、複数のストリングの各ストリングを順番に同じストリングと比較するであろう。本開示のハードウェアチップ上では、プロセッササブユニットが複数のストリングの別々のストリングを複製されたストリングと並列に比較することができるように、同じストリングをメモリバンク全体にわたり複製することができる。
【０１７３】
いくつかの実施形態では、図８に関連して以下で説明されるように、複数のメモリバンク間からの１つの特定のメモリバンクおよび複数のメモリバンクの少なくとも別のメモリバンクの全体にわたり複製される少なくともいくつかのデータは、データをメモリバンク全体にわたり複製するように構成されるコンパイラによって定義される。さらに、コンパイラは、対応するプロセッササブユニット間に分散される複数の下位タスクを利用して、少なくともいくつかのデータを複製するように構成することができる。
【０１７４】
データ複製は、異なる計算中に同じデータ部分を再利用する特定のタスクに役立つ場合がある。これらのデータ部分を複製することによって、並列実行するために異なる計算をメモリチップのプロセッササブユニット間に分散することができる一方、各プロセッササブユニットは（プロセッササブユニットを接続するバス全体にわたりデータ部分を処理および引き出すのではなく）データ部分を専用メモリバンク内に記憶することができ、専用メモリバンクから記憶したデータ部分にアクセスできる。一例では、複数のメモリバンク間からの１つの特定のメモリバンク、および複数のメモリバンクの少なくとも別のメモリバンク全体にわたり複製される少なくともいくつかのデータは、ニューラルネットワークのウェイトを含み得る。この例では、ニューラルネットワーク内の各ノードは複数のプロセッササブユニット間からの少なくとも１つのプロセッササブユニットによって定義することができる。例えば、各ノードは、ノードを定義する少なくとも１つのプロセッササブユニットによって実行されるマシンコードを含み得る。この例では、ウェイトを複製することにより各プロセッササブユニットがマシンコードを実行して対応するノードを少なくとも部分的に有効にし、各プロセッササブユニットが（他のプロセッササブユニットでデータ転送を実行するのではなく）１または複数の専用メモリバンクにアクセスするだけでよいことになる。プロセッササブユニット間のデータ転送のタイミングには（例えば、前述のようにソフトウェアを使用して）タイミング同期が必要になるが、専用メモリバンクへの読み込みおよび書き込みのタイミングは他のプロセッササブユニットに依存していないため、メモリを複製してプロセッササブユニット間でのデータ転送をしないようにすることで総合実行時にさらなる効率性が生み出される可能性がある。
【０１７５】
図７Ａおよび図７Ｂに関連して前述したように、メモリチップはさらに複数のバスを含み得て、各バスは、複数のプロセッササブユニットの１つを、複数のメモリバンク間から１または複数の対応する専用メモリバンクに接続する。さらに、前述のように、複数のバス上でのデータ転送はソフトウェアを使用して制御できる。したがって、複数のバスの特定の１つのバス全体にわたるデータ転送は、複数のバスの特定の１つのバスに接続される対応するプロセッササブユニットによって制御することができる。したがって、一連の命令の中に含まれるタスクの１つは、データをバスの１つに出力する段階と、またはデータをバスの１つから引き出す段階と、を含み得る。前述のように、このようなタスクは、（ｉ）プロセッササブユニットの処理要素によって、または、（ｉｉ）プロセッササブユニット内に含まれる１または複数のアクセラレータによって実行することができる。詳述したように、こうしたタスクは送信タスクおよび／または受信タスクを含み得る。送信タスクおよび／または受信タスクは、複数のバスの少なくとも１つを介して１または複数の対応する専用メモリバンクの１または複数のメモリコントローラに送信される制御信号を含む。
【０１７６】
図８は、例えば、図７Ａおよび図７Ｂで示されるように、本開示の例示的なメモリチップ上で実行するための一連の命令をコンパイルする方法８００のフローチャートを示す。方法８００は、汎用であろうと専用であろうと従来のあらゆるプロセッサによって実装することができる。
【０１７７】
方法８００は、コンパイラを形成するコンピュータプログラムの一部分として実行することができる。本明細書で使用される「コンパイラ」は、上位言語（例えば、Ｃ、ＦＯＲＴＲＡＮ、ＢＡＳＩＣ、またはその他同種のものといった手続き形言語、およびＪａｖａ（登録商標）、Ｃ＋＋、ＰＡＳＣＡＬ、Ｐｙｔｈｏｎ、またはその他同種のものといったオブジェクト指向言語）を下位言語（例えば、アセンブリコード、オブジェクトコード、マシンコード、またはその他同種のもの）に変換するあらゆるコンピュータプログラムを指す。コンパイラにより、人間は、実行可能な機械語にその後変換された人間が読める言語で一連の命令のプログラムを可能にできる。
【０１７８】
段階８１０で、本プロセッサは、一連の命令と関連付けられたタスクをプロセッササブユニットの異なるプロセッササブユニットに割り当てることができる。例えば、一連の命令はサブグループに分割することができ、サブグループはプロセッササブユニット全体にわたり並列で実行される。一例では、ニューラルネットワークはニューラルネットワークノードに分割することができ、１または複数のノードはプロセッササブユニットを分離するように割り当てることができる。この例では、各サブグループは異なる層全体にわたり接続される複数のノードを含み得る。したがって、プロセッササブユニットは、ニューラルネットワークの第１の層からのノード、同じプロセッササブユニットが実装する第１の層からのノードに接続される第２の層からのノード、またはその他同種のもの、を実装することができる。ノードをそうした接続に基づいて割り当てることによって、プロセッササブユニット間のデータ転送を減少することができ、上記のように結果的に効率向上がもたらされる可能性がある。
【０１７９】
前述のように、図７Ａおよび図７Ｂで示されるプロセッササブユニットはメモリチップ上に配置される複数のメモリバンク間に空間的に分散することができる。したがって、タスクの割り当ては、少なくとも部分的に空間分散ならびに論理分割であってもよい。
【０１８０】
段階８２０で、本プロセッサは、メモリチップのプロセッササブユニットの対の間でデータを転送するタスクを生成し、プロセッササブユニットの対の各々がバスによって接続される。例えば、前述のように、データ転送はソフトウェアを使用して制御できる。したがって、プロセッササブユニットは、同期時にバス上でデータを処理および引き出すように構成することができる。したがって、生成されたタスクは、こうしたデータの同期された処理および引き出しを実行するタスクを含み得る。
【０１８１】
前述のように、段階８２０は、タイミングおよび待ち時間を含むプロセッササブユニットの内部挙動を構成する前処理を含み得る。例えば、プロセッサは、プロセッササブユニットの周知の時間および待ち時間（例えば、バスにデータを処理する時間、バスからデータを引き出す時間、計算と処理または引き出しとの間の待ち時間、またはその他同種の時間）を利用して、生成されたタスクが確実に同期するようにできる。したがって、プロセッササブユニット間の期間的差異、プロセッササブユニットの待ち時間、またはその他同種のものが原因で生じる遅延を被ることなく、１または複数のプロセッササブユニットによる少なくとも１つの処理、および１または複数のプロセッササブユニットによる少なくとも１つの引き出し、を含むデータ転送を同時に行える。
【０１８２】
段階８３０で、本プロセッサは、割り当てられたタスクおよび生成されたタスクをサブシリーズ命令の複数のグループに分割することができる。例えば、サブシリーズ命令の各々は、単一プロセッササブユニットが実行する一連のタスクを含み得る。そのため、サブシリーズ命令の複数のグループの各々は、複数のプロセッササブユニットのうち異なるプロセッササブユニットに対応することができる。したがって、段階８１０、段階８２０、および段階８３０は、一連の命令をサブシリーズ命令の複数のグループに分割する段階につなげることができる。前述のように、段階８２０は、異なるグループ間のあらゆるデータ転送を確実に同期することができる。
【０１８３】
段階８４０で、本プロセッサは、サブシリーズ命令の複数のグループの各々に対応するマシンコードを生成することができる。例えば、サブシリーズ命令を表す上位コードは、対応するプロセッササブユニットによって実行可能であるマシンコードなどの下位コードに変換することができる。
【０１８４】
段階８５０で、プロセッサは、分割に従って、サブシリーズ命令の複数のグループの各々に対応する生成されたマシンコードを、複数のプロセッササブユニットのうち対応する１つのプロセッササブユニットに割り当てることができる。例えば、プロセッサは、対応するプロセッササブユニットの識別子で各サブシリーズ命令を分類することができる。そのため、サブシリーズ命令が実行するために（例えば、図３Ａのホスト３５０によって）メモリチップにアップロードされる場合、各サブシリーズは正しいプロセッササブユニットを構成することができる。
【０１８５】
いくつかの実施形態では、一連の命令と関連付けられたタスクをプロセッササブユニットの異なるプロセッササブユニットに割り当てることは、メモリチップ上の２つ以上のプロセッササブユニット間の空間的近接に少なくとも部分的によって決まる場合がある。例えば、前述のように、プロセッササブユニット間のデータ転送の回数を減らすことによって効率を向上することができる。したがって、プロセッサは、２つ以上のプロセッササブユニット全体にデータを移動するデータ転送を減らすことができる。そのため、プロセッサは、１または複数の最適化アルゴリズム（欲張りアルゴリズムなど）を組み合わせてメモリチップの周知の設計を利用して、隣接する転送を（少なくともローカルに）最大化し、隣接しないプロセッササブユニットへの転送を（少なくともローカルに）最小化する方法でサブシリーズをプロセッササブユニットに割り当てることができる。
【０１８６】
方法８００はさらに、本開のメモリチップの最適化を含み得る。例えば、プロセッサは、分割に基づいて一連の命令と関連付けられるデータを分割し、そのデータ分類に従ってデータをメモリバンクに割り当てることができる。したがって、メモリバンクは、各プロセッササブユニット専用の各メモリバンクに割り当てられるサブシリーズ命令に使用されるデータを保持することができる。
【０１８７】
いくつかの実施形態では、データを分類する段階は、２つ以上のメモリバンク内に複製するための少なくともデータ部分を決定する段階を含み得る。例えば、前述のように、いくつかのデータを１つ以上のサブシリーズ命令全体にわたり使用することができる。こうしたデータは、異なるサブシリーズ命令が割り当てられる複数のプロセッササブユニット専用のメモリバンク全体に複製できる  こうした最適化はさらにプロセッササブユニット全体にわたるデータ転送を減らすことができる。
【０１８８】
方法８００の出力は、実行するために本開示のメモリチップに入力することができる。例えば、メモリチップは、複数のプロセッササブユニットおよび対応する複数のメモリバンクを含み得て、各プロセッササブユニットはプロセッササブユニット専用の少なくとも１つのメモリバンクに接続され、メモリチップのプロセッササブユニットは方法８００によって生成されるマシンコードを実行するように構成することができる。図３Ａに関連して前述したように、ホスト３５０は、実行するために方法８００によって生成されるマシンコードをプロセッササブユニットに入力することができる。
【０１８９】
［サブバンクおよびサブコントローラ］
従来のメモリバンクでは、コントローラがバンクレベルで提供される。各バンクは、一般的に矩形状で配置されるが、あらゆる幾何学的図形で配置することができる複数のマットを含む。各マットは、一般的に矩形状でも配置されるが、あらゆる幾何学的図形で配置することができる複数のメモリセルを含む。各メモリセルは、（例えば、メモリセルが高電圧で維持されるか、または低電圧で維持されるかに応じて）データの単一ビットを記憶することができる。
【０１９０】
この従来のアーキテクチャの一例が図９および図１０で示される。図９で示されるように、バンクレベルで複数のマット（例えば、マット９３０−１、９３０−２、９４０−１、および９４０−２）がバンク９００を形成することができる。従来の矩形構成では、バンク９００は、グローバルワード線（例えば、ワード線９５０）およびグローバルビット線（例えば、ビット線９６０）全体にわたって制御できる。したがって、行デコーダ９１０は、入ってくる制御信号（例えば、アドレスからの読み込み要求、アドレスへの書き込み要求、またはその他同種の要求）に基づいて正しいワード線を選択することができ、グローバルセンスアンプ９２０（および／または図９で示されないグローバル列デコーダ）は制御信号に基づいて正しいビット線を選択することができる。グローバルセンスアンプ９２０はさらに、読み込み動作時に、選択されたバンクからのあらゆる電圧レベルを上げる。列に沿って増幅の初期選択および初期実行を行う行デコーダを使用するように示されるが、バンクは、追加または代替として、行に沿って増幅の初期選択および初期実行を行う列デコーダを使用することができる。
【０１９１】
図１０はマット１０００の一例を示す。例えば、マット１０００は、図９のバンク９００などのメモリバンクの一部分を形成することができる。図１０で示されるように、複数のセル（例えば、セル１０３０−１、１０３０−２、および１０３０−３）はマット１０００を形成することができる。各セルは、少なくとも１ビットのデータを記憶するコンデンサ、トランジスタ、またはその他の回路を含み得る。例えば、セルはコンデンサを含み得て、コンデンサは充電されて「１」を示し、放電されて「０」を示す。またはセルは、「１」を示す第１の状態および「０」を示す第２の状態を有するフリップフロップを含み得る。従来のマットは、例えば、５１２ビット×５１２ビットを含んでもよい。マット１０００がＭＲＡＭ、ＲｅＲＡＭ、またはその他同種のメモリの一部分を形成する実施形態では、セルは、少なくとも１ビットのデータを記憶するイオンまたはマテリアルの一部分を絶縁するトランジスタ、抵抗器、コンデンサまたはその他の機構を含み得る。例えば、セルは、「１」を示す第１の状態および「０」を示す第２の状態を有する電解質イオン、カルコゲナイドガラスの一部分、またはその他同種のものを含み得る。
【０１９２】
図１０でさらに示されるように、従来の矩形構成では、マット１０００は、ローカルワード線（例えば、ワード線１０４０）およびローカルビット線（例えば、ビット線１０５０）全体にわたって制御できる。したがって、ワード線ドライバ（例えば、ワード線ドライバ１０２０−１、１０２０−２、. . .、１０２０−ｘ）は、マット１０００がパート（例えば、アドレスからの読み込み要求、アドレスへの書き込み要求、リフレッシュ信号）を形成するメモリバンクと関連付けられたコントローラからの制御信号に基づいて、選択されたワード線を制御して読み込み、書き込み、またはリフレッシュを実行することができる。さらに、ローカルセンスアンプ（例えば、ローカルアンプ１０１０−１、１０１０−２、. . .、１０１０−ｘ）および／またはローカル列デコーダ（図１０で示されない）は選択されたビット線を制御して読み込み、書き込み、またはリフレッシュを実行することができる。ローカルセンスアンプはさらに、読み込み動作時に、選択されたセルからのあらゆる電圧レベルを上げることができる。列に沿って増幅の初期選択および初期実行を行うワード線ドライバを使用するように示されるが、マットは代わりに、行に沿って増幅の初期選択および初期実行を行うビット線ドライバを使用することができる。
【０１９３】
前述のように、多くのマットを複製してメモリバンクを形成する。メモリバンクを分割してメモリチップを形成することができる。例えば、メモリチップは、８から３２のメモリバンクを含んでもよい。したがって、プロセッササブユニットを従来のメモリチップ上のメモリバンクと組み合わせることにより、８から３２だけのプロセッササブユニットをもたらすことができる。したがって、本開示の実施形態は、追加のサブバンク層を備えるメモリチップを含んでもよい。本開示のこれらのメモリチップは次いで、プロセッササブユニットと組み合わされた専用メモリバンクとして使用されるメモリサブバンクを備え、多くのサブプロセッサを可能にするプロセッササブユニットを含み得て、多くのサブプロセッサは次いで高並列処理を実現し、インメモリーコンピューティングを実行することができる。
【０１９４】
本開示のいくつかの実施形態では、バンク９００のグローバル行デコーダおよびグローバルセンスアンプをサブバンクコントローラに取り替えることができる。したがって、制御信号をメモリバンクのグローバル行デコーダおよびグローバルセンスアンプに送信するのではなく、メモリバンクのコントローラは、制御信号を適切なサブバンクコントローラに導くことができる。その指示は（例えば１または複数の論理ゲートを介して）動的に制御でき、またはハードワイヤードできる。いくつかの実施形態では、制御信号をブロックするか、適切なサブバンクまたはマットに渡すか、またはどうかを各サブバンクまたはマットのコントローラに示すのにヒューズを使用することができる。したがって、このような実施形態では、ヒューズを使用して不良のサブバンクを非アクティブ化できる。
【０１９５】
このような実施形態の一例では、メモリチップは、複数のメモリバンクであって、各メモリバンクがバンクコントローラを有する、複数のメモリバンクと、複数のメモリサブバンクであって、各メモリサブバンクが、読み込みおよび書き込みきを可能にするサブバンク行デコーダおよびサブバンク列デコーダを自らの位置に有する、複数のメモリサブバンクと、を含み得る。各サブバンクは、複数のメモリマットであって、各メモリマットが複数のメモリセルを有する、複数のメモリマットを含んでもよく、各サブバンクはローカル行デコーダ、ローカル列デコーダ、および／またはローカルセンスアンプを内部に有することができる。サブバンク行デコーダおよびサブバンク列デコーダは、下記のように、バンクコントローラからの、またはサブバンクメモリ上でインメモリーコンピューティング用に使用されるサブバンクプロセッササブユニットからの読み込み要求および書き込み要求を処理することができる。また、各メモリサブバンクはさらに、バンクコントローラからの読み込み要求および書き込み要求を処理するかどうか、読み込み要求および書き込み要求を（例えば、マット上の行デコーダおよび列デコーダの）次のレベルに転送するかどうか、例えば、内部処理要素またはプロセッササブユニットがメモリにアクセスできるようにする読み込み要求および書き込み要求をブロックするかどうか、を決定するように構成されるコントローラを含み得る。いくつかの実施形態では、バンクコントローラはシステムクロックに同期できる。ただし、サブバンクコントローラはシステムクロックに同期しない場合がある。
【０１９６】
前述のように、プロセッササブユニットを従来のチップのメモリバンクと組み合わせた場合に比べ、サブバンクを使用することで多くのプロセッササブユニットをメモリチップ内に含むことを可能にできる。したがって、各サブバンクはさらに、サブバンクを専用メモリとして使用するプロセッササブユニットを有することができる。前述のように、プロセッササブユニットは、ＲＩＳＣ、ＣＩＳＣ、またはその他の汎用プロセッササブユニットを含み得て、および／または１または複数のアクセラレータを含み得る。さらに、プロセッササブユニットは、前述のように、アドレスジェネレータを含み得る。上記のあらゆる実施形態では、各プロセッササブユニットは、バンクコントローラを使用せずにサブバンクの行デコーダおよび列デコーダを使用してプロセッササブユニット専用のサブバンクにアクセスするように構成することができる。サブバンクと関連付けられるプロセッササブユニットはさらに、メモリマット（下記のデコーダおよびメモリ余剰機構を含む）を処理することができ、および／または、上位（例えば、バンクレベルまたはメモリレベル）からの読み込み要求または書き込み要求がそれに応じて転送および処理されるかどうかを決定することができる。
【０１９７】
いくつかの実施形態では、サブバンクコントローラはさらに、サブバンクの状態を記憶するレジスタを含み得る。したがって、サブバンクコントローラがメモリコントローラから制御信号を受信し、サブバンクが使用中であることをレジスタが示す場合に、サブバンクコントローラはエラーに戻ってもよい。各サブバンクがさらにプロセッササブユニットを含む実施形態では、サブバンク内のプロセッササブユニットがメモリコントローラからの外部要求と衝突してメモリにアクセスする場合に、レジスタはエラーを示す場合がある。
【０１９８】
図１１は、サブバンクコントローラを使用したメモリバンクの別の実施形態の一例を示す。図１１の例では、バンク１１００は、行デコーダ１１１０と、列デコーダ１１２０と、サブバンクコントローラ（例えば、コントローラ１１３０ａ、１１３０ｂ、および１１３０ｃ）を備えた複数のメモリサブバンク（例えば、サブバンク１１７０ａ、１１７０ｂ、および１１７０ｃ）と、を有する。サブバンクコントローラは、アドレスリゾルバ（例えば、リゾルバ１１４０ａ、１１４０ｂ、および１１４０ｃ）を含み得て、アドレスリゾルバは、サブバンクコントローラによって制御される１または複数のサブバンクに要求を渡すかどうかを決定することができる。
【０１９９】
サブバンクコントローラはさらに１または複数の論理回路（例えば、論理１１５０ａ、１１５０ｂ、および１１５０ｃ）を含み得る。例えば、１または複数の処理要素を含む論理回路は、サブバンク内のセルをリフレッシュする、サブバンク内のセルを消去する、またはその他同種の動作を行うなどの１または複数の動作を、バンク１１００からの要求を外部で処理せずに実行させることを可能にする。あるいは、論理回路は、前述のように、プロセッササブユニットを含み得るため、結果、プロセッササブユニットは、対応する専用メモリとしてサブバンクコントローラによって制御されるあらゆるサブバンクを有する。図１１の例では、論理１１５０ａは、対応する専用メモリとしてサブバンク１１７０ａを有することができ、論理１１５０ｂは、対応する専用メモリとしてサブバンク１１７０ｂを有することができ、論理１１５０ｃは、対応する専用メモリとしてサブバンク１１７０ｃを有することができる。上記のあらゆる実施形態では、論理回路はサブバンクへのバス、例えば、バス１１３１ａ、１１３１ｂ、または１１３１ｃを有することができる。図１１でさらに示されるように、サブバンクコントローラの各々は、処理要素またはプロセッササブユニットによって、またはコマンドを発行する上位メモリコントローラによって、のいずれかによって、メモリサブバンク上の記憶位置に読み込みおよび書き込みを可能にするサブバンク行デコーダおよびサブバンク列デコーダなどの複数のデコーダを含み得る。例えば、サブバンクコントローラ１１３０ａはデコーダ１１６０ａ、１１６０ｂ、および１１６０ｃを含み、サブバンクコントローラ１１３０ｂはデコーダ１１６０ｄ、１１６０ｅ、および１１６０ｆを含み、サブバンクコントローラ１１３０ｃはデコーダ１１６０ｇ、１１６０ｈ、および１１６０ｉを含む。サブバンクコントローラは、バンク行デコーダ１１１０からの要求に基づいて、サブバンクコントローラ内に含まれるデコーダを使用してワード線を選択できる。本記載のシステムにより、サブバンクの処理要素またはプロセッササブユニットはその他のバンクおよびその他のサブバンクにさえ割り込むことなくメモリにアクセスすることが可能となる。これにより、各サブバンクのプロセッササブユニットはその他のサブバンクプロセッササブユニットでメモリ計算を並列に実行することができる。
【０２００】
さらに、各サブバンクは複数のメモリマットをみ得て、各メモリマットは複数のセルを有する。例えば、サブバンク１１７０ａはマット１１９０ａ−１、１１９０ａ−２、. . .、１１９０ａ−ｘを含む。サブバンク１１７０ｂはマット１１９０ｂ−１、１１９０ｂ−２、. . . 、１１９０ｂ−ｘを含む。サブバンク１１７０ｃはマット１１９０ｃ−１、１１９０ｃ−２、. . .、１１９０ｃ−３を含む。図１１でさらに示されるように、各サブバンクは、少なくとも１つのデコーダを含み得る。例えば、サブバンク１１７０ａはデコーダ１１８０ａを含み、サブバンク１１７０ｂはデコーダ１１８０ｂを含み、サブバンク１１７０ｃはデコーダ１１８０ｃを含む。したがって、バンク列デコーダ１１２０は、外部要求に基づいてグローバルビット線（例えば、ビット線１１２１ａまたは１１２１ｂ）を選択することができ、バンク行デコーダ１１１０によって選択されるサブバンクはそのバンク列デコーダを使用して、サブバンクが専用になる論理回路からのローカル要求に基づいてローカルビット線（例えば、ビット線１１８１ａまたは１１８１ｂ）を選択することができる。したがって、各プロセッササブユニットは、バンク行デコーダおよびバンク列デコーダを使用せずにサブバンクの行デコーダおよび列デコーダを使用して、プロセッササブユニット専用のサブバンクにアクセスするように構成することができる。したがって、各プロセッササブユニットは、他のサブバンクに割り込むことなく、対応するサブバンクにアクセスできる。さらに、サブバンクデコーダは、サブバンクへの要求がプロセッササブユニットの外部にある場合、アクセスデータをバンクデコーダに反映することができる。あるいは、各サブバンクが１行だけのメモリマットを有する実施形態では、ローカルビット線はサブバンクのビット線ではなくマットのビット線になってもよい。
【０２０１】
サブバンク行デコーダおよびサブバンク列デコーダを使用した実施形態と、図１１で示される実施形態との組み合わせを利用することができる。例えば、バンク行デコーダを無くすが、バンク列デコーダを残し、ローカルビット線を使用してもよい。
【０２０２】
図１２は、複数のマットを有するメモリサブバンク１２００の一実施形態の一例を示す。例えば、サブバンク１２００は、図１１のサブバンク１１００の一部分を表し得る、またはサブバンク１２００は、メモリバンクの代替実装を表し得る。図１２の例では、サブバンク１２００は複数のマット（例えば、マット１２４０ａおよび１２４０ｂ）を含む。さらに、各マットは複数のセルを含み得る。例えば、マット１２４０ａはセル１２６０ａ−１、１２６０ａ−２. . .１２６０ａ−ｘを含み、  マット１２４０ｂはセル１２６０ｂ−１、１２６０ｂ−２. . .１２６０ｂ−ｘを含む。
【０２０３】
各マットには、マットのメモリセルに割り当てられることになるアドレスレンジを割り当てることができる。これらのアドレスは、生成時に、（例えば、以下で詳述するように１または複数のヒューズを使用して）マットをあちこち移動できるように、および、不良マットを非アクティブ化し、未使用状態にできるように構成することができる。
【０２０４】
サブバンク１２００は、メモリコントローラ１２１０から読み込み要求および書き込み要求を受信する。図１２で示されないが、アドレス解決のためにメモリコントローラ１２１０からの要求をサブバンク１２００のコントローラを介してフィルタし、サブバンク１２００の適切なマットに導くことができる。あるいは、メモリコントローラ１２１０からの要求のアドレスの少なくとも一部分（例えば、高ビット）は、サブバンク１２００の全てのマット（例えば、マット１２４０ａおよび１２４０ｂ）に送信することができるため、結果、割り当てられたマットのアドレスレンジがコマンド内で指定されたアドレスを含む場合に限り、各マットは全てのアドレスおよびアドレスと関連付けられた要求を処理することができる。上記のサブバンクの指示と同様に、マットの決定は動的に制御できる、またはハードワイヤードできる。いくつかの実施形態では、ヒューズを使用して各マットのアドレスレンジを決定することができ、さらに不正アドレスレンジを割り当てることによって不良マットを無効にすることが可能となる。追加または代替として、他の一般的な方法またはヒューズを接続することによってマットを無効にできる。
【０２０５】
上記のあらゆる実施形態では、サブバンクの各マットは、マット内にワード線を選択するための行デコーダ（例えば、行デコーダ１２３０ａまたは１２３０ｂ）を含み得る。いくつかの実施形態では、各マットはさらにヒューズおよびコンパレータ（例えば１２２０ａおよび１２２０ｂ）を含み得る。上記のように、コンパレータは、各マットが入ってくる要求を処理するかどうかを決定することができる場合があり、ヒューズは、各マットが不良の場合非アクティブ化できる場合がある。あるいは、各マット内の行デコーダではなく、バンクおよび／またはサブバンクの行デコーダを使用することができる。
【０２０６】
さらに、上記のあらゆる実施形態では、適切なマット内に含まれる列デコーダ（例えば、列デコーダ１２５０ａまたは１２５０ｂ）はローカルビット線（例えば、ビット線１２５１または１２５３）を選択することができる。ローカルビット線はメモリバンクのグローバルビット線に接続することができる。サブバンクが独自のローカルビット線を有する実施形態では、セルのローカルビット線はさらにサブバンクのローカルビット線に接続することができる。したがって、選択されたセル内のデータは、セルの列デコーダ（および／またはセンスアンプ）を介して、次いで（サブバンク列デコーダおよび／またはセンスアンプを含む実施形態では）サブバンクの列デコーダ（および／またはセンスアンプ）を介して、次いでバンクの列デコーダ（および／またはセンスアンプ）を介して、読み込むことができる。
【０２０７】
マット１２００を複製および配置してメモリバンク（またはメモリサブバンク）を形成することができる。例えば、本開示のメモリチップは、複数のメモリバンクであって、各メモリバンクが複数のメモリサブバンクを有する、複数のメモリバンクと、各メモリサブバンクであって、各メモリサブバンクが、読み込みおよび書き込みきを処理するサブバンクコントローラを自らの位置に有する、各メモリサブバンクと、を含み得る。さらに、各メモリサブバンクは複数のメモリマットを含み得て、各メモリマットは複数のメモリセルを有し、マット行デコーダおよびマット列デコーダ（例えば、図１２で示されるように）を有する。マット行デコーダおよびマット列デコーダはサブバンクコントローラから読み込み要求および書き込み要求を処理することができる。例えば、マットデコーダは、全ての要求を受信し、各マットの周知のアドレスレンジに基づいて（例えば、コンパレータを使用して）要求を処理するかどうかを決定することができる、またはマットデコーダは、サブバンク（またはバンク）コントローラによるマット選択に基づいて周知のアドレスレンジ内の要求を受信するだけでもよい。
【０２０８】
［コントローラのデータ転送］
本開示のあらゆるメモリチップはさらに、プロセッササブユニットを使用してデータを共有することに加えて、メモリコントローラ（またはサブバンクコントローラまたはマットコントローラ）を使用してデータを共有することもできる。例えば、本開示のメモリチップは、複数のメモリバンク（例えば、ＳＲＡＭバンク、ＤＲＡＭバンク、またはその他同種のバンク）を含み得て、各メモリバンクが読み込みおよび書き込みを可能にするバンクコントローラ、行デコーダ、および列デコーダを自らの位置に有し、ならびに複数のバスが複数のバンクコントローラの各コントローラを複数のバンクコントローラの少なくとも１つの他のコントローラに接続する。複数のバスは、上記のようにプロセッササブユニットを接続するが、プロセッササブユニットを介さずに直接バンクコントローラを接続するバスに類似してもよい  さらに、バスはバンクコントローラを接続するように記載されるが、バスは、追加または代替として、サブバンクコントローラおよび／またはマットコントローラを接続してもよい。
【０２０９】
いくつかの実施形態では、１または複数のプロセッササブユニットに接続されるメモリバンクのメインバス上にデータ転送が割り込むことなく複数のバスにアクセスできる。したがって、メモリバンク（またはサブバンク）は、データを異なるメモリバンク（またはサブバンク）に送信する、またはデータを異なるメモリバンク（またはサブバンク）から送信するのと同じクロックサイクルで、データを対応するプロセッササブユニットに送信する、およびデータを対応するプロセッササブユニットから送信することができる。各コントローラが複数の他のコントローラに接続される実施形態では、コントローラは、データを送受信する他方のコントローラのうちもう一方のコントローラを選択するように構成可能にできる。いくつかの実施形態では、各コントローラは少なくとも１つの隣接するコントローラに接続することができる（例えば、空間的に隣接するコントローラのペアを互いに接続することができる）。
【０２１０】
［メモリ回路内の余剰ロジック］
本開示は全体的に、オンチップデータ処理を行うプライマリ論理部分を備えるメモリチップに関する。メモリチップは、不良のプライマリ論理部分を取り替えてチップの製造歩留まりを高めることができる余剰論理部分を含み得る。したがって、チップは、論理部分の個別試験に基づいてメモリチップ内の論理ブロックの構成を可能にするオンチップコンポーネントを含み得る。論理部分専用の大面積のメモリチップは製造不具合の影響をより受けやすいためチップのこうした機能により歩留りが高まる可能性がある。例えば、大型余剰論理部分を備えるＤＲＡＭメモリチップは、歩留りを下げる製造問題の影響を受けやすい可能性がある。しかしながら、余剰論理部分を実装することにより、歩留りおよび信頼性が高まる可能性がある。なぜなら余剰論理部分を実装することにより、ＤＲＡＭメモリチップの製造業者またはユーザはロジック部を完全に動作または完全に非動作にし、高度の並列処理能力を維持できるからである。開示された実施形態の説明を容易にするために、本明細書および本開示全体にわたり特定のメモリタイプ（ＤＲＡＭなど）の事例を確認することができることに留意されたい。ただし、このような事例において、確認されたメモリタイプは限定することを意図するものではないことが理解されよう。むしろ、事例が本開示のある部分で明確に確認されない場合でも、ＤＲＡＭ、Ｆｌａｓｈ、ＳＲＡＭ、ＲｅＲＡＭ、ＰＲＡＭ、ＭＲＡＭ、ＲＯＭ、またはその他のあらゆるメモリなどのメモリタイプを本開示の実施形態と組み合わせて使用することができる。
【０２１１】
図１３は、本開示の実施形態と一致する例示的なメモリチップ１３００のブロック図である。メモリチップ１３００はＤＲＡＭのメモリチップとして実装することができる。メモリチップ１３００はさらに、例えばＦｌａｓｈ、ＳＲＡＭ、ＲｅＲＡＭ、ＰＲＡＭ、および／またはＭＲＡＭなど、あらゆるタイプの揮発性メモリまたは不揮発性メモリとして実装することができる。メモリチップ１３００は、アドレスマネージャ１３０２と、複数のメモリバンク１３０４（ａ、ａ）から１３０４（ｚ、ｚ）までを含むメモリアレイ１３０４と、メモリ論理１３０６と、ビジネス論理１３０８と、余剰ビジネス論理１３１０と、が配置される基板１３０１を含み得る。メモリ論理１３０６およびビジネス論理１３０８はプライマリ論理ブロックを構成することができ、余剰ビジネス論理１３１０は余剰ブロックを構成することができる。さらに、メモリチップ１３００は、非アクティブ化スイッチ１３１２およびアクティブ化スイッチ１３１４を含んでもよい設定スイッチを備え得る。非アクティブ化スイッチ１３１２およびアクティブ化スイッチ１３１４はさらに基板１３０１内に配置することができる。本願では、メモリ論理１３０６と、ビジネス論理１３０８と、余剰ビジネス論理１３１０はさらに総称して「論理ブロック」とも呼ばれ得る。
【０２１２】
アドレスマネージャ１３０２は、行デコーダおよび列デコーダまたはその他の種類のメモリ補助装置を含み得る。この代わりに、またはこれに加えて、アドレスマネージャ１３０２はマイクロコントローラまたは処理ユニットを含み得る。
【０２１３】
いくつかの実施形態では、図１３で示されるように、メモリチップ１３００は、複数のメモリブロックを２次元アレイで基板１３０１上に配置できる単一メモリアレイ１３０４を含み得る。しかしながら、その他の実施形態では、メモリチップ１３００は複数のメモリアレイ１３０４を含み得て、メモリアレイ１３０４の各々はメモリブロックを異なる構成で配置することができる。例えば、メモリアレイ（メモリバンクとしても知られる）の少なくとも１つの中にあるメモリブロックは、アドレスマネージャ１３０２またはメモリ論理１３０６からメモリブロックに転送しやすくするために径方向分散で配置することができる。
【０２１４】
ビジネス論理１３０８は、メモリ自体を管理するのに使用される論理と関係のないアプリケーションのインメモリーコンピューティングを実行するために使用することができる。例えば、ビジネス論理１３０８は、活性化関数として用いられる浮動演算、整数演算、またはＭＡＣ演算など人工知能（ＡＩ）に関連する関数を実装することができる。さらに、ビジネス論理１３０８は、とりわけｍｉｎ、ｍａｘ、ｓｏｒｔ、ｃｏｕｎｔなどのデータベース関連関数を実装することができる。メモリ論理１３０６は、読み込み動作、書き込み動作、およびリフレッシュ動作を含むメモリ管理に関連するタスクを実行することができる（がこれらに限定されない）。したがって、ビジネス論理は、１または複数のバンクレベル、マットレベル、またはマットのグループのレベルに追加することができる。ビジネス論理１３０８は、１または複数のアドレス出力および１または複数のデータ入力／データ出力を有することができる。例えば、ビジネス論理１３０８は、行ライン＼列ラインを介してアドレスマネージャ１３０２にアドレス指定することができる。ただし、ある実施形態では、論理ブロックは、追加または代替として、データ入力＼データ出力によってアドレス指定できる。
【０２１５】
余剰ビジネス論理１３１０はビジネス論理１３０８の複製であってもよい。さらに、余剰ビジネス論理１３１０は、小型ヒューズ＼小型アンチヒューズを含み得る非アクティブ化スイッチ１３１２および／またはアクティブ化スイッチ１３１４に接続することができ、インスタンス（例えば、デフォルト値で接続されるインスタンス）の１つを無効または有効にする論理用に使用することができ、その他の論理ブロック（例えば、デフォルト値で切断されるインスタンス）の１つを有効にすることができる。いくつかの実施形態では、図１５に関連して詳述されるように、余剰ブロックはビジネス論理１３０８などの論理ブロック内でローカルであってもよい。
【０２１６】
いくつかの実施形態では、メモリチップ１３００内の論理ブロックは、専用バスを備えるメモリアレイ１３０４のサブセットに接続することができる。例えば、メモリ論理１３０６、ビジネス論理１３０８、および余剰ビジネス論理１３１０のセットは、メモリアレイ１３０４内のメモリブロック（すなわち、メモリブロック１３０４（ａ、ａ）から１３０４（ａ、ｚ）まで）の第１の行に接続することができる。この専用バスにより、関連付けられた論理ブロックは、例えばアドレスマネージャ１３０２を介して通信ラインを開放する要求なしにメモリブロックからのデータに迅速にアクセスできる。
【０２１７】
複数のプライマリ論理ブロックの各々は、複数のメモリバンク１３０４の少なくとも１つに接続することができる。さらに、余剰ビジネスブロック１３１０などの余剰ブロックは、メモリインスタンス１３０４（ａ、ａ）−（ｚ、ｚ）の少なくとも１つに接続することができる。余剰ブロックは、メモリ論理１３０６またはビジネス論理１３０８などの複数のプライマリ論理ブロックの少なくとも１つを複製することができる。非アクティブ化スイッチ１３１２は複数のプライマリ論理ブロックの少なくとも１つに接続することができ、アクティブ化スイッチ１３１４は複数の余剰ブロックの少なくとも１つに接続することができる。
【０２１８】
これらの実施形態では、複数のプライマリ論理ブロック（メモリ論理１３０６および／またはビジネス論理１３０８）の１つと関連付けられる不良を検出した際に、非アクティブ化スイッチ１３１２は複数のプライマリ論理ブロックの１つを無効にするように構成することができる。同時に、アクティブ化スイッチ１３１４は、複数のプライマリ論理ブロックの１つを複製する余剰論理ブロック１３１０などの複数の余剰ブロックの１つを有効にするように構成することができる。
【０２１９】
さらに、総称して「設定スイッチ」と呼ばれ得るアクティブ化スイッチ１３１４および非アクティブ化スイッチ１３１２は、スイッチの状態を構成する外部入力を含み得る。例えば、アクティブ化スイッチ１３１４は、外部入力におけるアクティブ化信号がスイッチを閉じた状態にさせるように構成することができ、非アクティブ化スイッチ１３１２は、外部入力におけるアクティブ化信号がスイッチを開けた状態にさせるように構成することができる。いくつかの実施形態では、１３００内の全ての設定スイッチは、関連付けられた論理ブロックが機能的であり、信号が外部入力に加えられたことを試験が示した後で、デフォルト値で非アクティブ化にできる、およびアクティブ化または有効にできる。あるいは、場合によっては、１３００内の全ての設定スイッチは、関連付けられた論理ブロックが機能的でなく、非アクティブ化信号が外部入力に加えられたことを試験が示した後で、デフォルト値で有効にできる、および非アクティブまたは無効にできる。
【０２２０】
設定スイッチが最初に有効になるかまたは無効になるかにかかわらず、関連付けられた論理ブロックと関連付けられる不良を検出した際、設定スイッチは関連付けられた論理ブロックを無効にできる。設定スイッチが最初に有効になる場合、関連付けられた論理ブロックを無効にするために設定スイッチの状態を無効になるよう変更できる。設定スイッチが最初に無効になる場合、関連付けられた論理ブロックを無効にするために設定スイッチの状態を無効状態のままにできる。動作性試験の結果は、ある論理ブロックが動作しない、または論理ブロックが一定の規格内で動作しないことを示す場合がある。その場合、論理ブロックを無効にでき、論理ブロックに対応する設定スイッチを有効にしない。
【０２２１】
いくつかの実施形態では、設定スイッチは２つ以上の論理ブロックに接続することができ、異なる論理ブロックのどちらかを選ぶように構成することができる。例えば、設定スイッチはビジネス論理１３０８および余剰論理ブロック１３１０の両方に接続することができる。設定スイッチは余剰論理ブロック１３１０を有効にし、ビジネス論理１３０８を無効にすることができる。
【０２２２】
この代わりに、またはこれに加えて、複数のプライマリ論理ブロック（メモリ論理１３０６および／またはビジネス論理１３０８）の少なくとも１つは、複数のメモリバンクまたはメモリインスタンス１３０４のサブセットに第１の専用接続で接続することができる。次いで、複数のプライマリ論理ブロックの少なくとも１つを複製する複数の余剰ブロック（余剰ビジネス論理１３１０など）の少なくとも１つは、同じ複数のメモリバンクまたはメモリインスタンス１３０４のサブセットに第２の専用接続で接続することができる。
【０２２３】
さらに、メモリ論理１３０６は、ビジネス論理１３０８とは異なる機能および能力を有することができる。例えば、メモリ論理１３０６はメモリバンク１３０４内で読み込み動作および書き込み動作を可能にするように設計することができ、ビジネス論理１３０８はインメモリーコンピューティングを実行するように設計することができる。したがって、ビジネス論理１３０８が第１のビジネス論理ブロックを含み、ビジネス論理１３０８が第２のビジネス論理ブロック（余剰ビジネス論理１３１０など）を含む場合、不良のビジネス論理１３０８を切断し、あらゆる能力を失うことなく余剰ビジネス論理１３１０を再接続させることが可能である。
【０２２４】
いくつかの実施形態では、設定スイッチ（非アクティブ化スイッチ１３１２およびアクティブ化スイッチ１３１４を含む）は、ヒューズ、アンチヒューズ、またはプログラマブルデバイス（ワンタイムプログラマブルデバイスを含む）、またはその他の不揮発性メモリで実装することができる。
【０２２５】
図１４は、本開示の実施形態と一致する例示的な余剰論理ブロックセット１４００のブロック図である。いくつかの実施形態では、余剰論理ブロックセット１４００は基板１３０１内に配置することができる。余剰論理ブロックセット１４００は、それぞれスイッチ１３１２および１３１４に接続されるビジネス論理１３０８および余剰ビジネス論理１３１０の少なくとも１つを含み得る。さらに、ビジネス論理１３０８および余剰ビジネス論理１３１０はアドレスバス１４０２およびデータバス１４０４に接続することができる。
【０２２６】
いくつかの実施形態では、図１４で示されるように、スイッチ１３１２および１３１４は論理ブロックをクロックノードに接続することができる。この方法では、設定スイッチはクロック信号から論理ブロックを連結または非連結にし、論理ブロックを効率的にアクティブまたは非アクティブにすることができる。ただし、他の実施形態では、スイッチ１３１２および１３１４は、アクティブまたは非アクティブにするために論理ブロックを他のノードに接続することができる。例えば、設定スイッチは、論理ブロックを電圧供給ノード（例えば、ＶＣＣ）またはグランドノード（例えば、ＧＮＤ）、もしくはクロック信号に接続することができる。この方法では、設定スイッチは論理ブロックを有効または無効にすることができる。なぜなら設定スイッチは開回路を作ることができる、または論理ブロック電源を切ることができるためである。
【０２２７】
いくつかの実施形態では、図１４で示されるように、アドレスバス１４０２およびデータバス１４０４は論理ブロックの両側にあってもよく、論理ブロックはバスの各々に並列接続される。この方法では、論理ブロックセット１４００によって、異なるオンチップコンポーネントの転送を容易にできる。
【０２２８】
いくつかの実施形態では、複数の非アクティブ化スイッチ１３１２の各々が複数のプライマリ論理ブロックの少なくとも１つをクロックノードと連結させることができ、複数のアクティブ化スイッチ１３１４の各々が複数の余剰ブロックの少なくとも１つをクロックノードと連結させることができ、シンプルなアクティブ化機構＼非アクティブ化機構としてクロックノードの接続＼切断が可能になる。
【０２２９】
余剰論理ブロックセット１４００の余剰ビジネス論理１３１０により、設計者は、エリアおよびルーティングに基づいて、複製する価値があるブロックを選ぶことが可能になる。例えば、チップ設計者は、より大型なブロックはかなりエラーを犯しやすいという理由で、複製用のより大型なブロックを選択する場合がある。そのため、チップ設計者は、大型論理ブロックを複製することを決定する場合がある。一方、設計者は、より小型な論理ブロックは大幅に空きを無くすことなく容易に複製されるという理由で、より小型な論理ブロックを複製することを好む場合がある。さらに、設計者は、図１４における構成を利用して、領域ごとのエラー統計に応じて、論理ブロックの複製を容易に選択できる。
【０２３０】
図１５は、本開示の実施形態と一致する例示的な論理ブロックのブロック図である。論理ブロックは、ビジネス論理１３０８および／または余剰ビジネス論理１３１０であってもよい。ただし、他の実施形態では、例示的な論理ブロックは、メモリ論理１３０６またはメモリチップ１３００のその他のコンポーネントを記載してもよい。
【０２３１】
論理ブロック１５００は、余剰ロジックが小型プロセッサパイプライン内で使用されるさらに別の実施形態を示す。論理ブロック１５００は、レジスタ１５０８と、フェッチ回路１５０４と、デコーダ１５０６と、ライトバック回路１５１８と、を含み得る。さらに、論理ブロック１５００は、計算ユニット１５１０および複製された計算ユニット１５１２を含んでもよい。ただし、他の実施形態では、論理ブロック１５００は、コントローラパイプラインを含まないその他のユニットを含み得るが、要求されるビジネス論理を含む単発な処理要素を含み得る。
【０２３２】
計算ユニット１５１０および複製された計算ユニット１５１２は、デジタル計算を実行することができるデジタル回路を含み得る。例えば、計算ユニット１５１０および複製された計算ユニット１５１２は、２進数算術演算およびビット単位演算を実行する算術論理演算ユニット（ＡＬＵ）を含み得る。あるいは、計算ユニット１５１０および複製された計算ユニット１５１２は、浮動小数点数で演算を行う浮動小数点ユニット（ＦＰＵ）を含み得る。さらに、いくつかの実施形態では、計算ユニット１５１０および複製された計算ユニット１５１２は、とりわけｍｉｎ、ｍａｘ、ｃｏｕｎｔなどのデータベース関連関数、および比較演算を実装することができる。
【０２３３】
いくつかの実施形態では、図１５で示されるように、計算ユニット１５１０および複製された計算ユニット１５１２はスイッチング回路１５１４および１５１６に接続することができる。スイッチング回路がアクティブ化されると、スイッチング回路は計算ユニットを有効または無効にできる。
【０２３４】
論理ブロック１５００では、複製された計算ユニット１５１２は計算ユニット１５１０を複製できる。さらに、いくつかの実施形態では、（総称してローカルロジックユニットと呼ばれる）レジスタ１５０８、フェッチ回路１５０４、デコーダ１５０６、およびライトバック回路１５１８は、計算ユニット１５１０よりもかなり小型であってもよい。より大型な要素は製造時にかなり問題になりやすいという理由で、設計者は、より小型のユニット（例えばローカル論理ユニット）の代わりに、より大型のユニット（例えば計算ユニット１５１０）の複製を決定する場合がある。しかしながら、履歴歩留りおよび誤り率に応じて、設計者は、大型のユニット（またはブロック全体）の追加または代替としてローカル論理ユニットの複製を選んでもよい。例えば、計算ユニット１５１０はレジスタ１５０８、フェッチ回路１５０４、デコーダ１５０６、およびライトバック回路１５１８よりも大型であるため、かなりエラーを犯しやすくなる場合がある。設計者は、論理ブロック１５００またはブロック全体におけるその他の要素の代わりに計算ユニット１５１０の複製を選んでもよい。
【０２３５】
論理ブロック１５００は複数のローカル設定スイッチを含み得て、複数のローカル設定スイッチの各々が計算ユニット１５１０または複製された計算ユニット１５１２の少なくとも１つに接続される。不良が計算ユニット１５１０内で検出された場合に、ローカル設定スイッチは計算ユニット１５１０を無効にし、複製された計算ユニット１５１２を有効にするように構成することができる。
【０２３６】
図１６は、本開示の実施形態と一致する、バスと接続された例示的な論理ブロックのブロック図を示す。いくつかの実施形態では、論理ブロック１６０２（メモリ論理１３０６、ビジネス論理１３０８、または余剰ビジネス論理１３１０を表し得る）は、互いに独立してもよく、バスを介して接続してもよく、およびそれら論理ブロックを具体的にアドレス指定することによって外部にアクティブ化してもよい。例えば、メモリチップ１３００は、多くの論理ブロックを含み得て、各論理ブロックはＩＤ番号を有する。ただし、他の実施形態では、論理ブロック１６０２は、１または複数の複数のメモリ論理１３０６、ビジネス論理１３０８、または余剰ビジネス論理１３１０から構成される大型のユニットを表し得る。
【０２３７】
いくつかの実施形態では、論理ブロック１６０２の各々は、その他の論理ブロック１６０２と余剰であってもよい。全てのブロックがプライマリブロックまたは余剰ブロックとして動作できるこの完全余剰性は、設計者が不良ユニットを切断し、チップ全体の機能を維持できるため、製造歩留まりを高めることができる。例えば、全ての複製ブロックが同様のアドレスバスおよびデータバスに接続することができるため、設計者は、エラーを犯しやすいロジック領域を無効にするだけでなく同様の計算能力を維持する能力も有することができる。例えば、論理ブロック１６０２の当初の数は、ターゲット機能の数よりも多くてよい。次いで、いくつかの論理ブロック１６０２を無効にしても、ターゲット機能に影響を与えることはないだろう。
【０２３８】
論理ブロックに接続されるバスは、アドレスバス１６１４、コマンドライン１６１６、およびデータライン１６１８を含み得る。図１６で示されるように、論理ブロックの各々はバス内の各ラインから独立して接続できる。ただし、いくつかの実施形態では、論理ブロック１６０２は階層構造で接続されて転送しやすくできる。例えば、バス内の各ラインは、ラインを異なる論理ブロック１６０２に回すマルチプレクサに接続することができる。
【０２３９】
いくつかの実施形態では、チップ内部構造を知らずともユニットを有効および無効にすることで変わる可能性がある外部へのアクセスを可能にするために、論理ブロックの各々はヒューズ付きの識別１６０４などのヒューズ付きＩＤを含み得る。ヒューズ付きの識別１６０４は、ＩＤを決定するスイッチ（ヒューズなど）のアレイを含んでもよく、管理回路に接続してもよい。例えば、ヒューズ付きの識別１６０４はアドレスマネージャ１３０２に接続することができる。あるいは、ヒューズ付きの識別１６０４は上位のメモリアドレスユニットに接続してもよい。これらの実施形態では、ヒューズ付きの識別１６０４は特定のアドレス用に構成可能にできる。例えば、ヒューズ付きの識別１６０４は、管理回路から受信された命令に基づいて最終ＩＤを決定するプログラマブルデバイス、不揮発性デバイスを含み得る。
【０２４０】
メモリチップ上の分散型プロセッサは、図１６で示される構成で設計することができる。チップ起動時または工場試験時にビルトインセルフテスト（ＢＩＳＴ）として実行される試験手順は、試験プロトコルを通過する複数のプライマリ論理ブロック内のブロック（メモリ論理１３０６およびビジネス論理１３０８）に実行ＩＤ番号を割り当てることができる。試験手順はさらに、試験プロトコルを通過しない複数のプライマリ論理ブロック内のブロックに不正ＩＤ番号を割り当てることができる。試験手順はさらに、試験プロトコルを通過する複数の余剰ブロック内のブロック（余剰論理ブロック１３１０）に実行ＩＤ番号を割り当てることができる。余剰ブロックが不合格のプライマリ論理ブロックを取り替えるため、実行ＩＤ番号が割り当てられた複数の余剰ブロック内のブロックが、不正ＩＤ番号が割り当てられた複数のプライマリ論理ブロック内のブロック以上となり、これによってブロックが無効になる。さらに、複数のプライマリ論理ブロックの各々および複数の余剰ブロックの各々が、少なくとも１つのヒューズ付きの識別１６０４を含み得る。さらに、図１６で示されるように、論理ブロック１６０２を接続するバスは、コマンドライン、データライン、およびアドレスラインを含み得る。
【０２４１】
ただし、他の実施形態では、バスに接続される全ての論理ブロック１６０２は、ＩＤ番号が無い場合無効になり始めるであろう。１つ１つ試験が行われ、有効な各論理ブロックは実行ＩＤ番号を得ることになる。機能しないこうした論理ブロックは不正ＩＤを有した状態のままとなり、こうしたブロックを無効にするだろう。このように、余剰論理ブロックは、試験プロセス時に不良になることがわかるブロックを取り替えることによって製造歩留まりを高めることができる。
【０２４２】
アドレスバス１６１４は、複数のメモリバンクの各々、複数のプライマリ論理ブロックの各々、および複数の余剰ブロックの各々に管理回路を連結することができる。これらの接続により、管理回路は、プライマリ論理ブロック（例えばビジネス論理１３０８）と関連付けられる不良を検出した際に、無効アドレスを複数のプライマリ論理ブロックの１つに割り当てることができ、有効アドレスを複数の余剰ブロックの１つに割り当てることが可能となる。
【０２４３】
例えば、図１６のＡ）で示されるように、不正ＩＤは全ての論理ブロック１６０２（ａ）−（ｃ）（例えば、アドレス０ｘＦＦＦ）で構成される。試験後、論理ブロック１６０２（ａ）および１６０２（ｃ）には機能性があり、論理ブロック１６０２（ｂ）には機能性がないと実証された。図１６のＡ）では、陰影のない論理ブロックは機能性試験を正常に通過した論理ブロックを表すことができ、陰影がある論理ブロックは機能性試験を通過しなかった論理ブロックを表し得る。次いで、試験手順は、機能性がある論理ブロックに対しては不正ＩＤを正当ＩＤに変え、機能性がない論理ブロックに対しては不正ＩＤのままにする。一例として、図１６のＡ）では、論理ブロック１６０２（ａ）および１６０２（ｃ）のアドレスは、それぞれ０ｘＦＦＦから０ｘ００１および０ｘ００２に変わる。一方、論理ブロック１６０２（ｂ）のアドレスは、不正アドレスである０ｘＦＦＦのままである。いくつかの実施形態では、ＩＤは、対応するヒューズ付きの識別１６０４をプログラミングすることによって変わる。
【０２４４】
論理ブロック１６０２の試験結果が異なれば、異なる構成がもたらされる場合がある。例えば、図１６のＢ）で示されるように、アドレスマネージャ１３０２は初期状態では、不正ＩＤを全ての論理ブロック１６０２（すなわち、０ｘＦＦＦ）に割り当ててもよい。しかし、試験結果は、論理ブロック１６０２（ａ）および１６０２（ｂ）の両方に機能性があることを示す場合がある。こうした場合、論理ブロック１６０２（ｃ）の試験は不要になる可能性がある。なぜなら、メモリチップ１３００には２つの論理ブロックだけが必要になる場合があるからである。そのため、試験リソースを最小限にするために、メモリチップ１３００の製品定義が必要とする機能性がある論理ブロックの最低限の数に従って論理ブロックを試験するだけでよく、その他の論理ブロックは試験しないままの状態にする。図１６のＢ）はさらに、機能性試験を通過した試験された論理ブロックを表す陰影のない論理ブロックと、試験されていない論理ブロックを表す陰影のある論理ブロックと、を示す。
【０２４５】
これらの実施形態では、製造テスタ（外部または内部、自動または手動）、または、チップ起動時にビルトインセルフテスト（ＢＩＳＴ）を実行するコントローラは、機能性がある試験された論理ブロックに対しては不正ＩＤを実行ＩＤに変え、未試験の論理ブロックに対しては不正ＩＤのままにすることができる。一例として、図１６のＢ）では、論理ブロック１６０２（ａ）および１６０２（ｂ）のアドレスは、それぞれ０ｘＦＦＦから０ｘ００１および０ｘ００２に変わる。一方、未試験の論理ブロック１６０２（ｃ）のアドレスは、不正アドレス０ｘＦＦＦのままである。
【０２４６】
図１７は、本開示の実施形態と一致する、並列接続された例示的なユニット１７０２および１７１２のブロック図である。図１７はシステム全体またはチップを表し得る。あるいは、図１７は、他の機能性ブロックを含むチップ内のブロックを表し得る。
【０２４７】
ユニット１７０２および１７１２は、メモリ論理１３０６および／またはビジネス論理１３０８など複数の論理ブロックを含む完全ユニットを表し得る。これらの実施形態では、ユニット１７０２および１７１２はさらに、アドレスマネージャ１３０２など、動作を実行するのに必要な要素を含み得る。ただし、他の実施形態では、ユニット１７０２および１７１２は、ビジネス論理１３０８または余剰ビジネス論理１３１０などの論理ユニットを含んでもよい。
【０２４８】
図１７は、ユニット１７０２および１７１２がそれ自体の間で通信する必要がある場合の実施形態を示す。この場合、ユニット１７０２および１７１２は直列に接続することができる。ただし、機能していないユニットは、論理ブロック間の導通状態を中断する場合がある。したがって、不良によりユニットを無効にする必要がある場合、ユニット間の接続はバイパスオプションを含み得る。バイパスオプションはさらに、バイパスされたユニット自体の一部であってもよい。
【０２４９】
図１７では、ユニットは直列に接続することができ（例えば、１７０２（ａ）−（ｃ））、不合格のユニット（例えば、１７０２（ｂ））が不良である場合にバイパスできる。ユニットはさらにスイッチング回路と並列に接続してもよい。例えば、いくつかの実施形態では、ユニット１７０２および１７１２は、図１７で示されるように、スイッチング回路１７２２および１７２８と接続することができる。図１７で示される例では、ユニット１７０２（ｂ）は不良である。例えば、ユニット１７０２（ｂ）は回路機能の試験を通過しない。したがって、ユニット１７０２（ｂ）は、例えば、アクティブ化スイッチ１３１４（図１７では示されない）を使用して無効にでき、および／またはスイッチング回路１７２２（ｂ）はユニット１７０２（ｂ）をバイパスするようにアクティブ化され、論理ブロック間の接続を維持することができる。
【０２５０】
したがって、複数の基本ユニットが直列に接続される場合、複数のユニットの各々は並列スイッチと並列に接続することができる。複数のユニットの１つと関連付けられる不良を検出した際に、複数のユニットの１つに接続される並列スイッチがアクティブ化され、複数のユニットのうち２つを接続することができる。
【０２５１】
他の実施形態では、図１７で示されるように、スイッチング回路１７２８は、１サイクル遅延または複数サイクル遅延を引き起こすことになる１または複数のサンプリング点を含み、ユニットの異なるライン間の同期を維持することができる。ユニットが無効になる場合、隣接する論理ブロック間の接続をショートさせることで、その他の計算で同期エラーが生成される場合がある。例えば、タスクがＡラインとＢラインの両方からデータを要求し、ＡおよびＢの各々が独立した一連のユニットによって搬送される場合、ユニットを無効にすることでさらなるデータ管理が必要になるライン間の非同期が生じるであろう。非同期が生じないようにするために、サンプル回路１７３０は、無効ユニット１７１２（ｂ）によって引き起こされる遅延をシミュレートすることができる。ただし、いくつかの実施形態では、並列スイッチはサンプル回路１７３０の代わりにアンチヒューズを含んでもよい。
【０２５２】
図１８は、本開示の実施形態と一致する、２次元アレイで接続された例示的なユニットのブロック図である。図１８はシステム全体またはチップを表し得る。あるいは、図１８は、他の機能性ブロックを含むチップ内のブロックを表し得る。
【０２５３】
ユニット１８０６は、メモリ論理１３０６および／またはビジネス論理１３０８など複数の論理ブロックを含む自律ユニットを表し得る。ただし、他の実施形態では、ユニット１８０６はビジネス論理１３０８などのロジックユニットを表し得る。図１８の考察は、可能な限り、図１３（例えば、メモリチップ１３００）で確認される上記の要素を指してもよい。
【０２５４】
図１８で示されるように、ユニットは、（１または複数のメモリ論理１３０６、ビジネス論理１３０８、または余剰ビジネス論理１３１０を含むまたは表し得る）ユニット１８０６が配電箱１８０８および接続盤１８１０を介して相互接続される２次元アレイで配置することができる。さらに、２次元アレイの構成を制御するために、２次元アレイは２次元アレイの周辺に入力／出力ブロック１８０４を含み得る。
【０２５５】
接続盤１８１０は、入力／出力ブロック１８０４から入力される信号に応答できるプログラマブルデバイスおよび再構成可能デバイスであってもよい。例えば、接続盤は、ユニット１８０６からの複数の入力ピンを含み得て、さらに配電箱１８０８に接続することができる。あるいは、接続盤１８１０は、プログラマブルロジックセルのピンをルーティングトラックと接続するスイッチグループを含んでもよく、配電箱１８０８は異なるトラックを接続するスイッチグループを含んでもよい。
【０２５６】
いくつかの実施形態では、接続盤１８１０および配電箱１８０８は、スイッチ１３１２および１３１４などの設定スイッチで実装することができる。このような実施形態では、接続盤１８１０および配電箱１８０８は、チップ起動時に実行される製造テスタまたはビルトインセルフテスト（ＢＩＳＴ）によって構成することができる。
【０２５７】
いくつかの実施形態では、接続盤１８１０および配電箱１８０８は、ユニット１８０６が回路機能の試験を受けた後で構成することができる。このような実施形態では、入力／出力ブロック１８０４は、試験信号をユニット１８０６に送信するのに使用することができる。試験結果に応じて、入力／出力ブロック１８０４は、試験プロトコルを通過しないユニット１８０６を無効にし、試験プロトコルを通過するユニット１８０６を有効にするように接続盤１８１０および配電箱１８０８を構成するプログラミング信号を送信することができる。
【０２５８】
このような実施形態では、複数のプライマリ論理ブロックおよび複数の余剰ブロックは２次元格子内の基板上に配置することができる。したがって、複数の基本ユニット１８０６の各々、および余剰ビジネス論理１３１０などの複数の余剰ブロックの各々は、配電箱１８０８と相互接続することができ、入力ブロックは２次元格子の各ラインおよび各列の周辺に配置することができる。
【０２５９】
図１９は、本開示の実施形態と一致する、複雑な接続における例示的なユニットのブロック図である。図１９はシステム全体を表し得る。あるいは、図１９は他の機能性ブロックを含むチップ内のブロックを表し得る。
【０２６０】
図１９の複雑な接続は、ユニット１９０２（ａ）−（ｆ）および設定スイッチ１９０４（ａ）−（ｈ）を含む。ユニット１９０２は、メモリ論理１３０６および／またはビジネス論理１３０８などの複数の論理ブロックを含む自律ユニットを表し得る。ただし、他の実施形態では、ユニット１９０２は、メモリ論理１３０６、ビジネス論理１３０８、または余剰ビジネス論理１３１０などの論理ユニットを表し得る。設定スイッチ１９０４は、任意の非アクティブ化スイッチ１３１２およびアクティブ化スイッチ１３１２を含み得る。
【０２６１】
図１９で示されるように、複雑な接続は２面のユニット１９０２を含んでもよい。例えば、複雑な接続は、ｚ軸で分離された２つの独立基板を含み得る。この代わりに、またはこれに加えて、ユニット１９０２は基板の２つの面に配置することができる。例えば、メモリチップ１３００の領域を小さくするために、基板１３０１は、２つの面を重ねて配置することができ、基板１３０１は３次元で配置される設定スイッチ１９０４と接続してもよい。設定スイッチは、非アクティブ化スイッチ１３１２および／またはアクティブ化スイッチ１３１４を含み得る。
【０２６２】
基板の第１の面は「メイン」ユニット１９０２を含み得る。これらのブロックはデフォルト値で有効にできる。このような実施形態では、第２の面は「余剰」ユニット１９０２を含み得る。これらのユニットはデフォルト値で無効にできる。
【０２６３】
いくつかの実施形態では、設定スイッチ１９０４はアンチヒューズを含み得る。したがって、ユニット１９０２を試験した後、ユニットが異なる面にあったとしても、いくつかのアンチヒューズを「常時接続」された無効の選択されたユニット１９０２に切り替えることによって、ブロックを機能性ユニットのタイル内に接続することができる。図１９で示される例では、「メイン」ユニットの１つ（ユニット１９０２（ｅ））は機能していない。図１９は、機能性がない、または未試験のブロックを陰影有りのブロックとして表示することができ、試験済みまたは機能性のあるブロックを陰影無しにできる。したがって、設定スイッチ１９０４は、異なる面の論理ブロックの１つ（例えば、ユニット１９０２（ｆ））がアクティブになるように構成することができる。この方法では、メイン論理ブロックの１つが不良だったとしても、予備の論理ユニットに取って代えることによってメモリチップは依然として機能する。
【０２６４】
図１９はさらに、メイン論理ブロックが機能的であるため、第２の面におけるユニット１９０２の１つ（すなわち、１９０２（ｃ））が未試験もしくは有効である様子を示す。例えば、図１９では、メインユニット１９０２（ａ）および１９０２（ｄ）は両方とも機能性試験を通過した。したがって、ユニット１９０２（ｃ）は未試験もしくは有効であった。そのため、図１９は、試験結果に応じてアクティブになる論理ブロックを明確に選択する能力を示す。
【０２６５】
いくつかの実施形態では、図１９で示されるように、第１の面における全てのユニット１９０２は、対応する予備ブロックまたは余剰ブロックを有することができるわけではない。ただし、他の実施形態では、全てのユニットは、全てのユニットがプライマリまたは余剰の両方である互いに余剰である完全余剰性であってもよい。さらに、図１９で示されるスター型接続形態のネットワークを採用できる実装もあれば、並列接続、直列接続を用いる、および／または異なる要素を並列または直列で設定スイッチと連結させることができる実装もある。
【０２６６】
図２０は、本開示の実施形態と一致する、余剰ブロックを有効にするプロセス２０００を示す例示的なフローチャートである。有効にするプロセス２０００は、メモリチップ１３００で、および特にＤＲＡＭメモリチップで実装することができる。いくつかの実施形態では、プロセス２０００は、メモリチップ基板上の複数の論理ブロックの各々に少なくとも１つの回路機能があるかを試験する段階と、試験結果に基づいて複数のプライマリ論理ブロック内に不良論理ブロックを識別する段階と、メモリチップ基板上の少なくとも１つの余剰ブロックまたは追加の論理ブロックに少なくとも１つの回路機能があるかを試験する段階と、外部信号を非アクティブ化スイッチに印加することによって少なくとも１つの不良論理ブロックを無効にする段階と、外部信号をアクティブ化スイッチに印加することによって少なくとも１つの余剰ブロックを有効にする段階と、アクティブ化スイッチが少なくとも１つの余剰ブロックと接続され、メモリチップ基板上に配置される段階と、を備える。図２０の記載は、プロセス２０００の各段階を以下でさらに詳述している。
【０２６７】
プロセス２０００は、ビジネスブロック１３０８などの複数の論理ブロック、および（例えば、余剰ビジネスブロック１３１０などの）複数の余剰ブロックを試験する段階を含み得る。試験する段階は、例えば、オンウェーハ試験用のプロービングステーションを用いたパッケージング化する段階の前であってもよい。ただし、有効にする段階２０００はさらに、パッケージング化する段階の後に実行してもよい。
【０２６８】
段階２００２における試験は、試験信号の有限数列をメモリチップ１３００内のあらゆる論理ブロック、またはメモリチップ１３００内の論理ブロックのサブセットに加える段階を含み得る。試験信号は、０または１を生み出すことが見込まれる計算を要求する段階を含んでもよい。他の実施形態では、試験信号は、特定のアドレスをメモリバンク内に読み込むこと、または、特定のメモリバンク内に書き込むことを要求することができる。
【０２６９】
試験技術は、段階２００２における反復プロセス時に論理ブロックの応答を試験するように実装することができる。例えば、データを書き込む命令をメモリバンク内に送信し、次いで書き込まれたデータの完全性を検証することによって論理ブロックを試験する段階を含んでもよい。いくつかの実施形態では、試験する段階は、データを逆にしてこのアルゴリズムを反復する段階を含み得る。
【０２７０】
代替実施形態では、段階２００２の試験する段階は、論理ブロックのモデルを実行して、試験命令のセットに基づいてメモリのターゲット画像を生成する段階を含み得る。次いで、同じ命令順序をメモリチップ内の論理ブロックに実行することができ、その結果を記録してもよい。さらに模擬のメモリの残像を試験から撮像した画像と比較して、あらゆる不一致が出たら不合格としてフラグを立てることができる。
【０２７１】
あるいは、段階２００２では、試験する段階は、診断プログラムを生成するが、結果は必ずしも予想されないシャドウモデルを行う段階を含んでもよい。代わりに、シャドウモデルを利用した試験は、メモリチップ上と模擬上の両方に並列に実行することができる。例えば、メモリチップ内の論理ブロックが命令またはタスクを完了すると、同じ命令を実行するよう模擬に知らせることができる。メモリチップ内の論理ブロックが命令を終了させるとすぐに、２つのモデルのアーキテクチャ状態を比較することができる。不一致があれば、その後不合格にフラグを立てる。
【０２７２】
いくつかの実施形態では、（例えば、メモリ論理１３０６、ビジネス論理１３０８、または余剰ビジネス論理１３１０の各々を含む）全ての論理ブロックは、段階２００２で試験してもよい。ただし、他の実施形態では、論理ブロックのサブセットだけが異なる試験回数で試験することができる。例えば、１回目の試験では、メモリ論理１３０６および関連付けられたブロックだけを試験することができる。２回目の試験では、ビジネス論理１３０８および関連付けられたブロックだけを試験することができる。３回目の試験では、１回目２回目の試験結果に応じて、余剰ビジネス論理１３１０と関連付けられた論理ブロックを試験することができる。
【０２７３】
プロセス２０００は段階２００４に続くことができる。段階２００４では、不良論理ブロックを識別することができ、さらに不良余剰ブロックも識別することができる。例えば、段階２００２の試験を通過しない論理ブロックを、段階２００４で不良ブロックとして識別することができる、ただし、他の実施形態では、いくつかの不良論理ブロックだけを最初に識別することができる。例えば、いくつかの実施形態では、ビジネス論理１３０８と関連付けられた論理ブロックだけを識別することができ、不良余剰ブロックを不良論理ブロックに替えるように求められた場合に不良余剰ブロックを識別するだけである。さらに、不良ブロックを識別する段階は、識別された不良ブロックに関する識別情報をメモリバンクまたは不揮発性メモリ上に書き込む段階を含んでもよい。
【０２７４】
段階２００６では、不良論理ブロックを無効にすることができる。例えば、コンフィギュレーション回路を使用して、不良論理ブロックをクロックノード、グラウンドノード、および／またはパワーノードから切断することによって不良論理ブロックを無効にすることができる。あるいは、不良論理ブロックを回避する配置で接続盤を構成することによって不良論理ブロックを無効にすることができる。しかし、他の実施形態では、アドレスマネージャ１３０２から不正アドレスを受信することによって不良論理ブロックを無効にしてもよい。
【０２７５】
段階２００８では、不良論理ブロックを複製する余剰ブロックを識別することができる。いくつかの論理ブロックが不合格になったとしてもメモリチップの同機能を維持するために、段階２００８では、不良論理ブロックを複製でき利用可能である余剰ブロックを識別することができる。例えば、ベクトル乗算を実行する論理ブロックが不良であると判定された場合、段階２００８では、アドレスマネージャ１３０２またはオンチップコントローラは、ベクトル乗算をさらに実行する利用可能な余剰論理ブロックを識別することができる。
【０２７６】
段階２０１０では、段階２００８で識別された余剰ブロックを有効にすることができる。段階２００６の無効にする動作とは逆に、段階２０１０では、識別された余剰ブロックをクロックノード、グラウンドノード、および／またはパワーノードに接続することによって識別された余剰ブロックを有効にすることができる。あるいは、識別された余剰ブロックを接続する配置で接続盤を構成することによって、識別された余剰ブロックを有効にすることができる。しかし、他の実施形態では、試験手順実行時間で実行アドレスを受信することによって、識別された余剰ブロックを有効にすることができる
【０２７７】
図２１は、本開示の実施形態と一致する、アドレス割り当てプロセス２１００を示す例示的なフローチャートである。アドレス割り当てプロセス２１００は、メモリチップ１３００および特にダイナミックランダムアクセスメモリ（ＤＲＡＭ）メモリチップに実装することができる。図１６に関連して記載されるように、いくつかの実施形態では、メモリチップ１３００内の論理ブロックはデータバスに接続することができ、アドレス認証を有することができる。プロセス２１００は、不良論理ブロックを無効にし、試験を通過する論理ブロックを有効にするアドレス割り当て方法を記載する。プロセス２１００で記載される段階は、チップ起動時に実行される製造テスタまたはビルトインセルフテスト（ＢＩＳＴ）によって実行される段階として記載される。ただし、メモリチップ１３００の他のコンポーネントおよび／または外部デバイスはさらにプロセス２１００の１または複数の段階を実行することができる。
【０２７８】
段階２１０２では、製造テスタは、チップレベルで各論理ブロックに不正ＩＤを割り当てることによって全ての論理ブロックおよび全ての余剰ブロックを無効にすることができる。
【０２７９】
段階２１０４では、製造テスタは論理ブロックの試験プロトコルを実行することができる。例えば、製造テスタは、段階２００２で記載される試験方法をメモリチップ１３００内の１または複数の論理ブロックに対して実行することができる。
【０２８０】
段階２１０６では、段階２１０４における試験結果に応じて、製造テスタは、論理ブロックが不良であるか否かを決定することができる。論理ブロックが不良でない場合（段階２１０６でｎｏの場合）、段階２１０８で、アドレスマネージャは実行ＩＤを試験済みの論理ブロックに割り当てることができる。論理ブロックが不良である場合（段階２１０６でｙｅｓの場合）、段階２１１０で、アドレスマネージャ１３０２は不正ＩＤを不良論理ブロックに残す場合がある。
【０２８１】
段階２１１２では、アドレスマネージャ１３０２は、不良論理ブロックを複製する余剰論理ロックを選択することができる。いくつかの実施形態では、不良論理ブロックを複製する余剰論理ブロックは、不良論理ブロックと同じコンポーネントおよび同じ接続を有することができる。ただし、他の実施形態では、余剰論理ブロックは、不良論理ブロックと異なるコンポーネントおよび／または異なる接続を有してもよいが、同等の動作を実行することができる。例えば、不良論理ブロックがベクトル乗算を実行するように設計される場合、選択された余剰論理ブロックが不良ユニットと同じアーキテクチャを有さない場合でも、選択された余剰論理ブロックも同様にベクトル乗算を実行することができる。
【０２８２】
段階２１１４では、アドレスマネージャ１３０２が余剰ブロックを試験することができる。例えば、製造テスタは、段階２１０４で適用された試験手法を、識別された余剰ブロックに適用することができる。
【０２８３】
段階２１１６では、段階２１１４における試験結果に基づいて、製造テスタは、余剰ブロックが不良であるか否かを決定することができる。段階２１１８では、余剰ブロックが不良でない場合（段階２１１６でｎｏの場合）、製造テスタは実行ＩＤを、識別された余剰ブロックに割り当てることができる。いくつかの実施形態では、プロセス２１００は、段階２１１８の後に段階２１０４に戻り、メモリチップ内の全ての論理ブロックを試験するために反復ループを作ってもよい。
【０２８４】
製造テスタは、余剰ブロックが不良であることを決定する場合（段階２１１６でｙｅｓの場合）、段階２１２０で、製造テスタは、追加の余剰ブロックが利用可能であるかを決定することができる。例えば、製造テスタは、利用可能な余剰論理ブロックに関する情報を備えるメモリバンクに問い合わせることができる。余剰論理ブロックが利用可能である場合（段階２１２０でｙｅｓの場合）、製造テスタは段階２１１２に戻り、不良論理ブロックを複製する新しい余剰論理ブロックを識別することができる。余剰論理ブロックが利用可能でない場合（段階２１２０でｎｏの場合）、段階２１２２で、製造テスタはエラー信号を生成することができる。エラー信号は、不良論理ブロックおよび不良余剰ブロックに関する情報を含み得る。
【０２８５】
［連結メモリバンク］
本開示の実施形態はさらに、高性能分散型プロセッサを含み得る。この高性能分散型プロセッサは、メモリバンクと処理ユニットとをインタフェースするメモリコントローラを含み得る。高性能分散型プロセッサは、計算するために処理ユニットへのデータの供給を促進するように構成可能にできる。例えば、処理ユニットがタスクを実行する２つのデータインスタンスを必要とする場合、メモリコントローラは、通信ラインが２つのデータインスタンスからの情報に独立してアクセスできるように構成することができる。本開示のメモリアーキテクチャは、複雑なキャッシュメモリのスキームおよび複雑なレジスタファイルのスキームと関連付けられるハードウェア要件を最小限にしようとする。通常、プロセッサチップは、コアがレジスタと直接機能できるようにするキャッシュ階層を含んでいる。しかしながら、キャッシュ操作はかなりのダイ領域を必要とし、追加電力を消費する。本開示のメモリアーキテクチャは、論理コンポーネントをメモリ内に追加することによってキャッシュ階層を使用していない。
【０２８６】
本開示のアーキテクチャはさらに、メモリバンク内に戦略的な（あるいは最適化された）データ配置を可能にする。メモリバンクが単一ポートおよび高遅延を有しているとしても、本開示のメモリアーキテクチャであればメモリバンクの異なるブロック内にデータを戦略的に配置することによって高性能を可能にし、メモリアクセスボトルネックを回避できる。途切れることなくデータを処理ユニットに流すために、コンパイルを最適化する段階は、メモリバンク内に専用タスク向けにどのようにデータを記憶すべきか、またはメモリバンク内に汎用タスク向けにどのようにデータを記憶すべきかを決定することができる。次いで、処理ユニットとメモリバンクとをインタフェースするメモリコントローラは、専用処理ユニットが演算を実行するデータを要求する場合に、専用処理ユニットにアクセス権を与えるように構成することができる。
【０２８７】
メモリチップの構成は、処理ユニット（例えば、構成マネージャ）または外部インタフェースによって実行することができる。メモリチップの構成はさらに、コンパイラまたはその他のソフトウェアツールによって書き込むことができる。さらに、メモリコントローラの構成は、メモリバンク内の利用可能なポートおよびメモリバンク内のデータ編成に基づいてもよい。
したがって、本開示のアーキテクチャは、異なるメモリブロックからの絶え間ないデータフローまたは同時情報を処理ユニットに提供することができる。この方法では、遅延ボトルネックまたはキャッシュメモリ要件を回避することによってメモリ内の計算タスクを迅速に処理することができる。
【０２８８】
さらに、メモリチップ内に記憶されるデータは、コンパイルを最適化する段階に基づいて配置することができる。コンパイルによって、遅延に関連付けられるメモリ待ち時間なしにプロセッサがタスクを処理ユニットに効率的に割り当てる処理ルーチンを構築することが可能になる場合がある。コンパイルはコンパイラによって実行することができ、基板内の外部インタフェースに接続されるホストに送信することができる。通常、あるアクセスパターンが高遅延したり、および／またはポートの数が少なかったりすると、データを要求する処理ユニットにデータボトルネックがもたらされる場合がある。しかしながら、本開示のコンパイルは、不利を招くメモリタイプを用いても処理ユニットが継続してデータを受信できるようにデータをメモリバンク内に配置することができる。
【０２８９】
さらに、いくつかの実施形態では、構成マネージャは、タスクが要求する計算に基づいて必要な処理ユニットに信号を送ることができる。チップ内の異なる処理ユニットまたは異なる論理ブロックは、異なるタスクの専用ハードウェアまたは専用アーキテクチャを有することができる。そのため、実行されることになるタスクに応じて、処理ユニットまたは処理ユニットのグループを選択してタスクを実行することができる。基板上のメモリコントローラは、プロセッササブユニットの選択に従ってデータを転送する、またはアクセス権を与えてデータ転送速度を高めるように構成可能にできる。例えば、コンパイルの最適化およびメモリアーキテクチャに基づいて、処理ユニットは、タスクを実行するよう求められた場合、メモリバンクにアクセス権を与えることができる。
【０２９０】
さらに、チップアーキテクチャは、メモリバンク内のデータにアクセスする所要時間を削減することによってデータ転送を促進するオンチップコンポーネントを含み得る。したがって、本開示は、コンパイルを最適化にする段階に加えて、単一メモリインスタンスを使用して専用タスクまたは汎用タスクを実行できる高性能プロセッサのチップアーキテクチャを記載する。メモリインスタンスは、ランダムアクセスの高遅延を有する場合がある、および／またはポート（例えばＤＲＡＭデバイスまたはその他のメモリ指向技術で使用されるポート）の数が少ない場合がある。しかし、本開示のアーキテクチャは、絶え間なく（またはほぼ連続的に）メモリバンクから処理ユニットまでデータを流すことを可能にすることによってこれらの欠陥を克服することができる。
【０２９１】
本出願では、同時通信はクロックサイクル内の通信を指してもよい。あるいは、同時通信は所定時間内で情報を送信することを指してもよい。例えば、同時通信は数ナノ秒以内での通信を指してもよい。
【０２９２】
図２２は、本開示の実施形態と一致する、例示的な処理装置のブロック図を提供する。図２２のＡ）は、メモリコントローラ２２１０がマルチプレクサを使用して第１のメモリブロック２２０２および第２のメモリブロック２２０４を接続する処理装置２２００の第１の実施形態を示す。メモリコントローラ２２１０はさらに、少なくとも１つの構成マネージャ２２１２と、論理ブロック２２１４と、複数のアクセラレータ２２１６（ａ）−（ｎ）と、を接続することができる。図２２のＢ）は、メモリコントローラ２２１０がバスを使用してメモリブロック２２０２および２２０４を接続し、バスがメモリコントローラ２２１０を少なくとも１つの構成マネージャ２２１２と、論理ブロック２２１４と、複数のアクセラレータ２２１６（ａ）−（ｎ）とを接続する、処理装置２２００の第２の実施形態を示す。さらに、ホスト２２３０は外部にあってもよく、例えば外部インタフェースを介して処理装置２２００に接続することができる。
【０２９３】
メモリブロック２２０２および２２０４は、ＤＲＡＭマットまたはＤＲＡＭマットのグループと、ＤＲＡＭバンクと、ＭＲＡＭユニット＼ＰＲＡＭユニット＼ＲｅＲＡＭユニット＼ＳＲＡＭユニットと、Ｆｌａｓｈマットと、またはその他のメモリ技術と、を含み得る。メモリブロック２２０２および２２０４は、代替として、不揮発性メモリと、フラッシュメモリデバイスと、抵抗ランダムアクセスメモリ（ＲｅＲＡＭ）デバイスと、または磁気ランダムアクセスメモリ（ＭＲＡＭ）デバイスと、を含み得る。
【０２９４】
メモリブロック２２０２および２２０４は、複数のワード線（図示せず）および複数のビット線（図示せず）間の行および列で配置される複数のメモリセルを追加として含み得る。メモリセルの各行のゲートは、複数のワード線の各ワード線に接続することができる。メモリセルの各列は、複数のビット線の各ビット線に接続することができる。
【０２９５】
他の実施形態では、（メモリブロック２２０２および２２０４を含む）メモリ領域は、シンプルなメモリインスタンスから構成される。本願では、「メモリインスタンス」という用語は、「メモリブロック」という用語と交換可能に使用することができる。メモリインスタンス（またはメモリブロック）は不十分な特徴を有する場合がある。例えば、メモリは、たった１ポートのメモリになる場合があり、高遅延ランダムアクセスを有する場合がある。この代わりに、またはこれに加えて、メモリは、列変換およびライン変換時にアクセスができなくなる可能性があり、例えば、容量充電および／または回路起動に関連するデータアクセス問題に直面する場合がある。しかしながら、図２２で示されるアーキテクチャは、メモリインスタンスと処理ユニット間で専用接続を可能にすることによって、およびブロックの特徴を適時考慮に入れてデータを配置することによって、さらにメモリデバイス内の並列処理を促進する。
【０２９６】
いくつかのデバイスアーキテクチャにおいて、メモリインスタンスは、並列演算を促進する複数ポートを含み得る。ただし、このような実施形態では、データがチップアーキテクチャに基づいてコンパイルおよび編成される場合、チップはさらに性能向上を実現できる。例えば、１ポートのメモリを使用したとしてもメモリ領域に容易にアクセスできるように命令を提供することによって、およびデータ配置を整理することによって、コンパイラはメモリ領域内のアクセスの効率性を高めることができる。
【０２９７】
さらに、メモリブロック２２０２および２２０４は、単一チップ内の複数のメモリタイプであってもよい。例えば、メモリブロック２２０２および２２０４は、混載フラッシュメモリ（ｅＦｌａｓｈ）および混載ダイナミックランダムアクセスメモリ（ｅＤＲＡＭ）であってもよい。
さらに、メモリブロックは、ＲＯＭのインスタンスを備えるＤＲＡＭを含んでもよい。
【０２９８】
メモリコントローラ２２１０は、メモリアクセスを処理し、結果を残りのモジュールに返す論理回路を含み得る。例えば、メモリコントローラ２２１０は、メモリブロックと処理ユニット間にデータを転送する、またはメモリブロックへのアクセス権を与えるマルチプレクサなどのアドレスマネージャおよびセレクションデバイスを含み得る。あるいは、メモリコントローラ２２１０は、本システムのメモリクロックの立ち上がりおよび立ち下がりエッジの両方にデータを転送するダブルデータレート（ＤＤＲ）同期ダイナミックランダム アクセスメモリ（ＳＤＲＡＭ）を駆動させるのに使用されるダブルデータレート（ＤＤＲ）メモリコントローラを含み得る。
【０２９９】
さらに、メモリコントローラ２２１０は、デュアルチャネルメモリコントローラを構成することができる。デュアルチャネルメモリを組み込むことによって、メモリコントローラ２２１０を介して並列アクセスラインを制御しやすくできる。並列アクセスラインは、複数のラインが同時に使用された場合にデータの同期をしやすくするために同じ長さを有するように構成することができる。この代わりに、またはこれに加えて、並列アクセスラインは、メモリバンクの複数のメモリポートへのアクセスを可能にできる。
【０３００】
いくつかの実施形態では、処理装置２２００は、処理ユニットに接続できる１または複数のマルチプレクサを含み得る。処理ユニットは、マルチプレクサに直接接続できる構成マネージャ２２１２と、論理ブロック２２１４と、アクセラレータ２２１６と、を含み得る。さらに、メモリコントローラ２２１０は、複数のメモリバンクまたはブロック２２０２および２２０４からの少なくとも１つのデータ入力、ならびに複数の処理ユニットの各々に接続される少なくとも１つのデータ出力、を含み得る。この構成を用いれば、メモリコントローラ２２１０は、２回のデータ入力によってメモリバンクまたはメモリブロック２２０２および２２０４からデータを同時に受信し、２回のデータ出力によって受信したデータを少なくとも１つの選択された処理ユニットに同時に送信することができる。ただし、いくつかの実施形態では、少なくとも１回のデータ入力および少なくとも１回のデータ出力は、読み込み動作または書き込み動作だけを可能にする単一ポートで実装することができる。このような実施形態では、単一ポートは、データ、アドレス、およびコマンドラインを含むデータバスとして実装してもよい。
【０３０１】
メモリコントローラ２２１０は、複数のメモリブロック２２０２および２２０４の各々に接続でき、さらに例えば選択スイッチによって処理ユニットに接続してもよい。また、構成マネージャ２２１２と、論理ブロック２２１４と、アクセラレータ２２１６と、を含む基板上の処理ユニットは、メモリコントローラ２２１０に独立して接続することができる。いくつかの実施形態では、構成マネージャ２２１２は、実行されるタスクの指示を受信することができ、それに応答して、メモリに記憶されるまたは外部に供給される構成に従ってメモリコントローラ２２１０と、アクセラレータ２２１６と、および／または論理ブロック２２１４と、を構成することができる。あるいは、メモリコントローラ２２１０は、外部インタフェースによって構成することができる。タスクは、複数の処理ユニットから少なくとも１つの選択された処理ユニットを選択するために使用できる少なくとも１つの計算を要求できる。この代わりに、またはこれに加えて、この選択は、少なくとも１つの計算を実行するために、選択された処理ユニットの能力に少なくとも部分的に基づくことができる。それに応答して、メモリコントローラ２２１０は、専用バスを使用して、および／またはパイプラインメモリアクセスで、メモリバンクへのアクセス権を与えることができる、または少なくとも１つの選択された処理ユニットと少なくとも２つのメモリバンクとの間にデータを転送することができる、
【０３０２】
いくつかの実施形態では、少なくとも２つのメモリブロックの第１のメモリブロック２２０２は、複数の処理ユニットの第１の側に配置することができ、少なくとも２つのメモリバンクの第２のメモリバンク２２０４は、第１の側に向かい合う複数の処理ユニットの第２の側に配置することができる。さらに、通信ラインが第１のメモリバンクまたは第１のメモリブロック２２０２に開放されるクロックサイクル中に、タスクを実行する選択された処理ユニット、例えばアクセラレータ２２１６（ｎ）は、第２のメモリバンク２２０４にアクセスするように構成することができる。あるいは、通信ラインが第１のメモリブロック２２０２にオープンになるクロックサイクル中に、選択された処理ユニットはデータを第２のメモリブロック２２０４に転送するように構成することができる。
【０３０３】
いくつかの実施形態では、メモリコントローラ２２１０は、図２２で示されるように、独立要素として実装することができる。ただし、他の実施形態では、メモリコントローラ２２１０は、メモリ領域内に混載することができる、またはアクセラレータ２２１６（ａ）−（ｎ）に沿って配置することができる。
【０３０４】
処理装置２２００内の処理領域は、構成マネージャ２２１２と、論理ブロック２２１４と、アクセラレータ２２１６（ａ）−（ｎ）と、を含み得る。アクセラレータ２２１６は、予め定義された機能を備える複数の処理回路を含み得て、特定応用によって定義することができる。例えば、アクセラレータは、モジュール間でメモリの移動処理を行うベクトル乗算（ＭＡＣ）ユニットまたは直接メモリアクセス（ＤＭＡ）ユニットであってもよい。アクセラレータ２２１６はさらに、アクセラレータ自体のアドレスを計算し、メモリコントローラ２２１０からデータを要求するまたはメモリコントローラ２２１０にデータを書き込むことができる場合がある。例えば、構成マネージャ２２１２は、アクセラレータ２２１６の少なくとも１つにメモリバンクにアクセスできることを知らせることができる。次いでアクセラレータ２２１６は、メモリコントローラ２２１０がデータをアクセラレータ自体に転送する、またはメモリコントローラがアクセラレータ自体にアクセス権を与えるように構成することができる。さらに、アクセラレータ２２１６は、少なくとも１つの算術論理演算ユニット（ＡＬＵ）と、少なくとも１つのベクトル処理ロジックユニットと、少なくとも１つのストリング比較ロジックユニットと、少なくとも１つのレジスタと、少なくとも１つの直接メモリアクセス（ＤＭＡ）と、を含み得る。
【０３０５】
構成マネージャ２２１２は、アクセラレータ２２１６およびタスクの命令実行を構成するデジタル処理回路を含み得る。例えば、構成マネージャ２２１２は、メモリコントローラ２２１０および複数のアクセラレータ２２１６の各々に接続することができる。構成マネージャ２２１２は、アクセラレータ２２１６の構成を保持するためにその独自の専用メモリを有することができる。構成マネージャ２２１２は、メモリバンクを使用して、メモリコントローラ２２１０を介してコマンドおよび構成をフェッチすることができる。あるいは、構成マネージャ２２１２は外部インタフェースからプログラムしてもよい。いくつかの実施形態では、構成マネージャ２２１２は、独自のキャッシュ階層を備えるオンチップ縮小命令セットコンピューティング（ＲＩＳＣ）または複雑なオンチップＣＰＵで実装することができる。いくつかの実施形態では、さらに構成マネージャ２２１２を省略することができ、アクセラレータは外部インタフェースを介して構成することができる。
【０３０６】
処理装置２２００はさらに外部インタフェース（図示せず）含んでもよい。外部インタフェースは、外部ホスト２２３０またはオンチップメインプロセッサからコマンドを受信するメモリバンクコントローラなどの上位からメモリまでのアクセスを可能にする、または、外部ホスト２２３０またはオンチップメインプロセッサからメモリまでのアクセスを可能にする。外部インタフェースは、構成マネージャ２２１２またはユニット２２１４およびアクセラレータ２２１６それら自体がその後使用するメモリコントローラ２２１０を介して構成またはコードをメモリに書き込むことによって、構成マネージャ２２１２およびアクセラレータ２２１６のプログラミングを可能にできる。ただし、外部インタフェースはさらに、メモリコントローラ２２１０を経由して転送されることなく処理ユニットを直接プログラムできる。構成マネージャ２２１２がマイクロコントローラである場合、構成マネージャ２２１２は、外部インタフェースを介してメインメモリからコントローラのローカルメモリまでのコードのローディングを可能にできる。メモリコントローラ２２１０は、外部インタフェースからの要求の受信に応答してタスクを割り込ませるように構成することができる。
【０３０７】
外部インタフェースは、論理回路と関連付けられる複数のコネクタを含み得て、論理回路は処理装置上の様々な要素にグルーレスインタフェースを提供する。外部インタフェースは、データ読み込みを入力し、データ書き込みを出力するデータ入力／データ出力と、外部アドレス出力と、チップイネーブル（ＣＥ０）の外部チップセレクトピンと、アクティブローのチップセレクタと、バイトイネーブルピンと、メモリサイクル上の待機状態のピンと、書き込みイネーブルピンと、出力イネーブルアクティブピンと、読み込みおよび書き込みイネーブルピンと、を含み得る。したがって、外部インタフェースは、処理を制御し、処理装置から情報を得る要求された入力および出力を有する。例えば、外部インタフェースは、電子素子技術連合評議会（ＪＥＤＥＣ）のダブルデータレート（ＤＤＲ）規格に準拠することができる。この代わりに、またはこれに加えて、外部インタフェースは、シリアルペリフェラルインターフェイス（ＳＰＩ）＼オクタルシリアルペリフェラルインターフェイス（ＯＳＰＩ）またはユニバーサル非同期レシーバトランスミッタ（ＵＡＲＴ）など、その他の規格に準拠することができる。
【０３０８】
いくつかの実施形態では、外部インタフェースはチップ基板上に配置することができ、外部ホスト２２３０に接続することができる。外部ホストは、外部インタフェースを介してメモリブロック２２０２および２２０４、メモリコントローラ２２１０、ならびに処理ユニットにアクセスできる。この代わりに、またはこれに加えて、外部ホスト２２３０はメモリに読み込みおよび書き込みをすることができ、または、読み込みおよび書き込みコマンドを介して構成マネージャ２２１２に知らせてプロセスの開始および／またはプロセスの停止などの動作を実行することができる。さらに、外部ホスト２２３０はアクセラレータ２２１６を直接構成することができる。いくつかの実施形態では、外部ホスト２２３０は読み込み／書き込み動作を直接メモリブロック２２０２および２２０４に実行することができる。
【０３０９】
いくつかの実施形態では、構成マネージャ２２１２およびアクセラレータ２２１６は、ターゲットタスクに応じてダイレクトバスを使用して、デバイス領域をメモリ領域と接続するように構成することができる。例えば、アクセラレータ２２１６のサブセットがタスクを実行するのに必要な計算を実行する機能を有する場合、アクセラレータ２２１６のサブセットは、メモリインスタンス２２０４と接続することができる。このような分離を行うことによって、専用アクセラレータがメモリブロック２２０２および２２０４に必要な帯域幅（ＢＷ）を確実に得ることが可能である。さらに、専用バスを備えたこのような構成により、大型メモリを小型のインスタンスまたはブロックに分割できる可能性がある。なぜなら、メモリインスタンスをメモリコントローラ２２１０に接続することにより、高遅延時間でも低遅延時間でも異なるメモリで迅速にデータにアクセスできるためである。接続の並列化を実現するために、メモリコントローラ２２１０は、データ、アドレス、および／または制御バスでメモリインスタンスの各々に接続することができる。
【０３１０】
上記で考察したメモリコントローラ２２１０の包含により、処理装置内のキャッシュ階層または複雑なレジスタファイルの要件を無くすことができる。キャッシュ階層を追加して追加機能を与えることができるが、処理装置２２００内のアーキテクチャにより設計者は処理動作に基づいて十分なメモリブロックまたはインスタンスを追加することができ、それに応じてキャッシュ階層無しでインスタンスを管理することができる。例えば、処理装置２２００内のアーキテクチャにより、パイプラインメモリアクセスを実装することによってキャッシュ階層の要件を無くすことができる。パイプラインメモリアクセスでは、処理ユニットは、いくつかのデータラインを開放（またはアクティブ化）でき、その他のデータラインがデータを受信または送信するあらゆるサイクルで持続データフローを受信することができる。独立した通信ラインを使用した持続データフローにより、実行スピードの改善が可能になる場合があり、ライン変換による最小の待ち時間が可能になる場合がある。
【０３１１】
さらに、図２２で開示されたアーキテクチャはパイプラインメモリアクセスを有効にし、少ない数のメモリブロックでデータを編成し、ライン変換で生じる電力損失の無駄をなくすことが可能となり得る。例えば、いくつかの実施形態では、コンパイラは、メモリバンク内のデータ編成またはデータ編成方法をホスト２２３０に通信して所定のタスク中にデータにアクセスしやすくできる。次いで、構成マネージャ２２１２は、どのメモリバンクが、場合によっては、メモリバンクのどのポートがアクセラレータによってアクセスできるかを定義することができる。こうしたメモリバンク内のデータ記憶位置間の同期、およびデータへのアクセス方法で計算タスクを向上するために、最小の待ち時間でデータをアクセラレータに供給する。例えば、構成マネージャ２２１２がＲＩＳＣ＼ＣＰＵを含む実施形態では、このデータへのアクセス方法はオフラインソフトウェア（ＳＷ）で実装することができ、次いで構成マネージャ２２１２はこの方法を実行するようにプログラムできる。この方法は、ＲＩＳＣ／ＣＰＵコンピュータで実行可能であるあらゆる言語で考案でき、あらゆるプラットフォーム上で実行できる。この方法の入力は、メモリコントローラの裏側のメモリ、および、データ自体ならびにメモリアクセスパターンの構成を含み得る。さらに、この方法は、本実施形態に特有の言語またはマシン言語で実装することができ、さらに２進法またはテキストにおける一連のただの構成値であってもよい。
【０３１２】
上記のように、いくつかの実施形態では、コンパイラは、パイプラインメモリアクセスを整えるにあたりメモリブロック２２０２および２２０４内にデータを編成する命令をホスト２２３０に提供することができる。パイプラインメモリアクセスは概して、複数のメモリバンクまたはメモリブロック２２０２および２２０４の複数のアドレスを受信する段階と、独立したデータラインを使用した受信アドレスに従って複数のメモリバンクにアクセスする段階と、第１の通信ラインを介して第１のアドレスから複数の処理ユニットの少なくとも１つにデータを供給し、第２の通信ラインを第２のアドレスに開放する段階であって、第１のアドレスが複数のメモリバンクの第１のメモリバンクに存在し、第２のアドレスが複数のメモリバンクの第２のメモリバンク２２０４に存在する段階と、第２の通信ラインを介して第２のアドレスから複数の処理ユニットの少なくとも１つにデータを供給し、第３の通信ラインを第２のクロックサイクル内の第１の通信ラインにおける第１のメモリバンク内の第３のアドレスに開放する段階と、を含み得る。いくつかの実施形態では、パイプラインメモリアクセスは、単一ポートに接続される２つのメモリブロックで実行することができる。このような実施形態では、メモリコントローラ２２１０は、単一ポートの裏側に２つのメモリブロックを隠すことができるが、パイプラインメモリアクセス法でデータを処理ユニットに送信することができる。
【０３１３】
いくつかの実施形態では、コンパイラは、タスクを実行する前にホスト２２３０上で実行することができる。このような実施形態では、コンパイラは、メモリデバイスのアーキテクチャに基づいてデータフローの構成を決定できる場合がある。これは、このデータフロー構成がコンパイラに周知であるためである。
【０３１４】
他の実施形態では、メモリブロック２２０４および２２０２の構成がオフラインタイムで知られていない場合、データをメモリブロック内に配置できるパイプラインメモリアクセス法を、計算を開始する前にホスト２２３０上で実行できる。例えば、ホスト２２３０はメモリブロック２２０４および２２０２内に直接データを書き込むことができる。このような実施形態では、構成マネージャ２２１２およびメモリコントローラ２２１０などの処理ユニットは、実行時まで、要求されるハードウェアに関する情報を有することができない。次いで、タスクが実行を開始するまでアクセラレータ２２１６の選択を遅延させることが必要になる場合がある。この場合、処理ユニットまたはメモリコントローラ２２１０は、アクセラレータ２２１６を任意に選択することができ、タスクが実行されると同時に修正できる試験データアクセスパターンを作ることができる。
【０３１５】
しかしながら、タスクが前もって知られる場合、ホスト２２３０が構成マネージャ２２１２などの処理ユニットに提供するメモリバンク内のデータおよび命令をコンパイラが編成することでアクセス待ち時間を最小限にする信号接続が設定される。例えば、場合によってはアクセラレータ２２１６によってｎワードが同時に必要になる場合がある。しかしながら、「ｍ」および「ｎ」が整数であり、ｍ＜ｎのときに各メモリインスタンスはｍワードだけの引き出しのサポートをする。したがって、コンパイラは、必要とされるデータを異なるメモリインスタンスまたはメモリブロック全体に入れることで、データアクセスを促進させる。さらに、ラインのミス待ち時間を回避するために、ホストは、処理装置２２００が複数のメモリインスタンスを含む場合、異なるメモリインスタンスの異なるラインにデータを分割することができる。データを分割することで、隣のインスタンス内の隣のデータラインにアクセスし、さらに現在のインスタンスからデータを使用することができる。
【０３１６】
例えば、アクセラレータ２２１６（ａ）は、２つのベクトルを逓倍するように構成することができる。ベクトルの各々は、メモリブロック２２０２および２２０４などの独立したメモリブロックの中に記憶することができ、各ベクトルは複数のワードを含み得る。したがって、アクセラレータ２２１６（ａ）が乗算を要求するタスクを完了するためには、２つのメモリブロックにアクセスし、複数のワードを引き出すことが必要になる場合がある。ただし、いくつかの実施形態では、メモリブロックはクロックサイクル毎に１つのワードへのアクセスを可能にするだけである。例えば、メモリブロックは単一ポートを有することができる。この場合、動作中にデータ送信を促進するために、コンパイラは、ベクトルを構成するワードを異なるメモリブロック内に編成して、ワードの並列読み込みおよび／または同時読み込みを可能にできる。この場合、コンパイラは、専用ラインを有するメモリブロック内にワードを記憶することができる。例えば、各ベクトルが２つのワードを含み、メモリコントローラが４つのメモリブロックへの直接アクセスを有する場合、コンパイラは、データを４つのメモリブロックに配置することができ、各１つのメモリブロックがワードを送信し、データ配信を促進する。さらに、メモリコントローラ２２１０が各メモリブロックへの単一接続よりも多い接続を有することができる場合の実施形態では、コンパイラは、構成マネージャ２２１２（またはその他の処理ユニット）が特殊ポートにアクセスするように命令することができる。この方法では、処理装置２２００は、ワードをいくつかのライン内に同時にローディングし、データを他のライン内に送信することによってデータを処理ユニットに継続して提供するパイプラインメモリアクセスを実行することができる。したがって、このパイプラインメモリアクセスは待ち時間問題を回避することができる。
【０３１７】
図２３は、本開示の実施形態と一致する、例示的な処理装置２３００のブロック図である。ブロック図は、乗累算ユニット２３０２、（構成マネージャ２２１２と同じ、または類似する）構成マネージャ２３０４、（メモリコントローラ２２１０と同じ、または類似する）メモリコントローラ２３０６、および複数のメモリブロック２３０８（ａ）−（ｄ）の形態の単一アクセラレータを図示したシンプルな処理装置２３００を示す。
【０３１８】
いくつかの実施形態では、乗累算ユニット２３０２は特定のタスクを処理する特殊なアクセラレータであってもよい。例として、処理装置２３００には２次元コンボリューションが割り当てられる。次いで、構成マネージャ２３０４は、適切なハードウェアを有するアクセラレータにタスクと関連付けられた計算を実行するように知らせることができる。例えば、乗累算ユニット２３０２は、４つの内部インクリメントカウンタ（コンボリューション計算が必要とする４つのループを管理する論理加算器およびレジスタ）と、乗累算ユニットと、を含み得る。構成マネージャ２３０４は、乗累算ユニット２３０２に入力データを処理し、タスクを実行するように知らせることができる。構成マネージャ２３０４はタスクを実行する指示を乗累算ユニット２３０２に送信することができる。この場合、乗累算ユニット２３０２は計算されたアドレスを順に処理し、数を乗算し、それらを内部レジスタに累算することができる。
【０３１９】
いくつかの実施形態では、構成マネージャ２３０４はアクセラレータを構成することができ、メモリコントローラ２３０６は専用バスを使用してブロック２３０８および乗累算ユニット２３０２にアクセス権を与えることができる。ただし、他の実施形態では、メモリコントローラ２３０６は、構成マネージャ２３０４または外部インタフェースから受信した命令に基づいてアクセラレータを直接構成することができる。この代わりに、またはこれに加えて、構成マネージャ２３０４は、いくつかの構成を予めロードすることができ、アクセラレータが異なるサイズの異なるアドレス上に繰り返し実行することを可能にする。このような実施形態では、構成マネージャ２３０４は、コマンドを記録してからコマンドをアクセラレータ２２１６などの複数の処理ユニットの少なくとも１つに送信するキャッシュメモリを含み得る。ただし、他の実施形態では、構成マネージャ２３０４はキャッシュを含まない場合がある。
【０３２０】
いくつかの実施形態では、構成マネージャ２３０４またはメモリコントローラ２３０６は、タスクにアクセスする必要があるアドレスを受信することができる。構成マネージャ２３０４またはメモリコントローラ２３０６は、アドレスがメモリブロック２３０８の１つに向くローデッドライン内にすでにあるか否かをレジスタが決定するのをチェックすることができる。仮にそうである場合、メモリコントローラ２３０６はメモリブロック２３０８からワードを読み込み、読み込んだワードを乗累算ユニット２３０２に通信することができる。アドレスがローデッドライン内にない場合、構成マネージャ２３０４は、メモリコントローラ２３０６がラインをロードし、アドレスが引き出されるまで遅延してしまうことを乗累算ユニット２３０２に知らせることを要求する場合がある。
【０３２１】
いくつかの実施形態では、図２３で示されるように、メモリコントローラ２３０６は２つの独立したアドレスから２回の入力を含み得る。ただし、２つ以上のアドレスに同時にアクセスする必要がある場合、およびこれらのアドレスが単一メモリブロック内にある（例えば、アドレスがメモリブロック２３０８（ａ）の中にある）場合、メモリコントローラ２３０６または構成マネージャ２３０４は例外を発生させる場合がある。あるいは、構成マネージャ２３０４は、２つのアドレスが単一ラインだけを通ってアクセスできる場合に、無効データ信号を返信できる。他の実施形態では、ユニットは、全ての必要なデータを引き出すことが可能になるまで、プロセスの実行を遅延させることができる。これでは、全体的に性能を低下させる可能性がある。しかしながら、コンパイラは、遅延しないようにさせる構成およびデータ配置を発見できる可能性がある。
【０３２２】
いくつかの実施形態では、コンパイラは、処理装置２３００に対して構成または命令のセットを構築することができる。その構成または命令のセットは、単一メモリブロックから複数のアドレスにアクセスする必要があるがメモリブロックは１つのポートを有するという状況に構成マネージャ２３０４およびメモリコントローラ２３０６およびアクセラレータ２３０２が対処するように構成することができる。例えば、コンパイラは、処理ユニットがメモリブロック２３０８内の複数のラインにアクセスできるようにデータをメモリブロック２３０８内に再配置できる。
【０３２３】
さらに、メモリコントローラ２３０６は、１回以上の入力に同時に作用することもできる。例えば、メモリコントローラ２３０６は、１つのポートを通ってメモリブロック２３０８の１つにアクセスし、データを供給しながらもう１回の入力で異なるメモリブロックからの要求を受信できることを可能にする。そのため、この動作により、関連するメモリブロックと通信する専用ラインからデータを受信する例示的な２次元コンボリューションがアクセラレータ２２１６に割り当てられることにつながり得る。
【０３２４】
この代わりに、またはこれに加えて、メモリコントローラ２３０６または論理ブロックは、あらゆるメモリブロック２３０８のリフレッシュカウンタを保持し、全てのラインのリフレッシュに対処することができる。このようなリフレッシュカウンタを有することで、デバイスからの無駄なアクセス時間中にメモリコントローラ２３０６をリフレッシュサイクルに組み込むことができる。
【０３２５】
さらに、メモリコントローラ２３０６は、パイプラインメモリアクセスを実行して、データを供給する前にアドレスを受信し、メモリブロック内にラインを開放するように構成可能にできる。パイプラインメモリアクセスは、途切れることなく、またはクロックサイクルを遅延させることなく、データを処理ユニットに供給することができる。例えば、メモリコントローラ２３０６または論理ブロックの１つが図２３内の右側ラインでデータにアクセスし、左側ライン内にデータを送信することができる。これらの方法は、図２６に関連してより詳細に説明することになる。
【０３２６】
要求されたデータに応答して、処理装置２３００は、マルチプレクサおよび／またはその他のスイッチ素子を使用して、サービスを受けているのがどのデバイスかを選んで所定のタスクを実行できる。例えば、構成マネージャ２３０４は、少なくとも２つのデータラインが乗累算ユニット２３０２に到達するようにマルチプレクサを構成することができる。この方法では、複数アドレスからの２次元コンボリューションなどのデータを要求するタスクをより迅速に実行することができる。なぜなら、コンボリューション時に乗算を要求するベクトルまたはワードが、１クロックで同時に処理ユニットに到達できるからである。このデータ転送法により、アクセラレータ２２１６などの処理ユニットは結果を迅速に出力することができる。
【０３２７】
いくつかの実施形態では、構成マネージャ２３０４はタスクの優先順位に基づいてプロセスを実行するように構成可能にできる。例えば、構成マネージャ２３０４は、途切れることなく実行プロセスを終了させるように構成することができる。その場合、構成マネージャ２３０４は、タスクの命令または構成をアクセラレータ２２１６に提供し、途切れることなくタスクの命令または構成を実行させ、タスクが終了した場合にのみマルチプレクサを切り替えさせる。ただし、他の実施形態では、構成マネージャ２３０４は、外部インタフェースからの要求などのタスクの優先順位を受信するとき、タスクに割り込むことができ、データルーティングを再構成することができる。しかしながら、メモリブロック２３０８が十分にあるため、メモリコントローラ２３０６は、タスクが完了するまで変換する必要のない専用ラインでデータを転送し、または処理ユニットにアクセス権を与えるように構成可能にできる。さらに、いくつかの実施形態では、全てのデバイスはバスを介して構成マネージャ２３０４全体に接続でき、デバイスは（例えば、マルチプレクサと同じロジックを使用して）デバイス自体とバスとの間のアクセスを管理できる。したがって、メモリコントローラ２３０６は複数のメモリインスタンスまたはメモリブロックに直接接続することができる。
【０３２８】
あるいは、メモリコントローラ２３０６はメモリサブインスタンスに直接接続することができる。いくつかの実施形態では、各メモリインスタンスまたは各ブロックはサブインスタンスから構築することができる（例えば、ＤＲＡＭは、独立したデータラインが複数のサブブロック内に配置されるマットから構築することができる）。
さらに、サブインスタンスは、ＤＲＡＭマット、ＤＲＡＭ、バンク、ｆｌａｓｈマット、またはＳＲＡＭマット、またはその他あらゆる種類のメモリのうち少なくとも１つを含み得る。次いで、メモリコントローラ２３０６は、サブインスタンスを直接アドレス指定してパイプラインメモリアクセス時の待ち時間を最小にする専用ラインを含み得る。
【０３２９】
いくつかの実施形態では、メモリコントローラ２３０６はさらに、特定のメモリインスタンスに必要であるロジック（例えば、行デコーダ＼列デコーダ、リフレッシュロジックなど）を保持することができ、メモリブロック２３０８はメモリブロック独自のロジックを処理できる。したがって、メモリブロック２３０８はアドレスを得ることができ、データ返信＼データ書き込み用のコマンドを生成することができる。
【０３３０】
図２４は、本開示の実施形態と一致する、例示的なメモリ構成図を示す。いくつかの実施形態では、処理装置２２００のコードまたは構成を生成するコンパイラは、データを各ブロック内に予め配置することによってメモリブロック２２０２および２２０４からのローディングを構成する方法を実行することができる。例えば、コンパイラは、タスクに必要な各ワードがメモリインスタンスまたはメモリブロックのラインに相互に関連するように、データを予め配置することができる。しかし、処理装置２２００内で利用可能なメモリブロックよりも多くのメモリブロックを必要とするタスクの場合、コンパイラは、各メモリブロックの１つ以上の記憶場所にデータをフィットさせる方法を実装することができる。コンパイラはさらにデータを順番に記憶し、各メモリブロックの待ち時間を評価してラインのミス待ち時間を回避することができる。いくつかの実施形態では、ホストは構成マネージャ２２１２などの処理ユニットの一部であってもよい。ただし、他の実施形態では、コンパイラのホストは外部インタフェースを介して処理装置２２００に接続することができる。このような実施形態では、ホストは、コンパイラに関して記載された機能などのコンパイル機能を受信することができる。
【０３３１】
いくつかの実施形態では、構成マネージャ２２１２は、ＣＰＵまたはマイクロコントローラ（ｕＣ）であってもよい。このような実施形態では、構成マネージャ２２１２は、メモリにアクセスしてメモリ内に入れられるコマンドまたは命令をフェッチしなければならない場合がある。特定のコンパイラは、同じメモリライン内および複数のメモリバンク全体に連続コマンドを記憶できるようにコードを生成し、コードをメモリ内に入れて、フェッチされたコマンドにさらにパイプラインメモリアクセスを可能にする場合がある。これらの実施形態では、構成マネージャ２２１２およびメモリコントローラ２２１０は、パイプラインメモリアクセスを促進することによって実行ライン内の低遅延も回避できる可能性がある。
【０３３２】
先の実行ラインのプログラムのケースでは、コンパイラが命令を認識し、命令を入れてパイプラインメモリの実行を可能にする方法を記載した。しかしながら、その他のソフトウェア構造はより複雑な場合があり、コンパイラにそのソフトウェア構造を認識させ、それに従ってコンパイラが機能するよう要求することになろう。例えば、タスクがループおよび分岐を要求する場合、コンパイラは、ラインを開放する待ち時間なしで単一ラインがループできるように、全てのループコードを単一ライン内部に入れることができる。その際、メモリコントローラ２２１０は、実行時にラインを変換する必要がない可能性がある。
【０３３３】
いくつかの実施形態では、構成マネージャ２２１２は内部キャッシュまたは小型メモリを含み得る。内部キャッシュは、構成マネージャ２２１２によって実行され、分岐およびループに対応するコマンドを記憶することができる。例えば、内部キャッシュメモリ内のコマンドは、アクセラレータがメモリブロックにアクセスするように構成する命令を含み得る。
【０３３４】
図２５は、本開示の実施形態と一致する、可能なメモリ構成プロセス２５００を示す例示的なフローチャートである。メモリ構成プロセス２５００を記載する際可能な限り、図２２で示される、および上記の要素の識別子を参照することができる。いくつかの実施形態では、プロセス２５００は、外部インタフェースを介して接続されるホストに命令を提供するコンパイラによって実行することができる。他の実施形態では、プロセス２５００は、構成マネージャ２２１２などの処理装置２２００のコンポーネントによって実行することができる。
【０３３５】
概して、プロセス２５００は、タスクを実行するために同時に要求されるワードの数を決定する段階と、複数のメモリバンクの各々から同時にアクセスできるワードの数を決定する段階と、同時に要求されるワードの数が同時にアクセスできるワードの数よりも大きい場合に、同時に要求されるワードの数を複数のメモリバンク間で分割する段階と、を含み得る。さらに、同時に要求されるワードの数を分割する段階は、ワードのサイクル構成を実行する段階と、１つのワードをメモリバンク毎に順次割り当てる段階と、を含み得る。
【０３３６】
より詳細には、プロセス２５００は、コンパイラがタスク仕様を受信することができる段階２５０２で開始することができる。タスク仕様は、要求される計算および／または優先レベルを含む。
【０３３７】
段階２５０４で、コンパイラは、タスクを実行できるアクセラレータまたはアクセラレータのグループを識別することができる。あるいは、構成マネージャ２２１２などの処理ユニットがタスクを実行するアクセラレータを識別できるように、コンパイラは命令を生成することができる。例えば、構成マネージャ２２１２は、要求された計算を用いて、タスクを処理できるアクセラレータ２２１６のグループ内のアクセラレータを識別することができる。
【０３３８】
段階２５０６で、コンパイラは、同時にアクセスする必要があるワードの数を決定してタスクを実行することができる。例えば、２つのベクトルの乗算には少なくとも２つのベクトルにアクセスする必要があるため、コンパイラは、動作を実行するためにベクトルのワードに同時にアクセスする必要があることを決定することができる。
【０３３９】
段階２５０８で、コンパイラは、タスクを実行するために必要なサイクル数を決定することができる。例えば、タスクが４つの副産物のコンボリューション動作を要求する場合、コンパイラは、タスクの実行には少なくとも４サイクルが必要であることを決定することができる。
【０３４０】
段階２５１０で、コンパイラは、同時にアクセスする必要のあるワードを異なるメモリバンク内に入れることができる。その方法では、メモリコントローラ２２１０は、要求されるあらゆるキャッシュデータを使用せずに、異なるメモリインスタンスに対してラインを開放し、要求されるメモリブロックに１クロックサイクル内でアクセスするように構成することができる。
【０３４１】
段階２５１２で、コンパイラは、順次アクセスするワードを同じメモリバンク内に入れることができる。例えば、４つの動作サイクルが要求される場合、コンパイラは、必要なワードを順次サイクルで単一メモリブロック内に書き込み、実行中に異なるメモリブロック間のラインを変換しないようにする命令を生成できる。
【０３４２】
段階２５１４で、コンパイラは、構成マネージャ２２１２などの処理ユニットをプログラムする命令を生成する。この命令は、スイッチ素子（マルチプレクサなど）を動作させる、またはデータバスを構成する条件を明示することができる。このような命令によって、構成マネージャ２２１２は、専用通信ラインを使用しタスクに従って、メモリコントローラ２２１０がデータをメモリブロックから処理ユニットに転送する、またはアクセス権をメモリブロックから処理ユニットに与えるように構成することができる。
【０３４３】
図２６は、本開示の実施形態と一致する、メモリ読み込みプロセス２６００を示す例示的なフローチャートである。メモリ読み込みプロセス２６００を記載する際可能な限り、図２２で示される、および上記の要素の識別子を参照することができる。いくつかの実施形態では、下記のように、プロセス２６００はメモリコントローラ２２１０によって実装することができる。ただし、他の実施形態では、プロセス２６００は、構成マネージャ２２１２などの処理装置２２００内のその他の要素によって実装してもよい。
【０３４４】
段階２６０２で、メモリコントローラ２２１０、構成マネージャ２２１２、またはその他の処理ユニットは、データを転送する指示をメモリバンクから受信する、またはアクセス権をメモリバンクに与えることができる。要求はアドレスおよびメモリブロックを指定することができる。
【０３４５】
いくつかの実施形態では、ライン２２１８内の読み込みコマンドおよびライン２２２０内のアドレスを指定するデータバスを介して要求を受信できる。他の実施形態では、メモリコントローラ２２１０に接続されるデマルチプレクサを介して要求を受信できる。
【０３４６】
段階２６０４で、構成マネージャ２２１２、ホスト、またはその他の処理ユニットは内部レジスタに問い合わせることができる。内部レジスタは、メモリバンクに対して開放されるライン、開放されるアドレス、開放されるメモリブロック、および／または次のタスクに関する情報を含み得る。内部レジスタ内の情報に基づいて、メモリバンクに対して開放されたラインがあるかどうか、および／またはメモリブロックが段階２６０２で要求を受信したかどうかを決定することができる。この代わりに、またはこれに加えて、メモリコントローラ２２１０は内部レジスタに直接問い合わせることができる。
【０３４７】
メモリバンクが開放されたライン内にロードされないことを内部レジスタが示す場合（段階２６０６でｎｏの場合）、プロセス２６００は段階２６１６に進むことができ、ラインは受信したアドレスと関連付けられるメモリバンクにロードすることができる。さらに、メモリコントローラ２２１０または構成マネージャ２２１２などの処理ユニットは、段階２６１６でメモリアドレスから情報を要求する要素に遅延を知らせることができる。例えば、アクセラレータ２２１６が、すでに占有されたメモリブロックに位置するメモリ情報を要求する場合、段階２６１８でメモリコントローラ２２１０が遅延信号をアクセラレータに送信することができる。段階２６２０で、構成マネージャ２２１２またはメモリコントローラ２２１０は、内部レジスタを更新して、ラインが新しいメモリバンクまたは新しいメモリブロックに対して開放されたことを示すことができる。
【０３４８】
メモリバンクが開放されたライン内にロードされることを内部レジスタが示す場合（段階２６０６でｙｅｓの場合）、プロセス２６００は段階２６０８に進むことができる。段階２６０８で、メモリバンクをロードしたラインが異なるアドレス用に使用されているかどうかを決定することができる。ラインが異なるアドレス用に使用されている場合（段階２６０８でｙｅｓの場合）、単一ブロック内に２つのインスタンスが存在するため、２つのインスタンスに同時にアクセスすることができないことを示すことになろう。したがって、段階２６１６でメモリアドレスから情報を要求する要素にエラーまたは適用除外の信号を送信することができる。ただし、ラインが異なるアドレス用に使用されていない場合（段階２６０８でｎｏの場合）、ラインはアドレス用に開放でき、ターゲットメモリバンクからデータを引き出すことができ、段階２６１４に進んで、メモリアドレスから情報を要求する要素にデータを送信することができる。
【０３４９】
プロセス２６００と関連して、処理装置２２００は、処理ユニットと、タスクを実行する要求された情報を含むメモリブロックまたはメモリインスタンスと、の間に直接接続を構築する能力を有する。このようなデータ編成により、異なるメモリインスタンス内の編成されたベクトルから情報を読み込むことが可能となる、ならびにデバイスがこれらの複数のアドレスを要求する場合に異なるメモリブロックから情報を同時に引き出すことが可能となるであろう。
【０３５０】
図２７は、本開示の実施形態と一致する、実行プロセス２７００を示す例示的なフローチャートである。実行プロセス２７００を記載する際可能な限り、図２２で示される、および上記の要素の識別子を参照することができる。
【０３５１】
段階２７０２で、コンパイラまたは構成マネージャ２２１２などのローカルユニットは、実行される必要のあるタスクの指示を受信することができる。タスクは、単一演算（例えば、乗算）またはより複雑な演算（例えば、行列間コンボリューション）を含み得る。タスクはさらに、要求される計算を示すことができる。
【０３５２】
段階２７０４で、コンパイラまたは構成マネージャ２２１２は、タスクを実行するために同時に要求されるワードの数を決定することができる。例えば、構成マネージャまたはコンパイラは、ベクトル間で乗算を実行するために２つのワードが同時に要求されることを決定することができる。別の例では、２次元コンボリューションタスク、構成マネージャ２２１２は、「ｎ」および「ｍ」が行列次元である行列間コンボリューションには「ｎ」回「ｍ」ワードが要求されることを決定することができる。さらに、段階２７０４で、構成マネージャ２２１２はさらに、タスクを実行するのに必要なサイクル数を決定することができる。
【０３５３】
段階２７０６では、段階２７０４における決定に応じて、コンパイラは、基板上に配置される複数のメモリバンク内に同時にアクセスする必要があるワードを書き込むことができる。例えば、複数のメモリバンクの１つから同時にアクセスできるワードの数が、同時に要求されるワードの数よりも少ない場合、コンパイラは、複数のメモリバンク内にデータを編成することで、１クロック内で異なる要求されるワードにアクセスしやすくできる。さらに、構成マネージャ２２１２またはコンパイラがタスクを実行するには複数サイクルが必要であることを決定する場合、コンパイラは、必要なワードを順次サイクルで複数のメモリバンクの単一メモリバンク内に書き込み、メモリバンク間のラインを変換しないようにすることができる。
【０３５４】
段階２７０８で、メモリコントローラ２２１０は、第１のメモリラインを使用して複数のメモリバンクまたはブロックからの第１のメモリバンクから少なくとも１つの第１のワードを読み込む、または少なくとも１つの第１のワードにアクセス権を与えるように構成することができる。
【０３５５】
段階２７１０で、処理ユニット、例えばアクセラレータ２２１６の１つは、少なくとも１つの第１のワードを使用してタスクを処理することができる。
【０３５６】
段階２７１２で、メモリコントローラ２２１０は、第２のメモリラインを第２のメモリバンク内に開放するように構成することができる。例えば、タスクに基づいて、およびパイプラインメモリアクセス法を用いて、メモリコントローラ２２１２は、段階２７０６でタスクに必要な情報が書き込まれた場合、第２のメモリラインを第２のメモリブロック内に開放するように構成することができる。いくつかの実施形態では、段階２７１０でタスクがまさに完了しようとするときに第２のメモリラインを開放することができる。例えば、タスクが１００クロックを要求する場合、第２のメモリラインは９０クロックで開放することができる。
【０３５７】
いくつかの実施形態では、段階２７０８から２７１２は、第１のラインアクセスサイクル内で実行することができる。
【０３５８】
段階２７１４で、メモリコントローラ２２１０は、段階２７１０で開放される第２のメモリラインを使用して第２のメモリバンクからの少なくとも１つの第２のワードからデータにアクセス権を与えるように構成することができる。
【０３５９】
段階２７１６で、処理ユニット、例えばアクセラレータ２２１６の１つは、少なくとも第２のワードを使用してタスクを処理することができる。
【０３６０】
段階２７１８で、メモリコントローラ２２１０は、第２のメモリラインを第１のメモリバンク内に開放するように構成することができる。例えば、タスクに基づいて、およびパイプラインメモリアクセス法を用いて、メモリコントローラ２２１０は、第２のメモリラインを第１のメモリブロック内に開放するように構成することができる。いくつかの実施形態では、段階２７１６でタスクがまさに完了しようとするときに第２のメモリラインを第１のブロックに開放することができる。
【０３６１】
いくつかの実施形態では、段階２７１４から２７１８は、第１のラインアクセスサイクル内で実行することができる。
【０３６２】
段階２７２０で、メモリコントローラ２２１０は、第１のバンク内の第２のメモリラインまたは第３のバンクおよび続けて異なるメモリバンク内の第１のメモリラインを使用して複数のメモリバンクまたはブロックからの第１のメモリバンクから少なくとも１つの第３のワードを読み込む、または少なくとも１つの第３のワードにアクセス権を与えることができる。
【０３６３】
上記の記載は、図示を目的として提示されている。開示された厳密な形態または実施形態の例示列挙であり、これらに限定されない。本明細書および開示された実施形態の実施の考察から、修正および適応が当業者に明らかになるであろう。さらに、開示された実施形態の態様はメモリに記憶されるものとして記載されるが、これらの態様はさらに、例えば、ハードディスクまたはコンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、またはその他の形態のランダムアクセスメモリ（ＲＡＭ）またはリードオンリメモリ（ＲＯＭ）、ユニバーサルシリアルバス（ＵＳＢ）メディア、デジタル多用途ディスク（ＤＶＤ）、Ｂｌｕ−ｒａｙ（登録商標）、４Ｋ  Ｕｌｔｒａ  ＨＤ  Ｂｌｕ−ｒａｙ（登録商標）、またはその他のオプティカルドライブメディアといった二次記憶装置など、他の種類のコンピュータ可読媒体に記憶することもできることが当業者には明らかであろう。
【０３６４】
本明細書および開示された方法に基づくコンピュータプログラムは、経験のある開発者が備えている技能範囲内にある。様々なプログラムまたはプログラムモジュールは、当業者に知られるあらゆる技術を用いて作成することができ、または現存するソフトウェアと関連付けて設計することができる。例えば、プログラムセクションまたはプログラムモジュールは、マイクロソフトドットネットフレームワーク（.Ｎｅｔ  Ｆｒａｍｅｗｏｒｋ）、マイクロソフトドットネットコンパクトフレームワーク（.Ｎｅｔ  Ｃｏｍｐａｃｔ  Ｆｒａｍｅｗｏｒｋ）（および例えばＶｉｓｕａｌ Ｂａｓｉｃ、Ｃ、などの関連言語）、Ｊａｖａ（登録商標）、Ｃ＋＋、オブジェクティブシー（Ｏｂｊｅｃｔｉｖｅ−Ｃ）、ハイパテキストマーク付け言語（ＨＴＭＬ）、ハイパテキストマーク付け言語（ＨＴＭＬ）／ＡＪＡＸの組み合わせ、拡張可能なマーク付け言語（ＸＭＬ）、またはＪａｖａ（登録商標）アプレットが含まれたハイパテキストマーク付け言語（ＨＴＭＬ）で、またはこれらによって設計することができる。
【０３６５】
さらに、これまで本明細書で例示的な実施形態を説明してきたが、あらゆる実施形態および全ての実施形態の範囲は、本開示に基づいて当業者によって理解されるように、均等な要素、修正、省略、（例えば、様々な実施形態全体にわたる態様の）組み合わせ、適応、および／または変更を有する。特許請求の範囲における限定は特許請求の範囲で使用される言葉に基づいて幅広く解釈されるべきであり、本明細書で、または本出願の審査時に説明される事例に限定されない。事例は非排他的なものとして解釈されるべきである。さらに、本開示の方法の段階は、段階を並べ替える、および／または段階を挿入するまたは削除することを含めて、あらゆる方法で修正することができる。したがって、本明細書および事例は例示するだけのものととらえられるべきであり、真の範囲および精神が以下の特許請求の範囲およびその均等物の全範囲によって示されることが意図される。
【図１】
2020529676.tif 000003
【図２】
2020529676.tif 000004
【図３Ａ】
2020529676.tif 000005
【図３Ｂ】
2020529676.tif 000006
【図４】
2020529676.tif 000007
【図５】
2020529676.tif 000008
【図６】
2020529676.tif 000009
【図７Ａ】
2020529676.tif 000010
【図７Ｂ】
2020529676.tif 000011
【図７Ｃ】
2020529676.tif 000012
【図７Ｄ】
2020529676.tif 000013
【図８】
2020529676.tif 000014
【図９】
2020529676.tif 000015
【図１０】
2020529676.tif 000016
【図１１】
2020529676.tif 000017
【図１２】
2020529676.tif 000018
【図１３】
2020529676.tif 000019
【図１４】
2020529676.tif 000020
【図１５】
2020529676.tif 000021
【図１６】
2020529676.tif 000022
【図１７】
2020529676.tif 000023
【図１８】
2020529676.tif 000024
【図１９】
2020529676.tif 000025
【図２０】
2020529676.tif 000026
【図２１】
2020529676.tif 000027
【図２２】
2020529676.tif 000028
【図２３】
2020529676.tif 000029
【図２４Ａ）】
2020529676.tif 000030
【図２４Ｂ）】
2020529676.tif 000031
【図２５】
2020529676.tif 000032
【図２６】
2020529676.tif 000033
【図２７】
2020529676.tif 000034
【国際調査報告】
2020529676.tif 000035
2020529676.tif 000036
2020529676.tif 000037
2020529676.tif 000038