(57)【要約】      （修正有）【課題】多次元データを保管し、かつ、アクセスするための方法、装置、システムおよび製品を提供する。【解決手段】データストレージマネージャ２０２において、メモリと、多次元データオブジェクトを保管するためにメモリの一部を割当てるメモリアロケータと、記憶素子オーガナイザを含む。記憶素子オーガナイザは、多次元データを記憶素子へと分離し、記憶素子をメモリ内に保管する。保管された記憶素子は、選択的に実行可能であり、アレイにおける記憶素子に対する開始メモリアドレスの場所をメモリ内に保管する。アレイは、保管された素子のデータへ選択的にアクセスすることを促進し、メモリの中へアレイに対するポインタを保管する。【選択図】図３
2020140713.tif 000002
【特許請求の範囲】
【請求項１】
多次元データを保管するための装置であって、前記装置は、
メモリと、
多次元データオブジェクトを保管するためにメモリの一部を割当てるメモリアロケータと、
記憶素子オーガナイザであり、
前記多次元データを記憶素子へと分離し、
前記記憶素子を前記メモリ内に保管し、前記記憶素子のうち一部は、前記記憶素子の他のものから独立して選択的に実行可能であり、
アレイにおける前記記憶素子に対する開始メモリアドレスの場所を前記メモリ内に保管し、前記アレイは、前記メモリ内の前記記憶素子へ選択的にアクセスすることを促進し、
前記メモリの中へ前記アレイに対するポインタを保管する、
記憶素子オーガナイザと、
を含む、装置。
【請求項２】
前記記憶素子オーガナイザは、前記多次元データが疎なオブジェクトである場合に、
前記疎なオブジェクトに対応する疎性マップを前記メモリ内に保管し、かつ、
前記疎性マップに対する疎性マップポインタを保管する、
請求項１に記載の装置。
【請求項３】
前記メモリアロケータは、
多くのメモリブロックを前記メモリ内に割当てること、および、
前記メモリブロックの割当てられたメモリアドレスの場所をバッファに保管すること、によって、
前記多次元データオブジェクトを保管するために、前記メモリの一部を割当てる、
請求項１に記載の装置。
【請求項４】
前記記憶素子オーガナイザは、
前記バッファから、前記メモリブロックの前記割当てられたメモリアドレスの場所のうち１つを引き出すこと、および、
前記割当てられたメモリアドレスの場所のうち１つにおいて開始する、対応する前記記憶素子のうち１つを保管すること、によって、
前記記憶素子を保管する、
請求項３に記載の装置。
【請求項５】
前記メモリアロケータは、
バッファをモニタリングし、かつ、
前記バッファ内に保管されている前記割当てられたメモリアドレスの場所の数が第１閾値を下回る場合に、
前記メモリ内に追加のメモリブロックを割当て、かつ、
前記追加のメモリブロックの追加で割当てられたメモリアドレスを前記バッファ内に保管する、
請求項３に記載の装置。
【請求項６】
前記メモリは第１メモリであり、かつ、
前記メモリアロケータは、利用可能なメモリブロックの数が第２閾値を下回る場合に、既に使用されているメモリブロック内に保管されたデータを第２メモリへと移動する、
請求項５に記載の装置。
【請求項７】
前記記憶素子オーガナイザは、前記記憶素子を非連続的に前記メモリ内に保管する、
請求項１に記載の装置。
【請求項８】
前記記憶素子オーガナイザは、第１記憶素子オーガナイザであり、
前記記憶素子は、第１記憶素子であり、かつ、
前記開始メモリアドレスの場所は、第１開始メモリアドレスの場所であり、
前記装置は、さらに、
第２記憶素子オーガナイザであり、
第２記憶素子を前記メモリ内に保管し、かつ、
前記アレイにおける前記第２記憶素子に対する第２開始メモリアドレスを前記メモリ内に保管する、
第２記憶素子オーガナイザ、を含む、
請求項１に記載の装置。
【請求項９】
前記第２記憶素子オーガナイザは、前記第１記憶素子オーガナイザが前記第１記憶素子を前記メモリ内に保管するのと同じ持続時間において、前記第２記憶素子を前記メモリ内に保管する、
請求項８に記載の装置。
【請求項１０】
命令が保管された有形のコンピュータで読取り可能な記憶媒体であって、前記命令が実行されると、少なくとも１つまたはそれ以上のプロセッサに、
多次元データオブジェクトを保管するためにメモリの一部を割当て、
前記多次元データを記憶素子へと分割し、
前記記憶素子を前記メモリ内に保管し、前記記憶素子のうち一部は、前記記憶素子の他のものから独立して選択的に実行可能であり、
アレイにおける前記記憶素子に対する開始メモリアドレスの場所を前記メモリ内に保管し、前記アレイは、前記メモリ内の前記記憶素子へ選択的にアクセスすることを促進し、かつ、
前記メモリの中へ前記アレイに対するポインタを保管する、
ようにさせる、コンピュータで読取り可能な記憶媒体。
【請求項１１】
前記命令は、前記多次元データが疎なオブジェクトである場合、前記１つまたはそれ以上のプロセッサに、
前記疎なオブジェクトに対応する疎性マップを前記メモリ内に保管し、
前記疎性マップに対する疎性マップポインタを保管する、
ようにさせる、請求項１０に記載のコンピュータで読取り可能な記憶媒体。
【請求項１２】
前記命令は、
多くのメモリブロックを前記メモリ内に割当てること、および、
前記メモリブロックの割当てられたメモリアドレスの場所をバッファに保管すること、によって、
前記１つまたはそれ以上のプロセッサに、前記多次元データオブジェクトを保管するために、前記メモリの一部を割当てさせる、
請求項１０に記載のコンピュータで読取り可能な記憶媒体。
【請求項１３】
前記命令は、
前記バッファから、前記メモリブロックの前記割当てられたメモリアドレスの場所のうち１つを引き出すこと、および、
前記割当てられたメモリアドレスの場所のうち１つにおいて開始する、対応する前記記憶素子のうち１つを保管すること、によって、
前記１つまたはそれ以上のプロセッサに、前記記憶素子を保管させる、
請求項１２に記載のコンピュータで読取り可能な記憶媒体。
【請求項１４】
前記命令は、前記１つまたはそれ以上のプロセッサに、
バッファをモニタリングさせ、かつ、
前記バッファ内に保管されている前記割当てられたメモリアドレスの場所の数が第１閾値を下回る場合に、
前記メモリ内に追加のメモリブロックを割当て、かつ、
前記追加のメモリブロックの追加で割当てられたメモリアドレスを前記バッファ内に保管させる、
請求項１２に記載のコンピュータで読取り可能な記憶媒体。
【請求項１５】
前記メモリは第１メモリであり、かつ、
前記命令は、利用可能なメモリブロックの数が第２閾値を下回る場合に、前記１つまたはそれ以上のプロセッサに、既に使用されているメモリブロック内に保管されたデータを第２メモリへと移動させる、
請求項１４に記載のコンピュータで読取り可能な記憶媒体。
【請求項１６】
前記命令は、前記１つまたはそれ以上のプロセッサに、前記記憶素子を非連続的に前記メモリ内に保管させる、
請求項１０に記載のコンピュータで読取り可能な記憶媒体。
【請求項１７】
前記記憶素子は、第１記憶素子であり、かつ、
前記開始メモリアドレスの場所は、第１開始メモリアドレスの場所であり、
前記命令は、前記１つまたはそれ以上のプロセッサに、
第２記憶素子を前記メモリ内に保管し、かつ、
前記アレイにおける前記第２記憶素子に対する第２開始メモリアドレスを前記メモリ内に保管させる、
請求項１０に記載のコンピュータで読取り可能な記憶媒体。
【請求項１８】
前記命令は、前記１つまたはそれ以上のプロセッサに、第１記憶素子オーガナイザが前記第１記憶素子を前記メモリ内に保管するのと同じ持続時間において、前記第２記憶素子を前記メモリ内に保管させる、
請求項１７に記載のコンピュータで読取り可能な記憶媒体。
【請求項１９】
多次元データを保管するための方法であって、前記方法は、
１つまたはそれ以上のプロセッサで命令を実行することにより、多次元データオブジェクトを保管するためにメモリの一部を割当てるステップと、
１つまたはそれ以上のプロセッサで命令を実行することにより、前記多次元データを記憶素子へと分割するステップと、
前記記憶素子を前記メモリ内に保管するステップであり、前記記憶素子のうち一部は、前記記憶素子の他のものから独立して選択的に実行可能である、ステップと、
アレイにおける前記記憶素子に対する開始メモリアドレスの場所を前記メモリ内に保管するステップであり、前記アレイは、前記メモリ内の前記記憶素子へ選択的にアクセスすることを促進する、ステップと、
前記メモリの中へ前記アレイに対するポインタを保管するステップと、
を含む、方法。
【請求項２０】
前記方法は、さらに、前記多次元データが疎なオブジェクトである場合に、
前記疎なオブジェクトに対応する疎性マップを前記メモリ内に保管するステップと、
前記疎性マップに対する疎性マップポインタを保管するステップと、
を含む、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的に、プロセッサに関し、そして、より特定的には、多次元データを保管し、かつ、アクセスするための方法および装置に関する。
【背景技術】
【０００２】
モバイル機器は、典型的に、サイズ制約、温度管理制約、及び／又は電力制約によって制限される画像処理能力を有している。いくつかの実施例において、ニューラルネットワークアプリケーションは、そうした画像処理能力を使用している。そうしたニューラルネットワークアプリケーションは、２次元ベクトル(例えば、マップ、チャネル、等)においてデータを保管することができる。いくつかの実施例において、２次元ベクトルは、テンソル（tensor）として参照される多次元(例えば、３次元、４次元、等)のボリューム（volume）／アレイ（array）を生成するようにグループ化され得る。テンソル、および他の多次元データ構造は、典型的に、特定の順序に従った(例えば、多次元データ構造の次元に対応する)アドレスにおいてメモリ内に保管されている。
【図面の簡単な説明】
【０００３】
【図１】図1は、本開示の教示に従って、テンソルストレージスキーム（tensor  storage  scheme）の一つの実施例を示している。
【図２】図2は、本開示の教示に従って構成されたデータストアマネージャ（datasotre  manager）を含む一つのプロセッサの例に係るブロック図である。
【図３】図3は、図2の例示的なプロセッサのデータストレージマネージャ（data  storage  manager）に係るブロック図である。
【図４】図4は、図1及び／又は図2の例示的なデータストレージマネージャを実装するために実行され得る、代表的なマシンで読取り可能な命令の実施例に係るフローチャートであり、疎な（sparse）オブジェクトを保管するようにメモリを割当てる。
【図５】図5は、図1及び／又は図2の例示的なデータストレージマネージャを実装するために実行され得る、代表的なマシンで読取り可能な命令の実施例に係るフローチャートであり、割当てられたメモリブロックに基づいて疎なオブジェクトを保管する。
【図６】図6は、図1及び／又は図2の例示的なデータストレージマネージャを実装するために実行され得る、代表的なマシンで読取り可能な命令の実施例に係るフローチャートであり、多次元データを図2の例示的なメモリ内に記憶素子（storage  element）として保管する。
【図７】図7は、図1及び／又は図2の例示的なデータストレージマネージャを実装するために実行され得る、代表的なマシンで読取り可能な命令の実施例に係るフローチャートであり、図2の例示的なメモリ内に記憶素子として保管されている多次元データにアクセスする。
【図８】図8は、図1及び／又は図2の例示的なデータストレージマネージャを実装するために実行され得る、代表的なマシンで読取り可能な命令の実施例に係るフローチャートであり、図2の例示的なメモリ内のブロックに記憶素子として保管されている多次元データにアクセスする。
【図９】図9は、図1及び／又は図2の例示的なデータストレージマネージャを実装するために実行され得る、代表的なマシンで読取り可能な命令の実施例に係るフローチャートであり、タイルベース（tile-based）のパターンプロトコルについてアクセスされたテンソルのより効率的な処理を促進するために、アクセスされたテンソルを操作する。
【図１０Ａ】図10Aは、メモリから多次元データにアクセスするための、図2及び／又は図3の例示的なデータストレージマネージャによって使用され得るオフセットに対応する例示的なテーブルを示している。
【図１０Ｂ】図10Bは、メモリから多次元データにアクセスするための、図2及び／又は図3の例示的なデータストレージマネージャによって使用され得るオフセットに対応する例示的なテーブルを示している。
【図１０Ｃ】図10Cは、メモリから多次元データにアクセスするための、図2及び／又は図3の例示的なデータストレージマネージャによって使用され得るオフセットに対応する例示的なテーブルを示している。
【図１０Ｄ】図10Dは、メモリから多次元データにアクセスするための、図2及び／又は図3の例示的なデータストレージマネージャによって使用され得るオフセットに対応する例示的なテーブルを示している。
【図１１Ａ】図11Aは、メモリからアクセスされる多次元データに基づいて、図2及び／又は図3の例示的なデータストレージマネージャによって実行され得る例示的なデータ操作プロトコルを示している。
【図１１Ｂ】図11Bは、メモリからアクセスされる多次元データに基づいて、図2及び／又は図3の例示的なデータストレージマネージャによって実行され得る例示的なデータ操作プロトコルを示している。
【図１２】図12は、図4、図5、図6、図7、図8、及び／又は図9に係る命令を実行するために構成された１つの例示的なプロセッサプラットフォームのブロック図であり、図2及び／又は図3の例示的なデータストレージマネージャを実施する。
【０００４】
図は、縮尺どおりに描かれていない。一般的に、同一の参照番号は、図面および添付の明細書の全体を通じて、同一または類似のパーツを参照するために使用されている。
【０００５】
記述語である「第１（“first”）」、「第２（“second”）」、「第３（“third”）」、等は、個別の参照され得る複数のエレメント（elements）またはコンポーネント（components）を特定する際に、ここにおいて使用されている。使用のコンテキストに基づいて別途に特定または理解されない限り、これらの記述語は、時間における優先または順序付けに係るあらゆる意味を負わせるように意図されたものではなく、時間的に補足するものではなく、開示された実施例の理解を容易にするために、複数のエレメントまたはコンポーネントを個別に参照するための単なるラベルとしてのものである。いくつかの実施例において、記述語「第１」は、詳細な説明における１つのエレメントを参照するために使用され得るが、一方で、同一のエレメントが、「第２」または「第３」といった異なる記述語を用いてクレームにおいて参照されてよい。そうしたインスタンスにおいて、そのような記述語は、単に複数のエレメントまたはコンポーネントの参照を容易にするために使用されているものと理解されるべきである。
【発明を実施するための形態】
【０００６】
パーソナルコンピュータ及び／又はモバイル機器を含むコンピューティングシステムは、人間のビジョン（vision）が実行できるタスクを自動化するために、高度な画像処理またはコンピュータビジョンを採用している。コンピュータビジョンのタスクは、画像の獲得、処理、分析、及び／又は、理解を含んでいる。そうしたタスクは、数値的（numerical）及び／又は象徴的（symbolic）な情報を生成するために、デジタル画像からの次元データ（dimensional  data）の抽出を、部分的に、促進する。コンピュータビジョンは、数値的及び／又は象徴的な情報を使用して、決定を行い、かつ／あるいは、そうでなければ、３次元(3-D)姿勢推定（pose  estimation）、イベント検出、オブジェクト認識、ビデオ追跡、等に関連するオペレーションを実行することができる。拡張現実(AR)、仮想現実(VR)、ロボット工学、及び／又は、他のアプリケーションをサポートするために、そうしたタスクをより迅速に(例えば、リアルタイムまたはリアルタイムに近く)、かつ、より効率的に実行することは、改善された画像処理性能および改善されたユーザ体験を結果として生じる。
【０００７】
高度な画像処理及び／又はコンピュータビジョンは、ときどき、畳み込みニューラルネットワーク（convolutional  neural  network）(CNN、またはConvNet)を使用する。CNNは、画像の分類、類似性による画像のクラスタ化(例えば、フォトサーチ)、及び／又は、コンボルーション（convolution）を用いた画像内のオブジェクト認識の実行、といった様々なタスクのために使用され得る、ニューラルネットワークである。ここにおいて使用されるように、コンボルーションは、一方の関数（function）の形状（shape）が他方の関数の形状によってどのように変更されるかを表現する積分（integration）によって、２つの所与の関数から誘導される関数であるものと定義されている。従って、入力画像内の画像特徴（image  feature）のうち１つまたはそれ以上の一致（matches）を特定するために、入力画像にわたり画像特徴(例えば、水平線、２次元(2-D)形状、等)に対応する１つまたはそれ以上のフィルタの出力を通すこと（passing）によって、入力画像内に含まれるオブジェクト(例えば、顔、個人、街路標識、動物、等)を識別するために、CNNを使用することができる。
【０００８】
CNNは、１つまたはそれ以上の関数を実行するために、保管され、かつ／あるいは、計算において使用される多次元アレイ(例えば、テンソル)を獲得する。例えば、CNNは、１つまたはそれ以上の画像に対応するデータを含む１つまたはそれ以上の多次元アレイ(例えば、１つまたはそれ以上のテンソル)を受け取ることができる。CNNは、多次元アレイをベクトルへと分割することができる。例えば、CNNは、1,000,000個のデータエレメントの３次元アレイを、各ベクトルにおいて100個のデータエレメントを有する１万個のベクトルへと分割することができる。従って、各ベクトルは、多数(例えば、数百、数千、数万、等)のデータエレメント(例えば、アクティベーション（activation）)を含み得る。ここにおいて使用されるように、用語であるデータエレメントおよびアクティベーションは、互換性があり、そして、同じことを意味する。特には、ここにおいて定義されるように、データエレメントまたはアクティベーションは、データ構造におけるデータのコンパートメント（compartment）である。加えて、そうしたデータエレメント／アクティベーション各々は、多数のビット（bits）を含み得る。例えば、10,000個の16ビットデータエレメント／アクティベーションを有するベクトルは、160,000ビットの情報に対応している。そうしたベクトルを保管することは、著しい量のメモリを必要とする。しかしながら、そうしたベクトルは、ゼロの値を有する多数のデータエレメント／アクティベーションを含み得る。従って、いくつかのCNNまたは他の処理エンジンは、そうしたベクトルを疎なベクトル（sparse  vector）および疎性マップベクトル（sparsity  map  vector）(例えば、ビットマップベクトル)へと分割することができる。
【０００９】
ここにおいて定義されるように、疎なオブジェクト（sparse  object）は、密な（dense）オブジェクトと同じ順序（order）で密なベクトルの全ての非ゼロ（non-zero）データエレメントを含むベクトルまたはマトリクスである。ここにおいて定義されるように、密なオブジェクトは、全ての(ゼロと非ゼロの両方の)データエレメントを含むベクトルまたはマトリクスである。そういうものとして、密なベクトル[0、0、5、0、18、0、4、0]は、疎なベクトル[5、18、4]に対応している。ここにおいて定義されるように、疎性マップ（sparsity  map）は、密なベクトルの各々のデータエレメントがゼロまたは非ゼロであるか否かを識別する１ビットのデータエレメントを含むベクトルである。このように、疎性マップは、密なベクトルの非ゼロ値を「１」にマッピングし、密なベクトルのゼロ値を「０」にマッピングし得る。上記の密なベクトル[0、0、5、0、18、0、4、0]について、疎性マップは、[0、0、1、0、1、0、1、0]であってよい(例えば、密なベクトルの第３、第５、および第７データエレメントが非ゼロだからである)。疎なベクトルおよび疎性マップの組み合わせは、密なベクトルを表す(例えば、密なベクトルは、対応する疎なベクトルおよび対応する疎性マップに基づいて、生成され、かつ／あるいは、再構成され得る)。従って、プロセッサは、密なベクトルをメモリ内に保管することなく、対応する疎なベクトルおよび対応する疎性マップに基づいて密なベクトルを生成し、かつ／あるいは、決定することができる。
【００１０】
密なベクトルにおいて十分なゼロが存在していると仮定すれば、密なベクトルの代わりにメモリ内に疎なベクトルと疎性マップを保管することは、メモリおよび処理リソースを節約する。例えば、上記の密なベクトルの各データエレメント(例えば、[0、0、5、0、18、0、4、0])が１６ビットの情報に対応する場合に、密なベクトルを保管するために必要とされるメモリの量は１２８ビット(例えば、８データエレメント×１６ビット)である。しかしながら、対応する疎なベクトル(例えば、[5、18、4])および疎性マップ(例えば、[0、0、1、0、1、0、1、0])を保管するために必要とされるメモリ量は、５６ビットである(例えば、(疎なベクトルの３個のデータエレメント×１６ビット)＋(疎性マップ８個のデータエレメント×１ビット))。従って、対応する密なベクトルの代わりに疎なベクトルおよび疎性マップを保管することは、いかなる情報も失うことなく、そうしたベクトルを保管するために必要とされるメモリの量を減少させる。加えて、疎なベクトルおよび疎性マップを利用することは、帯域幅（bandwidth）の要求を改善する。それらがデータバス及び／又はネットワークを介して転送されるデータの量を減少させるからであり、そして、従って、計算エンジンに対する配送速度（delivery  speed）を増加させる。
【００１１】
いくつかのストレージスキーム（storage  scheme）は、多次元データ(例えば、テンソル、疎なベクトル、等)を連続的にメモリの中へ保管する。しかしながら、データが連続して（contiguously）保管される場合に、メモリプロセッサユニットは、テンソルの１つまたはそれ以上のアクティベーション(例えば、多次元データオブジェクトのデータエレメント)にアクセスするために、保管された多次元データエレメントの全てを横断（traverse）する必要があり、これには、時間がかかり、かつ、非効率的である。加えて、メモリのいくらかが既に割当てられている場合には、そうしたテンソルを保管するために十分な連続したメモリを見つけることが困難または不可能である。ここにおいて開示される実施例は、そうしたストレージスキームの不撓性（inflexibility）を緩和し、そして、多次元データのより速いストレージ及び／又はアクセスのために、複数のプロセッサが記憶素子（storage  element）からデータに選択的にアクセスすることを可能にすることによって、効率を増進し、かつ、並列処理を促進する、フレキシブルなテンソルスロットプロトコルを提供する。
【００１２】
ここにおいて使用されるように、アクティベーションは、多次元データオブジェクト内に含まれるデータエレメントである。ここにおいて使用されるように、次元は、多次元データオブジェクトの座標の次元に対応している。例えば、３次元データオブジェクトは、３次元座標(例えば、X次元、Y次元、Z次元)によって定義され得る。ここにおいて開示される実施例は、テンソル又はあらゆる他の多次元データオブジェクトを固定サイズのサブユニット（sub-units）へと分割し、その中でアクティベーションが連続的に保管される。例えば、テンソルが３つの固定サイズのデータのサブユニット（sub-unit  of  data）へと分割される場合、ここにおいて開示される実施例は、テンソルのアクティベーションの第１部分(例えば、アクティベーションの３分の１)をデータの第１サブユニットとして、テンソルのアクティベーションの第２部分(例えば、３分の１)をデータの第２サブユニットとして、そして、テンソルのアクティベーションの第３部分(例えば、３分の１)をデータの第３サブユニットとして割当てる。データの各サブユニットは、対応する記憶素子(Storage  Element、SE)内に保管される。保管された記憶素子は、相互に独立して選択的に実行可能であり、並列プロセッサが記憶素子のデータエレメントにアクセスすることを促進する。例えば、記憶素子はメモリの異なる場所（locations）に保管され、そして、各記憶素子のポインタも、また、メモリに保管されているので、２つのプロセッサは、独立して、同時に異なる記憶素子からデータを獲得することができる。SEは、データのサブユニットを保管するためにリザーブされたメモリのセクションである。従って、ここにおいて開示される実施例は、テンソルのデータのサブユニットをグループ化し、そして、サブユニットをメモリの記憶素子に保管する。
【００１３】
SEは、連続、非連続、及び／又は、それらの組み合わせであり得る。しかしながら、各SEの中のアクティベーションは連続的に保管されている。SEは、事前に設定された（preset）座標次元に対応するメモリのセクションに保管されたデータエレメントのグループ（grouping）である。例えば、SEは、３×３×３（three-by-three-by-three）のサブユニットに対応するデータを保管することができる。加えて、テンソルが疎なオブジェクト及び／又はマトリクスに対応する場合に、SEは、疎性マップを含み得る。このようにして、密なオブジェクトは、疎なオブジェクト及び／又はマトリクス、および、疎性マップから決定され得る。加えて、上述のように、SEは、連続して保管されたアクティベーションを含んでいる。加えて、SEは、メモリ内のSEの第１アクティベーションに係るメモリ内の場所(例えば、アドレス)のポインタに対応している。ポインタは、SEの中でアクティベーションを横断するために使用され得る。SEはアクティベーションのストレージ順序（storage  order）に対応している。アクティベーション順序は、線形メモリにおける多次元アレイのストレージ順序に対応している。例えば、X座標、Y座標、およびZ座標によって定義された３次元テンソルをメモリの中へ保管する場合に、文字列の順序（string  order）は、特定の次元におけるアクティベーションの順序に対応している。２つのストレージスキームの実施例が、XYZ順序およびZXY順序に対応して以下の表に示されている。ここで、(z、y、x)は、テンソルのアクティベーションの座標に対応しており、次元(TD、TH、TW)によって定義される。
表１−XYZ順序に対応するメモリにおけるテンソル保管
【表１】
2020140713.tif 000003
表２−ZXY順序に対応するメモリにおけるテンソル保管
【表２】
2020140713.tif 000004
【００１４】
SEの次元は、ユーザ及び／又は製造者のプリファレンスに基づいて、１×１×１（Ｔｄ（深さ）*Ｔｈ（高さ）*Ｔｗ（幅））からテンソル自体のサイズまでの任意であってよい。いくつかの実施例において、SEは同じ次元を有している。
【００１５】
全てのテンソルは、テンソルの各データエレメントをメモリにおいて別個に、連続してパックされたアレイに保管することによって、メモリ内に保管されている。加えて、ここにおいて開示されるいくつかの実施例において、疎性マップは、メモリ内の別のアレイに内に連続して保管されている。加えて、ここにおいて開示される実施例は、ポインタアレイのために既定の保管順序を利用する(例えば、SEポインタをパッキングするときに、テンソルが横断される次元の順序である)。そのように開示された実施例は、既定の保管順序に従ってSE疎性マップをパックする。従って、ここにおいて開示された実施例を使用して、メモリ内に保管されたテンソルは、SEポインタアレイに対するポインタ、第１保管された疎性マップの場所に対するポインタ、SE間（inter-SE）の保管順序(例えば、SE自体の保管順序)、SE内（intra-SE）の保管順序(例えば、SEの中のアクティベーションの保管順序)、テンソルの次元、及び／又は、SEの次元のうちの少なくとも１つに基づいてアクセスされ得る。
【００１６】
ここにおいて開示される実施例は、（１）テンソルの中で対応するSEの座標を計算すること、および、（２）SEの中でアクティベーションの座標を計算することによって、その座標から、テンソル内の任意のアクティベーションの記憶場所にアクセスすることができる。ここにおいて開示される実施例は、ポインタアレイの中へインデックス（index）するために座標を使用し、SEポインタおよび疎性マップを引き出す（retrieve）。ここにおいて開示される実施例は、SEの中の座標を使用して、SEポインタからのアドレスオフセットを計算し(例えば、多次元データが密であり、かつ／あるいは、非ゼロ（non-zero）データエレメントを含む場合)、または、疎性マップの中へのインデックスとして使用し、そこからオフセットを決定することができる。
【００１７】
SEは非連続的に保管されてよいので、ここにおいて開示される実施例は、保管のフレキシビリティを改善する。テンソルは、メモリの異なる部分に保管することができる。このことは、利用可能な連続するメモリの量がテンソル全体を保管するのに不十分である場合に、特に有利である。加えて、各SEは、個別のポインタに対応する別々のサブユニットとして保管されているので、ここにおいて開示される実施例は、ポインタを使用して、複数の異なるSEから同時にアクティベーションをアクセスし、かつ／あるいは、保管することができるように並列処理を促進し、それによって、データアクセスおよびデータを使用するプロセッサの効率を向上させている(例えば、より多くのクロックサイクルが生産的に使用されるように、プロセッサストール（processor  stalls）を回避している)。加えて、SEは、テンソル全体よりも小さくてよいので(例えば、メモリ内のより少ない場所に保管されるより少ないアクティベーションを含む)、プロセッサがSEを通って横断するために要する時間の量は、プロセッサが全部のテンソルを通って横断するのに要する時間の量よりも短い。
【００１８】
図1は、本開示の教示に従って、テンソルストレージスキーム（tensor  storage  scheme）の一つの実施例を示している。図1の実施例の説明は、メモリ106のアドレスに保管された、例示的な３次元テンソル102、例示的なサブユニット104a−h、例示的なメモリ106、および、例示的なデータ108を含んでいる。
【００１９】
図1の例示的な３次元テンソル102は、４×４×４（four-by-four-by-four）(例えば、4-4-4)次元テンソルにおいて保管された64個のアクティベーション(例えば、データエレメントa1−a64)を含んでいる。図1に関連して以下でさらに説明されるように、データストレージマネージャは、テンソルを例示的なサブユニット104a-hへと分割する。図示された例において、サブユニット104a-hは、２×２×２(例えば、2-2-2)の次元に対応している。しかしながら、サブユニット104a−hは、任意の次元(例えば、2-2-4、4-2-2、2-4-2、2-4-4、等)へと分解されてよい。いったん分解されると、データストレージマネージャは、サブユニットを１つまたはそれ以上の対応するSEの中へ保管する。SEがどのように保管されるかの順序は、SE間の順序（inter-SE  order）に対応している。例えば、図示されたストレージスキーム100において、SE間の順序はXYZ順序であり、ここで、第１SEは第１サブユニット104aに対応し、第２SEは第２サブユニット104bに対応し、第３SEは第３サブユニット104cに対応する、等である。しかしながら、任意のSE間の順序が使用されてよい(例えば、YZX、ZYX、XZY、YXZ、ZXY)。例えば、YXZ順序において、第１SEは第１サブユニット104aに対応し、第２SEは第３サブユニット104cに対応し、第３SEは第２サブユニット104bに対応し、第4のSEは第4のサブユニット104dに対応する、等である。
【００２０】
各SEの中でアクティベーションがどのように保管されるかの順序は、SE内の順序（intra-SE  order）である。図示されたストレージスキーム100において、SE内の順序はXYZ順序である。例えば、第１SE  a1が１番目に保管される場合に、a2が２番目に保管され、a5が３番目に保管され、a6が４番目に保管され、a17が５番目に保管される、等である。しかしながら、SE内の順序は任意の順序であってよい(例えば、YZX、ZYX、XZY、YXZ、ZXY)。SEの中のアクティベーションは、SE内の順序に従って連続的に保管されている。しかしながら、SE自体は、非連続的に保管されてよく、または、保管されなくてもよい。例えば、第１SEおよび第２SEは、49個のメモリアドレスの場所(例えば、メモリアドレス58−メモリアドレス09)によって分離されている。
【００２１】
図示された実施例において、テンソル102は疎なテンソル（sparse  tensor）である。従って、さらに上述のように、疎なテンソルは疎性マップに対応している。従って、各SEは、対応するアクティベーションについて疎性マップを保管するためのメモリアドレスを含んでいる。テンソル102が疎なテンソルでない場合に、疎性マップは除外され得る。加えて、メモリ106は、例示的なポインタアレイポインタ（pointer  array  pointer）110を保管するためのメモリアドレスを含んでいる。例示的なポインタアレイポインタ110は、各SEの開始場所（starting  location）を示すポインタアレイ112(例えば、ポインタのアレイ)の場所（例えば、メモリアドレスの場所）を特定するポインタである。例えば、図示されたストレージスキーム100において、ポインタアレイポインタは、メモリ206内にポインタアレイ112を保管するために使用される開始アドレスである、メモリアドレス40を特定する。メモリ106は、ポインタアレイを保管する、１つまたはそれ以上のメモリアドレス(例えば、メモリアドレス40および41)を含んでいる。ポインタアレイは、SEの第１開始メモリアドレス（first  starting  memory  address）の場所を保管するアレイである。例えば、図示されたストレージスキーム100内におけるポインタアレイは、例示的な開始メモリアドレス[01、58、91、...]を保管している。
【００２２】
図2は、例示的なプロセッサ200(例えば、畳み込みニューラルネットワークエンジン)のブロック図である。プロセッサ200は、本開示の教示に従って構成された例示的なデータストレージマネージャ202を含み、データを保管し、そして、例示的なメモリ204から保管されたデータにアクセスする。例示的なメモリ204は、図1の例示的なメモリ106に対応してよい。
【００２３】
図2の例示的なデータストレージマネージャ202は、多次元データ(例えば、テンソル、ベクトル、マトリクス、等)を獲得し、データの保管のために例示的なメモリ204のセクションを割当て、そして、割当てられたメモリ内にデータを保管する。例えば、データストレージマネージャ202が密なテンソル(例えば、プロセッサの別の部分、及び／又は、インターフェイスから受信した入力)を獲得したときに、データストレージマネージャ202は、獲得した密なテンソルを保管することができるように、メモリ204内のフリー（free）な(例えば、使用可能な)場所を割当てる(例えば、現在は情報を保管していないメモリ内のメモリアドレスの場所)。いくつかの実施例において、密なテンソルは、保管される以前に、疎なオブジェクト(例えば、ベクトルまたはマトリクス)および疎性マップ(例えば、ビットマップ)へと変換される(例えば、ストレージを節約するために)。そうした実施例において、データストレージマネージャ202は、疎なオブジェクトのサイズが未知であるので、疎なオブジェクトおよび疎性マップを保管するために(例えば、密なテンソル内の非ゼロデータエレメントの量に基づいて)、いくらかの未知の量のメモリを割当てる（例えば、分割する）。いくつかの実施例において、データストレージマネージャ202は、図2に関連してさらに後述するように、事前に設定された量のメモリを割当て(例えば、密なテンソル全体を保管するのに必要な量よりも少ない量)、そして、必要なときに追加のメモリを割当てるために、疎なオブジェクトのストレージを動的にモニタリングする。
【００２４】
保管されたデータへアクセスする速度および効率を増加させるために、図2の例示的なデータストレージマネージャ202は、多次元データをSEへと分割し、そして、異なるSEをメモリ204の中へ保管する。このようにして、１つまたはそれ以上のアクティベーションがメモリ204から呼び出されるとき、データストレージマネージャ202がテンソル全体を横断する代わりに、データストレージマネージャ202は、対応するSEが保管されているところを判断して、そのSE(例えば、テンソル全体よりもはるかに小さくてよい)を横断することができ、それによって、メモリ204内に保管されたアクティベーションのアクセスの速度および効率を増加させている。加えて、テンソルを連続的にメモリに保管することが必ずしも実用的であり、または、望ましいとは限らないので(例えば、テンソル及び／又はメモリの特性のために)、SEの中のアクティベーションは連続的であるが、SE自体は非連続的に配置されてよく、それによって、よりフレキシブルな多次元データストレージを提供している。例えば、第１SEは、利用可能なメモリ空間の連続した範囲に完全に保管されており、しかし、第１SEは、第２SEを保管している第２メモリ空間とは非連続的な第１メモリ空間に保管されてよい。加えて、多次元データを分離した（discrete）SEとして保管することは、並列処理を促進する。例えば、データストレージマネージャ202は、各SEに対応するデータにアクセスし、かつ／あるいは、保管するための１つまたはそれ以上のプロセッサを含んでよく、それによって、データにアクセスし、かつ／あるいは、保管する速度および効率を増加させている。SEは、事前に設定された次元(例えば、ユーザ及び／又は製造者のプリファレンスに基づくもの)、メモリ204におけるSEの第１アクティベーションの場所に対するポインタ、および、事前に設定されたアクティベーション保管順序(例えば、XYZ、ZXY、YZX等の、３次元データがどのように編成されるかの順序)によって定義される。加えて、SE内に保管されたテンソルが疎なオブジェクトに対応するときに、SEは、SEにおけるアクティベーションに対応する疎性マップを含んでいる。アクティベーションの保管順序は、多次元データがメモリ204の中の場所(例えば、メモリアドレスまたはメモリアドレスの場所)に保管される順序に対応している。
【００２５】
上述のように、SEの次元は、ユーザ及び／又は製造者のプリファレンスに基づいてよい。SEは、より大きくても又はより小さくても、それぞれに利点と欠点を有している。例えば、より小さいSEは、より大きなSEよりも速くアクティベーションにアクセスする。加えて、データが疎であるときには、より小さいSEに対してより少ないメモリを割当てることができる。しかしながら、より大きいSEとより小さいSEの両方は、次元、サイズ、ポインタ、等を保管しなければならないので、より小さいSEは、より大きなオーバーヘッド比率(例えば、SE内保管されたコンテンツに対するSEの追加ビット)を有するが、より小さいSEは、構成によって、より大きなSEよりも小さなデータ(例えば、少ないコンテンツ)を保管する。従って、より大きなSEのストレージ効率は、より小さなSEのストレージ効率よりも高い。しかしながら、より小さいSEは、より多くのフレキシビリティを提供する。例えば、メモリ204が制限されているときには、より大きなSEよりも、より小さなSEを保管するために不足なく十分に大きい連続した利用可能なストレージ空間に係るより多くのオプションが存在する。ユーザ及び／又は製造者は、状況に最も合致する方法でデータを保管するために、プロセッサ200の特性及び／又はメモリ使用に基づいて、SEのサイズを選択することができる。例えば、SEサイズがそこに基づくことができるプロセッサ特性は、ストレージ空間の構造および利用可能性を含んでいる。追加的または代替的に、SEサイズがそこに基づくことができるメモリ使用特性は、プロセッサ速度、帯域幅、等を含んでいる。例示的なデータストレージマネージャ202は、図2に関連して以下でさらに説明されるように、分割およびモジュロ演算（modulo  operation）を実行することによって、SE次元およびSEに対するポインタに基づいて、メモリ204内に保管されたSEのアクティベーションにアクセスすることができる。
【００２６】
いくつかの実施例において、図2のデータストレージマネージャ202は、SEをブロック(例えば、サブユニット)へと分割する。SEのブロックはSEの中で連続しているので、SEをブロックへと分割することは、オーバーヘッドを著しく増加させることなく、SEをより小さいサイズへと狭める（narrow  down）。このようにして、SEにアクセスし、かつ、アクティベーションにアクセスするためにSE全体を通じて横断する代わりに、プロセッサは、SEにアクセスし、次いで、SE(例えば、SE全体よりも小さく、かつ、より少ないアクティベーションを含むもの)の中のブロックにアクセスし、そして、アクティベーションにアクセスするために、より小さいブロックを通じて横断することができる。ユーザ及び／又は製造者は、SEをブロックへと分割するか否かを決定することができる。SEをブロックへと分割することは、さらに、アクティベーションを見つけるためにプロセッサが横断する必要があるアドレスの量を削減することによって、より小さいSEについて必要とされるオーバーヘッドなしに、アクティベーションのアクセス速度および効率を増加させるが、テンソルを入力する、かつ／あるいは、マッピングするときに、データのブロック順序が非効率的なことがある。従って、ブロックにデータを保管することは、処理アレイ（processing  array）に入力され、かつ／あるいは、マッピングされる前に、ブロック順序をラスター順序（raster  order）へと変換して戻すために、余分（extra）なプロセッサリソースを必要とし得る。例示的なデータストレージマネージャ202は、図2に関連して以下でさらに説明されるように、SE次元、ブロック次元、SEに対するポインタ、および、分割とモジュロ演算に基づいて、メモリ204内に保管されたSEのブロックにおけるアクティベーションにアクセスすることができる。
【００２７】
いくつかの実施例において、図2の例示的なデータストレージマネージャ202は、ポインタテーブル及び／又は疎性マップを操作する（manipulating）ことによってテンソルを操作するために、プロセッサ200から命令（instruction）を受信する。例えば、メモリ204内に保管されたデータが画像のエッジにおいてフィルタリングされるときに、プロセッサ200は、保管されたデータに対して疎なドット積（dot  product）及び／又はコンボリューションを実行する必要がある。プロセッサ200は、そうしたコンボリューションを実行するために、特定のサイズのタイルを用いたタイルベース（tile-based）のパターンベクトルを有することができる。従って、いくつかの実施例において、データストレージマネージャ202は、疎性マップの次元が特定のサイズのタイルに一致するように、多次元データオブジェクトを、多次元データ及び／又はフィルタカーネル(例えば、タイルベースのパターンのタイル)に対応する１次元ベクトルおよびゼロパッドの疎性マップへと変換することができ、それによって、以下でさらに説明されるように、より効率的なコンボリューションプロセスを達成している。
【００２８】
図2の例示的なメモリ204は、例示的なデータストレージマネージャ202のオペレーションに基づいて、受信した多次元データ(例えば、ベクトル、マトリクス、テンソル、等)を保管する。例えば、メモリ204は、疎なベクトルの各データエレメントをメモリ204内の１つまたはそれ以上のアドレスに保管する。このようにして、疎なベクトルの各データエレメントは、１つまたはそれ以上のメモリアドレスに対応している。従って、データストレージマネージャ202が、疎なベクトルの中の場所に対応する疎なベクトルのデータエレメントにアクセスする命令を受信したとき、データストレージマネージャ202は、データエレメントが保管されているアドレスに基づいて、疎なベクトルの中の要求された場所におけるデータエレメントにアクセスすることができる。
【００２９】
図3は、図2の例示的なデータストレージマネージャ202のブロック図である。図3の例示的なデータストレージマネージャ202は、例示的なコンポーネントインターフェイス300、例示的なメモリインターフェイス302、例示的な疎なベクトル変換器304、例示的なメモリアロケータ306、例示的なメモリブロックバッファ308、例示的な記憶素子オーガナイザ310、例示的なメモリプロセッサユニット312、例示的なベクトルマニピュレータ314、および、例示的なタイルベースのコンボリューション決定器316を含んでいる。
【００３０】
図3の例示的なコンポーネントインターフェイス300は、図2の例示的なプロセッサ200に係る別のデータエレメント及び／又はアプリケーションから、例示的なメモリ204内に保管されるべき多次元データを獲得する。加えて、例示的なコンポーネントインターフェイス300は、例示的なプロセッサ200の別のデータエレメントから、命令を受信することができる。命令は、動的割当てプロセスのために使用されるメモリブロックの所望のサイズ、SEの所望の次元、SEの中のブロックの所望の次元、密な多次元データが疎なオブジェクトとして保管されるか否か、ポインタのアレイ及び／又は疎性マップを操作するか否かに関する命令、等に対応し得る。加えて、例示的なコンポーネントインターフェイス300は、例示的なメモリ204から、図2のプロセッサ200の別のデータエレメント及び／又はアプリケーションへ、アクセスしたアクティベーションを出力することができる。図3の例示的なメモリインターフェイス302は、多次元データのアクティベーションを保管し、かつ／あるいは、アクセスするために、例示的なメモリ204とインターフェイスする。
【００３１】
図3の例示的な疎なベクトル変換器304は、密なベクトルを受信し、そして、密なベクトルを、疎なベクトル(例えば、受信したベクトルについて非ゼロ値だけを含むベクトル)および疎性マップ(例えば、密なベクトルのどのデータエレメントがゼロであり、そして、ベクトルのデータエレメントが非ゼロであるかを特定しているビットマップ)へと変換する。例えば、疎なベクトル変換器304が９×１（nine-by-one）の密なベクトル[0、0、532、0、1432、4、0、0、1]を受信する場合に、疎なベクトル変換器304は、９×１次元の密なベクトルを、密なベクトルの非ゼロ値を含み、かつ、密なベクトルのゼロ値を排除している、４×１次元の疎なベクトル(例えば、[532、1432、4、1])へと変換する。疎なベクトル変換器304は、また、８×１次元の疎性マップ(例えば、[0、0、1、0、1、1、0、0、1])も生成する。対応するデータエレメントがゼロであるか非ゼロか否か特定している単一ビットを用いて、受信した密なベクトルの各データエレメントを表しているものである(例えば、ベクトルの対応するデータエレメントが「0」である場合は「0」、そして、ベクトルの対応するデータエレメントが非ゼロである場合は「1」である)。密なベクトル(例えば、少なくとも1つのゼロ値および少なくとも１つの非ゼロ値の両方を有するベクトル)は、疎性マップ(例えば、密なベクトルのビットマップベクトル)を使用して、疎なベクトル(例えば、密なベクトルの非ゼロ値だけを有するベクトル)から再構成され得る。しかしながら、疎なベクトルおよび疎性マップを保管することは、密なベクトルが十分なゼロ値データエレメントを含むときに、密なベクトルを保管するよりも少ないメモリを必要とする。例えば、上記の密なベクトルの各データエレメントが16ビットに対応する場合には、密なベクトルを保管するために必要なビット数は72ビット(例えば、９個のデータエレメント×８ビット＝７２ビット)である。しかしながら、対応する疎なベクトルは４個のデータエレメントだけを含み、かつ、対応する疎性マップはデータエレメント毎に１ビットだけを必要するので、対応する疎なベクトルおよび疎性マップを保管することは４１ビットを必要とする(例えば、(４個のデータエレメント×８ビット)＋(９個のデータエレメント×１ビット)＝４１ビット)。いくつかの実施例において、密なベクトルは、別のプロセッサから獲得される。いくつかの実施例において、密なベクトルは、ユーザインターフェイスを介してユーザから獲得される。
【００３２】
図3の例示的なメモリアロケータ306は、例示的なコンポーネントインターフェイス300が例示的なメモリ204内に保管されるべき多次元データを受信したときに、例示的なメモリ204(図2)における空間（space）及び／又は場所（location）(例えばメモリアドレス)を割当てる。多次元データが疎なオブジェクトへと変換されるときに、例示的なメモリアロケータ306は、例示的なメモリ204において事前に設定された数のメモリブロックを割当てる。メモリブロックは、完全に密な多次元データよりも小さな事前に設定されたサイズである(例えば、ユーザ及び／又は製造者のプリファレンスに基づいている)。例示的なメモリアロケータ306は、例示的なメモリブロックバッファ308におけるメモリブロックの場所及び／又はサイズを保管する。例示的なSEオーガナイザ310は、疎なオブジェクトを保管するために割当てられたメモリブロックを使用するので、対応するメモリブロックデータがメモリブロックバッファ308から排除される。従って、メモリアロケータ306は、保管されたメモリブロックデータの数が閾値を下回るときに、追加のメモリブロックを割当てるために、メモリブロックバッファ308をモニタリングしている。加えて、例示的なメモリアロケータ306は、データが保管されている間に、例示的なメモリ204内の利用可能な記憶装置の量をモニタリングする。利用可能なストレージの量が閾値を下回る場合に、例示的なメモリアロケータ306は、既に使用されている（populated）メモリブロックを長期メモリへと引き込み(例えば、それによって、再割当てされるように短期メモリを解放する)、そして、SEポインタテーブル内で影響を受けるSEのアドレスを更新する。メモリ割当てが完了したときに、例示的なメモリアロケータ306は、任意の未使用なメモリブロックを割当て解除（deallocates）する。
【００３３】
図3の例示的なSEオーガナイザ310は、例示的なメモリインターフェイス302を介して、例示的なメモリ204の中に、受信した多次元データ及び／又は疎なオブジェクト(例えば、多次元データから生成されたもの)を保管する。例えば、SEオーガナイザ310は、多次元データをSE及び／又はSEのブロックへと分割する。いくつかの実施例において、SEオーガナイザ310は、１つまたはそれ以上のSEを並列に保管するための並列プロセッサであってよい。例示的なSEオーガナイザ310は、追加的に、保管された各SEのポインタを決定し、そして、例示的なメモリ204の中にSEポインタのアレイを保管する。多次元データが疎なオブジェクトへと変換される場合に、例示的なSEオーガナイザ310は、追加的に、疎性マップおよび疎性マップのためのポインタに対応する疎性マップポインタアレイを例示的なメモリ204の中へ保管する。SEポインタは、複数のプロセッサを並列に使用してデータにアクセスするように、保管されたSEの選択可能な実行を促進する。
【００３４】
図3の例示的なメモリプロセッサユニット312は、例示的なメモリ204のSE内、及び／又は、SEの中のブロックにおいて保管されている１つまたはそれ以上のアクティベーションにアクセスする。アクセスする複数のアクティベーションが存在するとき、例示的なメモリプロセッサユニット312は、異なるメモリプロセッサユニットに、ポインタアレイのポインタに基づいて異なるアクティベーションを選択的にアクセスさせるように、並列処理を適用することができる。例えば、記憶素子（storage  element）はメモリの異なる場所に保管されており、かつ、各記憶素子のポインタも、また、メモリ内に保管されているので、２つのプロセッサは、独立して異なる記憶素子から同時にデータを獲得することができる。いくつかの実施例において、メモリプロセッサユニットは、１つまたはそれ以上のSEに対する専用（dedicated）である。そうした実施例においては、アクティベーションがSEのうちの１つに属するときに、対応するメモリプロセッサユニットは、アクティベーションにアクセスするためにメモリ204を横断し、一方で、他のメモリプロセッサユニットは、他のSEにおける他のアクティベーションのためにメモリ204を横断する。例示的なメモリプロセッサユニット312は、アクティベーションの座標、および、SE及び／又はSEの中のブロックの次元に対応する分割及び／又はモジュロ演算に基づいて、メモリ204内のアクティベーションの場所を決定する。加えて、例示的なメモリプロセッサユニット312は、どのようにSEが構成されるかに対応する順序(例えば、XYZ、ZYX、YXZ、等)、どのようにブロックがSEの中に保管されるかの順序、及び／又は、どのようにアクティベーションがSE及び／又はブロックに係るSEの中に保管されるかの順序に基づいて、順序オフセット（order  offset）を説明する必要があるだろう。順序オフセットの適用は、図10A−10Dと関連して以下でさらに説明される。
【００３５】
図3の例示的なベクトルマニピュレータ314は、アクセス後（post-access）のオペレーションの効率を増加させるために、アクセスされた多次元テンソル及び／又はフィルタテンソルを操作する。例えば、例示的なメモリ204から多次元データが呼び出されるときに、多次元データは、その後、タイルベースのプロトコルを使用してフィルタリングされ得る。そうしたタイルベースのフィルタリングは、コンボリューションを使用して多次元データに適用される多数の重み（weights）に(例えば、フィルタカーネルの一部として)対応する。フィルタは事前に設定されてよいので、例示的なベクトルマニピュレータ314は、コンボリューションプロセスの効率を増加させるために、多次元テンソル及び／又はフィルタテンソル（filter  tensor）について、ゼロパディングし（zero  pad）、かつ／あるいは、他の操作を実行することができる。従来、ゼロパディングは、密なデータをフィルタテンソルに一致させるために、密なデータ自体について使用されていた。しかしながら、いくつかのコンボリューション技術は、疎性マップに基づいて畳込みを実行することによって、プロセッサリソースを節約することができ、これは、あらゆる非ゼロ計算を排除する。従って、そうした実施例において、多次元データが疎なオブジェクトに対応するときに、例示的なベクトルマニピュレータ314は、疎なデータ（sparsity  data）ではなく疎性マップ（sparsity  map）をゼロパディングしてよく、疎性マップは疎なデータよりも少ないメモリを使用するので、それによって、リソースを節約している。いくつかの実施例において、多次元データが疎なオブジェクトに対応するときに、ベクトルマニピュレータ314は、疎性マップの次元にマッチするようにフィルタテンソルの疎性マップをゼロパディングし、そして、ゼロパディングされたフィルタ疎性マップおよびデータ疎性マップに基づいて、必要なコンボリューションを実行する。例示的なベクトルマニピュレータ314によって実行される操作の例は、図11A−図11Bに関連して以下でさらに説明される。
【００３６】
図3の例示的なタイルベースのコンボリューション決定器316は、フィルタを用いて多次元データのコンボリューションを実行する。いくつかの実施例において、タイルベースのコンボリューション決定器316は、疎性マップベースのコンボリューションを実行することができる。それは、フィルタリングプロセスについてコンボリューションを完了するために乗算される必要がある非ゼロのデータエレメントを識別するように、多次元データの疎性マップおよびフィルタカーネルの疎性マップを処理するものである（例えば、ゼロパディング）。
【００３７】
図2の例示的なデータストレージマネージャ202を実装する例示的な方法が図3に示されている。図3に示されるエレメント、プロセス、及び／又は、デバイスのうち１つまたはそれ以上は、任意の方法で、組み合わされ、分割され、再構成され、省略され、排除され、かつ／あるいは、実施されてよい。さらに、図3の例示的なコンポーネントインターフェイス300、例示的なメモリインターフェイス304、例示的なメモリアロケータ306、例示的な疎なベクトル変換器308、例示的なストレージオーガナイザ312、例示的なメモリプロセッサユニット314、例示的なベクトルマニピュレータ314、例示的なタイルベースのコンボリューション決定器316、及び／又は、より一般的な、例示的なデータストレージマネージャ202は、ハードウェア、ソフトウェア、ファームウェア、及び／又は、ハードウェア、ソフトウェア、及び／又はファームウェアの任意の組み合わせによって実施され得る。従って、例えば、図3の例示的なコンポーネントインターフェイス300、例示的なメモリインターフェイス304、例示的なメモリアロケータ306、例示的な疎なベクトル変換器308、例示的なストレージオーガナイザ312、例示的なメモリプロセッサユニット314、例示的なベクトルマニピュレータ314、例示的なタイルベースのコンボリューション決定器316、及び／又は、より一般的な、例示的なデータストレージマネージャ202のいずれも、１つまたはそれ以上のアナログまたはデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、及び／又は、フィールドプログラマブル論理デバイス(FPLD)によって実装され得るだろう。ソフトウェア及び／又はファームウェアの実装を純粋にカバーするように、この特許発明の装置またはシステムクレームのいずれかを読むときに、図３の例示的なコンポーネントインターフェイス300、例示的なメモリインターフェイス304、例示的なメモリアロケータ306、例示的な疎なベクトル変換器308、例示的なストレージオーガナイザ312、例示的なメモリプロセッサユニット314、例示的なベクトルマニピュレータ314、例示的なタイルベースのコンボリューション決定器316、及び／又は、より一般的な、例示的なデータストレージマネージャ202は、ここにおいて、明確に、ソフトウェア及び／又はファームウェアを含めて、非一時的なコンピュータで読取り可能な記憶装置、または、メモリ、デジタル多用途ディスク（DVD）、コンパクトディスク（CD）、ブルーレイ（登録商標）ディスク、等といった、ストレージディスクを含むように定義されている。さらに、なおも、図3の例示的なデータストレージマネージャ202は、図3に示されたものに加えて、またはその代わりに、１つまたはそれ以上のエレメント、プロセス、及び／又は、デバイスを含んでよく、かつ／あるいは、図示されたエレメント、プロセス、およびデバイスのいずれか又は全てのうち１つまたはそれ以上を含んでよい。ここにおいて使用されるフレーズ「通信して（“in  communication”）」は、その変形を含めて、直接通信、及び／又は、１つまたはそれ以上の中間コンポーネントを介した間接通信を包含するものであり、そして���直接的な物理的通信(例えば、有線)及び／又は常時の通信（constant  communication）を必要としないが、むしろ、追加的に、周期的なインターバル、スケジュールされたインターバル、非周期的なインターバル、及び／又は、１回限りのイベント（one-time  event）における選択的な通信を含んでいる。
【００３８】
図2及び／又は図3の例示的なデータストレージマネージャ202を実施するための、例示的なハードウェアロジック、マシンで読取り可能な命令、ハードウェア実装の状態マシン、及び／又は、それらの任意の組み合わせを表すフローチャートが図4−9に示されている。マシンで読取り可能な命令は、図12に関連して以下で説明される例示的なプロセッサプラットフォーム1200に示されるプロセッサ200といった、コンピュータプロセッサによる実行のための実行可能なプログラムのうちの実行可能プログラムまたは一部であってよい。プログラムは、CD-ROM、フロッピー（登録商標）ディスク、ハードドライブ、DVD、ブルーレイディスク、または、プロセッサ200と関連付けされたメモリといった、非一時的なコンピュータで読取り可能な記憶媒体上に保管されたソフトウェアにおいて具現化され得るが、プログラム全体及び／又はその一部は、代替的に、プロセッサ200以外の装置によって実行され、かつ／あるいは、ファームウェアまたは専用ハードウェアにおいて具現化され得る。さらに、例示的なプログラムが、図4−9に示されるフローチャートを参照して説明されているが、図3の例示的なデータストレージマネージャ202を実装する多くの他の方法が代替的に使用され得る。例えば、ブロックの実行の順序が変更されてよく、かつ／あるいは、説明されたブロックのいくつかが変更、され、削除され、または、組み合わされてよい。追加的または代替的に、ブロックの一部または全部は、ソフトウェアまたはファームウェアを実行することなく対応するオペレーションを実行するように構成された１つまたはそれ以上のハードウェア回路(例えば、分散及び／又は集積アナログ及び／又はデジタル回路、FPGA、ASIC、コンパレータ、動作増幅器(オペアンプ、op-amp)、論理回路、等)によって実装されてよい。
【００３９】
ここにおいて説明されるマシンで読取り可能な命令は、圧縮フォーマット、暗号化フォーマット、フラグメント化フォーマット、パッケージ化フォーマット、等のうち１つまたはそれ以上で保管されてよい。ここにおいて説明されるマシンで読取り可能な命令は、マシンで実行可能な命令を作成し、製造し、かつ／あるいは、生成するために利用され得るデータ(例えば、命令の部分、コード、コードの表現、等)として保管され得る。例えば、マシンで読取り可能な命令は、１つまたはそれ以上の記憶装置及び／又は計算装置(例えば、サーバ)において分割され（fragmented）、そして、保管されてよい。マシンで読取り可能な命令は、コンピュータ装置及び／又は他のマシンによって直接的に読取り可能、及び／又は、実行可能にするために、インストール、修正、適応、更新、組み合わせ、補足、構成、復号化（decryption）、復元（decompression）、解凍、配布、再割当て、等のうち１つまたはそれ以上を必要とし得る。例えば、マシンで読取り可能な命令は、個別に圧縮され、暗号化され、そして、別個の計算装置に保管されている、複数の部分に保管されてよく、ここで、その部分は、復号化され、解凍され、そして、組み合わされたときに、ここにおいて説明されるようなプログラムを実行する実行可能命令のセットを形成する。別の実施例において、マシンで読取り可能な命令は、それらがコンピュータによって読まれ得る状態で保管されてよいが、特定の計算装置または他の装置上で命令を実行するために、ライブラリ(例えば、ダイナミックリンクライブラリ（DLL）)、ソフトウェア開発キット（SDK）、アプリケーションプログラミングインターフェイス（API）、等の追加を必要とする。別の実施例において、マシンで読取り可能な命令は、マシンで読取り可能な命令及び／又は対応するプログラムが、全体的または部分的に実行される以前に、構成される(例えば、設定が保管され、データが入力され、ネットワークアドレスが記録される、等)必要があり得る。従って、開示されるマシンで読取り可能な命令及び／又は対応するプログラムは、保管されるとき、または、そうでなければ、休止（at  rest）又は輸送中（in  transit）に、マシンで読取り可能な命令及び／又はプログラムの特定のフォーマットまたは状態にかかわらず、そうしたマシンで読取り可能な命令及び／又はプログラムを包含するように意図されている。
【００４０】
上述のように、図4−9の例示的なプロセスは、非一時的なコンピュータ及び／又はマシンで読取り可能な媒体に保管される実行可能な命令(例えば、コンピュータ及び／又はマシンで読取り可能な命令)を使用して実施され得る。ハードディスクドライブ、フラッシュメモリ、読み出し専用メモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び／又は、情報が任意の期間(例えば、長期間、永久的、短時間、一時的なバッファリング、及び／又は、情報をキャッシュするために)保管される任意の他の記憶装置またはストレージディスク、といったものである。ここにおいて使用されるように、用語である、非一時的なコンピュータで読取り可能な媒体は、あらゆるタイプのコンピュータで読取り可能な記憶装置及び／又はストレージディスクを含み、そして、伝搬信号（propagating  signals）を排除し、かつ、伝送媒体（transmission  media）を排除するように、明確に定義されている。
【００４１】
「含む（“including”および“comprising”）」(および、全ての形式と、その時制（tenses）)は、オープンエンドの用語であるようにここにおいて使用されている。従って、請求項が、プリアンブルとして、または、あらゆる種類の請求項の記載内で、いずれの形式の「含む」(例えば、含む（comprises、includes、comprising、including、having）、等)を使用する場合でも、追加のエレメント、用語、等は、対応する請求項または記載の範囲の外側に陥ることなく、存在し得ることが理解される。ここにおいて使用されるように、フレーズ「少なくとも」が、例えば、請求項のプリアンブルにおいてトラジションターム（transition  term）として使用されるときには、用語「含む（“including”および“comprising”）」がオープンエンドであるのと同様に、それはオープンエンドである。用語「及び／又は」は、例えば、A、B、及び／又はCといった形式で使用されるときに、（１）A単独、（２）B単独、（３）C単独、（４）AとB、（５）AとC、（６）BとC、（７）AとBとC、といったA、B、Cの任意の組み合わせ又はサブセットを参照する。構造、コンポーネント、アイテム、オブジェクト、及び／又は物を説明するコンテキストで、ここにおいて使用されるように、フレーズ「AおよびBのうち少なくとも１つ（“at  least  one  of  A  and  B”）」は、（１）少なくとも１つのA、（２）少なくとも１つのB、および、（３）少なくとも１つのAおよび少なくとも１つのB、のいずれかを含む実装を参照するように意図されている。同様に、構造、コンポーネント、アイテム、オブジェクト、及び／又は物を説明するコンテキストで、ここにおいて使用されるように、フレーズ「AまたはBのうち少なくとも１つ（“at  least  one  of  A  or  B”）」は、（１）少なくとも１つのA、（２）少なくとも１つのB、および、（３）少なくとも１つのAおよび少なくとも１つのB、のいずれかを含む実装を参照するように意図されている。プロセス、命令、アクション、アクティビティ、及び／又は、ステップの実行または実施を説明するコンテキストで、ここにおいて使用されるように、フレーズ「AおよびBのうち少なくとも１つ」は、（１）少なくとも１つのA、（２）少なくとも１つのB、および、（３）少なくとも１つのAおよび少なくとも１つのB、のいずれかを含む実装を参照するように意図されている。同様に、プロセス、命令、アクション、アクティビティ、及び／又は、ステップの実行または実施を説明するコンテキストで、ここにおいて使用されるように、フレーズ「AまたはBのうち少なくとも１つ」は、（１）少なくとも１つのA、（２）少なくとも１つのB、および、（３）少なくとも１つのAおよび少なくとも１つのB、のいずれかを含む実装を参照するように意図されている。
【００４２】
図4は、疎なオブジェクト(例えば、ベクトルまたはマトリクス)を保管するためのメモリを割当てるために、図3の例示的なデータストレージマネージャ202を実施するように、プロセッサ200(図2)によって実行され得る例示的なマシンで読取り可能な命令を表す例示的なフローチャート400である。図4のフローチャート400は、図3の例示的なデータストレージマネージャ202と関連して説明されているが、他のタイプのデータストレージマネージャ及び／又は他のタイプのプロセッサが、代わりに、使用されてよい。
【００４３】
ブロック402において、例示的なメモリアロケータ306(図3)は、例示的なコンポーネントインターフェイス300(図3)を介してメモリ割当てリクエストを受信する。メモリ割当てリクエストは、疎なオブジェクトおよび疎性マップへと変換され、かつ、例示的なメモリ204(図2)内に保管される多次元データを獲得することに対応し得る。ブロック404において、例示的なメモリアロケータ306は、疎なオブジェクトの保管のために多数のメモリブロックを割当てる。上述のように、保管されるべき多次元データの疎性（sparsity）は、疎なオブジェクトへと変換する前には知られていないので、疎なオブジェクトに対して割当てられる必要があるメモリの量も同様に知られていない。従って、例示的なメモリアロケータ306は、メモリの初期量として多数のメモリブロックを割当て、より多くのメモリブロックが必要とされる際に保管プロセスの最中に更新する。
【００４４】
ブロック406において、例示的なメモリアロケータ306は、例示的なメモリブロックバッファ308(図3)内に、割当てられたメモリブロックのメモリアドレスの場所を保管及び／又は発行（publish）する。このようにして、例示的なSEオーガナイザ310(図3)のうち１つは、メモリブロックバッファ308からメモリブロックの場所を引き出し、そして、メモリ204内の対応するメモリアドレスの場所にデータの保管することを開始し得る。ブロック408において、メモリアロケータ306は、多次元データに対応する疎なオブジェクトの保管が完了しているかを(例えば、SEオーガナイザ310からのトリガ、フラグ、及び／又は、信号に基づいて)判断する。例示的なメモリアロケータ306が保管は完了していると判断した場合(ブロック408：はい)、例示的なメモリアロケータ306は、例示的なメモリ204から未使用（unused）メモリブロックの割当てを解除（deallocate）する(ブロック418)。図4の例示的なプロセスは、次いで、終了する。
【００４５】
ブロック408に戻ると、例示的なメモリアロケータ306が保管は完了していないと判断した場合(ブロック408：いいえ)、例示的なメモリアロケータ306は、例示的なメモリブロックバッファ308内で割当てられたメモリブロックの場所の数がメモリブロックの場所の数の閾値の下回るかを判断する(ブロック410)。上述のように、SEオーガナイザ310(図3)は、データを保管するためにメモリブロックバッファ308から場所（locations）を引き出す。従って、SEオーガナイザ310が場所を引き出すと、メモリブロックバッファ308内の利用可能なメモリブロックの場所の数は減少する。例示的なメモリアロケータ306が、例示的なメモリブロックバッファ308内で割当てられたメモリブロックの場所の数がメモリブロックの場所の数の閾値を下回らないと判断した場合(ブロック410：いいえ)、制御はブロック408に戻る。例示的なメモリアロケータ306が、例示的なメモリブロックバッファ308内の割当てられたメモリブロックの場所の数がメモリブロックの場所の数の閾値を下回ると判断した場合(ブロック410：はい)、例示的なメモリアロケータ306は、例示的なメモリ204内の利用可能なメモリブロックの数がメモリの量の閾値を下回るかを判断する。メモリ204の量は制限されているので、追加的なメモリブロックが割当てられると、使用可能なメモリブロックの数は減少する。
【００４６】
例示的なメモリアロケータ306が、例示的なメモリ204内で利用可能なメモリブロックの数がメモリの量の閾値を下回らないと判断した場合(ブロック412：いいえ)、制御はブロック404に戻り、メモリブロックの追加の数を割当てる。例示的なメモリアロケータ306が、例示的なメモリ204内で利用可能なメモリブロックの数がメモリの量の閾値を下回ると判断した場合(ブロック412：はい)、例示的なメモリアロケータ306は、既に使用されている（populated）メモリブロックのデータを長期メモリ（long-term  memory）へと移動させる(ブロック414)(例えば、例示的なメモリ204内で必要とされる追加のメモリブロックのためにスペースを作るように)。ブロック416において、例示的なメモリアロケータ306は、取り込まれたメモリブロックにおけるデータの新しい場所を反映するように、例示的なメモリ204内に保管されたSEポインタテーブル内で影響を受けるSEのアドレスを更新する。図4の例示的なプロセスは、次いで、終了する。
【００４７】
図5は、割当てられたメモリブロックに基づいて疎なオブジェクト(例えば、ベクトルまたはマトリクス)を保管するために、図3の例示的なデータストレージマネージャ202を実装するように例示的なプロセッサ200(図2)によって実行され得る、例示的なマシンで読取り可能な命令を表す例示的なフローチャート500である。図5のフローチャート500は、図3の例示的なデータストレージマネージャ202と関連して説明されているが、他のタイプのデータストレージマネージャ及び／又は他のタイプのプロセッサが、代わりに、使用されてよい。
【００４８】
ブロック502において、例示的なSEオーガナイザ310(図3)は、疎なオブジェクト(例えば、ベクトルまたはマトリクス)へと変換され、かつ、例示的なメモリ204(図2)の中に保管される、データオブジェクト(例えば、３次元データ)を獲得する。ブロック504において、例示的なSEオーガナイザ310は、例示的なメモリアロケータ306(図3)に対してメモリ割当てリクエストを送信する。このようにして、例示的なメモリアロケータ306は、図3に関連して上記に説明したように、疎なオブジェクトの保管のためにメモリブロックを割当てることができる。
【００４９】
ブロック506において、例示的なSEオーガナイザ310は、例示的なメモリブロックバッファ308からメモリブロックアドレスを要求する。いくつかの実施例において、SEオーガナイザ310は、複数のSEオーガナイザ310を使用して、データを並列に保管することができるように、疎なオブジェクトをSEへと分割する。そうした実施例において、SEオーガナイザ310は、異なるSEについてメモリブロックの場所を収集することができる。ブロック508において、例示的な疎なベクトル変換器304は、データオブジェクトの非ゼロデータエレメントに基づいて疎なオブジェクトを生成する。ブロック510において、例示的なSEオーガナイザ310は、疎なオブジェクトが取り込まれている、メモリ204のアドレスを(例えば、図3の例示的なメモリインターフェイス302を介して)メモリ204内のSEポインタテーブルの中へ書き込む。ブロック512において、例示的なSEオーガナイザ310は、メモリブロックバッファ308から引き出された、リクエストされたメモリブロックの場所に基づいて、メモリブロックの一部に生成された疎なオブジェクトを取り込む。
【００５０】
ブロック514において、例示的な疎なベクトル変換器304(図3)は、保管する追加の非ゼロデータエレメントが存在するかを判断する。例示的な疎なベクトル変換器304が、保管する追加の非ゼロデータエレメントが存在しないと判断した場合(ブロック514：いいえ)、SEオーガナイザ310は、例示的なメモリアロケータ306に対して保管完了指示（storage  complete  indication）を送信する(ブロック520)。このようにして、メモリアロケータ306は、任意の未使用メモリブロックを割当て解除することができる。図5の例示的なプロセスは、次いで、終了する。しかしながら、例示的な疎なベクトル変換器304が、保管する追加の非ゼロデータエレメントが少なくとも１つ存在すると判断した場合(ブロック514：はい)、例示的なSEオーガナイザ310は、リクエストされたメモリブロックが満杯であるかを判断する(ブロック516)。
【００５１】
例示的なSEオーガナイザ310が、メモリブロックは満杯でないと判断した場合(ブロック516：いいえ)、制御はブロック508へ戻り、メモリブロック内に追加の疎なオブジェクトを生成し、かつ、保管する。例示的なSEオーガナイザ310が、メモリブロックが満杯であると判断した場合(ブロック516：はい)、例示的なSEオーガナイザ310は、例示的なメモリブロックバッファ308(図3)(ブロック518)から追加のメモリブロックの場所を要求する。そして、制御はブロック508へ戻り、追加の疎なオブジェクトを生成し、かつ、追加のメモリブロック内に保管する。図5の例示的なプロセスは、次いで、終了する。
【００５２】
図6は、例示的なメモリ204内にSEとして多次元データを保管するために、図3のデータストレージマネージャ202の例示的な実装を実施するようにプロセッサ200(図2)によって実行され得る、例示的なマシンで読取り可能な命令を表す例示的なフローチャート600である。図6のフローチャート600は、図3の例示的なデータストレージマネージャ202と関連して説明されているが、他のタイプのデータストレージマネージャ及び／又は他のタイプのプロセッサが、代わりに、使用されてよい。加えて、フローチャート600は、多次元データ(例えば、テンソル)と関連して説明されているが、フローチャート600は、他のタイプのデータ(例えば、重み保管のための重み付け)と関連して説明されてよい。
【００５３】
ブロック602において、例示的なSEオーガナイザ310(図3)は、例示的なコンポーネントインターフェイス300(図3)を介して多次元データを獲得する。ブロック604において、例示的なSEオーガナイザ310は、SE特性に基づいて、例示的なメモリ204の構成及び／又は割当てを決定する。例えば、SEが特定の次元に対応する場合に、SEオーガナイザ310は、SEの中でデータアクティベーションが連続的に保管されるように、SEが保管されるところであるメモリ204の各ブロックの開始場所(例えば、開始メモリアドレス)を決定する。しかしながら、上述のように、SEの中のデータエレメントは連続しているが、SE自体は、連続して保管されても、または、されてなくてもよい。いくつかの実施例において、SEオーガナイザ310は、図4の指令に基づいて、メモリ204の割当てを決定する。ブロック606において、例示的なSEオーガナイザ310は、SEがブロックへと分割されるかを(例えば、ユーザ及び／又は製造者のプリファレンスに基づいて)判断する。
【００５４】
例示的なSEオーガナイザ310が、SEはブロックへと分割されると判断する場合(ブロック606：はい)、SEオーガナイザ310は、ブロックアクティベーション順序(例えば、ブロックの中のデータアクティベーションに係るXYZ、ZXY、またはYZX)、SE間順序(例えば、メモリ204内でSEが配置されるところに対応する)、及び／又は、SE内順序(例えば、SEの中のブロックに係るXYZ、ZXY、またはYZX)に基づいて、ブロック化された（blocked）アクティベーション(例えば、ブロックの次元に対応するアクティベーション)をSEのブロックの中へ保管する(ブロック608)。いくつかの実施例において、SE及び／又はブロックは、より速く、より効率的な方法でデータアクティベーションを保管するために、並列処理の目的で、異なるSEオーガナイザ310に対応することができる。
【００５５】
例示的なSEオーガナイザ310が、SEはブロックへと分割されていないと判断した場合(ブロック606：いいえ)、例示的なSEオーガナイザ310は、多次元データのアクティベーションをSEへと分割(例えば、分離または分割)する(ブロック610)。例えば、SEが１０個のアクティベーションに適合するように(例えば、ユーザ及び／又は製造者のプリファレンスに基づいて)サイズ化されている場合、例示的なSEオーガナイザ310は、多次元データを１０個のアクティベーションのSE(例えば、グループ)へと分割する。ブロック612において、例示的なSEオーガナイザ310は、アクティベーション順序(例えば、獲得された多次元データの順序)、SE間順序(例えば、メモリ204内でSEが配置されるところに対応している)、及び／又は、SE内順序(例えば、SEの中のアクティベーションに係るXYZ、ZXY、またはYZX)に基づいて、ストレージアクティベーションをメモリ204の中へ保管する。いくつかの実施例において、SEは、より速く、より効率的な方法でデータアクティベーションを保管するために、並列処理の目的で、異なるSEオーガナイザ310に対応することができる。
【００５６】
ブロック614において、例示的なSEオーガナイザ310は、各SEのメモリ204内の開始メモリアドレスに基づいて、SEに対するSEポインタを決定する(例えば、第１SEの第１ロケーション（location）がアドレスXに対応し、第２SEの第１ロケーションがアドレスYに対応する、等)。ブロック616において、例示的なSEオーガナイザ310は、例示的なメモリインターフェイス302を使用して、SEポインタを、SEポインタアレイ（pointer  array）としてメモリ204内で連続的に保管する。ブロック618において、例示的なSEオーガナイザ310は、例示的なメモリインターフェイス302を使用して、SEポインタアレイに対する記憶素子ポインタをメモリ204の中へ保管する。SEポインタは、SEポインタアレイの中でSEを追跡（track）する。図3に関連して上記に説明したように、SEポインタは、例示的なメモリプロセッサユニット312による選択可能な実行を促進し、それによって、データエレメントの並列アクセスを可能にしている。例えば、メモリプロセッサユニット312は、関心対象のデータエレメントのSEに対応しているポインタを利用することができ、そして、メモリプロセッサユニット312は、ポインタに基づいて、異なるSEから関心対象の異なるデータエレメントを並列に獲得することができる。
【００５７】
ブロック620において、例示的なSEオーガナイザ310は、獲得されたデータが疎なオブジェクトに対応するかを判断する。いくつかの実施例において、例示的なコンポーネントインターフェイス300によって獲得された多次元データは、多次元データを疎なオブジェクトへと変換する命令（instruction）を含み、かつ／あるいは、疎なオブジェクトおよび疎性マップに既に対応している。そうした実施例において、疎なベクトル変換器304(図3)は、多次元データを疎なオブジェクトおよび疎性マップへと変換することができる。疎なオブジェクトおよび疎性マップを生成する疎なベクトル変換器304に応答して、かつ／あるいは、疎なオブジェクトおよび疎性マップを受信するコンポーネントインターフェイス300に応答して、SEオーガナイザ310は、獲得されたオブジェクトは疎なオブジェクトに対応していることを判断する。
【００５８】
例示的なSEオーガナイザ310が、獲得されたデータは疎なオブジェクトに対応しないと判断した場合(ブロック620：いいえ)、図6の例示的なプロセスは終了する。例示的なSEオーガナイザ310が、獲得されたデータは疎なオブジェクトに対応すると判断した場合(ブロック620：はい)、例示的なSEオーガナイザ310は、例示的なメモリインターフェイス302を使用して、疎性マップを、例示的なメモリ204内で連続的に疎性マップアレイとして保管する(ブロック622)。ブロック624において、例示的なSEオーガナイザ310は、例示的なメモリインターフェイス302を使用して、疎性マップアレイに対する疎性マップポインタ(例えば、疎性マップを追跡している)を例示的なメモリ204の中へ保管する。いくつかの実施例において、SEオーガナイザ310は、例示的なメモリ204内に保管する以前に、疎性マップをエッジパッド（edge  pad）(例えば、ゼロを追加することによるゼロパディング)してよい。疎性マップをゼロパディングすることにより、データ自体とは対照的に、例示的なコンボリューション決定器316は、パディングされた疎性マップに基づいて多次元データをフィルタリングし、かつ／あるいは、処理することが可能になる。従って、不必要な計算は実行されない(例えば、ゼロのデータエレメントを用いるドット積は、非ゼロのデータエレメントを用いるよりも少ない計算を必要とする)。
【００５９】
図7は、例示的なメモリ204内にSEとして保管された多次元データにアクセスするため、図3の例示的なデータストレージマネージャ202を実装するように例示的なプロセッサ200(図2)によって実行され得る、例示的なマシンで読取り可能な命令を表す例示的なフローチャート700である。図7のフローチャート700は、図10A−図10Bの例示的なテーブル1000、1002と関連して説明されている。例示的な第１テーブル2000は、テンソルの中のSE順序(例えば、多次元データによってSEが形成される順序)に基づくオフセット変数（offset  variables）に対応しており、そして、例示的な第２テーブル2002は、SEの中のアクティベーション順序に基づくオフセット変数に対応している。図7のフローチャート700は、図3の例示的なデータストレージマネージャ202と関連して説明されているが、他のタイプのデータストレージマネージャ及び／又は他のタイプのプロセッサが、代わりに、使用されてよい。加えて、フローチャート700は、多次元データ(例えば、テンソル)と関連して説明されているが、フローチャート700は、他のタイプのデータ(例えば、重み保管（weight  storage）)と関連して説明されてよい。
【００６０】
ブロック702において、例示的なメモリプロセッサユニット312(図3)は、例示的なコンポーネントインターフェイス300(図3)を介してアクティベーションの座標（coordinate）を獲得する。メモリプロセッサユニット(複数可)312が、複数のアクティベーションについて複数の座標を獲得する場合に、メモリプロセッサユニット312は、複数のユニットを並列に(例えば、アクティベーションの座標に対応するSEに基づいて)処理してよい。ブロック704において、例示的なメモリプロセッサユニット312は、SE次元およびアクティベーションの座標に基づいて(例えば、分割演算に基づいて)、SEの座標を決定する。例えば、アクティベーションの座標が(ｚａ、ｙａ、ｘａ)であるとき(例えば、アクティベーションの順序ZYXに対応している)、例示的なメモリプロセッサユニット312は、下記の式１に基づいて、対応するSE (例えば、アクティベーション座標に対応するデータを保管するSE)の座標を決定する。
【００６１】
（ｚａ  and/or  ＳＥＤ、ｙａ  and/or  ＳＥＨ、ｘａ  and/or  ＳＥＷ)    （式１）
【００６２】
式１において、「and/or（及び／又は）」は、余りのない分割演算であり、ＳＥＤはSEの深さ、ＳＥＨはSEの高さ、そして、ＳＥＷはSEの幅である。
【００６３】
ブロック706において、例示的なメモリプロセッサユニット312は、SE次元およびアクティベーションの座標に基づいて(例えば、モジュロ演算（modulo  operation）に基づいて)、SEの中のアクティベーションの座標を決定する。例えば、アクティベーションの座標が(ｚａ、ｙａ、ｘａ)であるとき、例示的なメモリプロセッサユニット312は、下記の式２に基づいて、対応するSE (例えば、アクティベーション座標に対応するデータを保管するSE)の座標を決定する。
【００６４】
（ｚａ％ＳＥＤ、ｙａ％ＳＥＨ、ｘａ％ＳＥＷ)    （式２）
【００６５】
式２において、「％」は、モジュロ演算である。
【００６６】
ブロック708において、例示的なメモリプロセッサユニット312は、SE座標およびSE順序オフセット(例えば、SEの中のアクティベーションの順序)に基づいて、SEポインタのアレイに対するポインタオフセット（pointer  offset）を決定する。例えば、メモリプロセッサユニット312は、以下の式３に基づいてポインタオフセットを決定する。
【００６７】
Ｐｏｆｆ＝（（ｚａ  and/or  ＳＥＤ）＊ＺＴＳＯＦＦ）＋（（ｙａ  and/or  ＳＥＨ）＊ＹＴＳＯＦＦ）＋（（ｘａ  and/or  ＳＥＷ）＊ＸＴＳＯＦＦ)    （式３）
【００６８】
式３において、Ｐｏｆｆはポインタオフセット、「＊」は乗算演算であり、そして、ＺＴＳＯＦＦ、ＹＴＳＯＦＦ、およびＸＴＳＯＦＦはテンソルの中のSE順序(例えば、SEが保管される方法のXYZ、XZY、YZX、YXZ、等の順序)に基づくオフセットである。ＺＴＳＯＦＦ、ＹＴＳＯＦＦ、およびＸＴＳＯＦＦは、図10Aに係る例示的な第１テーブル1000に基づいて決定することができる。
【００６９】
ブロック710において、例示的なメモリプロセッサユニット312は、SEポインタアレイへとインデックス（index）するために、ポインタオフセットをSE座標に適用する。例えば、オフセットが４である場合に、例示的なメモリプロセッサユニット312は、４のオフセット値に基づいて、SEポインタアレイのSEポインタを移動する。ブロック712において、例示的なメモリプロセッサユニット312は、アクティベーション座標およびSEの中のアクティベーション順序(例えば、SEの中にアクティベーションが保管された順序)に基づいて、SEの中のアクティベーションオフセットを決定する。例えば、メモリプロセッサユニット312は、以下の式４に基づいてアクティベーションオフセットを決定する。
【００７０】
ＡＳＯＦＦ＝（（ｚａ％ＳＥＤ）＊ＺＳＡＯＦＦ）＋（（ｙａ％ＳＥＨ）＊ＹＳＡＯＦＦ）＋（（ｘａ％ＳＥＷ）＊ＸＳＡＯＦＦ)    （式４）
【００７１】
式(4)において、ASOFFはアクティベーションオフセット、そして、ＺＳＡＯＦＦ、ＹＳＡＯＦＦ、およびＸＳＡＯＦＦは、SEの中のアクティベーション順序(例えば、アクティベーションがSE内に保管される方法のXYZ、XZY、YZX、YXZ、等の順序)に基づくオフセットである。ＺＳＡＯＦＦ、ＹＳＡＯＦＦ、およびＸＳＡＯＦＦは、図10Bに係る例示的な第１テーブル1002に基づいて決定することができる。
【００７２】
ブロック714において、例示的なメモリプロセッサユニット312は、例示的なメモリインターフェイス302(図3)を使用して、SEポインタアレイへのインデックス（index  into  the  SE  pointer  array）に基づいてSEポインタにアクセスする。アクセスされたポインタは、獲得されたアクティベーション座標に対応するアクティベーションを含む、SEの第１場所（first  location）に対応している。ブロック716において、例示的なメモリプロセッサユニット312は、アクティベーションが疎なオブジェクトに対応するかを判断する。例えば、例示的なメモリ204内にSEとして保管されたデータは、密なデータ、または、密なデータに対応する疎性マップに対応している疎なオブジェクトであり得る。例示的なメモリプロセッサユニット312が、アクティベーションは疎なオブジェクトに対応していないと判断した場合(ブロック716：いいえ)、例示的なメモリプロセッサユニット312は、例示的なメモリインターフェイス302を使用して、メモリ204内のSEの中のSEポインタおよびアクティベーションオフセット座標に対応する場所に保管されたデータにアクセスすることによって、アクティベーションにアクセスする(ブロック718)。例えば、メモリプロセッサユニット312は、アクティベーションを獲得するために、メモリ204を、SEポインタにおいて特定された場所(例えば、SEの開始)まで横断し、そして、疎性マップへのインデックスに対応する場所へ移動する。
【００７３】
例示的なメモリプロセッサユニット312が、アクティベーションは疎なオブジェクトに対応していると判断した場合(ブロック716：はい)、例示的なメモリプロセッサユニット312は、アクティベーションオフセットを疎性マップへのインデックスに適用する(ブロック720)。例えば、メモリプロセッサユニット312は、例示的なメモリインターフェイス302を使用して、疎性マップポインタに加えて疎性マップエレメント(例えば、「０」または「１」)にアクセスするためのアクティベーションオフセットに基づいて、疎性マップに対応する場所にアクセスする。このようにして、疎性マップエレメントが「０」である場合に、メモリプロセッサユニット312は、アクティベーションがゼロであると判断する。疎性マップエレメントが「１」である場合に、メモリプロセッサユニット312は、アクティベーション非ゼロ値であると判断し、そして、メモリ204内でアクティベーションに対応する場所にアクセスすることによって非ゼロ値を決定する。例えば、メモリプロセッサユニット312は、アクティベーションにアクセスするためのオフセットを獲得するように、疎性マップにより（count  on）決定することができる。ブロック722において、例示的なメモリプロセッサユニット312は、例示的なメモリインターフェイス302を使用して、SEポインタおよびアクティベーションオフセットに基づくアクティベーションにアクセスする。図7の例示的なプロセスが終了する。
【００７４】
図8は、例示的なメモリ204内にSEとして保管されている多次元データにアクセスするために、図3のデータストレージマネージャ202の例示的な実装を実施するように図2のプロセッサによって実行され得る、例示的なマシンで読取り可能な命令を表す例示的なフローチャート800である。図8の例示的なフローチャート800は、図10A−図10Dの例示的なテーブル1000、1002、1004、1006と関連して説明されている。例示的な第１テーブル1000は、テンソルの中のSE順序(例えば、多次元データによってSEが形成される順序)に基づくオフセット変数に対応しており、例示的な第２テーブル1002は、SEの中のアクティベーション順序に基づくオフセット変数に対応しており、例示的な第３テーブル1004は、SEの中のブロック順序に基づくオフセット変数に対応しており、そして、例示的な第４テーブルは、ブロックの中のアクティベーション順序に基づくオフセット変数に対応している。図8のフローチャート800は、図3の例示的なデータストレージマネージャ202と関連して説明されているが、他のタイプのデータストレージマネージャ及び／又は他のタイプのプロセッサが、代わりに、使用されてよい。加えて、フローチャート800は、多次元データ(例えば、テンソル)と関連して説明されているが、フローチャート800は、他のタイプのデータ(例えば、重み保管)と関連して説明されてよい。
【００７５】
ブロック802において、例示的なメモリプロセッサユニット312(図3)は、１つまたはそれ以上のアクティベーション座標を獲得する。異なるアクティベーションについて１つより多い座標が存在する場合に、メモリプロセッサユニット312は、並列処理を促進するように、異なるメモリプロセッサユニット312間で異なる座標のアクセスを分割してよい。ブロック804において、例示的なメモリプロセッサユニット312は、SE次元およびアクティベーションの座標に基づいて(例えば、分割演算に基づいて)、SEの座標を決定する。例えば、例示的なメモリプロセッサユニット312は、上記の式１に基づいて、対応するSE(例えば、アクティベーション座標に対応するデータを保管するSE)の座標を決定する。
【００７６】
ブロック806において、例示的なメモリプロセッサユニット312は、SE座標およびSE順序オフセット(例えば、テンソルの中のSEの順序)に基づいて、SEポインタのアレイに対するポインタオフセットを決定する。例えば、メモリプロセッサユニットは、上記の式３に基づいてポインタオフセットを決定する。ブロック808において、例示的なメモリプロセッサユニット312は、SEポインタアレイへとインデックスするために、ポインタオフセットをSE座標に適用する。例えば、オフセットが４である場合に、例示的なメモリプロセッサユニット312は、４のオフセット値に基づいて、SEポインタアレイのSEポインタを移動する。ブロック810において、例示的なメモリプロセッサユニット312は、例示的なメモリインターフェイス302(図3)を使用して、SEポインタアレイへのインデックスに基づいてSEポインタにアクセスする。アクセスされたポインタは、獲得されたアクティベーション座標に対応するアクティベーションを含む、SEの第１場所に対応している。
【００７７】
ブロック812において、例示的なメモリプロセッサユニット312は、SE次元、ブロック次元、および、アクティベーションの座標に基づいて、アクティベーションに対応するストレージブロック（SB）の座標を決定する。例えば、メモリプロセッサユニット312は、以下の式５に基づいてブロックの座標を決定することができる。
【００７８】
（（ｚａ％ＳＥＤ）  and/or  ＳＢＤ、（ｙａ％ＳＥＨ）  and/or  ＳＢＨ、（ｘａ％ＳＥＷ）  and/or  ＳＢＷ)    （式５）
【００７９】
式５において、ＳＢＤはブロックの深さ、ＳＢＨはブロックの高さ、ＳＢＷはブロックの幅である。
【００８０】
ブロック814において、例示的なメモリプロセッサユニット312は、SE次元、ブロック次元、および、アクティベーションの座標に基づいて、ブロックの中のアクティベーションの座標を決定する。例えば、メモリプロセッサユニット312は、以下の式６に基づいて、ブロックの中のアクティベーションの座標を決定することができる。
【００８１】
（（ｚａ％ＳＥＤ）％ＳＢＤ、（ｙａ％ＳＥＨ）％ＳＢＨ、（ｘａ％ＳＥＷ）％ＳＢＷ)    （式６）
【００８２】
ブロック816において、例示的なメモリプロセッサユニット312は、ブロックの座標およびSEの中のブロック順序に基づいて、ブロックの開始に対するブロックオフセットを決定する。例えば、メモリプロセッサユニット312は、以下の式７に基づいて、ブロックオフセットを決定することができる。
【００８３】
ＢＳＯＦＦ＝ＳＢＳ＊（（（（ｚａ％ＳＥＤ）  and/or  ＳＢＤ）＊ＺＳＢＯＦＦ）＋（（（ｙａ％ＳＥＨ）  and/or  ＳＢＨ）＊ＹＳＢＯＦＦ）＋（（（ｘａ％ＳＥＷ）  and/or  ＳＢＷ）＊ＸＳＢＯＦＦ））    （式７）
【００８４】
ここで、ＢＳＯＦＦは、SEの中でアクティベーションが存在するブロック内の開始場所であり、そして、ＺＳＢＯＦＦ、ＹＳＢＯＦＦ、およびＸＳＢＯＦＦは、SEの中のブロックの順序に対応するブロックオフセットである。ＺＳＢＯＦＦ、ＹＳＢＯＦＦ、およびＸＳＢＯＦＦオフセットは、図10Cに係る例示的な第１テーブル1004に基づいて決定することができる。
【００８５】
ブロック818において、例示的なメモリプロセッサユニット312は、アクティベーションの座標およびブロックの中のアクティベーション順序に基づいて、ブロックの開始からのアクティベーションオフセットを決定する。例えば、メモリプロセッサユニット312は、以下の式８に基づいて、アクティベーションオフセットを決定することができる。
【００８６】
ＡＢＯＦＦ＝（（（ｚａ％ＳＥＤ）％ＳＢＤ）＊ＺＢＡＯＦＦ）＋（（（ｙａ％ＳＥＨ）％ＳＢＨ）＊ＹＢＡＯＦＦ）＋（（（ｘａ％ＳＥＷ）％ＳＢＷ）＊ＸＢＡＯＦＦ）    （式８）
【００８７】
式８において、ＡＢＯＦＦは、ブロックの開始からアクティベーションまでのオフセットであり、そして、ＺＢＡＯＦＦ、ＹＢＡＯＦＦ、およびＸＢＡＯＦＦは、ブロックの中に保管されたアクティベーションの順序に対応するアクティベーションオフセットである。ＺＢＡＯＦＦ、ＹＢＡＯＦＦ、およびＸＢＡＯＦＦオフセットは、図10Dに係る例示的な第１テーブル1006に基づいて決定することができる。
【００８８】
ブロック820において、例示的なメモリプロセッサユニット312は、ブロックオフセットをアクティベーションオフセットと組み合わせる(例えば、加算する)ことによって、SEの開始からのアクティベーションオフセットを決定する。例えば、メモリプロセッサユニット312は、以下の式９に基づいて、SEの開始からのアクティベーションオフセットを決定する。
【００８９】
ＡＳＯＦＦ＝ＢＢＯＦＦ＋ＡＢＯＦＦ    （式９）
【００９０】
ブロック822において、例示的なメモリプロセッサユニット312は、例示的なメモリインターフェイス302を使用して、SEポインタおよびアクティベーションオフセットに基づいてアクティベーションにアクセスする。例えば、メモリプロセッサユニット312は、アクティベーションを獲得するために、メモリ204を、SEポインタにおいて特定された場所(例えば、SEの開始)まで横断し、そして、疎性マップへのインデックスに対応する場所へ移動する。図8の例示的なプロセスは、終了する。
【００９１】
図9は、タイルベースのパターンプロトコルについてアクセスされたテンソルのより効率的な処理を容易にするように、アクセスされたテンソルを操作するために、図3の例示的なデータストレージマネージャ202を実施するようにプロセッサ（図2）によって実行され得る、例示的なマシンで読取り可能な命令を表す例示的なフローチャート900である。図9の例示的なフローチャート900は、図11A−図11Bの実施例に関連して説明されている。図9のフローチャート900は、図3の例示的なデータストレージマネージャ112と関連して説明されているが、他のタイプのデータストレージマネージャ及び／又は他のタイプのプロセッサが、代わりに、使用されてよい。上述のように、テンソルを処理するためのいくつかの技術は、Y個の重み付けを用いてX回のコンボルーションを実行することを含む(例えば、Xはフィルタリングされるデータエレメントの数に等しい)。しかしながら、テンソルを処理するための他の技術は、コンボリューションを実行するのに必要とされるリソースの量を減少させるためにビットマップを操作することを含み得る、コンボリューション技術を利用することができる。従って、図9のフローチャート900は、プロセッサリソースを節約するようにコンボリューションを実行するために、ビットマップが使用される技術に対応する。
【００９２】
ブロック902において、例示的なベクトルマニピュレータ314(図3)は、多次元データの操作が望まれるかを判断する。例えば、ベクトルマニピュレータ314は、アクセスされた多次元データが特定サイズのタイルベースのパターンと適合できるように操作するために、例示のタイルベースのコンボリューション決定器316(図3)から多次元データを操作する命令を受信することができる。例示的なベクトルマニピュレータ314が、多次元データの操作は望まれないと判断した場合(ブロック902：いいえ)、制御は終了する。例示的なベクトルマニピュレータ314が、多次元データの操作が望まれると判断する場合(ブロック902：はい)、例示的なベクトルマニピュレータ314は、２次元データアレイ及び／又はマトリクスを１次元データベクトルへと平坦化（flattening）する(ブロック904)。例えば、図11の例示的な２次元データ1100(例えば、データカーネル)は、ゼロパディングの画像を含むようにゼロパディングされた４×４の画像に対応するデータの４×４のマトリクスに対応しており、それによって、６×６のカーネルに対応している。例示的なベクトルマニピュレータ314は、例示的な２次元データ1100を例示的な１次元データベクトル1102へと平坦化する。例示的な１次元データベクトル1102において、例示的なデータエレメント1104は、例示的なデータエレメントの場所1106に対応している。次元データをより小さな次元へと平坦化することによって、コンボリューションエンジンは、プロトコルをループすることなく、ビットマップに同じ振る舞い（behavior）を示すように強制することによって、データのオリジナルの次元にかかわらず、処理をすることができ、それによって、処理エンジンにおいて制御ロジックを排除している。
【００９３】
ブロック906において、例示的なベクトルマニピュレータ314は、フィルタカーネル(例えば、タイルベースのパターン)を１次元フィルタベクトルへと平坦化する。例えば、図11の例示的なフィルタカーネル1108は、フィルタカーネルに対応している重み付け（weights）の３×３マトリクスに対応する。例示的なベクトルマニピュレータ314は、例示的なフィルタカーネル1108を例示的な１次元フィルタベクトル1110へと平坦化する。例示的な１次元フィルタベクトル1110において、例示的なデータエレメント1112は、例示的なデータエレメントの場所1114に対応している。ブロック907において、例示的な疎なベクトル変換器304は、フィルタベクトルに基づくフィルタ疎性マップ、および、データベクトルに基づくデータ疎性マップを生成する。
【００９４】
ブロック908において、例示的なベクトルマニピュレータ314は、データ疎性マップのサイズを決定する。例えば、データベクトル1102の疎性マップのサイズはデータベクトル1102のサイズと同じなので、ベクトルマニピュレータ314は、データベクトル1102のサイズは３６個のデータエレメントであると決定する。ブロック910において、例示的なベクトルマニピュレータ314は、人工的（artificial）カーネル疎性マップに対応している、データ疎性マップのサイズと一致するように、フィルタ疎性マップをゼロパディングする。例えば、ベクトルマニピュレータ314は、人工的カーネル疎性マップを生成することによって、フィルタ疎性マップをゼロパディングすることができる。マップは、ＦＷ個の１（one）のグループに、ＩＷ−ＦＷ個の０（zero）がＦｈ回繰り返されて続き、あらゆる残りのビットについて０が続くものである。ここで、ＦＷはフィルタカーネル1108の幅、ＩＷはデータカーネル1100の幅、および、Ｆｈはフィルタカーネル1108の高さである。例示的な人工的疎性マップ1118は、上述の技術を使用して、例示的なフィルタカーネル1108に対応しているフィルタ疎性マップのゼロパディングに対応する。
【００９５】
ブロック912において、例示的なタイルベースのコンボリューション決定器316は、ゼロパディングされた疎性マップ(例えば、例示的なゼロパディングされた疎性マップ1118)およびデータ疎性マップ(例えば、例示的なデータ疎性マップ1120)に基づいて、コンボリューション(例えば、第１コンボリューション1116)を実行する。ブロック914において、例示的なタイルベースのコンボリューション決定器316は、追加のコンボリューションが必要とされるかを判断する。例えば、上述のように、必要とされるコンボルーションの数は、フィルタリングされるべきデータエレメントの数に対応している。例示的なタイルベースのコンボリューション決定器316が、追加のコンボリューションは必要とされないと判断する場合(ブロック914：いいえ)、制御は終了する。例示的なタイルベースのコンボリューション決定器316が、追加のコンボリューションが必要とされると判断する場合(ブロック914：はい)、例示的なベクトルマニピュレータ314は、ゼロパディングされたカーネルベクトル疎性マップをシフトする(ブロック916)。カーネルベクトル疎性マップがシフトされるビットの量は、コンボリューションの現在のカウントの次元、データカーネル1100の次元、および、フィルタカーネル1108の次元に依存している。例えば、第２コンボルーション(例えば、図11Bの例示的なコンボルーション1122)について、ゼロパディングされたフィルタ疎性マップ1118は、フィルタリングプロセスのために必要とされるアドレスのシーケンスに対応して、１ビットだけ左にシフトされる(例えば、例示的なシフトされ、ゼロパディングされたフィルタ疎性マップ1124に対応している)。しかしながら、データカーネルの幅と等しい数のコンボリューションの後には、異なるシフトが必要とされる。その異なるシフトは、フィルタカーネル1108の幅に等しいものである。例えば、４つのコンボルーション(例えば、データカーネル1100の幅)、および、後続の各４つのコンボルーションの後で、ベクトルマニピュレータ314は、ゼロパディングされたフィルタ疎性マップを３(例えば、フィルタカーネル1108の幅)だけシフトする。
【００９６】
ブロック918において、例示的なタイルベースのコンボリューション決定器316は、シフトされ、ゼロパディングされたフィルタ疎性マップ(例えば、例示的なシフトされ、ゼロパディングされたフィルタ疎性マップ1124)およびデータ疎性マップ(例えば、例示的なデータ疎性マップ1120)に基づいて、コンボリューション(例えば、第２コンボリューション1122)を実行する。いくつかの実施例において、ベクトルマニピュレータ314は、コンボリューションのために、フィルタゼロパディングされた疎性マップについて全ての必要なシフトを生成することによって、全ての必要なコンボリューションを設定し、そうして、タイルベースのコンボリューション決定器316は、必要なコンボリューションを並列に実行することができる。図9の例示的なプロセスは、終了する。
【００９７】
図12は、図3の例示的なデータストレージマネージャ202を実施するために、図3の命令を実行するように構成された例示的なプロセッサプラットフォーム1200のブロック図である。プロセッサプラットフォーム1200は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習マシン(例えば、ニューラルネットワーク)、モバイル機器(例えば、携帯電話、スマートフォン、iPadといったタブレット)、または、任意の他のタイプのコンピューティングデバイスであってよい。
【００９８】
図示された実施例のプロセッサプラットフォーム1200は、プロセッサ200を含んでいる。図示された実施例のプロセッサ200は、ハードウェアである。例えば、プロセッサ200は、１つまたはそれ以上の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、または、任意の所望のファミリーまたは製造者からのコントローラによって実装することができる。ハードウェアプロセッサ200は、半導体ベース(例えば、シリコンベース)のデバイスであってよい。この実施例において、プロセッサは、例示的なコンポーネントインターフェイス300、例示的なメモリインターフェイス302、例示的な疎なベクトル変換器304、例示的なメモリアロケータ306、例示的なストレージオーガナイザ310、例示的なメモリプロセッサユニット312、例示的なベクトルマニピュレータ314、例示的なタイルベースのコンボリューション決定器316を実装する。
【００９９】
図示された実施例のプロセッサ200は、ローカルメモリ1213(例えば、キャッシュ)を含んでいる。いくつかの実施例において、ローカルメモリ1213は、例示的なメモリブロックバッファ308を実装する。図示された実施例のプロセッサ200は、バス1218を介して、揮発性メモリ1214および不揮発性メモリ1216を含むメインメモリと通信している。いくつかの実施例において、メインメモリは、例示的なメモリ204を実装している。揮発性メモリ1214は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUSダイナミックランダムアクセスメモリ(RDRAM)、及び／又は、あらゆる他のタイプのランダムアクセスメモリデバイスによって実装され得る。不揮発性メモリ1216は、フラッシュメモリ、及び／又は、あらゆる他の所望のタイプのメモリデバイスによって実装され得る。メインメモリ1214、1216へのアクセスは、メモリコントローラによって制御されている。
【０１００】
図示された実施例のプロセッサプラットフォーム1200は、また、インターフェイス回路1220も含んでいる。インターフェイス回路1220は、あらゆるタイプのインターフェイス規格によって実装され得る。イーサネットインターフェイス、ユニバーサルシリアルバス（USB）、ブルートゥース（登録商標）インターフェイス、近接場通信(NFC)インターフェイス、及び／又は、PCIエクスプレスインターフェイス、といったものである。
【０１０１】
図示された実施例においては、１つまたはそれ以上の入力装置1222が、インターフェイス回路1220に接続されている。入力装置1222は、データ及び／又はコマンドをユーザがプロセッサ200に入力するのを可能にする。入力装置は、例えば、オーディオセンサ、マイクロホン、カメラ（静止画またはビデオ）、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント（isopoint）、及び／又は、音声認識システムによって実装することができる。
【０１０２】
１つまたはそれ以上の出力装置1224も、また、図示された実施例のインターフェイス回路1220に接続されている。出力装置1224は、例えば、ディスプレイ装置(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、ブラウン管(CRT)、インプレイススイッチング（IPS）ディスプレイ、タッチスクリーン、等)、触覚出力装置、プリンタ、及び／又は、スピーカによって実装することができる。図示された実施例のインターフェイス回路1220は、従って、典型的には、グラフィックスドライバカード、グラフィックスドライバチップ、及び／又は、グラフィックスドライバプロセッサを含んでいる。
【０１０３】
図示された実施例のインターフェイス回路1220は、また、ネットワーク1226を介した外部マシン(例えば、あらゆる種類のコンピューティングデバイス)とのデータの交換を促進するために、送信機、受信機、トランシーバ、モデム、レジデンシャルゲートウェイ、無線アクセスポイント、及び／又は、ネットワークインターフェイスといった、通信装置も含んでいる。通信は、例えば、イーサネット接続、デジタル加入者回線（DSL）接続、電話回線接続、同軸ケーブルシステム、衛星システム、見通し内（line-of-site）無線システム、セルラー電話システム、等を介するものであり得る。
【０１０４】
図示された実施例のプロセッサプラットフォーム1200は、また、ソフトウェア及び／又はデータを保管するために、１つまたはそれ以上の大容量記憶装置1228を含んでいる。そうした大容量記憶装置1228の例は、フロッピー（登録商標）ディスクドライブ、ハードディスクドライブ、コンパクトディスクドライブ、ブルーレイディスクドライブ、レイド（RAID）システム、および、デジタル多用途ディスク（DVD）ドライブを含んでいる。
【０１０５】
図4−9において示されたマシンで実行可能な命令1232は、大容量記憶装置1228内、揮発性メモリ1214内、不揮発性メモリ1216内、及び／又は、CDまたはDVDといったリムーバブルで非一時的なコンピュータで読取可能な記憶媒体上に保管されてよい。
【０１０６】
実施例1は、多次元データを保管するための装置を含む。本装置は、メモリと、多次元データオブジェクトを保管するためにメモリの一部を割当てるメモリアロケータと、記憶素子オーガナイザを含む。記憶素子オーガナイザは、多次元データを記憶素子へと分離し、記憶素子をメモリ内に保管して、記憶素子のうち一部は記憶素子の他のものから独立して選択的に実行可能であり、アレイにおける記憶素子に対する開始メモリアドレスの場所をメモリ内に保管する。アレイは、メモリ内の記憶素子へ選択的にアクセスすることを促進し、メモリの中へアレイに対するポインタを保管する。
【０１０７】
実施例2は、実施例1の装置を含み、記憶素子オーガナイザは多次元データが疎なオブジェクトである場合に、疎なオブジェクトに対応する疎性マップをメモリ内に保管し、かつ、疎性マップに対する疎性マップポインタを保管する。
【０１０８】
実施例3は、実施例1の装置を含み、メモリアロケータは、多くのメモリブロックをメモリ内に割当てること、および、メモリブロックの割当てられたメモリアドレスの場所をバッファに保管することによって、多次元データオブジェクトを保管するためにメモリの一部を割当てる。
【０１０９】
実施例4は、実施例3の装置を含み、記憶素子オーガナイザは、バッファからメモリブロックの割当てられたメモリアドレスの場所のうち１つを引き出すこと、および、割当てられたメモリアドレスの場所のうち１つにおいて開始する、対応する記憶素子のうち１つを保管することによって、記憶素子を保管する。
【０１１０】
実施例5は、実施例3の装置を含み、メモリアロケータは、バッファをモニタリングし、かつ、バッファ内に保管されている割当てられたメモリアドレスの場所の数が第１閾値を下回る場合に、メモリ内に追加のメモリブロックを割当て、かつ、追加のメモリブロックの追加で割当てられたメモリアドレスをバッファ内に保管する。
【０１１１】
実施例6は、実施例5の装置を含み、メモリは第１メモリであり、かつ、メモリアロケータは、利用可能なメモリブロックの数が第２閾値を下回る場合に、既に使用されているメモリブロック内に保管されたデータを第２メモリへと移動する。
【０１１２】
実施例7は、実施例1の装置を含み、記憶素子オーガナイザは、記憶素子を非連続的にメモリ内に保管する。
【０１１３】
実施例8は、実施例1の装置を含み、記憶素子オーガナイザは第１記憶素子オーガナイザであり、記憶素子は第１記憶素子であり、かつ、開始メモリアドレスの場所は第１開始メモリアドレスの場所である。さらに、第２記憶素子をメモリ内に保管し、かつ、アレイにおける第２記憶素子に対する第２開始メモリアドレスをメモリ内に保管する、第２記憶素子オーガナイザを含む。
【０１１４】
実施例9は、実施例8の装置を含み、第２記憶素子オーガナイザは、第１記憶素子オーガナイザが第１記憶素子をメモリ内に保管するのと同じ持続時間において第２記憶素子をメモリ内に保管する。
【０１１５】
実施例10は、命令が保管された有形のコンピュータで読取り可能な記憶媒体を含む。命令が実行されると、少なくとも１つまたはそれ以上のプロセッサに、多次元データオブジェクトを保管するためにメモリの一部を割当て、多次元データを記憶素子へと分割し、記憶素子をメモリ内に保管して、記憶素子のうち一部は記憶素子の他のものから独立して選択的に実行可能であり、アレイにおける記憶素子に対する開始メモリアドレスの場所をメモリ内に保管して、アレイはメモリ内の記憶素子へ選択的にアクセスすることを促進し、かつ、メモリの中へアレイに対するポインタを保管する、ようにさせる。
【０１１６】
実施例11は、実施例10のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、多次元データが疎なオブジェクトである場合、１つまたはそれ以上のプロセッサに、疎なオブジェクトに対応する疎性マップをメモリ内に保管し、疎性マップに対する疎性マップポインタを保管する、ようにさせる。
【０１１７】
実施例12は、実施例10のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、多くのメモリブロックをメモリ内に割当てること、および、メモリブロックの割当てられたメモリアドレスの場所をバッファに保管することによって、１つまたはそれ以上のプロセッサに、多次元データオブジェクトを保管するためにメモリの一部を割当てさせる。
【０１１８】
実施例13は、実施例12のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、バッファからメモリブロックの割当てられたメモリアドレスの場所のうち１つを引き出すこと、および、割当てられたメモリアドレスの場所のうち１つにおいて開始する、対応する記憶素子のうち１つを保管することによって、１つまたはそれ以上のプロセッサに、記憶素子を保管させる。
【０１１９】
実施例14は、実施例12のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、１つまたはそれ以上のプロセッサに、バッファをモニタリングさせ、かつ、バッファ内に保管されている割当てられたメモリアドレスの場所の数が第１閾値を下回る場合に、メモリ内に追加のメモリブロックを割当て、かつ、追加のメモリブロックの追加で割当てられたメモリアドレスをバッファ内に保管させる。
【０１２０】
実施例15は、実施例14のコンピュータで読取り可能な記憶媒体を含み、ここで、メモリは第１メモリであり、かつ、命令は、利用可能なメモリブロックの数が第２閾値を下回る場合に、１つまたはそれ以上のプロセッサに、既に使用されているメモリブロック内に保管されたデータを第２メモリへと移動させる。
【０１２１】
実施例16は、実施例10のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、１つまたはそれ以上のプロセッサに、記憶素子を非連続的にメモリ内に保管させる。
【０１２２】
実施例17は、実施例10のコンピュータで読取り可能記憶媒体を含み、ここで、記憶素子は第１記憶素子であり、かつ、開始メモリアドレスの場所は第１開始メモリアドレスの場所であり、ここで、命令は、１つまたはそれ以上のプロセッサに、第２記憶素子をメモリ内に保管し、かつ、アレイにおける第２記憶素子に対する第２開始メモリアドレスをメモリ内に保管させる。
【０１２３】
実施例18は、実施例17のコンピュータで読取り可能記憶媒体を含み、ここで、命令は、１つまたはそれ以上のプロセッサに、第１記憶素子オーガナイザが第１記憶素子をメモリ内に保管するのと同じ持続時間において、第２記憶素子をメモリ内に保管させる。
【０１２４】
実施例19は、多次元データを保管する方法を含む。本方法は、１つまたはそれ以上のプロセッサで命令を実行することによって、多次元データオブジェクトを保管するためのメモリの一部を割当てるステップと、１つまたはそれ以上のプロセッサで命令を実行することによって、多次元データを記憶素子へと分割するステップと、１つまたはそれ以上のプロセッサで命令を実行することによって、記憶素子をメモリ内に保管するステップであり、記憶素子のうち一部は記憶素子の他のものから独立して選択的に実行可能であるステップと、アレイにおける記憶素子に対する開始メモリアドレスの場所をメモリ内に保管するステップであり、アレイはメモリ内の記憶素子へ選択的にアクセスすることを促進するステップと、メモリの中へアレイに対するポインタを保管するステップと、を含む。
【０１２５】
実施例20は、実施例19の方法を含み、さらに、多次元データが疎なオブジェクトである場合に、疎なオブジェクトに対応する疎性マップをメモリ内に保管するステップと、疎性マップに対する疎性マップポインタを保管するステップと、を含む。
【０１２６】
実施例21は、第１命令を含む例示的なコンピュータで読取り可能な媒体であり、第１命令は実行されると、マシンに、実行のために第２命令を配布、構成、組み立て、インストール、インスタンス化、取り出し、復元、および解凍のうち少なくとも１つを行わせる。第２命令は実行されると、マシンに、少なくとも、多次元データオブジェクトを保管するためにメモリの一部を割当て、多次元データを記憶素子へと分割し、記憶素子をメモリ内に保管して、記憶素子のうち一部は記憶素子の他のものから独立して選択的に実行可能であり、アレイにおける記憶素子に対する開始メモリアドレスの場所をメモリ内に保管して、アレイはメモリ内の記憶素子へ選択的にアクセスすることを促進し、かつ、メモリの中へアレイに対するポインタを保管する、ようにさせる。
【０１２７】
実施例22は、実施例21のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、多次元データが疎なオブジェクトである場合、１つまたはそれ以上のプロセッサに、疎なオブジェクトに対応する疎性マップをメモリ内に保管し、疎性マップに対する疎性マップポインタを保管する、ようにさせる。
【０１２８】
実施例23は、実施例21のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、多くのメモリブロックをメモリ内に割当てること、および、メモリブロックの割当てられたメモリアドレスの場所をバッファに保管することによって、１つまたはそれ以上のプロセッサに、多次元データオブジェクトを保管するためにメモリの一部を割当てさせる。
【０１２９】
実施例24は、実施例23のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、バッファからメモリブロックの割当てられたメモリアドレスの場所のうち１つを引き出すこと、および、割当てられたメモリアドレスの場所のうち１つにおいて開始する、対応する記憶素子のうち１つを保管することによって、１つまたはそれ以上のプロセッサに、記憶素子を保管させる。
【０１３０】
実施例25は、実施例23のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、１つまたはそれ以上のプロセッサに、バッファをモニタリングさせ、かつ、バッファ内に保管されている割当てられたメモリアドレスの場所の数が第１閾値を下回る場合に、メモリ内に追加のメモリブロックを割当て、かつ、追加のメモリブロックの追加で割当てられたメモリアドレスをバッファ内に保管させる。
【０１３１】
実施例26は、実施例25のコンピュータで読取り可能な記憶媒体を含み、ここで、メモリは第１メモリであり、かつ、命令は、利用可能なメモリブロックの数が第２閾値を下回る場合に、１つまたはそれ以上のプロセッサに、既に使用されているメモリブロック内に保管されたデータを第２メモリへと移動させる。
【０１３２】
実施例27は、実施例21のコンピュータで読取り可能な記憶媒体を含み、ここで、命令は、１つまたはそれ以上のプロセッサに、記憶素子を非連続的にメモリ内に保管させる。
【０１３３】
実施例28は、実施例21のコンピュータで読取り可能記憶媒体を含み、ここで、記憶素子は第１記憶素子であり、かつ、開始メモリアドレスの場所は第１開始メモリアドレスの場所であり、ここで、命令は、１つまたはそれ以上のプロセッサに、第２記憶素子をメモリ内に保管し、かつ、アレイにおける第２記憶素子に対する第２開始メモリアドレスをメモリ内に保管させる。
【０１３４】
実施例29は、実施例28のコンピュータで読取り可能記憶媒体を含み、ここで、命令は、１つまたはそれ以上のプロセッサに、第１記憶素子オーガナイザが第１記憶素子をメモリ内に保管するのと同じ持続時間において、第２記憶素子をメモリ内に保管させる。
【０１３５】
上記から、メモリへ及び／又はメモリから多次元データを保管し、かつ、アクセスする例示的な方法、装置、および製造製品が開示されてきたことが正しく理解されるだろう。開示された方法、装置および製造製品は、多次元データ全体を１つのユニットとして保管するのとは対照的に、メモリの中へ記憶素子を保管する記憶素子へと多次元データを分割することによって、コンピューティングデバイスの効率およびフレキシビリティを改善する。記憶素子が非連続的に保管され得るので、ここにおいて開示された実施例は、よりフレキシブルなストレージスキームを提供する。ここでは、利用可能な連続的メモリの量がテンソル全体を保管するには不十分であるときに、テンソルがメモリの異なる部分に保管され得る。加えて、各記憶素子が、別個のポインタに対応する別々のサブユニットとして保管されるので、ここにおいて開示された実施例は、複数の異なる記憶素子からのアクティベーションを同時に保管し、かつ／あるいは、アクセスすることができるように、並列処理を促進し、それによって、データアクセスの効率を高めている。加えて、記憶素子はテンソル全体よりも小さくてもよいので(例えば、メモリ内のより少ない場所に保管されたより少ないアクティベーションを含む)、プロセッサが記憶素子を通過するのに要する時間の量は、プロセッサがテンソル全体を通過するのに要する時間の量よりも小さくなる。開示された方法、装置、および製造製品は、従って、コンピュータの機能における１つまたはそれ以上の改善に向けられている。
【０１３６】
所定の例示的な方法、装置、および製造製品がここにおいて開示されてきたが、この特許発明に係る請求の範囲はそれに限定されるものではない。反対に、この特許発明は、公正に特許請求の範囲内にある全ての方法、装置、および製造製品を対象としている。
【図１】
2020140713.tif 000005
【図２】
2020140713.tif 000006
【図３】
2020140713.tif 000007
【図４】
2020140713.tif 000008
【図５】
2020140713.tif 000009
【図６】
2020140713.tif 000010
【図７】
2020140713.tif 000011
【図８】
2020140713.tif 000012
【図９】
2020140713.tif 000013
【図１０Ａ】
2020140713.tif 000014
【図１０Ｂ】
2020140713.tif 000015
【図１０Ｃ】
2020140713.tif 000016
【図１０Ｄ】
2020140713.tif 000017
【図１１Ａ】
2020140713.tif 000018
【図１１Ｂ】
2020140713.tif 000019
【図１２】
2020140713.tif 000020
【外国語明細書】
2020140713000001.pdf