(57)【要約】【課題】ベクトル演算処理装置において、配列変数を初期化する処理を高速に実行する。【解決手段】ベクトル演算処理装置２０は、メモリ２４に記憶されている配列変数２４０に対する演算を、ベクトル演算命令２１０により実行することを制御するベクトル制御部２１と、実行する命令２００が、配列変数２４０に対する初期化を行う初期化命令２２０であるか否かを判定する判定部２２と、初期化命令２２０を、ベクトル演算命令２１０を用いずに、ベクトル演算命令２１０と同様にメモリ２４に対してアクセスするスカラ演算命令２３０に変換することによって実行する実行部２３と、を備える。【選択図】      図５
2020140284.tif 000002
【特許請求の範囲】
【請求項１】
メモリに記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御するベクトル制御手段と、
実行する命令が、前記配列変数に対する初期化を行う初期化命令であるか否かを判定する判定手段と、
前記初期化命令を、前記ベクトル演算命令を用いずに、前記ベクトル演算命令と同様に前記メモリに対してアクセスするスカラ演算命令に変換することによって実行する実行手段と、
を備えるベクトル演算処理装置。
【請求項２】
前記実行手段は、前記初期化命令を、自装置の動作サイクルごとにアクセス先のアドレスを変更しながら、前記メモリに対してアクセスするスカラ演算命令に変換する、
請求項１に記載のベクトル演算処理装置。
【請求項３】
前記実行手段は、前記スカラ演算命令による前記メモリに対する書き込みデータを格納するスカラレジスタを備え、前記初期化命令が示す前記書き込みデータを、前記スカラレジスタに格納する。
請求項１または請求項２に記載のベクトル演算処理装置。
【請求項４】
前記実行手段は、前記初期化命令を、前記メモリが備える複数のアクセスポートに対するアクセス命令を含む前記スカラ演算命令に変換する、
請求項１乃至請求項３のいずれか一項に記載のベクトル演算処理装置。
【請求項５】
前記スカラ演算命令に変換された前記初期化命令を、前記メモリが備える複数のアクセスポートに対するアクセスを行うことによって実行するメモリアクセス制御手段をさらに備える、
請求項４に記載のベクトル演算処理装置。
【請求項６】
前記判定手段は、前記実行する命令において、前記配列変数に含まれる要素に対して書き込む値が所定の値である場合に、前記実行する命令が前記初期化命令であると判定する、
請求項１乃至請求項５のいずれか一項に記載のベクトル演算処理装置。
【請求項７】
前記判定手段は、前記実行する命令が示す命令種別が、前記初期化命令を示すか否かを判定する、
請求項１乃至請求項５のいずれか一項に記載のベクトル演算処理装置。
【請求項８】
前記メモリをさらに備える、
請求項１乃至６のいずれか一項に記載のベクトル演算処理装置。
【請求項９】
ベクトル演算処理装置によって、
メモリに記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御し、
実行する命令が、前記配列変数に対する初期化を行う初期化命令であるか否かを判定し、
前記初期化命令を、前記ベクトル演算命令を用いずに、前記ベクトル演算命令と同様に前記メモリに対してアクセスするスカラ演算命令に変換することによって実行する、
ベクトル演算処理装置による配列変数初期化方法。
【請求項１０】
メモリに記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御するベクトル制御処理と、
実行する命令が、前記配列変数に対する初期化を行う初期化命令であるか否かを判定する判定処理と、
前記初期化命令を、前記ベクトル演算命令を用いずに、前記ベクトル演算命令と同様に前記メモリに対してアクセスするスカラ演算命令に変換することによって実行する実行処理と、
をベクトル演算処理装置に実行させるためのベクトル演算処理装置による配列変数初期化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、ベクトル演算を実行可能な情報処理装置による、配列変数を初期化する技術に関する。
【背景技術】
【０００２】
近年、様々な技術領域においてソフトウェアの高機能化が進むのに伴い、ソフトウェアの規模も急速に増大している。このようなソフトウェアでは、使用する配列変数（配列データ）も大規模化していることから、大規模な配列変数に対する初期化やデータの設定を効率的かつ高速に行う技術が期待されている。
【０００３】
このような技術に関連する技術として、特許文献１には、複数のプロセッサがそれぞれ自装置に割り付けられたデータを処理するに際して、入力装置から入力したデータまたは記憶装置に格納されている配列データの全部または一部を分割して各記憶空間または各プロセッサに割り付ける配列データの分配／収集処理装置が開示されている。この装置は、各記憶空間または各プロセッサへの割り付け対象となる１以上の任意の次元方向で分割した分割ブロックに対応して、各次元の範囲に関する情報を持つ転送テーブルを作成する。この装置は、作成した転送テーブルに基づいて、分割ブロックごとにデータを各記憶空間または各プロセッサに転送する。そしてこの装置は、任意の転送パターンによりデータを自動分配する。
【０００４】
また、特許文献２には、メモリ資源を多く費やすことなく、かつ、高速に配列の初期化処理を行うことができる定数代入方法が開示されている。この方法では、配列の配列空間を擬似的に０クリアするための「０」値が格納された物理メモリブロックが物理メモリに予め用意されている。この方法では、物理メモリブロックを示す物理メモリページのテーブルが予め用意されている。この方法では、ユーザプログラムが起動され、配列が現れても、その配列空間のために特に物理メモリブロック（物理メモリページ）を確保しない。そしてこの方法では、初期化状態において、各配列空間をいずれも物理メモリブロック（物理メモリページ）とリンクするように設定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０４−３２１１５８号公報
【特許文献２】特開２００４−０３０３５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
スーパーコンピュータ等のベクトル演算を実行可能なベクトル演算処理装置は、一般的に、配列変数に対する初期化処理を、メモリへの書き込みを行うベクトル演算命令であるベクトルストア命令を発行することによって行っている。即ち、ベクトル演算処理装置では、メモリに記憶されている配列変数は、ベクトルストア命令によって、所定の初期値が書き込まれる。配列変数の初期化は、通常、ソフトウェアの実行が開始されたときなどに集中して行なわれることが多い。そしてベクトル演算命令を実行する場合、通常、所定のオーバーヘッド（処理を実行することに伴うコスト）が発生することなどから、多数の大規模な配列変数を使用するソフトウェアを実行する場合では、配列変数を初期化するベクトルストア命令が演算コア内に滞留する場合がある。
【０００７】
このような場合、後続するベクトル演算命令も実行されずに演算コア内に滞留することになるので、性能が低下する問題が発生する。即ち、ベクトル演算処理装置において、配列変数を初期化する処理を高速に行うことが課題である。上述した特許文献１及び２は、この課題について言及していない。本願発明の主たる目的は、この課題を解決するベクトル演算処理装置等を提供することである。
【課題を解決するための手段】
【０００８】
本願発明の一態様に係るベクトル演算処理装置は、メモリに記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御するベクトル制御手段と、実行する命令が、前記配列変数に対する初期化を行う初期化命令であるか否かを判定する判定手段と、前記初期化命令を、前記ベクトル演算命令を用いずに、前記ベクトル演算命令と同様に前記メモリに対してアクセスするスカラ演算命令に変換することによって実行する実行手段と、を備える。
【０００９】
上記目的を達成する他の見地において、本願発明の一態様に係るベクトル演算処理装置による配列変数初期化方法は、ベクトル演算処理装置によって、メモリに記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御し、実行する命令が、前記配列変数に対する初期化を行う初期化命令であるか否かを判定し、前記初期化命令を、前記ベクトル演算命令を用いずに、前記ベクトル演算命令と同様に前記メモリに対してアクセスするスカラ演算命令に変換することによって実行する。
【００１０】
また、上記目的を達成する更なる見地において、本願発明の一態様に係るベクトル演算処理装置による配列変数初期化プログラムは、メモリに記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御するベクトル制御処理と、実行する命令が、前記配列変数に対する初期化を行う初期化命令であるか否かを判定する判定処理と、前記初期化命令を、前記ベクトル演算命令を用いずに、前記ベクトル演算命令と同様に前記メモリに対してアクセスするスカラ演算命令に変換することによって実行する実行処理と、をベクトル演算処理装置に実行させる。
【００１１】
更に、本願発明は、係るベクトル演算処理装置による配列変数初期化プログラム（コンピュータプログラム）が格納された、コンピュータ読み取り可能な、不揮発性の記録媒体によっても実現可能である。
【発明の効果】
【００１２】
本願発明は、ベクトル演算処理装置において、配列変数を初期化する処理を高速に実行することを可能とする。
【図面の簡単な説明】
【００１３】
【図１】本願発明の第１の実施形態に係るベクトル演算処理装置１０の構成を示すブロック図である。
【図２】本願発明の第１の実施形態に係るベクトル演算処理装置１０が、メモリ１６に格納されている配列変数に対する初期化を行う際に、メモリモジュール１６１にアクセスするアドレスの範囲を例示する図である。
【図３】本願発明の第１の実施形態に係るベクトル演算処理装置１０が配列変数を初期化する動作を示すフローチャートである。
【図４Ａ】本願発明の第１の実施形態に係るベクトル演算処理装置１０による配列変数の初期化処理のタイムチャート（１／２）である。
【図４Ｂ】本願発明の第１の実施形態に係るベクトル演算処理装置１０による配列変数の初期化処理のタイムチャート（２／２）である。
【図５】本願発明の第２の実施形態に係るベクトル演算処理装置２０の構成を示すブロック図である。
【図６】本願発明の各実施形態に係るベクトル演算処理装置を実行可能な情報処理装置９００の構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
以下、本願発明の実施の形態について図面を参照して詳細に説明する。
【００１５】
＜第１の実施形態＞
図１は、本願発明の第１の実施の形態に係るベクトル演算処理装置１０の構成を示すブロック図である。ベクトル演算処理装置１０は、例えばスーパーコンピュータ等の、ベクトル演算を実行可能な情報処理装置である。ベクトル演算処理装置１０は、大別して、１以上の演算コア１１、メモリアクセス制御部１５、及び、メモリ１６を備えている。
【００１６】
演算コアは例えばＣＰＵ（Central Processing Unit）であり、例えば主記憶であるメモリ１６に記憶されているプログラム（ソフトウェア）を読み出して実行し、その実行結果をメモリ１６に格納する。メモリアクセス制御部１５は、演算コア１１からメモリ１６に対するアクセス（データの読み出しあるいは書き込み）を制御する。
【００１７】
演算コア１１は、ベクトル制御部１２、命令処理部１３、及び、アドレス制御部１４を備えている。尚、本実施形態では、命令処理部１３とアドレス制御部１４とをまとめて、実行部と称する場合がある。
【００１８】
命令処理部１３は、判定部１３１、及び、スカラレジスタ１３２を備える。命令処理部１３は、実行するプログラムに含まれる命令をフェッチし、フェッチした命令をデコードし、デコードした命令を実行する。
【００１９】
本実施形態に係る命令処理部１３によって実行される命令には、大別して、ベクトル演算命令とスカラ演算命令とがある。但し、ベクトル演算命令とは、例えば配列変数に含まれる複数の要素に対して、同様の演算をパイプライン処理により行う演算命令のことである。一方、スカラ演算命令は、上述したベクトル演算命令以外の演算命令であり、例えば配列変数でない（複数の要素を含まない）変数に対して個別の演算を行う演算命令のことである。命令処理部１３は、実行する命令に含まれる命令種別を表す情報（命令コード）によって、当該命令がベクトル演算命令であるのかスカラ演算命令であるのかを判別可能である。
【００２０】
本実施形態では以降、スカラ演算命令あるいはベクトル演算命令による、メモリ１６に対するデータの書き込み動作（ストア動作）について説明することとする。
【００２１】
命令処理部１３は、実行する命令がスカラ演算命令（ストア命令）である場合、当該命令によってメモリ１６に書き込むデータ、及び、書き込み先のアドレスを含む、当該命令に関する情報をスカラレジスタ１３２に格納する。命令処理部１３は、スカラレジスタ１３２に格納した当該命令に関する情報に基づいてメモリ１６に格納するメモリアクセスリクエストを生成することを指示する情報を、アドレス制御部１４へ送信する。
【００２２】
命令処理部１３は、実行する命令がベクトル演算命令（ベクトルストア命令）である場合、当該ベクトルストア命令をベクトル制御部１２へ転送することによって、当該ベクトルストア命令によってメモリ１６に書き込むベクトルデータの取得あるいは生成を、ベクトル制御部１２に指示する。命令処理部１３は、当該ベクトルデータをメモリ１６に格納するメモリアクセスリクエストを生成することを指示する情報を、アドレス制御部１４へ送信する。尚、ベクトル制御部１２は、後述する処理によって、当該ベクトルデータをアドレス制御部１４に送信する。
【００２３】
ベクトル制御部１２は、ベクトル演算器１２１、及び、ベクトルレジスタ１２２を備える。ベクトル制御部１２は、命令処理部１３から転送されたベクトルストア命令に基づき、当該ベクトルストア命令によってメモリ１６に書き込むベクトルデータを取得あるいは生成し、当該ベクトルデータをベクトルレジスタ１２２に格納する。ベクトル演算器１２１は、ベクトルレジスタ１２２に格納されたベクトルデータを用いてベクトル演算を実行する機能を備える。ベクトル制御部１２は、ベクトルレジスタ１２２に格納したベクトルデータを、アドレス制御部１４へ送信する。
【００２４】
アドレス制御部１４は、命令処理部１３から上述の通りに受信した情報に基づいて、メモリ１６に対するデータの書き込みを実行するメモリアクセスリクエストを生成する。アドレス制御部１４は、実行する命令がストア命令である場合は、メモリ１６に対する書き込みデータを命令処理部１３から受信し、実行する命令がベクトルストア命令である場合は、メモリ１６に対する書き込みデータをベクトル制御部１２から受信する。アドレス制御部１４は、生成したメモリアクセスリクエストをメモリアクセス制御部１５へ送信する。
【００２５】
メモリアクセス制御部１５は、アドレス制御部１４から受信したメモリアクセスリクエストを、４つのメモリモジュール１６１乃至１６４を備えるメモリ１６における４つのアクセスポートに送信する。尚、メモリ１６が備えるメモリモジュール及びアクセスポートの数は４つに限定されない。メモリ１６は、４つ以外のメモリモジュール及びアクセスポートを備えてもよい。
【００２６】
メモリアクセス制御部１５は、ルーティング制御部１５０、及び、メモリコントローラ１５１乃至１５４を備えている。メモリコントローラ１５１乃至１５４は、メモリ１６が備える４つのアクセスポートを介して、メモリモジュール１６１乃至１６４と通信可能に接続されている。ルーティング制御部１５０、及び、メモリコントローラ１５１乃至１５４の詳細については後述する。
【００２７】
次に、本実施形態に係るベクトル演算処理装置１０が、メモリ１６に記憶されている配列変数を初期化する動作について説明する。
【００２８】
命令処理部１３における判定部１３１は、命令処理部１３によりフェッチされた命令が、メモリ１６に記憶されている配列変数に対する初期化命令であるか否かを判定する。但し、本実施形態に係るベクトル演算処理装置１０が実行するプログラムでは、配列変数に対する初期化命令は、当該配列変数に含まれる全ての要素に対して所定の初期値（例えば「０」）を設定するベクトルストア命令により表されることとする。
【００２９】
判定部１３１は、例えば、フェッチされた命令が、配列変数に含まれる全ての要素に対して書き込む値が「０」であることを示す場合、当該命令が配列変数に対する初期化命令であると判定する。判定部１３１は、あるいは例えば、フェッチされた命令が示す命令種別が配列変数に対する初期化命令を示す場合に、当該命令が配列変数に対する初期化命令であると判定してもよい。ただしこの場合、配列変数に対する初期化命令を識別可能な命令種別を表す情報（命令コード）が、命令体系において定義されていることとする。
【００３０】
命令処理部１３は、フェッチした命令が、判定部１３１によって、配列変数に対する初期化命令であると判定された場合、当該命令をベクトル演算命令ではなくスカラ演算命令として処理することを決定する。即ち、命令処理部１３は、当該初期化命令を、ベクトル演算命令からスカラ演算命令に変換する。
【００３１】
命令処理部１３は、使用する初期値「０」を含む当該初期化命令に関する情報を、スカラレジスタ１３２へ格納する。但し、当該初期化命令に関する情報は、例えば、メモリ１６における初期化を行うベースアドレス（先頭アドレス）、及び、初期化する配列変数の要素数を含むこととする。命令処理部１３は、スカラレジスタ１３２へ格納した初期値「０」を含む当該初期化命令に関する情報を、アドレス制御部１４へ送信する。
【００３２】
アドレス制御部１４は、命令処理部１３から受信した初期化命令に関する情報に基づいて、メモリ１６における上述した４つのアクセスポートにアクセスするためのメモリアクセスリクエストを生成する。この際、アドレス制御部１４は、例えば、ベクトル演算処理装置１０の動作サイクルごとにアクセス先のアドレスを変更しながら、メモリ１６に対してアクセスするためのメモリアクセスリクエストを、アクセス先のアドレス分、連続的に生成する。即ち、スカラ演算命令に変換された初期化命令によるメモリ１６に対するアクセスは、ベクトル演算命令として実行される初期化命令によるメモリ１６に対するアクセスと同様である。
【００３３】
アドレス制御部１４は、生成した各アクセスポートに対するメモリアクセスリクエストを、メモリアクセス制御部１５へ送信する。
【００３４】
図２は、本実施形態に係るベクトル演算処理装置１０が、メモリ１６に格納されている配列変数に対する初期化を行なう際に、メモリモジュール１６１にアクセスするアドレスの範囲を例示する図である。図２において、１つの矩形は、配列変数の１要素を表す８バイトのメモリ領域を表す。各矩形における上段の値は、メモリ１６全体におけるアドレスを表し、各矩形における下段の値は、メモリモジュール１６１におけるローカルアドレスを表す。
【００３５】
図２に示す例では、例えば、メモリ１６におけるアドレス「０」〜「１２７」がメモリモジュール１６１に割り当てられ、メモリ１６におけるアドレス「１２８」〜「２５５」がメモリモジュール１６２に割り当てられ、メモリ１６におけるアドレス「２５６」〜「３８３」がメモリモジュール１６３に割り当てられ、メモリ１６におけるアドレス「３８４」〜「５１１」がメモリモジュール１６４に割り当てられている。そして、メモリ１６におけるアドレス「５１２」以降のアドレスも、同様の規則により、メモリモジュール１６１乃至１６４に割り当てられていることとする。
【００３６】
図２において、網掛けされた矩形は、初期化が行われるメモリ領域を表す。即ち、図２に示す例では、ベクトル演算処理装置１０は、メモリモジュール１６１における、アドレスが「６４」である先頭の要素から１２８個の要素に対する初期化を行う。ベクトル演算処理装置１０は、メモリモジュール１６２乃至１６４に格納されている配列変数の要素に対しても同様に初期化するので、この場合に初期化する配列変数の要素数は、合計５１２個である。
【００３７】
アドレス制御部１４は、図２に示す例の場合、メモリモジュール１６１へのアクセスポートに対する、メモリ１６におけるアドレス「６４」〜「４１５９」（即ち、メモリモジュール１６１におけるローカルアドレス「６４」〜「１０８７」）に「０」を書き込むメモリアクセスリクエストを生成する。尚、本実施形態に係るメモリモジュール１６１へのアクセス単位が例えば１２８バイト（即ち、図２における１行分の矩形が示すメモリ領域）である場合、アドレス制御部１４は、網掛けされた矩形を含む９行分のメモリ領域に対する、１個のメモリアクセスリクエストを生成する。アドレス制御部１４は、メモリモジュール１６２乃至１６４へのアクセスポートに対しても同様に、メモリアクセスリクエストを生成する。
【００３８】
メモリアクセス制御部１５は、アドレス制御部１４によって生成された、メモリモジュール１６１乃至１６４へのアクセスポートに対するメモリアクセスリクエストを、アドレス制御部１４から受信する。メモリアクセス制御部１５におけるルーティング制御部１５０は、メモリモジュール１６１へのアクセスポートに対するメモリアクセスリクエストを、メモリコントローラ１５１に入力する。ルーティング制御部１５０は、メモリモジュール１６２乃至１６４へのアクセスポートに対するメモリアクセスリクエストを、順に、メモリコントローラ１５２乃至１５４に入力する。
【００３９】
メモリコントローラ１５１は、ルーティング制御部１５０から入力されたメモリモジュール１６１へのアクセスポートに対するメモリアクセスリクエストを、メモリコントローラ１５１が備えるバッファ（不図示）に格納する。こののち、メモリコントローラ１５１は、当該メモリアクセスリクエストをメモリモジュール１６１に送信する。尚、本実施形態に係るメモリモジュール１６１へのアクセス単位が例えば上述した１２８バイトである場合、メモリコントローラ１５１は、１つのメモリアクセスリクエストにて、図２における網掛けされた矩形を含む９行分のメモリ領域に対するメモリアクセスを行う。これにより、メモリコントローラ１５１は、メモリモジュール１６１に記憶されている配列変数の要素を初期化する。
【００４０】
メモリコントローラ１５２乃至１５４も同様に、ルーティング制御部１５０から入力されたメモリモジュール１６２乃至１６４へのアクセスポートに対するメモリアクセスリクエストを、メモリコントローラ１５２乃至１５４が備えるバッファ（不図示）に格納する。こののち、メモリコントローラ１５２乃至１５４は、当該メモリアクセスリクエストを、順に、メモリモジュール１６２乃至１６４に送信する。これにより、メモリコントローラ１５２乃至１５４は、メモリモジュール１６２乃至１６４に記憶されている配列変数の要素を初期化する。
【００４１】
次に図３のフローチャートを参照して、本実施形態に係るベクトル演算処理装置１０が配列変数を初期化する動作（処理）について詳細に説明する。
【００４２】
命令処理部１３における判定部１３１は、フェッチした命令が、メモリ１６に記憶されている配列変数に対する初期化命令であるか否かを判定する（ステップＳ１０１）。フェッチした命令が配列変数に対する初期化命令でない場合（ステップＳ１０２でＮｏ）、全体の処理は終了する。
【００４３】
フェッチした命令が配列変数に対する初期化命令である場合（ステップＳ１０２でＹｅｓ）、命令処理部１３は、当該初期化命令をベクトル演算命令からスカラ演算命令に変換し、初期値「０」を含む当該初期化命令に関する情報を、スカラレジスタ１３２へ格納する（ステップＳ１０３）。命令処理部１３は、初期値「０」を含む当該初期化命令に関する情報を、アドレス制御部１４へ送信する（ステップＳ１０４）。
【００４４】
アドレス制御部１４は、命令処理部１３から受信した初期化命令に関する情報に基づいて、メモリ１６における４つのアクセスポートにアクセスするためのメモリアクセスリクエストを生成し、生成した各アクセスポートに対するメモリアクセスリクエストを、メモリアクセス制御部１５へ送信する（ステップＳ１０５）。
【００４５】
メモリアクセス制御部１５は、アドレス制御部１４から受信した各アクセスポートに対するメモリアクセスリクエストを、メモリ１６におけるメモリモジュール１６１乃至１６４に送信することによって、メモリ１６に記憶されている配列変数を初期化し（ステップＳ１０６）、全体の処理は終了する。
【００４６】
本実施形態に係るベクトル演算処理装置１０は、配列変数を初期化する処理を高速に実行することができる。その理由は、ベクトル演算処理装置１０は、配列変数に対する初期化を行う初期化命令を、ベクトル演算命令を用いずに、ベクトル演算命令と同様にメモリに対してアクセスするスカラ演算命令に変換することによって実行するからである。
【００４７】
以下に、本実施形態に係るベクトル演算処理装置１０によって実現される効果について、詳細に説明する。
【００４８】
ベクトル演算を実行可能なベクトル演算処理装置は、一般的に、配列変数に対する初期化処理を、ベクトルストア命令を発行し、配列変数に所定の初期値を書き込むことによって行っている。配列変数の初期化は、通常、ソフトウェアの実行が開始されたときなどに集中して行なわれることが多い。そしてベクトル演算命令を実行する場合、通常、所定のオーバーヘッドが発生することなどから、多数の大規模な配列変数を使用するソフトウェアを実行する場合では、配列変数を初期化するベクトルストア命令が演算コア内に滞留する場合がある。この場合、後続するベクトル演算命令も実行されずに演算コア内に滞留することになるので、性能が低下する問題が発生する。
【００４９】
このような課題に対して、本実施形態に係るベクトル演算処理装置１０は、ベクトル制御部１２と、判定部１３１と、実行部（命令処理部１３及びアドレス制御部１４）とを備え、例えば、図１乃至図３を参照して上述した通り動作する。即ち、ベクトル制御部１２は、メモリ１６に記憶されている配列変数に対する演算を、ベクトル演算命令により実行することを制御する。判定部１３１は、実行する命令が、当該配列変数に対する初期化を行う初期化命令であるか否かを判定する。そして、実行部は、当該初期化命令を、当該ベクトル演算命令を用いずに、ベクトル演算命令と同様にメモリ１６に対してアクセスするスカラ演算命令に変換することによって実行する。
【００５０】
図４Ａ及び４Ｂは、本実施形態に係るベクトル演算処理装置１０による配列変数の初期化処理のタイムチャートを例示する図である。また、図４Ａ及び４Ｂは、本実施形態に係るベクトル演算処理装置１０によって実現される効果を明確にするために、当該タイムチャートと、ベクトル演算処理装置１０が一般的なベクトル演算処理装置と同様にベクトル演算命令を用いて配列変数を初期化する場合における初期化処理のタイムチャートとを比較した結果を示している。尚、図４Ａ及び４Ｂが示すタイムチャートにおける横軸は、初期化命令の実行が開始されてからの経過時間を、ベクトル演算処理装置１０の動作サイクルＴにより表している。但し動作サイクルＴは、例えば、ベクトル演算処理装置１０が動作するクロック周期等である。
【００５１】
ベクトル演算処理装置１０が一般的なベクトル演算処理装置と同様に、ベクトル演算命令（ベクトルストア命令）を用いて配列変数を初期化する場合、図４Ａ及び４Ｂに示す通り、命令処理部１３による、ベクトル制御部１２に対して初期化命令を転送する処理が発生する。この場合、さらに加えて、ベクトル処理部１２による、初期値「０」をベクトルレジスタ１２２へ展開する処理、及び、ベクトルレジスタ１２２へ展開したベクトルストアデータをアドレス制御部１４へ送信する処理も発生する。
【００５２】
ベクトル演算処理装置１０は、ベクトル演算命令を用いてメモリ１６に記憶された配列変数を初期化する場合、図４Ａ及び４Ｂに示す通り、初期化命令の実行を開示してから２８Ｔ後に配列変数の初期化を完了する。
【００５３】
これに対して、ベクトル演算処理装置１０は、スカラ演算命令を用いてメモリ１６に記憶された配列変数を初期化する場合、図４Ａ及び４Ｂに示す通り、初期化命令の実行を開示してから１８Ｔ後に配列変数の初期化を完了する。即ち、本実施形態に係るベクトル演算処理装置１０は、一般的なベクトル演算処理装置と同様にベクトル演算命令を用いて配列変数を初期化する場合と比較して、１０Ｔ早く配列変数の初期化を完了することができる。
【００５４】
本実施形態に係るベクトル演算処理装置１０が、ベクトル演算命令を用いて配列変数を初期化する場合よりも早く配列変数の初期化を完了することができる理由は、以下の通りである。即ち、あるプログラムの実行において、配列変数に対する演算結果は、一般的に要素ごとに異なる値であるので、その演算結果をメモリに高速に格納する場合、要素ごとに異なる値を格納したベクトルレジスタを備えるベクトル制御部を用いたベクトル演算処理（ベクトルストア）を行う必要がある。しかしながら、その場合、上述した通り、ベクトル制御部を用いてベクトル演算処理を行うことに伴うオーバーヘッド（データを転送する処理やベクトルレジスタへデータを展開する処理など）が発生する。
【００５５】
本実施形態に係るベクトル演算処理装置１０は、配列変数を初期化する場合、その配列変数に書き込む値（初期値）が全て同一の値（例えば「０」）であるという特性に着目した構成を備え、ベクトル制御部１２を使用せずに、スカラ演算命令によって、その同一の値を配列変数の要素に一斉に書き込むメモリアクセスリクエストを連続的に発行する。即ち、ベクトル演算処理装置１０は、上述したオーバーヘッドを発生させることなく、ベクトルストア命令によるメモリ１６に対するアクセスと同様な連続的なアクセスを行うことによって、配列変数に対する初期化を行う。これにより、本実施形態に係るベクトル演算処理装置１０は、配列変数を初期化する処理を高速に実行することができる。
【００５６】
また、配列変数が記憶されたメモリ領域に対して初期値「０」を一斉に書き込むストア命令による本実施形態に係るメモリアクセスは、配列変数の要素ごとに初期値「０」を書き込むベクトルストア命令によるメモリアクセスと比較して、演算コア１１からメモリアクセス制御部１５に送信されるメモリアクセスリクエストの数を少なくすることができる。これにより、本実施形態に係るベクトル演算処理装置１０は、メモリアクセス制御部１５において、メモリアクセスリクエストに関する輻輳が発生することを抑制できるので、配列変数を初期化する処理を高速に実行することができる。また、メモリアクセス制御部１５において、メモリアクセスリクエストに関する輻輳が発生することを抑制する効果は、ベクトル演算処理装置１０が備える演算コア１１の数が多いほど大きくなることが期待できる。
【００５７】
また、本実施形態に係るベクトル演算処理装置１０は、メモリ１６に関して、本実施形態に特有の機能を追加していないので、汎用品などの既存の製品を使用可能である。即ち、本実施形態に係るベクトル演算処理装置１０は、上述した配列変数を初期化する処理を高速に実行する構成を、低コストで実現することができる
＜第２の実施形態＞
図５は、本願発明の第２の実施形態に係るベクトル演算処理装置２０の構成を示すブロック図である。
【００５８】
本実施形態に係るベクトル演算処理装置２０は、ベクトル制御部２１、判定部２２、及び、実行部２３を備える。
【００５９】
ベクトル制御部２１は、メモリ２４に記憶されている配列変数２４０に対する演算を、ベクトル演算命令２１０により実行することを制御する。
【００６０】
判定部２２は、実行する命令２００が、配列変数２４０に対する初期化を行う初期化命令２２０であるか否かを判定する。
【００６１】
実行部２３は、初期化命令２２０を、ベクトル演算命令２１０を用いずに、ベクトル演算命令２１０と同様にメモリ２４に対してアクセスするスカラ演算命令２３０に変換することによって実行する。
【００６２】
本実施形態に係るベクトル演算処理装置２０は、配列変数を初期化する処理を高速に実行することができる。その理由は、ベクトル演算処理装置２０は、配列変数２４０に対する初期化を行う初期化命令２２０を、ベクトル演算命令２１０を用いずに、ベクトル演算命令２１０と同様にメモリ２４に対してアクセスするスカラ演算命令２３０に変換することによって実行するからである。
【００６３】
＜ハードウェア構成例＞
上述した各実施形態において図１、及び、図５に示したベクトル演算処理装置における各部は、専用のＨＷ（ＨａｒｄＷａｒｅ）（電子回路）によって実現することができる。また、図１、及び、図５において、少なくとも、下記構成は、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。
・ベクトル制御部１２及び２１、
・命令処理部１３、
・判定部１３１及び２２、
・アドレス制御部１４、
・実行部２３、
・メモリアクセス制御部１５。
【００６４】
但し、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。この場合のハードウェア環境の一例を、図６を参照して説明する。
【００６５】
図６は、本願発明の各実施形態に係るベクトル演算処理装置を実行可能な情報処理装置９００（コンピュータ）の構成を例示的に説明する図である。即ち、図６は、図１、及び、図５に示したベクトル演算処理装置を実現可能なコンピュータ（情報処理装置）の構成であって、上述した実施形態における各機能を実現可能なハードウェア環境を表す。
【００６６】
図６に示した情報処理装置９００は、構成要素として下記を備えている。
・ＣＰＵ（Ｃｅｎｔｒａｌ＿Ｐｒｏｃｅｓｓｉｎｇ＿Ｕｎｉｔ）９０１、
・ＲＯＭ（Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）９０２、
・ＲＡＭ（Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙ）９０３、
・ハードディスク（記憶装置）９０４、
・通信インタフェース９０５、
・バス９０６（通信線）、
・ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ＿Ｄｉｓｃ＿Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）等の記録媒体９０７に格納されたデータを読み書き可能なリーダライタ９０８、
・モニターやスピーカ、キーボード等の入出力インタフェース９０９。
【００６７】
即ち、上記構成要素を備える情報処理装置９００は、これらの構成がバス９０６を介して接続された一般的なコンピュータである。情報処理装置９００は、ＣＰＵ９０１を複数備える場合もあれば、マルチコアにより構成されたＣＰＵ９０１を備える場合もある。
【００６８】
そして、上述した実施形態を例に説明した本願発明は、図６に示した情報処理装置９００に対して、次の機能を実現可能なコンピュータプログラムを供給する。その機能とは、その実施形態の説明において参照したブロック構成図（図１、及び、図５）における上述した構成、或いはフローチャート（図３）の機能である。本願発明は、その後、そのコンピュータプログラムを、当該ハードウェアのＣＰＵ９０１に読み出して解釈し実行することによって達成される。また、当該装置内に供給されたコンピュータプログラムは、読み書き可能な揮発性のメモリ（ＲＡＭ９０３）、または、ＲＯＭ９０２やハードディスク９０４等の不揮発性の記憶デバイスに格納すれば良い。
【００６９】
また、前記の場合において、当該ハードウェア内へのコンピュータプログラムの供給方法は、現在では一般的な手順を採用することができる。その手順としては、例えば、ＣＤ−ＲＯＭ等の各種記録媒体９０７を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等がある。そして、このような場合において、本願発明は、係るコンピュータプログラムを構成するコード或いは、そのコードが格納された記録媒体９０７によって構成されると捉えることができる。
【００７０】
以上、上述した実施形態を模範的な例として本願発明を説明した。しかしながら、本願発明は、上述した実施形態には限定されない。即ち、本願発明は、本願発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【符号の説明】
【００７１】
１０    ベクトル演算処理装置
１１    演算コア
１２    ベクトル制御部
１２１    ベクトル演算器
１２２    ベクトルレジスタ
１３    命令処理部
１３１    判定部
１３２    スカラレジスタ
１４    アドレス制御部
１５    メモリアクセス制御部
１５０    ルーティング制御部
１５１乃至１５４    メモリコントローラ
１６    メモリ
１６１乃至１６４    メモリモジュール
２０    ベクトル演算処理装置
２００    実行する命令
２１    ベクトル制御部
２１０    ベクトル演算命令
２２    判定部
２２０    初期化命令
２３    実行部
２３０    スカラ演算命令
２４    メモリ
２４０    配列変数
９００    情報処理装置
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０４    ハードディスク（記憶装置）
９０５    通信インタフェース
９０６    バス
９０７    記録媒体
９０８    リーダライタ
９０９    入出力インタフェース
【図１】
2020140284.tif 000003
【図２】
2020140284.tif 000004
【図３】
2020140284.tif 000005
【図４Ａ】
2020140284.tif 000006
【図４Ｂ】
2020140284.tif 000007
【図５】
2020140284.tif 000008
【図６】
2020140284.tif 000009