(57)【要約】      （修正有）【課題】コアによる画像データの読み出し処理を効率的に行う。【解決手段】プロセッサは複数の演算コアと、演算コアからアクセスされる複数の個別メモリと、複数の演算コアに設けられる複数の共有メモリと、複数の演算コアと個別メモリの間に設けられる複数のメモリ制御回路と、複数の共有メモリそれぞれに設けられる複数のセレクタと、複数の演算コアを制御する制御コアを有する。制御コアが、複数のメモリ制御回路に、複数の演算コア間で転送される転送データが格納される個別メモリ及び共有メモリの転送元アドレスと、転送データが転送される共有メモリの転送先アドレスを設定し、複数のセレクタに転送セレクト情報を設定した場合で、複数のメモリ制御回路が、それぞれが属する演算コアのリード要求のアドレスが転送元アドレスと一致する場合に、転送セレクト情報を設定されたセレクタを経由して転送先アドレスに、リード要求に対する転送データを転送する。【選択図】図７
2018120548.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有し、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定した場合、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定した場合、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、プロセッサ。
【請求項２】
前記転送元アドレスは、前記転送データが格納される、前記個別メモリと前記共有メモリと第２方向に隣接する第２隣接コアに属する共有メモリのいずれかの転送元アドレスであり、
前記転送先アドレスは、前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかの転送先アドレス情報である、請求項１に記載のプロセッサ。
【請求項３】
前記複数のメモリ制御回路それぞれが、前記複数の演算コアそれぞれのリード要求のアドレスが前記転送元アドレスと一致する場合、前記個別メモリと前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかから読み出されるリードデータを前記転送データとして、前記転送先アドレスに対応する、前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかに転送する、請求項２に記載のプロセッサ。
【請求項４】
前記複数の共有メモリそれぞれは、第1メモリバンクと第２メモリバンクを有し、
前記制御コアが、前記複数のセレクタそれぞれの前記第１メモリバンクに対して前記転送セレクト情報を設定し、前記第２メモリバンクに対して前記リードセレクト情報を設定した場合、前記第１メモリバンクに前記転送データが転送され、前記第２メモリバンクから前記リードデータを読み出され、
前記制御コアが、前記第２のメモリバンクに対して前記転送セレクト情報を設定し、前記第１メモリバンクに対して前記リードセレクト情報を設定した場合、前記第２メモリバンクに前記転送データが転送され、前記第１メモリバンクから前記リードデータを読み出される、請求項１に記載のプロセッサ。
【請求項５】
前記制御コアが前記セレクタに前記リードセレクト情報と転送セレクト情報を設定した後、前記演算コアが前記リード要求を発行しリードデータを演算するとともに、前記メモリ制御回路が前記リードデータを前記転送データとして、前記セレクタを介して前記共有メモリに転送し、
前記演算コアの前記演算の完了後、再度、前記制御コアによる前記セレクタへの新たなリードセレクト情報と転送セレクト情報の設定と、前記演算コアによるリード要求の発行及び演算と、前記メモリ制御回路による前記転送データの転送とが行われる、請求項１に記載のプロセッサ。
【請求項６】
前記複数の演算コアの演算サイクル毎に、前記複数の個別メモリそれぞれに記憶された前記転送データが、それぞれの隣接コアに属する共有メモリに転送される、請求項５に記載のプロセッサ。
【請求項７】
前記複数の演算コアの演算サイクル毎に、前記複数の個別メモリそれぞれに記憶された前記転送データが、それぞれの隣接コアに属する共有メモリに転送されて前記転送データが前記複数の共有メモリ間で循環する、請求項５に記載のプロセッサ。
【請求項８】
前記複数の演算コアそれぞれに属する前記複数の個別メモリに、演算対象データが書き込まれ、
前記複数の演算コアが、それぞれに属する前記複数の個別メモリから前記演算対象データを読み出してそれぞれの演算を実行するとともに、それぞれに属する前記メモリ制御回路が読み出されるリードデータを前記共有メモリに転送し、
前記複数の演算コアの演算サイクル毎に、前記転送データが、それぞれの隣接コアに属する共有メモリに転送されて前記転送データが前記複数の共有メモリ間で循環する、請求項５に記載のプロセッサ。
【請求項９】
メインメモリと、
前記メインメモリにアクセス可能なプロセッサと、を有し、
前記プロセッサは、
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有し、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定した場合、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定した場合、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、情報処理装置。
【請求項１０】
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有するプロセッサの動作方法において、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定し、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定し、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、プロセッサの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，プロセッサ、情報処理装置及びプロセッサの動作方法に関する。
【背景技術】
【０００２】
ディープラーニング（以下DL1:Deep Learning）は、情報処理装置内のプロセッサの演算処理により実行される。DLは、階層の深いニューラルネットワーク（以下DNN：Deep Neural Network）を利用したアルゴリズムの総称である。そして、DNNの中でも良く利用されるのが、コンボリュージョン・ニューラルネットワーク（CNN：Convolution Neural Network）である。CNNは、例えば画像データの特徴を判定するDNNとして広く利用される。
【０００３】
画像データの特徴を判定するCNNは、画像データを入力しフィルタを利用した畳込み演算を行い画像データの特徴（例えばエッジの特徴など）を検出する。そして、CNNの畳込み演算は、例えばプロセッサにより演算される。以下の特許文献１にはマルチコア・プロセッサのプロセッサ間通信について開示がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１５６７８３号公報
【特許文献２】国際公開第２０１６／０７５８１３号公報
【特許文献３】国際公開第２０１２／００１８３５号公報
【特許文献４】特開平８−１４７１７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の畳込み演算は、係数フィルタの画像データでの位置を画像データのラスタスキャン方向に移動しながら、画像データの注目画素を中心とする近傍マトリクスの画素データと係数フィルタの係数（重み）との積和演算を繰り返す。そして、畳込み演算は、複数の画像データと複数の係数フィルタそれぞれの畳込み演算を含み、複数の積和演算器で並列に行うことが演算時間短縮に寄与する。その場合、それぞれ演算器を有する複数のコアが、複数の画像データをそれぞれメモリから読み出し、それぞれの係数フィルタで積和演算を繰り返す。
【０００６】
したがって、複数のコアそれぞれが、同じ複数の画像データをメモリから読み出す処理は、畳込み演算の処理効率を下げる一つの要因である。しかも、DNNの演算は非常の多くの畳込み演算を含むので、上記の画像データの読み出し処理による処理効率の低下の程度はその分大きくなる。
【０００７】
そこで、一つの実施の形態の目的は，プロセッサ内のコアによる画像データの読み出し処理を効率的に行うプロセッサ、情報処理装置及びプロセッサの動作方法を提供することにある。
【課題を解決するための手段】
【０００８】
一つの実施の形態は，複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有し、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定した場合、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定した場合、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、プロセッサである。
【発明の効果】
【０００９】
第１の側面によれば，プロセッサ内のコアによる画像データの読み出し処理を効率的に行うことができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態における情報処理装置（ディープラーニングサーバ）の構成を示す図である。
【図２】ディープラーニング演算プログラムの概略的な処理を示すフローチャート図である。
【図３】グラフィックプロセッサ（GPU）１１の構成とGPU内のコアCOREの構成とを示す図である。
【図４】DNNの一例を示す図である。
【図５】畳込み演算を説明する図である。
【図６】本実施の形態のDL装置の畳込み演算の一例を示す図である。
【図７】本実施の形態におけるグラフィックプロセッサGPUの構成を示す図である。
【図８】図７の４つの演算コアによる画像データX0-X3の読み出しと演算の動作の概略を示すシーケンスチャートである。
【図９】GPU内の演算コアと個別メモリ及び共有メモリとの間の構成を示す図である。
【図１０】メモリ制御回路によるリードデータの共有メモリへの転送動作を示す図である。
【図１１】転送制御回路TRN_CNとその設定レジスタCFGを説明する図である。
【図１２】転送制御回路の動作を示すフローチャート図である。
【図１３】図８のシーケンスの時間T0,T1,T2での動作を示すシーケンス図である。
【図１４】４つの演算コアに属する共有メモリSMEM#の２つのメモリバンクB#a,B#bと、個別メモリIMEM#に対するデータ読み出しとリードデータの転送を示す図である。
【図１５】４つの演算コアに属する共有メモリSMEM#の２つのメモリバンクB#a,B#bと、個別メモリIMEM#に対するデータ読み出しとリードデータの転送を示す図である。
【図１６】４つの演算コアに属する共有メモリSMEM#の２つのメモリバンクB#a,B#bと、個別メモリIMEM#に対するデータ読み出しとリードデータの転送を示す図である。
【図１７】第２の実施の形態におけるプロセッサの動作を示す図である
【発明を実施するための形態】
【００１１】
図１は、本実施の形態における情報処理装置（ディープラーニングサーバ）の構成を示す図である。サーバ１は、ネットワークを介してセンシング装置群３０及び端末装置３２と通信可能である。センシング装置群３０は、例えば撮像素子により画像を撮像して画像データを生成し、画像データをサーバ１に送信する。端末装置３２は、画像データの特徴の判定結果をサーバ１から受信して出力する。
【００１２】
サーバ１は、汎用プロセッサであるCPU（Central processing Unit）１０と、グラフィックプロセッサであるGPU（Graphic Processing Unit）１１とを有する。サーバ１は、さらに、DRAMなどのメインメモリ１２と、NIC（Network Interface Card）などのネットワークインターフェース１４と、ハードディスクやSSD（Solid Storage Device）などの大容量の補助メモリ２０と、それらを接続するバスBUSとを有する。
【００１３】
補助メモリ２０は、ディープラーニング演算プログラム２２と、ディープラーニングパラメータ２４などを記憶する。補助メモリ２０は、上記プログラムやパラメータに加えて、図示しないオペレーティングシステム（OS）や、各種ミドルウエアプログラムなども記憶する。プロセッサ１０及びグラフィックプロセッサ１１は、上記のプログラムやパラメータをメインメモリ１２に展開し、パラメータに基づいてプログラムを実行する。
【００１４】
図２は、ディープラーニング演算プログラムの概略的な処理を示すフローチャート図である。DL演算プログラムは、例えばDNNの演算を実行するプログラムである。プロセッサ１０，１１は、DL演算プログラムを実行して、学習モードと判定モードの処理を実行する。DLとして、画像データの特徴を判定するDNNを例にして説明する。
【００１５】
学習モードでは、プロセッサ１０、１１は、演算パラメータ（フィルタの係数（重み）等）の初期値をメインメモリ１２から読み出し、プロセッサ１１内の高速メモリSRAMに書込む（S10）。さらに、プロセッサは、センシング装置群３０から送信された画像データをメインメモリ１２から読み出し高速メモリSRAMに書込む（S11）。そして、プロセッサは、画像データをフォーマット変換して演算器入力用の近傍マトリクス画像データ（演算処理データ）を生成し（S12）、DNNの畳込み層、プーリング層、全結合層、ソフトマックス層（出力層）の演算処理を行う（S13）。この演算は、所定数の画像データについてそれぞれ行われる。演算結果は例えば画像データが数字０〜１のうちいずれかなどである。
【００１６】
更に、プロセッサ１０、１１は、演算結果と画像データの正解データである教師データとの差分が閾値以下か否か判定し（S14）、差分が閾値以下でない場合（S14のNO）、演算パラメータを差分に基づいてDNNのバックワード演算を実行し演算パラメータを更新する（S15）。そして、更新された演算パラメータで、上記の工程S11-S13を繰り返す。ここで演算結果と教師データとの差分は、例えば１０００枚の画像データについて演算した１０００個の演算結果と、１０００個の教師データそれぞれの差分の合計値などである。
【００１７】
上記の差分が閾値以下になったとき（S14のYES）、演算パラメータが最適値に設定されたと判断して、学習モードを終了する。そして、演算パラメータの最適値によって、その後の判定モードでの演算処理が行われる。
【００１８】
判定モードでは、プロセッサ１０、１１は、判定対象の画像データをメインメモリから読み出し（S16）、画像データをフォーマット変換して演算器入力用の近傍マトリクス画像データを生成し（S17）、DNNの畳込み層、プーリング層、全結合層、ソフトマックス層の演算処理を行う（S18）。プロセッサ１０，１１は、上記の判定処理を、判定対象の画像データが終了するまで繰り返す（S19）。判定結果は、端末装置３２に送信され出力される。
【００１９】
図３は、グラフィックプロセッサ（GPU）１１の構成とGPU内のコアCOREの構成とを示す図である。GPU１１は、メインメモリM_MEMにアクセス可能である。GPUは、例えば8個のプロセッサコアCOREと、それぞれのプロセッサコアCOREに対応して配置された複数の高速メモリSRAMと、内部バスI_BUSと、メインメモリM_MEMとのアクセス制御を行うメモリコントローラMCとを有する。GPUは、図３に示されていない、各コアCORE内のL1キャッシュメモリと、８つのコアCOREで共用されるL2キャッシュメモリと、種々の周辺リソース回路を有する。さらに、GPUは、内部の高速メモリSRAM間のデータ転送、メインメモリM_MEMと高速メモリSRAM間のデータ転送などを制御するダイレクトメモリアクセス制御回路DMAを有する。
【００２０】
一方、各プロセッサコアCOREは、通常のプロセッサコアと同様に、命令をメモリから取得する命令フェッチ回路FETCHと、取得した命令をデコードするデコーダDECと、デコード結果に基づいて命令を演算する複数の演算器ALU及びそのレジスタ群REGと、高速メモリSRAMにアクセスするメモリアクセス制御回路MACとを有する。
【００２１】
GPUは、例えば半導体チップで実現され、本実施の形態のDL装置である。GPUは、前述のセンシング装置群から送信された画像データを記憶するメインメモリM_MEMから画像データを読み出して、内部の高速メモリSRAMに書込む。そして、各コアCORE内の演算器ALUは、SRAMに書き込まれた画像データを入力し、DNNの各層の演算処理を実行し、DNNの出力を生成する。
【００２２】
図４は、CNNの一例を示す図である。画像データの判定処理を行うCNNは、入力データである画像データIM_Dが入力される入力層INPUT_Lと、複数組のコンボリュージョン層CNV_L及びプーリング層PL_Lと、全結合層C_Lと、ソフトマックス層（出力層）OUT_Lとを有する。
【００２３】
コンボリュージョン層CNV_Lは、画像データIM_Dを係数フィルタFLTでフィルタリングしてある特徴量を有する画像データF_IM_Dを生成する。複数の係数フィルタFLT_0-3でフィルタリングすると、それぞれの特徴量の画像データF_IM_Dが生成される。プーリング層PL_Lは、例えばコンボリュージョン層のノードの値の代表値（例えば最大値）を選択する。そして、出力層OUT_Lには、前述したように、例えば画像データ内の数字の判定結果（０〜９のいずれか）が出力される。
【００２４】
コンボリュージョン層CNV_Lは、M×Nの二次元画素マトリクスの画素データを有する画像データIM_Dの例えば３×３の近傍マトリクスの画素データと、近傍マトリクスと同じ３×３の係数フィルタFLTの係数データとをそれぞれ乗算し乗算結果を加算する積和演算を行い、近傍マトリクスの中央の注目画素の画素データF_IM_Dを生成する。このフィルタリング処理を、係数フィルタを画像データIM_Dのラスタスキャン方向にずらしながら画像データIM_Dの全ての画素に対して演算を行う。これが畳込み演算である。
【００２５】
図５は、畳込み演算を説明する図である。図５には、例えば５行５列の画像データの周囲にパディングPを追加した入力画像データIN_DATAと、３行３列の重みW0-W8を有する係数フィルタFLT0と、畳込み演算された出力画像データOUT_DATAとが示される。畳込み演算は、注目画素を中心とする近傍マトリクスの複数の画素データと係数フィルタFLT0の複数の係数（重み）W0-W8とをそれぞれ乗算し加算する積和演算を、係数フィルタFLT0を画像データのラスタスキャン方向にずらしながら繰り返す演算である。
【００２６】
近傍マトリクスの画素データがXi（但しi=0-8）、係数フィルタの係数データがWi（但しi=0-8）の場合、積和演算式は次のとおりである。
Xi = Σ（Xi * Wi）        （１）
但し、右辺のXiは入力画像IN_DATAの画素データ、Wiは係数であり、Σはi = 0-8 だけ加算することを示し、左辺のXiは積和演算値であり出力画像OUT_DATAの画素データである。
【００２７】
即ち、画像データの注目画素がX6の場合は、式（１）により積和演算SoPされた画素データX6は、次のとおりである。
X6 = X0*W0 + X1*W1 + X2*W2 + X5*W3 + X6*W4 + X7*W5 + X10*W6 + X11*W7 + X12*W8
【００２８】
［実施の形態］
図６は、本実施の形態のDL装置の畳込み演算の一例を示す図である。図６は、入力層INPUT_Lと複数のコンボリュージョン層CNV_Lとが示され、コンボリュージョン層の間のプーリング層は省略されている。入力層INPUT_Lはコンボリュージョン層CNV_L0であっても良い。その後段に、２つのコンボリュージョン層CNV_L1, CNV_L2が設けられている。
【００２９】
１段目の入力層INPUT_Lまたはコンボリュージョン層CNV_L0には、複数の画像データX0-X3が入力または生成されている。図６の画像データX0-X3それぞれは、図４の画像データIM_Dと同様にＮ行Ｍ列の画素データを有する。したがって、図４の画像データIM_Dの画素データX0-X24と図６の画像データX0-X3は、同じ引用符号であるが、図４では画素データ、図６及びそれ以降の図では画像データである。
【００３０】
２段目のコンボリュージョン層CNV_L1は、以下の４つの畳込み演算を実行する。
（１）１段目の４枚の画像データX0-X3に対して、第１の係数フィルタ群F00-F03それぞれで畳込み演算を実行し、それぞれの畳込み演算により画像データΣF00*X0〜ΣF03*X3を生成する。そして、その画像データΣF00*X0〜ΣF03*X3を加算して、演算結果の画像データXA0を生成する。
（２）１段目の４枚の画像データX0-X3に対して、第２の係数フィルタ群F10-F13それぞれで畳込み演算を実行し、それぞれの畳込み演算により画像データΣF10*X0〜ΣF13*X3を生成する。そして、その画像データΣF10*X0〜ΣF13*X3を加算して、演算結果の画像データXA2を生成する。
（３）上記と同様に、１段目の４枚の画像データX0-X3に対して、第３の係数フィルタ群F20-F23それぞれで畳込み演算を実行し、それぞれの畳込み演算で生成された画像データを加算し、演算結果の画像データXA2を生成する。
（４）上記と同様に、１段目の４枚の画像データX0-X3に対して、第４の係数フィルタ群F30-F33それぞれで畳込み演算を実行し、それぞれの畳込み演算された画像データを加算し、演算結果の画像データXA3を生成する。
【００３１】
上記のコンボリュージョン層の畳込み演算例は、４枚の画像データX0-X3に対し、４つの係数フィルタ群でそれぞれ畳込み演算を行う。かかる多くの畳込み演算の効率を上げるためには、上記の（１）〜（４）の畳込み演算を４つのプロセッサコアCORE0-CORE3で並列に処理することが好ましい。その場合、４つのプロセッサコアCORE0-CORE3それぞれは、４枚の画像データX0-X3をメモリから読み出す必要がある。
【００３２】
［GPUの構成］
図７は、本実施の形態におけるグラフィックプロセッサGPUの構成を示す図である。グラフィックプロセッサGPUは、ディープラーニングの演算を実行するディープラーニング装置である。
【００３３】
図７に示したGPUは、４つの演算コアCORE0-CORE3と、演算コアを制御する制御コアC_COREとを有し、さらに、図３と同様に、ダイレクトメモリアクセス制御回路DMAと、メモリコントローラMCと、内部の高速メモリ（SRAM）I_MEMと、内部バスI_BUSとを有する。
【００３４】
さらに、GPUは、複数の演算コアそれぞれに設けられた複数の個別メモリIMEM0-IMEM3を有し、複数の個別メモリは、それぞれが属する演算コアCORE0-CORE3からアクセスされる。また、GPUは、複数の演算コアそれぞれに設けられた複数の共有メモリSMEM0-SMEM3を有する。複数の共有メモリは、それぞれが属する演算コアとその属する演算コアの第１方向に隣接する第１隣接演算コアのいずれかからアクセスされる。例えば、演算コアCORE0に属する共有メモリSMEM0は、演算コアCORE0と第1隣接コアCORE3のいずれかからアクセスされる。
【００３５】
そして、GPUは、複数の演算コアと複数の個別メモリのそれぞれの間に設けられた複数のメモリ制御回路MAU0-MAU3を有する。複数のメモリ制御回路それぞれは、演算コアからのリード要求を当該演算コアに属する個別メモリに出力する。
【００３６】
さらに、GPUは、複数の共有メモリそれぞれに設けられた複数のセレクタSL0-SL3を有する。複数のセレクタそれぞれ（例えばSL0）は、複数の共有メモリそれぞれが属する演算コア（例えばCORE0）と前述の第1隣接コア（CORE3）のいずれかからのリード要求を選択し共有メモリ（SMEM0）に出力し、メモリ制御回路（MAU0）と第２方向に隣接する第２隣接コア（CORE1）に属するメモリ制御回路（MAU1）のいずれかからの転送要求を選択し、共有メモリ（SMEM0）に出力する。
【００３７】
個別メモリIMEM0-IMEM3と共有メモリSMEM0-SMEM3は、いずれも高速のSRAMであり、演算コアCORE0-CORE3からアクセスされる。また、後述するとおり、個別メモリIMEM0-IMEM3と共有メモリSMEM0-SMEM3は、例えば連続するメモリ空間のアドレス領域が割り当てられる。したがって、各演算コアは、自分の個別メモリと自分の共有メモリと第２隣接演算コアに属する共有メモリのいずれかに、アクセス先のアドレスを指定してアクセス要求を行うことができる。
【００３８】
GPUが、図６に示したコンボリュージョン層CNV_L1の畳込み演算を実行する場合、GPU内の４つの演算コアCORE0-CORE3が、並列に、４つの画像データX0-X3それぞれと４つの演算コアそれぞれに割り当てられた４つのフィルタで畳込み演算を実行する。この場合、前述のとおり、４つの演算コアは、４つの画像データX0-X3を順番に読み出して、それぞれのフィルタで畳込み演算を繰り返す。そこで、各演算コアに設けた共有メモリを介して画像データX0-X3を隣接する演算コア間で転送することで、４つの演算コアによる４つの画像データX0-X3の読み出し工数を削減する。
【００３９】
［GPUによる畳込み演算］
図６の畳込み演算を例にして、図７の４つの演算コアによる画像データX0-X3の読み出しと演算の動作の概略を説明する。
【００４０】
図８は、図７の４つの演算コアによる画像データX0-X3の読み出しと演算の動作の概略を示すシーケンスチャートである。横方向は時間軸TIMEであり、縦方向に４つの演算コアCORE0-CORE3それぞれの個別メモリIMEM0-IMEM3、共有メモリCMEMが示される。そして、各時間T0-T4毎に、演算コアCORE0-CORE3には演算内容、個別メモリと共有メモリにはそれぞれ格納されるデータが示される。共有メモリCMEMはそれぞれ２つのメモリバンクB0a,B0b−B3a,B3bを有する。メモリバンクとはそれぞれ独立してアクセス要求（リードとライト）を入力しそれぞれの要求を実行できるメモリ単位である。
【００４１】
事前に、DMAが外部のメインメモリM_MEM内の４つの画像データX0-X4と４つのフィルタが高速の内部メモリI_MEMに転送済みである。そして、時間T0で、DMAが、内部メモリI_MEM内の４つの画像データX0-X4と４組のフィルタF00-03,F10-13,F20-23,F30-33を、４つの個別メモリIMEM0-IMEM3それぞれに転送する。例えば、個別メモリIMEM0には画像データX0と第1のフィルタF00-03が、個別メモリIMEM1には画像データX1と第２のフィルタF10-13が、個別メモリIMEM2には画像データX2と第３のフィルタF20-23が、個別メモリIMEM3には画像データX3と第４のフィルタF30-33がそれぞれ転送される。以下、各組の４つのフィルタの係数をW0-W3で示す。
【００４２】
最初の第１の演算サイクルT1では、各演算コアCORE0-CORE3が、それぞれに属する個別メモリIMEM0-IMEM3からそれぞれの画像データX0-X3とフィルタF00-03,F10-13,F20-23,F30-33を読み出し、それぞれの畳込み演算ΣW0*X0,ΣW1*X1,ΣW2*X2,ΣW3*X3を実行する。さらに、各演算コアは、それぞれの畳込み演算結果を、それぞれの個別メモリに書込む。そして、個別メモリIMEM0-IMEM3からそれぞれ読み出される画像データX0-X3それぞれは、それぞれのメモリ制御回路MAU0-MAU1により、第２隣接演算コアに属する共有メモリSMEM1-SMEM3,SMEM0の第２のメモリバンクB#b(#=0-3)側に転送される。その結果、共有メモリSMEM0には画像データX3が、共有メモリSMEM1には画像データX0が、共有メモリSMEM2には画像データX1が、共有メモリSMEM3には画像データX2が、それぞれ記憶される。
【００４３】
第２の演算サイクルT2では、各演算コアCORE0-CORE3が、それぞれに属する共有メモリSMEM0-SMEM3の第２のメモリバンクB#bからそれぞれの画像データX3,X0-X2を読み出し、それぞれのフィルタで畳込み演算ΣW3*X3,ΣW0*X0,ΣW1*X1,ΣW2*X2を実行する。各演算コアは、畳込み演算結果をそれぞれの個別メモリ内のT1での演算結果に加算して書き込む。つまりリードモディファイライトを実行する。そして、共有メモリSMEM0-SMEM3の第２のメモリバンクB#bからそれぞれ読み出される画像データX3,X0-X2それぞれは、それぞれのメモリ制御回路MAU0-MAU1により、第２隣接演算コアに属する共有メモリSMEM1-SMEM3,SMEM0の第１のメモリバンクB#aに転送される。その結果、共有メモリSMEM0には画像データX2が、共有メモリSMEM1には画像データX3が、共有メモリSMEM2には画像データX0が、共有メモリSMEM3には画像データX1が、それぞれ記憶される。
【００４４】
第３、第４の演算サイクルT3,T4では、第２の演算サイクルと同様に、各演算コアCORE0-CORE3が、それぞれに属する共有メモリSMEM0-SMEM3からそれぞれの画像データを読み出し、それぞれのフィルタで畳込み演算を実行し、演算結果を以前サイクルの演算結果に加算して個別メモリに記憶する。そして、共有メモリSMEM0-SMEM3からそれぞれ読み出される画像データそれぞれは、それぞれのメモリ制御回路MAU0-MAU1により、第２隣接演算コアに属する共有メモリSMEM1-SMEM3,SMEM0に転送される。
【００４５】
各共有メモリSMEM0-SMEM3の第１のメモリバンクB#a,第２のメモリバンクB#bは、転送データの書込み先と、画像データの読み出し先とに、演算サイクル毎に交互に変更される。この変更は、制御コアによる、各共有メモリのセレクタへの転送セレクト情報とリードセレクト情報の設定により行われる。
【００４６】
このようにして、４つの演算コアが必要とする演算対象のデータである４つの画像データX0-X3は、各演算サイクルT1-T4で、隣接する共有メモリにそれぞれ転送され、４つの共有メモリを演算サイクルに同期して循環される。この結果、４つの画像データX0-X1は、それぞれ最初の１回だけ内部メモリI_MEMから４つの個別メモリIMEM0-IMEM3にDMA転送されればよく、その後の演算サイクルでは、４つの共有メモリ間で転送され循環される。この共有メモリ間の転送は、内部バスに対するバスアクセスを伴わないので、効率的に行われ、省電力である。
【００４７】
［GPUの詳細構成］
図９は、GPU内の演算コアと個別メモリ及び共有メモリとの間の構成を示す図である。図中、演算コアCORE0を中心として、第１方向の第1隣接演算コアCORE3と、第１方向とは逆方向の第２方向の第２隣接演算コアCORE1とが示される。以下、演算コアCORE0に属する個別メモリIMEM0、共有メモリSMEM0、メモリ制御回路MAU0、セレクタSL0、について説明する。
【００４８】
演算コアCORE0とそれに属する個別メモリIMEM0との間には、演算コアからのアクセス要求を個別メモリIMEM0に出力するメモリ制御回路MAU0が設けられる。また、演算コアCORE0とそれに属する共有メモリSMEM0との間には、セレクタSL0が設けられる。また、共有メモリSMEM0は、例えば２つのメモリバンクB0a,B0bを有し、それぞれ独立してアクセス要求を処理できる。したがって、一方のメモリバンクが画像データのリード先となるとき、他方のメモリバンクが転送データのライト先となることができる。
【００４９】
メモリ制御回路MAU0は、演算コアCORE0からのアクセス要求と、内部バスI_BUSからのアクセス要求とが競合する場合、それらの調停を行い、一方の要求を個別メモリIMEM0に出力するコア・バス間調停回路CB_ARBを有する。このコア・バス間調停回路CB_ARBは、例えば内部バスI_BUSからのアクセス要求を優先するように調停する。または、設定値に基づいていずれかのアクセス要求を優先するように調停してもよい。
【００５０】
制御コアCORE0は、それに属する個別メモリIMEM0にメモリ制御回路MAU0を介してアクセス要求を行うことができる。また、制御コアCORE0は、それに属する共有メモリSMEM0にはセレクタSL0を介してアクセス要求を行うことができ、第２制御コアCORE1に属する共有メモリSEME1にはセレクタSL1を介してアクセス要求を行うことができる。
【００５１】
共有メモリSMEM0-SMEM3と、個別メモリIMEM0-IMEM3には、同じメモリ空間内の異なる論理アドレスが割り当てられる。例えば、ある制御コアCORE0に属する共有メモリSMEM0の２つのメモリバンクB0a,B0bと個別メモリIMEM0は、連続するアドレスが割り当てられる。さらに、４つの制御コアそれぞれに属する共有メモリと個別メモリも連続するアドレスが割り当てられる。したがって、制御コアCORE0は、それに属する個別メモリIMEM0と共有メモリSMEM0と第２隣接演算コアCORE1に属する共有メモリSMEM1内のいずれかのデータを、それぞれユニークなアドレスで指定することができる。
【００５２】
さらに、共有メモリSMEM0にはセレクタSL0が設けられる。セレクタSL0は、制御コアC_COREによりセレクト情報を設定され、４つの入力のうち一つを選択する。
【００５３】
例えば、セレクタSL0には、制御コアC_COREからアクセスセレクト情報（リードセレクト情報）が設定される。この設定に基づいて、セレクタSL0は、演算コアCORE0からのアクセス要求と第１方向の第１隣接演算コアCORE3からのアクセス要求のいずれかを選択し、共有メモリSMEM0に出力する。他のセレクタも同様である。
【００５４】
したがって、セレクタSL0とSL1に、制御コアCORE0からのアクセス要求を選択するアクセスセレクト情報が設定された場合、制御コアCORE0がメモリアクセスとしてアドレスADD、リード／ライト信号R/Wの制御信号を出力すると、共有メモリSMEM0と個別メモリIMEM0と第２方向の隣接する共有メモリSMEM1に制御信号が出力される。その結果、制御コアCORE0は、アドレスADDで指定したいずれかのメモリ内のデータ領域にアクセスすることができる。制御コアCORE0は、ライト要求の場合はライトデータWDTを出力し、リード要求の場合はリードデータRDTを受信する。
【００５５】
セレクタSL0には、制御コアC_COREから転送セレクトが設定される。この設定に基づいて、セレクタSL0は、演算コアCORE0に属するメモリ制御回路MAU0からの転送要求と第１隣接演算コアCORE3に属するメモリ制御回路MAU3からの転送要求のいずれかを選択し、共有メモリSMEM0に出力する。他のセレクタも同様である。
【００５６】
共有メモリSMEM0が２つのメモリバンクB0a,B0bを有するので、セレクタSL0は、２つのメモリバンクそれぞれに設けられ、それぞれのメモリバンクに対して１／４セレクトを行う。
【００５７】
［リードデータの共有メモリへの転送動作］
図１０は、メモリ制御回路によるリードデータの共有メモリへの転送動作を示す図である。  演算コアCORE0に属するメモリ制御回路MAU0は、転送制御回路TRN_CNを有する。転送制御回路TRN_CNは、演算コアCORE0に属する個別メモリIMEM0と共有メモリSMEM0、及び第２隣接演算コアCORE1に属する共有メモリSMEM1から読み出されるリードデータRDTを、共有メモリSMEM0またはSMEM1のいずれか一方に転送する。
【００５８】
演算コアCORE0が、個別メモリIMEM0にリード要求を発行してリードデータRDT_I0を受信し所定の演算を実行するときに、そのメモリ制御回路内の転送制御回路TRN_CNは、そのリード要求を検出しリードデータRDT_I0を２つの共有メモリSMEM0,SMEM1のいずれかに転送する。つまり、図１０中に矢印で示した転送TRN0,TRN1のいずれかの方向にリードデータが転送される。どのアドレスのリードデータをどのアドレスの共有メモリに転送するかは、制御コアC_COREが転送制御回路TRN_CNの設定レジスタCFGに設定する。また、セレクタSL0,SL1には、転送先に応じた転送セレクト情報が制御コアC_COREにより設定される。
【００５９】
同様に、制御コアCORE0が、共有メモリSMEM0にリード要求を発行してリードデータRDT_S0を受信し所定の演算を実行するときに、転送制御回路TRN_CNは、そのリード要求を検出してリードデータRDT_S0をもう一方の共有メモリSMEM1に転送する。つまり、図１０中に矢印で示した転送TRN2の方向にリードデータが転送される。この転送動作も設定レジスタCFGへの設定値に基づき制御される。
【００６０】
さらに、制御コアCORE0が、共有メモリSMEM1にリード要求を発行してリードデータRDT_S1を受信し所定の演算を実行するときに、転送制御回路TRN_CNは、そのリード要求を検出してリードデータRDT_S1をもう一方の共有メモリSMEM0に転送する。つまり、図１０中に矢印で示した転送TRN3の方向にリードデータが転送される。この転送動作も設定レジスタCFGへの設定値に基づき制御される。
【００６１】
［メモリ制御回路の転送制御回路の機能と動作］
次に、転送制御回路の機能と動作について説明する。
【００６２】
図１１は、転送制御回路TRN_CNとその設定レジスタCFGを説明する図である。図１２は、転送制御回路の動作を示すフローチャート図である。図１２には、設定レジスタCFGに設定される設定値が示される。転送レンジT_RNGは転送データの転送元アドレスを示す。転送フラグT_FLGは転送要・不要を指定する。転送オフセットT_OFSTは転送先アドレスの情報であり、リードアドレスRADDに転送オフセットT_OFSTを加算すると、転送先アドレスが算出される。したがって、転送レンジT_RNGに対する転送オフセットT_OFSTを所定値に設定することで、転送先の共有メモリのメモリバンクを指定できる。
【００６３】
また、図１１に示されるとおり、制御コアC_COREは、制御バスC_BUSを介して、転送制御回路TRN_CNの設定レジスタCFGと、セレクタSL0,SL1の設定レジスタCに、それぞれの設定値を設定する。設定レジスタCFGには、上記の転送レンジT_RNG、転送フラグT_FLG、転送オフセットT_OFSTが設定される。セレクタSL0,SL1の設定レジスタには、例えば、両側の演算ユニットのいずれのアクセス要求を選択するかを示すアクセスセレクト情報（リードセレクト情報）と、両側のメモリ制御回路の転送制御回路TRN_CNのいずれの転送要求（書き込み要求）を選択するかの転送セレクト情報とが設定される。前述のとおり、セレクタSL0,SL1はそれぞれ少なくとも２つのメモリバンクを有し、セレクタSL0,SL1はそれぞれ２つのメモリバンクに対してセレクト情報を設定可能である。
【００６４】
図１１と図１２に示されるとおり、メモリ制御回路MAU内の転送制御回路TRN_CNは、演算コアのアクセス要求のリード・ライト信号R/Wを監視する。転送制御回路TRN_CNは、ロード命令によるリード要求を検出すると（S20のYES）、転送フラグT_FLGが転送要か否かの判定S21と、リードアドレスRADDが転送アドレスレンジT_RNG内のアドレスか否かの判定S22を行う。そして、いずれの判定もYESの場合、転送制御回路TRN_CNは、リードアドレスRADDに転送オフセットT_OFSTを加算して転送先アドレスTADDを算出し、リードデータRDTを転送データTDTとして転送先アドレスTADDに転送する（S23）。
【００６５】
したがって、図１１に示されるとおり、転送制御回路TRN_CNは、転送アドレスTADDと書き込み信号WTと、転送データTDTを、転送先の共有メモリにセレクタSLを経由して転送し、共有メモリに転送データTDTを書込む。
【００６６】
［制御コアによる設定とそれに伴う転送動作］
制御コアによる設定と、それに伴うメモリ制御回路内の転送制御回路の動作についてまとめると、以下のとおりである。以下の説明でも、演算コアCORE0に対応する個別メモリ及び共有メモリの引用符号をカッコ内に示して説明する。
【００６７】
第１に、制御コアC_COREが、
複数のメモリ制御回路それぞれの転送制御回路に、
（１）演算コア間で転送されることになるリードデータRDTが格納される、個別メモリ（IMEM0）と共有メモリ（SMEM0）と第２方向に隣接する第２隣接コア（CORE1）に属する共有メモリ（SMEM1）のいずれかの転送元アドレスTR_RNGと、
（２）共有メモリ（SMEM0）と第２隣接コア（CORE1）に属する共有メモリ（SMEM1）のいずれかの転送先アドレス情報T_OFSTとを設定し、
（３）複数のセレクタ（SL0,SL1）に転送セレクト情報を設定した場合、
複数のメモリ制御回路それぞれの転送制御回路が、複数の演算コアそれぞれのリード要求のアドレスRADDが転送元アドレスT_RNGと一致する場合、個別メモリ（IMEM0）と共有メモリ（SMEM0）と第２隣接コアに属する共有メモリ（SMEM1）のいずれかから読み出されるリードデータRDTを転送データTDTとして、転送先アドレス情報T_OFSTに対応する、共有メモリ（SMEM0）と第２隣接コアに属する共有メモリ（SMEM1）のいずれかに転送する。
【００６８】
第２に、制御コアC_COREが、複数のセレクタ（SL0,SL1）にリードセレクト情報を設定した場合、複数の共有メモリ（SMEM0,SMEM1）それぞれは、リードセレクト情報を設定されたセレクタ（SL0,SL1）を経由して共有メモリが属する演算コア（CORE0）と第１隣接コア（CORE3）のいずれかからリードデータを読み出される。
【００６９】
［制御コア、演算コア、メモリ制御回路、セレクタを含む全体の動作］
次に、本実施の形態における、制御コアC_COREと、４つの演算コアCORE0-CORE3と、４つのメモリ制御回路MAU0-MAU3（転送制御回路TNS＿CN）と、セレクタSL0-SL3の動作をまとめて説明する。
【００７０】
図１３は、図８のシーケンスの時間T0,T1,T2での動作を示すシーケンス図である。また、図１４、図１５、図１６は、４つの演算コアに属する共有メモリSMEM#の２つのメモリバンクB#a,B#bと、個別メモリIMEM#に対するデータ読み出しとリードデータの転送を示す図である。図１４が時間T1に、図１５が時間T2に、図１６が時間T3にそれぞれ対応する。
【００７１】
［時間T0］
時間T0にて、制御コアC_COREは、４つの演算コアCORE0-CORE3に、内部メモリI_MEMから画像データX0-X3それぞれと４組のフィルタF0-F3それぞれとを、それぞれに属する個別メモリIMEM0-IMEM3にロードする指示を行う（S30）。この指示に応じて、各演算コアCORE0-CORE3は、画像データX0-X3それぞれと４組のフィルタF0-F3それぞれとを個別メモリにロードする（S31）。
【００７２】
［時間T1］
次に、時間T1にて、制御コアC_COREは、４つの演算コアそれぞれに属するメモリ制御回路MAU0-MAU3とセレクタSL0-SL3に、データ転送の設定を行う（S32）。これに応答して、各メモリ制御回路とセレクタでは、転送制御回路の設定レジスタCFGに前述の転送アドレスレンジ（転送元アドレス）、転送フラグ、転送オフセット（転送先アドレス情報）が設定される（S33）。また、セレクタに転送セレクト情報が設定される。時間T1では、転送アドレスレンジは個別メモリ内のアドレスに設定され、転送セレクト情報は、セレクタSL#が属する演算コアの第２隣接演算コアに属するメモリ制御回路（転送制御回路）側に設定される。
【００７３】
そして、制御コアC_COREは、４つの演算コアCORE0-CORE3に畳込み演算の開始を指示する（S34）。この開始指示に応答して、４つの演算コアそれぞれは、それぞれに属する個別メモリからそれぞれの画像データX0-X3とフィルタF0-F3をロード（リード）する。同時に、各メモリ制御回路の転送制御回路は、リード動作を検出し、設定レジスタCFG内の転送アドレスレンジとリードアドレスが一致し、転送フラグが転送要であることをそれぞれ検出し、転送先アドレスTADDを算出し、リードデータX0-X3それぞれを、転送先アドレスTADDに書込み制御信号WTと共に、第２隣接演算コアの共有メモリ（メモリバンクB#b）に出力する。これにより、リードデータが共有メモリに転送される（S36）。
【００７４】
さらに、各演算コアは、リードした画像データX0-X3とフィルタF0-F3の係数W0-W1を畳込み演算し（S37）、演算結果をそれぞれに属する個別メモリにストアする（S38）。そして、各演算コアは、完了信号ENDを制御コアC_COREに送信する。この完了信号は、転送完了時と演算完了時それぞれのタイミングで制御コアに通知してもよい。各演算コアの演算処理時間にばらつきがある場合、必ずしも各演算コアが演算処理を同期して行う必要がない。
【００７５】
図１４には、各演算コアに属する共有メモリSMEM#の２つのメモリバンクB#a,B#bと、個別メモリIMEM#のアドレスと、時間T1での画像データXとフィルタ係数Wの読み出し（実線矢印）と、画像データXの隣接する共有メモリSMEM#のメモリバンクB#bへの転送（破線矢印）とが示される。演算コアCORE0に属する共有メモリSMEM0のメモリバンクB0aの開始アドレスが0x2_0000、メモリバンクB0bの開始アドレスが0x2_1000、個別メモリIMEM0の開始アドレスが0x2_2000、終了アドレスが0x2_6000である。演算コアCORE1-CORE3も同様である。
【００７６】
そして、各演算コアが、それぞれの個別メモリから画像データXを読み出し、同時にメモリ制御回路の転送制御回路が、読み出された画像データを第２隣接演算コアの共有メモリのメモリバンクB#bに転送する。
【００７７】
［時間T2］
次に時間T2にて、制御コアC_COREがメモリ制御回路の設定レジスタCFGに時間T1と同様の設定を行う（S42,S43）。但し、時間T１と異なり転送アドレス情報である転送オフセットは、転送先が共有メモリのメモリバンクB#aに変更されるので、それに対応した値になる。また、制御コアがセレクタSL#に、リードセレクト情報と、転送セレクト情報をそれぞれ設定する（S42,S43）。これにより、各演算コアは自分に属する共有メモリから次の画像データを読み出し可能になり、転送制御回路はその画像データを第２隣接演算コアに属する共有メモリに転送可能になる。
【００７８】
そして、制御コアが演算の再会を指示すると（S44）。各演算コアはそれぞれの画像データとフィルタ係数をロードし（S45）、畳込み演算を行い（S47）、個別メモリ内の時間T1での演算結果を読み出して時間T2での演算結果を加算し、再度個別メモリに書き戻す（リードモディファイライト動作）（S48）。また、メモリ制御回路の転送制御回路は、演算コアがロードする画像データを共有メモリに転送する（S48）。各演算コアは、畳込み演算が終了し個別メモリに書き戻すと、完了通知ENDを制御コアに送信する。
【００７９】
図１５に示されるとおり、各演算コアが、それぞれの共有メモリのメモリバンクB#bから画像データXを読み出し、同時にメモリ制御回路の転送制御回路が、読み出された画像データを第２隣接演算コアの共有メモリのメモリバンクB#aに転送する。
【００８０】
［時間T3,T4］
時間T3,T4の動作も上記と同様である。図１６には、時間T3での動作が示され、各演算コアが、それぞれの共有メモリのメモリバンクB#aから画像データXを読み出し、同時にメモリ制御回路の転送制御回路が、画像データを第２隣接演算コアの共有メモリのメモリバンクB#bに転送する。時間T4での動作は、図１５と同様である。
【００８１】
図１４、図１５、図１６に示されるとおり、４つの画像データX0-X3は、４つの演算コアに属する共有メモリの間を演算サイクルT1-T4毎に転送され、循環される。
【００８２】
［第２の実施の形態］
図１７は、第２の実施の形態におけるプロセッサの動作を示す図である。図１７の動作では、演算コアCORE0が個別メモリIMEM0から係数Wを、共有メモリSMEM0のメモリバンクB0aから画像データXをそれぞれ読み出し、畳込み演算などの所定の処理PRを実行する。そして、演算コアCORE0は、処理結果を隣接する演算コアCORE1に属する共有メモリSMEM1のメモリバンクB1aに転送する。
【００８３】
次に、演算コアCORE1が個別メモリIMEM1から係数Wを、共有メモリSMEM1のメモリバンクB1aから演算コアCORE0の演算結果の画像データXをそれぞれ読み出し、畳込み演算などの所定の処理PRを実行する。そして、演算コアCORE1は、処理結果を隣接する演算コアCORE2に属する共有メモリSMEM2のメモリバンクB2aに転送する。
【００８４】
さらに、演算コアCORE2が個別メモリIMEM2から係数Wを、共有メモリSMEM2のメモリバンクB2aから演算コアCORE1の演算結果の画像データXをそれぞれ読み出し、畳込み演算などの所定の処理PRを実行する。そして、演算コアCORE2は、処理結果を隣接する演算コアCORE3に属する共有メモリSMEM3のメモリバンクB3aに転送する。
【００８５】
最後に、演算コアCORE3が個別メモリIMEM3から係数Wを、共有メモリSMEM3のメモリバンクB3aから演算コアCORE2の演算結果の画像データXをそれぞれ読み出し、畳込み演算などの所定の処理PRを実行する。そして、演算コアCORE3は、処理結果を隣接する演算コアCORE0に属する共有メモリSMEM0のメモリバンクB0aに転送する。
【００８６】
以上の動作により、４つの演算コアは、演算コア間で演算結果を転送しあうので、内部メモリI_MEMから演算結果をロードする処理を大幅に減らすことができる。
【００８７】
以上のとおり、本実施の形態によれば、各演算コアに個別メモリに加えて共有メモリを設け、演算コアが個別メモリ及び共有メモリからデータを読み出して所定の演算を行うとき、同時にリードデータを自分に属する共有メモリまたは隣接する演算コアに属する共有メモリに転送する。そして、隣接演算コアは、共有メモリに転送されたデータを読み出して所定の演算を行う。そして、上記の演算コアによる共有メモリへのアクセスと、リードデータの共有メモリへの転送が、制御コアからの制御値の設定に基づいて、実行される。
【００８８】
上記のように、演算コア間のデータ転送を、制御コアによる制御値の設定と、その設定値に基づく転送要求をアドレスとリード・ライト信号の発行により行うことができるので、制御オーバーヘッドが少ないデータ転送を行うことができる。
【００８９】
以上の実施の形態をまとめると，次の付記のとおりである。
【００９０】
（付記１）
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有し、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定した場合、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定した場合、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、プロセッサ。
【００９１】
(付記２)
前記転送元アドレスは、前記転送データが格納される、前記個別メモリと前記共有メモリと第２方向に隣接する第２隣接コアに属する共有メモリのいずれかの転送元アドレスであり、
前記転送先アドレスは、前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかの転送先アドレス情報である、付記１に記載のプロセッサ。
【００９２】
(付記３)
前記複数のメモリ制御回路それぞれが、前記複数の演算コアそれぞれのリード要求のアドレスが前記転送元アドレスと一致する場合、前記個別メモリと前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかから読み出されるリードデータを前記転送データとして、前記転送先アドレスに対応する、前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかに転送する、付記２に記載のプロセッサ。
【００９３】
(付記４)
前記複数の共有メモリそれぞれは、第1メモリバンクと第２メモリバンクを有し、
前記制御コアが、前記複数のセレクタそれぞれの前記第１メモリバンクに対して前記転送セレクト情報を設定し、前記第２メモリバンクに対して前記リードセレクト情報を設定した場合、前記第１メモリバンクに前記転送データが転送され、前記第２メモリバンクから前記リードデータを読み出され、
前記制御コアが、前記第２のメモリバンクに対して前記転送セレクト情報を設定し、前記第１メモリバンクに対して前記リードセレクト情報を設定した場合、前記第２メモリバンクに前記転送データが転送され、前記第１メモリバンクから前記リードデータを読み出される、付記１に記載のプロセッサ。
【００９４】
(付記５)
前記複数のセレクタそれぞれは、前記第１メモリバンクに対する第１のセレクタと、前記第２メモリバンクに対する第２セレクタとを有し、前記第１、第２セレクタそれぞれに、前記リードセレクト情報または転送セレクト情報が設定される、付記４に記載のプロセッサ。
【００９５】
（付記６）
前記制御コアが前記セレクタに前記リードセレクト情報と転送セレクト情報を設定した後、前記演算コアが前記リード要求を発行しリードデータを演算するとともに、前記メモリ制御回路が前記リードデータを前記転送データとして、前記セレクタを介して前記共有メモリに転送し、
前記演算コアの前記演算の完了後、再度、前記制御コアによる前記セレクタへの新たなリードセレクト情報と転送セレクト情報の設定と、前記演算コアによるリード要求の発行及び演算と、前記メモリ制御回路による前記転送データの転送とが行われる、付記１に記載のプロセッサ。
【００９６】
(付記７)
前記複数の演算コアの演算サイクル毎に、前記複数の個別メモリそれぞれに記憶された前記転送データが、それぞれの隣接コアに属する共有メモリに転送される、付記５に記載のプロセッサ。
【００９７】
(付記８)
前記複数の演算コアの演算サイクル毎に、前記複数の個別メモリそれぞれに記憶された前記転送データが、それぞれの隣接コアに属する共有メモリに転送されて前記転送データが前記複数の共有メモリ間で循環する、付記５に記載のプロセッサ。
【００９８】
（付記９）
前記複数の演算コアそれぞれに属する前記複数の個別メモリに、演算対象データが書き込まれ、
前記複数の演算コアが、それぞれに属する前記複数の個別メモリから前記演算対象データを読み出してそれぞれの演算を実行するとともに、それぞれに属する前記メモリ制御回路が読み出されるリードデータを前記共有メモリに転送し、
前記複数の演算コアの演算サイクル毎に、前記転送データが、それぞれの隣接コアに属する共有メモリに転送されて前記転送データが前記複数の共有メモリ間で循環する、付記５に記載のプロセッサ。
【００９９】
(付記１０)
前記複数のメモリ制御回路それぞれは、それぞれが属する演算コアからのアクセス要求と、内部バスからのアクセス要求とを調停して前記個別メモリに出力するコアバス間調停回路を有する、付記１に記載のプロセッサ。
【０１００】
(付記１１)
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有し、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される、前記個別メモリと前記共有メモリと第２方向に隣接する第２隣接コアに属する共有メモリのいずれかの転送元アドレスと、前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかの転送先アドレス情報とを設定し、前記複数のセレクタに転送セレクト情報を設定した場合、
前記複数のメモリ制御回路それぞれが、前記複数の演算コアそれぞれのリード要求のアドレスが前記転送元アドレスと一致する場合、前記個別メモリと前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかから読み出される前記転送データを、前記転送先アドレス情報に対応する、前記共有メモリと前記第２隣接コアに属する共有メモリのいずれかに転送し、
前記制御コアが、前記複数のセレクタにリードセレクト情報を設定した場合、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、プロセッサ。
【０１０１】
(付記１２)
メインメモリと、
前記メインメモリにアクセス可能なプロセッサと、を有し、
前記プロセッサは、
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有し、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定した場合、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定した場合、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、情報処理装置。
【０１０２】
（付記１３）
複数の演算コアと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアからアクセスされる複数の個別メモリと、
前記複数の演算コアそれぞれに設けられ、それぞれが属する前記演算コアと前記属する演算コアの第１方向に隣接する第１隣接コアのいずれかからアクセスされる複数の共有メモリと、
前記複数の演算コアと前記複数の個別メモリのそれぞれの間に設けられ、前記演算コアからのリード要求を前記演算コアに属する個別メモリに出力する複数のメモリ制御回路と、
前記複数の共有メモリそれぞれに設けられ、前記複数の共有メモリそれぞれが属する前記演算コアと前記第1隣接コアのいずれかからのリード要求を選択し前記共有メモリに出力し、前記メモリ制御回路と第２方向に隣接する第２隣接コアに属するメモリ制御回路のいずれかからの転送要求を選択し前記共有メモリに出力する複数のセレクタと、
前記複数の演算コアを制御する制御コアとを有するプロセッサの動作方法において、
前記制御コアが、前記複数のメモリ制御回路それぞれに、前記複数の演算コア間で転送される転送データが格納される前記個別メモリ及び共有メモリの転送元アドレスと、前記転送データが転送される前記共有メモリの転送先アドレスを設定し、前記複数のセレクタに転送セレクト情報を設定し、
前記複数のメモリ制御回路それぞれが、それぞれが属する演算コアのリード要求のアドレスが前記転送元アドレスと一致する場合、前記転送セレクト情報を設定された前記セレクタを経由して前記転送先アドレスに前記リード要求に対する転送データを転送し、
前記制御コアが、前記複数のセレクタそれぞれにリードセレクト情報を設定し、
前記複数の共有メモリそれぞれは、前記リードセレクト情報を設定された前記セレクタを経由して前記共有メモリが属する演算コアと前記第１隣接コアのいずれかからリードデータを読み出される、プロセッサの動作方法。
【符号の説明】
【０１０３】
C_CORE：制御コア
CORE0-CORE3：演算コア
IMEM0-IMEM3：個別メモリ
SMEM0-SMEM3：共有メモリ
B#a,B#b：メモリバンク
SL0-SL3：セレクタ
MAU0-MAU3：メモリ制御回路
TR_CN：転送制御回路
RDT：リードデータ
TDT：転送データ
【図１】
2018120548.tif 000003
【図２】
2018120548.tif 000004
【図３】
2018120548.tif 000005
【図４】
2018120548.tif 000006
【図５】
2018120548.tif 000007
【図６】
2018120548.tif 000008
【図７】
2018120548.tif 000009
【図８】
2018120548.tif 000010
【図９】
2018120548.tif 000011
【図１０】
2018120548.tif 000012
【図１１】
2018120548.tif 000013
【図１２】
2018120548.tif 000014
【図１３】
2018120548.tif 000015
【図１４】
2018120548.tif 000016
【図１５】
2018120548.tif 000017
【図１６】
2018120548.tif 000018
【図１７】
2018120548.tif 000019