(57)【要約】【課題】各分割演算のデータ量がメモリユニットの容量より小さくなるようにデータ演算を分割するためのデータ処理のシステムおよび方法を提供する。【解決手段】データ処理のシステムおよび方法が提供される。この方法は、一連の演算によって処理されるべき入力データを受け取ることと、一連の演算から第1の演算を識別することと、一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択することと、グループ化された演算の入力データの一部を処理することとを含む。一連のデータ処理の効率は、データ演算の入力データおよび出力データが両方ともメモリユニットに記憶されることを確実にすることによって改善され得る。【選択図】図4
2019169150.tif 000002
【特許請求の範囲】
【請求項１】
データ処理の方法であって、
(a)一連の演算によって処理されるべき入力データを受け取るステップと、
(b)前記一連の演算から第1の演算を識別するステップであって、前記第1の演算は、メモリユニットの容量を超える入力データおよび出力データの量を有する、ステップと、
(c)前記一連の演算から、前記第1の演算とグループ化されるべき少なくとも1つの第2の演算を、前記グループ化された演算の入力データおよび出力データの量ならびに前記メモリユニットの前記容量に少なくとも一部は基づき、選択するステップと、
(d)前記グループ化された演算の前記入力データの一部を処理するステップであって、前記入力データの前記一部は前記グループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、ステップとを含む方法。
【請求項２】
前記第1の演算の前記出力データの量は、前記第1の演算の前記入力データの量と前記第1の演算の1つもしくは複数のパラメータとに基づき、または前記グループ化された演算の前記入力データの量と前記グループ化された演算の1つもしくは複数のパラメータとに基づき、決定される請求項1に記載の方法。
【請求項３】
(c)は、前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えているかどうかを決定するステップと、前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えなくなるまで前記少なくとも1つの第2の演算において演算の数を徐々に増やすステップとを含む請求項1に記載の方法。
【請求項４】
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記出力データを外部メモリに記憶するステップをさらに含むか、または
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記入力データを外部メモリに記憶するステップをさらに含むか、または
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記入力データおよび前記出力データを外部メモリに記憶するステップをさらに含む請求項3に記載の方法。
【請求項５】
前記グループ化された演算の前記入力データの一部分は、前記入力データのN個の等しい部分のうちの1つと限界データとを含み、Nは2以上の整数であり、
(c)は、Nの値が最小値となるように前記少なくとも1つの第2の演算を決定するステップを含むか、または
(d)は、少なくともN回実行されるか、または前記グループ化された演算の前記入力データの一部分は、前記グループ化された演算の前記入力データの別の部分の少なくとも一部を含むか、または、Nは、少なくとも一部は、(1)前記グループ化された演算の前記入力データおよび前記出力データの前記量、(2)前記メモリユニットの前記容量、ならびに(3)前記グループ化された演算の中間データ結果の量に基づき決定される請求項1に記載の方法。
【請求項６】
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記出力データを外部メモリに記憶するステップをさらに含み、
(d)は、前記グループ化された演算の前記入力データおよび前記中間データ結果を前記メモリユニットに記憶するステップを含む請求項1に記載の方法。
【請求項７】
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記入力データを外部メモリに記憶するステップをさらに含み、
(d)は、前記外部メモリから前記グループ化された演算の前記入力データの一部分を受け取るステップ、または前記グループ化された演算の前記中間データ結果および前記出力データを前記メモリユニットに記憶するステップ、または前記グループ化された演算の前記入力データ、前記中間データ結果、および前記出力データを前記メモリユニットに記憶するステップを含む請求項1に記載の方法。
【請求項８】
(e)前記グループ化された演算の前記出力データの一部を取得し、前記グループ化された演算の前記出力データを取得するように前記グループ化された演算の前記出力データの各部分をアセンブルするステップをさらに含む請求項1に記載の方法。
【請求項９】
データ処理のシステムであって、
1つまたは複数のプロセッサと、
少なくとも1つのメモリユニットと、
命令が記憶されている1つまたは複数のメモリであって、前記命令は前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
(a)一連の演算によって処理されるべき入力データを受け取ることと、
(b)前記一連の演算から第1の演算を識別することであって、前記第1の演算は前記メモリユニットの容量を超える入力データおよび出力データの量を有する、識別することと、
(c)前記一連の演算から、前記第1の演算とグループ化されるべき少なくとも1つの第2の演算を、前記グループ化された演算の入力データおよび出力データの量ならびに前記メモリユニットの前記容量に少なくとも一部は基づき、選択することであって、前記第1の演算の前記出力データの量は、前記第1の演算の前記入力データの量と前記第1の演算の1つもしくは複数のパラメータとに基づき、または前記グループ化された演算の前記入力データの量と前記グループ化された演算の1つもしくは複数のパラメータとに基づき、決定される、選択することと、
(d)前記グループ化された演算の前記入力データの一部を処理することであって、前記入力データの前記一部は前記グループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理することとを行わせる、メモリとを備えるシステム。
【請求項１０】
(c)は、前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えているかどうかを決定するステップと、前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えなくなるまで前記少なくとも1つの第2の演算において演算の数を徐々に増やすステップとを含む請求項9に記載のシステム。
【請求項１１】
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記出力データを外部メモリに記憶するステップをさらに含むか、または
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記入力データを外部メモリに記憶するステップをさらに含むか、または
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記入力データおよび前記出力データを外部メモリに記憶するステップをさらに含む請求項10に記載のシステム。
【請求項１２】
前記グループ化された演算の前記入力データの一部分は、前記入力データのN個の等しい部分のうちの1つと限界データとを含み、Nは2以上の整数であり、
(c)は、Nの値が最小値となるように前記少なくとも1つの第2の演算を決定するステップを含むか、または(d)は、少なくともN回実行されるか、または前記グループ化された演算の前記入力データの一部分は、前記グループ化された演算の前記入力データの別の部分の少なくとも一部を含むか、または、Nは、少なくとも一部は、(1)前記グループ化された演算の前記入力データおよび前記出力データの前記量、(2)前記メモリユニットの前記容量、ならびに(3)前記グループ化された演算の中間データ結果の量に基づき決定される請求項9に記載のシステム。
【請求項１３】
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記出力データを外部メモリに記憶するステップをさらに含み、(d)は、前記グループ化された演算の前記入力データおよび前記中間データ結果を前記メモリユニットに記憶するステップを含むか、または
(c)は、(1)前記グループ化された演算における演算の数が前記一連の演算における演算の数に等しく、(2)前記グループ化された演算の前記入力データおよび前記出力データの前記量が前記メモリユニットの前記容量を超えたときに前記グループ化された演算の前記入力データを外部メモリに記憶するステップをさらに含み、(d)は、前記外部メモリから前記グループ化された演算の前記入力データの一部分を受け取るステップを含むか、または(d)は、前記グループ化された演算の前記中間データ結果および前記出力データを前記メモリユニットに記憶するステップを含むか、または(d)は、前記グループ化された演算の前記入力データ、前記中間データ結果、および前記出力データを前記メモリユニットに記憶するステップを含む請求項9に記載のシステム。
【請求項１４】
前記1つまたは複数のメモリには、前記1つまたは複数のプロセッサによって実行されたときに前記1つまたは複数のプロセッサに(e)前記グループ化された演算の前記出力データの一部を取得することと、前記グループ化された演算の前記出力データを取得するように前記グループ化された演算の前記出力データの各部分をアセンブルすることとをさらに行わせる命令が記憶されている請求項9に記載のシステム。
【請求項１５】
1つまたは複数のコンピュータプロセッサによって実行されると、データ処理の方法を遂行する機械実行可能コードを含む非一時的コンピュータ可読媒体であって、
(a)一連の演算によって処理されるべき入力データを受け取るためのプログラム命令と、
(b)前記一連の演算から第1の演算を識別することであって、前記第1の演算は、メモリユニットの容量を超える入力データおよび出力データの量を有する、識別することを行うためのプログラム命令と、
(c)前記一連の演算から、前記第1の演算とグループ化されるべき少なくとも1つの第2の演算を、前記グループ化された演算の入力データおよび出力データの量ならびに前記メモリユニットの前記容量に少なくとも一部は基づき、選択するためのプログラム命令と、
(d)前記グループ化された演算の前記入力データの一部を処理することであって、前記入力データの前記一部は前記グループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理することを行うためのプログラム命令とを含む非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理のシステムおよび方法に関する。
【背景技術】
【０００２】
畳み込みニューラルネットワーク(CNN)などの、ディープコンピューティングフレームワーク(Deep computing framework)は、パターン認識、信号処理、時系列分析、および同様のものを含む、多くの応用分野において使用されている。畳み込みニューラルネットワークアルゴリズムの発展とともに、CNNを利用できるアプリケーションシナリオが増えつつある。CNNのいくつかのアプリケーションシナリオは、電力消費量およびコストに敏感であり得る。たとえば、組み込みデバイスのスタティックランダムアクセスメモリ(SRAM)の容量は、組み込みデバイスのコストを下げるために、制限され得る。
【０００３】
しかしながら、組み込みデバイスの出力精度を確実にするために、データ量がSRAMの容量を超える入力データ(たとえば、高解像度の画像)が供給される可能性がある。演算を複数の分割演算に分割することを、各分割演算に対するデータがSRAMの容量よりも小さくなるよう行うことによって演算を実装する方法およびシステムがあれば有益であろう。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Krizhevsky, A.、Sutskever, I.、およびHinton, G. E.(3012)「Imagenet classification with deep convolutional neural networks」、Advances in neural information processing systems、1097〜1105頁
【発明の概要】
【発明が解決しようとする課題】
【０００５】
各分割演算のデータ量がメモリユニット(たとえば、組み込みデバイスのオンチップメモリ)の容量より小さくなるようにデータ演算を分割するためのデータ処理のシステムおよび方法が提供される。いくつかの場合において、データ演算の入力データおよび出力データの量は、データ処理の出力精度を保証するためにメモリユニットの容量より大きくできる。入力データおよび/または出力データは外部メモリ記憶装置内に用意されなければならず、このことはデータ処理の計算効率を低下させ得る。本開示のシステムおよび方法は、入力データおよび出力データの量がメモリユニットのサイズを超えるデータ演算を分割するための解決方法を提供する。各分割演算は、メモリユニットのサイズを超えない入力データおよび出力データの量を有し、それにより、各分割演算の入力データおよび出力データは両方ともメモリユニット内に記憶され処理される。
【０００６】
本開示のシステムおよび方法は、一連の演算が逐次実行され、1つまたは複数の演算の入力データおよび出力データの量がメモリユニットの容量を超えるデータ処理の効率を改善するために使用することができる。入力データおよび出力データの量がメモリユニットの容量を超える演算は、1つまたは複数の他の演算とグループ化され、それにより、グループ化された演算の入力データおよび出力データの量がメモリユニットのサイズを超えないようにすることができる。グループ化された演算は分割され、各分割演算はメモリユニットの容量よりも小さいデータ量を有するようにできる。各分割演算は、グループ化された演算の処理結果の一部を生成することができ、グループ化された演算の処理結果は、すべての分割演算が実行されてから取得され得る。
【課題を解決するための手段】
【０００７】
本開示の一態様は、データ処理の一方法を提供する。この方法は、(a)一連の演算によって処理されるべき入力データを受け取るステップと、(b)一連の演算から第1の演算を識別するステップであって、第1の演算は、メモリユニットの容量を超える入力データおよび出力データの量を有する、識別するステップと、(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択するステップと、(d)グループ化された演算の入力データの一部を処理するステップであって、入力データの一部は、グループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理するステップとを含むことができる。
【０００８】
いくつかの実施形態において、これらの一連の演算は、一連の畳み込み演算を含むことができる。代替的に、これらの一連の演算は、一連のテンソル演算を含むことができる。たとえば、一連の演算は、一連のプーリング、一連のアップスケーリング、または一連の正規化線形関数(ReLU)を含むことができる。いくつかの実施形態において、メモリユニットは、スタティックランダムアクセスメモリ(SRAM)を備えることができる。
【０００９】
いくつかの実施形態において、第1の演算の出力データの量は、第1の演算の入力データの量と第1の演算の1つまたは複数のパラメータとに基づき決定され得る。いくつかの実施形態において、グループ化された演算の出力データの量は、グループ化された演算の入力データの量とグループ化された演算の1つまたは複数のパラメータとに基づき決定され得る。いくつかの実施形態において、少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含むことができる。いくつかの場合において、少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算を含むことができる。少なくとも1つの第2の演算は、第1の演算に直接後続する一連の演算からの演算を含むことができる。少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含むことができる。
【００１０】
いくつかの実施形態において、処理(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定するステップを含むことができる。いくつかの場合において、処理(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすステップを含むことができる。たとえば、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するステップをさらに含むことができる。たとえば、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するステップをさらに含むことができる。たとえば、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データおよび出力データを外部メモリに記憶するステップをさらに含むことができる。
【００１１】
いくつかの実施形態において、グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データ(marginal data)とを含むことができ、Nは2以上の整数である。いくつかの場合において、処理(c)は、Nの値が最小値となるように少なくとも1つの第2の演算を決定するステップを含むことができる。処理(d)は、少なくともN回実行され得る。グループ化された演算の入力データの一部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含み得る。いくつかの場合において、Nは、少なくとも一部は、(1)グループ化された演算の入力データおよび出力データの量、(2)メモリユニットの容量、ならびに(3)グループ化された演算の中間データ結果の量に基づき決定され得る。
【００１２】
いくつかの実施形態において、グループ化された演算の入力データ、中間データ結果、および出力データは、メモリユニットの異なるスライスに記憶され得る。
【００１３】
いくつかの実施形態において、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するステップをさらに含むことができる。処理(d)は、グループ化された演算の入力データおよび中間データ結果をメモリユニットに記憶するステップを含むことができる。
【００１４】
いくつかの実施形態において、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するステップをさらに含むことができる。処理(d)は、外部メモリからグループ化された演算の入力データの一部分を受け取るステップを含むことができる。処理(d)は、グループ化された演算の中間データ結果および出力データをメモリユニットに記憶するステップを含むことができる。
【００１５】
いくつかの実施形態において、処理(d)は、グループ化された演算の入力データ、中間データ結果、および出力データをメモリユニットに記憶するステップを含むことができる。いくつかの実施形態において、この方法は、(e)グループ化された演算の出力データの一部を取得し、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルするステップをさらに含むことができる。
【００１６】
本開示の別の態様は、データ処理のシステムを提供する。システムは、1つまたは複数のプロセッサと、少なくとも1つのメモリユニットと、命令が記憶されている1つまたは複数のメモリであって、命令は1つまたは複数のプロセッサによって実行されたときに1つまたは複数のプロセッサに(a)一連の演算によって処理されるべき入力データを受け取り、(b)一連の演算から第1の演算を識別し、第1の演算はメモリユニットの容量を超える入力データおよび出力データの量を有し、(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき選択し、(d)グループ化された演算の入力データの一部を処理し、入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、ことを行わせる、メモリとを備えることができる。
【００１７】
いくつかの実施形態において、これらの一連の演算は、一連の畳み込み演算を含むことができる。代替的に、これらの一連の演算は、一連のテンソル演算を含むことができる。たとえば、一連の演算は、一連のプーリング、一連のアップスケーリング、または一連の正規化線形関数(ReLU)を含むことができる。いくつかの実施形態において、メモリユニットは、スタティックランダムアクセスメモリ(SRAM)を備えることができる。
【００１８】
いくつかの実施形態において、第1の演算の出力データの量は、第1の演算の入力データの量と第1の演算の1つまたは複数のパラメータとに基づき決定され得る。いくつかの実施形態において、グループ化された演算の出力データの量は、グループ化された演算の入力データの量とグループ化された演算の1つまたは複数のパラメータとに基づき決定され得る。いくつかの実施形態において、少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含むことができる。いくつかの場合において、少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算を含むことができる。少なくとも1つの第2の演算は、第1の演算に直接後続する一連の演算からの演算を含むことができる。少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含むことができる。
【００１９】
いくつかの実施形態において、処理(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定することを含むことができる。いくつかの場合において、処理(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすことを含むことができる。たとえば、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶することをさらに含むことができる。たとえば、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶することをさらに含むことができる。たとえば、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データおよび出力データを外部メモリに記憶することをさらに含むことができる。
【００２０】
いくつかの実施形態において、グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含むことができ、Nは2以上の整数である。いくつかの場合において、処理(c)は、Nの値が最小値となるように少なくとも1つの第2の演算を決定することを含むことができる。処理(d)は、少なくともN回実行され得る。グループ化された演算の入力データの一部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含み得る。いくつかの場合において、Nは、少なくとも一部は、(1)グループ化された演算の入力データおよび出力データの量、(2)メモリユニットの容量、ならびに(3)グループ化された演算の中間データ結果の量に基づき決定され得る。
【００２１】
いくつかの実施形態において、グループ化された演算の入力データ、中間データ結果、および出力データは、メモリユニットの異なるスライスに記憶され得る。
【００２２】
いくつかの実施形態において、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶することをさらに含むことができる。処理(d)は、グループ化された演算の入力データおよび中間データ結果をメモリユニットに記憶することを含むことができる。
【００２３】
いくつかの実施形態において、処理(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶することをさらに含むことができる。処理(d)は、外部メモリからグループ化された演算の入力データの一部分を受け取ることを含むことができる。処理(d)は、グループ化された演算の中間データ結果および出力データをメモリユニットに記憶することを含むことができる。
【００２４】
いくつかの実施形態において、処理(d)は、グループ化された演算の入力データ、中間データ結果、および出力データをメモリユニットに記憶することを含むことができる。いくつかの実施形態において、1つまたは複数のメモリには、1つまたは複数のプロセッサによって実行されると1つまたは複数のプロセッサに(e)グループ化された演算の出力データの一部を取得することと、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルすることとをさらに行わせる命令が記憶されている。
【００２５】
本開示のさらなる態様は、1つまたは複数のコンピュータプロセッサによって実行されると、データ処理の方法を遂行する機械実行可能コードを含む非一時的コンピュータ可読媒体を提供する。非一時的コンピュータ可読媒体は、(a)一連の演算によって処理されるべき入力データを受け取るためのプログラム命令と、(b)一連の演算から第1の演算を識別することであって、第1の演算は、メモリユニットの容量を超える入力データおよび出力データの量を有する、識別することを行うためのプログラム命令と、(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択するためのプログラム命令と、(d)グループ化された演算の入力データの一部を処理することであって、入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理することを行うためのプログラム命令とを含むことができる。
【００２６】
いくつかの実施形態において、これらの一連の演算は、一連の畳み込み演算を含むことができる。代替的に、これらの一連の演算は、一連のテンソル演算を含むことができる。たとえば、一連の演算は、一連のプーリング、一連のアップスケーリング、または一連の正規化線形関数(ReLU)を含むことができる。いくつかの実施形態において、メモリユニットは、スタティックランダムアクセスメモリ(SRAM)を備えることができる。
【００２７】
いくつかの実施形態において、第1の演算の出力データの量は、第1の演算の入力データの量と第1の演算の1つまたは複数のパラメータとに基づき決定され得る。いくつかの実施形態において、グループ化された演算の出力データの量は、グループ化された演算の入力データの量とグループ化された演算の1つまたは複数のパラメータとに基づき決定され得る。いくつかの実施形態において、少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含むことができる。いくつかの場合において、少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算を含むことができる。少なくとも1つの第2の演算は、第1の演算に直接後続する一連の演算からの演算を含むことができる。少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含むことができる。
【００２８】
いくつかの実施形態において、(c)のためのプログラム命令は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定するためのプログラム命令を含むことができる。いくつかの場合において、(c)のためのプログラム命令は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすためのプログラム命令を含むことができる。たとえば、(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するためのプログラム命令をさらに含むことができる。たとえば、(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するためのプログラム命令をさらに含むことができる。たとえば、(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データおよび出力データを外部メモリに記憶するためのプログラム命令をさらに含むことができる。
【００２９】
いくつかの実施形態において、グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含むことができ、Nは2以上の整数である。いくつかの場合において、(c)のためのプログラム命令は、Nの値が最小値となるように少なくとも1つの第2の演算を決定するためのプログラム命令を含むことができる。(d)のためのプログラム命令は、少なくともN回実行され得る。グループ化された演算の入力データの一部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含み得る。いくつかの場合において、Nは、少なくとも一部は、(1)グループ化された演算の入力データおよび出力データの量、(2)メモリユニットの容量、ならびに(3)グループ化された演算の中間データ結果の量に基づき決定され得る。
【００３０】
いくつかの実施形態において、グループ化された演算の入力データ、中間データ結果、および出力データは、メモリユニットの異なるスライスに記憶され得る。
【００３１】
いくつかの実施形態において、(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するためのプログラム命令をさらに含むことができる。(d)のためのプログラム命令は、グループ化された演算の入力データおよび中間データ結果をメモリユニットに記憶するためのプログラム命令を含むことができる。
【００３２】
いくつかの実施形態において、(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するためのプログラム命令をさらに含むことができる。(d)のためのプログラム命令は、外部メモリからグループ化された演算の入力データの一部分を受け取るためのプログラム命令を含むことができる。(d)のためのプログラム命令は、グループ化された演算の中間データ結果および出力データをメモリユニットに記憶するためのプログラム命令を含むことができる。
【００３３】
いくつかの実施形態において、(d)のためのプログラム命令は、グループ化された演算の入力データ、中間データ結果、および出力データをメモリユニットに記憶するためのプログラム命令を含むことができる。いくつかの実施形態において、非一時的コンピュータ可読媒体は、(e)グループ化された演算の出力データの一部を取得し、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルするためのプログラム命令をさらに含むことができる。
【００３４】
別の態様において、本出願は次のものに関係する。
【００３５】
1.データ処理の方法であって、
(a)一連の演算によって処理されるべき入力データを受け取るステップと、
(b)一連の演算から第1の演算を識別するステップであって、第1の演算は、メモリユニットの容量を超える入力データおよび出力データの量を有する、識別するステップと、
(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択するステップと、
(d)グループ化された演算の入力データの一部を処理するステップであって、入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理するステップとを含む方法。
【００３６】
2.一連の演算は一連の畳み込み演算を含む項目1に記載の方法。
【００３７】
3.一連の演算は一連のテンソル演算を含む項目1に記載の方法。
【００３８】
4.一連の演算は一連のプーリングを含む項目3に記載の方法。
【００３９】
5.一連の演算は一連のアップスケーリングを含む項目3に記載の方法。
【００４０】
6.一連の演算は一連の正規化線形関数(ReLU)を含む項目3に記載の方法。
【００４１】
7.メモリユニットは、スタティックランダムアクセスメモリ(SRAM)を備える項目1に記載の方法。
【００４２】
8.第1の演算の出力データの量は、第1の演算の入力データの量と第1の演算の1つまたは複数のパラメータとに基づき決定される項目1に記載の方法。
【００４３】
9.グループ化された演算の出力データの量は、グループ化された演算の入力データの量とグループ化された演算の1つまたは複数のパラメータとに基づき決定される項目1に記載の方法。
【００４４】
10.少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含む項目1に記載の方法。
【００４５】
11.少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算を含む項目10に記載の方法。
【００４６】
12.少なくとも1つの第2の演算は、第1の演算に直接後続する一連の演算からの演算を含む項目10に記載の方法。
【００４７】
13.少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含む項目10に記載の方法。
【００４８】
14.(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定するステップを含む項目1に記載の方法。
【００４９】
15.(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすステップを含む項目14に記載の方法。
【００５０】
16.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するステップをさらに含む項目15に記載の方法。
【００５１】
17.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するステップをさらに含む項目15に記載の方法。
【００５２】
18.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データおよび出力データを外部メモリに記憶するステップをさらに含む項目15に記載の方法。
【００５３】
19.グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含み、Nは2以上の整数である、項目1に記載の方法。
【００５４】
20.(c)は、Nの値が最小値となるように少なくとも1つの第2の演算を決定するステップを含む項目19に記載の方法。
【００５５】
21.(d)は、少なくともN回実行される項目19に記載の方法。
【００５６】
22.グループ化された演算の入力データの一部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含む項目19に記載の方法。
【００５７】
23.Nは、少なくとも一部は、(1)グループ化された演算の入力データおよび出力データの量、(2)メモリユニットの容量、ならびに(3)グループ化された演算の中間データ結果の量に基づき決定される項目19に記載の方法。
【００５８】
24.グループ化された演算の入力データ、中間データ結果、および出力データは、メモリユニットの異なるスライスに記憶される項目1に記載の方法。
【００５９】
25.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するステップをさらに含む項目1に記載の方法。
【００６０】
26.(d)は、グループ化された演算の入力データおよび中間データ結果をメモリユニットに記憶するステップを含む項目25に記載の方法。
【００６１】
27.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するステップをさらに含む項目1に記載の方法。
【００６２】
28.(d)は、外部メモリからグループ化された演算の入力データの一部分を受け取るステップを含む項目27に記載の方法。
【００６３】
29.(d)は、グループ化された演算の中間データ結果および出力データをメモリユニットに記憶するステップを含む項目27に記載の方法。
【００６４】
30.(d)は、グループ化された演算の入力データ、中間データ結果、および出力データをメモリユニットに記憶するステップを含む項目1に記載の方法。
【００６５】
31.(e)グループ化された演算の出力データの一部を取得し、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルするステップをさらに含む項目1に記載の方法。
【００６６】
32.データ処理のシステムであって、
1つまたは複数のプロセッサと、
少なくとも1つのメモリユニットと、
命令が記憶されている1つまたは複数のメモリとを備え、命令は1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、
(a)一連の演算によって処理されるべき入力データを受け取ることと、
(b)一連の演算から第1の演算を識別することであって、第1の演算はメモリユニットの容量を超える入力データおよび出力データの量を有する、識別することと、
(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択することと、
(d)グループ化された演算の入力データの一部を処理することであって、入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理することとを行わせる、システム。
【００６７】
33.一連の演算は一連の畳み込み演算を含む項目32に記載のシステム。
【００６８】
34.一連の演算は一連のテンソル演算を含む項目32に記載のシステム。
【００６９】
35.一連の演算は一連のプーリングを含む項目34に記載のシステム。
【００７０】
36.一連の演算は一連のアップスケーリングを含む項目34に記載のシステム。
【００７１】
37.一連の演算は一連の正規化線形関数(ReLU)を含む項目34に記載のシステム。
【００７２】
38.メモリユニットは、スタティックランダムアクセスメモリ(SRAM)を備える項目32に記載のシステム。
【００７３】
39.第1の演算の出力データの量は、第1の演算の入力データの量と第1の演算の1つまたは複数のパラメータとに基づき決定される項目32に記載のシステム。
【００７４】
40.グループ化された演算の出力データの量は、グループ化された演算の入力データの量とグループ化された演算の1つまたは複数のパラメータとに基づき決定される項目32に記載のシステム。
【００７５】
41.少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含む項目32に記載のシステム。
【００７６】
42.少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算を含む項目41に記載のシステム。
【００７７】
43.少なくとも1つの第2の演算は、第1の演算に直接後続する一連の演算からの演算を含む項目41に記載のシステム。
【００７８】
44.少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含む項目41に記載のシステム。
【００７９】
45.(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定することを含む項目32に記載のシステム。
【００８０】
46.(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすことを含む項目45に記載のシステム。
【００８１】
47.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶することをさらに含む項目46に記載のシステム。
【００８２】
48.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶することをさらに含む項目46に記載のシステム。
【００８３】
49.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データおよび出力データを外部メモリに記憶することをさらに含む項目46に記載のシステム。
【００８４】
50.グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含み、Nは2以上の整数である、項目32に記載のシステム。
【００８５】
51.(c)は、Nの値が最小値となるように少なくとも1つの第2の演算を決定することを含む項目50に記載のシステム。
【００８６】
52.(d)は、少なくともN回実行される項目50に記載のシステム。
【００８７】
53.グループ化された演算の入力データの一部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含む項目50に記載のシステム。
【００８８】
54.Nは、少なくとも一部は、(1)グループ化された演算の入力データおよび出力データの量、(2)メモリユニットの容量、および(3)グループ化された演算の中間データ結果の量に基づき決定される項目50に記載のシステム。
【００８９】
55.グループ化された演算の入力データ、中間データ結果、および出力データは、メモリユニットの異なるスライスに記憶される項目32に記載のシステム。
【００９０】
56.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶することをさらに含む項目32に記載のシステム。
【００９１】
57.(d)は、グループ化された演算の入力データおよび中間データ結果をメモリユニットに記憶することを含む項目56に記載のシステム。
【００９２】
58.(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶することをさらに含む項目32に記載のシステム。
【００９３】
59.(d)は、外部メモリからグループ化された演算の入力データの一部分を受け取ることを含む項目58に記載のシステム。
【００９４】
60.(d)は、グループ化された演算の中間データ結果および出力データをメモリユニットに記憶することを含む項目58に記載のシステム。
【００９５】
61.(d)は、グループ化された演算の入力データ、中間データ結果、および出力データをメモリユニットに記憶することを含む項目32に記載のシステム。
【００９６】
62.1つまたは複数のメモリには、1つまたは複数のプロセッサによって実行されたときに1つまたは複数のプロセッサに(e)グループ化された演算の出力データの一部を取得することと、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルすることとをさらに行わせる命令が記憶されている項目32に記載のシステム。
【００９７】
63.1つまたは複数のコンピュータプロセッサによって実行されると、データ処理の方法を遂行する機械実行可能コードを含む非一時的コンピュータ可読媒体であって、
(a)一連の演算によって処理されるべき入力データを受け取るためのプログラム命令と、
(b)一連の演算から第1の演算を識別することであって、第1の演算は、メモリユニットの容量を超える入力データおよび出力データの量を有する、識別することを行うためのプログラム命令と、
(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択するためのプログラム命令と、
(d)グループ化された演算の入力データの一部を処理することであって、入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理することを行うためのプログラム命令とを含む非一時的コンピュータ可読媒体。
【００９８】
64.一連の演算は一連の畳み込み演算を含む項目63に記載の非一時的コンピュータ可読媒体。
【００９９】
65.一連の演算は一連のテンソル演算を含む項目63に記載の非一時的コンピュータ可読媒体。
【０１００】
66.一連の演算は一連のプーリングを含む項目66に記載の非一時的コンピュータ可読媒体。
【０１０１】
67.一連の演算は一連のアップスケーリングを含む項目66に記載の非一時的コンピュータ可読媒体。
【０１０２】
68.一連の演算は一連の正規化線形関数(ReLU)を含む項目66に記載の非一時的コンピュータ可読媒体。
【０１０３】
69.メモリユニットは、スタティックランダムアクセスメモリ(SRAM)を備える項目63に記載の非一時的コンピュータ可読媒体。
【０１０４】
70.第1の演算の出力データの量は、第1の演算の入力データの量と第1の演算の1つまたは複数のパラメータとに基づき決定される項目63に記載の非一時的コンピュータ可読媒体。
【０１０５】
71.グループ化された演算の出力データの量は、グループ化された演算の入力データの量とグループ化された演算の1つまたは複数のパラメータとに基づき決定される項目63に記載の非一時的コンピュータ可読媒体。
【０１０６】
72.少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含む項目63に記載の非一時的コンピュータ可読媒体。
【０１０７】
73.少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算を含む項目72に記載の非一時的コンピュータ可読媒体。
【０１０８】
74.少なくとも1つの第2の演算は、第1の演算に直接後続する一連の演算からの演算を含む項目72に記載の非一時的コンピュータ可読媒体。
【０１０９】
75.少なくとも1つの第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含む項目72に記載の非一時的コンピュータ可読媒体。
【０１１０】
76.(c)に対するプログラム命令は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定するためのプログラム命令を含む項目63に記載の非一時的コンピュータ可読媒体。
【０１１１】
77.(c)のためのプログラム命令は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすためのプログラム命令を含む項目76に記載の非一時的コンピュータ可読媒体。
【０１１２】
78.(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するためのプログラム命令をさらに含む項目77に記載の非一時的コンピュータ可読媒体。
【０１１３】
79.(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するためのプログラム命令をさらに含む項目77に記載の非一時的コンピュータ可読媒体。
【０１１４】
80.(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データおよび出力データを外部メモリに記憶するためのプログラム命令をさらに含む項目77に記載の非一時的コンピュータ可読媒体。
【０１１５】
81.グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含み、Nは2以上の整数である、項目63に記載の非一時的コンピュータ可読媒体。
【０１１６】
82.(c)のためのプログラム命令は、Nの値が最小値となるように少なくとも1つの第2の演算を決定するためのプログラム命令を含む項目81に記載の非一時的コンピュータ可読媒体。
【０１１７】
83.(d)のためのプログラム命令は、少なくともN回実行される項目81に記載の非一時的コンピュータ可読媒体。
【０１１８】
84.グループ化された演算の入力データの一部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含む項目81に記載の非一時的コンピュータ可読媒体。
【０１１９】
85.Nは、少なくとも一部は、(1)グループ化された演算の入力データおよび出力データの量、(2)メモリユニットの容量、ならびに(3)グループ化された演算の中間データ結果の量に基づき決定される項目81に記載の非一時的コンピュータ可読媒体。
【０１２０】
86.グループ化された演算の入力データ、中間データ結果、および出力データは、メモリユニットの異なるスライスに記憶される項目63に記載の非一時的コンピュータ可読媒体。
【０１２１】
87.(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データを外部メモリに記憶するためのプログラム命令をさらに含む項目63に記載の非一時的コンピュータ可読媒体。
【０１２２】
88.(d)のためのプログラム命令は、グループ化された演算の入力データおよび中間データ結果をメモリユニットに記憶するためのプログラム命令を含む項目87に記載の非一時的コンピュータ可読媒体。
【０１２３】
89.(c)のためのプログラム命令は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の入力データを外部メモリに記憶するためのプログラム命令をさらに含む項目63に記載の非一時的コンピュータ可読媒体。
【０１２４】
90.(d)のためのプログラム命令は、外部メモリからグループ化された演算の入力データの一部分を受け取るためのプログラム命令を含む項目89に記載の非一時的コンピュータ可読媒体。
【０１２５】
91.(d)のためのプログラム命令は、グループ化された演算の中間データ結果および出力データをメモリユニットに記憶するためのプログラム命令を含む項目89に記載の非一時的コンピュータ可読媒体。
【０１２６】
92.(d)のためのプログラム命令は、グループ化された演算の入力データ、中間データ結果、および出力データをメモリユニットに記憶するためのプログラム命令を含む項目63に記載の非一時的コンピュータ可読媒体。
【０１２７】
93.(e)グループ化された演算の出力データの一部を取得し、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルするためのプログラム命令をさらに含む項目63に記載の非一時的コンピュータ可読媒体。
【０１２８】
本発明の異なる態様は、個別に、まとめて、または互いに組み合わせて評価され得ることが理解されるものとする。本明細書で説明されている本発明の様々な態様は、以下で述べている特定の応用のいずれかに適用され得る。
【０１２９】
本開示の追加の態様および利点は、当業者には次の詳細な説明から容易に明らかなものであり、単純に本開示を実施するために企図されている最良の形態の図解を用いることで、本開示の例示的な実施形態のみが図示され、説明されている。理解されるように、本開示は、他のおよび異なる実施形態を実現可能にし、そのいくつかの詳細は、様々な明らかな点に関して修正することが可能であり、すべて本開示から逸脱しない。したがって、図面および説明は、制限ではなく、事実上例示するものとみなされるべきである。
【０１３０】
文献の引用
本明細書において言及されているすべての刊行物、特許、および特許出願は、それぞれの個別の刊行物、特許、または特許出願が、参照により組み込まれることが特に、また個別に指示されている場合と同じ範囲にわたって参照により組み込まれる。
【０１３１】
本発明の新規性のある特徴は、付属の請求項において詳細に述べられる。本発明の特徴および利点は、本発明の原理が利用されている例示的な実施形態について述べている次の詳細な説明と、添付図面を参照することによってよりよく理解される。
【図面の簡単な説明】
【０１３２】
【図１】1つまたは複数の畳み込み層、1つまたは複数のプーリング層、および様々な他の演算を含む典型的なCNNシステムを例示する図である。
【図２】一連のデータ演算を示す図である。
【図３】各演算のデータ量がメモリユニットの容量を超えない一連のデータ演算を示す図である。
【図４】一演算のデータ量がメモリユニットの容量を超える一連のデータ演算を示す図である。
【図５】本発明の実施形態により演算を別の演算とグループ化する、演算がメモリユニットの容量を超えるデータ量を有する、方式を示す図である。
【図６】本発明の実施形態により演算を別の演算とグループ化する、演算がメモリユニットの容量を超えるデータ量を有する、別の方式を示す図である。
【図７】本発明の実施形態によるデータ演算の例示的な方法を示すフローチャートである。
【図８】本出願で開示されているコンピューティングシステムを実装するように構成され得るコンピュータシステムを示す図である。
【発明を実施するための形態】
【０１３３】
本明細書では本発明の好ましい実施形態が図示され説明されているが、そのような実施形態は専ら例として提示されていることは当業者には明らかであろう。こうして、多数の変化、変更、および置換は、本発明から逸脱することなく当業者が思いつくであろう。本明細書で説明されている本発明の実施形態の様々な代替的形態は、本発明を実施するうえで採用され得ることを理解されたい。
【０１３４】
データ演算の入力データおよび出力データが両方ともメモリユニット(たとえば、組み込みデバイスのオンチップメモリ)に記憶されることを確実にすることによって一連のデータ演算の効率を改善するためのデータ処理のシステムおよび方法が提供される。本明細書において開示されているようなシステムおよび方法は、入力データの一部が出力データの一部を取得するために処理され得、出力データ全体がデータのそれぞれの部分をアセンブルすることによって取得され得る畳み込み演算におけるデータ処理に特に適している。入力データおよび出力データの量がメモリユニットの容量を超える第1の演算は、一連のデータ演算のうちから識別され得る。第1の演算は、グループ化された演算の入力データおよび出力データの全体の量がメモリユニットの容量を超えないように第2の演算とグループ化され得る。グループ化された演算は、中間データ結果の量に少なくとも一部は基づき複数の演算に分割され得る。複数の演算は、グループ化された演算の出力データを取得するため順次実行され得る。いくつかの実施形態において、一連のデータ演算は、一連の畳み込み演算を含むことができる。代替的に、一連のデータ演算は、プーリング、アップスケーリング、またはReLU(正規化線形ユニット)などの、一連のテンソル演算を含み得る。
【０１３５】
本明細書で提示されているシステムおよび方法は、現行の技術に比べてコストが低く、計算効率が改善されているという利点を有することができる。たとえば、外部記憶装置の使用は、データ演算の入力データおよび出力データの量が組み込みデバイスのオンチップメモリユニットの容量を超える場合であっても回避できる。本明細書で説明されている本発明の様々な態様は、以下で述べている特定の応用のいずれかに適用され得る。これらの方法およびシステムは、畳み込みニューラルネットワークおよび他のディープラーニングアプリケーションに適用され得る。本発明の異なる態様は、個別に、まとめて、または互いに組み合わせて評価され得ることが理解されるものとする。
【０１３６】
図1は、1つまたは複数の畳み込み層、1つまたは複数のプーリング層、および様々な他の演算を含む典型的なCNNシステム101(Krizhevsky, A.、Sutskever, I.、およびHinton, G. E.(3012)「Imagenet classification with deep convolutional neural networks」、Advances in neural information processing systems、1097〜1105頁)を例示している。図1のパートAに例示されているように、CNNシステムは、任意の数の層および異なるタイプの演算に対する任意の数の層を備えることができる。畳み込みニューラルネットワークの最も単純なアーキテクチャは、入力層(たとえば、画像)から始まり、その後、一連の畳み込み層とプーリング層が続き、全結合層で終わる。いくつかの場合において、畳み込み層の後に、ReLU活性化関数の層が続く。他の活性化関数、たとえば、飽和双曲正接(saturating hyperbolic tangent)、恒等、バイナリステップ、ロジスティック、アークタンジェント、ソフトサイン、パラメトリック正規化線形関数、指数関数的線形関数、ソフトプラス、ベント恒等(bent identity)、ソフト指数関数、シヌソイド、シンク、ガウス、シグモイド関数、および様々な他の関数も使用できる。畳み込み、プーリング、およびReLU層は、学習可能特徴抽出器として働き得るが、全結合層は、機械学習分類器として働き得る。
【０１３７】
いくつかの場合において、畳み込み層および全結合層は、パラメータまたは重みを含むことができる。これらのパラメータまたは重みは、訓練フェーズで学習され得る。パラメータは、CNNが計算するクラススコアが各画像に対する訓練セットにおけるラベルと一致するように勾配降下法により訓練され得る。パラメータは、プロダクションまたはアプリケーションプロセスと同じハードウェアを使用して実行できる、または実行できない誤差逆伝搬ニューラルネットワーク訓練プロセスから取得できる。
【０１３８】
畳み込み層は、1つまたは複数のフィルタを備えることができる。これらのフィルタは、入力データ内に同じ特定の構造が現れたときに活性化することができる。いくつかの場合において、入力データは、1つまたは複数の画像であってよく、畳み込み層内では、1つまたは複数のフィルタ演算は、画像のピクセルに適用され得る。畳み込み層は、画像上を空間的にスライドする学習可能フィルタのセットを備えることができ、フィルタのエントリと入力画像との間のドット積を計算する。フィルタ演算は、図1のパートBに例示的に示されているように画像全体にわたるカーネルの畳み込みとして実装され得る。フィルタは、本開示全体を通して、同じ意味でカーネルと称されることがある。カーネルは、1つまたは複数のパラメータを備えることができる。フィルタ演算の結果はチャンネルにまたがって総和され、畳み込み層から次のプーリング層への出力を提供することができる。畳み込み層は、高次元畳み込みを実行することができる。フィルタは、入力画像の全深度まで及ぶべきである。たとえば、サイズ5×5のフィルタをサイズ32×32のカラー画像に適用したい場合、フィルタは、画像の3つのカラーチャンネル(赤色、緑色、青色)すべてをカバーするように深度3(5×5×3)を有するべきである。
【０１３９】
いくつかの場合において、畳み込み層は、depthwise separable畳み込み(depthwise separable convolution)であってよい。そのようなシナリオにおいて、畳み込み層は、depthwise畳み込みの出力を組み合わせるために、1つのdepthwise畳み込みと1×1のpointwise畳み込みとに分解され得る。畳み込み層は、フィルタリングのための層(すなわち、depthwise畳み込み層)と組合せのための層(すなわち、pointwise畳み込み層)とに分割され得る。いくつかの場合において、depthwise畳み込み層では、単一のフィルタが各入力チャンネルに適用され、pointwise畳み込み層では、1×1の畳み込みがdepthwise層の出力を組み合わせるために実行され得る。いくつかの場合において、depthwise畳み込み層とpointwise畳み込み層の両方の後に、活性化層が続く。いくつかの場合において、CNNがdepthwise separable畳み込み上に構築されるときに、第1の層は、そのまま、全畳み込みであり得る。
【０１４０】
畳み込み層に供給される入力データは、1次元、2次元、3次元、4次元、5次元、6次元、7次元、およびそれ以上の次元であってよい。いくつかの実施形態において、畳み込み層などの入力層に供給される入力データは、データ特性に依存し得る。たとえば、入力データが画像データである場合、入力データは3次元であるものとしてよい。図1に示されているように、入力データは3つのチャンネルの各々について224×224ピクセル平面を表す224×224×3の体積サイズを有する画像であり得る。後の層に対する入力特徴マップとして、層によって生成される出力特徴マップが使用され得る。隠れ層に対する入力特徴マップ(たとえば、入力データ)のサイズは、前の層内のフィルタの数を含む係数の数および1つまたは複数のハイパーパラメータによって決定され得る。畳み込み層は、フィルタを入力特徴マップに適用して、埋め込まれている視覚的特性を抽出し、出力特徴マップを生成する。いくつかの実施形態において、パラメータの次元は、4次元であってよく、入力/出力特徴マップは、3次元であってよい。たとえば、各特徴マップは、複数のチャンネルにまたがって2次元平面を含む3次元であってよく、3次元特徴マップは、畳み込み層内の3次元フィルタのグループによって処理される。いくつかの場合において、畳み込み結果に加えられる1次元バイアスがあり得る。たとえば、C個のチャンネルにまたがってサイズH×H(すなわち、重みおよび高さ)を有する入力特徴マップ平面の形状が与えられ、N個のフィルタが各々フィルタ平面次元R×R(すなわち、重みおよび高さ)を有するC個のチャンネルを有するとすれば、畳み込み層の計算は
【０１４１】
【数１】
2019169150.tif 000003
【０１４２】
0≦z<N, 0≦u<M, 0≦x,y<E, E=(H-R+U)/U
として定義されるものとしてよく、ただし、O、I、W、およびBはそれぞれ出力特徴マップ、入力特徴マップ、フィルタ、およびバイアスの行列を表す。Uはストライドサイズを表す。
【０１４３】
各畳み込み層は、畳み込み演算に対する複数のパラメータを含むことができる。1つまたは複数のフィルタが、各畳み込み層内に含まれ得る。各フィルタは、1つまたは複数のパラメータまたは重みを備えることができる。フィルタ/カーネルのサイズおよびフィルタ/カーネルの数は、一緒になって、各畳み込み層に対して必要なパラメータを決定することができる。たとえば、畳み込み層は、3つのチャンネルに対して各々2×2平面である4つのカーネルを備えることができ、したがってその層に対する結果として得られる重みの総数は、4×2×2×3となる。いくつかの実施形態において、パラメータは、バイアスも含み得る。
【０１４４】
畳み込み層の出力体積のサイズは、また、ハイパーパラメータに依存し得る。ハイパーパラメータは、畳み込み層の出力体積のサイズをも制御し得る。いくつかの場合において、ハイパーパラメータは、深度、ストライド、およびゼロパディングを含み得る。
【０１４５】
出力体積の深度は、入力体積の同じ領域に結合する層内のニューロンの数を制御する。これらのニューロンのすべては、入力内の異なる特徴について活性化することを学習する。たとえば、第1の畳み込み層が入力として原画像をとる場合、深度次元に沿った異なるニューロンは、様々な配向のエッジ、または色のブロブの存在下で活性化することができる。
【０１４６】
ストライドは、空間次元(幅および高さ)の周りの深度列がどのように割り振られるかを制御する。ストライドが1であるときには、ニューロンの新しい深度列が、1空間単位だけ離れている空間位置に割り振られる。これは、延いては、列の間の大きく重なり合う受容野、さらには大きな出力体積をもたらす。逆に、使用されるストライドが高ければ高いほど、受容野は重なり合いが少なくなり、その結果得られる出力体積は空間的により小さい次元を有することになる。
【０１４７】
ときには、入力体積の境界上で入力にゼロをパディングすると都合がよい。このゼロパディングのサイズは、別のハイパーパラメータである。ゼロパディングは、出力体積空間的サイズを制御する。特に、ときには、入力体積の空間的サイズを正確に保存することが望ましい。
【０１４８】
出力体積の空間的サイズは、入力体積サイズW、畳み込み層ニューロンのカーネルフィールドサイズK、それが一緒に適用されるストライドS、およびゼロパディングの量Pの関数として計算され得る。所与の体積内にいくつニューロンがフィットするかを計算するための公式は(W-K+2P)/S+1である。この数が整数でない場合、ストライドの設定は不正確であり、ニューロンは、対称的な仕方で入力体積上にフィットするようにタイル状に並べることができない。一般に、ストライドがS=1であるときにゼロパディングをP=(K-1)/2になるように設定することで、入力体積および出力体積が同じサイズを空間的に有することを確実にする。いくつかの場合において、前の層のニューロンのすべてを使い尽くすことは必要ない。
【０１４９】
図1のパートBは、畳み込み層の計算を例示している。畳み込み層は、N個の特徴マップを入力として受け取る。各入力特徴マップは、K×Kカーネルを有するシフト窓によって畳み込まれ、1つの出力特徴マップ内に1つのピクセルを生成する。シフト窓のストライドは、Sであり、通常はKより小さい。合計M個の出力特徴マップは、次の畳み込み層に対する入力特徴マップのセットを形成する。
【０１５０】
図1のパートAは、CNNアプリケーションを示している。このCNNは、8個の層からなる。第1の5個の層は畳み込み層であり、層6〜8は全結合人工ニューラルネットワークを形成する。アルゴリズムは、元の256×256の3チャンネルRGB画像からのものである3つの224×224入力画像を受け取る。1000個の要素からなる出力ベクトルは、1000個のカテゴリの尤度を表す。図1に示されているように、層1は、224×224の解像度の3つの入力特徴マップと、55×55の解像度の96個の出力特徴マップとを受け取る。層1の出力は、2つのセットに分割され、各々のサイズは48個の特徴マップである。層1のカーネルサイズは11×11であり、スライド窓は4個のピクセルのストライドで特徴マップ上をシフトする。次の層も、類似の構造を有する。他の層の畳み込み窓のスライドストライドは1ピクセルである。
【０１５１】
特徴マップの数は、前の層内で使用されているフィルタの数を制御することによって制御され得る。入力層内の特徴マップの数は、チャンネルの数(たとえば、R、G、B)に対応するものとしてよい。フィルタは、1つまたは複数のパラメータまたは重みを備えることができる。畳み込み層は、多数のフィルタを備えることができる。いくつかの場合において、フィルタの数およびフィルタのサイズ(すなわち、パラメータの数)は、コンピューティングユニットをフルに利用するように選択され得るか、またはハードウェアの計算能力に応じて選択され得る。いくつかの場合において、フィルタの数およびフィルタのサイズは、可変入力データに対して高効率のハードウェア構成が使用できるように選択され得る。
【０１５２】
いくつかの実施形態において、畳み込み層および/または全結合層の後に、正規化線形関数(ReLU)などの、活性化層が続くものとしてよい。ReLU層は、ゼロを閾値とするmax(0,x)などの、要素毎の活性化関数を適用することができる。これは、入力データの体積を変更しないままにしておくことができる。他の活性化関数、たとえば、飽和双曲正接、恒等、バイナリステップ、ロジスティック、アークタンジェント、ソフトサイン、パラメトリック正規化線形関数、指数関数的線形関数、ソフトプラス、ベント恒等、ソフト指数関数、シヌソイド関数、シンク、ガウス、シグモイド関数、および同様のものも使用できる。いくつかの場合において、CNNがdepthwise separable畳み込みを含むときに、depthwise畳み込み層およびpointwise畳み込み層の各々の後に、ReLU層が続くものとしてよい。
【０１５３】
図1のパートAに例示されているような例において、CNNシステムは、いくつかの畳み込み層およびプーリングまたはサブサンプリング層を備えることができる。プーリング層は、非線形ダウンサンプリングの一形態であってよい。プーリング層は、ダウンサンプリングを実行して、所与の特徴マップを縮小特徴マップのスタックに縮小することができる。プーリング層は入力データの空間的サイズを徐々に縮小して、ネットワークにおいてパラメータおよび計算の量を減らし、したがって過剰フィットを制御することもできる。最大プーリング、平均プーリング、またはL2-ノルムプーリングなどのプーリングを実装するいくつかの関数がある。たとえば、最大プーリング演算では、所与の特徴マップは重なり合わない矩形のセットに分割されるものとしてよく、そのような部分領域毎に、最大値を出力する。別の例では、平均プーリングにおいて、部分領域の平均値が出力され得る。所与の特徴マップは、任意のサイズで分割され得る。たとえば、プーリングは、すべての深度スライスにおいて2のストライドにより適用されるサイズ2×2のフィルタにより適用され得る。2のストライドを有するサイズ2×2のプーリング層は、所与の特徴マップを元のサイズの1/4に縮小する。
【０１５４】
プーリング層の出力は、全結合層に供給され、それによりパターン検出を実行することができる。いくつかの場合において、全結合層は、入力特徴マップにフィルタが適用され得る分類目的のものであってよい。フィルタは、入力特徴マップと同じサイズのものとすることができる。全結合層は、その入力において重みまたはパラメータのセットを適用し、全結合層の出力として結果を累算することができる。いくつかの場合において、活性化層は、全結合層の直後に続き、CNNシステムの結果を出力することができる。たとえば、分類目的に関して、出力データは分類スコアを保持するベクトルであってよい。
【０１５５】
コンピューティングアーキテクチャは、事前訓練された畳み込みニューラルネットワークであってよい。CNNモデルは、1つまたは複数の畳み込み層を備えることができる。CNNモデルは、1から数百個の畳み込み層を備えることができる。CNNモデルは、1つまたは複数のプーリング層を備えることができる。いくつかの場合において、プーリング層は、畳み込み層の直後に続くことができる。いくつかの実施形態において、ReLU活性化演算は、畳み込み結果が活性化関数によって即座に処理されるように畳み込み演算と組み合わされる。いくつかの実施形態において、畳み込みおよびプーリング層は、データが全結合層に伝送される前に複数回入力データに適用され得る。全結合層は、パターンが認識されているかどうかを決定するためにテストされる最終出力値を出力することができる。
【０１５６】
専用設計の集積回路を通じて並行処理およびメモリアクセスを改善することによって選択アルゴリズムの実装形態を高速化するためのシステムが実現される。CNNの適用などの、選択アルゴリズムは、多数の行列-行列乗算および/または行列-ベクトル乗算を含み得る。集積回路は、メモリユニットと、少ない数の制御信号に基づき並列演算の複数の繰り返しを実行することができるコンピューティングユニットとを収容することができる。いくつかの場合において、データは、データの配置構成が所定のハードウェア構成と整合するように配置構成されおよび/またはゼロをパディングされる。データは、ハードウェア回路の構成に基づき所定のデータフローまたはデータパスに従うように配置構成され得る。
【０１５７】
CNNシステムでは、伴うデータは、CNNパラメータおよび入力/出力特徴を含む。上で説明されているような典型的なCNNシステムは、マルチチャンネル畳み込み層、最大もしくは平均プーリング層、正規化線形関数(ReLU)、および全結合層を含むことができる。全結合層およびマルチチャンネル畳み込み層は両方とも、ニューロン同士の間の結合の強度を表す多数の数値重みまたはパラメータを含む。チップ上の集積回路にロードされるべきデータは、ホストプロセッサによって準備され、メインメモリに記憶されるものとしてよく、データはバッチ方式でチップに伝送され得る。
【０１５８】
CNNパラメータは、限定はしないが上で説明されているような、重みもしくはパラメータ、バイアス、パディングなどのハイパーパラメータ、ストライド、および深度を含む畳み込み層に対する複数のパラメータを含むことができる。CNNパラメータは、全結合層などの他のタイプの層において使用されるべきパラメータも含み得る。
【０１５９】
パラメータは、複数のグループに配置構成され分類され得る。いくつかの実施形態において、パラメータは層別にグループ化されるものとしてよい。たとえば、CNNシステムの異なる層は、パラメータの異なるグループに対応することができる。各層に対するパラメータは、大次元行列であってよい。パラメータのグループは、隣接空間内に記憶され得る。グループに含まれるか、または層に対応する、パラメータは、隣接空間内に連続して記憶され得る。グループ内のパラメータは、CNNの層内で実行される関数または演算に従うように配置構成され得る。
【０１６０】
入力データは、画像データまたはサンプリングされた音声信号を含むことができる。たとえば、画像データは、複数の画像ピクセル値を含むことができる。データは、スカラー型整数、スカラー型浮動小数点数、パックド整数、パックド浮動小数点数、ベクトル整数、ベクトル浮動小数点数、および同様のものなどの、様々なデータ型であってよい。
【０１６１】
図2は、一連のデータ演算2011〜2014を略示している。図2の例では、入力データA 2001は、出力データE 2005を取得するために一連のデータ演算によって処理され得る。一連のデータ演算は、順次実行され得る。先行する演算の出力データは、後続の演算の入力データとして使用され得る。たとえば、入力データA 2001は最初に第1の演算1 2011によって処理されて、第1の中間データ結果B 2002を取得することができる。次いで、第1の中間データ結果B 2002は、第2の演算2 2012に供給され、それによって処理され、第2の中間データ結果C 2003を取得することができる。次いで、第2の中間データ結果C 2003は、第3の演算3 2013によって処理され、第3の中間データ結果D 2004を取得することができる。次いで、第3の中間データ結果D 2004は、第4の演算4 2014によって処理され、最終出力データE 2005を取得することができる。
【０１６２】
一連のデータ演算は、一連の畳み込み演算またはテンソル演算を含むことができる。テンソル演算は、プーリング、アップスケーリング、またはReLUを含むことができる。演算の各タイプに対する1つまたは複数の層が提供され得る。入力データAは、画像データ、オーディオ、ビデオデータ、および様々な他のデータであってよい。たとえば、典型的なCNNシステムは、1つまたは複数の畳み込み層、1つまたは複数のプーリング層、および様々な他の演算を含むことができる。CNNシステムは、任意の数の層および異なるタイプの演算に対する任意の数の層を備えることができる。先行する層の出力データは、後続の層の入力データであってよい。
【０１６３】
図3は、各演算のデータ量がメモリユニットの容量を超えない一連のデータ演算を示している。図3の左部分は、一連の演算およびデータを示しており、図3の右部分は、メモリユニット内のデータの記憶を示している。図3の例では、入力データA 3001は、出力データE 3005を取得するために一連のデータ演算によって処理され得る。一連のデータ演算は、順次実行される演算1 3011から演算4 3014を含むことができる。先行する演算の出力データは、後続の演算の入力データとして使用され得る。
【０１６４】
メモリユニット3000は、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、同期型ダイナミックランダムアクセスメモリ(SDRAM)、ダブルデータレート(DDR)、ダブルデータレート同期型ダイナミックランダムアクセスメモリ(DDR SDRAM)、DDR、DDR2、DDR3、T-RAM、Z-RAM、などを含む好適なRAMであってよい。いくつかの場合において、メモリユニットは、組み込みデバイスのオンチップメモリであってもよい。
【０１６５】
いくつかの実施形態において、演算の入力データ全体および出力データ全体が、演算を実行する際に同じメモリユニット内に記憶され得る。演算の出力データのサイズは、上で説明されているように、少なくとも一部は入力データのサイズおよび演算の係数(たとえば、パラメータ)の数に基づき決定され得る。たとえば、畳み込み演算(たとえば、畳み込み層)の出力データのサイズは、畳み込みの深度、ストライド、およびゼロパディングなどのハイパーパラメータに依存し得る。典型的な例において、演算1の出力データBのサイズは、入力データAが利用可能であるときに決定されるものとしてよく、出力データBに対する記憶空間は、メモリユニット内に予約され得る。出力データBに対する記憶空間は、連続的であるかまたはメモリユニット内にあるものとしてよく、たとえば、出力データBは、連続的メモリアドレスを有する記憶空間内に記憶され得る。出力データBに対する記憶空間は、任意選択で、メモリユニット内で連続的でなくてよく、たとえば、出力データBは、メモリユニット内に複数のデータ断片として記憶され得る。
【０１６６】
図3に示されているように、演算1が実行される前に、入力データAはメモリユニット3000内に処理されるべきデータとして記憶され得る。演算1を実行する際に、演算1の入力データAおよび出力データBは両方とも、メモリユニット内に記憶され得る。演算1が完了した後、第1の中間データ結果Bは、演算1の出力およびさらに演算2の入力としてメモリユニット内に記憶され得る。演算2を実行する際に、演算2の入力データBおよび出力データCは両方とも、メモリユニット内に記憶され得る。演算2が完了した後、第2の中間データ結果Cは、演算2の出力およびさらに演算3の入力としてメモリユニット内に記憶され得る。出力データEは、すべての演算1〜4が完了した後にメモリユニット内に記憶され得る。
【０１６７】
図3に示されている例において、メモリユニットの容量は演算1〜4には十分大きい、すなわち、演算1〜4のうちの1つに対する入力データおよび出力データの量は、メモリユニットの容量を超えない。たとえば、演算1に対する入力データAおよび出力データBの量は、メモリユニットの容量を超えず、演算2に対する入力データBおよび出力データCの量は、メモリユニットの容量を超えず、演算3に対する入力データCおよび出力データDの量は、メモリユニットの容量を超えず、演算4に対する入力データDおよび出力データEの量は、メモリユニットの容量を超えない。この典型的な例では、演算を実行する際に入力データ、中間データ、および出力データを記憶するために外部メモリデバイスを必要としない。
【０１６８】
図4は、一演算のデータ量がメモリユニットの容量を超える一連のデータ演算を示している。図4の左部分は、一連の演算およびデータを示しており、図4の右部分は、メモリユニット4000内のデータの記憶を示している。図4の例では、入力データA 4001は、出力データE 4005を取得するために一連のデータ演算によって処理され得る。一連のデータ演算は、順次実行される演算1 4011から演算4 4014を含むことができる。先行する演算の出力データは、後続の演算の入力データとして使用され得る。たとえば、入力データA 4001は最初に第1の演算1 4011によって処理されて、第1の中間データ結果B 4002を取得することができる。一連のデータ演算は、一連の畳み込み演算またはテンソル演算を含むことができる。いくつかの場合において、演算の入力データ全体および出力データ全体が、演算を実行する際に同じメモリユニット内に記憶され得る。
【０１６９】
図4に示されている典型的な例において、演算1が実行される前に、入力データAはメモリユニット内に処理されるべきデータとして記憶され得る。演算1を実行する際に、演算1の入力データAおよび出力データBは両方とも、メモリユニット内に記憶され得る。演算1が完了した後、第1の中間データ結果Bは、演算1の出力およびさらに演算2の入力としてメモリユニット内に記憶され得る。
【０１７０】
図4に示されている典型的な例において、メモリユニットの容量は演算1〜4には十分大きくはない、すなわち、演算1〜4のうちの1つまたは複数に対する入力データおよび出力データの量は、メモリユニットの容量を超える。たとえば、演算3に対する入力データおよび出力データの量は、メモリユニットの容量を超える。この場合、演算3は、メモリユニット内で実行され得ない。このシナリオに対する1つの解決方法は、演算3の入力データおよび/または出力データを外部メモリデバイスに記憶することである。しかしながら、計算のパフォーマンスは、外部メモリデバイス内の読み取り/書き込み速度の低下および/またはシステムバスの占有により低下し得る。
【０１７１】
このシナリオの別の解決方法は、グループ化された演算の入力データ全体および出力データ全体の量がメモリユニットの容量を超えないように演算3を1つまたは複数の他の演算とグループ化することである。いくつかの場合において、演算3とグループ化されるべき1つまたは複数の演算は、演算3に直接隣接している少なくとも1つの演算を含むことができる。様々な演算グループ化方式が可能であり得る。たとえば、演算3は、グループ化された演算の入力データ全体Bおよび出力データ全体Dの量がメモリユニットの容量を超えない場合に演算2とグループ化され得る。たとえば、演算3は、グループ化された演算の入力データ全体Cおよび出力データ全体Eの量がメモリユニットの容量を超えない場合に演算4とグループ化され得る。たとえば、演算3は、グループ化された演算の入力データ全体Aおよび出力データ全体Dの量がメモリユニットの容量を超えない場合に演算1および演算2とグループ化され得る。たとえば、演算3は、グループ化された演算の入力データ全体Bおよび出力データ全体Eの量がメモリユニットの容量を超えない場合に演算2および演算4とグループ化され得る。様々な演算グループ化方式が、以下で、図5および図6を参照しつつ説明される。
【０１７２】
図5は、本発明の実施形態により演算を別の演算とグループ化する、演算がメモリユニットの容量を超える入力データおよび出力データの量を有する、方式を示す図である。図5の左部分は、一連の演算5011〜5014およびデータ5001〜5005を示しており、図5の右部分は、メモリユニット5000内のデータの記憶を示している。図5に示されている典型的な例は、演算3の入力データCおよび出力データDの量がメモリユニットの容量を超える図4に示されているような演算3のデータ記憶の問題に対処するための解決方法を提供するものである。
【０１７３】
図5に示されている例では、メモリユニット5000の容量を超える入力データおよび出力データの量を有する第1の演算(たとえば、演算3 5013)は、少なくとも一部は演算の入力データおよび演算の1つまたは複数のパラメータに基づき識別され得る。たとえば、上で説明されているように、畳み込み演算(たとえば、畳み込み層)の出力データのサイズは、畳み込みの深度、ストライド、およびゼロパディングなどのハイパーパラメータに依存し得る。図示されている例では、演算3 5013の出力データD 5004のサイズは、入力データA 5001が利用可能であるときに決定されるものとしてよく、入力データC 5003および出力データD 5004の総和がメモリユニット内に完全に記憶され得るかどうかの決定がなされ得る。
【０１７４】
少なくとも1つの第2の演算が、一連の演算からの第1の演算がメモリユニットの容量を超える入力データおよび出力データの量を有すると決定されたときに一連の演算から選択され得る。第1の演算の処理は、グループ化された演算の入力データおよび出力データがメモリユニットの容量を超えないという条件の下で第2の演算の処理とグループ化され得る。たとえば、図5に示されている例では、演算3 5013(たとえば、第1の演算)および演算2 5012(たとえば、第2の演算)は、データB 5002とデータD 5004との総和がメモリユニット5000の容量を超えないときに入力データ全体B 5002および出力データ全体D 5004とグループ化されて処理され得る。
【０１７５】
第1の演算は、グループ化された演算の入力データおよび出力データがメモリユニットの容量を超えないという条件の下で1つまたは複数の第2の演算とグループ化され得る。識別された第1の演算に対して1つまたは複数のグループ化方式が可能であり得る。1つまたは複数の第2の演算は、第1の演算に直接隣接している一連の演算からの演算を含むことができる。たとえば、演算3は、演算1 5011および2 5012とグループ化され得るが、演算3は、演算1 5011と単独ではグループ化され得ない。1つまたは複数の第2の演算は、第1の演算に直接先行する一連の演算からの演算を含むことができる。任意選択で、1つまたは複数の第2の演算は、第1の演算に直接後続する一連の演算からの演算を含むことができる。任意選択で、1つまたは複数の第2の演算は、第1の演算に直接先行する一連の演算からの演算および第1の演算に直接後続する一連の演算からの演算を含むことができる。たとえば、演算2および演算4は、グループ化された演算の入力データ全体Bおよび出力データ全体Eの量がメモリユニットの容量を超えない場合に演算3とグループ化され得る。
【０１７６】
メモリユニットの残りの記憶空間は、グループ化された演算の中間データ結果の少なくとも一部を記憶するために使用できる。たとえば、メモリユニットの残りの記憶空間は、その中に、中間データ結果のM個の等しい部分を記憶することができ、Mは2以上の整数である。任意選択で、メモリユニットの残りの記憶空間は、中に、中間データ結果の任意の部分を記憶することができる。図5に示されている例では、斜線領域で示されている、メモリユニット5000の残りの記憶空間5050は、グループ化された演算の中間データ結果C 5003の少なくとも一部を記憶するために使用できる。グループ化された演算の入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき処理され得る。たとえば、グループ化された演算2および3の入力データBの一部はグループ化された演算の中間データ結果Cの一部を生成するように処理されるものとしてよく、次いで、グループ化された演算の中間データ結果Cの一部分は、グループ化された演算の出力データDの一部を生成するように処理され得る。グループ化された演算の入力データBの別個の部分に対する処理は、入力データBのすべての部分が処理されるまで複数回実行され得る。グループ化された演算の出力データDは、グループ化された演算の出力データDのすべての部分が生成されたときに取得できる。グループ化された演算の入力データの別個の部分に対する処理は以下で説明される。
【０１７７】
データをメモリユニット内に記憶するための領域は、データ処理中に変更できる。たとえば、図5に示されている例では、データBは、元々、データAに続いてメモリユニット内に記憶することができ、データBをメモリユニット内に記憶するための領域は、データAに比べてサイズが大きいデータDを収めるようにシフトすることができる。当業者には、データBをメモリユニット内に記憶するための領域は、データDのサイズがデータAに等しいか、またはそれより小さい場合にはシフトされ得ないことは明白である。別の戦略は、データBをシフトさせる必要性をなくすようにメモリユニットの末尾領域内にデータBを記憶することである。
【０１７８】
図6は、本発明の実施形態により演算を別の演算とグループ化する、演算がメモリユニットの容量を超えるデータ量を有する、別の方式を示している。図6の左部分は、一連の演算6011〜6014およびデータ6001〜6005を示しており、図6の右部分は、メモリユニット6000内のデータの記憶を示している。図6に示されている典型的な例は、演算3の入力データCおよび出力データDの量がメモリユニットの容量を超える図4に示されているような演算3のデータ記憶の問題に対処するための別の解決方法を提供するものである。
【０１７９】
図6に示されている例では、演算3 6013が一連の演算6011〜6014からメモリユニット6000の容量を超える入力データおよび出力データの量を有する第1の演算として識別された後、演算2 6012は、一連の演算から選択されるものとしてよく、演算3 6013および演算2 6012(たとえば、第2の演算)は、データCとデータEとの総和がメモリユニット6000の容量を超えないときに入力データ全体C 6003および出力データ全体E 6005とグループ化されて処理され得る。メモリユニットの残りの記憶空間は、グループ化された演算の中間データ結果の少なくとも一部を記憶するために使用できる。図6に示されている例では、斜線領域で示されている、メモリユニットの残りの記憶空間6050は、グループ化された演算の中間データ結果Dの少なくとも一部を記憶するために使用できる。たとえば、メモリユニットの残りの記憶空間6050は、その中に、中間データ結果DのM個の等しい部分を記憶することができ、Mは2以上の整数である。任意選択で、メモリユニットの残りの記憶空間6050は、中に、中間データ結果Dの任意の部分を記憶することができる。グループ化された演算の入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき処理され得る。たとえば、グループ化された演算3〜4の入力データCの一部はグループ化された演算の中間データ結果Dの一部を生成するように処理されるものとしてよく、次いで、グループ化された演算の中間データ結果Dの一部分は、グループ化された演算の出力データEの一部を生成するように処理され得る。グループ化された演算の入力データCの別個の部分に対する処理は、入力データCのすべての部分が処理されるまで複数回実行され得る。グループ化された演算の出力データEは、グループ化された演算の出力データEのすべての部分が生成されたときに取得できる。
【０１８０】
例１
図2を参照する典型的な例において、データAはメモリユニットの容量の40%を占め、データBはメモリユニットの容量の15%を占め、データCはメモリユニットの容量の40%を占め、データDはメモリユニットの容量の70%を占め、データEはメモリユニットの容量の20%を占めると仮定する。この例では、演算3は、メモリユニットの容量を超える入力データCおよび出力データDの量を有する第1の演算として識別され得る(たとえば、40%+70%>100%)。
【０１８１】
いくつかの実施形態において、メモリユニットの容量を超える入力データCおよび出力データDの量を有する、識別された演算3は、一連の演算のうちから選択された少なくとも1つの第2の演算とグループ化され得る。少なくとも1つの第2の演算は、図5のグループ化方式に示されているように、演算2であってよい。このグループ化方式により、グループ化された演算2〜3は、入力データ全体Bおよび出力データ全体Dを有することができる。メモリユニット5000の残りの記憶空間5050(たとえば、グループ化された演算の入力データおよび出力データがすでに記憶されているメモリユニットの残りの記憶空間)は、グループ化された演算の中間データ結果Cの少なくとも一部を記憶するために使用され得る。メモリユニットの残りの記憶空間5050は、中間データ結果Cの一部分が一時的に記憶されている記憶空間であってよい。この例では、メモリユニットの残りの記憶空間5050は、メモリユニットの容量全体の15%(たとえば、100%-15%-70%=15%)である、すなわち、中間データ結果Cの一部のみがメモリユニットに記憶され得る(たとえば、40%>15%)。メモリユニットに記憶されるべきである、中間データ結果Cの部分は、中間データ結果全体Cおよびメモリユニットの残りの記憶空間5050の量に基づき決定され得る。いくつかの場合において、中間データ結果CのM個の等しい部分のうちの1つがメモリユニットに記憶されてよく、Mは2以上の整数である。たとえば、典型的な例では、中間データ結果Cの1/3がメモリユニット内に記憶され得る(たとえば、40%/15%=2.667)。Mの値は、中間データ結果のサイズをメモリユニットの残りの記憶空間のサイズで除算し、除算結果を次に大きい整数に切り上げることによって決定され得る(たとえば、除算結果2.667は整数3に切り上げることができる)。任意選択で、メモリユニットの残りの記憶空間5050は、中に、中間データ結果Cの任意の部分を記憶することができる。
【０１８２】
グループ化された演算の入力データの一部分は、グループ化された演算の出力データの一部を生成するように一度に処理され得る。グループ化された演算の入力データの一部分は、グループ化された演算の中間データ結果の量に少なくとも一部は基づき決定され得る。いくつかの場合において、グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含むことができ、Nは2以上の整数である。整数Nは、整数Mと同じであってよい。ここで、グループ化された演算の入力データの部分が一度に処理されることは、中間データ結果の部分がメモリユニットの残りの記憶空間内に記憶されることに依存し得るが、それは、中間データ結果の部分がグループ化された演算の入力データの部分に対応するからである。
【０１８３】
典型的な例において、グループ化された演算の入力データBの1/3は、中間データ結果Cの1/3を生成するように一度に処理されるものとしてよく、次いで、中間データ結果Cの1/3は、グループ化された演算の出力データDの1/3を生成するように処理され得る。処理は、3回実行されてよく、それにより、出力データ全体Dが取得され得る。
【０１８４】
いくつかの場合において、グループ化された演算の入力データの部分は、グループ化された演算の入力データの別の部分の少なくとも一部を含むことができる、すなわち、処理されるべき入力データの一部に重なりがある。典型的な例において、グループ化された演算の入力データBの1/3超が、一度に処理され得る。
【０１８５】
代替的に、メモリユニットの容量を超える入力データおよび出力データの量を有する、識別された演算3は、図6のグループ化方式に示されているように、演算4とグループ化され得る。グループ化された演算は、入力データ全体C 6003および出力データ全体E 6005を有することができる。メモリユニットの残りの記憶空間は、グループ化された演算の中間データ結果D 6004の少なくとも一部を記憶するために使用できる。典型的な例では、メモリユニットの残りの記憶空間6050は、メモリユニットの容量全体の40%(たとえば、100%-40%-20%=40%)である、すなわち、中間データ結果Dの一部のみがメモリユニットに記憶され得る。中間データ結果Dの部分は、中間データ結果全体Dおよびメモリユニットの残りの記憶空間の量に基づき決定され得る。いくつかの場合において、中間データ結果DのM個の等しい部分のうちの1つがメモリユニットに記憶され得る。たとえば、典型的な例では、中間データ結果Dの1/2がメモリユニット内に記憶され得る(たとえば、70%/40%=1.75)。典型的な例において、グループ化された演算の入力データCの1/2は、中間データ結果Dの1/2を生成するように一度に処理されるものとしてよく、次いで、中間データ結果Dの1/2は、グループ化された演算の出力データEの1/2を生成するように処理され得る。処理は、2回実行されてよく、それにより、出力データ全体Eが取得され得る。任意選択で、メモリユニットの残りの記憶空間6050は、中に、中間データ結果Dの任意の部分を記憶することができる。
【０１８６】
識別された演算3に対する2つの可能なグループ化方式のうちで、演算3が演算4とグループ化されるグループ化方式は、演算3がより少ない部分演算(たとえば、2つの部分演算)で実行され得るので好ましい場合がある。言い換えると、第2の演算の数が同じである2つ以上のグループ化方式が可能であるときに、グループ化方式のうちのどの1つが好ましいかに関する決定が行われ得る。決定の基準は、識別された第1の演算を実行する際の部分演算の数が最小となることであってよい。
【０１８７】
上記の例示的なグループ化方式は、畳み込み演算のカーネルがメモリユニットに記憶されていないという条件の下で説明されている。たとえば、カーネルは、ROMなどの別のメモリデバイスに記憶されてよい。しかしながら、いくつかの場合において、カーネルは、データが記憶されている同じメモリユニット内に記憶されるものとしてよい。たとえば、各演算に対するカーネルはメモリユニットの容量の1%を占めるものとしてよく、次いで、グループ化された演算2〜3は、メモリユニットの容量の17%を占める入力データ全体を有することができ(たとえば、15%+1%+1%=17%)、メモリユニットの残りの記憶空間5050はメモリユニットの容量全体の13%(たとえば、100%-17%-70%=13%)である。
【０１８８】
例２
図2を参照する別の典型的な例において、データAはメモリユニットの容量の40%を占め、データBはメモリユニットの容量の40%を占め、データCはメモリユニットの容量の80%を占め、データDはメモリユニットの容量の80%を占め、データEはメモリユニットの容量の10%を占めると仮定する。この例では、演算2は、メモリユニットの容量を超える入力データおよび出力データの量を有する第1の演算として、一連の演算1〜4から、識別され得る(たとえば、40%+80%>100%)。
【０１８９】
1つの第2の演算が、最初に、演算2が識別されたときに一連の演算から選択されてよく、その第2の演算は識別された演算2とグループ化される。この例では、ただ1つの第2の演算が演算2とグループ化されるべきであるときに2つの可能なグループ化方式がある。たとえば、演算1が演算2とグループ化され得るか、または演算3が演算2とグループ化され得る。第1のグループ化方式により、演算1は演算2とグループ化され得る。次いで、グループ化された演算1〜2の入力データAおよび出力データCの量がメモリユニットの容量を超えているかどうかの決定が行われ得る。ここで、この決定は、グループ化された演算1〜2の入力データAおよび出力データCの量がメモリユニットの容量を超えているというものである(たとえば、40%+80%>100%)。第2のグループ化方式により、演算3は演算2とグループ化され得る。次いで、グループ化された演算2〜3の入力データBおよび出力データDの量がメモリユニットの容量を超えているかどうかの決定が行われ得る。ここで、この決定は、グループ化された演算1〜2の入力データBおよび出力データDの量がメモリユニットの容量を超えているというものである(たとえば、40%+80%>100%)。この目的のために、演算2を第2の演算とグループ化することによって識別された演算2を実行することが可能でないという決定が行われ得る(たとえば、演算1が識別された演算2に直接先行するか、または演算3が識別された演算2に直接後続する、のいずれか)。
【０１９０】
このシナリオでは、識別された演算2とグループ化されるべき、第2の演算の数は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで徐々に増やされるものとしてよい。たとえば、2つの第2の演算は、演算2とグループ化されるべき一連の演算から選択され得る。この例では、2つの第2の演算が演算2とグループ化されるべきであるときに2つの可能なグループ化方式がある。たとえば、演算1および演算3が演算2とグループ化され得るか、または演算3および演算4が演算2とグループ化され得る。第1のグループ化方式により、グループ化された演算は演算1〜3を含むことができる。次いで、グループ化された演算1〜3の入力データAおよび出力データDの量がメモリユニットの容量を超えているかどうかの決定が行われ得る。ここで、この決定は、グループ化された演算1〜3の入力データAおよび出力データDの量がメモリユニットの容量を超えているというものである(たとえば、40%+80%>100%)。第2のグループ化方式により、グループ化された演算は演算2〜4を含むことができる。次いで、グループ化された演算2〜4の入力データBおよび出力データEの量がメモリユニットの容量を超えているかどうかの決定が行われ得る。ここで、この決定は、グループ化された演算2〜4の入力データBおよび出力データEの量がメモリユニットの容量を超えているというものである(たとえば、40%+10%<100%)。この目的のために、演算2を2つの第2の演算3および4とグループ化することによって識別された演算2を実行することが可能であるという決定が行われ得る。
【０１９１】
このシナリオにおいて、グループ化された演算の2つの中間データ結果CおよびDは、グループ化された演算2〜4を実行する際に生成され得る。メモリユニットの残りの記憶空間は、少なくともグループ化された演算2〜4の中間データ結果Cの一部および中間データ結果Dの一部を記憶するために使用できる。この例では、メモリユニットの残りの記憶空間は、メモリユニットの容量全体の50%(たとえば、100%-40%-10%=50%)である、すなわち、中間データ結果Cの一部および中間データ結果Dの一部のみがメモリユニットに記憶され得る。中間データ結果CおよびDの部分は、中間データ結果全体CおよびDならびにメモリユニットの残りの記憶空間の量に基づき決定され得る。いくつかの場合において、中間データ結果CのN個の等しい部分のうちの1つおよび中間データ結果DのN個の等しい部分のうちの1つがメモリユニットに記憶され得る。たとえば、この例では、中間データ結果Cの1/4および中間データ結果Dの1/4がメモリユニット内に記憶され得る(たとえば、(80%+80%)/50%=3.2)。この例では、グループ化された演算の入力データBの1/4は、中間データ結果Cの1/4を生成するように一度に処理されるものとしてよく、次いで、中間データ結果Cの1/4は、中間データ結果Dの1/4を生成するように処理されてよく、次いで、中間データ結果Dの1/4は、グループ化された演算の出力データEの1/4を生成するように処理され得る。処理は、4回実行されてよく、それにより、出力データ全体Eが取得され得る。任意選択で、メモリユニットの残りの記憶空間は、中に、中間データ結果Cの任意の部分および中間データ結果Dの任意の部分を記憶することができる。
【０１９２】
メモリユニットの残りの記憶空間は、中間データ結果の間のデータサイズの関係に基づき2つ以上の中間データ結果を記憶するように割り振られ得る。この例では、中間データ結果CおよびDの間のデータサイズの関係は1:1(たとえば、80%:80%)であり、したがって、メモリユニットの残りの記憶空間の50%は、中間データ結果Cに対して割り振られるものとしてよく、メモリユニットの残りの記憶空間の50%は、中間データ結果Dに対して割り振られるものとしてよい。メモリユニットの残りの記憶空間の割り振りは、演算のパラメータを考慮して異なるものであってよい。たとえば、パディング、ストライド、およびカーネルなどのパラメータは、演算が畳み込みであるときにメモリユニットの残りの記憶空間の割り振りを決定する際に考慮され得る。いくつかの場合において、メモリユニットの残りの記憶空間は、メモリユニットの構造に基づき2つ以上の中間データ結果を記憶するように割り振られ得る。たとえば、メモリユニットは線形であってよい、すなわち、データはメモリユニット内の任意のアドレスから始まる位置に記憶され得る。言い換えると、データは、メモリユニット内の別のデータの直後に記憶され得る。任意選択で、メモリユニットは、複数のより小さい記憶ユニット(たとえば、スライス)を含むことができる、すなわち、データは1つまたは複数の記憶ユニット内にのみ記憶され得る。言い換えると、入力データ、出力データ、および中間データ結果が異なるスライス内に記憶されることを確実にするためにデータアライメントが必要になり得る。
【０１９３】
例３
図2を参照するさらに別の典型的な例において、データAはメモリユニットの容量の10%を占め、データBはメモリユニットの容量の40%を占め、データCはメモリユニットの容量の80%を占め、データDはメモリユニットの容量の80%を占め、データEはメモリユニットの容量の10%を占めると仮定する。この例では、演算2は、メモリユニットの容量を超える演算2の入力データおよび出力データの量を有する第1の演算として、一連の演算1〜4から、識別され得る(たとえば、40%+80%>100%)。
【０１９４】
1つの第2の演算が、最初に、演算2が識別されたときに一連の演算から選択されてよく、その第2の演算は識別された演算2とグループ化される。この例では、ただ1つの第2の演算が演算2とグループ化されるべきであるときに2つの可能なグループ化方式がある。たとえば、演算1が演算2とグループ化され得るか、または演算3が演算2とグループ化され得る。第1のグループ化方式により、演算1は演算2とグループ化され得る。次いで、グループ化された演算1〜2の入力データAおよび出力データCの量がメモリユニットの容量を超えているかどうかの決定が行われ得る。ここで、この決定は、グループ化された演算1〜2の入力データAおよび出力データCの量がメモリユニットの容量を超えていないというものである(たとえば、10%+80%<100%)。第2のグループ化方式により、演算3は演算2とグループ化され得る。次いで、グループ化された演算2〜3の入力データBおよび出力データDの量がメモリユニットの容量を超えているかどうかの決定が行われ得る。ここで、この決定は、グループ化された演算1〜2の入力データBおよび出力データDの量がメモリユニットの容量を超えているというものである(たとえば、40%+80%>100%)。この目的のために、演算2を1つの第2の演算(たとえば、識別された演算2に直接先行する演算1)とグループ化することによって識別された演算2を実行することが可能であるという決定が行われ得る。
【０１９５】
この例では、中間データ結果Bの1/4がメモリユニット内に記憶され得る(たとえば、40%/(100%-10%-80%)=4.0)、すなわち、グループ化された演算は4つの部分演算によって正常に実行され得る。たとえば、グループ化された演算1〜2の入力データAの1/4は、中間データ結果Bの1/4を生成するように一度に処理されるものとしてよく、次いで、中間データ結果Bの1/4は、中間データ結果Cの1/4を生成するように処理されてよい。処理は、4回実行されてよく、それにより、出力データ全体Cが取得され得る。しかしながら、いくつかの場合において、上記の除算結果は、演算のパラメータおよび/またはメモリユニットの構造を考慮して次に大きい整数に少なくとも切り上げられ得る(たとえば、除算結果4は次に大きい整数5に切り上げられ、除算結果2.667は次に大きい整数3に切り上げられ、除算結果3.2は次に大きい整数4に切り上げられ得る)。たとえば、パディング、ストライド、およびカーネルなどのパラメータは、演算が畳み込みであるときにグループ化された演算の入力データの一部分を決定する際に考慮され得る。
【０１９６】
この例では、識別された演算2がより少数の第2の演算とグループ化することによって正常に実行され得る限り、演算2をより多数の第2の演算とグループ化することによって識別された演算2を実行することが可能かどうかを決定する必要はない。たとえば、識別された演算2は演算1とグループ化することによって正常に実行され得るので、第2の演算の数を徐々に増やしてゆきさらに多くの他の演算をグループ化することによって識別された演算2を実行することが可能かどうかを決定する必要はない。しかしながら、識別された演算2がより少数の第2の演算とグループ化することによって正常に実行されない場合、上で説明されているように、第2の演算の数は、演算2がより多くの第2の演算をグループ化することによって実行できるようになるまで徐々に増やされ得る。
【０１９７】
いくつかの場合において、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データおよび/または入力データは外部メモリに記憶され得る。このシナリオは、第2の演算の数が最大値まで徐々に増大されるときに生じ得るもので、識別された演算(すなわち、メモリユニットの容量を超える入力データおよび出力データの量を有する第1の演算)はそれでも正常には実行され得ない。
【０１９８】
例４
たとえば、図2を参照するさらに別の典型的な例では、データAはメモリユニットの容量の60%を占め、データBはメモリユニットの容量の60%を占め、データCはメモリユニットの容量の80%を占め、データDはメモリユニットの容量の80%を占め、データEはメモリユニットの容量の60%を占める。演算1は、メモリユニットの容量を超える入力データおよび出力データの量を有することができる演算(すなわち、第1の演算)として識別され得る。次いで、少なくとも1つの第2の演算は、演算2〜4から選択されてよく、この第2の演算は識別された演算1とグループ化されるものである。直接隣接している演算2は、演算1とグループ化されるように最初に選択される。しかしながら、グループ化された演算1および2は、メモリユニットに記憶されている入力データAおよび出力データCの両方では、データAおよびデータCの総和がメモリユニットの容量を超える(たとえば、60%+80%>100%)ので、実行され得ない。この場合、第2の演算の数は徐々に2まで増やされ得る、すなわち、演算2および3は演算1とグループ化される。しかしながら、グループ化された演算1〜3は、メモリユニットに記憶されている入力データAおよび出力データDの両方では、データAおよびデータDの総和がメモリユニットの容量を超える(たとえば、60%+80%>100%)ので、実行され得ない。この場合、第2の演算の数は徐々に3まで増やされ得る、すなわち、演算2〜4は演算1とグループ化される。しかしながら、グループ化された演算1〜4は、メモリユニットに記憶されている入力データAおよび出力データEの両方では、データAおよびデータEの総和がメモリユニットの容量を超える(たとえば、60%+60%>100%)ので、実行され得ない。
【０１９９】
この目的のために、(1)グループ化された演算における演算の数は一連の演算における演算の数に等しく(たとえば、グループ化された演算は演算1〜4を含む)、(2)グループ化された演算の入力データおよび出力データの量はメモリユニットの容量を超える(たとえば、グループ化された演算の入力データAおよび出力データEの全体の量がメモリユニットの容量を超える)という決定が行われ得る。いくつかの場合において、入力データAは、メモリユニットが出力データ全体Eならびに中間データB、C、およびDの一部を記憶するために使用できるように外部メモリに記憶され得る。入力データAの一部は、各部分演算について外部メモリから読み出されるものとしてよく、出力データEの一部は、計算された中間データB、C、およびDに基づき生成され得る。入力データAの一部分は、上で説明されているように、グループ化された演算1〜4の中間データB、C、およびDの量ならびに出力データEの量に少なくとも一部は基づき決定され得る。任意選択で、出力データEは、メモリユニットが入力データ全体Aならびに中間データB、C、およびDの一部を記憶するために使用できるように外部メモリに記憶され得る。入力データAの一部は、各部分演算について処理されるものとしてよく、出力データEの一部は、計算された中間データB、C、およびDに基づき生成され、外部メモリに記憶され得る。入力データAの一部分は、上で説明されているように、グループ化された演算1〜4の中間データB、C、およびDの量ならびに入力データAの量に少なくとも一部は基づき決定され得る。任意選択で、入力データAおよび出力データEは両方とも、外部メモリに記憶されるものとしてよく、メモリユニットは少なくとも中間データB、C、およびDの一部のみを記憶するために使用できる。
【０２００】
図7は、本発明の実施形態によるデータ演算の例示的な方法700を示すフローチャートである。方法700は、一連のデータ演算により入力データを処理して出力データを取得するために使用され得る。一連のデータ演算は、順次実行される複数の演算を含むことができる。先行する演算の出力データは、後続の演算の入力データとして使用され得る。一連のデータ演算は、一連の畳み込み演算またはテンソル演算を含むことができる。テンソル演算は、プーリング、アップスケーリング、またはReLUを含むことができる。演算の各タイプに対する1つまたは複数の層が提供され得る。入力データAは、画像データ、オーディオ、ビデオデータ、および様々な他のデータであってよい。方法700はプロセス701〜704を含み得る。
【０２０１】
プロセス701において、一連の演算によって処理されるべき入力データが受け取られ得る。
【０２０２】
プロセス702において、一連の演算からの第1の演算が識別されるものとしてよく、その第1の演算はメモリユニットの容量を超える入力データおよび出力データの量を有する。いくつかの実施形態において、一連の演算のうちの演算の入力データ全体および出力データ全体は、演算を実行する際に同じメモリユニット内に記憶され得る。演算の出力データのサイズは、上で説明されているように、少なくとも一部は入力データのサイズおよび演算の係数(たとえば、パラメータ)の数に基づき決定され得る。
【０２０３】
プロセス703において、少なくとも1つの第2の演算は、一連の演算から選択され得る。少なくとも1つの第2のものは、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき第1のものとグループ化され得る。
【０２０４】
少なくとも1つの第2の演算が、一連の演算からの第1の演算がメモリユニットの容量を超える入力データおよび出力データの量を有すると決定されたときに一連の演算から選択され得る。第1の演算の処理は、グループ化された処理の入力データおよび出力データがメモリユニットの容量を超えないという条件の下で第2の演算の処理とグループ化され得る。たとえば、図5に示されている例では、演算3(たとえば、メモリユニットの容量を超える入力データと出力データの総和を有する第1の演算)および演算2(たとえば、第2の演算)は、データBとデータDとの総和がメモリユニットの容量を超えないという条件の下で入力データ全体Bおよび出力データ全体Dとグループ化されて処理され得る。
【０２０５】
少なくとも1つの第2の演算は、第1の演算に直接隣接している一連の演算からの少なくとも1つの演算を含むことができる。たとえば、少なくとも1つの第2の演算は、第1の演算に直接先行するか、または直接後続する一連の演算からの演算を含むことができる。
【０２０６】
いくつかの実施形態において、プロセス703は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えているかどうかを決定することを含むことができる。グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数は徐々に増やされ得る。(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データおよび/または入力データは外部メモリに記憶され得る。
【０２０７】
プロセス704において、グループ化された演算の入力データの一部は、グループ化された演算の出力データの一部を取得するように処理され得る。言い換えると、グループ化された演算の入力データ全体は、各々がグループ化された演算の入力データの一部を処理する複数のサブプロセスによって処理され得る。
【０２０８】
各サブプロセスにおいて処理される、入力データの一部は、グループ化された演算の中間データ結果の量に少なくとも一部は基づき決定され得る。メモリユニットは、グループ化された演算の入力データ全体および出力データ全体を中に記憶するように構成されるものとしてよく、メモリユニットの残りの記憶空間は、グループ化された演算の中間データ結果の少なくとも一部を記憶するために使用できる。いくつかの場合において、中間データ結果CのM個の等しい部分のうちの1つがメモリユニットに記憶されてよく、Mは2以上の整数である。任意選択で、メモリユニットは、中に、中間データ結果Cの任意の部分を記憶することができる。グループ化された演算の入力データの一部分は、入力データのN個の等しい部分のうちの1つと限界データとを含むことができ、Nは2以上の整数である。整数Nは、整数Mと同じであってよい。ここで、グループ化された演算の入力データの部分が一度に処理されることは、中間データ結果の部分がメモリユニットの残りの記憶空間内に記憶されることに依存し得るが、それは、中間データ結果の部分がグループ化された演算の入力データの部分に対応するからである。
【０２０９】
いくつかの実施形態において、方法700は、グループ化された演算の出力データを取得するようにグループ化された演算の出力データの各部分をアセンブルすることをさらに含むことができる。
【０２１０】
本開示は、データ処理のシステムをさらに実現する。システムは、1つまたは複数のプロセッサと、少なくとも1つのメモリユニットと、命令が記憶されている1つまたは複数のメモリとを備えることができる。メモリユニットは、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、同期型ダイナミックランダムアクセスメモリ(SDRAM)、ダブルデータレート(DDR)、ダブルデータレート同期型ダイナミックランダムアクセスメモリ(DDR SDRAM)、DDR、DDR2、DDR3、T-RAM、Z-RAM、などを含む好適なRAMであってよい。いくつかの場合において、メモリユニットは、組み込みデバイスのオンチップメモリであってもよい。
【０２１１】
1つまたは複数のメモリに記憶されている命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、(a)一連の演算によって処理されるべき入力データを受け取ることと、(b)一連の演算から第1の演算を識別することであって、第1の演算はメモリユニットの容量を超える入力データおよび出力データの量を有する、識別することと、(c)一連の演算から、第1の演算とグループ化されるべき少なくとも1つの第2の演算を、グループ化された演算の入力データおよび出力データの量ならびにメモリユニットの容量に少なくとも一部は基づき、選択することと、(d)グループ化された演算の入力データの一部を処理することであって、入力データの一部はグループ化された演算の中間データ結果の量に少なくとも一部は基づき決定される、処理することとを行わせることができる。
【０２１２】
一連の演算は、一連の畳み込み演算および/または一連のテンソル演算を含む。いくつかの場合において、プロセス(c)は、グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えなくなるまで少なくとも1つの第2の演算において演算の数を徐々に増やすことを含むことができる。プロセス(c)は、(1)グループ化された演算における演算の数が一連の演算における演算の数に等しく、(2)グループ化された演算の入力データおよび出力データの量がメモリユニットの容量を超えたときにグループ化された演算の出力データおよび/または入力データを外部メモリに記憶することをさらに含むことができる。
【０２１３】
図8は、本出願で開示されているコンピューティングシステムを実装するように構成される得るコンピュータシステム801を示している。コンピュータシステム801は、携帯電話、タブレット、ウェアラブルデバイス、ラップトップコンピュータ、デスクトップコンピュータ、中央サーバなどを含み得る。
【０２１４】
コンピュータシステム801は、中央演算処理装置(CPU、本明細書では「プロセッサ」および「コンピュータプロセッサ」とも称される)805を含み、これはシングルコアもしくはマルチコアプロセッサ、または並列処理用の複数のプロセッサであってよい。CPUは、上で説明されているようなプロセッサであってよい。コンピュータシステム801は、メモリまたはメモリロケーション810(たとえば、ランダムアクセスメモリ、リードオンリーメモリ、フラッシュメモリ)、電子記憶装置ユニット815(たとえば、ハードディスク)、1つまたは複数の他のシステムと通信するための通信インターフェース820(たとえば、ネットワークアダプタ)、ならびにキャッシュ、他のメモリ、データ記憶装置、および/または電子ディスプレイアダプタなどの周辺デバイス825も含む。いくつかの場合において、通信インターフェースは、コンピュータが撮像デバイスまたはオーディオデバイスなどの別のデバイスと通信することを可能にし得る。コンピュータは、分析のために結合デバイスから入力データを受信することができるものとしてよい。メモリ810、記憶装置ユニット815、インターフェース820、および周辺デバイス825は、マザーボードなどの、通信バス(実線)を通してCPU805と通信する。記憶装置ユニット815は、データを記憶するためのデータ記憶装置ユニット(またはデータリポジトリ)であり得る。コンピュータシステム801は、通信インターフェース820の助けを借りてコンピュータネットワーク(「ネットワーク」)830に動作可能に結合され得る。ネットワーク830は、インターネット、インターネットおよび/もしくはエクストラネット、またはインターネットと通信するイントラネットおよび/もしくはエクストラネットであってよい。ネットワーク830は、いくつかの場合において、遠隔通信および/またはデータネットワークである。ネットワーク830は、クラウドコンピューティングなどの、分散コンピューティングを可能にし得る、1つまたは複数のコンピュータサーバを含み得る。ネットワーク830は、いくつかの場合においてコンピュータシステム801の助けを借りて、コンピュータシステム801に結合されているデバイスがクライアントまたはサーバとして動作することを可能にし得る、ピアツーピアネットワークを実装し得る。
【０２１５】
CPU805は、プログラムまたはソフトウェアで具現化され得る、機械可読命令のシーケンスを実行することができる。命令は、メモリ810などの、メモリロケーション内に記憶され得る。これらの命令はCPU805に向けられるものとしてよく、その後、本開示の方法を実装するようにCPU805をプログラムするか、または他の何らかの方法で構成することができる。CPU805によって実行される演算の例は、フェッチ、復号、実行、およびライトバックを含むことができる。
【０２１６】
CPU805は、集積回路などの、回路の一部であってよい。システム801の1つまたは複数の他のコンポーネントが回路内に含まれ得る。いくつかの場合において、回路は、特定用途向け集積回路(ASIC)である。
【０２１７】
記憶装置ユニット815は、ドライバ、ライブラリ、および保存されたプログラムなどの、ファイルを記憶することができる。記憶装置ユニット815は、ユーザデータ、たとえば、ユーザ設定およびユーザプログラムを記憶することができる。コンピュータシステム801は、いくつかの場合において、イントラネットまたはインターネットを通じてコンピュータシステム801と通信するリモートサーバ上に配置されているような、コンピュータシステム801の外部にある1つまたは複数の追加のデータ記憶装置ユニットを含むことができる。
【０２１８】
コンピュータシステム801は、ネットワーク830を通じて1つまたは複数のリモートコンピュータシステムと通信することができる。たとえば、コンピュータシステム801は、ユーザのリモートコンピュータシステムと通信することができる。リモートコンピュータシステムの例は、パーソナルコンピュータ、スレートまたはタブレットPC、スマートフォン、携帯情報端末、などを含む。ユーザは、ネットワーク830を介してコンピュータシステム801にアクセスすることができる。
【０２１９】
本明細書で説明されているような方法は、たとえば、メモリ801または電子記憶装置ユニット815などの、コンピュータシステム801の電子記憶装置ロケーション上に記憶されている機械(たとえば、コンピュータプロセッサ)実行可能コードを用いて実装され得る。機械実行可能または機械可読コードは、ソフトウェアの形態で提供され得る。使用中に、コードはプロセッサ805によって実行され得る。いくつかの場合において、コードは、記憶装置ユニット815から取り出され、プロセッサ805によってすぐにアクセスできるようにメモリ710に記憶され得る。いくつかの状況において、電子記憶装置ユニット815は除外されてよく、機械実行可能命令は、メモリ810上に記憶される。
【０２２０】
コードは、プリコンパイルされ、コードを実行するように適合されたプロセッサを有する機械と使用するように構成され得るか、または実行時にコンパイルされ得る。コードは、プリコンパイルまたはコンパイルされたままの方式でコードを実行することを可能にするように選択され得るプログラミング言語で供給され得る。
【０２２１】
コンピュータシステム801などの、本明細書で提供されているシステムおよび方法の態様は、プログラミングで具現化され得る。この技術の様々な態様は、典型的には機械可読媒体の一種で運ばれるか、または具現化される機械(もしくはプロセッサ)実行可能コードおよび/または関連するデータの形態をとる「製品」または「製造品」と考えられ得る。機械実行可能コードは、メモリ(たとえば、リードオンリーメモリ、ランダムアクセスメモリ、フラッシュメモリ)またはハードディスクなどの電子記憶装置ユニット上に記憶され得る。「記憶装置」タイプの媒体は、ソフトウェアプログラミングのために随時非一時的記憶装置を実現し得る、様々な半導体メモリ、テープドライブ、ディスクドライブ、および同様のものなどの、コンピュータ、プロセッサもしくは同様のもの、または関連するそのモジュールの有形のメモリのどれかまたはすべてを含むことができる。ソフトウェアの全部または一部は、時には、インターネットまたは他の様々な遠隔通信ネットワークを通じて通信され得る。そのような通信は、たとえば、一方のコンピュータまたはプロセッサから別のコンピュータまたはプロセッサに、たとえば、管理サーバまたはホストコンピュータからアプリケーションサーバのコンピュータプラットフォームにソフトウェアをロードすることを可能にし得る。そこで、ソフトウェア要素を収め得る別のタイプの媒体は、有線および光地上通信線ネットワークを通じて、および様々なエアリンク上で、ローカルデバイスの間の物理的インターフェース上で使用されるような、光波、電波、および電磁波を含む。有線もしくは無線リンク、光リンク、または同様のものなどの、そのような波を運ぶ物理的要素も、ソフトウェアを収めた媒体として考慮されてよい。本明細書で使用されているように、非一時的な有形の「記憶装置」媒体に制限されない限り、コンピュータまたは機械「可読媒体」などの用語は、実行のために命令をプロセッサに提供することに参加する媒体を指す。
【０２２２】
したがって、コンピュータ実行可能コードなどの、機械可読媒体は、限定はしないが有形の記憶媒体、搬送波媒体、または物理的伝送媒体を含む、多くの形態をとり得る。不揮発性記憶媒体は、たとえば、図面に示されている、データベースなどを実装するために使用され得るような、コンピュータまたは同様のものの記憶装置デバイスのうちのどれかなどの、光または磁気ディスクを含む。揮発性記憶媒体は、そのようなコンピュータプラットフォームのメインメモリなどのダイナミックメモリを含む。有形の伝送媒体は、コンピュータシステム内にバスを含む電線を含む、同軸ケーブル、銅線、および光ファイバを含む。搬送波伝送媒体は、無線周波(RF)および赤外線(IR)データ通信中に生成されるような電気もしくは電磁信号、または音波もしくは光波の形態をとり得る。したがって、一般的な形態のコンピュータ可読媒体は、たとえば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、CD-ROM、DVDもしくはDVD-ROM、他の光媒体、パンチカード、紙テープ、穴のパターンを有する他の物理的記憶媒体、RAM、ROM、PROMおよびEPROM、FLASH-EPROM、他のメモリチップもしくはカートリッジ、データもしくは命令をトランスポートする搬送波、そのような搬送波をトランスポートするケーブルもしくはリンク、またはコンピュータがプログラミングコードおよび/またはデータを読み取り得る他の媒体を含む。これらの形態のコンピュータ可読媒体の多くは、実行のために1つまたは複数の命令の1つまたは複数のシーケンスをプロセッサに搬送することに関与し得る。
【０２２３】
コンピュータシステム801は、たとえば、管理インターフェースを提供するためにユーザインターフェース840を含む電子ディスプレイ735を含むか、または通信することができる。UIの例は、限定することなく、グラフィカルユーザインターフェース(GUI)およびウェブベースのユーザインターフェースを含む。
【０２２４】
本開示の方法およびシステムは、1つまたは複数のアルゴリズムを用いて実装され得る。アルゴリズムは、中央演算処理装置805による実行時にソフトウェアを用いて実装され得る。
【０２２５】
本明細書では本発明の好ましい実施形態が図示され説明されているが、そのような実施形態は専ら例として提示されていることは当業者には明らかであろう。こうして、多数の変化、変更、および置換は、本発明から逸脱することなく当業者が思いつくであろう。本明細書で説明されている本発明の実施形態の様々な代替的形態は、本発明を実施するうえで採用され得ることは理解されるであろう。次の請求項は発明の範囲を定義すること、これらの請求項およびその等価物の範囲内にある方法および構造がそれによって対象となることが意図されている。
【符号の説明】
【０２２６】
700  方法
735  電子ディスプレイ
801  コンピュータシステム
805  中央演算処理装置
810  メモリまたはメモリロケーション
815  電子記憶装置ユニット
820  通信インターフェース
825  周辺デバイス
830  コンピュータネットワーク
840  ユーザインターフェース
2011〜2014  データ演算
2001  入力データA
2002  第1の中間データ結果B
2003  第2の中間データ結果C
2004  第3の中間データ結果D
2005  最終中間データ結果E
2005  出力データE
2011  第1の演算1
2012  第2の演算2
2013  第3の演算3
2014  第4の演算4
3000  メモリユニット
3001  入力データA
3005  出力データE
3011  演算1
3014  演算4
4000  メモリユニット
4001  入力データA
4002  第1の中間データ結果B
4005  出力データE
4011  演算1
4014  演算4
5000  メモリユニット
5001〜5005  データ
5001  入力データA
5002  データB
5003  入力データC
5004  出力データD
5011〜5014  演算
5012  演算2
5013  演算3
5050  記憶空間
6000  メモリユニット
6001〜6005  データ
6004  中間データ結果D
6011〜6014  演算
6012  演算2
6013  演算3
6050  記憶空間
【図１】
2019169150.tif 000004
【図２】
2019169150.tif 000005
【図３】
2019169150.tif 000006
【図４】
2019169150.tif 000007
【図５】
2019169150.tif 000008
【図６】
2019169150.tif 000009
【図７】
2019169150.tif 000010
【図８】
2019169150.tif 000011
【外国語明細書】
2019169150000001.pdf