(57)【要約】  本発明は、グローバルメモリ上のデータ配置を変更することなく、ＳＩＭＤプロセッサの演算要素を活用してプログラムを高速に処理できるようにする。制御プロセッサ（ＣＰ：Ｃｏｎｔｒｏｌ  Ｐｒｏｃｅｓｓｏｒ）と複数の演算要素（ＰＥ：Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）とを備えたＳＩＭＤプロセッサであって、前記複数のＰＥが前記ＣＰから発行された単一の命令を実行するＳＩＭＤ動作を行うとともに、前記複数のＰＥのうちの特定のＰＥが前記ＣＰから発行された命令及びデータを受け取る命令・データ分配動作を行い、前記命令・データ分配動作において前記ＣＰから各ＰＥに送付された命令を、各ＰＥが命令のソースオペランドが揃った後に実行するシストリック動作を行う。
2011105408.tif 000002
【特許請求の範囲】
【請求項１】
制御プロセッサ（ＣＰ：Ｃｏｎｔｒｏｌ  Ｐｒｏｃｅｓｓｏｒ）と複数の演算要素（ＰＥ：Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）とを備えたＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサであって、
前記複数のＰＥが前記ＣＰから発行された単一の命令を実行するＳＩＭＤ動作を行うとともに、
前記ＣＰが前記複数のＰＥのそれぞれに対して相異なる命令又は相異なる命令及びデータを分配する命令・データ分配動作を行い、
前記複数のＰＥは、それぞれ、命令のソースオペランドが揃った後に前記命令・データ分配動作において前記ＣＰから送付された命令を実行するシストリック動作を行うことを特徴とするＳＩＭＤプロセッサ。
【請求項２】
前記ＣＰは、前記命令・データ分配動作において各ＰＥに命令を分配するために、全ＰＥに対する命令発行パスを逐次的かつ排他的に利用することを特徴とする、請求項１に記載のＳＩＭＤプロセッサ。
【請求項３】
前記シストリック動作において、前記複数のＰＥは、それぞれ、実行した演算命令の演算結果を他のＰＥに転送するとともに、他のＰＥから転送された演算結果を、前記命令・データ分配動作において送付された命令に対するソースオペランドとすることを特徴とする、請求項１又は２に記載のＳＩＭＤプロセッサ。
【請求項４】
前記シストリック動作において、前記複数のＰＥは、それぞれ、前記ＣＰから送付されたデータを、前記命令・データ分配動作において送付された命令に対するソースオペランドとすることを特徴とする、請求項１又は２に記載のＳＩＭＤプロセッサ。
【請求項５】
前記シストリック動作において、前記複数のＰＥのそれぞれによるグローバルメモリアクセスを調停し、グローバルメモリに対するアクセスの排他性を保証する大域アクセス調停部をさらに備えていることを特徴とする、請求項１乃至４のいずれか１項に記載のＳＩＭＤプロセッサ。
【請求項６】
前記複数のＰＥは、それぞれ、前記命令・データ分配動作中に動作を停止状態に保つためのフラグを格納するレジスタを備えていることを特徴とする、請求項１乃至５のいずれか１項に記載のＳＩＭＤプロセッサ。
【請求項７】
前記複数のＰＥは、それぞれ、前記ＳＩＭＤ動作と前記シストリック動作との間で動作を切り替えるためのフラグを格納するレジスタを備えていることを特徴とする、請求項１乃至６のいずれか１項に記載のＳＩＭＤプロセッサ。
【請求項８】
前記複数のＰＥは、それぞれ、前記ＣＰから発行された命令を自身の命令バッファに格納するか否かを選択するセレクタを備えていることを特徴とする、請求項１乃至７のいずれか１項に記載のＳＩＭＤプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１０−０３８９７６号（２０１０年２月２４日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。【０００２】
本発明は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサに関する。
【背景技術】
【０００３】
図９は、非特許文献１に記載されたＳＩＭＤプロセッサの構成を示す図である。図９を参照すると、ＳＩＭＤプロセッサは、複数の演算要素（ＰＥ：Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）１１０と、複数のＰＥ１１０に対して同一の命令を発行する制御プロセッサ（ＣＰ：Ｃｏｎｔｒｏｌ  Ｐｒｏｃｅｓｓｏｒ）１３０とを有する。ＳＩＭＤプロセッサによると、安価なハードウェアに基づいて、高い演算性能を実現することができる。【０００４】
ＳＩＭＤプロセッサにおいては、ＣＰ１３０の制御下で、ＣＰ１３０が管理するグローバルメモリ（Ｇｌｏｂａｌ  Ｍｅｍｏｒｙ）１４０上の所定位置に配置されたデータを、アドレス順に次々とＰＥ１１０側のローカルメモリ（Ｌｏｃａｌ  Ｍｅｍｏｒｙ）１２０に読み込んだ後、全ＰＥ１１０はＣＰ１３０から発行される命令に従って一斉に各自のローカルメモリ１２０上のデータを対象とする演算を行う。【０００５】
なお、特許文献１に、ＳＩＭＤ型とシストリックアレイ型の構成を切り替えることができる画像処理プロセッサが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−０３４９５３号公報
【非特許文献】
【０００７】
【非特許文献１】Ｓ．Ｋｙｏ，  Ｔ．Ｋｏｇａ，  Ｓ．Ｏｋａｚａｋｉ，  Ｒ．Ｕｃｈｉｄａ，  Ｓ．Ｙｏｓｈｉｍｏｔｏ，  Ｉ．Ｋｕｒｏｄａ，“Ａ  ５１．２ＧＯＰＳ  Ｓｃａｌａｂｌｅ  Ｖｉｄｅｏ  Ｒｅｃｏｇｎｉｔｉｏｎ  Ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  Ｉｎｔｅｌｌｉｇｅｎｔ  Ｃｒｕｉｓｅ  Ｃｏｎｔｒｏｌ  Ｂａｓｅｄ  ｏｎ  ａ  Ｌｉｎｅａｒ  Ａｒｒａｙ  ｏｆ  １２８  ４−Ｗａｙ  ＶＬＩＷ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔｓ，”  ＩＳＳＣＣ２００３  Ｄｉｇｅｓｔ  ｏｆ  Ｔｅｃｈｎｉｃａｌ  Ｐａｐｅｒｓ，  ２．６，  ｐｐ．４８−４９，  ２００３．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
プログラムをＳＩＭＤプロセッサに移植して並列処理により高速化するには、一般に、グローバルメモリ１４０上のデータをＰＥアレイに読み込む際に都合が良いように、グローバルメモリ１４０上のデータ配置を変更する必要がある。しかし、グローバルメモリ１４０上のデータ配置を変更するには、アルゴリズムを設計し直さねばならない場合があり、プログラム開発者にとって大きな負担となっている。このことは、ＳＩＭＤプロセッサの利用を妨げる要因となっている。【０００９】
プログラム開発者によるグローバルメモリ１４０上のデータ配置の変更作業を容易にするために、図９に示したＳＩＭＤプロセッサのように各ＰＥ１１０にローカルにメモリブロックを持たせる代わりに、動的再構成型プロセッサのように多数のメモリブロックと多数のＰＥとの間を豊富な配線（例えばクロスバー）で接続する方法が考えられる。しかし、この方法によると、ＳＩＭＤプロセッサに多数の配線回路を追加する必要があるため、ＳＩＭＤプロセッサを実現するためのハードウェアが高価となる。【００１０】
以上のことから、安価なハードウェア構成に基づくＳＩＭＤプロセッサにプログラムを移植するためには、グローバルメモリ１４０上のデータ配置を変更する必要があり、グローバルメモリ１４０上のデータ配置を変更するには、アルゴリズムの変更が必要となるため、プログラム開発者にとって大きな負担となり、ＳＩＭＤプロセッサの利用が妨げられる。【００１１】
そこで、グローバルメモリ上のデータ配置を変更することなく、ＳＩＭＤプロセッサの演算要素を活用してプログラムを高速に処理できるようにすることが課題となる。本発明の目的は、かかる課題を解決するＳＩＭＤプロセッサを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の第１の視点に係るＳＩＭＤプロセッサは、
制御プロセッサ（ＣＰ：Ｃｏｎｔｒｏｌ  Ｐｒｏｃｅｓｓｏｒ）と複数の演算要素（ＰＥ：Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）とを備えたＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサであって、
前記複数のＰＥが前記ＣＰから発行された単一の命令を実行するＳＩＭＤ動作を行うとともに、
前記ＣＰが前記複数のＰＥのそれぞれに対して相異なる命令又は相異なる命令及びデータを分配する命令・データ分配動作を行い、
前記複数のＰＥは、それぞれ、命令のソースオペランドが揃った後に前記命令・データ分配動作において前記ＣＰから送付された命令を実行するシストリック動作を行う。
【発明の効果】
【００１３】
本発明に係るＳＩＭＤプロセッサによると、グローバルメモリ上のデータ配置を変更することなく、ＳＩＭＤプロセッサの演算要素を活用してプログラムを高速に処理することができる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に係るＳＩＭＤプロセッサに含まれるＰＥアレイ中の１ＰＥの構成を示す図である。
【図２】実施形態に係るＳＩＭＤプロセッサに含まれる制御プロセッサ（ＣＰ）の構成を示す図である。
【図３】実施形態に係るＳＩＭＤプロセッサにおける命令フォーマットを示す図である。
【図４】実施形態に係るＳＩＭＤプロセッサの構成を一例として示す図である。
【図５】ＳＩＭＤプロセッサにおけるＰＥ間データ転送の様子を示す図である。
【図６】実施例について説明するための図である。
【図７】実施例について説明するための図である。
【図８】実施例における擬似コードを示す図である。
【図９】従来のＳＩＭＤプロセッサの構成を一例として示す図である。
【図１０】従来のＳＩＭＤプロセッサに含まれるＰＥアレイ中の１ＰＥの構成を示す図である。
【発明を実施するための形態】
【００１５】
第１の展開形態によると、上記第１の視点に係るＳＩＭＤプロセッサが提供される。
【００１６】
第２の展開形態によると、前記ＣＰは、前記命令・データ分配動作において各ＰＥに命令を分配するために、全ＰＥに対する命令発行パスを逐次的かつ排他的に利用する、ＳＩＭＤプロセッサが提供される。
【００１７】
第３の展開形態によると、、前記シストリック動作において、前記複数のＰＥは、それぞれ実行した演算命令の演算結果を他のＰＥに転送するとともに、他のＰＥから転送された演算結果を、前記命令・データ分配動作において送付された命令に対するソースオペランドとする、ＳＩＭＤプロセッサが提供される。
【００１８】
第４の展開形態によると、前記シストリック動作において、前記複数のＰＥは、それぞれ、前記ＣＰから送付されたデータを、前記命令・データ分配動作において送付された命令に対するソースオペランドとする、ＳＩＭＤプロセッサが提供される。
【００１９】
第５の展開形態によると、前記シストリック動作において、前記複数のＰＥのそれぞれによるグローバルメモリアクセスを調停し、グローバルメモリに対するアクセスの排他性を保証する大域アクセス調停部（Ｇｌｏｂａｌ  Ａｃｃｅｓｓ  Ａｒｂｉｔｅｒ）をさらに備えている、ＳＩＭＤプロセッサが提供される。
【００２０】
第６の展開形態によると、前記複数のＰＥは、それぞれ、前記命令・データ分配動作中に動作を停止状態に保つためのフラグを格納するレジスタを備えている、ＳＩＭＤプロセッサが提供される。
【００２１】
第７の展開形態によると、前記複数のＰＥは、それぞれ、前記ＳＩＭＤ動作と前記シストリック動作との間で動作を切り替えるためのフラグを格納するレジスタを備えている、ＳＩＭＤプロセッサが提供される。
【００２２】
第８の展開形態によると、前記複数のＰＥは、それぞれ、前記ＣＰから発行された命令を自身の命令バッファに格納するか否かを選択するセレクタを備えている、ＳＩＭＤプロセッサが提供される。
【００２３】
本発明によるＳＩＭＤプロセッサは、ＰＥアレイ全体が制御プロセッサ（ＣＰ）から発行される単一の命令を実行するＳＩＭＤ動作を行うとともに、ＣＰが命令発行パスを利用して、相異なる命令コードやデータを逐次的に各ＰＥに送信する命令・データ分配動作を行い、ＰＥアレイ内の各ＰＥは、ＣＰからサイクル毎に放送されてくる命令ではなく、命令・データ分配動作によりＣＰから送信された命令を、当該命令のソースオペランドが揃った時点で実行し、当該命令の実行結果を指定された他のＰＥのレジスタ資源に書き込むように指定するシストリック動作を行う。また、シストリック動作中に、各ＰＥは、命令のオペランドが他のＰＥ又はＣＰからの送付データによって書き込まれることで揃った後に、命令の実行を開始し、演算命令の場合には演算結果を他のＰＥに送付し、メモリアクセス命令の場合にはグローバルメモリにアクセスする。
【００２４】
次に、本発明に係るＳＩＭＤプロセッサによってもたらされる効果について説明する。
【００２５】
従来のＳＩＭＤプロセッサにおいては、全ＰＥが同一の命令を実行するため、メモリアクセス命令が全ＰＥで一斉に発生してしまう。したがって、かかるＳＩＭＤプロセッサの性能を引き出すには、各ＰＥがアクセス可能なメモリ空間を、各ＰＥにローカルな空間に限定する必要があった。
【００２６】
しかし、本発明のＳＩＭＤプロセッサによると、命令・データ分配動作により、各ＰＥに互いに異なる命令を発行することができる。したがって、ＰＥ間でメモリアクセス命令を実行するタイミングをずらしたり、特定のＰＥにのみメモリアクセス命令を行わせたりすることができる。このとき、メモリ上でのデータ配置を元のままとし、ＰＥがアクセス可能なメモリ空間をグローバルなメモリ空間に広げたとしても、単一のハードウェア資源であるグローバルなメモリ空間の利用に際して多数のＰＥが競合する頻度を低下させることができ、プロセッサの演算資源による処理性能を向上させることができる。
【００２７】
ゆえに、本発明に係るＳＩＭＤプロセッサによると、プログラムのメモリ上におけるデータ配置を変更することなく、ＳＩＭＤプロセッサが有する演算資源を利用した処理の高速化が可能となる（第１の効果）。
【００２８】
また、ＣＰがＰＥアレイに対して命令・データ分配動作を行うことで、１イタレーション分の処理をデータフローグラフとして表現したときの各演算ノードに相当する個々の演算命令及び関連する定数データを各ＰＥに分配し、データフローグラフにおける各演算ノードを各ＰＥに割当てることができる。さらに、ＣＰがＰＥアレイにシストリック動作モードで実行を開始させるために、起動データを１つ以上のＰＥに対して繰り返し発行することで、異なるイタレーションを次々と重畳した形で起動し、ＰＥアレイに処理させることができる。
【００２９】
したがって、本発明に係るＳＩＭＤプロセッサによると、プログラムのループ部分のうちのイタレーション間でデータ依存関係がない部分（並列ループ部分）に対する処理を、グローバルメモリ上のデータ配置を変更することなく、ＰＥアレイを利用してパイプライン的に処理することで、高速化することができる（第２の効果）。
【００３０】
上記の命令・データ分配動作を実現するには、従来のＳＩＭＤプロセッサに設けられた全ＰＥへの命令発行パスの回路資源、並びに、各ＰＥからＣＰ及びＣＰから各ＰＥへのデータ配線回路資源をそのまま利用することができる。また、ＰＥ毎からグローバルメモリ空間へのアクセスを行うための結線として、従来のＳＩＭＤプロセッサに設けられたＣＰとＰＥアレイ間でスカラーデータをやり取りするための配線回路資源をそのまま利用することができる。さらに、データフローグラフ上の演算ノード同士が互いにデータを送受信する動作を行うＰＥ間において、データを送受信するためのＰＥ間結線として、従来のＳＩＭＤプロセッサに設けられた隣接ＰＥ間の配線資源をそのまま利用することができる。
【００３１】
したがって、本発明に係るＳＩＭＤプロセッサによると、従来のＳＩＭＤプロセッサに少量の回路を追加するだけで、上記第１の効果及び第２の効果が得られる（第３の効果）。
【００３２】
（実施形態）
次に、実施形態に係るＳＩＭＤプロセッサについて、図面を参照して説明する。
【００３３】
本実施形態のＳＩＭＤプロセッサについて説明する前に、比較のために、従来のＳＩＭＤプロセッサの構成を示す。図１０は、従来のＳＩＭＤプロセッサに含まれるＰＥアレイ中の１つのＰＥ１１０の構成を示す図である。
【００３４】
図１０を参照すると、ＰＥ１１０は、ＣＰ１３０（図９）から発行された命令を格納するための命令バッファ（ｉｎｓｔｂ）１１１、汎用レジスタ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ）ｒ０〜ｒ７、演算器（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）１１２、ＰＥ間結合網への出入り口（Ｌｅｆｔ／Ｒｉｇｈｔ  Ｉｎｔｅｒ  ＰＥ  Ｃｏｎｎｅｃｔｉｏｎ）、ＰＥ毎のローカルメモリ（Ｌｏｃａｌ  Ｍｅｍｏｒｙ）１２０を有する。すべてのＰＥ１１０は、サイクル毎にＣＰ１３０から発行された単一の命令を一斉に実行する。
【００３５】
図１は、本実施形態に係るＳＩＭＤプロセッサに含まれるＰＥアレイ中の１ＰＥ１０の構成を示す。図１を参照すると、ＰＥ１０は、命令バッファ（ｉｎｓｔｂ）１１、汎用レジスタ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ）ｒ０〜ｒ１５、演算器（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）１２、ＰＥ間結合網への出入り口（Ｌｅｆｔ／Ｒｉｇｈｔ  Ｉｎｔｅｒ  ＰＥ  Ｃｏｎｎｅｃｔｉｏｎ）、ＰＥ毎のローカルメモリ（Ｌｏｃａｌ  Ｍｅｍｏｒｙ）２０を有する。ＰＥ１０は、さらに、レジスタｓｔｏｐ，ｍｏｄｅ、及び、セレクタｓｅｌを有する。図１において、図１０に対して追加された構成要素（太線部分）、すなわち、レジスタｓｔｏｐ，ｍｏｄｅ，セレクタｓｅｌ，レジスタｃｍ，ｓｘ，ｓｙのそれぞれについて説明する。
【００３６】
レジスタｓｔｏｐは、命令・データ分配動作中にＰＥ１０の動作を停止状態に保つための制御レジスタである。
【００３７】
レジスタｍｏｄｅは、シストリック動作と従来のＳＩＭＤ動作とを切り替えるための１ビットの動作モード選択レジスタである。
【００３８】
セレクタｓｅｌは、ＣＰから発行された命令を命令バッファ（ｉｎｓｔｂ）１１に格納するか否かを選択するセレクタである。レジスタｃｍ，ｓｘ，ｓｙは、シストリック動作中に、当該レジスタへのライトが発生する度に、所定カウンターレジスタがデクリメントされるデータ待合せ機能を有する汎用レジスタ（待合せレジスタ）群である。
【００３９】
図２は、本実施形態に係るＳＩＭＤプロセッサに含まれる制御プロセッサ（ＣＰ）３０の構成を概略的に示す図である。図２を参照すると、ＣＰ３０は、従来のＳＩＭＤプロセッサにおけるＣＰ１３０と同様に、自ら演算を行うためのデータパスを有し、命令・データキャッシュ（Ｉｎｓｔｒｕｃｔｉｏｎ／Ｄａｔａ  Ｃａｃｈｅ）３１、及びメモリアクセス調整部であるアービタ（Ａｒｂｉｔｅｒ）３３を介してグローバルメモリ（Ｇｌｏｂａｌ  Ｍｅｍｏｒｙ）４０に接続されている。ＣＰ３０は、自らのデータパスで実行すべき命令及びＰＥアレイ全体に放送すべき命令を、グローバルメモリ４０から読み出して発行し、ＣＰ３０上の演算用データ及びＰＥ１０のローカルメモリ２０との間で送受信されるデータを、グローバルメモリ４０から読み出したり、グローバルメモリ４０に書き込んだりする。
【００４０】
図３は、本実施形態に係るＳＩＭＤプロセッサにおける命令フォーマットを一例として示す図である。本実施形態のＳＩＭＤプロセッサにおけるＣＰ３０は、従来のＳＩＭＤプロセッサにおけるＣＰ１３０とは異なり、命令若しくはデータ又はこれらの両方を特定のＰＥに同時に送付し、特定の１つのＰＥ又は指定された複数のＰＥに実行の開始を指定することができるように、図３に示すような命令フォーマットから成る命令セットを用いる。
【００４１】
図３を参照すると、ＣＰ３０の命令フォーマットは、命令のヘッダ（ｈｅａｄｅｒ）部のビットパタンに応じて、異なるフォーマットを有する。
【００４２】
「ｈｅａｄｅｒ」部のビットパタンが“００”である場合には、ＣＰ３０上で動作する命令であることを示す。
【００４３】
「ｈｅａｄｅｒ」部のビットパタンが“０１”である場合には、ＳＩＭＤモードで動作する場合におけるＰＥアレイの動作を指定するＰＥ命令であることを示す。
【００４４】
「ｈｅａｄｅｒ」部のビットパタンが“１０”である場合には、命令Ａは特定ＰＥ１０に分配すべきものであることを示し、後続の命令として、必ずヘッダ部のビットパタンが“１１”の命令Ｂが続き、命令Ｂの「Ｔａｒｇｅｔ  ＰＥＩＤ」部が示すＰＥ番号のＰＥの命令バッファ（ｉｎｓｔｂ）１１に命令Ａを書き込み、かつ、命令Ｂの「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部が示すＰＥ番号のＰＥのレジスタに命令Ｂの「ｄａｔａ」部を書き込む動作を指定する。
【００４５】
「ｈｅａｄｅｒ」部のビットパタンが“１１”である場合には、その命令の「Ｔａｒｇｅｔ  ＰＥＩＤ」部が示すＰＥ番号のＰＥの「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部が示す番号のレジスタに「ｄａｔａ」部の値を書き込む動作、又は、「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部がｃｍの場合は、命令バッファ（ｉｎｓｔｂ）１１内に格納中の命令がソースオペランドとしてｃｍを持つＰＥ１０のレジスタｃｍにｄａｔａ部の値を書き込む動作を指定する。
【００４６】
図４は、本実施形態に係るＳＩＭＤプロセッサにおけるＰＥアレイの全体構成を示す。図４を参照すると、太線の部分は、従来のＳＩＭＤプロセッサに対して、個々のＰＥ１０以外に、本発明で新たに付け加えた回路要素である大域アクセス調停部（Ｇｌｏｂａｌ  Ａｃｃｅｓｓ  Ａｒｂｉｔｅｒ）５０を示す。
【００４７】
大域アクセス調停部５０は、全ＰＥ２０のローカルメモリブロックを、まとめて多バンクのキャッシュメモリ本体として利用できるように管理するモジュールであり、シストリック動作モード中に、多数のＰＥ１０から同時にメモリアクセスが発生した場合のメモリアクセスを調停する。
【００４８】
なお、大域アクセス調停部５０の実装方式として、次の方式が考えられる。すなわち、２以上のＰＥから同時にメモリアクセス要求があると、ＰＥアレイ全体の動作を一時停止させ、各ＰＥのメモリアクセス要求に一つずつ順に応えてから、ＰＥアレイの動作を再開させるという、最も性能が低いもののハードウェア実現コストが安い実装方式が考えられる。一方、全てのＰＥのローカルメモリブロックをクロスバー機構で接続し、できるだけ短い遅延で多数のメモリアクセス要求に応えるという、最も性能が高いもののハードウェア実現コストが高い実装方式が考えられる。任意のプログラムコードを重畳実行させた場合における最大メモリアクセス遅延を静的に定めることができれば、いずれの実装方式を採用してもよい。
【００４９】
次に、実施形態のＳＩＭＤプロセッサ全体の動作について説明する。まず、ＣＰ３０は、サイクル毎、プログラムカウンタ（ＰＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）３５の値が指すアドレスの命令とその次のアドレスの命令の２つの命令を同時に読み出す。ただし、ＰＣ３５のカウント値がサイクル毎に＋１されるのか又は＋２されるのか、及び、読み出された命令をどのような形で処理するのかについては、読み出された先頭命令Ａの「ｈｅａｄｅｒ」部の値に応じて以下のように決定する。
【００５０】
読み出された先頭命令Ａの「ｈｅａｄｅｒ」部の値が“００”である場合には、ＣＰ命令であることを表し、次サイクルまでにＰＣ３５のカウント値は＋１され、命令ＡはＣＰ３０の処理部で実行される。
【００５１】
読み出された先頭命令Ａの「ｈｅａｄｅｒ」部の値が“０１”である場合には、ＰＥ命令であることを表し、ＰＣ３５のカウント値は＋１され、次サイクルまでに命令ＡがＰＥアレイに送られ、次々サイクルに全ＰＥ１０は命令Ａを実行する。
【００５２】
読み出された先頭命令Ａの「ｈｅａｄｅｒ」部の値が“１０”である場合には、命令・データ分配動作の指定であることを表し、ＰＣ３５のカウント値は＋２され、次サイクルまでに、全ＰＥ１０のレジスタｓｔｏｐをＯＮにセットし、後続命令Ｂの「ｔａｒｇｅｔ  ＰＥＩＤ」部が指定するＰＥ番号のＰＥの命令バッファ（ｉｎｓｔｂ）１１に、命令Ａの「ｈｅａｄｅｒ」部に命令Ａの「ｃｏｕｎｔｅｒ」部の２ビットをコピーした上で命令Ａを書き込む。同様に、次サイクルまでに、同ＰＥに含まれる、命令Ｂの「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部が指定するレジスタに、命令Ｂの「ｄａｔａ」部の値を書き込む。
【００５３】
最後に、読み出された先頭命令Ａの「ｈｅａｄｅｒ」部の値が“０１”である場合には、シストリック動作の指定であることを表し、ＰＣ３５のカウント値は＋１され、次サイクルまでに、全ＰＥのレジスタｓｔｏｐ及びレジスタｍｏｄｅをそれぞれＯＦＦ及びＯＮにセットし、命令Ａの「ｔａｒｇｅｔ  ＰＥＩＤ」部が指定するＰＥ番号のＰＥに含まれる、命令Ａの「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部が指定するレジスタに、命令Ａの「ｄａｔａ」部の値を書き込む。
【００５４】
図３を参照すると、「ｈｅａｄｅｒ」部の値が“１０”の命令は、「ｃｏｕｎｔｅｒ」部を含む。「ｃｏｕｎｔｅｒ」部には、当該命令が持つソースオペランドのうち、「待合せレジスタ」の数に等しいか又はそれよりも大きい値が設定されているものとする。
【００５５】
ＰＥ側では、レジスタｍｏｄｅがＯＮの期間中において、命令バッファ（ｉｎｓｔｂ）１１に格納されている命令Ｃのソースオペランドに指定されたいずれかの「待合せレジスタ」に対し、書き込み動作が起きるたびに、命令Ｃの「ｃｏｕｎｔｅｒ」部が１だけデクリメントされる。そして、「ｃｏｕｎｔｅｒ」部がゼロにデクリメントされたサイクルに命令Ｃの実行を開始する。命令Ｃの実行は１サイクルで終了し、その実行結果を、命令Ｃの「ＰＥＩＤ」部が指定するＰＥ番号のＰＥに含まれる、命令Ｃの「Ｄｅｓｔｉｎａｔｉｏｎ  ｒｅｇ  ＩＤ」部が指定するレジスタに書き込むために、実行結果値は次サイクルまでにＰＥ結合線上に送り出される。また、命令Ｃの実行終了と同時に、命令Ｃの「ｃｏｕｎｔｅｒ」部には、命令Ｃの「ｈｅａｄｅｒ」部の値がコピーされる。
【００５６】
したがって、例えば、ＣＰ３０がシストリック動作において、「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部に待合せレジスタｓｘが指定されている命令Ａを実行した場合、命令Ａの「ｔａｒｇｅｔ  ＰＥＩＤ」部が指定するＰＥ番号のＰＥ上のレジスタｓｘに対して書き込み動作Ｐが行われる。ここで、当該ＰＥの命令バッファ（ｉｎｓｔｂ）１１内の命令Ｃの「ｃｏｕｎｔｅｒ」部に値１が設定されており、かつ、レジスタｓｘが命令Ｃのソースオペランドのうちの唯一の「待合せレジスタ」である場合、上記のレジスタｓｘに対する書き込み動作Ｐの結果、当該ＰＥは命令Ｃの実行を開始し、命令Ｃの実行終了と同時に、命令Ｃの「ｃｏｕｎｔｅｒ」部に、命令Ｃの「ｈｅａｄｅｒ」部の値である１を再度設定する。ただし、命令Ｃの実行終了と同じサイクルに、当該ＰＥの待合せレジスタｓｘに対して書き込み動作が再度起きた場合には、「ｃｏｕｎｔｅｒ」部には、１ではなく、そのデクリメントした結果である０がセットされるため、命令Ｃは当該ＰＥ上で連続して実行される。
【００５７】
他の例として、ＣＰ３０がシストリック動作において「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部に待合せレジスタｃｍが指定されている命令Ａを実行した場合には、命令バッファ（ｉｎｓｔｂ）１１内にｃｍをソースオペランドに持つすべてのＰＥに対し、ｃｍへの書き込み動作Ｐが生じる。ここで、ＰＥの命令バッファ（ｉｎｓｔｂ）１１内の命令Ｃの「ｃｏｕｎｔｅｒ」部に値２が設定されており、ｃｍ及びｓｙがいずれも命令Ｃのソースオペランドである場合には、上記のＣＰによる命令Ａの実行に起因するｃｍへの書き込み動作Ｐだけでは、当該ＰＥが命令Ｃの実行を開始しないが、書き込み動作Ｐが発生したのと同一のサイクル、あるいはそれ以降のサイクルにおいて別途ｓｙへの書き込み動作Ｑが発生すれば、当該ＰＥが命令Ｃの実行を開始する。そして、命令Ｃの実行終了と同時に、命令Ｃの「ｃｏｕｎｔｅｒ」部には、値２が命令Ｃの「ｈｅａｄｅｒ」部からコピーされて再度設定されるが、命令Ｃの実行終了と同一のサイクルに、当該ＰＥの待合せレジスタｓｘとｃｍに対し、同時に書き込み動作が起きた場合には、「ｃｏｕｎｔｅｒ」部には、２ではなく、これを２回だけデクリメントした結果である０が再度セットされる。したがって、命令Ｃが当該ＰＥ上で連続して実行される。
【００５８】
上記の２つの動作例からわかるように、ＣＰ３０は「シストリック動作」指示命令の発行を通じて、命令バッファ（ｉｎｓｔｂ）１１に格納されている命令の実行をＰＥに指示することができる。また、命令バッファ（ｉｎｓｔｂ）１１に格納されている命令が、その実行結果の書き込み先として、他のＰＥの「待合せレジスタ」を指定している場合には、命令の実行がＰＥ間を伝播する。また、ＣＰ３０は、多数のＰＥのレジスタｃｍに対し書き込み動作を行うことが可能なので、同時に多数のＰＥを「待ち」状態から「実行」状態に移すこともできる。このように、ＣＰ３０は「シストリック動作」指示命令の発行により、ＰＥアレイ上にシストリック的な命令実行の連鎖を引き起こすことができる。
【実施例】
【００５９】
次に、具体的な実施例を用いて、実施形態に係るＳＩＭＤプロセッサの動作について説明する。図５（ａ）は、本実施例において、ＰＥアレイにマップする処理のループ部分に相当する擬似コードである。図５（ａ）を参照すると、擬似コードは、配列Ａからデータを読み出して変数ａを加算して配列Ｂに書き込む動作を、配列Ａの要素０から７までを対象に、計８回のイタレーションで行うプログラムコードである。【００６０】
図５（ｂ）は、本実施形態のＳＩＭＤプロセッサのＰＥアレイ群のうちのＰＥ０，ＰＥ１，ＰＥ２，ＰＥ４，ＰＥ１０に対して、図５（ａ）の処理をマッピングした場合において、各ＰＥに分配すべき命令を示す。【００６１】
ここで、図５（ｂ）に示すａｄｄは加算命令を意味し、２つのソースレジスタ番号指定（Ａとｃｍ）と１つのデスティネーションレジスタ番号指定（１ｓｘ）を持つ。単一アルファベット（Ａ、Ｂ、ａ）は定数（Ａはこの場合は、配列Ａの絶対アドレス）を表す。命令バッファ（ｉｎｓｔｂ）１１に格納されている命令の実行に際し、定数がオペランドに指定されている場合には、レジスタ番号０のレジスタ（すなわちｒ０）に定数が格納されていると見なし、レジスタｒ０から値を読出すように動作する。デスティネーションレジスタ番号指定は、ＰＥ番号とレジスタ名の組合せで指定する。例えば、１ｓｘとなっていれば、ＰＥ番号が１のＰＥのｓｘレジスタに、演算結果を格納するように動作する。【００６２】
なお、図１及び図３を参照すると、ＣＰ３０に「ａｄｄ  Ａ，ｃｍ，１ｓｘ」という命令をＰＥ０の命令バッファ（ｉｎｓｔｂ）１１に格納させるには、「ｈｅａｄｅｒ」部を１０、「ｏｐｃｏｄｅ」部をａｄｄ命令を現すビット列、「１ｓｔ  ｏｐｅｒａｎｄ  ｒｅｇ  ＩＤ」を０、「２ｎｄ  ｏｐｅｒａｎｄ  ｒｅｇ  ＩＤ」を０ｘｄ、「Ｄｅｓｔｉｎａｔｉｏｎ  ｒｅｇ  ＩＤ」を０ｘｅ、（演算結果の格納先ＰＥ番号が１であることから）「ＰＥＩＤ部」を１、「ｃｏｕｎｔｅｒ」部を１である命令と、当該命令に後続する、「ｈｅａｄｅｒ」部を１１、「ｄａｔａ」部を配列Ａの絶対アドレス、「Ｔａｒｇｅｔ  ｒｅｇ  ＩＤ」部を０、（ａｄｄ命令の格納ｉｎｓｔｂの持ち主のＰＥ番号が０であることから）「Ｔａｒｇｅｔ  ＰＥＩＤ」を０とした命令とを用意し、ＣＰ３０に実行させればよい。【００６３】
また、図５（ｂ）に示したｇｌｄ及びｇｓｔは、それぞれ、グローバルメモリに対するロード命令及びストア命令である。ロード命令は、第２ソースオペランドを持たずにロード対象アドレスを第１ソースオペランドとして持ち、ロードしたデータの格納先のデスティネーションレジスタ番号指定を持つ。ストア命令は、第１ソースオペランドとしてストア対象アドレス、第２ソースオペランドとしてライトデータを格納したレジスタ番号を有し、デスティネーションレジスタ番号指定を持たない（図５（ｂ）ではＮＵＬＬとした）。以上より、図５（ｂ）において、各命令のデスティネーションフィールド指定における１ｓｘ，２ｓｘ，４ｓｘ，４ｓｙ及びＮＵＬＬは、それぞれ、命令の実行結果の宛先がＰＥ１のｓｘ、ＰＥ２のｓｘ、ＰＥ４のｓｘ、ｓｙ及び宛先なしを示す。【００６４】
図５（ｃ）は、図５（ｂ）の命令コードをＣＰ３０がＰＥアレイに分配し、動作を開始させてから終了するまでの動作のタイムチャートを一例として示す。図５（ｃ）を参照すると、縦軸は時間（単位はサイクル）を表し、横軸はＣＰ３０の動作、及びＰＥ側の動作を表す。なお、ＰＥ側の動作は、イタレーション毎に分けて表示している。また、図５（ｃ）の欄内には、各サイクルにおけるＣＰ３０やＰＥの動作状況を表している。【００６５】
例えば、ＣＰ３０の動作を示す欄の先頭に表記されているＩＮＳＴＢ＿ＢＣ（ＰＥ０）とは、「ｈｅａｄｅｒ」部が“１０”の命令（及び後続する「ｈｅａｄｅｒ」部が“１１”の命令）を読出してＰＥ０に分配する動作が当該サイクルで生じたことを表す。また、ＧＯ（１、ｃｍ）とは、「ｈｅａｄｅｒ」部が“１１”であり、「ｄａｔａ」部の値が“１”である命令を読出し、ＰＥ０，ＰＥ１，ＰＥ２，ＰＥ４，ＰＥ１０のうちの命令バッファ（ｉｎｓｔｂ）１１内の命令がソースオペランドにレジスタｃｍを含むＰＥのレジスタｃｍに、この命令の「ｄａｔａ」部の値である１をライトする動作が当該サイクルで生じたことを表す。また、ＣＬＤ及びＣＳＴは、それぞれＰＥ側でｇｌｄ及びｇｓｔ命令を発行したことに伴い、大域アクセス調停部５０による調停の結果として発生したグローバルメモリへのキャッシュメモリ等を介したロード動作及びストア動作が開始されたサイクルを表す。さらに、ＰＥｘはＰＥ番号がｘのＰＥが命令を実行したサイクルを表す。特に、ＰＥｘ／ｙは、ＰＥｘとＰＥｙが同一のサイクルで命令を実行したことを表す。【００６６】
なお、ＣＰ３０上でのＣＬＤとＣＳＴとのタイミング的な対応関係を分かり易くするために、ｇｌｄ又はｇｓｔ命令を実行したＰＥｘの末尾に＊又は＋を付した。なお、一例として、点線の矢印は、ＰＥ１上でｇｌｄ命令が実行されてからＰＥ２にロードデータが送付されてくるまでの流れを示す。また、図５（ｃ）における黒塗りの矩形はロードデータ待ちサイクルを表し、”−“はＰＥ間転送サイクルを表す。【００６７】
図６（ａ）は、本発明のＳＩＭＤプロセッサが双方向の一次元隣接ＰＥ間結合網のみを有する場合における、ｉ＝０のイタレーションにおけるサイクル毎でのＰＥ間結合網の利用状況を示す。ここで、塗り潰した黒丸は、対応するＰＥ（横軸）上で命令の実行が行われたことを表す。また、ＰＥｘ→ＰＥｙの矢印は、ＰＥｘとＰＥｙとの間でデータ転送が発生したことを表す。なお、ここでは、グローバルメモリ４０に対するロードアクセスの遅延を３サイクルと仮定している。したがって、ＰＥ１からＰＥ２への矢印は３サイクルに跨っている。【００６８】
図６（ｂ）は、ｉ＝０からｉ＝７までの全部計８イタレーションにおける、サイクル毎のＰＥ間結合網の利用状況を示す。図６（ｂ）を参照すると、複数の同一方向の矢印間で交差が起きてない。このことは、ＰＥアレイがシストリック動作を行った計２１サイクルに亘って、ＰＥ間結合線を利用したデータ転送に関して、衝突が起きてないことを示す。なお、図６（ｂ）において、サイクルＰにおけるＰＥｘからＰＥｙへの左→右（又は左←右）方向の矢印は、当該サイクルでのＰＥｘ→ＰＥｙ（又はＰＥｘ←ＰＥｙ）方向の隣接ＰＥ間結合線を利用してデータ転送が行われることを示す。また、図６（ｂ）において、個々のイタレーション間を識別し易くするために、矢印及び塗り潰した丸印の明度を変更している。【００６９】
図５（ｃ）及び図６では、グローバルメモリに対するＰＥによるロードアクセスの遅延を３サイクルと仮定した図を示している。一方、遅延が３よりも小さく、例えば、２である場合は、図７（ａ）のように、ＰＥ１０に割当てていた命令をＰＥ９に割当てればよい。また、ロードアクセス遅延が３よりも大きく、例えば、４である場合には、図７（ｂ）のように、ＰＥ１０に割当てていた命令をＰＥ１１に割当てればよい。【００７０】
次に、実施形態に係るＳＩＭＤプロセッサの本実施例における効果について説明する。図８は、図５（ａ）のプログラムコードをＣＰ３０上で逐次的に実行した場合の擬似コードである。図８を参照すると、ＣＡＤＤは加算命令を表す。また、ＣＬＤ及びＣＳＴは、それぞれメモリロード命令及びメモリストア命令を表す。これらは、すべて「ｈｅａｄｅｒ」部が００の命令である。【００７１】
ＣＰ３０のみを用いて、図５（ａ）のプログラムコードを実行した場合には、１回の繰り返し毎に約６サイクルを要することから、８回の繰り返しで合計４８サイクルを要する。一方、図６（ｂ）を参照すると、実施形態に係るＳＩＭＤプロセッサを利用することで、約２１サイクルで処理が終了する。したがって、本発明によると、約２倍強の高速化を実現することができる。【００７２】
なお、本実施例の場合、命令をＰＥアレイに分配するのに合計５サイクルを要することから、イタレーション回数が少ない場合における性能の向上は小さい。しかし、イタレーション回数を１０００回とすると、命令をＰＥアレイに分配するのに要した５サイクルは無視することができる。また、本実施例では１イタレーション毎に１サイクルのスループットで実行できる。一方、図７を参照すると、ＣＰ３０上で同一の処理を実行した場合には、１イタレーション毎に６サイクルかかる。したがって、本発明のＳＩＭＤプロセッサによると、約６倍の性能向上がもたらされる。【００７３】
なお、上記の特許文献及び非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【００７４】
１０、１１０、ＰＥ０〜ＰＥ１４  演算要素（ＰＥ：Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）
１１、１１１  命令バッファ（ｉｎｓｔｂ）
１２、３２、１１２  演算器（ＡＬＵ）
２０、１２０  ローカルメモリ（Ｌｏｃａｌ  Ｍｅｍｏｒｙ）
３０、１３０  制御プロセッサ（ＣＰ：Ｃｏｎｔｒｏｌ  Ｐｒｏｃｅｓｓｏｒ）
３１  命令・データキャッシュ
３３  アービタ（Ａｒｂｉｔｅｒ）
３５  プログラムカウンタ（ＰＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）
４０、１４０  グローバルメモリ（Ｇｌｏｂａｌ  Ｍｅｍｏｒｙ）
５０  大域アクセス調停部（Ｇｌｏｂａｌ  Ａｃｃｅｓｓ  Ａｒｂｉｔｅｒ）
ｃｍ、ｍｏｄｅ、ｒ０〜ｒ１５、ｓｔｏｐ、ｓｘ、ｘｙ  レジスタ
ｓｅｌ  セレクタ
【図１】
2011105408.tif 000003
【図２】
2011105408.tif 000004
【図３】
2011105408.tif 000005
【図４】
2011105408.tif 000006
【図５】
2011105408.tif 000007
【図６】
2011105408.tif 000008
【図７】
2011105408.tif 000009
【図８】
2011105408.tif 000010
【図９】
2011105408.tif 000011
【図１０】
2011105408.tif 000012
【国際調査報告】
2011105408.tif 000013
2011105408.tif 000014
2011105408.tif 000015
2011105408.tif 000016