(57)【要約】  複数のバッファを用いてデータを転送するための装置を含む方法、システムおよび装置であって、当該装置は、複数のメモリと１つ以上の処理ユニットとを含み、当該１つ以上の処理ユニットは、第１のデータ格納場所に格納され、第２のデータ格納場所に転送されているデータ要素のシーケンスのバッファメモリアドレスを決定するように構成される。シーケンスにおけるデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別し、当該複数の値の各々は、メモリのうちの異なる１つに対応する。バッファ割り当て要素の値に基づいて１つ以上のデータ要素のグループのバッファメモリアドレスを決定する。データ要素のシーケンスの１つ以上のデータ要素の後続グループのバッファメモリアドレスを決定する前に、バッファ割り当て要素の値を切り替える。
2020506453.tif 000002
【特許請求の範囲】
【請求項１】
データを転送するための装置であって、
少なくとも第１のメモリおよび第２のメモリを含む複数のメモリと、
１つ以上の処理ユニットとを備え、前記１つ以上の処理ユニットは、
第１のデータ格納場所に格納され、第２のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するように構成され、前記シーケンスの前記バッファメモリアドレスを決定することは、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別することによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる１つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記１つ以上のデータ要素のグループのバッファメモリアドレスを決定することによってなされ、前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が、前記第１のメモリに対応する第１の値である場合に、前記第１のメモリのベースアドレスと前記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記１つ以上のデータ要素のグループを前記第１のメモリに割り当てることと、
前記バッファ割り当て要素の前記値が、前記第２のメモリに対応する、前記第１の値とは異なる第２の値である場合に、前記１つ以上のデータ要素のグループを前記第２のメモリに割り当てるために、前記第１のメモリの前記ベースアドレスと、前記第２のメモリの前記メモリアドレスオフセット値と、前記１つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第２のメモリに割り当てることとを含み、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの１つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えることによってなされ、
前記１つ以上の処理ユニットは、さらに、
１つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第１または第２のメモリのそれぞれのメモリ場所に転送するように構成される、装置。
【請求項２】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記第１のデータ格納場所および前記第２のデータ格納場所の各々は、少なくとも、前記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を備える、請求項１に記載の装置。
【請求項３】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第１のデータ記憶容量を超えるデータ量を備える、請求項１または２に記載の装置。
【請求項４】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、前記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて前記１つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、前述の請求項のいずれか１項に記載の装置。
【請求項５】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が前記第２の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレスオフセット値と、（ｉｉｉ）前記１つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することと、
前記バッファ割り当て要素の前記値が前記第１の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレス値から独立した前記１つ以上のデータ要素のグループの前記オフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することとを備える、請求項４に記載の装置。
【請求項６】
前記１つ以上のデータ要素のグループの前記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく、請求項４または５に記載の装置。
【請求項７】
前記第２のメモリの前記メモリアドレスオフセット値は、前記第１のメモリのメモリアドレスと前記第２のメモリのアドレスとの間の差に基づく、前述の請求項のいずれか１項に記載の装置。
【請求項８】
データを転送するためのコンピューティングシステムによって実行される方法であって、
第１のデータ格納場所に格納され、第２のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するステップを備え、前記シーケンスの前記バッファメモリアドレスを決定するステップは、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別するステップによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる１つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定するステップは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記１つ以上のデータ要素のグループのバッファメモリアドレスを決定するステップによってなされ、前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、
前記バッファ割り当て要素の前記値が、複数のメモリの第１のメモリに対応する第１の値である場合に、前記第１のメモリのベースアドレスと前記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記１つ以上のデータ要素のグループを前記第１のメモリに割り当てるステップと、
前記バッファ割り当て要素の前記値が、前記複数のメモリの第２のメモリに対応する、前記第１の値とは異なる第２の値である場合に、前記１つ以上のデータ要素のグループを前記第２のメモリに割り当てるために、前記第１のメモリの前記ベースアドレスと、前記第２のメモリの前記メモリアドレスオフセット値と、前記１つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第２のメモリに割り当てるステップとを含み、
前記シーケンスの前記バッファメモリアドレスを決定するステップは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの１つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えるステップによってなされ、
前記方法は、さらに、
１つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第１または第２のメモリのそれぞれのメモリ場所に転送するステップを備える、方法。
【請求項９】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記第１のデータ格納場所および前記第２のデータ格納場所の各々は、少なくとも、前記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を備える、請求項８に記載の方法。
【請求項１０】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第１のデータ記憶容量を超えるデータ量を備える、請求項８または９に記載の方法。
【請求項１１】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、前記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて前記１つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項８から１０のいずれか１項に記載の方法。
【請求項１２】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、
前記バッファ割り当て要素の前記値が前記第２の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレスオフセット値と、（ｉｉｉ）前記１つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定するステップと、
前記バッファ割り当て要素の前記値が前記第１の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレス値から独立した前記１つ以上のデータ要素のグループの前記オフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定するステップとを備える、請求項１１に記載の方法。
【請求項１３】
前記１つ以上のデータ要素のグループの前記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく、請求項１１または１２に記載の方法。
【請求項１４】
前記第２のメモリの前記メモリアドレスオフセット値は、前記第１のメモリのメモリアドレスと前記第２のメモリのアドレスとの間の差に基づく、請求項１１から１３のいずれか１項に記載の方法。
【請求項１５】
データを転送するためのシステムであって、
少なくとも第１のメモリおよび第２のメモリを含む複数のメモリと、
１つ以上の数値演算ユニットを含む１つ以上の処理ユニットとを備え、前記１つ以上の処理ユニットは、
第１のデータ格納場所に格納され、第２のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するように構成され、前記シーケンスの前記バッファメモリアドレスを決定することは、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別することによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる１つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記１つ以上のデータ要素のグループのバッファメモリアドレスを決定することによってなされ、前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が、前記第１のメモリに対応する第１の値である場合に、前記第１のメモリのベースアドレスと前記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記１つ以上のデータ要素のグループを前記第１のメモリに割り当てることと、
前記バッファ割り当て要素の前記値が、前記第２のメモリに対応する、前記第１の値とは異なる第２の値である場合に、前記１つ以上のデータ要素のグループを前記第２のメモリに割り当てるために、前記第１のメモリの前記ベースアドレスと、前記第２のメモリの前記メモリアドレスオフセット値と、前記１つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第２のメモリに割り当てることとを含み、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの１つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えることによってなされ、
前記１つ以上の処理ユニットは、さらに、
各々の決定されたメモリアドレスを特定するデータを出力するように構成され、
１つ以上のプロセッサは、１つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第１または第２のメモリのそれぞれのメモリ場所に転送するように構成される、システム。
【請求項１６】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記第１のデータ格納場所および前記第２のデータ格納場所の各々は、少なくとも、前記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を備える、請求項１５に記載のシステム。
【請求項１７】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第１のデータ記憶容量を超えるデータ量を備える、請求項１５または１６に記載のシステム。
【請求項１８】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、前記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて前記１つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項１５から１７のいずれか１項に記載のシステム。
【請求項１９】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が前記第２の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレスオフセット値と、（ｉｉｉ）前記１つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することと、
前記バッファ割り当て要素の前記値が前記第１の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレス値から独立した前記１つ以上のデータ要素のグループの前記オフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することとを備える、請求項１８に記載のシステム。
【請求項２０】
前記１つ以上のデータ要素のグループの前記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく、請求項１８または１９に記載のシステム。
【請求項２１】
前記第２のメモリの前記メモリアドレスオフセット値は、前記第１のメモリのメモリアドレスと前記第２のメモリのアドレスとの間の差に基づく、請求項１８から２０のいずれか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
本明細書は、一般に、ハードウェアダブルバッファを有する特殊目的計算ユニットを用いて機械学習計算を行うことに関する。
【背景技術】
【０００２】
ニューラルネットワークは、モデルの１つ以上の層を利用して、受信した入力について出力、たとえば分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、外側層に加えて１つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の次の層、すなわちネットワークの次の隠れ層または出力層、への入力として用いられる。ネットワークの各層は、それぞれのパラメータセットの現在の値に従って、受信した入力から出力を生成する。
【０００３】
いくつかのニューラルネットワークは、１つ以上の畳み込みニューラルネットワーク層を含む。各畳み込みニューラルネットワーク層は、関連付けられた一組のカーネルを有する。カーネルは、重み入力のマトリックス構造として表現することができる。各畳み込み層は、カーネルを使用して、層への入力を処理する。層への一組の入力も、マトリックス構造として表現することができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本明細書には、Ｎ次元テンソルのデータをダブルバッファリングするための特殊目的計算ユニットの使用に関連する技術が記載されている。
【０００５】
一般に、本明細書に記載されている主題の１つの革新的な局面は、データを転送するための装置において具体化することができる。上記装置は、少なくとも第１のメモリおよび第２のメモリを含む複数のメモリを含んでもよい。上記装置は、１つ以上の処理ユニットも含んでもよい。上記１つ以上の処理ユニットは、第１のデータ格納場所に格納され、第２のデータ格納場所に転送されているデータ要素のシーケンスのバッファメモリアドレスを決定するように構成されてもよい。上記シーケンスにおける上記データ要素のうちの１つ以上のデータ要素の各グループについて、上記１つ以上の処理ユニットは、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別してもよく、上記複数の値の各々は、上記メモリのうちの異なる１つに対応する。上記１つ以上の処理ユニットは、上記バッファ割り当て要素の上記値に基づいて上記１つ以上のデータ要素のグループのバッファメモリアドレスを決定してもよい。上記バッファ割り当て要素の上記値が、上記第１のメモリに対応する第１の値である場合に、上記１つ以上の処理ユニットは、上記第１のメモリのベースアドレスと上記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて上記１つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することによって、上記１つ以上のデータ要素のグループを上記第１のメモリに割り当ててもよい。上記バッファ割り当て要素の上記値が、上記第２のメモリに対応する、上記第１の値とは異なる第２の値である場合に、上記１つ以上の処理ユニットは、上記１つ以上のデータ要素のグループを上記第２のメモリに割り当てるために、上記第１のメモリの上記ベースアドレスと、上記第２のメモリの上記メモリアドレスオフセット値と、上記１つ以上のデータ要素のグループの上記メモリオフセット値との組み合わせに基づいて上記１つ以上のデータ要素のグループの上記メモリアドレスを決定することによって、上記データ要素を上記第２のメモリに割り当ててもよい。上記１つ以上の処理ユニットは、上記データ要素のシーケンスの１つ以上のデータ要素の後続グループの上記バッファメモリアドレスを決定する前に、上記バッファ割り当て要素の上記値を切り替えてもよい。上記１つ以上の処理ユニットは、１つ以上のデータ要素の各グループの上記決定されたバッファメモリアドレスを用いて、各データ要素を上記第１または第２のメモリのそれぞれのメモリ場所に転送してもよい。
【０００６】
これらのおよび他の実現例の各々は、任意に、以下の特徴のうちの１つ以上を含んでもよい。いくつかの局面において、上記第１のメモリおよび上記第２のメモリは、各々が第１のデータ記憶容量を有するバッファである。上記第１のデータ格納場所および上記第２のデータ格納場所の各々は、少なくとも、上記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を含んでもよい。
【０００７】
いくつかの局面において、上記第１のメモリおよび上記第２のメモリは、各々が第１のデータ記憶容量を有するバッファである。上記データ要素のシーケンスは、上記第１のデータ記憶容量を超えるデータ量を含んでもよい。
【０００８】
いくつかの局面において、上記バッファ割り当て要素の上記値および上記第２のメモリのメモリアドレスオフセット値に基づいて上記１つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することは、上記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて上記１つ以上のデータ要素のグループの上記メモリオフセット値を決定することを含んでもよい。
【０００９】
いくつかの局面において、上記バッファ割り当て要素の上記値および上記第２のメモリのメモリアドレスオフセット値に基づいて上記１つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することは、上記バッファ割り当て要素の上記値が上記第２の値であるたびに、（ｉ）上記第１のメモリの上記ベースアドレスと、（ｉｉ）上記第２のメモリの上記メモリアドレスオフセット値と、（ｉｉｉ）上記１つ以上のデータ要素のグループの上記メモリオフセット値との合計を上記１つ以上のデータ要素のグループの上記バッファメモリアドレスとして決定することを含んでもよい。上記バッファ割り当て要素の上記値が上記第１の値であるたびに、（ｉ）上記第１のメモリの上記ベースアドレスと、（ｉｉ）上記第２のメモリの上記メモリアドレス値から独立した上記１つ以上のデータ要素のグループの上記オフセット値との合計に基づいて、上記１つ以上のデータ要素のグループの上記バッファメモリアドレスが決定されてもよい。
【００１０】
いくつかの局面において、上記１つ以上のデータ要素のグループの上記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく。上記第２のメモリの上記メモリアドレスオフセット値は、上記第１のメモリのメモリアドレスと上記第２のメモリのアドレスとの間の差に基づいてもよい。
【００１１】
本明細書に記載されている主題は、以下の利点のうちの１つ以上を実現するように特定の実施形態において実現されてもよい。複数のメモリを用いることにより、単一のバッファの記憶容量を超えるデータをより迅速かつ効率的に転送することが可能になる。たとえば、８メガバイト（ＭＢ）のデータが第１のデータ格納場所から第２のデータ格納場所に転送され、バッファの容量が４ＭＢに過ぎない場合、データは２つの４ＭＢバッファの間で分割可能である。ネステッドループを用いて複数のバッファのメモリアドレスを決定することによって、アドレスを決定するための命令の数を減らすことができ、その結果、符号化が高密度になり、使用されるメモリリソースが少なくなり、および／または、必要なメモリリソースが少なくなる。各バッファメモリアドレス決定後に値を切り替えられるバッファ割り当て要素（たとえば、１ビットトグルカウンタ）を用いることにより、バッファ割り当てをより迅速に行うことが可能になり、データを複数のバッファに割り当てるための命令総数を減らすことができる。また、データを第２のバッファに割り当てる前に、第１のバッファが一杯であるか否かを判断するのではなく、バッファ割り当て要素の値を切り替えることにより、処理をより迅速に行うことが可能になり、プロセッサに対する計算需要を少なくすることができる。命令が減少することにより、性能も高くなる。なぜなら、処理ユニットは、より少ない命令を処理してメモリアドレスを判断するからである。特殊目的ハードウェアユニットにおいてダブルバッファ命令を符号化することは、プロセッサがデータをバッファに割り当てるために実行するであろう計算サイクル数を減少させ、そのため、他の計算タスクのためのプロセッサ帯域幅を増加させる。
【００１２】
このおよび他の局面の他の実現例は、コンピュータ記憶装置に符号化された方法の動作を実行するように構成された対応するシステム、装置およびコンピュータプログラムを含む。１つ以上のコンピュータのシステムは、動作時にシステムに動作を実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによってそのように構成されてもよい。１つ以上のコンピュータプログラムは、データ処理装置によって実行されると装置に動作を実行させる命令を有することによってそのように構成されてもよい。
【００１３】
本明細書に記載されている主題の１つ以上の実現例の詳細を、添付の図面および以下の説明に記載する。主題の他の考えられる特徴、局面および利点は、明細書、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１４】
【図１】計算システムの一例のブロック図である。
【図２】バッファを用いて転送されるデータの一例およびバッファ割り当て要素の一例を示す。
【図３】ダブルバッファリングを用いてデータを転送するためのプロセスの一例を示すフロー図である。
【発明を実施するための形態】
【００１５】
さまざまな図における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
一般に、ソフトウェアアルゴリズムがＮ次元テンソルを処理するとき、ネステッドループが用いられる場合がある。各ループは、Ｎ次元テンソルのそれぞれの次元を横断することに関与し得る。多次元テンソルは、マトリックスまたは多次元マトリックスであってもよい。たとえば、二次元テンソルは、マトリックスであり、三次元テンソルは、複数の二次元マトリックスからなる三次元マトリックスである。Ｎ次元テンソルの各次元は、１つ以上の要素を含んでもよく、各要素は、それぞれのデータ値を格納してもよい。たとえば、テンソルは、プログラムにおける変数であってもよく、当該変数は、３つの次元を有してもよい。第１の次元は、３００個の要素の長さを有してもよく、第２の次元は、１０００個の要素の長さを有してもよく、第３の次元は、２０個の要素の長さを有してもよい。当然のことながら、各次元において他の個数の要素も可能である。
【００１６】
ネステッドループにおいてテンソルを横断することは、要素のメモリアドレス値を計算して、当該要素の対応するデータ値をロードまたは格納することを含み得る。ｆｏｒループは、ネステッドループの一例であり、３つのループインデックス変数（たとえば、ｉ、ｊおよびｋ）によって追跡される３つのループが、三次元テンソルを横断するようにネストされ得る。ニューラルネットワークでは、テンソルに関連付けられた１つ以上のドット積計算に要素の値が用いられてもよい。たとえば、当該要素の値は、対応するパラメータまたは重みを乗算されてもよい。テンソルの要素は、ネステッドｆｏｒループを用いて順番に横断され、要素にアクセスして、要素の値を用いて１つ以上の計算を行ってもよい。三次元テンソルの例を続けて、変数ｉによって追跡されるループを横断するために外側ｆｏｒループが用いられてもよく、変数ｊによって追跡されるループを横断するために中央ｆｏｒループループが用いられてもよく、変数ｋによって追跡されるループを横断するために内側ｆｏｒループが用いられてもよい。この例では、アクセスされる第１の要素は、（ｉ＝０，ｊ＝０，ｋ＝０）であってもよく、第２の要素は、（ｉ＝０，ｊ＝０，ｋ＝１）であってもよい、などである。
【００１７】
後述するように、処理ユニットが要素の値にアクセスして要素の値を用いて１つ以上の計算を行うことができるようにネステッドループを用いて順番に各要素のメモリアドレスを決定するのにテンソル横断ユニットを用いることができる。重みまたはパラメータの値も、ネステッドｆｏｒループを用いて同様にアクセスされることができる。また、計算に用いられるおよび／または計算の出力のための重みまたはパラメータのアドレスを決定するのにテンソル横断ユニットを用いることができ、計算の出力は、ニューラルネットワークの隠れ層への入力として用いられてもよい。
【００１８】
本明細書に記載されている技術により、ループネストを符号化して、ダブルバッファリングを用いてデータを生成および消費することが可能になる。たとえば、テンソル要素に格納されたデータは、ダブルバッファリング技術を用いて１つのデータ格納場所から別のデータ格納場所に転送されてもよい。ニューラルネットワークの例では、１つの隠れ層の出力として判断されるアクティベーションは、別の隠れ層への入力として提供されてもよく、そのため、出力場所、すなわちニューラルネットワーク層の出力が格納されているメモリ場所から、入力場所、すなわちニューラルネットワーク層への入力が格納されているメモリ場所に転送されてもよい。別の例では、計算の出力を表すデータは、一時的なメモリ場所からより永久的なメモリ場所に転送されてもよい。これらの例の各々では、データをより迅速に転送することができ、データはダブルバッファリングを用いてより迅速に後続の処理に備えることができる。
【００１９】
ニューラルネットワーク計算が実行される前に当該計算のためのデータを収集するのにバッファリングを用いることができる。たとえば、ニューラルネットワーク層への入力は、計算を実行するプロセッサによる検索のために、特定の場所に格納されてもよい。特定の場所に格納されたデータを用いてニューラルネットワーク計算を実行している間に、次の機械学習計算のためのデータがバッファに移動され得る。前のニューラルネットワーク計算が完了すると、バッファに格納されたデータは、プロセッサによる検索のために、特定の場所に移動され得る。
【００２０】
ダブルバッファを用いてデータが生成または消費されているテンソル要素のバッファメモリアドレスを計算するのにループネストにおける１つ以上のループが用いられてもよい。転送されるデータの量が単一のバッファの記憶容量よりも大きい場合には、複数のバッファが用いられてもよい。たとえば、転送されるデータの量が単一のバッファの記憶容量の２倍である場合、データは２つのバッファの間で分割されてもよい。この例では、データの第１の部分は、第１のバッファに転送されてもよく、データの第２の部分は、第２のデータ格納場所に転送される前に第２のバッファに転送されてもよい。このように、第２のデータ格納場所に転送される前に全てのデータをバッファリングすることができる。
【００２１】
一例として、三次元テンソルの要素は、ニューラルネットワークによって分類される画像の特徴を表してもよい。第１の次元（Ｚ）は、画像の幅を表してもよく、第２の次元（Ｙ）は、画像の高さを表してもよく、第３の次元（Ｘ）は、画像内の画素のＲＧＢ値を表してもよい。画像を分類するために、各ＲＧＢ値は、畳み込み層のフィルタ値を乗算されて、アクティベーションマップを生成してもよい。
【００２２】
テンソルの各ＲＧＢ値にアクセスするためのメモリアドレスを決定するのにネステッドループを用いることができる。ネステッドループは、テンソルの各次元のためのループを含み得る。たとえば、Ｚ次元（画像の幅）を横断するために外側ループ（ｚ）が用いられてもよく、Ｙ次元（画像の高さ）を横断するために中央ループ（ｙ）が用いられてもよく、Ｘ次元（各画素の３つのＲＧＢ値）を横断するために内側ループ（ｘ）が用いられてもよい。内側ループの各反復において、外側ループｚおよび中央ループｙの値によって表される画像の特定の画素の３つのＲＧＢ値のうちの１つについてメモリアドレスが決定される。たとえば、Ｚ＝０およびＹ＝０によって表される画像の画素のＲ値のメモリアドレスは、ｚ＝０およびｙ＝０（たとえば、ｚ＝０；ｙ＝０；ｘ＝０）である場合に内側ループｘの第１の反復中に決定されてもよい。同様に、Ｚ＝５およびＹ＝２によって表される画像の画素のＧ値のメモリアドレスは、ｚ＝５およびｙ＝２（たとえば、ｚ＝５；ｙ＝２；ｘ＝２）である場合に内側ループｘの第３の反復中に決定されてもよい。画像の各画素の３つのＲＧＢ値がバッファの容量を超える場合には、画像の各画素の３つのＲＧＢ値を表すデータは、２つ以上のバッファの間で分割可能である。
【００２３】
ネステッドループを用いて複数のバッファのバッファメモリアドレスを決定するために、バッファ割り当て要素の値は、バッファメモリアドレスを決定するために用いられるループの各反復後（または前）に切り替えられることができる。たとえば、２つのバッファが用いられ、データが２つのバッファの間で分割されている場合には、バッファ割り当て値は、２つの値の間で切り替えられてもよい。バッファ割り当て要素の第１の値（たとえば、０）は、データ要素（または、データ要素のグループ）を第１のバッファに割り当てるために用いられてもよく、バッファ割り当て要素の第２の値（たとえば、１）は、データ要素（または、データ要素のグループ）を第２のバッファに割り当てるために用いられてもよい。バッファ割り当て要素の値がループの反復にとっての第１の値である場合、ループのこの反復に対応するデータ要素が第１のバッファのバッファメモリアドレスに割り当てられてもよい。同様に、バッファ割り当て要素の値がループの反復にとっての第２の値である場合、ループのこの反復に対応するデータ要素が第２のバッファのバッファメモリアドレスに割り当てられてもよい。３つ以上のバッファが用いられる場合には、バッファ割り当て要素は、３つ以上の値、たとえば各バッファにつき１つの値、を有してもよい。
【００２４】
図１は、計算システム１００の一例のブロック図である。一般に、コンピューティングシステム１００は、入力１０４を処理して、出力１１６を生成する。コンピューティングシステム１００は、線形代数計算、ニューラルネットワーク計算および他の計算を行うように構成されてもよい。入力１０４は、コンピューティングシステム１００によって処理可能な任意の好適なデータであってもよい。コンピューティングシステム１００は、処理ユニット１０２と、１つ以上の記憶媒体１０４と、テンソル横断ユニット１０６とを含む。
【００２５】
処理ユニット１１４は、１つ以上のプロセッサおよび／または１つ以上の有限状態マシン（finite-state machine：ＦＳＭ）を含み得る。処理ユニット１１４のプロセッサは、テンソルの特定の要素にアクセスするための命令を実行することができる。プロセッサがこのような命令を処理すると、テンソル横断ユニット１０６は、処理ユニットが記憶媒体１０４にアクセスして特定の要素の値を表すデータを読み取ることができるように、テンソルの特定の要素のメモリアドレスを決定する。
【００２６】
ＦＳＭを含む処理ユニットでは、ＦＳＭは、テンソル要素のメモリアドレスをテンソル横断ユニット１０６から照会することができる。いくつかの実現例では、ＦＳＭ１０８は、テンソルの特定の要素のアドレス値をテンソル横断ユニット１０６に継続的に照会する。次いで、ＦＳＭは、プロセッサが記憶媒体１０４にアクセスして特定の要素の値を表すデータを読み取ることができるように、受信したアドレス値を処理ユニット１０２のプロセッサに提供することができる。
【００２７】
たとえば、プログラムは、ネステッドループを含んでもよく、処理ユニット１０２は、ネステッドループに関連付けられた現在のインデックス変数値に従って、ネステッドループ内の二次元アレイ変数の要素にアクセスするための命令を実行してもよい。ネステッドループに関連付けられた現在のインデックス変数値に基づいて、テンソル横断ユニット１０６は、二次元アレイ変数の第１の要素のメモリアドレスからのオフセットを表すアドレスオフセット値を決定してもよい。次いで、処理ユニット１０２は、アドレスオフセット値を用いて、記憶媒体１０４から二次元アレイ変数の特定の要素にアクセスしてもよい。
【００２８】
記憶媒体１０４は、コンピューティングシステム１００内の情報を格納する。いくつかの実現例では、記憶媒体１０４は、１つまたは複数の揮発性メモリユニットである。いくつかの他の実現例では、記憶媒体１０４は、１つまたは複数の不揮発性メモリユニットである。また、記憶媒体１０４は、フロッピー（登録商標）ディスク装置、ハードディスク装置、光ディスク装置もしくはテープ装置、フラッシュメモリもしくは他の同様のソリッドステートメモリ装置、または各種の装置（ストレージエリアネットワークもしくは他の構成における装置を含む）などの別の形態のコンピュータ読取可能媒体であってもよい。命令は、処理ユニット１０２によって実行されると、処理ユニット１０２に１つ以上のタスクを実行させる。
【００２９】
一般に、テンソル横断ユニット１０６は、１つ以上のテンソルに関連付けられた状態を判断する。いくつかの実現例では、当該状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を決定するための部分アドレスオフセット値、および／または、ブランチループ境界を処理するためのプログラムカウンタ値を含んでもよい。テンソル横断ユニット１０６は、特定用途向け集積回路として実現されてもよい。
【００３０】
テンソル横断ユニット１０６は、テンソルインデックスをメモリアドレスに翻訳することができる。たとえば、テンソル横断ユニット１０６は、一組のＮ次元テンソルインデックスを一次元アドレス空間に翻訳してもよい。テンソル横断ユニット１０６は、テンソル要素のメモリアドレスを要素の次元インデックスの組み合わせ（たとえば、線形組み合わせ）にすることによってこのような翻訳を実行することができる。
【００３１】
テンソル横断ユニット１０６は、１つ以上のテンソル状態要素１２２と、数値演算ユニット１２４とを含み得る。テンソル状態要素１２２の各々は、記憶要素、たとえばレジスタまたは任意の好適な記憶回路であってもよい。テンソル状態要素１２２は、後述のバッファ割り当て要素を含み得る。数値演算ユニット１２４は、１つ以上の算術論理演算ユニット（arithmetic logic unit：ＡＬＵ）および／または１つ以上のハードウェア加算器を含み得る。数値演算ユニット１２４は、たとえばテンソル状態要素に格納された値に基づいてテンソル要素のメモリアドレスまたはメモリアドレスオフセット値を計算するのに用いられることができる。テンソル横断ユニットを用いてメモリアドレスを決定するための技術の一例については、２０１６年１０月２７日に出願された「ニューラルネットワーク計算タイル」と題される米国特許出願番号第１５／３３５，７６９号および２０１６年２月３日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第１５／０１４，２６５号に記載されており、これらの特許出願の内容全体は引用によって本明細書に援用される。
【００３２】
また、テンソル横断ユニット１０６は、データを１つのデータ格納場所から別のデータ格納場所に転送するための一時的なメモリ場所、たとえばバッファ、のメモリアドレスを決定するように構成され得る。たとえば、記憶媒体１０４は、格納場所Ａ１１２および格納場所Ｂ１１４を含む複数のデータ格納場所を含み得る。各格納場所は、共通のメモリユニットまたは異なるメモリユニットの種々のメモリアドレスであってもよい。記憶媒体１０４は、バッファＡ１１６およびバッファＢ１１８を含む複数の一時メモリも含み得る。処理ユニット１０２は、データを第２のデータ格納場所（たとえば、格納場所Ｂ１１４）に転送する前に、データを第１のデータ格納場所（たとえば、格納場所Ａ１１２）から１つ以上のバッファ（たとえば、バッファＡ１１６および／またはバッファＢ１１８）に転送することができる。
【００３３】
テンソル横断ユニット１０６は、バッファ（たとえば、ダブルバッファ）を用いてデータが生成または消費されているテンソル要素のバッファメモリアドレスを決定することができる。たとえば、２０１６年２月３日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第１５／０１４，２６５号に記載されている技術と同様に、テンソル横断ユニット１０６は、テンソルのベースバッファメモリアドレスおよびテンソル要素のテンソルインデックスに基づく各テンソル要素のアドレスオフセットを用いてテンソルインデックスをバッファメモリアドレスに翻訳することができる。
【００３４】
たとえば、米国特許出願番号第１５／０１４，２６５号に記載されているように、テンソル状態要素１２２は、テンソルインデックス要素のグループ、テンソル境界要素のグループ、および次元乗数要素のグループを含み得る。要素の各グループは、Ｍ個の行とＮ個の列とを有する２Ｄアレイとして配置され得る。グループの各行は、テンソルのテンソルインデックス情報を表し得る。グループの各列は、テンソルに関連付けられたネステッドループインデックス変数値についての情報（たとえば、テンソルインデックス値、テンソル境界値または次元乗数値）を表し得る。たとえば、テンソルインデックス要素の２Ｄアレイにおける１つの列は、変数ｉについてのテンソルインデックス情報を表してもよく、１つの列は、変数ｉについてのテンソルインデックス情報を表してもよく、１つの列は、変数ｋについてのテンソルインデックス情報を表してもよい。
【００３５】
各テンソルインデックス要素は、ネステッドループにおけるループのネステッドループ変数を追跡することができる。たとえば、１つのテンソルインデックス要素は、ネステッドループインデックス変数ｉを追跡するように割り当てられてもよく、１つのテンソルインデックス要素は、ネステッドループインデックス変数ｊを追跡するように割り当てられてもよく、１つのテンソルインデックス要素は、ネステッドループインデックス変数ｋを追跡するように割り当てられてもよい。各テンソル境界要素は、テンソルインデックス要素における対応する要素を有する。各テンソル境界要素は、テンソルに関連付けられたネステッドループインデックス変数値についてのテンソル境界情報を表してもよい。たとえば、１つのテンソル境界要素は、ネステッドループインデックス変数ｉについてのテンソル境界情報を表してもよく、１つのテンソル境界要素は、ネステッドループインデックス変数ｊについてのテンソル境界情報を表してもよく、１つのテンソル境界要素は、ネステッドループインデックス変数ｋについてのテンソル境界情報を表してもよい。
【００３６】
各次元乗数要素は、テンソルインデックス要素における対応する要素に乗算される乗数を表し得る。要素のメモリアドレスを決定するために、テンソル横断ユニット１０６は、ネステッドループインデックス変数のテンソルインデックス要素に格納された値にネステッドループインデックス変数の乗数を乗算することによって、各ネステッドループインデックス変数のメモリアドレスオフセットを決定することができる。次いで、テンソル横断ユニット１０６は、全ての乗算結果を合計して、アクセスされる要素に対応するメモリアドレスを決定することができる。
【００３７】
テンソル横断ユニット１０６は、ネステッドループの内側ループの各反復後にテンソルインデックス要素を更新することができる。内側ループの各反復について、テンソル横断ユニット１０６は、たとえば内側ループのテンソルインデックス要素をインクリメントすることによって、ループのテンソルインデックス要素を更新することができる。内側ループの更新されたテンソルインデックス要素が、内側ループのテンソル境界要素に格納された値に等しい場合には、テンソルインデックス要素がリセットされ得て、ネステッドにおける内側ループの次の外側ループのテンソルインデックス要素が更新され得る。次いで、テンソル横断ユニット１２０は、上記のように、テンソルインデックス要素にそれらの対応する乗数を乗算して結果を合計することによって、内側ループのこの反復に対応する次の要素のメモリアドレスを決定することができる。
【００３８】
データを転送するために２つ以上のバッファが用いられる場合、テンソル横断ユニット１０６は、バッファ割り当て要素も用いて、各テンソル要素またはテンソル要素のグループをバッファのうちの１つに割り当てることができる。いくつかの実現例では、テンソル横断ユニット１０６は、バッファ割り当て要素の値が１つの値である場合にさらなるオフセットをバッファメモリアドレスに追加することによって１つ以上のテンソル要素のグループをバッファのうちの１つに割り当て、バッファ割り当て要素が異なる値である場合にさらなるオフセット値をバッファメモリアドレスに追加しないことによって１つ以上のテンソル要素のグループを異なるバッファに割り当てることができる。
【００３９】
たとえば、ベースメモリアドレスは、第１のバッファの第１のメモリアドレスに対応してもよい。第２のバッファの第１のメモリアドレスは、ベースメモリアドレスから特定数のアドレスだけオフセットされてもよい。この例では、テンソル要素を第１のバッファのメモリアドレスに割り当てるために、テンソル横断ユニット１０６は、ベースメモリアドレスをテンソル要素のメモリオフセット値と組み合わせてもよい（たとえば、加算してもよい）。テンソル要素のメモリオフセット値は、２０１６年２月３日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第１５／０１４，２６５号に記載されているように、テンソルを横断するために用いられるネステッドループのテンソルインデックスに基づいて決定されてもよい。
【００４０】
テンソル要素を第２のバッファのメモリアドレスに割り当てるために、テンソル横断ユニット１０６は、ベースメモリアドレスをテンソル要素のメモリオフセット値および第２のバッファのメモリアドレスオフセット値（たとえば、第２のバッファの第１のメモリアドレスを第１のバッファの第１のメモリアドレスからオフセットさせる特定数のアドレス）と組み合わせてもよい（たとえば、加算してもよい）。
【００４１】
テンソル横断ユニット１０６は、バッファ割り当て要素の値を用いて、テンソル要素を第２のバッファにいつ割り当てるかを判断するため、第２のバッファのメモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせることによってテンソル要素のバッファメモリアドレスを決定することができる。たとえば、バッファ割り当て要素の値が第１の値である場合、テンソル横断ユニット１０６は、メモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせないことによってテンソル要素を第１のバッファに割り当ててもよい。バッファ割り当て要素の値が、第１の値とは異なる第２の値である場合、テンソル横断ユニット１０６は、メモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせることによってテンソル要素を第２のバッファに割り当ててもよい。
【００４２】
いくつかの実現例では、テンソル横断ユニット１０６は、たとえばネステッドループを用いて、あるシーケンスにおける一連のテンソル要素のバッファメモリアドレスを決定してもよい。この例では、処理ユニット１０２は、特定のループの各反復、たとえば最内ループの各反復について、１つ以上のテンソル要素のグループのバッファメモリアドレスをテンソル横断ユニット１０６から要求することができる。テンソル横断ユニット１０６は、ループインデックスに基づいて、ループの反復に対応するテンソル要素のグループのメモリオフセット値を決定することができる。また、テンソル横断ユニット１０６は、上記のように、バッファ割り当て要素の値に基づいて、テンソル要素のグループを第１のバッファに割り当てるか第２のバッファ（または、３つ以上の場合にはさらなるバッファ）に割り当てるかを判断することができる。テンソル横断ユニット１０６は、ベースメモリアドレス、テンソル要素のグループのメモリオフセット値、およびバッファ割り当て要素の値によっては第２のバッファのメモリオフセット値に基づいて、テンソル要素のグループのバッファメモリアドレスを決定することができる。
【００４３】
当該シーケンスにおけるテンソル要素のグループのバッファメモリアドレスを決定した後、テンソル横断ユニットは、バッファ割り当て要素の値を切り替えることができる。たとえば、２つのバッファがある場合には、テンソル横断ユニット１０６は、各バッファメモリアドレス決定後に２つの値の間で値を切り替えてもよい。この例では、テンソル横断ユニット１０６は、バッファ割り当て要素の値が０であるときにはテンソル要素のグループを第１のバッファに割り当て、バッファ割り当て要素の値が１であるときにはテンソル要素のグループを第２のバッファに割り当てることができる。第１バッファメモリアドレス決定のために、バッファ割り当て要素は、０という値を有してもよい。この例では、テンソル横断ユニット１０６は、シーケンスにおけるテンソル要素の第１のグループを第１のバッファに割り当てることができる。次いで、テンソル横断ユニット１０６は、バッファ割り当て要素の値を１に切り替えることができる。したがって、テンソル横断ユニット１０６は、シーケンスにおけるテンソル要素の第２のグループを第２のバッファに割り当てることができる。テンソル横断ユニット１０６は、テンソル要素の他の全てのグループが第１のバッファに割り当てられるように、各バッファメモリアドレス決定後に値を切り替え続けることができる。
【００４４】
いくつかの実現例では、各バッファメモリアドレス決定のためにテンソル要素のグループ（たとえば、テンソルのサブテンソル）がバッファに割り当てられるように、きめの粗いトグリング（toggling）が用いられる。いくつかの実現例では、各メモリアドレス決定において各々の個々のテンソル要素がバッファに割り当てられるように、きめ細かいトグリングが用いられる。
【００４５】
テンソル横断ユニットが２つの１キロバイト（ｋＢ）バッファを有し、これらのバッファを用いて４ｋＢのデータが転送される例を考えてみたい。ループネストの一例は、２つのバッファの間を行ったり来たりする外側ループを含み得て、内側ループは、このバッファに含まれるデータの各部分を識別するのに用いられ得る。たとえば、ネステッドループは、以下を含み得る。
【００４６】
【数１】
2020506453.tif 000003
【００４７】
この例では、内側ループ「ｊ」は、バッファに含まれる１ｋＢのデータを識別するのに用いられ、外側ループ「ｉ」は、２つのバッファを切り替えるのに用いられる。たとえば、「ｉ」が奇数値を有する場合、１ｋＢのデータ要素のグループが第１のバッファに割り当てられてもよい。「ｉ」が偶数値を有する場合、１ｋＢのデータが第２のバッファに割り当てられてもよい。したがって、この例では、ループネストは、「ｉ」の値に基づいて２つのバッファの間を行ったり来たりする。
【００４８】
３つ以上のバッファがある場合には、テンソル横断ユニット１０６は、３つ以上の異なる値、たとえば各バッファについて固有の値、の間でバッファ割り当て要素を切り替えてもよい。たとえば、３つのバッファがある場合には、テンソル横断ユニット１０６は、バッファ割り当て要素が第１の値を有するときにテンソル要素のグループを第１のバッファに割り当てることができ、テンソル横断ユニット１０６は、バッファ割り当て要素が第２の値を有するときにテンソル要素のグループを第２のバッファに割り当てることができ、テンソル横断ユニット１０６は、バッファ割り当て要素が第３の値を有するときにテンソル要素のグループを第３のバッファに割り当てることができる。
【００４９】
別の例では、各々が１ＭＢの記憶容量を有する２つのバッファがあってもよく、これらのバッファを通じて３ＭＢのデータを転送する必要があってもよい。この例では、第１の１ＭＢが２つのバッファのうちの第１のバッファに割り当てられることができ、第２の１ＭＢが２つのバッファのうちの第２のバッファに割り当てられることができる。次いで、たとえばプロセッサによって第１の１ＭＢが消費された後、第３の１ＭＢを第１のバッファに移動させることができる。
【００５０】
いくつかの実現例では、テンソル横断ユニット１０６は、各バッファメモリアドレス決定後にバッファ割り当て要素の値を切り替えるのではなく、交互のバッファ割り当て値のシーケンスを取得することができる。たとえば、交互のバッファ割り当て値のシーケンスは、０および１が交互になったシーケンスであってもよい。各メモリアドレス決定後に、テンソル横断ユニット１０６は、シーケンスにおける次の値に移動して、次の値に基づいてテンソル要素のグループを適切なバッファに割り当てることができる。
【００５１】
図２は、バッファを用いて転送されるデータの一例およびバッファ割り当て要素の一例を示す。この例では、データ要素、たとえばテンソル要素、の８個のグループのシーケンスが、２つのバッファを用いて第１のデータ格納場所２０５から第２のデータ格納場所２１５に転送されている。バッファ割り当て値のシーケンス２１０は、データ要素の各グループを２つのバッファのうちの１つに割り当てるのに用いられる。たとえば、データ要素のグループが、そのシーケンス内で、０という値を有するバッファ割り当て要素と同じ位置にある場合、データ要素のグループは第１のバッファに割り当てられる。データ要素のグループが、そのシーケンス内で、１という値を有するバッファ割り当て要素と同じ位置にある場合、データ要素のグループは、第１のバッファとは異なる第２のバッファに割り当てられる。
【００５２】
したがって、この例では、第１、第３、第５および第７のバッファ割り当て値が０であるので、データ要素グループ「０」、「２」、「４」および「６」が第１のバッファに割り当てられる。同様に、第２、第４、第６および第８のバッファ割り当て値が１であるので、データ要素グループ「１」、「３」、「５」および「７」が第２のバッファに割り当てられる。したがって、各々がデータ要素の４個のグループを格納するための記憶容量を有する２つのバッファを用いて、データ要素の８個のグループをバッファリングすることができる。
【００５３】
図３は、ダブルバッファリングを用いてデータを転送するためのプロセス３００の一例を示すフロー図である。プロセス３００は、１つ以上のコンピュータのシステム、たとえば図１のコンピューティングシステム１１０、によって実行されてもよい。
【００５４】
当該システムは、第１のバッファおよび第２のバッファを用いたダブルバッファリングのために指定されたデータ要素のシーケンスを識別する（３０２）。データ要素のシーケンスは、ダブルバッファリングのために指定されたテンソル要素のシーケンスであってもよい。テンソル要素は、Ｎ次元テンソルの一部であってもよい。たとえば、テンソルは、ネステッドループを用いて横断されてもよく、各ループは、Ｎ次元テンソルのそれぞれの次元を横断することに関与する。
【００５５】
データ要素のシーケンスは、ダブルバッファリングのために指定された特定の次元のテンソル要素を全て含んでもよい。たとえば、ネステッドループを含むプログラムは、特定の次元に対応するループをダブルバッファリングされるループとして指定するコードを含んでもよい。特定の三次元テンソルの例では、テンソルは、インデックスｘ、ｙおよびｚを有する３つのループを用いて横断されてもよい。この例では、テンソルのＺ次元は、インデックスｚを有する外側ループを用いて横断されてもよく、テンソルのＹ次元は、インデックスｙを有する中央ループを用いて横断されてもよく、テンソルのＸ次元は、インデックスｘを有する内側ループを用いて横断されてもよい。内側ループは、ニューラルネットワーク計算のためのデータを迅速にバッファリングするようにダブルバッファリングのために指定されてもよい。
【００５６】
当該システムは、シーケンスにおけるデータ要素の各グループのバッファメモリアドレスを決定する（３０４）。各グループは、１つ以上のデータ要素を含み得る。たとえば、きめ細かいトグリングが用いられる場合、各グループは、１つのデータ要素を含み得る。きめの粗いトグリングが用いられる場合、各グループは、複数のデータ要素、たとえば最大で特定量のメモリまたは特定数のデータ要素まで、を含み得る。
【００５７】
いくつかの実現例では、当該システムは、バッファメモリアドレスを一度に一つずつ決定する。前の例を続けて、当該システムは、内側ループの各反復についてバッファメモリアドレスを決定してもよい。なぜなら、内側ループの各反復は、ダブルバッファリングのために指定された特定のテンソル要素に対応するからである。当該システムは、構成動作３０６〜３１４を用いてデータ要素のシーケンスのバッファメモリアドレスを決定してもよい。
【００５８】
当該システムは、データ要素のシーケンスにおけるデータ要素のグループのバッファ割り当て要素の値を識別する（３０６）。いくつかの実現例では、上記のように、当該システムは、各バッファメモリアドレス決定後に、たとえばダブルバッファリングのために指定されたループの各反復後に、バッファ割り当て要素の値を切り替えることができる。この例では、当該システムは、バッファ割り当て要素の現在の値をこのデータ要素のバッファ割り当て要素の値として識別することができる。バッファ割り当て要素の値は、データ要素のグループを適切なバッファに割り当てるのに用いられる。
【００５９】
当該システムは、バッファ割り当て要素の値および第２のバッファのメモリアドレスオフセット値に基づいて、データ要素のグループのバッファメモリアドレスオフセット値を決定する（３０８）。上記のように、バッファのベースメモリアドレスは、第１のバッファの第１のメモリアドレスに対応してもよい。第２のバッファの第１のメモリアドレスは、ベースメモリアドレスから特定数のアドレスだけオフセットされてもよい。第２のバッファのメモリアドレスオフセット値は、特定数のアドレスと等しくてもよい。
【００６０】
データ要素のグループのバッファメモリアドレスオフセット値を決定するために、当該システムは、バッファ割り当て要素の値が第１の値であるか第２の値（または、３つ以上のバッファがある場合にはより多くの値）であるかを判断する。バッファ割り当て要素が第１の値である場合、当該システムは、データ要素のグループのバッファメモリアドレス値を決定する際に第２のバッファのメモリアドレスオフセット値を用いないことによってデータ要素のグループを第１のバッファに割り当てることができる。その代わりに、当該システムは、上記のように、ネステッドループのループインデックスに基づいて決定されるデータ要素のメモリオフセット値を用いることができる。
【００６１】
バッファ割り当て要素が第２の値である場合、当該システムは、データ要素のグループのメモリオフセット値を第２のバッファのメモリアドレスオフセット値と組み合わせることによってデータ要素のグループを第２のバッファに割り当てることができる。たとえば、当該システムは、データ要素のグループのメモリオフセット値と第２のバッファのメモリアドレスオフセット値との合計をデータ要素のグループのバッファメモリアドレスオフセット値として決定してもよい。
【００６２】
いくつかの実現例では、当該システムは、１という値を有するバッファ割り当て要素の値の論理積をとってその結果に第２のバッファのメモリアドレスオフセット値を乗算し、この結果をデータ要素のグループのメモリオフセット値に加算することによって、データ要素のグループのバッファメモリアドレスオフセット値を計算することができる。この例では、バッファ割り当て要素が０という値を有する場合、データ要素のグループのバッファメモリアドレスオフセット値は、データ要素のグループのメモリオフセット値に等しい。バッファ割り当て要素が１という値を有する場合、データ要素のグループのバッファメモリアドレスオフセット値は、第２のバッファのメモリアドレスオフセット値＋データ要素のグループのメモリオフセット値に等しい値を有する。いくつかの実現例では、どのバッファを用いるかを判断するのに１ビットトグルカウンタを用いることができる。
【００６３】
当該システムは、バッファのベースアドレスおよびバッファメモリアドレスオフセット値に基づいてデータ要素のグループのバッファメモリアドレスを決定する（３１０）。たとえば、当該システムは、バッファのベースアドレス（たとえば、第１のバッファの第１のメモリアドレス）をバッファメモリアドレスオフセット値に加算することによってデータ要素のグループのバッファメモリアドレスを決定してもよい。
【００６４】
当該システムは、シーケンスにおける各データ要素についてバッファメモリアドレスが決定されたか否かを判断する（３１２）。決定されていない場合、当該システムは、次のデータ要素のバッファ割り当て要素の値を切り替える。このようにして、次のデータ要素が現在のデータ要素とは異なるバッファに割り当てられる。
【００６５】
シーケンスにおける各データ要素についてバッファメモリアドレスが決定された場合、当該システムは、決定されたバッファメモリアドレスに基づいて、データ要素に格納されたデータをバッファに転送する（３１４）。次いで、データは、たとえばニューラルネットワーク計算で使用されるように、バッファから第２のデータ格納場所に転送されてもよい。
【００６６】
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路で実現されてもよく、有形に具体化されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの１つ以上の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、１つ以上のコンピュータプログラム、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリアに符号化されたコンピュータプログラム命令の１つ以上のモジュール、として実現されてもよい。代替的にまたは加えて、プログラム命令は、好適な受信機装置に送信されてデータ処理装置によって実行されるように情報を符号化するように生成された人工的に生成された伝搬信号、たとえば機械によって生成された電気信号、光信号または電磁信号に符号化されてもよい。コンピュータ記憶媒体は、機械読取可能な記憶装置、機械読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリ装置、またはそれらのうちの１つ以上の組み合わせであってもよい。
【００６７】
本明細書に記載されているプロセスおよび論理フローは、１つ以上のプログラム可能なコンピュータが、入力データを操作して出力を生成することによって機能を実行するように１つ以上のコンピュータプログラムを実行することによって、実行されてもよい。また、プロセスおよび論理フローは、特殊目的論理回路、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）またはＧＰＧＰＵ（汎用グラフィックスプロセシングユニット）、によって実行されてもよく、装置は、特殊目的論理回路、たとえばＦＰＧＡ、ＡＳＩＣまたはＧＰＧＰＵとして実現されてもよい。
【００６８】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはそれら両方、またはその他の種類の中央処理装置を含み、それらに基づくものであってもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置、ならびに、命令およびデータを格納するための１つ以上のメモリ装置である。一般に、コンピュータは、データを格納するための１つ以上の大容量記憶装置（たとえば磁気ディスク、光磁気ディスクもしくは光ディスク）も含み、または、１つ以上の大容量記憶装置からデータを受信するように、もしくは１つ以上の大容量記憶装置にデータを送信するように、もしくは１つ以上の大容量記憶装置に対してデータを送受信するように動作可能に結合される。しかし、コンピュータは、このような装置を有していなくてもよい。さらに、コンピュータは、別の装置、たとえばほんの数例を挙げると、携帯電話、パーソナルデジタルアシスタント（ＰＤＡ）、携帯オーディオまたはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム（ＧＰＳ）受信機、または携帯型記憶装置（たとえば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）に組み込まれてもよい。
【００６９】
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリ装置を含み、これらの不揮発性メモリ、媒体およびメモリ装置は、一例として、半導体メモリ装置（たとえば、ＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリ装置）、磁気ディスク（たとえば、内部ハードディスクまたはリムーバブルディスク）、光磁気ディスク、ならびにＣＤ  ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補完されてもよく、または特殊目的論理回路に組み入れられてもよい。
【００７０】
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは発明またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実現されてもよい。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組み合わせで実現されてもよい。さらに、特徴は、特定の組み合わせで作用するものとして上記され、そのように最初から記載され得るが、記載されている組み合わせからの１つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、記載されている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例に向けられてもよい。
【００７１】
同様に、動作は特定の順序で図面に記載されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序で実行されなければならないものとして理解されるべきではなく、または望ましい結果を達成するために全ての示されている動作を実行しなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合もある。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施形態においてこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一体化されてもよく、または複数のソフトウェア製品にパッケージングされてもよい、ということが理解されるべきである。
【００７２】
主題の特定の実施形態について説明してきた。他の実施形態も以下の特許請求の範囲の範囲内である。たとえば、請求項に記載されている動作は、異なる順序で実行されても依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利である場合もある。
【図１】
2020506453.tif 000004
【図２】
2020506453.tif 000005
【図３】
2020506453.tif 000006
【手続補正書】
【提出日】令和1年8月14日(2019.8.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを転送するための装置であって、
少なくとも第１のメモリおよび第２のメモリを含む複数のメモリと、
１つ以上の処理ユニットとを備え、前記１つ以上の処理ユニットは、
第１のデータ格納場所に格納され、第２のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するように構成され、前記シーケンスの前記バッファメモリアドレスを決定することは、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別することによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる１つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記１つ以上のデータ要素のグループのバッファメモリアドレスを決定することによってなされ、前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が、前記第１のメモリに対応する第１の値である場合に、前記第１のメモリのベースアドレスと前記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記１つ以上のデータ要素のグループを前記第１のメモリに割り当てることと、
前記バッファ割り当て要素の前記値が、前記第２のメモリに対応する、前記第１の値とは異なる第２の値である場合に、前記１つ以上のデータ要素のグループを前記第２のメモリに割り当てるために、前記第１のメモリの前記ベースアドレスと、前記第２のメモリの前記メモリアドレスオフセット値と、前記１つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第２のメモリに割り当てることとを含み、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの１つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えることによってなされ、
前記１つ以上の処理ユニットは、さらに、
１つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第１または第２のメモリのそれぞれのメモリ場所に転送するように構成される、装置。
【請求項２】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記第１のデータ格納場所および前記第２のデータ格納場所の各々は、少なくとも、前記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を備える、請求項１に記載の装置。
【請求項３】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第１のデータ記憶容量を超えるデータ量を備える、請求項１または２に記載の装置。
【請求項４】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、前記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて前記１つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項１〜３のいずれか１項に記載の装置。
【請求項５】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が前記第２の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレスオフセット値と、（ｉｉｉ）前記１つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することと、
前記バッファ割り当て要素の前記値が前記第１の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレス値から独立した前記１つ以上のデータ要素のグループの前記オフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することとを備える、請求項４に記載の装置。
【請求項６】
前記１つ以上のデータ要素のグループの前記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく、請求項４または５に記載の装置。
【請求項７】
前記第２のメモリの前記メモリアドレスオフセット値は、前記第１のメモリのメモリアドレスと前記第２のメモリのアドレスとの間の差に基づく、請求項１〜６のいずれか１項に記載の装置。
【請求項８】
データを転送するためのコンピューティングシステムによって実行される方法であって、
第１のデータ格納場所に格納され、第２のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するステップを備え、前記シーケンスの前記バッファメモリアドレスを決定するステップは、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別するステップによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる１つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定するステップは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記１つ以上のデータ要素のグループのバッファメモリアドレスを決定するステップによってなされ、前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、
前記バッファ割り当て要素の前記値が、複数のメモリの第１のメモリに対応する第１の値である場合に、前記第１のメモリのベースアドレスと前記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記１つ以上のデータ要素のグループを前記第１のメモリに割り当てるステップと、
前記バッファ割り当て要素の前記値が、前記複数のメモリの第２のメモリに対応する、前記第１の値とは異なる第２の値である場合に、前記１つ以上のデータ要素のグループを前記第２のメモリに割り当てるために、前記第１のメモリの前記ベースアドレスと、前記第２のメモリの前記メモリアドレスオフセット値と、前記１つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第２のメモリに割り当てるステップとを含み、
前記シーケンスの前記バッファメモリアドレスを決定するステップは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの１つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えるステップによってなされ、
前記方法は、さらに、
１つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第１または第２のメモリのそれぞれのメモリ場所に転送するステップを備える、方法。
【請求項９】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記第１のデータ格納場所および前記第２のデータ格納場所の各々は、少なくとも、前記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を備える、請求項８に記載の方法。
【請求項１０】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第１のデータ記憶容量を超えるデータ量を備える、請求項８または９に記載の方法。
【請求項１１】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、前記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて前記１つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項８から１０のいずれか１項に記載の方法。
【請求項１２】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、
前記バッファ割り当て要素の前記値が前記第２の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレスオフセット値と、（ｉｉｉ）前記１つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定するステップと、
前記バッファ割り当て要素の前記値が前記第１の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレス値から独立した前記１つ以上のデータ要素のグループの前記オフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定するステップとを備える、請求項１１に記載の方法。
【請求項１３】
前記１つ以上のデータ要素のグループの前記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく、請求項１１または１２に記載の方法。
【請求項１４】
前記第２のメモリの前記メモリアドレスオフセット値は、前記第１のメモリのメモリアドレスと前記第２のメモリのアドレスとの間の差に基づく、請求項１１から１３のいずれか１項に記載の方法。
【請求項１５】
データを転送するためのシステムであって、
少なくとも第１のメモリおよび第２のメモリを含む複数のメモリと、
１つ以上の数値演算ユニットを含む１つ以上の処理ユニットとを備え、前記１つ以上の処理ユニットは、
第１のデータ格納場所に格納され、第２のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するように構成され、前記シーケンスの前記バッファメモリアドレスを決定することは、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別することによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる１つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記１つ以上のデータ要素のグループのバッファメモリアドレスを決定することによってなされ、前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が、前記第１のメモリに対応する第１の値である場合に、前記第１のメモリのベースアドレスと前記１つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記１つ以上のデータ要素のグループを前記第１のメモリに割り当てることと、
前記バッファ割り当て要素の前記値が、前記第２のメモリに対応する、前記第１の値とは異なる第２の値である場合に、前記１つ以上のデータ要素のグループを前記第２のメモリに割り当てるために、前記第１のメモリの前記ベースアドレスと、前記第２のメモリの前記メモリアドレスオフセット値と、前記１つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記１つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第２のメモリに割り当てることとを含み、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの１つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの１つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えることによってなされ、
前記１つ以上の処理ユニットは、さらに、
各々の決定されたメモリアドレスを特定するデータを出力するように構成され、
１つ以上のプロセッサは、１つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第１または第２のメモリのそれぞれのメモリ場所に転送するように構成される、システム。
【請求項１６】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記第１のデータ格納場所および前記第２のデータ格納場所の各々は、少なくとも、前記第１のデータ記憶容量よりも大きな第２のデータ記憶容量を備える、請求項１５に記載のシステム。
【請求項１７】
前記第１のメモリおよび前記第２のメモリは、各々が第１のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第１のデータ記憶容量を超えるデータ量を備える、請求項１５または１６に記載のシステム。
【請求項１８】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、前記データ要素のシーケンスを反復するために用いられる１つ以上のループの反復回数に基づいて前記１つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項１５から１７のいずれか１項に記載のシステム。
【請求項１９】
前記バッファ割り当て要素の前記値および前記第２のメモリのメモリアドレスオフセット値に基づいて前記１つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が前記第２の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレスオフセット値と、（ｉｉｉ）前記１つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することと、
前記バッファ割り当て要素の前記値が前記第１の値であるたびに、（ｉ）前記第１のメモリの前記ベースアドレスと、（ｉｉ）前記第２のメモリの前記メモリアドレス値から独立した前記１つ以上のデータ要素のグループの前記オフセット値との合計を前記１つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することとを備える、請求項１８に記載のシステム。
【請求項２０】
前記１つ以上のデータ要素のグループの前記メモリオフセット値は、Ｎ次元テンソルの各次元についてのループの反復回数に基づく、請求項１８または１９に記載のシステム。
【請求項２１】
前記第２のメモリの前記メモリアドレスオフセット値は、前記第１のメモリのメモリアドレスと前記第２のメモリのアドレスとの間の差に基づく、請求項１８から２０のいずれか１項に記載のシステム。
【国際調査報告】
2020506453.tif 000007
2020506453.tif 000008