(57)【要約】  本開示は、中央処理装置と、前記中央処理装置に電子的に接続され、前記中央処理装置から受信した命令に基づいて動作を実行するように構成されたベクトル処理装置と、前記中央処理装置に電子的に接続され、命令を格納するように構成された命令メモリユニットと、外部メモリユニットと、前記中央処理装置に電子的に接続され、一次元シストリックデータを格納するように構成された第１のローカルメモリユニットと、前記ベクトル処理装置に電子的に接続され、行列データを格納するように構成された第２のローカルメモリユニットと、前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続され、前記外部メモリユニット内のデータにアクセスするように構成されたダイレクトメモリアクセスユニットと、を備えるデータ処理システムを提供する。
2022500782.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置と、
前記中央処理装置に電子的に接続され、前記中央処理装置から受信した命令に基づいて動作を実行するように構成されたベクトル処理装置と、
前記中央処理装置に電子的に接続され、命令を格納するように構成された命令メモリユニットと、
外部メモリユニットと、
前記中央処理装置に電子的に接続され、一次元シストリックデータを格納するように構成された第１のローカルメモリユニットと、
前記ベクトル処理装置に電子的に接続され、行列データを格納するように構成された第２のローカルメモリユニットと、
前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続され、前記外部メモリユニット内のデータにアクセスするように構成されたダイレクトメモリアクセスユニットと、
を備え、
データが、所定の選択優先度に基づくタイミングで、前記ダイレクトメモリアクセスユニットを介して転送される、
データ処理システム。
【請求項２】
前記第１および第２のローカルメモリユニット間で電子的に接続され、前記第１および第２のローカルメモリユニット間でデータを転送するように構成された行列転送デバイス
をさらに備える、請求項１に記載のデータ処理システム。
【請求項３】
前記行列転送ユニットは、前記第１および第２のローカルメモリユニット間でデータを転送するときに、前記データに対して行列転置を実行することができる、
請求項２に記載のデータ処理システム。
【請求項４】
前記行列転送ユニットは、ソースメモリおよびデスティネーションメモリのためのメモリアドレスを生成するように構成されたアドレスジェネレータを備え、前記ソースメモリは前記第１のローカルメモリユニットおよび前記第２のローカルメモリユニットの一方であり、前記デスティネーションメモリは前記第１のローカルメモリユニットおよび前記第２のローカルメモリユニットの他方である、
請求項３に記載のデータ処理システム。
【請求項５】
前記第２のローカルメモリユニットは、データをリングブロードキャストするように構成されたデータリングを有し、前記データリングは、複数のメモリ要求が受信されたときに、前記所定の選択優先度を使用して前記ダイレクトメモリアクセスユニットを介して前記第１のローカルメモリユニットおよび前記外部メモリユニットにデータを転送する、
請求項１から４のいずれか一項に記載のデータ処理システム。
【請求項６】
前記第１および第２のローカルメモリユニットはそれぞれ、データが格納される複数の２ポートＲＡＭバンクを含み、前記第１のローカルメモリユニットの前記２ポートＲＡＭバンクの数は、前記第２のローカルメモリユニットの前記２ポートＲＡＭバンクの数に等しい、
請求項１から５のいずれか一項に記載のデータ処理システム。
【請求項７】
データ処理システムのための方法であって、前記データ処理システムは、中央処理装置と、前記中央処理装置に電子的に接続されたベクトル処理装置と、前記中央処理装置に電子的に接続された命令メモリユニットと、外部メモリユニットと、前記中央処理装置に電子的に接続された第１のローカルメモリユニットと、前記ベクトル処理装置に電子的に接続された第２のローカルメモリユニットと、前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続されたダイレクトメモリアクセスユニットと、を備え、前記方法は、
前記ベクトル処理装置によって、前記中央処理装置から受信した命令に基づいて動作を実行することと、
前記命令メモリユニットによって、命令を格納することと、
前記第１のローカルメモリユニットによって、一次元シストリックデータを格納することと、
前記第２のローカルメモリユニットによって、行列データを格納することと、
前記ダイレクトメモリアクセスユニットによって、前記外部メモリユニット内のデータにアクセスすることと、
を含み、
データが、所定の選択優先度に基づくタイミングで、前記ダイレクトメモリアクセスユニットを介して転送される、
方法。
【請求項８】
データ処理システムのためのプログラムであって、前記データ処理システムは、中央処理装置と、前記中央処理装置に電子的に接続されたベクトル処理装置と、前記中央処理装置に電子的に接続された命令メモリユニットと、外部メモリユニットと、前記中央処理装置に電子的に接続された第１のローカルメモリユニットと、前記ベクトル処理装置に電子的に接続された第２のローカルメモリユニットと、前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続されたダイレクトメモリアクセスユニットと、を備え、前記プログラムは、
前記ベクトル処理装置に、前記中央処理装置から受信した命令に基づいて動作を実行させ、
前記命令メモリユニットに、命令を格納させ、
前記第１のローカルメモリユニットに、一次元シストリックデータを格納させ、
前記第２のローカルメモリユニットに、行列データを格納させ、
前記ダイレクトメモリアクセスユニットに、前記外部メモリユニット内のデータにアクセスさせ、
データが、所定の選択優先度に基づくタイミングで、前記ダイレクトメモリアクセスユニットを介して転送される、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、一次元配列アーキテクチャに基づき、特に、行列転置計算を含む連続行列処理に使用されるデータ処理システム、方法、およびプログラムに関するものである。
【背景技術】
【０００２】
機械学習は、多くの研究分野における高いパフォーマンスのために、近年非常に人気がある。機械学習用のますます多くのアプリケーションが開発されるにつれて、計算の複雑さが大幅に増している。したがって、効率的なデータ処理が非常に重要である。計算効率を向上させるために、ベクトル処理の並列処理を増やすことは非常に有益であり、したがって好ましい。
【０００３】
ベクトル処理では、主な概念はベクトルパターンでデータを処理することである。行列データを処理するために、各ベクトルレーンに算術論理演算装置（ＡＬＵ）を含めたベクトルレーンが使用される。計算データを保存するために、各ベクトルレーンにはローカルメモリが含まれている必要がある。さらに、オンチップローカルメモリとオフチップ外部メモリとの間でデータを転送するために、ダイレクトメモリアクセス（ＤＭＡ）を使用することができる。最後に、全体的な制御ロジックについては、中央制御ユニットがシステムで使用されることが好ましい。上記の概念に基づいて、いくつかのベクトル処理装置の設計は、特許文献１、非特許文献１、および非特許文献２に記載されている。
【０００４】
機械学習では、最も一般的な計算の１つが行列計算である。汎用行列乗算（ＧＥＭＭ）は、順方向と逆方向の両方の伝搬で使用される。ＧＥＭＭ機能を実行する場合、すべてのソースデータをメモリから取得する必要があり、各エレメントからフェッチされたデータを十分に活用するために、二次元のプロセッシングエレメントが使用される。ただし、二次元配列の欠点は、計算の実際の行列サイズがサポートされている二次元配列のサイズよりもはるかに小さい場合、未使用のプロセッシングエレメントの計算リソースが無駄になることである。別の方法として、柔軟性が高いため、一次元配列を使用することもできる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第００５６００８４３号
【非特許文献】
【０００６】
【非特許文献１】フィールドプログラマブルロジックアンドアプリケーションズにおけるインターナショナルカンファレンス（ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ）で２０１７年９月に公開されたステファンノルティング（Ｓｔｅｐｈａｎ  Ｎｏｌｔｉｎｇ）らによる“アドバンストドライバアシスタンスシステムズのためのアプリケーションスペシフィックソフト−コアベクトルプロセッサ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｓｏｆｔ−Ｃｏｒｅ  Ｖｅｃｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  Ａｄｖａｎｃｅｄ  Ｄｒｉｖｅｒ  Ａｓｓｉｓｔａｎｃｅ  Ｓｙｓｔｅｍｓ）”
【非特許文献２】チャイニーズジャーナルオブエレクトローニックス（Ｃｈｉｎｅｓｅ  Ｊｏｕｒｎａｌ  ｏｆ  Ｅｌｅｃｔｒｏｎｉｃｓ），第２６巻第６号第１１９８−１２０５頁で２０１７年１１月に公開されたＹｅｙｏｎｇ  Ｐａｎｇらによる“ＣＰＵアクセラレータとしてのフルリーパイプラインドソフトベクトルプロセッサ（Ｆｕｌｌｙ  Ｐｉｐｅｌｉｎｅｄ  Ｓｏｆｔ  Ｖｅｃｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  ａｓ  ａ  ＣＰＵ  Ａｃｃｅｌｅｒａｔｏｒ）”
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の技術の最初の課題は、行列転置がベクトル処理装置で一般的にサポートされていないことである。機械学習では、全結合レイヤの逆伝搬など、いくつかのケースで行列転置が使用される。参考文献では、処理装置内で行列を効率的に転置する方法は開示されていない。したがって、行列転置の特定の命令がベクトル処理装置でサポートされていない場合、転置はベクトル処理装置の外部で実行される必要がある。これを行うには、転置する行列を最初にベクトル処理装置内のローカルメモリから処理装置外部の外部メモリに転送する必要がある。転置された結果が外部メモリで準備された後、転置された行列はベクトル処理装置の外部の外部メモリからベクトル処理装置に転送される必要があり、これはデータ転送に多くの時間を浪費する。
【０００８】
２つ目の課題は、主に２つのタイプで構成されるデータ転送が多いことである。１つはローカルメモリ自体の間の転送であり、もう１つはローカルメモリと外部メモリとの間の転送である。外部メモリは現在のベクトル処理装置で常に使用できるとは限らないため、ローカルメモリと外部メモリとの間のデータ転送には通常バブルサイクルがある。また、ローカルメモリと外部メモリとの間でデータ転送を行う場合、バブルサイクルが複数ある場合でも、要求が１つずつ連続して提示されるため、他の転送要求を処理できず、これにより計算システム全体のスループット性能が低下する。
【０００９】
本発明の１つの例示的な目的は、行列転置が従来のベクトル処理エンジンでサポートされていない（上記で特定された）第１の課題を解決することができる行列転置装置を提供することである。
【００１０】
本発明の別の例示的な目的は、１つのローカルメモリに対する複数の要求を同時に受け入れることができない（上記で特定された）第２の課題を解決することができる並列システムを提供することである。
【課題を解決するための手段】
【００１１】
本開示の第１の態様は、中央処理装置と、前記中央処理装置に電子的に接続され、前記中央処理装置から受信した命令に基づいて動作を実行するように構成されたベクトル処理装置と、前記中央処理装置に電子的に接続され、命令を格納するように構成された命令メモリユニットと、外部メモリユニットと、前記中央処理装置に電子的に接続され、一次元シストリックデータを格納するように構成された第１のローカルメモリユニットと、前記ベクトル処理装置に電子的に接続され、行列データを格納するように構成された第２のローカルメモリユニットと、前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続され、前記外部メモリユニット内のデータにアクセスするように構成されたダイレクトメモリアクセスユニットと、を備えるデータ処理システムを提供し、データが、所定の選択優先度に基づくタイミングで、前記ダイレクトメモリアクセスユニットを介して転送される。
【００１２】
本開示の第２の態様は、データ処理システムのための方法を提供する。前記データ処理システムは、中央処理装置と、前記中央処理装置に電子的に接続されたベクトル処理装置と、前記中央処理装置に電子的に接続された命令メモリユニットと、外部メモリユニットと、前記中央処理装置に電子的に接続された第１のローカルメモリユニットと、前記ベクトル処理装置に電子的に接続された第２のローカルメモリユニットと、前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続されたダイレクトメモリアクセスユニットと、を備える。前記方法は、前記ベクトル処理装置によって、前記中央処理装置から受信した命令に基づいて動作を実行することと、前記命令メモリユニットによって、命令を格納することと、前記第１のローカルメモリユニットによって、一次元シストリックデータを格納することと、前記第２のローカルメモリユニットによって、行列データを格納することと、前記ダイレクトメモリアクセスユニットによって、前記外部メモリユニット内のデータにアクセスすることと、を含む。データが、所定の選択優先度に基づくタイミングで、前記ダイレクトメモリアクセスユニットを介して転送される。
【００１３】
本開示の第３の態様は、データ処理システムのためのプログラムを提供する。前記データ処理システムは、中央処理装置と、前記中央処理装置に電子的に接続されたベクトル処理装置と、前記中央処理装置に電子的に接続された命令メモリユニットと、外部メモリユニットと、前記中央処理装置に電子的に接続された第１のローカルメモリユニットと、前記ベクトル処理装置に電子的に接続された第２のローカルメモリユニットと、前記第１のローカルメモリユニット、前記第２のローカルメモリユニット、前記命令メモリユニット、および前記外部メモリユニットに電子的に接続されたダイレクトメモリアクセスユニットと、を備え、前記プログラムは、前記ベクトル処理装置に、前記中央処理装置から受信した命令に基づいて動作を実行させ、前記命令メモリユニットに、命令を格納させ、前記第１のローカルメモリユニットに、一次元シストリックデータを格納させ、前記第２のローカルメモリユニットに、行列データを格納させ、前記ダイレクトメモリアクセスユニットに、前記外部メモリユニット内のデータにアクセスさせる。データが、所定の選択優先度に基づくタイミングで、前記ダイレクトメモリアクセスユニットを介して転送される。
【００１４】
本発明の１つの効果は、行列転置がローカルメモリ内で実行され得ることである。この効果の理由は、行列転置のための特定の命令を作成できるためである。
【００１５】
ベクトル処理装置はこの命令を受信すると、一方のローカルメモリからもう一方のローカルメモリへのデータの転送を開始する。転送中に、ソースメモリとデスティネーションメモリのためのマッピングされたアドレスが計算されるため、ソース行列からの各データ項目がデスティネーション行列に転置された方法で入力される。
【００１６】
２つ目の効果は、２つのローカルメモリと外部メモリとの間のデータを同じ期間内に転送できることである。
【００１７】
この効果の理由は、優先度要求選択方式が実装されているため、優先度の高いデータ転送のバブルサイクル中に優先度の低いデータ転送を実行できるためである。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の例示的な実施形態の構造を示すブロック図である。
【図２】第１の例示的な実施形態のローカルメモリの構造を示すブロック図である。
【図３】第１の例示的な実施形態のローカルメモリの構造を示すブロック図である。
【図４】第１の例示的な実施形態のプロセッシングエレメントの構造を示すブロック図である。
【図５】第１の例示的な実施形態の行列転送の構造を示すブロック図である。
【図６】第１の例示的な実施形態のローカルメモリのデータマッピングを示すブロック図である。
【図７】第１の例示的な実施形態のローカルメモリのデータマッピングを示すブロック図である。
【図８】第１の例示的な実施形態のローカルメモリについての異なるメモリアクセス要求の優先度を示すブロック図である。
【図９】第１の例示的な実施形態のローカルメモリに対する異なるメモリアクセス要求の優先度を示すブロック図である。
【図１０】従来の方法による行列転置を伴わない２つの連続的なＧＥＭＭ計算の手順を示すフロー図である。
【図１１】第１の例示的な実施形態の方法による行列転置を伴わない２つの連続的なＧＥＭＭ計算の手順を示すフロー図である。
【図１２】従来の方法による行列転置を伴う２つの連続的なＧＥＭＭ計算の手順を示すフロー図である。
【図１３】第１の例示的な実施形態の方法による行列転置を伴う２つの連続的なＧＥＭＭ計算の手順を示すフロー図である。
【図１４】第１の例示的な実施形態の優先度選択を用いて、同じ期間に動作する２つの要求のメカニズムを示すブロック図である。
【図１５】本発明の別の例示的な実施形態の構造を示すブロック図である。
【発明を実施するための形態】
【００１９】
（構成の説明）
まず、本発明の第１の例示的な実施形態を、添付の図面を参照して以下に詳述する。
【００２０】
図１を参照すると、本発明の第１の例示的な実施形態では、データ処理システム１００は、中央処理装置（ＣＰ）１１０、ベクトル処理（ＶＰ）エンジン１２０、ＤＭＡ１３０、行列転送デバイス１４０、データ記憶用の第１のローカルメモリ１５０、データ記憶用の第２のローカルメモリ１６０、命令記憶用の命令メモリ１８０、および外部メモリ１７０を含む。
【００２１】
ＣＰ１１０は、ＭＩＰＳ処理装置、または同様のアーキテクチャ処理装置であってもよく、算術計算などの基本的な命令をサポートするサポートし、中央処理装置１１０内の汎用レジスタを用いて外部メモリ１７０への／からの格納／ロードを行う。中央処理装置１１０は、第１および第２のローカルメモリ１５０，１６０を制御して、外部メモリ１７０から計算データをフェッチし、また、命令メモリ１８０に格納されたすべての命令を準備する。次に、中央処理装置１１０は、ベクトル命令および行列データをベクトル処理装置１２０に送信する。ベクトル処理装置１２０は、命令を受け取り、計算を開始する。ベクトル処理装置１２０の計算は、一次元シストリックパターンに基づいている。一方の入力は第１のローカルメモリ１５０からフェッチされ、他方の入力は第２のローカルメモリ１６０からフェッチされる。計算後、結果は第２のローカルメモリ１６０に格納される。第１のローカルメモリ１５０と第２のローカルメモリ１６０との間にパスがあり、行列転送デバイス１４０を介して、第１のローカルメモリ１５０と第２のローカルメモリ１６０との間でデータを転送することができる。第１および第２のローカルメモリ１５０，１６０間の転送は、通常の転送または転置転送であり得る。計算が終了すると、第２のローカルメモリ１６０内の結果は、ダイレクトメモリアクセス１３０を介して外部メモリ１７０に転送されてもよい。
【００２２】
ベクトル処理装置１２０内の詳細なアーキテクチャが図４に示されている。複数の処理装置１２１のそれぞれは、互いに接続されている。データ値および命令情報を転送するために使用される、中央処理装置１１０と第１のプロセッシングエレメント１２１との間の接続が存在する。隣接するプロセッシングエレメント１２１同士の間に、各プロセッシングエレメント１２１に情報をブロードキャストするために使用される接続チャネルが存在する。各プロセッシングエレメント１２１の内部において、乗算および加算を効率的に計算するために、デジタル信号処理装置（ＤＳＰ）を使用して、より低い電力およびより高い周波数を達成することができる。さらに、中間結果を格納するために、各プロセッシングエレメント１２１に専用レジスタ１２５が存在する。各プロセッシングエレメント１２１は、１つの専用レジスタ１２５を有する。
【００２３】
ローカルメモリ１５０のアーキテクチャの詳細を図２に示す。１６個の２ポートＲＡＭバンク１５１と１個の第１のデータ選択ユニット１５３がある。２ポートＲＡＭ１５１は、データを格納するために使用される。第１のデータ選択ユニット１５３は、外部メモリ１７０または第２のローカルメモリ１６０とのデータ転送を選択する。ベクトル処理装置１２０のためのシストリックデータ入力としての出力もある。この例示的な実施形態における第１のローカルメモリ１５０の２ポートＲＡＭバンクの数は１６個であるが、８個や３２個などであってもよいことに留意されたい。
【００２４】
第２のローカルメモリ１６０のアーキテクチャの詳細は、図３に示されている。２ポートＲＡＭバンク１６１、第２のデータ選択ユニット１６２、およびデータリング１６３が存在する。ＲＡＭバンク１６１の数は、プロセッシングエレメント１２１の数に等しく、１つのプロセッシングエレメント１２１は、１つのＲＡＭバンク１６１に対応する。
【００２５】
行列転送デバイス１４０のアーキテクチャの詳細は、図５に示されている。行列転送デバイス１４０の内部には、アドレスジェネレータ１４１およびバンク数ジェネレータ１４２が存在する。第１のローカルメモリ１５０と第２のローカルメモリ１６０の構成が異なるため、一方のローカルメモリから他方のローカルメモリに転送されるデータの種類に関係なく、デスティネーションバンクのバンクおよび各バンクのアドレスは、ソースバンクのバンクおよびアドレスとは異なり得る。したがって、アドレスジェネレータ１４１およびバンク数ジェネレータ１４２が使用される。
【００２６】
［動作の説明］
次に、図１０から図１３のフローチャートを参照して、本例示的な実施形態の一般的な動作を詳細に説明する。
【００２７】
まず、ダイレクトメモリアクセスユニット（ＤＭＡ）は、命令を外部メモリ１７０から命令メモリ１８０に転送する。アプリケーションごとに、アプリケーションをアセンブリコードにコンパイルできる。したがって、アセンブリコードは、アプリケーションごとに作成され、命令メモリ１８０に格納される。
【００２８】
その後、中央処理装置１１０は、命令メモリ１８０から命令を１つずつフェッチする。初期データは、計算を開始する前に、第１のローカルメモリ１５０および第２のローカルメモリ１６０に格納される。汎用行列乗算（ＧＥＭＭ）機能を実行する場合、左側の行列は第１のローカルメモリ１５０に格納され、右側の行列は第２のローカルメモリ１６０に格納される。各行列Ｍ＊Ｋについて、第１のローカルメモリ１５０におけるデータマッピングは、図６を参照して説明される。第１のローカルメモリ１５０に使用されるＲＡＭの１６個のバンクがある場合、Ｄ１［０，０］（Ｄ１［ｍ，ｋ］は、行列のｍ番目の行およびｋ番目の列のエレメントを表す）は、行列を格納するために第１のローカルメモリ１５０のバンク０のアドレス０に格納される。例えば、データＤ１［０，１］は、第１のローカルメモリ１５０のバンク１のアドレス０に格納され、データＤ１［０，１５］は、例えば、第１のローカルメモリ１５０のバンク１５のアドレス０に格納される。Ｄ１［０，１６］から開始して、データは、第１のローカルメモリ１５０のバンク０のアドレス１に格納される。
【００２９】
したがって、アドレスジェネレータ１４１および対応するバンクは、以下の式によって計算される。
ＡＤＤＲ＝（ｍ＊Ｋ＋ｋ）／１６
ＢＡＮＫ＝（ｍ＊Ｋ＋ｋ）％１６
【００３０】
第２のローカルメモリ１６０のデータマッピングについては、各プロセッシングエレメント１２１が１つのＲＡＭバンク１６１に対応しているため、ＲＡＭバンク１６１の数はプロセッシングエレメント１２１の数に等しい。２５６個のプロセッシングエレメント１２１が存在する例では、図７を参照してデータマッピング方法が与えられる。Ｄ２［０，０］は、第２のローカルメモリ１６０のバンク０のアドレス０に格納され、Ｄ２［０，１］は、第２のローカルメモリ１６０のバンク１のアドレス０に格納され、以下同様である。Ｄ２［１，０］の場合、データは第２のローカルメモリ１６０のバンク０のアドレス１に格納される。Ｄ２［１，１］の場合、データは第２のローカルメモリ１６０のバンク１のアドレス１に格納される。各行列Ｋ＊Ｎについて、ＮがＰＥ１２１の数よりも小さい場合、未使用の列はゼロで埋められる。ＮがＰＥ１２１の数よりも大きい場合、行列は、ＰＥ１２１の数に従って列ごとにカットされ、次いで、第２のローカルメモリ１６０にマッピングされる。したがって、エレメントＤ２［ｋ，ｎ］（ｋは行を表し、ｎは列を表す）の場合、アドレスジェネレータおよび対応するバンクは以下の式で得られる。
ＡＤＤＲ＝ｋ
ＢＡＮＫ＝ｎ
【００３１】
行列を第２のローカルメモリ１６０に格納するために、データリング１６３を使用して、すべての２ポートＲＡＭバンクを介してデータを渡し、対応する２ポートＲＡＭバンクへ／からデータを書き込む／読み取る。例えば、キャッシュラインが６４バイトで、３２ビットの単精度浮動小数点を使用する場合、１つのキャッシュラインに１６個のデータ項目がある。各データ項目は、対応する２ポートＲＡＭバンク１６１に格納される必要がある。
【００３２】
左右の行列を第１のローカルメモリ１５０および第２のローカルメモリ１６０に格納した後、計算は一次元シストリック方式で実行される。ＧＥＭＭ計算の場合、左側の行列がＤ１（Ｍ，Ｋ）で、右側の行列がＤ２（Ｋ，Ｎ）であるとすると、乗算結果はＲＥＳ（Ｍ，Ｎ）になる。ＲＥＳ［ｍ，ｎ］の各エレメントについて、次の計算が実行される。
【数１】
2022500782.tif 000003
Ｄ１［０，０］は、ローカルメモリ１５０から読み取られ、プロセッシングエレメント１２１に転送される。Ｄ２［０，０］は、第２のローカルメモリ１６０から読み取られ、プロセッシングエレメント１２１のための他の入力オペランドとなる。計算後、Ｄ１［０，０］とＤ２［０，０］の乗算は専用レジスタに格納される。Ｄ１［０，０］は、シストリック方式で第２のプロセッシングエレメント１２１に転送される。Ｄ２［０，１］は、第２のローカルメモリ１６０から読み取られる。Ｄ１［０，０］とＤ２［０，１］は、乗算の２つのオペランドである。Ｄ１［０，０］＊Ｄ２［０，１］の結果は、専用レジスタ１２５に格納される。後のプロセッシングエレメント１２１については、Ｄ１［０，０］は常にシストリックの方法で転送される。最後に、Ｄ１［０，０］は、すべてのプロセッシングエレメント１２１を介して転送される。実際、各プロセッシングエレメント１２１のデータフローは完全に同じである。したがって、１つのプロセッシングエレメント１２１のデータフローを以下に簡単に説明する。
【００３３】
Ｄ１［０，０］がすべてのＰＥ１２１を介して転送された後、次のデータ項目が第１のローカルメモリ１５０から読み取られる。左側の行列は、行優先順に読み取られる。したがって、例えば、Ｄ１［０，１］は、第１のローカルメモリ１５０から読み取られて第１のプロセッシングエレメント１２１に送信され、Ｄ２［１，０］は、第１のプロセッシング１２１において第２のローカルメモリ１６０から読み取られる。その後、Ｄ１［０，１］＊Ｄ２［１，０］が計算される。Ｄ１［０，０］＊Ｄ２［０，０］の前の結果は、専用レジスタ１２５から読み取られ、Ｄ１［０，１］＊Ｄ２［１，０］の結果に追加される。合計は、専用レジスタ１２５に再び格納される。これを繰り返し行うことにより、第１のプロセッシングエレメント１２１の第１のエレメントＲＥＳ［０，０］を取得することができる。同様に、第１のプロセッシングエレメント１２１内のすべてのエレメントを計算することができる。エレメントを計算した後、結果は、第２のローカルメモリ１６０内の２ポートＲＡＭバンク１６１に送信される。
【００３４】
以下、第１のローカルメモリ１５０と第２のローカルメモリ１６０との間のデータ転送について説明する。４つのケースがある。第１のケースは、第１のローカルメモリ１５０から第２のローカルメモリ１６０への通常の転送である。第２のローカルメモリ１６０に格納された行列サイズがＫ×Ｎであると仮定すると、Ｎ個のプロセッシングエレメント１２１が使用され、各ＲＡＭバンクの深さはＫである。上記のように、Ｎがプロセッシングエレメント１２１の数（例えば２５６）よりも小さい場合、未使用の列はゼロで埋められる。したがって、第２のローカルメモリ１６０内のＤ２［０，０］は、ローカルメモリ１５０内の第１のＲＡＭバンクの第１のエレメントにマッピングされる。第２のローカルメモリ１６０内のＤ２［０，１］は、第１のローカルメモリ１５０内の第２のＲＡＭの第１のエレメントにマッピングされる。しかしながら、第２のローカルメモリ１６０内のＤ２［０，ｎ］について、ｎが第１のローカルメモリ１５０によってサポートされるバンクの数よりも大きい場合、第１のローカルメモリ１５０および第２のローカルメモリ１６０内のアドレスおよびバンクは、異なる。他のエレメントのアドレスとバンクのマッピングについて、計算方法が以下の式に示され、ここで、ＤＳＴ＿ＡＤＤＲとＤＳＴ＿ＢＡＮＫは、それぞれデスティネーションアドレスとバンクである。この場合、デスティネーションアドレスおよびバンクは、第１のローカルメモリ１５０にある。ＳＲＣ＿ＡＤＤＲおよびＳＲＣ＿ＢＡＮＫは、ソースアドレスおよびソースバンクを表し、この場合、ソースアドレスおよびソースバンクは、第２のローカルメモリ１６０にある。ＳＲＣ＿ＮＵＭ＿ＢＡＮＫは、第２のローカルメモリ１６０内の２ポートＲＡＭバンク１６１の数であり、ＤＳＴ＿ＮＵＭ＿ＢＡＮＫは、第１のローカルメモリ１５０でサポートされる２ポートＲＡＭバンク１５１の数である。
ＤＳＴ＿ＡＤＤＲ＝（ＳＲＣ＿ＡＤＤＲ＊ＳＲＣ＿ＮＵＭ＿ＢＡＮＫ＋ＳＲＣ＿ＢＡＮＫ）／ＤＳＴ＿ＮＵＭ＿ＢＡＮＫ
ＤＳＴ＿ＢＡＮＫ＝（ＳＲＣ＿ＡＤＤＲ＊ＳＲＣ＿ＮＵＭ＿ＢＡＮＫ＋ＳＲＣ＿ＢＡＮＫ）％ＤＳＴ＿ＮＵＭ＿ＢＡＮＫ
【００３５】
実際の状況では、各クロックサイクルで、キャッシュラインが５１２ビットであると想定して５１２ビットのデータが転送される。３２ビットの単精度浮動小数点の場合、１つのデータ項目は３２ビットであるため、１クロックサイクルで１６個のデータ項目が転送される。２５６個のプロセッシングエレメント１２１が存在すると仮定すると、第１のローカルメモリ１５０と第２のローカルメモリ１６０との間のデータ転送について、第１のクロックサイクルにおいて、Ｄ２［０，０］，Ｄ２［０，１］…Ｄ２［０，１５］が各プロセッシングエレメント１２１のＲＡＭ１６１から取り出され、データリングを介して第１のローカルメモリ１５０に転送される。Ｄ２［０，０］，Ｄ２［０，１］…Ｄ２［０，１５］は、第１のローカルメモリ１５０の異なるバンクに格納されるので、これらのデータ項目を、同じクロックサイクルにおいて第１のローカルメモリ１５０に書き込むことができる。第２のクロックサイクルにおいて、Ｄ２［０，１６］，Ｄ２［０，１７］，Ｄ２［０，１８］…Ｄ２［０，３１］が、対応するプロセッシングエレメント１２１のＲＡＭバンク１６１から取り出されて、データリング１６３を介して第１のローカルメモリ１５０に転送される。Ｄ２［０，１６］，Ｄ２［０，１７］…Ｄ２［０，３１］はローカルメモリ１５０の異なるバンクに格納されるので、これらのデータ項目を、同じクロックサイクルにおいて第１のローカルメモリ１５０に書き込むことができる。同様に、各クロックサイクルにおいて、１６個のデータ項目が、対応するプロセッシングエレメント１２１のＲＡＭバンク１６１から読み取られ、次いで、データリング１６３を介して転送され、最後に、第１のローカルメモリ１５０に格納される。
【００３６】
第２のケースは、第１のローカルメモリ１５０から第２のローカルメモリ１６０への通常の転送である。同様に、アドレスおよびバンクジェネレータは上記と同じであるが、唯一の違いは、ソースが第１のローカルメモリ１５０になり、デスティネーションが第２のローカルメモリ１６０になることである。
【００３７】
第３のケースは、転置された行列が第１のローカルメモリ１５０から第２のローカルメモリ１６０に転送されることである。行列［Ｎ，Ｍ］が第１のローカルメモリ１５０に格納されていると仮定すると、この行列は［Ｍ，Ｎ］のサイズに転置され、第２のローカルメモリ１６０に格納される。例えば、第１のローカルメモリ１５０のＤ１［０，０］は、第２のローカルメモリ１６０のバンク０のアドレス０にマッピングされる。第２のローカルメモリ１６０のＤ１［０，１］は、第２のローカルメモリ１６０のバンク０のアドレス１にマッピングされる。他のエレメントのアドレスとバンクのマッピングについて、計算方法を以下の式に示す。
ＤＳＴ＿ＡＤＤＲ＝（ＳＲＣ＿ＡＤＤＲ＊ＳＲＣ＿ＮＵＭ＿ＢＡＮＫ＋ＳＲＣ＿ＢＡＮＫ）％ＤＳＴ＿ＮＵＭ＿ＢＡＮＫ
ＤＳＴ＿ＢＡＮＫ＝（ＳＲＣ＿ＡＤＤＲ＊ＳＲＣ＿ＮＵＭ＿ＢＡＮＫ＋ＳＲＣ＿ＢＡＮＫ）／ＤＳＴ＿ＮＵＭ＿ＢＡＮＫ
【００３８】
転送は引き続き１６×１６ブロックに基づいている。しかしながら、この１６×１６ブロックは、第２のローカルメモリ１６０にある。したがって、１６クロックサイクルごとに第２のローカルメモリ１６０の側に１６×１６ブロックを生成するには、われわれは第１のローカルメモリ１５０のＤ２［０，０］，Ｄ２［１，１］，Ｄ２［２，２］…Ｄ２［１５，１５］の対応するエレメントを見つける必要がある。Ｄ２［０，０］の対応するアドレスはバンク０のアドレス０であり、Ｄ２［１，１］の対応するアドレスはバンク１のアドレス（Ｎ＋１）／１６であり、Ｄ２［２，２］の対応するアドレスはバンク２のアドレス（Ｎ×２＋２）／１６である。同様に、Ｄ２［１５，１５］の対応する位置は、バンク１５のアドレス（Ｎ×１５＋１５）／１６である。したがって、１クロックサイクルで１６個のデータ項目をフェッチできる。第２のクロックサイクルでは、Ｄ２［１，０］，Ｄ２［２，１］，Ｄ２［３，２］…Ｄ２［０，１５］の対応するエレメントが、第１のローカルメモリ１５０に見出される。Ｄ２［１，０］の対応するアドレスはバンク０のアドレスＮ／１６であり、Ｄ２［２，１］の対応するアドレスはバンク１のアドレス（Ｎ×２＋１）／１６である。同様に、Ｄ２［０，１５］の対応する位置は、バンク１５のアドレス０である。これらのマッピング方法により、ローカルメモリ１６０の１６×１６ブロックの第１のローカルメモリ１５０のアドレスを知ることができる。各クロックサイクルにおいて、第１のローカルメモリ１５０からフェッチされた１６個のエレメントが転置され、第２のローカルメモリ１６０に格納される。例えば、第１のサイクルでは、Ｄ２［０，０］，Ｄ２［１，１］，Ｄ２［２，２］…Ｄ２［１５，１５］は対角線であるため、転置された結果は同じである。第２のローカルメモリ１６０の場合、バンク０のアドレスは０であり、バンク１のアドレスは１であり、以下同様である。第２のクロックサイクルでは、Ｄ２［１，０］，Ｄ２［２，１］，Ｄ２［３，２］…Ｄ２［０，１５］が第１のローカルメモリ１５０からフェッチされる。Ｄ２［１，０］の場合、転置された結果はバンク１のアドレス０に格納される必要があり、Ｄ２［２，１］はバンク２のアドレス１に格納される必要があり、Ｄ２［３，２］はバンク３のアドレス２に格納される必要がある。同様に、すべてのデータを、１クロックサイクルで第２のローカルメモリ１６０の１６個のバンクに格納することができる。
【００３９】
第１のローカルメモリ１５０のアドレスジェネレータは、以下の式として表すことができ、ここで、ＣＮＴは、１６×１６ブロックの各１６クロックサイクルのカウントであり、ＳＲＣ＿ＢＡＮＫは、第１のローカルメモリ１５０のどのバンクかを意味する。
ＳＲＣ＿ＡＤＤＲ＿ＩＮ＿Ｂ１６＝（Ｎ＊（ＳＲＣ＿ＢＡＮＫ＋ＣＮＴ）＋ＳＲＣ＿ＢＡＮＫ）／１６  ｉｆ  ＳＲＣ＿ＢＡＮＫ＋ＣＮＴ＜＝１５
ＳＲＣ＿ＡＤＤＲ＿ＩＮ＿Ｂ１６＝（Ｎ＊（ＳＲＣ＿ＢＡＮＫ＋ＣＮＴ−１６）＋ＳＲＣ＿ＢＡＮＫ）／１６  ｉｆ  ＳＲＣ＿ＢＡＮＫ＋ＣＮＴ＞１５
【００４０】
１６×１６ブロックの基本アドレスは２つの部分で構成され、１つの部分はｄｅｌｔａ＿ｖとしてマークされた１６×１６ブロックの垂直方向の動きに対応し、もう１つの部分はｄｅｌｔａ＿ｈとしてマークされた１６×１６ブロックの水平方向の動きに対応する。Ｂ１６＿ｖｅｒｔｉｃａｌ＿ｎｕｍは、第２のローカルメモリ１６０内の１６×１６ブロックの垂直アドレスを表す。ここでは、第２のローカルメモリ１６０内の１６×１６ブロックの垂直スキャンが使用される。
Ｂ１６＿ｖｅｒｔｉｃａｌ＿ｎｕｍ＝（Ｂ１６＿ｖｅｒｔｉｃａｌ＿ｎｕｍ＜Ｍ／１６）？Ｂ１６＿ｖｅｒｔｉｃａｌ＿ｎｕｍ＋１：０
Ｄｅｌｔａ＿ｖ＝（Ｂ１６＿ｖｅｒｔｉｃａｌ＿ｎｕｍ＜Ｍ／１６）？（Ｄｅｌｔａ＿ｖ＋Ｎ）：０
Ｄｅｌｔａ＿ｈ＝（Ｂ１６＿ｖｅｒｔｉｃａｌ＿ｎｕｍ＝＝０）？（Ｄｅｌｔａ＿ｈ＋１）：Ｄｅｌｔａ＿ｈ
ＳＲＣ＿Ｂ１６＿ＡＤＤＲ＝Ｄｅｌｔａ＿ｖ＋Ｄｅｌｔａ＿ｈ
【００４１】
したがって、第１のローカルメモリ１５０の１６個のバンクの最終アドレスを、以下の式で得ることができる。
ＳＲＣ＿ＡＤＤＲ＝ＳＲＣ＿ＡＤＤＲ＿ＩＮ＿Ｂ１６＋ＳＲＣ＿Ｂ１６＿ＡＤＤＲ
【００４２】
第１のローカルメモリ１５０のアドレスジェネレータは、上記で与えられている。次に、第２のローカルメモリ１６０のアドレスおよびバンクジェネレータについて説明する。ソース行列のスキャンは、第２のローカルメモリ１６０における垂直スキャンであるため、転置された行列のスキャンは、第２のローカルメモリ１６０における水平スキャンである。したがって、基本アドレスと基本バンクを次のように計算できる。
ＤＳＴ＿ＡＤＤＲ＿ＩＮ＿Ｂ１６＝（ＤＳＴ＿ＢＡＮＫ％１６−ＣＮＴ）  ｉｆ  ＤＳＴ＿ＢＡＮＫ％１６−ＣＮＴ＞＝０
ＤＳＴ＿ＡＤＤＲ＿ＩＮ＿Ｂ１６＝（ＤＳＴ＿ＢＡＮＫ％１６−ＣＮＴ＋１６）  ｉｆ  ＤＳＴ＿ＢＡＮＫ％１６−ＣＮＴ＜０
ＤＳＴ＿Ｂ１６＿ＡＤＤＲ＝（ＤＳＴ＿Ｂ１６＿ＢＡＮＫ＜Ｎ／１６）？ＤＳＴ＿Ｂ１６＿ＡＤＤＲ：（ＤＳＴ＿Ｂ１６＿ＡＤＤＲ＋１６）
ＤＳＴ＿ＡＤＤＲ＝ＤＳＴ＿ＡＤＤＲ＿ＩＮ＿Ｂ１６＋ＤＳＴ＿Ｂ１６＿ＡＤＤＲ
【００４３】
第４のケースは、転置された行列が第２のローカルメモリ１６０から第１のローカルメモリ１５０に転送されることである。行列［Ｍ，Ｎ］が第２のローカルメモリ１６０に格納されていると仮定すると、この行列は［Ｎ，Ｍ］に転置されて第１のローカルメモリ１５０に格納される必要がある。例えば、第２のローカルメモリ１６０のＤ２［０，０］は、第１のローカルメモリ１５０のバンク０のアドレス０に引き続きマッピングされる。第２のローカルメモリ１６０のＤ２［０，１］は、第１のローカルメモリ１５０のバンク０のアドレス１にマッピングされる。他のエレメントのアドレスとバンクのマッピングについて、計算方法を以下の式に示す。
ＤＳＴ＿ＡＤＤＲ＝（ＳＲＣ＿ＢＡＮＫ＊Ｍ＋ＳＲＣ＿ＡＤＤＲ）／ＤＳＴ＿ＮＵＭ＿ＢＡＮＫ
ＤＳＴ＿ＢＡＮＫ＝（ＳＲＣ＿ＢＡＮＫ＊Ｍ＋ＳＲＣ＿ＡＤＤＲ）％ＤＳＴ＿ＮＵＭ＿ＢＡＮＫ
【００４４】
Ｄ２［０，０］，Ｄ２［０，１］…Ｄ２［０，１５］のデータが各プロセッシングエレメント１２１のＲＡＭ１６１から取得された場合、１６個のデータ項目は第１のローカルメモリ１５０の同じＲＡＭバンクに格納される。したがって、われわれはこれらの１６個のデータエレメントを１クロックサイクルで第１のローカルメモリ１５０に格納することはできない。この問題を回避するために、サイクリックデータマッピング方法が使用される。転送は１６×１６ブロックに基づいており、これは、１個の１６×１６ブロックのデータにアクセスした後に、１６×１６ブロックが次の１６×１６ブロックにシフトされることを意味する。左上の１６×１６ブロックが最初に転送され、１６クロックサイクルかかる。第１のクロックサイクルにおいて、Ｄ２［０，０］，Ｄ２［１，１］，Ｄ２［２，２］…Ｄ２［１５，１５］が、第２のローカルメモリ１６０のＲＡＭ１６１から読み取られる。これらのエレメントは、第１のローカルメモリ１５０の異なるバンクに格納される。Ｄ２［０，０］は第１のローカルメモリ１５０の第１のＲＡＭに格納され、Ｄ２［１，１］はローカルメモリの第２のＲＡＭに格納され、以下同様である。したがって、われわれはこれらの１６個のデータ項目を１クロックサイクルで第１のローカルメモリ１５０に格納することができる。第２のクロックサイクルにおいて、Ｄ２［０，１］，Ｄ２［１，２］，Ｄ２［２，３］…Ｄ２［１４，１５］およびＤ２［１５，０］が、第２のローカルメモリ１６０のＲＡＭバンク１６１から読み取られる。これらのエレメントはまた、第１のローカルメモリ１５０の異なるバンクに格納される。したがって、われわれはこれらの１６個のデータを１クロックサイクルで第１のローカルメモリ１５０に格納することができる。アドレスジェネレータは第３のケースと同じであるが、唯一の違いは、第３のケースでは第１のローカルメモリ１５０から第２のローカルメモリ１６０に転送されるが、この第４のケースでは第２のローカルメモリ１６０から第１のローカルメモリ１５０に転送されることである。したがって、ソースとデスティネーションのアドレスが交換されている。
【００４５】
第２のローカルメモリ１６０に関しては、外部メモリ１７０と第２のローカルメモリ１６０との間の転送、および第１のローカルメモリ１５０と第２のローカルメモリ１６０との間の転送が可能である。同じクロックサイクルで複数の転送要求を受信した場合、優先度はデータ選択ユニット１６２によって決定される。この動作の説明は、図８のフローチャートを参照して以下に説明される。第１の優先事項は、外部メモリ１７０から第２のローカルメモリ１６０へのデータ転送である。これは、データが有効である場合、データを外部メモリ１７０から取得しなければならないためである。第２の優先事項は、第２のローカルメモリ１６０から外部メモリ１７０への転送である。第３の優先事項は、第１のローカルメモリ１５０から第２のローカルメモリ１６０への転送であり、最後の優先事項は、第２のローカルメモリ１６０から第１のローカルメモリ１５０への転送である。
【００４６】
第１のローカルメモリ１５０に関して、第１のデータ選択ユニット１５３が使用される。同じクロックサイクルで複数の転送要求を受信した場合、図９に示すように、優先度に基づいて選択が実行される。第１の優先事項は、外部メモリ１７０から第１のローカルメモリ１５０へのデータ転送である。第２の優先事項は、第１のローカルメモリ１５０から外部メモリ１７０への転送である。第３の優先事項は、第２のローカルメモリ１６０から第１のローカルメモリ１５０への転送であり、最後の優先事項は、第１のローカルメモリ１５０から第２のローカルメモリ１６０への転送である。
【００４７】
連続したＧＥＭＭの場合（例えば、第１のＧＥＭＭはＡ＊Ｂ＝Ｃであり、第２のＧＥＭＭはＣ＊Ｄ＝Ｅである）。以下、図１０を参照して説明する。第１のＧＥＭＭはＡ＊Ｂ＝Ｃであり、行列Ａは第１のローカルメモリ１５０に格納され、行列Ｂは第２のローカルメモリ１６０に格納される。行列Ａを第１のローカルメモリ１５０に格納し、行列Ｂをローカルメモリ１６０に格納した後、計算が実行され、結果が第２のローカルメモリ１６０に格納される。第２のＧＥＭＭがＣ＊Ｄ＝Ｅである場合、行列Ｃは、シストリック一次元入力として第１のローカルメモリ１５０に格納される必要がある。行列Ｃを第１のローカルメモリ１５０に格納するために、結果は、最初に外部メモリ１７０に送信され、次に外部メモリから第１のローカルメモリ１５０に転送されなければならない。その後、行列Ｄが第２のローカルメモリ１６０に格納され、計算が開始される。最後に、計算結果が取得され、外部メモリ１７０に転送される。
【００４８】
しかしながら、われわれの方法では、われわれは行列Ｃを第２のローカルメモリ１６０から第１のローカルメモリ１５０に直接転送することができる。したがって、われわれは行列Ｃの外部メモリ１７０への転送を省くことができる。処理手順を図１１に示す。第１のＧＥＭＭの計算は、第２のＧＥＭＭの行列Ｄを格納するときに並列化できる。
【００４９】
同様に、第２のＧＥＭＭがＣ．Ｔ＊Ｄ＝Ｅであり、ここでＣ．ＴがＣの転置行列である場合、従来の方法において、手順が図１２に示されている。第１のＧＥＭＭを計算については、手順は図１０に示されるものと同じである。Ｃを外部メモリに格納した後、中央処理装置１１０は、外部メモリ１７０内の行列Ｃを転置する。その後、Ｃの転置行列が第１のローカルメモリ１５０に転送され、行列Ｄが第２のローカルメモリ１６０に転送され、第２のＧＥＭＭが動作を開始することができる。
【００５０】
しかしながら、本開示の方法では、行列Ｃを第２のローカルメモリ１６０から第１のローカルメモリ１５０に直接転送することができるだけでなく、転送中に転置を終了することができる。したがって、行列Ｃの外部メモリ１７０への転送を、より少ない動作で実行することができる。さらに、中央処理装置への転送時間を短縮できる。処理手順を図１３に示す。
【００５１】
上記の例では、同じローカルメモリ（すなわち、第１のローカルメモリ１５０または第２のローカルメモリ１６０）に対する同時要求はない。ただし、一部の実装では、これらのプロセスが発生する場合がある。例えば、第１のＧＥＭＭであるＡ＊Ｂ＝Ｃを計算した後、行列Ｃの結果は、外部メモリ１７０に転送される必要がある。その間、結果はまた、次のＧＥＭＭであるＣ＊Ｄ＝Ｅのために第１のローカルメモリ１５０に転送される必要がある。この場合、第２のローカルメモリ１６０と外部メモリ１７０との間の転送がより高い優先度を有する。図１４に示すように、外部メモリ１７０から／へのデータ転送はいくつかのバブルサイクルを有するので、これらのバブルサイクルを利用して、第１のローカルメモリ１５０と第２のローカルメモリ１６０との間の転送を実行することができる。
【００５２】
［効果の説明］
次に、本例示的な実施形態の効果について説明する。
【００５３】
本例示的な実施形態は、２つのローカルメモリに対してマッピングアドレスが周期的に与えられるように構成されているので、アクセラレータ内部のデータリング１６３を介して転置方式でデータを転送することが可能であり、したがって、ホスト側で転置を実行する必要がない。
【００５４】
さらに、例示的な実施形態は、データ転送および計算が２つの異なるチャネルを使用するように構成され、これにより、連続的な行列計算が可能になり、並列に実行することができる。さらに、前の行列計算のデータ転送を、次の行列計算の計算と同時に実行することができる。
【００５５】
さらに、ローカルメモリごとに同じ期間に複数の書き込み／読み取り要求を実行できるため、ローカルメモリと外部メモリとの間の通信のバブルサイクルを利用できる。
【００５６】
図１５を参照すると、別の例示的な実施形態では、データ処理システム１００は、中央処理装置（ＣＰ）１１０、ベクトル処理（ＶＰ）エンジン１２０、ＤＭＡ１３０、データ記憶用の第１のローカルメモリ１５０、データ記憶用の第２のローカルメモリ１６０、命令記憶用の命令メモリ１８０、および外部メモリ１７０を含む。
【００５７】
上記のプログラムは、上記の機能を部分的に実行するためのものであってもよい。上記のプログラムは、上記の機能を実行するために、コンピュータシステムにすでに記録されているプログラムと組み合わされた、いわゆる差分ファイル（差分プログラム）であってもよい。
【００５８】
上記のデータ処理システムのすべてまたは一部の機能は、ＡＳＩＣ（特定用途向け集積回路）、ＰＬＤ（プログラマブルロジックデバイス）、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）などのハードウェアを利用することによって実行され得る。
【００５９】
それに加えて、上記の例示的な実施形態の特徴は、本発明の範囲から逸脱しない範囲内で、周知の特徴で適切に置き換えることができる。さらに、本発明の技術的範囲は、上記の例示的な実施形態に限定されず、本発明の範囲から逸脱しない範囲内で様々な修正を行うことができる。
【産業上の利用可能性】
【００６０】
本発明は、画像または動画処理プラットフォームや深層学習プラットフォームなどの、大量のベクトルまたは行列計算を含むデータ処理装置に適用可能である。
【符号の説明】
【００６１】
１００  データ処理システム
１１０  中央処理装置（ＣＰ）
１２０  ベクトル処理装置（ＶＰ）
１２１  プロセッシングエレメント（ＰＥ）
１２５  専用レジスタ
１３０  ダイレクトメモリアクセス（ＤＭＡ）
１４０  行列転送デバイス
１４１  アドレスジェネレータ
１４２  バンク数ジェネレータ
１５０  第１のローカルメモリ
１５３  第１のデータ選択ユニット
１６０  第２のローカルメモリ
１６１  ＲＡＭバンク
１６２  第２のデータ選択ユニット
１６３  データリング
１７０  外部メモリ
１８０  命令メモリ
【図１】
2022500782.tif 000004
【図２】
2022500782.tif 000005
【図３】
2022500782.tif 000006
【図４】
2022500782.tif 000007
【図５】
2022500782.tif 000008
【図６】
2022500782.tif 000009
【図７】
2022500782.tif 000010
【図８】
2022500782.tif 000011
【図９】
2022500782.tif 000012
【図１０】
2022500782.tif 000013
【図１１】
2022500782.tif 000014
【図１２】
2022500782.tif 000015
【図１３】
2022500782.tif 000016
【図１４】
2022500782.tif 000017
【図１５】
2022500782.tif 000018
【国際調査報告】
2022500782.tif 000019
2022500782.tif 000020