(57)【要約】【課題】パイプラインにおけるステージ間のオーバヘッド、回路設計の複雑化および消費電力の増大を抑えながら、パイプラインと同等以上の高速化を実現するプロセッサを提供すること。【解決手段】主記憶装置８００から読み込まれる各データを保持するデータ保持部１１と、データに基づく一連の処理を終了してから次のデータに基づく一連の処理を開始する複数の演算器１３を用いて、各データに基づく一連の処理を並列に実行する演算部１２と、を備える。【選択図】図１
2015041176.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置から読み込まれる各データを保持するデータ保持部と、
前記データに基づく一連の処理を終了してから次のデータに基づく前記一連の処理を開始する複数の演算器を用いて、前記各データに基づく一連の処理を並列に実行する演算部と、
を備えたプロセッサ。
【請求項２】
前記演算部は、前記データ保持部に保持される各データを前記複数の演算器に対してインタリーブするインタリーブ部をさらに有することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記データ保持部は、前記演算器の個数に分割されて各分割部分を各演算器に対応させ、
前記各演算器は、対応する前記分割部分に保持されたデータに基づいて、前記一連の処理を実行することを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記演算部は、前記一連の処理がｎ（ｎは１以上の整数）段階からなる場合、ｎのＮ（Ｎは１以上の整数）倍個の前記演算器を有することを特徴とする請求項１から請求項３のいずれか１項に記載のプロセッサ。
【請求項５】
前記データ保持部は、前記各演算器に対してブロードキャストされるデータをさらに保持し、
前記各演算器は、前記ブロードキャストされるデータにさらに基づいて、前記一連の処理を実行することを特徴とする請求項１から請求項４のいずれか１項に記載のプロセッサ。
【請求項６】
前記データ保持部は、データ要素からなるベクトルデータを保持するベクトルレジスタによって構成され、
前記各演算器は、前記データ要素に対する演算を前記一連の処理として実行することを特徴とする請求項１から請求項５のいずれか１項に記載のプロセッサ。
【請求項７】
前記データ保持部は、前記各データ要素に対する演算の内容を表す命令要素からなるベクトル命令をさらに保持し、
前記各演算器は、前記各データ要素に対して対応する前記命令要素の示す演算を前記一連の処理として実行することを特徴とする請求項６に記載のプロセッサ。
【請求項８】
前記データ保持部は、前記各演算器に対する命令を表す情報を保持し、
前記各演算器は、前記命令に基づく一連の処理を終了してから次の命令に基づく一連の処理を開始することを特徴とする請求項１から請求項５のいずれか１項に記載のプロセッサ。
【請求項９】
主記憶装置から読み込まれてデータ保持部に保持される各データに基づく一連の処理を終了してから次のデータに基づく前記一連の処理を開始する複数の演算器を用いて、前記各データに基づく一連の処理を並列に実行する、プロセッサの処理方法。
【請求項１０】
前記データ保持部に保持される各データを前記複数の演算器に対してインタリーブすることにより、前記各データに基づく一連の処理を並列に実行することを特徴とする請求項９に記載のプロセッサの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサおよびプロセッサの処理方法に関する。
【背景技術】
【０００２】
プロセッサのサイクル時間の短縮および命令処理レートの向上を小さい回路規模で実現する技術として、パイプラインがよく知られている。パイプラインは、スーパーコンピュータ、メインフレーム、および、組み込み用を含めた多数のプロセッサにおいて採用されている。
【０００３】
例えば、パイプラインを採用した一般的なプロセッサの一例を図１４に示す。図１４に示すプロセッサ９００は、ｎステージからなる命令の各ステージを実行するｎ個の論理回路９０１（９０１＿１〜９０１＿ｎ）を備える。各クロックサイクルにおいて、論理回路９０１＿１は、データを取得してステージ１の処理を実行する。次の各クロックサイクルにおいて、論理回路９０１＿２は、論理回路９０１＿１から送られてくるステージ１の処理結果に基づいて、ステージ２の処理を実行する。このようにして、各論理回路９０１は、前のステージの処理結果に基づき該当するステージの処理を実行し、処理を終了すると、次に送られてくる前のステージの処理結果に基づき該当するステージの処理を実行することを繰り返す。また、プロセッサ９００は、各ステージの処理のタイミングを同期させるため、論理回路９０１間にレジスタ（図示せず）を設けるのが一般的である。これにより、プロセッサ９００は、最も時間のかかるステージの処理時間を基準として次々とデータを論理回路９０１に送りこむことができ、命令の全ステージを処理してから次の命令を開始する場合に比べて、処理を高速化できる。さらに、このようなプロセッサ９００において、ステージ段階数を増やして各ステージの処理時間を短縮することにより、少ない回路規模の増大で、プロセッサのサイクル時間をより短縮し、命令処理レートをより向上させることができる。
【０００４】
また、このようなパイプライン動作によりベクトルデータを処理するプロセッサの一例が、特許文献１に記載されている。特許文献１に記載されたプロセッサでは、パイプライン制御部が、主記憶装置から読みだされたデータを整列してベクトルレジスタに書き込み、演算部が、ベクトルレジスタから次々と読み出されるデータしてパイプライン処理を用いて所定のベクトル演算を行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−３０５６８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、図１４を参照して説明したプロセッサおよび特許文献１に記載されたプロセッサには、以下の課題がある。
【０００７】
上述したプロセッサにおいては、近年のサイクル時間の短縮およびプロセス技術の向上により、ステージ間においてレジスタ段階数が増え、セットアップやクロックスキュー等のオーバーヘッドが大きくなり、さらなるスピードアップが困難になってきている。また、上述したプロセッサにおいては、パイプラインの段階数をより深くステージの遅延をより少なくするため、ステージ間のバランスおよびパイプラインハザード時のフラッシュ処理を考慮する必要がある。そのため、回路設計が複雑になってきている。また、上述したプロセッサにおいては、パイプラインによる高速化に伴い消費電力が増大してきている。その一方で、プロセス技術の向上によりＬＳＩ（Large Scale Integration）に集積できる回路規模が増大するにつれ、少ない回路規模で高速化を実現出来るというパイプラインのメリットが薄れてきている。
【０００８】
本発明は、上述の課題を解決するためになされたもので、パイプラインにおけるステージ間のオーバヘッド、回路設計の複雑化および消費電力の増大を抑えながら、パイプラインと同等以上の高速化を実現するプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明のプロセッサは、主記憶装置から読み込まれる各データを保持するデータ保持部と、前記データに基づく一連の処理を終了してから次のデータに基づく前記一連の処理を開始する複数の演算器を用いて、前記各データに基づく一連の処理を並列に実行する演算部と、を備える。
【００１０】
また、本発明のプロセッサの処理方法は、主記憶装置から読み込まれてデータ保持部に保持される各データに基づく一連の処理を終了してから次のデータに基づく前記一連の処理を開始する複数の演算器を用いて、前記各データに基づく一連の処理を並列に実行する。
【発明の効果】
【００１１】
本発明は、パイプラインにおけるステージ間のオーバヘッド、回路設計の複雑化および消費電力の増大を抑えながら、パイプラインと同等以上の高速化を実現するプロセッサを提供することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施の形態としてのプロセッサの構成を示すブロック図である。
【図２】本発明の第２の実施の形態としてのプロセッサの構成を示すブロック図である。
【図３】本発明の第３の実施の形態としてのプロセッサの構成を示すブロック図である。
【図４】本発明の第４の実施の形態としてのプロセッサの構成を示すブロック図である。
【図５】本発明の第５の実施の形態としてのプロセッサの構成を示すブロック図である。
【図６】本発明の第６の実施の形態としてのプロセッサの構成を示すブロック図である。
【図７】本発明の第７の実施の形態としてのプロセッサの構成を示すブロック図である。
【図８】本発明の第８の実施の形態としてのプロセッサの構成を示すブロック図である。
【図９】本発明の第９の実施の形態としてのプロセッサの構成を示すブロック図である。
【図１０】本発明の第９の実施の形態としてのプロセッサの他の態様の構成を示すブロック図である。
【図１１】本発明の第１０の実施の形態としてのプロセッサの構成を示すブロック図である。
【図１２】本発明の第１１の実施の形態としてのプロセッサの構成を示すブロック図である。
【図１３】本発明の第１２の実施の形態としてのプロセッサの構成を示すブロック図である。
【図１４】関連技術のプロセッサの構成を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１４】
（第１の実施の形態）
本発明の第１の実施の形態としてのプロセッサ１の構成を図１に示す。
【００１５】
図１において、プロセッサ１は、データ保持部１１と、演算部１２とを備える。
【００１６】
データ保持部１１は、例えば、レジスタにより構成され、主記憶装置８００から読み込まれる各データを保持する。なお、データ保持部１１には、演算部１２に対して連続的にデータを供給できるよう主記憶装置８００から逐次データが読み込まれて保持されるものとする。
【００１７】
演算部１２は、複数の演算器１３を有する。演算部１２は、これらの演算器１３を用いて、データ保持部１１に保持される各データに基づく一連の処理を並列に実行する。なお、図１には、４つの演算器１３を示したが、本発明における演算部が有する演算器の数を限定するものではない。
【００１８】
演算器１３は、１つのデータに対する一連の処理の実行を終了してから、次のデータに対する一連の処理を開始する。
【００１９】
このように構成されたプロセッサ１は、演算器１３によって、データ保持部１１に保持されるあるデータに基づく一連の処理を進行中に、他の演算器１３によって、他のデータに基づく一連の処理を開始することが可能である。そして、各演算器１３は、１つのデータに対する一連の処理の実行を終了してから、次のデータに対する一連の処理を開始する。
【００２０】
これにより、本発明の第１の実施の形態としてのプロセッサ１は、パイプラインにおけるステージ間のオーバヘッド、回路設計の複雑化および消費電力の増大を抑えながら、パイプラインと同等以上の高速化を実現することができる。
【００２１】
その理由は、演算部が備える各演算器が、１つのデータに対する一連の処理を終了してから次のデータに対する一連の処理を開始し、並列に動作するからである。このように、本実施の形態における演算器は、一連の処理を１ステージで実行するので、複数ステージで実行する場合に比べて動作周波数を削減し、消費電力の増大を抑えることができる。また、本実施の形態における演算器は、一連の処理を１ステージで実行するので、ステージ間にレジスタを必要としない。したがって、本実施の形態では、ステージ間のレジスタ段階数増に伴うセットアップおよびクロックスキュー等のオーバーヘッドの問題が発生しない。また、本実施の形態では、ステージ間のバランスをとる必要がなく、パイプラインハザード時のフラッシュ処理を考慮する必要がない。したがって、本実施の形態としてのプロセッサは、回路設計が容易である。このように、本実施の形態は、パイプラインにおけるステージ段階数を増やす代わりに、演算部が有する演算器の数を増やすことにより、パイプラインにおける課題を回避している。なお、プロセス技術の向上によりＬＳＩに集積できる回路規模が増大しているため、演算器の数を増やすことは比較的容易に実現可能である。その結果、本実施の形態は、演算器の数を増やすことにより並列に進行する一連の処理の数を増大させることができ、パイプラインにおける課題を回避しながら、高速化を実現することができる。
【００２２】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。本実施の形態では、ベクトルプロセッサに対して本発明のプロセッサを適用した一例について説明する。
【００２３】
まず、本発明の第２の実施の形態としてのベクトルプロセッサ２の構成を図２に示す。
【００２４】
図２において、ベクトルプロセッサ２は、ベクトルレジスタ部２１と、演算部２２とを備える。
【００２５】
ベクトルレジスタ部２１は、本発明におけるデータ保持部の一実施形態を構成する。ベクトルレジスタ部２１は、主記憶装置８００から読み込まれるベクトルデータを保持する。例えば、ベクトルレジスタ部２１は、複数のベクトルレジスタにより構成されている。
【００２６】
ここで、ベクトルレジスタ部２１には、各演算部２２に対して連続的にベクトルデータのデータ要素を供給できるよう主記憶装置８００から逐次ベクトルデータが読み込まれて保持される。例えば、図２に示すように、主記憶装置８００は複数のメモリ８０１およびメモリインタリーブ部８０２を有していてもよい。この場合、メモリインタリーブ部８０２は、複数のメモリ８０１に記憶されているベクトルデータをインタリーブしてベクトルレジスタ部２１に保持してもよい。また、この場合、メモリインタリーブ部８０２は、演算部２２によりベクトルレジスタ部２１に書き戻された演算の結果を、メモリ８０１に書き戻してもよい。このような主記憶装置８００には、ベクトルレジスタ部２１との間でデータを入出力する公知の各種技術を適用可能である。なお、図２には、４つのメモリ８０１を示したが、本発明のプロセッサに接続される主記憶装置が有するメモリの数を限定するものではない。
【００２７】
演算部２２は、ｎ個の演算器２３（２３＿１〜２３＿ｎ）と、インタリーブ部２４とを有する。ここで、ｎは、１以上の整数であり、１つの演算器２３により１つのデータに基づく演算がパイプラインで処理されると仮定した場合の段階数ｎに等しい。なお、図２には、４つの演算器２３を示したが、本発明における演算の段階数および演算部が有する演算器の数を限定するものではない。
【００２８】
各演算器２３は、ベクトルデータの各データ要素に対する演算を１ステージにまとめて実行する。つまり、各演算器２３は、あるデータ要素に対する演算を終了してから次のデータに対する演算を開始する。なお、各演算器２３には、後述のインタリーブ部２４によりデータ要素が供給される。また、各演算器２３は、演算の結果をインタリーブ部２４に入力する。
【００２９】
図２の例では、各演算器２３は、各データ要素に対して、浮動小数点加算演算における指数部比較、仮数部シフト、仮数部加算、および正規化を１ステージとして実行する。また、図２の例では、一連の処理（浮動小数点加算）が４段階からなるため、ベクトルプロセッサ２の演算部２２は、４つの演算器２３を有している。
【００３０】
インタリーブ部２４は、ベクトルレジスタ部２１から各演算器２３に対してデータ要素をインタリーブする。すなわち、インタリーブ部２４は、あるクロックサイクルでベクトルレジスタ部２１から１つ目のデータ要素を演算器２３＿１に入力し、次のクロックサイクルで２つ目のデータ要素を演算器２３＿２に入力する。以降、インタリーブ部２４は、３〜ｎ個目の各データ要素を、続く各クロックサイクルで次々と、演算器２３＿３〜２３＿ｎに入力する。そして、インタリーブ部２４は、ｎ＋１個目以降のデータ要素を、前のデータ要素に対する演算を終了した演算器２３＿１から順に逐次入力していく。
【００３１】
なお、上述の浮動小数点加算では、各演算器２３は、２つのオペランドを必要とする。この場合、インタリーブ部２４は、ベクトルレジスタ部２１から、２つのオペランドを含むデータ要素を次々と読み出して各演算器２３に入力する。実際には、インタリーブ部２４は、ベクトルレジスタ部２１が有するあるベクトルレジスタの１つの要素および他のベクトルレジスタの１つの要素を２つのオペランドとして演算器２３に入力してもよい。以下では、説明を簡単にするため、各演算器２３にベクトルレジスタ部２１から入力されるデータ要素は、演算に必要な数のオペランドを含むものとする。
【００３２】
また、インタリーブ部２４は、各演算器２３から入力される演算の結果をベクトルレジスタ部２１に書き戻す。例えば、インタリーブ部２４は、オペランドとなるデータ要素が保持されたベクトルレジスタとは異なるベクトルレジスタに結果データを書き戻してもよい。
【００３３】
以上のように構成されたベクトルプロセッサ２の動作を以下に説明する。以下の説明では、各演算器２３は、入力されるデータ要素に対して、指数部比較、仮数部シフト、仮数部加算、および正規化の４段階を１ステージとして浮動小数点加算を実行するものとする。また、演算部２２は、浮動小数点加算の段階数４に等しい４つの演算器２３＿１〜２３＿４を有するものとする。
【００３４】
最初のクロックサイクルで、インタリーブ部２４は、ベクトルレジスタ部２１から読み出された１つ目のデータ要素を、演算器２３＿１に入力する。演算器２３＿１は、入力されたデータ要素に対して、指数部比較、仮数部シフト、仮数部加算、および正規化を行う。そして、演算器２３＿１は、４クロックサイクル後の５クロックサイクル目に、結果をインタリーブ部２４に入力する。インタリーブ部２４は、入力された結果データをベクトルレジスタ部２１へ書き戻す。
【００３５】
次に２クロックサイクル目で、インタリーブ部２４は、ベクトルレジスタ部２１から読み出された２つ目のデータ要素を、演算器２３＿２に入力する。演算器２３＿２は、入力されたデータ要素に対して、指数部比較、仮数部シフト、仮数部加算、および正規化を行う。そして、演算器２３＿２は、４クロックサイクル後の６クロックサイクル目に、結果をインタリーブ部２４に入力する。インタリーブ部２４は、入力された結果データをベクトルレジスタ部２１へ書き戻す。
【００３６】
次に３クロックサイクル目で、インタリーブ部２４は、ベクトルレジスタ部２１から読み出された３つ目のデータ要素を、演算器２３＿３に入力する。演算器２３＿３は、入力されたデータ要素に対して、指数部比較、仮数部シフト、仮数部加算、および正規化を行う。そして、演算器２３＿３は、４クロックサイクル後の７クロックサイクル目に、結果をインタリーブ部２４に入力する。インタリーブ部２４は、入力された結果データをベクトルレジスタ部２１へ書き戻す。
【００３７】
次に４クロックサイクル目で、インタリーブ部２４は、ベクトルレジスタ部２１から読み出された４つ目のデータ要素を、演算器２３＿４に入力する。演算器２３＿４は、入力されたデータ要素に対して、指数部比較、仮数部シフト、仮数部加算、および正規化を行う。そして、演算器２３＿４は、４クロックサイクル後の８クロックサイクル目に、結果をインタリーブ部２４に入力する。インタリーブ部２４は、入力された結果データをベクトルレジスタ部２１へ書き戻す。
【００３８】
次に５クロックサイクル目で、インタリーブ部２４は、ベクトルレジスタ部２１から読み出された５つ目のデータ要素を、演算器２３＿１に入力する。この時、演算器２３＿１は１クロック目で入力されたデータ要素の浮動小数点加算を完了している。そこで、演算器２３＿１は、入力されたデータ要素に対して、指数部比較、仮数部シフト、仮数部加算、および正規化を行う。そして、演算器２３＿１は、４クロックサイクル後の９クロックサイクル目に、結果をインタリーブ部２４に入力する。インタリーブ部２４は、入力された結果データをベクトルレジスタ部２１へ書き戻す。
【００３９】
以降、ベクトルプロセッサ２は、同様の動作を繰り返す。
【００４０】
次に、本発明の第２の実施の形態の効果について述べる。
【００４１】
本発明の第２の実施の形態としてのベクトルプロセッサは、パイプラインにおけるステージ間のオーバヘッド、回路設計の複雑化および消費電力の増大を抑えながら、ｎ段階のパイプラインと同等の高速化を実現することができる。
【００４２】
その理由は、演算部が、各演算器により実行される演算をパイプライン処理した場合の段階数と同数の演算器を有し、インタリーブ部が、各クロックサイクルでそれぞれの演算器にベクトルデータの要素を逐次供給するからである。そして、各演算器は、１つの要素に対する演算の一連の処理を１ステージとして実行するからである。これにより、本実施の形態のベクトルプロセッサは、ベクトル演算をパイプライン処理した場合と同様に各データ要素に対する演算を連続的に開始して並行して実行することになる。しかも、本実施の形態のベクトルプロセッサは、ベクトル演算をパイプライン処理する場合のようにステージ間のレジスタを必要としない。したがって、本実施の形態は、ステージ間におけるセットアップ、クロックスキュー等のオーバーヘッドがない。また、本実施の形態のベクトルプロセッサでは、その回路設計において、ステージ間のバランスやパイプラインハザードを考慮する必要がない。
【００４３】
また、本実施の形態のベクトルプロセッサでは、同等のベクトル演算を１つの演算器を用いてｎ段のパイプラインで処理する場合と比較して、回路規模がｎ倍になるが、動作周波数が１／ｎとなる。ここで、プロセッサの消費電力が、動作周波数×回路規模×電圧×電圧に比例するとして、本実施の形態の消費電力は、パイプライン処理の場合とほぼ変わらない。
【００４４】
このように、本実施の形態は、パイプラインのステージ段階数を増やす代わりに、並列に実行可能な演算器数を増やすことにより、パイプラインにおける課題を回避しながら、パイプラインとほぼ変わらない消費電力で同等の高スループットを実現している。
【００４５】
（第３の実施の形態）
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第２の実施の形態に対して、ベクトルデータの要素毎に演算の種類を切り替え可能とした点が異なる。なお、本実施の形態の説明および各図面において、本発明の第２の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【００４６】
本発明の第３の実施の形態としてのベクトルプロセッサ３の構成を図３に示す。図３において、ベクトルプロセッサ３は、ベクトルレジスタ部３１と、演算部３２とを備える。
【００４７】
ベクトルレジスタ部３１は、本発明におけるデータ保持部の一実施形態を構成する。ベクトルレジスタ部３１は、例えば、複数のベクトルレジスタにより構成され、ベクトル命令と、ベクトルデータとを保持する。ベクトル命令およびベクトルデータは、主記憶装置８００から読み込まれる。
【００４８】
ベクトルデータは、演算に必要となる数のオペランドを含むデータ要素からなる。
【００４９】
ベクトル命令は、ベクトルデータの各要素に対して行う演算種類を示す命令要素からなる。
【００５０】
演算部３２は、ｎ個の演算器３３（３３＿１〜３３＿ｎ）と、インタリーブ部３４とを有する。ここで、ｎは、１以上の整数であり、１つの演算器３３による演算がパイプラインで処理されると仮定した場合の段階数ｎに等しい。なお、図３には、４つの演算器３３を示したが、本発明における演算の段階数および演算部が有する演算器の数を限定するものではない。
【００５１】
各演算器３３は、命令要素をデコードして演算の種類を特定し、特定した種類の演算をデータ要素に対して行う一連の処理を１ステージで実行する。例えば、各演算器３３は、浮動小数点加算および浮動小数点乗算を選択的に実行可能となっていてもよい。
【００５２】
なお、各演算器３３には、後述のインタリーブ部３４によりデータ要素および命令要素が供給される。また、各演算器３３は、演算の結果をインタリーブ部３４に入力する。
【００５３】
インタリーブ部３４は、ベクトルレジスタ部３１から各演算器３３に対してデータ要素および命令要素を逐次供給する。すなわち、インタリーブ部３４は、あるクロックサイクルで１つ目の命令要素および１つ目のデータ要素を演算器３３＿１に入力する。以降、インタリーブ部３４は、２〜ｎ個目の各命令要素および各データ要素を、続く各クロックサイクルで次々と、演算器３３＿２〜２３＿ｎに入力する。そして、インタリーブ部３４は、以降の命令要素およびデータ要素を、前の命令要素およびデータ要素に基づく一連の処理を終了した演算器３３＿１から順に逐次供給していく。
【００５４】
なお、浮動小数点加算または浮動小数点乗算の場合、各演算器３３は、２つのオペランドを必要とする。そこで、インタリーブ部３４は、ベクトルレジスタ部３１から、命令要素、および、２つのオペランドを含むデータ要素を読み出して各演算器３３に入力するものとする。
【００５５】
また、インタリーブ部３４は、各演算器３３から入力される演算の結果をベクトルレジスタ部３１に書き戻す。なお、インタリーブ部３４は、ベクトルレジスタ部３１において、ベクトル命令およびオペランドとなるベクトルデータが保持されたベクトルレジスタとは異なるベクトルレジスタに演算の結果を書き戻す。
【００５６】
以上のように構成されたベクトルプロセッサ３の動作を以下に説明する。以下の説明では、各演算器３３は、命令要素のデコードおよびデータ要素に対する浮動小数点乗算または浮動小数点加算を１ステージで実行するものとする。また、演算部３２は、演算器３３が行う処理の段階数４に等しい４つの演算器３３＿１〜３３＿４を有するものとする。
【００５７】
最初のクロックサイクルで、インタリーブ部３４は、ベクトルレジスタ部３１から読みだされた１つ目の命令要素および１つ目のデータ要素を、演算器３３＿１に入力する。演算器３３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿１は、４クロックサイクル後の５クロックサイクル目に、結果をインタリーブ部３４に入力する。インタリーブ部３４は、入力された結果データをベクトルレジスタ部３１へ書き戻す。
【００５８】
２クロックサイクル目で、インタリーブ部３４は、ベクトルレジスタ部３１から読みだされた２つ目の命令要素および２つ目のデータ要素を、演算器３３＿２に入力する。演算器３３＿２は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿２は、４クロックサイクル後の６クロックサイクル目に、結果をインタリーブ部３４に入力する。インタリーブ部３４は、入力された結果データをベクトルレジスタ部３１へ書き戻す。
【００５９】
３クロックサイクル目で、インタリーブ部３４は、ベクトルレジスタ部３１から読みだされた３つ目の命令要素および３つ目のデータ要素を、演算器３３＿３に入力する。演算器３３＿３は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿３は、４クロックサイクル後の７クロックサイクル目に、結果をインタリーブ部３４に入力する。インタリーブ部３４は、入力された結果データをベクトルレジスタ部３１へ書き戻す。
【００６０】
４クロックサイクル目で、インタリーブ部３４は、ベクトルレジスタ部３１から読みだされた４つ目の命令要素および４つ目のデータ要素を、演算器３３＿４に入力する。演算器３３＿４は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿４は、４クロックサイクル後の８クロックサイクル目に、結果をインタリーブ部３４に入力する。インタリーブ部３４は、入力された結果データをベクトルレジスタ部３１へ書き戻す。
【００６１】
５クロックサイクル目で、インタリーブ部３４は、ベクトルレジスタ部３１から読みだされた５つ目の命令要素および５つ目のデータ要素を、演算器３３＿１に入力する。この時、演算器３３＿１は、１クロックサイクル目で入力されたデータ要素に対する演算を完了している。そこで、演算器３３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿１は、４クロックサイクル後の９クロックサイクル目に、結果をインタリーブ部３４に入力する。インタリーブ部３４は、入力された結果データをベクトルレジスタ部３１へ書き戻す。
【００６２】
以降、ベクトルプロセッサ３は、同様の動作を繰り返す。
【００６３】
次に、本発明の第３の実施の形態の効果について述べる。
【００６４】
本発明の第３の実施の形態としてのベクトルプロセッサは、パイプラインにおける課題を回避しながら、ｎ段階のパイプラインと同等の高速化を実現する際に、ベクトルデータの要素ごとに異なる演算を可能として柔軟性を増大させる。
【００６５】
その理由は、ベクトルレジスタ部が、ベクトルデータに加えてベクトル命令を保持し、インタリーブ部が、データ要素および命令要素をｎ個の演算器に逐次供給し、各演算器が、命令要素が示す種類の演算を選択してデータ要素に対して実行する一連の処理を1ステージで実行するからである。
【００６６】
（第４の実施の形態）
次に、本発明の第４の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第３の実施の形態に対して、演算部が有する演算器数をＮ（Ｎは１以上の整数）倍とする点が異なる。なお、本実施の形態の説明および各図面において、本発明の第３の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【００６７】
本発明の第４の実施の形態としてのベクトルプロセッサ４の構成を図４に示す。図４において、ベクトルプロセッサ４は、ベクトルレジスタ部３１と、演算部４２とを備える。
【００６８】
演算部４２は、ｎ×Ｎ個の演算器３３（３３＿１〜３３＿ｎＮ）と、インタリーブ部４４とを有する。ここで、ｎは、１以上の整数であり、１つの演算器３３による演算がパイプラインで処理されると仮定した場合の段階数ｎに等しい。また、Ｎは、１以上の整数である。なお、図４には、ｎ＝４、Ｎ＝２の場合として８つの演算器３３を示したが、本発明におけるｎ、Ｎの値および演算部が有する演算器の数を限定するものではない。
【００６９】
インタリーブ部４４は、本発明の第３の実施の形態におけるインタリーブ部３４と同様に構成される。ただし、ベクトルレジスタ部３１から読み出される命令要素およびデータ要素を逐次供給する先となる演算器３３の数が異なる。
【００７０】
具体的には、インタリーブ部４４は、ｎ×Ｎ個の演算器３３に対して、ベクトルレジスタ部３１から読み出されるデータ要素および命令要素を逐次供給する。すなわち、インタリーブ部４４は、１つ目〜ｎ×Ｎ個目までの各命令要素および各データ要素を、各クロックサイクルで次々と、演算器３３＿１〜３３＿ｎＮに入力する。そして、インタリーブ部３４は、ｎ×Ｎ＋１個目以降の命令要素およびデータ要素を、前のデータ要素および命令要素に基づく一連の処理を終了した演算器３３＿１から順に逐次入力していく。
【００７１】
以上のように構成されたベクトルプロセッサ４の動作を以下に説明する。以下の説明では、各演算器３３は、浮動小数点乗算または浮動小数点加算を１ステージで実行するものとする。また、演算部３２は、各演算器３３が行う処理の段階数４の２倍となる８つの演算器３３＿１〜３３＿８を有するものとする。
【００７２】
最初のクロックサイクルで、インタリーブ部４４は、ベクトルレジスタ部３１から読みだされた１つ目の命令要素および１つ目のデータ要素を、演算器３３＿１に入力する。演算器３３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿１は、８クロックサイクル後の９クロックサイクル目に、結果をインタリーブ部４４に入力する。インタリーブ部４４は、入力されたデータをベクトルレジスタ部３１へ書き戻す。
【００７３】
以降、２クロックサイクル目〜８クロックサイクル目においても同様に、インタリーブ部４４は、ベクトルレジスタ部３１から読みだされた２つ目〜８つ目の命令要素およびデータ要素を、演算器３３＿２〜演算器３３＿８に逐次入力する。演算器３３＿２〜３３＿８は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算をそれぞれ実行する。そして、演算器３３＿２〜３３＿８は、８クロックサイクル後の１０〜１６クロックサイクル目に、結果をインタリーブ部４４にそれぞれ入力する。インタリーブ部４４は、入力されたデータをベクトルレジスタ部３１へ書き戻す。
【００７４】
９クロックサイクル目で、インタリーブ部４４は、ベクトルレジスタ部３１から読みだされた９つ目の命令要素およびデータ要素を、演算器３３＿１に入力する。この時、演算器３３＿１は、１クロックサイクル目で入力されたデータ要素に対する演算を完了している。そこで、演算器３３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器３３＿１は、８クロックサイクル後の１７クロックサイクル目に、結果をインタリーブ部４４に入力する。インタリーブ部４４は、入力されたデータをベクトルレジスタ部３１へ書き戻す。
【００７５】
以降、ベクトルプロセッサ４は、同様の動作を繰り返す。
【００７６】
次に、本発明の第４の実施の形態の効果について述べる。
【００７７】
本発明の第４の実施の形態としてのベクトルプロセッサは、パイプラインにおける課題を回避しながら、ｎ段階のパイプラインよりさらなる高性能を実現する。
【００７８】
その理由は、演算部が、本発明の第３の実施の形態における演算器をｎ×Ｎ個有し、インタリーブ部が、ｎ×Ｎ個の演算器に対してベクトル命令およびベクトルデータの各要素を逐次供給するからである。これにより、本実施の形態は、本発明の第３の実施の形態に対してクロックサイクルを１／Ｎにして動作周波数をＮ倍にすることができ、その結果、Ｎ倍のスループットを得られることになる。
【００７９】
（第５の実施の形態）
次に、本発明の第５の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第３の実施の形態に対して、ベクトルレジスタ部を分割して各分割部分を各演算器に対応させた点が異なる。なお、本実施の形態の説明および各図面において、本発明の第３の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【００８０】
本発明の第５の実施の形態としてのベクトルプロセッサ５の構成を図５に示す。図５において、ベクトルプロセッサ５は、ベクトルレジスタ部５１と、演算部５２とを備える。
【００８１】
ベクトルレジスタ部５１は、本発明におけるデータ保持部の一実施形態を構成する。ベクトルレジスタ部５１は、後述の演算部５２が有する演算器５３と同数であるｎ個の分割部５５（５５＿１〜５５＿ｎ）に分割されている。各分割部５５には、主記憶装置８００から読み込まれるベクトル命令およびベクトルデータがｎ個に分割されて保持される。
【００８２】
つまり、ベクトル命令およびベクトルデータの各要素数をｍとすると、分割部５５は、ベクトル命令およびベクトルデータのそれぞれｍ／ｎ個の要素を保持する。例えば、ｎ＝４とすると、分割部５５＿１には、ベクトル命令およびベクトルデータの要素４ｉ（ｉ＝０，１，・・・）番が保持される。、また、分割部５５＿２には、ベクトル命令およびベクトルデータの要素４ｉ＋１番が保持される。、分割部５５＿１には、ベクトル命令およびベクトルデータの要素４ｉ＋２番が保持される。、分割部５５＿３には、ベクトル命令およびベクトルデータの要素４ｉ＋３番が保持される。
【００８３】
また、各分割部５５は、各演算器５３に対応づけられる。
【００８４】
演算部５２は、ｎ個の演算器５３（５３＿１〜５３＿ｎ）を有する。ここで、ｎは、１以上の整数であり、１つの演算器５３による演算がパイプラインで処理されると仮定した場合の段階数ｎに等しい。なお、図５には、ｎ＝４の場合として４つの分割部５５および４つの演算器５３を示したが、本発明におけるｎの値、ベクトルレジスタ部５１の分割数、および、演算部が有する演算器の数を限定するものではない。
【００８５】
各演算器５３は、本発明の第３の実施の形態における演算器３３とほぼ同様に構成されるが、対応する分割部５５からデータ要素および命令要素を取得する点が異なる。
【００８６】
なお、浮動小数点加算または浮動小数点乗算の場合、各演算器５３は２つのオペランドを必要とする。この場合、各演算器５３は、対応する分割部５５から、命令要素、および、２つのオペランドを含むデータ要素を読み出すものとする。
【００８７】
また、各演算器５３は、演算の結果を、対応する分割部５５に書き戻す。なお、各演算器５３は、各分割部５５において、データ要素および命令要素とは異なる場所に結果を書き戻すものとする。
【００８８】
以上のように構成されたベクトルプロセッサ５の動作を以下に説明する。以下の説明では、各演算器５３は、浮動小数点乗算または浮動小数点加算を１ステージで実行するものとする。また、演算部５２は、各演算器５３が行う処理の段階数４に等しい４つの演算器５３＿１〜５３＿４を有するものとする。また、ベクトルレジスタ部５１は、演算器５３と同数である４つの分割部５５に分割されているものとする。
【００８９】
最初のクロックサイクルで、演算器５３＿１は、分割部５５＿１の１つ目の命令要素および１つ目のデータ要素を読み出す。演算器５３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器５３＿１は、１クロックサイクル後の２クロックサイクル目に、結果を分割部５５＿１へ書き戻す。
【００９０】
同様に、最初のクロックサイクルで、演算器５３＿２は、分割部５５＿２の１つ目の命令要素および１つ目のデータ要素を読み出す。演算器５３＿２は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器５３＿２は、１クロックサイクル後の２クロックサイクル目に、結果を分割部５５＿２へ書き戻す。
【００９１】
同様に、最初のクロックサイクルで、演算器５３＿３は、分割部５５＿３の１つ目の命令要素および１つ目のデータ要素を読み出す。演算器５３＿３は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器５３＿３は、１クロックサイクル後の２クロックサイクル目に、結果を分割部５５＿３へ書き戻す。
【００９２】
同様に、最初のクロックサイクルで、演算器５３＿４は、分割部５５＿４の１つ目の命令要素および１つ目のデータ要素を読み出す。演算器５３＿４は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器５３＿４は、１クロックサイクル後の２クロックサイクル目に、結果を分割部５５＿４へ書き戻す。
【００９３】
２クロックサイクル目で、演算器５３＿１〜５３＿４は、それぞれ、１クロックサイクル目で入力されたデータ要素に対する演算を完了している。そこで、演算器５３＿１〜５３＿４は、分割部５５＿１〜５５＿４のそれぞれ２つ目の命令要素およびデータ要素を読み出す。演算器５３＿１〜５３＿４は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器５３＿１〜５３＿４は、１クロックサイクル後の３クロックサイクル目に、結果を分割部５５＿１〜５５＿４へそれぞれ書き戻す。
【００９４】
以降、ベクトルプロセッサ５は、同様の動作を繰り返す。
【００９５】
次に、本発明の第５の実施の形態の効果について述べる。
【００９６】
本発明の第５の実施の形態としてのベクトルプロセッサは、パイプラインにおける課題を回避しながら、ｎ段のパイプラインと同等以上の性能を実現する際に、回路規模を削減するとともに消費電力をより削減することができる。
【００９７】
その理由は、ベクトルレジスタ部が、演算器と同数であるｎ個の分割部に分割されて各演算器に対応付けられ、各分割部が、ベクトルデータを分割して保持し、各演算器が、対応する分割部から読み出される命令要素およびデータ要素に基づく一連の処理を１ステージで実行するからである。
【００９８】
これにより、本実施の形態は、本発明の第３の実施の形態においてｎ個の演算器を用いてｎ段のパイプラインと同等の性能を実現する際に必要としていたインタリーブ部を不要とする。そのため、本実施の形態は、本発明の第３の実施の形態より回路規模を削減することになる。また、本実施の形態は、ベクトルレジスタ部および演算器間のインタフェースのクロックサイクルをｎ倍にしている。その結果、本実施の形態は、本発明の第３の実施の形態より動作周波数を削減することができ、消費電力をさらに削減することになる。
【００９９】
（第６の実施の形態）
次に、本発明の第６の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第５の実施の形態に対して、ベクトルレジスタの要素数と同数の演算器を有する点が異なる。なお、本実施の形態の説明および各図面において、本発明の第５の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１００】
本発明の第６の実施の形態としてのベクトルプロセッサ６の構成を図６に示す。図６において、ベクトルプロセッサ６は、ベクトルレジスタ部６１と、演算部６２とを備える。
【０１０１】
ベクトルレジスタ部６１は、ｍ個の要素部６６（６６＿〜６６＿ｍ）からなる。各要素部６６は、演算器６３による演算に必要な数のオペランドを含むデータ要素と、対応する命令要素とを保持するものとする。
【０１０２】
演算部６２は、要素部６６と同数のｍ個の演算器６３（６３＿１〜６３＿ｍ）を有する。
【０１０３】
各演算器６３は、本発明の第５の実施の形態における演算器５３とほぼ同様に構成されるが、対応する要素部６６から、データ要素および命令要素を取得する点が異なる。
【０１０４】
また、各演算器６３は、演算の結果を、対応する要素部６６に書き戻す。なお、各演算器６３は、各要素部６６において、データ要素および命令要素とは異なる場所に結果を書き戻すものとする。
【０１０５】
以上のように構成されたベクトルプロセッサ６の動作を以下に説明する。以下の説明では、各演算器６３は、浮動小数点乗算または浮動小数点加算を１ステージで実行するものとする。
【０１０６】
最初のクロックサイクルで、演算器６３＿１は、要素部６６＿１から命令要素およびデータ要素を読み出す。演算器６３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器６３＿１は、１クロックサイクル後の２クロックサイクル目に、結果を要素部６６＿１へ書き戻す。
【０１０７】
同様に、最初のクロックサイクルで、演算器６３＿２〜６３＿ｍは、要素部６６＿２〜６６＿ｍから命令要素およびデータ要素をそれぞれ読み出す。演算器６３＿２〜６３＿ｍは、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算をそれぞれ実行する。そして、演算器６３＿２〜６３＿ｍは、１クロックサイクル後の２クロックサイクル目に、結果を要素部６６＿２〜６６＿ｍへそれぞれ書き戻す。
【０１０８】
２クロックサイクル目で、演算器６３＿１〜６３＿ｍは、１クロックサイクル目で入力されたデータ要素に対する演算をそれぞれ完了している。そこで、演算器６３＿１〜６３＿ｍは、要素部６６＿１〜６６＿ｍから命令要素およびデータ要素をそれぞれ読み出す。演算器６３＿１〜６３＿ｍは、入力された命令をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器６３＿１〜６３＿ｍは、１クロックサイクル後の３クロックサイクル目に、結果を要素部６６＿１〜６６＿ｍへそれぞれの書き戻す。
【０１０９】
以降、ベクトルプロセッサ６は、同様の動作を繰り返す。
【０１１０】
次に、本発明の第６の実施の形態の効果について述べる。
【０１１１】
本発明の第６の実施の形態としてのベクトルプロセッサは、パイプラインにおける課題を回避しながら、パイプラインと同等以上の高性能を実現することができる。
【０１１２】
その理由は、演算部が、ベクトルレジスタ部の要素数ｍと同数の演算器を有し、各演算器が、対応する要素部から命令要素およびデータ要素を読み出して一連の処理を１ステージで実行するからである。
【０１１３】
これにより、本実施の形態は、ｎ段階の処理を１ステージで行う演算器をｍ個備えるので、ｎ段のパイプラインに対してｍ／ｎ倍の性能を実現することができる。
【０１１４】
（第７の実施の形態）
次に、本発明の第７の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第６の実施の形態に対して、ベクトルレジスタ部に保持されるデータの一部が各演算器にブロードキャストされる点が異なる。なお、本実施の形態の説明および各図面において、本発明の第６の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１１５】
本発明の第７の実施の形態としてのベクトルプロセッサ７の構成を図７に示す。図７において、ベクトルプロセッサ７は、ベクトルレジスタ部７１と、演算部７２とを備える。
【０１１６】
ベクトルレジスタ部７１は、ｍ個の要素部６６（６６＿〜６６＿ｍ）と、ブロードキャスト部７７とを含む。主記憶装置８００から読み込まれるベクトルデータおよびベクトル命令は、ｍ個の要素部６６およびブロードキャスト部７７に保持される。ブロードキャスト部７７に保持されるベクトル命令およびベクトルデータは、後述の各演算器７３にブロードキャストされる。
【０１１７】
演算部７２は、要素部６６と同数のｍ個の演算器７３（７３＿１〜７３＿ｍ）を有する。
【０１１８】
各演算器７３は、データ要素および命令要素を、ブロードキャスト部７７および対応する要素部６６から取得して、命令要素の示す演算をデータ要素に対して実行する。このとき、各演算器７３は、オペランドとなるデータ要素を、要素部６６およびブロードキャスト部７７のいずれかまたは両方から読み出してもよい。また、各演算器７３は、命令要素を、要素部６６およびブロードキャスト部７７のいずれかから読み出せばよい。これにより、演算部７２は、全ての演算器７３で同一の命令を異なるオペランドに対して実行可能なる。あるいは、演算部７２は、全ての演算器７３で少なくとも１つの同一のオペランドを用いて異なる演算を実行可能となる。
【０１１９】
また、各演算器７３は、演算の結果を、対応する要素部６６に書き戻す。
【０１２０】
以上のように構成されたベクトルプロセッサ７の動作を以下に説明する。以下の説明では、各演算器７３は、浮動小数点乗算または浮動小数点加算を１ステージで実行するものとする。また、以下の説明では、ブロードキャスト部７７からは、命令要素およびオペランドの１つを表すデータ要素がブロードキャストされ、要素部６６からは、オペランドの他方を表すデータ要素が読み出されるものとする。
【０１２１】
最初のクロックサイクルで、演算器７３＿１は、ブロードキャスト部７７からブロードキャストされた命令要素およびデータ要素と、要素部６６＿１から読みだされたデータ要素を入力として得る。演算器７３＿１は、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算を実行する。そして、演算器７３＿１は、１クロックサイクル後の２クロックサイクル目に、結果を要素部６６＿１へ書き戻す。
【０１２２】
同様に最初のクロックサイクルで、演算器７３＿２〜７３＿ｍは、ブロードキャスト部７７からブロードキャストされた命令要素およびデータ要素と、要素部６６＿２〜６６＿ｍから読みだされたデータ要素をそれぞれ入力として得る。演算器７３＿２〜７３＿ｍは、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算をそれぞれ実行する。そして、演算器７３＿２〜７３＿ｍは、１クロックサイクル後の２クロックサイクル目に、結果を要素部６６＿２〜６６＿ｍへそれぞれ書き戻す。
【０１２３】
２クロックサイクル目で、演算器７３＿１〜７３＿ｍは、１クロックサイクル目で入力されたデータ要素に対する一連の処理をそれぞれ完了している。そこで、演算器７３＿１〜７３＿ｍは、ブロードキャスト部７７からブロードキャストされた命令要素およびデータ要素と、要素部６６＿１〜６６＿ｍから読みだされたデータ要素をそれぞれ入力として得る。演算器７３＿１〜７３＿ｍは、入力された命令要素をデコードし、デコード結果にしたがって、データ要素に対する浮動小数点加算または浮動小数点乗算をそれぞれ実行する。そして、演算器７３＿１〜７３＿ｍは、１クロックサイクル後の３クロックサイクル目に、結果を要素部６６＿１〜６６＿ｍへそれぞれ書き戻す。
【０１２４】
以降、ベクトルプロセッサ７は、同様の動作を繰り返す。
【０１２５】
次に、本発明の第７の実施の形態の効果について述べる。
【０１２６】
本発明の第７の実施の形態としてのベクトルプロセッサは、パイプラインにおける課題を回避しながらパイプラインと同等の性能を実現する際に、全ての演算において命令またはオペランドを同一とする演算を効率よく実行可能とする。
【０１２７】
その理由は、ベクトルレジスタ部が、要素部およびブロードキャスト部を有し、各演算器が、ブロードキャスト部からブロードキャストされる命令要素またはデータ要素と、要素部から読み出される命令要素またはデータ要素とを用いて一連の処理を１ステージで実行するからである。これにより、本実施の形態は、全ての演算器において同一命令を実行したい場合や、全ての演算器において同一オペランドを用いたい場合に、メモリとのスループットが性能ネックになることを回避できることになる。
【０１２８】
（第８の実施の形態）
次に、本発明の第８の実施の形態について図面を参照して詳細に説明する。本実施の形態では、スカラプロセッサに対して本発明のプロセッサを適用した一例について説明する。
【０１２９】
まず、本発明の第８の実施の形態としてのスカラプロセッサ８の構成を図８に示す。
【０１３０】
図８において、スカラプロセッサ８は、命令キャッシュ部８１と、演算部８２とを備える。
【０１３１】
命令キャッシュ部８１は、本発明におけるデータ保持部の一実施形態を構成する。命令キャッシュ部８１は、主記憶装置８００から読み込まれる命令を保持する。例えば命令キャッシュ部８１は、複数の命令を保持可能なキャッシュとして構成されている。
【０１３２】
ここで、命令キャッシュ部８１には、演算部８２に対して連続的に命令を供給できるよう主記憶装置８００から逐次命令が読み込まれて保持される。このような命令キャッシュ部８１の構成には、公知の各種技術を適用可能である。
【０１３３】
演算部８２は、ｎ個の演算器８３（８３＿１〜８３＿ｎ）と、インタリーブ部８４とを有する。ここで、ｎは、１以上の整数であり、上述の命令をパイプラインで処理する場合の段階数ｎに等しい。例えば、１つの命令は、フェッチ、デコード、実行、メモリアクセス、および、ライトバックの５ステージのパイプラインで処理可能である。この場合、演算部８２は、５個の演算器８３を有する。なお、図８には、ｎ＝５として５つの演算器８３を示したが、本発明における命令の段階数および演算部が有する演算器の数を限定するものではない。
【０１３４】
各演算器８３は、命令キャッシュ部８１から供給される１つの命令の各段階を１ステージにまとめて実行する。なお、各演算器８３には、後述のインタリーブ部８４により命令が供給される。また、各演算器８３は、命令の結果をインタリーブ部８４に入力する。
【０１３５】
また、演算部８２は、各演算器８３間にフォワーディングパスを有する。各演算器８３によって生成されるデータは、フォワーディングパスを介して次の演算器８３に入力される。例えば、図８の例では、演算器８３＿１の実行段階の結果およびメモリアクセス段階の結果は、次の演算器８３＿２の実行段階へ入力される。
【０１３６】
インタリーブ部８４は、命令キャッシュ部８１から各演算器８３に対して命令を逐次供給する。すなわち、インタリーブ部８４は、あるクロックサイクルで１つ目の命令を演算器８３＿１に入力し、次のクロックサイクルで２つ目の命令を演算器８３＿２に入力する。以降、インタリーブ部８４は、３〜ｎ個目の各命令を、続く各クロックサイクルで次々と、演算器８３＿３〜８３＿ｎに入力する。そして、インタリーブ部８４は、ｎ＋１個目以降の命令を、前の命令に基づく一連の処理を終了した演算器８３＿１から順に逐次入力していく。
【０１３７】
また、インタリーブ部８４は、各演算器８３から入力される演算の結果をキャッシュ（不図示）に書き戻す。
【０１３８】
以上のように構成されたスカラプロセッサ８の動作を以下に説明する。以下の説明では、各演算器２３は、フェッチ、デコード、実行、メモリアクセス、および、ライトバックの５段階を１ステージとして命令を実行するものとする。また、演算部８２は、命令パイプラインの段階数５に等しい５つの演算器８３＿１〜８３＿５を有するものとする。
【０１３９】
最初のクロックサイクルで、インタリーブ部８４は、命令キャッシュ部８１から読みだされた１つ目の命令を、演算器８３＿１に入力する。演算器８３＿１は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを実行する。実行段階の結果およびメモリアクセス段階の結果は、演算器８３＿２にフォワーディングされる。そして、演算器８３＿１は、５クロックサイクル後の６クロックサイクル目に、結果をインタリーブ部８４に入力する。インタリーブ部８４は、入力された結果データをキャッシュへ書き戻す。
【０１４０】
２クロックサイクル目で、インタリーブ部８４は、命令キャッシュ部８１から読みだされた２つ目の命令を、演算器８３＿２に入力する。演算器８３＿２は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを実行する。実行段階の結果およびメモリアクセス段階の結果は、演算器８３＿３にフォワーディングされる。そして、演算器８３＿２は、５クロックサイクル後の７クロックサイクル目に、結果をインタリーブ部８４に入力する。インタリーブ部８４は、入力された結果データをキャッシュへ書き戻す。
【０１４１】
３クロックサイクル目で、インタリーブ部８４は、命令キャッシュ部８１から読みだされた３つ目の命令を、演算器８３＿３に入力する。演算器８３＿３は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを実行する。実行段階の結果およびメモリアクセス段階の結果は、演算器８３＿４にフォワーディングされる。そして、演算器８３＿３は、５クロックサイクル後の８クロックサイクル目に、結果をインタリーブ部８４に入力する。インタリーブ部８４は、入力された結果データをキャッシュへ書き戻す。
【０１４２】
４クロックサイクル目で、インタリーブ部８４は、命令キャッシュ部８１から読みだされた４つ目の命令を、演算器８３＿４に入力する。演算器８３＿４は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを実行する。実行段階の結果およびメモリアクセス段階の結果は、演算器８３＿５にフォワーディングされる。そして、演算器８３＿４は、５クロックサイクル後の９クロックサイクル目に、結果をインタリーブ部８４に入力する。インタリーブ部８４は、入力された結果データをキャッシュへ書き戻す。
【０１４３】
５クロックサイクル目で、インタリーブ部８４は、命令キャッシュ部８１から読みだされた５つ目の命令を、演算器８３＿５に入力する。演算器８３＿５は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを実行する。実行段階の結果およびメモリアクセス段階の結果は、演算器８３＿１にフォワーディングされる。そして、演算器８３＿５は、５クロックサイクル後の１０クロックサイクル目に、結果をインタリーブ部８４に入力する。インタリーブ部８４は、入力された結果データをキャッシュへ書き戻す。
【０１４４】
６クロックサイクル目で、インタリーブ部８４は、命令キャッシュ部８１から読みだされた６つ目の命令を、演算器８３＿１に入力する。この時、演算器８３＿１は、１クロックサイクル目で入力された命令に基づく一連の処理を完了している。そこで、演算器８３＿１は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを実行する。実行段階の結果およびメモリアクセス段階の結果は、演算器８３＿２にフォワーディングされる。そして、演算器８３＿１は、５クロックサイクル後の１１クロックサイクル目に、結果をインタリーブ部８４に入力する。インタリーブ部８４は、入力された結果データをキャッシュへ書き戻す。
【０１４５】
以降、スカラプロセッサ８は、同様の動作を繰り返す。
【０１４６】
次に、本発明の第８の実施の形態の効果について述べる。
【０１４７】
本発明の第８の実施の形態としてのスカラプロセッサは、パイプラインにおけるステージ間のオーバヘッド、回路設計の複雑化および消費電力の増大を抑えながら、ｎ段階のパイプラインと同等の高速化を実現することができる。
【０１４８】
その理由は、演算部が、各演算器により命令がパイプライン処理されると仮定した場合の段階数と同数の演算器を有し、インタリーブ部が、各クロックサイクルでそれぞれの演算器に命令を逐次供給するからである。そして、各演算器は、ｎ段のパイプラインで実行していた命令を１ステージとして実行するからである。これにより、本実施の形態のスカラプロセッサは、命令をパイプライン処理した場合と同様に各命令を連続的に開始して並行して実行することになる。しかも、本実施の形態のスカラプロセッサは、命令をパイプライン処理する場合のようにステージ間のレジスタを必要としない。したがって、本実施の形態は、ステージ間におけるセットアップ、クロックスキュー等のオーバーヘッドがない。また、本実施の形態のスカラプロセッサでは、その回路設計において、ステージ間のバランスやパイプラインハザードを考慮する必要がない。
【０１４９】
また、本実施の形態のスカラプロセッサでは、１つの演算器を用いて命令をｎ段のパイプラインで処理する場合と比較して、回路規模がｎ倍になるが、動作周波数が略１／ｎとなる。前述のように、プロセッサの消費電力が、動作周波数×回路規模×電圧×電圧に比例するとして、本実施の形態の消費電力は、パイプライン処理の場合とほぼ変わらない。
【０１５０】
このように、本実施の形態は、パイプラインのステージ段階数を増やす代わりに、並列に実行可能な演算器数を増やすことにより、パイプラインにおける問題を回避しながら、パイプラインとほぼ変わらない消費電力で同等の高スループットを実現している。
【０１５１】
（第９の実施の形態）
次に、本発明の第９の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第８の実施の形態に対して、演算部が有する演算器数をＮ（Ｎは１以上の整数）倍とする点が異なる。なお、本実施の形態の説明および各図面において、本発明の第８の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１５２】
本発明の第９の実施の形態としてのスカラプロセッサ９の構成を図９に示す。図９において、スカラプロセッサ９は、命令キャッシュ部８１と、演算部９２とを備える。
【０１５３】
演算部９２は、ｎ×Ｎ個の演算器８３（８３＿１〜８３＿ｎＮ）と、インタリーブ部９４とを有する。ここで、ｎは、１以上の整数であり、命令をパイプライン処理する場合の段階数ｎに等しい。また、Ｎは、１以上の整数である。
【０１５４】
インタリーブ部９４は、本発明の第８の実施の形態におけるインタリーブ部８４と同様に構成される。ただし、命令キャッシュ部８１から読み出される命令を逐次供給する先となる演算器８３の数が異なる。
【０１５５】
具体的にはインタリーブ部９４は、命令キャッシュ部８１から読み出される命令を、各クロックサイクルで次々と、ｎ×Ｎ個の演算器８３＿１〜８３＿ｎＮに入力する。そして、インタリーブ部９４は、ｎ×Ｎ＋１個目以降の命令を、前の命令に基づく一連の処理を終了した演算器８３＿１から順に逐次入力していく。
【０１５６】
以上のように構成されたスカラプロセッサ９の動作を以下に説明する。以下の説明では、各演算器８３は、フェッチ、デコード、実行、メモリアクセス、および、ライトバックの５段階を１ステージとして命令を処理するものとする。また、演算部９２は、命令パイプラインの段階数５の２倍に等しい１０個の演算器８３＿１〜８３＿１０を有するものとする。
【０１５７】
最初のクロックサイクルで、インタリーブ部９４は、命令キャッシュ部８１から読みだされた１つ目の命令を、演算器８３＿１に入力する。演算器８３＿１は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを行う。実行段階の結果およびメモリアクセス段階の結果は、次の演算器８３＿２にフォワーディングされる。そして、演算器８３＿１は、１０クロックサイクル後の１１クロックサイクル目に、結果をインタリーブ部９４に入力する。インタリーブ部９４は、入力された結果データをキャッシュへ書き戻す。
【０１５８】
以降、２クロックサイクル目〜１０クロックサイクル目においても同様に、インタリーブ部９４は、命令キャッシュ部８１から読みだされた命令を、演算器８３＿２〜８３＿１０に逐次入力する。演算器８３＿２〜８３＿１０は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックをそれぞれ行う。実行段階の結果およびメモリアクセス段階の結果は、それぞれ次の演算器８３にフォワーディングされる。そして、演算器８３＿２〜８３＿１０は、それぞれ１０クロックサイクル後の１２〜２０クロックサイクル目に、結果をインタリーブ部９４に入力する。インタリーブ部９４は、入力された結果データをキャッシュへそれぞれ書き戻す。
【０１５９】
１１クロックサイクル目で、インタリーブ部９４は、命令キャッシュ部８１から読みだされた１１個目の命令を、演算器８３＿１に入力する。この時、演算器８３＿１は、１クロックサイクル目で入力された命令に基づく一連の処理を完了している。そこで、演算器８３＿１は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを行う。実行段階の結果およびメモリアクセス段階の結果は、次の演算器８３＿２にフォワーディングされる。そして、演算器８３＿１は、１０クロックサイクル後の２１クロックサイクル目に、結果をインタリーブ部９４に入力する。インタリーブ部９４は、入力された結果データをキャッシュへ書き戻す。
【０１６０】
以降、スカラプロセッサ９は、同様の動作を繰り返す。
【０１６１】
次に、本発明の第９の実施の形態の効果について述べる。
【０１６２】
本発明の第９の実施の形態としてのスカラプロセッサは、パイプラインにおける課題を回避しながら、ｎ段階のパイプラインよりさらなる高性能を実現する。
【０１６３】
その理由は、演算部が、本発明の第８の実施の形態における演算器をｎのＮ倍個有し、インタリーブ部が、ｎ×Ｎ個の演算器に対して命令を逐次入力するからである。これにより、本実施の形態は、本発明の第８の実施の形態に対してクロックサイクルを１／Ｎにして動作周波数をＮ倍にすることができ、その結果、本発明の第８の実施の形態に対してＮ倍のスループットを得られることになる。
【０１６４】
なお、本発明の第８および第９の実施の形態において、命令キャッシュ部８１に保持される命令が、依存関係がないよう制約されている場合について考える。例えば、コンパイル時に、主記憶装置８００に、あらかじめ依存関係がないように制約された命令が格納されているようなケースが想定される。この場合、各実施の形態は、図１０に示すように、演算器８３間のフォワーディングパスを省略可能となる。これにより、本実施の形態は、回路を簡略化することができ、回路規模の削減および消費電力の削減という効果をさらに奏することができる。
【０１６５】
（第１０の実施の形態）
次に、本発明の第１０の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第９の実施の形態に対して、演算器の個数に合わせて命令キャッシュ部を分割した点が異なる。なお、本実施の形態の説明および各図面において、本発明の第９の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１６６】
本発明の第１０の実施の形態としてのスカラプロセッサ１００の構成を図１１に示す。図１１において、スカラプロセッサ１００は、命令キャッシュ部１０１と、演算部１０２とを備える。
【０１６７】
命令キャッシュ部１０１は、本発明におけるデータ保持部の一実施形態を構成する。命令キャッシュ部１０１は、後述の演算部１０２が有する演算器１０３と同数であるｎ×Ｎ個の分割部１０５（１０５＿１〜１０５＿ｎ）に分割される。分割部１０５は、主記憶装置８００から読み込まれる命令を保持する。また、各分割部１０５は、ｎ×Ｎ個の演算器１０３のいずれかに対応づけられる。
【０１６８】
演算部１０２は、ｎ×Ｎ個の演算器１０３（１０３＿１〜１０３＿ｎＮ）を有する。ここで、ｎは、１以上の整数であり、命令をパイプライン処理する場合の段階数ｎに等しい。また、Ｎは、１以上の整数である。なお、図１１において、ｎ＝５、Ｎ＝２の場合として１０個の演算器１０３および１０個の分割部１０５を示したが、本発明におけるｎ、Ｎの値、演算部が有する演算器の数、および、命令キャッシュ部の分割数を限定するものではない。
【０１６９】
各演算器１０３は、本発明の第９の実施の形態における演算器８３とほぼ同様に構成されるが、対応する分割部１０５から命令を取得する点が異なる。また、各演算器１０３は、命令の結果をキャッシュ（不図示）に書き戻す。
【０１７０】
以上のように構成されたスカラプロセッサ１００の動作を以下に説明する。以下の説明では、各演算器１０３は、フェッチ、デコード、実行、メモリアクセス、および、ライトバックの５段階を１ステージとして命令を処理するものとする。また、演算部１０２は、命令パイプラインの段階数５の２倍に等しい１０個の演算器１０３＿１〜１０３＿１０を有するものとする。また、命令キャッシュ部１０１は、演算器１０３と同数である１０個の分割部１０５（１０５＿１〜１０５＿１０）に分割されるものとする。
【０１７１】
最初のクロックサイクルで、演算器１０３＿１〜１０３＿１０は、分割部１０５＿１〜１０５＿１０から読みだされた命令をそれぞれ入力として得る。演算器１０３＿１〜１０３＿１０は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックをそれぞれ行う。そして、演算器１０３＿１〜１０３＿１０は、１クロックサイクル後の２クロックサイクル目に、結果をキャッシュへそれぞれ書き戻す。
【０１７２】
２クロックサイクル目で、演算器１０３＿１〜１０３＿１０は、分割部１０５＿１〜１０５＿１０から読みだされた命令をそれぞれ入力として得る。この時、演算器１０３＿１〜１０３＿１０は、１クロックサイクル目で入力された命令に基づく一連の処理をそれぞれ完了している。そこで、演算器１０３＿１〜１０３＿１０は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックをそれぞれ行う。そして、演算器１０３＿１〜１０３＿１０は、１クロックサイクル後の３クロックサイクル目に、結果をキャッシュへそれぞれ書き戻す。
【０１７３】
以降、スカラプロセッサ１００は、同様の動作を繰り返す。
【０１７４】
次に、本発明の第１０の実施の形態の効果について述べる。
【０１７５】
本発明の第１０の実施の形態としてのスカラプロセッサは、パイプラインにおける課題を回避しながら、ｎ段のパイプラインと同等以上の性能を実現する際に、回路規模を削減するとともに消費電力をより削減することができる。
【０１７６】
その理由は、命令キャッシュ部が、演算器と同数であるｎ×Ｎ個の分割部に分割され、各演算器が、各分割部から読み出される命令に基づく一連の処理を１ステージで実行するからである。
【０１７７】
これにより、本実施の形態は、本発明の第９の実施の形態においてｎ×Ｎ個の演算器を用いてｎ段のパイプラインと同等の性能を実現する際に必要としていたインタリーブ部を不要とする。そのため、本実施の形態は、本発明の第９の実施の形態に対して、回路規模を削減することになる。また、本実施の形態は、本発明の第９の実施の形態に対して、命令キャッシュ部および演算器間のインタフェースのクロックサイクルをｎ倍にしている。その結果、本実施の形態は、本発明の第９の実施の形態と同様の効果を得ながらさらに回路規模を削減し消費電力を削減することになる。
【０１７８】
（第１１の実施の形態）
次に、本発明の第１１の実施の形態について図面を参照して詳細に説明する。本実施の形態は、本発明の第１０の実施の形態に対して、命令レジスタの個数と同数の演算器を有する点が異なる。なお、本実施の形態の説明および各図面において、本発明の第１０の実施の形態と同一の構成には同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１７９】
本発明の第１１の実施の形態としてのスカラプロセッサ１１０の構成を図１２に示す。図１２において、スカラプロセッサ１１０は、Ｍ個の命令レジスタ１１１（１１１＿１〜１１１＿Ｍ）と、演算部１１２とを備える。
【０１８０】
Ｍ個の命令レジスタ１１１には、主記憶装置８００から読み込まれる命令が保持される。
【０１８１】
演算部１１２は、命令レジスタ１１１と同数のＭ個の演算器１１３（１１３＿１〜１１３＿Ｍ）を有する。
【０１８２】
各演算器１１３は、本発明の第１０の実施の形態における演算器１０３とほぼ同様に構成されるが、対応する命令レジスタ１１１から、命令を取得する点が異なる。また、各演算器１１３は、処理の結果をレジスタ（不図示）に書き戻す。
【０１８３】
以上のように構成されたスカラプロセッサ１１０の動作を以下に説明する。以下の説明では、各演算器１１３は、フェッチ、デコード、実行、メモリアクセス、および、ライトバックの５段階を１ステージとして命令を処理するものとする。
【０１８４】
最初のクロックサイクルで、演算器１１３＿１は、命令レジスタ１１１＿１から読みだされた命令を入力として得る。演算器１１３＿１は、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックを行う。そして、演算器１１３＿１は、１クロックサイクル後の２クロックサイクル目に結果をレジスタへ書き戻す。
【０１８５】
同様に、最初のクロックサイクルで、演算器１１３＿２〜１１３＿Ｍは、命令レジスタ１１１＿２〜１１１＿Ｍから読みだされた命令をそれぞれ入力として得る。演算器１１３＿２〜１１３＿Ｍは、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックをそれぞれ行う。そして、演算器１１３＿２〜１１３＿Ｍは、１クロックサイクル後の２クロックサイクル目に結果をレジスタへそれぞれ書き戻す。
【０１８６】
２クロックサイクル目で、演算器１１３＿１〜１１３＿Ｍは、命令レジスタ１１１＿１〜１１１＿Ｍから読みだされた命令をそれぞれ入力として得る。演算器１１３＿１〜１１３＿Ｍは、入力された命令をフェッチし、デコード、実行、メモリアクセス、およびライトバックをそれぞれ行う。そして、演算器１１３＿１〜１１３＿Ｍは、１クロックサイクル後の３クロックサイクル目に、結果をレジスタへそれぞれ書き戻す。
【０１８７】
以降、スカラプロセッサ１１０は、同様の動作を繰り返す。
【０１８８】
次に、本発明の第１１の実施の形態の効果について述べる。
【０１８９】
本発明の第１１の実施の形態としてのスカラプロセッサは、パイプラインにおける課題を回避しながら、パイプラインと同等以上の高性能を実現することができる。
【０１９０】
その理由は、演算部が、命令レジスタの個数Ｍと同数の演算器を有し、各演算器が、対応する命令レジスタから命令を読み出して一連の処理を１ステージで実行するからである。
【０１９１】
このように、本実施の形態は、ｎ段階の命令を１ステージで行う演算器をＭ個備えるので、ｎ段のパイプラインに対してＭ／ｎ倍の性能を実現することができる。
【０１９２】
（第１２の実施の形態）
次に、本発明の第１２の実施の形態について図面を参照して詳細に説明する。本実施の形態では、本発明の第７の実施の形態における各演算器に、本発明の第１１の実施の形態としてのスカラプロセッサを適用した例について説明する。なお、本実施の形態の説明および各図面において、本発明の第７および第１１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１９３】
本発明の第１２の実施の形態としてのプロセッサ１２０の構成を図１３に示す。図１３において、プロセッサ１２０は、ベクトルレジスタ部７１と、演算部１２２とを備える。
【０１９４】
演算部１２２は、ベクトルレジスタの要素数と同数のｍ個のスカラプロセッサ１１０（１１０＿１〜１１０＿ｍ）を有する。各スカラプロセッサ１１０は、ベクトルデータおよびベクトル命令を、ブロードキャスト部７７および対応する要素部６６から取得して、各命令要素の示す演算を各データ要素に対して実行する。このとき、各スカラプロセッサ１１０は、Ｍ個の演算器１１３を用いて、ブロードキャストされたベクトルデータおよびベクトル命令のＭ個の要素に基づくＭ個の処理を実行可能である。たとえば、各スカラプロセッサ１１０は、要素部６６およびブロードキャスト部７７のいずれかまたは両方からオペランドとなるデータ要素を読み出してもよい。また、各演算器１１３は、命令要素を、要素部６６およびブロードキャスト部７７のいずれかから読み出せばよい。これにより、演算部１２２は、全てのスカラプロセッサ１１０で同一命令を異なるオペランドに対して演算することが可能となる。あるいは、演算部１２２は、全てのスカラプロセッサ１１０で少なくとも１つの同一のオペランドを用いて異なる演算を実行することが可能となる。
【０１９５】
以上のように構成されたプロセッサ１２０の動作を以下に説明する。なお、以下の説明では、ブロードキャスト部７７からは、ベクトル命令およびオペランドの１つを表すベクトルデータがブロードキャストされ、要素部６６からは、オペランドの他方を表すデータ要素が読み出されるものとする。
【０１９６】
最初のクロックサイクルで、スカラプロセッサ１１０＿１は、ブロードキャスト部７７からブロードキャストされたベクトル命令およびベクトルデータ、および、要素部６６＿１から読みだされた１つ目のデータ要素を入力として得る。スカラプロセッサ１１０＿１は、入力された命令およびデータに基づく処理を、１クロックサイクル後の２クロックサイクル目に処理する。
【０１９７】
同様に、最初のクロックサイクルで、スカラプロセッサ１１０＿２〜１１０＿ｍは、ブロードキャスト部７７からブロードキャストされたベクトル命令およびベクトルデータ、および、要素部６６＿２〜６６ｍから読みだされたデータ要素をそれぞれ入力として得る。スカラプロセッサ１１０＿２〜１１０＿ｍは、入力された命令およびデータに基づく処理を、１クロックサイクル後の２クロックサイクル目に処理する。
【０１９８】
２クロックサイクル目で、スカラプロセッサ１１０＿１〜１１０＿ｍは、ブロードキャスト部７７からブロードキャストされたベクトル命令およびベクトルデータ、および、要素部６６＿１〜６６ｍから読みだされたデータ要素をそれぞれ入力として得る。スカラプロセッサ１１０＿１〜１１０＿ｍは、入力された命令およびデータに基づく処理を、１クロックサイクル後の３クロックサイクル目に処理する。
【０１９９】
以降、プロセッサ１２０は、同様の動作を繰り返す。
【０２００】
次に、本発明の第１２の実施の形態の効果について述べる。
【０２０１】
本発明の第１２の実施の形態としてのプロセッサは、パイプラインにおける課題を回避しながらパイプラインと同等以上の性能を実現する際に、命令またはオペランドを同一とする複数の演算を効率よく実行可能とする。
【０２０２】
その理由は、ベクトルレジスタ部が、要素部およびブロードキャスト部を有し、演算部が、要素部と同数の本発明の第１１の実施の形態としてのスカラプロセッサを有し、各スカラプロセッサが、ブロードキャスト部からブロードキャストされるベクトル命令またはベクトルデータと、要素部から読み出される命令要素またはデータ要素とを用いて一連の処理を１ステージで実行するからである。これにより、本実施の形態は、全ての演算器において同一命令を実行したい場合や、全ての演算器において同一オペランドを用いたい場合に、メモリとのスループットが性能ネックになることを回避できることになる。
【０２０３】
なお、上述した本発明の第２から第７の実施の形態において、ベクトルプロセッサにおいて各演算器が実行する浮動小数点演算が４段階からなる例を中心に説明したが、各演算器が実行する演算の種類およびその段階数を限定するものではない。
【０２０４】
また、上述した本発明の第２の実施の形態において、ベクトルプロセッサにおいて各演算器が実行する一連の処理が浮動小数点加算である例を中心に説明したが、演算の種類を限定するものではない。
【０２０５】
また、上述した本発明の第３から第７の実施の形態において、各演算器が、浮動小数点加算および浮動小数点乗算のいずれかを選択して実行可能である例を中心に説明したが、選択可能な演算の種類や種類数を限定するものではない。
【０２０６】
また、上述した本発明の第８〜第１１の実施の形態において、スカラプロセッサにおいて各演算器が実行する命令が５段階からなる例を中心に説明したが、命令の各段階の処理内容や段階数を限定するものではない。
【０２０７】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０２０８】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【０２０９】
また、上述した各実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
主記憶装置から読み込まれる各データを保持するデータ保持部と、
前記データに基づく一連の処理を終了してから次のデータに基づく前記一連の処理を開始する複数の演算器を用いて、前記各データに基づく一連の処理を並列に実行する演算部と、
を備えたプロセッサ。
（付記２）
前記演算部は、前記データ保持部に保持される各データを前記複数の演算器に対してインタリーブするインタリーブ部をさらに有することを特徴とする付記１に記載のプロセッサ。
（付記３）
前記データ保持部は、前記演算器の個数に分割されて各分割部分を各演算器に対応させ、
前記各演算器は、対応する前記分割部分に保持されたデータに基づいて、前記一連の処理を実行することを特徴とする付記１に記載のプロセッサ。
（付記４）
前記演算部は、前記一連の処理がｎ（ｎは１以上の整数）段階からなる場合、ｎのＮ（Ｎは１以上の整数）倍個の前記演算器を有することを特徴とする付記１から付記３のいずれか１つに記載のプロセッサ。
（付記５）
前記データ保持部は、前記各演算器に対してブロードキャストされるデータをさらに保持し、
前記各演算器は、前記ブロードキャストされるデータにさらに基づいて、前記一連の処理を実行することを特徴とする付記１から付記４のいずれか１つに記載のプロセッサ。
（付記６）
前記演算部は、前記各演算器において前記一連の処理において生成されるデータを他の演算器に入力するフォワーディングパスを前記演算器間に有することを特徴とする付記１から付記５のいずれか１つに記載のプロセッサ。
（付記７）
前記データ保持部は、データ要素からなるベクトルデータを保持するベクトルレジスタによって構成され、
前記各演算器は、前記データ要素に対する演算を前記一連の処理として実行することを特徴とする付記１から付記５のいずれか１つに記載のプロセッサ。
（付記８）
前記データ保持部は、前記各データ要素に対する演算の内容を表す命令要素からなるベクトル命令をさらに保持し、
前記各演算器は、前記各データ要素に対して対応する前記命令要素の示す演算を前記一連の処理として実行することを特徴とする付記７に記載のプロセッサ。
（付記９）
前記演算部は、前記ベクトルレジスタの要素数と同数の前記演算器を有し、
前記各演算器は、対応する前記データ要素に対して前記一連の処理を実行することを特徴とする付記７または付記８に記載のプロセッサ。
（付記１０）
前記データ保持部は、前記各演算器に対する命令を表す情報を保持し、
前記各演算器は、前記命令に基づく一連の処理を終了してから次の命令に基づく一連の処理を開始することを特徴とする付記１から付記５のいずれか１つに記載のプロセッサ。
（付記１１）
主記憶装置から読み込まれてデータ保持部に保持される各データに基づく一連の処理を終了してから次のデータに基づく前記一連の処理を開始する複数の演算器を用いて、前記各データに基づく一連の処理を並列に実行する、プロセッサの処理方法。
（付記１２）
前記データ保持部に保持される各データを前記複数の演算器に対してインタリーブすることにより、前記各データに基づく一連の処理を並列に実行することを特徴とする付記１１に記載のプロセッサの処理方法。
【符号の説明】
【０２１０】
１、１２０    プロセッサ
２、３、４、５、６、７、    ベクトルプロセッサ
８、９、１００、１１０    スカラプロセッサ
１１    データ保持部
１２、２２、３２、４２、５２、６２、７２、８２、９２、１０２、１１２、１２２    演算部
１３、２３、３３、５３、６３、７３、８３、１０３、１１３      演算器
２１、３１、５１、６１、７１    ベクトルレジスタ部
２４、３４、４４、８４、９４    インタリーブ部
５５、１０５    分割部
６６    要素部
７７    ブロードキャスト部
８１、１０１    命令キャッシュ部
１１１    命令レジスタ
８００    主記憶装置
８０１    メモリ
８０２    メモリインタリーブ部
９００    プロセッサ
９０１    論理回路
【図１】
2015041176.tif 000003
【図２】
2015041176.tif 000004
【図３】
2015041176.tif 000005
【図４】
2015041176.tif 000006
【図５】
2015041176.tif 000007
【図６】
2015041176.tif 000008
【図７】
2015041176.tif 000009
【図８】
2015041176.tif 000010
【図９】
2015041176.tif 000011
【図１０】
2015041176.tif 000012
【図１１】
2015041176.tif 000013
【図１２】
2015041176.tif 000014
【図１３】
2015041176.tif 000015
【図１４】
2015041176.tif 000016