IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧

<>
  • 特許-プロセッサ、情報処理方法、プログラム 図1
  • 特許-プロセッサ、情報処理方法、プログラム 図2
  • 特許-プロセッサ、情報処理方法、プログラム 図3
  • 特許-プロセッサ、情報処理方法、プログラム 図4
  • 特許-プロセッサ、情報処理方法、プログラム 図5
  • 特許-プロセッサ、情報処理方法、プログラム 図6
  • 特許-プロセッサ、情報処理方法、プログラム 図7
  • 特許-プロセッサ、情報処理方法、プログラム 図8
  • 特許-プロセッサ、情報処理方法、プログラム 図9
  • 特許-プロセッサ、情報処理方法、プログラム 図10
  • 特許-プロセッサ、情報処理方法、プログラム 図11
  • 特許-プロセッサ、情報処理方法、プログラム 図12
  • 特許-プロセッサ、情報処理方法、プログラム 図13
  • 特許-プロセッサ、情報処理方法、プログラム 図14
  • 特許-プロセッサ、情報処理方法、プログラム 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-28
(45)【発行日】2022-12-06
(54)【発明の名称】プロセッサ、情報処理方法、プログラム
(51)【国際特許分類】
   G06F 9/318 20060101AFI20221129BHJP
   G06F 9/38 20060101ALI20221129BHJP
   G06F 17/16 20060101ALI20221129BHJP
