JP3598139B2 - データ処理装置 - Google Patents
データ処理装置 Download PDFInfo
- Publication number
- JP3598139B2 JP3598139B2 JP32799794A JP32799794A JP3598139B2 JP 3598139 B2 JP3598139 B2 JP 3598139B2 JP 32799794 A JP32799794 A JP 32799794A JP 32799794 A JP32799794 A JP 32799794A JP 3598139 B2 JP3598139 B2 JP 3598139B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- preload
- read
- buffer
- circuit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000012545 processing Methods 0.000 title claims description 49
- 230000036316 preload Effects 0.000 claims description 269
- 239000000872 buffer Substances 0.000 claims description 87
- 230000004044 response Effects 0.000 claims description 4
- 230000002401 inhibitory effect Effects 0.000 claims description 2
- 238000001514 detection method Methods 0.000 claims 2
- 238000013500 data storage Methods 0.000 claims 1
- 238000003491 array Methods 0.000 description 37
- 238000000034 method Methods 0.000 description 34
- 238000010586 diagram Methods 0.000 description 30
- 230000008569 process Effects 0.000 description 13
- 125000004122 cyclic group Chemical group 0.000 description 12
- 230000004913 activation Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 10
- 230000003252 repetitive effect Effects 0.000 description 5
- 230000005764 inhibitory process Effects 0.000 description 4
- 230000001629 suppression Effects 0.000 description 4
- 102100027674 CTD small phosphatase-like protein Human genes 0.000 description 2
- 102100027667 Carboxy-terminal domain RNA polymerase II polypeptide A small phosphatase 2 Human genes 0.000 description 2
- 101000725950 Homo sapiens CTD small phosphatase-like protein Proteins 0.000 description 2
- 101000725947 Homo sapiens Carboxy-terminal domain RNA polymerase II polypeptide A small phosphatase 2 Proteins 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 101000736367 Homo sapiens PH and SEC7 domain-containing protein 3 Proteins 0.000 description 1
- 102100036231 PH and SEC7 domain-containing protein 3 Human genes 0.000 description 1
- 101150047013 Sp110 gene Proteins 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000010187 selection method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8092—Array of vector units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Multi Processors (AREA)
- Memory System (AREA)
Description
【0001】
【産業上の利用分野】
本発明は、主記憶装置を共有し、繰返し処理を分担処理する複数のプロセッサがプリロード/ポストストアを実行可能なデータ処理装置に関し、特に複数のスカラプロセッサがFORTRANのDOループのような繰返し処理の各イタレーションを分担処理し、いわゆるマイクロタスキングを実施する場合に効率がよい、プリロード/ポストストアを実行可能なデータ処理装置に関する。
【0002】
【従来の技術】
現在多くのプロセッサは、主記憶レイテンシをキャッシュにより隠蔽している。ところが、大規模データを扱う科学技術計算などではデータの参照に局所性が少なく、キャッシュが有効に働かないケースが多い。これに対応するためプリフェッチやプリロード機構が提案されている。すなわち、プロセッサが配列データを使用するタイミングより前に、その配列データを主記憶から読み出し、プリロード用のバッファメモりに保持しておき、後にそのプロセッサが、その配列データ内のいずれかの要素を処理するときに、その要素をそのバッファから読み出す。これによりプロセッサが主記憶からこの配列データを読み出す時間がそのプロセッサには見えないようにしている。例えば、文献1:「お茶の水1号の構成と評価」、情報処理学会研究報告、計算機アーキテクチャ101−8、1993.8.20、pp.57−64参照。この文献では、複数のプロセッサを有するシステムにおいて、各プロセッサごとに配列データをプリフェッチする技術が開示されている。すなわち、各プロセッサにより指示された、プリフェッチすべき配列データのアドレス、ストライド、レングスに従って、そのプロセッサ用に設けたプリフェッチ制御部がこの配列データの複数の要素をプリフェッチし、そのプロセッサ対応に設けたプリフェッチバッファに格納する方式が示されている。
【0003】
文献2:特開平3−266174号公報「データ処理装置」では、マルチベクトルプロセッサにおけるプリロードあるいはポストロードを開示している。一般に、主記憶は多バンクにより構成されており、その場合、主記憶の連続するアドレスの記憶位置をアクセスしたときに、高速にアクセスできる。しかし、マイクロタスキングにおいては、各プロセッサは1つの配列データを飛び飛びに分割して非同期にアクセスすることが多い。このようなアクセスは連続アクセスを効率よく処理する多バンク主記憶にとって都合が悪い。この文献2の方法では、このような多バンク構成の主記憶を共有する複数のベクトルプロセッサにより分担して処理されるベクトルデータを主記憶から高速に読み出しあるいはそこに高速に書き込むのに適したプリロードあるいはポストストアを開示している。
【0004】
すなわち、ベクトルプロセッサ対応にプリロードバッファあるいはポストストアバッファを設け、これらのベクトルプロセッサに共通に設けられたバッファ制御部により、これらのベクトルプロセッサにより分割して処理されるベクトルデータをプリロードする場合、そのベクトルデータの主記憶アドレス、ストライド、レングス情報に基づいてベクトルデータの複数の要素をまとめてプリロードし、各ベクトルプロセッサによるその配列の添え字の分担範囲に従って、これらのベクトルプロセッサ対応の複数のバッファに、それらのプリロードした複数の要素を分割して格納する。各プロセッサが独立非同期に、そのベクトルプロセッサ対応のバッファを参照する。ポストストアの場合であれば、各ベクトルプロセッサが独立非同期にそのベクトルプロセッサ対応のバッファに書込むベクトル要素がある程度まとまったバッファ制御部が全ベクトルプロセッサから書込まれた複数のベクトル要素をまとめて主記憶にストアする。
【0005】
【発明が解決しようとする課題】
一般に、マルチベクトルプロセッサでは、各ベクトルプロセッサは、一つのベクトルデータの全要素を続けて処理する。したがって、文献2のごとく、ひとつのバッファにその全要素を格納した上で、それを処理する方法がとられる。しかし、複数のスカラプロセッサがFORTRANのDOループのような繰返し処理の各イタレーションを分担処理する、いわゆるマイクロタスキングを実施する場合に、ループ繰返し処理の中には複数の配列が含まれ、これらのスカラプロセッサは、しかも1つのループイタレーションごとに異なる配列を順次アクセスする。そのため例えば配列A、B、C、D、Eの各々のいずれかの添え字の要素が使用され、続いて次の添え字のデータが使用される。しかし、上記文献1には、一つの配列データの複数の要素をスカラプロセッサのためにプリロードする技術が開示されているが、複数の配列データのプリロードは記載されていない。
【0006】
したがって、本発明の目的は、このように、複数の配列を処理するループ繰返し処理を複数のスカラプロセッサにより分割して処理するのに適したプリロード回路およびポストストア回路を有するデータ処理装置を提供することである。
【0007】
【課題を解決するための手段】
上記目的を達成するために本願第1の発明では、主記憶を共有する複数のプロセッサで分担して実行される処理の中で使用される複数のデータ群を主記憶からプリロードする回路は、
それぞれ一つのプロセッサに対応して設けられた複数のバッファと、
プリロードすべき複数のデータ群を一部づつからなる部分データに分けて、かつ、異なるデータ群の部分データ群を順次読み出すように、上記複数のデータ群を主記憶から読み出し、かつ、各部分データ群の複数のデータは主記憶から並列に読み出し、読み出された部分データ群を上記複数のバッファに分散して書込むように構成されたプリロード用の回路とを有する。
【0008】
この本願第1の発明によれば、例えば、4台のプロセッサを有し、4つの配列A、B、C、Dをループ繰返し処理の中で実行するデータ処理装置にこの発明を適用した場合、配列データAの一部の要素A(1)、A(2)、A(3)、A(4)からなる、部分データ群がまず主記憶から並列に読み出され、4つのバッファに分散して書込まれる。次に、配列Bの一部の要素B(1)、B(2)、B(3)、B(4)からなる部分データ群が次に主記憶から並列に読み出され、4つのバッファに分散して書込まれる。以下同様である。したがって、各配列のいずれかの部分データ群がプリロードされた段階で、それらのプリロードされたデータを各プロセッサでの処理に供することが出来る。このため、プリロード要求がいずれかのプロセッサにより出力された後、それらの複数のデータ群のすべてのデータがプリロードされる前に、すでにプリロードされた一部のデータを各プロセッサは使用し始めることが可能になる。しかも、同一の配列の一部のデータが、主記憶から並列に読み出されるので、これらの一部のデータが主記憶の連続するアドレスに位置する場合には、主記憶が複数のバンクで構成されているときには、それらの一部のデータの読み出しを速めることが出来る。
【0009】
しかも、複数の配列の要素が各プロセッサ用のバッファに混在して保持されるので、各プロセッサ用のバッファは一つで済むことになり、プリロード回路が簡単になる。
【0010】
本願第1の発明の望ましい第1の態様では、各プロセッサ用のバッファ内の記憶領域が複数の領域から構成され、このバッファへのいずれかのプロセッサがループ処理で使用する配列の総数に合わせて、これらの記憶領域をグループに分けて使用される。これにより、配列の総数が変化したときでも、それに見合った数の記憶領域を各配列用に使用できるようになっている。
【0011】
本願第1の発明の望ましい第2の態様では、各プロセッサで処理されるべきデータが、複数ずつ主記憶から並列にプリロードされ、そのプロセッサ対応のバッファに並列に書き込まれる。これにより、主記憶からのデータプリロードの時間を短縮している。
【0012】
本願第1の発明の望ましい第3の態様では、
各バッファに書き込まれたデータの内、そのバッファに対応するプロセッサに転送されていない未読み出しデータの数を検出し、該複数のバッファの各々に対して検出された未読み出しデータ数の内の最小値を検出する回路と、
各バッファに保持可能な数のデータを各バッファに書込んだ後は、該検出された最小値が0のときに、該主記憶読み出し回路による、該複数のデータ群の後続の部分データ群の読み出しを禁止する回路と、
各バッファに保持可能な数のデータをそのバッファに書き込んだ後にさらに該主記憶から読み出された後続の部分データ群を、各バッファ内の、そのバッファに対応するプロセッサにすでに転送された読み出し済みデータを保持する記憶位置に書き込む回路とが設けられる。
【0013】
これにより、複数のバッファの容量を越える量の配列要素を主記憶から並列にプリロード可能にする。これにより、各バッファは、ループ処理で処理されるデータの総量より少ない容量でよいことになる。
【0014】
本願第2の発明では、
各プロセッサは、複数のプロセッサにより分担して実行される処理の中で生成される複数のデータ群の内、そのプロセッサが供給すべき複数のデータを、順次異なるデータ群に属するものを順次供給するように構成され、
上記複数のデータ群を主記憶にポストストアする回路は、
それぞれ一つのプロセッサに対応して設けられた複数のバッファと、
該複数のバッファに保持された複数のデータ群を、同一のデータ群に属する一部のデータに分けてそれらのバッファ内の互いに対応する一群の記憶位置から読み出し、読みだ出された一部のデータを、同一のデータ群に属する一部のデータとして主記憶に書込む回路とを有する。
【0015】
この本願第2の発明によれば、第1の発明と同様に、ポストストアすべき複数のデータ群を一部づつ複数のバッファから読み出し、主記憶に並列に書込むので、上記複数のデータ群の全てのデータが上記複数のバッファに書込まれる前に、主記憶に書込むことが出来る。しかも、同一の配列データに属する複数の要素が、主記憶に並列に読み出されるので、これらの一部のデータが主記憶の連続するアドレスに書込まれる場合には、本願第1の発明と同様の理由によって、それらの一部のデータの書込みを速めることが出来る。
【0016】
本願第3の発明では、本願第1の発明の上記第3の態様が、ループ処理等により少なくとも一つの配列に属する複数のデータを異なるプロセッサ用のバッファにプリロードする場合に適用される。
【0017】
【実施例】
以下、本発明に係るデータ処理装置を図面に示したいくつかの実施例を参照してさらに詳細に説明する。なお、以下においては、同じ参照番号は同じものもしくは類似のものを表わすものとする。
【0018】
<実施例1>
(装置の概要)
図1において、1はマルチバンク構成の主記憶、3−0〜3は、主記憶1を共有するプロセッサで、図2に例示するFORTRANのDOループを分担して処理する。2は、主記憶1とプロセッサ3−0〜3の間に設けられ、プリロードを実行するプリロード部である。プリロード部2はプリロード動作を制御するプリロード制御部5とプリロードしたデータを保持するプリロード用のバッファとして使用されるプリロードレジスタ群4を有する。プリロードレジスタ群4は、各々プロセッサ3−0〜3に対応するプリロードレジスタ群4−0〜3からなる。
【0019】
各プリロードレジスタ群4−0〜3には各々32本のプリロードレジスタがあるが、後述するように実施例1では実行されるプログラムが4本のプリロードレジスタしか使用しないため簡単のために4本のプリロードレジスタしか示していない。
【0020】
図4に示すように各プリロードレジスタ群4−0〜3は4本のプリロードレジスタ400ー0〜3、401ー0〜3、402ー0〜3、あるいは403ー0〜3と、主記憶1からプリロードしたデータを書き込むべきプリロードレジスタを選択するセレクタ410、411、412または413と、各プリロードレジスタ群から、プリロードされたデータを読み出すべきプリロードレジスタを選択するセレクタ440、441、442あるいは443からなる。
【0021】
各プリロードレジスタ内の4つのプリロードレジスタには、その群ごとに決めるレジスタ番号が割り当てられる。以下では、プリロードレジスタ群4−0内の、プリロードレジスタ400−0、401−0、402−0、403−0をそれぞれプリロードレジスタPR0、PR1、PR2、PR3と呼ぶ。他のプリロードレジスタ群400−1内の4つのプリロードレジスタも同様である。
【0022】
プリロード制御部5内には、プリロードリクエスト部500、書込み制御部530、データ保証制御部540、読み出し制御部560がある。
【0023】
図5に示すように、プリロードリクエスト部500内には、プロセッサ3−0〜3の各々に対応する4つのプリロードリクエスタ503−0〜3がある。以下、これらをプリロードリクエスタ0〜3と呼ぶことがある。これらのプリロードリクエスタは、それぞれプリロードレジスタ群440、441、442、443にも対応しており、これらのプリロードリクエスタは、主記憶1から対応するプリロード群に格納すべき4つのデータを並列に読み出す。
【0024】
レングスレジスタLR、分割レジスタDR、4本のベースレジスタBR0〜3、4本のストライドレジスタSR0〜3は、4つのプロセッサ3−0〜3のいずれか一つから供給される、プリロードすべき配列データを指定するプリロード情報を保持するレジスタ群であり、これらのプリロードリクエスタ503−0〜3は、これらのレジスタに保持されたプリロード情報にしたがって、複数の配列データに属する複数のデータのアドレスを順次生成するようになっている。本実施例では、このレジスタSRiとBRiの組により指定される配列データが第i番目に読み出されるように、配列データの読み出しの順番が定められている。
【0025】
本実施例では、これらのプリロードリクエスタ403−0〜3は、同一の配列データを、4つのデータに分けて主記憶1から順次読み出すとともに、いずれかの配列データの4つのデータを読み出した後は、次の配列データの4つのデータを読み出すように、順次異なる配列データに属する4つのデータの群を順次読み出すようになっているところに特徴がある。
【0026】
図4において、書込み制御部530は、上記4つのプリロードリクエスタ0〜3により並列に4つのデータが読み出される毎に、読み出された4つのデータを、4つのプリロードレジスタ群4−0〜4−3内の互いに同じレジスタ番号のプリロードレジスタに分散して記憶する。さらに、その後プリロードリクエスタにより主記憶から後続の4つのデータが読み出されたとき、それらの後続の4つのデータを、4つのプリロードレジスタ群4−0から4−3内の次の番号のプリロードレジスタに分散して記憶するように構成されている。
【0027】
こうして、本実施例では、各プリロードレジスタ群には、順次異なる配列データに属するデータが順次異なる番号のプリロードレジスタに格納され、かつ、同一のプリロードレジスタには、同一の配列に属する複数のデータが書き込まれるようになっている。
【0028】
図4において、読み出し制御部560は、各プロセッサから供給される複数のロードリクエストに応答して、そのプロセッサに対応するプリロードレジスタ群にすでにプリロードされた複数のデータを、それらのデータがプリロードされた順に読み出し、そのプロセッサに供給するようになっている。このために、読み出し制御部560は、本実施例では、そのプリロードレジスタ群内の、順次異なる番号のプリロードレジスタから順次データを読み出すようになっている。
【0029】
なお、図4において、データ保証制御部540は、プリロードレジスタへのデータ書込みをロードリクエストによる読み出しが追い越さないように、読み出し制御部560を制御し、また、まだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、プリロードリクエスト部500を制御する回路である。
【0030】
以下、本実施例の詳細を説明する。
【0031】
(プリロード情報のセットアップ)
各プロセッサは、図2に示すDOループの場合、4つの配列AからDのぞれぞれの異なる要素を分担して処理する。各配列のいずれの要素を各プロセッサに割り当てる態様を示す添え字分担態様としては、添え字分担態様には、Cyclic分割やBlock分割などすでに知られている複数の方法のいずれかを用いる。ここでは、いわゆるCyclic分割が指定された場合を取り上げる。なお、Block分割時の動作に関しても適宜述べる。図2のプログラムの場合、Cyclic分割では、プロセッサ3−0が添え字I=1、5、9、、、を、プロセッサ3−1がI=2、6、10、、、を、プロセッサ3−2がI=3、7、11、、、、を、プロセッサ3−3がI=4、8、12、、、、を分担する。
【0032】
いずれかのプロセッサは信号線300ー0〜3、オア回路301、信号線302を介してプリロード制御部5に、DOループ内の全ての配列A、B、C、Dの先頭アドレスとストライド、ループ長Nおよびプロセッサの添え字分担態様を示すプリロード情報をセットアップする。
【0033】
図3は図2のDOループを実行するための機械語命令列のイメージである。
【0034】
(a)は、このDOループ処理を本実施例で実行するためのプリロード情報をプリロード部2にセットアップするための機械語命令列を示す。この機械語命令列はセットアップの対象とするレジスタを各命令が指定する。(1)の命令により、何本のプリロードレジスタを使用するかをプリロード制御部5に通知する。(2)、(3)の命令により、プリロード制御部2中にある、レングスレジスタLRに全プロセッサのアクセスをまとめた場合の総ループ長を、分割レジスタDRにプロセッサの添え字分担態様をセットすることを指示する。さらに(4)〜(11)の命令により、ベースレジスタBR0〜3にそれぞれ配列A、B、C、Dの先頭アドレスを、ストライドレジスタSR0〜3に全プロセッサのアクセスをまとめた場合の配列A、B、C、Dへのアクセスストライドをセットすることを指示する。この命令列により、BR0には配列要素A(1)のアドレスが、BR1には配列要素B(2)のアドレスが、BR2には配列要素C(2)のアドレスが、BR3には配列要素D(1)のアドレスがセットされる。また配列A、B、C、Dの各要素が8バイトとすると、SR0にはストライド8バイトが、SR1にはストライド16バイトが、SR2にはストライド8バイトが、SR3にはストライド8バイトがセットされる。
【0035】
本実施例では、後に説明するように、このレジスタSRi(i=0,1,2または3)とBRiの組により指定される配列データに属するデータが第i番目に読み出されるように、プリロードされる配列の順番が定められている。したがって、今の例では、上記のプログラムは、配列A、B、C、Dの順に、それらの配列に属する一部のデータが主記憶からプリロードされることを要求したことになる。
【0036】
(アドレス計算とプリロード)
セットアップが行なわれると、プリロード部2は、自動的に配列A、B、C、Dのプリロードを開始する。この場合、以下に説明する方法で、プリロードレジスタ群4−0〜3内のPR(プリロードレジスタ)0に配列A(I)、PR1に配列B(I*2)、PR2に配列C(I+1)、PR3に配列D(I)の各要素がCyclic分割に従って分割されてプリロードされる。すなわち、例えばPR0に関しては、プリロードレジスタ群4−0内のPR0にA(I)[I=1、5、9、、、、]が、プリロードレジスタ群4−1内のPR0にA(I)[I=2、6、10、、、、]が、プリロードレジスタ群4−2内のPR0にA(I)[I=3、7、11、、、、]が、プリロードレジスタ群4−3内のPR0にA(I)[I=4、8、12、、、、]がプリロードされる。
【0037】
さて、プロセッサ3−0〜3のいずれかから送出されるプリロード情報がレジスタLR、DR、SR0〜3、BR0〜3に設定されると、プリロードリクエスト部500はこれらのプリロード情報に基づきアドレスA0〜3を生成して一括してこれらを主記憶1に送出してプリロードを要求する。このために、これらの情報はプリロードリクエスタ503−0〜3に取り込まれ、各プロセッサに対応したアドレスを計算するのに使用される。
【0038】
すなわち、LR、DR、SR0〜3、BR0〜3に情報が設定されると、プリロードリクエスト部500は、データ保証制御部540からの抑止信号541が入力されるか、もしくはループ長分の処理を完了するかしない限り、毎サイクルアドレスA0〜3を含むプリロードリクエストを主記憶1に送出する。
【0039】
プリロード制御回路518はこのプリロードリクエストの送出を制御するための回路であり、リクエストカウンタ(RQ)521は、プリロード部2により発行されたプリロードリクエストの総数を計数するカウンタである。プリロード制御回路518は、信号線541からリクエスト発行抑止の信号が入力されていなく、かつ、リクエストカウンタ521が示すプリロードリクエスト送出数が、信号線517を介して得たレングスレジスタLRの値*総配列数(この場合は4)/プロセッサ台数(この場合は4)を超えない限り、プリロード起動信号519をプリロードリクエスタ503−0〜3に送出する。併せて線520を介してリクエストカウンタ521をカウントアップする。このリクエストカウンタの値は、プリロードリクエスタ503−0〜3においていずれの配列に対するアドレスを生成するかを指示するの使用される。さらに信号線542を介し、リクエストカウンタ521が各サイクルでカウントアップされたかの情報がデータ保証制御部540に送出される。
【0040】
プリロードリクエスタ503−0〜3はプリロード起動信号519の値が有効なサイクルのみアドレスA0〜3を生成する。アドレスの計算は以下のように行なわれる。なお、プリロードリクエスタ503−0〜3の動作はほとんど同じため、以下ではプリロードリクエスタ503−0を例に取り説明する。
【0041】
プリロードリクエスタ503−0内には、ワークベースレジスタ508−0〜3、ワークストライドレジスタ512−0〜3、およびアドレス加算器516があり、これらを用いて毎サイクル、プリロードレジスタ群4−0にプリロードすべきデータのアドレスが計算される。
【0042】
すなわち、ワークベースレジスタ508−0およびワークストライドレジスタ512−0はストライドレジスタSR0とベースレジスタBR0との組に保持されたプリロード情報が指定する配列、今の例では配列A(I)、の添え字I=1、5、9、、、、の要素のアドレスを計算するのに使用される。
【0043】
同様に、ワークベースレジスタ508−1およびワークストライドレジスタ512−1はストライドレジスタSR1とベースレジスタBR1との組に保持されたプリロード情報が指定する配列、今の例では配列B(I)、のために使用され、ワークベースレジスタ508−2およびワークストライドレジスタ512−2はストライドレジスタSR2とベースレジスタBR2に保持されたプリロード情報が指定する配列、今の例では配列C(I)、のために使用され、ワークベースレジスタ508−3およびワークストライドレジスタ512−3はストライドレジスタSR3とベースレジスタBR3との組に保持されたプリロード情報が指定する配列、今の例では配列D(I)、のために使用される。
【0044】
プリロードリクエスタ0内にはさらに初期設定回路504−0〜3があり、プロセッサ3−0に対応した要素アドレスを計算できるよう、ワークベースレジスタ508−0〜3およびワークストライドレジスタ512−0〜3を初期設定する。
【0045】
まず初期設定回路504−0〜3は信号線517、523、501−0〜3、502−0〜3を介してLR、DR、SR0〜3、BR0〜3の値を受け取る。そしてDRの値、すなわち指定されている添え字分割態様に従い、各プロセッサが最初にアクセスすべき配列要素のアドレスを計算し、信号線505−0〜3を介してワークベースレジスタ508−0〜3に設定する。また初期設定回路504−0〜3は、指定されている添え字分割態様に従って各プロセッサのアクセスストライドを計算し、信号線522−0〜3を介してワークストライドレジスタ512−0〜3に設定する。
【0046】
信号線505−0〜3および信号線522−0〜3に出力される値は指定された添え字分割がCyclicもしくはBlockのとき、各々図9に示すように計算される。図9の値を簡単に説明する。Cyclic分割の場合、ループ添え字が1つ変化するごとに異なるプロセッサでその配列要素を処理するのであるから、各プロセッサが最初に処理すべき配列のアドレスは、BRで示された値からSRで示された値ずつずれたアドレス、すなわちBR、BR+SR、BR+SRx2、BR+SRx3となる。各プロセッサのアクセスストライドは、プロセッサ数が4なのでSRx4となる。一方Block分割の場合、LRで示された全ループ長をプロセッサ台数4で除した配列要素を各プロセッサは処理するのであるから、各プロセッサが最初に処理すべき配列のアドレスは、BRで示された値からSRxLR/4で示された値ずつずれたアドレス、すなわちBR、BR+SRxLR/4、BR+SRxLR/4x2、BR+SRxLR/4x3となる。各プロセッサのアクセスストライドはもともとのストライドSRとなる。
【0047】
さて初期設定の後は、信号線519によりプリロード起動信号がプリロード制御回路518から与えられるたびに、アドレス加算器516はセレクタ510、信号線511を介して得られるワークベースレジスタ内のアドレスと、セレクタ514、信号線515を介して得られるワークストライドレジスタ内のストライドを加算して、プリロードリクエストアドレスA0として主記憶1に送出する。セレクタ510と514は、順次異なる配列に対する、ワークベースレジスタとワークストライドレジスタを選択するように、リクエストカウンタ521の値により信号線522を介して制御される。その方法は後に説明する。加算結果はセレクタ506およびそれにより選ばれた信号線507−0〜3の一つを介して、アドレス計算に使用した元のワークベースレジスタ5080−0〜3のいずれか一つにも書き込まれる。セレクタ506の制御もリクエストカウンタ521から線522により与えられるプリロードリクエスト総数に基づいて行なわれる。
【0048】
リクエストカウンタ521によるセレクタ510、514、506の制御は以下のようにする必要がある。すなわち前のサイクルで配列Aの要素に対応するワークベースレジスタ508−0、ワークストライドレジスタ512−0を選択していた場合に、次のサイクルでリクエストカウンタ521が一つカウントアップされたときは、配列Bの要素に対応するワークベースレジスタ508−1、ワークストライドレジスタ512−1を選択するようにする。以下同様に順次配列C、Dに対するワークベースレジスタとワークストライドレジスタを選択する。また前のサイクルで配列Dの要素に対応するワークベースレジスタ508−3、ワークストライドレジスタ512−3を選択していた場合にリクエストカウンタ521が一つカウントアップされると、配列Aの要素に対応するワークベースレジスタ508−0、ワークストライドレジスタ512−0を選択するようにする。
【0049】
このためにはリクエストカウンタ521の下位ビットのパターンでワークベースレジスタおよびワークストライドレジスタを指定すればよい。この場合であれば下2ビットが’00’の時ワークベースレジスタ508−0、ワークストライドレジスタ512−0を指定し、’01’の時ワークベースレジスタ508−1、ワークストライドレジスタ512−1を、’10’の時ワークベースレジスタ508−2、ワークストライドレジスタ512−2を、’11’の時ワークベースレジスタ508−3、ワークストライドレジスタ512−3を指定する。
【0050】
以上から分かるように、プリロードリクエスタ503−0は、配列A、B、C、Dの順にしたがって、プロセッサ3−0により使用されるデータを順にプリロードするためのアドレスを生成する。他のプリロードリクエスタ503−1〜3も同様である。
【0051】
以上から分かるように、ワークベースレジスタ508−i(i=0、1、2または3)とワークストライドレジスタ512−iの組は、アドレス加算器516、セレクタ510、514、507、と組合わせて、配列A、B、C、Dの内、i番目の配列に属し、プロセッサ3−0が使用する複数のデータのアドレスを順次生成するアドレス生成回路を形成している。こうして、本実施例では、プロセッサ3−0が使用する配列A(1)、B(2)、C(2)D(1)、A(2)、B(3)、C(3)、D(2)、、、がこのプリロードリクエスタ503−0によりこれらのデータの順に主記憶1から順次プリロードされる。他のプリロードリクエスタについても同様である。
【0052】
プリロードリクエスタ503−0〜3は信号線519から与えられるプリロード起動信号により同期して動作する。この結果、配列データAの一部のデータA(1)、A(2)、A(3)、A(4)からなる配列データAの最初の部分データ群がこれらのプリロードリクエスタ503−0〜3により並列に主記憶1からプリロードされ、続いて、B(2)、B(4)、B(6)、B(8)からなる配列データBの最初の部分データ群、さらに続いて配列データの一部のデータC(2)、C(4)、C(6)、C(8)からなる配列データCの最初の部分データ群、さらに続いて、配列データDの一部のデータD(1)、D(2)、D(3)、D(4)からなる配列データCの最初の部分データ群、配列データAの一部のデータA(5)、A(6)、A(7)、A(8)からなる配列Aの2番目の部分データ群がこれらのプリロードリクエスタ503−0が順次主記憶1からプリロードされる。これらの配列の他のデータも同様に読み出される。
【0053】
以上の動作により、プリロードリクエスト部500は、抑止信号541が入力されない限り、全配列の同一添え字に関してまんべんなく、主記憶1へのプリロード要求を出すことができる。さらにCyclic分割の場合、アドレスA0〜3は連続していることが多いため、主記憶1に対し、連続アクセス要求をまとめて出すことができる。
【0054】
(プリロードレジスタ群へのプリロードデータの書き込み)
主記憶1は供給されたアドレスA0〜3の位置にあるデータを一括して読み出し、信号線PD0〜3に出力するとともに、信号線PD0〜3の値が有効なことを示すバリッド信号を信号線535に出力する。ここで主記憶1は、アドレスA0〜3を含むプリロードリクエストの順にデータおよびバリッド信号を信号線PD0〜3および信号線535を介してプリロードレジスタ群4に転送するものとする。これは、主記憶1内にバッファを設け、プリロードリクエストを受け入れた順序を覚えておいてバッファ上で並べ替えを行なうなどの公知の技術により実現できる。
【0055】
書込み制御部530は有効信号535を受けて、データPD0〜3のプリロードレジスタ群4への書込みを実行する。主記憶1から読み出されたデータの各々は、セレクタ410、411、412、413により選ばれた信号線420−0〜3、421−0〜3、422−0〜3、423−0〜3のいずれかを介してプリロードレジスタ400−0〜3、401−0〜3、402−0〜3、403−0〜3の内、同じレジスタ番号を有する4つのプリロードレジスタに、同時に書込まれる。
【0056】
図6は書込み制御部530の構成図である。書込み制御部530は、主記憶1から送出される読み出しデータと同期して送出される有効信号535を受け、読み出しデータをプリロードレジスタ群4の然るべき位置に書込むようセレクタ410、411、412、413を制御する制御信号531を生成する。具体的には、制御回路532は信号線302を介してプリロードレジスタが何本使用されるかの情報を受取り、予め、書込みカウンタ534のカウントアップ方法を決定しておく(後述)。その後制御回路532は、信号線535を入力するたびに信号線533を介して書込みカウンタ534をカウントアップし、その値が信号線531に出力される。
【0057】
信号線531によるプリロードレジスタ群4−0〜3の書込み位置の指定は以下のようにする必要がある。すなわち、前のサイクルで配列Aのある要素位置に書込みを行なった場合に書込みカウンタ534が一つカウントアップされると、配列Bの同一の要素位置に書込みが行なわれるようにする。前のサイクルで配列Dの同一の要素位置への書込みを行なった場合に書込みカウンタ534が一つカウントアップされると、配列Aの次の要素位置に書込みが行なわれるようにする。プリロードレジスタ群4−0〜3の要素方向の容量は有限なため、書込みカウンタ534の値がプリロードレジスタ群4−0〜3の要素方向の容量に等しくなったら、書込みカウンタ534の値は0にラップアラウンドするようにする。そのためには、図10に示すように書込みカウンタW534を操作する。
【0058】
図10は、制御回路532および2進表現で表した書込みカウンタW534を示している。ここで各PRの要素方向の容量は64要素としている。すなわち書込みカウンタWの下位5ビットで32本のPR番号を、上位6ビットで要素番号を表現する。制御回路532は信号線302を介し記憶回路5320にプリロードレジスタが4本しか使われないことを記憶しておき、以下のように書込みカウンタW534を制御する。
【0059】
基本的には制御回路532は信号線535によりプリロードレジスタ群4−0〜3への書込みを指示されるたびに加算回路5321を介して書込みカウンタW534の最下位ビットを1ずつカウントアップする。下位5ビットはPR番号として信号線531−1に出力される。制御回路532はプリロードレジスタが4本しか使用されないことを記憶しているので、カウントアップ時に下から3ビット目への桁上がりが生じるかどうかを比較回路5322により監視し、生じた場合はそれを上位6ビットに桁あげするようにセレクタ5324および加算回路の出力5328の上位6ビットへの設定を制御する。上位6ビットは要素番号として信号線531−0に出力される。これにより、PR0、PR1、PR2、PR3と書込まれた後は、PR0の次の位置に書込みを行なうことができる。また最上位ビットからの桁あふれが生じるときは書込みカウンタ534の値を0にラップアラウンドさせる。これにより4本のPRの全要素位置に書込みが行なわれた後は、PR0の最小要素位置からふたたび書込みをおこなうことができる。
【0060】
以上のように制御することにより、各プリロードレジスタ群4−0、4−1、4−2、4−3の書込み位置の選択は全て信号線531の値により制御され、プリロードレジスタ群4には同時に発行されたプリロードリクエストにより読み出された4つの配列要素が同期して同じ要素位置に書込まれる。
【0061】
こうして、主記憶から並列にプリロードされた4つのデータが、4つのプリロードレジスタ群の分散して、かつ、順次異なる記憶位置に書き込まれる。すなわち図4に例示するように、プリロードレジスタ群4−0、4ー1、4ー2、4−3には、まず同時並列的にPR0(すなわち400ー0、401ー0、402ー0、403ー0)にデータA(1)、A(2)、A(3)、A(4)が書込まれ、続いて同時並列的にPR1(すなわち400ー1、401ー1、402ー1、403ー1)にデータB(2)、B(4)、B(6)、B(8)が書き込まれる。以下PR2にC(2)、C(3)、C(4)、C(5)、PR3にD(1)、D(2)、D(3)、D(4)が書込まれ、再びPR0にA(5)、A(6)、A(7)、A(8)が書込まれる。さらにPR0、PR1、PR2、PR3の全要素位置にデータが書込まれると、再びPR0の最初の要素位置(図4にA(1)が記されている要素位置)にデータが上書きされる。最初の要素位置への上書きは、上書きされるデータがプロセッサに読み出されるのを待ってから行なわれる。この制御に関しては後述する。
【0062】
なお、書込みカウンタ534の値は、そのサイクルでカウントアップされたかの情報が信号線544に出力され、データ保証回路540によるデータ書込み/読み出しの順序性保証にも使用される。
【0063】
(プロセッサによるプリロードデータの読み出し)
各プロセッサは、プリロードされたデータのうち、そのプロセッサに対応するプリロードレジスタ群に保持された複数のデータを、それらのデータがプリロードされた順に使用するようにプログラムされている。
【0064】
たとえば、図3の(b)に、図2のループ処理を実行するための各プロセッサで実行される機械語命令列の一例を示す。この命令列は、プロセッサ3−0〜3の各々で独立に実行される。この命令列では、プリロードレジスタ群を指定する複数のロード(LD)命令を含む。本実施例では、後に説明するように、これらの命令が実行されたとき、プリロード部2は、その命令列を実行するプロセッサ、たとえば、3−0に対応するプリロードレジスタ群、たとえば、4−0にプリロードされた複数のデータをそれらの命令が実行される順番にしたがって順次読み出すようになっている。
【0065】
図3の(b)のプログラムでは、プリロードレジスタ群PRを指定する最初のLD(ロード)命令である(1)の命令が実行されると、そのプロセッサに対応するプリロードレジスタ群内のPR0内のの0番目の要素が読み出され、この命令は、このデータをそのプロセッサ内の汎用レジスタGR0にロードすることを要求することになる。すなわち例えばプロセッサ3−0では配列要素A(1)がロードされる。以下同様に(2)、(3)の命令を実行すると、GR1に配列要素B(2)を、GR2に配列要素C(2)を、GR5に配列要素D(1)をロードすることになる。このループは、(1)〜(8)の命令による処理をループ長N/4回繰り返す。勿論、この繰返し時には、プリロードを要求する命令が再度実行されたときには、後続のプリロード済みのデータを読み出すことになる。
【0066】
今の例では、プリロードレジスタ群4−0からはデータA(1)、B(2)、C(2)、D(1)、A(5)、、、がこの順に読み出される。したがって、この機械語命令列は、各プロセッサに対応するプリロードレジスタ群にプリロードされた複数のデータを、それらのデータがプリロードされた順に使用するようにプログラムされていなければならない。
【0067】
さて、いずれかのプロセッサ3−i(i=0、1、2または3)で、プリロードレジスタ群を指定するロード命令を実行したとき、そのプロセッサは、ロードリクエストRQiをプリロード部2の読み出し制御部560に供給するようになっている。
【0068】
図7は読み出し制御部560の構成図である。読み出し制御部560は、独立非同期に動作するプロセッサ3−0〜3から独立非同期に送出されるロードリクエストRQ0〜3を受けて、必要なデータが既にプリロードレジスタ群4に書込まれていればそれを信号線561−0〜3に出力し、書込まれていなければそれを抑止する。必要なデータが既にプリロードレジスタ群4に書込まれているかどうかは、後に説明する方法でデータ保証制御部540から信号線545−0〜3により通知される。
【0069】
プロセッサ3−iからロードリクエストRQiが送出されると、読み出し制御部560は、信号線561−iを介してプリロードレジスタ群4−iの読み出しを制御する。その際、プリロードレジスタ400−i内のデータが、それらのプリロード順に信号線430−0〜3、431−0〜3、432−0〜3、433−0〜3とセレクタ440、441、442、443を介して読み出されて信号線Diを介してプロセッサ3−iに送出される。
【0070】
どのプリロードレジスタの何番目の要素位置からデータを読み出すべきかの管理にプロセッサ対応のリードカウンタR0、R1、R2、R3が用いられる。プロセッサ3−0〜3の動作は独立であり、プリロードレジスタからの読み出しも独立に行なわれるため、各々のプロセッサが読み出すデータのプリロードレジスタ番号、要素番号は独立である。
【0071】
制御回路562−0〜3は、信号線545−0〜3の値が書込み済みを示し、かつ信号RQ0〜3が送出された時のみ、信号線563−0〜3を介して読み出しカウンタ(R0〜3)564−0〜3をカウントアップし、信号線561−0〜3を介してプリロードレジスタ群4−0〜3の読み出しを行なう。読み出しカウンタR0〜3によるプリロードレジスタ群4−0〜3の読み出し要素位置の指定方法および読み出しカウンタR0〜3のカウントアップ制御方法は、書込みカウンタ534と同じである。すなわち、制御回路562−0〜3は、予め信号線302を介して何本のプリロードレジスタが使用されるかの情報を得、読み出しカウンタR0〜3の下位5ビットが4本のPR番号、上位6ビットが要素番号を示すようにカウントアップを行なう。各プロセッサからのロードリクエストは信号線RQ0〜3の送出とは独立に行なわれるため、読み出しカウンタR0、R1、R2、R3の値は独立にカウントアップされ、プリロードレジスタ群4−0、4ー1、4−2、4−3の読み出し位置は異なっていることがある。
【0072】
また、各読み出しカウンタR0、R1、R2、R3、がそのサイクルでカウントアップされたかの情報は、信号線546−0〜3を介してデータ保証制御部540にも出力される。
【0073】
(データ保証制御部)
図8はデータ保証制御部540の構成図である。信号線542は、リクエストカウンタRQ521がカウントアップされたかを示す。すなわち本信号は、プリロードリクエストA0〜3が主記憶1に送出されたかを意味する。信号線546−0〜3は、読み出しカウンタR0〜3(564−0〜3)の各々がカウントアップされたかを示す。すなわち本信号は、プロセッサ3−0〜3が各々プリロードレジスタ群4からデータを読み出したかを意味する。信号線544は、書込みカウンタW534がカウントアップされたかを示す。すなわち本信号は、主記憶1からプリロードレジスタ群4にデータが書込まれたかを意味する。一方出力信号である信号541は、プリロードリクエスト部500にプリロードリクエスト送出の抑止を指示する。また出力信号545−0〜3は、読み出し制御部560に対して出力され、読み出したいデータがプリロードレジスタ群4に書込み済みかをプロセッサ対応に示す。
【0074】
プリロードリクエスト送出を抑止すべきかの決定は以下のように行なう。
【0075】
プリロードレジスタ上にまだ読み出されていないデータがある場合、プリロードレジスタの再利用のために、新たなデータを上書きしてしまうようなプリロードリクエストの送出は防がなければならない。そのために、リクエストカウンタRQ521の値が、各読み出しカウンタR0〜3の値のいずれかに等しくなりそうな時に、プリロードリクエスト送出抑止信号541を送出する。
【0076】
生成回路550は、信号線542の値をもとに、RQ521の値の写しを生成する。生成回路551−0〜3は、信号線546−0〜3の値をもとに、各々R0〜3の値の写しを生成する。なお、信号線542および546−0〜3を使用してRQ521およびR0〜3の値を直接受け取ってもよい。比較回路553−0〜3は、各々信号線556、557−0〜3を介して受け取ったR0〜3の値の写しからRQ521の値の写しを減じ、その値が1以下のとき信号線559−0〜3に1を出力する。OR回路555は、信号線559−0〜3のいずれかが1の時信号線541に1を出力する。上記により、次のサイクルでプリロードリクエストを出力してRQ521の値が1加算されてしまうと、RQ521の値がR0〜3の値のいずれかに等しくなってしまうタイミングで、プリロードリクエスト送出抑止信号541が送出される。
【0077】
一方、読み出したいデータが書込み済みかは、各読み出しカウンタR0〜3の値が書込みカウンタW534の値より小さいかどうかにより、プロセッサ対応に決定する。
【0078】
生成回路552は、信号線544の値をもとに、Wの値の写しを生成する。もちろん信号線544を使用してWの値を直接受け取ってもよい。比較回路554−0〜3は、各々信号線558、557−0〜3を介して受け取ったWの値の写しからR0〜3の値の写しを減じ、その値が2以上のとき信号線545−0〜3に1を出力する。上記値が2以上であれば、次のサイクルで読み出しを行なっても、データは既にプリロードレジスタ群に書込み済みである。
【0079】
上記により、データ保証制御部540は、まだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、またプリロードレジスタへのデータ書込みを読み出しが追い越さないように、プリロードリクエスト部500、書込み制御部530、読み出し制御部560を制御することができる。
【0080】
以上述べてきたように、プリロードリクエスト送出、プリロードデータ書込みおよび読み出しを制御することにより、主記憶へのアクセスは一括して行ない(メモリアクセスが連続アドレスになることが多いため効率がよい)、一方で各プロセッサの動作は独立で実施(プロセッサの稼働率が向上する)することができる。
【0081】
<実施例2>
本実施例は、主記憶を共有する複数のスカラプロセッサにより主記憶にストアすべき複数のデータを一時的に各プロセッサ対応に設けたバッファに保存し、後に、それらのバッファに保持されたストアすべき複数のデータをまとめて主記憶にポストストアするデータ処理装置を示す。
【0082】
(装置の概要)
図11において、プロセッサ3−0〜3は図12に示すFORTRANのDOループを分担処理する。主記憶1とプロセッサ群3−0〜3の間にポストストアを実行するポストストア部12がある。ポストストア部12はポストストア動作を制御するポストストア制御部15とポストストアするデータを保持するポストストアレジスタ群14に大別されている。ポストストアレジスタ群14は、各々プロセッサ3−0〜3に対応するポストストアレジスタ群14−0〜3に分割されている。
【0083】
本実施例の構造と動作は、実施例1のプリロードがポストストアに変更されている点で実施例1の装置の構造と動作とは異なるが、複数の配列のデータをまとめて処理する点では類似の点がある。したがって、以下では、主として相違する部分を簡単に説明する。
【0084】
DOループの分担実行に先立ち、プロセッサ3−0〜3のいずれかのプロセッサは信号線300ー0〜3、オア回路301、信号線302を介してポストストア制御部15に、DOループ内の全ての配列A、B、C、Dの先頭アドレスとストライド、ループ長Nおよびプロセッサの添え字分担態様を含むポストストア情報を指示する。ここでは添え字分担態様としてCyclic分割が指定された場合を主に説明する。
【0085】
続いてプロセッサ3−0〜3は各々独立にループ処理を実行し、その実行途中で、主記憶1にストアすべきデータが得られたとき、ストアリクエストSRQ0〜3をポストストア制御部15に送出するとともに、ストアデータSD0〜3を各プロセッサ対応のポストストアレジスタ群14−0〜3に送出する。ポストストア制御部15は、信号線1561によりストアデータのポストストアレジスタ群14−0〜3への書込みを制御する。またポストストア制御部15は、ポストストアレジスタ群14−0〜3にデータがある程度たまったら、あらかじめ指示されたポストストア情報に基づきプロセッサ3−0〜3の各々がストアすべき配列要素のアドレスA0〜3を計算して、一括して主記憶1に出力するとともに、信号線1531の制御によりポストストアデータPSD0〜3をポストストアレジスタ群14−0〜3から読み出して主記憶1に送出する。
【0086】
図13は図12のDOループを実行する機械語命令列イメージである。
【0087】
(a)のセットアップ処理はプリロード時と同じである。ただしSR0〜3、BR0〜3は各々対応する番号のポストストアレジスタ(PSR)に関するアドレス情報を示す。
【0088】
(b)のループ処理は、プロセッサ3−0〜3の各々が独立に実行する。各々のプロセッサ中にあるGR10にはあらかじめ0がセットされている。(1)のST(ストア)命令にてポストストアレジスタ群PSRを指定すると、汎用レジスタGR0の内容が、そのプロセッサに対応するポストストアレジスタ群内のポストレジスタPSR0の最少の要素位置から格納される。引き続く(2)〜(4)のST命令で、汎用レジスタGR1、GR2、GR3の内容が、そのプロセッサに対応するポストストアレジスタ群内のPSR1PSR2、PSR3内の最小の要素位置から格納される。以上をループ長N/4回繰り返す。
【0089】
本実施例では、各プロセッサは、ループ処理に表れる複数の配列データを主記憶に格納するとき、一つの配列データの複数の要素を続けてストアするのではなく、順次異なる配列データに属する複数の要素を順次ストアするようになっている。したがって、図13の各ストア命令は、本実施例では、順に配列データA、B、C、Dの順にストアを要求するようになっている。これによりポストストアレジスタ群14−0〜3内には、配列A(I)、配列B(I*2)、配列C(I+1)、配列D(I)の要素がCyclic分割にしたがって分割されて順次格納されることになる。ポストストアレジスタ群14−0〜3に格納された配列A、B、C、Dは、ポストストア部15により自動的に主記憶1に格納される。
【0090】
以上の動作を正しく行なうためのポストストア部の動作を以下詳細に説明する。図14はポストストア部12の構成図である。
【0091】
ポストストアレジスタ群14内にはポストストアレジスタ群14−0〜3があり、各々の中にポストストアレジスタ(PSR)0〜31がある。図では簡単のためポストストアレジスタは4本しか示していない。1400−0、1401−0、1402−0、1403−0が各々ポストストアレジスタ群14−0、1、2、3内のPSR0であり、1400−1、1401−1、1402−1、1403−1が各々ポストストアレジスタ群14−0、1、2、3内のPSR1であり、1400−2、1401−2、1402−2、1403−2が各々ポストストアレジスタ群14−0、1、2、3内のPSR2であり、1400−3、1401−3、1402−3、1403−3が各々ポストストアレジスタ群14−0、1、2、3内のPSR3である。
【0092】
ポストストア制御部15内には、ポストストアリクエスト部1500、読み出し制御部1530、データ保証制御部1540、書込み制御部1560がある。
【0093】
各プロセッサ3−0〜3からストアリクエストが信号線SRQ0〜3を介して送出されると、書込み制御部1560は、信号線1561−0〜3、セレクタ1440、1441、1442、1443を介してポストストアレジスタ群14へのデータSD0〜3の書込みを制御する。どのポストストアレジスタの何番目の要素位置にデータを書込むべきかの管理にプロセッサ対応の書込みカウンタW0、W1、W2、W3が用いられる。プロセッサ3−0〜3の動作は独立であり、ポストストアレジスタへの書込みも独立に行なわれるため、各々のプロセッサが書込むデータのポストストアレジスタ番号、要素番号は独立である。各ポストストアレジスタ内には、配列の各要素がCyclicに格納される。
【0094】
読み出し制御部1530はポストストアレジスタ群4からデータPSD0〜3の読み出しを、信号線1531、セレクタ1410、1411、1412、1413を介して制御する。どのポストストアレジスタの何番目の要素位置からデータを読み出すべきかの管理に読み出しカウンタRが用いられる。読み出しは、ポストストアレジスタ群14−0、1、2、3内の同じPSRの同じ要素位置から行なわれる。
【0095】
あらかじめプロセッサ3−0〜3のいずれかから送出されたセットアップ情報は、信号線302を介してポストストアリクエスト部1500内のLR、DR、BR、SRに設定されている。ポストストアリクエスト部1500は設定された情報に基づき各プロセッサからストアすべきアドレスを計算し、読み出し制御部1530によるデータのPSD0〜3への読み出しと同期して、信号線A0〜3にアドレスを送出して主記憶1にポストストア要求を出す。ポストストア要求をどれだけ送出したかの管理にリクエストカウンタRQが用いられる。
【0096】
データ保証制御部1540は、ポストストアレジスタへのプロセッサからのデータ書込みをポストストアリクエストによる読み出しが追い越さないように、またまだ読み出していないポストストアデータのある位置に別のストアデータを上書きしないように、信号線1541、1544、1545、1546を通じて、書込み制御部1560、読み出し制御部1530、ポストストアリクエスト部1500を制御している。
【0097】
以下、書込み制御部1560、読み出し制御部1530、ポストストアリクエスト部1500、データ保証制御部1540の動作を順次説明する。
【0098】
(書込み制御部1560)
図17は書込み制御部1560の構成図である。書込み制御部1560は、独立非同期に動作するプロセッサ3−0〜3から独立非同期に送出されるストアリクエストSRQ0〜3を受けてストアデータをポストストアレジスタ群14に書込む。プロセッサ3−0〜3からのストアリクエストが、まだポストストアされていないデータを上書きしてしまう場合は、ストアリクエストを抑止する。抑止すべきかはデータ保証制御部1540から送出される信号線1545−0〜3により通知される。制御回路1562−0〜3は、信号線1545−0〜3の値が抑止不要を示し、かつ信号線SRQ0〜3が送出された時のみ、信号線1563−0〜3を介して書込みカウンタW0〜3(1564−0〜3)をカウントアップし、信号線1561−0〜3を介してポストストアレジスタ群14−0〜3への書込みを行なう。書込みカウンタW0〜3(1564−0〜3)の値とカウントアップの方法およびポストストアレジスタ群14への書込み位置の対応は、プリロード時と同じである。信号線SRQ0〜3の送出は独立に行なわれるため書込みカウンタW0(1564−0)、W1(1564−1)、W2(1564−2)、W3(1564−3)の値は独立にカウントアップされ、ポストストアレジスタ群14−0、14ー1、14−2、14−3の書込み位置は異なっていることがある。また、各書込みカウンタW0(1564−0)、W1(1564−1)、W2(1564−2)、W3(1564−3)がそのサイクルでカウントアップされたか否かの情報が、信号線1546−0〜3を介してデータ保証制御部1540に出力される。
【0099】
(読み出し制御部1530)
図16は読み出し制御部1530の構成図である。読み出し制御部1530はデータ保証制御部1540から送出されるポストストア起動信号1541に従い、ポストストアレジスタ群14の然るべき位置からデータを読み出すようセレクタ1410、1411、1412、1413を制御する制御信号1531を生成する。具体的には、制御回路532は、起動信号1541を受けた時のみ、信号線1533を介して読み出しカウンタR1534をカウントアップし、その値が信号線1531に出力される。読み出しカウンタR1534の値とカウントアップの方法およびポストストアレジスタ群14の読み出し位置の対応はプリロード時と同じである。各ポストストアレジスタ群14−0、14−1、14−2、14−3の読み出し位置の選択は全て信号線1531の値により制御されるので、ポストストアレジスタ群14からは同一PSRの同一要素位置からデータが読み出される。また、読み出しカウンタR1534がそのサイクルでカウントアップされたか否かの情報が信号線1544に出力され、データ保証回路1540によるデータ書込み/読み出しの順序性保証に使用される。
【0100】
(ポストストアリクエスト部1500)
図15はポストストアリクエスト部1500の構成図である。ポストストアリクエスト部1500の構成および動作はプリロードリクエスト部500とほとんど同じである。プリロードリクエスト部と全く同じ動作をする構成要素には同じ番号を付してある。
【0101】
ポストストアリクエスト部1500内には、リクエストカウンタRQ521、LR、DR、32本のBR、32本のSRがあるが、図では簡単のため4本しか示していない。またプロセッサ3−0〜3の各々に対応するポストストアリクエスタ0〜3(1503−0〜3)がある。
【0102】
プロセッサ3−0〜3のいずれかから送出されるセットアップ情報は信号線302を介して入力され、各々LR、DR、SR0〜3、BR0〜3に設定される。これらの情報はポストストアリクエスタ0〜3(1503−0〜3)に取り込まれ、各プロセッサに対応したアドレスA0〜3を計算するのに使用される。ポストストアリクエスタ0〜3(1503−0〜3)の動作はほとんど同じため、以下ではポストストアリクエスタ0(1503−0)を例に取り説明する。
【0103】
ポストストアリクエスタ0(1503−0)内には、ワークベースレジスタ508−0〜3、ワークストライドレジスタ512−0〜3、アドレス加算器516があり、これらを用いて毎サイクルアドレスが計算される。ポストストアリクエスタ0内にはさらに初期設定回路504−0〜3があり、プロセッサ3−0に対応した要素アドレスを計算できるよう、ワークベースレジスタ508−0〜3およびワークストライドレジスタ512−0〜3を初期設定する。初期設定の方法はプリロードリクエスタ503−0と同一である。
【0104】
ポストストアリクエスト部1500は、データ保証制御部1540からのポストストア起動信号1541が入力され、かつループ長分の処理を完了していない場合に、ポストストアリクエストを毎サイクルA0〜3に送出する。制御回路1518はこれを制御するための回路であり、ポストストアリクエストを送出した数を計数し、信号線520を介してリクエストカウンタRQ521をカウントアップしている。制御回路1518は、信号線541の値が起動であり、かつポストストアリクエスト送出数が信号線517を介して得たLRの値*総配列数(この場合は4)/プロセッサ台数(この場合は4)を超えない限り、起動信号519をポストストアリクエスタ0〜3(1503−0〜3)に送出する。ポストストアリクエスタ0〜3(1503−0〜3)は起動信号519の値が有効なサイクルのみアドレスを計算し、信号A0〜3を送出する。
【0105】
アドレスの計算の方法はプリロードリクエスタ503−0と同一である。
【0106】
ポストストアリクエスタ1503−0〜3は信号線519の制御により同期して動作するため、以上の動作により、ポストストアリクエスト部1500は、全配列の同一添え字に関してまんべんなく、主記憶1へのポストストア要求を出すことができる。さらにCyclic分割の場合、アドレスA0〜3は連続していることが多いため、主記憶1に対し、連続アクセス要求をまとめて出すことができる。
【0107】
(データ保証制御部1540)
図18はデータ保証制御部1540の構成図である。データ保証制御部1540は、そのサイクルで書込みカウンタW0〜3(1564−0〜3)の各々がカウントアップされたかの情報を示す信号線1546−0〜3と、読み出しカウンタR1534がカウントアップされたかの情報を示す信号線1544を入力として、プロセッサ対応のストア動作抑止信号1545−0〜3およびポストストア起動信号1541を生成する。
【0108】
ストア動作を抑止すべきかどうかは以下のように決定する。
【0109】
ポストストアレジスタ上にまだ主記憶に送出されていないデータがある場合、ポストストアレジスタの再利用のために、新たなデータを上書きしてしまうようなストアリクエストの送出は防がなければならない。そのために、各書込みカウンタW0〜3の値が、読み出しカウンタRの値に等しくなりそうな時に、ストア動作抑止信号1545−0〜3をプロセッサごとに送出する。
【0110】
生成回路1551−0〜3は、信号線1546−0〜3の値をもとに、各々W0〜3の値の写しを生成する。生成回路1552は、信号線1544の値をもとに、Rの値の写しを生成する。なお、信号線1546−0〜3および1544を使用してW0〜3およびRの値を直接受け取ってもよい。比較回路1554−0〜3は、各々信号線1557−0〜3、1558を介して受け取ったRの値の写しからW0〜3の値の写しを減じ、その値が1以下のとき信号線559−0〜3に1を出力する。上記により、次のサイクルでストア動作を行なってW0〜3の値が1加算されると、W0〜3の値がRのに等しくなってしまうタイミングで、各プロセッサごとに、ストア動作抑止信号1545−0〜3が送出される。
【0111】
一方、ポストストアを起動するためには、ポストストアデータがプロセッサからポストストアレジスタ群に書込み済みでなければならない。そこで、全てのW0〜3の値がRの値より大きい時にポストストアを起動する。
【0112】
比較回路1553−0〜3は、W0〜3の値の写しからRの値の写しを減じた値が2以上のとき信号線545−0〜3に1を出力する。上記値が2以上であれば、次のサイクルで読み出しを行なっても、データは既にプリロードレジスタ群に書込み済みである。
【0113】
以上により、データ保証制御部1540は、ポストストアレジスタへのデータ書込みをポストストアによる読み出しが追い越さないように読み出し制御部1530を制御し、また、まだ読み出していないポストストアデータのある位置に別のストアデータを上書きしないように書込み制御部1560を制御する。
【0114】
<実施例3>
実施例1では、ハードウェアが32本のプリロードレジスタを具備していても、機械語命令列で指定された4本のプリロードレジスタしか使用できない。本実施例は、機械語命令列を変更することなく、ハードウェアが具備する全てのプリロードレジスタを使用してプリロードを実施できるように実施例1を変形したものである。具体的には32本のプリロードレジスタを複数本ずつ連結し、論理的に4本のプリロードレジスタと見なされるように、装置が構成される。
【0115】
(用語の定義)
全体構成は図1に示したものと同一である。プロセッサ3−0〜3に各々対応したプリロードレジスタ群4−0〜3ごとに32本のプリロードレジスタ400−0〜31がある。図19はその内プリロードレジスタ群4−0に関してのみ示した図である。以下、本実施例ではハードウェアが実際に具備するプリロードレジスタ400−0〜31を最小単位プリロードレジスタ(IPR)と呼ぶ。このうち複数本ずつが連結されて論理的に1本のプリロードレジスタが構成されるが、これをプリロードレジスタ(PR)と呼ぶ。
【0116】
(全体動作)
以下では、プリロードを実行する場合に関して説明する。ポストストアの制御は本実施例から容易に類推可能である。
【0117】
図19に示すように、プリロードレジスタ群4ー0には各々32本の最小単位プリロードレジスタIPR(400−0〜31)があり、各最小単位プリロードレジスタIPRは64要素を保持する。プリロードレジスタ群4ー1、4ー2、4ー3の構成も同様である。
【0118】
図2のDOループを実現する場合、機械語命令列は実施例1と同じ図3に示したものとなる。しかしプリロード部2は機械語命令列を実施例1とは少し異なる形に解釈する。すなわち、(a)の(1)の命令で使用PR本数は4であることが示されると、32本のIPRを4で除した8本ずつ連結し、連結されたプリロードレジスタを、機械語命令列で指定されるPR0〜3と解釈する。すなわち、プリロードレジスタ群4ー0を例にとれば、400ー0〜7をPR0、400ー8〜15をPR1、400ー16〜23をPR2、400−24〜31をPR3とし、各々64x8=512要素のプリロードレジスタと見なす。各プリロードレジスタ内の要素番号は、400−0の第0〜63要素位置がPR0の第0〜63要素、400−1の第0〜63要素位置がPR0の第64〜127要素となり、以下400−2、、、と連結し、400−7の第0〜63要素位置がPR0の第448〜511要素と解釈される。つまり、あたかも4本の512要素のプロセッサ対応のプリロードレジスタがあるかのごとくプリロード部2は動作する。
【0119】
上記の制御を行なうために、プリロードリクエスト部500の初期設定方式と書込みカウンタW534および読み出しカウンタR0〜3のカウントアップ方式が実施例1とは異なる。各々の動作を図20〜22を用いて以下に説明する。
【0120】
(プリロードリクエスト部初期設定方式)
図3の(a)の(1)の命令が実行されると、32本のIPRを4つに分割して連結する指示が信号線302を介して図20のプリロードリクエスト部500内の連結設定回路524に伝えられる。(2)〜(11)の命令が実行されるとLRにループ長Nが、DRにプロセッサの添え字分担態様が、BR0〜3にそれぞれ配列A、B、C、Dの先頭アドレスが、ストライドレジスタSR0〜3に全プロセッサのアクセスをまとめた場合の配列A、B、C、Dへのアクセスストライドがセットされる。連結設定回路524は信号線525を介して初期設定回路504ー0〜31を制御し、図21に示す情報を信号線505ー0〜31、522ー0〜31に送出させる。これにより、各最小単位プリロードレジスタIPRが、連結されたプリロードレジスタにロードすべきデータの然るべき部分を主記憶1からロードできるように、507−0〜31および512−0〜31が設定されたことになる。以下具体的に配列の各要素が各IPRのどの部分にロードされるよう設定されたかを示す。
【0121】
図21は、プロセッサ3−0〜3に対応するプリロードリクエスタ0〜3において、IPRごとの配列初期アドレスを示す信号線505−0〜31およびストライドアドレスを示す信号線522−0〜31への出力を、プロセッサ番号をp、IPR番号をnとしてまとめて表示したものである。機械語命令列により指定された使用プリロードレジスタ本数をprn(図2の命令列の場合4)とすると、IPRはj=32/prn本(この場合32/4=8本)ずつ連結される。ここでn=ixj+kなるiとkを求めると、iはn番目のIPRが何番目のPRに相当するかを示し、kは連結されたi番目のPRのうちn番目のIPRが前から何番目のIPRであるかを示すことになる。さてCyclic分割の場合、配列要素はPR0、PR1、、、と1要素ずつ格納されるべきなので、各PRの先頭のIPRの配列先頭アドレスとして設定されるべきなのは、図9(a)に同じくBRi+SRixpとなる(先頭のIPRということはk=0の場合ということ)。各IPRは64要素を保持し、かつ各配列要素は順次異なるプロセッサで処理されるのだから、各PRのk番目のIPRの配列先頭アドレスとして設定されるべきなのは、上記値にSRix4x64xkを加えたものとなる。またIPR番号にかかわらず、ストライドアドレスはSRix4となる。一方Block分割の場合、各PRは全ループ長LRをプロセッサ台数すなわち4で分割して処理するのであるから、各PRの先頭のIPRの配列先頭アドレスとして設定されるべきなのは、図9(a)に同じくBRi+SRixLR/4xpとなる。各IPRは64要素を保持するので各PRのk番目のIPRの配列先頭アドレスとして設定されるべきなのは、上記値にSRix64xkを加えたものとなる。またIPR番号にかかわらず、ストライドアドレスはSRiとなる。
【0122】
(書込みカウンタおよび読み出しカウンタの更新)
以上より然るべきアドレスが設定されたので、この後は然るべき順序で然るべき要素位置への書込み、読み出しが指示されるように書込みカウンタW534および読み出しカウンタR0〜3のカウントアップが操作されればよい。
【0123】
図22は制御回路532および書込みカウンタW534を示す図である。534はカウンタW534の値を2進表現で表したものである。すなわち下位5ビット(531−1)で32本のIPR番号を、上位6ビット(531−0)でIPRの要素番号を表現する。
【0124】
制御回路532は信号線302により予め32本のIPRを4つに分割することを知らされている。制御回路532は基本的にはプリロードレジスタ群4−0〜3への書込みが信号線535を介して指示されるたびに、書込みカウンタW534の最下位ビットを加算器5330により32/4=8ずつカウントアップする。これによりIPR0の第0要素、IPR8の第0要素、IPR16の第0要素、IPR24の第0要素への書込みの後に、IPR0の第1要素への書込みを行なうことができる。すなわち配列A、B、C、Dに関し同一添え字に関し順次書込みを行なうことができる。
【0125】
IPR24の第63要素への書込みを行なった後に、書込みカウンタW534に8を加えると、最上位ビットからの桁あふれが生じる。比較回路5331はこれを監視しており、この時加算回路5332により生成される書込みカウンタW534の値をラップアラウンドさせさらに1を加ええた値が、書込みカウンタに設定されるようにセレクタ5333を制御する。これにより、以降はIPR1の第0要素、IPR9の第0要素、IPR17の第0要素、IPR25の第0要素と書込みアドレスを指定でき、引続き配列A、B、C、Dに関し同一添え字に関し順次書込みを行なうことができる。さらにIPR25の第63要素への書込みを行なった後に、書込みカウンタW534に8を加えると、最上位ビットからの桁あふれが生じ、ラップアラウンドした値は1を指す。ここにさらに1を加えることにより、以降はIPR2の0要素に書込みを行なうことができる。
【0126】
読み出しカウンタR0〜3(564−0〜3)の制御についても全く同様に行なうことができる。
【0127】
以上のように制御することにより、最小単位のプリロードレジスタを複数連結して論理的に一つのレジスタとしてアクセスすることができ、プログラム中に現れる配列の数に応じた数のプリロードレジスタを提供することができる。
【0128】
<実施例4>
本実施例は、一度の主記憶アクセスにより、プロセッサの台数の複数倍のデータをまとめてプリロード可能になるように、実施例1を変形したものである。したがって、上記の実施例1を変更すべき点を中心に述べる。ここでは倍数は一例として2倍とする。この実施例の考えは、ポストストアに関しても全く同じであり、また実施例3にも適用できる。
【0129】
全体構成は図1にほぼ同じである。ただしA0〜3およびPD0〜3は2重化し、1サイクルで2要素分のプリロードデータおよび主記憶アドレスを送出できるようにする。
【0130】
実施するプログラムの機械語命令列イメージは図3に同じである。プリロードの単位がプロセッサ台数の2倍になってもプログラムには何の変更もなく、プロセッサ3−0〜3は各々1要素ずつプリロードレジスタ群4−0〜3からデータを読み出して処理する。
【0131】
プリロード部2の構成は以下のように修正する。
信号線420−0〜3、421−0〜3、422−0〜3、423−0〜3は2重化し、1サイクルで2要素分のプリロードデータの処理ができるようにする。また、プリロードレジスタへの書込みは、信号線531で示されたプリロードレジスタの、指定された要素位置、およびそれに1を加えた要素位置に行なうよう制御する。
【0132】
プリロードリクエスト部500には、図23に示すように、図5に較べ、各プリロードリクエスタ503−0〜3にアドレス加算器2516が追加される。図23においてワークベースレジスタ507−0〜3、ワークストライドレジスタ512−0〜3の初期設定方法は図5に同じである。制御回路518は信号線541の値がプリロード抑止でなく、かつプリロードリクエスト送出数が信号線517を介して得たLRの値*総配列数/プロセッサ台数/2を超えない限り、プリロード起動信号519をプリロードリクエスタ0〜3(503−0〜3)に送出する。
【0133】
プリロードリクエスタ503−0は、起動信号519を受けるたびにアドレス計算を2つの加算器516、2516を用いて行ない、2つのプリロードリクエストを信号線A0を介して送出する。アドレスの計算は、以下のように行なう。すなわち、アドレス加算器516では図5と同じく信号線511、515を介して得たワークベースレジスタ、ワークストライドレジスタの値を加算して信号線A0に出力する。アドレス加算器2516では、信号線515を介して得たワークストライドレジスタの値を2倍して、信号線511を介して得たワークベースレジスタの値に加え、信号線A0に出力する。読み出されたワークベースレジスタは、アドレス加算器2516の出力値に更新される。
【0134】
リクエストカウンタRQ521のカウントアップ方法およびその値によるワークベースレジスタ、ワークストライドレジスタの選択方法は図5に同じである。すなわち、ワークベースレジスタ、ワークストライドレジスタは、リクエストカウンタRQ521がカウントアップされるごとに順次配列A、配列Bと切り替わる。信号542には図5と同様、そのサイクルでリクエストカウンタ52R1Qがカウントアップされたかどうかを示す情報が出力される。この信号がカウントアップを示すときは、2要素分のプリロードリクエスト送出が行なわれたことを意味する。
【0135】
書込み制御部530の構成および動作は図6に同じである。書込みカウンタ534の操作は、図10に示すのとほとんど同じだが、全配列に関して同一要素位置に対するプリロードを行なったら、次のサイクルでは書込みカウンタ534が次の次の要素位置を示すよう制御する必要がある。そのため、図10において書込みカウンタ534の下3ビット目への桁上がりがあった場合は、制御回路532は、上位6ビットに2を加える。また、図6の信号線544には、そのサイクルで書込みカウンタ534がカウントアップされたかどうかを示す情報が出力されるが、この信号がカウントアップを示すときは、2要素分の書込みが行なわれたことを意味する。
【0136】
読み出し制御部560の構成および動作は図7と全く同じである。読み出しカウンタR0〜3(564−0〜3)の操作は、実施例における動作と全く同じである。すなわち、読み出しカウンタR0〜3(564−0〜3)の下3ビット目への桁上がりがあった場合は、上位6ビットに1を加えるように制御される。信号線546−0〜3は各読み出しカウンタR0〜3(564−0〜3)がカウントアップされたかを示すが、この信号がカウントアップを示すときは、1要素分の読み出しが行なわれたことを意味する。
【0137】
データ保証制御部540の構成は図8に同じである。ただし信号線542は2要素分のプリロード要求が行なわれたことを、信号線544は2要素分のプリロードによる書込みが行なわれたことを、信号線546−0〜3は1要素分のロードによる読み出しが行なわれたことを示す。そのため制御回路550は信号線549を受けたとき差分カウンタ552を1カウントアップし、信号線542を受けたとき差分カウンタ552を2カウントダウンする。また制御回路555−0〜3は信号線544を受けたとき差分カウンタ557−0〜3を2カウントアップし、各々信号線546−0〜3を受けたとき差分カウンタ557−0〜3を1カウントダウンする。以上により、データ保証制御部540は、プリロードレジスタへのデータ書込みをロードリクエストによる読み出しが追い越さないように、またまだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、プリロードリクエスト部500、書込み制御部530、読み出し制御部560を正しく制御することができる。
【0138】
【発明の効果】
本願第1の発明によれば、複数のスカラプロセッサにより分担して処理される処理中に含まれる複数の配列の要素のごとき、複数群のデータを、多バンク構成の主記憶の連続するアドレスを有する記憶位置からプリロードするのに適した、回路構造の簡単なデータ処理装置が得られる。
【0139】
本願第2の発明によれば、複数のスカラプロセッサにより分担して処理される処理の結果生成される複数の配列の要素のごとき、複数群のデータを、多バンク構成の主記憶の連続するアドレスを有する記憶位置にポストストアするのに適した、回路構造の簡単なデータ処理装置が得られる。
【0140】
本願第3の発明によれば、プリロード用のキャッシュの容量を越えて、複数のスカラプロセッサにより分担して処理される繰返し処理で使用される一群のデータがプリロード可能にする、回路構造の簡単なデータ処理装置が得られる。
【図面の簡単な説明】
【図1】本発明の実施例1による、プリロード可能なデータ処理装置の全体構成図。
【図2】図1の装置が実行する処理を表わすFORTRANプログラムの例を示す図。
【図3】図2のプログラムに対して図1の各プロセッサが実行する機械語命令列の例を示す図。
【図4】図1の装置に使用するプリロードレジスタ群とプリロード制御部の構成図。
【図5】図1の装置に使用するプリロードリクエスト生成部の構成図。
【図6】図1の装置に使用する、プリロードレジスタに対する書込み制御部の構成図。
【図7】図1の装置に使用するプリロードレジスタに対する読み出し制御部の構成図。
【図8】図1の装置に使用するプリロードレジスタ書込み/読み出し順序保証部の構成図。
【図9】図5の装置に使用される初期設定回路が設定するアドレス関連情報の値を示す図。
【図10】図6の書込みカウンタのカウントアップ動作を説明する図。
【図11】本発明の実施例2による、ポストストアを実行可能なデータ処理装置の全体構成図。
【図12】図11の装置で実行される処理を表わすFORTRANプログラムの例を示す図。
【図13】図12のFORTRANプログラムに対する機械語命令列の例を示す図。
【図14】図11の装置に使用されるポストストアレジスタ群およびポストストア制御部の構成図。
【図15】図11の装置に使用されるポストストアリクエスト生成部の構成図。
【図16】図11の装置に使用される、ポストストアレジスタに対する読み出し制御部の構成図。
【図17】図11の装置に使用される、ポストストアレジスタに対する書込み制御部の構成図。
【図18】図11の装置で使用される、ポストストアレジスタに対する書込み/読み出し順序保証部の構成図。
【図19】本発明の実施例3によるデータ処理装置で使用されるプリロードレジスタ群の構成図。
【図20】上記実施例3によるデータ処理装置で使用されるプリロードリクエスト生成部の構成図。
【図21】上記実施例3によるデータ処理装置で初期設定回路が設定するアドレス関連情報の値を示す図。
【図22】上記実施例3によるデータ処理装置で書込みカウンタのカウントアップ動作を説明する図。
【図23】本発明の実施例4によるデータ処理装置で使用されるプリロードリクエスト生成部の構成図。
【符号の説明】
LR…レングスレジスタ、DR…分割レジスタ、BR…ベースレジスタ、SR…ストライドレジスタ、516、2516…アドレス加算器、521…リクエストカウンタ、534…(プリロードの)書込みカウンタ、564…(プリロードの)読み出しカウンタ、1534…(ポストストアの)読み出しカウンタ、1564…(ポストストアの)書込みカウンタ、。
【産業上の利用分野】
本発明は、主記憶装置を共有し、繰返し処理を分担処理する複数のプロセッサがプリロード/ポストストアを実行可能なデータ処理装置に関し、特に複数のスカラプロセッサがFORTRANのDOループのような繰返し処理の各イタレーションを分担処理し、いわゆるマイクロタスキングを実施する場合に効率がよい、プリロード/ポストストアを実行可能なデータ処理装置に関する。
【0002】
【従来の技術】
現在多くのプロセッサは、主記憶レイテンシをキャッシュにより隠蔽している。ところが、大規模データを扱う科学技術計算などではデータの参照に局所性が少なく、キャッシュが有効に働かないケースが多い。これに対応するためプリフェッチやプリロード機構が提案されている。すなわち、プロセッサが配列データを使用するタイミングより前に、その配列データを主記憶から読み出し、プリロード用のバッファメモりに保持しておき、後にそのプロセッサが、その配列データ内のいずれかの要素を処理するときに、その要素をそのバッファから読み出す。これによりプロセッサが主記憶からこの配列データを読み出す時間がそのプロセッサには見えないようにしている。例えば、文献1:「お茶の水1号の構成と評価」、情報処理学会研究報告、計算機アーキテクチャ101−8、1993.8.20、pp.57−64参照。この文献では、複数のプロセッサを有するシステムにおいて、各プロセッサごとに配列データをプリフェッチする技術が開示されている。すなわち、各プロセッサにより指示された、プリフェッチすべき配列データのアドレス、ストライド、レングスに従って、そのプロセッサ用に設けたプリフェッチ制御部がこの配列データの複数の要素をプリフェッチし、そのプロセッサ対応に設けたプリフェッチバッファに格納する方式が示されている。
【0003】
文献2:特開平3−266174号公報「データ処理装置」では、マルチベクトルプロセッサにおけるプリロードあるいはポストロードを開示している。一般に、主記憶は多バンクにより構成されており、その場合、主記憶の連続するアドレスの記憶位置をアクセスしたときに、高速にアクセスできる。しかし、マイクロタスキングにおいては、各プロセッサは1つの配列データを飛び飛びに分割して非同期にアクセスすることが多い。このようなアクセスは連続アクセスを効率よく処理する多バンク主記憶にとって都合が悪い。この文献2の方法では、このような多バンク構成の主記憶を共有する複数のベクトルプロセッサにより分担して処理されるベクトルデータを主記憶から高速に読み出しあるいはそこに高速に書き込むのに適したプリロードあるいはポストストアを開示している。
【0004】
すなわち、ベクトルプロセッサ対応にプリロードバッファあるいはポストストアバッファを設け、これらのベクトルプロセッサに共通に設けられたバッファ制御部により、これらのベクトルプロセッサにより分割して処理されるベクトルデータをプリロードする場合、そのベクトルデータの主記憶アドレス、ストライド、レングス情報に基づいてベクトルデータの複数の要素をまとめてプリロードし、各ベクトルプロセッサによるその配列の添え字の分担範囲に従って、これらのベクトルプロセッサ対応の複数のバッファに、それらのプリロードした複数の要素を分割して格納する。各プロセッサが独立非同期に、そのベクトルプロセッサ対応のバッファを参照する。ポストストアの場合であれば、各ベクトルプロセッサが独立非同期にそのベクトルプロセッサ対応のバッファに書込むベクトル要素がある程度まとまったバッファ制御部が全ベクトルプロセッサから書込まれた複数のベクトル要素をまとめて主記憶にストアする。
【0005】
【発明が解決しようとする課題】
一般に、マルチベクトルプロセッサでは、各ベクトルプロセッサは、一つのベクトルデータの全要素を続けて処理する。したがって、文献2のごとく、ひとつのバッファにその全要素を格納した上で、それを処理する方法がとられる。しかし、複数のスカラプロセッサがFORTRANのDOループのような繰返し処理の各イタレーションを分担処理する、いわゆるマイクロタスキングを実施する場合に、ループ繰返し処理の中には複数の配列が含まれ、これらのスカラプロセッサは、しかも1つのループイタレーションごとに異なる配列を順次アクセスする。そのため例えば配列A、B、C、D、Eの各々のいずれかの添え字の要素が使用され、続いて次の添え字のデータが使用される。しかし、上記文献1には、一つの配列データの複数の要素をスカラプロセッサのためにプリロードする技術が開示されているが、複数の配列データのプリロードは記載されていない。
【0006】
したがって、本発明の目的は、このように、複数の配列を処理するループ繰返し処理を複数のスカラプロセッサにより分割して処理するのに適したプリロード回路およびポストストア回路を有するデータ処理装置を提供することである。
【0007】
【課題を解決するための手段】
上記目的を達成するために本願第1の発明では、主記憶を共有する複数のプロセッサで分担して実行される処理の中で使用される複数のデータ群を主記憶からプリロードする回路は、
それぞれ一つのプロセッサに対応して設けられた複数のバッファと、
プリロードすべき複数のデータ群を一部づつからなる部分データに分けて、かつ、異なるデータ群の部分データ群を順次読み出すように、上記複数のデータ群を主記憶から読み出し、かつ、各部分データ群の複数のデータは主記憶から並列に読み出し、読み出された部分データ群を上記複数のバッファに分散して書込むように構成されたプリロード用の回路とを有する。
【0008】
この本願第1の発明によれば、例えば、4台のプロセッサを有し、4つの配列A、B、C、Dをループ繰返し処理の中で実行するデータ処理装置にこの発明を適用した場合、配列データAの一部の要素A(1)、A(2)、A(3)、A(4)からなる、部分データ群がまず主記憶から並列に読み出され、4つのバッファに分散して書込まれる。次に、配列Bの一部の要素B(1)、B(2)、B(3)、B(4)からなる部分データ群が次に主記憶から並列に読み出され、4つのバッファに分散して書込まれる。以下同様である。したがって、各配列のいずれかの部分データ群がプリロードされた段階で、それらのプリロードされたデータを各プロセッサでの処理に供することが出来る。このため、プリロード要求がいずれかのプロセッサにより出力された後、それらの複数のデータ群のすべてのデータがプリロードされる前に、すでにプリロードされた一部のデータを各プロセッサは使用し始めることが可能になる。しかも、同一の配列の一部のデータが、主記憶から並列に読み出されるので、これらの一部のデータが主記憶の連続するアドレスに位置する場合には、主記憶が複数のバンクで構成されているときには、それらの一部のデータの読み出しを速めることが出来る。
【0009】
しかも、複数の配列の要素が各プロセッサ用のバッファに混在して保持されるので、各プロセッサ用のバッファは一つで済むことになり、プリロード回路が簡単になる。
【0010】
本願第1の発明の望ましい第1の態様では、各プロセッサ用のバッファ内の記憶領域が複数の領域から構成され、このバッファへのいずれかのプロセッサがループ処理で使用する配列の総数に合わせて、これらの記憶領域をグループに分けて使用される。これにより、配列の総数が変化したときでも、それに見合った数の記憶領域を各配列用に使用できるようになっている。
【0011】
本願第1の発明の望ましい第2の態様では、各プロセッサで処理されるべきデータが、複数ずつ主記憶から並列にプリロードされ、そのプロセッサ対応のバッファに並列に書き込まれる。これにより、主記憶からのデータプリロードの時間を短縮している。
【0012】
本願第1の発明の望ましい第3の態様では、
各バッファに書き込まれたデータの内、そのバッファに対応するプロセッサに転送されていない未読み出しデータの数を検出し、該複数のバッファの各々に対して検出された未読み出しデータ数の内の最小値を検出する回路と、
各バッファに保持可能な数のデータを各バッファに書込んだ後は、該検出された最小値が0のときに、該主記憶読み出し回路による、該複数のデータ群の後続の部分データ群の読み出しを禁止する回路と、
各バッファに保持可能な数のデータをそのバッファに書き込んだ後にさらに該主記憶から読み出された後続の部分データ群を、各バッファ内の、そのバッファに対応するプロセッサにすでに転送された読み出し済みデータを保持する記憶位置に書き込む回路とが設けられる。
【0013】
これにより、複数のバッファの容量を越える量の配列要素を主記憶から並列にプリロード可能にする。これにより、各バッファは、ループ処理で処理されるデータの総量より少ない容量でよいことになる。
【0014】
本願第2の発明では、
各プロセッサは、複数のプロセッサにより分担して実行される処理の中で生成される複数のデータ群の内、そのプロセッサが供給すべき複数のデータを、順次異なるデータ群に属するものを順次供給するように構成され、
上記複数のデータ群を主記憶にポストストアする回路は、
それぞれ一つのプロセッサに対応して設けられた複数のバッファと、
該複数のバッファに保持された複数のデータ群を、同一のデータ群に属する一部のデータに分けてそれらのバッファ内の互いに対応する一群の記憶位置から読み出し、読みだ出された一部のデータを、同一のデータ群に属する一部のデータとして主記憶に書込む回路とを有する。
【0015】
この本願第2の発明によれば、第1の発明と同様に、ポストストアすべき複数のデータ群を一部づつ複数のバッファから読み出し、主記憶に並列に書込むので、上記複数のデータ群の全てのデータが上記複数のバッファに書込まれる前に、主記憶に書込むことが出来る。しかも、同一の配列データに属する複数の要素が、主記憶に並列に読み出されるので、これらの一部のデータが主記憶の連続するアドレスに書込まれる場合には、本願第1の発明と同様の理由によって、それらの一部のデータの書込みを速めることが出来る。
【0016】
本願第3の発明では、本願第1の発明の上記第3の態様が、ループ処理等により少なくとも一つの配列に属する複数のデータを異なるプロセッサ用のバッファにプリロードする場合に適用される。
【0017】
【実施例】
以下、本発明に係るデータ処理装置を図面に示したいくつかの実施例を参照してさらに詳細に説明する。なお、以下においては、同じ参照番号は同じものもしくは類似のものを表わすものとする。
【0018】
<実施例1>
(装置の概要)
図1において、1はマルチバンク構成の主記憶、3−0〜3は、主記憶1を共有するプロセッサで、図2に例示するFORTRANのDOループを分担して処理する。2は、主記憶1とプロセッサ3−0〜3の間に設けられ、プリロードを実行するプリロード部である。プリロード部2はプリロード動作を制御するプリロード制御部5とプリロードしたデータを保持するプリロード用のバッファとして使用されるプリロードレジスタ群4を有する。プリロードレジスタ群4は、各々プロセッサ3−0〜3に対応するプリロードレジスタ群4−0〜3からなる。
【0019】
各プリロードレジスタ群4−0〜3には各々32本のプリロードレジスタがあるが、後述するように実施例1では実行されるプログラムが4本のプリロードレジスタしか使用しないため簡単のために4本のプリロードレジスタしか示していない。
【0020】
図4に示すように各プリロードレジスタ群4−0〜3は4本のプリロードレジスタ400ー0〜3、401ー0〜3、402ー0〜3、あるいは403ー0〜3と、主記憶1からプリロードしたデータを書き込むべきプリロードレジスタを選択するセレクタ410、411、412または413と、各プリロードレジスタ群から、プリロードされたデータを読み出すべきプリロードレジスタを選択するセレクタ440、441、442あるいは443からなる。
【0021】
各プリロードレジスタ内の4つのプリロードレジスタには、その群ごとに決めるレジスタ番号が割り当てられる。以下では、プリロードレジスタ群4−0内の、プリロードレジスタ400−0、401−0、402−0、403−0をそれぞれプリロードレジスタPR0、PR1、PR2、PR3と呼ぶ。他のプリロードレジスタ群400−1内の4つのプリロードレジスタも同様である。
【0022】
プリロード制御部5内には、プリロードリクエスト部500、書込み制御部530、データ保証制御部540、読み出し制御部560がある。
【0023】
図5に示すように、プリロードリクエスト部500内には、プロセッサ3−0〜3の各々に対応する4つのプリロードリクエスタ503−0〜3がある。以下、これらをプリロードリクエスタ0〜3と呼ぶことがある。これらのプリロードリクエスタは、それぞれプリロードレジスタ群440、441、442、443にも対応しており、これらのプリロードリクエスタは、主記憶1から対応するプリロード群に格納すべき4つのデータを並列に読み出す。
【0024】
レングスレジスタLR、分割レジスタDR、4本のベースレジスタBR0〜3、4本のストライドレジスタSR0〜3は、4つのプロセッサ3−0〜3のいずれか一つから供給される、プリロードすべき配列データを指定するプリロード情報を保持するレジスタ群であり、これらのプリロードリクエスタ503−0〜3は、これらのレジスタに保持されたプリロード情報にしたがって、複数の配列データに属する複数のデータのアドレスを順次生成するようになっている。本実施例では、このレジスタSRiとBRiの組により指定される配列データが第i番目に読み出されるように、配列データの読み出しの順番が定められている。
【0025】
本実施例では、これらのプリロードリクエスタ403−0〜3は、同一の配列データを、4つのデータに分けて主記憶1から順次読み出すとともに、いずれかの配列データの4つのデータを読み出した後は、次の配列データの4つのデータを読み出すように、順次異なる配列データに属する4つのデータの群を順次読み出すようになっているところに特徴がある。
【0026】
図4において、書込み制御部530は、上記4つのプリロードリクエスタ0〜3により並列に4つのデータが読み出される毎に、読み出された4つのデータを、4つのプリロードレジスタ群4−0〜4−3内の互いに同じレジスタ番号のプリロードレジスタに分散して記憶する。さらに、その後プリロードリクエスタにより主記憶から後続の4つのデータが読み出されたとき、それらの後続の4つのデータを、4つのプリロードレジスタ群4−0から4−3内の次の番号のプリロードレジスタに分散して記憶するように構成されている。
【0027】
こうして、本実施例では、各プリロードレジスタ群には、順次異なる配列データに属するデータが順次異なる番号のプリロードレジスタに格納され、かつ、同一のプリロードレジスタには、同一の配列に属する複数のデータが書き込まれるようになっている。
【0028】
図4において、読み出し制御部560は、各プロセッサから供給される複数のロードリクエストに応答して、そのプロセッサに対応するプリロードレジスタ群にすでにプリロードされた複数のデータを、それらのデータがプリロードされた順に読み出し、そのプロセッサに供給するようになっている。このために、読み出し制御部560は、本実施例では、そのプリロードレジスタ群内の、順次異なる番号のプリロードレジスタから順次データを読み出すようになっている。
【0029】
なお、図4において、データ保証制御部540は、プリロードレジスタへのデータ書込みをロードリクエストによる読み出しが追い越さないように、読み出し制御部560を制御し、また、まだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、プリロードリクエスト部500を制御する回路である。
【0030】
以下、本実施例の詳細を説明する。
【0031】
(プリロード情報のセットアップ)
各プロセッサは、図2に示すDOループの場合、4つの配列AからDのぞれぞれの異なる要素を分担して処理する。各配列のいずれの要素を各プロセッサに割り当てる態様を示す添え字分担態様としては、添え字分担態様には、Cyclic分割やBlock分割などすでに知られている複数の方法のいずれかを用いる。ここでは、いわゆるCyclic分割が指定された場合を取り上げる。なお、Block分割時の動作に関しても適宜述べる。図2のプログラムの場合、Cyclic分割では、プロセッサ3−0が添え字I=1、5、9、、、を、プロセッサ3−1がI=2、6、10、、、を、プロセッサ3−2がI=3、7、11、、、、を、プロセッサ3−3がI=4、8、12、、、、を分担する。
【0032】
いずれかのプロセッサは信号線300ー0〜3、オア回路301、信号線302を介してプリロード制御部5に、DOループ内の全ての配列A、B、C、Dの先頭アドレスとストライド、ループ長Nおよびプロセッサの添え字分担態様を示すプリロード情報をセットアップする。
【0033】
図3は図2のDOループを実行するための機械語命令列のイメージである。
【0034】
(a)は、このDOループ処理を本実施例で実行するためのプリロード情報をプリロード部2にセットアップするための機械語命令列を示す。この機械語命令列はセットアップの対象とするレジスタを各命令が指定する。(1)の命令により、何本のプリロードレジスタを使用するかをプリロード制御部5に通知する。(2)、(3)の命令により、プリロード制御部2中にある、レングスレジスタLRに全プロセッサのアクセスをまとめた場合の総ループ長を、分割レジスタDRにプロセッサの添え字分担態様をセットすることを指示する。さらに(4)〜(11)の命令により、ベースレジスタBR0〜3にそれぞれ配列A、B、C、Dの先頭アドレスを、ストライドレジスタSR0〜3に全プロセッサのアクセスをまとめた場合の配列A、B、C、Dへのアクセスストライドをセットすることを指示する。この命令列により、BR0には配列要素A(1)のアドレスが、BR1には配列要素B(2)のアドレスが、BR2には配列要素C(2)のアドレスが、BR3には配列要素D(1)のアドレスがセットされる。また配列A、B、C、Dの各要素が8バイトとすると、SR0にはストライド8バイトが、SR1にはストライド16バイトが、SR2にはストライド8バイトが、SR3にはストライド8バイトがセットされる。
【0035】
本実施例では、後に説明するように、このレジスタSRi(i=0,1,2または3)とBRiの組により指定される配列データに属するデータが第i番目に読み出されるように、プリロードされる配列の順番が定められている。したがって、今の例では、上記のプログラムは、配列A、B、C、Dの順に、それらの配列に属する一部のデータが主記憶からプリロードされることを要求したことになる。
【0036】
(アドレス計算とプリロード)
セットアップが行なわれると、プリロード部2は、自動的に配列A、B、C、Dのプリロードを開始する。この場合、以下に説明する方法で、プリロードレジスタ群4−0〜3内のPR(プリロードレジスタ)0に配列A(I)、PR1に配列B(I*2)、PR2に配列C(I+1)、PR3に配列D(I)の各要素がCyclic分割に従って分割されてプリロードされる。すなわち、例えばPR0に関しては、プリロードレジスタ群4−0内のPR0にA(I)[I=1、5、9、、、、]が、プリロードレジスタ群4−1内のPR0にA(I)[I=2、6、10、、、、]が、プリロードレジスタ群4−2内のPR0にA(I)[I=3、7、11、、、、]が、プリロードレジスタ群4−3内のPR0にA(I)[I=4、8、12、、、、]がプリロードされる。
【0037】
さて、プロセッサ3−0〜3のいずれかから送出されるプリロード情報がレジスタLR、DR、SR0〜3、BR0〜3に設定されると、プリロードリクエスト部500はこれらのプリロード情報に基づきアドレスA0〜3を生成して一括してこれらを主記憶1に送出してプリロードを要求する。このために、これらの情報はプリロードリクエスタ503−0〜3に取り込まれ、各プロセッサに対応したアドレスを計算するのに使用される。
【0038】
すなわち、LR、DR、SR0〜3、BR0〜3に情報が設定されると、プリロードリクエスト部500は、データ保証制御部540からの抑止信号541が入力されるか、もしくはループ長分の処理を完了するかしない限り、毎サイクルアドレスA0〜3を含むプリロードリクエストを主記憶1に送出する。
【0039】
プリロード制御回路518はこのプリロードリクエストの送出を制御するための回路であり、リクエストカウンタ(RQ)521は、プリロード部2により発行されたプリロードリクエストの総数を計数するカウンタである。プリロード制御回路518は、信号線541からリクエスト発行抑止の信号が入力されていなく、かつ、リクエストカウンタ521が示すプリロードリクエスト送出数が、信号線517を介して得たレングスレジスタLRの値*総配列数(この場合は4)/プロセッサ台数(この場合は4)を超えない限り、プリロード起動信号519をプリロードリクエスタ503−0〜3に送出する。併せて線520を介してリクエストカウンタ521をカウントアップする。このリクエストカウンタの値は、プリロードリクエスタ503−0〜3においていずれの配列に対するアドレスを生成するかを指示するの使用される。さらに信号線542を介し、リクエストカウンタ521が各サイクルでカウントアップされたかの情報がデータ保証制御部540に送出される。
【0040】
プリロードリクエスタ503−0〜3はプリロード起動信号519の値が有効なサイクルのみアドレスA0〜3を生成する。アドレスの計算は以下のように行なわれる。なお、プリロードリクエスタ503−0〜3の動作はほとんど同じため、以下ではプリロードリクエスタ503−0を例に取り説明する。
【0041】
プリロードリクエスタ503−0内には、ワークベースレジスタ508−0〜3、ワークストライドレジスタ512−0〜3、およびアドレス加算器516があり、これらを用いて毎サイクル、プリロードレジスタ群4−0にプリロードすべきデータのアドレスが計算される。
【0042】
すなわち、ワークベースレジスタ508−0およびワークストライドレジスタ512−0はストライドレジスタSR0とベースレジスタBR0との組に保持されたプリロード情報が指定する配列、今の例では配列A(I)、の添え字I=1、5、9、、、、の要素のアドレスを計算するのに使用される。
【0043】
同様に、ワークベースレジスタ508−1およびワークストライドレジスタ512−1はストライドレジスタSR1とベースレジスタBR1との組に保持されたプリロード情報が指定する配列、今の例では配列B(I)、のために使用され、ワークベースレジスタ508−2およびワークストライドレジスタ512−2はストライドレジスタSR2とベースレジスタBR2に保持されたプリロード情報が指定する配列、今の例では配列C(I)、のために使用され、ワークベースレジスタ508−3およびワークストライドレジスタ512−3はストライドレジスタSR3とベースレジスタBR3との組に保持されたプリロード情報が指定する配列、今の例では配列D(I)、のために使用される。
【0044】
プリロードリクエスタ0内にはさらに初期設定回路504−0〜3があり、プロセッサ3−0に対応した要素アドレスを計算できるよう、ワークベースレジスタ508−0〜3およびワークストライドレジスタ512−0〜3を初期設定する。
【0045】
まず初期設定回路504−0〜3は信号線517、523、501−0〜3、502−0〜3を介してLR、DR、SR0〜3、BR0〜3の値を受け取る。そしてDRの値、すなわち指定されている添え字分割態様に従い、各プロセッサが最初にアクセスすべき配列要素のアドレスを計算し、信号線505−0〜3を介してワークベースレジスタ508−0〜3に設定する。また初期設定回路504−0〜3は、指定されている添え字分割態様に従って各プロセッサのアクセスストライドを計算し、信号線522−0〜3を介してワークストライドレジスタ512−0〜3に設定する。
【0046】
信号線505−0〜3および信号線522−0〜3に出力される値は指定された添え字分割がCyclicもしくはBlockのとき、各々図9に示すように計算される。図9の値を簡単に説明する。Cyclic分割の場合、ループ添え字が1つ変化するごとに異なるプロセッサでその配列要素を処理するのであるから、各プロセッサが最初に処理すべき配列のアドレスは、BRで示された値からSRで示された値ずつずれたアドレス、すなわちBR、BR+SR、BR+SRx2、BR+SRx3となる。各プロセッサのアクセスストライドは、プロセッサ数が4なのでSRx4となる。一方Block分割の場合、LRで示された全ループ長をプロセッサ台数4で除した配列要素を各プロセッサは処理するのであるから、各プロセッサが最初に処理すべき配列のアドレスは、BRで示された値からSRxLR/4で示された値ずつずれたアドレス、すなわちBR、BR+SRxLR/4、BR+SRxLR/4x2、BR+SRxLR/4x3となる。各プロセッサのアクセスストライドはもともとのストライドSRとなる。
【0047】
さて初期設定の後は、信号線519によりプリロード起動信号がプリロード制御回路518から与えられるたびに、アドレス加算器516はセレクタ510、信号線511を介して得られるワークベースレジスタ内のアドレスと、セレクタ514、信号線515を介して得られるワークストライドレジスタ内のストライドを加算して、プリロードリクエストアドレスA0として主記憶1に送出する。セレクタ510と514は、順次異なる配列に対する、ワークベースレジスタとワークストライドレジスタを選択するように、リクエストカウンタ521の値により信号線522を介して制御される。その方法は後に説明する。加算結果はセレクタ506およびそれにより選ばれた信号線507−0〜3の一つを介して、アドレス計算に使用した元のワークベースレジスタ5080−0〜3のいずれか一つにも書き込まれる。セレクタ506の制御もリクエストカウンタ521から線522により与えられるプリロードリクエスト総数に基づいて行なわれる。
【0048】
リクエストカウンタ521によるセレクタ510、514、506の制御は以下のようにする必要がある。すなわち前のサイクルで配列Aの要素に対応するワークベースレジスタ508−0、ワークストライドレジスタ512−0を選択していた場合に、次のサイクルでリクエストカウンタ521が一つカウントアップされたときは、配列Bの要素に対応するワークベースレジスタ508−1、ワークストライドレジスタ512−1を選択するようにする。以下同様に順次配列C、Dに対するワークベースレジスタとワークストライドレジスタを選択する。また前のサイクルで配列Dの要素に対応するワークベースレジスタ508−3、ワークストライドレジスタ512−3を選択していた場合にリクエストカウンタ521が一つカウントアップされると、配列Aの要素に対応するワークベースレジスタ508−0、ワークストライドレジスタ512−0を選択するようにする。
【0049】
このためにはリクエストカウンタ521の下位ビットのパターンでワークベースレジスタおよびワークストライドレジスタを指定すればよい。この場合であれば下2ビットが’00’の時ワークベースレジスタ508−0、ワークストライドレジスタ512−0を指定し、’01’の時ワークベースレジスタ508−1、ワークストライドレジスタ512−1を、’10’の時ワークベースレジスタ508−2、ワークストライドレジスタ512−2を、’11’の時ワークベースレジスタ508−3、ワークストライドレジスタ512−3を指定する。
【0050】
以上から分かるように、プリロードリクエスタ503−0は、配列A、B、C、Dの順にしたがって、プロセッサ3−0により使用されるデータを順にプリロードするためのアドレスを生成する。他のプリロードリクエスタ503−1〜3も同様である。
【0051】
以上から分かるように、ワークベースレジスタ508−i(i=0、1、2または3)とワークストライドレジスタ512−iの組は、アドレス加算器516、セレクタ510、514、507、と組合わせて、配列A、B、C、Dの内、i番目の配列に属し、プロセッサ3−0が使用する複数のデータのアドレスを順次生成するアドレス生成回路を形成している。こうして、本実施例では、プロセッサ3−0が使用する配列A(1)、B(2)、C(2)D(1)、A(2)、B(3)、C(3)、D(2)、、、がこのプリロードリクエスタ503−0によりこれらのデータの順に主記憶1から順次プリロードされる。他のプリロードリクエスタについても同様である。
【0052】
プリロードリクエスタ503−0〜3は信号線519から与えられるプリロード起動信号により同期して動作する。この結果、配列データAの一部のデータA(1)、A(2)、A(3)、A(4)からなる配列データAの最初の部分データ群がこれらのプリロードリクエスタ503−0〜3により並列に主記憶1からプリロードされ、続いて、B(2)、B(4)、B(6)、B(8)からなる配列データBの最初の部分データ群、さらに続いて配列データの一部のデータC(2)、C(4)、C(6)、C(8)からなる配列データCの最初の部分データ群、さらに続いて、配列データDの一部のデータD(1)、D(2)、D(3)、D(4)からなる配列データCの最初の部分データ群、配列データAの一部のデータA(5)、A(6)、A(7)、A(8)からなる配列Aの2番目の部分データ群がこれらのプリロードリクエスタ503−0が順次主記憶1からプリロードされる。これらの配列の他のデータも同様に読み出される。
【0053】
以上の動作により、プリロードリクエスト部500は、抑止信号541が入力されない限り、全配列の同一添え字に関してまんべんなく、主記憶1へのプリロード要求を出すことができる。さらにCyclic分割の場合、アドレスA0〜3は連続していることが多いため、主記憶1に対し、連続アクセス要求をまとめて出すことができる。
【0054】
(プリロードレジスタ群へのプリロードデータの書き込み)
主記憶1は供給されたアドレスA0〜3の位置にあるデータを一括して読み出し、信号線PD0〜3に出力するとともに、信号線PD0〜3の値が有効なことを示すバリッド信号を信号線535に出力する。ここで主記憶1は、アドレスA0〜3を含むプリロードリクエストの順にデータおよびバリッド信号を信号線PD0〜3および信号線535を介してプリロードレジスタ群4に転送するものとする。これは、主記憶1内にバッファを設け、プリロードリクエストを受け入れた順序を覚えておいてバッファ上で並べ替えを行なうなどの公知の技術により実現できる。
【0055】
書込み制御部530は有効信号535を受けて、データPD0〜3のプリロードレジスタ群4への書込みを実行する。主記憶1から読み出されたデータの各々は、セレクタ410、411、412、413により選ばれた信号線420−0〜3、421−0〜3、422−0〜3、423−0〜3のいずれかを介してプリロードレジスタ400−0〜3、401−0〜3、402−0〜3、403−0〜3の内、同じレジスタ番号を有する4つのプリロードレジスタに、同時に書込まれる。
【0056】
図6は書込み制御部530の構成図である。書込み制御部530は、主記憶1から送出される読み出しデータと同期して送出される有効信号535を受け、読み出しデータをプリロードレジスタ群4の然るべき位置に書込むようセレクタ410、411、412、413を制御する制御信号531を生成する。具体的には、制御回路532は信号線302を介してプリロードレジスタが何本使用されるかの情報を受取り、予め、書込みカウンタ534のカウントアップ方法を決定しておく(後述)。その後制御回路532は、信号線535を入力するたびに信号線533を介して書込みカウンタ534をカウントアップし、その値が信号線531に出力される。
【0057】
信号線531によるプリロードレジスタ群4−0〜3の書込み位置の指定は以下のようにする必要がある。すなわち、前のサイクルで配列Aのある要素位置に書込みを行なった場合に書込みカウンタ534が一つカウントアップされると、配列Bの同一の要素位置に書込みが行なわれるようにする。前のサイクルで配列Dの同一の要素位置への書込みを行なった場合に書込みカウンタ534が一つカウントアップされると、配列Aの次の要素位置に書込みが行なわれるようにする。プリロードレジスタ群4−0〜3の要素方向の容量は有限なため、書込みカウンタ534の値がプリロードレジスタ群4−0〜3の要素方向の容量に等しくなったら、書込みカウンタ534の値は0にラップアラウンドするようにする。そのためには、図10に示すように書込みカウンタW534を操作する。
【0058】
図10は、制御回路532および2進表現で表した書込みカウンタW534を示している。ここで各PRの要素方向の容量は64要素としている。すなわち書込みカウンタWの下位5ビットで32本のPR番号を、上位6ビットで要素番号を表現する。制御回路532は信号線302を介し記憶回路5320にプリロードレジスタが4本しか使われないことを記憶しておき、以下のように書込みカウンタW534を制御する。
【0059】
基本的には制御回路532は信号線535によりプリロードレジスタ群4−0〜3への書込みを指示されるたびに加算回路5321を介して書込みカウンタW534の最下位ビットを1ずつカウントアップする。下位5ビットはPR番号として信号線531−1に出力される。制御回路532はプリロードレジスタが4本しか使用されないことを記憶しているので、カウントアップ時に下から3ビット目への桁上がりが生じるかどうかを比較回路5322により監視し、生じた場合はそれを上位6ビットに桁あげするようにセレクタ5324および加算回路の出力5328の上位6ビットへの設定を制御する。上位6ビットは要素番号として信号線531−0に出力される。これにより、PR0、PR1、PR2、PR3と書込まれた後は、PR0の次の位置に書込みを行なうことができる。また最上位ビットからの桁あふれが生じるときは書込みカウンタ534の値を0にラップアラウンドさせる。これにより4本のPRの全要素位置に書込みが行なわれた後は、PR0の最小要素位置からふたたび書込みをおこなうことができる。
【0060】
以上のように制御することにより、各プリロードレジスタ群4−0、4−1、4−2、4−3の書込み位置の選択は全て信号線531の値により制御され、プリロードレジスタ群4には同時に発行されたプリロードリクエストにより読み出された4つの配列要素が同期して同じ要素位置に書込まれる。
【0061】
こうして、主記憶から並列にプリロードされた4つのデータが、4つのプリロードレジスタ群の分散して、かつ、順次異なる記憶位置に書き込まれる。すなわち図4に例示するように、プリロードレジスタ群4−0、4ー1、4ー2、4−3には、まず同時並列的にPR0(すなわち400ー0、401ー0、402ー0、403ー0)にデータA(1)、A(2)、A(3)、A(4)が書込まれ、続いて同時並列的にPR1(すなわち400ー1、401ー1、402ー1、403ー1)にデータB(2)、B(4)、B(6)、B(8)が書き込まれる。以下PR2にC(2)、C(3)、C(4)、C(5)、PR3にD(1)、D(2)、D(3)、D(4)が書込まれ、再びPR0にA(5)、A(6)、A(7)、A(8)が書込まれる。さらにPR0、PR1、PR2、PR3の全要素位置にデータが書込まれると、再びPR0の最初の要素位置(図4にA(1)が記されている要素位置)にデータが上書きされる。最初の要素位置への上書きは、上書きされるデータがプロセッサに読み出されるのを待ってから行なわれる。この制御に関しては後述する。
【0062】
なお、書込みカウンタ534の値は、そのサイクルでカウントアップされたかの情報が信号線544に出力され、データ保証回路540によるデータ書込み/読み出しの順序性保証にも使用される。
【0063】
(プロセッサによるプリロードデータの読み出し)
各プロセッサは、プリロードされたデータのうち、そのプロセッサに対応するプリロードレジスタ群に保持された複数のデータを、それらのデータがプリロードされた順に使用するようにプログラムされている。
【0064】
たとえば、図3の(b)に、図2のループ処理を実行するための各プロセッサで実行される機械語命令列の一例を示す。この命令列は、プロセッサ3−0〜3の各々で独立に実行される。この命令列では、プリロードレジスタ群を指定する複数のロード(LD)命令を含む。本実施例では、後に説明するように、これらの命令が実行されたとき、プリロード部2は、その命令列を実行するプロセッサ、たとえば、3−0に対応するプリロードレジスタ群、たとえば、4−0にプリロードされた複数のデータをそれらの命令が実行される順番にしたがって順次読み出すようになっている。
【0065】
図3の(b)のプログラムでは、プリロードレジスタ群PRを指定する最初のLD(ロード)命令である(1)の命令が実行されると、そのプロセッサに対応するプリロードレジスタ群内のPR0内のの0番目の要素が読み出され、この命令は、このデータをそのプロセッサ内の汎用レジスタGR0にロードすることを要求することになる。すなわち例えばプロセッサ3−0では配列要素A(1)がロードされる。以下同様に(2)、(3)の命令を実行すると、GR1に配列要素B(2)を、GR2に配列要素C(2)を、GR5に配列要素D(1)をロードすることになる。このループは、(1)〜(8)の命令による処理をループ長N/4回繰り返す。勿論、この繰返し時には、プリロードを要求する命令が再度実行されたときには、後続のプリロード済みのデータを読み出すことになる。
【0066】
今の例では、プリロードレジスタ群4−0からはデータA(1)、B(2)、C(2)、D(1)、A(5)、、、がこの順に読み出される。したがって、この機械語命令列は、各プロセッサに対応するプリロードレジスタ群にプリロードされた複数のデータを、それらのデータがプリロードされた順に使用するようにプログラムされていなければならない。
【0067】
さて、いずれかのプロセッサ3−i(i=0、1、2または3)で、プリロードレジスタ群を指定するロード命令を実行したとき、そのプロセッサは、ロードリクエストRQiをプリロード部2の読み出し制御部560に供給するようになっている。
【0068】
図7は読み出し制御部560の構成図である。読み出し制御部560は、独立非同期に動作するプロセッサ3−0〜3から独立非同期に送出されるロードリクエストRQ0〜3を受けて、必要なデータが既にプリロードレジスタ群4に書込まれていればそれを信号線561−0〜3に出力し、書込まれていなければそれを抑止する。必要なデータが既にプリロードレジスタ群4に書込まれているかどうかは、後に説明する方法でデータ保証制御部540から信号線545−0〜3により通知される。
【0069】
プロセッサ3−iからロードリクエストRQiが送出されると、読み出し制御部560は、信号線561−iを介してプリロードレジスタ群4−iの読み出しを制御する。その際、プリロードレジスタ400−i内のデータが、それらのプリロード順に信号線430−0〜3、431−0〜3、432−0〜3、433−0〜3とセレクタ440、441、442、443を介して読み出されて信号線Diを介してプロセッサ3−iに送出される。
【0070】
どのプリロードレジスタの何番目の要素位置からデータを読み出すべきかの管理にプロセッサ対応のリードカウンタR0、R1、R2、R3が用いられる。プロセッサ3−0〜3の動作は独立であり、プリロードレジスタからの読み出しも独立に行なわれるため、各々のプロセッサが読み出すデータのプリロードレジスタ番号、要素番号は独立である。
【0071】
制御回路562−0〜3は、信号線545−0〜3の値が書込み済みを示し、かつ信号RQ0〜3が送出された時のみ、信号線563−0〜3を介して読み出しカウンタ(R0〜3)564−0〜3をカウントアップし、信号線561−0〜3を介してプリロードレジスタ群4−0〜3の読み出しを行なう。読み出しカウンタR0〜3によるプリロードレジスタ群4−0〜3の読み出し要素位置の指定方法および読み出しカウンタR0〜3のカウントアップ制御方法は、書込みカウンタ534と同じである。すなわち、制御回路562−0〜3は、予め信号線302を介して何本のプリロードレジスタが使用されるかの情報を得、読み出しカウンタR0〜3の下位5ビットが4本のPR番号、上位6ビットが要素番号を示すようにカウントアップを行なう。各プロセッサからのロードリクエストは信号線RQ0〜3の送出とは独立に行なわれるため、読み出しカウンタR0、R1、R2、R3の値は独立にカウントアップされ、プリロードレジスタ群4−0、4ー1、4−2、4−3の読み出し位置は異なっていることがある。
【0072】
また、各読み出しカウンタR0、R1、R2、R3、がそのサイクルでカウントアップされたかの情報は、信号線546−0〜3を介してデータ保証制御部540にも出力される。
【0073】
(データ保証制御部)
図8はデータ保証制御部540の構成図である。信号線542は、リクエストカウンタRQ521がカウントアップされたかを示す。すなわち本信号は、プリロードリクエストA0〜3が主記憶1に送出されたかを意味する。信号線546−0〜3は、読み出しカウンタR0〜3(564−0〜3)の各々がカウントアップされたかを示す。すなわち本信号は、プロセッサ3−0〜3が各々プリロードレジスタ群4からデータを読み出したかを意味する。信号線544は、書込みカウンタW534がカウントアップされたかを示す。すなわち本信号は、主記憶1からプリロードレジスタ群4にデータが書込まれたかを意味する。一方出力信号である信号541は、プリロードリクエスト部500にプリロードリクエスト送出の抑止を指示する。また出力信号545−0〜3は、読み出し制御部560に対して出力され、読み出したいデータがプリロードレジスタ群4に書込み済みかをプロセッサ対応に示す。
【0074】
プリロードリクエスト送出を抑止すべきかの決定は以下のように行なう。
【0075】
プリロードレジスタ上にまだ読み出されていないデータがある場合、プリロードレジスタの再利用のために、新たなデータを上書きしてしまうようなプリロードリクエストの送出は防がなければならない。そのために、リクエストカウンタRQ521の値が、各読み出しカウンタR0〜3の値のいずれかに等しくなりそうな時に、プリロードリクエスト送出抑止信号541を送出する。
【0076】
生成回路550は、信号線542の値をもとに、RQ521の値の写しを生成する。生成回路551−0〜3は、信号線546−0〜3の値をもとに、各々R0〜3の値の写しを生成する。なお、信号線542および546−0〜3を使用してRQ521およびR0〜3の値を直接受け取ってもよい。比較回路553−0〜3は、各々信号線556、557−0〜3を介して受け取ったR0〜3の値の写しからRQ521の値の写しを減じ、その値が1以下のとき信号線559−0〜3に1を出力する。OR回路555は、信号線559−0〜3のいずれかが1の時信号線541に1を出力する。上記により、次のサイクルでプリロードリクエストを出力してRQ521の値が1加算されてしまうと、RQ521の値がR0〜3の値のいずれかに等しくなってしまうタイミングで、プリロードリクエスト送出抑止信号541が送出される。
【0077】
一方、読み出したいデータが書込み済みかは、各読み出しカウンタR0〜3の値が書込みカウンタW534の値より小さいかどうかにより、プロセッサ対応に決定する。
【0078】
生成回路552は、信号線544の値をもとに、Wの値の写しを生成する。もちろん信号線544を使用してWの値を直接受け取ってもよい。比較回路554−0〜3は、各々信号線558、557−0〜3を介して受け取ったWの値の写しからR0〜3の値の写しを減じ、その値が2以上のとき信号線545−0〜3に1を出力する。上記値が2以上であれば、次のサイクルで読み出しを行なっても、データは既にプリロードレジスタ群に書込み済みである。
【0079】
上記により、データ保証制御部540は、まだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、またプリロードレジスタへのデータ書込みを読み出しが追い越さないように、プリロードリクエスト部500、書込み制御部530、読み出し制御部560を制御することができる。
【0080】
以上述べてきたように、プリロードリクエスト送出、プリロードデータ書込みおよび読み出しを制御することにより、主記憶へのアクセスは一括して行ない(メモリアクセスが連続アドレスになることが多いため効率がよい)、一方で各プロセッサの動作は独立で実施(プロセッサの稼働率が向上する)することができる。
【0081】
<実施例2>
本実施例は、主記憶を共有する複数のスカラプロセッサにより主記憶にストアすべき複数のデータを一時的に各プロセッサ対応に設けたバッファに保存し、後に、それらのバッファに保持されたストアすべき複数のデータをまとめて主記憶にポストストアするデータ処理装置を示す。
【0082】
(装置の概要)
図11において、プロセッサ3−0〜3は図12に示すFORTRANのDOループを分担処理する。主記憶1とプロセッサ群3−0〜3の間にポストストアを実行するポストストア部12がある。ポストストア部12はポストストア動作を制御するポストストア制御部15とポストストアするデータを保持するポストストアレジスタ群14に大別されている。ポストストアレジスタ群14は、各々プロセッサ3−0〜3に対応するポストストアレジスタ群14−0〜3に分割されている。
【0083】
本実施例の構造と動作は、実施例1のプリロードがポストストアに変更されている点で実施例1の装置の構造と動作とは異なるが、複数の配列のデータをまとめて処理する点では類似の点がある。したがって、以下では、主として相違する部分を簡単に説明する。
【0084】
DOループの分担実行に先立ち、プロセッサ3−0〜3のいずれかのプロセッサは信号線300ー0〜3、オア回路301、信号線302を介してポストストア制御部15に、DOループ内の全ての配列A、B、C、Dの先頭アドレスとストライド、ループ長Nおよびプロセッサの添え字分担態様を含むポストストア情報を指示する。ここでは添え字分担態様としてCyclic分割が指定された場合を主に説明する。
【0085】
続いてプロセッサ3−0〜3は各々独立にループ処理を実行し、その実行途中で、主記憶1にストアすべきデータが得られたとき、ストアリクエストSRQ0〜3をポストストア制御部15に送出するとともに、ストアデータSD0〜3を各プロセッサ対応のポストストアレジスタ群14−0〜3に送出する。ポストストア制御部15は、信号線1561によりストアデータのポストストアレジスタ群14−0〜3への書込みを制御する。またポストストア制御部15は、ポストストアレジスタ群14−0〜3にデータがある程度たまったら、あらかじめ指示されたポストストア情報に基づきプロセッサ3−0〜3の各々がストアすべき配列要素のアドレスA0〜3を計算して、一括して主記憶1に出力するとともに、信号線1531の制御によりポストストアデータPSD0〜3をポストストアレジスタ群14−0〜3から読み出して主記憶1に送出する。
【0086】
図13は図12のDOループを実行する機械語命令列イメージである。
【0087】
(a)のセットアップ処理はプリロード時と同じである。ただしSR0〜3、BR0〜3は各々対応する番号のポストストアレジスタ(PSR)に関するアドレス情報を示す。
【0088】
(b)のループ処理は、プロセッサ3−0〜3の各々が独立に実行する。各々のプロセッサ中にあるGR10にはあらかじめ0がセットされている。(1)のST(ストア)命令にてポストストアレジスタ群PSRを指定すると、汎用レジスタGR0の内容が、そのプロセッサに対応するポストストアレジスタ群内のポストレジスタPSR0の最少の要素位置から格納される。引き続く(2)〜(4)のST命令で、汎用レジスタGR1、GR2、GR3の内容が、そのプロセッサに対応するポストストアレジスタ群内のPSR1PSR2、PSR3内の最小の要素位置から格納される。以上をループ長N/4回繰り返す。
【0089】
本実施例では、各プロセッサは、ループ処理に表れる複数の配列データを主記憶に格納するとき、一つの配列データの複数の要素を続けてストアするのではなく、順次異なる配列データに属する複数の要素を順次ストアするようになっている。したがって、図13の各ストア命令は、本実施例では、順に配列データA、B、C、Dの順にストアを要求するようになっている。これによりポストストアレジスタ群14−0〜3内には、配列A(I)、配列B(I*2)、配列C(I+1)、配列D(I)の要素がCyclic分割にしたがって分割されて順次格納されることになる。ポストストアレジスタ群14−0〜3に格納された配列A、B、C、Dは、ポストストア部15により自動的に主記憶1に格納される。
【0090】
以上の動作を正しく行なうためのポストストア部の動作を以下詳細に説明する。図14はポストストア部12の構成図である。
【0091】
ポストストアレジスタ群14内にはポストストアレジスタ群14−0〜3があり、各々の中にポストストアレジスタ(PSR)0〜31がある。図では簡単のためポストストアレジスタは4本しか示していない。1400−0、1401−0、1402−0、1403−0が各々ポストストアレジスタ群14−0、1、2、3内のPSR0であり、1400−1、1401−1、1402−1、1403−1が各々ポストストアレジスタ群14−0、1、2、3内のPSR1であり、1400−2、1401−2、1402−2、1403−2が各々ポストストアレジスタ群14−0、1、2、3内のPSR2であり、1400−3、1401−3、1402−3、1403−3が各々ポストストアレジスタ群14−0、1、2、3内のPSR3である。
【0092】
ポストストア制御部15内には、ポストストアリクエスト部1500、読み出し制御部1530、データ保証制御部1540、書込み制御部1560がある。
【0093】
各プロセッサ3−0〜3からストアリクエストが信号線SRQ0〜3を介して送出されると、書込み制御部1560は、信号線1561−0〜3、セレクタ1440、1441、1442、1443を介してポストストアレジスタ群14へのデータSD0〜3の書込みを制御する。どのポストストアレジスタの何番目の要素位置にデータを書込むべきかの管理にプロセッサ対応の書込みカウンタW0、W1、W2、W3が用いられる。プロセッサ3−0〜3の動作は独立であり、ポストストアレジスタへの書込みも独立に行なわれるため、各々のプロセッサが書込むデータのポストストアレジスタ番号、要素番号は独立である。各ポストストアレジスタ内には、配列の各要素がCyclicに格納される。
【0094】
読み出し制御部1530はポストストアレジスタ群4からデータPSD0〜3の読み出しを、信号線1531、セレクタ1410、1411、1412、1413を介して制御する。どのポストストアレジスタの何番目の要素位置からデータを読み出すべきかの管理に読み出しカウンタRが用いられる。読み出しは、ポストストアレジスタ群14−0、1、2、3内の同じPSRの同じ要素位置から行なわれる。
【0095】
あらかじめプロセッサ3−0〜3のいずれかから送出されたセットアップ情報は、信号線302を介してポストストアリクエスト部1500内のLR、DR、BR、SRに設定されている。ポストストアリクエスト部1500は設定された情報に基づき各プロセッサからストアすべきアドレスを計算し、読み出し制御部1530によるデータのPSD0〜3への読み出しと同期して、信号線A0〜3にアドレスを送出して主記憶1にポストストア要求を出す。ポストストア要求をどれだけ送出したかの管理にリクエストカウンタRQが用いられる。
【0096】
データ保証制御部1540は、ポストストアレジスタへのプロセッサからのデータ書込みをポストストアリクエストによる読み出しが追い越さないように、またまだ読み出していないポストストアデータのある位置に別のストアデータを上書きしないように、信号線1541、1544、1545、1546を通じて、書込み制御部1560、読み出し制御部1530、ポストストアリクエスト部1500を制御している。
【0097】
以下、書込み制御部1560、読み出し制御部1530、ポストストアリクエスト部1500、データ保証制御部1540の動作を順次説明する。
【0098】
(書込み制御部1560)
図17は書込み制御部1560の構成図である。書込み制御部1560は、独立非同期に動作するプロセッサ3−0〜3から独立非同期に送出されるストアリクエストSRQ0〜3を受けてストアデータをポストストアレジスタ群14に書込む。プロセッサ3−0〜3からのストアリクエストが、まだポストストアされていないデータを上書きしてしまう場合は、ストアリクエストを抑止する。抑止すべきかはデータ保証制御部1540から送出される信号線1545−0〜3により通知される。制御回路1562−0〜3は、信号線1545−0〜3の値が抑止不要を示し、かつ信号線SRQ0〜3が送出された時のみ、信号線1563−0〜3を介して書込みカウンタW0〜3(1564−0〜3)をカウントアップし、信号線1561−0〜3を介してポストストアレジスタ群14−0〜3への書込みを行なう。書込みカウンタW0〜3(1564−0〜3)の値とカウントアップの方法およびポストストアレジスタ群14への書込み位置の対応は、プリロード時と同じである。信号線SRQ0〜3の送出は独立に行なわれるため書込みカウンタW0(1564−0)、W1(1564−1)、W2(1564−2)、W3(1564−3)の値は独立にカウントアップされ、ポストストアレジスタ群14−0、14ー1、14−2、14−3の書込み位置は異なっていることがある。また、各書込みカウンタW0(1564−0)、W1(1564−1)、W2(1564−2)、W3(1564−3)がそのサイクルでカウントアップされたか否かの情報が、信号線1546−0〜3を介してデータ保証制御部1540に出力される。
【0099】
(読み出し制御部1530)
図16は読み出し制御部1530の構成図である。読み出し制御部1530はデータ保証制御部1540から送出されるポストストア起動信号1541に従い、ポストストアレジスタ群14の然るべき位置からデータを読み出すようセレクタ1410、1411、1412、1413を制御する制御信号1531を生成する。具体的には、制御回路532は、起動信号1541を受けた時のみ、信号線1533を介して読み出しカウンタR1534をカウントアップし、その値が信号線1531に出力される。読み出しカウンタR1534の値とカウントアップの方法およびポストストアレジスタ群14の読み出し位置の対応はプリロード時と同じである。各ポストストアレジスタ群14−0、14−1、14−2、14−3の読み出し位置の選択は全て信号線1531の値により制御されるので、ポストストアレジスタ群14からは同一PSRの同一要素位置からデータが読み出される。また、読み出しカウンタR1534がそのサイクルでカウントアップされたか否かの情報が信号線1544に出力され、データ保証回路1540によるデータ書込み/読み出しの順序性保証に使用される。
【0100】
(ポストストアリクエスト部1500)
図15はポストストアリクエスト部1500の構成図である。ポストストアリクエスト部1500の構成および動作はプリロードリクエスト部500とほとんど同じである。プリロードリクエスト部と全く同じ動作をする構成要素には同じ番号を付してある。
【0101】
ポストストアリクエスト部1500内には、リクエストカウンタRQ521、LR、DR、32本のBR、32本のSRがあるが、図では簡単のため4本しか示していない。またプロセッサ3−0〜3の各々に対応するポストストアリクエスタ0〜3(1503−0〜3)がある。
【0102】
プロセッサ3−0〜3のいずれかから送出されるセットアップ情報は信号線302を介して入力され、各々LR、DR、SR0〜3、BR0〜3に設定される。これらの情報はポストストアリクエスタ0〜3(1503−0〜3)に取り込まれ、各プロセッサに対応したアドレスA0〜3を計算するのに使用される。ポストストアリクエスタ0〜3(1503−0〜3)の動作はほとんど同じため、以下ではポストストアリクエスタ0(1503−0)を例に取り説明する。
【0103】
ポストストアリクエスタ0(1503−0)内には、ワークベースレジスタ508−0〜3、ワークストライドレジスタ512−0〜3、アドレス加算器516があり、これらを用いて毎サイクルアドレスが計算される。ポストストアリクエスタ0内にはさらに初期設定回路504−0〜3があり、プロセッサ3−0に対応した要素アドレスを計算できるよう、ワークベースレジスタ508−0〜3およびワークストライドレジスタ512−0〜3を初期設定する。初期設定の方法はプリロードリクエスタ503−0と同一である。
【0104】
ポストストアリクエスト部1500は、データ保証制御部1540からのポストストア起動信号1541が入力され、かつループ長分の処理を完了していない場合に、ポストストアリクエストを毎サイクルA0〜3に送出する。制御回路1518はこれを制御するための回路であり、ポストストアリクエストを送出した数を計数し、信号線520を介してリクエストカウンタRQ521をカウントアップしている。制御回路1518は、信号線541の値が起動であり、かつポストストアリクエスト送出数が信号線517を介して得たLRの値*総配列数(この場合は4)/プロセッサ台数(この場合は4)を超えない限り、起動信号519をポストストアリクエスタ0〜3(1503−0〜3)に送出する。ポストストアリクエスタ0〜3(1503−0〜3)は起動信号519の値が有効なサイクルのみアドレスを計算し、信号A0〜3を送出する。
【0105】
アドレスの計算の方法はプリロードリクエスタ503−0と同一である。
【0106】
ポストストアリクエスタ1503−0〜3は信号線519の制御により同期して動作するため、以上の動作により、ポストストアリクエスト部1500は、全配列の同一添え字に関してまんべんなく、主記憶1へのポストストア要求を出すことができる。さらにCyclic分割の場合、アドレスA0〜3は連続していることが多いため、主記憶1に対し、連続アクセス要求をまとめて出すことができる。
【0107】
(データ保証制御部1540)
図18はデータ保証制御部1540の構成図である。データ保証制御部1540は、そのサイクルで書込みカウンタW0〜3(1564−0〜3)の各々がカウントアップされたかの情報を示す信号線1546−0〜3と、読み出しカウンタR1534がカウントアップされたかの情報を示す信号線1544を入力として、プロセッサ対応のストア動作抑止信号1545−0〜3およびポストストア起動信号1541を生成する。
【0108】
ストア動作を抑止すべきかどうかは以下のように決定する。
【0109】
ポストストアレジスタ上にまだ主記憶に送出されていないデータがある場合、ポストストアレジスタの再利用のために、新たなデータを上書きしてしまうようなストアリクエストの送出は防がなければならない。そのために、各書込みカウンタW0〜3の値が、読み出しカウンタRの値に等しくなりそうな時に、ストア動作抑止信号1545−0〜3をプロセッサごとに送出する。
【0110】
生成回路1551−0〜3は、信号線1546−0〜3の値をもとに、各々W0〜3の値の写しを生成する。生成回路1552は、信号線1544の値をもとに、Rの値の写しを生成する。なお、信号線1546−0〜3および1544を使用してW0〜3およびRの値を直接受け取ってもよい。比較回路1554−0〜3は、各々信号線1557−0〜3、1558を介して受け取ったRの値の写しからW0〜3の値の写しを減じ、その値が1以下のとき信号線559−0〜3に1を出力する。上記により、次のサイクルでストア動作を行なってW0〜3の値が1加算されると、W0〜3の値がRのに等しくなってしまうタイミングで、各プロセッサごとに、ストア動作抑止信号1545−0〜3が送出される。
【0111】
一方、ポストストアを起動するためには、ポストストアデータがプロセッサからポストストアレジスタ群に書込み済みでなければならない。そこで、全てのW0〜3の値がRの値より大きい時にポストストアを起動する。
【0112】
比較回路1553−0〜3は、W0〜3の値の写しからRの値の写しを減じた値が2以上のとき信号線545−0〜3に1を出力する。上記値が2以上であれば、次のサイクルで読み出しを行なっても、データは既にプリロードレジスタ群に書込み済みである。
【0113】
以上により、データ保証制御部1540は、ポストストアレジスタへのデータ書込みをポストストアによる読み出しが追い越さないように読み出し制御部1530を制御し、また、まだ読み出していないポストストアデータのある位置に別のストアデータを上書きしないように書込み制御部1560を制御する。
【0114】
<実施例3>
実施例1では、ハードウェアが32本のプリロードレジスタを具備していても、機械語命令列で指定された4本のプリロードレジスタしか使用できない。本実施例は、機械語命令列を変更することなく、ハードウェアが具備する全てのプリロードレジスタを使用してプリロードを実施できるように実施例1を変形したものである。具体的には32本のプリロードレジスタを複数本ずつ連結し、論理的に4本のプリロードレジスタと見なされるように、装置が構成される。
【0115】
(用語の定義)
全体構成は図1に示したものと同一である。プロセッサ3−0〜3に各々対応したプリロードレジスタ群4−0〜3ごとに32本のプリロードレジスタ400−0〜31がある。図19はその内プリロードレジスタ群4−0に関してのみ示した図である。以下、本実施例ではハードウェアが実際に具備するプリロードレジスタ400−0〜31を最小単位プリロードレジスタ(IPR)と呼ぶ。このうち複数本ずつが連結されて論理的に1本のプリロードレジスタが構成されるが、これをプリロードレジスタ(PR)と呼ぶ。
【0116】
(全体動作)
以下では、プリロードを実行する場合に関して説明する。ポストストアの制御は本実施例から容易に類推可能である。
【0117】
図19に示すように、プリロードレジスタ群4ー0には各々32本の最小単位プリロードレジスタIPR(400−0〜31)があり、各最小単位プリロードレジスタIPRは64要素を保持する。プリロードレジスタ群4ー1、4ー2、4ー3の構成も同様である。
【0118】
図2のDOループを実現する場合、機械語命令列は実施例1と同じ図3に示したものとなる。しかしプリロード部2は機械語命令列を実施例1とは少し異なる形に解釈する。すなわち、(a)の(1)の命令で使用PR本数は4であることが示されると、32本のIPRを4で除した8本ずつ連結し、連結されたプリロードレジスタを、機械語命令列で指定されるPR0〜3と解釈する。すなわち、プリロードレジスタ群4ー0を例にとれば、400ー0〜7をPR0、400ー8〜15をPR1、400ー16〜23をPR2、400−24〜31をPR3とし、各々64x8=512要素のプリロードレジスタと見なす。各プリロードレジスタ内の要素番号は、400−0の第0〜63要素位置がPR0の第0〜63要素、400−1の第0〜63要素位置がPR0の第64〜127要素となり、以下400−2、、、と連結し、400−7の第0〜63要素位置がPR0の第448〜511要素と解釈される。つまり、あたかも4本の512要素のプロセッサ対応のプリロードレジスタがあるかのごとくプリロード部2は動作する。
【0119】
上記の制御を行なうために、プリロードリクエスト部500の初期設定方式と書込みカウンタW534および読み出しカウンタR0〜3のカウントアップ方式が実施例1とは異なる。各々の動作を図20〜22を用いて以下に説明する。
【0120】
(プリロードリクエスト部初期設定方式)
図3の(a)の(1)の命令が実行されると、32本のIPRを4つに分割して連結する指示が信号線302を介して図20のプリロードリクエスト部500内の連結設定回路524に伝えられる。(2)〜(11)の命令が実行されるとLRにループ長Nが、DRにプロセッサの添え字分担態様が、BR0〜3にそれぞれ配列A、B、C、Dの先頭アドレスが、ストライドレジスタSR0〜3に全プロセッサのアクセスをまとめた場合の配列A、B、C、Dへのアクセスストライドがセットされる。連結設定回路524は信号線525を介して初期設定回路504ー0〜31を制御し、図21に示す情報を信号線505ー0〜31、522ー0〜31に送出させる。これにより、各最小単位プリロードレジスタIPRが、連結されたプリロードレジスタにロードすべきデータの然るべき部分を主記憶1からロードできるように、507−0〜31および512−0〜31が設定されたことになる。以下具体的に配列の各要素が各IPRのどの部分にロードされるよう設定されたかを示す。
【0121】
図21は、プロセッサ3−0〜3に対応するプリロードリクエスタ0〜3において、IPRごとの配列初期アドレスを示す信号線505−0〜31およびストライドアドレスを示す信号線522−0〜31への出力を、プロセッサ番号をp、IPR番号をnとしてまとめて表示したものである。機械語命令列により指定された使用プリロードレジスタ本数をprn(図2の命令列の場合4)とすると、IPRはj=32/prn本(この場合32/4=8本)ずつ連結される。ここでn=ixj+kなるiとkを求めると、iはn番目のIPRが何番目のPRに相当するかを示し、kは連結されたi番目のPRのうちn番目のIPRが前から何番目のIPRであるかを示すことになる。さてCyclic分割の場合、配列要素はPR0、PR1、、、と1要素ずつ格納されるべきなので、各PRの先頭のIPRの配列先頭アドレスとして設定されるべきなのは、図9(a)に同じくBRi+SRixpとなる(先頭のIPRということはk=0の場合ということ)。各IPRは64要素を保持し、かつ各配列要素は順次異なるプロセッサで処理されるのだから、各PRのk番目のIPRの配列先頭アドレスとして設定されるべきなのは、上記値にSRix4x64xkを加えたものとなる。またIPR番号にかかわらず、ストライドアドレスはSRix4となる。一方Block分割の場合、各PRは全ループ長LRをプロセッサ台数すなわち4で分割して処理するのであるから、各PRの先頭のIPRの配列先頭アドレスとして設定されるべきなのは、図9(a)に同じくBRi+SRixLR/4xpとなる。各IPRは64要素を保持するので各PRのk番目のIPRの配列先頭アドレスとして設定されるべきなのは、上記値にSRix64xkを加えたものとなる。またIPR番号にかかわらず、ストライドアドレスはSRiとなる。
【0122】
(書込みカウンタおよび読み出しカウンタの更新)
以上より然るべきアドレスが設定されたので、この後は然るべき順序で然るべき要素位置への書込み、読み出しが指示されるように書込みカウンタW534および読み出しカウンタR0〜3のカウントアップが操作されればよい。
【0123】
図22は制御回路532および書込みカウンタW534を示す図である。534はカウンタW534の値を2進表現で表したものである。すなわち下位5ビット(531−1)で32本のIPR番号を、上位6ビット(531−0)でIPRの要素番号を表現する。
【0124】
制御回路532は信号線302により予め32本のIPRを4つに分割することを知らされている。制御回路532は基本的にはプリロードレジスタ群4−0〜3への書込みが信号線535を介して指示されるたびに、書込みカウンタW534の最下位ビットを加算器5330により32/4=8ずつカウントアップする。これによりIPR0の第0要素、IPR8の第0要素、IPR16の第0要素、IPR24の第0要素への書込みの後に、IPR0の第1要素への書込みを行なうことができる。すなわち配列A、B、C、Dに関し同一添え字に関し順次書込みを行なうことができる。
【0125】
IPR24の第63要素への書込みを行なった後に、書込みカウンタW534に8を加えると、最上位ビットからの桁あふれが生じる。比較回路5331はこれを監視しており、この時加算回路5332により生成される書込みカウンタW534の値をラップアラウンドさせさらに1を加ええた値が、書込みカウンタに設定されるようにセレクタ5333を制御する。これにより、以降はIPR1の第0要素、IPR9の第0要素、IPR17の第0要素、IPR25の第0要素と書込みアドレスを指定でき、引続き配列A、B、C、Dに関し同一添え字に関し順次書込みを行なうことができる。さらにIPR25の第63要素への書込みを行なった後に、書込みカウンタW534に8を加えると、最上位ビットからの桁あふれが生じ、ラップアラウンドした値は1を指す。ここにさらに1を加えることにより、以降はIPR2の0要素に書込みを行なうことができる。
【0126】
読み出しカウンタR0〜3(564−0〜3)の制御についても全く同様に行なうことができる。
【0127】
以上のように制御することにより、最小単位のプリロードレジスタを複数連結して論理的に一つのレジスタとしてアクセスすることができ、プログラム中に現れる配列の数に応じた数のプリロードレジスタを提供することができる。
【0128】
<実施例4>
本実施例は、一度の主記憶アクセスにより、プロセッサの台数の複数倍のデータをまとめてプリロード可能になるように、実施例1を変形したものである。したがって、上記の実施例1を変更すべき点を中心に述べる。ここでは倍数は一例として2倍とする。この実施例の考えは、ポストストアに関しても全く同じであり、また実施例3にも適用できる。
【0129】
全体構成は図1にほぼ同じである。ただしA0〜3およびPD0〜3は2重化し、1サイクルで2要素分のプリロードデータおよび主記憶アドレスを送出できるようにする。
【0130】
実施するプログラムの機械語命令列イメージは図3に同じである。プリロードの単位がプロセッサ台数の2倍になってもプログラムには何の変更もなく、プロセッサ3−0〜3は各々1要素ずつプリロードレジスタ群4−0〜3からデータを読み出して処理する。
【0131】
プリロード部2の構成は以下のように修正する。
信号線420−0〜3、421−0〜3、422−0〜3、423−0〜3は2重化し、1サイクルで2要素分のプリロードデータの処理ができるようにする。また、プリロードレジスタへの書込みは、信号線531で示されたプリロードレジスタの、指定された要素位置、およびそれに1を加えた要素位置に行なうよう制御する。
【0132】
プリロードリクエスト部500には、図23に示すように、図5に較べ、各プリロードリクエスタ503−0〜3にアドレス加算器2516が追加される。図23においてワークベースレジスタ507−0〜3、ワークストライドレジスタ512−0〜3の初期設定方法は図5に同じである。制御回路518は信号線541の値がプリロード抑止でなく、かつプリロードリクエスト送出数が信号線517を介して得たLRの値*総配列数/プロセッサ台数/2を超えない限り、プリロード起動信号519をプリロードリクエスタ0〜3(503−0〜3)に送出する。
【0133】
プリロードリクエスタ503−0は、起動信号519を受けるたびにアドレス計算を2つの加算器516、2516を用いて行ない、2つのプリロードリクエストを信号線A0を介して送出する。アドレスの計算は、以下のように行なう。すなわち、アドレス加算器516では図5と同じく信号線511、515を介して得たワークベースレジスタ、ワークストライドレジスタの値を加算して信号線A0に出力する。アドレス加算器2516では、信号線515を介して得たワークストライドレジスタの値を2倍して、信号線511を介して得たワークベースレジスタの値に加え、信号線A0に出力する。読み出されたワークベースレジスタは、アドレス加算器2516の出力値に更新される。
【0134】
リクエストカウンタRQ521のカウントアップ方法およびその値によるワークベースレジスタ、ワークストライドレジスタの選択方法は図5に同じである。すなわち、ワークベースレジスタ、ワークストライドレジスタは、リクエストカウンタRQ521がカウントアップされるごとに順次配列A、配列Bと切り替わる。信号542には図5と同様、そのサイクルでリクエストカウンタ52R1Qがカウントアップされたかどうかを示す情報が出力される。この信号がカウントアップを示すときは、2要素分のプリロードリクエスト送出が行なわれたことを意味する。
【0135】
書込み制御部530の構成および動作は図6に同じである。書込みカウンタ534の操作は、図10に示すのとほとんど同じだが、全配列に関して同一要素位置に対するプリロードを行なったら、次のサイクルでは書込みカウンタ534が次の次の要素位置を示すよう制御する必要がある。そのため、図10において書込みカウンタ534の下3ビット目への桁上がりがあった場合は、制御回路532は、上位6ビットに2を加える。また、図6の信号線544には、そのサイクルで書込みカウンタ534がカウントアップされたかどうかを示す情報が出力されるが、この信号がカウントアップを示すときは、2要素分の書込みが行なわれたことを意味する。
【0136】
読み出し制御部560の構成および動作は図7と全く同じである。読み出しカウンタR0〜3(564−0〜3)の操作は、実施例における動作と全く同じである。すなわち、読み出しカウンタR0〜3(564−0〜3)の下3ビット目への桁上がりがあった場合は、上位6ビットに1を加えるように制御される。信号線546−0〜3は各読み出しカウンタR0〜3(564−0〜3)がカウントアップされたかを示すが、この信号がカウントアップを示すときは、1要素分の読み出しが行なわれたことを意味する。
【0137】
データ保証制御部540の構成は図8に同じである。ただし信号線542は2要素分のプリロード要求が行なわれたことを、信号線544は2要素分のプリロードによる書込みが行なわれたことを、信号線546−0〜3は1要素分のロードによる読み出しが行なわれたことを示す。そのため制御回路550は信号線549を受けたとき差分カウンタ552を1カウントアップし、信号線542を受けたとき差分カウンタ552を2カウントダウンする。また制御回路555−0〜3は信号線544を受けたとき差分カウンタ557−0〜3を2カウントアップし、各々信号線546−0〜3を受けたとき差分カウンタ557−0〜3を1カウントダウンする。以上により、データ保証制御部540は、プリロードレジスタへのデータ書込みをロードリクエストによる読み出しが追い越さないように、またまだ読み出していないプリロードデータのある位置に別のプリロードデータを上書きしないように、プリロードリクエスト部500、書込み制御部530、読み出し制御部560を正しく制御することができる。
【0138】
【発明の効果】
本願第1の発明によれば、複数のスカラプロセッサにより分担して処理される処理中に含まれる複数の配列の要素のごとき、複数群のデータを、多バンク構成の主記憶の連続するアドレスを有する記憶位置からプリロードするのに適した、回路構造の簡単なデータ処理装置が得られる。
【0139】
本願第2の発明によれば、複数のスカラプロセッサにより分担して処理される処理の結果生成される複数の配列の要素のごとき、複数群のデータを、多バンク構成の主記憶の連続するアドレスを有する記憶位置にポストストアするのに適した、回路構造の簡単なデータ処理装置が得られる。
【0140】
本願第3の発明によれば、プリロード用のキャッシュの容量を越えて、複数のスカラプロセッサにより分担して処理される繰返し処理で使用される一群のデータがプリロード可能にする、回路構造の簡単なデータ処理装置が得られる。
【図面の簡単な説明】
【図1】本発明の実施例1による、プリロード可能なデータ処理装置の全体構成図。
【図2】図1の装置が実行する処理を表わすFORTRANプログラムの例を示す図。
【図3】図2のプログラムに対して図1の各プロセッサが実行する機械語命令列の例を示す図。
【図4】図1の装置に使用するプリロードレジスタ群とプリロード制御部の構成図。
【図5】図1の装置に使用するプリロードリクエスト生成部の構成図。
【図6】図1の装置に使用する、プリロードレジスタに対する書込み制御部の構成図。
【図7】図1の装置に使用するプリロードレジスタに対する読み出し制御部の構成図。
【図8】図1の装置に使用するプリロードレジスタ書込み/読み出し順序保証部の構成図。
【図9】図5の装置に使用される初期設定回路が設定するアドレス関連情報の値を示す図。
【図10】図6の書込みカウンタのカウントアップ動作を説明する図。
【図11】本発明の実施例2による、ポストストアを実行可能なデータ処理装置の全体構成図。
【図12】図11の装置で実行される処理を表わすFORTRANプログラムの例を示す図。
【図13】図12のFORTRANプログラムに対する機械語命令列の例を示す図。
【図14】図11の装置に使用されるポストストアレジスタ群およびポストストア制御部の構成図。
【図15】図11の装置に使用されるポストストアリクエスト生成部の構成図。
【図16】図11の装置に使用される、ポストストアレジスタに対する読み出し制御部の構成図。
【図17】図11の装置に使用される、ポストストアレジスタに対する書込み制御部の構成図。
【図18】図11の装置で使用される、ポストストアレジスタに対する書込み/読み出し順序保証部の構成図。
【図19】本発明の実施例3によるデータ処理装置で使用されるプリロードレジスタ群の構成図。
【図20】上記実施例3によるデータ処理装置で使用されるプリロードリクエスト生成部の構成図。
【図21】上記実施例3によるデータ処理装置で初期設定回路が設定するアドレス関連情報の値を示す図。
【図22】上記実施例3によるデータ処理装置で書込みカウンタのカウントアップ動作を説明する図。
【図23】本発明の実施例4によるデータ処理装置で使用されるプリロードリクエスト生成部の構成図。
【符号の説明】
LR…レングスレジスタ、DR…分割レジスタ、BR…ベースレジスタ、SR…ストライドレジスタ、516、2516…アドレス加算器、521…リクエストカウンタ、534…(プリロードの)書込みカウンタ、564…(プリロードの)読み出しカウンタ、1534…(ポストストアの)読み出しカウンタ、1564…(ポストストアの)書込みカウンタ、。
Claims (8)
- 主記憶と、
該主記憶に保持された、それぞれ順序付けられた複数のデータからなる複数のデータ群に対して実行すべき処理を分担して実行する複数のプロセッサと、
それぞれ該複数のプロセッサの一つに対応して設けられ、該主記憶と該複数のプロセッサとの間に位置する複数のバッファと、
該複数のバッファに対して共通に設けられ、上記複数のプロセッサのいずれか一つから与えられたプリロード要求に応答して、そのプリロード要求が指定する複数のデータ群を該主記憶から読み出す主記憶読み出し回路であって、各データ群に属するデータを、それぞれ該複数のプロセッサの数と同数のデータからなる複数の部分データ群に分けて読み出すように、かつ、異なるデータ群に属する部分データ群を順次読み出すように、さらに、各データ群の各部分データ群に属する複数のデータを並列に読み出すように、上記指定された複数のデータ群を読み出すものと、
上記主記憶読み出し回路により読み出された複数の部分データ群の各々に含まれる複数のデータを、上記複数のバッファに分散して、かつ、並列に書き込むバッファ書き込み回路と、
それぞれ該複数のプロセッサの一つに対応して設けられた複数のバッファ読み出し回路であって、それぞれ対応するプロセッサから順次供給される複数のロードリクエストに応答して、そのプロセッサに対応して設けられた一つのバッファに保持された複数のデータを、それらのデータがそのバッファに格納された順番に従って順次読み出し、その対応するプロセッサに転送するものとを有するデータ処理装置。 - 該主記憶読み出し回路は、
それぞれ該複数のバッファの一つに対応して設けられ、それぞれ該主記憶からその対応するバッファに対応するプロセッサに供給すべき複数のデータを読み出すための読み出し要求を順次出力する複数の読み出し要求回路と、
それぞれ該複数の読み出し要求回路の一つにより出力された複数の読み出し要求を該主記憶に並列に供給する回路とを有し、
各読み出し要求回路は、
それぞれ上記プリロード要求が指定した該複数のデータ群の内、いずれか一つのデータ群に属する一部のデータを読み出すための複数のアドレスを順次出力する複数のアドレス生成回路と、
該複数のアドレス生成回路により出力された複数のアドレスを、該複数のアドレス生成回路に対して定めた所定の順番に従って順次選択し、選択されたアドレスを含む読み出し要求を出力する回路とを有し、
各アドレス生成回路により生成される複数のアドレスは、上記複数のデータ群の内、いずれか一つのデータ群を構成する複数の部分データ群の異なるものにそれぞれ属し、その読み出し要求回路が対応するいずれか一つのバッファに対応するプロセッサに供給すべき複数のデータのアドレスである請求項1記載のデータ処理装置。 - それぞれ上記複数のアドレス生成回路に対応して設けられ、該複数のプロセッサの少なくとも一つにより選択可能な複数のデータ記憶回路と、
該少なくとも一つのプロセッサにより指定され、それぞれプリロードすべき一つのデータ群を指定する複数のプリロード情報の各々を、該複数の記憶回路の内、それぞれのプリロード情報に対して該少なくとも一つのプロセッサにより指定された一つに格納する手段をさらに有し、
各アドレス生成回路は、上記複数の記憶回路の内、そのアドレス生成回路に対応する一つの記憶回路に格納されたプリロード情報が指定する一つのデータ群を構成する複数の部分データ群の異なるものにそれぞれ属し、そのアドレス生成回路が属する読み出し要求回路が対応するいずれか一つのバッファに対応するプロセッサに供給すべき複数のデータを読み出すためのアドレスを順次生成する回路を有する請求項2記載のデータ処理装置。 - 該複数のバッファの各々は、複数の順序付けられた部分領域に区分され、
該バッファ書き込み回路は、該主記憶読み出し回路により異なる部分データ群が読み出される毎に、読み出された部分データ群に含まれた複数のデータの各々を書き込むべき、各バッファ内の部分領域を予め定めた順に順次切り替える回路を有し、
各バッファ読み出し回路は、対応するプロセッサからの複数の読み出し要求に応答して、そのプロセッサに対応するバッファに保持されたデータを、所定の部分領域の順にしたがって、順次異なる部分領域から順次読み出す回路を有する請求項1記載のデータ処理装置。 - 該複数のバッファの各々は、複数の順序付けられた部分領域に区分され、
該バッファ書き込み回路は、該プリロード要求を発行したプロセッサにより指定された、プリロードすべきデータ群の群数でもって、各バッファの複数の部分領域を分割して得られる、該群数に等しい複数の部分領域群に、該主記憶から順次読み出された異なる部分データ群のデータの内、そのバッファに対応するプロセッサにより処理されるべきデータを順次書き込み、かつ、各バッファの同一の部分領域群に属する複数の部分領域には順次所定の部分領域の順に従って、上記主記憶から読み出された複数の部分データ群内のデータの内、いずれか一つの部分データ群に属する複数のデータが順次書き込まれるように、該主記憶から読み出された複数の部分データ群を書き込む回路を有し、
各バッファ読み出し回路は、対応するプロセッサからの複数の読み出し要求に応答して、そのプロセッサに対応するバッファに保持されたデータを、所定の部分領域群の順番で決まる順次異なる部分領域群に属し、かつ、同一の部分領域群内の部分領域に対して定められた所定の部分領域の順で決まる順次異なる部分領域から順次読み出す回路を有する請求項1記載のデータ処理装置。 - 該複数のバッファの各々は、複数の順序付けられた部分領域に区分され、
上記主記憶読み出し回路は、一度には一つのデータ群内の、隣接する順番を有する所定の複数の部分データ群に属する複数のデータを並列に該主記憶から読み出す回路からなり、
該バッファ書き込み回路は、該主記憶読み出し回路により並列に読み出された該所定の複数の部分データ群に属する複数のデータが、該複数のバッファに分散して、かつ、並列に書き込まれ、かつ、該所定の複数部分データ群の異なるものに属し、いずれかのプロセッサにより処理されるべき複数のデータが、そのプロセッサに対応して設けられたバッファ内の、相隣接する該所定の複数に等しい数の部分領域に並列に書き込まれるように、該読み出された該所定の複数の部分データ群のデータを書き込む回路からなる請求項1記載のデータ処理装置。 - 各バッファに書き込まれたデータの内、そのバッファに対応するプロセッサに転送されていない未読み出しデータの数を検出し、該複数のバッファの各々に対して検出された未読み出しデータ数の内の最小値を検出する回路と、
各バッファに保持可能な数のデータを各バッファに書込んだ後は、該検出された最小値が0のときに、該主記憶読み出し回路による、該複数のデータ群の後続の部分データ群の読み出しを禁止する回路とを有し、
該バッファ書き込み回路は、各バッファに保持可能な数のデータをそのバッファに書き込んだ後にさらに該主記憶から読み出された後続の部分データ群を、各バッファ内の、そのバッファに対応するプロセッサにすでに転送された読み出し済みデータを保持する記憶位置に書き込む回路を有する請求項1記載のデータ処理装置。 - 該複数のバッファに対応して設けられた複数の検出回路であって、各検出回路は、その対応するバッファに書込まれたデータの内、該バッファ読み出し回路によりそのバッファからまだ読み出されていない未読み出しデータの数を検出するものと、
各バッファに対して検出された未読み出しデータの数が0のときに、そのバッファからの次のデータの読み出しを、そのバッファに対応して設けられたバッファ読み出し回路に対して禁止する回路をさらに有する請求項7記載のデータ処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32799794A JP3598139B2 (ja) | 1994-12-28 | 1994-12-28 | データ処理装置 |
US08/576,131 US5754876A (en) | 1994-12-28 | 1995-12-21 | Data processor system for preloading/poststoring data arrays processed by plural processors in a sharing manner |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32799794A JP3598139B2 (ja) | 1994-12-28 | 1994-12-28 | データ処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08185383A JPH08185383A (ja) | 1996-07-16 |
JP3598139B2 true JP3598139B2 (ja) | 2004-12-08 |
Family
ID=18205358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP32799794A Expired - Fee Related JP3598139B2 (ja) | 1994-12-28 | 1994-12-28 | データ処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5754876A (ja) |
JP (1) | JP3598139B2 (ja) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7266725B2 (en) | 2001-09-03 | 2007-09-04 | Pact Xpp Technologies Ag | Method for debugging reconfigurable architectures |
DE19654595A1 (de) | 1996-12-20 | 1998-07-02 | Pact Inf Tech Gmbh | I0- und Speicherbussystem für DFPs sowie Bausteinen mit zwei- oder mehrdimensionaler programmierbaren Zellstrukturen |
US6542998B1 (en) | 1997-02-08 | 2003-04-01 | Pact Gmbh | Method of self-synchronization of configurable elements of a programmable module |
US8686549B2 (en) * | 2001-09-03 | 2014-04-01 | Martin Vorbach | Reconfigurable elements |
DE19861088A1 (de) | 1997-12-22 | 2000-02-10 | Pact Inf Tech Gmbh | Verfahren zur Reparatur von integrierten Schaltkreisen |
US6243822B1 (en) * | 1997-12-24 | 2001-06-05 | Elbrus International Limited | Method and system for asynchronous array loading |
US6321330B1 (en) * | 1999-05-28 | 2001-11-20 | Intel Corporation | Each iteration array selective loop data prefetch in multiple data width prefetch system using rotating register and parameterization to avoid redundant prefetch |
US8230411B1 (en) | 1999-06-10 | 2012-07-24 | Martin Vorbach | Method for interleaving a program over a plurality of cells |
EP1342158B1 (de) | 2000-06-13 | 2010-08-04 | Richter, Thomas | Pipeline ct-protokolle und -kommunikation |
US7844796B2 (en) | 2001-03-05 | 2010-11-30 | Martin Vorbach | Data processing device and method |
US7444531B2 (en) | 2001-03-05 | 2008-10-28 | Pact Xpp Technologies Ag | Methods and devices for treating and processing data |
US9037807B2 (en) | 2001-03-05 | 2015-05-19 | Pact Xpp Technologies Ag | Processor arrangement on a chip including data processing, memory, and interface elements |
US7996827B2 (en) | 2001-08-16 | 2011-08-09 | Martin Vorbach | Method for the translation of programs for reconfigurable architectures |
US7434191B2 (en) | 2001-09-03 | 2008-10-07 | Pact Xpp Technologies Ag | Router |
US8686475B2 (en) * | 2001-09-19 | 2014-04-01 | Pact Xpp Technologies Ag | Reconfigurable elements |
AU2003208266A1 (en) | 2002-01-19 | 2003-07-30 | Pact Xpp Technologies Ag | Reconfigurable processor |
US20110161977A1 (en) * | 2002-03-21 | 2011-06-30 | Martin Vorbach | Method and device for data processing |
US8914590B2 (en) | 2002-08-07 | 2014-12-16 | Pact Xpp Technologies Ag | Data processing method and device |
US7133972B2 (en) * | 2002-06-07 | 2006-11-07 | Micron Technology, Inc. | Memory hub with internal cache and/or memory access prediction |
US7117316B2 (en) | 2002-08-05 | 2006-10-03 | Micron Technology, Inc. | Memory hub and access method having internal row caching |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
US7394284B2 (en) | 2002-09-06 | 2008-07-01 | Pact Xpp Technologies Ag | Reconfigurable sequencer structure |
US7400421B2 (en) * | 2002-12-12 | 2008-07-15 | Seiko Epson Corporation | Image processing method and image processing system using the same |
JP2006524850A (ja) * | 2003-04-04 | 2006-11-02 | ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト | データ処理方法およびデータ処理装置 |
US7330992B2 (en) | 2003-12-29 | 2008-02-12 | Micron Technology, Inc. | System and method for read synchronization of memory modules |
WO2007082730A1 (de) * | 2006-01-18 | 2007-07-26 | Pact Xpp Technologies Ag | Hardwaredefinitionsverfahren |
US20100281235A1 (en) * | 2007-11-17 | 2010-11-04 | Martin Vorbach | Reconfigurable floating-point and bit-level data processing unit |
WO2009068014A2 (de) * | 2007-11-28 | 2009-06-04 | Pact Xpp Technologies Ag | Über datenverarbeitung |
US20110119657A1 (en) * | 2007-12-07 | 2011-05-19 | Martin Vorbach | Using function calls as compiler directives |
US8312442B2 (en) * | 2008-12-10 | 2012-11-13 | Oracle America, Inc. | Method and system for interprocedural prefetching |
US8850162B2 (en) | 2012-05-22 | 2014-09-30 | Apple Inc. | Macroscalar vector prefetch with streaming access detection |
US10380034B2 (en) * | 2017-07-14 | 2019-08-13 | International Business Machines Corporation | Cache return order optimization |
US11782871B2 (en) * | 2021-04-27 | 2023-10-10 | Microchip Technology Inc. | Method and apparatus for desynchronizing execution in a vector processor |
CN116520754B (zh) * | 2023-06-27 | 2023-09-22 | 厦门芯泰达集成电路有限公司 | 基于预加载模式的dps模块控制方法、系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2616116B2 (ja) * | 1990-03-16 | 1997-06-04 | 日本電気株式会社 | データ処理装置 |
US5617575A (en) * | 1991-03-19 | 1997-04-01 | Hitachi, Ltd. | Interprocessor priority control system for multivector processor |
US5392443A (en) * | 1991-03-19 | 1995-02-21 | Hitachi, Ltd. | Vector processor with a memory assigned with skewed addresses adapted for concurrent fetching of a number of vector elements belonging to the same vector data |
US5437043A (en) * | 1991-11-20 | 1995-07-25 | Hitachi, Ltd. | Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers |
-
1994
- 1994-12-28 JP JP32799794A patent/JP3598139B2/ja not_active Expired - Fee Related
-
1995
- 1995-12-21 US US08/576,131 patent/US5754876A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US5754876A (en) | 1998-05-19 |
JPH08185383A (ja) | 1996-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3598139B2 (ja) | データ処理装置 | |
US5517436A (en) | Digital signal processor for audio applications | |
US5513366A (en) | Method and system for dynamically reconfiguring a register file in a vector processor | |
US5437043A (en) | Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers | |
US5649144A (en) | Apparatus, systems and methods for improving data cache hit rates | |
US4888679A (en) | Method and apparatus using a cache and main memory for both vector processing and scalar processing by prefetching cache blocks including vector data elements | |
US4524416A (en) | Stack mechanism with the ability to dynamically alter the size of a stack in a data processing system | |
US6401192B1 (en) | Apparatus for software initiated prefetch and method therefor | |
JP2678183B2 (ja) | デジタルプロセッサ制御装置および実行時記憶割当ての方法 | |
US5809274A (en) | Purge control for ON-chip cache memory | |
JP2625277B2 (ja) | メモリアクセス装置 | |
US4677547A (en) | Vector processor | |
JP2002509312A (ja) | 不整列データ・アクセスを実行するためのデータ整列バッファを有するディジタル信号プロセッサ | |
US5713001A (en) | Circuit for converting address operands supplied by a program to hashed virtual address | |
EP0543366B1 (en) | Data processing method and apparatus | |
EP0772819B1 (en) | Apparatus and method for efficiently determining addresses for misaligned data stored in memory | |
US6078993A (en) | Data supplying apparatus for independently performing hit determination and data access | |
EP0279189B1 (en) | Storage system | |
KR19990037572A (ko) | 뱅크 어드레스 값을 공급하는 다중 소스를 구비하는 프로세서구조 설계 및 그 설계방법 | |
EP0227900B1 (en) | Three address instruction data processing apparatus | |
EP0917048B1 (en) | Address generator and method for single-cycle indirect addressing | |
US6047364A (en) | True modulo addressing generator | |
US5729723A (en) | Data processing unit | |
US5659695A (en) | Method and apparatus utilizing simultaneous memory reads for increasing memory access bandwidth in a digital signal processor | |
JP3735377B2 (ja) | 計算機システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040907 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040913 |
|
LAPS | Cancellation because of no payment of annual fees |