(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-07-01
(45)【発行日】2024-07-09
(54)【発明の名称】ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラム
(51)【国際特許分類】
G06F 17/16 20060101AFI20240702BHJP
G06F 9/38 20180101ALI20240702BHJP
G06F 9/345 20180101ALI20240702BHJP
G06F 9/312 20180101ALI20240702BHJP
G06F 9/34 20180101ALI20240702BHJP
【FI】
G06F17/16 A
G06F9/38 310G
G06F9/345 S
G06F9/345 A
G06F9/312 L
G06F9/34 350A
(21)【出願番号】P 2023044163
(22)【出願日】2023-03-20
【審査請求日】2023-03-20
(73)【特許権者】
【識別番号】000227205
【氏名又は名称】NECプラットフォームズ株式会社
(74)【代理人】
【識別番号】100080816
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】▲齋▼藤 卓磨
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2013-182420(JP,A)
【文献】特開平01-032378(JP,A)
【文献】特開平04-262457(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 9/38
G06F 9/345
G06F 9/312
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
データ制御装置とベクトルレジスタを含むベクトルプロセッサにおいて、
前記データ制御装置は、拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルを前記ベクトルレジスタにロードし、
ロードされた前記複数の短ベクトルを格納する前記ベクトルレジスタ内のアドレス間隔は、2の乗数である、ベクトルプロセッサ。
【請求項2】
前記拡張したベクトルロード命令のオペランドには、各多次元データを前記主記憶装置上で格納する主記憶アドレス間隔を表す数値が格納され、
前記データ制御装置は、前記数値が表す前記主記憶アドレス間隔に基づいて、前記主記憶装置から前記複数の短ベクトルを前記ベクトルレジスタにロードする、請求項1に記載のベクトルプロセッサ。
【請求項3】
前記データ制御装置は、前記多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、前記各次元方向のベクトル長に従って、前記ベクトルレジスタにロードする前記複数の短ベクトルを前記主記憶装置から取り出す、請求項1に記載のベクトルプロセッサ。
【請求項4】
前記ベクトルレジスタに格納された前記複数の短ベクトルを、単一のベクトルとして処理する演算部を、さらに含む、請求項1に記載のベクトルプロセッサ。
【請求項5】
データ制御装置とベクトルレジスタを含むベクトルプロセッサにおいて、
前記データ制御装置が、拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルを前記ベクトルレジスタにロードし、
ロードされた前記複数の短ベクトルを格納する前記ベクトルレジスタ内のアドレス間隔は、2の乗数である、ベクトルプロセッサの制御方法。
【請求項6】
前記拡張したベクトルロード命令のオペランドには、各多次元データを前記主記憶装置上で格納する主記憶アドレス間隔を表す数値が格納され、
前記データ制御装置は、前記数値が表す前記主記憶アドレス間隔に基づいて、前記主記憶装置から前記複数の短ベクトルを前記ベクトルレジスタにロードする、請求項5に記載のベクトルプロセッサの制御方法。
【請求項7】
前記データ制御装置は、前記多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、前記各次元方向のベクトル長に従って、前記ベクトルレジスタにロードする前記複数の短ベクトルを前記主記憶装置から取り出す、請求項5に記載のベクトルプロセッサの制御方法。
【請求項8】
コンピュータに、
拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルをベクトルレジスタにロードする処理を実行させ、
ロードされた前記複数の短ベクトルを格納する前記ベクトルレジスタ内のアドレス間隔は、2の乗数である、プログラム。
【請求項9】
前記拡張したベクトルロード命令のオペランドには、各多次元データを前記主記憶装置上で格納する主記憶アドレス間隔を表す数値が格納され、
前記コンピュータに、
前記数値が表す前記主記憶アドレス間隔に基づいて、前記主記憶装置から前記複数の短ベクトルを前記ベクトルレジスタにロードする処理を実行させる、請求項8に記載のプログラム。
【請求項10】
前記コンピュータに、
前記多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、前記各次元方向のベクトル長に従って、前記ベクトルレジスタにロードする前記複数の短ベクトルを前記主記憶装置から取り出す処理を実行させる、請求項8に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムに関する。
【背景技術】
【0002】
ベクトルレジスタに関する文献として、以下のような特許文献が挙げられる。
【0003】
特許文献1は、ベクトル処理操作を実行する処理回路を備える装置に関するものである。
【0004】
特許文献2は、1命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を実行する演算処理装置に関するものである。
【0005】
特許文献3は、ベクトル処理の効率性を向上するベクトル処理装置に関するものである。
【0006】
特許文献4は、複数個のサブレジスタに分割して使用するベクトルレジスタに関するものである。
【先行技術文献】
【特許文献】
【0007】
【文献】特表2020-501270号公報
【文献】特開2018-194946号公報
【文献】特開2013-182420号公報
【文献】特公昭58-053786号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
以下の分析は、本発明者によって与えられたものである。
【0009】
ベクトルプロセッサは、多数のデータに対して同一の演算処理を実施する、SIMD(Single Instruction,Multiple Data)演算と呼ばれるデータ処理に対して、高速に処理するために設計されたものである。ベクトルプロセッサは、多数のデータを高速に処理するために、ベクトルレジスタと呼ぶ、一例として、固定長の64の要素数を持つ、SIMD演算を実施する対象のデータを格納するレジスタを有しており、ベクトルレジスタの1ブロックの各要素に対して一括で高速に演算処理を実施できるよう最適化されている。
【0010】
主記憶装置からベクトルレジスタへベクトルをロードする従来のベクトルロード命令(以降、VLD(Vector Load)命令と称する場合もある)により、ベクトルレジスタの1ブロックの各要素に対して、ベクトルレジスタへ格納可能な最大長さである、一例として、64要素よりも短いベクトルを取得してロードする場合には、有効なデータを保持していない無効な要素が存在していた。すなわち、ベクトルの長さ(以降、ベクトル長、または、VL(Vector Length)とも称する)が非常に短いとき、ベクトルレジスタ内に、使われていない多くのブロックが存在する結果となる。このために、ベクトル演算時の効率が低下してしまうという課題がある。
【0011】
即ち、従来は、ベクトルプロセッサは、大量の短いベクトル(以降、短ベクトルとも称する)に演算を実施する用途を考慮していなかった。短ベクトルを有する多次元のデータを、VLD命令によって主記憶装置からベクトルレジスタに取得して格納する際に、レジスタブロックの長さよりも非常に短いベクトルを格納してしまい、レジスタブロックには有効なデータが少なく、無効なデータが多く存在していた。その結果、ベクトルレジスタの利用効率が悪く、また、ベクトル演算器を効率よく活用することができていなかった。
【0012】
特許文献4では、短いベクトルを効率よく処理するために、ベクトルレジスタをサブベクトルレジスタとして分割して利用することで、ベクトルレジスタのデータを保持していない無効なブロックを減らしていた。しかし、特許文献4の方法では、ベクトルレジスタをサブベクトルレジスタに分割したときの、データ移送制御を、サブベクトルレジスタに分割しない場合のデータ移送制御から変更する必要があり、制御方法が複雑になってしまうという課題がある。
【0013】
本発明は、主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短ベクトルを含む多次元のデータを、ベクトルレジスタに効率よく取得し格納して、ベクトルレジスタの利用効率とベクトル演算効率を向上させることを可能とすることに貢献する、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【0014】
本発明の第1の視点によれば、データ制御装置とベクトルレジスタを含むベクトルプロセッサにおいて、
データ制御装置は、拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルをベクトルレジスタにロードし、
ロードされた複数の短ベクトルを格納するベクトルレジスタ内のアドレス間隔は、2の乗数である、ベクトルプロセッサを、提供できる。
【0015】
本発明の第2の視点によれば、データ制御装置とベクトルレジスタを含むベクトルプロセッサにおいて、
データ制御装置が、拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルをベクトルレジスタにロードし、
ロードされた複数の短ベクトルを格納するベクトルレジスタ内のアドレス間隔は、2の乗数である、ベクトルプロセッサの制御方法を、提供できる。本方法は、ベクトルプロセッサの制御方法を行うコンピュータという、特定の機械に結びつけられている。
【0016】
本発明の第3の視点によれば、コンピュータに、
拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルをベクトルレジスタにロードする処理を実行させ、
ロードされた複数の短ベクトルを格納するベクトルレジスタ内のアドレス間隔は、2の乗数である、プログラム、を提供できる。
【0017】
なお、これらのプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【0018】
本発明によれば、主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短いベクトル(短ベクトル)を含む多次元のデータを、ベクトルレジスタに効率よく取得し格納して、ベクトルレジスタの利用効率とベクトル演算効率を向上させることを可能とすることに貢献する、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムを提供することができる。
【図面の簡単な説明】
【0019】
【
図1】本発明の一実施形態のベクトルプロセッサの構成の一例を示す図である。
【
図2】本発明の第1の実施形態のベクトルプロセッサを備えたコンピュータの構成の一例を示す図である。
【
図3】本発明の第1の実施形態のベクトルレジスタの構成の一例を示す図である。
【
図4】本発明の第1の実施形態の多次元データの一例を示す図である。
【
図5】従来技術により多次元データの短ベクトルをベクトルレジスタに格納した場合の一例を示す図である。
【
図6】本発明の第1の実施形態の短ベクトルをベクトルレジスタに格納した場合の一例を示す図である。
【
図7】本発明の第1の実施形態の拡張したVLD命令の一例を示す図である。
【
図8】従来技術によりベクトルデータをベクトルレジスタに格納するためのデータ制御装置の従来技術の処理のフローチャートを示す図である。
【
図9】本発明の第1の実施形態のベクトルデータをベクトルレジスタに格納するためのデータ制御装置の処理のフローチャートを示す図である。
【
図10】本発明のデータ制御装置を構成するコンピュータの構成を示す図である。
【発明を実施するための形態】
【0020】
はじめに、本発明の一実施形態の概要について図面を参照して説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。また、以降の説明で参照する図面等のブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号(データ)の流れを模式的に示すものであり、双方向性を排除するものではない。
【0021】
図1は、本発明の一実施形態のベクトルプロセッサの構成の一例を示す図である。
図1を参照すると、ベクトルプロセッサ10は、データ制御装置13とベクトルレジスタ(VR、Vector Register)11を含む。
【0022】
データ制御装置13は、拡張したベクトルロード命令が入力されると、規則的に主記憶装置12に配置されている多次元データの複数の短ベクトルをベクトルレジスタにロードする。ロードされた複数の短ベクトルを格納するベクトルレジスタ11内のアドレス間隔(ディスタンス)、例えば、ベクトルレジスタ11内に格納される短ベクトルの先頭のブロックのアドレス間隔は、2の乗数である。ここで、アドレス間隔が2の乗数であるとは、格納された2つの隣接する短ベクトルのベクトルレジスタ11内のアドレス間隔(ベクトルレジスタ11内の短ベクトルを格納するブロックのアドレス間隔)が、例えば2の1乗の場合には2であり、2の2乗の場合には4であり、2の3乗の場合には8である、というような間隔であることである。
【0023】
なお、従来のVLD命令を拡張して短ベクトルを効率よくベクトルレジスタに格納する新たな拡張したVLD命令を作成する。
【0024】
短ベクトルが規則的に主記憶装置12に保存されている場合、上記の使われていないベクトルレジスタのブロックを活用するために、拡張したVLD命令により、複数の短ベクトルをベクトルレジスタ上にロードする。ロードされたデータは、単一の長いベクトルと同様に、演算部に送出し処理する。演算部は、ベクトルレジスタに格納された前記複数の短ベクトルを、単一のベクトルとして処理する。従来のベクトルプロセッサのアーキテクチャから特別な変更を実施せずに、複数取得された短ベクトルに対して、ベクトル演算処理を実施するために、短ベクトルをベクトルレジスタ上に格納するブロックのアドレス間隔(ディスタンス)は2の乗数アドレスごとに区切る。
【0025】
多次元データの拡張したVLD命令のオペランドは、従来の一般的なVLD命令の空き領域を活用して実装する。すなわち、拡張したベクトルロード命令のオペランドには、従来の一般的なVLD命令の空き領域に、多次元データを主記憶装置12上で格納する主記憶アドレス間隔(ストライド)を表す数値が格納される。データ制御装置13は、数値が表す主記憶アドレス間隔に基づいて、主記憶装置12から複数の短ベクトルをベクトルレジスタ11にロードする。
【0026】
また、拡張したVLD命令の際に必要となるVL(ベクトル長、Vector Length)を指定するベクトル長指定命令も、拡張したVLD命令と同様に拡張して実装する。拡張したVLD命令と類似する、ベクトルレジスタを操作するその他の命令も拡張したVLD命令と同様に拡張する。すなわち、データ制御装置13は、多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、各次元方向のベクトル長に従って、ベクトルレジスタ11にロードする複数の短ベクトルを主記憶装置12から取り出す。なお、拡張したベクトル長指定命令から、ディスタンスが決定される。
【0027】
上記のように、本発明の一実施形態によれば、主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短いベクトル(短ベクトル)を含む多次元のデータを、ベクトルレジスタに効率よく取得し格納して、ベクトルレジスタの利用効率とベクトル演算効率を向上させることを可能とすることに貢献する、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムを提供することができる。
【0028】
[第1の実施形態]
次に、本発明の第1の実施形態のベクトルプロセッサについて、図面を参照して説明する。
図2は、本発明の第1の実施形態のベクトルプロセッサを備えたコンピュータの構成の一例を示す図である。
図2において、
図1と同一の参照符号を付した構成要素は、同一の構成要素を示すものとする。
【0029】
図2のコンピュータ100は、本発明の第1の実施形態のベクトルプロセッサ10と主記憶装置12を含む。
【0030】
本発明の第1の実施形態を
図2から
図9を参照して説明する。
図2に示すように、本発明の第1の実施形態のベクトルプロセッサ10は、ベクトルレジスタ(VR、Vector Register)11と、データ制御装置13と、演算部14と、制御部15及び、CPU(Central Processing Unit)200を含む。なお、主記憶装置12は、ベクトルプロセッサ10内に配置されてもよい。また、CPU200は、ベクトルプロセッサ10の外部に配置されてもよい。
【0031】
図3は、本発明の第1の実施形態のベクトルレジスタの構成の一例を示す図である。
図2に示すベクトルレジスタ11は、
図3に示す複数のレジスタブロック20を含む。
図3に示すレジスタブロック20は、単一のデータを格納するための、一例として0から63の付された64個のブロックを含む。
【0032】
なお、
図3においては、一例として、レジスタブロック20が64個のブロックで構成されているが、レジスタブロック20が有するブロックの数を64に限定することを意図するものではなく、レジスタブロック20が有するブロックの数は、64以外の他の数でもよい。
【0033】
図4は本発明の第1の実施形態の多次元データの一例を示す図である。
図4に示すように、2次元データの構造30は、各行が、演算の対象となる有効なデータを格納した要素31(斜線で示す)と、演算対象ではないデータを格納した要素32と、を備えている。
図4に示す、本発明の第1の実施形態の多次元データの一例は、7行100列の要素により構成される2次元データの一例である。
【0034】
なお、
図4においては、短ベクトルを有する2次元のデータの一例を示しているが、拡張したVLD命令の対象とする短ベクトルを有する多次元データの次元数を2に限定することを意図するものではない。多次元データの次元数は、後述の
図7に記載の本発明の第1の実施形態の拡張したVLD命令の一例に示すように、拡張したVLD命令のオペランドで指定できる限り、増やすことができる。
【0035】
本発明の第1の実施形態では、演算の対象となる有効なデータを格納した要素31は、主記憶装置12上では3つ連続したアドレスに格納されており、3要素の短ベクトルを構成している。なお、
図4に示す、演算の対象となる有効なデータを格納した要素31と演算対象ではないデータを格納した要素32を含む、各行の100個の要素のデータも、主記憶装置12上では連続して配置されている。3要素の短ベクトルの先頭要素は、主記憶装置12上では、100要素の間隔で配置されている。
【0036】
ベクトルプロセッサ10は、
図4で示す2次元データ全体に対して、SIMD演算を実施する。
【0037】
図5は、従来技術により多次元データの短ベクトルをベクトルレジスタに格納した場合の一例を示す図である。
図5に示す一例では、従来のVLD命令によって、ベクトルレジスタ11のレジスタブロック20には、有効なデータ41をブロック「0から2に、また、無効なデータ42を、ブロック3から63に格納している。ベクトルプロセッサ10は、主記憶装置12上の3要素の短ベクトルをベクトルレジスタ11に取得する際に、レジスタブロック20のサイズ分の64データを取得する。しかし、
図4に示すデータでは、3要素の短ベクトルの間隔が主記憶装置上では64アドレスより多く空いているため、1つの3要素の短ベクトルのみが、有効なデータ41としてレジスタブロック20のブロック0から2に格納され、残りの61個のブロック3から63には、無効なデータ42が格納される。従って、ブロック3から63は有効に利用されていない結果となる。
【0038】
図6は、本発明の第1の実施形態の3要素の短ベクトルをベクトルレジスタ11に格納した場合の一例を示す図である。
【0039】
図6に示す一例では、本発明で提案する拡張したVLD命令によって、レジスタブロック20には、有効なデータ41をブロック0から2、ブロック4から6に、また、無効なデータ43を、ブロック3、7に格納している。
図6に示すように、本発明の第1の実施形態では、3要素の短ベクトルを2次元方向で切り詰めて、主記憶装置12からレジスタブロック20に取得して格納することにより、従来は無効なデータを格納していたレジスタブロック20のブロック、一例として、
図6に示す、レジスタブロック20のブロック4、5、6、8等を、有効なデータ41を格納するために、有効活用する。
【0040】
短ベクトルを格納する間隔であるディスタンス44は、演算部14を、従来のベクトルプロセッサ10から変更することなく活用するために、2の乗数間隔となるようデータ制御装置13によって制御する。2の乗数間隔とは、例えば2の1乗の場合には2であり、2の2乗の場合には4であり、2の3乗の場合には8である、という間隔である。
【0041】
よって、
図6で示すように、
図4に記載した一例の2次元データをベクトルレジスタ11に格納する場合、3要素の短ベクトルを格納できる最小のディスタンス44は、4となり、レジスタブロック20に格納できる最大の短ベクトルの数は64を4で割った商である16個となる。16個以上の3要素の短ベクトルを持つ2次元データを、本発明の拡張したVLD命令によってベクトルレジスタ11に格納する場合には、複数回の拡張したVLD命令を実施する必要がある。
【0042】
図7は、本発明の第1の実施形態の拡張したVLD命令60の一例を示す図である。
【0043】
従来のVLD命令は、オペコード(OPECODE)61を表す1バイトと、データを格納するベクトルレジスタ11のアドレス62を表す1バイトの数値と、データが格納されている主記憶装置12のアドレス63を表す1バイトの数値と、主記憶装置12上でデータが格納されている主記憶アドレス間隔を示すストライド64を表す1バイトの数値と、の合計4バイトの領域を利用しており、オペランドのうち4バイトが未使用の領域となっている。
【0044】
これに対して、
図7に一例を示す、本発明の第1の実施形態の、拡張したVLD命令60では、オペコード61を表す1バイトと、データを格納するベクトルレジスタ11のアドレス62を表す1バイトの数値と、データが格納されている主記憶装置12のアドレス63を表す1バイトの数値と、主記憶装置12上で次元1のデータが格納されているストライド64を表す1バイトの数値に加えて、さらに、従来のVLD命令の4バイトの未使用の領域に、2次元より高次の多次元のデータの格納間隔であるストライドを表す数値を格納する。
【0045】
従来の1次元分のストライド(次元1のストライド64)と、次元2のストライド65、次元3のストライド66、次元4のストライド67および、次元5のストライド68の、拡張した4次元分のストライドと、を合わせることで、合計5次元のデータまで一度の拡張したVLD命令で、ベクトルレジスタに取得することができる。すなわち、拡張したベクトルロード命令のオペランドには、各多次元データを主記憶装置12上で格納する主記憶アドレス間隔(各次元のストライド)を表す数値が格納され、データ制御装置13は、その数値が表す主記憶アドレス間隔(各次元のストライド)に基づいて、主記憶装置から複数の短ベクトルをベクトルレジスタ11にロードすることができる。
【0046】
一例として、
図4に示す2次元データの場合のストライドについて、説明する。前述したように、
図4は、7行100列の行列の要素により構成される2次元データの一例である。
図4に記載の2次元データの場合、次元1のストライド64は「1」であり、また、次元2のストライド65は「100」である。
【0047】
なお、各次元のストライドには、値「ゼロ」を指定することが可能である。ストライドにゼロを指定した場合は、同じデータを連続で取得するコピーのような動作を行う。また、連続で取得するする回数は、各次元のベクトル長(VL)を指定するベクトル長指定命令によって決定される。一例として、2次元データの場合に、1次元目のストライドが「1」、2次元目のストライドが「ゼロ」、1次元目のベクトル長(VL)が「3」、2次元目のベクトル長(VL)が「2」の場合、拡張したVLD命令で指定した先頭のアドレスから、3要素の短ベクトルを2回コピーして、ベクトルレジスタ11にディスタンス「4」(2の乗数間隔)で格納する、という動作を実行する。
【0048】
さらに、
図4に示す2次元データ(7行100列)を高さ方向に2段重ねて構成された3次元データの場合について説明する。このような、3次元データの場合には、
図7に一例を示した本発明の第1の実施形態の、拡張したVLD命令60では、次元1(1次元目)のストライド64が「1」、次元2(2次元目)のストライド65が「100」、次元3(3次元目)のストライド66が、「100×7=700」となる。しかしながら、
図7に記載の拡張したVLD命令60は、各次元のストライドが8ビットのため、0から255の範囲でしか指定できない。従って、拡張したVLD命令60を分割する必要がある。また、ストライドの指定方法の他の例として、ひとつ下の次元を何回繰り返すか、という方法により、各次元のストライドを指定してもよい。例えば、
図4に示す2次元データ(7行100列)を高さ方向に2段重ねて構成された3次元データの場合、各ストライドを、次元1は1、次元2は100、次元3は7、というように指定してもよい。この場合は、実際の主記憶装置上のストライドは、次元2は1x100=100、次元3は1x100x7=700、のようにデータ制御装置13で計算することができる。このように、データ制御装置13は、各次元のストライドに基づいて、主記憶装置12から複数の短ベクトルをベクトルレジスタ11にロードする、ことができる。
【0049】
なお、
図7においては、8バイトの拡張したVLD命令の一例を示しているが、拡張したVLD命令のバイト数を8バイトに限定することを意図するものではなく、拡張したVLD命令は、8バイト以外の任意のバイト数で構成してもよい。また、
図7に記載の拡張したVLD命令60では、各ストライドを1バイトで指定しているが、例えば2バイトや、バイト指定に限らず10ビットや20ビットなど柔軟に指定するバイト数やビット数を変えて、各ストライドで指定できる整数の範囲を増やすようにしてもよい。なお、ビット数の指定の仕方を変えることにより、拡張したVLD命令60や他の命令で指定できる最大の次元数は、変動してもよい。
【0050】
また、VLD命令を拡張するのに加えて、多次元データの、各次元方向の長さを示すVL(ベクトル長、Vector Length)を指定するためのベクトル長指定命令も、拡張したVLD命令に合わせて、同様に拡張する。従来のベクトル長指定命令は、オペコードを表す1バイトと、各次元の長さを表す1バイトの数値と、対応するデータが格納されているベクトルレジスタのアドレスを表す1バイトの数値と、の合計3バイトの領域が利用されており、5バイトの未使用の領域がある。本発明の第1の実施形態の拡張したベクトル長指定命令では、従来のベクトル長指定命令の未使用の5バイトのうち4バイトに、多次元データの各次元方向のベクトルの長さを表す1バイトの数値を格納することで、拡張したVLD命令と同等の次元に対応することができる。
【0051】
また、ベクトルストア命令など、VLD命令に類似する、ベクトルレジスタを操作するその他の命令も、
図7で示す拡張したVLD命令のオペランドと同様に拡張する。
【0052】
次に、本発明の第1の実施形態のデータ制御装置の動作を説明する。
図8は、従来技術によりベクトルデータをベクトルレジスタに格納するためのデータ制御装置13の従来技術の処理のフローチャートを示す図である。
【0053】
図8を参照すると、従来技術のフローチャートでは、処理は、ステップS801で開始する。ステップS802で、従来のVLD命令と従来のベクトル長指定命令が、CPU200から、ベクトルプロセッサ10の制御部15に発行され、ベクトルプロセッサ10の制御部15は、従来のVLD命令と従来のベクトル長指定命令をデータ制御装置13へ送る。従来のベクトル長指定命令は、ベクトル長(VL)を含む。
【0054】
ステップS803で、データ制御装置13が、取得したいデータのアドレスを主記憶装置12に送信する。
【0055】
ステップS804で、主記憶装置12からベクトルレジスタ11にデータを取得するために、データ制御装置13は、主記憶装置12から取得したいデータと格納先のベクトルレジスタ11を紐づける。
【0056】
ステップS805で、データ制御装置13はデータをベクトルレジスタ11に格納し、また、ステップS806で、ベクトルレジスタ11に格納していないデータが存在するかどうかを確認する、即ち、データを取得する際に、データ制御装置13は、データがベクトルレジスタに格納された個数をカウントして、すべてのデータの取得が完了したかを確認する。ベクトルレジスタ11に格納していないデータが存在する場合(ステップS806、Yes)には、ステップS805へ戻り、データをベクトルレジスタ11に格納する。
【0057】
なお、すべてのデータの取得が完了したかを確認するために、カウントするべきデータの個数はベクトルの長さ(VL)から決定する。
【0058】
ベクトルレジスタに格納していない要素が存在しない場合(ステップS806、No)には、ステップS807へ進み、従来のVLD命令完了を、制御部15へ通知する。
【0059】
従来技術のフローチャートの処理は、ステップS808で終了する。
【0060】
図9は、本発明の第1の実施形態のベクトルデータをベクトルレジスタ11に格納するためのデータ制御装置13の処理のフローチャートを示す図である。
【0061】
図9に示す本発明の第1の実施形態の処理は、ステップS901で開始する。ステップS902で、拡張したVLD命令と拡張したベクトル長指定命令が、CPU200から、ベクトルプロセッサ10の制御部15に発行され、ベクトルプロセッサ10の制御部15は、拡張したVLD命令と拡張したベクトル長指定命令をデータ制御装置13へ送る。なお、拡張したベクトル長指定命令は、多次元データの各次元方向のベクトル長を指定する命令である。すなわち、拡張したベクトル長指定命令により、主記憶装置から取り出してくる各次元方向のデータの長さを決定し、拡張したVLD命令のオペランドの各次元のストライドに従って、主記憶装置12上の各次元のデータを格納するアドレスのストライドを決定する。
【0062】
ステップS903で、データ制御装置13が、主記憶装置12からベクトルレジスタ11に各短ベクトルのデータを取得するために、データ制御装置13が取得したい各短ベクトルのアドレスを主記憶装置12に送信する。すなわち、データ制御装置13は、拡張したVLD命令60の主記憶装置アドレス63と、各次元のストライド64から68と、拡張したベクトル長指定命令の各次元のベクトル長により、各短ベクトルを構成するデータの格納された主記憶装置12のアドレスを決定し、主記憶装置12に送信する。
【0063】
次に、ステップS904で、データ制御装置13は、まだアドレスを送信していない短ベクトルが存在するかどうかをチェックする。まだアドレスを送信していない短ベクトルが存在する場合(ステップS904、Yes)には、ステップS903へ戻り、取得したい各短ベクトルのデータのアドレスを主記憶装置12に送信する。まだアドレスを送信していない短ベクトルが存在しない場合(ステップS904、No)には、ステップS905へ進む。
【0064】
ステップS905で、主記憶装置12からベクトルレジスタ11にデータを取得するために、データ制御装置13は、主記憶装置12から取得したデータと格納先のベクトルレジスタ11を紐づける。
【0065】
ステップS906で、ステップS905の紐づけに従って、データ制御装置13は、主記憶装置12に送信したアドレスに対応して主記憶装置12から送信された、各短ベクトルのデータを、拡張したVLD命令60の格納先VRアドレス62と、拡張したベクトル長指定命令の各次元のベクトル長により決定された、2の乗数のディスタンスに基づいて、ベクトルレジスタ11のレジスタブロック20の各ブロック0から63に格納する。また、ステップS907で、ベクトルレジスタ11に格納していないデータが存在するかどうかを確認する。即ち、データを取得する際に、データ制御装置13は、データがベクトルレジスタ11に格納された個数をカウントして、すべてのデータの取得が完了したかを確認する。ベクトルレジスタに格納していないデータが存在する場合(ステップS907、Yes)には、ステップS906へ戻り、データをベクトルレジスタ11に格納する。
【0066】
ベクトルレジスタ11に格納していないデータが存在しない場合(ステップS907、No)には、ステップS908へ進み、拡張したVLD命令完了を、制御部15へ通知する。データ取得が完了したか判定するために、データ制御装置13でデータがベクトルレジスタ11に格納された個数をカウントして、すべてのデータの取得が完了したか確認する。カウントすべきデータの個数は、各短ベクトルのベクトル長(VL)とベクトルの数の積で決定される。
【0067】
以上説明したように、本発明の第1の実施形態によれば、主記憶装置上で短ベクトルが規則的に配置されている多次元のデータ構造に対して、拡張したVLD命令でデータを主記憶装置からベクトルレジスタに取得し格納する際に、従来の単一の短ベクトルをレジスタブロックに取得するのではなく、2次元以降の次元を展開してレジスタブロックに取得することにより、ベクトルレジスタの利用効率と演算部の利用効率を向上させ、従来と比較してベクトルプロセッサのスループットが向上することに貢献することができる。
【0068】
従って、本発明の第1の実施形態によれば、主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短いベクトル(短ベクトル)を含む多次元のデータを、ベクトルレジスタに効率よく取得し格納して、ベクトルレジスタの利用効率とベクトル演算効率を向上させることを可能とすることに貢献する、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムを提供することができる。
【0069】
[第2の実施形態]
次に、本発明の第2の実施形態について、説明する。
【0070】
本願の第1の実施形態では、
図7に記載の拡張したVLD命令によりアドレスとストライドを指定し、例えば、さらに別の命令で取得するベクトルの長さを指定する構成を記載している。しかしながら、ベクトルレジスタにデータを取得する方法をそのような命令の実施形態だけに制限することを意図するものではない。
【0071】
本発明の第2の実施形態では、一例として、
図7に示す拡張したVLD命令の各次元に対するストライドを指定するオペランドを減らし、空いたオペランドを用いてベクトルの長さを指定することによって、1つの命令のみでベクトルデータを取得するようにしてもよい。
【0072】
従って、本発明の第2の実施形態によれば、主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短いベクトル(短ベクトル)を含む多次元のデータを、ベクトルレジスタに効率よく取得し格納して、ベクトルレジスタの利用効率とベクトル演算効率を向上させることを可能とすることに貢献する、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムを提供することができる。
【0073】
[第3の実施形態]
次に、本発明の第3の実施形態について、説明する。
【0074】
図9に示す本発明の第1の実施形態の処理のフローチャートには、拡張したVLD命令により、主記憶装置からベクトルレジスタにデータを取得するためのデータ制御装置13のフローチャートを示している。本発明の第1の実施形態の処理のフローチャートでは、複数の短ベクトルを主記憶装置から取得するために、短ベクトルの数だけ繰り返しアドレスを送信してデータを収集するように記載している。しかし、短ベクトルを主記憶装置から取得する方法をこの方法に限定することを意図するものではない。
【0075】
本発明の第3の実施形態では、他の方法の一例として、例えば、データ制御装置13が、主記憶装置12に、取得したい短ベクトルデータの最初の短ベクトルデータの取得アドレスと、各短ベクトルの間隔と、短ベクトルの数と、を送信して、主記憶装置12の制御部でこれらのデータを集約し、ベクトルレジスタに向けて送り出す、という方法により実行してもよい。
【0076】
従って、本発明の第3の実施形態によれば、主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短いベクトル(短ベクトル)を含む多次元のデータを、ベクトルレジスタに効率よく取得し格納して、ベクトルレジスタの利用効率とベクトル演算効率を向上させることを可能とすることに貢献する、ベクトルプロセッサ、ベクトルプロセッサの制御方法、及び、プログラムを提供することができる。
【0077】
以上、本発明の各実施形態を説明したが、本発明は、上記した実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。例えば、各図面に示したネットワーク構成、各要素の構成、メッセージの表現形態は、本発明の理解を助けるための一例であり、これらの図面に示した構成に限定されるものではない。また、「A及び/又はB」は、A又はBの少なくともいずれかという意味で用いる。
【0078】
また、上記した一実施形態から第3の実施形態に示した手順は、本発明のベクトルプロセッサまたはベクトルプロセッサのデータ制御装置として機能するコンピュータ(
図10の9000)に、ベクトルプロセッサまたはベクトルプロセッサのデータ制御装置としての機能を実現させるプログラムにより実現可能である。このようなコンピュータは、
図10のCPU(Central Processing Unit)9010、通信インタフェース9020、メモリ9030、補助記憶装置9040を備える構成に例示される。すなわち、
図10のCPU9010にて、ベクトルプロセッサまたはベクトルプロセッサのデータ制御装置の制御プログラムを実行し、その補助記憶装置9040等に保持された各計算パラメータの更新処理を実施させればよい。
【0079】
メモリ9030は、RAM(Random Access Memory)、ROM(Read Only Memory)等である。
【0080】
即ち、上記した一実施形態から第3の実施形態に示したベクトルプロセッサまたはベクトルプロセッサのデータ制御装置の各部(処理手段、機能)は、上記コンピュータのプロセッサに、そのハードウェアを用いて、上記した各処理を実行させるコンピュータプログラムにより実現することができる。
【0081】
最後に、本発明の好ましい形態を要約する。
[第1の形態]
(上記第1の視点によるベクトルプロセッサを参照)
[第2の形態]
第1の形態に記載のベクトルプロセッサは、前記拡張したベクトルロード命令のオペランドには、各多次元データを前記主記憶装置上で格納する主記憶アドレス間隔を表す数値が格納され、
前記データ制御装置は、前記数値が表す前記主記憶アドレス間隔に基づいて、前記主記憶装置から前記複数の短ベクトルを前記ベクトルレジスタにロードする、ことが好ましい。
[第3の形態]
第1の形態に記載のベクトルプロセッサは、前記データ制御装置は、前記多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、前記各次元方向のベクトル長に従って、前記ベクトルレジスタにロードする前記複数の短ベクトルを前記主記憶装置から取り出す、ことが好ましい。
[第4の形態]
第1の形態に記載のベクトルプロセッサは、前記ベクトルレジスタに格納された前記複数の短ベクトルを、単一のベクトルとして処理する演算部を、さらに含む、ことが好ましい。
[第5の形態]
(上記第2の視点によるベクトルプロセッサの制御方法を参照)
[第6の形態]
第5の形態に記載のベクトルプロセッサの制御方法は、前記拡張したベクトルロード命令のオペランドには、各多次元データを前記主記憶装置上で格納する主記憶アドレス間隔を表す数値が格納され、
前記データ制御装置は、前記数値が表す前記主記憶アドレス間隔に基づいて、前記主記憶装置から前記複数の短ベクトルを前記ベクトルレジスタにロードする、ことが好ましい。
[第7の形態]
第5の形態に記載のベクトルプロセッサの制御方法は、前記データ制御装置は、前記多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、前記各次元方向のベクトル長に従って、前記ベクトルレジスタにロードする前記複数の短ベクトルを前記主記憶装置から取り出す、ことが好ましい。
[第8の形態]
(上記第3の視点によるプログラムを参照)
[第9の形態]
第8の形態に記載のプログラムは、前記拡張したベクトルロード命令のオペランドには、各多次元データを前記主記憶装置上で格納する主記憶アドレス間隔を表す数値が格納され、
前記コンピュータに、
前記数値が表す前記主記憶アドレス間隔に基づいて、前記主記憶装置から前記複数の短ベクトルを前記ベクトルレジスタにロードする処理を実行させる、ことが好ましい。
[第10の形態]
第8の形態に記載のプログラムは、前記コンピュータに、
前記多次元データの各次元方向のベクトル長を指定する拡張したベクトル長指定命令が入力されると、前記各次元方向のベクトル長に従って、前記ベクトルレジスタにロードする前記複数の短ベクトルを前記主記憶装置から取り出す処理を実行させる、ことが好ましい。
なお、上記第5と8の形態は、第1の形態と同様に、第4の形態に展開することが可能である。
【0082】
なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。さらに、上記引用した文献の各開示事項は、必要に応じ、本発明の趣旨に則り、本発明の開示の一部として、その一部又は全部を、本書の記載事項と組み合わせて用いることも、本願の開示事項に含まれるものと、みなされる。
【符号の説明】
【0083】
10 ベクトルプロセッサ
11 ベクトルレジスタ
12 主記憶装置
13 データ制御装置
14 演算部
15 制御部
20 レジスタブロック
30 2次元のデータ構造
31 演算の対象となる有効なデータを格納した要素
32 演算対象ではないデータを格納した要素
41 有効なデータ
42、43 無効なデータ
44 ディスタンス
60 拡張したVLD命令
61 オペコード
62 データを格納するベクトルレジスタ11のアドレス
63 データが格納されている主記憶装置12のアドレス
64 次元1のストライド
65 次元2のストライド
66 次元3のストライド
67 次元4のストライド
68 次元5のストライド
100 コンピュータ
200 CPU
9000 コンピュータ
9010 CPU
9020 通信インタフェース
9030 メモリ
9040 補助記憶装置
【要約】
【課題】主記憶装置の規則的だが連続していないアドレスに保存された、いくつかの短ベクトルを含む多次元のデータを、ベクトルレジスタに効率よく取得し格納する、ベクトルプロセッサを提供する。
【解決手段】ベクトルプロセッサは、データ制御装置とベクトルレジスタを含み、データ制御装置は、拡張したベクトルロード命令が入力されると、規則的に主記憶装置に配置されている多次元データの複数の短ベクトルをベクトルレジスタにロードし、ロードされた複数の短ベクトルを格納するベクトルレジスタ内のアドレス間隔は、2の乗数である。
【選択図】
図1