(57)【要約】【課題】処理性能を向上させる情報処理装置、演算処理装置及び情報処理装置の制御方法を提供する。【解決手段】命令分割部２０１は、所定数のコア２３に取得させるデータをメモリから読み出すマルチキャスト命令を分割した分割命令を生成する。決定部２１１は、分割命令毎に、読出要求をＭＡＣに対して発行する選定ロードストアユニットを、対象ロードストアユニットの中から選定する。マルチキャスト用ＩＤ獲得部２２２は、選定ロードストアユニットである場合、選定された同一のマルチキャストロード命令から分割した複数の分割命令全てに対し、同一の識別情報を決定する。メモリリクエスト管理部２０３は、同一の識別情報が付された１つの読出要求をＭＡＣに対して発行する。レジスタ制御部２０４は、１つの読出要求に対する同一の識別情報が付された複数の応答をＭＡＣから取得し、取得した応答に基づくデータを、対応するコア２３へ出力する。【選択図】図４
2019159722.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶装置と、
前記記憶装置を制御する制御部と、
取得した取得データに対する演算をそれぞれ行う複数の演算処理部と、
前記複数の演算処理部の各々に設けられ、対応する演算処理部に取得させるデータを前記記憶装置から読み出すロード命令をそれぞれ制御する制御部と、
前記複数の演算処理部のうち、所定数の対象演算処理部に取得させるデータを前記記憶装置から読み出すマルチキャスト命令を分割した分割命令を生成する分割部、
前記分割命令毎に、前記対象演算処理部に対応する対象アクセス部に応答を行わせる読出要求を前記制御部に対して発行する選定アクセス部を、前記対象アクセス部の中から選定する選定部、
自己が前記選定アクセス部である場合、選定された同一のマルチキャストロード命令から分割した複数の分割命令全てに対し、同一の識別情報を決定する決定部、
前記同一の識別情報が付された１つの読出要求を前記制御部に対して発行する発行部、及び
前記１つの読出要求に対する前記同一の識別情報が付された複数の応答を前記制御部から取得し、取得した応答に基づくデータを、自己に対応する前記対象演算処理部に対して出力する出力部を有するアクセス部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記アクセス部が、自己が前記選定アクセス部として選定されなかった非選定アクセス部であり、且つ、識別情報が使用中であるために前記同一の識別情報として決定できない場合において、
前記決定部は、前記識別情報を付した読出要求が完了したとき、前記選定アクセス部に対して使用可能通知を送信することにより、前記同一の識別情報を使用可能とする
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記アクセス部が、自己が前記選定アクセス部である場合において、
前記決定部は、前記非選定アクセス部から前記使用可能通知を取得したとき、選定された同一のマルチキャストロード命令から分割した複数の分割命令に対し、使用可能となった同一の識別情報を決定する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記アクセス部はさらに、取得した前記マルチキャストロード命令に基づいて前記対象アクセス部を特定し、前記マルチキャストロード命令を前記対象アクセス部に出力する命令出力部を有することを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記演算処理部は、
前記出力部が出力した取得データを格納する格納部と、
前記格納部が格納した取得データを用いて演算を行う演算実行部と
を備えたことを特徴とする請求項１〜４の何れか一つに記載の情報処理装置。
【請求項６】
前記アクセス部はさらに、各識別情報が使用中かを管理する管理部を有し、
各前記アクセス部は、前記管理部からの通知に基づいて、識別情報が使用中かを判定する
ことを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
前記アクセス部は、複数の前記演算処理部のうちのいくつかが対応付けられることを特徴とする請求項１〜６のいずれか一つに記載の情報処理装置。
【請求項８】
前記分割部は、前記出力部が、前記１つの読出要求に対する前記同一の識別情報が付された複数の応答の全てを前記制御部から取得し、取得した応答に基づくデータを、自己に対応する前記対象演算処理部に対して全て出力した場合に、前記マルチキャストロード命令の完了通知を前記出力部に通知することを特徴とする請求項４に記載の情報処理装置。
【請求項９】
データを記憶する記憶装置に接続される演算処理装置であって、
前記記憶装置を制御する制御部と、
取得した取得データに対する演算をそれぞれ行う複数の演算処理部と、
前記複数の演算処理部の各々に設けられ、対応する演算処理部に取得させるデータを前記記憶装置から読み出すロード命令をそれぞれ制御する制御部と、
前記複数の演算処理部のうち、所定数の対象演算処理部に取得させるデータを前記記憶装置から読み出すマルチキャスト命令を分割した分割命令を生成する分割部、
前記分割命令毎に、前記対象演算処理部に対応する対象アクセス部に応答を行わせる読出要求を前記制御部に対して発行する選定アクセス部を、前記対象アクセス部の中から選定する選定部、
自己が前記選定アクセス部である場合、選定された同一のマルチキャストロード命令から分割した複数の分割命令全てに対し、同一の識別情報を決定する決定部、
前記同一の識別情報が付された１つの読出要求を前記制御部に対して発行する発行部、及び、
前記１つの読出要求に対する前記同一の識別情報が付された複数の応答を前記制御部から取得し、取得した応答に基づくデータを、自己に対応する前記対象演算処理部に対して出力する出力部とを有するアクセス部と
を備えたことを特徴とする演算処理装置。
【請求項１０】
データを記憶する記憶装置と、前記記憶装置を制御する制御部と、取得したデータに対する演算をそれぞれ行う複数の演算処理部と、前記複数の演算処理部の各々に設けられ、対応する演算処理部に取得させるデータを記憶装置から読み出すロード命令をそれぞれ制御する制御部と、前記複数の演算処理部のうち所定数の対象演算処理部に取得させるデータを前記記憶装置から読み出すマルチキャストロード命令を制御するアクセス部とを有する情報処理装置の制御方法であって、
前記アクセス部が有する分割部が、前記複数の演算処理部のうち、所定数の対象演算処理部に取得させるデータを前記記憶装置から読み出すマルチキャストロード命令を分割した分割命令を生成し、
前記アクセス部が有する選定部が、前記分割命令毎に、前記対象演算処理部に対応する対象アクセス部に応答を行わせる読出要求を前記制御部に対して発行するアクセス部を、前記対象アクセス部の中から選定アクセス部として選定し、
前記アクセス部が有する決定部が、自己が前記選定アクセス部である場合、選定された同一のマルチキャストロード命令から分割した複数の分割命令全てに対し、同一の識別情報を決定し、
前記アクセス部が有する発行部が、前記同一の識別情報が付された１つの読出要求を前記制御部に対して発行し、
前記アクセス部が有する出力部が、前記１つの読出要求に対する前記同一の識別情報が付された複数の応答を前記制御部から取得し、取得した応答に基づくデータを、自己に対応する前記対象演算処理部に対して出力する
ことを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、演算処理装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
主記憶装置であるメモリ及びメモリアクセスコントローラ（ＭＡＣ：Memory  Access  Controller）ユニットと複数のコアとが１対多結合されたマルチコア演算装置がある。各コアは、インストラクションユニット（ＩＵ：Instruction  Unit）、ロードストアユニット、レジスタファイル及び演算実行部（ＥＵ：Execution  Unit）を有する。そして、特に搭載されたコア数が多い場合、回路実装上の都合から主記憶へのアクセスバスを複数コア間で共有することが一般的に行われる。
【０００３】
インストラクションユニットは、メモリに対するデータの読み出し又は書き込み命令であるロードストア命令をロードストアユニットに発行する。ロードストアユニットは、発行されたロードストア命令に応じてメモリに対するデータの読み出し又は書き込みを行う。レジスタファイルは、取得したデータを格納する。演算実行部は、レジスタファイルに格納されたデータを用いて演算を行う。
【０００４】
特に、データの読み出しの場合におけるインストラクションユニット及びロードストアユニットの動作について詳細に説明する。インストラクションユニットは、ソフトウェアから送られたロード命令をデコードする。そして、インストラクションユニットは、ロードストアユニットにロード命令の実行を指示する。ロードストアユニットは、ロード命令をメモリアクセス単位に分割する。例えば、ロードストアユニットは、ロード命令を２５６Ｂｙｔｅに分割する。次に、ロードストアユニットは、ロード命令の分割単位毎にリクエストＩＤ（Identifier）を割り当て、且つ、ＭＡＣユニットが有するバッファの中にデータバッファ領域を獲得する。その後、ロードストアユニットは分割した各ロード命令にリクエストＩＤを載せて、メモリリードリクエストをＭＡＣユニットへ発行する。
【０００５】
その後、ロードストアユニットは、メモリリードリクエストに対する応答であるメモリリードコンプリーションをＭＡＣユニットから受信する。そして、ロードストアユニットは、受信したメモリリードコンプリーションに付随するメモリリードデータを自己が有するデータバッファに格納する。次に、ロードストアユニットは、データバッファからメモリリードデータを読み出し、宛先レジスタを記したライトリクエストとともにメモリリードデータをレジスタファイルへ送信する。そして、ロードストアユニットは、リクエストＩＤとデータバッファを解放する。ロードストアユニットは、この操作を分割されたロードストア命令全てについて行う。そして、分割されたロードストア命令の全てについて上記操作を行った後、ロードストアユニットは、インストラクションユニットへ、ロード命令の完了通知を発行する。ただし、ロードストアユニットは、メモリリードリクエストの順序で、その応答であるメモリリードコンプリーションを受信する保証はない。
【０００６】
ロードストアユニットは、１つのメモリリードリクエストの応答を待たずに、後続のメモリリードリクエストをＭＡＣユニットのポートに発行できる。その際、ロードストアユニットとＭＡＣユニットのポートとの間では、フロー制御により規定数以上のリクエストがＭＡＣユニットのポートに発行されないように制御される。その規定数は、ＭＡＣユニットのポート毎に配置されたリクエスト受信バッファの段数によって定まる。
【０００７】
ここで、同じメモリデータを複数の演算実行部に対応する複数のレジスタファイルにロードする場合、各ロードストアユニットがそれぞれ独立にメモリリードリクエストをＭＡＣユニットに対して発行することが考えられる。そして、ＭＡＣユニットは、同じメモリ領域に対してメモリリードリクエストの数に相当する回数のリードを行う。この場合、ＭＡＣユニットは同じ動作を繰り返すことになり、その間、後続命令の処理を待たせることになる。そこで、ロード命令は、複数の演算実行部にそれぞれ対応する複数のレジスタファイルを格納先として一度に指定したロードに対応することが一般的である。以下では、複数の演算実行部にそれぞれ対応する複数のレジスタファイルを格納先として一度に指定したロードを、「マルチキャストロード」という。そして、ＭＡＣユニット及びロードストアユニットは、複数の演算実行部に対応する複数のレジスタファイルへのデータの読み出しであるメモリリードリクエストに対応することが一般的である。
【０００８】
ここで、マルチキャストロードでは、複数のロードストアユニットの代表となる１つのロードストアユニットがメモリリードリクエストをＭＡＣユニットに発行する。その後、マルチキャストロードの対象であるロードストアユニット全てが、メモリリードコンプリーションを受信した後、レジスタファイルにライトリクエストを発行する。このためには、マルチキャストロードの対象であるロードストアユニット全てが、代表のロードストアユニットが発行したメモリリードリクエストと、受信するメモリリードコンプリーションとを対応付けることが好ましい。その方法の一つとして、マルチキャストロードの対象であるロードストアユニット全てで使用可能な全リクエストＩＤの解放を待ち、マルチキャストロード命令に対して同じメモリリードリクエストのリクエストＩＤを取得する方法がある。
【０００９】
なお、複数の装置からメモリアクセスを行う場合やＤＭＡアクセスする場合に、アクセスするデータを分割してラウンドロビンでアクセス優先度を与える従来技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１１−１１３１１９号公報
【特許文献２】特開２００２−３６６５０７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、マルチキャストロード命令を実行する場合、リクエストＩＤの統一を目的として各ロードストアユニット間で同期をとるために、先行命令の完了までマルチキャストロード命令が保留される。このため、メモリデータ転送のスループットが低下してしまうおそれがある。また、マルチキャストリードリクエストを発行する代表のロードストアユニットの選択に偏りが発生する。また、１つのロードストアユニットが一度に発行できるリードリクエストの数は、ＭＡＣユニットのリクエスト受信バッファの段数によって制限される。そして、マルチキャストリードリクエストを発行する場合、代表となるロードストアユニットに対応するリクエスト受信バッファは多く使用されるが、それ以外のロードストアユニットに対応するリクエスト受信バッファの使用率は低くなる。このようにリクエスト受信バッファの使用状態に偏りが出るため、ロードストアユニット間で偏りが出てしまい、結果的にメモリデータ転送のスループットが低下するおそれがある。そして、マルチコア演算装置の処理性能は、メモリデータ転送のスループットの大きさに依存するため、従来のマルチキャストロード命令の実行方法では、マルチコア演算装置の処理性能を向上させることは困難である。
【００１２】
また、アクセスするデータを分割してラウンドロビンでアクセス優先度を与える従来技術では、リクエストＩＤの統一については考慮されておらず、マルチキャストロード命令を実行する場合スループットが低下するおそれがある。そのため、それらの従来技術を用いてもマルチコア演算装置の処理性能を向上させることは困難である。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、処理性能を向上させる情報処理装置、演算処理装置及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する情報処理装置、演算処理装置及び情報処理装置の制御方法の一つの態様において、データを記憶する記憶装置、前記記憶装置を制御する制御部、取得した取得データに対する演算をそれぞれ行う複数の演算処理部、前記複数の演算処理部の各々に設けられ、対応する演算処理部に取得させるデータを前記記憶装置から読み出すロード命令をそれぞれ制御する制御部、及びアクセス部を備える。アクセス部は、前記複数の演算処理部のうち、所定数の対象演算処理部に取得させるデータを前記記憶装置から読み出すマルチキャスト命令を分割した分割命令を生成する分割部と、前記分割命令毎に、前記対象演算処理部に対応する対象アクセス部に応答を行わせる読出要求を前記制御部に対して発行する選定アクセス部を、前記対象アクセス部の中から選定する選定部と、自己が前記選定アクセス部である場合、選定された同一のマルチキャストロード命令から分割した複数の分割命令全てに対し、同一の識別情報を決定する決定部と、前記同一の識別情報が付された１つの読出要求を前記制御部に対して発行する発行部と、前記１つの読出要求に対する前記同一の識別情報が付された複数の応答を前記制御部から取得し、取得した応答に基づくデータを、自己に対応する前記対象演算処理部に対して出力する出力部とを有する。
【発明の効果】
【００１５】
１つの側面では、本発明は、処理性能を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、情報処理装置のハードウェア構成の一例を表す図である。
【図２】図２は、実施例１に係るアクセラレータのブロック図である。
【図３】図３は、ロード命令のフォーマットの一例を表す図である。
【図４】図４は、ロードストアユニットの詳細を表すブロック図である。
【図５】図５は、リクエストＩＤの決定を説明するための図である。
【図６】図６は、マルチキャストリードリクエストのフォーマットの一例を示す図である。
【図７】図７は、メモリリードコンプリーションのフォーマットの一例を示す図である。
【図８】図８は、ロード命令実行の処理のフローチャートである。
【図９】図９は、メモリリードリクエスト発行処理のフローチャートである。
【図１０】図１０は、ライトリクエスト発行処理のフローチャートである。
【図１１】図１１は、従来の情報処理装置のマルチキャストロード命令の処理状態を表す図である。
【図１２】図１２は、実施例１に係る情報処理装置のマルチキャストロード命令の処理状態を表す図である。
【図１３】図１３は、実施例２に係るアクセラレータのブロック図である。
【図１４】図１４は、実施例３に係るアクセラレータのブロック図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する情報処理装置、演算処理装置及び情報処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、演算処理装置及び情報処理装置の制御方法が限定されるものではない。
【実施例１】
【００１８】
図１は、情報処理装置のハードウェア構成の一例を表す図である。情報処理装置１は、図１に示すように、ＣＰＵ１０、Ｉ／Ｏ（Input/Output）コントローラ１１、アクセラレータ１２、ハードディスク１３、Ｉ／Ｏデバイス１４及びメモリ１５を有する。
【００１９】
Ｉ／Ｏコントローラ１１は、アクセラレータ１２、ハードディスク１３及びＩ／Ｏデバイス１４に接続される。ここで、Ｉ／Ｏデバイス１４は、アクセラレータ１２及びハードディスク１３以外のＩ／Ｏデバイスを指す。Ｉ／Ｏコントローラ１１は、ＣＰＵ１０からの指示を受けて、アクセラレータ１２、ハードディスク１３及びＩ／Ｏデバイス１４を制御する。そして、Ｉ／Ｏコントローラ１１は、アクセラレータ１２、ハードディスク１３及びＩ／Ｏデバイス１４とＣＰＵ１０との通信を中継する。
【００２０】
演算処理装置であるＣＰＵ１０は、Ｉ／Ｏコントローラ１１及びメモリ１５とバスで接続される。そして、ＣＰＵ１０は、メモリ１５とデータの送受信が可能である。また、ＣＰＵ１０は、Ｉ／Ｏコントローラ１１を介して、アクセラレータ１２、ハードディスク１３及びＩ／Ｏデバイス１４とデータの送受信が可能である。
【００２１】
ハードディスク１３は、ＯＳ（Operating  System）や各種アプリケーションなどの様々なプログラムを格納する。
【００２２】
ＣＰＵ１０は、ハードディスク１３からプログラムを読み出し、メモリ１５上に展開して実行することで、ＯＳや各種アプリケーションを動作させる。アプリケーションとしては、例えば、ディープラーニングなどを実行するアプリケーションがある。
【００２３】
さらに、ＣＰＵ１０は、アプリケーションを実行する際の特定の処理をアクセラレータ１２に行わせる。例えば、ＣＰＵ１０は、ディープラーニングなどにおける演算処理をアクセラレータ１２に行わせる。具体的には、ＣＰＵ１０により実行されるソフトウェアが、Ｉ／Ｏコントローラ１１を介して演算に用いるデータともに演算命令をアクセラレータ１２へ送信する。
【００２４】
図２は、実施例１に係るアクセラレータのブロック図である。図２に示すように、アクセラレータ１２は、インストラクションユニット２１、ロードストアユニット２２、コア２３、ＭＡＣユニット２４及びメモリ２５を有する。このアクセラレータ１２が「演算処理装置」の一例にあたる。
【００２５】
コア２３は、レジスタファイル２３１及び演算実行部２３２を有する。本実施例では、コア２３は、ロードストアユニット２２と１対１で対応する。レジスタファイル２３１は、メモリ２５から読み出されたメモリリードデータを対応するロードストアユニット２２から受信して格納する。演算実行部２３２は、レジスタファイル２３１に格納されたメモリリードデータを用いて演算を実行する。この、コア２３が、「演算処理部」の一例にあたる。また、レジスタファイル２３１が、「格納部」の一例にあたる。
【００２６】
インストラクションユニット２１は、例えば、ＣＰＵ１０により実行されるソフトウェアから発行されたロード命令を取得する。インストラクションユニット２１が取得するロード命令は、例えば、図３のフォーマット３０１を有する。図３は、ロード命令のフォーマットの一例を表す図である。この場合、ロード命令は、命令の種別を表すコマンド、ロードの対象となるメモリ２５の開始アドレス及びデータのデータ長、並びに、ロードしたデータの宛先を含む。ここで、フォーマット３０１の各領域に記載された括弧内の数字は領域のビット数を表す。
【００２７】
ロード命令がマルチキャストロード命令の場合、宛先には、複数のコア２３が登録される。これに対して、ロード命令がユニキャストロード命令の場合、宛先には、単一のコア２３が登録される。
【００２８】
その後、インストラクションユニット２１は、ロード命令をデコードする。そして、インストラクションユニット２１は、ロード命令の宛先で指定されたコア２３に接続するロードストアユニット２２へデコードしたロード命令を出力する。ここで、インストラクションユニット２１によるデコードの結果、デコードした命令がマルチキャストロード命令の場合、インストラクションユニット２１は、複数のロードストアユニット２２へマルチキャストロード命令を発行する。このインストラクションユニット２１が、「命令出力部」の一例にあたる。
【００２９】
ロードストアユニット２２は、複数のコア２３にそれぞれ対応して配置される。そして、ロードストアユニット２２は、対応する各コア２３に接続される。さらに、ロードストアユニット２２は、ＭＡＣユニット２４が有するポート２４０に接続される。このロードストアユニット２２が、「アクセス部」の一例にあたる。
【００３０】
次に、図４を参照して、ロードストアユニット２２について説明する。図４は、ロードストアユニットの詳細を表すブロック図である。図４示すように、ロードストアユニット２２は、命令分割部２０１、リクエストＩＤ制御部２０２、メモリリクエスト管理部２０３、レジスタ制御部２０４及びデータバッファ２０５を有する。
【００３１】
命令分割部２０１は、決定部２１１を有する。命令分割部２０１は、インストラクションユニット２１から発行されたロード命令を取得する。次に、命令分割部２０１は、取得したロード命令をメモリアクセス単位に分割する。本実施例では、メモリアクセスが２５６Ｂｙｔｅ単位で行われる場合を例として説明する。以下では、メモリアクセス単位である２５６Ｂｙｔｅに分割されたロード命令を、「分割ロード命令」という。この命令分割部２０１が、「分割部」の一例にあたる。
【００３２】
次に、命令分割部２０１は、ロード命令における宛先を決定部２１１に通知する。決定部２１１は、宛先が複数のコア２３であるか、それとも、宛先が単一のコア２３であるかを判定する。
【００３３】
宛先が単一のコア２３である場合、決定部２１１は、全ての分割ロード命令において自己が搭載されたロードストアユニット２２がメモリリードリクエストの発行を行う選定されたロードストアユニット２２であると決定する。以下では、メモリリードリクエストの発行を行う選定されたロードストアユニット２２を、「選定ロードストアユニット２２」という。その後、命令分割部２０１は、分割ロード命令毎のリクエストＩＤの取得をリクエストＩＤ制御部２０２のユニキャスト用ＩＤ獲得部２２１に指示する。さらに、命令分割部２０１は、各分割ロード命令をメモリリクエスト管理部２０３へ順次発行する。また、命令分割部２０１は、各分割ロード命令の情報をレジスタ制御部２０４へ出力する。
【００３４】
これに対して、宛先が複数のコア２３である場合、決定部２１１は、宛先のコア２３に接続されたロードストアユニット２２の中から、各分割ロード命令における選定ロードストアユニット２２を決定する。以下では、宛先のコア２３に接続されたロードストアユニット２２、すなわちマルチキャストロード命令が発行されたロードストアユニット２２を、マルチキャストロードストア命令を実行させる対象であることから「対象ロードストアユニット２２」という。
【００３５】
具体的には、決定部２１１は、各分割ロード命令に対する選定ロードストアユニット２２として同じロードストアユニット２２が、対象ロードストアユニット２２の全てにおいて決定される発行担当決定論理を予め記憶する。そして、決定部２１１は、その予め決められた発行担当決定論理を用いて、各分割ロード命令における選定ロードストアユニット２２を決定する。
【００３６】
例えば、決定部２１１は、アクセラレータ１２に搭載された全てのロードストアユニット２２に与えられた識別番号を予め記憶する。そして、決定部２１１は、分割ロード命令の先頭から順番に、識別番号の若番順に対象ロードストアユニット２２の中から選定ロードストアユニット２２を割り当てる。これにより、全ての対象ロードストアユニット２２における各決定部２１１は、各分割ロード命令について同じロードストアユニット２２を選定ロードストアユニット２２として選択できる。この決定部２１１が、「選定部」の一例にあたる。
【００３７】
ここで、ロードストアユニット＃１〜＃８の８個のロードストアユニット２２があり、分割ロード命令＃＃０１〜＃＃０４がある場合を例に説明する。例えば、分割ロード命令＃＃０１に対して、ロードストアユニット＃１が自己を選定ロードストアユニット２２と選定する場合、他のロードストアユニット＃２〜＃８も、ロードストアユニット＃１を選定ロードストアユニット２２と選定する。次の分割ロード命令＃＃０２に対して、ロードストアユニット＃１がロードストアユニット＃２を選定ロードストアユニット２２と選定する場合、他のロードストアユニット＃２〜＃８も、ロードストアユニット＃２を選定ロードストアユニット２２と選定する。次の分割ロード命令＃＃０３に対して、ロードストアユニット＃１がロードストアユニット＃３を選定ロードストアユニット２２と選定する場合、他のロードストアユニット＃２〜＃８も、ロードストアユニット＃３を選定ロードストアユニット２２と選定する。次の分割ロード命令＃＃０４に対して、ロードストアユニット＃１がロードストアユニット＃４を選定ロードストアユニット２２と選定する場合、他のロードストアユニット＃２〜＃８も、ロードストアユニット＃４を選定ロードストアユニット２２と選定する。
【００３８】
その後、命令分割部２０１は、ロード命令が分割された各々の分割ロード命令に対する選定ロードストアユニット２２の情報とともに、分割ロード命令毎のリクエストＩＤの取得をリクエストＩＤ制御部２０２のマルチキャスト用ＩＤ獲得部２２２に指示する。さらに、命令分割部２０１は、マルチキャストロード命令を分割した各分割ロード命令をメモリリクエスト管理部２０３及びレジスタ制御部２０４へ順次発行する。さらに、命令分割部２０１は、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２となった分割ロード命令を特定するための情報をレジスタ制御部２０４へ出力する。
【００３９】
その後、命令分割部２０１は、各分割ロード命令に対する完了通知をレジスタ制御部２０４からそれぞれ受ける。そして、命令分割部２０１は、全ての分割ロード命令の完了通知を取得した後、ロード命令の完了通知をインストラクションユニット２１へ発行する。
【００４０】
リクエストＩＤ制御部２０２は、各分割ロード命令に対するリクエストＩＤの発行及び他のロードストアユニット２２におけるリクエストＩＤの獲得の確認をそれぞれ行う。リクエストＩＤ制御部２０２は、ユニキャスト用ＩＤ獲得部２２１、マルチキャスト用ＩＤ獲得部２２２、ＩＤ管理部２２３及びＩＤ獲得確認部２２４を有する。
【００４１】
ＩＤ管理部２２３は、予め決められた個数のリクエストＩＤについて、それぞれのリクエストＩＤの使用状態を管理する。具体的には、ＩＤ管理部２２３は、ユニキャスト用ＩＤ獲得部２２１又はマルチキャスト用ＩＤ獲得部２２２により、特定の分割ロード命令にリクエストＩＤが割り当てられた場合、そのリクエストＩＤが使用中であると判定する。また、処理が完了した分割ロード命令に割り当てられたリクエストＩＤの通知をレジスタ制御部２０４から受けた場合、ＩＤ管理部２２３は、通知されたリクエストＩＤを解放して、そのリクエストＩＤを未使用とする。
【００４２】
そして、ＩＤ管理部２２３は、ユニキャスト用ＩＤ獲得部２２１からの未使用のリクエストＩＤの通知要求を受ける。そして、ＩＤ管理部２２３は、未使用のリクエストＩＤの中から適当なリクエストＩＤをユニキャスト用ＩＤ獲得部２２１に通知する。
【００４３】
また、ＩＤ管理部２２３は、マルチキャスト用ＩＤ獲得部２２２から特定のリクエストＩＤの使用状態の通知要求を受ける。そして、ＩＤ管理部２２３は、通知要求を受けたリクエストＩＤが未使用であるか使用中であるかをマルチキャスト用ＩＤ獲得部２２２に通知する。
【００４４】
ＩＤ管理部２２３は、連番で番号が振られた所定の個数の格納領域を有するバッファやフリップフロップなどである。例えば、ＩＤ管理部２２３は、１〜１５までの番号が割り振られた格納領域を有する。そして、ＩＤ管理部２２３が有する各格納領域は、それぞれに割り振られた番号のリクエストＩＤが、ユニキャスト用ＩＤ獲得部２２１又はマルチキャスト用ＩＤ獲得部２２２により獲得された場合、フラグを立てることで使用のリクエストＩＤとなる。次に、ＩＤ管理部２２３の格納領域の中でフラグが立っていない格納領域に割り振られた番号が、未使用のリクエストＩＤである。すなわち、ＩＤ管理部２２３は、各格納領域のフラグの状態により、その格納領域に振られた番号のリクエストＩＤが使用中か未使用かを通知する。このＩＤ管理部２２３が、「管理部」の一例にあたる。
【００４５】
ユニキャスト用ＩＤ獲得部２２１は、ロード命令がユニキャストロード命令の場合、分割ロード命令毎のリクエストＩＤの取得の指示を命令分割部２０１から順次受ける。次に、ユニキャスト用ＩＤ獲得部２２１は、分割ロード命令の先頭から順番に未使用のリクエストＩＤの通知要求をＩＤ管理部２２３へ行う。ここで、ユニキャスト用ＩＤ獲得部２２１は、各分割ロード命令に対して以下に説明する処理を順次行う。そこで、以下では、特定の分割ロード命令を例にユニキャスト用ＩＤ獲得部２２１の処理について説明する。
【００４６】
ユニキャスト用ＩＤ獲得部２２１は、ＩＤ管理部２２３から通知された未使用のリクエストＩＤの中から分割ロード命令のリクエストＩＤを獲得する。そして、ユニキャスト用ＩＤ獲得部２２１は、獲得したリクエストＩＤを分割ロード命令に割り当てたリクエストＩＤとしてメモリリクエスト管理部２０３に通知する。前述したように、ユニキャスト用ＩＤ獲得部２２１は、このリクエストＩＤの獲得処理を全ての分割ロード命令に対して行う。
【００４７】
マルチキャスト用ＩＤ獲得部２２２は、ロード命令がマルチキャストロード命令の場合、分割ロード命令毎のリクエストＩＤの取得の指示を、選定ロードストアユニット２２の情報とともに受ける。ここで、マルチキャスト用ＩＤ獲得部２２２は、各分割ロード命令に対して以下に説明する処理を順次行う。そこで、以下では、特定の分割ロード命令を例にマルチキャスト用ＩＤ獲得部２２２の処理について説明する。
【００４８】
マルチキャスト用ＩＤ獲得部２２２は、分割ロード命令に対するリクエストＩＤとして同じリクエストＩＤが、対象ロードストアユニット２２の全てにおいて獲得されるリクエストＩＤ決定論理を予め記憶する。そして、マルチキャスト用ＩＤ獲得部２２２は、その予め決められたリクエストＩＤ決定論理を用いて、分割ロード命令に割り当てるリクエストＩＤを決定する。すなわち、各対象ロードストアユニット２２は、元が同じ分割ロード命令に対しては、同じリクエストＩＤを決定する。例えば、マルチキャスト用ＩＤ獲得部２２２は、リクエストＩＤ決定論理として、リクエストＩＤのうち若番から順に連番で各分割ロード命令のリクエストＩＤとする論理を記憶する。
【００４９】
ここで、リクエストＩＤとして使用する番号が０〜１５である場合で説明する。各対象ロードストアユニット２２のそれぞれのマルチキャスト用ＩＤ獲得部２２２は、最初の分割ロード命令のリクエストＩＤを０と決定し、次の分割ロード命令のリクエストＩＤを１と決定する。そして、分割ロード命令の数が１５を超える場合には、マルチキャスト用ＩＤ獲得部２２２は、番号を巡回させて割り当てを繰り返す。図２において、各ロードストアユニット２２の下に記載したリクエストＩＤは、各ロードストアユニット２２それぞれが、各分割ロード命令に対して並んだ数字の左から順にリクエストＩＤとして決定していくことを表す。
【００５０】
例えば、図５を参照して、対象ロードストアユニット２２であるロードストアユニット＃１〜＃８におけるリクエストＩＤの決定についてさらに説明する。図５は、リクエストＩＤの決定を説明するための図である。ここでは、分割ロード命令＃＃０１〜＃＃１８があり、リクエストＩＤとして使用する番号が０〜１５である場合で説明する。図５に示すように、ロードストアユニット＃１〜＃８は、それぞれが分割ロード命令＃＃０１の入力を受けると、同じ分割ロード命令＃＃０１に対して同一のリクエストＩＤ＝０を発行する。次に、ロードストアユニット＃１〜＃８は、それぞれが分割ロード命令＃＃０２の入力を受けると、同じ分割ロード命令＃＃０２に対して同一のリクエストＩＤ＝１を発行する。次に、ロードストアユニット＃１〜＃８は、それぞれが分割ロード命令＃＃０３の入力を受けると、同じ分割ロード命令＃＃０３に対して同一のリクエストＩＤ＝２を発行する。その後、ロードストアユニット＃１〜＃８は、リクエストＩＤの決定を繰り替えし、それぞれが分割ロード命令＃＃１６の入力を受けると、リクエストＩＤを０に戻して、同じ分割ロード命令＃＃１６に対して同一のリクエストＩＤ＝０を発行する。最後に、ロードストアユニット＃１〜＃８は、それぞれが分割ロード命令＃＃１８の入力を受けると、同じ分割ロード命令＃＃１８に対して同一のリクエストＩＤ＝２を発行する。
【００５１】
次に、マルチキャスト用ＩＤ獲得部２２２は、分割ロード命令に対する割り当てを決定したリクエストＩＤが使用中か未使用かをＩＤ管理部２２３に確認する。リクエストＩＤが使用中であれば、マルチキャスト用ＩＤ獲得部２２２は、対象とするリクエストＩＤが未使用になるまで待機する。これに対して、対象とするリクエストＩＤが未使用であれば、マルチキャスト用ＩＤ獲得部２２２は、分割ロード命令に割り当てるリクエストＩＤを獲得する。
【００５２】
また、マルチキャスト用ロード命令を分割した分割ロード命令の数は、マルチキャスト用ロード命令のメモリデータ量に依存する。また、リクエストＩＤの数は、ハードウェアの資源に依存する。そのため、分割ロード命令の数が、付与可能なリクエストＩＤの数を超える場合がある。この場合、マルチキャスト用ＩＤ獲得部２２２は、１つのマルチキャスト用ロード命令に対して複数回同じリクエストＩＤを使用する。その場合も、前の分割ロード命令で使用したリクエストＩＤは使用中となり、マルチキャスト用ＩＤ獲得部２２２は、前の分割ロード命令で使用したリクエストＩＤが未使用となったことの確認がＩＤ管理部２２３から取れるまで、そのリクエストＩＤの発行を待機する。
【００５３】
その後、マルチキャスト用ＩＤ獲得部２２２は、分割ロード命令に割り当てたリクエストＩＤをメモリリクエスト管理部２０３へ発行する。ここで、マルチキャスト用ＩＤ獲得部２２２は、自己を搭載したロードストアユニット２２が選定ロードストアユニット２２か否かに関わらず、リクエストＩＤをメモリリクエスト管理部２０３に通知する。さらに、その分割ロード命令において自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２でない場合、マルチキャスト用ＩＤ獲得部２２２は、リクエストＩＤの獲得を選定ロードストアユニット２２に通知する。前述したように、マルチキャスト用ＩＤ獲得部２２２は、このリクエストＩＤの獲得処理を全ての分割ロード命令に対して行う。このマルチキャスト用ＩＤ獲得部２２２が、「決定部」の一例にあたる。
【００５４】
ＩＤ獲得確認部２２４は、自己を搭載したロードストアユニット２２が選定ロードストアユニット２２である分割ロード命令に対して、リクエストＩＤの獲得完了の通知を他のロードストアユニット２２から受ける。そして、ＩＤ獲得確認部２２４は、他の全てのロードストアユニット２２からリクエストＩＤの獲得完了の通知を受けると、そのリクエストＩＤの他の全ての対象ロードストアユニット２２による獲得完了通知をメモリリクエスト管理部２０３へ送信する。
【００５５】
メモリリクエスト管理部２０３は、ロード命令がユニキャストロード命令の場合、全ての分割ロード命令の入力を命令分割部２０１から受ける。さらに、メモリリクエスト管理部２０３は、各分割ロード命令に割り当てられたリクエストＩＤの入力をユニキャスト用ＩＤ獲得部２２１から受ける。そして、メモリリクエスト管理部２０３は、各分割ロード命令に対応するユニキャストリードリクエストを生成する。
【００５６】
この場合、メモリリクエスト管理部２０３は、その分割ロード命令に割り当てられたリクエストＩＤをユニキャストリードリクエストに付加する。また、メモリリクエスト管理部２０３は、ユニキャストリードリクエストにおける応答の宛先欄には、自己が搭載されたロードストアユニット２２を登録する。
【００５７】
その後、メモリリクエスト管理部２０３は、後述するＭＡＣユニット２４のリクエスト受信バッファ２４１におけるデータバッファ領域を確保する。ここで、リクエスト受信バッファ２４１にデータバッファ領域が残っていない場合、メモリリクエスト管理部２０３は、リクエスト受信バッファ２４１のデータバッファ領域に空きができるまで待機する。そして、メモリリクエスト管理部２０３は、リクエスト受信バッファ２４１の空いたデータバッファ領域を確保する。その後、メモリリクエスト管理部２０３は、生成したユニキャストリードリクエストをリクエスト受信バッファ２４１に発行し、確保したデータバッファ領域に格納させる。
【００５８】
その後、メモリリクエスト管理部２０３は、ユニキャストリードリクエストに対する応答であるメモリリードコンプリーションのヘッダを後述するポート２４０のコンプリーション送信バッファ２４２から取得する。そして、メモリリクエスト管理部２０３は、取得した各メモリリードコンプリーションに格納されたリクエストＩＤが割り当てられた分割ロード命令を特定する。その後、メモリリクエスト管理部２０３は、特定した分割ロード命令の情報及びその分割ロード命令に割り当てられたリクエストＩＤをレジスタ制御部２０４へ送信する。
【００５９】
一方、マルチキャストロード命令の場合、メモリリクエスト管理部２０３は、全ての分割ロード命令の入力を命令分割部２０１から受ける。また、メモリリクエスト管理部２０３は、各分割ロード命令に割り当てられたリクエストＩＤの入力をマルチキャスト用ＩＤ獲得部２２２から受ける。これにより、メモリリクエスト管理部２０３は、分割ロード命令とリクエストＩＤとの対応情報を取得する。
【００６０】
また、メモリリクエスト管理部２０３は、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２の分割ロード命令を表す情報の入力を命令分割部２０１から受ける。そして、メモリリクエスト管理部２０３は、特定のリクエストＩＤの他の全ての対象ロードストアユニット２２による獲得完了通知の入力をＩＤ獲得確認部２２４から受ける。この特定のリクエストＩＤは、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２である分割ロード命令に割り当てられたリクエストＩＤである。その後、メモリリクエスト管理部２０３は、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２である分割ロード命令に対応するマルチキャストリードリクエストを生成する。
【００６１】
図６は、マルチキャストリードリクエストのフォーマットの一例を示す図である。メモリリクエスト管理部２０３により生成されるマルチキャストリードリクエストは、図６に示すフォーマット３０２を有する。マルチキャストリードリクエストは、リクエストの種別を示すコマンド、読み出したデータの送信先を示す宛先、割り当てられたリクエストＩＤ及びデータの読み出しアドレスが登録される。例えば、コマンド、宛先及びリクエストＩＤは、第１サイクルで送られる。そして、アドレスは、第１サイクル及び第２サイクルで送られる。
【００６２】
例えば、メモリリクエスト管理部２０３は、コマンドとしてデータの読み出し命令であるリードコマンドをマルチキャストリードリクエストに登録する。また、メモリリクエスト管理部２０３は、ロード命令で宛先として指定されたロードストアユニット２２、すなわち対象ロードストアユニット２２を宛先としてマルチキャストリードリクエストに登録する。また、メモリリクエスト管理部２０３は、そのマルチキャストリードリクエストに対応する分割ロード命令に割り当てられたリクエストＩＤをマルチキャストリードリクエストのリクエストＩＤとして登録する。さらに、メモリリクエスト管理部２０３は、データの読み出しの開始アドレスをマルチキャストリードリクエストに登録する。この場合、データ長はメモリアクセス単位なので、メモリリクエスト管理部２０３は、通常はマルチキャストリードリクエストではデータ長の登録は行わなくてよい。ただし、最初や最後の分割ロード命令では、データがメモリアクセス単位より短いデータ長を読み出す場合があり、その場合、メモリリクエスト管理部２０３は、開始アドレスの後に、データ長を表す情報を登録するなどしてもよい。
【００６３】
その後、メモリリクエスト管理部２０３は、ＭＡＣユニット２４のリクエスト受信バッファ２４１におけるデータバッファ領域を確保する。ここで、リクエスト受信バッファ２４１にデータバッファ領域が残っていない場合、メモリリクエスト管理部２０３は、リクエスト受信バッファ２４１のデータバッファ領域に空きができるまで待機する。そして、メモリリクエスト管理部２０３は、リクエスト受信バッファ２４１の空いたデータバッファ領域を確保する。その後、メモリリクエスト管理部２０３は、生成したマルチキャストリードリクエストをリクエスト受信バッファ２４１に発行し、確保したデータバッファ領域に格納させる。ここで、メモリリクエスト管理部２０３は、全てのロードストアユニット２２によるリクエストＩＤの獲得が完了すれば、リクエストＩＤの順番を無視して処理を行ってよい。
【００６４】
メモリリクエスト管理部２０３は、発行したマルチキャストリードリクエストに対する応答に対して以下の処理を行う。メモリリクエスト管理部２０３は、マルチキャストロード命令を分割した分割ロード命令の全てに対するメモリリードコンプリーションのヘッダを後述するポート２４０のコンプリーション送信バッファ２４２から取得する。
【００６５】
図７は、メモリリードコンプリーションのフォーマットの一例を示す図である。メモリリクエスト管理部２０３により取得されるメモリリードリコンプリーションは、図７に示すフォーマット３０３を有する。メモリリードコンプリーションにおける第１サイクルで送信される領域は、リクエストの種別を示すコマンド、応答の対象であるマルチキャストリードリクエストのリクエストＩＤ及び応答のステータス、並びに、リザーブの領域を有するヘッダが格納される。さらに、メモリリードコンプリーションの第２サイクル以降で送信される領域には、メモリリードデータが格納される。
【００６６】
メモリリクエスト管理部２０３は、取得した各メモリリードコンプリーションに格納されたリクエストＩＤから、そのリクエストＩＤが割り当てられた分割ロード命令を特定する。その後、メモリリクエスト管理部２０３は、特定した分割ロード命令の情報及びその分割ロード命令に割り当てられたリクエストＩＤをレジスタ制御部２０４へ出力する。このメモリリクエスト管理部２０３が、「処理要求実行部」の一例にあたる。
【００６７】
データバッファ２０５は、ユニキャストリードリクエスト又はマルチキャストリードリクエストに対する応答であるメモリリードコンプリーションに含まれるメモリリードデータをコンプリーション送信バッファ２４２から取得して格納する。
【００６８】
レジスタ制御部２０４は、ユニキャストロード命令及びマルチキャストロード命令の何れの場合にも、全ての分割ロード命令の情報の入力を命令分割部２０１から受ける。その後、レジスタ制御部２０４は、メモリリードコンプリーションが返ってきた分割ロード命令の情報及びその分割ロード命令に割り当てられたリクエストＩＤの入力をメモリリクエスト管理部２０３から受ける。
【００６９】
そして、レジスタ制御部２０４は、メモリリードコンプリーションが返ってきた分割ロード命令で読み出しが指定されたデータに対応するメモリリードデータをデータバッファ２０５から読み出す。さらに、レジスタ制御部２０４は、コア２３が有するレジスタファイル２３１の書き込む領域を決定する。そして、レジスタ制御部２０４は、取得したメモリリードデータをコア２３のレジスタファイル２３１の決定した領域に書き込むライトリクエストを生成する。そして、レジスタ制御部２０４は、ライトリクエストともに読み出したメモリリードデータをコア２３のレジスタファイル２３１へ送信する。
【００７０】
その後、レジスタ制御部２０４は、メモリリードデータを格納するデータバッファ２０５を解放する。また、レジスタ制御部２０４は、メモリリードデータの送信が完了した分割ロード命令に割り当てられたリクエストＩＤをＩＤ管理部２２３に通知する。
【００７１】
さらに、レジスタ制御部２０４は、メモリリードデータの送信が完了した分割ロード命令の完了通知を命令分割部２０１へ出力する。ここで、コア２３にデータを送信すればその後にデータが処理されることは確実であることから、レジスタ制御部２０４は、コア２３からの応答を待たずに、データの送信を契機として分割ロード命令の完了を確定してよい。このレジスタ制御部２０４が、「出力部」の一例にあたる。
【００７２】
図２に戻って説明を続ける。ＭＡＣユニット２４は、複数のポート２４０を有する。各ポート２４０には、ロードストアユニット２２がそれぞれ接続される。ここで、ポート２４０は、図４に示すように、リクエスト受信バッファ２４１及びコンプリーション送信バッファ２４２を有する。
【００７３】
リクエスト受信バッファ２４１は、格納可能なリクエストの数が予め決まる。例えば、４つのリクエストの格納領域を有するリクエスト受信バッファ２４１は、４段のリクエスト受信バッファ２４１と呼ばれる場合がある。リクエスト受信バッファ２４１には、ロードストアユニット２２のメモリリクエスト管理部２０３から送られたメモリアクセスリクエストが格納される。例えば、リクエスト受信バッファ２４１には、分割ロード命令に対応するメモリリードリクエストが格納される。４段のリクエスト受信バッファ２４１は、４つのリクエストを格納した場合、少なくとも１つのリクエストがＭＡＣユニット２４により処理されるまで新たなリクエストを受け付けない。そして、リクエスト受信バッファ２４１は、格納されたリクエストがＭＡＣユニット２４に処理され、そのリクエストを格納した領域が空になった場合、その空になった領域に新たなリクエストを格納することができる。
【００７４】
コンプリーション送信バッファ２４２は、メモリアクセスリクエストに対する応答であるメモリリードコンプリーションが格納される。コンプリーション送信バッファ２４２も、格納可能なメモリリードコンプリーションの数に制限がある。そして、コンプリーション送信バッファ２４２に格納されたメモリリードコンプリーションは、ヘッダがメモリリクエスト管理部２０３に取得され、メモリリードデータがデータバッファ２０５に取得される。コンプリーション送信バッファ２４２は、格納するメモリリードコンプリーションがロードストアユニット２２に取得されると、取得されたメモリリードコンプリーションの格納領域が空になり、新たなメモリリードコンプリーションが格納可能となる。
【００７５】
ＭＡＣユニット２４は、リクエスト受信バッファ２４１に格納されたメモリアクセスリクエストを取得して処理する。例えば、メモリアクセスリクエストがメモリリードリクエストの場合、ＭＡＣユニット２４は、そのメモリリードリクエストで指定されたメモリ２５のアドレスからメモリリードデータを読み出す。そして、ＭＡＣユニット２４は、読み出したメモリリードデータを用いてメモリリードコンプリーションを生成してコンプリーション送信バッファ２４２に格納する。その後、ＭＡＣユニット２４は、コンプリーション送信バッファ２４２に格納されたメモリリードコンプリーションをロードストアユニット２２へ送信する。このＭＡＣユニット２４が、「制御部」の一例にあたる。
【００７６】
メモリ２５は、記憶装置である。メモリ２５は、ＭＡＣユニット２４の制御にしたがって、指定されたアドレスからのデータの読み出し及び指定されたアドレスに対するデータの書き込みを行う。このメモリ２５が、「記憶装置」の一例にあたる。
【００７７】
次に、図８を参照して、ロード命令実行の処理の流れについて説明する。図８は、ロード命令実行の処理のフローチャートである。
【００７８】
インストラクションユニット２１は、取得したロード命令をデコードしてロードストアユニット２２に発行する（ステップＳ１０１）。ここで、ロード命令がユニキャストロード命令であれば、インストラクションユニット２１は、１つのロードストアユニット２２にロード命令を発行する。また、ロード命令がマルチキャストロード命令であれば、インストラクションユニット２１は、複数の対象ロードストアユニット２２にロード命令を発行する。
【００７９】
ロード命令を取得したロードストアユニット２２は、メモリリードリクエスト発行処理を実行する（ステップＳ１０２）。
【００８０】
ＭＡＣユニット２４は、メモリリードリクエストをポート２４０に接続するロードストアユニット２２から受信し（ステップＳ１０３）、リクエスト受信バッファ２４１に格納する。
【００８１】
次に、ＭＡＣユニット２４は、リクエスト受信バッファ２４１に格納されたメモリリードリクエストを取得し、取得したメモリリードリクエストにしたがいメモリリードを実行する（ステップＳ１０４）。
【００８２】
次に、ＭＡＣユニット２４は、処理したメモリリードリクエストがマルチキャストリードリクエストか否かを判定する（ステップＳ１０５）。例えば、ＭＡＣユニット２４は、メモリリードリクエストの宛先フィールドを確認し、宛先が複数であれば処理したメモリリードリクエストがマルチキャストリードリクエストであると判定する。
【００８３】
マルチキャストリードリクエストの場合（ステップＳ１０５：肯定）、ＭＡＣユニット２４は、メモリリードデータを付加したメモリリードコンプリーションを、宛先フィールドに記載された各対象ロードストアユニット２２へ発行する（ステップＳ１０６）。
【００８４】
一方、ユニキャストリードリクエストの場合（ステップＳ１０５:否定）、ＭＡＣユニット２４は、メモリリードデータを付加したメモリリードコンプリーションを、宛先フィールドに記載された発行元のロードストアユニット２２へ発行する（ステップＳ１０７）。
【００８５】
ロードストアユニット２２は、ＭＡＣユニット２４からメモリリードコンプリーションを受信してライトリクエスト発行処理を実行する（ステップＳ１０８）。
【００８６】
インストラクションユニット２１は、ロード命令の発行先の全てのロードストアユニット２２から命令完了通知を受信したか否かを判定する（ステップＳ１０９）。ここで、ロード命令がマルチキャストロード命令であれば、インストラクションユニット２１は、対象ロードストアユニット２２の全てから命令完了通知を受信したか否かを判定する。
【００８７】
命令完了通知を受信していないロード命令の発行先のロードストアユニット２２がある場合（ステップＳ１０９：否定）、インストラクションユニット２１は、ロード命令の発行先の全てのロードストアユニット２２から命令完了通知を受信するまで待機する。
【００８８】
これに対して、ロード命令の発行先の全てのロードストアユニット２２から命令完了通知を受信した場合（ステップＳ１０９：肯定）、インストラクションユニット２１は、ロード命令の実行を完了する。
【００８９】
次に、図９を参照して、メモリリードリクエスト発行処理の流れについて説明する。図９は、メモリリードリクエスト発行処理のフローチャートである。図９のフローチャートで表す処理は、図８におけるステップＳ１０２で実行される処理の一例にあたる。
【００９０】
命令分割部２０１は、インストラクションユニット２１から発行されたロード命令を受信する（ステップＳ２０１）。
【００９１】
次に、命令分割部２０１は、ロード命令の宛先のコア２３が複数か否かを判定する（ステップＳ２０２）。宛先のコア２３が１つの場合（ステップＳ２０２：否定）、命令分割部２０１は、ロード命令がユニキャストロード命令であると判定する。その後、命令分割部２０１、リクエストＩＤ制御部２０２及びメモリリクエスト管理部２０３は、ユニキャストロード命令に対する処理を実行する（ステップＳ２０３）。
【００９２】
これに対して、宛先のコア２３が複数の場合（ステップＳ２０２：肯定）、命令分割部２０１は、ロード命令がマルチキャストロード命令であると判定する。そして、命令分割部２０１は、ロード命令を分割し分割ロード命令を生成する（ステップＳ２０４）。
【００９３】
次に、命令分割部２０１は、分割ロード命令のうちの未選択の分割ロード命令で先頭の分割ロード命令を１つ選択する（ステップＳ２０５）。以下では、選択された分割ロード命令を「対象分割ロード命令」という。
【００９４】
また、命令分割部２０１は、選定ロードストアユニット２２の情報の通知とともに対象分割ロード命令のリクエストＩＤの獲得をマルチキャスト用ＩＤ獲得部２２２に指示する。マルチキャスト用ＩＤ獲得部２２２は、命令分割部２０１からの指示を受けて、予め決められたリクエストＩＤ決定論理を用いて、獲得するリクエストＩＤを特定する（ステップＳ２０６）。
【００９５】
次に、マルチキャスト用ＩＤ獲得部２２２は、獲得するリクエストＩＤの空きがあるか否かをＩＤ管理部２２３に確認する（ステップＳ２０７）。獲得するリクエストＩＤが空いていない場合（ステップＳ２０７：否定）、マルチキャスト用ＩＤ獲得部２２２は、獲得するリクエストＩＤが空くまで待機する。
【００９６】
これに対して、獲得するリクエストＩＤの空きがある場合（ステップＳ２０７：肯定）、マルチキャスト用ＩＤ獲得部２２２は、リクエストＩＤを獲得する（ステップＳ２０８）。そして、マルチキャスト用ＩＤ獲得部２２２は、獲得したリクエストＩＤをメモリリクエスト管理部２０３に通知する。
【００９７】
次に、決定部２１１は、予め決められた発行担当決定論理を用いて、対象ロードストアユニット２２の中から選定ロードストアユニット２２を特定する（ステップＳ２０９）。そして、命令分割部２０１は、選定ロードストアユニット２２の情報とともに対象分割ロード命令をメモリリクエスト管理部２０３へ出力する。
【００９８】
次に、決定部２１１は、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２か否かを判定し、マルチキャスト用ＩＤ獲得部２２２に通知する（ステップＳ２１０）。
【００９９】
自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２でない場合（ステップＳ２１０：否定）、マルチキャスト用ＩＤ獲得部２２２は、リクエストＩＤの獲得通知を選定ロードストアユニット２２に送信する（ステップＳ２１１）。そして、メモリリードリクエスト発行処理はステップＳ２１５へ進む。
【０１００】
一方、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２である場合（ステップＳ２１０：肯定）、ＩＤ獲得確認部２２４は、全ての対象ロードストアユニット２２から獲得通知を受信したか否かを判定する（ステップＳ２１２）。獲得通知を受信していない対象ロードストアユニット２２がある場合（ステップＳ２１２：否定）、ＩＤ獲得確認部２２４は、全ての対象ロードストアユニット２２から獲得通知を受信するまで待機する。
【０１０１】
これに対して、全ての対象ロードストアユニット２２から獲得通知を受信した場合（ステップＳ２１２：肯定）、ＩＤ獲得確認部２２４は、全ての対象ロードストアユニット２２によるリクエストＩＤの獲得完了をメモリリクエスト管理部２０３に通知する。メモリリクエスト管理部２０３は、全ての対象ロードストアユニット２２によるリクエストＩＤの獲得完了の通知を受けて、リクエスト受信バッファ２４１に空きがあるか否かを判定する（ステップＳ２１３）。リクエスト受信バッファ２４１に空きが無い場合（ステップＳ２１３：否定）、メモリリクエスト管理部２０３は、リクエスト受信バッファ２４１に空きができるまで待機する。
【０１０２】
これに対して、リクエスト受信バッファ２４１に空きがある場合（ステップＳ２１３：肯定）、メモリリクエスト管理部２０３は、マルチキャストリードリクエストを発行する（ステップＳ２１４）。
【０１０３】
そして、命令分割部２０１は、全ての分割ロード命令に対応するリードリクエストの発行が完了したか否かを判定する（ステップＳ２１５）。リードリクエストの発行が行われていない分割ロード命令がある場合（ステップＳ２１５：否定）、命令分割部２０１は、ステップＳ２０５へ戻る。
【０１０４】
これに対して、全ての分割ロード命令に対応するリードリクエストの発行が完了した場合（ステップＳ２１５：肯定）、ロードストアユニット２２は、メモリリードリクエスト発行処理を終了する。
【０１０５】
次に、図１０を参照して、ライトリクエスト発行処理の流れについて説明する。図１０は、ライトリクエスト発行処理のフローチャートである。図１０のフローチャートで表す処理は、図８におけるステップＳ１０８で実行される処理の一例にあたる。
【０１０６】
ロードストアユニット２２は、メモリリードコンプリーションをＭＡＣユニット２４が有する接続先のポート２４０のコンプリーション送信バッファ２４２から受信する（ステップＳ３０１）。そして、メモリリクエスト管理部２０３は、メモリリードコンプリーションのヘッダを取得する。また、メモリリードコンプリーションに付加されたメモリリードデータは、データバッファ２０５に格納される。
【０１０７】
そして、メモリリクエスト管理部２０３は、メモリリードコンプリーションのヘッダに格納されたリクエストＩＤを取得し、対応する分割ロード命令を特定する。そして、メモリリクエスト管理部２０３は、特定した分割ロード命令の情報及びその分割ロード命令に対応するリクエストＩＤをレジスタ制御部２０４へ出力する。レジスタ制御部２０４は、メモリリードコンプリーションを受信した分割ロード命令の情報を取得する。そして、レジスタ制御部２０４は、リードデータを付加したライトリクエストをコア２３のレジスタファイル２３１へ発行する（ステップＳ３０２）。
【０１０８】
その後、レジスタ制御部２０４は、ライトリクエストを行ったメモリリードデータを格納するデータバッファ２０５を解放し、且つ、分割ロード命令に割り当てられたリクエストＩＤをＩＤ管理部２２３に通知してリクエストＩＤを解放する（ステップＳ３０３）。さらに、レジスタ制御部２０４は、分割ロード命令の完了を命令分割部２０１に通知する。
【０１０９】
レジスタ制御部２０４は、ロード命令を分割して生成した各分割ロード命令に対応するライトリクエストを全て発行したか否かを判定する(ステップＳ３０４)。対応するライトリクエストが発行されていない分割ロード命令が存在する場合（ステップＳ３０４：否定）、ライトリクエスト発行処理は、ステップＳ３０１へ戻る。
【０１１０】
これに対して、各分割ロード命令に対応するライトリクエストの全ての発行が完了した場合（ステップＳ３０４：肯定）、命令分割部２０１は、ロード命令を分割して生成した全ての分割ロード命令の完了通知をレジスタ制御部２０４から受信する。そして、命令分割部２０１は、ロード命令の完了をインストラクションユニット２１に通知する（ステップＳ３０５）。
【０１１１】
ここで、図１１及び１２を参照して、本実施例に係る情報処理装置１のマルチキャストロード命令の処理状態と従来の情報処理装置のマルチキャストロード命令の処理状態との比較について説明する。図１１は、従来の情報処理装置のマルチキャストロード命令の処理状態を表す図である。また、図１２は、実施例１に係る情報処理装置のマルチキャストロード命令の処理状態を表す図である。
【０１１２】
ここでは、ロードストアユニット２２として、ロードストアユニット＃１〜＃８が存在する。また、ロード命令として、ロードＬＤ１〜ＬＤ５が発行される。そして、ロードＬＤ１は、２つの分割ロード命令に分割され且つロードストアユニット＃１が送信先であるユニキャストロード命令であり、そのユニキャストリードリクエストは、リード１−０１及び１−０２である。また、ロードＬＤ２は、１つの分割ロード命令に分割され且つロードストアユニット＃２が送信先であるユニキャストロード命令であり、そのユニキャストリードリクエストは、リード２−０１である。また、ロードＬＤ３は、１６の分割ロード命令に分割され且つロードストアユニット＃１〜＃８が送信先であるマルチキャストロード命令であり、そのマルチキャストリードリクエストはリード３−０１〜３−１６である。また、ロードＬＤ４は、１つの分割ロード命令に分割され且つロードストアユニット＃１が送信先であるユニキャストロード命令であり、そのユニキャストリードリクエストは、リード４−０１である。また、ロードＬＤ５は、４つの分割ロード命令に分割され且つロードストアユニット＃１〜＃４が送信先であるマルチキャストロード命令であり、そのマルチキャストリードリクエストはリード５−０１〜５−０４である。また、リクエストＩＤとして００〜１５を使用する場合で説明する。
【０１１３】
従来の情報処理装置では、マルチキャストリードリクエストを発行するロードストアユニット２２は、特定のロードストアユニット２２が選択される。そのため、従来の情報処理装置では、図１１に示すような状態となる。
【０１１４】
ロードＬＤ１は、送信先がロードストアユニット＃１であるので、ユニキャストリードリクエストは、ロードストアユニット＃１が発行する。これらのユニキャストリードリクエストには、リクエストＩＤとして００及び０１が割り当てられ、いずれもロードストアユニット＃１に対応するリクエスト受信バッファ２４１に格納される。そしてこの場合、ロードストアユニット＃１が、メモリリードコンプリーションの受信及びライトリクエストの発行を行う。
【０１１５】
次に、ロードＬＤ２が処理されるが、この場合、既にリード１−０１は処理されており、リクエストＩＤの００が空なので、リード２−０１にリクエストＩＤとして００が割り当てられる。この場合、ロードストアユニット＃２がユニキャストリードリクエストを発行する。このユニキャストリードリクエストは、ロードストアユニット＃２に対応するリクエスト受信バッファ２４１に格納される。そしてこの場合、ロードストアユニット＃２が、メモリリードコンプリーションの受信及びライトリクエストの発行を行う。
【０１１６】
次に、ロードＬＤ３が処理されるが、マルチキャストロード命令であり、図１１に示すように、リード３−０１〜３−１６の発行は全てロードストアユニット＃１が代表して行う。この場合、リード３−０１〜３−１６は、いずれもロードストアユニット＃１に対応するリクエスト受信バッファ２４１に格納される。そのため、そのリクエスト受信バッファ２４１に空きがなくなることが考えられ、その場合、リクエスト受信バッファ２４１の空きを待つために遅延が発生する。さらに、リード３−０１〜３−１６にリクエストＩＤを発行するためにロードＬＤ１及びＬＤ２の双方が完了するのを待つので、そのための遅延が発生する。この場合は、ロードストアユニット＃１〜＃８が、メモリリードコンプリーションの受信及びライトリクエストの発行を行う。
【０１１７】
次に、ロードＬＤ４が処理されるが、この場合、既にリード３−０１が処理された可能性が高い。リクエストＩＤの００が空いていれば、リード４−０１にリクエストＩＤとして００が割り当てられる。この場合、ロードストアユニット＃１がユニキャストリードリクエストを発行する。このユニキャストリードリクエストは、ロードストアユニット＃１に対応するリクエスト受信バッファ２４１に格納される。そしてこの場合、ロードストアユニット＃１が、メモリリードコンプリーションの受信及びライトリクエストの発行を行う。
【０１１８】
次に、ロードＬＤ５が処理されるが、マルチキャストロード命令であり、図１１に示すように、マルチキャストリードリクエストであるリード５−０１〜５−０４の発行は全てロードストアユニット＃１が代表して行う。この場合、リード５−０１〜５−０４は、いずれもロードストアユニット＃１に対応するリクエスト受信バッファ２４１に格納される。そのため、そのリクエスト受信バッファ２４１に空きがなくなることが考えられ、その場合、リクエスト受信バッファ２４１の空きを待つために遅延が発生する。さらに、リード５−０１〜５−０４にリクエストＩＤを発行するためにロードＬＤ３が完了するのを待つので、そのための遅延が発生する。この場合は、ロードストアユニット＃１〜＃４が、メモリリードコンプリーションの受信及びライトリクエストの発行を行う。
【０１１９】
このように、従来の情報処理装置では、リクエストＩＤの取得及びリクエスト受信バッファ２４１への格納時に多くの遅延が発生するおそれがある。
【０１２０】
これに対して、本実施例に係る情報処理装置１は、ロードＬＤ１及びＬＤ２の処理は従来と同じであるが、ロードＬＤ３の処理が従来と異なる。まず、リクエストＩＤは、リード３−０１〜３−１６に対して、それぞれ００〜１５が獲得されると決定される。そして、全てのリクエストＩＤの解放を待たずに、ロードストアユニット＃１〜＃８の全てでリクエストＩＤが獲得されることで、そのリクエストＩＤの獲得が完了する。
【０１２１】
また、図１２に示すように、ロードストアユニット＃１が、リード３−０１を発行する。ロードストアユニット＃２が、リード３−０２を発行する。ロードストアユニット＃３が、リード３−０３を発行する。ロードストアユニット＃４が、リード３−０４を発行する。ロードストアユニット＃５が、リード３−０５を発行する。ロードストアユニット＃６が、リード３−０６を発行する。ロードストアユニット＃７が、リード３−０７を発行する。ロードストアユニット＃８が、リード３−０８を発行する。さらに、ロードストアユニット＃１が、リード３−０９を発行する。ロードストアユニット＃２が、リード３−１０を発行する。ロードストアユニット＃３が、リード３−１１を発行する。ロードストアユニット＃４が、リード３−１２を発行する。ロードストアユニット＃５が、リード３−１３を発行する。ロードストアユニット＃６が、リード３−１４を発行する。ロードストアユニット＃７が、リード３−１５を発行する。ロードストアユニット＃８が、リード３−１６を発行する。
【０１２２】
すなわち、リード３−０１及び３−０９が、ロードストアユニット＃１に対応するリクエスト受信バッファ２４１に格納される。リード３−０２及び３−１０が、ロードストアユニット＃２に対応するリクエスト受信バッファ２４１に格納される。リード３−０３及び３−１１が、ロードストアユニット＃３に対応するリクエスト受信バッファ２４１に格納される。リード３−０４及び３−１２が、ロードストアユニット＃４に対応するリクエスト受信バッファ２４１に格納される。リード３−０５及び３−１３が、ロードストアユニット＃５に対応するリクエスト受信バッファ２４１に格納される。リード３−０６及び３−１５が、ロードストアユニット＃６に対応するリクエスト受信バッファ２４１に格納される。リード３−０７及び３−１５が、ロードストアユニット＃７に対応するリクエスト受信バッファ２４１に格納される。リード３−０８及び３−１６が、ロードストアユニット＃８に対応するリクエスト受信バッファ２４１に格納される。
【０１２３】
したがって、ロードＬＤ３の処理において、マルチキャストリードリクエストを格納するリクエスト受信バッファ２４１が分散され、各リクエスト受信バッファ２４１は直ぐに空きが発生する。そのため、リクエスト受信バッファ２４１の空きを待つことによる遅延の発生を軽減することができる。
【０１２４】
続いて、ロードＬＤ４の処理は従来と同じように実行される。そして、ロードＬＤ５の処理では、リクエストＩＤは、リード５−０１〜５−０４に対して、それぞれ００〜０３が獲得されると決定される。そして、全てのリクエストＩＤの解放を待たずに、ロードストアユニット＃１〜＃４の全てでリクエストＩＤが獲得されることで、そのリクエストＩＤの獲得が完了する。
【０１２５】
また、図１２に示すように、ロードストアユニット＃１が、リード５−０１を発行する。ロードストアユニット＃２が、リード５−０２を発行する。ロードストアユニット＃３が、リード５−０３を発行する。ロードストアユニット＃４が、リード５−０４を発行する。
【０１２６】
すなわち、リード５−０１が、ロードストアユニット＃１に対応するリクエスト受信バッファ２４１に格納される。リード５−０２が、ロードストアユニット＃２に対応するリクエスト受信バッファ２４１に格納される。リード５−０３が、ロードストアユニット＃３に対応するリクエスト受信バッファ２４１に格納される。リード５−０４が、ロードストアユニット＃４に対応するリクエスト受信バッファ２４１に格納される。
【０１２７】
したがって、ロードＬＤ５の処理においても、マルチキャストリードリクエストを格納するリクエスト受信バッファ２４１が分散され、各リクエスト受信バッファ２４１は直ぐに空きが発生する。そのため、リクエスト受信バッファ２４１の空きを待つことによる遅延の発生を軽減することができる。
【０１２８】
以上に説明したように、本実施例に係る情報処理装置は、マルチキャストロード命令を分割した分割ロード命令毎に、マルチキャストロード命令が送信されたロードストアユニットの全てにおいて統一されたロードストアユニットを発行担当として選択する。そして、発行担当となるロードストアユニットは、分割命令毎に変更される。また、本実施例に係る情報処理装置は、マルチキャストロード命令を分割ロード命令毎に、マルチキャストロード命令が送信されたロードストアユニットの全てにおいて統一されたリクエストＩＤを獲得する。そして、マルチキャストロード命令が送信されたロードストアユニットの全てでリクエストＩＤが獲得された場合に、マルチキャストリードリクエストが発行担当のロードストアユニットから発行される。
【０１２９】
これにより、マルチキャストリードリクエストを発行するロードストアユニットが分割ロード命令毎に変更されるので、マルチキャストリードリクエストを発行する処理がロードストアユニット間で分散される。したがって、特定のリクエスト受信バッファに対するマルチキャストリードリクエストの格納の偏りを軽減でき、メモリデータ転送のスループットを向上させることができる。
【０１３０】
また、特定のリクエストＩＤさえ空けばそのリクエストＩＤが割り当てられた分割ロード命令のマルチキャストリードリクエストが発行できるので、リクエストＩＤが全て解放されるのを待つことなくマルチキャストリードリクエストを発行することができる。したがって、マルチキャストリードリクエストの発行に掛かる時間を短縮でき、メモリデータ転送のスループットを向上させることができる。
【０１３１】
このように、マルチキャストリードリクエストの発行担当の分散及びマルチキャストリードリクエストの発行までの時間の短縮によりメモリデータ転送のスループットを向上させることができ、その結果として情報処理装置の処理性能が向上する。特に、行列演算などの同じデータを用いた計算を多数含む演算を実行する場合には、複数のコアに同じデータを読み込ませるマルチキャスト用ロード命令が発行される場合が多い。そのため、情報処理装置が行列演算などの同じデータを用いた計算を多数含む演算を行う場合に、特に処理性能の向上が見込まれる。
【実施例２】
【０１３２】
図１３は、実施例２に係るアクセラレータのブロック図である。本実施例に係るアクセラレータ１２は、コア２３の中にインストラクションユニット２１及びロードストアユニット２２が搭載されることが実施例１と異なる。以下の説明では、実施例１と同様の各部は、特に説明のない限り同様の機能を有する。
【０１３３】
本実施例に係るアクセラレータ１２では、各コア２３に搭載された各インストラクションユニット２１は、自己が搭載されたコア２３が読み込んだデータの宛先となる場合に、マルチキャストロード命令を取得する。そして、インストラクションユニット２１は、自己と同じコア２３に搭載されたロードストアユニット２２にデコードしたマルチキャストロード命令を発行する。
【０１３４】
本実施例に係るロードストアユニット２２のブロック図も、図４で表される。決定部２１１は、データの宛先とされたコア２３に搭載されたロードストアユニット２２を対象ロードストアユニット２２として、分割ロード命令毎に、予め決められた発行担当決定論理にしたがって、選定ロードストアユニット２２を決定する。さらに、マルチキャスト用ＩＤ獲得部２２２は、予め決められたリクエストＩＤ決定論理にしたがいリクエストＩＤを決定する。各ロードストアユニット２２の下に記載したリクエストＩＤは、各ロードストアユニット２２それぞれが、各分割ロード命令に対して並んだ数字の左から順にリクエストＩＤとして決定していくことを表す。
【０１３５】
そして、マルチキャスト用ＩＤ獲得部２２２は、決定したリクエストＩＤの獲得を行い、自己が搭載されたロードストアユニット２２が選定ロードストアユニット２２でなければ、リクエストＩＤの獲得を選定ロードストアユニット２２に通知する。選定ロードストアユニット２２のメモリリクエスト管理部２０３は、全ての対象ロードストアユニット２２においてリクエストＩＤが確保され、リクエスト受信バッファ２４１に空きがあれば、マルチキャストリードリクエストを発行する。このようにして、対象ロードストアユニット２２は、マルチキャストロード命令を処理する。
【０１３６】
以上に説明したように、本実施例に係る情報処理装置においても、マルチキャストリードリクエストを発行する処理がロードストアユニット間で分散され、特定のリクエスト受信バッファに対するマルチキャストリードリクエストの格納の偏りを軽減できる。また、特定のリクエストＩＤさえ空けばそのリクエストＩＤが割り当てられた分割ロード命令のマルチキャストリードリクエストが発行できるので、リクエストＩＤが全て解放されるのを待つことなくマルチキャストリードリクエストを発行することができる。
【０１３７】
したがって、本実施例に係る情報処理装置のように、各コアがそれぞれインストラクションユニット及びロードストアユニットを有する場合であっても、情報処理装置の処理性能を向上させることができる。
【実施例３】
【０１３８】
図１４は、実施例３に係るアクセラレータのブロック図である。本実施例に係るアクセラレータ１２は、１つのロードストアユニット２２に対して、複数のコア２３が数珠繋ぎで接続されることが実施例１と異なる。以下の説明では、実施例１と同様の各部は、特に説明のない限り同様の機能を有する。
【０１３９】
本実施例に係る情報処理装置１におけるロードストアユニット２２は、いくつかのコア２３が接続される。すなわち、ロードストアユニット２２は、複数のコア２３のうちのいくつかが対応付けられる。
【０１４０】
本実施例に係る情報処理装置１では、マルチキャストロード命令におけるデータの宛先として各ロードストアユニット２２に接続するコア２３の中から複数のコア２３が選択される。ここで、宛先として選択されるコア２３が接続されないロードストアユニット２２があってもよい。また、ロードストアユニット２２は、宛先として選択されたコア２３が１つ接続されてもよいし複数接続されてもよい。
【０１４１】
インストラクションユニット２１は、マルチキャストロード命令のデータの宛先であるコア２３が接続されたロードストアユニット２２に対して、デコードしたマルチキャストロード命令を発行する。
【０１４２】
本実施例に係るロードストアユニット２２のブロック図も、図４で表される。決定部２１１は、データの宛先とされたコア２３が接続されたロードストアユニット２２を対象ロードストアユニット２２として、分割ロード命令毎に、予め決められた発行担当決定論理にしたがって、選定ロードストアユニット２２を決定する。さらに、マルチキャスト用ＩＤ獲得部２２２は、予め決められたリクエストＩＤ決定論理にしたがいリクエストＩＤを決定する。各ロードストアユニット２２の下に記載したリクエストＩＤは、各ロードストアユニット２２それぞれが、各分割ロード命令に対して並んだ数字の左から順にリクエストＩＤとして決定していくことを表す。
【０１４３】
そして、マルチキャスト用ＩＤ獲得部２２２は、決定したリクエストＩＤの獲得を行う。そして、選定ロードストアユニット２２以外のロードストアユニット２２のマルチキャスト用ＩＤ獲得部２２２は、リクエストＩＤの獲得を選定ロードストアユニット２２に通知する。また、選定ロードストアユニット２２のメモリリクエスト管理部２０３は、全ての対象ロードストアユニット２２においてリクエストＩＤが確保され、リクエスト受信バッファ２４１に空きがあれば、マルチキャストリードリクエストを発行する。
【０１４４】
マルチキャストロード命令においてデータの宛先となるコア２３が複数接続されたロードストアユニット２２であれば、メモリリクエスト管理部２０３は、その複数のコア２３が宛先とされたメモリリードコンプリーションを受信する。そして、レジスタ制御部２０４は、メモリリードコンプリーションに登録された宛先の中で自己が搭載されたロードストアユニット２２に接続するコア２３に向けて、メモリリードデータとともにライトリクエストを送信する。
【０１４５】
以上に説明したように、本実施例に係る情報処理装置においても、マルチキャストリードリクエストを発行する処理がロードストアユニット間で分散され、特定のリクエスト受信バッファに対するマルチキャストリードリクエストの格納の偏りを軽減できる。また、特定のリクエストＩＤさえ空けばそのリクエストＩＤが割り当てられた分割ロード命令のマルチキャストリードリクエストが発行できるので、リクエストＩＤが全て解放されるのを待つことなくマルチキャストリードリクエストを発行することができる。
【０１４６】
したがって、本実施例に係る情報処理装置のように、複数のコアが１つのロードストアユニットに接続される場合であっても、情報処理装置の処理性能を向上させることができる。
【０１４７】
ここで、以上の各実施例ではアクセラレータ１２に搭載されたロードストアユニット２２、コア２３及びメモリ２５の間のデータの読み込みを例に説明したが、複数の演算処理装置が記憶装置から同じデータを読み込む装置であれば同様の機能が適用可能である。例えば、図１に示す情報処理装置１におけるＣＰＵ１０が有するＣＰＵコア及びロードストアユニットとメモリ１５と間のデータの読み込みにも、以上で説明した機能を適用することができる。その場合、ＣＰＵ１０が、演算処理装置の一例にあたり、ＣＰＵコアが演算処理部の一例にあたり、ＣＰＵ１０が有するロードストアユニットが「アクセス部」の一例にあたる。また、メモリ１５が、「記憶装置」の一例にあたる。
【符号の説明】
【０１４８】
１  情報処理装置
１０  ＣＰＵ
１１  Ｉ／Ｏコントローラ
１２  アクセラレータ
１３  ハードディスク
１４  Ｉ／Ｏデバイス
１５  メモリ
２１  インストラクションユニット
２２  ロードストアユニット
２３  コア
２４  ＭＡＣユニット
２５  メモリ
２０１  命令分割部
２０２  リクエストＩＤ制御部
２０３  メモリリクエスト管理部
２０４  レジスタ制御部
２０５  データバッファ
２１１  決定部
２２１  ユニキャスト用ＩＤ獲得部
２２２  マルチキャスト用ＩＤ獲得部
２２３  ＩＤ管理部
２２４  ＩＤ獲得確認部
２３１  レジスタファイル
２３２  演算実行部
２４０  ポート
２４１  リクエスト受信バッファ
２４２  コンプリーション送信バッファ
【図１】
2019159722.tif 000003
【図２】
2019159722.tif 000004
【図３】
2019159722.tif 000005
【図４】
2019159722.tif 000006
【図５】
2019159722.tif 000007
【図６】
2019159722.tif 000008
【図７】
2019159722.tif 000009
【図８】
2019159722.tif 000010
【図９】
2019159722.tif 000011
【図１０】
2019159722.tif 000012
【図１１】
2019159722.tif 000013
【図１２】
2019159722.tif 000014
【図１３】
2019159722.tif 000015
【図１４】
2019159722.tif 000016