(57)【特許請求の範囲】
【請求項１】
主記憶と、
該主記憶に保持された、それぞれ順序付けられた複数のデータからなる複数のデータ群に対して実行すべき処理を分担して実行する複数のプロセッサと、
それぞれ該複数のプロセッサの一つに対応して設けられ、該主記憶と該複数のプロセッサとの間に位置する複数のバッファと、
該複数のバッファに対して共通に設けられ、上記複数のプロセッサのいずれか一つから与えられたプリロード要求に応答して、そのプリロード要求が指定する複数のデータ群を該主記憶から読み出す主記憶読み出し回路であって、各データ群に属するデータを、それぞれ該複数のプロセッサの数と同数のデータからなる複数の部分データ群に分けて読み出すように、かつ、異なるデータ群に属する部分データ群を順次読み出すように、さらに、各データ群の各部分データ群に属する複数のデータを並列に読み出すように、上記指定された複数のデータ群を読み出すものと、
上記主記憶読み出し回路により読み出された複数の部分データ群の各々に含まれる複数のデータを、上記複数のバッファに分散して、かつ、並列に書き込むバッファ書き込み回路と、
それぞれ該複数のプロセッサの一つに対応して設けられた複数のバッファ読み出し回路であって、それぞれ対応するプロセッサから順次供給される複数のロードリクエストに応答して、そのプロセッサに対応して設けられた一つのバッファに保持された複数のデータを、それらのデータがそのバッファに格納された順番に従って順次読み出し、その対応するプロセッサに転送するものとを有するデータ処理装置。
【請求項２】
該主記憶読み出し回路は、
それぞれ該複数のバッファの一つに対応して設けられ、それぞれ該主記憶からその対応するバッファに対応するプロセッサに供給すべき複数のデータを読み出すための読み出し要求を順次出力する複数の読み出し要求回路と、
それぞれ該複数の読み出し要求回路の一つにより出力された複数の読み出し要求を該主記憶に並列に供給する回路とを有し、
各読み出し要求回路は、
それぞれ上記プリロード要求が指定した該複数のデータ群の内、いずれか一つのデータ群に属する一部のデータを読み出すための複数のアドレスを順次出力する複数のアドレス生成回路と、
該複数のアドレス生成回路により出力された複数のアドレスを、該複数のアドレス生成回路に対して定めた所定の順番に従って順次選択し、選択されたアドレスを含む読み出し要求を出力する回路とを有し、
各アドレス生成回路により生成される複数のアドレスは、上記複数のデータ群の内、いずれか一つのデータ群を構成する複数の部分データ群の異なるものにそれぞれ属し、その読み出し要求回路が対応するいずれか一つのバッファに対応するプロセッサに供給すべき複数のデータのアドレスである請求項１記載のデータ処理装置。
【請求項３】
それぞれ上記複数のアドレス生成回路に対応して設けられ、該複数のプロセッサの少なくとも一つにより選択可能な複数のデータ記憶回路と、
該少なくとも一つのプロセッサにより指定され、それぞれプリロードすべき一つのデータ群を指定する複数のプリロード情報の各々を、該複数の記憶回路の内、それぞれのプリロード情報に対して該少なくとも一つのプロセッサにより指定された一つに格納する手段をさらに有し、
各アドレス生成回路は、上記複数の記憶回路の内、そのアドレス生成回路に対応する一つの記憶回路に格納されたプリロード情報が指定する一つのデータ群を構成する複数の部分データ群の異なるものにそれぞれ属し、そのアドレス生成回路が属する読み出し要求回路が対応するいずれか一つのバッファに対応するプロセッサに供給すべき複数のデータを読み出すためのアドレスを順次生成する回路を有する請求項２記載のデータ処理装置。
【請求項４】
該複数のバッファの各々は、複数の順序付けられた部分領域に区分され、
該バッファ書き込み回路は、該主記憶読み出し回路により異なる部分データ群が読み出される毎に、読み出された部分データ群に含まれた複数のデータの各々を書き込むべき、各バッファ内の部分領域を予め定めた順に順次切り替える回路を有し、
各バッファ読み出し回路は、対応するプロセッサからの複数の読み出し要求に応答して、そのプロセッサに対応するバッファに保持されたデータを、所定の部分領域の順にしたがって、順次異なる部分領域から順次読み出す回路を有する請求項１記載のデータ処理装置。
【請求項５】
該複数のバッファの各々は、複数の順序付けられた部分領域に区分され、
該バッファ書き込み回路は、該プリロード要求を発行したプロセッサにより指定された、プリロードすべきデータ群の群数でもって、各バッファの複数の部分領域を分割して得られる、該群数に等しい複数の部分領域群に、該主記憶から順次読み出された異なる部分データ群のデータの内、そのバッファに対応するプロセッサにより処理されるべきデータを順次書き込み、かつ、各バッファの同一の部分領域群に属する複数の部分領域には順次所定の部分領域の順に従って、上記主記憶から読み出された複数の部分データ群内のデータの内、いずれか一つの部分データ群に属する複数のデータが順次書き込まれるように、該主記憶から読み出された複数の部分データ群を書き込む回路を有し、
各バッファ読み出し回路は、対応するプロセッサからの複数の読み出し要求に応答して、そのプロセッサに対応するバッファに保持されたデータを、所定の部分領域群の順番で決まる順次異なる部分領域群に属し、かつ、同一の部分領域群内の部分領域に対して定められた所定の部分領域の順で決まる順次異なる部分領域から順次読み出す回路を有する請求項１記載のデータ処理装置。
【請求項６】
該複数のバッファの各々は、複数の順序付けられた部分領域に区分され、
上記主記憶読み出し回路は、一度には一つのデータ群内の、隣接する順番を有する所定の複数の部分データ群に属する複数のデータを並列に該主記憶から読み出す回路からなり、
該バッファ書き込み回路は、該主記憶読み出し回路により並列に読み出された該所定の複数の部分データ群に属する複数のデータが、該複数のバッファに分散して、かつ、並列に書き込まれ、かつ、該所定の複数部分データ群の異なるものに属し、いずれかのプロセッサにより処理されるべき複数のデータが、そのプロセッサに対応して設けられたバッファ内の、相隣接する該所定の複数に等しい数の部分領域に並列に書き込まれるように、該読み出された該所定の複数の部分データ群のデータを書き込む回路からなる請求項１記載のデータ処理装置。
【請求項７】
各バッファに書き込まれたデータの内、そのバッファに対応するプロセッサに転送されていない未読み出しデータの数を検出し、該複数のバッファの各々に対して検出された未読み出しデータ数の内の最小値を検出する回路と、
各バッファに保持可能な数のデータを各バッファに書込んだ後は、該検出された最小値が０のときに、該主記憶読み出し回路による、該複数のデータ群の後続の部分データ群の読み出しを禁止する回路とを有し、
該バッファ書き込み回路は、各バッファに保持可能な数のデータをそのバッファに書き込んだ後にさらに該主記憶から読み出された後続の部分データ群を、各バッファ内の、そのバッファに対応するプロセッサにすでに転送された読み出し済みデータを保持する記憶位置に書き込む回路を有する請求項１記載のデータ処理装置。
【請求項８】
該複数のバッファに対応して設けられた複数の検出回路であって、各検出回路は、その対応するバッファに書込まれたデータの内、該バッファ読み出し回路によりそのバッファからまだ読み出されていない未読み出しデータの数を検出するものと、
各バッファに対して検出された未読み出しデータの数が０のときに、そのバッファからの次のデータの読み出しを、そのバッファに対応して設けられたバッファ読み出し回路に対して禁止する回路をさらに有する請求項７記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、主記憶装置を共有し、繰返し処理を分担処理する複数のプロセッサがプリロード／ポストストアを実行可能なデータ処理装置に関し、特に複数のスカラプロセッサがＦＯＲＴＲＡＮのＤＯループのような繰返し処理の各イタレーションを分担処理し、いわゆるマイクロタスキングを実施する場合に効率がよい、プリロード／ポストストアを実行可能なデータ処理装置に関する。
【０００２】
【従来の技術】
現在多くのプロセッサは、主記憶レイテンシをキャッシュにより隠蔽している。ところが、大規模データを扱う科学技術計算などではデータの参照に局所性が少なく、キャッシュが有効に働かないケースが多い。これに対応するためプリフェッチやプリロード機構が提案されている。すなわち、プロセッサが配列データを使用するタイミングより前に、その配列データを主記憶から読み出し、プリロード用のバッファメモりに保持しておき、後にそのプロセッサが、その配列データ内のいずれかの要素を処理するときに、その要素をそのバッファから読み出す。これによりプロセッサが主記憶からこの配列データを読み出す時間がそのプロセッサには見えないようにしている。例えば、文献１：「お茶の水１号の構成と評価」、情報処理学会研究報告、計算機アーキテクチャ１０１−８、１９９３．８．２０、ｐｐ．５７−６４参照。この文献では、複数のプロセッサを有するシステムにおいて、各プロセッサごとに配列データをプリフェッチする技術が開示されている。すなわち、各プロセッサにより指示された、プリフェッチすべき配列データのアドレス、ストライド、レングスに従って、そのプロセッサ用に設けたプリフェッチ制御部がこの配列データの複数の要素をプリフェッチし、そのプロセッサ対応に設けたプリフェッチバッファに格納する方式が示されている。
【０００３】
文献２：特開平３−２６６１７４号公報「データ処理装置」では、マルチベクトルプロセッサにおけるプリロードあるいはポストロードを開示している。一般に、主記憶は多バンクにより構成されており、その場合、主記憶の連続するアドレスの記憶位置をアクセスしたときに、高速にアクセスできる。しかし、マイクロタスキングにおいては、各プロセッサは１つの配列データを飛び飛びに分割して非同期にアクセスすることが多い。このようなアクセスは連続アクセスを効率よく処理する多バンク主記憶にとって都合が悪い。この文献２の方法では、このような多バンク構成の主記憶を共有する複数のベクトルプロセッサにより分担して処理されるベクトルデータを主記憶から高速に読み出しあるいはそこに高速に書き込むのに適したプリロードあるいはポストストアを開示している。
【０００４】
すなわち、ベクトルプロセッサ対応にプリロードバッファあるいはポストストアバッファを設け、これらのベクトルプロセッサに共通に設けられたバッファ制御部により、これらのベクトルプロセッサにより分割して処理されるベクトルデータをプリロードする場合、そのベクトルデータの主記憶アドレス、ストライド、レングス情報に基づいてベクトルデータの複数の要素をまとめてプリロードし、各ベクトルプロセッサによるその配列の添え字の分担範囲に従って、これらのベクトルプロセッサ対応の複数のバッファに、それらのプリロードした複数の要素を分割して格納する。各プロセッサが独立非同期に、そのベクトルプロセッサ対応のバッファを参照する。ポストストアの場合であれば、各ベクトルプロセッサが独立非同期にそのベクトルプロセッサ対応のバッファに書込むベクトル要素がある程度まとまったバッファ制御部が全ベクトルプロセッサから書込まれた複数のベクトル要素をまとめて主記憶にストアする。
【０００５】
【発明が解決しようとする課題】
一般に、マルチベクトルプロセッサでは、各ベクトルプロセッサは、一つのベクトルデータの全要素を続けて処理する。したがって、文献２のごとく、ひとつのバッファにその全要素を格納した上で、それを処理する方法がとられる。しかし、複数のスカラプロセッサがＦＯＲＴＲＡＮのＤＯループのような繰返し処理の各イタレーションを分担処理する、いわゆるマイクロタスキングを実施する場合に、ループ繰返し処理の中には複数の配列が含まれ、これらのスカラプロセッサは、しかも１つのループイタレーションごとに異なる配列を順次アクセスする。そのため例えば配列Ａ、Ｂ、Ｃ、Ｄ、Ｅの各々のいずれかの添え字の要素が使用され、続いて次の添え字のデータが使用される。しかし、上記文献１には、一つの配列データの複数の要素をスカラプロセッサのためにプリロードする技術が開示されているが、複数の配列データのプリロードは記載されていない。
【０００６】
したがって、本発明の目的は、このように、複数の配列を処理するループ繰返し処理を複数のスカラプロセッサにより分割して処理するのに適したプリロード回路およびポストストア回路を有するデータ処理装置を提供することである。
【０００７】
【課題を解決するための手段】
上記目的を達成するために本願第１の発明では、主記憶を共有する複数のプロセッサで分担して実行される処理の中で使用される複数のデータ群を主記憶からプリロードする回路は、
それぞれ一つのプロセッサに対応して設けられた複数のバッファと、
プリロードすべき複数のデータ群を一部づつからなる部分データに分けて、かつ、異なるデータ群の部分データ群を順次読み出すように、上記複数のデータ群を主記憶から読み出し、かつ、各部分データ群の複数のデータは主記憶から並列に読み出し、読み出された部分データ群を上記複数のバッファに分散して書込むように構成されたプリロード用の回路とを有する。
【０００８】
この本願第１の発明によれば、例えば、４台のプロセッサを有し、４つの配列Ａ、Ｂ、Ｃ、Ｄをループ繰返し処理の中で実行するデータ処理装置にこの発明を適用した場合、配列データＡの一部の要素Ａ（１）、Ａ（２）、Ａ（３）、Ａ（４）からなる、部分データ群がまず主記憶から並列に読み出され、４つのバッファに分散して書込まれる。次に、配列Ｂの一部の要素Ｂ（１）、Ｂ（２）、Ｂ（３）、Ｂ（４）からなる部分データ群が次に主記憶から並列に読み出され、４つのバッファに分散して書込まれる。以下同様である。したがって、各配列のいずれかの部分データ群がプリロードされた段階で、それらのプリロードされたデータを各プロセッサでの処理に供することが出来る。このため、プリロード要求がいずれかのプロセッサにより出力された後、それらの複数のデータ群のすべてのデータがプリロードされる前に、すでにプリロードされた一部のデータを各プロセッサは使用し始めることが可能になる。しかも、同一の配列の一部のデータが、主記憶から並列に読み出されるので、これらの一部のデータが主記憶の連続するアドレスに位置する場合には、主記憶が複数のバンクで構成されているときには、それらの一部のデータの読み出しを速めることが出来る。
【０００９】
しかも、複数の配列の要素が各プロセッサ用のバッファに混在して保持されるので、各プロセッサ用のバッファは一つで済むことになり、プリロード回路が簡単になる。
【００１０】
本願第１の発明の望ましい第１の態様では、各プロセッサ用のバッファ内の記憶領域が複数の領域から構成され、このバッファへのいずれかのプロセッサがループ処理で使用する配列の総数に合わせて、これらの記憶領域をグループに分けて使用される。これにより、配列の総数が変化したときでも、それに見合った数の記憶領域を各配列用に使用できるようになっている。
【００１１】
本願第１の発明の望ましい第２の態様では、各プロセッサで処理されるべきデータが、複数ずつ主記憶から並列にプリロードされ、そのプロセッサ対応のバッファに並列に書き込まれる。これにより、主記憶からのデータプリロードの時間を短縮している。
【００１２】
本願第１の発明の望ましい第３の態様では、
各バッファに書き込まれたデータの内、そのバッファに対応するプロセッサに転送されていない未読み出しデータの数を検出し、該複数のバッファの各々に対して検出された未読み出しデータ数の内の最小値を検出する回路と、
各バッファに保持可能な数のデータを各バッファに書込んだ後は、該検出された最小値が０のときに、該主記憶読み出し回路による、該複数のデータ群の後続の部分データ群の読み出しを禁止する回路と、
各バッファに保持可能な数のデータをそのバッファに書き込んだ後にさらに該主記憶から読み出された後続の部分データ群を、各バッファ内の、そのバッファに対応するプロセッサにすでに転送された読み出し済みデータを保持する記憶位置に書き込む回路とが設けられる。
【００１３】
これにより、複数のバッファの容量を越える量の配列要素を主記憶から並列にプリロード可能にする。これにより、各バッファは、ループ処理で処理されるデータの総量より少ない容量でよいことになる。
【００１４】
本願第２の発明では、
各プロセッサは、複数のプロセッサにより分担して実行される処理の中で生成される複数のデータ群の内、そのプロセッサが供給すべき複数のデータを、順次異なるデータ群に属するものを順次供給するように構成され、
上記複数のデータ群を主記憶にポストストアする回路は、
それぞれ一つのプロセッサに対応して設けられた複数のバッファと、
該複数のバッファに保持された複数のデータ群を、同一のデータ群に属する一部のデータに分けてそれらのバッファ内の互いに対応する一群の記憶位置から読み出し、読みだ出された一部のデータを、同一のデータ群に属する一部のデータとして主記憶に書込む回路とを有する。
【００１５】
この本願第２の発明によれば、第１の発明と同様に、ポストストアすべき複数のデータ群を一部づつ複数のバッファから読み出し、主記憶に並列に書込むので、上記複数のデータ群の全てのデータが上記複数のバッファに書込まれる前に、主記憶に書込むことが出来る。しかも、同一の配列データに属する複数の要素が、主記憶に並列に読み出されるので、これらの一部のデータが主記憶の連続するアドレスに書込まれる場合には、本願第１の発明と同様の理由によって、それらの一部のデータの書込みを速めることが出来る。
【００１６】
本願第３の発明では、本願第１の発明の上記第３の態様が、ループ処理等により少なくとも一つの配列に属する複数のデータを異なるプロセッサ用のバッファにプリロードする場合に適用される。
【００１７】
【実施例】
以下、本発明に係るデータ処理装置を図面に示したいくつかの実施例を参照してさらに詳細に説明する。なお、以下においては、同じ参照番号は同じものもしくは類似のものを表わすものとする。
【００１８】
＜実施例１＞
（装置の概要）
図１において、１はマルチバンク構成の主記憶、３−０〜３は、主記憶１を共有するプロセッサで、図２に例示するＦＯＲＴＲＡＮのＤＯループを分担して処理する。２は、主記憶１とプロセッサ３−０〜３の間に設けられ、プリロードを実行するプリロード部である。プリロード部２はプリロード動作を制御するプリロード制御部５とプリロードしたデータを保持するプリロード用のバッファとして使用されるプリロードレジスタ群４を有する。プリロードレジスタ群４は、各々プロセッサ３−０〜３に対応するプリロードレジスタ群４−０〜３からなる。
【００１９】
各プリロードレジスタ群４−０〜３には各々３２本のプリロードレジスタがあるが、後述するように実施例１では実行されるプログラムが４本のプリロードレジスタしか使用しないため簡単のために４本のプリロードレジスタしか示していない。
【００２０】
図４に示すように各プリロードレジスタ群４−０〜３は４本のプリロードレジスタ４００ー０〜３、４０１ー０〜３、４０２ー０〜３、あるいは４０３ー０〜３と、主記憶１からプリロードしたデータを書き込むべきプリロードレジスタを選択するセレクタ４１０、４１１、４１２または４１３と、各プリロードレジスタ群から、プリロードされたデータを読み出すべきプリロードレジスタを選択するセレクタ４４０、４４１、４４２あるいは４４３からなる。
【００２１】
各プリロードレジスタ内の４つのプリロードレジスタには、その群ごとに決めるレジスタ番号が割り当てられる。以下では、プリロードレジスタ群４−０内の、プリロードレジスタ４００−０、４０１−０、４０２−０、４０３−０をそれぞれプリロードレジスタＰＲ０、ＰＲ１、ＰＲ２、ＰＲ３と呼ぶ。他のプリロードレジスタ群４００−１内の４つのプリロードレジスタも同様である。
【００２２】
プリロード制御部５内には、プリロードリクエスト部５００、書込み制御部５３０、データ保証制御部５４０、読み出し制御部５６０がある。
【００２３】
図５に示すように、プリロードリクエスト部５００内には、プロセッサ３−０〜３の各々に対応する４つのプリロードリクエスタ５０３−０〜３がある。以下、これらをプリロードリクエスタ０〜３と呼ぶことがある。これらのプリロードリクエスタは、それぞれプリロードレジスタ群４４０、４４１、４４２、４４３にも対応しており、これらのプリロードリクエスタは、主記憶１から対応するプリロード群に格納すべき４つのデータを並列に読み出す。
【００２４】
レングスレジスタＬＲ、分割レジスタＤＲ、４本のベースレジスタＢＲ０〜３、４本のストライドレジスタＳＲ０〜３は、４つのプロセッサ３−０〜３のいずれか一つから供給される、プリロードすべき配列データを指定するプリロード情報を保持するレジスタ群であり、これらのプリロードリクエスタ５０３−０〜３は、これらのレジスタに保持されたプリロード情報にしたがって、複数の配列データに属する複数のデータのアドレスを順次生成するようになっている。本実施例では、このレジスタＳＲｉとＢＲｉの組により指定される配列データが第ｉ番目に読み出されるように、配列データの読み出しの順番が定められている。
【００２５】
本実施例では、これらのプリロードリクエスタ４０３−０〜３は、同一の配列データを、４つのデータに分けて主記憶１から順次読み出すとともに、いずれかの配列データの４つのデータを読み出した後は、次の配列データの４つのデータを読み出すように、順次異なる配列データに属する４つのデータの群を順次読み出すようになっているところに特徴がある。
【００２６】
図４において、書込み制御部５３０は、上記４つのプリロードリクエスタ０〜３により並列に４つのデータが読み出される毎に、読み出された４つのデータを、４つのプリロードレジスタ群４−０〜４−３内の互いに同じレジスタ番号のプリロードレジスタに分散して記憶する。さらに、その後プリロードリクエスタにより主記憶から後続の４つのデータが読み出されたとき、それらの後続の４つのデータを、４つのプリロードレジスタ群４−０から４−３内の次の番号のプリロードレジスタに分散して記憶するように構成されている。
【００２７】
こうして、本実施例では、各プリロードレジスタ群には、順次異なる配列データに属するデータが順次異なる番号のプリロードレジスタに格納され、かつ、同一のプリロードレジスタには、同一の配列に属する複数のデータが書き込まれるようになっている。
【００２８】
図４において、読み出し制御部５６０は、各プロセッサから供給される複数のロードリクエストに応答して、そのプロセッサに対応するプリロードレジスタ群にすでにプリロードされた複数のデータを、それらのデータがプリロードされた順に読み出し、そのプロセッサに供給するようになっている。このために、読み出し制御部５６０は、本実施例では、そのプリロードレジスタ群内の、順次異なる番号のプリロードレジスタから順次データを読み出すようになっている。
【００２９】
なお、図４において、データ保証制御部５４０は、プリロードレジスタへのデータ書込みをロードリクエストによる読み出しが追い越さないように、読み出し制御部５６０を制御し、また、まだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、プリロードリクエスト部５００を制御する回路である。
【００３０】
以下、本実施例の詳細を説明する。
【００３１】
（プリロード情報のセットアップ）
各プロセッサは、図２に示すＤＯループの場合、４つの配列ＡからＤのぞれぞれの異なる要素を分担して処理する。各配列のいずれの要素を各プロセッサに割り当てる態様を示す添え字分担態様としては、添え字分担態様には、Ｃｙｃｌｉｃ分割やＢｌｏｃｋ分割などすでに知られている複数の方法のいずれかを用いる。ここでは、いわゆるＣｙｃｌｉｃ分割が指定された場合を取り上げる。なお、Ｂｌｏｃｋ分割時の動作に関しても適宜述べる。図２のプログラムの場合、Ｃｙｃｌｉｃ分割では、プロセッサ３−０が添え字Ｉ＝１、５、９、、、を、プロセッサ３−１がＩ＝２、６、１０、、、を、プロセッサ３−２がＩ＝３、７、１１、、、、を、プロセッサ３−３がＩ＝４、８、１２、、、、を分担する。
【００３２】
いずれかのプロセッサは信号線３００ー０〜３、オア回路３０１、信号線３０２を介してプリロード制御部５に、ＤＯループ内の全ての配列Ａ、Ｂ、Ｃ、Ｄの先頭アドレスとストライド、ループ長Ｎおよびプロセッサの添え字分担態様を示すプリロード情報をセットアップする。
【００３３】
図３は図２のＤＯループを実行するための機械語命令列のイメージである。
【００３４】
（ａ）は、このＤＯループ処理を本実施例で実行するためのプリロード情報をプリロード部２にセットアップするための機械語命令列を示す。この機械語命令列はセットアップの対象とするレジスタを各命令が指定する。（１）の命令により、何本のプリロードレジスタを使用するかをプリロード制御部５に通知する。（２）、（３）の命令により、プリロード制御部２中にある、レングスレジスタＬＲに全プロセッサのアクセスをまとめた場合の総ループ長を、分割レジスタＤＲにプロセッサの添え字分担態様をセットすることを指示する。さらに（４）〜（１１）の命令により、ベースレジスタＢＲ０〜３にそれぞれ配列Ａ、Ｂ、Ｃ、Ｄの先頭アドレスを、ストライドレジスタＳＲ０〜３に全プロセッサのアクセスをまとめた場合の配列Ａ、Ｂ、Ｃ、Ｄへのアクセスストライドをセットすることを指示する。この命令列により、ＢＲ０には配列要素Ａ（１）のアドレスが、ＢＲ１には配列要素Ｂ（２）のアドレスが、ＢＲ２には配列要素Ｃ（２）のアドレスが、ＢＲ３には配列要素Ｄ（１）のアドレスがセットされる。また配列Ａ、Ｂ、Ｃ、Ｄの各要素が８バイトとすると、ＳＲ０にはストライド８バイトが、ＳＲ１にはストライド１６バイトが、ＳＲ２にはストライド８バイトが、ＳＲ３にはストライド８バイトがセットされる。
【００３５】
本実施例では、後に説明するように、このレジスタＳＲｉ（ｉ＝０，１，２または３）とＢＲｉの組により指定される配列データに属するデータが第ｉ番目に読み出されるように、プリロードされる配列の順番が定められている。したがって、今の例では、上記のプログラムは、配列Ａ、Ｂ、Ｃ、Ｄの順に、それらの配列に属する一部のデータが主記憶からプリロードされることを要求したことになる。
【００３６】
（アドレス計算とプリロード）
セットアップが行なわれると、プリロード部２は、自動的に配列Ａ、Ｂ、Ｃ、Ｄのプリロードを開始する。この場合、以下に説明する方法で、プリロードレジスタ群４−０〜３内のＰＲ（プリロードレジスタ）０に配列Ａ（Ｉ）、ＰＲ１に配列Ｂ（Ｉ＊２）、ＰＲ２に配列Ｃ（Ｉ＋１）、ＰＲ３に配列Ｄ（Ｉ）の各要素がＣｙｃｌｉｃ分割に従って分割されてプリロードされる。すなわち、例えばＰＲ０に関しては、プリロードレジスタ群４−０内のＰＲ０にＡ（Ｉ）［Ｉ＝１、５、９、、、、］が、プリロードレジスタ群４−１内のＰＲ０にＡ（Ｉ）［Ｉ＝２、６、１０、、、、］が、プリロードレジスタ群４−２内のＰＲ０にＡ（Ｉ）［Ｉ＝３、７、１１、、、、］が、プリロードレジスタ群４−３内のＰＲ０にＡ（Ｉ）［Ｉ＝４、８、１２、、、、］がプリロードされる。
【００３７】
さて、プロセッサ３−０〜３のいずれかから送出されるプリロード情報がレジスタＬＲ、ＤＲ、ＳＲ０〜３、ＢＲ０〜３に設定されると、プリロードリクエスト部５００はこれらのプリロード情報に基づきアドレスＡ０〜３を生成して一括してこれらを主記憶１に送出してプリロードを要求する。このために、これらの情報はプリロードリクエスタ５０３−０〜３に取り込まれ、各プロセッサに対応したアドレスを計算するのに使用される。
【００３８】
すなわち、ＬＲ、ＤＲ、ＳＲ０〜３、ＢＲ０〜３に情報が設定されると、プリロードリクエスト部５００は、データ保証制御部５４０からの抑止信号５４１が入力されるか、もしくはループ長分の処理を完了するかしない限り、毎サイクルアドレスＡ０〜３を含むプリロードリクエストを主記憶１に送出する。
【００３９】
プリロード制御回路５１８はこのプリロードリクエストの送出を制御するための回路であり、リクエストカウンタ（ＲＱ）５２１は、プリロード部２により発行されたプリロードリクエストの総数を計数するカウンタである。プリロード制御回路５１８は、信号線５４１からリクエスト発行抑止の信号が入力されていなく、かつ、リクエストカウンタ５２１が示すプリロードリクエスト送出数が、信号線５１７を介して得たレングスレジスタＬＲの値＊総配列数（この場合は４）／プロセッサ台数（この場合は４）を超えない限り、プリロード起動信号５１９をプリロードリクエスタ５０３−０〜３に送出する。併せて線５２０を介してリクエストカウンタ５２１をカウントアップする。このリクエストカウンタの値は、プリロードリクエスタ５０３−０〜３においていずれの配列に対するアドレスを生成するかを指示するの使用される。さらに信号線５４２を介し、リクエストカウンタ５２１が各サイクルでカウントアップされたかの情報がデータ保証制御部５４０に送出される。
【００４０】
プリロードリクエスタ５０３−０〜３はプリロード起動信号５１９の値が有効なサイクルのみアドレスＡ０〜３を生成する。アドレスの計算は以下のように行なわれる。なお、プリロードリクエスタ５０３−０〜３の動作はほとんど同じため、以下ではプリロードリクエスタ５０３−０を例に取り説明する。
【００４１】
プリロードリクエスタ５０３−０内には、ワークベースレジスタ５０８−０〜３、ワークストライドレジスタ５１２−０〜３、およびアドレス加算器５１６があり、これらを用いて毎サイクル、プリロードレジスタ群４−０にプリロードすべきデータのアドレスが計算される。
【００４２】
すなわち、ワークベースレジスタ５０８−０およびワークストライドレジスタ５１２−０はストライドレジスタＳＲ０とベースレジスタＢＲ０との組に保持されたプリロード情報が指定する配列、今の例では配列Ａ（Ｉ）、の添え字Ｉ＝１、５、９、、、、の要素のアドレスを計算するのに使用される。
【００４３】
同様に、ワークベースレジスタ５０８−１およびワークストライドレジスタ５１２−１はストライドレジスタＳＲ１とベースレジスタＢＲ１との組に保持されたプリロード情報が指定する配列、今の例では配列Ｂ（Ｉ）、のために使用され、ワークベースレジスタ５０８−２およびワークストライドレジスタ５１２−２はストライドレジスタＳＲ２とベースレジスタＢＲ２に保持されたプリロード情報が指定する配列、今の例では配列Ｃ（Ｉ）、のために使用され、ワークベースレジスタ５０８−３およびワークストライドレジスタ５１２−３はストライドレジスタＳＲ３とベースレジスタＢＲ３との組に保持されたプリロード情報が指定する配列、今の例では配列Ｄ（Ｉ）、のために使用される。
【００４４】
プリロードリクエスタ０内にはさらに初期設定回路５０４−０〜３があり、プロセッサ３−０に対応した要素アドレスを計算できるよう、ワークベースレジスタ５０８−０〜３およびワークストライドレジスタ５１２−０〜３を初期設定する。
【００４５】
まず初期設定回路５０４−０〜３は信号線５１７、５２３、５０１−０〜３、５０２−０〜３を介してＬＲ、ＤＲ、ＳＲ０〜３、ＢＲ０〜３の値を受け取る。そしてＤＲの値、すなわち指定されている添え字分割態様に従い、各プロセッサが最初にアクセスすべき配列要素のアドレスを計算し、信号線５０５−０〜３を介してワークベースレジスタ５０８−０〜３に設定する。また初期設定回路５０４−０〜３は、指定されている添え字分割態様に従って各プロセッサのアクセスストライドを計算し、信号線５２２−０〜３を介してワークストライドレジスタ５１２−０〜３に設定する。
【００４６】
信号線５０５−０〜３および信号線５２２−０〜３に出力される値は指定された添え字分割がＣｙｃｌｉｃもしくはＢｌｏｃｋのとき、各々図９に示すように計算される。図９の値を簡単に説明する。Ｃｙｃｌｉｃ分割の場合、ループ添え字が１つ変化するごとに異なるプロセッサでその配列要素を処理するのであるから、各プロセッサが最初に処理すべき配列のアドレスは、ＢＲで示された値からＳＲで示された値ずつずれたアドレス、すなわちＢＲ、ＢＲ＋ＳＲ、ＢＲ＋ＳＲｘ２、ＢＲ＋ＳＲｘ３となる。各プロセッサのアクセスストライドは、プロセッサ数が４なのでＳＲｘ４となる。一方Ｂｌｏｃｋ分割の場合、ＬＲで示された全ループ長をプロセッサ台数４で除した配列要素を各プロセッサは処理するのであるから、各プロセッサが最初に処理すべき配列のアドレスは、ＢＲで示された値からＳＲｘＬＲ／４で示された値ずつずれたアドレス、すなわちＢＲ、ＢＲ＋ＳＲｘＬＲ／４、ＢＲ＋ＳＲｘＬＲ／４ｘ２、ＢＲ＋ＳＲｘＬＲ／４ｘ３となる。各プロセッサのアクセスストライドはもともとのストライドＳＲとなる。
【００４７】
さて初期設定の後は、信号線５１９によりプリロード起動信号がプリロード制御回路５１８から与えられるたびに、アドレス加算器５１６はセレクタ５１０、信号線５１１を介して得られるワークベースレジスタ内のアドレスと、セレクタ５１４、信号線５１５を介して得られるワークストライドレジスタ内のストライドを加算して、プリロードリクエストアドレスＡ０として主記憶１に送出する。セレクタ５１０と５１４は、順次異なる配列に対する、ワークベースレジスタとワークストライドレジスタを選択するように、リクエストカウンタ５２１の値により信号線５２２を介して制御される。その方法は後に説明する。加算結果はセレクタ５０６およびそれにより選ばれた信号線５０７−０〜３の一つを介して、アドレス計算に使用した元のワークベースレジスタ５０８０−０〜３のいずれか一つにも書き込まれる。セレクタ５０６の制御もリクエストカウンタ５２１から線５２２により与えられるプリロードリクエスト総数に基づいて行なわれる。
【００４８】
リクエストカウンタ５２１によるセレクタ５１０、５１４、５０６の制御は以下のようにする必要がある。すなわち前のサイクルで配列Ａの要素に対応するワークベースレジスタ５０８−０、ワークストライドレジスタ５１２−０を選択していた場合に、次のサイクルでリクエストカウンタ５２１が一つカウントアップされたときは、配列Ｂの要素に対応するワークベースレジスタ５０８−１、ワークストライドレジスタ５１２−１を選択するようにする。以下同様に順次配列Ｃ、Ｄに対するワークベースレジスタとワークストライドレジスタを選択する。また前のサイクルで配列Ｄの要素に対応するワークベースレジスタ５０８−３、ワークストライドレジスタ５１２−３を選択していた場合にリクエストカウンタ５２１が一つカウントアップされると、配列Ａの要素に対応するワークベースレジスタ５０８−０、ワークストライドレジスタ５１２−０を選択するようにする。
【００４９】
このためにはリクエストカウンタ５２１の下位ビットのパターンでワークベースレジスタおよびワークストライドレジスタを指定すればよい。この場合であれば下２ビットが’００’の時ワークベースレジスタ５０８−０、ワークストライドレジスタ５１２−０を指定し、’０１’の時ワークベースレジスタ５０８−１、ワークストライドレジスタ５１２−１を、’１０’の時ワークベースレジスタ５０８−２、ワークストライドレジスタ５１２−２を、’１１’の時ワークベースレジスタ５０８−３、ワークストライドレジスタ５１２−３を指定する。
【００５０】
以上から分かるように、プリロードリクエスタ５０３−０は、配列Ａ、Ｂ、Ｃ、Ｄの順にしたがって、プロセッサ３−０により使用されるデータを順にプリロードするためのアドレスを生成する。他のプリロードリクエスタ５０３−１〜３も同様である。
【００５１】
以上から分かるように、ワークベースレジスタ５０８−ｉ（ｉ＝０、１、２または３）とワークストライドレジスタ５１２−ｉの組は、アドレス加算器５１６、セレクタ５１０、５１４、５０７、と組合わせて、配列Ａ、Ｂ、Ｃ、Ｄの内、ｉ番目の配列に属し、プロセッサ３−０が使用する複数のデータのアドレスを順次生成するアドレス生成回路を形成している。こうして、本実施例では、プロセッサ３−０が使用する配列Ａ（１）、Ｂ（２）、Ｃ（２）Ｄ（１）、Ａ（２）、Ｂ（３）、Ｃ（３）、Ｄ（２）、、、がこのプリロードリクエスタ５０３−０によりこれらのデータの順に主記憶１から順次プリロードされる。他のプリロードリクエスタについても同様である。
【００５２】
プリロードリクエスタ５０３−０〜３は信号線５１９から与えられるプリロード起動信号により同期して動作する。この結果、配列データＡの一部のデータＡ（１）、Ａ（２）、Ａ（３）、Ａ（４）からなる配列データＡの最初の部分データ群がこれらのプリロードリクエスタ５０３−０〜３により並列に主記憶１からプリロードされ、続いて、Ｂ（２）、Ｂ（４）、Ｂ（６）、Ｂ（８）からなる配列データＢの最初の部分データ群、さらに続いて配列データの一部のデータＣ（２）、Ｃ（４）、Ｃ（６）、Ｃ（８）からなる配列データＣの最初の部分データ群、さらに続いて、配列データＤの一部のデータＤ（１）、Ｄ（２）、Ｄ（３）、Ｄ（４）からなる配列データＣの最初の部分データ群、配列データＡの一部のデータＡ（５）、Ａ（６）、Ａ（７）、Ａ（８）からなる配列Ａの２番目の部分データ群がこれらのプリロードリクエスタ５０３−０が順次主記憶１からプリロードされる。これらの配列の他のデータも同様に読み出される。
【００５３】
以上の動作により、プリロードリクエスト部５００は、抑止信号５４１が入力されない限り、全配列の同一添え字に関してまんべんなく、主記憶１へのプリロード要求を出すことができる。さらにＣｙｃｌｉｃ分割の場合、アドレスＡ０〜３は連続していることが多いため、主記憶１に対し、連続アクセス要求をまとめて出すことができる。
【００５４】
（プリロードレジスタ群へのプリロードデータの書き込み）
主記憶１は供給されたアドレスＡ０〜３の位置にあるデータを一括して読み出し、信号線ＰＤ０〜３に出力するとともに、信号線ＰＤ０〜３の値が有効なことを示すバリッド信号を信号線５３５に出力する。ここで主記憶１は、アドレスＡ０〜３を含むプリロードリクエストの順にデータおよびバリッド信号を信号線ＰＤ０〜３および信号線５３５を介してプリロードレジスタ群４に転送するものとする。これは、主記憶１内にバッファを設け、プリロードリクエストを受け入れた順序を覚えておいてバッファ上で並べ替えを行なうなどの公知の技術により実現できる。
【００５５】
書込み制御部５３０は有効信号５３５を受けて、データＰＤ０〜３のプリロードレジスタ群４への書込みを実行する。主記憶１から読み出されたデータの各々は、セレクタ４１０、４１１、４１２、４１３により選ばれた信号線４２０−０〜３、４２１−０〜３、４２２−０〜３、４２３−０〜３のいずれかを介してプリロードレジスタ４００−０〜３、４０１−０〜３、４０２−０〜３、４０３−０〜３の内、同じレジスタ番号を有する４つのプリロードレジスタに、同時に書込まれる。
【００５６】
図６は書込み制御部５３０の構成図である。書込み制御部５３０は、主記憶１から送出される読み出しデータと同期して送出される有効信号５３５を受け、読み出しデータをプリロードレジスタ群４の然るべき位置に書込むようセレクタ４１０、４１１、４１２、４１３を制御する制御信号５３１を生成する。具体的には、制御回路５３２は信号線３０２を介してプリロードレジスタが何本使用されるかの情報を受取り、予め、書込みカウンタ５３４のカウントアップ方法を決定しておく（後述）。その後制御回路５３２は、信号線５３５を入力するたびに信号線５３３を介して書込みカウンタ５３４をカウントアップし、その値が信号線５３１に出力される。
【００５７】
信号線５３１によるプリロードレジスタ群４−０〜３の書込み位置の指定は以下のようにする必要がある。すなわち、前のサイクルで配列Ａのある要素位置に書込みを行なった場合に書込みカウンタ５３４が一つカウントアップされると、配列Ｂの同一の要素位置に書込みが行なわれるようにする。前のサイクルで配列Ｄの同一の要素位置への書込みを行なった場合に書込みカウンタ５３４が一つカウントアップされると、配列Ａの次の要素位置に書込みが行なわれるようにする。プリロードレジスタ群４−０〜３の要素方向の容量は有限なため、書込みカウンタ５３４の値がプリロードレジスタ群４−０〜３の要素方向の容量に等しくなったら、書込みカウンタ５３４の値は０にラップアラウンドするようにする。そのためには、図１０に示すように書込みカウンタＷ５３４を操作する。
【００５８】
図１０は、制御回路５３２および２進表現で表した書込みカウンタＷ５３４を示している。ここで各ＰＲの要素方向の容量は６４要素としている。すなわち書込みカウンタＷの下位５ビットで３２本のＰＲ番号を、上位６ビットで要素番号を表現する。制御回路５３２は信号線３０２を介し記憶回路５３２０にプリロードレジスタが４本しか使われないことを記憶しておき、以下のように書込みカウンタＷ５３４を制御する。
【００５９】
基本的には制御回路５３２は信号線５３５によりプリロードレジスタ群４−０〜３への書込みを指示されるたびに加算回路５３２１を介して書込みカウンタＷ５３４の最下位ビットを１ずつカウントアップする。下位５ビットはＰＲ番号として信号線５３１−１に出力される。制御回路５３２はプリロードレジスタが４本しか使用されないことを記憶しているので、カウントアップ時に下から３ビット目への桁上がりが生じるかどうかを比較回路５３２２により監視し、生じた場合はそれを上位６ビットに桁あげするようにセレクタ５３２４および加算回路の出力５３２８の上位６ビットへの設定を制御する。上位６ビットは要素番号として信号線５３１−０に出力される。これにより、ＰＲ０、ＰＲ１、ＰＲ２、ＰＲ３と書込まれた後は、ＰＲ０の次の位置に書込みを行なうことができる。また最上位ビットからの桁あふれが生じるときは書込みカウンタ５３４の値を０にラップアラウンドさせる。これにより４本のＰＲの全要素位置に書込みが行なわれた後は、ＰＲ０の最小要素位置からふたたび書込みをおこなうことができる。
【００６０】
以上のように制御することにより、各プリロードレジスタ群４−０、４−１、４−２、４−３の書込み位置の選択は全て信号線５３１の値により制御され、プリロードレジスタ群４には同時に発行されたプリロードリクエストにより読み出された４つの配列要素が同期して同じ要素位置に書込まれる。
【００６１】
こうして、主記憶から並列にプリロードされた４つのデータが、４つのプリロードレジスタ群の分散して、かつ、順次異なる記憶位置に書き込まれる。すなわち図４に例示するように、プリロードレジスタ群４−０、４ー１、４ー２、４−３には、まず同時並列的にＰＲ０（すなわち４００ー０、４０１ー０、４０２ー０、４０３ー０）にデータＡ（１）、Ａ（２）、Ａ（３）、Ａ（４）が書込まれ、続いて同時並列的にＰＲ１（すなわち４００ー１、４０１ー１、４０２ー１、４０３ー１）にデータＢ（２）、Ｂ（４）、Ｂ（６）、Ｂ（８）が書き込まれる。以下ＰＲ２にＣ（２）、Ｃ（３）、Ｃ（４）、Ｃ（５）、ＰＲ３にＤ（１）、Ｄ（２）、Ｄ（３）、Ｄ（４）が書込まれ、再びＰＲ０にＡ（５）、Ａ（６）、Ａ（７）、Ａ（８）が書込まれる。さらにＰＲ０、ＰＲ１、ＰＲ２、ＰＲ３の全要素位置にデータが書込まれると、再びＰＲ０の最初の要素位置（図４にＡ（１）が記されている要素位置）にデータが上書きされる。最初の要素位置への上書きは、上書きされるデータがプロセッサに読み出されるのを待ってから行なわれる。この制御に関しては後述する。
【００６２】
なお、書込みカウンタ５３４の値は、そのサイクルでカウントアップされたかの情報が信号線５４４に出力され、データ保証回路５４０によるデータ書込み／読み出しの順序性保証にも使用される。
【００６３】
（プロセッサによるプリロードデータの読み出し）
各プロセッサは、プリロードされたデータのうち、そのプロセッサに対応するプリロードレジスタ群に保持された複数のデータを、それらのデータがプリロードされた順に使用するようにプログラムされている。
【００６４】
たとえば、図３の（ｂ）に、図２のループ処理を実行するための各プロセッサで実行される機械語命令列の一例を示す。この命令列は、プロセッサ３−０〜３の各々で独立に実行される。この命令列では、プリロードレジスタ群を指定する複数のロード（ＬＤ）命令を含む。本実施例では、後に説明するように、これらの命令が実行されたとき、プリロード部２は、その命令列を実行するプロセッサ、たとえば、３−０に対応するプリロードレジスタ群、たとえば、４−０にプリロードされた複数のデータをそれらの命令が実行される順番にしたがって順次読み出すようになっている。
【００６５】
図３の（ｂ）のプログラムでは、プリロードレジスタ群ＰＲを指定する最初のＬＤ（ロード）命令である（１）の命令が実行されると、そのプロセッサに対応するプリロードレジスタ群内のＰＲ０内のの０番目の要素が読み出され、この命令は、このデータをそのプロセッサ内の汎用レジスタＧＲ０にロードすることを要求することになる。すなわち例えばプロセッサ３−０では配列要素Ａ（１）がロードされる。以下同様に（２）、（３）の命令を実行すると、ＧＲ１に配列要素Ｂ（２）を、ＧＲ２に配列要素Ｃ（２）を、ＧＲ５に配列要素Ｄ（１）をロードすることになる。このループは、（１）〜（８）の命令による処理をループ長Ｎ／４回繰り返す。勿論、この繰返し時には、プリロードを要求する命令が再度実行されたときには、後続のプリロード済みのデータを読み出すことになる。
【００６６】
今の例では、プリロードレジスタ群４−０からはデータＡ（１）、Ｂ（２）、Ｃ（２）、Ｄ（１）、Ａ（５）、、、がこの順に読み出される。したがって、この機械語命令列は、各プロセッサに対応するプリロードレジスタ群にプリロードされた複数のデータを、それらのデータがプリロードされた順に使用するようにプログラムされていなければならない。
【００６７】
さて、いずれかのプロセッサ３−ｉ（ｉ＝０、１、２または３）で、プリロードレジスタ群を指定するロード命令を実行したとき、そのプロセッサは、ロードリクエストＲＱｉをプリロード部２の読み出し制御部５６０に供給するようになっている。
【００６８】
図７は読み出し制御部５６０の構成図である。読み出し制御部５６０は、独立非同期に動作するプロセッサ３−０〜３から独立非同期に送出されるロードリクエストＲＱ０〜３を受けて、必要なデータが既にプリロードレジスタ群４に書込まれていればそれを信号線５６１−０〜３に出力し、書込まれていなければそれを抑止する。必要なデータが既にプリロードレジスタ群４に書込まれているかどうかは、後に説明する方法でデータ保証制御部５４０から信号線５４５−０〜３により通知される。
【００６９】
プロセッサ３−ｉからロードリクエストＲＱｉが送出されると、読み出し制御部５６０は、信号線５６１−ｉを介してプリロードレジスタ群４−ｉの読み出しを制御する。その際、プリロードレジスタ４００−ｉ内のデータが、それらのプリロード順に信号線４３０−０〜３、４３１−０〜３、４３２−０〜３、４３３−０〜３とセレクタ４４０、４４１、４４２、４４３を介して読み出されて信号線Ｄｉを介してプロセッサ３−ｉに送出される。
【００７０】
どのプリロードレジスタの何番目の要素位置からデータを読み出すべきかの管理にプロセッサ対応のリードカウンタＲ０、Ｒ１、Ｒ２、Ｒ３が用いられる。プロセッサ３−０〜３の動作は独立であり、プリロードレジスタからの読み出しも独立に行なわれるため、各々のプロセッサが読み出すデータのプリロードレジスタ番号、要素番号は独立である。
【００７１】
制御回路５６２−０〜３は、信号線５４５−０〜３の値が書込み済みを示し、かつ信号ＲＱ０〜３が送出された時のみ、信号線５６３−０〜３を介して読み出しカウンタ（Ｒ０〜３）５６４−０〜３をカウントアップし、信号線５６１−０〜３を介してプリロードレジスタ群４−０〜３の読み出しを行なう。読み出しカウンタＲ０〜３によるプリロードレジスタ群４−０〜３の読み出し要素位置の指定方法および読み出しカウンタＲ０〜３のカウントアップ制御方法は、書込みカウンタ５３４と同じである。すなわち、制御回路５６２−０〜３は、予め信号線３０２を介して何本のプリロードレジスタが使用されるかの情報を得、読み出しカウンタＲ０〜３の下位５ビットが４本のＰＲ番号、上位６ビットが要素番号を示すようにカウントアップを行なう。各プロセッサからのロードリクエストは信号線ＲＱ０〜３の送出とは独立に行なわれるため、読み出しカウンタＲ０、Ｒ１、Ｒ２、Ｒ３の値は独立にカウントアップされ、プリロードレジスタ群４−０、４ー１、４−２、４−３の読み出し位置は異なっていることがある。
【００７２】
また、各読み出しカウンタＲ０、Ｒ１、Ｒ２、Ｒ３、がそのサイクルでカウントアップされたかの情報は、信号線５４６−０〜３を介してデータ保証制御部５４０にも出力される。
【００７３】
（データ保証制御部）
図８はデータ保証制御部５４０の構成図である。信号線５４２は、リクエストカウンタＲＱ５２１がカウントアップされたかを示す。すなわち本信号は、プリロードリクエストＡ０〜３が主記憶１に送出されたかを意味する。信号線５４６−０〜３は、読み出しカウンタＲ０〜３（５６４−０〜３）の各々がカウントアップされたかを示す。すなわち本信号は、プロセッサ３−０〜３が各々プリロードレジスタ群４からデータを読み出したかを意味する。信号線５４４は、書込みカウンタＷ５３４がカウントアップされたかを示す。すなわち本信号は、主記憶１からプリロードレジスタ群４にデータが書込まれたかを意味する。一方出力信号である信号５４１は、プリロードリクエスト部５００にプリロードリクエスト送出の抑止を指示する。また出力信号５４５−０〜３は、読み出し制御部５６０に対して出力され、読み出したいデータがプリロードレジスタ群４に書込み済みかをプロセッサ対応に示す。
【００７４】
プリロードリクエスト送出を抑止すべきかの決定は以下のように行なう。
【００７５】
プリロードレジスタ上にまだ読み出されていないデータがある場合、プリロードレジスタの再利用のために、新たなデータを上書きしてしまうようなプリロードリクエストの送出は防がなければならない。そのために、リクエストカウンタＲＱ５２１の値が、各読み出しカウンタＲ０〜３の値のいずれかに等しくなりそうな時に、プリロードリクエスト送出抑止信号５４１を送出する。
【００７６】
生成回路５５０は、信号線５４２の値をもとに、ＲＱ５２１の値の写しを生成する。生成回路５５１−０〜３は、信号線５４６−０〜３の値をもとに、各々Ｒ０〜３の値の写しを生成する。なお、信号線５４２および５４６−０〜３を使用してＲＱ５２１およびＲ０〜３の値を直接受け取ってもよい。比較回路５５３−０〜３は、各々信号線５５６、５５７−０〜３を介して受け取ったＲ０〜３の値の写しからＲＱ５２１の値の写しを減じ、その値が１以下のとき信号線５５９−０〜３に１を出力する。ＯＲ回路５５５は、信号線５５９−０〜３のいずれかが１の時信号線５４１に１を出力する。上記により、次のサイクルでプリロードリクエストを出力してＲＱ５２１の値が１加算されてしまうと、ＲＱ５２１の値がＲ０〜３の値のいずれかに等しくなってしまうタイミングで、プリロードリクエスト送出抑止信号５４１が送出される。
【００７７】
一方、読み出したいデータが書込み済みかは、各読み出しカウンタＲ０〜３の値が書込みカウンタＷ５３４の値より小さいかどうかにより、プロセッサ対応に決定する。
【００７８】
生成回路５５２は、信号線５４４の値をもとに、Ｗの値の写しを生成する。もちろん信号線５４４を使用してＷの値を直接受け取ってもよい。比較回路５５４−０〜３は、各々信号線５５８、５５７−０〜３を介して受け取ったＷの値の写しからＲ０〜３の値の写しを減じ、その値が２以上のとき信号線５４５−０〜３に１を出力する。上記値が２以上であれば、次のサイクルで読み出しを行なっても、データは既にプリロードレジスタ群に書込み済みである。
【００７９】
上記により、データ保証制御部５４０は、まだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、またプリロードレジスタへのデータ書込みを読み出しが追い越さないように、プリロードリクエスト部５００、書込み制御部５３０、読み出し制御部５６０を制御することができる。
【００８０】
以上述べてきたように、プリロードリクエスト送出、プリロードデータ書込みおよび読み出しを制御することにより、主記憶へのアクセスは一括して行ない（メモリアクセスが連続アドレスになることが多いため効率がよい）、一方で各プロセッサの動作は独立で実施（プロセッサの稼働率が向上する）することができる。
【００８１】
＜実施例２＞
本実施例は、主記憶を共有する複数のスカラプロセッサにより主記憶にストアすべき複数のデータを一時的に各プロセッサ対応に設けたバッファに保存し、後に、それらのバッファに保持されたストアすべき複数のデータをまとめて主記憶にポストストアするデータ処理装置を示す。
【００８２】
（装置の概要）
図１１において、プロセッサ３−０〜３は図１２に示すＦＯＲＴＲＡＮのＤＯループを分担処理する。主記憶１とプロセッサ群３−０〜３の間にポストストアを実行するポストストア部１２がある。ポストストア部１２はポストストア動作を制御するポストストア制御部１５とポストストアするデータを保持するポストストアレジスタ群１４に大別されている。ポストストアレジスタ群１４は、各々プロセッサ３−０〜３に対応するポストストアレジスタ群１４−０〜３に分割されている。
【００８３】
本実施例の構造と動作は、実施例１のプリロードがポストストアに変更されている点で実施例１の装置の構造と動作とは異なるが、複数の配列のデータをまとめて処理する点では類似の点がある。したがって、以下では、主として相違する部分を簡単に説明する。
【００８４】
ＤＯループの分担実行に先立ち、プロセッサ３−０〜３のいずれかのプロセッサは信号線３００ー０〜３、オア回路３０１、信号線３０２を介してポストストア制御部１５に、ＤＯループ内の全ての配列Ａ、Ｂ、Ｃ、Ｄの先頭アドレスとストライド、ループ長Ｎおよびプロセッサの添え字分担態様を含むポストストア情報を指示する。ここでは添え字分担態様としてＣｙｃｌｉｃ分割が指定された場合を主に説明する。
【００８５】
続いてプロセッサ３−０〜３は各々独立にループ処理を実行し、その実行途中で、主記憶１にストアすべきデータが得られたとき、ストアリクエストＳＲＱ０〜３をポストストア制御部１５に送出するとともに、ストアデータＳＤ０〜３を各プロセッサ対応のポストストアレジスタ群１４−０〜３に送出する。ポストストア制御部１５は、信号線１５６１によりストアデータのポストストアレジスタ群１４−０〜３への書込みを制御する。またポストストア制御部１５は、ポストストアレジスタ群１４−０〜３にデータがある程度たまったら、あらかじめ指示されたポストストア情報に基づきプロセッサ３−０〜３の各々がストアすべき配列要素のアドレスＡ０〜３を計算して、一括して主記憶１に出力するとともに、信号線１５３１の制御によりポストストアデータＰＳＤ０〜３をポストストアレジスタ群１４−０〜３から読み出して主記憶１に送出する。
【００８６】
図１３は図１２のＤＯループを実行する機械語命令列イメージである。
【００８７】
（ａ）のセットアップ処理はプリロード時と同じである。ただしＳＲ０〜３、ＢＲ０〜３は各々対応する番号のポストストアレジスタ（ＰＳＲ）に関するアドレス情報を示す。
【００８８】
（ｂ）のループ処理は、プロセッサ３−０〜３の各々が独立に実行する。各々のプロセッサ中にあるＧＲ１０にはあらかじめ０がセットされている。（１）のＳＴ（ストア）命令にてポストストアレジスタ群ＰＳＲを指定すると、汎用レジスタＧＲ０の内容が、そのプロセッサに対応するポストストアレジスタ群内のポストレジスタＰＳＲ０の最少の要素位置から格納される。引き続く（２）〜（４）のＳＴ命令で、汎用レジスタＧＲ１、ＧＲ２、ＧＲ３の内容が、そのプロセッサに対応するポストストアレジスタ群内のＰＳＲ１ＰＳＲ２、ＰＳＲ３内の最小の要素位置から格納される。以上をループ長Ｎ／４回繰り返す。
【００８９】
本実施例では、各プロセッサは、ループ処理に表れる複数の配列データを主記憶に格納するとき、一つの配列データの複数の要素を続けてストアするのではなく、順次異なる配列データに属する複数の要素を順次ストアするようになっている。したがって、図１３の各ストア命令は、本実施例では、順に配列データＡ、Ｂ、Ｃ、Ｄの順にストアを要求するようになっている。これによりポストストアレジスタ群１４−０〜３内には、配列Ａ（Ｉ）、配列Ｂ（Ｉ＊２）、配列Ｃ（Ｉ＋１）、配列Ｄ（Ｉ）の要素がＣｙｃｌｉｃ分割にしたがって分割されて順次格納されることになる。ポストストアレジスタ群１４−０〜３に格納された配列Ａ、Ｂ、Ｃ、Ｄは、ポストストア部１５により自動的に主記憶１に格納される。
【００９０】
以上の動作を正しく行なうためのポストストア部の動作を以下詳細に説明する。図１４はポストストア部１２の構成図である。
【００９１】
ポストストアレジスタ群１４内にはポストストアレジスタ群１４−０〜３があり、各々の中にポストストアレジスタ（ＰＳＲ）０〜３１がある。図では簡単のためポストストアレジスタは４本しか示していない。１４００−０、１４０１−０、１４０２−０、１４０３−０が各々ポストストアレジスタ群１４−０、１、２、３内のＰＳＲ０であり、１４００−１、１４０１−１、１４０２−１、１４０３−１が各々ポストストアレジスタ群１４−０、１、２、３内のＰＳＲ１であり、１４００−２、１４０１−２、１４０２−２、１４０３−２が各々ポストストアレジスタ群１４−０、１、２、３内のＰＳＲ２であり、１４００−３、１４０１−３、１４０２−３、１４０３−３が各々ポストストアレジスタ群１４−０、１、２、３内のＰＳＲ３である。
【００９２】
ポストストア制御部１５内には、ポストストアリクエスト部１５００、読み出し制御部１５３０、データ保証制御部１５４０、書込み制御部１５６０がある。
【００９３】
各プロセッサ３−０〜３からストアリクエストが信号線ＳＲＱ０〜３を介して送出されると、書込み制御部１５６０は、信号線１５６１−０〜３、セレクタ１４４０、１４４１、１４４２、１４４３を介してポストストアレジスタ群１４へのデータＳＤ０〜３の書込みを制御する。どのポストストアレジスタの何番目の要素位置にデータを書込むべきかの管理にプロセッサ対応の書込みカウンタＷ０、Ｗ１、Ｗ２、Ｗ３が用いられる。プロセッサ３−０〜３の動作は独立であり、ポストストアレジスタへの書込みも独立に行なわれるため、各々のプロセッサが書込むデータのポストストアレジスタ番号、要素番号は独立である。各ポストストアレジスタ内には、配列の各要素がＣｙｃｌｉｃに格納される。
【００９４】
読み出し制御部１５３０はポストストアレジスタ群４からデータＰＳＤ０〜３の読み出しを、信号線１５３１、セレクタ１４１０、１４１１、１４１２、１４１３を介して制御する。どのポストストアレジスタの何番目の要素位置からデータを読み出すべきかの管理に読み出しカウンタＲが用いられる。読み出しは、ポストストアレジスタ群１４−０、１、２、３内の同じＰＳＲの同じ要素位置から行なわれる。
【００９５】
あらかじめプロセッサ３−０〜３のいずれかから送出されたセットアップ情報は、信号線３０２を介してポストストアリクエスト部１５００内のＬＲ、ＤＲ、ＢＲ、ＳＲに設定されている。ポストストアリクエスト部１５００は設定された情報に基づき各プロセッサからストアすべきアドレスを計算し、読み出し制御部１５３０によるデータのＰＳＤ０〜３への読み出しと同期して、信号線Ａ０〜３にアドレスを送出して主記憶１にポストストア要求を出す。ポストストア要求をどれだけ送出したかの管理にリクエストカウンタＲＱが用いられる。
【００９６】
データ保証制御部１５４０は、ポストストアレジスタへのプロセッサからのデータ書込みをポストストアリクエストによる読み出しが追い越さないように、またまだ読み出していないポストストアデータのある位置に別のストアデータを上書きしないように、信号線１５４１、１５４４、１５４５、１５４６を通じて、書込み制御部１５６０、読み出し制御部１５３０、ポストストアリクエスト部１５００を制御している。
【００９７】
以下、書込み制御部１５６０、読み出し制御部１５３０、ポストストアリクエスト部１５００、データ保証制御部１５４０の動作を順次説明する。
【００９８】
（書込み制御部１５６０）
図１７は書込み制御部１５６０の構成図である。書込み制御部１５６０は、独立非同期に動作するプロセッサ３−０〜３から独立非同期に送出されるストアリクエストＳＲＱ０〜３を受けてストアデータをポストストアレジスタ群１４に書込む。プロセッサ３−０〜３からのストアリクエストが、まだポストストアされていないデータを上書きしてしまう場合は、ストアリクエストを抑止する。抑止すべきかはデータ保証制御部１５４０から送出される信号線１５４５−０〜３により通知される。制御回路１５６２−０〜３は、信号線１５４５−０〜３の値が抑止不要を示し、かつ信号線ＳＲＱ０〜３が送出された時のみ、信号線１５６３−０〜３を介して書込みカウンタＷ０〜３（１５６４−０〜３）をカウントアップし、信号線１５６１−０〜３を介してポストストアレジスタ群１４−０〜３への書込みを行なう。書込みカウンタＷ０〜３（１５６４−０〜３）の値とカウントアップの方法およびポストストアレジスタ群１４への書込み位置の対応は、プリロード時と同じである。信号線ＳＲＱ０〜３の送出は独立に行なわれるため書込みカウンタＷ０（１５６４−０）、Ｗ１（１５６４−１）、Ｗ２（１５６４−２）、Ｗ３（１５６４−３）の値は独立にカウントアップされ、ポストストアレジスタ群１４−０、１４ー１、１４−２、１４−３の書込み位置は異なっていることがある。また、各書込みカウンタＷ０（１５６４−０）、Ｗ１（１５６４−１）、Ｗ２（１５６４−２）、Ｗ３（１５６４−３）がそのサイクルでカウントアップされたか否かの情報が、信号線１５４６−０〜３を介してデータ保証制御部１５４０に出力される。
【００９９】
（読み出し制御部１５３０）
図１６は読み出し制御部１５３０の構成図である。読み出し制御部１５３０はデータ保証制御部１５４０から送出されるポストストア起動信号１５４１に従い、ポストストアレジスタ群１４の然るべき位置からデータを読み出すようセレクタ１４１０、１４１１、１４１２、１４１３を制御する制御信号１５３１を生成する。具体的には、制御回路５３２は、起動信号１５４１を受けた時のみ、信号線１５３３を介して読み出しカウンタＲ１５３４をカウントアップし、その値が信号線１５３１に出力される。読み出しカウンタＲ１５３４の値とカウントアップの方法およびポストストアレジスタ群１４の読み出し位置の対応はプリロード時と同じである。各ポストストアレジスタ群１４−０、１４−１、１４−２、１４−３の読み出し位置の選択は全て信号線１５３１の値により制御されるので、ポストストアレジスタ群１４からは同一ＰＳＲの同一要素位置からデータが読み出される。また、読み出しカウンタＲ１５３４がそのサイクルでカウントアップされたか否かの情報が信号線１５４４に出力され、データ保証回路１５４０によるデータ書込み／読み出しの順序性保証に使用される。
【０１００】
（ポストストアリクエスト部１５００）
図１５はポストストアリクエスト部１５００の構成図である。ポストストアリクエスト部１５００の構成および動作はプリロードリクエスト部５００とほとんど同じである。プリロードリクエスト部と全く同じ動作をする構成要素には同じ番号を付してある。
【０１０１】
ポストストアリクエスト部１５００内には、リクエストカウンタＲＱ５２１、ＬＲ、ＤＲ、３２本のＢＲ、３２本のＳＲがあるが、図では簡単のため４本しか示していない。またプロセッサ３−０〜３の各々に対応するポストストアリクエスタ０〜３（１５０３−０〜３）がある。
【０１０２】
プロセッサ３−０〜３のいずれかから送出されるセットアップ情報は信号線３０２を介して入力され、各々ＬＲ、ＤＲ、ＳＲ０〜３、ＢＲ０〜３に設定される。これらの情報はポストストアリクエスタ０〜３（１５０３−０〜３）に取り込まれ、各プロセッサに対応したアドレスＡ０〜３を計算するのに使用される。ポストストアリクエスタ０〜３（１５０３−０〜３）の動作はほとんど同じため、以下ではポストストアリクエスタ０（１５０３−０）を例に取り説明する。
【０１０３】
ポストストアリクエスタ０（１５０３−０）内には、ワークベースレジスタ５０８−０〜３、ワークストライドレジスタ５１２−０〜３、アドレス加算器５１６があり、これらを用いて毎サイクルアドレスが計算される。ポストストアリクエスタ０内にはさらに初期設定回路５０４−０〜３があり、プロセッサ３−０に対応した要素アドレスを計算できるよう、ワークベースレジスタ５０８−０〜３およびワークストライドレジスタ５１２−０〜３を初期設定する。初期設定の方法はプリロードリクエスタ５０３−０と同一である。
【０１０４】
ポストストアリクエスト部１５００は、データ保証制御部１５４０からのポストストア起動信号１５４１が入力され、かつループ長分の処理を完了していない場合に、ポストストアリクエストを毎サイクルＡ０〜３に送出する。制御回路１５１８はこれを制御するための回路であり、ポストストアリクエストを送出した数を計数し、信号線５２０を介してリクエストカウンタＲＱ５２１をカウントアップしている。制御回路１５１８は、信号線５４１の値が起動であり、かつポストストアリクエスト送出数が信号線５１７を介して得たＬＲの値＊総配列数（この場合は４）／プロセッサ台数（この場合は４）を超えない限り、起動信号５１９をポストストアリクエスタ０〜３（１５０３−０〜３）に送出する。ポストストアリクエスタ０〜３（１５０３−０〜３）は起動信号５１９の値が有効なサイクルのみアドレスを計算し、信号Ａ０〜３を送出する。
【０１０５】
アドレスの計算の方法はプリロードリクエスタ５０３−０と同一である。
【０１０６】
ポストストアリクエスタ１５０３−０〜３は信号線５１９の制御により同期して動作するため、以上の動作により、ポストストアリクエスト部１５００は、全配列の同一添え字に関してまんべんなく、主記憶１へのポストストア要求を出すことができる。さらにＣｙｃｌｉｃ分割の場合、アドレスＡ０〜３は連続していることが多いため、主記憶１に対し、連続アクセス要求をまとめて出すことができる。
【０１０７】
（データ保証制御部１５４０）
図１８はデータ保証制御部１５４０の構成図である。データ保証制御部１５４０は、そのサイクルで書込みカウンタＷ０〜３（１５６４−０〜３）の各々がカウントアップされたかの情報を示す信号線１５４６−０〜３と、読み出しカウンタＲ１５３４がカウントアップされたかの情報を示す信号線１５４４を入力として、プロセッサ対応のストア動作抑止信号１５４５−０〜３およびポストストア起動信号１５４１を生成する。
【０１０８】
ストア動作を抑止すべきかどうかは以下のように決定する。
【０１０９】
ポストストアレジスタ上にまだ主記憶に送出されていないデータがある場合、ポストストアレジスタの再利用のために、新たなデータを上書きしてしまうようなストアリクエストの送出は防がなければならない。そのために、各書込みカウンタＷ０〜３の値が、読み出しカウンタＲの値に等しくなりそうな時に、ストア動作抑止信号１５４５−０〜３をプロセッサごとに送出する。
【０１１０】
生成回路１５５１−０〜３は、信号線１５４６−０〜３の値をもとに、各々Ｗ０〜３の値の写しを生成する。生成回路１５５２は、信号線１５４４の値をもとに、Ｒの値の写しを生成する。なお、信号線１５４６−０〜３および１５４４を使用してＷ０〜３およびＲの値を直接受け取ってもよい。比較回路１５５４−０〜３は、各々信号線１５５７−０〜３、１５５８を介して受け取ったＲの値の写しからＷ０〜３の値の写しを減じ、その値が１以下のとき信号線５５９−０〜３に１を出力する。上記により、次のサイクルでストア動作を行なってＷ０〜３の値が１加算されると、Ｗ０〜３の値がＲのに等しくなってしまうタイミングで、各プロセッサごとに、ストア動作抑止信号１５４５−０〜３が送出される。
【０１１１】
一方、ポストストアを起動するためには、ポストストアデータがプロセッサからポストストアレジスタ群に書込み済みでなければならない。そこで、全てのＷ０〜３の値がＲの値より大きい時にポストストアを起動する。
【０１１２】
比較回路１５５３−０〜３は、Ｗ０〜３の値の写しからＲの値の写しを減じた値が２以上のとき信号線５４５−０〜３に１を出力する。上記値が２以上であれば、次のサイクルで読み出しを行なっても、データは既にプリロードレジスタ群に書込み済みである。
【０１１３】
以上により、データ保証制御部１５４０は、ポストストアレジスタへのデータ書込みをポストストアによる読み出しが追い越さないように読み出し制御部１５３０を制御し、また、まだ読み出していないポストストアデータのある位置に別のストアデータを上書きしないように書込み制御部１５６０を制御する。
【０１１４】
＜実施例３＞
実施例１では、ハードウェアが３２本のプリロードレジスタを具備していても、機械語命令列で指定された４本のプリロードレジスタしか使用できない。本実施例は、機械語命令列を変更することなく、ハードウェアが具備する全てのプリロードレジスタを使用してプリロードを実施できるように実施例１を変形したものである。具体的には３２本のプリロードレジスタを複数本ずつ連結し、論理的に４本のプリロードレジスタと見なされるように、装置が構成される。
【０１１５】
（用語の定義）
全体構成は図１に示したものと同一である。プロセッサ３−０〜３に各々対応したプリロードレジスタ群４−０〜３ごとに３２本のプリロードレジスタ４００−０〜３１がある。図１９はその内プリロードレジスタ群４−０に関してのみ示した図である。以下、本実施例ではハードウェアが実際に具備するプリロードレジスタ４００−０〜３１を最小単位プリロードレジスタ（ＩＰＲ）と呼ぶ。このうち複数本ずつが連結されて論理的に１本のプリロードレジスタが構成されるが、これをプリロードレジスタ（ＰＲ）と呼ぶ。
【０１１６】
（全体動作）
以下では、プリロードを実行する場合に関して説明する。ポストストアの制御は本実施例から容易に類推可能である。
【０１１７】
図１９に示すように、プリロードレジスタ群４ー０には各々３２本の最小単位プリロードレジスタＩＰＲ（４００−０〜３１）があり、各最小単位プリロードレジスタＩＰＲは６４要素を保持する。プリロードレジスタ群４ー１、４ー２、４ー３の構成も同様である。
【０１１８】
図２のＤＯループを実現する場合、機械語命令列は実施例１と同じ図３に示したものとなる。しかしプリロード部２は機械語命令列を実施例１とは少し異なる形に解釈する。すなわち、（ａ）の（１）の命令で使用ＰＲ本数は４であることが示されると、３２本のＩＰＲを４で除した８本ずつ連結し、連結されたプリロードレジスタを、機械語命令列で指定されるＰＲ０〜３と解釈する。すなわち、プリロードレジスタ群４ー０を例にとれば、４００ー０〜７をＰＲ０、４００ー８〜１５をＰＲ１、４００ー１６〜２３をＰＲ２、４００−２４〜３１をＰＲ３とし、各々６４ｘ８＝５１２要素のプリロードレジスタと見なす。各プリロードレジスタ内の要素番号は、４００−０の第０〜６３要素位置がＰＲ０の第０〜６３要素、４００−１の第０〜６３要素位置がＰＲ０の第６４〜１２７要素となり、以下４００−２、、、と連結し、４００−７の第０〜６３要素位置がＰＲ０の第４４８〜５１１要素と解釈される。つまり、あたかも４本の５１２要素のプロセッサ対応のプリロードレジスタがあるかのごとくプリロード部２は動作する。
【０１１９】
上記の制御を行なうために、プリロードリクエスト部５００の初期設定方式と書込みカウンタＷ５３４および読み出しカウンタＲ０〜３のカウントアップ方式が実施例１とは異なる。各々の動作を図２０〜２２を用いて以下に説明する。
【０１２０】
（プリロードリクエスト部初期設定方式）
図３の（ａ）の（１）の命令が実行されると、３２本のＩＰＲを４つに分割して連結する指示が信号線３０２を介して図２０のプリロードリクエスト部５００内の連結設定回路５２４に伝えられる。（２）〜（１１）の命令が実行されるとＬＲにループ長Ｎが、ＤＲにプロセッサの添え字分担態様が、ＢＲ０〜３にそれぞれ配列Ａ、Ｂ、Ｃ、Ｄの先頭アドレスが、ストライドレジスタＳＲ０〜３に全プロセッサのアクセスをまとめた場合の配列Ａ、Ｂ、Ｃ、Ｄへのアクセスストライドがセットされる。連結設定回路５２４は信号線５２５を介して初期設定回路５０４ー０〜３１を制御し、図２１に示す情報を信号線５０５ー０〜３１、５２２ー０〜３１に送出させる。これにより、各最小単位プリロードレジスタＩＰＲが、連結されたプリロードレジスタにロードすべきデータの然るべき部分を主記憶１からロードできるように、５０７−０〜３１および５１２−０〜３１が設定されたことになる。以下具体的に配列の各要素が各ＩＰＲのどの部分にロードされるよう設定されたかを示す。
【０１２１】
図２１は、プロセッサ３−０〜３に対応するプリロードリクエスタ０〜３において、ＩＰＲごとの配列初期アドレスを示す信号線５０５−０〜３１およびストライドアドレスを示す信号線５２２−０〜３１への出力を、プロセッサ番号をｐ、ＩＰＲ番号をｎとしてまとめて表示したものである。機械語命令列により指定された使用プリロードレジスタ本数をｐｒｎ（図２の命令列の場合４）とすると、ＩＰＲはｊ＝３２／ｐｒｎ本（この場合３２／４＝８本）ずつ連結される。ここでｎ＝ｉｘｊ＋ｋなるｉとｋを求めると、ｉはｎ番目のＩＰＲが何番目のＰＲに相当するかを示し、ｋは連結されたｉ番目のＰＲのうちｎ番目のＩＰＲが前から何番目のＩＰＲであるかを示すことになる。さてＣｙｃｌｉｃ分割の場合、配列要素はＰＲ０、ＰＲ１、、、と１要素ずつ格納されるべきなので、各ＰＲの先頭のＩＰＲの配列先頭アドレスとして設定されるべきなのは、図９（ａ）に同じくＢＲｉ＋ＳＲｉｘｐとなる（先頭のＩＰＲということはｋ＝０の場合ということ）。各ＩＰＲは６４要素を保持し、かつ各配列要素は順次異なるプロセッサで処理されるのだから、各ＰＲのｋ番目のＩＰＲの配列先頭アドレスとして設定されるべきなのは、上記値にＳＲｉｘ４ｘ６４ｘｋを加えたものとなる。またＩＰＲ番号にかかわらず、ストライドアドレスはＳＲｉｘ４となる。一方Ｂｌｏｃｋ分割の場合、各ＰＲは全ループ長ＬＲをプロセッサ台数すなわち４で分割して処理するのであるから、各ＰＲの先頭のＩＰＲの配列先頭アドレスとして設定されるべきなのは、図９（ａ）に同じくＢＲｉ＋ＳＲｉｘＬＲ／４ｘｐとなる。各ＩＰＲは６４要素を保持するので各ＰＲのｋ番目のＩＰＲの配列先頭アドレスとして設定されるべきなのは、上記値にＳＲｉｘ６４ｘｋを加えたものとなる。またＩＰＲ番号にかかわらず、ストライドアドレスはＳＲｉとなる。
【０１２２】
（書込みカウンタおよび読み出しカウンタの更新）
以上より然るべきアドレスが設定されたので、この後は然るべき順序で然るべき要素位置への書込み、読み出しが指示されるように書込みカウンタＷ５３４および読み出しカウンタＲ０〜３のカウントアップが操作されればよい。
【０１２３】
図２２は制御回路５３２および書込みカウンタＷ５３４を示す図である。５３４はカウンタＷ５３４の値を２進表現で表したものである。すなわち下位５ビット（５３１−１）で３２本のＩＰＲ番号を、上位６ビット（５３１−０）でＩＰＲの要素番号を表現する。
【０１２４】
制御回路５３２は信号線３０２により予め３２本のＩＰＲを４つに分割することを知らされている。制御回路５３２は基本的にはプリロードレジスタ群４−０〜３への書込みが信号線５３５を介して指示されるたびに、書込みカウンタＷ５３４の最下位ビットを加算器５３３０により３２／４＝８ずつカウントアップする。これによりＩＰＲ０の第０要素、ＩＰＲ８の第０要素、ＩＰＲ１６の第０要素、ＩＰＲ２４の第０要素への書込みの後に、ＩＰＲ０の第１要素への書込みを行なうことができる。すなわち配列Ａ、Ｂ、Ｃ、Ｄに関し同一添え字に関し順次書込みを行なうことができる。
【０１２５】
ＩＰＲ２４の第６３要素への書込みを行なった後に、書込みカウンタＷ５３４に８を加えると、最上位ビットからの桁あふれが生じる。比較回路５３３１はこれを監視しており、この時加算回路５３３２により生成される書込みカウンタＷ５３４の値をラップアラウンドさせさらに１を加ええた値が、書込みカウンタに設定されるようにセレクタ５３３３を制御する。これにより、以降はＩＰＲ１の第０要素、ＩＰＲ９の第０要素、ＩＰＲ１７の第０要素、ＩＰＲ２５の第０要素と書込みアドレスを指定でき、引続き配列Ａ、Ｂ、Ｃ、Ｄに関し同一添え字に関し順次書込みを行なうことができる。さらにＩＰＲ２５の第６３要素への書込みを行なった後に、書込みカウンタＷ５３４に８を加えると、最上位ビットからの桁あふれが生じ、ラップアラウンドした値は１を指す。ここにさらに１を加えることにより、以降はＩＰＲ２の０要素に書込みを行なうことができる。
【０１２６】
読み出しカウンタＲ０〜３（５６４−０〜３）の制御についても全く同様に行なうことができる。
【０１２７】
以上のように制御することにより、最小単位のプリロードレジスタを複数連結して論理的に一つのレジスタとしてアクセスすることができ、プログラム中に現れる配列の数に応じた数のプリロードレジスタを提供することができる。
【０１２８】
＜実施例４＞
本実施例は、一度の主記憶アクセスにより、プロセッサの台数の複数倍のデータをまとめてプリロード可能になるように、実施例１を変形したものである。したがって、上記の実施例１を変更すべき点を中心に述べる。ここでは倍数は一例として２倍とする。この実施例の考えは、ポストストアに関しても全く同じであり、また実施例３にも適用できる。
【０１２９】
全体構成は図１にほぼ同じである。ただしＡ０〜３およびＰＤ０〜３は２重化し、１サイクルで２要素分のプリロードデータおよび主記憶アドレスを送出できるようにする。
【０１３０】
実施するプログラムの機械語命令列イメージは図３に同じである。プリロードの単位がプロセッサ台数の２倍になってもプログラムには何の変更もなく、プロセッサ３−０〜３は各々１要素ずつプリロードレジスタ群４−０〜３からデータを読み出して処理する。
【０１３１】
プリロード部２の構成は以下のように修正する。
信号線４２０−０〜３、４２１−０〜３、４２２−０〜３、４２３−０〜３は２重化し、１サイクルで２要素分のプリロードデータの処理ができるようにする。また、プリロードレジスタへの書込みは、信号線５３１で示されたプリロードレジスタの、指定された要素位置、およびそれに１を加えた要素位置に行なうよう制御する。
【０１３２】
プリロードリクエスト部５００には、図２３に示すように、図５に較べ、各プリロードリクエスタ５０３−０〜３にアドレス加算器２５１６が追加される。図２３においてワークベースレジスタ５０７−０〜３、ワークストライドレジスタ５１２−０〜３の初期設定方法は図５に同じである。制御回路５１８は信号線５４１の値がプリロード抑止でなく、かつプリロードリクエスト送出数が信号線５１７を介して得たＬＲの値＊総配列数／プロセッサ台数／２を超えない限り、プリロード起動信号５１９をプリロードリクエスタ０〜３（５０３−０〜３）に送出する。
【０１３３】
プリロードリクエスタ５０３−０は、起動信号５１９を受けるたびにアドレス計算を２つの加算器５１６、２５１６を用いて行ない、２つのプリロードリクエストを信号線Ａ０を介して送出する。アドレスの計算は、以下のように行なう。すなわち、アドレス加算器５１６では図５と同じく信号線５１１、５１５を介して得たワークベースレジスタ、ワークストライドレジスタの値を加算して信号線Ａ０に出力する。アドレス加算器２５１６では、信号線５１５を介して得たワークストライドレジスタの値を２倍して、信号線５１１を介して得たワークベースレジスタの値に加え、信号線Ａ０に出力する。読み出されたワークベースレジスタは、アドレス加算器２５１６の出力値に更新される。
【０１３４】
リクエストカウンタＲＱ５２１のカウントアップ方法およびその値によるワークベースレジスタ、ワークストライドレジスタの選択方法は図５に同じである。すなわち、ワークベースレジスタ、ワークストライドレジスタは、リクエストカウンタＲＱ５２１がカウントアップされるごとに順次配列Ａ、配列Ｂと切り替わる。信号５４２には図５と同様、そのサイクルでリクエストカウンタ５２Ｒ１Ｑがカウントアップされたかどうかを示す情報が出力される。この信号がカウントアップを示すときは、２要素分のプリロードリクエスト送出が行なわれたことを意味する。
【０１３５】
書込み制御部５３０の構成および動作は図６に同じである。書込みカウンタ５３４の操作は、図１０に示すのとほとんど同じだが、全配列に関して同一要素位置に対するプリロードを行なったら、次のサイクルでは書込みカウンタ５３４が次の次の要素位置を示すよう制御する必要がある。そのため、図１０において書込みカウンタ５３４の下３ビット目への桁上がりがあった場合は、制御回路５３２は、上位６ビットに２を加える。また、図６の信号線５４４には、そのサイクルで書込みカウンタ５３４がカウントアップされたかどうかを示す情報が出力されるが、この信号がカウントアップを示すときは、２要素分の書込みが行なわれたことを意味する。
【０１３６】
読み出し制御部５６０の構成および動作は図７と全く同じである。読み出しカウンタＲ０〜３（５６４−０〜３）の操作は、実施例における動作と全く同じである。すなわち、読み出しカウンタＲ０〜３（５６４−０〜３）の下３ビット目への桁上がりがあった場合は、上位６ビットに１を加えるように制御される。信号線５４６−０〜３は各読み出しカウンタＲ０〜３（５６４−０〜３）がカウントアップされたかを示すが、この信号がカウントアップを示すときは、１要素分の読み出しが行なわれたことを意味する。
【０１３７】
データ保証制御部５４０の構成は図８に同じである。ただし信号線５４２は２要素分のプリロード要求が行なわれたことを、信号線５４４は２要素分のプリロードによる書込みが行なわれたことを、信号線５４６−０〜３は１要素分のロードによる読み出しが行なわれたことを示す。そのため制御回路５５０は信号線５４９を受けたとき差分カウンタ５５２を１カウントアップし、信号線５４２を受けたとき差分カウンタ５５２を２カウントダウンする。また制御回路５５５−０〜３は信号線５４４を受けたとき差分カウンタ５５７−０〜３を２カウントアップし、各々信号線５４６−０〜３を受けたとき差分カウンタ５５７−０〜３を１カウントダウンする。以上により、データ保証制御部５４０は、プリロードレジスタへのデータ書込みをロードリクエストによる読み出しが追い越さないように、またまだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、プリロードリクエスト部５００、書込み制御部５３０、読み出し制御部５６０を正しく制御することができる。
【０１３８】
【発明の効果】
本願第１の発明によれば、複数のスカラプロセッサにより分担して処理される処理中に含まれる複数の配列の要素のごとき、複数群のデータを、多バンク構成の主記憶の連続するアドレスを有する記憶位置からプリロードするのに適した、回路構造の簡単なデータ処理装置が得られる。
【０１３９】
本願第２の発明によれば、複数のスカラプロセッサにより分担して処理される処理の結果生成される複数の配列の要素のごとき、複数群のデータを、多バンク構成の主記憶の連続するアドレスを有する記憶位置にポストストアするのに適した、回路構造の簡単なデータ処理装置が得られる。
【０１４０】
本願第３の発明によれば、プリロード用のキャッシュの容量を越えて、複数のスカラプロセッサにより分担して処理される繰返し処理で使用される一群のデータがプリロード可能にする、回路構造の簡単なデータ処理装置が得られる。
【図面の簡単な説明】
【図１】本発明の実施例１による、プリロード可能なデータ処理装置の全体構成図。
【図２】図１の装置が実行する処理を表わすＦＯＲＴＲＡＮプログラムの例を示す図。
【図３】図２のプログラムに対して図１の各プロセッサが実行する機械語命令列の例を示す図。
【図４】図１の装置に使用するプリロードレジスタ群とプリロード制御部の構成図。
【図５】図１の装置に使用するプリロードリクエスト生成部の構成図。
【図６】図１の装置に使用する、プリロードレジスタに対する書込み制御部の構成図。
【図７】図１の装置に使用するプリロードレジスタに対する読み出し制御部の構成図。
【図８】図１の装置に使用するプリロードレジスタ書込み／読み出し順序保証部の構成図。
【図９】図５の装置に使用される初期設定回路が設定するアドレス関連情報の値を示す図。
【図１０】図６の書込みカウンタのカウントアップ動作を説明する図。
【図１１】本発明の実施例２による、ポストストアを実行可能なデータ処理装置の全体構成図。
【図１２】図１１の装置で実行される処理を表わすＦＯＲＴＲＡＮプログラムの例を示す図。
【図１３】図１２のＦＯＲＴＲＡＮプログラムに対する機械語命令列の例を示す図。
【図１４】図１１の装置に使用されるポストストアレジスタ群およびポストストア制御部の構成図。
【図１５】図１１の装置に使用されるポストストアリクエスト生成部の構成図。
【図１６】図１１の装置に使用される、ポストストアレジスタに対する読み出し制御部の構成図。
【図１７】図１１の装置に使用される、ポストストアレジスタに対する書込み制御部の構成図。
【図１８】図１１の装置で使用される、ポストストアレジスタに対する書込み／読み出し順序保証部の構成図。
【図１９】本発明の実施例３によるデータ処理装置で使用されるプリロードレジスタ群の構成図。
【図２０】上記実施例３によるデータ処理装置で使用されるプリロードリクエスト生成部の構成図。
【図２１】上記実施例３によるデータ処理装置で初期設定回路が設定するアドレス関連情報の値を示す図。
【図２２】上記実施例３によるデータ処理装置で書込みカウンタのカウントアップ動作を説明する図。
【図２３】本発明の実施例４によるデータ処理装置で使用されるプリロードリクエスト生成部の構成図。
【符号の説明】
ＬＲ…レングスレジスタ、ＤＲ…分割レジスタ、ＢＲ…ベースレジスタ、ＳＲ…ストライドレジスタ、５１６、２５１６…アドレス加算器、５２１…リクエストカウンタ、５３４…（プリロードの）書込みカウンタ、５６４…（プリロードの）読み出しカウンタ、１５３４…（ポストストアの）読み出しカウンタ、１５６４…（ポストストアの）書込みカウンタ、。
【図１】
0003598139.tif 000002
【図２】
0003598139.tif 000003
【図３】
0003598139.tif 000004
【図４】
0003598139.tif 000005
【図５】
0003598139.tif 000006
【図６】
0003598139.tif 000007
【図７】
0003598139.tif 000008
【図８】
0003598139.tif 000009
【図９】
0003598139.tif 000010
【図１０】
0003598139.tif 000011
【図１１】
0003598139.tif 000012
【図１２】
0003598139.tif 000013
【図１３】
0003598139.tif 000014
【図１４】
0003598139.tif 000015
【図１５】
0003598139.tif 000016
【図１６】
0003598139.tif 000017
【図１７】
0003598139.tif 000018
【図１８】
0003598139.tif 000019
【図１９】
0003598139.tif 000020
【図２０】
0003598139.tif 000021
【図２１】
0003598139.tif 000022
【図２２】
0003598139.tif 000023
【図２３】
0003598139.tif 000024