【FI】
G06F9/318 A
G06F9/38 370C
G06F17/16 S
【請求項の数】 8
(21)【出願番号】P 2018177632
(22)【出願日】2018-09-21
(65)【公開番号】P2020047221
(43)【公開日】2020-03-26
【審査請求日】2021-08-05
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100124811
【弁理士】
【氏名又は名称】馬場 資博
(74)【代理人】
【識別番号】100088959
【弁理士】
【氏名又は名称】境 廣巳
(74)【代理人】
【識別番号】100097157
【弁理士】
【氏名又は名称】桂木 雄二
(74)【代理人】
【識別番号】100187724
【弁理士】
【氏名又は名称】唐鎌 睦
(72)【発明者】
【氏名】江副 健司
【審査官】漆原 孝治
(56)【参考文献】
【文献】国際公開第2017/064456(WO,A1)
【文献】特開平06-162068(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/318
G06F 9/38
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を備えたプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行い、
プロセッサ。
さらに、前記スカラプロセッシングユニットは、統合しないベクトル演算命令に、当該ベクトル演算命令の格納場所を表すアドレス情報を含めて前記ベクトルプロセッシングユニットに送信し、前記統合ベクトル演算命令に、統合前の2以上のベクトル演算命令の少なくとも1つの格納場所を表すアドレス情報の一部を含めて前記ベクトルプロセッシングユニットに送信する、
プロセッサ。
【請求項2】
請求項1に記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち相互に連続する2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【請求項3】
請求項1又は2に記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち、当該ベクトル演算命令のそれぞれの格納場所を表すアドレス情報に基づいて2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【請求項4】
請求項3に記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち、当該ベクトル演算命令のそれぞれの格納場所を表すアドレス情報の一部が一致する2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【請求項5】
請求項1乃至4のいずれかに記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち、相互に連続すると共に、当該ベクトル演算命令のそれぞれの格納場所を表すアドレス情報の一部である予め設定された上位アドレスが一致する2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【請求項6】
請求項1乃至5のいずれかに記載のプロセッサであって、
前記スカラプロセッシングユニットは、前記統合ベクトル演算命令に、統合前の1つのベクトル演算命令の格納場所を表すアドレス情報の予め設定された下位アドレスを含めて前記ベクトルプロセッシングユニットに送信し、
前記ベクトルプロセッシングユニットは、前記統合しないベクトル演算命令に含められたアドレス情報と、前記統合ベクトル演算命令に含められた前記下位アドレスに基づいて、当該統合ベクトル演算命令の統合前の2以上のベクトル演算命令の格納場所を表すアドレス情報を取得する、
プロセッサ。
【請求項7】
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を備えたプロセッサによる情報処理方法であって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行い、
さらに、前記スカラプロセッシングユニットは、統合しないベクトル演算命令に、当該ベクトル演算命令の格納場所を表すアドレス情報を含めて前記ベクトルプロセッシングユニットに送信し、前記統合ベクトル演算命令に、統合前の2以上のベクトル演算命令の少なくとも1つの格納場所を表すアドレス情報の一部を含めて前記ベクトルプロセッシングユニットに送信する、
情報処理方法。
【請求項8】
プロセッサに、
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を実現させると共に、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行い、
さらに、前記スカラプロセッシングユニットは、統合しないベクトル演算命令に、当該ベクトル演算命令の格納場所を表すアドレス情報を含めて前記ベクトルプロセッシングユニットに送信し、前記統合ベクトル演算命令に、統合前の2以上のベクトル演算命令の少なくとも1つの格納場所を表すアドレス情報の一部を含めて前記ベクトルプロセッシングユニットに送信する、
ことを実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ベクトル命令を実行するプロセッサ、情報処理方法、プログラムに関する。
【背景技術】
【0002】
近年、半導体プロセスの微細化によりLSI(Large Scale Integration)に搭載できる論理回路は飛躍的に増加し、CPU(Central Processing Unit)の演算性能は向上している。この演算性能の向上は、コア数を増加させるマルチコア化による寄与が大きく、単一コア当たりの性能向上は鈍化しつつある。しかしながら、マルチコア化による性能向上を享受するために必要な並列化が困難なプログラムも多数存在するため、単一コアの性能向上は非常に重要である。
【0003】
単一コアの性能向上を行う手法として、1命令で複数のデータと複数の演算器を動作可能にするSIMD(Single Instruction Multiple Data)技術やベクトル技術が広く知られている。特に、ベクトル技術を利用するベクトルプロセッサでは、従来からベクトル長が長い場合は処理する要素数が多いため、各命令の発行・実行・終了の処理サイクルが長くなり、各処理時間に十分な余裕ができ、高い性能を出しやすい傾向があった。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2012-203544号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、ベクトル長が短くなるほど処理する要素数が少なくなり、各命令の発行・実行・終了の処理サイクルが短くなるため、各処理時間に余裕が減り性能を出しにくくなるという課題がある。換言すると、ベクトル命令において1命令で処理する要素数であるベクトル長が短くなるほど、性能向上を図るためには、ベクトル命令の発行レートの向上が極めて重要となる。
【0006】
例えば、図1に示したベクトル演算器の構成を考える。この構成では、1つのVPU(ベクトルプロセッシングユニット)あたりベクトル演算器ユニット32個からなる構成で、1つのベクトル演算器ユニットあたり同時に2命令処理が可能な構成の場合に、持続的なピーク性能を得るための命令発行レートを計算すると、以下のようになる。
【0007】
ベクトル長が256の場合:1つのベクトル命令の処理時間=256/32=8クロックになる。また、同時に2命令処理が可能なため、8/2=4クロック毎にベクトル命令を1つ発行することが必須になる。
ベクトル長が128の場合:1つのベクトル命令の処理時間=128/32=4クロックになる。また、同時に2命令処理が可能なため、4/2=2クロック毎にベクトル命令を1つ発行することが必須になる。
ベクトル長が64の場合:1つのベクトル命令の処理時間=64/32=2クロックになる。また、同時に2命令処理が可能なため、2/2=1クロック毎にベクトル命令を1つ発行することが必須になる。
ベクトル長が32の場合:1つのベクトル命令の処理時間=32/32=1クロックになる。また、同時に2命令処理が可能なため、1/2=0.5クロック毎にベクトル命令を1つ発行することが必須になる。つまり、1クロックに2つのベクトル命令発行が必要になる。
【0008】
上記の例のように、ベクトル長が短くなるほどベクトル命令の発行レートを向上させる必要があることが明らかである。
【0009】
ここで、命令発行レートを向上させる技術としては、命令発行パイプラインの複数パイプライン化がある。ところが、各パイプラインに対して先行命令との依存関係を判定して命令発行する機能が必要になり、命令発行制御機能の大幅な複雑化が問題になる。例えば、1つの命令発行パイプライン(パイプ1)で構成される場合、パイプ1の先行命令を確認するのみで良いが、2つの命令発行パイプライン(パイプ1とパイプ2)から構成される場合、パイプ1に存在する命令はパイプ1の先行命令とパイプ2の先行命令を確認する必要があり、パイプ2に存在する命令はパイプ2の先行命令とパイプ1の先行命令を確認する必要がある。そのため、4倍の先行命令との依存関係を判定する必要があるため制御回路の複雑化が避けられない。
【0010】
その他の命令発行レートを向上させる技術としては、命令発行ユニットの周波数のみ上げる方法があるが、命令発行ユニットの消費電力上昇や高クロック化に伴い遅延設計の難易度が上がるため問題となる。
【0011】
また、特許文献1に記載のように、スカラストア命令を対象として命令パケットを結合する技術も開示されている。しかしながら、かかる技術では、ベクトル演算命令に適用できず、依然として上述した問題が残る。
【0012】
このため、本発明の目的は、ベクトル命令の発行レートを向上させること、を実現することができるプロセッサ、情報処理方法、プログラムを提供することにある。
【課題を解決するための手段】
【0013】
本発明の一形態であるプロセッサは、
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を備えたプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
という構成をとる。
【0014】
また、本発明の一形態である情報処理方法は、
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を備えたプロセッサによる情報処理方法であって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
という構成をとる。
【0015】
また、本発明の一形態であるプログラムは、
プロセッサに、
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を実現させると共に、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
ことを実現させる、
という構成をとる。
【発明の効果】
【0016】
本発明は、以上のように構成されることにより、ベクトル命令の発行レートを向上させることができる。
【図面の簡単な説明】
【0017】
図1】本発明の背景技術を説明するための図である。
図2】本発明の実施形態1におけるプロセッサの構成を示すブロック図である。
図3図2に開示したプロセッサによって処理される情報の一例を示す図である。
図4図2に開示したプロセッサによる処理の様子を説明するための図である。
図5図2に開示したプロセッサによる処理の様子を説明するための図である。
図6図2に開示したプロセッサによって処理される情報の一例を示す図である。
図7図2に開示したプロセッサによって処理される情報の一例を示す図である。
図8図2に開示したプロセッサによって処理される情報の一例を示す図である。
図9図2に開示したプロセッサによる処理の様子を説明するための図である。
図10図2に開示したプロセッサによって処理される情報の一例を示す図である。
図11図2に開示したプロセッサによる処理の様子を説明するための図である。
図12図2に開示したプロセッサによる処理の様子を説明するための図である。
図13図2に開示したプロセッサによる処理の様子を示す図である。
図14図2に開示したプロセッサによる処理の様子を示す図である。
図15】本発明の実施形態2におけるプロセッサの構成を示すブロック図である。
【発明を実施するための形態】
【0018】
<実施形態1>
本発明の第1の実施形態を、図2乃至図14を参照して説明する。図2は、プロセッサの構成を説明するための図であり、図3乃至図14は、プロセッサによる処理の様子を説明するための図である。
【0019】
[構成]
図2に示すように、本発明におけるプロセッサは、スカラ演算を行うSPU(スカラプロセッシングユニット)100と、ベクトル演算をVPU(ベクトルプロセッシングユニット)200と、を備え、ベクトル演算命令を実行するものである。特に、本実施形態におけるプロセッサは、複数命令を同時にデコードする機能(4命令同時デコード構成とする)を有し、演算命令の演算例外時にプログラムのデバッグ用途として該当演算命令のインストラクションカウンタIC(演算例外IC)、つまり、当該演算命令の格納場所を表すアドレス情報、を出力する機能を有することとする。そして、本発明のプロセッサは、かかる機能に加えて、後述するよう複数のベクトル命令を1命令に圧縮し復元する機能を提供するものである。
【0020】
また、本実施形態におけるプロセッサは、ベクトル命令を実行可能なプロセッサとして、後述する図3で示すような4オペランド形式の命令を実行する。例えば、Fused Multiply ADD(FMA)命令で、VFMA V0←V1+(V2*V3)のような命令を実行可能とする。さらに、VFMA V0←S1+(V2*V3)やVFMA V0←V1+(S1*V3)のようなV1、V2の代わりにS1などのスカラレジスタも指定できる命令を実行可能とする。他には、マスク演算用のマスクレジスタが指定可能とする。ただし、マスク演算に関しては、本発明で実行する命令の圧縮・復元の制御に対して影響を及ぼさないので説明を省略する。なお、ベクトル長は、ベクトル命令において1命令で処理する要素数を設定する値で、図示されていないベクトル長設定レジスタの値を使用する。本実施例では、ベクトル長=0~256の値をとるとする。また、ICは、56ビットアドレスとし、演算例外ICは、256バイト毎に基準のICを設けるとする。
【0021】
以下、具体的に、図2を参照して、本実施形態におけるプロセッサの構成について説明する。上記SPU100は、命令キャッシュ101、命令デコーダ121、命令スケジューラ141、スカラレジスタ161、ベクトル命令発行制御部181、を有する。さらに、上記命令デコーダ121は、命令デコーダ制御部122、ベクトル演算命令判定部123、ベクトル演算例外ICレジスタ124、ベクトル演算命令圧縮制御部125、を有する。
【0022】
また、上記VPU200は、命令デコーダ201、命令スケジューラ221、ベクトルレジスタ241、ベクトル演算ユニット群261、を有する。そして、命令デコーダ201は、命令デコーダ制御部202、ベクトル演算例外ICレジスタ203、ベクトル演算命令復元制御部204、を有する。
【0023】
また、上記SPU100とVPU200は、各構成要素を接続する信号線110、130、131、132、133、134、135、150、170、190、210、211、212、213、230、250を有する。
【0024】
以下、上述したSPU100とVPU200の構成の概略を説明する。なお、各構成の詳細については、動作説明時にさらに詳しく説明する。
【0025】
上記SPU100の命令デコーダ121は、図3に示したフォーマット(命令長は8バイト)のベクトル演算命令を処理する場合に、2つの条件を判定してベクトル演算命令の圧縮が可能かどうかを判定する。
条件1:図4に示した組み合わせで同時にデコード可能な命令においてベクトル演算命令が命令圧縮対象になるか。つまり、同時にデコード可能な命令のうち、相互に連続する命令であるか。
条件2:図5に示した基準命令の演算例外ICレジスタが有効であり、ベクトル演算命令の演算例外ICが一致しているか。つまり、ベクトル演算命令の演算例外ICのアドレスの一部である上位アドレスが一致するか。
【0026】
具体的に、SPU100の命令デコーダ121の構成についてさらに詳述する。命令デコーダ121は、ベクトル演算命令を検出した場合に、当該ベクトル演算命令のICと、基準命令の演算例外ICレジスタと、の比較を行う。このとき、図5に示すように、基準命令の演算例外ICが「有効bit=0」の場合は、有効なベクトル演算命令ICが登録されていない状態であるため、該当ベクトル演算命令のICを、基準命令の演算例外ICとして登録し、命令圧縮なし、と判定する。ここで、256バイト毎に基準のICを設ける場合は、ICの下位8ビットの省略が可能である。つまり、ベクトル演算命令の格納場所を表すアドレス情報の一部である上位アドレスのみを、基準命令の演算例外ICとして登録する。これにより、連続する32個分のベクトル演算命令の格納場所を表すアドレス情報が、基準命令の演算例外ICとして登録される。
【0027】
また、命令デコーダ121は、図5に示すように基準命令の演算例外ICが「有効bit=1」の場合は、ベクトル演算例外ICレジスタ124に登録されている基準命令の演算例外ICと、ベクトル演算命令のICの上位アドレスと、を比較する。そして、これらが一致した場合は、命令圧縮あり、不一致の場合は、命令圧縮なし、と判定し、該当ベクトル演算命令のICを基準命令の演算例外ICとして新たに登録する。つまり、先行するベクトル演算命令のICの一部が基準命令の演算例外ICとして登録されているため、先行するベクトル演算命令のICの一部である上位アドレスと、後続のベクトル演算命令のICの一部である上位アドレスと、が一致する場合には、命令圧縮あり、と判定することとなる。
【0028】
命令デコーダ121は、上述したように、命令圧縮なし、と判定した場合は、図6に示すような通常のベクトル演算命令の形式で、SPU100の命令スケジューラ141のエントリに格納する。このとき、命令デコーダ121は、同時に、エントリに該当ベクトル演算命令のICを、演算例外ICとして付加して、エントリに格納する。
【0029】
命令デコーダ121は、命令圧縮あり、と判定した場合は、対象となる2つのベクトル演算命令の圧縮を行い、当該2つのベクトル演算命令を、図7に示すような形式で1つの統合ベクトル演算命令として統合し、SPU100の命令スケジューラ141の1エントリに格納する。そして、命令デコーダ121は、命令の圧縮を行った場合は、図7に示すエントリの一部である「byte14」部分を、基準命令の演算例外ICからの相対IC、として利用する。具体的には、「byte14」部分を、図8に示すように、未使用ビット5-7(命令が8バイト固定長のアーキテクチャの場合に下3ビットは未使用になる)に「命令圧縮bit」を設け、かかるbitに「1」を設定する。
【0030】
SPU100の命令スケジューラ141は、1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整えば1エントリ毎に命令を発行する。なお、SPU100では、ベクトル命令はインオーダーで発行する。このとき、命令スケジューラ141は、ベクトル演算命令でない場合と、ベクトル演算命令かつ命令圧縮bit=0の場合は、1命令分の依存関係のあるスカラレジスタ161のデータが準備できたかどうかを確認する。ベクトル演算命令かつ命令圧縮bit=1の場合は、圧縮されて1つの命令に統合されている元となる2命令分の依存関係のあるスカラレジスタ161のデータが準備できたかどうかを確認する。そして、SPU100は、ベクトル演算命令で指定されているスカラレジスタ161からデータを読み出し、ベクトル命令発行制御部181へ送る。
【0031】
上記ベクトル命令発行制御部181は、ベクトル演算命令でない場合は、1命令分の各種情報とスカラレジスタデータをVPU200へ発行する。命令圧縮bit=0の場合は、図6に示すような1命令分の各種情報と演算例外ICと1つのスカラレジスタデータを、VPU200へ発行する。命令圧縮bit=1の場合は、図8に示すような1つの命令に統合された2命令分の各種情報と演算例外ICの基準命令からの相対ICと2つのスカラレジスタデータをVPU200へ発行する。
【0032】
上記VPU200の命令デコーダ201は、SPU100から命令を受け取ると、かかる命令に応じて以下のように作動する機能を有する。まず、ベクトル演算命令でない場合は、1命令分の各種情報をVPU200の命令スケジューラ221に格納する。
【0033】
また、命令デコーダ201は、命令圧縮bit=0の場合は、1命令分の各種情報と演算例外ICを、VPU200の命令スケジューラ221の1エントリに格納する。同時に、かかる命令に含まれる図9に示した演算例外ICを、基準命令の演算例外ICレジスタに登録して保存する。このとき、1命令に含まれている演算例外ICの上位6バイトを、基準命令の演算例外ICとして登録する。
【0034】
また、命令デコーダ201は、命令圧縮bit=1の場合は、1つのベクトル演算命令である2命令分の各種情報と演算例外ICを、VPU200の命令スケジューラ221の2エントリに格納して、2つの命令に復元する。このとき、2エントリつまり2つの命令において、演算例外ICについては、図10に示すように、1命令目の演算例外ICの上位6バイトとしては、上述したように登録されている基準命令の演算例外ICを利用し、下位1バイトは、SPU100から受け取った命令のbyte14に位置する「基準命令からの相対IC」を組み合わせ、圧縮前の演算例外ICを復元して格納する。2命令目の演算例外ICは、上位6バイトとしては、登録されている基準命令の演算例外ICを利用し、下位1バイトは、SPU100から受け取った命令のbyte14に位置する「基準命令からの相対IC」+「命令長(8バイト命令の場合は+8)」を計算して、圧縮前の演算例外ICを復元して格納する。
【0035】
VPU200の命令スケジューラ221は、1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整えば1エントリ毎に発行する。VPU200では、アウトオブオーダーでベクトル命令を実行する。そして、VPU200は、命令で指定されているベクトルレジスタ241のデータを読み出しベクトル演算ユニット群261へ送る。ベクトル演算ユニット群261は、ベクトルレジスタ241のデータを入力して、演算を行う。
【0036】
[動作]
次に、上述したプロセッサの動作を説明する。なお、以下では、プロセッサに対する命令が、ベクトル演算命令の場合、ベクトル演算命令でない場合、とに分けて説明する。
【0037】
・ベクトル演算命令の場合
まず、SPU100内の処理について説明する。命令キャッシュ101は、同時に複数命令(本実施例では4命令)を、信号線110を介して命令デコーダ制御部122へ出力する。
【0038】
命令デコーダ制御部122は、同時に複数命令デコード(本実施例では4命令)を行い、命令デコード結果と命令に付随する各種情報を、信号線130を介してベクトル演算命令圧縮制御部125へ出力する。また、命令デコーダ制御部122は、命令デコード結果を、信号線131を介してベクトル演算命令判定部123へ出力する。
【0039】
ベクトル演算命令判定部123は、命令デコード結果から、同時にデコードした4命令が、図11に示した16通りの命令の組み合わせで、ベクトル演算命令が連続しているかどうかをチェックする。このとき、ベクトル演算命令同士が連続する場合は命令圧縮対象と判定し、そうでない場合は命令圧縮対象外と判定する。そして、ベクトル演算命令判定部123は、命令が命令圧縮対象か否かを判定して、重複ケースを除く7通りの命令の組み合わせを、信号線132を介してベクトル演算命令圧縮制御部125へ出力する。
【0040】
続いて、ベクトル演算命令判定部123は、ベクトル演算命令のデコード情報と命令ICを、信号線133を介してベクトル演算例外ICレジスタ124へ出力する。そして、ベクトル演算命令判定部123は、ベクトル演算命令に対して、当該命令のICとベクトル演算例外ICレジスタ124との比較を行う。このとき、同時タイミングで命令デコードを行ったベクトル演算命令の中では、先行する命令からICの比較を行う。
【0041】
ベクトル演算例外ICレジスタ124と比較した命令のICの一部が一致した場合は、信号線134を介して、ベクトル演算命令圧縮制御部125へIC比較結果を出力する。ICが不一致だった場合(不一致には有効bit=0も含む)は、ベクトル演算例外ICレジスタ124に不一致になったベクトル演算命令のICを、基準命令の演算例外ICとして登録して有効bit=1にする。なお、後続のベクトル演算命令は、先行するベクトル演算命令がベクトル演算例外ICレジスタ124に登録するICと必ず一致するICになるため、IC一致として扱う。このようなIC比較結果を、信号線134を介してベクトル演算命令圧縮制御部125へ出力する。
【0042】
ベクトル演算命令圧縮制御部125は、命令圧縮対象あるいは命令圧縮対象外の判定結果と、IC一致結果と、に基づいて、図12に示した組み合わせで、命令圧縮なし、と、命令圧縮あり、を判定する。つまり、同時にデコードした複数(ここでは4つ)のベクトル演算命令のうち、命令が相互に連続しており、かつ、かかる命令の格納場所を表すアドレス情報であるICの予め設定された上位ビットが一致するベクトル演算命令を、命令圧縮あり、と判定する。
【0043】
そして、ベクトル演算命令圧縮制御部125は、「命令圧縮なし」の場合は、命令を信号線135を介して命令スケジューラ141に出力する。命令スケジューラ141は、受け取った命令を、図6に示した命令1の圧縮しない通常のベクトル演算命令の形式で、1エントリに1命令ずつ格納する。同時に、エントリに該当命令のICを演算例外ICとして付加してエントリに格納する。また、図8に示したbyte14で命令圧縮bit=0にする。
【0044】
また、ベクトル演算命令圧縮制御部125は、「命令圧縮あり」の場合は、命令を信号線135を介して命令スケジューラ141に出力する。命令スケジューラ141は、受け取った命令を、図7に示した2つ命令を統合して圧縮した1つのベクトル演算命令の形式で、1エントリに2命令ずつ格納する。同時に、1つのエントリのbyte14に、1命令目の演算例外ICの下位バイトを基準命令からの相対ICとして付加して、エントリに格納する。また、図8に示したbyteバイト14で命令圧縮bit=1にする。
【0045】
この後の動作は、SPU100の命令スケジューラ141にエントリとして格納されたベクトル演算命令のbyte14に含まれる上述した「命令圧縮bit」の値により異なる。
【0046】
「命令圧縮bit=0」の場合について説明する。命令スケジューラ141は、格納されている1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整い命令順序が保証できれば1エントリ毎に命令を、信号線150を介して出力する。ここで、スカラレジスタに関して1命令分の依存関係のあるスカラレジスタのデータが準備できたかを確認する。命令順序保証に関して、SPU100ではベクトル命令はインオーダーで発行する。スカラレジスタ161は、受け取った命令中にスカラレジスタのリード指定が存在する場合に、信号線170を介してスカラレジスタのデータを出力する。ベクトル命令発行制御部181は、1命令分の各種情報とスカラレジスタデータを、信号線190を介してVPU200へ発行する。
【0047】
VPU200内の処理について説明する。命令デコーダ制御部202は、受け取った命令のデコードを行い、命令デコード結果と命令に付随する各種情報を、信号線210を介してベクトル演算命令復元制御部204へ出力する。また、命令デコード結果と演算例外ICを、信号線211を介してベクトル演算例外ICレジスタ203へ出力する。ベクトル演算例外ICレジスタ203は、ベクトル演算命令かつ命令圧縮bit=0の場合に、該当命令のベクトル演算例外ICの上位6バイトを、図9に示した基準命令の演算例外ICとして登録して有効bit=1にする。
【0048】
ベクトル演算命令復元制御部204は、ベクトル演算命令かつ命令圧縮bit=0の場合、命令圧縮なし、と判定して命令を復元せずにそのままの形式で信号線213を介して命令スケジューラ221へ出力する。命令スケジューラ221は、受け取った命令を1エントリに1命令ずつ格納する。命令スケジューラ221は、格納されている1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整い命令順序が保証できれば1エントリ毎に命令を、信号線230を介して出力する。命令順序保証に関して、VPU200ではベクトル命令はアウトオブオーダーで発行する。ベクトルレジスタ241は、受け取った命令中にベクトルレジスタのリード指定が存在する場合に信号線250を介してベクトルレジスタのデータを出力する。ベクトル演算ユニット群261は、ベクトルレジスタのデータを受け取り命令で指定された演算を行う。
【0049】
次に、「命令圧縮bit=1」の場合について説明する。SPU100の命令スケジューラ141は、格納されている1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整い命令順序が保証できれば1エントリ毎に命令を、信号線150を介して出力する。ここで、スカラレジスタに関して命令圧縮されているため、2命令分の依存関係のあるスカラレジスタのデータが準備できたかを確認する。命令順序保証に関して、SPU100ではベクトル命令はインオーダーで発行する。スカラレジスタ161は、受け取った命令中にスカラレジスタのリード指定が存在する場合に、信号線170を介してスカラレジスタのデータを出力する。ベクトル命令発行制御部181は、2命令分の各種情報とスカラレジスタデータを、信号線190を介してVPU200へ発行する。
【0050】
VPU200内の処理について説明する。命令デコーダ制御部202は、受け取った命令のデコードを行い、命令デコード結果と命令に付随する各種情報を、信号線210を介してベクトル演算命令復元制御部204へ出力する。また、命令デコード結果と演算例外ICを、信号線211を介してベクトル演算例外ICレジスタ203へ出力する。ベクトル演算例外ICレジスタ203は、ベクトル演算命令かつ命令圧縮bit=1の場合には、新たな登録は行わず、登録されている基準命令の演算例外ICを、信号線212を介してベクトル演算命令復元制御部204へ出力する。
【0051】
ベクトル演算命令復元制御部204は、ベクトル演算命令かつ命令圧縮bit=1の場合、命令圧縮あり、と判定し、1つの命令から元の2命令を復元した形式で命令スケジューラ221へ出力する。演算例外ICの復元方法に関しては、図10に示したように、1命令目については、上位6バイトを登録されている基準命令の演算例外ICとし、7バイト目はSPU100より受け取った命令のbyte14に含まれる「基準命令からの相対IC」とする。2命令目については、上位6バイトを登録されている基準命令の演算例外ICとし、7バイト目はSPU100より受け取った命令のbyte14に含まれる「基準命令からの相対IC」+「命令圧縮した1命令目の命令長(本発明例では8バイト)」とする。
【0052】
命令スケジューラ221は、受け取った命令を1エントリに1命令ずつ格納する。ここでは、2エントリに2命令を格納する。命令スケジューラ221は、格納されている1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整い命令順序が保証できれば、1エントリ毎に命令を信号線230を介して出力する。命令順序保証に関して、VPU200では、ベクトル命令はアウトオブオーダーで発行する。ベクトルレジスタ241は、受け取った命令中にベクトルレジスタのリード指定が存在する場合に信号線250を介してベクトルレジスタのデータを出力する。ベクトル演算ユニット群261は、ベクトルレジスタのデータを受け取り、命令で指定された演算を行う。
【0053】
・ベクトル演算命令でない場合
次に、プロセッサに対する命令が、ベクトル演算命令でない場合について説明する。SPU100内では、命令キャッシュ101は、同時に複数命令(本実施例では4命令)を信号線110を介して命令デコーダ制御部122へ出力する。命令デコーダ制御部122は、同時に複数命令デコード(本実施例では4命令)を行い、命令デコード結果と命令に付随する各種情報を、信号線130を介してベクトル演算命令圧縮制御部125へ出力する。また、命令デコード結果を、信号線131を介してベクトル演算命令判定部123へ出力する。
【0054】
ベクトル演算命令判定部123は、図11に示した16通りの命令の組み合わせでベクトル演算命令が連続しているかをチェックし、命令圧縮対象あるいは命令圧縮対象外かを判定し、重複ケースを除く7通りの命令組み合わせを、信号線132を介してベクトル演算命令圧縮制御部125へ出力する。本ケースでは、ベクトル演算命令が含まれていないので、全て圧縮対象外になる。
【0055】
ベクトル演算命令圧縮制御部125は、命令を信号線135を介して命令スケジューラ141に命令を出力する。命令スケジューラ141は、受け取った命令を圧縮せずに、通常命令の形式で1エントリに1命令ずつ格納する。命令スケジューラ141は、格納されている1エントリ毎に命令の発行が可能か判定し、必要な資源の準備が整い命令順序が保証できれば、1エントリ毎に命令を信号線150を介して出力する。命令順序保証に関して、SPU100では、ベクトル命令はインオーダーで発行する。スカラレジスタ161は、受け取った命令中にスカラレジスタのリード指定が存在する場合に信号線170を介してスカラレジスタのデータを出力する。ベクトル命令発行制御部181は、1命令分の各種情報とスカラレジスタデータを、信号線190を介してVPU200へ発行する。
【0056】
VPU200内では、命令デコーダ制御部202は、受け取った命令のデコードを行い、命令デコード結果と命令に付随する各種情報を、信号線210を介してベクトル演算命令復元制御部204へ出力する。ベクトル演算命令復元制御部204は、ベクトル演算命令でない場合、命令圧縮なしと判定し命令を復元せずにそのままの形式で信号線213を介して命令スケジューラ221へ出力する。
【0057】
命令スケジューラ221は、受け取った命令を1エントリに1命令ずつ格納する。命令スケジューラ221は、格納されている1エントリ毎に命令の発行が可能か判定し必要な資源の準備が整い命令順序が保証できれば1エントリ毎に命令を、信号線230を介して出力する。命令順序保証に関して、VPUではベクトル命令はアウトオブオーダーで発行する。ベクトルレジスタ241は、受け取った命令中にベクトルレジスタのリード指定が存在する場合に信号線250を介してベクトルレジスタのデータを出力する。ベクトル演算ユニット群261は、ベクトルレジスタのデータを受け取り命令で指定された演算を行う。
【0058】
[効果]
以上に説明したように、本発明においては、以下に記載するような効果を持つ。まず、ベクトル命令を実行するプロセッサにおいて、SPU100の命令デコーダ121による命令圧縮制御と、VPU200の命令デコーダ201による命令復元制御により、SPU100から1クロックに複数のベクトル演算命令を発行することが可能になる。これにより、SPU-VPUのユニット間のベクトル演算命令の発行レートの向上が可能になる。また、ハードウェアのみの機能で実現可能なため、これまでのソフトウェアを変更せずにベクトル演算命令発行レートの向上を享受できる。
【0059】
また、演算例外ICのフィールドを活用することで、命令スケジューラの回路量を最小限の増加で圧縮した命令を格納することが可能である。また、命令圧縮を行うことで、これまでの技術の命令スケジューラと同一エントリ数の構成でも、格納する命令数を増加させることができるため性能向上が見込める。
【0060】
ここで、具体的なベクトル命令の発行レート向上の効果を計算する。まず、命令列としてベクトルロード命令とベクトル演算命令の割合を1バイト/Flopsと仮定し、計算結果をベクトルストア命令で出力する命令列を考える。計算の入力データとしてVLD命令×3命令の合計8バイト×3=24バイトに対して、VFMA命令は2Flops/命令になるので、24/2=12命令の組み合わせになる。最後に、計算結果の出力としてベクトルストア命令を入れた命令列になるので、図13に示した命令圧縮がない場合は、ベクトル命令の発行に16クロック必要だが、本発明の命令圧縮により11クロックに削減できる。また、ベクトル演算命令としてVFMA命令ではなくVFMP(浮動小数点乗算)命令とVFAD(浮動小数点加算)命令を利用する場合は、図14に示した命令圧縮がない場合はベクトル命令の発行に28クロック必要だが、本発明の命令圧縮により17クロックに削減できる。
【0061】
このように、ベクトル演算命令数が多いほど本発明の効果は大きくなる。また、SPUの命令スケジューラへの命令格納効率も同様に向上する。例えば、図13の例では命令圧縮なしでは16エントリ必要になるが、命令圧縮ありでは11エントリに削減される。同様に、図14の例では命令圧縮なしでは28エントリ必要になるが、命令圧縮ありでは17エントリに削減される。
【0062】
なお、上記では、命令デコーダは複数命令を同時にデコードする機能として4命令同時デコード構成としたが、2命令以上であれば何命令同時デコードでもよい。また、上記では、2命令を1つに統合する場合を例示しているが、3つ以上の命令を1つに統合してもよい。
【0063】
また、ベクトル命令の発行パイプラインは1パイプライン構成としたが、2パイプライン構成以上でも良い。また、命令長を8バイトとしたが何バイトでも良い。ベクトル演算命令として、4オペランド形式の命令で説明を行ったが、他のオペランド形式でも良い。例えば、ベクトル浮動小数点加算命令でVFAD V0←V1+V2を行う3オペランド形式でも良い。同時に2命令のベクトル演算命令を圧縮・復元する例を示したが、圧縮・復元の対象命令数は何命令でも良い。
【0064】
また、ICは56ビットアドレスとしたが、何ビットでも良い。演算例外ICは256バイト毎に基準のICを設けるとしたが、何バイト毎に基準を設けてもよい。基準となるICのサイズを大きくすることで命令圧縮可能な範囲が広がるが、相対ICの表現に必要なビット数が増加する。
【0065】
また、上記では、ハードウェアで構成されたSPU100とVPU200を備えるプロセッサを例示しているが、プロセッサにソフトウェアであるプログラムが組み込まれることで、SPU100及びVPU200と同等の機能を実現してもよい。
【0066】
<実施形態2>
次に、本発明の第2の実施形態を、図15を参照して説明する。図15は、実施形態2におけるプロセッサの構成を示すブロック図である。なお、本実施形態では、実施形態1で説明したプロセッサの構成の概略を示している。
【0067】
図15に示すように、本実施形態におけるプロセッサ300は、
スカラ演算を行うスカラプロセッシングユニット310と、ベクトル演算を行うベクトルプロセッシングユニット320と、を備える。
そして、上記スカラプロセッシングユニット310は、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニット320に発行し、
上記ベクトルプロセッシングユニット320は、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
という構成をとる。
【0068】
なお、上記スカラプロセッシングユニット310と、ベクトルプロセッシングユニット320とは、プロセッサ300がプログラムを実行することで実現されてもよい。
【0069】
上記発明によると、スカラプロセッシングユニット310の命令デコード後に複数のベクトル命令を1命令に圧縮して、命令スケジューラに格納し命令を圧縮した形式のままでベクトルプロセッシングユニット320へベクトル命令を発行する。そして、ベクトルプロセッシングユニット320では、圧縮された命令を復元する機能を提供する。これにより、ベクトルプロセッサとしての通常の機能を損なうことなく、スカラプロセッシングユニット310とベクトルプロセッシングユニット320との間のベクトル命令発行レートを向上することができる。
【0070】
<付記>
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるプロセッサ、情報処理方法、プログラムの構成の概略を説明する。但し、本発明は、以下の構成に限定されない。
【0071】
(付記1)
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を備えたプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
プロセッサ。
【0072】
(付記2)
付記1に記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち相互に連続する2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【0073】
(付記3)
付記1又は2に記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち、当該ベクトル演算命令のそれぞれの格納場所を表すアドレス情報に基づいて2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【0074】
(付記4)
付記3に記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち、当該ベクトル演算命令のそれぞれの格納場所を表すアドレス情報の一部が一致する2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【0075】
(付記5)
付記1乃至4のいずれかに記載のプロセッサであって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち、相互に連続すると共に、当該ベクトル演算命令のそれぞれの格納場所を表すアドレス情報の一部である予め設定された上位アドレスが一致する2以上のベクトル演算命令を1つの命令として統合する、
プロセッサ。
【0076】
(付記6)
付記1乃至5のいずれかに記載のプロセッサであって、
前記スカラプロセッシングユニットは、統合しないベクトル演算命令に、当該ベクトル演算命令の格納場所を表すアドレス情報を含めて前記ベクトルプロセッシングユニットに送信し、前記統合ベクトル演算命令に、統合前の2以上のベクトル演算命令の少なくとも1つの格納場所を表すアドレス情報の一部を含めて前記ベクトルプロセッシングユニットに送信する、
プロセッサ。
【0077】
(付記7)
付記6に記載のプロセッサであって、
前記スカラプロセッシングユニットは、前記統合ベクトル演算命令に、統合前の1つのベクトル演算命令の格納場所を表すアドレス情報の予め設定された下位アドレスを含めて前記ベクトルプロセッシングユニットに送信し、
前記ベクトルプロセッシングユニットは、前記統合しないベクトル演算命令に含められたアドレス情報と、前記統合ベクトル演算命令に含められた前記下位アドレスに基づいて、当該統合ベクトル演算命令の統合前の2以上のベクトル演算命令の格納場所を表すアドレス情報を取得する、
プロセッサ。
【0078】
(付記8)
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を備えたプロセッサによる情報処理方法であって、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
情報処理方法。
【0079】
(付記9)
プロセッサに、
スカラ演算を行うスカラプロセッシングユニットと、ベクトル演算を行うベクトルプロセッシングユニットと、を実現させると共に、
前記スカラプロセッシングユニットは、同時にデコードした複数のベクトル演算命令のうち2以上のベクトル演算命令を1つの命令として統合した統合ベクトル演算命令を前記ベクトルプロセッシングユニットに発行し、
前記ベクトルプロセッシングユニットは、前記統合ベクトル演算命令を統合前の2以上のベクトル演算命令に復元して、当該2以上のベクトル演算命令に従ってそれぞれベクトル演算を行う、
ことを実現させるためのプログラム。。
【0080】
なお、上記プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD-ROM(Read Only Memory)、CD-R、CD-R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0081】
以上、上記実施形態等を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることができる。
【符号の説明】
【0082】
100 SPU(スカラプロセッシングユニット)
101 命令キャッシュ
121 命令デコーダ
122 命令デコーダ制御部
123 ベクトル演算命令判定部
124 ベクトル演算例外ICレジスタ
125 ベクトル演算命令圧縮制御部
141 命令スケジューラ
161 スカラレジスタ
181 ベクトル命令発行制御部
200 VPU(ベクトルプロセッシングユニット)
201 命令デコーダ
202 命令デコーダ制御部
203 ベクトル演算例外ICレジスタ
204 ベクトル演算命令復元制御部
221 命令スケジューラ
241 ベクトルレジスタ
261 ベクトル演算ユニット群
300 プロセッサ
310 スカラプロセッシングユニット
320 ベクトルプロセッシングユニット
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15