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

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

▶ 北京地平▲線▼机器人技▲術▼研▲発▼有限公司の特許一覧

特許7008983テンソルデータにアクセスするための方法および装置
<>
  • 特許-テンソルデータにアクセスするための方法および装置 図1
  • 特許-テンソルデータにアクセスするための方法および装置 図2
  • 特許-テンソルデータにアクセスするための方法および装置 図3
  • 特許-テンソルデータにアクセスするための方法および装置 図4
  • 特許-テンソルデータにアクセスするための方法および装置 図5
  • 特許-テンソルデータにアクセスするための方法および装置 図6
  • 特許-テンソルデータにアクセスするための方法および装置 図7
  • 特許-テンソルデータにアクセスするための方法および装置 図8
  • 特許-テンソルデータにアクセスするための方法および装置 図9
  • 特許-テンソルデータにアクセスするための方法および装置 図10
  • 特許-テンソルデータにアクセスするための方法および装置 図11
  • 特許-テンソルデータにアクセスするための方法および装置 図12
  • 特許-テンソルデータにアクセスするための方法および装置 図13
  • 特許-テンソルデータにアクセスするための方法および装置 図14
  • 特許-テンソルデータにアクセスするための方法および装置 図15
  • 特許-テンソルデータにアクセスするための方法および装置 図16
  • 特許-テンソルデータにアクセスするための方法および装置 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-14
(45)【発行日】2022-01-25
(54)【発明の名称】テンソルデータにアクセスするための方法および装置
(51)【国際特許分類】
   G06F 17/16 20060101AFI20220118BHJP
   G06F 12/02 20060101ALI20220118BHJP
   G06F 12/00 20060101ALI20220118BHJP
