(57)【要約】【課題】１つのストア命令で自分のメモリと別の処理ユニットのメモリとにストアする。【解決手段】演算処理を行うコアと、メモリと、前記コアが発行したアクセス要求に応答して前記メモリへのアクセスを制御するメモリアクセスコントローラ（以下ＭＡＣ）とをそれぞれ有する複数の処理ユニットとを有し、複数の処理ユニットのうち少なくとも第１の処理ユニットのＭＡＣは、コアが発行したストア要求に応答して、ストア要求が第１の処理ユニットとは別の第２の処理ユニット内のメモリへのユニット間コピーを要求する場合、第１の処理ユニット内のメモリにユニット内ストアのライトを要求し、第２の処理ユニットのＭＡＣにユニット間コピー要求を送信する、演算処理装置。【選択図】図４
2018195162.tif 000002
【特許請求の範囲】
【請求項１】
演算処理を行うコアと、メモリと、前記コアが発行したアクセス要求に応答して前記メモリへのアクセスを制御するメモリアクセスコントローラ（以下ＭＡＣ）とをそれぞれ有する複数の処理ユニットとを有し、
前記複数の処理ユニットのうち少なくとも第１の処理ユニットのＭＡＣは、前記コアが発行したストア要求に応答して、前記ストア要求が前記第１の処理ユニットとは別の第２の処理ユニット内のメモリへのユニット間コピーを要求する場合、前記第１の処理ユニット内のメモリにユニット内ストアのライトを要求し、前記第２の処理ユニットのＭＡＣに、ユニット間コピー要求を送信する、演算処理装置。
【請求項２】
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレスと、前記ユニット間コピーを要求するか否かを示すコピービットと、コピー先処理ユニット情報とを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、請求項１に記載の演算処理装置。
【請求項３】
前記第１の処理ユニットのＭＡＣは、
前記コアが発行したストア要求に応答して、前記第１の処理ユニット内のメモリのストア先メモリアドレスと、前記第２の処理ユニット内のメモリのコピー先メモリアドレスを生成するアドレス計算回路を有し、
さらに、前記第１の処理ユニット内のメモリに、前記ストア先メモリアドレスとストアデータを含む前記ライトを要求し、
前記コピービットが前記ユニット間コピーを要求する場合、前記ユニット間コピー要求に前記コピー先メモリアドレスとストアデータを含めて、前記第２の処理ユニット内のＭＡＣに送信する、請求項２に記載の演算処理装置。
【請求項４】
前記コアは、前記ストア元先頭レジスタアドレスと、前記ストア先先頭メモリアドレスと、コピー先処理ユニット情報とを、前記アドレス計算回路に出力し、
前記コアが発行したストア要求は、ストア元レジスタアドレスと、コピービットとを有し、
前記第１の処理ユニットのＭＡＣの前記アドレス計算回路は、
前記ストア先先頭メモリアドレスに、ストア元先頭レジスタアドレスとストア元レジスタアドレスの間のオフセット値を加算して、前記ストア先メモリアドレスを生成し、
さらに、前記コピー先処理ユニット情報と前記ストア元レジスタアドレスと前記オフセット値に基づいて、前記コピー先メモリアドレスを生成する、請求項３に記載の演算処理装置。
【請求項５】
前記第１の処理ユニットのＭＡＣは、前記コピービットに基づいて、前記ユニット間コピー要求を送信するか否かを判定する、請求項２に記載の演算処理装置。
【請求項６】
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、
コピー先処理ユニットに対応するコピーバリッドと、前記コピー先処理ユニットのメモリのコピー先先頭メモリアドレスとを、前記第１の処理ユニットのＭＡＣに設定し、
前記設定後に、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレスと、前記ユニット間コピーを要求するか否かを示すコピービットとを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、請求項１に記載の演算処理装置。
【請求項７】
前記第１の処理ユニットのＭＡＣは、
前記コアが発行したストア要求に応答して、前記第１の処理ユニット内のメモリのストア先メモリアドレスと、前記第２の処理ユニット内のメモリのコピー先メモリアドレスを生成するアドレス計算回路を有し、
さらに、前記第１の処理ユニット内のメモリに、前記ストア先メモリアドレスとストアデータを含む前記ライトを要求し、
前記コピービットが前記ユニット間コピーを要求する場合、前記ユニット間コピー要求に前記コピー先メモリアドレスとストアデータを含めて、前記第２の処理ユニット内のＭＡＣに送信する、請求項６に記載の演算処理装置。
【請求項８】
前記第１の処理ユニットのコアは、前記第１の処理ユニットのＭＡＣに、複数の前記コピー先処理ユニットそれぞれに異なるコピー先先頭メモリアドレスを設定する、請求項７に記載の演算処理装置。
【請求項９】
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、
コピー先処理ユニットに対応するコピーバリッドと、前記コピー先処理ユニット内の先頭メモリアドレスを示すコピー先先頭メモリアドレスと、コピー対象先頭レジスタアドレスと、コピー対象最終レジスタアドレスと、前記ユニット間コピー要求を含むか否かを示すコピービットとを前記第１の処理ユニットのＭＡＣに設定し、
前記設定後に、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレスとを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、請求項１に記載の演算処理装置。
【請求項１０】
前記第１の処理ユニットのＭＡＣは、
前記ストア要求のストア元レジスタアドレスが前記コピー対象先頭レジスタアドレスから前記コピー対象最終レジスタアドレスまでのレジスタアドレスに該当し、且つ前記コピービットが前記ユニット間コピーを要求する場合、前記ユニット間コピーをイネーブルにするコピーイネーブルを有効にし、
前記コアが発行したストア要求に応答して、前記第１の処理ユニット内のメモリのストア先メモリアドレスと、前記第２の処理ユニットのメモリのコピー先メモリアドレスを生成するアドレス計算回路を有し、
さらに、前記第１の処理ユニットのメモリに、前記ストア先メモリアドレスとストアデータを含む前記ライトを要求し、
前記コピーイネーブルが有効な場合、前記ユニット間コピー要求に前記コピー先メモリアドレスとストアデータを含めて、前記第２の処理ユニット内のＭＡＣに送信する、請求項９に記載の演算処理装置。
【請求項１１】
演算処理を行うコアと、メモリと、前記コアが発行したアクセス要求に応答して前記メモリへのアクセスを制御するメモリアクセスコントローラ（以下ＭＡＣ）とをそれぞれ有する複数の処理ユニットとを有する演算処理装置の制御方法であって、
前記複数の処理ユニットのうち少なくとも第１の処理ユニットのＭＡＣは、前記コアが発行したストア要求に応答して、前記ストア要求が前記第１の処理ユニットとは別の第２の処理ユニット内のメモリへのユニット間コピーを要求する場合、前記第１の処理ユニット内のメモリにユニット内ストアのライトを要求し、前記第２の処理ユニットのＭＡＣに、ユニット間コピー要求を送信する工程を有する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置は、例えば、演算器を有するコアとキャッシュメモリをそれぞれ備えた複数の処理ユニットを有する半導体チップである。また、チップ内分散メモリ型の演算処理装置は、複数の処理ユニット内それぞれに、コアとキャッシュメモリとそのコアに属するメモリを有する。
【０００３】
チップ内分散メモリ型の演算処理装置は、各処理ユニット内のコアは、処理ユニット内に設けられたメモリにアクセスして種々の演算処理を高速に行う。また、処理ユニット内のメモリのデータは、処理ユニット内に設けられたダイレクトメモリアクセスコントローラ（DMAC：Direct Memory Access Controller）によって、他の処理ユニットにユニット間転送される。したがって、コアは、他の処理ユニット内のメモリと自分の処理ユニット内のメモリとの間のDMA転送要求をDMACに出力して、他の処理ユニット内のメモリのデータを自分の処理ユニット内のメモリに転送し、または、自分の処理ユニット内のメモリのデータを他の処理ユニット内のメモリに転送する。これにより、コアは、間接的に他の処理ユニット内のメモリに対してロードまたはストアを実行する。
【０００４】
分散メモリ型の演算処理装置は、以下の特許文献１−３に記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２７６１９８号公報
【特許文献２】特開平０７−２００５０６号公報
【特許文献３】特開２０００−３３０９２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
分散メモリ型の演算処理装置において、ある処理ユニットが第１の処理を実行して第１の処理結果を出力し、その後、複数の処理ユニットが第１の処理結果に対して第２の処理を並列に実行する場合を考える。この場合、第１の処理を実行する処理ユニットは、第１の処理の所定の処理単位が終了する度に自分のメモリに処理結果をストアし、更に自分のメモリから他の処理ユニットのメモリにデータ転送を行う。その結果、複数の処理ユニットは、第１の処理が終了すると、第２の処理を短時間で開始することができる。
【０００７】
しかし、第１の処理を実行する処理ユニットは、第１の処理中に、所定の処理単位が終了するたびに自分のメモリへのストアと他の処理ユニットのメモリへのデータ転送をそれぞれ実行する。つまり、処理ユニットはストア命令の実行とデータ転送命令の実行を複数回繰り返すことになり、処理ユニットによる第１の処理の時間が長くなる。
【０００８】
そこで，一つの実施の形態の目的は，自分の処理ユニット内のメモリへのストアと他の処理ユニットのメモリへのストアとを効率的に行う演算処理装置及び演算処理装置に制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
１つの実施の形態は，演算処理を行うコアと、メモリと、前記コアが発行したアクセス要求に応答して前記メモリへのアクセスを制御するメモリアクセスコントローラ（以下、「ＭＡＣ」という）とをそれぞれ有する複数の処理ユニットとを有し、前記複数の処理ユニットのうち少なくとも第１の処理ユニットのＭＡＣは、前記コアが発行したストア要求に応答して、前記ストア要求が前記第１の処理ユニットとは別の第２の処理ユニット内のメモリへのユニット間コピーを要求する場合、前記第１の処理ユニット内のメモリにユニット内ストアのライトを要求し、前記第２の処理ユニットのＭＡＣに、前記ユニット間コピー要求を送信する、演算処理装置である。
【発明の効果】
【００１０】
上記の実施の形態によれば，自分の処理ユニット内のメモリへのストアと他の処理ユニットのメモリへのストアとを効率的に行う。
【図面の簡単な説明】
【００１１】
【図１】ある演算処理装置の構成例を示す図である。
【図２】本実施の形態における演算処理装置の構成例を示す図である。
【図３】本実施の形態における演算処理装置のある処理を示す図である。
【図４】第１の実施の形態における一つの処理ユニットの構成とストア命令で送信されるデータとを示す図である。
【図５】第１の実施の形態におけるストア命令の動作シーケンスを示す図である。
【図６】アドレス計算回路の構成例を示す図である。
【図７】アドレス計算回路の計算を説明する図である。
【図８】コピー制御回路COPY_CNの動作を示すフローチャート図である。
【図９】MAC回路MAC_CRの構成を示す図である。
【図１０】第２の実施の形態における一つの処理ユニットの構成とストア命令で送信されるデータとを示す図である。
【図１１】第２の実施の形態におけるストア命令の動作シーケンスを示す図である。
【図１２】第２の実施の形態におけるストア命令の動作フローチャートを示す図である。
【図１３】アドレス計算回路の構成例を示す図である。
【図１４】第３の実施の形態における一つの処理ユニットの構成とストア命令で送信されるデータとを示す図である。
【図１５】第３の実施の形態におけるストア命令の動作シーケンスを示す図である。
【図１６】第３の実施の形態におけるストア命令の動作フローチャートを示す図である。
【図１７】コピー判定回路の構成例を示す図である。
【図１８】第４の実施の形態におけるある処理ユニットの構成と動作を示す図である。
【発明を実施するための形態】
【００１２】
図１は、ある演算処理装置の構成例を示す図である。CPU（Central Processing Unit）チップ又はプロセッサである演算処理装置１００は、複数、例えば４つの処理ユニットPU0−PU3と、それら処理ユニット間を接続するユニット間配線L0-L3及びクロスバースイッチXBとを有する。クロスバースイッチXBは、各処理ユニットからの制御信号に基づいてユニット間配線L0-L3間を接続して、ユニット間の要求転送及びデータ転送を可能にする。
【００１３】
処理ユニットPU0-PU3は、それぞれ、演算処理を行うコアグループCORE_G0-CORE_G3と、メモリMEM0-MEM3と、コアグループ内のコアCORE#が発行したアクセス要求に応答して、それぞれ対応するメモリMEM#へのアクセスを制御するメモリアクセスコントローラMAC0-MAC3を有する。
【００１４】
コアグループCORE_G#は、複数のコアCORE#を有し、各コアCORE#は、演算器ALU（Arithmetic Logic Unit）と演算対象データや演算結果データを格納するレジスタ群REGを有する。各コアCORE#は、命令をデコードし、演算器ALUに命令に対応する演算処理を行わせる。レジスタ群REGには、レジスタ内のデータのメモリへのストア要求と、メモリ内のデータのレジスタへのロード要求を発行するロードストアユニット（図示せず）が設けられる。
【００１５】
さらに、MAC0-MAC3は、コアが発行するデータ転送要求に応答して、自分の処理ユニット内のメモリと他の処理ユニット内のメモリとの間でデータ転送を実行するダイレクトメモリアクセスコントローラ（DMAC）を有する。
【００１６】
DMACは、コアが発行したデータ転送要求が自分の処理ユニット内のメモリから他の処理ユニット内のメモリへのデータ転送の場合、自分のメモリにデータのリードを要求し、他の処理ユニットのMACにそのメモリへのデータ（自分のメモリからリードしたデータ）のストアを要求する。一方、DMACは、データ転送要求が他の処理ユニット内のメモリから自分の処理ユニット内のメモリへのデータ転送の場合、他の処理ユニットのMACにそのメモリへのデータのロードを要求し、自分のメモリにデータ（他の処理ユニットからロードしたデータ）のリードを要求する。
【００１７】
図１の演算処理装置の場合、例えば処理ユニットPU0内のコアCORE#が、レジスタ群REG内の結果レジスタに格納された演算結果を、自分の処理ユニットPU0内のメモリMEM0と他の処理ユニットPU11-PU3内のメモリMEM1-MEM3とにストアするとき、ストア命令とデータ転送命令を実行する。そのため、コアが演算結果を自分の処理ユニット内のメモリと他の処理ユニット内のメモリとにストアするためには、ストア命令とデータ転送命令をそれぞれ実行し、処理効率が低下する。
【００１８】
［実施の形態］
図２は、本実施の形態における演算処理装置の構成例を示す図である。図１と同様に、CPUチップである演算処理装置２００は、複数、例えば４つの処理ユニットPU0−PU3と、それら処理ユニット間を接続するユニット間配線L0-L3及びクロスバースイッチXBとを有する。
【００１９】
処理ユニットPU0-PU3は、それぞれ、演算処理を行うコアグループCORE_G0-CORE_G3と、メモリMEM0-MEM3と、コアグループ内のコアCORE#が発行したアクセス要求に応答して、それぞれ対応するメモリMEM#へのアクセスを制御するメモリアクセスコントローラMAC0-MAC3を有する。
【００２０】
コアグループCORE_G#は、複数のコアCORE#を有し、各コアCORE#は、図示しない命令デコーダに加えて、演算器ALUと演算対象データや演算結果データを格納するレジスタ群REGを有する。各コアCORE#は、命令をデコードし、演算器ALUに命令に対応する演算処理を行わせる。レジスタ群REGには、レジスタ内のデータのメモリへのストア要求と、メモリ内のデータのレジスタへのロード要求を発行するロードストアユニット（図示せず）が設けられる。
【００２１】
MAC0-MAC3は、コアが発行するデータ転送要求に応答して、自分の処理ユニット内のメモリと他の処理ユニット内のメモリとの間でデータ転送を実行するダイレクトメモリアクセスコントローラ（DMAC）を有する。
【００２２】
本実施の形態では、各MAC#は、各コアCORE#が実行するストア命令が、自分の処理ユニットとは別の処理ユニット内のメモリへのユニット間コピーを要求する場合、自分の処理ユニット内のメモリにユニット内ストアのライトを要求すると共に、別の処理ユニット内のＭＡＣに、ユニット間配線を経由して、ユニット間コピー要求を送信する。これにより、別の処理ユニット内のMACは、そのメモリにユニット間コピー要求に対するライトを要求する。
【００２３】
また、各MAC#は、ストア命令がユニット間コピーを要求しない場合、自分の処理ユニット内のメモリにユニット内ストアのライト要求を行う。
【００２４】
つまり、本実施の形態では、各コアは、ユニット内ストアだけを行う第１のストア命令と、ユニット内ストアに加えてユニット間コピーを行う第２のストア命令のいずれかを、それぞれ１つのストア命令で発行することができる。第２のストア命令では、単一のまたは複数の別の処理ユニットにユニット間コピー要求を発行することができ、コピー先の別の処理ユニットを任意に指定することができる。また、ストア命令を第１のストア命令か第２のストア命令かを区別するために、ストア命令のオペランドにその設定値をパラメータとして設定したり、または事前にレジスタに設定したりすることができる。
【００２５】
ここで、ユニット間コピー要求とは、自分の処理ユニットとは別の処理ユニット内のメモリにレジスタ内のデータをストアする要求である。ユニット内ストア要求と区別するために、「コピー」という称呼をつけてユニット間コピー要求と称することにする。つまり、自分の処理ユニット内のメモリへのストアをユニット内ストアと称し、他の処理ユニット内のメモリへのストアをユニット間コピーと称する。
【００２６】
本実施の形態では、各MAC#は、ユニット間コピー要求を含む第２のストア命令と、ユニット間コピー要求を含まない第１のストア命令とを区別し、更に、ユニット間コピー要求を可能にするためにコピー先メモリアドレスを生成するコピー制御回路COPY_CN0-COPY_CN3を有する。
【００２７】
ストア命令は、あるレジスタアドレス範囲のデータを、メモリ内のあるメモリアドレス範囲にライトする命令が一般的である。したがって、ストア命令には、ストア元レジスタアドレス範囲とストア先メモリアドレス範囲が指定される。通常は、ストア元先頭レジスタアドレスとデータ長、及びストア先先頭メモリアドレスである。コピー制御回路は、ストア命令が指定するストア先メモリアドレス範囲に基づいて、ユニット内ストア要求が指定するストア先メモリアドレスと、ユニット間コピー要求が指定するコピー先メモリアドレスとを生成する。
【００２８】
図３は、本実施の形態における演算処理装置のある処理を示す図である。演算処理装置２００では、各処理ユニットの各コアが他の処理ユニットで演算された結果を用いて、後続の処理を行う場合、演算を実行するコアがユニット間コピーを要求する第２のストア命令を実行する。第２のストア命令が実行されると、演算結果が自分の処理ユニット内のメモリにストアされると同時に、他の処理ユニットのメモリにもストアされる。
【００２９】
図３では、横方向が時間軸である。そして、以下の様な処理１と処理２が行われる。
【００３０】
処理１では、各処理ユニットPU0-PU3は、処理１を分担してそれぞれ異なる処理を実行する。
【００３１】
処理２では、各処理ユニットは、処理１での各処理ユニットが生成した演算結果を用いて、処理２に対応する処理を実行する。
【００３２】
上記処理１，２を行う手順は、次のとおりである。
１．各処理ユニットPU0-PU3のコアは、演算対象データをそれぞれのメモリMEM0-MEM3からレジスタREGにロードする。
２．各処理ユニットのコアが処理１を開始する。
３．各処理ユニットのコアは、ある単位の演算が終了すると、演算結果をレジスタから自分のメモリにストアし、同時に他の処理ユニットのメモリにもストア（コピー）する（ST&C）。このストアとコピーST&Cを行いながら、後続の演算を行う。各コアは、第２のストア命令を実行することでこのストアとコピーST&Cを実現する。
４．各処理ユニットのコアは、上記３の処理を処理１が終わるまで繰り返す。
５．処理１が終わると、各処理ユニットのコアは、処理１の演算結果を用いて後続の処理２を実行する。
【００３３】
上記３の処理のように、処理１の演算がすべて完了するまで待たずに、演算結果を自分のメモリと他の処理ユニットのメモリにストア（コピー）するので、処理１の演算がすべて完了した後に演算結果をメモリにストアするよりも、各処理ユニットのコアは処理２をより早く開始することができる。
【００３４】
本実施の形態では、各処理ユニット内のコアが、ユニット間コピー付きストア命令（第２のストア命令）を実行することで、レジスタ内の演算結果の自分のメモリへのストア（ユニット内ストア）と他の処理ユニット内のメモリへのストア（ユニット間コピー）を行うことができる。したがって、処理１において、ある単位の演算が終了する度に実行するストアとコピーの処理を１つのストア命令で行うので、コアによる処理１の開始から完了までの時間も短縮できる。
【００３５】
［ストア命令］
上記のストア命令を実現するために、以下の新規の改良が加えられる。
【００３６】
第１に、他の処理ユニットのメモリへのコピーを要求できるストア命令が加えられる。このストア命令は、パラメータとして、通常のストア命令に必要なストア元レジスタアドレス、ストア先メモリアドレスに加えて、ユニット間コピーを要求するか否かを示すコピービットと、コピー先処理ユニット情報とが追加される。コピービットをユニット間コピー要求に設定し、コピー先処理ユニット情報にコピーをする処理ユニットを指定することで、１つのストア命令の実行で、自分のメモリに加えて、任意の処理ユニットのメモリにも、レジスタのデータをストア（コピー）することができる。
【００３７】
第２に、複数のストア元レジスタのデータをストアする場合は、ストア命令は、パラメータとして、ストア元レジスタアドレス、ストア先メモリアドレスに代えて、ストア元先頭レジスタアドレス、ストア先先頭メモリアドレス、データ長が、パラメータとなる。この場合は、ストア命令を実行すると、ストア元先頭レジスタアドレスのレジスタからデータ長加算したレジスタアドレスのレジスタまでのデータが、ストア先先頭メモリアドレスからデータ長加算したメモリアドレスまでのメモリ領域にストアされる。
【００３８】
第３に、ＭＡＣが、ストア命令が第１のストア命令か第２のストア命令かを区別し、更に、コピー先処理ユニットのＭＡＣ宛てにコピー要求のコピー先メモリアドレスを生成し、コピー先処理ユニットのＭＡＣにユニット間コピー要求を送信する。コピー要求には、コピーされるデータとコピー先メモリアドレスとが含まれる。
【００３９】
上記のストア命令のパラメータは、全てストア命令のオペランドに記述することもできるし、一部のパラメータを事前にメモリアクセスコントローラＭＡＣ内のレジスタに設定し、残りのパラメータをストア命令のオペランドに記述することもできる。このように、どのパラメータをオペランドに記述し、どのパラメータを事前にレジスタ設定するかによって、３つの実施の形態を以下説明する。
【００４０】
［第１の実施の形態］
第１の実施の形態では、ストア命令は以下のように記述される。
str[ST_S_RADD][ST_D_MADD][C_BT][C_D_PU]                    str1_1
ここで、ST_S_RADD：ストア元レジスタアドレス、ST_D_MADD：ストア先メモリアドレス、C_BT：ユニット間コピー要求を含むか否かを示すコピービット、C_D_PU：コピー先処理ユニット情報であり、コピー先処理ユニットは処理ユニットの数のビット情報であり、コピーする処理ユニットには「１」コピーしない処理ユニットには「０」が与えられる。
【００４１】
また、ストア命令があるデータ長のストアである場合は、以下のように記述される。
str[ST_S_F_RADD][DATA_LG][ST_D_F_MADD][C_BT][C_D_PU]        str1_2
ここで、ST_S_F_RADD：ストア元先頭レジスタアドレス、DATA_LG：データ長、ST_D_F_MADD：ストア先先頭メモリアドレスである。残りは前述と同じである。
【００４２】
図４は、第１の実施の形態における一つの処理ユニットの構成とストア命令で送信されるデータとを示す図である。図５は、第１の実施の形態におけるストア命令の動作シーケンスを示す図である。以下、図４と図５を併せて参照しながら説明する。
【００４３】
図４に示される処理ユニットは、コア群内の１つのコアCORE及びそのコア内のレジスタREGと、メモリアクセスコントローラMAC内のコピー制御回路COPY_CNとMAC回路MAC_CRとを有する。レジスタREGに設けられるロードストアユニットLS_Uは、コアCOREがストア命令やロード命令を実行すると、ロードストアユニットLS_Uがストア命令に対応するストア要求やロード命令に対応するロード要求を、MACに出力する。ロードストアユニットはコアCORE内に設けられるので、ストア要求やロード要求はコアCOREが発行することになる。
【００４４】
MAC内のコピー制御回路COPY_CNは、ストア命令が第１のストア命令か第２のストア命令かを判別するコピー判別回路COPY_DETと、ストア要求のストア先メモリアドレスやコピー先メモリアドレスを生成するアドレス計算回路ADD_CALとを有する。
【００４５】
図４と図５では、コアCOREは前述のストア命令str1_2を実行する。最初に、ストア命令が発行される（S1）。コアCOREがストア命令を実行すると、コアCOREがロードストアユニットLS_Uにストア元先頭レジスタアドレスST_S_F_RADDと、ストアデータ長ST_DATA_LGと、コピービットC_BTを出力する（S2）。更に、コアCOREは、アドレス計算回路ADD_CALにストア元先頭レジスタアドレスST_S_F_RADDと、ストア先先頭メモリアドレスST_D_F_MADDと、コピー先処理ユニットC_D_PUとを出力し、アドレス計算回路内のレジスタに設定する（S3）。
【００４６】
次に、ロードストアユニットLS_Uは、ストア元先頭レジスタアドレスのデータを読み出し、そのストアデータST_DATAとストア元レジスタアドレスST_S_RADDとコピービットC_BTを有するストア要求ST_RQを発行する（S4）。このストア要求ST_RQの発行は、ストア元先頭レジスタアドレスからストアデータ長加算したストア元最終レジスタアドレスまで繰り返し行われる。但し、図５には、最初のストア要求ST_RQとそれに伴うMAC0やMAC1の処理だけが示される。実際には、破線で囲った処理がストアデータ長の数だけ繰り返される。そして、ストア元レジスタアドレスST_S_RADDは、ストア元先頭レジスタアドレスST_S_F_RADDを＋１ずつして生成され、ストア元レジスタアドレスのデータがストアデータST_DATAとして出力される。
【００４７】
ストア要求ST_RQに応答して、コピー判定回路COPY_DETは、コピービットC_BTが第１のストア命令（C_BT=0）か、第２のストア命令（C_BT=1）かを判定し、C_BT=1の場合にユニット間コピーをイネーブルにするコピーイネーブルCENをCEN=1にし、MAC回路MAC_CRに送信する（S5）。MAC回路は、コピーイネーブルがCEN=1の場合、他の処理ユニットのMACにユニット間コピー要求を出力する。
【００４８】
次に、アドレス計算回路ADD_CALは、コピー判定回路から転送されるストアデータST_DATAとストア元レジスタアドレスST_S_RADDに応答して、自分の処理ユニット内のメモリのストア先メモリアドレスST_D_MADDと、他の処理ユニット内のメモリのコピー先メモリアドレスC_D_MADDを算出する（S6）。そして、アドレス計算回路は、ストアデータST_DATAと、ストア先メモリアドレスST_D_MADDと、コピー先メモリアドレスC_D_MADDを、MAC回路に出力する（S7）。コピー先メモリアドレスC_D_MADDは、コピー先処理ユニットそれぞれに対応して、計算される。
【００４９】
図６は、アドレス計算回路の構成例を示す図である。図７は、アドレス計算回路の計算を説明する図である。アドレス計算回路は、レジスタ１１，１２に、コアCOREから送信されたストア元先頭レジスタアドレスST_S_F_RADDと、ストア先先頭メモリアドレスST_D_F_MADDとが設定される。そして、アドレス計算回路には、コピー判定回路COPY_DETから出力されるストア元レジスタアドレスST_S_RADDが入力される。
【００５０】
図７には、レジスタREGでのストア元先頭レジスタアドレスST_S_F_RADDとストアデータ長ST_DATA_LGとストア元レジスタアドレスST_S_RADDとの関係と、メモリMEMでのストア先先頭メモリアドレスST_D_F_MADDとストア先メモリアドレスST_D_MADDとの関係が示される。ここで、第１の実施の形態では、ストア先先頭メモリアドレスST_D_F_MADDはコピー先先頭メモリアドレスC_D_F_MADDと同じであり、ストア先メモリアドレスST_D_MADDはコピー先メモリアドレスC_D_MADDと同じである。さらに、ユニット間コピー先の複数の処理ユニットには、同じコピー先メモリアドレスにデータがストアされる。
【００５１】
図６のアドレス計算回路に示されるとおり、減算器１３はストア元レジスタアドレスからストア元先頭アドレスを減算してオフセットOFSTを算出する。さらに、加算器１４はストア先先頭メモリアドレスST_D_F_MADDにオフセットOFSTを加算してストア先メモリアドレスST_D_MADDを算出する。前述のとおり、ストア先メモリアドレスST_D_MADDは、コピー先メモリアドレスC_D_MADDと同じである。
【００５２】
さらに、コピー先メモリアドレス生成器１５は、ストア先メモリアドレスST_D_MADDと、コピー先処理ユニット情報C_D_PUとに基づいて、各処理ユニットに対するコピー先メモリアドレスC_D_MADD1-3を、それぞれ対応するコピーバリッドC_VALと共に出力する。コピーバリッドC_VALは、コピー先処理ユニットに対してはC_VAL=1（バリッド）となり、非コピー先処理ユニットに対してはC_VAL=0（インバリッド）になる。
【００５３】
図８は、コピー制御回路COPY_CNの動作を示すフローチャート図である。コピー制御回路は、コピービットC_BTが「１」か否か判定し（S10）、「０」であれば通常のストア命令である第１のストア命令と判定し、「１」であれば第２のストア命令と判定する。コピービットがC_BT=1の場合、ストア元レジスタアドレスからストア元先頭レジスタアドレスを減じてオフセットを計算し（S12）、自分のメモリのストア先メモリアドレスST_D_MADDを計算し（S13）、他の処理ユニットのメモリのコピー先メモリアドレスC_D_MADDを、コピー先処理ユニット全てについて計算する（S14,S15）。
【００５４】
図９は、MAC回路MAC_CRの構成を示す図である。図５も参照して、処理ユニットPU0内のMAC0のMAC回路MAC0_CRは、ユニット内ストア要求INTRA_STに対するライト要求（ST_DATA、ST_D_MADDを含む）をメモリMEM0に出力する（S8）。さらに、MAC回路MAC0_CRは、コピーイネーブルCENがCEN=1の場合、ユニット間コピー要求（ST_DATA,C_D_MADD）をコピーバリッドC_VALがC_VAL=1の処理ユニットのMACに出力する（S9）。コピーバリッドC_VALがC_VAL=1であっても、コピーイネーブルCENがCEN=0（コピービットC_BT=0）であれば、ユニット間コピー要求は出力されない。図５の例では、処理ユニットPU1のMAC1だけにユニット間コピー要求が出力されている。そして、処理ユニットPU1のMAC1は、対応するメモリMEM1にユニット間コピー要求に対するライト要求を出力する。
【００５５】
以上、第１の実施の形態によれば、ストア命令が以下のいずれかである。
str[ST_S_RADD][ST_D_MADD][C_BT][C_D_PU]                    str1_1
str[ST_S_F_RADD][DATA_LG][ST_D_F_MADD][C_BT][C_D_PU]        str1_2
【００５６】
そして、MAC内のコピー制御回路COPY_CNが、ストア元レジスタアドレスとストア元先頭レジスタアドレスとストア先先頭メモリアドレスとから、ストア先メモリアドレスとコピー先メモリアドレスとを生成し、MAC回路MAC_CRが、コピービットC_BTがC_BT=1の場合に、自分のメモリにユニット内ストア要求に対するライト要求を出力すると共に、他の処理ユニットのMACにユニット間コピー要求を出力する。これにより、処理ユニット内のコアは、１つのストア命令を実行して、自分のメモリと自分の処理ユニットとは別の処理ユニット内のメモリとにレジスタ内のデータをそれぞれストア（別の処理ユニットにはコピー）することができる。また、コピービットC_BTによってユニット間コピー要求をするか否かを選択でき、コピー先処理ユニット情報によってコピー先処理ユニットを任意に選択することができる。
【００５７】
［第２の実施の形態］
第２の実施の形態では、ストア命令は以下のように記述される。
str[ST_S_RADD][ST_D_MADD][C_BT]                    str2_1
つまり、第１の実施の形態でのストア命令str1_1のコピー先処理ユニット情報C_D_PUが含まれていない。
【００５８】
また、ストア命令があるデータ長のストアである場合は、以下のように記述される。
str[ST_S_F_RADD][DATA_LG][ST_D_F_MADD][C_BT]        str2_2
この場合も、第１の実施の形態でのストア命令str1_2のコピー先処理ユニットC_D_PUが含まれていない。
【００５９】
但し、ストア命令を実行する前に、処理ユニットPU0内のコアCOREが、コピー先処理ユニット情報C_D_PUに対応する情報として、処理ユニット別のコピーバリッドC_VAL1-3をMAC内のアドレス計算回路内に設定する。さらに、コアCOREは、処理ユニット別のコピー先先頭メモリアドレスC_D_F_MADD1-3をMAC内のアドレス計算回路に設定する。つまり、処理ユニット毎に異なるコピー先先頭メモリアドレスを指定することができる。コピー先先頭メモリアドレスを指定するときに、ついでにそれぞれのコピーバリッドを設定することで、ストア命令のパラメータからコピー先処理ユニット情報C_D_PUを省略できる。
【００６０】
一方、ストア命令str2_1,str2_2は、そのパラメータとしてストア先メモリアドレスST_D_MADDまたはストア先先頭メモリアドレスST_D_F_MADDを有する。これは、自分のメモリのストア先メモリアドレスであり、第１のストア命令は、通常、ストア先メモリアドレスをパラメータに含めるのが理由である。
【００６１】
図１０は、第２の実施の形態における一つの処理ユニットの構成とストア命令で送信されるデータとを示す図である。図１１は、第２の実施の形態におけるストア命令の動作シーケンスを示す図である。さらに、図１２は、第２の実施の形態におけるストア命令の動作フローチャートを示す図である。
【００６２】
図１０に示される処理ユニットは、図４と同様に、コア群内の１つのコアCORE及びレジスタREGと、メモリアクセスコントローラMAC内のコピー制御回路COPY_CNとMAC回路MAC_CRとを有する。また、レジスタREGにはロードストアユニットLS_Uが設けられる。
【００６３】
MAC内のコピー制御回路COPY_CNは、ストア命令が第１のストア命令か第２のストア命令かを判別するコピー判別回路COPY_DETと、ストア要求のストア先メモリアドレスやコピー先メモリアドレスを生成するアドレス計算回路ADD_CALとを有する。
【００６４】
第２の実施の形態では、アドレス計算回路ADD_CALが、第１の実施の形態とは異なる。第２の実施の形態では、コアがストア命令を実行する前に、アドレス計算回路に、コピーバリッドC_VAL1-3とコピー先先頭メモリアドレスC_D_F_MADD1-3とを設定する。それに伴い、コアは、任意の処理ユニットをコピー先処理ユニットに指定することができ、複数のコピー先処理ユニットに異なるまたは同じコピー先先頭メモリアドレスを指定することができる。
【００６５】
図１３は、アドレス計算回路の構成例を示す図である。アドレス計算回路ADD_CALは、ストア元レジスタアドレスST_S_RADDからストア元先頭レジスタアドレスST_S_F_RADDを減じてオフセットOFSTを求める減算器１３と、処理ユニット毎にコピーバリッドC_VAL1-3を設定するレジスタ１６と、処理ユニット毎にコピー先先頭メモリアドレスC_D_F_MADD1-3を設定するレジスタ１７と、ストア先先頭メモリアドレスST_D_F_MADDを保持するレジスタ１８とを有する。さらに、アドレス計算回路は、オフセットOFSTを各コピー先先頭メモリアドレスに加算してコピー先メモリアドレスを出力する加算器14_1−14_3と、オフセットOFSTをストア先先頭メモリアドレスに加算してストア先メモリアドレスを出力する加算器14_0とを有する。
【００６６】
また、アドレス計算回路は、更新部１９を有する。更新部は、オフセットOFSTがストアデータ長ST_DATA_LGと等しくなると、コピー先先頭メモリアドレスC_D_F_MADD1-3及びストア先先頭メモリアドレスST_D_F_MADDを、ストアデータ長ST_DATA_LGだけ加算した値に更新する。コピー先先頭メモリアドレスとストア先先頭メモリアドレスとが更新されると、その後第２のストア命令を実行するとき、最初の第２のストア命令実行時のコピー先メモリアドレス及びストア先メモリアドレスに新たなストアデータが上書きされることが防止される。
【００６７】
第２の実施の形態は、ストア先ユニット情報をストア命令のオペランドに含めず、ストア先ユニット情報と等価なコピーバリッドC_VAL1-3を、ストア命令を実行する前にコピー制御回路内に予め設定する。さらに、コピー先処理ユニット毎に異なるまたは同じコピー先先頭メモリアドレスC_D_F_MADD1-3を、ストア命令を実行する前にコピー制御回路内に予め設定する。この点を除いて、第２の実施の形態は、第１の実施の形態と類似する。
【００６８】
以下、図１０、図１１、図１２を併せて参照しながら第２の実施の形態の処理ユニットPU0の動作について説明する。ここでもストア命令str2_2を例にして説明する。
【００６９】
コアCOREは、ストア命令の実行の事前準備として、コピー制御回路COPY_CN内のアドレス計算回路ADD_CALに、他の処理ユニット毎のコピーバリッドC_VAL1-3と、コピー先先頭メモリアドレスC_D_F_MADDを設定する（S21）。
【００７０】
次に、コアCOREはストア命令str2_2を実行する。最初に、ストア命令が発行される。コアCOREがストア命令を実行すると、コアCOREがロードストアユニットLS_Uにストア元先頭レジスタアドレスST_S_F_RADDと、ストアデータ長ST_DATA_LGと、コピービットC_BTを出力する（S22）。この処理は第１の実施の形態のS2と同じである。更に、コアCOREは、アドレス計算回路ADD_CALにストア元先頭レジスタアドレスST_S_F_RADDと、ストア先先頭メモリアドレスST_D_F_MADDと、ストアデータ長ST_DATA_LGとを送信し、アドレス計算回路内のレジスタに設定する（S33）。
【００７１】
次に、ロードストアユニットLS_Uは、第１の実施の形態のS4を実行する。つまり、ロードストアユニットは、ストア元先頭レジスタアドレスのデータを読み出し、そのストアデータST_DATAとストア元レジスタアドレスST_S_RADDとコピービットC_BTを有するストア要求ST_RQを発行する（S24）。このストア要求ST_RQの発行は、ストア元先頭レジスタアドレスからストアデータ長加算したストア元最終レジスタアドレスまで繰り返し行われる。つまり、図１１にて、破線で囲った処理がストアデータ長の数だけ繰り返される。第１の実施の形態のS4と同様である。
【００７２】
ストア要求ST_RQに応答して、コピー判定回路COPY_DETは、S5を実行する。つまり、コピー判定回路は、コピービットC_BTが第１のストア命令（C_BT=0）か、第２のストア命令（C_BT=1）かを判定し、C_BT=1の場合にコピーイネーブルCENをCEN=1にし、MAC回路MAC_CRに送信する（S25）。MAC回路は、コピーイネーブルがCEN=1の場合、他の処理ユニットのMACにユニット間コピー要求を出力する。
【００７３】
次に、アドレス計算回路ADD_CALは、コピー判定回路から転送されるストアデータST_DATAとストア元レジスタアドレスST_S_RADDに応答して、自分の処理ユニット内のメモリのストア先メモリアドレスST_D_MADDと、他の処理ユニット内のメモリのコピー先メモリアドレスC_D_MADDを算出する（S26）。そして、アドレス計算回路は、ストアデータST_DATAと、ストア先メモリアドレスST_D_MADDと、コピー先メモリアドレスC_D_MADDを、MAC回路に出力する（S27）。前述の図１３のアドレス計算回路は、事前に設定されているコピー先先頭メモリアドレスと、ストア命令実行時に入力されるストア先先頭メモリアドレスと、コピー判定回路から入力されるストア元レジスタアドレスST_S_RADDとに基づいて、ストア先メモリアドレスST_D_MADDと、コピー先メモリアドレスC_D_MADDを生成する。
【００７４】
その後は、第１の実施の形態のS8,S9と同じである。つまり、処理ユニットPU0内のMAC0のMAC回路MAC0_CRは、ユニット内ストア要求INTRA_STに対するライト要求（ST_DATA、ST_D_MADDを含む）をメモリMEM0に出力する（S28）。さらに、MAC回路MAC0_CRは、コピーイネーブルCENがCEN=1の場合、ユニット間コピー要求（ST_DATA,C_D_MADD）をコピーバリッドC_VALがC_VAL=1の処理ユニットのMACに出力する（S29）。図１１の例では、処理ユニットPU1のMAC1だけにユニット間コピー要求が出力されている。そして、処理ユニットPU1のMAC1は、対応するメモリMEM1にユニット間コピー要求に対するライト要求を出力する。
【００７５】
第１の実施の形態と異なり、ロードストアユニットがストア要求ST_RQをストアデータ長の回数繰り返すと、アドレス計算回路の更新部１９が、オフセットOFSTがストアデータ長ST_DATA_LGと等しくなったことを検出し（S30のYES）、レジスタ１７のコピー先先頭メモリアドレスC_D_F_MADD1-3を、ストアデータ長加算したアドレスに更新する（S50）。これにより、同じコピー先メモリアドレスに後続のストア命令で別のストアデータで上書きされることが防止される。
【００７６】
図１２のフローチャートには、コピービットC_BTが「１」でない場合の処理が示され、アドレス計算回路がストア先メモリアドレスST_D_MADDを生成しユニット内ストア要求をMACに出力し（S26_1）、MACが自分のメモリにユニット内ストア要求INTRA_STに対応するライトを実行する（S28_1）。
【００７７】
第２の実施の形態によれば、事前にコピー先の処理ユニット毎に異なるコピー先メモリ領域を設定することができる。また、事前にコピー先処理ユニットを指定するコピービットを設定するのでストア命令のパラメータからコピー先処理ユニット情報を省略できる。
【００７８】
［第３の実施の形態］
第３の実施の形態では、ストア命令は以下のように記述される。
str[ST_S_RADD][ST_D_MADD]                    str3_1
つまり、第２の実施の形態でのストア命令str2_1のコピービットC_BTが含まれていない。
【００７９】
また、ストア命令があるデータ長のストアである場合は、以下のように記述される。
str[ST_S_F_RADD][DATA_LG][ST_D_F_MADD]        str3_2
この場合も、第２の実施の形態でのストア命令str2_2のコピービットC_BTが含まれていない。
【００８０】
但し、ストア命令を実行する前に、処理ユニットPU0内のコアCOREが、コピービットC_BTと、コピー対象レジスタアドレス領域を示すコピー対象先頭レジスタアドレスF_RADDとコピー対象最終レジスタアドレスE_RADDとを、コピー判定回路COPY_DETに設定する。
【００８１】
また、第２の実施の形態と同様に、ストア命令を実行する前に、コアCOREが、コピー先処理ユニット情報C_D_PUに対応する情報として、処理ユニット別のコピーバリッドC_VAL1-3をMAC内のアドレス計算回路内に設定する。さらに、コアCOREは、処理ユニット別のコピー先先頭メモリアドレスC_D_F_MADD1-3をMAC内のアドレス計算回路に設定する。
【００８２】
一方、ストア命令str3_1,str3_2は、そのパラメータとしてストア先メモリアドレスST_D_MADDまたはストア先先頭メモリアドレスST_D_F_MADDを有する。これは、自分のメモリのストア先メモリアドレスであり、第１のストア命令では、通常、ストア先メモリアドレスをパラメータに含めるのが理由である。
【００８３】
図１４は、第３の実施の形態における一つの処理ユニットの構成とストア命令で送信されるデータとを示す図である。図１５は、第３の実施の形態におけるストア命令の動作シーケンスを示す図である。さらに、図１６は、第３の実施の形態におけるストア命令の動作フローチャートを示す図である。
【００８４】
図１４に示される処理ユニットは、第２の実施の形態の図１０と一部の例外を除いて同様である。図１４において図１０と異なる構成は、コピー判定回路COPY_DETである。アドレス計算回路ADD_CALと、MAC回路MAC_CRは、図１０と同じである。
【００８５】
第３の実施の形態では、前述したとおり、コアがストア命令を実行する前に、コピービットC_BTと、ストア及びコピー対象レジスタアドレス領域を示す先頭レジスタアドレスF_RADDと最終レジスタアドレスE_RADDとを、コピー判定回路COPY_DETに設定する。そして、第２の実施の形態と同様に、コアは、ストア命令を実行する前に、コピー判定回路COPY_DETに、アドレス計算回路に、コピーバリッドC_VAL1-3とコピー先先頭メモリアドレスC_D_F_MADD1-3とを設定する。
【００８６】
図１７は、コピー判定回路の構成例を示す図である。コピー判定回路は、コピー対象先頭レジスタアドレスF_RADDと、コピー対象最終レジスタアドレスE_RADDと、コピービットC_BTとが設定されるレジスタ２０，２１，２２を有する。そして、コピー領域判定部２３は、コピービットC_BTが「１」であり、ストア元レジスタアドレスST_S_RADDが先頭レジスタアドレスF_RADDから最終レジスタアドレスE_RADDまでの範囲内の場合、コピーイネーブルCENを「１」にして、MAC回路に出力する。これにより、コアは、事前に、それ以降のストア命令が第２のストア命令（ユニット間コピー付ストア命令）であることと、コピー対象のレジスタアドレス範囲とを設定することができる。それに伴い、ストア命令のパラメータからコピービットを省略できる。
【００８７】
また、コピー完了判定部２４は、ストア元レジスタアドレスST_S_RADDが最終レジスタアドレスE_RADDと一致する場合、レジスタ２２内のコピービットを「０」に変更する。これにより、その後の第２のストア命令でストア済みのメモリアドレスに別のストアデータが上書きされることを防止する。
【００８８】
以下、図１４、図１５、図１６を併せて参照しながら第３の実施の形態の処理ユニットPU0の動作について説明する。ここでもストア命令str3_2を例にして説明する。
【００８９】
コアCOREは、ストア命令の実行の事前準備として、コピー制御回路COPY_CN内のアドレス計算回路ADD_CALに、別の処理ユニット毎のコピーバリッドC_VAL1-3と、コピー先先頭メモリアドレスC_D_F_MADDを設定する（S31_1）。これは第２の実施の形態のS21と同じである。さらに、コアCOREは、事前準備として、コピー判定回路COPY_DETにコピー対象先頭レジスタアドレスF_RADDと、コピー対象最終レジスタアドレスE_RADDと、コピービットC_BTとを設定する（S31_2）。この設定は、第２の実施の形態にはない。
【００９０】
次に、コアCOREはストア命令str3_2を実行する。最初に、ストア命令が発行される。コアCOREがストア命令を実行すると、コアCOREがロードストアユニットLS_Uにストア元先頭レジスタアドレスST_S_F_RADDと、ストアデータ長ST_DATA_LGを送信する（S32）。この処理S32は第２の実施の形態のS22と異なり、コピービットC_BTが含まれない。更に、コアCOREは、アドレス計算回路ADD_CALにストア元先頭レジスタアドレスST_S_F_RADDと、ストア先先頭メモリアドレスST_D_F_MADDと、ストアデータ長ST_DATA_LGとを出力し、アドレス計算回路内のレジスタに設定する（S33）。この処理は第２の実施の形態のS23と同じである。
【００９１】
次に、ロードストアユニットLS_Uは、ストア元先頭レジスタアドレスのデータを読み出し、そのストアデータST_DATAとストア元レジスタアドレスST_S_RADDを有するストア要求ST_RQを発行する（S34）。この処理S34は、第２の実施の形態のS24と異なりコピービットC_BTが含まれない。このストア要求ST_RQの発行は、ストア元先頭レジスタアドレスからストアデータ長加算したストア元最終レジスタアドレスまで繰り返し行われる。この点は、第２の実施の形態と同じである。
【００９２】
ストア要求ST_RQに応答して、コピー判定回路のコピー領域判定部２３が、コピービットC_BTが第２のストア命令（C_BT=1）であり、且つストア元レジスタアドレスST_S_RADDが先頭レジスタアドレスF_RADDから最終レジスタアドレスE_RADDまでの範囲REG_RNGかを判定し、判定がYESの場合、コピーイネーブルCENをCEN=1にし、MAC回路MAC_CRに出力する（S35）。この処理S35は、第２の実施の形態の処理S25と異なる。MAC回路は、コピーイネーブルがCEN=1の場合、他の処理ユニットのMACにユニット間コピー要求を出力する。
【００９３】
次に、アドレス計算回路ADD_CALは、第２の実施の形態の処理S26,S27と同様に、自分の処理ユニット内のメモリのストア先メモリアドレスST_D_MADDと、別の処理ユニット内のメモリのコピー先メモリアドレスC_D_MADDを算出する（S36）。そして、アドレス計算回路は、ストアデータST_DATAと、ストア先メモリアドレスST_D_MADDと、コピー先メモリアドレスC_D_MADDを、MAC回路に出力する（S37）。
【００９４】
その後は、第１の実施の形態のS8,S9及び第２の実施の形態S28,S29と同様に、処理ユニットPU0内のMAC0のMAC回路MAC0_CRは、ユニット内ストア要求INTRA_STに対するライト要求（ST_DATA、ST_D_MADDを含む）をメモリMEM0に出力する（S38）。さらに、MAC回路MAC0_CRは、コピーイネーブルCENがCEN=1の場合、ユニット間コピー要求（ST_DATA,C_D_MADD）をコピーバリッドC_VALがC_VAL=1の処理ユニットのMACに出力する（S39）。そして、他の処理ユニットPU1のMAC1は、対応するメモリMEM1にユニット間コピー要求に対するライト要求を出力する。
【００９５】
第２の実施の形態と同様に、ロードストアユニットがストア要求ST_RQをストアデータ長の回数繰り返すと、アドレス計算回路の更新部１９が、オフセットOFSTがストアデータ長ST_DATA_LGと等しくなったことを検出し（S30のYES）、レジスタ１７のコピー先先頭メモリアドレスC_D_F_MADD1-3を、ストアデータ長加算したアドレスに更新する（S50）。
【００９６】
さらに、第３の実施の形態では、コピー判定回路COPY_DETのコピー完了判定部２４が、ストア元レジスタアドレスST_S_RADDが最終レジスタアドレスE_RADDと一致すると（S51のYES）、レジスタ２２のコピービットC_BTを「０」に変更して（S52）、その後の第２のストア命令の実行を禁止する。
【００９７】
図１６のフローチャートにも、コピービットC_BTが「１」でない場合の処理が示され、アドレス計算回路がストア先メモリアドレスST_D_MADDを生成しユニット内ストア要求をMACに出力し（S36_1）、MACが自分のメモリにユニット内ストア要求INTRA_STに対応するライトを実行する（S38_1）。
【００９８】
以上、第３の実施の形態によれば、事前にストア命令が第２のストア命令（ユニット間コピー付）であることをコピービットC_BTにより設定することができる。さらに、事前に第２のストア命令の対象となるレジスタアドレス範囲を先頭レジスタアドレスF_RADDと最終レジスタアドレスE_RADDとで設定することができる。
【００９９】
このコピー対象先頭レジスタアドレスF_RADDからコピー対象最終レジスタアドレスE_RADDまでのレジスタアドレス領域は、ストア命令のパラメータで指定されるストア元先頭レジスタアドレスとストアデータ長ST_DATA_LGとで示されるレジスタアドレス領域よりも広いことを想定している。通常、第２のストア命令が複数回実行されることで、先頭レジスタアドレスF_RADDから最終レジスタアドレスE_RADDまでのレジスタアドレス領域内のデータが、ユニット内ストア及びユニット間コピーされる。図３に示された処理１における複数回の第２のストア命令（ストア＆コピーST&C）で、コピー対象先頭レジスタアドレスF_RADDからコピー対象最終レジスタアドレスE_RADDまでのレジスタアドレス領域のデータが、ユニット内ストア及びユニット間コピーされる。
【０１００】
［第４の実施の形態］
第４の実施の形態は、第３の実施の形態と同じコピー判定回路を有し、第１の実施の形態と同じアドレス計算回路を有する。そして、コアは、ストア命令を実行する前に、コピー判定回路にコピービットとコピー対象先頭レジスタアドレスF_RADDとコピー対象最終レジスタアドレスE_RADDとを設定する。また、コピー判定回路は、コアからのコピー要求に応答して、コピービットがユニット間コピーを要求している場合で、コピー要求に含まれるストア元レジスタアドレスがコピー対象先頭レジスタアドレスF_RADDからコピー対象最終レジスタアドレスE_RADDまでの範囲内の場合に、ユニット間コピーの実行を示すコピーイネーブルCEN=1を出力する。
【０１０１】
そして、第４の実施の形態では、ストア命令は以下のように記述される。
str[ST_S_RADD][ST_D_MADD][C_D_PU]                    str4_1
つまり、第１の実施の形態でのストア命令str1_1のコピービットC_BTが含まれていない。
【０１０２】
また、ストア命令があるデータ長のストアである場合は、以下のように記述される。
str[ST_S_F_RADD][DATA_LG][ST_D_F_MADD] [C_D_PU]        str4_2
この場合も、第１の実施の形態でのストア命令str1_2のコピービットC_BTが含まれていない。
【０１０３】
図１８は、第４の実施の形態におけるある処理ユニットの構成と動作を示す図である。図１８での動作を、第３の実施の形態の図１４と比較して説明する。まず、事前設定で、コアは、処理S31_2を行い、図１４の処理S31_1は行わない。そして、コアがストア命令str4_2を実行すると、処理S32と、処理S3（図４参照）を実行し、ロードストアユニットが処理S34のストア要求ST_RQを出力する。このストア要求に応答して、コピー判定回路が処理S35を実行し、さらに、アドレス計算回路が処理S36,S37を実行し、MAC回路MAC_CRが処理S38,S39を実行する。
【０１０４】
第４の実施の形態では、ストア命令のパラメータからコピービットが省略され、代わりに事前に設定される。
【０１０５】
以上のとおり、本実施の形態によれば、１つのストア命令を実行することで、コアは、自分の処理ユニット内のメモリにレジスタ内のデータをストアすると同時に、他の処理ユニット内のメモリにも同じデータをコピーすることができる。
【０１０６】
上記の実施の形態では、４つの処理ユニットPU0-PU3全てにコピー制御回路COPY_CNが設けられ、第２のストア命令を実行できるが、必ずしもすべての処理ユニットに設ける必要はなく、少なくとも１つの処理ユニットにコピー制御回路COPY_CNが設けられ、その処理ユニットのコアが第２のストア命令を実行するようにしてもよい。
【０１０７】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１０８】
（付記１）
演算処理を行うコアと、メモリと、前記コアが発行したアクセス要求に応答して前記メモリへのアクセスを制御するメモリアクセスコントローラ（以下ＭＡＣ）とをそれぞれ有する複数の処理ユニットとを有し、
前記複数の処理ユニットのうち少なくとも第１の処理ユニットのＭＡＣは、前記コアが発行したストア要求に応答して、前記ストア要求が前記第１の処理ユニットとは別の第２の処理ユニット内のメモリへのユニット間コピーを要求する場合、前記第１の処理ユニット内のメモリにユニット内ストアのライトを要求し、前記第２の処理ユニットのＭＡＣに、ユニット間コピー要求を送信する、演算処理装置。
【０１０９】
（付記２）
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレスと、前記ユニット間コピーを要求するか否かを示すコピービットと、コピー先処理ユニット情報とを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、付記１に記載の演算処理装置。
【０１１０】
（付記３）
前記第１の処理ユニットのＭＡＣは、
前記コアが発行したストア要求に応答して、前記第１の処理ユニット内のメモリのストア先メモリアドレスと、前記第２の処理ユニット内のメモリのコピー先メモリアドレスを生成するアドレス計算回路を有し、
さらに、前記第１の処理ユニット内のメモリに、前記ストア先メモリアドレスとストアデータを含む前記ライトを要求し、
前記コピービットが前記ユニット間コピーを要求する場合、前記ユニット間コピー要求に前記コピー先メモリアドレスとストアデータを含めて、前記第２の処理ユニット内のＭＡＣに送信する、付記２に記載の演算処理装置。
【０１１１】
（付記４）
前記コアは、前記ストア元先頭レジスタアドレスと、前記ストア先先頭メモリアドレスと、コピー先処理ユニット情報とを、前記アドレス計算回路に出力し、
前記コアが発行したストア要求は、ストア元レジスタアドレスと、コピービットとを有し、
前記第１の処理ユニットのＭＡＣの前記アドレス計算回路は、
前記ストア先先頭メモリアドレスに、ストア元先頭レジスタアドレスとストア元レジスタアドレスの間のオフセット値を加算して、前記ストア先メモリアドレスを生成し、
さらに、前記コピー先処理ユニット情報と前記ストア元レジスタアドレスと前記オフセット値に基づいて、前記コピー先メモリアドレスを生成する、付記３に記載の演算処理装置。
【０１１２】
（付記５）
前記第１の処理ユニットのＭＡＣは、前記コピービットに基づいて、前記ユニット間コピー要求を送信するか否かを判定する、付記２に記載の演算処理装置。
【０１１３】
（付記６）
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、
コピー先処理ユニットに対応するコピーバリッドと、前記コピー先処理ユニットのメモリのコピー先先頭メモリアドレスとを、前記第１の処理ユニットのＭＡＣに設定し、
前記設定後に、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレスと、前記ユニット間コピーを要求するか否かを示すコピービットとを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、付記１に記載の演算処理装置。
【０１１４】
（付記７）
前記第１の処理ユニットのＭＡＣは、
前記コアが発行したストア要求に応答して、前記第１の処理ユニット内のメモリのストア先メモリアドレスと、前記第２の処理ユニット内のメモリのコピー先メモリアドレスを生成するアドレス計算回路を有し、
さらに、前記第１の処理ユニット内のメモリに、前記ストア先メモリアドレスとストアデータを含む前記ライトを要求し、
前記コピービットが前記ユニット間コピーを要求する場合、前記ユニット間コピー要求に前記コピー先メモリアドレスとストアデータを含めて、前記第２の処理ユニット内のＭＡＣに送信する、付記６に記載の演算処理装置。
【０１１５】
（付記８）
前記第１の処理ユニットのコアは、前記第１の処理ユニットのＭＡＣに、複数の前記コピー先処理ユニットそれぞれに異なるコピー先先頭メモリアドレスを設定する、付記７に記載の演算処理装置。
【０１１６】
（付記９）
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、
コピー先処理ユニットに対応するコピーバリッドと、前記コピー先処理ユニット内の先頭メモリアドレスを示すコピー先先頭メモリアドレスと、コピー対象先頭レジスタアドレスと、コピー対象最終レジスタアドレスと、前記ユニット間コピー要求を含むか否かを示すコピービットとを前記第１の処理ユニットのＭＡＣに設定し、
前記設定後に、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレスとを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、付記１に記載の演算処理装置。
【０１１７】
（付記１０）
前記第１の処理ユニットのＭＡＣは、
前記ストア要求のストア元レジスタアドレスが前記コピー対象先頭レジスタアドレスから前記コピー対象最終レジスタアドレスまでのレジスタアドレスに該当し、且つ前記コピービットが前記ユニット間コピーを要求する場合、前記ユニット間コピーをイネーブルにするコピーイネーブルを有効にし、
前記コアが発行したストア要求に応答して、前記第１の処理ユニット内のメモリのストア先メモリアドレスと、前記第２の処理ユニットのメモリのコピー先メモリアドレスを生成するアドレス計算回路を有し、
さらに、前記第１の処理ユニットのメモリに、前記ストア先メモリアドレスとストアデータを含む前記ライトを要求し、
前記コピーイネーブルが有効な場合、前記ユニット間コピー要求に前記コピー先メモリアドレスとストアデータを含めて、前記第２の処理ユニット内のＭＡＣに送信する、付記９に記載の演算処理装置。
【０１１８】
（付記１１）
前記コアは、演算器と、前記演算器の演算処理結果を格納する結果レジスタとを有し、
前記第１の処理ユニットのコアは、
コピー対象先頭レジスタアドレスと、コピー対象最終レジスタアドレスと、前記ユニット間コピー要求を含むか否かを示すコピービットとを前記第１の処理ユニットのＭＡＣに設定し、
前記設定後に、ストア元先頭レジスタアドレスと、ストアデータ長と、ストア先先頭メモリアドレス、コピー先処理ユニット情報とを含むストア命令を実行し、前記ストアデータ長の回数前記ストア要求を発行する、付記１に記載の演算処理装置。
【０１１９】
（付記１２）
演算処理を行うコアと、メモリと、前記コアが発行したアクセス要求に応答して前記メモリへのアクセスを制御するメモリアクセスコントローラ（以下ＭＡＣ）とをそれぞれ有する複数の処理ユニットとを有する演算処理装置の制御方法であって、
前記複数の処理ユニットのうち少なくとも第１の処理ユニットのＭＡＣは、前記コアが発行したストア要求に応答して、前記ストア要求が前記第１の処理ユニットとは別の第２の処理ユニット内のメモリへのユニット間コピーを要求する場合、前記第１の処理ユニット内のメモリにユニット内ストアのライトを要求し、前記第２の処理ユニットのＭＡＣに、ユニット間コピー要求を送信する工程を有する、演算処理装置の制御方法。
【符号の説明】
【０１２０】
CPU：演算処理装置、プロセッサ
PU#：処理ユニット
CORE_G#：コアグループ
CORE#：コア
ALU：演算器
REG：レジスタ
LS_U：ロードストアユニット
COPY_CN：コピー制御部
MAC#：メモリアクセスコントローラ
MAC_CR：MAC回路
DMAC：ダイレクトメモリアクセスコントローラ
MEM#：メモリ
ST：ストア
C:コピー
RADD：レジスタアドレス
MADD：メモリアドレス
INTER_C：ユニット間コピー
INTRA_ST：ユニット内ストア
ST_DATA：ストアデータ
ST_DATA_LG：ストアデータ長
C_BT：コピービット
ST_S_F_RADD：ストア元先頭レジスタアドレス
ST_S_RADD：ストア元レジスタアドレス
ST_D_F_MADD：ストア先先頭メモリアドレス
ST_D_MADD：ストア先メモリアドレス
C_D_F_MADD：コピー先先頭メモリアドレス
C_D_MADD：コピー先メモリアドレス
C_D_PU：コピー先処理ユニット
C_VAL：コピーバリッド信号
CEN：コピーイネーブル信号
COPY_DET：コピー判定回路
ADD_CAL：アドレス計算回路
【図１】
2018195162.tif 000003
【図２】
2018195162.tif 000004
【図３】
2018195162.tif 000005
【図４】
2018195162.tif 000006
【図５】
2018195162.tif 000007
【図６】
2018195162.tif 000008
【図７】
2018195162.tif 000009
【図８】
2018195162.tif 000010
【図９】
2018195162.tif 000011
【図１０】
2018195162.tif 000012
【図１１】
2018195162.tif 000013
【図１２】
2018195162.tif 000014
【図１３】
2018195162.tif 000015
【図１４】
2018195162.tif 000016
【図１５】
2018195162.tif 000017
【図１６】
2018195162.tif 000018
【図１７】
2018195162.tif 000019
【図１８】
2018195162.tif 000020