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

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

▶ オキュラス ブイアール,エルエルシーの特許一覧

特表2022-540550ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムおよび方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-09-16
(54)【発明の名称】ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムおよび方法
(51)【国際特許分類】
   G06F 12/04 20060101AFI20220909BHJP
【FI】
G06F12/04 530
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021573172
(86)(22)【出願日】2020-05-28
(85)【翻訳文提出日】2022-02-07
(86)【国際出願番号】 US2020034848
(87)【国際公開番号】W WO2021006965
(87)【国際公開日】2021-01-14
(31)【優先権主張番号】16/509,138
(32)【優先日】2019-07-11
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ブルートゥース
(71)【出願人】
【識別番号】515046968
【氏名又は名称】メタ プラットフォームズ テクノロジーズ, リミテッド ライアビリティ カンパニー
【氏名又は名称原語表記】META PLATFORMS TECHNOLOGIES, LLC
(74)【代理人】
【識別番号】110002974
【氏名又は名称】弁理士法人World IP
(72)【発明者】
【氏名】ヴェンカテーシュ, ガネシュ
(72)【発明者】
【氏名】ライ, リャンジェン
(72)【発明者】
【氏名】チャン, ピアス イ-ジェン
(72)【発明者】
【氏名】リー, モン
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160GA18
(57)【要約】
本明細書の開示は、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステム、方法、およびデバイスを含む。複数のスライスは、データワードのアクセスサイズを有するメモリにアクセスするように確立することができる。第1のスライスは、メモリ内のデータワードの第1の側にアクセスするように構成することができる。回路類は、ゼロでない値を有するデータワード内のバイト位置を識別するマスクにアクセスすることができる。回路類は、第1の側の端で開始する格納されたゼロでないバイト値、およびデータワードの残余内に格納された任意のゼロバイト値を有するようにデータワードを修正することができる。いくつかのゼロでないバイト値が第1のスライスの第1のアクセスサイズ以下であるかどうかの決定を行うことができる。回路類は、修正されたデータワードを少なくとも第1のスライスを介してメモリに書き込むことができる。
【選択図】図2A
【特許請求の範囲】
【請求項1】
データワードのアクセスサイズを有するメモリにアクセスするための複数のスライスであって、前記複数のスライスのうちの第1のスライスがメモリ内の前記データワードの第1の側にアクセスするように構成され、前記第1の側が前記データワードよりも小さいサイズを有する、複数のスライスを、回路類によって確立することと、
ゼロでない値を有する前記データワード内のバイト位置を識別するマスクに、前記回路類によって、アクセスすることと、
前記第1の側の端で開始する格納されたゼロでないバイト値、および前記データワードの残余内に格納された任意のゼロバイト値を有するように前記データワードを、前記回路類によって、修正することと、
前記第1の側の前記端で開始するいくつかのゼロでないバイト値が前記第1のスライスの第1のアクセスサイズ以下であるかどうかを、前記回路類によって、決定することと、
修正された前記データワードを少なくとも前記第1のスライスを介して前記メモリに、前記決定に応答して前記回路類によって、書き込むことと
を含む、方法。
【請求項2】
1バイトのマスクまたは2バイトのマスクのうちの1つとして前記マスクを生成することを更に含む、請求項1に記載の方法。
【請求項3】
前記第1の側の前記いくつかのゼロでないバイト値は前記第1のスライスの前記第1のアクセスサイズ以下であると、前記回路類によって、決定することを更に含み、また好ましくは、前記第1のスライスのみを介して前記修正されたデータワードの前記第1の側を、前記回路類によって、書き込むことを更に含む、請求項1または2に記載の方法。
【請求項4】
前記第1の側の前記端で開始する前記いくつかのゼロでないバイト値は前記第1のスライスの前記第1のアクセスサイズより大きいと、前記回路類によって、決定することを更に含み、また好ましくは、前記第1のスライスを介して前記修正されたデータワードの前記第1の側の前記バイトを、および第2のスライスを介して残りのゼロでないバイトを、前記回路類によって、書き込むことを更に含む、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記複数のスライスのうちの、前記第1のスライスの前記第1のアクセスサイズまたは第2のスライスの第2のアクセスサイズのうちの1つが、前記メモリにアクセスする際の前記回路類の電力使用量の所定の削減を実現するように選択される、請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記マスクに基づいて前記修正されたデータワードのゼロでないバイト値の数を、前記回路類によって、決定することを更に含む、請求項1から5のいずれか一項に記載の方法。
【請求項7】
データワードのアクセスサイズを有するメモリにアクセスするための複数のスライスであって、前記複数のスライスのうちの第1のスライスが、前記メモリ内の前記データワードの第1の側にアクセスするように構成され、前記第1の側が、前記データワードよりも小さいサイズを有する、複数のスライスを、回路類によって、確立することと、
ゼロでない値を有する前記データワード内の位置を識別するマスクに、前記回路類によって、アクセスすることと、
前記データワードのいくつかのゼロでないバイト値は前記第1のスライスの第1のアクセスサイズ以下であると、前記マスクから、前記回路類によって、決定することと、
前記第1のスライスを介して、メモリに格納された前記データワードのパックされた表現であって、前記データワードの前記第1の側の端で開始する格納された前記ゼロでないバイト値および前記データワードの残余内に格納された任意のゼロバイト値を含むパックされた表現を、前記決定に応答して前記回路類によって、読み取ることと、
前記マスクによって示された前記位置において前記ゼロでないバイト値および前記ゼロバイト値を有する前記データワードを、前記パックされた表現から前記回路類によって、提供することと
を含む、方法。
【請求項8】
前記マスクが、1バイトベースまたは2バイトベースで前記ゼロでないバイト値の前記位置を識別する、請求項7に記載の方法。
【請求項9】
前記データワードの前記いくつかのゼロでないバイト値は前記第1のスライスの前記第1のアクセスサイズ以下であると、前記回路類によって、決定することを更に含み、また好ましくは、前記第1のスライスのみを介して前記データワードの前記パックされた表現を、前記回路類によって、読み取ることを更に含む、請求項7または8に記載の方法。
【請求項10】
前記データワードの前記いくつかのゼロでないバイト値は前記第1のスライスの前記第1のアクセスサイズより大きいと、前記回路類によって、決定することを更に含み、また好ましくは、前記複数のスライスのうちの、前記第1のスライスを介して前記データワードの第1の側を、および第2のスライスを介して任意の残りのゼロでないバイトを、前記回路類によって、読み取ることを更に含む、請求項7から9のいずれか一項に記載の方法。
【請求項11】
前記複数のスライスのうちの、前記第1のスライスの前記第1のアクセスサイズまたは第2のスライスの第2のアクセスサイズのうちの1つが、前記メモリから読み取る際の前記回路類の電力使用量の所定の削減を実現するように選択される、請求項1から10のいずれか一項に記載の方法。
【請求項12】
データワードのアクセスサイズを有するメモリと、
回路類であって、
前記メモリにアクセスするための複数のスライスを確立することであって、前記複数のスライスのうちの第1のスライスが前記メモリ内のデータワードの左側にアクセスするように構成された、複数のスライスを確立すること、
ゼロでない値を有する前記データワード内のバイト位置を識別するマスクにアクセスすること、
前記データワードの第1の側の端で開始する格納されたゼロでないバイト値および前記データワードの残余内に格納された任意のゼロバイト値を有するように前記データワードを修正すること、
修正された前記データワードの最も左のバイトのいくつかのゼロでないバイト値は前記第1のスライスの第1のアクセスサイズ以下であると決定すること、および、
前記修正されたデータワードを少なくとも前記第1のスライスを介して前記メモリに、前記決定に応答して、書き込むこと
を行うように構成された回路類と
を備える、デバイス。
【請求項13】
前記回路類が、少なくとも前記第1のスライスを介してメモリに格納された前記データワードのパックされた表現を読み取るように構成され、前記パックされた表現が、前記データワードの前記第1の側に格納された前記ゼロでないバイト値および前記データワードの残りのバイトに格納された任意のゼロバイト値を含み、また好ましくは、前記回路類が、前記ビットマスクによって示された前記位置に格納された前記ゼロでないバイト値および前記ゼロバイト値を有するように前記データワードを作成するように構成された、請求項12に記載のデバイス。
【請求項14】
前記回路類が更に、前記複数のスライスのうちの、前記第1のスライスを介して前記データワードの前記第1の側を、および第2のスライスを介して任意の残りのゼロでないバイトを読み取るように構成された、請求項13に記載のデバイス。
【請求項15】
前記複数のスライスのうちの、前記第1のスライスの前記第1のアクセスサイズまたは第2のスライスの第2のアクセスサイズのうちの1つが、前記メモリから読み取る際の前記回路類の電力使用量の所定の削減を実現するように選択される、請求項14に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、参照によりその内容全体が全ての目的のために本明細書に組み込まれる、2019年7月11日に出願された、米国特許出願第16/509,138号の優先権を主張する。
【0002】
本開示は、全体として、スパースデータを読み取るおよび/または書き込むためのシステムおよび方法を含むがこれに限定されない、ニューラルネットワークのデータの処理に関する。
【背景技術】
【0003】
コンピュータシステムは、データを格納および保持するために、メモリまたはメモリ構成要素を含むことができる。メモリは、書込みおよび読取り動作を介して情報およびデータを格納および取得することができる。しかしながら、メモリシステムがアクセスされるたびに、コンピュータシステムは、情報およびデータを格納するまたは取得するために様々な資源および様々なレベルの消費電力を利用する。
【発明の概要】
【0004】
ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのデバイス、システムおよび方法が、本明細書で提供される。いくつかの実施形態では、データワードのスパース性を決定することができ、本明細書に記載の回路類は、読取りおよび/または書込み動作中に回路類の電力使用量(または消費)を減らすために、データワードのスパース性に部分的に基づいて、それぞれのデータワードの読取りおよび/または書込み動作を実施することができる。メモリは、スライスに区画化することができ、データワードの異なる部分(例えば、バイト部分)は、それぞれの部分のバイト値に部分的に基づいて、1つまたは複数のスライス内にまたはそれらにわたって書き込むことができる。例えば、回路類は、ゼロでないバイト値を有するデータワードのバイト部分の数およびゼロバイト値を有するバイト部分の数を決定することができる。ゼロバイト値を有するバイト部分は、情報、値および/または重要性を有さない(または重要でないレベルしか有さない)として識別されたデータワードまたは部分のスパース部分に対応することができる。したがって、本明細書に記載のシステムおよび方法は、読取り/書込みアクセス動作中の回路類による電力使用量を減らすために、ゼロバイト値を有するバイト部分のうちの1つまたは複数のための読取り/書込みアクセス動作をスキップする、無視するまたは実施しないことが可能である。
【0005】
いくつかの実施形態では、データワードは、ゼロでないバイト値を有するデータワードのバイト部分をグループ化または配置するおよびゼロでないバイト値を有するデータワードのバイト部分の後にゼロバイト値を有する残りのバイト部分を位置させるように修正することができる。例えば、回路類は、書込み動作を実施する際に全てのゼロでないバイト部分を第1のスライスの第1の端または左側にパックすることができる。読取り動作のために、回路類は、ゼロでないバイト値を有するデータワードのバイト部分の数およびゼロバイト値を有するバイト部分の数を識別するビットマスクを先ずフェッチし、(例えば、そこから読み取るために)いくつのバイト部分がゼロでないバイト値を含むかを検証することができる。いくつかの実施形態では、回路類は、回路類による電力使用量を減らすために、読取り/書込みアクセス中にゼロバイト値を有するバイト部分をスキップまたは無視することができる。したがって、本明細書に記載のシステムおよび方法は、アクセスレベル電力値または読取りおよび書込み動作を実施するための読取り/書込み電力を減らすことができる。
【0006】
いくつかの実施形態では、それぞれのバイト部分が、ゼロバイト値を含む場合、回路類は、スライス(例えば、左右両方のスライス)への読取り/書込みアクセスをスキップするまたは実施しないことが可能である。いくつかの実施形態では、データワードのビットマスク値が、第1のスライスのアクセスサイズ以下である場合、回路類は、第1のスライスのみへの読取り/書込みアクセスを実施することができる。いくつかの実施形態では、データワードのビットマスク値が、第1のスライスのアクセスサイズより大きい場合、回路類は、第1のスライスおよび第2のスライスまたは第1のスライスに加えて複数のスライスへの読取り/書込みアクセスを実施することができる。
【0007】
少なくとも1つの態様において、方法が提供される。方法は、複数のスライスのうちの第1のスライスがメモリ内のデータワードの第1の側にアクセスするように構成された、データワードのアクセスサイズを有するメモリにアクセスするための複数のスライスを、回路類によって、確立することを含むことができる。第1の側は、データワードよりも小さいサイズを含むことができる。方法は、ゼロでない値を有するデータワード内のバイト位置を識別するマスクに、回路類によって、アクセスすることを含むことができる。方法は、第1の側の端で開始する格納されたゼロでないバイト値、およびデータワードの残余内に格納された任意のゼロバイト値を有するようにデータワードを、回路類によって、修正することを含むことができる。方法は、第1の側の端で開始するいくつかのゼロでないバイト値が第1のスライスの第1のアクセスサイズ以下であるかどうかを、回路類によって、決定することを含むことができる。方法は、修正されたデータワードを少なくとも第1のスライスを介してメモリに、決定に応答して回路類によって、書き込むことを含むことができる。
【0008】
いくつかの実施形態では、方法は、1バイトのマスクまたは2バイトのマスクのうちの1つとしてマスクを生成することを含むことができる。方法は、第1の側のいくつかのゼロでないバイト値は第1のスライスの第1のアクセスサイズ以下であると、回路類によって、決定することを含むことができる。方法は、第1のスライスのみを介して修正されたデータワードの第1の側を、回路類によって、書き込むことを含むことができる。方法は、第1の側の端で開始するいくつかのゼロでないバイト値は第1のスライスの第1のアクセスサイズより大きいと、回路類によって、決定することを含むことができる。方法は、第1のスライスを介する修正されたデータワードの第1の側のバイトおよび第2のスライスを介する残りのゼロでないバイトを、回路類によって、書き込むことを含むことができる。いくつかの実施形態では、複数のスライスのうちの第1のスライスの第1のアクセスサイズまたは第2のスライスの第2のアクセスサイズのうちの1つが、メモリにアクセスする際の回路類の電力使用量の所定の削減を実現するために、選択され得る。方法は、マスクに基づいて修正されたデータワードのゼロでないバイト値の数を、回路類によって、決定することを含むことができる。
【0009】
少なくとも1つの態様において、方法が提供される。方法は、データワードのアクセスサイズを有するメモリにアクセスするために複数のスライスを、回路類によって、確立することを含むことができる。複数のスライスのうちの第1のスライスは、メモリ内のデータワードの第1の側にアクセスするように構成することができる。第1の側は、データワードよりも小さいサイズを含むことができる。方法は、ゼロでない値を有するデータワード内の位置を識別するマスクに、回路類によって、アクセスすることを含むことができる。方法は、データワードのいくつかのゼロでないバイト値は第1のスライスの第1のアクセスサイズ以下であると、マスクから、回路類によって、決定することを含むことができる。方法は、第1のスライスを介するメモリに格納されたデータワードのパックされた表現を、決定に応答して回路類によって、読み取ることを含むことができる。パックされた表現は、データワードの第1の側の端で開始する格納されたゼロでないバイト値およびデータワードの残余内に格納された任意のゼロバイト値を含むことができる。方法は、マスクによって示された位置にゼロでないバイト値およびゼロバイト値を有するデータワードを、パックされた表現から回路類によって、提供することを含むことができる。
【0010】
いくつかの実施形態では、マスクは、1バイトベースまたは2バイトベースでゼロでないバイト値の位置を識別することができる。方法は、データワードのいくつかのゼロでないバイト値は第1のスライスの第1のアクセスサイズ以下であると、回路類によって、決定することを含むことができる。方法は、第1のスライスのみを介するデータワードのパックされた表現を、回路類によって、読み取ることを含むことができる。方法は、データワードのいくつかのゼロでないバイト値は第1のスライスの第1のアクセスサイズより大きいと、回路類によって、決定することを含むことができる。方法は、複数のスライスのうちの第1のスライスを介するデータワードの第1の側および第2のスライスを介する任意の残りのゼロでないバイトを、回路類によって、読み取ることを含むことができる。いくつかの実施形態では、複数のスライスのうちの第1のスライスの第1のアクセスサイズまたは第2のスライスの第2のアクセスサイズのうちの1つが、メモリから読み取る際の回路類の電力使用量の所定の削減を実現するために、選択され得る。
【0011】
少なくとも1つの態様において、デバイスが提供される。デバイスは、データワードのアクセスサイズを有するメモリおよび回路類を含む。回路類は、メモリにアクセスするための複数のスライスを確立するように構成することができる。複数のスライスのうちの第1のスライスは、メモリ内のデータワードの左側にアクセスするように構成することができる。回路類は、ゼロでない値を有するデータワード内のバイト位置を識別するマスクにアクセスするように構成することができる。回路類は、データワードの第1の側の端で開始する格納されたゼロでないバイト値およびデータワードの残余内に格納された任意のゼロバイト値を有するようにデータワードを修正するように構成することができる。回路類は、修正されたデータワードの最も左のバイトのいくつかのゼロでないバイト値は第1のスライスの第1のアクセスサイズ以下であると決定するように構成することができる。回路類は、少なくとも第1のスライスを介して修正されたデータワードをメモリに、決定に応答して、書き込むように構成することができる。
【0012】
いくつかの実施形態では、回路類は、少なくとも第1のスライスを介してメモリに格納されたデータワードのパックされた表現を読み取るように構成することができる。パックされた表現は、データワードの第1の側に格納されたゼロでないバイト値およびデータワードの残りのバイトに格納された任意のゼロバイト値を含むことができる。回路類は、ゼロでないバイト値およびビットマスクによって示された位置に格納されたゼロバイト値を有するようにデータワードを作成するように構成することができる。回路類は、複数のスライスのうちの第1のスライスを介するデータワードの第1の側および第2のスライスを介する任意の残りのゼロでないバイトを読み取るように構成することができる。いくつかの実施形態では、複数のスライスのうちの第1のスライスの第1のアクセスサイズまたは第2のスライスの第2のアクセスサイズのうちの1つは、メモリから読み取る際の回路類の電力使用量の所定の削減を実現するために、選択することができる。
【0013】
上記および他の態様ならびに実現例について、以下で詳細に考察する。上述の情報および以下で詳述する説明は、様々な態様および実現例の実例を含み、特許請求する態様および実現例の性質ならびに特徴を理解するための概観または枠組みを提供する。図面は、様々な態様および実現例の例示ならびに更なる理解を提供し、本明細書に組み込まれるとともに本明細書の一部を構成する。
【0014】
添付図面は縮尺通りに描かれることを意図しない。様々な図面における同様の参照番号および記号は同様の要素を示す。明瞭にするため、全ての図面において全ての構成要素に符号が付されるわけではない。
【図面の簡単な説明】
【0015】
図1A】本開示の例示の一実現例による、人工知能(AI)に関連する処理を実施するシステムの一実施形態を示すブロック図である。
図1B】本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。
図1C】本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。
図1D】本開示の例示の一実現例によるコンピューティング環境を示すブロック図である。
図2A】本開示の例示の一実現例による、本明細書で提供されるニューラルネットワークアクセラレータにおいてスパースデータを書き込むためのシステムのブロック図である。
図2B】本開示の例示の一実現例による、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るためのシステムのブロック図である。
図2C】本開示の例示の一実現例による、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムのブロック図である。
図2D】本開示の例示の一実現例による、ニューラルネットワークアクセラレータにおいてスパースデータを書き込むためのシステムのブロック図である。
図2E】本開示の例示の一実現例による、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るためのシステムのブロック図である。
図3A】本開示の例示の一実現例による、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのプロセスまたは方法を示すフローチャートである。
図3B】本開示の例示の一実現例による、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのプロセスまたは方法を示すフローチャートである。
【発明を実施するための形態】
【0016】
特定の実施形態を詳細に示す図面に移る前に、本開示は、明細書に記載されるかまたは図面に例示される、詳細もしくは方法論に限定されないことが理解されるべきである。また、本明細書で使用する専門用語は、単に説明のためのものであって限定とみなされるべきでないことが理解されるべきである。
【0017】
以下の本発明の様々な実施形態の説明を読むために、本明細書のセクションおよびそれらそれぞれの内容について、次の説明が有用であり得る。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するのに有用な、環境、システム、構成、および/または他の態様について記載する。
セクションBは、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのデバイス、システムおよび方法の実施形態について記載する。
【0018】
A.人工知能に関連する処理のための環境
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ、および/または1つもしくは複数の記憶デバイス12を含むことができ、ならびに/あるいは実装することができる。
【0019】
上述の要素または構成要素はそれぞれ、ハードウェア、またはハードウェアとソフトウェアの組み合わせの形で実装される。例えば、これらの要素または構成要素はそれぞれ、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、あるいはデジタルおよび/またはアナログ要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子)を含むことができる回路類などのハードウェア上で実行する、任意のタイプおよび形態の実行可能命令を含むことができる。
【0020】
入力データ110は、AIアクセラレータ108のニューラルネットワーク114を構成、調整、訓練、および/または活性化するための、ならびに/あるいはプロセッサ124によって処理するための、任意のタイプもしくは形態のデータを含むことができる。ニューラルネットワーク114は、場合によっては、人工ニューラルネットワーク(ANN)と呼ばれる。ニューラルネットワークの構成、調整、および/または訓練は、履歴データなど、(例えば、入力データ110としての)訓練データセットがニューラルネットワークに提供されて処理される、機械学習のプロセスを指すかあるいは含むことができる。調整または構成は、ニューラルネットワーク114を訓練または処理して、ニューラルネットワークが精度を改善するのを可能にすることを指すかまたは含むことができる。ニューラルネットワーク114の調整または構成は、例えば、ニューラルネットワーク114に関する問題のタイプもしくは所望の目標に対して成功することが証明されているアーキテクチャを使用した、ニューラルネットワークの設計を含むことができる。場合によっては、1つまたは複数のニューラルネットワーク114は、同じもしくは類似のベースラインモデルで開始してもよいが、調整、訓練、または学習プロセスの間、ニューラルネットワーク114の結果は、ベースラインモデルであるかあるいは異なる目標もしくは目的のために調整または訓練された異なるニューラルネットワークよりも高いレベルの精度および信頼性で、特定のタイプの入力を処理し、特定のタイプの出力を生成するように、各ニューラルネットワーク114を調整することができるような、十分に異なるものであることができる。ニューラルネットワーク114の調整は、各ニューラルネットワーク114に対して異なるパラメータ128を設定すること、各ニューラルネットワーク114に対してパラメータ114を異なるように微調整すること、または異なる重み(例えば、ハイパーパラメータ、もしくは学習率)、テンソルフローなどを割り当てることを含むことができる。したがって、ニューラルネットワークならびに/あるいはシステムの調整または訓練プロセスおよび目標に基づいて、ニューラルネットワーク114に対して適切なパラメータ128を設定することで、システム全体の性能を改善することができる。
【0021】
AIアクセラレータ108のニューラルネットワーク114は、例えば、畳み込みニューラルネットワーク(CNN)、深層畳み込みネットワーク、順伝播型ニューラルネットワーク(例えば、多層パーセプトロン(MLP))、深層順伝播型ニューラルネットワーク、放射基底関数ニューラルネットワーク、コホネン自己組織化ニューラルネットワーク、回帰型ニューラルネットワーク、モジュール型ニューラルネットワーク、長期/短期メモリニューラルネットワークなど、任意のタイプのニューラルネットワークを含むことができる。ニューラルネットワーク114は、自然言語処理など、データ(例えば、画像、音声、映像)処理、オブジェクトもしくは特徴認識、レコメンダ機能、データもしくは画像分類、データ(例えば、画像)解析などを実施するために展開または使用することができる。
【0022】
一例として、また1つまたは複数の実施形態では、ニューラルネットワーク114は、畳み込みニューラルネットワークとして構成することができ、または畳み込みニューラルネットワークを含むことができる。畳み込みニューラルネットワークは、それぞれ異なる目的に役立ち得る、1つもしくは複数の畳み込みセル(またはプーリング層)およびカーネルを含むことができる。畳み込みニューラルネットワークは、畳み込みカーネル(場合によっては、単に「カーネル」と呼ばれる)を含み、組み込み、および/または使用することができる。畳み込みカーネルは入力データを処理することができ、プーリング層は、例えば、maxなどの非線形関数を使用して、データを単純化し、それによって不要な特徴を低減することができる。畳み込みニューラルネットワークを含むニューラルネットワーク114は、画像、音声、または任意のデータの認識もしくは他の処理を容易にすることができる。例えば、(例えば、センサからの)入力データ110を、ファンネルを形成する畳み込みニューラルネットワークの畳み込み層に渡して、入力データ110の検出された特徴を圧縮することができる。畳み込みニューラルネットワークの第1の層は第1の特性を検出することができ、第2の層は第2の特性を検出することができ、その先も同様である。
【0023】
畳み込みニューラルネットワークは、視覚心像、音声情報、および/または他の任意のタイプもしくは形態の入力データ110を解析するように構成された、深層順伝播型人工ニューラルネットワークのタイプであることができる。畳み込みニューラルネットワークは、最小限の前処理を使用するように設計された、多層パーセプトロンを含むことができる。畳み込みニューラルネットワークは、重み共有アーキテクチャおよび翻訳不変性特性に基づいて、シフト不変または空間不変人工ニューラルネットワークを含むことができ、またはそのように呼ぶことができる。畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムと比較して相対的に少ない前処理を使用することができるので、畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムのためにマニュアル設計されてもよいフィルタを自動的に学習して、ニューラルネットワーク114の構成、確立、またはセットアップと関連付けられた効率を改善することによって、他のデータ分類/処理技術と比べて技術的利点を提供することができる。
【0024】
ニューラルネットワーク114は、ニューロンもしくはノードの、入力層116および出力層122を含むことができる。ニューラルネットワーク114はまた、ニューロンもしくはノードの、畳み込み層、プーリング層、全結合層、および/または正規化層を含むことができる、1つまたは複数の隠れ層118、119を有することができる。ニューラルネットワーク114では、各ニューロンは、前の層におけるいくつかの位置から入力を受信することができる。全結合層では、各ニューロンは、前の層の全ての要素からの入力を受信することができる。
【0025】
ニューラルネットワーク114の各ニューロンは、前の層の受容野からの入力値に何らかの関数を適用することによって、出力値を計算することができる。入力値に適用される関数は、重みのベクトルおよびバイアス(一般的には実数)によって指定される。ニューラルネットワーク114における(例えば、訓練フェーズ中の)学習は、バイアスおよび/または重みを漸増的に調節することによって進行することができる。重みのベクトルおよびバイアスは、フィルタと呼ぶことができ、入力の何らかの特徴(例えば、特定の形状)を表すことができる。畳み込みニューラルネットワークの際立った特徴は、多くのニューロンが同じフィルタを共有できることである。これにより、各受容野が独自のバイアスおよび重みのベクトルを有するのではなく、単一のバイアスおよび重みの単一のベクトルを、該フィルタを共有する全ての受容野にわたって使用することができるので、メモリフットプリントが低減される。
【0026】
例えば、畳み込み層では、システムは、畳み込み演算を入力層116に適用して、結果を次の層に渡すことができる。畳み込みは、個々のニューロンの応答をエミュレートして刺激を入力することができる。各畳み込みニューロンは、その受容野に対してのみデータを処理することができる。畳み込み演算は、全結合順伝播型ニューラルネットワークと比較して、ニューラルネットワーク114で使用されるニューロンの数を低減することができる。したがって、畳み込み演算は、自由パラメータの数を低減して、より少ないパラメータでネットワークをより深層化することを可能にすることができる。例えば、入力データ(例えば、画像データ)サイズにかかわらず、同じ共有重みをそれぞれ有するサイズ5×5のタイリング領域は、25個のみの学習可能パラメータを使用してもよい。このように、畳み込みニューラルネットワークを有する第1のニューラルネットワーク114は、逆伝播を使用することによって多くの層を有する従来の多層ニューラルネットワークを訓練する際の、勾配消失または発散の問題を解決することができる。
【0027】
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、1つまたは複数のプーリング層を含むことができる。1つまたは複数のプーリング層は、ローカルプーリング層またはグローバルプーリング層を含むことができる。プーリング層は、1つの層におけるニューロンクラスタの出力を組み合わせて、次の層における単一のニューロンとすることができる。例えば、最大プーリングは、前の層におけるニューロンのクラスタそれぞれからの最大値を使用することができる。別の例は、前の層におけるニューロンのクラスタそれぞれからの平均値を使用することができる、平均プーリングである。
【0028】
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、全結合層を含むことができる。全結合層は、1つの層の全てのニューロンを別の層の全てのニューロンに結合することができる。ニューラルネットワーク114は、畳み込み層で重みを共有して構成することができ、それは同じフィルタが層内の各受容野に使用されることを指すことができ、それにより、メモリフットプリントが低減され、第1のニューラルネットワーク114の性能が改善される。
【0029】
隠れ層118、119は、入力データ(例えば、仮想現実システムなどからのセンサデータ)に基づいて、情報を検出するように調整または構成されるフィルタを含むことができる。システムがニューラルネットワーク114(例えば、畳み込みニューラルネットワーク)の各層を通るにつれて、システムは、第1の層からの入力を翻訳し、変換された入力を第2の層に出力することができ、その先も同様である。ニューラルネットワーク114は、検出、処理、および/または計算されるオブジェクトもしくは情報のタイプ、ならびに入力データ110のタイプに基づいて、1つまたは複数の隠れ層118、119を含むことができる。
【0030】
いくつかの実施形態では、畳み込み層は、ニューラルネットワーク114(例えば、CNNとして構成される)のコアビルディングブロックである。層のパラメータ128は、小さい受容野を有するが、入力ボリュームの深さ全体を通って延在する、学習可能なフィルタ(またはカーネル)のセットを含むことができる。順方向パスの間、各フィルタは、入力ボリュームの幅および高さにわたって畳み込まれて、フィルタのエントリと入力との間のドット積を計算し、該フィルタの二次元活性化マップを作成する。結果として、ニューラルネットワーク114は、入力のある空間位置である特定のタイプの特徴を検出すると活性化する、フィルタを学習させることができる。深さ次元に沿って全てのフィルタの活性化マップを積み重ねることで、畳み込み層の全出力ボリュームが形成される。したがって、出力ボリュームの全てのエントリは、入力の小さい領域に注目し、同じ活性化マップのニューロンとパラメータを共有する、ニューロンの出力として解釈することもできる。畳み込み層では、ニューロンは、前の層の制限されたサブエリアから入力を受信することができる。一般的に、サブエリアは正方形形状のもの(例えば、サイズ5×5)である。ニューロンの入力エリアはその受容野と呼ばれる。そのため、全結合層では、受容野は前の層全体である。畳み込み層では、受容エリアは前の層全体よりも小さいものであり得る。
【0031】
第1のニューラルネットワーク114は、(例えば、入力データ110に基づいて、オブジェクト、イベント、ワード、および/または他の特徴の確率を検出もしくは決定することによって)入力データ110を検出、分類、セグメント化、および/または翻訳するように訓練することができる。例えば、ニューラルネットワーク114の第1の入力層116は、入力データ110を受信し、入力データ110を処理してデータを第1の中間出力に変換し、第1の中間出力を第1の隠れ層118に伝達することができる。第1の隠れ層118は、第1の中間出力を受信し、第1の中間出力を処理して第1の中間出力を第2の中間出力に変換し、第2の中間出力を第2の隠れ層119に伝達することができる。第2の隠れ層119は、第2の中間出力を受信し、第2の中間出力を処理して第2の中間出力を第3の中間出力に変換し、第3の中間出力を、出力層122に伝達することができる。出力層122は、第3の中間出力を受信し、第3の中間出力を処理して第3の中間出力を出力データ112に変換し、出力データ112を(例えば、場合によっては、ユーザに対するレンダリングのため、格納のためなど、後処理エンジンに)伝達することができる。出力データ112は、例として、オブジェクト検出データ、強化/翻訳/拡張されたデータ、推奨、分類、および/またはセグメント化されたデータを含むことができる。
【0032】
再び図1Aを参照すると、AIアクセラレータ108は、1つまたは複数の記憶デバイス126を含むことができる。記憶デバイス126は、AIアクセラレータ108と関連付けられた任意のタイプもしくは形態のデータを、格納、保持、または維持するように、設計または実装することができる。例えば、データは、AIアクセラレータ108によって受信される入力データ110、および/または出力データ112(例えば、次のデバイスもしくは処理段階に出力される前)を含むことができる。データは、ニューラルネットワーク114および/またはプロセッサ124の処理段階のいずれかに使用される、またはいずれかからの、中間データを含むことができる。データは、記憶デバイス126から読み取るかまたはアクセスすることができる、ニューラルネットワーク114のニューロンに入力される、また該ニューロンで処理する、1つもしくは複数のオペランドを含むことができる。例えば、データは、記憶デバイス126に格納し、そこから読み取るかまたはアクセスすることができる、入力データ、重み情報、および/またはバイアス情報、活性化関数情報、ならびに/あるいは1つもしくは複数のニューロン(またはノード)のためのパラメータ128、および/またはニューラルネットワーク114の層を含むことができる。データは、記憶デバイス126に書き込み、またそこに格納することができる、ニューラルネットワーク114のニューロンからの出力データを含むことができる。例えば、データは、記憶デバイス126に転送するかもしくは書き込み、格納することができる、ニューラルネットワーク114の1つもしくは複数のニューロン(またはノード)および/または層のための、活性化データ、改良もしくは更新されたデータ(例えば、重み情報および/またはバイアス情報、活性化関数情報、および/または他のパラメータ128)を含むことができる。
【0033】
いくつかの実施形態では、AIアクセラレータ108は1つまたは複数のプロセッサ124を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する入力データを前処理するための、ならびに/あるいはニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する出力データを後処理するための、任意の論理、回路類、および/または処理構成要素(例えば、マイクロプロセッサ)を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108の1つもしくは複数の演算を構成、制御、および/または管理するための、論理、回路類、処理構成要素、および/または機能性を提供することができる。例えば、プロセッサ124は、ニューラルネットワーク114と関連付けられたデータまたは信号を受信して、(例えば、ニューラルネットワーク114の演算を実装する回路類に対するクロックゲート制御を介して)消費電力を制御または低減してもよい。別の例として、プロセッサ124は、(例えば、AIアクセラレータ108の様々な構成要素における)別個の処理のため、(例えば、AIアクセラレータ108の同じ構成要素における、異なる時間での)逐次処理のため、あるいは記憶デバイスの異なるメモリスライスに、または異なる記憶デバイスに格納するため、データを区画化および/または再配置してもよい。いくつかの実施形態では、プロセッサ124は、特定の重み、活性化関数、および/またはパラメータ情報の識別、選択、ならびに/あるいはニューラルネットワーク114のニューロンおよび/または層へのロードによって、特定の文脈に対して演算を行い、特定のタイプの処理を提供し、ならびに/あるいは特定のタイプの入力データをアドレスするように、ニューラルネットワーク114を構成することができる。
【0034】
いくつかの実施形態では、AIアクセラレータ108は、ディープラーニングおよび/またはAIワークロードを扱うかもしくは処理するように、設計および/または実装される。例えば、AIアクセラレータ108は、人工ニューラルネットワーク、マシンビジョン、および機械学習を含む人工知能用途のため、ハードウェアアクセラレーションを提供することができる。AIアクセラレータ108は、ロボティックス、物のインターネット、または他のデータ集約的もしくはセンサ駆動のタスクを扱う演算向けに構成することができる。AIアクセラレータ108は、マルチコアまたは複数の処理要素(PE)設計を含んでもよく、人工現実(例えば、仮想、拡張、もしくは混合現実)システム、スマートフォン、タブレット、およびコンピュータなど、様々なタイプおよび形態のデバイスに組み込むことができる。AIアクセラレータ108の特定の実施形態は、少なくとも1つのデジタル信号プロセッサ(DSP)、コプロセッサ、マイクロプロセッサ、コンピュータシステム、プロセッサのヘテロジニアスコンピューティング構成、グラフィックス処理装置(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)を含むかあるいはそれらを使用して実装することができる。AIアクセラレータ108は、トランジスタベース、半導体ベース、および/または量子コンピューティングベースのデバイスであることができる。
【0035】
次に図1Bを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。
【0036】
AIアクセラレータ108は、1つまたは複数の記憶デバイス126(例えば、スタティックランダムアクセスメモリ(SRAM)デバイスなどのメモリ)、1つまたは複数のバッファ、複数の処理要素(PE)回路またはPE回路のアレイ、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
【0037】
AIアクセラレータ108において実装されたニューラルネットワーク114(例えば、人工ニューラルネットワーク)では、ニューロンは、様々な形態を取ることができ、処理要素(PE)またはPE回路と呼ぶことができる。PEは接続されて、異なるパターンが異なる機能的目的に役立つ、特定のネットワークパターンまたはアレイとなる。人工ニューラルネットワークのPEは、(例えば、半導体の実現例では)電気的に動作し、アナログ、デジタル、またはハイブリッドのいずれかであってもよい。生体シナプスの作用に匹敵するために、PE間の接続に、適正なシステム出力を作成するように校正または「訓練」することができる、乗法的な重みを割り当てることができる。
【0038】
PEは、(例えば、ニューロンのマッカロック-ピッツモデルを表す)次式に関して定義することができる。
ζ=Σ (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
【0039】
再び図1Bを参照すると、PE120に対する入力xは、記憶デバイス126(例えば、SRAM)から読み取られる、入力ストリーム132の一部であることができる。入力ストリーム132は、PEの1つの行(水平のバンクもしくはグループ)に方向付けることができ、PEのうち1つもしくは複数にわたって共有するか、またはそれぞれのPEに対する入力としてのデータ部分(重なり合うもしくは重なり合わない部分)に区画化することができる。重みストリーム134(例えば、記憶デバイス126から読み取られる)における重み134(もしくは重み情報)は、PEの列(垂直のバンクもしくはグループ)に方向付けるかまたは提供することができる。列のPEはそれぞれ、同じ重み134を共有するか、または対応する重み134を受信してもよい。標的のPEそれぞれに対する入力および/または重みは、標的のPEに(例えば、記憶デバイス126から)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの行もしくは列に沿って)標的のPEにルーティングすることができる。各PEの出力は、PEアレイの外に直接、あるいは1つもしくは複数のPEを通して(例えば、PEの列に沿って)PEアレイを出るようにルーティングすることができる。PEの各列の出力は、それぞれの列の加算器回路類において合算または加算し、PEのそれぞれの列に対するバッファ130に提供することができる。バッファ130は、受信した出力を記憶デバイス126に提供、転送、ルーティング、書込み、および/または格納することができる。いくつかの実施形態では、記憶デバイス126に格納された出力(例えば、ニューラルネットワークの1つの層からの活性化データ)を、記憶デバイス126から検索するかまたは読み取り、後の時間における(ニューラルネットワークの後続層の)処理のため、PE120のアレイに対する入力として使用することができる。特定の実施形態では、記憶デバイス126に格納された出力を、AIアクセラレータ108に対する出力データ112として、記憶デバイス126から検索するかまたは読み取ることができる。
【0040】
次に図1Cを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aおよび図1Bに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数のPE120、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
【0041】
いくつかの実施形態では、PE120は、1つもしくは複数の乗累算(MAC)ユニットまたは回路140を含むことができる。1つまたは複数のPEは、場合によっては、MACエンジンと呼ぶことができる。MACユニットは、乗累算を実施するように構成される。MACユニットは、乗算器回路、加算器回路、および/または累算器回路を含むことができる。乗累算は、2つの数字の積を計算し、その積を累算器に加える。MAC演算は、累算器a、ならびに入力bおよびcに関連して、次のように表すことができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力をレジスタに加算することができる。
【0042】
上述したように、MACユニット140は、乗算および加算両方の機能を実施することができる。MACユニット140は2つの段階で演算することができる。MACユニット140は、最初に、第1の段階で所与の数(入力)の積を計算し、結果を第2の段階の演算(例えば、加算および/または累算)のために転送することができる。nビットのMACユニット140は、nビット乗算器、2nビット加算器、および2nビット累算器を含むことができる。
【0043】
本明細書に記載する様々なシステムおよび/またはデバイスを、コンピューティングシステムに実装することができる。図1Dは、代表的なコンピューティングシステム150のブロック図を示している。いくつかの実施形態では、図1Aのシステムは、コンピューティングシステム150の処理装置156の少なくとも一部を形成することができる。コンピューティングシステム150は、例えば、スマートフォン、他の移動電話、タブレットコンピュータ、ウェアラブルコンピューティングデバイス(例えば、スマートウォッチ、眼鏡、ヘッドマウントディスプレイ)、デスクトップコンピュータ、ラップトップコンピュータなどのデバイス(例えばコンシューマデバイス)として実装するか、あるいは分散型コンピューティングデバイスを実装することができる。コンピューティングシステム150は、VR、AR、MR体験を提供するために実装することができる。いくつかの実施形態では、コンピューティングシステム150は、プロセッサ156、記憶デバイス158、ネットワークインターフェース151、ユーザ入力デバイス152、およびユーザ出力デバイス154など、従来の専用またはカスタムのコンピュータ構成要素を含むことができる。
【0044】
ネットワークインターフェース151は、(ローカル/リモート)サーバまたはバックエンドシステムのネットワークインターフェースも接続される、ローカル/ワイドエリアネットワーク(例えば、インターネット)に対する接続を提供することができる。ネットワークインターフェース151は、有線インターフェース(例えば、イーサネット)、ならびに/あるいはWi-Fi、ブルートゥース、またはセルラーデータネットワーク規格(例えば、3G、4G、5G、60GHz、LTEなど)などの様々なRFデータ通信規格を実装する無線インターフェースを含むことができる。
【0045】
ユーザ入力デバイス152は、ユーザがコンピューティングシステム150に信号を提供するのに用いることができる、任意のデバイス(または複数のデバイス)を含むことができ、コンピューティングシステム150は、特定のユーザ要求または情報を示すものとして信号を解釈することができる。ユーザ入力デバイス152は、キーボード、タッチパッド、タッチスクリーン、マウスもしくは他のポインティングデバイス、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、マイクロフォン、センサ(例えば、モーションセンサ、視線追跡センサなど)などのいずれかまたは全てを含むことができる。
【0046】
ユーザ出力デバイス154は、コンピューティングシステム150がユーザに情報を提供するのに用いることができる、任意のデバイスを含むことができる。例えば、ユーザ出力デバイス154は、コンピューティングシステム150によって生成されるかまたは該システムに送達される画像を表示する、ディスプレイを含むことができる。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)を含む発光ダイオード(LED)、投影システム、陰極線管(CRT)などの様々な画像生成技術を、サポートしている電子部品(例えば、デジタル・アナログもしくはアナログ・デジタル変換器、信号プロセッサなど)とともに組み込むことができる。入力および出力両方のデバイスとして機能する、タッチスクリーンなどのデバイスを使用することができる。出力デバイス154は、ディスプレイに加えてまたはディスプレイの代わりに提供することができる。例としては、インジケータ光、スピーカ、触覚「ディスプレイ」デバイス、プリンタなどが挙げられる。
【0047】
いくつかの実現例としては、コンピュータプログラム命令をコンピュータ可読記憶媒体に格納する、マイクロプロセッサ、記憶装置、およびメモリなどの電子構成要素が挙げられる。本明細書に記載する特徴の多くは、コンピュータ可読記憶媒体として符号化されたプログラム命令のセットとして指定される、プロセスとして実現することができる。
【0048】
これらのプログラム命令は、1つまたは複数のプロセッサによって実行されると、プログラム命令に示されている様々な動作をプロセッサに実施させる。プログラム命令またはコンピュータコードの例としては、コンパイラによって作成されるものなどの機械コード、およびインタープリタを使用してコンピュータ、電子構成要素、またはマイクロプロセッサによって実行される、より高次のコードを含むファイルが挙げられる。好適なプログラミングを通して、プロセッサ156は、コンピューティングシステム150に対して、サーバまたはクライアントによって実施されるものとして本明細書に記載する機能性、またはメッセージ管理サービスと関連付けられた他の機能性のいずれかを含む、様々な機能性を提供することができる。
【0049】
コンピューティングシステム150は例示であり、変形および修正が可能であることが認識されるであろう。本開示と関連して使用されるコンピュータシステムは、本明細書には具体的に記載しない他の能力を有することができる。更に、コンピューティングシステム150について、特定のブロックを参照して記載しているが、該ブロックは説明の便宜上定義されているものであり、構成部品の特定の物理的配置を示唆しようとするものではないことが理解されるべきである。例えば、異なるブロックを、同じ設備に、同じサーバラックに、または同じマザーボード上に配置することができる。更に、ブロックは必ずしも物理的に別個の構成要素に対応していなくてもよい。ブロックは、例えば、プロセッサをプログラミングするか、または適切な制御回路類を提供することによって、様々な動作を実施するように構成することができ、様々なブロックは、初期の構成がどのように得られるかに応じて再構成可能であってもなくてもよい。
【0050】
本開示の実現例は、回路類およびソフトウェアの任意の組み合わせを使用して実装される電子デバイスを含む、様々な装置で実現することができる。
【0051】
B.ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むための方法およびデバイス
本明細書の開示は、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステム、方法、およびデバイスの実施形態を含む。いくつかの実施形態では、書込みおよび読取り機能が、データの個々の部分のプロパティまたはプロファイルを使用してデータで実施されるように、データは、ワードごとに処理することができる。例えば、いくつかのゼロ値およびゼロでない値が、データワードの1つまたは複数の異なる部分について決定され得る。それらの部分は、データワードのバイトデータ値またはバイトデータ部分を含むことができるが、これに限定されない。本明細書に記載の回路類は、それぞれの部分がゼロ値またはゼロでない値に対応するかどうかに部分的に基づいて、データワードのそれぞれの部分を読み取るまたは書き込むことを決定することができる。いくつかの実施形態では、回路類は、読取りおよび/または書込み動作中に回路類のアクセスエネルギー値または消費電力を減らすために、ゼロ値に対応するデータワードの部分を無視またはスキップすることができる。
【0052】
データを読み取るおよび書き込むことは、コンピューティングシステムの大量の資源(例えば、ハードウェアおよびソフトウェア)を使用し得る。更に、読取りおよび書込み動作を実施するためにメモリにアクセスすることは、それぞれのコンピューティングシステムの資源による大量の消費電力を必要とし得る。例えば、データを読み取るまたは書き込むためにメモリにアクセスすることは、要求されたまたは受信されたデータの全てを処理するために、それぞれの回路類で大量の電力を必要とし得る。
【0053】
しかしながら、データは、スパース性のレベルを含むことができるもしくはそれによって特徴付けることができ、重要でない、無価値の、もしくはデータを含まない可能性がある部分を含むことができる。例えば、データは、メモリに読み出されるまたは書き込まれる必要がないゼロバイト値に対応する(例えば、それぞれの部分に重要データがない)部分を含むことができる。したがって、要求されたまたは受信されたデータの全てを処理することによって、回路類は、重要なデータ(例えば、ゼロでない値を有するバイト部分)およびデータワードの重要でないデータまたはスパース部分(例えば、ゼロ値を有するバイト部分)を読み取るおよび書き込むために、不必要な量の電力およびシステム資源を使用することがある。
【0054】
アプリケーションを処理するニューラルネットワークにおいて、データのある特定のタイプおよび/またはソースが、スパースコンテンツまたはデータを有するものとして特徴付けられ得る。本明細書に記載の方法、システムおよびデバイスは、それぞれのデータワードのスパース性を決定されることによって、メモリにアクセスするための電力使用量を減らすことができる。例えば、回路類は、ゼロでないバイト値を含むデータワードの部分およびゼロバイト値を含むデータワードの部分を決定することができる。バイト値は、データのバイトの(任意の既定義数または長さのビットの)値を指すことができ、データのバイト内の全てのビットの集合的価値を示すことができる。ゼロバイト値を有するバイトは、バイト内の全てのビットがゼロ(「0」)、低いまたはヌルであることを示すことができる。ゼロでないバイト値を有するバイトは、ビットのうちの少なくとも1つが高い、1であるまたは0でないなど、バイト内の全てのビットがゼロ(「0」)、低いまたはヌルではないことを示すことができる。
【0055】
メモリ(例えば、スタティックランダムアクセスメモリ(SRAM))は、複数のスライスを有するように構成することができる、または複数のスライスへと分割することができる。例えば、一実施形態において、データワードは、8つの1バイトデータ値を有する64ビットワードを含むことができる。メモリは、例えば、8ビットの幅を有する1ビットマスクスライス、32ビットの幅を有する第1のスライス(例えば、左のスライス)、および32ビットの幅を有する第2のスライス(例えば、右のスライス)を含むことができるが、これに限定されない、複数のスライス(例えば、3つのスライス)へと構成するまたは(例えば、論理的にもしくは実質的に)区画化することができる。ゼロでないバイト値を有する部分が第1のスライスの第1の端で開始する、およびゼロバイト値を有するデータワードの部分が、ゼロでないバイト値を有する部分の後に、それに続いて、またはそれに次いで格納されるように、回路類は、データワードを再編成することができる。
【0056】
例えば、新しいデータワードを書き込むとき、ビットマスクを生成することができ、ビットマスクの各ビットは、データワードのバイトがゼロでないバイト値に対応するかまたはゼロバイト値に対応するかを示す。いくつかの実施形態では、ビットマスクは、1バイトのビットの半分(例えば、4ビット)、または1バイトのうちの他の端数、またはデータの所定の数の(1つまたは複数の)バイトがゼロでない値またはゼロ値に対応することを示すビットマスクのビットと生成することができる。回路類は、第1のスライスの第1の端(例えば、左端、左部分)または他の所定の部分で開始するゼロでないバイト値を書き込むことができる。読取り動作のために、回路類は、データワードに対応するビットマスクを取得し、ゼロでないバイト値であるデータワードのバイトの数をチェックすることができる。回路類は、第1のスライスの第1の端(例えば、左端、左部分)または他の所定の部分で開始するゼロでないバイト値を読み取ることができる。
【0057】
いくつかの実施形態では、ゼロバイト値は、書込みまたは読取り動作中に無視またはスキップすることができる。例えば、回路類は、いくつかのゼロでないバイト値が第1のスライスのサイズ以下であるかを決定することができる。いくつかのゼロでないバイト値が第1のスライスのサイズ以下である場合、回路類は、ゼロバイト値の書込みまたは読取り動作を無視またはスキップすることができる。いくつかのゼロでないバイト値が、第1のスライスのサイズより大きい場合、回路類は、ゼロバイト値およびゼロでないバイト値の書込みまたは読取り動作のために少なくとも第1のおよび第2のスライスにアクセスすることができる。
【0058】
ここで図2A図2Bを参照すると、ニューラルネットワークアクセラレータ(例えば、図1AのAIアクセラレータ108)においてスパースデータを読み取るおよび書き込むためのシステムの実施形態が、示されている。概要では、図2Aは、データワード220をメモリ210に書き込むためのシステムを示す。システムは、読取りおよび書込み動作のためにアクセスするためのメモリ210を有する回路類202を含むことができる。メモリ210は、複数のスライス204へと区画化または構成することができ、それぞれのスライスは所定のサイズ208または記憶容量を有する。回路類202は、データワード220のバイト222を書き込むまたはデータワード220のバイト222を読み取るために、メモリ210のスライス204にアクセスすることができる。
【0059】
回路類202は、図1Aに関して前述したプロセッサ124などの、しかしこれに限定されない、プロセッサを含むことができる。回路類202は、図1Dに関して前述したコンピューティングシステム150の構成要素または部分であることができる。メモリ210は、スタティックランダムアクセスメモリ(SRAM)または任意の他のタイプのメモリ、記憶ドライブまたは記憶レジスタを含むことができる。いくつかの実施形態では、メモリ210は、図1A図1Bの記憶デバイス126または図1Dのストレージ158を含むことができる、またはそれと同じであるもしくは実質的に類似することができる。メモリ210は、複数のスライス204a~204nへと区画化することができる。スライス204は、それぞれ、メモリ210の一部分またはセグメント、およびメモリ210のアドレスのうちの1つもしくは範囲に対応することができる。スライス204は、メモリ210の合計サイズより小さいまたは小さいサイズを有することができる。例えば、メモリ210は、複数のビットに対応するサイズまたはアクセスサイズ212を含むまたは有することができる。それぞれのスライス204は、メモリのアクセスサイズ212より小さいサイズ208を有することができる。
【0060】
各スライス204のビット容量またはバイト容量は、メモリ210のビット容量またはバイト容量より小さくなり得る。いくつかの実施形態では、スライス204は、同じサイズ208を有する(例えば、同じビットまたは記憶容量を有する)ことができる。いくつかの実施形態では、1つまたは複数のスライス204は、1つまたは複数の他のまたは異なるスライス204(例えば、異なるビットまたは記憶容量)のサイズ208とは異なるサイズ208を有することができる。メモリ210は、非限定的例として、2つのスライス204a~204bを含むことができる。メモリ210は、例えば、3つのスライス204a~204cを含むことができる。メモリ210は、4つ以上のスライス204a~204nを含むことができる。
【0061】
いくつかの実施形態では、メモリ210は、ビットマスクスライス204cを含むことができる。ビットマスクスライス204cは、ビットマスク230を格納することができる。いくつかの実施形態では、ビットマスクスライス204cは、異なるスライス(例えば、左のスライス、第1のスライス)の部分であることができる。例えば、回路類202は、別個のまたは独立したビットマスクスライス204cを有する代わりに、データワード220のビットマスク230に対応するビットマスクインジケータを格納することができる。ビットマスク230は、データワード220のプロパティまたはプロファイルを表すことができる。ビットマスク230は、複数のビット232を含むことができ、各ビットはデータワード220の少なくとも1つのバイト部分222に対応する。例えば、ビットマスクのビット232は、データワード内のデータワードの少なくとも1つのバイト222の位置(例えば、データワードの他のバイト222の位置に対する)を識別することができる。
【0062】
メモリ210は、カウンタ234を含むことができる。カウンタ234は、母集団カウント(例えば、ビットマスク内のゼロでないビットの数を数えるために実装されたビットカウンタ)を含むまたはそれに対応することができる。カウンタ234は、ゼロでないバイト値を有するデータワード220のバイト222の数に対応する(または、示す)値を含むことができる。例えば、カウンタ234の値は、データワード220のゼロでないバイト値の数と同じまたは同等であることができる。
【0063】
いくつかの実施形態では、図2Aに示すように、回路類202は、複数のバイト222またはバイト部分222を有するデータワード220を受信することができる。バイト部分222は、ゼロでないバイト値またはゼロバイト値を含むことができる。例えば、それぞれのバイト部分222は、複数のビット(例えば、8ビット)を含むことができる。いくつかの実施形態では、それぞれのバイト部分222のビットの値は、ゼロでないバイト値(例えば、1)を含む、またはゼロでないバイト値(例えば、1)に結局もしくは合計してなることができる。いくつかの実施形態では、それぞれのバイト部分222のビットの値は、ゼロバイト値(例えば、0)を含む、またはゼロバイト値(例えば、0)に結局もしくは合計してなることができる。
【0064】
回路類202は、ゼロでないバイト値を有するバイト部分222がともにグループ化またはともにパックされてデータワード220の修正されたデータワードまたはパックされた表現224を形成するように、バイト部分222を修正する、再編成する、並べ替える、並べ直すまたは他の方法で再配置することができる。回路類202は、ゼロバイト値を有するバイト部分222がともにグループ化されるまたはともにパックされるように、バイト部分222を修正または再配置することができる。
【0065】
回路類202は、データワードの対応するバイト部分222がゼロでないバイト値を含むかまたはゼロバイト値を含むかを示すために、ビットマスク230のビット232を生成するまたは投入することができる。いくつかの実施形態では、回路類は、ビットマスク230のビット232を生成または投入して、データワード220のビットまたはバイトのグループ(例えば、それぞれのバイト部分222のビットの半分(例えば、4ビット)、またはそれぞれのバイト部分222のいくらかの他の端数、サブセットもしくはいくつかのビット、または所定の数のバイト部分222)がゼロでない値またはゼロ値を有することをそれぞれ示すことができる。ゼロでない値を含むバイト部分222の総量または数を示すデータワード220のカウンタ234または母集団カウント234が、決定され得る。例えば、対応するバイト部分222が、ゼロでないバイト値を含む場合、回路類202は、「1」の値をビットマスク230のビット232に割り当てることができ、そして、対応するバイト部分222がゼロバイト値を含む場合、回路類は、「0」の値をビットマスク230のビット232に割り当てることができる。プロセッサは、ビットマスク230の全ての割り当てられた値を(算術的に)合計してまたは加えて、カウンタ234に対応する合計値を提供することができる。回路類202は、データワード220を書き込むかまたはデータワード220をスキップする、無視する、もしくは他の方法で書き込まないかを決定するために、カウンタ234を書込み閾値250と比較することができる。例えば、データワード220が、ゼロの母集団カウント234を有するまたはゼロでないバイト値を含まない場合、回路類202は、データワード220をスキップする、無視する、または他の方法でメモリに書き込まないことが可能である。1つの実施形態において、書込み閾値は0であることができる。いくつかの実施形態では、カウンタ234が書込み閾値を超える場合、書込み動作が実施される。データワード220の母集団カウント234が、書込み閾値250より大きい場合、回路類202は、母集団カウント234をスライス204のアクセスサイズ閾値252と比較することができる。いくつかの実施形態では、アクセスサイズ閾値252は、複数のスライス204の第1のスライス204のサイズ208に対応することができる。アクセスサイズ閾値252は、複数のスライス204のうちのいくつのスライス204がデータワード220をメモリ210に書き込むために使用されることになるかを決定するために、使用することができる。母集団カウント234が、第1のスライス204のアクセスサイズ閾値252以下である場合、回路類202は、非バイト値を有するバイト部分222を複数のスライス204のうちの第1のスライス204に書き込むことができる。回路類202は、ゼロでないバイト値を有するバイト部分222を第1のスライス204の第1の側206の第1の位置で開始する第1のスライス204に書き込むことができ、データワード220の最初のフォーマットまたは構成におけるこれらのバイト部分222の順序に対応する(例えば、互いに対して同じ順序の)、互いに当接する順序でこれらのバイト部分222を書き込むことができる。
【0066】
母集団カウント234が、第1のスライス204のアクセスサイズ閾値252より大きい場合、回路類202は、非バイト値を有するバイト部分222を複数のスライス204のうちの第1のスライス204および第2のスライス204、または複数のスライス204のうちの複数のスライス204に書き込むことができる。例えば、回路類202は、第1のスライスがいっぱいになるまたは容量に達するまで、非バイト値を有するバイト部分222を第1のスライス204の第1の側206の第1の位置で開始して第1のスライス204に書き込むことができ、データワード220の最初のフォーマットにおけるバイト部分222の順序に対応する順序で、第1のスライス204を越えて第2のスライス204または複数のスライス204に残りのバイト部分222を書き込むことができる。これは、データワード220のパッキングプロセスと呼ぶことができる。
【0067】
いくつかの実施形態では、回路類202は、ビットマスク230において示されるものとしてのゼロバイト値を有するデータワード220のバイト部分222を無視する、スキップする、迂回する、または書き込まないことが可能である。回路類202は、ビットマスク230において示されるものとしてのゼロバイト値を有するデータワード220のバイト部分222のうちのいくつかを無視する、スキップする、迂回するまたは書き込まないことが可能であり、(例えば、スライス204を完全に投入するために)ゼロでないバイト値を有する少なくとも1つのバイト部分222を有するスライス204にゼロバイト値を有するデータワード220のバイト部分222のうちの1つまたは複数を書き込むことができる。いくつかの実施形態では、回路類202は、ビットマスク230において示されるものとしてのゼロバイト値を有するデータワード220のそれぞれのバイト部分222を無視する、スキップするまたは書き込まないことが可能である。例えば、回路類202は、ゼロでないバイト値を有するバイト部分222のみを書き込むことおよびゼロバイト値を有するバイト部分222を無視するまたは書き込まないことによって、書込み動作の電力使用量を減らすことができる。いくつかの実施形態では、回路類202は、ゼロでないバイト値を有するバイト部分222のみを書き込むことおよびゼロバイト値を有するバイト部分222を無視するまたは書き込まないことによって、書込み動作のための回路類202のエネルギー消費値または電力使用量を減らすことができる。
【0068】
ここで図2Bを参照すると、メモリ210からデータワード220を読み取るためのシステムが、提供される。データワード220は、図2Aにおいてメモリ210に書き込まれたデータワード220のパックされた表現224を含むことができる。例えば、データワード220のパックされた表現224は、ともにグループ化されたまたはメモリ210の1つまたは複数のスライス204において順番に書き込まれたゼロでないバイト値を有するバイト部分222を有する修正されたデータワード220を含むまたはそれに対応することができる。メモリ210からデータワード220のパックされた表現224を読み取るために、回路類は、ビットマスク230を使用して、ゼロでないバイト値を有するデータワード220のバイト部分222およびゼロバイト値を有するデータワードのバイト部分222を決定することができる。例えば、回路類202は、ビットマスク230にアクセスし、個々のビット232の値を使用してデータワードの対応するバイト部分222の値を決定することができる。回路類202は、データワード220の母集団カウント234を書込み閾値250と比較して、データワード220がゼロでないバイト値を有する任意のバイト部分222を含むかを決定することができる。回路類202は、データワード220の母集団カウント234をアクセスサイズ閾値252と比較して、メモリ210内にデータワード220のバイト部分222が書き込まれたスライス204がいくつあるかを決定することができる。
【0069】
回路類202は、メモリ210の1つまたは複数のスライス204に格納されたデータワード220のパックされた表現224を読み取ることができる。例えば、回路類202は、第1のスライス204を介してまたは複数のスライス204(例えば、第1のスライスおよび第2のスライス)を介してメモリ210に格納されたデータワード220のパックされた表現224を読み取ることができる。パックされた表現224は、データワード220の第1の側206の端で開始する格納されたゼロでないバイト値(例えば、左側または最も重要なビット部分)およびデータワード220の残余内に格納された任意のゼロバイト値(例えば、右側または最も重要でないビット部分)を有するバイト部分222を含むことができる。回路類202は、データワード220がメモリ210に書き込まれる前に受信されたとき、データワード220のパックされた表現224をアンパックして、最初のフォーマットまたはデータワード220のフォーマットに対応する最初の順序(バイト部分222の)にデータワード220を復元することができる。例えば、回路類202は、ビットマスク230を使用してデータワード220のそれぞれのバイト部分222の最初の位置を決定することができる。回路類202は、ビットマスク230を使用して、データワード220のバイト部分222がゼロでないバイト値を含むかまたはゼロバイト値を含むかを決定することができる。回路類202は、ビットマスク230のビット232の順序に基づいてデータワード220を最初のフォーマットにリードバック、アンパックまたは再構築することができる。
【0070】
ここで図2Cを参照すると、ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステム200の一実施形態が示されている。システム200は、読取りおよび書込み動作のために、アクセスするためのメモリ210を有する回路類202を含む。図2Cに示す実施形態では、メモリ210は、3つのスライス、第1のスライス204a、第2のスライス204bおよびビットマスクスライス204c、へと分割、区画化、または構成される。他の実施形態では、メモリ210は、3つより少ないスライスまたは4つ以上のスライス204を含むことができる。回路類202は、メモリ210のスライス204にアクセスしてデータワード220のバイト222を書き込むまたはデータワード220のバイト222を読み取ることができる。
【0071】
それぞれのスライス204は、信号を受信または送信するために、複数のポート260を含むことができる。例えば、スライス204は、データワード220の部分を受信する、書き込むおよび/または格納する、あるいは書込み動作を実施するために、第1のポート260aまたは書込みポートを含むことができる。スライス204は、データワード220のアドレスデータおよび/またはデータワード220のバイト部分222を受信するために、第2のポート260bまたはアドレスポートを含むことができる。スライス204は、データワード220の部分を読み出す、または読取り動作を実施する(例えば、メモリスライスのコンテンツまたはバイトを出力する)ために、第3のポート260cまたは読取りポートを含むことができる。いくつかの実施形態では、スライス204は、読取り動作のためにそれぞれのスライス204を有効にするために、第4のポート260dまたは読取り有効化ポートを含むことができる。いくつかの実施形態では、スライス204は、書込み動作のためにそれぞれのスライス204を有効にするために、第5のポート260eまたは書込み有効化ポートを含むことができる。
【0072】
回路202は、制御信号をスライス204に送信または提供してメモリ210の読取りまたは書込み動作を開始するために、複数の回路または信号要素を含むことができる。例えば、回路202は、それぞれのラッチ要素262に提供された入力に応答する読取りおよび書込み動作のためにスライス204を有効にするおよび無効にするために、複数のレジスタまたはラッチ要素262を含むことができる。回路202は、アドレス信号入力268、データワード220またはデータワード220の部分をメモリ210に書き込むための書込み入力270、およびデータワード220またはデータワードの部分をメモリ210から提供するための読取り出力272を含むことができる。アドレス信号入力268は、ビットマスクスライス204cのアドレスポート260b、少なくとも1つのラッチ262を介する第1のスライス204aのアドレスポート260b、および少なくとも1つのラッチ262を介する第2のスライス204bまたは複数のスライス204の第2のポート260b(例えば、アドレスポート)と結合することができる。
【0073】
書込み動作のために、回路202は、回路202の書込み入力270を介して書込み信号を受信することができる。いくつかの実施形態では、書込み信号は、書込み命令、1つまたは複数のスライス204に書き込まれることになるデータワード220および/または1つまたは複数のスライス204に書き込まれることになるデータワード220の部分を含むことができる。書込み入力270は、スパースカウンタ234aの入力およびパッキング要素264の入力と結合することができる。スパースカウンタ234aは、ゼロでないバイト値を有するデータワード220のバイト部分222の数を数えるまたは決定すること、およびカウンタ信号を生成して書込み動作のために1つまたは複数のスライスを有効にすることができる。例えば、スパースカウンタ234aは、回路202の書込み入力270からの書込み信号に応答して書込みカウンタ信号を生成することができる。スパースカウンタ234aは、ゼロでないバイト値を有するデータワード220のバイト部分222の番号の数に対応するカウンタ値を含むことができる。いくつかの実施形態では、スパースカウンタ234aのカウンタ値は、ゼロでないバイト値を有するデータワード220の各バイト部分222について、例えば、1の値だけ、増やすことができる。スパースカウンタ234aは、カウンタ値が書込み閾値より大きい(例えば、ゼロより大きい)ことに応答して書込みカウンタ信号を第1のスライス204aの第5のポート260e(例えば、書込み有効化ポート)に提供することができる。スパースカウンタ234aは、カウンタ値が第1のスライス204aのアクセスサイズ閾値より大きいことに応答して書込みカウンタ信号を第2のスライス204bの第5のポート260e(例えば、書込み有効化ポート)にまたは複数のスライス204に提供することができる。スパースカウンタ234aは、マスク信号をビットマスクスライス204cにおよび/またはデータワード220のビットマスク230値を示すパッキング要素264に提供することができる。
【0074】
パッキング要素264は、書き込まれることになるそれぞれのデータワード220はゼロでないバイト値を有する1つまたは複数のバイト部分を含むことを示すスパースカウンタ234aからのマスク信号、および回路書込み入力270からの書込み信号に応答して、パッキング信号を生成することができる。パッキング要素264は、それぞれのスライス204の書込み動作を開始または実施するために、パッキング信号および/または書込み信号をスライス204の第1のポート260a(例えば、書込みポート)に提供することができる。いくつかの実施形態では、パッキング信号は、パッキング信号を受信するそれぞれのスライス204に書き込まれることになるデータワード220の1つまたは複数のバイト部分222を含むことができる。
【0075】
読取り動作のために、ビットマスクスライス204cは、読取り信号を生成し、読取り信号を母集団カウンタ234bおよび/またはアンパッキング要素266に提供することができる。例えば、ビットマスクスライス204cの第3のポート260c(例えば、読取りポート)は、少なくとも1つのレジスタまたはラッチ要素262を介して母集団カウンタ234bの入力およびアンパッキング要素266と結合することができる。母集団カウンタ234bは、少なくとも1つのラッチ要素262を介するビットマスクスライス204cの第3のポート260c(例えば、読取りポート)からの読取り信号に応答して読取りカウンタ信号を生成することができる。母集団カウンタ234bは、ゼロでないバイト値を有するデータワード220のバイト部分222の番号の数に対応するカウンタ値を含むことができる。いくつかの実施形態では、母集団カウンタ234bのカウンタ値は、ゼロでないバイト値を有するデータワード220の各バイト部分222について、例えば、1の値だけ、増やすことができる。いくつかの実施形態では、母集団カウンタ234bのカウンタ値は、スパースカウンタ234aのカウンタ値と同じであり得る。母集団カウンタ234は、カウンタ値が読取り閾値より大きい(例えば、ゼロより大きい)ことに応答して、読取りカウンタ信号を第1のスライス204aの第4のポート260d(例えば、読取り有効化ポート)に提供することができる。
【0076】
母集団カウンタ234は、カウンタ値が第1のスライス204aのアクセスサイズ閾値より大きいことに応答して、読取りカウンタ信号を第2のスライス204bの第4のポート260d(例えば、読取り有効化ポート)にまたは複数のスライス204に提供することができる。読取りカウンタ信号は、読取り動作をそれぞれのスライス204が開始することを可能にすることができる。第1のスライス204aの第3のポート260c(例えば、読取りポート)は、データワード220のパックされた表現224または第1のスライス204aに格納されたデータワード220のパックされた表現24の部分をアンパッキング要素266に提供するために、アンパッキング要素266の入力と結合することができる。第2のスライス204bまたは複数のスライス204の第3のポート260c(例えば、読取りポート)は、第2のスライス204bまたは複数のスライス204に格納されたデータワード220のパックされた表現224の部分をアンパッキング要素266に提供するために、アンパッキング要素266の少なくとも1つの入力と結合することができる。アンパッキング要素266は、最初のフォーマットでまたはそれぞれのデータワード220がメモリ210に書き込まれる前のフォーマットでデータワード220を読み出すために、データワード220のパックされた表現224をアンパック、再構築または修正するように構成することができる。アンパッキング要素266の出力は、最初のフォーマットでまたはそれぞれのデータワード220がメモリ210に書き込まれる前のフォーマットでデータワード220を提供するために、回路202の読取り出力272と結合することができる。
【0077】
ここで図2Dを参照すると、第1のハイブリッドモード書込み動作が提供される。図2Dでは、書込み動作は、マルチプレクサ280を使用してデータワード220をメモリ210の複数のスライス204の第1のスライス204に書き込むことを含むことができる。マルチプレクサ280は、ビットマスク230、データワード220のパックされた表現224、データワード220、およびゼロでないバイト値を有するデータワード220のバイト部分222のうちの2つ以上の組み合わせなどの、しかしこれに限定されない、複数の入力を含むことができる。マルチプレクサ280は、複数の入力を受信し、データワード220のパックされた表現224(例えば、多重化されたパックされた表現)に対応するまたはそれを表す単一の出力を提供することができる。例えば、いくつかの実施形態では、マルチプレクサ280は、ビットマスク230またはビットマスク230のビット232を受信することができ、データワード220のパックされた表現224は、単一の出力、ビットマスク230を含む、それに対応する、またはそれを表す多重化されたパックされた表現224、およびデータワード220のパックされた表現224を生成することができる。回路類202は、データワード220の多重化されたパックされた表現224を複数のスライス204の第1のスライス204aに書き込むことができる。
【0078】
したがって、回路類202は、ビットマスク230を第1のスライス204aに書き込み、ビットマスク230の個々のまたは別個のスライスを確立しないことが可能である。
【0079】
いくつかの実施形態では、回路類202は、ビットマスク230を使用して、データワード220の母集団カウント234を決定することができる。回路類202は、母集団カウント234を複数のスライス204の第1のスライス204aのアクセスサイズ閾値252と比較することができる。母集団カウント234が、第1のスライス204aのアクセスサイズ閾値252以下である場合、回路類202は、第1のスライス204aの第1の側206の第1の位置または端で開始する第1のスライス204aにデータワード220の多重化されたパックされた表現224を書き込むことができる。母集団カウント234が第1のスライス204aのアクセスサイズ閾値252より大きい場合、回路類202は、第1のスライス204aの第1の側206の第1の位置または端で開始する第1のスライス204aにデータワード220の多重化されたパックされた表現224を書き込み、データワード220の残りのバイト部分222を複数のスライス204のうちの第2のスライス204bおよび/または他のスライス204に書き込むことができる。
【0080】
ここで図2Eを参照すると、第1のハイブリッドモード読取り動作が提供される。図2Eでは、読取り動作は、マルチプレクサ280を使用してデータワード220をアンパックおよび出力することを含むことができる。いくつかの実施形態では、回路類202は、データワード220がパックされたか否かを決定することができる。データワード220が、パックされた場合、回路類202は、データワード220のビットマスク230にアクセスして、ゼロでないバイト値を有するデータワード220内のバイト部分222を識別することができる。回路類202は、複数の入力をマルチプレクサ280に提供して、データワード220を最初のフォーマットにアンパックまたは再構築することができる。例えば、回路類202は、第1のスライス204aまたは複数のスライス204からのマルチプレクサへの入力としてデータワード220のパックされた表現224を提供することができる。
【0081】
回路類202は、アンパックされたデータワード220をマルチプレクサ280への入力として提供することができる。アンパックされたデータワード220は、データワード220のパックされた表現224が書き込まれた第2のスライス204bまたは異なるスライス204からアクセスすることができる。回路類202は、メモリ210に書き込まれたときにそれぞれのデータワード220がパックされたか否かの指示をマルチプレクサ280指示に提供することができる。マルチプレクサ280を使用する回路類202は、データワード220が受信されたときにまたはデータワード220がメモリ210に書き込まれる前にバイト部分222の最初の位置に対応するそれらそれぞれの位置にゼロでないバイト値を有するバイト部分222およびゼロバイト値を有するバイト部分222を含むようにデータワード220をアンパックまたは再構築することができる。データワード220のそれぞれのバイト部分222が、ビットマスク230によって示された位置にあるように、回路類202は、データワード220のパックされた表現224をアンパックすることができる。
【0082】
ここで図3A図3Bを参照すると、ニューラルネットワークアクセラレータのためのスパースデータを読み取るおよび書き込むための方法300が提供される。概要では、方法300は、複数のスライスを確立すること(302)、マスクにアクセスすること(304)、読取り動作か書込み動作かを決定すること(306)、データワードを修正すること(308)、バイト値を閾値と比較すること(310)、第1のスライスに書き込むこと(312)、第2のスライスまたは複数のスライスに書き込むこと(314)、バイト値を決定する(316)、バイト部分を読み取ること(318)、パックされた表現を修正すること(320)、およびデータワードを提供すること(322)を含むことができる。これらの動作のうちの1つまたは複数は、少なくとも1つのプロセッサおよび/または回路類によって実施することができる。
【0083】
動作302において、いくつかの実施形態では、複数のスライス204を確立することができる。いくつかの実施形態では、回路類202またはプロセッサは、データワード220のアクセスサイズ212を有するメモリ210の複数のスライス204を確立することができる。メモリ210は、2つ以上のスライス204を含むように分割または区画化することができる。例えば、第1のスライス204aを確立することができ、第2のスライス204bを確立することができる。いくつかの実施形態では、ビットマスクスライス204cを確立することができる。ビットマスクスライス204cは、第1のスライス204aおよび第2のスライス204bと比較してメモリ210の別個の部分またはセグメントであり得る。いくつかの実施形態では、ビットマスクスライス204cは、第1のスライス204aまたは第2のスライス204bの部分であるまたはそれと含まれることができる。メモリのスライス204の数は、変化することができる。いくつかの実施形態では、メモリ210は、3つのスライス204を含むことができる。いくつかの実施形態では、メモリ210は、4つ以上のスライス204を含むことができる。
【0084】
いくつかの実施形態では、複数のスライス204のうちの第1のスライス204は、メモリ210においてデータワード220の第1の側206、第1の部分または第1のセグメントを格納するまたは提供するように構成することができる。第1の側206は、データワード220よりも小さいサイズを有することができる。例えば、第1の側206は、データワード220のビットの合計サイズまたは長さより小さいサイズを有することができる。第1の側206は、データワード220の1つまたは複数のバイト222に対応することができる。一実施形態において、第1の側206は、データワード220を形成するバイト222の総数よりもデータワード220の少ないバイト222を含むことができる。
【0085】
いくつかの実施形態では、スライス204は、同じサイズ208または容量をそれぞれ有して、確立することができる。いくつかの実施形態では、1つまたは複数のスライス204は、1つまたは複数の他のスライス240と比較して異なるサイズ208または容量を有して、確立することができる。例えば、第1のスライス204aおよび第2のスライス204bは、第1のサイズ208を有して、形成することができ、ビットマスクスライス204cは、第1のサイズ208とは異なる第2のサイズ208を有して、形成することができる。第1のスライス204aは、第1のサイズを有して、形成することができ、第2のスライス204bは、第1のサイズ208とは異なる第2のサイズ208を有して、形成することができ、ビットマスクスライス204cは、第1のサイズ208および第2のサイズ208とは異なる第3のサイズ208を有して、形成することができる。
【0086】
いくつかの実施形態では、スライス204のサイズ208は、回路類202のエネルギー消費値または電力使用量に部分的に基づいて決定することができる。例えば、1つまたは複数のスライス204のサイズ208は、1つもしくは複数のデータワード220を書き込むおよび/または1つもしくは複数のスライス204を使用する1つもしくは複数のデータワード220を読み取る際にアクセス当りの最低エネルギー値(例えば、ピコジュール/バイト(pJ/バイト))あるいは回路類202の電力使用量の対応する/期待される削減を実現するサイズ208に部分的に基づいて、決定することができる。アクセス当りのエネルギー値は、データワード220を読み取るまたはメモリ210のスライス204に書き込むためのジュール/バイト(例えば、pJ/バイト)でのエネルギー値に対応することができる。アクセス当りのエネルギー値は、データワード220を読み取るまたはメモリ210のスライス204に書き込むための回路類202の電力使用量の削減を決定するまたは示すために使用することができる。
【0087】
回路類202は、データワード220の数、メモリ210のアクセスサイズ212もしくは容量および/または各データワード220のサイズに部分的に基づいてメモリ210のアクセス当りの最低エネルギー値を提供する、スライス204のサイズ208、またはそれらの範囲もしくはサイズ208を決定することができる。いくつかの実施形態では、回路類202は、メモリ210のアクセス当りの最低エネルギー値を提供するおよびそれぞれのサイズ208を有するスライス204を確立する、スライス204のサイズ208、または対応する範囲もしくはサイズ208を選択することができる。いくつかの実施形態では、回路類202は、電力使用量値の目標または所定の削減に基づいて、スライス204のサイズ208、またはそれらの範囲もしくはサイズ208を選択し、電力使用量値の目標または所定の削減を実現するそれぞれのサイズ208を有するスライス204を確立することができる。
【0088】
ビットマスクスライス204cは、メモリ210の他のスライス204とは異なるサイズ208を有して、確立することができる。例えば、ビットマスクスライス204cは、メモリ210の第1のスライス204aおよび第2のスライス204bとは異なるサイズ208を有して、確立することができる。ビットマスクスライス204cのビット232のサイズ208または数は、データワード220のバイト222の数に少なくとも部分的に基づいて、選択することができる。いくつかの実施形態では、ビットマスクスライス204cのビット232のサイズ208または数は、データワード220のバイト222の数と等しくてもよい。64ビットのデータワード220を有する1つの実施形態で、ビットマスクスライス204cのサイズ208は、8ビットであり得る。ビットマスク230は、ビットマスクスライス204cにおいて格納するまたは保持することができる。ビットマスク230は、ビットマスクスライス204cのサイズに等しいまたは対応するいくつかのビット232を含むことができる。ビットマスク230の各ビット232の各値は、データワード220の少なくとも1つのバイト値222に対応するまたはそれを表すことができる。例えば、ビットマスク230の第1のビット232の第1の位置または第1の値は、データワード220の第1のバイト222に対応するまたはそれを表すことができる。いくつかの実施形態では、ビットマスク230の各ビット232の値(例えば、1、0)は、データワードの対応するバイト222の値(例えば、ゼロでないバイト、ゼロバイト)を示すまたは表すことができる。例えば、ビットマスク230のビット232のゼロでない値(例えば、1)は、データワードの対応するバイト222のゼロでないバイト値を示すまたは表すことができ、ビットマスク230のビット232のゼロ値(例えば、0)は、データワードの対応するバイト222のゼロバイト値を示すまたは表すことができる。ビットマスク230は、1バイトベースまたは2バイトベースでゼロでないバイト値の位置を識別することができる。例えば、いくつかの実施形態では、ビットマスク230のそれぞれのビット232は、データワード220の単一のバイト222を表すことができる。いくつかの実施形態では、ビットマスク230のそれぞれのビット232は、データワード220の2つのバイト222を表すことができる。
【0089】
ここで動作304を参照すると、いくつかの実施形態で、マスク230は、アクセスすることができる。いくつかの実施形態で、回路類202は、ゼロでない値を有するデータワード220内のバイト位置222またはバイト部分222を識別するマスク230(例えば、ビットマスク)にアクセスすることができる。回路類202は、複数のビット232を有するビットマスク230にアクセスすることができる。ビットマスク230内のそれぞれのビット232は、データワード220の少なくとも1つのバイト位置222に対応するまたはそれを表すことができる。例えば、ビットマスク230の第1のビット232は、データワード220の第1のバイト位置222または第1のバイト222を表すことができ、ビットマスク230の第2のビット232は、データワード220の第2のバイト位置222または第2のバイト222を表すことができ、ビットマスク230の第Nのビット232は、データワード220の第Nのバイト位置222または第Nのバイト222を表すことができる。いくつかの実施形態では、ビットマスク230内のそれぞれのビット232は、データワード220の対応するバイト位置におけるバイト222の値を表すまたは示すゼロ値(例えば、0)またはゼロでない値(例えば、1)を有することができる。
【0090】
例えば、ビットマスク230の第1のビット232の値は、データワード220の第1のバイト位置222におけるバイト222の値を示すことができ、ビットマスク230の第2のビット232の値は、データワード220の第2のバイト位置222におけるバイトの値を示すことができ、ビットマスク230の第Nのビット232の値は、データワード220の第Nのバイト位置222におけるバイト222の値を示すことができる。回路類202は、ビットマスク230にアクセスし、ビットマスク230の対応するビット232の値に基づいてゼロでない値を有するデータワード220のバイト位置222を決定することができる。回路類202は、ビットマスク230にアクセスし、ビットマスク230の対応するビット232の値に基づいてゼロ値を有するデータワード220のバイト位置222を決定することができる。
【0091】
ここで動作306を参照すると、いくつかの実施形態では、命令または要求が書込み動作のためかまたは読取り動作のためかに関する決定が行われ得る。回路類202は、命令または要求が書込み動作のためかまたは読取り動作のためかを決定することができる。書込み動作のために、方法300は、動作308に進むことができる。読取り動作のために、方法300は動作318に進むことができる。
【0092】
ここで動作308を参照すると、いくつかの実施形態では、データワード220を修正することができる。いくつかの実施形態では、回路類202は、第1の側206の端で開始する格納されたゼロでないバイト値、およびデータワード220の残余内に格納された任意のゼロバイト値を有するようにデータワード220を修正することができる。ゼロでないバイト値を有するバイト部分222が、第1の側206の第1の端におけるバイト位置に移動または再配置され、ゼロバイト値を有するバイト部分222が、ゼロでないバイト値を有する最後のバイト部分222の後に移動または再配置されるように、回路類202は、データワード220を修正することができる。例えば、ゼロでないバイト値を有するバイト部分222がゼロバイト値を有するバイト部分222の前に置かれるように、回路類は、ゼロでないバイト値を有する最後のバイト部分222の後の位置にゼロバイト値を有するバイト部分222をデータワード220内のそれらの最初の位置(例えば、受信された位置または順序)から移動または再配置することができる。
【0093】
いくつかの実施形態では、回路類202は、パッキングアルゴリズムを実行してデータワード220をパックまたは修正することができる。例えば、パッキングアルゴリズムは、ファンイン/アウトレートを含むことができる。
【0094】
ファンイン/アウトレートは、メモリ210またはメモリ210の少なくとも1つのスライス204内のメモリ位置への接続の数に対応するまたはそれと同等であり得る。回路類202は、パッキングアルゴリズムを実行してデータワード220のバイト部分222をメモリ210のスライス204内の1つまたは複数のメモリ位置にマップまたはパックすることができる。いくつかの実施形態では、パッキングアルゴリズムは、N×(N-l)/2=1/2 N^2-N/2のルーティング複雑性を有することができる。いくつかの実施形態では、第1のバイト部分222は、N対1マッピングを使用しなくてもよい。例えば、第1のN/2バイト値がゼロであるとき、回路類は、残りの部分をスライス204の第1の側の第1の端にコピーまたはマップすることができる。いくつかの実施形態では、パッキングアルゴリズムは、N/2×N/2+N/2×(N/2-l)/2=3/8 N^2-N/4のルーティング複雑性を有することができる。ファンイン/アウトレートは、N/2と同等であり得る。いくつかの実施形態では、回路類202は、独立してN/2バイト部分222をパックし、それぞれのバイト部分222をともに連結することができる。例えば、そのような一実施形態で、パッキングアルゴリズムは、N/2×N/2+N/2×(N/2-l)/2=3/8 N^2-N/4のルーティング複雑性を有することができる。ファンイン/アウトレートは、N/2と同等であり得る。
【0095】
いくつかの実施形態では、回路類202は、互いに関してゼロでないバイト値を有するバイト部分222の順序を維持することができる。例えば、ゼロでないバイト値を有するバイト部分222が、最初に受信されたものとゼロでないバイト値を有する他のバイト部分222に関して同じ順序であるように、回路類202は、ゼロ値を有するバイト部分222を移動または再配置し、ゼロでない値を有するバイト部分222をゼロ値を有する1つまたは複数のバイト部分222によって前に占められていた位置に上げることができる。
【0096】
いくつかの実施形態では、回路類202は、互いに関してゼロバイト値を有するバイト部分222の順序を維持または変更することができる。例えば、ゼロバイト値を有するバイト部分222が、最初に受信されたものとゼロバイト値を有する他のバイト部分222に関して同じ順番であるように、回路類202は、ゼロ値を有するバイト部分222を移動または再配置することができる。例えば、1つの実施形態において、データワード220は、ゼロでないバイト値を有する第1のバイト部分222、ゼロバイト値を有する第2のバイト部分222、ゼロバイト値を有する第3のバイト部分222、およびゼロでないバイト値を有する第4のバイト部分222を含むことができる。回路類202は、データワード220を修正して、ゼロでないバイト値を有する第4のバイト部分222の後にゼロバイト値を有する第2のバイト部分222を移動することができる。回路類202は、データワード220を修正して、修正されたデータワード220内のゼロでないバイト値を有する第4のバイト部分222の後に位置する第2のバイト部分222の後にゼロバイト値を有する第3のバイト部分222を移動することができる。したがって、第1のおよび第4のバイト部分222は、最初のデータワード220においてそれらが位置した(例えば、第1のバイト部分は第4のバイト部分の前である)ように、修正されたデータワード220において互いに関する順序を維持する。第2のおよび第3のバイト部分222は、最初のデータワード220においてそれらが位置した(例えば、第2のバイト部分は第3のバイト部分の前である)ように、修正されたデータワード220において互いに関する順序を維持することができる。いくつかの実施形態では、これらのバイト部分222は、同じコンテンツおよび値の全てなので、ゼロバイト値を有するバイト部分222の順序は、問題にならない。したがって、回路類22は、パッキング中に順序を移動するまたは変更することができる(例えば、バイトシフトの全体量を最小限に抑えるために)。
【0097】
ここで動作310を参照すると、閾値と非バイト値の比較を実施することができる。いくつかの実施形態では、回路類202は、第1の側206の端で開始するいくつかのゼロでないバイト値が第1のスライス204の第1のアクセスサイズ208以下であるかどうかを決定することができる。回路類202は、ビットマスク230の母集団カウント234を決定することができる。母集団カウント234は、データワード220のゼロでないバイト値の数を表すまたはそれに対応する値を含むことができる。例えば、ゼロでないバイト値を有する3つのバイト部分222を有するデータワード220について、データワード220の母集団カウント234は、3であり得る。ゼロでないバイト値を有する5つのバイト部分222を有するデータワード220について、データワード220の母集団カウント234は、5であり得る。
【0098】
回路類202は、母集団カウント234を1つまたは複数の閾値と比較して、データワード220を書き込むかどうかおよびどのスライス204またはスライス204にデータワード220を書き込むかを決定することができる。いくつかの実施形態では、回路類202は、母集団カウント234を書込み閾値と比較することができる。いくつかの実施形態では、書込み閾値は、データワード220を書き込むかまたはデータワード220をスキップする、無視するもしくは他の方法で書き込まないかを示すことができる。例えば、データワード220が、ゼロの母集団カウント234(書込み閾値を超え損ねた)を有するまたはゼロでないバイト値を含まない場合、回路類202は、データワード220をスキップする、無視する、または他の方法で書き込まないことが可能である。1つの実施形態において、書込み閾値は、ゼロであり得る。
【0099】
データワード220の母集団カウント234が、書込み閾値より大きい場合、回路類は、母集団カウント234を少なくとも1つのスライス204のアクセスサイズ閾値と比較して、どのスライス204またはスライス204にデータワード220を書き込むかを決定することができる。アクセスサイズ閾値は、1つまたは複数のスライス204のアクセスサイズ208であり得るまたはそれを含むことができる。いくつかの実施形態では、アクセスサイズ閾値は、第1のスライス204のアクセスサイズ208であり得るまたはそれを含むことができる。いくつかの実施形態では、アクセスサイズ閾値は、複数のスライスの最も小さいスライス204のアクセスサイズ208であり得るまたはそれを含むことができる。データワード220の母集団カウント234が、第1のスライス204の第1のアクセスサイズ閾値以下である場合、方法300は、動作312に進むことができる。データワード220の母集団カウント234が、第1のスライス204の第1のアクセスサイズ閾値以下である場合、方法300は、動作314に進むことができる。
【0100】
ここで動作312を参照すると、1つまたは複数の実施形態で、修正されたデータワード220は、第1のスライス204に書き込むことができる。いくつかの実施形態では、回路類202は、少なくとも第1のスライス204を介してメモリ210に修正されたデータワード220を、決定または比較に応答して、書き込むことができる。回路類は、修正されたデータワード220の母集団カウント234は第1のスライス204のアクセスサイズ208以下であると決定することができる。回路類は、修正されたデータワード220のいくつかのゼロでないバイト値は第1のスライス204のアクセスサイズ208以下であると決定することができる。回路類202は、ゼロでないバイト値を有する修正されたデータワード220のバイト部分222を第1のスライス204に書き込むことができ、ゼロバイト値を有する修正されたデータワード220のバイト部分222をスキップする、無視する、またはメモリ210に書き込まないことが可能である。回路類202は、第1のスライス204のみを介して修正されたデータワード220の第1の側に書き込むことができる。例えば、修正されたデータワード220のいくつかのゼロでないバイト値が、第1のスライス204のアクセスサイズ208以下である場合、回路類は、ゼロでないバイト値を有するバイト部分222の全てを第1のスライス204に書き込むことができ、複数のスライス204の任意の他のスライス204にアクセスしないまたは書き込まないことが可能である。
【0101】
いくつかの実施形態では、回路類202は、修正されたデータワード220を第1のスライス204に書き込むときに互いに関してゼロでないバイト値を有するバイト部分222の順序を維持することができる。例えば、ゼロでない値を有するバイト部分222が、最初に受信されたのとゼロでないバイト値を有する他のバイト部分222に関して同じ順序にあるように、回路類202は、修正されたデータワード220を第1のスライスに書き込むことができる。例えば、1つの実施形態において、回路類202は、ゼロでないバイト値を有する第1のバイト部分222を第1のスライス204の第1の側206の第1の端または第1の位置に書き込み、修正されたデータワード220の第1のバイト部分222の後の第1のスライス204の第1の側206の第2の位置にゼロでないバイト値を有する第2のバイト部分222を書き込むことができる。
【0102】
ここで動作314を参照すると、いくつかの実施形態では、修正されたデータワード220は、第1のスライス204および第2のスライス204に書き込むことができる。いくつかの実施形態では、回路類202は、メモリ210の複数のスライス204を介してメモリ210に修正されたデータワード220を、決定または比較に応答して、書き込むことができる。回路類は、修正されたデータワード220の母集団カウント234は第1のスライス204のアクセスサイズ208より大きいと決定することができる。回路類は、修正されたデータワード220のいくつかのゼロでないバイト値は第1のスライス204のアクセスサイズ208より大きいと決定することができる。回路類202は、それぞれのスライス204のアクセスサイズ2308と比較したゼロでないバイト値を有する修正されたデータワード220のバイト部分222の数に部分的に基づいて、ゼロでないバイト値を有する修正されたデータワード220のバイト部分222を第1のスライス204および第2のスライス204に書き込むことまたはゼロでないバイト値を有する修正されたデータワード220のバイト部分222を3つ以上のスライス204に書き込むことができる。回路類202は、第1のスライス204を介する修正されたデータワード220の第1の側のバイト222またはバイト部分222および第2のスライス204を介する残りのゼロでないバイト222またはゼロでないバイト値を有するバイト部分222を書き込むことができる。
【0103】
回路類202は、ゼロでないバイト値を有するそれぞれのバイト部分222が互いに関して最初のデータワード220内に配置された順序でスライス204にゼロでないバイト値を有するバイト部分222を書き込むことができる。例えば、回路類202は、修正されたデータワード220を第1のスライス204および第2のスライス204または複数のスライス204に書き込むときに互いに関してゼロでないバイト値を有するバイト部分222の順序を維持することができる。回路類202は、ゼロでない値を有するバイト部分222が、最初に受信されたのとゼロでないバイト値を有する他のバイト部分222に関して同じ順序にあるように、修正されたデータワード220を第1のスライスに書き込むことができ、第1のスライス204がいっぱいになったまたは容量に達した後は、ゼロでない値を有する残りのバイト部分222を第2のスライス204および/または追加のスライス204に書き込むことができる。
【0104】
例えば、1つの実施形態において、第1のスライス204は、10のアクセスサイズ208を有することができ、修正されたデータワード220は、ゼロでないデータ値を有する15バイト部分222を含むことができる。回路類202は、第1のスライス204の第1の側206の第1の端または第1の位置に書き込まれたゼロでないバイト値を有する第1のバイト部分222とともに第1のスライス204にゼロでないバイト値を有する第1の10バイト部分222を書き込むことができる。回路類202は、第2のスライス204の第1の側206の第1の端または第1の位置に書き込まれたゼロでないバイト値を有する第11のバイト部分222とともに第2のスライス204にゼロでないバイト値を有する残りの5つのバイト部分222を書き込むことができる。したがって、修正されたデータワード220のゼロでないバイト値を有する15バイト部分222は、同じ順序で維持することができ、メモリ210の複数のスライス204にわたって書き込むことができる。
【0105】
ここで動作316を参照すると、1つまたは複数の実施形態で、ゼロでないバイト値の数を決定することができる。いくつかの実施形態では、回路類は、データワード220のいくつかのゼロでないバイト値は第1のスライス204の第1のアクセスサイズ208以下であると、マスク230から、決定することができる。回路類202は、読取り要求または読取り命令が少なくとも1つのデータワード220について受信されたと決定することができる。回路類202は、それぞれのデータワード220のビットマスク230を使用してゼロでないバイト値の数を決定することができる。回路類202は、データワード220の母集団カウント234またはデータワード220のいくつかのゼロでないバイト値は第1のスライス204のアクセスサイズ208以下であると決定することができる。データワード220のいくつかのゼロでないバイト値は、どの1つまたは複数のスライス204にデータワード220が格納されているかおよびデータワード220の異なるバイト部分222がいくつのスライス204にわたって格納されているかを示すことができる。例えば、データワード220のいくつかのゼロでないバイト値が、第1のスライス204のアクセスサイズ208以下である場合、回路類は、ゼロでないバイト値を有するデータワード220のそれぞれのまたは全てのバイト位置222は第1のスライス204に格納されていると決定することができる。データワード220のいくつかのゼロでないバイト値が、第1のスライス204のアクセスサイズ208より大きい場合、回路類は、ゼロでないバイト値を有するデータワード220のそれぞれのまたは全てのバイト位置222は複数のスライス204(例えば、第1のスライス204および第2のスライス204)に格納されていると決定することができる。
【0106】
ここで動作318を参照すると、いくつかの実施形態では、データワード220を読み取ることができる。いくつかの実施形態では、回路類202は、第1のスライス204を介してメモリ210に格納されたデータワード220のパックされた表現224を、決定に応答して、読み取ることができる。
【0107】
パックされた表現224は、データワード220の第1の側206の端で開始する格納されたゼロでないバイト値およびデータワード220の残余内に格納された任意のゼロバイト値を含むことができる。いくつかの実施形態では、パックされた表現224は、修正されたデータワード220に対応することができる。
【0108】
回路類202は、第1のスライス204の第1の側206の第1の端または第1の位置において読取り動作を開始することができる。回路類202は、バイト部分222が第1のスライス204にまたはメモリ210の複数のスライス204に格納された順序でデータワード220のバイト部分222を読み取ることができる。例えば、回路類202は、最初に第1のスライス204の第1の側206の第1の位置に書き込まれたデータワード220の第1のバイト部分222を読み取ることができ、次に第1のスライス204の第1の側206の第2の位置に書き込まれたデータワード220の第2のバイト部分222を読み取ることができる。いくつかの実施形態では、回路類202は、データワード220のバイト部分222が1つまたは複数のスライス204に書き込まれた順序に基づいてゼロバイト値を有するバイト部分222を読み取る前にゼロでないバイト値を有するバイト部分222を読み取ることができる。いくつかの実施形態では、回路類202は、ゼロバイト値を有するバイト部分222を格納する、読み取るまたはそれにアクセスする必要はなく、アンパッキングプロセスにおいてビットマスクによって示された位置においてゼロバイト値を有するバイト部分222を代わりに挿入する。
【0109】
データワード220のいくつかのゼロでないバイト値が第1のスライス204のアクセスサイズ208以下である、いくつかの実施形態では、回路類202は、第1のスライス204のみからデータワード220のパックされた表現224を読み取ることができる。例えば、データワード220のいくつかのゼロでないバイト値が、第1のスライス204のアクセスサイズ208以下であるとき、ゼロでないバイト値を有するバイト部分222の全てを第1のスライス204に書き込むことができる。回路類202は、第1のスライス204にアクセスしてデータワード220のパックされた表現224を読み取ることができる。データワード220のいくつかのゼロでないバイト値が第1のスライス204のアクセスサイズ208より大きい、いくつかの実施形態では、回路類202は、バイト部分222が複数のスライス204に書き込まれた順序で、データワード220のパックされた表現224のバイト部分222を読み取ることができる。例えば、回路類202は、第1のスライス204を介するデータワード220の第1の側または第1のバイト部分222と第1のスライス204の残りの部分または側を介するおよび複数のスライス204のうちの第2のスライス204を介する任意の残りのゼロでないバイトまたはゼロでないバイト値を有する残りのバイト部分222とを読み取ることができる。いくつかの実施形態では、回路類202は、最初にまたは第2のスライス204に書き込まれたバイト部分222を読み取る前に第1のスライス204に書き込まれたバイト部分222を読み取ることができる。
【0110】
ここで動作320を参照すると、データワード220のパックされた表現224を修正することができる。いくつかの実施形態では、回路類202は、データワード220が受信されたときにまたはメモリ210に書き込まれる前に、データワード220のパックされた表現224を修正してデータワードのバイト部分222の順序に対応するバイト部分222の最初の順序を復元することができる。回路類202は、データワード220のパックされた表現224を修正して、最初のフォーマットまたはデータワード220が受信されたときもしくはメモリ210に書き込まれる前に対応するフォーマットにデータワード220を復元することができる。例えば、回路類202は、ビットマスク230を使用してデータワード220のゼロでないバイト値の数およびデータワード220のゼロバイト値の数を決定することができる。回路類202は、ビットマスク230の個々のビット232を使用してデータワード220のバイト部分222の構成または順序を決定することができる。ビットマスク230の各ビット232は、データワード220の少なくとも1つのバイト部分222を表すことができる。ビットマスク230を使用する、回路類202は、データワード220の最初のフォーマットにおけるゼロでないバイト値を有するバイト部分222の最初の位置付けを決定することができる。ビットマスク230を使用する、回路類202は、データワード220の最初のフォーマットにおけるゼロバイト値を有するバイト部分222の最初の位置付けを決定することができる。ビットマスク230を使用する、回路類202は、データワード220の最初のフォーマットにおけるゼロでないバイト値を有する1つまたは複数のバイト部分222が、それらの間にゼロバイト値を有する1つまたは複数のバイト部分222含んだかどうかを決定することができる。
【0111】
ゼロでないバイト値を有するバイト部分222が、データワード220の最初のフォーマットにおける最初の位置に移動または再配置されるように、回路類202は、データワード220のパックされた表現224を修正することができる。ビットマスク230を使用する、回路類202は、データワード220の最初のフォーマットにおけるゼロでないバイト値を有する1つまたは複数のバイト部分222がそれらの間にゼロバイト値を有する1つまたは複数のバイト部分222を含んだかどうかを決定することができる。回路類202は、ゼロバイト値を有するバイト部分222をゼロバイト値を有する1つまたは複数のバイト部分222を含んだ最初のデータワード220の位置に挿入、移動または再配置することができる。データワード220のパックされた表現224は、最初のデータワード220を再構築するまたは再生成するために、修正することができる。
【0112】
ここで動作322を参照すると、いくつかの実施形態では、データワード220のパックされた表現224を提供することができる。いくつかの実施形態では、回路類202は、マスク230によって示された位置においてゼロでないバイト値およびゼロバイト値を有するデータワード220を、パックされた表現224から、提供することができる。回路類202は、それぞれのデータワード220が受信されたときのような最初のフォーマットでまたはデータワード220がパックされるおよび/またはデータメモリ210に書き込まれるより前のデータワード220のフォーマットに対応するフォーマットでデータワード220を提供することができる。いくつかの実施形態では、回路類202は、図1Aの出力112などの、しかしこれに限定されない、出力データとしてデータワード220を提供することができる。
【0113】
いくつかの例示的な実現例について記載してきたが、上記は例示であって限定ではなく、例として提示されていることが明白である。特に、本明細書に提示する例の多くには、方法行為またはシステム要素の特定の組み合わせが関与するが、それらの行為および要素は、同じ目的を遂行するために他の形で組み合わせることができる。1つの実現例に関連して考察される行為、要素、および特徴は、他の1つまたは複数の実現例における類似の役割から除外されないものとする。
【0114】
本明細書に開示する実施形態と関連して記載される、様々なプロセス、動作、例示の論理、論理ブロック、モジュール、および回路を実現するのに使用される、ハードウェアおよびデータ処理構成要素は、汎用シングルもしくはマルチチッププロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のプログラマブル論理デバイス、離散的ゲートもしくはトランジスタ論理、離散的ハードウェア構成要素、または本明細書に記載の機能を実施するように設計された上記のものの任意の組み合わせを用いて、実現または実施されてもよい。汎用プロセッサは、マイクロプロセッサ、または任意の従来のプロセッサ、コントローラ、マイクロコントローラ、もしくは状態機械であってもよい。
【0115】
プロセッサはまた、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアと連動した1つもしくは複数のマイクロプロセッサ、または他の任意のかかる構成など、コンピューティングデバイスの組み合わせとして実現されてもよい。いくつかの実施形態では、特定のプロセスおよび方法は、所与の機能に特異的な回路類によって実施されてもよい。メモリ(例えば、メモリ、メモリユニット、記憶デバイスなど)は、本開示に記載する様々なプロセス、層、およびモジュールを完成させるかもしくは容易にする、データおよび/またはコンピュータコードを格納する、1つまたは複数のデバイス(例えば、RAM、ROM、フラッシュメモリ、ハードディスク記憶装置など)を含んでもよい。メモリは、揮発性メモリもしくは不揮発性メモリであるかまたはそれらを含んでもよく、本開示に記載する様々なアクティビティおよび情報構造をサポートする、データベース構成要素、オブジェクトコード構成要素、スクリプト構成要素、または他の任意のタイプの情報構造を含んでもよい。例示的実施形態によれば、メモリは、処理回路を介してプロセッサに通信可能に接続され、本明細書に記載の1つもしくは複数のプロセスを(例えば、処理回路および/またはプロセッサによって)実行するためのコンピュータコードを含む。
【0116】
本開示は、様々な動作を遂行するための任意の機械可読媒体上における、方法、システム、およびプログラム製品を想到する。本開示の実施形態は、既存のコンピュータプロセッサを使用して、またはこの目的もしくは別の目的のために組み込まれる、適切なシステムのための専用コンピュータプロセッサによって、または配線接続システムによって、実現されてもよい。本開示の範囲内の実施形態は、格納された機械実行可能命令もしくはデータ構造を保持するかまたは有する、機械可読媒体を備えるプログラム製品を含む。かかる機械可読媒体は、汎用もしくは専用コンピュータ、またはプロセッサを有する他の機械によってアクセスすることができる、任意の利用可能な媒体であることができる。例として、かかる機械可読媒体は、RAM、ROM、EPROM、EEPROM、または他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、あるいは機械実行可能命令またはデータ構造の形態で所望のプログラムコードを保持または格納するのに使用することができ、汎用もしくは専用コンピュータまたはプロセッサを有する他の機械でアクセスすることができる、他の任意の媒体を含むことができる。上記のものの組み合わせはまた、機械可読媒体の範囲に含まれる。機械実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理機械に、特定の機能または機能群を実施させる、命令およびデータを含む。
【0117】
本明細書で使用する用語および専門用語は、説明のためのものであって限定とみなされるべきではない。本明細書における、「~を含む」、「~を備える」、「~を有する」、「~を含有する」、「~を伴う」、「~によって特徴付けられる」、「~を特徴とする」およびそれらの変形の使用は、該用語とともに列挙される項目、それらの等価物、および追加の項目、ならびに排他的に該用語とともに列挙される項目から成る代替実現例を網羅することを意味する。一実現例では、本明細書に記載するシステムおよび方法は、記載する要素、行為、または構成要素のうちの1つ、2つ以上の各組み合わせ、または全てから成る。
【0118】
単数形で言及される本明細書のシステムおよび方法の実現例または要素または行為に対する任意の言及は、複数のこれらの要素を含む実現例も包含することができ、本明細書の任意の実現例または要素または行為に対する複数形での任意の言及は、単一の要素のみを含む実現例も包含することができる。単数形または複数形での言及は、本明細書に開示されるシステムもしくは方法、それらの構成要素、行為、または要素を、単数または複数の構成に限定しようとするものではない。任意の情報、行為、または要素に基づいた任意の行為または要素に対する言及は、行為または要素が、任意の情報、行為、または要素に少なくとも部分的に基づく場合の実現例を含むことができる。
【0119】
本明細書に開示する任意の実現例は、他の任意の実現例または実施形態と組み合わせることができ、「ある実現例」、「いくつかの実現例」、「一実現例」などに対する言及は、必ずしも相互に排他的ではなく、実現例と関連して記載する特定の特徴、構造、または特性が、少なくとも1つの実現例または実施形態に含まれ得ることを示すものとする。かかる用語は、本明細書で使用するとき、必ずしも全てが同じ実現例を指すものではない。任意の実現例は、本明細書に開示する態様および実現例と一致する任意の手法で、他の任意の実現例と包括的または排他的に組み合わせることができる。
【0120】
図面、詳細な説明、または任意のクレームにおける技術的特徴に参照符号が付される場合、参照符号は、図面、詳細な説明、およびクレームの了解度を向上するために含まれるものである。したがって、参照符号が存在してもしなくても、任意のクレーム要素の範囲に対する限定的影響を何ら有さない。
【0121】
本明細書に記載するシステムおよび方法は、それらの特性から逸脱することなく、他の特定の形態で具体化されてもよい。「約」、「およそ」、「実質的に」、または他の程度を表す用語に対する言及は、別段の明示がない限り、所与の測定値、単位、または範囲から±10%の変動を含む。結合された要素は、直接または介在要素を用いて、互いに電気的、機械的、または物理的に結合することができる。本明細書に記載するシステムおよび方法の範囲は、したがって、上述の記載ではなく添付のクレームによって示され、クレームの等価物の意味および範囲内にある変更は包含される。
【0122】
「結合された」という用語およびその変形は、2つの部材を直接または間接的に互いに接合することを含む。かかる接合は、静的(例えば、恒久的もしくは固定)または可動(例えば、除去可能もしくは解放可能)であってもよい。かかる接合は、互いに直接結合され、または互いに対して結合された2つの部材によって、別個の介在部材および互いに結合された任意の追加の中間部材を使用して互いに結合された2つの部材によって、あるいは2つの部材の一方とともに単一の単位体として一体的に形成された介在部材を使用して互いに結合された2つの部材によって、達成されてもよい。「結合された」またはその変形が、追加の用語によって修正された場合(例えば、直接結合された)、上述の「結合された」の包括的定義は、追加の用語の平易な言葉の意味によって修正され(例えば、「直接結合された」は、任意の別個の介在部材を有さない2つの部材の接合を意味する)、それによって上述の「結合された」の包括的定義よりも狭い定義になる。かかる結合は機械的、電気的、または流体的であってもよい。
【0123】
「または」に対する言及は包括的と解釈することができるので、「または」を使用して記載されるいずれの用語も、記載される用語の単一、2つ以上、および全てのいずれかを示すことができる。「『A』および『B』のうち少なくとも1つ」は、「A」のみ、「B」のみ、ならびに「A」および「B」の両方を含むことができる。「備える」または他のオープンな用語と併せて使用されるかかる言及は、追加の項目を含むことができる。
【0124】
様々な要素のサイズ、寸法、構造、形状、および比率、パラメータの値、取付け構造、材料使用、色、向きにおける変形例など、記載される要素および行為の修正は、本明細書に開示する主題の教示および利点から実質的に逸脱することなく行うことができる。例えば、一体的に形成されるものとして示される要素は、複数の部分または要素で構築することができ、要素の位置を反転させるかまたは別の形で変動させることができ、離散的要素または位置の性質もしくは数を改変または変更することができる。他の置換、修正、変更、および省略も、本開示の範囲から逸脱することなく、開示の要素および動作の設計、動作条件、および配置に対して行うことができる。
【0125】
本明細書における要素の位置に対する言及(例えば、「上側」、「下側」、「上方」、「下方」)は単に、図面における様々な要素の向きを説明するために使用されるものである。様々な要素の向きは、他の例示的実施形態によって異なってもよく、かかる変形は本開示に包含されるものとする。
図1A
図1B
図1C
図1D
図2A
図2B
図2C
図2D
図2E
図3A
図3B
【国際調査報告】