【FI】
G06F17/16 B
G06F12/02 510A
G06F12/00 560B
G06F17/16 C
【請求項の数】 9
【外国語出願】
(21)【出願番号】P 2019226595
(22)【出願日】2019-12-16
(65)【公開番号】P2020098602
(43)【公開日】2020-06-25
【審査請求日】2020-02-13
(31)【優先権主張番号】201811541065.1
(32)【優先日】2018-12-17
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】519448485
【氏名又は名称】北京地平▲線▼机器人技▲術▼研▲発▼有限公司
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】▲孫▼ 晨
(72)【発明者】
【氏名】王 振江
(72)【発明者】
【氏名】▲陳▼ ▲亮▼
(72)【発明者】
【氏名】凌 坤
【審査官】上田 翔太
(56)【参考文献】
【文献】米国特許第08761206(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 12/02
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
テンソルデータにアクセスするための方法であって、
第1のメモリ内の第1の行アドレスを決定するステップであって、前記テンソルデータの論理構造においてアクセスされるべき1つまたは複数の第1のデータ項目が前記第1のメモリ内の前記第1の行アドレスに記憶される、ステップと、
前記第1のメモリ内の前記第1の行アドレスにあるデータ項目を、第1のバッファの第1のバッファ行にコピーするステップと、
前記第1のバッファの前記第1のバッファ行内の各第1のデータ項目を、第2のバッファの少なくとも第1のバッファ行内の対応する位置に移動するステップであって、各第1のデータ項目に対する前記第2のバッファの少なくとも前記第1のバッファ行内の前記対応する位置が、前記第1のデータ項目に割り振られた第2のメモリ内のターゲット位置に依存する、ステップと、
前記第2のバッファの前記第1のバッファ行内のデータ項目を、前記第2のメモリ内の対応するターゲット位置に記憶するステップと
を有する方法。
【請求項2】
前記第2のバッファの第2のバッファ行が少なくとも1つの第1のデータ項目を含む場合、前記第2のバッファの前記第2のバッファ行内の各第1のデータ項目を、前記第2のメモリ内の前記対応するターゲット位置に記憶するステップであって、前記第1のメモリにおいて、前記第2のバッファの前記第2のバッファ行内の各第1のデータ項目が、前記第2のバッファの前記第1のバッファ行内の各第1のデータ項目の後に配置される、ステップ
をさらに有する、請求項1に記載の方法。
【請求項3】
前記第1のメモリ内の第2の行アドレスを決定するステップであって、前記テンソルデータの前記論理構造においてアクセスされるべき1つまたは複数の第2のデータ項目が前記第1のメモリ内の前記第2の行アドレスに記憶される、ステップと、
前記第1のメモリ内の前記第2の行アドレスにあるデータ項目を、前記第1のバッファの第2のバッファ行にコピーするステップと、
前記第1のバッファの前記第2のバッファ行内の各第2のデータ項目を、前記第2のバッファの少なくとも第2のバッファ行内の対応する位置に移動するステップであって、各第2のデータ項目に対する前記第2のバッファの少なくとも前記第2のバッファ行内の前記対応する位置が、前記第2のデータ項目に割り振られた前記第2のメモリ内のターゲット位置に依存する、ステップと、
前記第2のバッファの前記第2のバッファ行内のデータ項目を、前記第2のメモリ内の対応するターゲット位置に記憶するステップと
をさらに有する、請求項1または2に記載の方法。
【請求項4】
前記第2の行アドレスは、前記第1のメモリで処理されるべき最後の1つの行アドレスである場合、前記第2のバッファの前記第1のバッファ行が少なくとも1つの第2のデータ項目を含む場合、前記第2のバッファの前記第1のバッファ行内の各第2のデータ項目を、前記第2のメモリ内の前記対応するターゲット位置に記憶するステップであって、前記第1のメモリにおいて、前記第2のバッファの前記第1のバッファ行内の各第2のデータ項目が、前記第2のバッファの前記第2のバッファ行内の各第2のデータ項目の後に配置される、ステップ
をさらに有する、請求項3に記載の方法。
【請求項5】
前記第1のバッファの前記第2のバッファ行内の各第2のデータ項目を、前記第2のバッファの少なくとも第2のバッファ行内の対応する位置に移動する前記ステップが、
前記第2のバッファの前記第1のバッファ行内のデータ項目を、前記第2のメモリ内の対応するターゲット位置に記憶するステップと並行して、またはその後に、前記第1のバッファの前記第2のバッファ行内の各第2のデータ項目を、前記第2のバッファの少なくとも
前記第2のバッファ行内の前記対応する位置に移動するステップ
を含む、請求項3に記載の方法。
【請求項6】
前記テンソルデータにアクセスする命令を受信するステップと、
前記命令を解析することによって、前記論理構造においてアクセスされるべき1つまたは複数のデータ項目、前記第1の行アドレス、および前記論理構造においてアクセスされるべき前記データ項目の前記第2のメモリ内のターゲット位置を決定するステップと
をさらに有する、請求項1から5のいずれか一項に記載の方法。
【請求項7】
テンソルデータにアクセスするための装置であって、
第1のバッファと、
第2のバッファと、
コントローラと
を備え、前記コントローラが、第1のメモリ、第2のメモリ、前記第1のバッファ、および前記第2のバッファに接続され、前記コントローラが、
第1のメモリ内の第1の行アドレスを決定することであって、前記テンソルデータの論理構造においてアクセスされるべき1つまたは複数の第1のデータ項目が前記第1のメモリ内の前記第1の行アドレスに記憶される、ことと、
前記第1のメモリ内の前記第1の行アドレスにあるデータ項目を、第1のバッファの第1のバッファ行にコピーすることと、
前記第1のバッファの前記第1のバッファ行内の各第1のデータ項目を、第2のバッファの少なくとも第1のバッファ行内の対応する位置に移動するステップであって、各第1のデータ項目に対する前記第2のバッファの少なくとも前記第1のバッファ行内の前記対応する位置が、前記第1のデータ項目に割り振られた第2のメモリ内のターゲット位置に依存する、ことと、
前記第2のバッファの前記第1のバッファ行内のデータ項目を、前記第2のメモリ内の対応するターゲット位置に記憶することと
を行うように構成される、装置。
【請求項8】
前記第1のバッファの各バッファ行の容量が、前記第1のメモリ内の同じ行アドレスを有する複数のストレージユニットの総容量と同じであり、前記第2のバッファの各バッファ行の容量が、前記第2のメモリ内の同じ行アドレスを有する複数のストレージユニットの総容量と同じである、請求項7に記載の装置。
【請求項9】
前記第1のバッファと前記第2のバッファの両方が、バッファ行によって循環的にアドレス指定される、請求項8に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
相互参照
本開示は、2018年12月17日に出願された中国特許出願第201811541065.1号の利益および優先権を主張し、その開示は参照によりその全体が本明細書に明示的に組み込まれる。
【0002】
本開示は、テンソルデータにアクセスするための方法および装置に関する。
【背景技術】
【0003】
人工知能(AI)アプリケーションにおける大規模な計算タスク用に、様々なAIチップが開発されている。より多くの技術分野でAI技術を適用するにつれて、より高パフォーマンスなAIチップが予想されている。
【0004】
データアクセス時間および帯域幅などのパフォーマンスインジケータを含むデータアクセスのパフォーマンスは、AIチップのパフォーマンスの重要なボトルネックの1つである。AIチップ内のデータフローが改善されると、AIチップ内のデータアクセスの効率が向上し得る。
【発明の概要】
【課題を解決するための手段】
【0005】
一態様では、テンソルデータにアクセスするための方法が開示される。本方法は、第1のメモリ内の第1の行アドレスを決定するステップであって、テンソルデータの論理構造においてアクセスされるべき1つまたは複数の第1のデータ項目が第1のメモリ内の第1の行アドレスに記憶される、ステップを含み得る。本方法はまた、第1のメモリ内の第1の行アドレスにあるデータ項目を、第1のバッファの第1のバッファ行にコピーするステップを含み得る。本方法はまた、第1のバッファの第1のバッファ行内の各第1のデータ項目を、第2のバッファの少なくとも第1のバッファ行内の対応する位置に移動するステップであって、各第1のデータ項目に対する第2のバッファの少なくとも第1のバッファ行内の対応する位置が、第1のデータ項目に割り振られた第2のメモリ内のターゲット位置に依存し得る、ステップを含み得る。本方法はまた、第2のバッファの第1のバッファ行内のデータ項目を、第2のメモリ内の対応するターゲット位置に記憶するステップを含み得る。
【0006】
別の観点では、テンソルデータにアクセスするための装置が開示される。本装置は、第1のバッファと、第2のバッファと、コントローラとを含み得る。コントローラは、第1のメモリ、第2のメモリ、第1のバッファ、および第2のバッファに接続され得る。コントローラは、コントローラが起動されると、指示に従って少なくとも上記の方法を実行するように構成され得る。
【0007】
別の観点では、プログラム命令が記憶された非一時的コンピュータ可読媒体が開示される。記憶されたプログラム命令は、プロセッサまたはコントローラによって実行されている場合、プロセッサまたはコントローラに少なくとも上記の方法を実行させてもよい。
【0008】
本開示の上記および他の目的、特徴、および利点は、図面を参照して本開示の実施形態をより詳細に説明することによって、より明らかになるであろう。図面は、本開示の実施形態のさらなる理解を提供し、本明細書の一部を構成する。図面は、本開示の実施形態とともに、本開示を説明するために使用されるが、本開示に対する制限を構成するものではない。図面において、同じ参照番号は一般に同じ部分またはステップを指す。
【図面の簡単な説明】
【0009】
図1】一実施形態における例示的なシステムを示す図である。
図2】一実施形態における例示的なオンチップメモリを示す図である。
図3】一実施形態における例示的な方法を示す図である。
図4】一実施形態における例示的な方法を示す図である。
図5】一実施形態における例示的な方法を示す図である。
図6】一実施形態における例示的な方法を示す図である。
図7】一実施形態における例示的な方法を示す図である。
図8】一実施形態における例示的な方法を示す図である。
図9】一実施形態における例示的な方法を示す図である。
図10】一実施形態における例示的な方法を示す図である。
図11】一実施形態における例示的な方法を示す図である。
図12】一実施形態における例示的な方法を示す図である。
図13】一実施形態における例示的な方法を示す図である。
図14】一実施形態における例示的な方法を示す図である。
図15】一実施形態における例示的な方法を示す図である。
図16】一実施形態における例示的な方法を示す図である。
図17】一実施形態における例示的な装置を示す図である。
【発明を実施するための形態】
【0010】
実施形態における例示的な方法および装置では、たとえば、データは、第1のバッファを通じて、また第2のバッファを通じてデータアライメントを用いて第1のメモリから効率的に読み取られてよく、アクセスされるべきデータ項目は所望のフォーマットに応じて効率的に調整されてよく、データは、データアライメントを用いて効率的に第1のメモリに書き込まれてよい。したがって、AIチップ内のデータアクセスの効率が改善され得、その結果、AIチップのパフォーマンスが改善され得、AIチップの電力消費が削減され得る。
【0011】
さらに、実施形態における例示的な方法および/または装置は、パイプライン処理を容易にし得る。したがって、AIチップ内のデータアクセスの効率がさらに改善され得、その結果、AIチップのパフォーマンスがさらに改善され得、AIチップの電力消費がさらに削減され得る。
【0012】
以下で、本開示による例示的な実施形態を、図面を参照して詳細に説明する。説明される実施形態は、本開示のすべての実施形態ではなくいくつかの実施形態であることは明らかであり、本開示は、本明細書で説明される例示的な実施形態に限定されないことが理解される。
【0013】
コストおよびチップ寸法などの様々な側面により、AIチップ内のオンチップメモリは通常、容量が制限されており(たとえば、数百キロバイトから数メガバイト)、したがって、処理されるべき完全なテンソルデータを記憶またはバッファリングすることはできない。さらに、畳み込み加速コアなどのコンポーネントは、通常限られた数の乗算器アキュムレータを含む。したがって、AIチップは通常、限られたハードウェアリソースで毎回テンソルデータ全体のデータ項目の一部を処理することができる。
【0014】
ハードウェアリソースの制限、削減された動作(たとえば、データ後処理)の予想、人工ニューラルネットワークの複数の層の融合計算の予想など、様々な側面のため、たとえば、テンソルデータ全体を複数の部分に分割して、それぞれ記憶されるように(たとえば、複数の部分テンソルデータを連続的に記憶するために)、または完全なテンソルデータのデータ項目の一部を毎回処理するためにAIチップに提供するようにし得る。
【0015】
一方、テンソルの分割または他のプロセスにより、テンソルデータの1つまたは複数の項目のスプライシングまたは組合せが必要になる場合がある。たとえば、畳み込み加速コアによって出力される各ローカルテンソルは、最終的に完全なテンソルデータを取得するために、スプライスまたは結合される。
【0016】
したがって、可能な解決策は、AIチップ内のプロセッサまたはコントローラのソフトウェア容量を利用して、プロセッサまたはコントローラが、あらかじめ定められた命令シーケンスに従ってテンソルデータの分割/結合/調整の動作を制御し得るようにすることであってよい。たとえば、そのような動作は、完全なテンソルデータ(通常は、ハードウェアリソースの制限により、データ項目の一部)のデータ項目をオフチップメモリからオンチップメモリに読み込み、次いで、オンチップメモリに読み込まれたデータ項目を分割/結合することを含み得る。
【0017】
しかしながら、たとえば、そのような動作は、AIチップ内のプロセッサまたはコントローラの動作負荷を増加させる可能性があり、AIチップ内のプロセッサまたはコントローラの他の制御動作に追加の遅延が生じる場合がある。さらに、そのような動作ではハードウェアリソースを効率的に利用することができない。たとえば、そのような動作はパイプライン化された方式には適していない。
【0018】
さらに、オンチップメモリの容量が限られているため、プロセッサまたはコントローラが上記の動作を実行している間、オフチップメモリとオンチップメモリの間で追加のデータ交換/転送が行われる場合がある。たとえば、プロセッサまたはコントローラは、上記の動作のためにオンチップメモリの十分な残容量を確保するために、いくつかの中間処理結果を一時的にオフチップメモリに出力するように制御するように構成され得、それにより、AIチップ内の他の動作またはプロセスにさらに遅延が発生し得、AIチップのパフォーマンスが低下し、電力消費が増加する可能性がある。
【0019】
本開示の実施形態における例示的な方法および装置は、AIチップ内のプロセッサまたはコントローラの作業負荷を削減するために、オフチップメモリとオンチップメモリとの間のデータ交換/転送を削減するために、および限られたハードウェアリソースを効率的に利用するために、たとえば、効率的なパイプライン化された方式を利用するために、直接、および予想されるデータ項目配置に従ってオンチップメモリにロードされたテンソルデータからアクセスされるべきデータ部分を取得することを可能にし、その結果、AIチップのパフォーマンスが改善され得、AIチップの消費電力が削減され得る。
【0020】
本開示の実施形態における例示的な方法および装置を、AIチップの文脈で説明しているが、本開示の実施形態における例示的な方法および装置はまた、高容量の低速ストレージシステム(たとえば、AIチップのオフチップメモリ)と、低容量の高速ストレージシステム(たとえば、AIチップのオンチップメモリ)との間でデータ交換が予想される任意の状況またはシステムに適用可能であり、低容量の高速ストレージシステム内のデータ項目は、所望の配列を有することが予想される。
【0021】
本開示の実施形態における例示的な方法および装置の説明を容易にするために、実施形態における例示的な方法および装置が適用され得る例示的なシステムが図1に示されている。
【0022】
図1に示されるように、例示的なシステムは、コントローラCON、第1のバッファBUF1、および第2のバッファBUF2などの、実施形態における例示的な方法および装置におけるいくつかのコンポーネントまたはモジュールまたは回路またはユニットを含み得る。
【0023】
図1に示される例示的なシステムにおける第1のメモリSRAM1および第2のメモリSRAM2は、実施形態の例示的なシステムにおける高速ストレージシステムまたは高速ストレージシステムの一部を形成し得る。
【0024】
様々な実施形態では、高速ストレージシステムにおける第1のメモリSRAM1と第2のメモリSRAM2の両方は、2次元データへのアクセスおよび/またはデータへの2次元アクセスをサポートするスタティックランダムアクセスストレージコンポーネント/モジュールでもよく、高速バッファコンポーネント/モジュールでもよい。
【0025】
一実施形態では、第1のメモリSRAM1および第2のメモリSRAM2の各々は、複数の1次元スタティックランダムアクセスメモリ(たとえば、複数の線形スタティックランダムアクセスメモリ)を含み得る。各1次元スタティックランダムアクセスメモリにおいて同じアドレスにあるストレージユニットは、第1のメモリSRAM1または第2のメモリSRAM2におけるストレージ行に対応し得る。
【0026】
たとえば、第1のメモリSRAM1は、4つの1次元スタティックメモリを含み得、各1次元スタティックメモリ内の各ストレージユニットは32ビットであり得る。したがって、この例では、128ビットのデータを記憶するために第1のメモリSRAM1内のストレージ行を使用し得、または第1のメモリSRAM1のストレージ幅は128ビットである。
【0027】
別の実施形態では、第1のメモリSRAM1および第2のメモリSRAM2の各々はまた、2次元データへのアクセスおよび/またはデータへの2次元アクセスを直接サポートするために2次元メモリであり得る。
【0028】
図1には、第1のメモリSRAM1と第2のメモリSRAM2が別々に構成された2つのストレージコンポーネント/モジュールとして示されているが、第1のメモリSRAM1と第2のメモリSRAM2はまた、2次元データへのアクセスをサポートする同じストレージコンポーネント/モジュールの2つの異なる部分でもよく、2次元データへのアクセスおよび/またはデータへの2次元アクセスをサポートするために、複数の1次元スタティックランダムアクセスメモリ、あるいは1つまたは複数の2次元メモリを含み得る。
【0029】
たとえば、AIチップの場合、図1の例における第1のメモリSRAM1および第2のメモリSRAM2は、2つのオンチップスタティックランダムアクセスメモリまたはオンチップキャッシュであり得、また、2次元データへのアクセスおよび/またはデータへの2次元アクセスをサポートする1つまたは複数のストレージコンポーネントを含むストレージシステムであり得る同じオンチップメモリ上の2つの部分であり得る。
【0030】
たとえば、図2に示されるように、第1のメモリSRAM1および第2のメモリSRAM2は、左上隅の部分(すなわち、R0からRmまでの行アドレスおよびC0からCpまでの列アドレスに対応するストレージ領域/ストレージ部分)、およびオンチップメモリシステムMEMに従ってそれぞれ決定される右下隅の部分(すなわち、Rnから最終行アドレスまでの行アドレスおよびCqから最終列アドレスまでの列アドレスに対応するストレージ領域/ストレージ部分)に対応し得る。
【0031】
さらに、様々な実施形態では、高速ストレージシステムにおける2つの固定ストレージコンポーネントまたはストレージ領域は、第1のメモリSRAM1および第2のメモリSRAM2として使用されてもよく、またはたとえば、コントローラCONは、システムの動作前または動作中にあらかじめ定められたプログラム命令に従って第1の第1のメモリSRAM1および第2のメモリSRAM2として2つのストレージコンポーネントまたはストレージ領域を動的に決定し得る。
【0032】
一実施形態では、コントローラCON、第1のメモリSRAM1、第2のメモリSRAM2、第1のバッファBUF1、および第2のバッファBUF2を含む図1の太枠内の部分は、1つのチップ上に具現化され得、テンソルデータにアクセスするためのオンチップシステムを形成する。たとえば、AIチップの場合、図1の太枠内の部分はAIチップ上で具現化されてもよく、テンソルデータに効率的にアクセスするために使用されてもよい。したがって、メモリDDRは、ダイナミックランダムアクセスメモリであり得、オフチップメモリと呼ばれ得る。
【0033】
コントローラCONは、あらかじめ定められた命令シーケンス(たとえば、実行可能なプログラム命令シーケンス)に従って、または外部からの命令に応じて、動作および制御を実行し得る。
【0034】
簡単にするために、図1は、ストレージに関連付けられるいくつかの態様を示しており、命令タイミングを制御するためのタイミングコントローラ、命令割込みを制御するための割込みコントローラ、畳み込みニューラルネットワークでの畳み込み計算およびプーリング計算、コンポーネント間の相互接続を実装するためのクロスバーおよび/またはマルチプレクサ、コプロセッサ、オフチップメモリ内のデータへのアクセスの制御専用のオフチップデータ転送マネージャなどのあらかじめ定められた計算の効率的な実行専用の計算加速コアなどの、他のコンポーネント/モジュール/回路/ユニット/要素は省略されている。
【0035】
様々な実施形態では、図1のコントローラCONは、メモリアクセスコントローラなどのデータアクセスの制御専用の上述のコントローラに対応してもよく、または上記で省略された1つまたは複数のコンポーネント/モジュール/回路/ユニット/要素の機能を含むか実装してもよい。
【0036】
たとえば、AIチップの場合、コントローラCONは、グラフィックスプロセッシングユニット(GPU)、ARMプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)などに基づいて開発されたプロセッサまたはコントローラであり、事前に設計された人工ニューラルネットワーク用に事前コンパイルされた実行可能な命令シーケンスに基づいて、コントローラCONは、たとえば人工ニューラルネットワークの計算以外の動作を実行すること、ならびに/または制御命令および関連付けられるパラメータをデータアクセスコントローラおよび畳み込み加速コアなどのAIチップ内の他のコンポーネントまたは回路に提供することを行ってよく、その結果、チップ内の他のコンポーネントまたは回路が、オフチップメモリおよび/またはインチップメモリ内のデータへのアクセス、ならびに乗算器アキュムレータが畳み込み計算を実行することを可能にすることなど、受信した命令に応じて対応する動作を実行し得る。
【0037】
別の例では、AIチップの場合、コントローラCONはまた、FPGAに基づいて開発された縮小命令セット計算(RISC)ソフトプロセッサコアなどの、オフチップメモリおよび/またはオンチップメモリへのアクセスの制御専用のチップ上のアクセスコントローラまたはデータ転送コントローラであり得、オフチップメモリおよび/またはオンチップメモリ内のデータへのアクセスを独立して制御してもよく、たとえば、メインプロセッサと協働するか、メインプロセッサからの指示に応答して、オフチップメモリおよび/またはオンチップメモリ内のデータへのアクセスを制御してもよい。
【0038】
第1のバッファBUF1および第2のバッファBUF2は両方とも、データアクセスレートが第1のメモリSRAM1および第2のメモリSRAM2を含む高速ストレージシステムのデータアクセスレートと一致し得るキャッシュまたはスタティックランダムアクセスメモリであり得る。
【0039】
本明細書では、「一致する(match)」という表現は、第1のバッファBUF1、第2のバッファBUF2、第1のメモリSRAM1、および第2のメモリSRAM2が同じまたは類似のデータアクセスレートを有し得ることを意味し得る。たとえば、第1のバッファBUF1、第2のバッファBUF2、第1のメモリSRAM1、および第2のメモリSRAM2のデータアクセスレートの差は、あらかじめ定められたしきい値を下回る場合があり、たとえば、公差によって許容される範囲内にある場合があり、したがって、実際のアプリケーションでは無視され得る。
【0040】
一実施形態では、第1のバッファBUF1は、1つまたは複数のバッファ行を含み得、第2のバッファBUF2は、2つ以上のバッファ行を含み得る。
【0041】
別の実施形態では、第1のバッファBUF1と第2のバッファBUF2の各々は、データへのアクセス時の処理効率を確保するために少なくとも2つのバッファ行を含み得る。
【0042】
別の実施形態では、第1のバッファBUF1と第2のバッファBUF2の各々は、低コストのハードウェア構成を通じてデータにアクセス中の処理効率を確保するために2つのバッファ行を含み得る。
【0043】
別の実施形態では、第1のバッファBUF1および第2のバッファBUF2の各々は、ボーダレスストレージスペースを提供し、ストレージ制御を簡素化するために、バッファ行によって循環的にアドレス指定されるバッファであり得る。
【0044】
別の実施形態では、第1のバッファBUF1の各バッファ行の容量は、第1のメモリSRAM1内に同じ行アドレスを有する複数のストレージユニットの総容量(すなわち、第1のメモリSRAM1のストレージ幅)と同じであり得、また第2のバッファBUF2の各バッファ行の容量は、指定を簡素化し、制御ロジックの複雑さを軽減するために、第2のメモリSRAM2内に同じ行アドレスを有する複数のストレージユニットの総容量(すなわち、第2のメモリSRAM2のストレージ幅)と同じであり得る。
【0045】
さらに、第1のバッファBUF1の各バッファ行の容量は、第2のバッファBUF2の各バッファ行の容量、または第1のバッファBUF1の各バッファ行の容量と同じであり得、第2のバッファBUF2の各バッファ行の容量、第1のメモリSRAM1のストレージ幅、および第2のメモリSRAM2のストレージ幅は、第1のメモリSRAM1および第2のメモリSRAM2が動的に決定され得るような場合に適応することが可能になるように、同じであり得る。
【0046】
簡潔にするために、本開示の実施形態または例は、メモリDDRからのデータの少なくとも一部またはシステム内の他の計算コンポーネント(たとえば、畳み込み加速コアなど)からのデータの少なくとも一部を第1のメモリSRAM1に記憶するために、およびメモリDDRに出力されるために、コントローラCONがあらかじめ定められた命令シーケンスおよび制御を実行し、次いで、データフローを順番に制御し、第1のメモリSRAM1->第1のバッファBUF1->第2のバッファBUF2->第2のメモリSRAM2であり、その結果、第1のメモリSRAM1内のデータ項目の一部が所望の方法で第2のメモリSRAM2に記憶され、また、第1のバッファBUF1および第2のバッファBUF2の各々は、バッファ行によって循環的にアドレス指定される2つのバッファ行を含み得る、例示的な構成において説明される。
【0047】
上述したように、第1のメモリSRAM1および第2のメモリSRAM2もまた、動的に決定され得る。たとえば、コントローラCONは、あらかじめ定められたプログラム命令に従ってシステムの動作前または動作中にデータフローを動的に決定し得、その結果、実際の動作のプロセス中に、データのフロー方向は、第1のメモリSRAM1->第1のバッファBUF1->第2のバッファBUF2->第2のメモリSRAM2、および/または第2のメモリSRAM2->第1のバッファBUF1->第2のバッファBUF2->第1のメモリSRAM1を実際に含み得る。
【0048】
図3は、一実施形態におけるテンソルデータにアクセスするための例示的な方法を示している。たとえば、例示的な方法は、図1の例示的なシステムにおけるコントローラCONによって実行され得る。
【0049】
図3に示されるように、実施形態における例示的な方法は、ステップS10、S20、S30、およびS40を含み得る。
【0050】
ステップS10において、第1のメモリSRAM1の第1の行アドレスが決定され、テンソルデータの論理構造においてアクセスされるべき少なくとも1つの第1のデータ項目が第1のメモリSRAM1の第1の行アドレスに記憶される。
【0051】
ステップS20において、第1のメモリSRAM1内の第1の行アドレスにあるデータ項目を第1のバッファBUF1の第1のバッファ行にコピーし得る。様々な例において、第1のバッファBUF1の第1のバッファ行にコピーされるデータ項目は、ステップS10において少なくとも1つの第1のデータ項目を含み得、またアクセスされることが予想されない他のデータ項目も含み得る。
【0052】
ステップS30において、第1のバッファBUF1の第1のバッファ行内の各第1のデータ項目は、第2のバッファBUF2の少なくとも第1のバッファ行内の対応する位置に移動され得る。第1のデータ項目ごとに、第2のバッファBUF2の少なくとも第1のバッファ行内の対応する位置は、第1のデータ項目に割り振られた第2のメモリSRAM2内のターゲット位置に依存し得る。
【0053】
第1のデータ項目の第2のバッファBUF2内の対応する位置に応じて、第1のバッファBUF1から第2のバッファBUF2に移動した第1のデータ項目は、第2のバッファBUF2の第1のバッファ行を占有し得、また、第2のバッファBUF2の第1のバッファ行と他の1つまたは複数のバッファ行の両方を占有し得る。
【0054】
第1のデータ項目が第1のバッファBUF1から第2のバッファBUF2に移動すると、第1のバッファ行と第2のバッファBUF2の他の1つまたは複数のバッファ行の両方を占有し、第1のメモリSRAM1内で、第2のバッファBUF2の第1のバッファ行内の各第1のデータ項目は、第2のバッファの他の各バッファ行の各第1のデータ項目の前に配置される。
【0055】
ステップS40において、第2のバッファBUF2の第1のバッファ行内のデータ項目は、第2のメモリSRAM2内の対応するターゲット位置に記憶される。
【0056】
様々な状況において、このステップにおいて第2のメモリSRAM2内の対応するターゲット位置に記憶されるべきデータ項目は、第2のバッファBUF2の第1のバッファ行内に少なくとも第1のデータ項目を含み、また、前のプロセスの後、第2のバッファBUF2の第1のバッファ行に残り、アクセスされると予想されるが、まだ第2のメモリSRAM2のターゲット位置に出力されないデータ項目を含み得る(以下で説明するように、上述のステップS10からS40が繰り返され得る)。
【0057】
上記の第1の行アドレスが、処理されるべき第1のメモリSRAM1の最後の1つの行アドレスである場合、図4に示されるように、一実施形態における例示的な方法はステップS50をさらに備え得る。
【0058】
ステップS50において、第2のバッファBUF2の第2のバッファ行が少なくとも1つの第1のデータ項目を含む場合、第2のバッファBUF2の第2のバッファ行内の各第1のデータ項目は、第2のメモリSRAM2の対応するターゲット位置に記憶され得る。第1のメモリSRAM1では、第2のバッファBUF2の第2のバッファ行内の各第1のデータ項目は、第2のバッファBUF2の第1のバッファ行内の各第1のデータ項目の後に配置される。
【0059】
第1のメモリSRAM1が処理されるべきさらなる行アドレスを含む場合、たとえば、図1に示されるように、上記の第1の行アドレスの後に継続的に処理されるべき第2の行アドレスがある場合、図5に示されるように、一実施形態における例示的な方法は、ステップS10'、S20'、S30'、およびS40'をさらに備え得る。
【0060】
ステップS10'において、第1のメモリSRAM1の第2の行アドレスが決定され得、テンソルデータの論理構造においてアクセスされるべき少なくとも1つの第2のデータ項目が第1のメモリSRAM1内の第2の行アドレスに記憶される。
【0061】
ステップS20'において、第1のメモリSRAM1内の第2の行アドレスにあるデータ項目は、第1のバッファBUF1の第2のバッファ行にコピーされ得る。
【0062】
上述のように、第1のバッファBUF1はまた1つのバッファ行を含み得、ステップS20'において、第1のメモリSRAM1内の第2の行アドレスにあるデータ項目は第1のバッファBUF1の1つのバッファ行にコピーされ得る。図5に示されるように、ステップS40およびS10'が順番に実行される場合、1つのバッファ行を含む第1のバッファBUF1も使用され得る。
【0063】
しかしながら、パイプライン化された方式を採用する場合(以下で詳細に説明する)、第1のメモリSRAM1内の第2の行アドレスにあるデータ項目を第1のバッファBUF1内の1つのバッファ行にコピーする前に、ステップS20において以前に第1のバッファBUF1にコピーされたデータ項目を、ステップS30において第2のバッファBUF2に移動する必要がある。
【0064】
したがって、1つのバッファ行を含む第1のバッファBUF1を利用する場合、パイプライン化された方式を採用する場合、ステップS20'およびS40が並行して実行されるように制御され得る。
【0065】
第1のバッファBUF1が、交換可能に使用され得るか、バッファ行によって循環的にアドレス指定され得る2つのバッファ行を含む場合、パイプライン化された方式を採用する場合、ステップS20'(おそらくステップS10'を含む)は、ステップS10、S20、S30およびS40のいずれかと並行して実行され得る。そのような制御はより柔軟であり得、より効率的なパイプライン制御が実装され得る。さらに、追加されるバッファ行は1つだけであり、これは、ハードウェアコストの観点からは許容範囲である。さらに、コストが許す場合、第1のバッファBUF1は、より多くのバッファ行を含み得、ボーダレスストレージスペースを取得するために、バッファ行によって循環的にアドレス指定され得る。
【0066】
ステップS30'において、第1のバッファBUF1の第2のバッファ行内の各第2のデータ項目は、第2のバッファBUF2の少なくとも第2のバッファ行内の対応する位置に移動され得る。各第2のデータ項目に対する第2のバッファBUF2の少なくとも第2のバッファ行の対応する位置は、この第2のデータ項目に割り振られた第2のメモリSRAM2内のターゲット位置に依存し得る。
【0067】
ステップS30'において、上記のステップS30およびS40により、第2のメモリSRAM2内のターゲット位置にまだ出力されていない1つまたは複数の第1のデータ項目が、第2のバッファBUF2の第2のバッファ行内に含まれ得る。したがって、ステップS30'において、各第2のデータ項目は、第2のバッファBUF2の少なくとも第2のバッファ行に移動される。したがって、アクセスされるべきすべてのデータは、簡単な方法で最終的に第2のメモリSRAM2に出力され得る。
【0068】
上記のステップS30と同様に、第2のデータ項目の第2のバッファBUF2内の対応する位置に応じて、第1のバッファBUF1から第2のバッファBUF2に移動した第2のデータ項目は第2のバッファBUF2の第2のバッファ行を占有し得、また第2のバッファBUF2の第2のバッファ行と、第2のバッファBUF2の他の1つまたは複数の他のバッファ行の両方を占有し得る。第1のバッファBUF1から第2のバッファBUF2に移動した第2のデータ項目が、第2のバッファ行と第2のバッファBUF2の1つまたは複数の他のバッファ行の両方を占有する場合、第1のメモリSRAM1において、第2のバッファBUF2の第2のバッファ行内の各第2のデータ項目は、第2のバッファBUF2の1つまたは複数の他のバッファ行の各々の各第2のデータ項目の前に配置される。
【0069】
したがって、上述のように、第2のバッファBUF2は、バッファ行によって循環的にアドレス指定され得る2つのバッファ行を含み得る。コストが許す場合、第2のバッファBUF2は、バッファ行によって循環的にアドレス指定できるより多くのバッファ行をさらに含み得る。さらに、第2のバッファBUF2は、1つの読み書きサイクル内でのデータの読み書きをサポートし得る。たとえば、第2のバッファBUF2は、読み書きサイクルの第1の時点(たとえば、読み書きクロックの立ち上がりエッジ)において1つのバッファ行からデータを出力することと、読み書きサイクルの第2の時点(読み書きクロックの立ち下がりエッジ)において別のバッファ行にデータを入力することとをサポートし得る。したがって、チップのパフォーマンスはさらに向上し得る。
【0070】
ステップS40'において、第2のバッファBUF2の第2のバッファ行内のデータ項目は、第2のメモリSRAM2内の対応するターゲット位置に記憶され得る。
【0071】
上記のステップS40と同様に、様々な例において、ステップS40'において第2のメモリSRAM2内の対応するターゲット位置に記憶されるべきデータ項目は、第2のバッファBUF2の第2のバッファ行内の少なくとも第2のデータ項目を含み、また、ステップS30およびS40の後、第2のバッファBUF2の第2のバッファ行に残っているが、第2のメモリSRAM2内のターゲット位置にはまだ出力されていない、アクセスされるべき第1のデータ項目を含み得る。
【0072】
上記の第2の行アドレスが、第1のメモリSRAM1内で処理されるべき最後の1つの行アドレスである場合、図6に示されるように、一実施形態における例示的な方法は、ステップS50'をさらにみ得る。
【0073】
ステップS50'において、第2のバッファBUF2の第1のバッファ行が少なくとも1つの第2のデータ項目を含む場合、第2のバッファBUF2の第1のバッファ行内の各第2のデータ項目は、第2のメモリSRAM2内の対応するターゲット位置に記憶され得る。第1のメモリSRAM1では、第2のバッファBUF2の第1のバッファ行内の各第1のデータ項目は、第2のバッファBUF2の第2のバッファ行内の各第1のデータ項目の後ろに配置される。
【0074】
処理されるべき追加の行アドレスが第1のメモリSRAM1に含まれる場合、たとえば、図7に示されるように、上記の第2の行アドレスの後に処理されるべき第3の行アドレスがある場合、ステップS40'の後、上記の第1の行アドレスを第3の行アドレスに置き換えることによって、第3の行アドレスについてステップS10からS40が繰り返され得る。第3の行アドレスが処理されるべき最後の行アドレスである場合、ステップS50はステップS40の後に実行され得る。そうではなく、上記の第3の行アドレスの後に処理されるべき第4の行アドレスがまだある場合、ステップS40の後、上記の第2の行アドレスを第4の行アドレスに置き換えることによって、第4の行アドレスについてステップS10'からS40'が繰り返され得る。第4の行アドレスが処理されるべき最後の行アドレスである場合、ステップS40'の後にステップS50'が実行され得る。第1のメモリSRAM1内の処理されるべきすべての行アドレスが処理されるまで、同様のプロセスが繰り返され得る。
【0075】
たとえば、図8に示されるように、図7の例示的な方法におけるステップS10を実行する前、または実行する場合、テンソルデータのデータ項目の一部は、第1のメモリSRAM1に順次記憶される。たとえば、H1c1w9は、テンソルデータの論理構造(データキューブであり得、この例では、行、列、およびチャネルが0からカウントされる)のVoxelのデータ値を表し、第1の行(H1)、第1のチャネル(c1)、および第9の列(w9)に配置される。
【0076】
図8の例では、テンソルデータの論理構造内の第1のチャネル(c1)の0行目から1行目(H0~H1)および2列目から11列目(w2~w11)のデータ項目のみ、すなわち、図8のSRAM1内の太枠内のデータ項目が、アクセスされると予想される。さらに、データ項目のこの部分は、後続の動作において効率的に取得および処理されると予想される。たとえば、データ項目の一部は、ハードウェアのデータアライメントの要件を満たしながら、畳み込み計算用の畳み込み計算コアによって正確に取得されることが予想される。たとえば、データ項目の一部は、スプライスまたは特徴データの組合せを直接かつ簡単にさらに実装するために、あらかじめ定められたストレージ領域のあらかじめ定められた位置にそのまま充填または出力されることが予想される。したがって、データ項目のこの部分は、予想される方法で、たとえば図8のSRAM2内の太枠で示されるような方法で、オンチップメモリに記憶されると予想される。
【0077】
図8に示されるように、ステップS10において、コントローラCONは、第1のメモリSRAM1の第1の行アドレスR1を決定し得る。
【0078】
第1の行アドレスR1にあるデータ項目は、H0c1w0、H0c1w1、H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6、およびH0c1w7を含み、H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6、およびH0c1w7は、処理されるべきテンソルデータの論理構造においてアクセスされるべきデータ項目、すなわち第1のデータ項目である。
【0079】
一実施形態では、第1のメモリSRAM1の第1の行アドレスは、処理されるべきテンソルデータの論理構造においてアクセスされるべきデータ範囲に従って決定され得る。たとえば、そのようなスコープは命令パラメータによって提供され得る。
【0080】
たとえば、図8の例では、テンソルデータのデータ項目は、第1のメモリSRAM1に連続的に記憶される。したがって、第1のメモリSRAM1のストレージ幅が知られている場合(図8の例では、第1のメモリSRAM1の1つの行は8つのデータ項目を記憶し得る)、コントローラCONは、データ項目ごとに第1のメモリSRAM1内の位置を決定し得、その結果、1つまたは複数の行アドレスは、処理されるべきテンソルデータの論理構造においてアクセスされるべきデータ範囲に応じて決定され得る。次いで、各ステップS10において、コントローラCONは、行アドレスレジスタおよび/または行アドレスカウンタを通じて第1のメモリSRAM1の第1の行アドレスを決定し得る。
【0081】
別の例では、コントローラCONは第1のメモリSRAM1内に参照アドレスを記録し得、次いで、処理されるべきテンソルデータの論理構造においてアクセスされるべきデータ範囲に従って、ステップS10において行アドレスを決定し得、その結果、第1のメモリSRAM1において、参照アドレスから行アドレスの前までのストレージ領域は、アクセスされるべきデータ範囲におけるデータ項目を含まない。次いで、参照アドレスは、決定された行アドレスの後の次の行アドレスに更新され得る。
【0082】
図8に示されるように、ステップS20において、コントローラCONは、第1のメモリSRAM1の行アドレスR1にあるすべてのデータ項目を第1のバッファBUF1の第1のバッファ行L11にコピーする命令を実行し得、H0c1w0およびH0c1w1はアクセスされるべきデータ項目ではない。
【0083】
一実施形態では、第1のバッファBUF1の各バッファ行の容量は、同じ行アドレスを有する第1のメモリSRAM1内の複数のストレージユニットの総容量と同じであり得、その結果、ステップS10において、データは第1のメモリSRAM1から第1のバッファBUF1に簡単かつ効率的に読み出され得る。
【0084】
図8に示されるように、ステップS30において、コントローラCONは、第2のメモリSRAM2内の第1の利用可能なストレージ領域(すなわち、図4のSRAM2の第2のストレージ行内の「XX」の後の領域)を、第1のデータ項目H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6、およびH0c1w7用の第2のメモリSRAM2内のターゲット位置として決定するために、命令を実行し得る。
【0085】
別の例では、コントローラCONはまた、命令パラメータによって示されてもよく、ターゲットテンソル内のローカルテンソルの予想位置に従って決定されてもよいターゲットテンソル内のパディング位置に従って、第1のデータ項目H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6、およびH0c1w7について、第2のメモリSRAM2内のターゲット位置を決定する命令を実行し得る。
【0086】
図8に示されるように、ステップS30において、コントローラCONは、第1のバッファBUF1の第1のバッファ行L11内の第1のデータ項目H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6、およびH0c1w7を、第2のバッファBUF2の少なくとも第1のバッファ行L21に移動する命令を実行し得、ここで、第1のデータ項目H0c1w2、H0c1w3、H0c1w4、およびH0c1w5は、第2のバッファBUF2の第1のバッファ行L21を占有し、H0c1w6、およびH0c1w7は、第2のバッファBUF2の第2のバッファ行L22を占有する。図8に示されるように、第2のバッファBUF2内の第1のデータ項目の対応する位置は、H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6、およびH0c1w7の第2のメモリSRAM2内に割り振られたターゲット位置に依存し得る。
【0087】
本明細書では、第1のバッファBUF1の第1のバッファ行L11内のデータ項目を第2のバッファBUF2に移動することは、第1のバッファBUF1の第1のバッファ行L11内のデータ項目を第2のバッファBUF2にコピーすることを意味し、また、第1のバッファBUF1の第1のバッファ行L11内のデータ項目を第2のバッファBUF2にコピーした後、第1のバッファBUF1の第1のバッファ行L11内のすべての内容を消去することを意味する。
【0088】
図8に示されるように、ステップS40において、コントローラCONは、第2のバッファBUF2の第1のバッファ行L21内のデータ項目H0c1w2、H0c1w3、H0c1w4、およびH0c1w5を第2のメモリSRAM2内の対応するターゲット位置に記憶または充填する命令を実行し得る。
【0089】
上記のステップS10からS40において、第1のバッファBUF1は、データにアクセスする際のハードウェアのデータアライメントを満たし、データに効率的にアクセスするために、第1のメモリSRAM1のデータ項目の完全な行をバッファリングするために使用され得、第2のバッファBUF2は、データ形式の変換がハードウェアによって直接有効にされ得るように、予想される配置においてアクセスされるべきデータ項目をバッファリングするために使用され得る。次いで、第2のバッファBUF2内のデータ項目は、データアライメントを用いて第2のメモリSRAM2に直接出力し得る。したがって、アクセスされるべきデータ項目は、予想されるデータ配置に従ってハードウェアによってテンソルデータから直接取得され得る。
【0090】
図8の例では、第1のメモリSRAM1内の別の行アドレスまたは第2の行アドレスR2が処理され得る。図7を参照すると、ステップS10'からS40は、第2の行アドレスR2について繰り返され得る。
【0091】
図9に示されるように、第1のメモリSRAM1の第2の行アドレスR2は、ステップS10'において決定され得る。第2の行アドレスR2にあるデータ項目は、H0c1w8、H0c1w9、H0c1w10、H0c1w11、H0c1w12、H0c1w13、H0c1w14、およびH0c1w15を含み、H0c1w8、H0c1w9、H0c1w10、およびH0c1w11は、処理されるべきテンソルデータの論理構造においてアクセスされるべきデータに属する。
【0092】
図9に示されるように、ステップS20'において、第1のメモリSRAM1内の第2の行アドレスR2にあるデータ項目は、第1のバッファBUF1の第2のバッファ行L12にコピーされ得る。たとえば、コントローラCONは、第1のメモリSRAM1の行アドレスR2にあるすべてのデータ項目を第1のバッファBUF1の第2のバッファ行L12にコピーする命令を実行し得(この実施形態では、データ項目はまた、第1のバッファBUF1の第1のバッファ行L11にコピーされてもよく、第1のバッファBUF1は1つのバッファ行のみを含んでもよい)、H0c1w12、H0c1w13、H0c1w14、およびH0c1w15はアクセスされるべきデータ項目ではない。
【0093】
図9に示されるように、ステップS30'において、第1のバッファBUF1の第2のバッファ行L12においてアクセスされるべきデータ部分に属する各第2のデータ項目は、第2のバッファBUF2の少なくとも第2のバッファ行L22内の対応する位置に移動され得る。第2のデータ項目ごとに、第2のバッファBUF2の少なくとも第2のバッファ行L22内の対応する位置は、この第2のデータ項目に割り振られた第2のメモリSRAM2内のターゲット位置に依存する。
【0094】
たとえば、図9に示されるように、第2のバッファBUF2の第2のバッファ行L22において現在バッファリングされているH0c1w8、H0c1w9、H0c1w10、H0c1w11およびデータ項目H0c1w6およびH0c1w7は結果データ項目である。したがって、コントローラCONは、第1のバッファBUF1の第2のバッファ行L12内のH0c1w8、H0c1w9、H0c1w10、およびH0c1w11を、H0c1w6およびH0c1w7の後ろの第2のバッファBUF2の第2のバッファ行L22に移動する命令を実行し得る。
【0095】
図9の例では、第1のバッファBUF1の第2のバッファ行L12においてアクセスされるべきデータ部分に属する第2のデータ項目は、第2のバッファBUF2の第2のバッファ行L22のみを占有する。
【0096】
図9に示されるように、ステップS40において、コントローラCONは、第2のバッファBUF2の第2のバッファ行L22内のデータ項目を第2のメモリSRAM2の対応するターゲット位置に記憶または充填する命令を実行し得る。
【0097】
さらに、R3、R4、R5、およびR6などの別の行アドレスの場合、図10に示されるように、ステップS10からS40および/またはS10'からS40'は、図7に示されるような制御フローに従って連続的に繰り返されてよく、その結果、アクセスされるべきデータ項目は、第1のメモリSRAM1から第2のメモリSRAM2へと、第1のメモリSRAM1→第1のバッファBUF1→第2のバッファBUF2→第2のメモリSRAM2のフロー方向に連続的に流れてよく、また第2のメモリSRAM2に所望の配置で記憶され得る。
【0098】
実施形態における例示的な方法では、第1のメモリSRAM1内の1つの行のデータが各サイクル内で処理され、その結果、ハードウェアのデータアライメントの要件を満たしながら、第1のメモリSRAM1内でアクセスされるべきデータ項目が簡単かつ効率的に取得され得る。次いで、アクセスされるべきデータ項目は、所望の配置で第2のメモリSRAM2に記憶され得、その結果、後続のプロセス中に、たとえば、畳み込み計算を実行するための畳み込み計算コアは、予想されるデータ項目を効率的かつ正確に取得し得、また少なくとも第1のメモリSRAM1にすでにロードされているデータ項目の処理中は、外部メモリDDRと内部高速ストレージシステム(第1のメモリSRAM1および第2のメモリSRAM2を含む)との間のデータ交換/転送は無視されてよく、その結果、AIチップのパフォーマンスが改善され得、AIチップの消費電力が削減され得る。
【0099】
さらに、複数の部分テンソルデータをマージまたはスプライスする場合、構成されるべきターゲットテンソルの構造に応じて第2のメモリSRAM2内のデータ項目のターゲット位置が決定され得、次いで、特徴データのマージまたはスプライシングは、実施形態における例示的な方法によって直接実装され得る。したがって、少なくともコントローラCONによってテンソルデータをマージまたはスプライシングするための動作を省略または単純化し得、またコントローラCONの作業負荷を削減し得、その結果、コントローラCONが他のより多くの制御およびプロセスのために機能し得る。したがって、AIチップのパフォーマンスが向上され得る。
【0100】
さらに、上記の例では、第1のバッファBUF1および第2のバッファBUF2の各々は、行ごとに循環的にアドレス指定され得る2つのバッファ行を含み得、これにより、第1のバッファBUF1および/または第2のバッファBUF2がアドレス境界のないストレージスペースを提供することが可能になる。別の例では、コストが許す場合、第1のバッファBUF1および第2のバッファBUF2の各々はまた、より柔軟なアクセス制御を実装するために、行ごとに循環的にアドレス指定され得るより多くのバッファ行を含み得る。
【0101】
別の例では、コントローラCONが、図7から図10に示される例示的なプロセスに従って命令を実行する場合、第1のバッファBUF1はまた、コストを節約するために1つのバッファ行のみを含み得る。
【0102】
別の実施形態では、例示的な方法はまた、より高い処理効率を達成するためにパイプライン化された方式で実行され得る。たとえば、実施形態における例示的な方法のステップは、図11に示されるようにパイプライン化された方式で実行され得、簡単にするためにステップS50およびS50'は図11に示されていない。たとえば、行アドレスR2のステップS30'は、行アドレスR1のステップS40と並行して実行されてよく、行アドレスR3のステップS30は、行アドレスR2のステップS40'と並行して実行されてよい、等である。
【0103】
第1のメモリSRAM1内で処理されるべき行アドレスは、自然数の順序に従って、たとえば1から番号付けされ得る。
【0104】
一例では、ステップS10からS40は、上記の第1および第3の行アドレスなどの奇数行アドレスに対して実行され得る。処理されるべき最後の行アドレスが奇数である場合、ステップS50は方法の最後に含まれ得る。ステップS10'からS40'は、上記の第2および第4の行アドレスなどの偶数行アドレスに対して実行され得る。処理されるべき最後の行アドレスが偶数である場合、方法の最後にステップS50'が含まれ得る。
【0105】
したがって、パイプライン化された制御フローでは、偶数行アドレスR2iのステップS30'は、奇数行アドレスR2i-1のステップS40と並行して実行され得、また、奇数行アドレスR2i+1のステップS30は、必要に応じて偶数行アドレスR2iのステップS40'と並行してさらに実行され得、iは任意の自然数である。
【0106】
上記の番号付けは一例であることが理解される。たとえば、番号付けは0から開始することもできる。
【0107】
したがって、一実施形態における例示的な方法の例は、上記の第1および第3の行アドレスなどの奇数行アドレスに対してステップS10からS40を実行するステップであって、処理されるべき最後の行アドレスが奇数である場合、ステップS50も例示的な方法の最後に含まれ得る、ステップと、上記の第2および第4の行アドレスなどの偶数行アドレスに対してステップS10'からS40'を実行するステップであって、処理されるべき最後の行アドレスが偶数である場合、ステップS50'も例示的な方法の最後に含まれ得る、ステップとを含み得る。
【0108】
したがって、パイプライン化された制御フローでは、行アドレスR2i-1のステップS30'は、偶数行アドレスR2iのステップS40と並行して実行され得、偶数行アドレスR2iのステップS30は、必要に応じて奇数行アドレスR2i-1のステップS40'と並行してさらに実行され得、iは任意の自然数である。
【0109】
たとえば、図8の例における第1のメモリSRAM1のデータについても同様であり、図12は、図11のパイプライン化された制御フローの例を示しており、コントローラCONは、実施形態における例示的な方法を実装するために、時間期間t0、t1、t2、…の順にパイプラインにおいて命令を実行し得る。図11および図13に示されるように、時間期間t0において、第1のメモリSRAM1内の行アドレスR1にあるすべてのデータを第1のバッファBUF1の第1のバッファ行L11に読み出すか、コピーするために、ステップS10およびS20が実行され得る。
【0110】
次いで、図11および図14に示されるように、ステップS30は、第1のバッファBUF1の第1のバッファ行L11内でアクセスされるべきデータに属する各第1のデータ項目(H0c1w2からH0c1w7)を、第2のバッファBUF2の少なくとも第1のバッファ行L21の対応する位置に移動するように、時間期間t0の直後の時間期間t1において実行され得る。並行して、第1のメモリSRAM1内の行アドレスR2にあるすべてのデータ項目を第1のバッファBUF1の第2のバッファ行L12に読み出すか、コピーするために、ステップS10'およびS20'が実行され得る。
【0111】
この実施形態では、第1のバッファBUF1および第2のバッファBUF2の各々は、行ごとに循環的にアドレス指定される少なくとも2つのバッファ行を含み得る。たとえば、コストを節約するために、第1のバッファBUF1および第2のバッファBUF2の各々は、行ごとに循環的にアドレス指定される2つのバッファ行のみを含むことができる。さらに、一実施形態では、第1のバッファBUF1および/または第2のバッファBUF2は、1つの読み書きサイクルにおいて古いデータの読取りおよび新しいデータの書込みをサポートするバッファであってもよい。
【0112】
図14に示されるように、時間期間t1において、第2のバッファBUF2の第2のバッファ行L22が少なくとも1つの第1のデータ項目(H0c1w6およびH0c1w7)を含む場合、第2のバッファBUF2の第1のバッファ行L21内の第1のデータ項目に対する第1のメモリSRAM1内のストレージ位置(H0c1w2からH0c1w5)は、第2のバッファBUF2の第2のバッファ行L22内の第1のデータ項目(H0c1w6およびH0c1w7)の第1のメモリSRAM1内のストレージ位置の前にある。
【0113】
図11および図15に示されるように、ステップS40は、第2のバッファBUF2の第1のバッファ行L21内のデータ項目(H0c1w2からH0c1w5)を、第2のメモリSRAM2内の対応するターゲット位置に記憶するために、時間期間t1の直後の時間期間t2中に実行され得る。並行して、第1のバッファBUF1の第2のバッファ行L12にあり、アクセスされるべきデータに属する第2のデータ項目(H0c1w8からH0c1w11)を、第2のバッファBUF2の第2のバッファ行L22に移動するためにステップS30'が実行され得、第2のバッファBUF2の少なくとも第2のバッファ行L22内の各第2のデータ項目(H0c1w8~H0c1w11)の対応する位置は、この第2のデータ項目に割り振られた第2のメモリSRAM2内のターゲット位置に依存する。並行して、第1のメモリSRAM1内の行アドレスR3にあるすべてのデータ項目を第1のバッファBUF1の第1のバッファ行L11に読み出すか、コピーするために、ステップS10およびS20がさらに実行され得る。
【0114】
この例では、時間期間t2の間に第2のバッファBUF2に移動した第2のデータ項目(H0c1w8からH0c1w11)は、第2のバッファBUF2の第2のバッファ行L22のみを占有する。
【0115】
図11および図16に示されるように、ステップS40'は、第2のバッファBUF2の第2のバッファ行L22内のデータ項目(H0c1w6からH0c1w11)を、第2のメモリSRAM2内の対応するターゲット位置に記憶するために、時間期間t2の直後の時間期間t3中に実行され得る。並行して、ステップS30は、第1のバッファBUF1の第1のバッファ行L11にあり、アクセスされるべきデータに属するデータ項目(H1c1w2からH1c1w7)を、第2のバッファBUF2の少なくとも第1のバッファ行L21に移動するために実行され得、ここで、新しいデータ項目H1c1w6およびH1c1w7は、第2のバッファBUF2の第2のバッファ行L22を占有する。そのような場合、新しいデータは、第2のバッファBUF2から古いデータを読み取った後、第2のバッファBUF2に書き込まれてもよく、第2のバッファBUF2が、1つの読み書きサイクル内での新しいデータの書込みとデータの読取りをサポートするバッファであってもよい。並行して、図16に示されるように、第1のメモリSRAM1内の行アドレスR4にあるすべてのデータ項目を第1のバッファBUF1の第2のバッファ行L12に読み出すか、コピーするために、ステップS10'およびS20'(図11には示さず)がさらに実行され得る。
【0116】
ステップS10およびS20またはステップS10'およびS20'を実行するために時間T1が必要であると仮定すると、ステップS30またはS30'を実行するために時間T2が必要であり、第1のメモリSRAM1のM個の行アドレスを処理するためには、ステップS30またはS30'を実行するために時間T3が必要であり、次いで、図7に示されるような方法で例示的な方法を実行する場合、少なくとも(M×T1+M×T2+M×T3)かかり、また、図12に示されるようなパイプライン化された方式で例示的な方法を実行する場合、(T1+T2+T3+max(T1,T2,T3)*(M-1))かかり、ここで、max()は最大値の取得を表す。通常、T1、T2、およびT3は1つのサイクルに等しくてよい。したがって、図7に示されるような方法で例示的な方法を実行する場合、少なくとも3Mサイクルかかり、図11に示されるようにパイプライン化された方式で例示的な方法を実行する場合、(M+2)サイクルかかる。パイプライン化された制御フローにより、コントローラCONの実行時間が大幅に縮小され得るため、システムの全体的なパフォーマンスが向上し、消費電力が削減され得る。
【0117】
図11および図12に示されるパイプライン化された制御フローは例であることが理解される。他のパイプライン化された制御フローもまた、実施形態における例示的な方法を実行するために採用されてよく、これは図11および図12の例に限定されない。
【0118】
実施形態における例示的な方法では、適切なハードウェア構造(第1のバッファBUF1、第2のバッファBUF2)および改善されたデータフロー制御(第1のメモリSRAM1->第1のバッファBUF1->第2のバッファBUF2->第2のメモリSRAM2および/または第2のメモリSRAM2->第1のバッファBUF1->第2のバッファBUF2->第1のメモリSRAM1)により、アクセスされるべきデータ部分は、予想されるデータ配置においてオンチップメモリにロードされたテンソルデータから直接取得され得る。したがって、メインプロセッサまたはコントローラの作業負荷が削減され得、オフチップメモリとオンチップメモリとの間のデータ交換/転送の頻度が減少し得、パイプライン化された方式により処理効率が向上し得、その結果、AIチップのパフォーマンスが改善され得、AIチップの消費電力が削減され得る。
【0119】
さらに、実施形態の例示的な方法では、第1のメモリSRAM1内のデータの1つの行がサイクルごとに処理されるため、適切なハードウェア構造および改善されたデータフロー制御を通じてパイプライン化されたプロセスがサポートされ得る。したがって、AIチップ内のデータアクセス効率が改善され得、AIチップのパフォーマンスが改善され得、AIチップの消費電力が削減され得る。
【0120】
別の実施形態では、上記のステップの前に、例示的な方法は、テンソルデータにアクセスする命令を受信するステップと、論理構造においてアクセスされるべき1つまたは複数のデータ項目と、第1の行アドレスと、論理構造においてアクセスされるべきデータ項目の第2のメモリSRAM2内のターゲット位置とを決定するために命令を解析するステップとをさらに含み得る。
【0121】
たとえば、コントローラCONは、I/Oデバイスを介してユーザによって入力された命令を受信するためのポート、または命令バスに接続するためのポートなどであり得る命令インターフェースを介して、テンソルデータおよび関連付けられるパラメータにアクセスする命令を受信し得る。
【0122】
たとえば、受信した命令のオペレーションコードは、完全なテンソルデータからデータの一部を取得するように指示し得る。したがって、命令のアドレスコードまたはパラメータは、外部メモリDDR内の完全なテンソルデータのストレージ位置、完全なテンソルデータの論理構造、完全なテンソルデータの論理構造においてアクセスされるべきデータの位置などのうちの1つまたは複数を指示し得る。
【0123】
たとえば、受信した命令のオペレーションコードはまた、別の完全なテンソルデータの一部として、第1のメモリSRAM1内のデータ項目(たとえば、畳み込み計算コアなどのシステム内の他のコンポーネントからのデータ出力)を構成するように指示し得る。したがって、命令のアドレスコードまたはパラメータは、第1のメモリSRAM1内のデータ項目のストレージ位置、別のテンソルデータの論理構造、別の完全なテンソルデータの論理構造においてアクセスされるべきデータの位置などのうちの1つまたは複数を指示し得る。
【0124】
次いで、コントローラCONは、受信した命令を解析してもよく、または命令のオペレーションコードに従ってさらなるプロセスの動作タイプおよび関連パラメータを決定するために、受信した命令を解析するように専用命令パーサに指示してもよい。
【0125】
したがって、コントローラCONは、外部メモリDDRまたは第1のメモリSRAM1のどのデータ項目がアクセスされるべきデータに属するか、アクセスされるべきデータの行アドレス(たとえば、上記の第1の行アドレス、第2の行アドレス、など)、アクセスされるべきデータ項目の第2のメモリSRAM2内のターゲット位置、などの1つまたは複数を決定し得る。
【0126】
たとえば、上述のように、コントローラCONが命令を実行するか、データ項目の第2のメモリSRAM2のターゲット位置として第2のメモリSRAM2内の第1の利用可能なストレージ領域を決定する命令を提供する場合、コントローラCONによって決定される情報は、アクセスされるべきデータにおけるデータ項目について、第2のメモリSRAM2内のターゲット位置などの情報を含む必要はない。
【0127】
さらに、受信した命令のオペレーションコードが完全なテンソルデータからデータの一部を取得するように指示する場合、実施形態の例示的な方法は、外部メモリDDRから第1のメモリSRAM1に完全なテンソルデータの少なくとも一部を読取りまたはロードすることをさらに含み得る。
【0128】
実施形態における例示的な方法のステップは、繰り返して(たとえば、図5から図7に示されるように)、またはパイプライン化された方式で(たとえば、図11に示されるように)実行され得る。
【0129】
さらに、受信された命令のオペレーションコードが、別の完全なテンソルデータの一部として第1のメモリSRAM1内のデータ項目を構成するように指示する場合、実施形態の例示的な方法は、第2のメモリSRAM2内のデータを外部メモリDDRに出力するステップをさらに含み得る。
【0130】
一実施形態では、受信された命令は、システムによってサポート可能なハードウェア命令であり得る。コントローラCONがハードウェア命令を受信した後、実施形態における例示的な方法のステップは、テンソルデータに効率的にアクセスするために、繰り返して(たとえば、図5から図7に示されるように)またはパイプライン化された方式で(たとえば、図11に示されるように)実行され得る。
【0131】
図17は、一実施形態におけるテンソルデータにアクセスするための例示的な装置を示している。例示的な装置は、第1のバッファBUF1、第2のバッファBUF2、およびコントローラCONを含み得、コントローラCONは、第1のメモリSRAM1、第2のメモリSRAM2、第1のバッファBUF1、および第2のバッファBUF2に接続され得る。
【0132】
一実施形態では、コントローラCONは、少なくとも実施形態の例示的な方法を実行するように、起動されるとあらかじめ定められた命令シーケンスを実行するように構成され得る。たとえば、コントローラCONは命令に基づいて、ならびに図3から図7、および図11に示される任意の制御フローに従って、実施形態における例示的な方法を実行するように構成され得る。
【0133】
様々な実施形態では、たとえば、AUチップの場合、コントローラCONは、GPU、ARMプロセッサ、およびFPGAに基づいて開発されたプロセッサまたはコントローラであってもよく、FPGAに基づいて開発されたRISCソフトプロセッサコアなど、オフチップメモリおよび/またはオンチップメモリへのアクセスを制御する専用チップ上のアクセスコントローラまたはデータ転送コントローラでもあってもよい。さらに、一実施形態におけるコントローラCONは、オフチップメモリおよび/またはオンチップメモリへのデータアクセスを独立して管理するように構成されてもよく、オフチップメモリおよび/またはオンチップメモリへのデータアクセスを管理するためにメインプロセッサを支援するか、メインプロセッサからの命令に応答するように構成されてもよい。
【0134】
第1のバッファBUF1および第2のバッファBUF2の各々は、キャッシュまたはスタティックランダムアクセスメモリであり得、そのデータアクセスレートは、第1のメモリSRAM1および第2のメモリSRAM2を含む高速ストレージシステムのデータアクセスレートと一致し得る。
【0135】
様々な実施形態では、第1のバッファBUF1は1つまたは複数のバッファ行を含み得、第2のバッファBUF2は2つ以上のバッファ行を含み得る。
【0136】
一実施形態では、第1のバッファBUF1および第2のバッファBUF2の各々は、効率的なデータアクセスを達成するために少なくとも2つのバッファ行を含み得る。
【0137】
一実施形態では、第1のバッファBUF1および第2のバッファBUF2の各々は、低コストのハードウェア構造を通じて効率的なデータアクセスを達成するために2つのバッファ行を含み得る。本実施形態では、第1のバッファBUF1および第2のバッファBUF2の少なくとも第2のバッファBUF2は、図16に示されるような可能な読み書きの競合を回避するために、1つの読み書きサイクル内での古いデータの読取りと新しいデータの書込みをサポートし得る。
【0138】
別の実施形態では、コストが許す場合、第1のバッファBUF1および第2のバッファBUF2の各々は、図16に示されるような可能な読み書きの競合を回避するために、3つ以上(たとえば、3つまたは4つ)のバッファ行を含み得る。
【0139】
さらに、第1のバッファBUF1および第2のバッファBUF2の各々は、ボーダレスストレージスペースを提供し、ストレージ制御を簡素化するために、バッファ行によって循環的にアドレス指定され得るバッファであり得る。
【0140】
一実施形態では、第1のバッファBUF1の各バッファ行の容量は、第1のメモリSRAM1内に同じ行アドレスを有する複数のストレージユニットの総容量(すなわち、第1のメモリSRAM1のストレージ幅)と同じであり得、また第2のバッファBUF2の各バッファ行の容量は、指定を簡素化し、制御ロジックの複雑さを軽減するために、第2のメモリSRAM2内に同じ行アドレスを有する複数のストレージユニットの総容量(すなわち、第2のメモリSRAM2のストレージ幅)と同じであり得る。
【0141】
様々な実施形態では、第1のバッファBUF1および第2のバッファBUF2は、図17における例示的な装置の外側または内側に構成され得る。たとえば、実施形態における例示的な装置は、第1のメモリSRAM1および第2のメモリSRAM2を含んでも含まなくてもよい。
【0142】
様々な実施形態では、第1のメモリSRAM1および第2のメモリSRAM2の各々は、2次元データへのアクセスをサポートするおよび/またはデータへの2次元アクセスをサポートするスタティックランダムアクセスストレージコンポーネント/モジュールまたは高速バッファコンポーネント/モジュールであり得る。たとえば、AIチップの場合、第1のメモリSRAM1および第2のメモリSRAM2の各々は、オンチップメモリの少なくとも一部を形成するために使用され得る任意の適切なタイプまたは形態のメモリであり得る。
【0143】
さらに、様々な実施形態では、第1のメモリSRAM1および第2のメモリSRAM2は、たとえば、図1または図17に示されるように別々に構成されてもよく、また、たとえば図2に示されるように、2次元データへのアクセスをサポートし得る同じストレージコンポーネント/モジュールの2つの異なる部分であってもよく、そのようなストレージコンポーネント/モジュールは、2次元データへのアクセスおよび/またはデータへの2次元アクセスをサポートするために、複数の1次元スタティックランダムアクセスメモリあるいは1つまたは複数の2次元メモリを含み得る。
【0144】
一実施形態では、たとえば、AIチップの場合、第1のバッファBUF1、第2のバッファBUF2、コントローラCON、第1のメモリSRAM1、および第2のメモリSRAM2は、システムオンチップ(SoC)内のストレージシステムの少なくとも一部を形成するために、1つのチップ上で具現化され得る。
【0145】
実施形態における例示的な装置では、第1のメモリSRAM1内の1つの行のデータが各サイクル内で処理され、その結果、ハードウェアのデータアライメントの要件を満たしながら、第1のメモリSRAM1内でアクセスされるべきデータ項目が簡単かつ効率的に取得され得る。次いで、アクセスされるべきデータ項目は、所望の配置で第2のメモリSRAM2に記憶され得、その結果、後続のプロセス中に、たとえば、畳み込み計算を実行するための畳み込み計算コアは、予想されるデータ項目を効率的かつ正確に取得し得、また少なくとも第1のメモリSRAM1にすでにロードされているデータ項目の処理中は、外部メモリDDRと内部高速ストレージシステム(第1のメモリSRAM1および第2のメモリSRAM2を含む)との間のデータ交換/転送は無視されてよく、その結果、AIチップのパフォーマンスが改善され得、AIチップの消費電力が削減され得る。
【0146】
さらに、複数の部分テンソルデータをマージまたはスプライスする場合、構成されるべきターゲットテンソルの構造に応じて第2のメモリSRAM2内のデータ項目のターゲット位置が決定され得、次いで、特徴データのマージまたはスプライシングは、実施形態における例示的な方法によって直接実装され得る。したがって、少なくともコントローラCONによってテンソルデータをマージまたはスプライシングするための動作を省略または単純化し得、またコントローラCONの作業負荷を削減し得、その結果、コントローラCONが他のより多くの制御およびプロセスのために機能し得る。したがって、AIチップのパフォーマンスが向上され得る。
【0147】
本実施形態におけるテンソルデータにアクセスするための例示的な装置は、図17の例に限定されないことが理解される。たとえば、一実施形態における例示的な装置はまた、オンチップコンポーネント間のより効率的な相互接続を可能にし、より多くのチップスペースを節約するために、オンチップコンポーネント間の相互接続のためのクロスバーおよび/またはマルチプレクサなどを含み得る。たとえば、一実施形態における例示的な装置はまた、命令タイミングを制御するためのタイミングコントローラ、命令割込みを制御するための割込みコントローラなどの他のコンポーネント/モジュール/回路/ユニット/要素を含み得、これらは上記の第1のバッファBUF1と同じチップ上で具現化され得る。たとえば、一実施形態における例示的な装置はまた、データアクセスに関連する命令を受信および解析するための命令インターフェースおよび/または命令解析回路/モジュールを含み得る。
【0148】
上記の方法および装置に加えて、本開示の実施形態は、コンピュータプログラム命令を備えるコンピュータプログラム製品であってもよい。コンピュータプログラム命令は、プロセッサによって実行されている場合、プロセッサに本開示の様々な実施形態による上記の方法のステップを実行させる。
【0149】
コンピュータプログラム製品は、本開示の実施形態の動作を実行するためのプログラムコードを1つまたは複数のプログラミング言語の任意の組合せで記述することができ、前記プログラミング言語は、Java(登録商標)、C++などのオブジェクト指向プログラミング言語、および「C」言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む。プログラムコードは、ユーザコンピューティングデバイス上で完全に実行されてもよく、ユーザデバイス上で部分的に実行されてもよく、スタンドアロンソフトウェアパッケージとして実行されてもよく、ユーザコンピューティングデバイス上で部分的に実行されてもよく、リモートコンピューティングデバイス上で部分的に実行されてもよく、リモートコンピューティングデバイスまたはサーバ上で完全に実行されてもよい。
【0150】
さらに、本開示の実施形態は、コンピュータプログラム命令が記憶されたコンピュータ可読ストレージ媒体であってもよい。コンピュータプログラム命令は、プロセッサまたはコントローラ(たとえば、AIチップ内のメインプロセッサまたはコントローラ、あるいはオンチップストレージシステムのアクセスコントローラ)によって実行されている場合、プロセッサまたはコントローラに本開示の様々な実施形態における上記の方法のステップを実行させる。
【0151】
コンピュータ可読ストレージ媒体は、1つまたは複数の可読媒体の任意の組合せを使用し得る。可読媒体は、可読信号媒体または可読ストレージ媒体であり得る。コンピュータ可読ストレージ媒体は、電気、磁気、光学、電磁気、赤外線、または半導体、あるいは上記の任意の組合せのシステム、装置、またはデバイスを含み得るが、これらに限定されない。可読ストレージ媒体のその他の例(非網羅的なリスト)は、1つまたは複数のワイヤ、ポータブルディスク、ハードディスク、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、消去可能なプログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバー、ポータブルコンパクトディスク読取り専用メモリ(CD-ROM)、光学ストレージデバイス、磁気ストレージデバイス、あるいは上記の適切な組合せを有する電気接続を含む。
【0152】
本開示は、実施形態に関連して上述されている。しかしながら、本開示で言及される利点、優位性、および効果などは一例であり、本発明を限定することを意図するものではなく、これらの利点、優位性、効果などは、本開示の実施形態に不可欠とは見なされないことが理解される。さらに、前述の開示の詳細は、例示および理解を容易にするためにすぎず、限定のためではなく、上記の詳細は、上述の詳細において実装されるアプリケーションを制限しない。
【0153】
本開示で言及されるデバイス、装置、機器、システムのブロック図は、例示的な例であり、接続、配置、および構成がブロック図に示される方法で行われなければならないことを要求または暗示することが意図されるものではない。これらのデバイス、装置、機器、システムは、任意の方法で接続、配置、または構成され得る。「含む(including)」、「備える(comprising)」、「有する(having)」などの用語は非限定的な言葉であり、「含むが、これらに限定されない(including, but not limited to)」を意味し、交換可能に使用され得る。本明細書で使用される「または(or)」および「および(and)」という用語は、「および/または(and/or)」という用語を指し、文脈が明らかにそうでないことを示さない限り、交換可能に使用され得る。本明細書で使用される「~など(such as)」という用語は、「~などであるがこれに限定されない(such as but not limited to)」という語句を指し、交換可能に使用される。
【0154】
「第1の(first)」および「第2の(second)」などの数量詞なしの修飾語句は、順序、位置関係、重要度、優先度などを強調するのではなく、異なる要素、コンポーネント、回路、モジュール、装置、またはステップを区別するために使用され得る。たとえば、「第1のメモリSRAM1(the first memory SRAM1)」は「第2のメモリSRAM1(the second memory SRAM1)」とも呼ばれ得、「第2のメモリSRAM2(the second memory SRAM2)」は「第1のメモリSRAM2(the first memory SRAM2)」とも呼ばれ得る。たとえば、「第3の行アドレス(the third row address)」は「第1の行アドレス(the first row address)」とも呼ばれ得、「第4の行アドレス(the fourth row address)」は「第2の行アドレス(the second row address)」とも呼ばれ得る。言い換えれば、「第1の(first)」および「第2の(second)」などの数量詞のない修飾語句は交換可能であり得る。
【0155】
「第1のもの(the first one)」および「第2のもの(the second one)」などの数量詞のある修飾語句は、異なる要素、コンポーネント、回路、モジュール、装置、またはステップなどの順序、位置関係、重要性、優先度などを強調するために使用され得る。たとえば、「第1のものの利用可能な位置(the first one available location)」は、この位置の前のすべての位置が利用できないことを意味し得、他の位置と比較して、この位置は最初に利用可能な位置であるか、この位置はストレージスペースまたは検索順序の先頭である。たとえば、「第2のものの利用可能な位置(the second one available location)」は、この利用可能な位置の前に1つの利用可能な位置があることを意味し得る。言い換えれば、「第1のもの(the first one)」および「第2のもの(the second one)」などの数量詞のない修飾語句は交換できない場合がある。
【0156】
さらに、「1つまたは複数(one or more)」は1つまたは2つまたは3つ以上を示し得、「2つ以上(two or more)」は2つまたは3つ以上を意味し得る。個々に使用される「複数(A plurality of)」または「複数(more)」は、「2つ以上(two or more)」または「2つを超える(abovet wo)」を示し得る。
【0157】
また、本開示の装置、機器、および方法において、各コンポーネントまたはステップは分解および/または再結合され得ることも理解される。これらの分解および/または再結合は、本開示の同等物と見なされるべきである。
【0158】
開示された態様の上記の説明は、アプリケーションの作成または使用を可能にするために提供される。これらの態様に様々な変更を加えられ得る。したがって、本開示は、本明細書に示される態様に限定されることが意図されるものではなく、本明細書に開示される原理および新規な特徴と一致する最も広い範囲を提示するものである。
【0159】
上記の説明は、例示および説明のために提供されたものである。さらに、本説明は、本開示の実施形態を本明細書に開示された形態に限定することが意図されるものではない。様々な例示的な態様および実施形態が上記で議論されてきたが、それらのいくつかの変形、修正、変更、追加、およびサブコンビネーションが認識され得る。
【符号の説明】
【0160】
BUF1 第1のバッファ
BUF2 第2のバッファ
CON コントローラ
DDR メモリ
MEM オンチップメモリシステム
SRAM1 第1のメモリ
SRAM2 第2のメモリ
R0 行アドレス
Rm 行アドレス
Rn 行アドレス
C0 列アドレス
Cp 列アドレス
Cq 列アドレス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17