(57)【特許請求の範囲】
【請求項１】
演算処理されるデータである行列データ及びベクトルデータを制御手段により分割して複数の演算部にそれぞれ供給し、この複数の演算部において並列的に演算処理を行う並列演算処理装置であって、
上記各演算部は、
上記行列データの担当行の成分を連続して書き込み及び読み出しが行われる第１の記憶手段と、
上記ベクトルデータの書き込み及び読み出しが行われる第２の記憶手段と、
上記第１の記憶手段及び上記第２の記憶手段から読み出された行列データの担当行の成分及びベクトルデータに基づいて演算を行う演算手段と、
上記制御手段から供給された上記行列データ及びベクトルデータを上記第１の記憶手段及び第２の記憶手段に供給するとともに、上記演算手段からの演算データを上記制御手段に供給する通信手段と、
上記通信手段における各データの入出力制御を行う通信制御手段とから構成されることを特徴とする並列演算処理装置。
【請求項２】
上記第１の記憶手段は、上記行列データの担当行の成分を連続して書き込み及び読み出しを行うシリアルアクセスメモリであることを特徴とする請求項１記載の並列演算処理装置。
【請求項３】
上記第２の記憶手段は、上記ベクトルデータのランダムな書き込み及び読み出しを行うランダムアクセスメモリであることを特徴とする請求項１記載の並列演算処理装置。
【請求項４】
上記第２の記憶手段は、上記ベクトルデータの連続的な書き込み及び読み出しを行うシリアルアクセスメモリであることを特徴とする請求項１記載の並列演算処理装置。
【請求項５】
上記第２の記憶手段は、上記ベクトルデータのランダムな書き込み及び読み出しを行うランダムアクセスメモリ、及び、上記ベクトルデータを連続して書き込み及び読み出しを行うシリアルアクセスメモリであることを特徴とする請求項１記載の並列演算処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、例えば科学技術演算等を行うコンピュータとして用いて好適な並列演算処理装置に関し、特に、上記科学技術演算には膨大なデータ量の行列データが用いられることが多いことに鑑み、該行列データの書き込み及び読み出しを行う記憶手段として、データの連続的な書き込み及び読み出しを行う記憶手段を設け、演算時間の短縮化及び製作コストのローコスト化等を図った並列演算処理装置に関する。
【０００２】
【従来の技術】
近年における技術の発達は、複雑且つ大規模な科学技術計算が可能となってきたためであると言っても過言ではない。上記科学技術計算の計算過程では、非常に大きなサイズの連立１次方程式の求解や行列の固有値計算等、いわゆる行列演算が頻繁に現れる。例えば、上記行列のサイズ（行×列）をｎ×ｎとしたとき演算量は、その行列を係数とする連立一次方程式の演算，逆行列の演算，その行列の固有値の演算及び固有ベクトルの演算等、何れの場合も一般にはＯ（ｎ３  ）となることが知られている。このため、上記行又は／及び列の数（上記ｎの数）が大きくなれば必然的に計算量が膨大化することとなる。
【０００３】
このような膨大化した計算を迅速に行うことが、今日におけるコンピュータの課題である。
【０００４】
しかし、今日におけるコンピュータのＣＰＵ（中央演算ユニット）の計算速度は著しく向上しているが、これに対して、メモリアクセスにかなりの時間を要し、これがコンピュータ全体の計算速度を遅延させる原因となっている。
【０００５】
このため、上記メモリアクセスに要する時間を短縮すべく、図１４に示すようにＣＰＵ１０１とメインメモリ１０３との間に、該メインメモリ１０３よりも記憶容量は少ないが高速アクセスが可能であるキャッシュメモリ１０２と呼ばれるサブメモリを設けたコンピュータが開発された。
【０００６】
このようなコンピュータは、上記キャッシュメモリ１０２に、バスライン１０５を介して予め必要なデータをメインメモリ１０３から読み出して記憶しておき、このキャッシュメモリ１０２から上記必要なデータの読み出しを行うことにより、該キャッシュメモリ１０２は高速アクセスが可能であるため、計算速度を高速化することができる。
【０００７】
一方、図１５に示すような、行列演算のようにまとまったデータに対して同じ演算を行うベクトルレジスタ１１７を複数有する、いわゆるスーパーコンピュータが知られている。上記複数のベクトルレジスタ１１７内のデータを直接演算するものとして、浮動小数点の加算器１１０，浮動小数点の乗算器１１１，浮動小数点の除算器１１２を直接アクセスできるレジスタが一次元配列状に設けられている。
【０００８】
このスーパーコンピュータは演算を行う前に、ベクトル入力出力回路１１９により、メインメモリ１２１からデータライン１１８，１２０を介してデータを上記ベクトルレジスタ１１７に予めロードする。上記ベクトルレジスタ１１７にロードされたデータは、入力バスライン１１３を介して上記各演算器１１０〜１１２に供給され演算処理が行われた後、出力バスライン１１４を介して上記ベクトルレジスタ１１７に供給され再度書き込まれる。そして、上記ベクトルレジスタ１１７に再度書き込まれた上記演算処理されたデータが、上記ベクトル入出力回路１１９により読み出され、上記メインメモリ１２１に記憶される。
【０００９】
上記スーパーコンピュータは、上記ベクトルレジスタ１１７により、まとめて演算を行うことができるうえ、上記演算処理されたデータをメインメモリ１２１に記憶するまでの処理がパイプライン化されているため、高速演算が可能となっている。
【００１０】
【発明が解決しようとする課題】
しかし、上記図１４に示したキャッシュメモリ１０２を用いたコンピュータは、大規模な演算を行う場合、全データのうちの一部のデータを上記キャッシュメモリ１０２に記憶し、残りのデータを上記メインメモリ１０３に記憶して演算を行う。このため、演算に必要なデータが上記キャッシュメモリ１０２に記憶されていない場合（ミスヒット）は、上記メインメモリ１０３に記憶されているデータを読み出す必要があり、この間、上記ＣＰＵ１０１が待機状態となってしまう。従って、大規模な演算を行う場合には、その演算を高速に行うことができなかった。
【００１１】
また、上記図１５に示したスーパーコンピュータの場合、設けられる上記ベクトルレジスタ１１７の容量は一般的に少ないため、大規模な演算を行う場合、該ベクトルレジスタ１１７に全データを記憶させることができない。このため、上記キャッシュメモリ１０２を用いたコンピュータと同様に、上記ベクトルレジスタ１１７に記憶できなかったデータを、上記メインメモリ１２１から読み出して上記ベクトルレジスタ１１７に記憶する必要があり、このような余分な読み出し及び記憶等に時間がかかり、やはり大規模な演算を行う場合には、その演算を高速に行うことができなかった。
【００１２】
なお、上記キャッシュメモリ１０２及び上記ベクトルレジスタ１１７として、大記憶容量且つ高速アクセス可能なサブメモリを設けることにより、このような問題を解決することができるが、上記大記憶容量且つ高速アクセス可能なサブメモリは、大きな設置面積を必要とするうえ大変高価であるため、コンピュータ自体が大型化するうえ、大変高価なものとなってしまう。
【００１３】
本発明は、上述の問題点に鑑みてなされたものであり、大規模な演算であっても高速に演算処理することができるうえ、装置自体の小型化及び低価格化を図ることができるような並列演算処理装置の提供を目的とする。
【００１４】
【課題を解決するための手段】
本発明は、演算処理されるデータである行列データ及びベクトルデータを制御手段により分割して複数の演算部にそれぞれ供給し、この複数の演算部において並列的に演算処理を行う並列演算処理装置であって、上記各演算部は、上記行列データの担当行の成分を連続して書き込み及び読み出しが行われる第１の記憶手段と、上記ベクトルデータの書き込み及び読み出しが行われる第２の記憶手段と、上記第１の記憶手段及び上記第２の記憶手段から読み出された行列データの担当行の成分及びベクトルデータに基づいて演算を行う演算手段と、上記制御手段から供給された上記行列データ及びベクトルデータを上記第１の記憶手段及び第２の記憶手段に供給するとともに、上記演算手段からの演算データを上記制御手段に供給する通信手段と、上記通信手段における各データの入出力制御を行う通信制御手段とから構成されることを特徴とする。
【００１６】
本発明に係る並列演算処理装置において、上記第１の記憶手段は、例えば、上記行列データの担当行の成分を連続して書き込み及び読み出しを行うシリアルアクセスメモリである。
【００１７】
また、本発明に係る並列演算処理装置において、上記第２の記憶手段は、例えば、上記ベクトルデータのランダムな書き込み及び読み出しを行うランダムアクセスメモリである。
【００１８】
また、本発明に係る並列演算処理装置において、上記第２の記憶手段は、例えば、上記ベクトルデータの連続的な書き込み及び読み出しを行うシリアルアクセスメモリである。
【００１９】
さらに、本発明に係る並列演算処理装置において、上記第２の記憶手段は、例えば、上記ベクトルデータのランダムな書き込み及び読み出しを行うランダムアクセスメモリ、及び、上記ベクトルデータを連続して書き込み及び読み出しを行うシリアルアクセスメモリである。
【００２０】
【作用】
本発明に係る並列演算処理装置において、演算処理されるデータである行列データ及びベクトルデータが制御手段により分割されて供給される各演算部は、通信制御手段により各データの入出力制御が行われる通信手段を介して、上記制御手段から行列データを第１の記憶手段に供給するとともに、上記制御手段からベクトルデータを第２の記憶手段に供給し、上記第１の記憶手段及び上記第２の記憶手段から読み出された行列データの担当行の成分及びベクトルデータに基づいて演算を行う演算手段からの演算データを上記制御手段に供給する。
【００２１】
そして、本発明に係る並列演算処理装置では、行列データのような膨大なデータ量を有するデータを、データの連続的な書き込み及び読み出しを行うシリアルアクセスメモリを用いた第１の記憶手段で取り扱い、また、ベクトルデータのような少ないデータ量を有するデータを、データのランダムな書き込み及び読み出しを行うランダムアクセスメモリやデータの連続的な書き込み及び読み出しを行うシリアルアクセスメモリを用いた第２の記憶手段で取り扱う。
【００２２】
上記シリアルアクセスメモリは、連続したデータアクセスしか行うことができないが、ゆえに、データの高速な書き込み及び読み出しを行うことができる。また、ランダムな書き込み及び読み出しに係るアドレスを発生するためのアドレスデコーダ部を省略或いは簡略化できるため、大容量の記憶領域を有するものでも安価に入手することができる。
【００２３】
科学技術計算には、演算するのにランダムアクセスが必要なベクトルデータのようなものは少なく、連続したデータアクセスしか要求しない行列データが多く用いられる。このため、上記第２の記憶手段として記憶容量が少ない安価なランダムアクセスメモリを用い、上記第１の記憶手段として記憶容量の大きいシリアルアクセスメモリを用いることにより、当該並列演算処理装置の製作コストを下げることができるうえ、大規模なデータ量を有するデータの演算も高速に行うことができる。
【００２４】
【実施例】
以下、本発明に係る並列演算処理装置の好ましい実施例について図面を参照しながら説明する。
【００２５】
本発明の実施例に係る並列演算処理装置は、図１に示すような演算部（ＰＥ：プロセッシングエレメント）１を、図２に示すように複数（１ａ〜１ｍ）有しており、これらのプロセッシングエレメント１ａ〜１ｍをコントロールバス１０及びデータバス１１を介して、制御用信号を出力するとともにデータの受け渡しを行う制御手段である制御用ＣＰＵ１２に接続して構成されており、実行する演算の規模によって使用されるプロセッシングエレメントの個数が決定されるようになっている。
【００２６】
図１において、上記プロセッシングエレメント１は、データの連続的な書き込み及び読み出しを行う第１の記憶手段として設けられた、大容量のメモリである大容量連続Ｉ／Ｏメモリ（以下，大容量ＳＡＭと言う。ＳＡＭ：Ｓｅｒｉａｌ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２と、データの連続的な書き込み及び読み出しを行う第２の記憶手段として設けられた、小容量のメモリである小容量連続Ｉ／Ｏメモリ（以下，小容量ＳＡＭと言う。）３と、データのランダムな書き込み及び読み出しを行う第２の記憶手段として設けられた、小容量の高速汎用ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４とを有している。
【００２７】
なお、上記高速汎用ＲＡＭ４は、高速ランダムアクセスが可能となっている。
【００２８】
また、上記プロセッシングエレメント１は、データの書き込み／読み出しや演算処理等を行う演算手段である中央演算ユニット（ＣＰＵ）５と、外部との通信時に使用する各種信号を形成して出力する通信制御手段である制御信号発生部６と、通信手段である２つのバッファ７ａ，７ｂとを有している。
【００２９】
そして、上記大容量ＳＡＭ２，小容量ＳＡＭ３及び高速汎用ＲＡＭ４を上記ＣＰＵ５，制御信号発生部６及びバッファ７ｂに接続し、上記制御信号発生部６を上記ＣＰＵ５及びバッファ７ａに接続するとともに、上記バッファ７ａをコントロールバス８に接続し、上記バッファ７ｂをデータバス９に接続して構成されている。
【００３０】
上記高速汎用ＲＡＭ４は、図３に示すようにデータの書き込み及び読み出しが行われるメモリセルアレイ１３０と、上記メモリセルアレイ１３０の行に対するデータの書き込み／読み出しアドレスを発生する行デコーダ１３１と、上記メモリセルアレイ１３０の列に対する書き込み／読み出しアドレスを発生する列デコーダ１３２とで構成されている。
【００３１】
このような高速汎用ＲＡＭ４は、データ量は多くないがランダムにメモリアクセスする必要があるデータ（例えば、ベクトルデータ等）の書き込み及び読み出しに用いられるとともに、上記ＣＰＵ５を動作させるためのプログラムデータを記憶するために用いられる。
【００３２】
上記高速汎用ＲＡＭ４にデータの書き込みを行う場合、上記ＣＰＵ５からアドレスライン１３３を介して書き込みアドレスデータが上記行デコーダ１３１及び列デコーダ１３２に供給される。上記行デコーダ１３１は上記書き込みアドレスデータに基づいて上記メモリセルアレイ１３０の行に対する書き込みアドレスを形成して上記メモリセルアレイ１３０に供給し、また、上記列デコーダ１３２が上記書き込みアドレスデータに基づいて上記メモリセルアレイ１３０の列に対する書き込みアドレスを形成して上記メモリセルアレイ１３０に供給する。これにより、データライン１３４を介して供給されるデータが上記メモリセルアレイ１３０に書き込まれる。
【００３３】
また、このように上記高速汎用ＲＡＭ４に書き込まれたデータの読み出しを行う場合、上記ＣＰＵ５からアドレスライン１３３を介して読み出しアドレスデータが上記行デコーダ１３１及び列デコーダ１３２に供給される。上記行デコーダ１３１は、上記読み出しアドレスに基づいて上記メモリセルアレイ１３０の行に対する読み出しアドレスを形成して上記メモリセルアレイ１３０に供給し、上記列デコーダ１３２は、上記読み出しアドレスに基づいて上記メモリセルアレイ１３０の列に対する読み出しアドレスを形成して上記メモリセルアレイ１３０に供給する。これにより、上記メモリセルアレイ１３０に書き込まれたデータが読み出され、上記データライン１３４を介して出力される。
【００３４】
次に、上記大容量ＳＡＭ２及び小容量ＳＡＭ３は、図４に示すようにデータの書き込み及び読み出しが行われるメモリセルアレイ１４０と、上記メモリセルアレイ１４０の行に対するデータの読み出しアドレスを発生する読み出し行アドレスカウンタ１４１と、上記メモリセルアレイ１４０の行に対する書き込みアドレスを発生する書き込み行アドレスカウンタ１４２と、上記メモリセルアレイ１４０の列に対するデータの読み出しアドレスを発生する読み出し列アドレスカウンタ１４３と、上記メモリセルアレイ１４０の列に対する書き込みアドレスを発生する書き込み列アドレスカウンタ１４４とで構成されている。
【００３５】
上記大容量ＳＡＭ２は、例えば大規模の行列データのようなデータ量の多いデータの書き込み及び読み出しを行うために設けられており、また、上記小容量ＳＡＭ３は、例えば小規模の行列データやランダムアクセスの必要がないベクトルデータのようなデータ量の少ないデータの書き込み及び読み出しを行うために設けられている。
【００３６】
上記大容量ＳＡＭ２又は上記小容量ＳＡＭ３にデータの書き込みを行う場合、まず、図５（ｂ）に示すように所定期間ハイレベルとなるリセットライト信号ＲＳＴＷ、及び、書き込みが行われる間中ハイレベルとなる同図（ａ）に示すようなライトイネーブル信号ＷＥが、上記書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４に供給される。
【００３７】
上記書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４は、上記リセットライト信号ＲＳＴＷによりそのカウント値をリセットし、以後供給される図５（ｃ）に示すような書き込みクロックＷＣＫをカウントする。そして、それぞれ図５（ｄ）に示すようなカウント値（０，１，２，３・・・）を書き込み行アドレス及び書き込み列アドレスとして上記メモリセルアレイ１４０に供給する。
【００３８】
上記メモリセルアレイ１４０に対する書き込みアドレスＷＡＤは、メモリセルアレイ１４０の大きさをｎ×ｎとして、上記書き込み行アドレス及び書き込み列アドレスを用い、以下の第１式に基づいて算出される。
【００３９】
【数１】
0003608207.tif 000002
【００４０】
上記メモリセルアレイ１４０には、データ入力ライン１４５を介して図５（ｅ）に示すような入力データＤｉｎが供給されており、このデータが上記第１式を用いて算出された書き込みアドレスに書き込まれる。
【００４１】
なお、上記リセットパルスを供給しない限り上記書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４の各カウント値は保持されるようになっている。このため、一旦書き込みを終了するときに上記ライトイネーブル信号ＷＥをローレベルとし、再度書き込みを行うときに上記リセットライト信号ＲＳＴＷを供給せずにハイレベルの上記ライトイネーブル信号ＷＥを供給することにより、上記書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４は、上記保持していたカウント値から継続してカウントを開始するため、書き込み終了直後のアドレスから継続して入力データＤｉｎの書き込みを行うことができる。
【００４２】
次に、このように上記メモリセルアレイ１４０に書き込まれたデータの読み出しを行う場合、まず、図６（ｂ）に示すように所定期間ハイレベルとなるリセットリード信号ＲＳＴＲ、及び、読み出しが行われる間中ハイレベルとなる同図（ａ）に示すようなリードイネーブル信号ＲＥが、上記読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３に供給される。
【００４３】
上記読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３は、上記リセットリード信号ＲＳＴＲによりそのカウント値をリセットし、以後供給される図６（ｃ）に示すような読み出しクロックＲＣＫをカウントする。そして、それぞれ図６（ｄ）に示すようなカウント値（０，１，２，３・・・）を読み出し行アドレス及び読み出し列アドレスとして上記メモリセルアレイ１４０に供給する。
【００４４】
上記メモリセルアレイ１４０に対する読み出しアドレスＲＡＤは、メモリセルアレイ１４０の大きさをｎ×ｎとして、上記読み出し行アドレス及び読み出し列アドレスを用い、以下の第２式に基づいて算出される。
【００４５】
【数２】
0003608207.tif 000003
【００４６】
上記メモリセルアレイ１４０に書き込まれた上記入力データＤｉｎは、この第２式を用いて算出された読み出しアドレスに基づいて読み出され、図６（ｅ）に示すような出力データＤｏｕｔとしてデータ出力ライン１４６を介して出力される。
【００４７】
なお、上記リセットリード信号ＲＳＴＲを供給しない限り上記読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３の各カウント値は保持されるようになっている。このため、一旦読み出しを終了するときに上記リードイネーブル信号ＲＥをローレベルとし、再度読み出しを行うときに上記リセットリード信号ＲＳＴＲを供給せずにハイレベルの上記リードイネーブル信号ＲＥを供給することにより、上記読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３は、上記保持していたカウント値から継続してカウントを開始するため、読み出し終了直後のアドレスから継続してデータの読み出しを行うことができる。
【００４８】
次に、このような構成を有する本実施例に係る並列演算処理装置において、例えば以下の第３式に示すような行列データとベクトルデータの乗算を行う場合における演算動作を図７及び図８に示すフローチャートを用いて説明する。
【００４９】
【数３】
0003608207.tif 000004
【００５０】
この演算は対象となる行列の大きさが８×８（ｎ＝８）であるため、８つの行ベクトルａ１  ，ａ２  ・・・ａ８  と、ベクトルｘとの８つの内積として以下の第４式のように表すことができる。
【００５１】
【数４】
0003608207.tif 000005
【００５２】
この場合、当該並列演算処理装置は、図９に示すように第１〜第４の計４つのプロセッシングエレメント１ａ〜１ｄにそれぞれ設けられている大容量ＳＡＭ２ａ〜２ｄ、及び、小容量ＳＡＭ３ａ〜３ｄを用いて上記内積演算を行う。
【００５３】
すなわち、１つのプロセッシングエレメントが２つの内積演算を行うことにより、上記８つの内積演算を４つのプロセッシングエレメント１ａ〜１ｄで並列的に実行する。
【００５４】
それぞれの内積演算は独立に実行することができ、どのプロセッシングエレメントがどの行の演算を行っても同じである。このため、例えば上記第１のプロセッシングエレメント１ａの第１のＣＰＵ５ａは、上記第４式に示した内積演算結果を示す内積演算データｙ１  とｙ５  を算出し、上記第２のプロセッシングエレメント１ｂの第２のＣＰＵ５ｂは内積演算データｙ２  とｙ６  を算出し、上記第３のプロセッシングエレメント１ｃの第３のＣＰＵ５ｃは内積演算データｙ３  とｙ７  を算出し、上記第４のプロセッシングエレメント１ｄの第４のＣＰＵ５ｄは内積演算データｙ４  とｙ８  を算出する。
【００５５】
なお、以下に説明する図９〜図１３において、この演算に用いられない上記高速汎用ＲＡＭ４は図示していない。また、上記図９〜図１３は、上記演算に係るデータの動きを示したものであるため、上記制御信号発生部６も図示していない。
【００５６】
上記図７において、演算の開始時となるとこのフローチャートがスタートとなりステップＳ１に進む。
【００５７】
上記ステップＳ１では、上記各プロセッシングエレメント１ａ〜１ｄの各ＣＰＵ５ａ〜５ｄから上記各大容量ＳＡＭ２ａ〜２ｄ及び上記各小容量ＳＡＭ３ａ〜３ｄにライトイネーブル信号ＷＥ及びリードイネーブル信号ＲＥがそれぞれ供給されるとともに、リセットライト信号ＲＳＴＷ及びリセットリード信号ＲＳＴＲがそれぞれ供給され、上記図４に示した読み出し行アドレスカウンタ１４１，読み出し列アドレスカウンタ１４３、及び、書き込み行アドレスカウンタ１４２，書き込み列カウンタ１４４がそれぞれリセットされる。
【００５８】
また、上記ステップＳ１では、上記各ＣＰＵ５ａ〜５ｄが、上記小容量ＳＡＭ３ａ〜３ｄの各書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４に上記書き込みクロックＷＣＫを供給するとともに、各メモリセルアレイ１４０に上記ベクトルデータｘ１  〜ｘ８  を供給する。これにより、図９に示すように上記各プロセッシングエレメント１ａ〜１ｄの小容量ＳＡＭ３ａ〜３ｄの各メモリセルアレイ１４０の、上記書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４によるカウント値で示される書き込みアドレスＷＡＤ（ｓ）に、上記ベクトルデータｘ１  〜ｘ８  が書き込まれる。
【００５９】
また、上記ステップＳ１では、上記各ＣＰＵ５ａ〜５ｄが、上記大容量ＳＡＭ２ａ〜２ｄの書き込み行アドレスカウンタ１４２及び書き込み列アドレスカウンタ１４４に上記書き込みクロックＷＣＫを供給する。また、これとともに上記各ＣＰＵ５ａ〜５ｄは、上記行列データのうち上記ｙ１  ，ｙ５  に係る行列データａ１１〜ａ１８，ａ５１〜ａ５８を、上記第１のプロセッシングエレメント１ａの大容量ＳＡＭ２ａのメモリセルアレイ１４０に供給し、上記行列データのうち上記ｙ２  ，ｙ６  に係る行列データａ２１〜ａ２８，ａ６１〜ａ６８を、上記第２のプロセッシングエレメント１ｂの大容量ＳＡＭ２ｂのメモリセルアレイ１４０に供給し、上記行列データのうち上記ｙ３  ，ｙ７  に係る行列データａ３１〜ａ３８，ａ７１〜ａ７８を、上記第３のプロセッシングエレメント１ｃの大容量ＳＡＭ２ｃのメモリセルアレイ１４０に供給し、上記行列データのうち上記ｙ４  ，ｙ８  に係る行列データａ４１〜ａ４８，ａ８１〜ａ８８を、上記第４のプロセッシングエレメント１ｄの大容量ＳＡＭ２ｄのメモリセルアレイ１４０に供給する。
【００６０】
これにより、図９に示すように上記第１のプロセッシングエレメント１ａの大容量ＳＡＭ２ａのメモリセルアレイ１４０に上記行列データａ１１〜ａ１８，ａ５１〜ａ５８が書き込まれ、上記第２のプロセッシングエレメント１ｂの大容量ＳＡＭ２ｂのメモリセルアレイ１４０に上記行列データａ２１〜ａ２８，ａ６１〜ａ６８が書き込まれ、上記第３のプロセッシングエレメント１ｃの大容量ＳＡＭ２ｃのメモリセルアレイ１４０に上記行列データａ３１〜ａ３８，ａ７１〜ａ７８が書き込まれ、上記第４のプロセッシングエレメント１ｄの大容量ＳＡＭ２ｄのメモリセルアレイ１４０に行列データａ４１〜ａ４８，ａ８１〜ａ８８が書き込まれる。
【００６１】
また、上記ステップＳ１では、上記制御用ＣＰＵ１２が、各内積演算データｙ１  ，ｙ５  、ｙ２  ，ｙ６  、ｙ３  ，ｙ７  、ｙ４  ，ｙ８  を格納する領域である格納領域１２ａを０に初期化する。
【００６２】
このように、上記ステップＳ１において、上記各データｘ１  〜ｘ８  ，ａ１１〜ａ８８の書き込みが終了し、上記制御用ＣＰＵ１２の格納領域１２ａの初期化が終了すると当該並列演算処理装置はステップＳ２に進む。
【００６３】
上記ステップＳ２では、大容量ＳＡＭのリセットリード信号ＲＳＴＲ（ｂ）及び小容量ＳＡＭのリセットリード信号ＲＳＴＲ（ｓ）がそれぞれ供給され、上記図４に示した読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３がそれぞれリセットされる。
【００６４】
そして、次のステップＳ３で、次のステップＳ４ではプロセッシングエレメント１ａの担当行の１つ目を処理することを宣言している。
【００６５】
ステップＳ４では、図１０に示すように、上記各ＣＰＵ５ａ〜５ｄが、各大容量ＳＡＭ２ａ〜２ｄに書き込まれている行列データ及び各小容量ＳＡＭ３ａ〜３ｄにそれぞれ書き込まれている上記ベクトルデータを１つずつシフトし、このシフトした行列データ及びベクトルデータを取り込む。
【００６６】
すなわち、このステップＳ４において上記各ＣＰＵ５ａ〜５ｄは、各小容量ＳＡＭ３ａ〜３ｄに書き込まれているベクトルデータｘ１  〜ｘ８  を順に取り込む。また、上記第１のＣＰＵ５ａは、上記行列データａ１１〜ａ１８を順に取り込み、上記第２のＣＰＵ５ｂは、上記行列データａ２１〜ａ２８を順に取り込み、上記第３のＣＰＵ５ｃは、上記行列データａ３１〜ａ３８を順に取り込み、上記第４のＣＰＵ５ｄは、上記行列データａ４１〜ａ４８を順に取り込む。
【００６７】
次に、上記ステップＳ４において、上記各ＣＰＵ５ａ〜５ｄは、上記１つずつ取り込んだベクトルデータ及び行列データの積を算出し、これをそれぞれｙ１  ，ｙ２  ，ｙ３  ，ｙ４  に加算するような内積演算ルーチンを実行することにより、内積演算データｙ１  ＝ｙ１  ＋ａ１１ｘ１  、ｙ２  ＝ｙ２  ＋ａ２１ｘ１  、ｙ３  ＝ｙ３  ＋ａ３１ｘ１  、ｙ４  ＝ｙ４  ＋ａ４１ｘ１  を形成し、これらを一旦記憶する。
【００６８】
このステップＳ４では、上記各ＣＰＵ５ａ〜５ｄが、上述の如き内積演算ルーチンを、ｙ１  ＝ｙ１  ＋ａ１８ｘ８  、ｙ２  ＝ｙ２  ＋ａ２８ｘ８  、ｙ３  ＝ｙ３  ＋ａ３８ｘ８  、ｙ４  ＝ｙ４  ＋ａ４８ｘ８  の演算が終了するまで繰り返し行う。そして、上記ｙ１  ＝ｙ１  ＋ａ１８ｘ８  、ｙ２  ＝ｙ２  ＋ａ２８ｘ８  、ｙ３  ＝ｙ３  ＋ａ３８ｘ８  、ｙ４  ＝ｙ４  ＋ａ４８ｘ８  の内積演算が終了した時点で、それまで一旦記憶していた内積演算データｙ１  〜ｙ４  をそれぞれデータバス１１を介して上記制御用ＣＰＵ１２に供給してステップＳ５に進む。
【００６９】
これにより、図１１に示すように上記制御用ＣＰＵ１２内に設けられている格納領域１２ａに上記ｙ１  ，ｙ２  ，ｙ３  ，ｙ４  の各内積演算データが記憶される。
【００７０】
次に、上記ステップＳ５では、上記各ＣＰＵ５ａ〜５ｄが上記小容量ＳＡＭ３ａ〜３ｄの各読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３にそれぞれリセットリード信号ＲＳＴＲ（ｓ）  を供給し、該読み出し行アドレスカウンタ１４１及び読み出し列アドレスカウンタ１４３をリセットして読み出しアドレスＲＡＤ（ｓ）  ＝０にしてステップＳ６に進む。
【００７１】
これにより、次のデータ読み出し時には、上記各小容量ＳＡＭ３ａ〜３ｄからは、再度、最初のベクトルデータｘ１  から順にベクトルデータの読み出しが行われることとなる。
【００７２】
そして、上記ステップＳ６で、次のステップＳ７ではプロセッシングエレメント１ａの担当行の２つ目を処理することを宣言している（プロセッシングエレメント１ａは行列の１行目と５行目を担当しているため）。
【００７３】
上記ステップＳ７では、上記各ＣＰＵ５ａ〜５ｄが、図１１に示すように上記小容量ＳＡＭ３ａ〜３ｄから上記ベクトルデータｘ１  〜ｘ８  を１つずつ順に取り込む。また、図１１に示すように上記第１のＣＰＵ５ａが上記行列データａ５１〜ａ５８を順に取り込み、上記第２のＣＰＵ５ｂが上記行列データａ６１〜ａ６８を順に取り込み、上記第３のＣＰＵ５ｃが上記行列データａ７１〜ａ７８を順に取り込み、上記第４のＣＰＵ５ｄが上記行列データａ８１〜ａ８８を順に取り込む。
【００７４】
このステップＳ７では、上記各ＣＰＵ５ａ〜５ｄが、上記１つずつ取り込んだベクトルデータ及び行列データの積を算出し、これをそれぞれｙ５  ，ｙ６  ，ｙ７  ，ｙ８  に加算するような内積演算ルーチンを実行することにより、この内積演算結果を示す内積演算データｙ５  ＝ｙ５  ＋ａ５１ｘ１  、ｙ６  ＝ｙ６  ＋ａ６１ｘ１  、ｙ７  ＝ｙ７  ＋ａ７１ｘ１  、ｙ８  ＝ｙ８  ＋ａ８１ｘ１  を形成し、これらを一旦記憶する。
【００７５】
なお、このステップＳ７における上述のような内積演算ルーチンは、上記各ＣＰＵ５ａ〜５ｄが、ｙ５  ＝ｙ５  ＋ａ５８ｘ８  、ｙ６  ＝ｙ６  ＋ａ６８ｘ８  、ｙ７  ＝ｙ７  ＋ａ７８ｘ８  、ｙ８  ＝ｙ８  ＋ａ８８ｘ８  の演算が終了するまで繰り返し行われる。
【００７６】
そして、上記各ＣＰＵ５ａ〜５ｄは、このような内積演算ルーチンを終了すると、図１２に示すように上記一旦記憶したｙ５  〜ｙ８  の内積演算データを、それぞれデータバス１１を介して上記制御用ＣＰＵ１２に供給して上記図７に示すフローチャートの実行ルーチンを終了する。
【００７７】
これにより、図１２に示すように上記制御用ＣＰＵ１２内に設けられている格納領域１２ａに上記ｙ１  〜ｙ４  及びｙ５  〜ｙ８  の各内積演算データが記憶される。
【００７８】
なお、上記制御用ＣＰＵ１２内の格納領域１２ａに記憶された上記ｙ１  〜ｙ８  の各内積演算データは、例えば図示しないモニタ装置等に供給され表示されたり、プリンタ装置等に供給され印字され、研究開発等に利用される。
【００７９】
ここで、図７のフローチャートを用いて説明したような上記内積演算に係る上記各ＣＰＵ５ａ〜５ｄの詳細な動作は、図８に示すようになっている。
【００８０】
すなわち、上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄに上記行列データａ１１〜ａ８８及びベクトルデータｘ１  〜ｘ８  の書き込みが終了すると、上記各ＣＰＵ５ａ〜５ｄは上記図８に示すステップＳ１１に進み、まず、演算結果を０（ｙｉ  ＝０）とし、演算回数ｊを１（ｊ＝１）とするような初期値の設定を行いステップＳ１２に進む。
【００８１】
なお、上記図４を用いて説明したように、上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄへのデータの書き込みは、アドレス順に書き込まれるうえ、１つ１つのデータの書き込みは、上記図５（ｃ）に示した書き込みクロックＷＣＫにより１クロック毎に行われる。このため、上記データの書き込みを１クロックサイクル以内の遅延で行うことができ、該データの書き込みを非常に高速に終了させることができる。
【００８２】
上記ステップＳ１２では、上記各ＣＰＵ５ａ〜５ｄが演算回数ｊを検出し、この演算回数が８回より下か否か（上記行列データの８列目迄の内積演算が終了したか否か）を判別し、ＮＯの場合はステップＳ１５に進み、ＹＥＳの場合はステップＳ１３に進む。
【００８３】
上記ステップＳ１３では、書き込みクロックＲＣＫ（ｂ），ＲＣＫ（ｓ）により書き込みアドレスＲＡＤ（ｂ），ＲＡＤ（ｂ）がそれぞれインクリメントされ、上記図１０に示したように上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄに書き込まれている行列データ及びベクトルデータを１つずつ取り込みステップＳ１４に進む。
【００８４】
上記図４を用いて説明したように、上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄに書き込まれたデータは、上記図６（ｃ）に示した読み出しクロックにより１クロック毎に、書き込まれたアドレス順に読み出される。このため、上記データの読み出しを１クロックサイクル以内の遅延で行うことができ、該データの読み出しを非常に高速に終了させることができる。
【００８５】
上記ステップＳ１４では、上記図１０に示したように上記ステップＳ１３において取り込んだ行列データ及びベクトルデータに基づいて、それぞれｙ１  ＝ｙ１  ＋ａ１１ｘ１  、ｙ２  ＝ｙ２  ＋ａ２１ｘ１  、ｙ３  ＝ｙ３  ＋ａ３１ｘ１  、ｙ４  ＝ｙ４  ＋ａ４１ｘ１  の内積演算を行い、この内積演算データをそれぞれ一旦記憶してから、演算回数ｊを１つインクリメント（ｊ＝ｊ＋１）して上記ステップＳ１２に戻る。
【００８６】
上述のように、上記各大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄに書き込まれたデータは高速で読み出され上記各ＣＰＵ５ａ〜５ｄに供給されるが、該各ＣＰＵ５ａ〜５ｄの演算速度は従来より高速化されており、このように高速にデータ供給があっても遅延なく上記内積演算を行うことができる。このため、上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄへのデータの書き込み及び読み出しが高速化された分、演算速度を高速化することができる。
【００８７】
上記各ＣＰＵ５ａ〜５ｄは、このようなステップ１２〜ステップ１４の処理を繰り返し行い、上記ステップＳ１２において演算回数が９回であると検出されるとステップＳ１５に進む。
【００８８】
これにより、図１３に示すように上記第１のＣＰＵ５ａは以下の第５式の内積演算を行い、上記第２のＣＰＵ５ｂは以下の第６式の内積演算を行い、上記第３のＣＰＵ５ｃは以下の第７式の内積演算を行い、上記第４のＣＰＵ５ｄは以下の第８式の内積演算を行うこととなり、該各ＣＰＵ５ａ〜５ｄは、この４つの内積演算データｙ１  〜ｙ４  を一旦記憶してステップＳ１５に進む。
【００８９】
【数５】
0003608207.tif 000006
【００９０】
【数６】
0003608207.tif 000007
【００９１】
【数７】
0003608207.tif 000008
【００９２】
【数８】
0003608207.tif 000009
【００９３】
そして、上記ステップＳ１５において、上記各ＣＰＵ５ａ〜５ｄは、一旦記憶した上記４つの内接演算データｙ１  〜ｙ４  を上記図１２に示したように制御用ＣＰＵ１２に供給する。これにより、上記制御用ＣＰＵ１２の格納領域１２ａに、上記４つの内接演算データｙ１  〜ｙ４  がそれぞれ記憶される。
【００９４】
さらに、上記各ＣＰＵ５ａ〜５ｄは、上記ステップ１１〜ステップ１５の処理を繰り返し行い、第９式〜第１２式の内積演算により４つの内積演算データｙ５  〜ｙ８  を求める。
【００９５】
【数９】
0003608207.tif 000010
【００９６】
【数１０】
0003608207.tif 000011
【００９７】
【数１１】
0003608207.tif 000012
【００９８】
【数１２】
0003608207.tif 000013
【００９９】
これにより、上記制御用ＣＰＵ１２の格納領域１２ａに、８つの内接演算データｙ１  〜ｙ８  がそれぞれ記憶される。
【０１００】
なお、以上の説明には上記高速汎用ＲＡＭ４が用いられていないが、該高速汎用ＲＡＭ４は、ランダムアクセスが必要なデータの演算に使用される。その動作は一般的であるため説明は省略する。
【０１０１】
このように、１つのプロセッシングエレメントに、記憶容量の多い大容量ＳＡＭ，記憶容量の少ない小容量ＳＡＭ及び高速汎用ＲＡＭ４を設け、行列データのような膨大なデータ量を有するデータの書き込み及び読み出しは、上記大容量ＳＡＭを用いて行い、ベクトルデータのような少ないデータ量を有するデータの書き込み及び読み出しは、上記小容量ＳＡＭ又は高速汎用ＲＡＭ４を用いて行うことにより、上記大容量ＳＡＭ及び小容量ＳＡＭは、連続したデータアクセスしか行うことができないが、ゆえに、データの高速な書き込み及び読み出しが可能であるため、メモリアクセスによるデータ処理の停滞を防止することができ、行列データのように大規模なデータ量を有するデータの演算を高速化することができる。
【０１０２】
また、当該並列演算処理装置は、特定のアルゴリズムに対応するように構成されたものではないため、連続的なデータアクセスを主体とする各種のアルゴリズムに対応することができる。
【０１０３】
また、上記大容量ＳＡＭの他に、上記小容量ＳＡＭを設けているため、行列データどおしやベクトルデータどおしの演算のように、連続的なアクセスを要する演算も高速に行うことができる。
【０１０４】
また、上記高速汎用ＲＡＭ４も設けられているため、連続的ではないメモリアクセスを必要とするアルゴリズムにも対応することができる。
【０１０５】
そして、上記大容量ＳＡＭ及び小容量ＳＡＭは、連続したデータアクセスを行うようになっているため、ランダムな書き込み及び読み出しに係るアドレスを発生するためのアドレスデコーダ部を省略或いは簡略化でき、記憶容量の多いものでも安価に作製することができる。このため、当該並列演算処理装置を安価に作製することができる。
【０１０６】
なお、上述の実施例の説明では、記憶手段として、大容量ＳＡＭ２，小容量ＳＡＭ３及び高速汎用ＲＡＭ４を設ける構成としたが、これは、上記小容量ＳＡＭ３を設けない構成としてもよいし、或いは、上記高速汎用ＲＡＭ４の代わりに１つ又は複数のＳＡＭを設けるような構成としてもよい。
【０１０７】
また、上記大容量ＳＡＭ２及び小容量ＳＡＭ３は、アドレス入力が無いことを除けば物理的に通常のＲＡＭと同じであり、また、動作的には、大容量のシフトレジスタやいわゆるＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）と同じである。このため、上記大容量ＳＡＭ２及び小容量ＳＡＭ３の代わりに上記シフトレジスタ又はＦＩＦＯを設けるような構成としてもよい。
【０１０８】
また、上記図９〜図１３において、上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄから読み出された行列データ及びベクトルデータは、演算終了後に、上記大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄにそれぞれ再度書き込まれるように示されているが、これは、上記行列データ及びベクトルデータのシフト動作をわかりやすくするために図示したものに過ぎず、実際における該大容量ＳＡＭ２ａ〜２ｄ及び小容量ＳＡＭ３ａ〜３ｄは、読み出されたデータをそのまま保持するようになっているため、該読み出されたデータを再度書き込むようなことはない。
【０１０９】
【発明の効果】
以上の説明から明らかなように、本発明に係る並列演算処理装置は、第１の記憶手段として記憶容量の多いシリアルアクセスメモリを設けるとともに、第２の記憶手段として記憶容量の少ないランダムアクセスメモリを設け、行列データのような膨大なデータ量を有するデータの書き込み及び読み出しは、上記シリアルアクセスメモリを用いて行い、ベクトルデータのような少ないデータ量を有するデータの書き込み及び読み出しは、上記ランダムアクセスメモリを用いて行うことにより、上記シリアルアクセスメモリは、連続したデータアクセスしか行うことができないが、ゆえに、データの高速な書き込み及び読み出しが可能であるため、メモリアクセスによるデータ処理の停滞を防止することができ、行列データのように大規模なデータ量を有するデータの演算を高速化することができる。
【０１１０】
また、当該並列演算処理装置は、特定のアルゴリズムに対応するように構成されたものではないため、連続的なデータアクセスを主体とする各種のアルゴリズムに対応することができる。
【０１１１】
また、上記記憶容量の多いシリアルアクセスメモリの他に、記憶容量の少ないシリアルアクセスメモリを別に設けることにより、行列データどおしやベクトルデータどおしの演算のように、連続的なアクセスを要する演算も高速に行うことができる。
【０１１２】
また、上記ランダムアクセスメモリも設けられているため、連続的ではないメモリアクセスを必要とするアルゴリズムにも対応することができる。
【０１１３】
そして、上記シリアルアクセスメモリは、連続したデータアクセスを行うようになっているため、ランダムな書き込み及び読み出しに係るアドレスを発生するためのアドレスデコーダ部を省略或いは簡略化でき、記憶容量の多いものでも安価に作製することができる。このため、当該並列演算処理装置を安価に作製することができる。
【図面の簡単な説明】
【図１】本発明の実施例に係る並列演算処理装置に設けられているプロセッシングエレメントのブロック図である。
【図２】上記実施例に係る並列演算処理装置の全体の構成を示すブロック図である。
【図３】上記実施例に係る並列演算処理装置に設けられているランダムアクセスメモリのブロック図である。
【図４】上記実施例に係る並列演算処理装置に設けられているシリアルアクセスメモリのブロック図である。
【図５】上記シリアルアクセスメモリへのデータの書き込み動作を説明するためのタイムチャートである。
【図６】上記シリアルアクセスメモリからデータの読み出し動作を説明するためのタイムチャートである。
【図７】上記実施例に係る並列演算処理装置における１つのプロセッシングエレメントの演算動作を説明するためのフローチャートである。
【図８】上記実施例に係る並列演算処理装置の内積演算ルーチンのフローチャートである。
【図９】上記実施例に係る並列演算処理装置に設けられている各プロセッシングエレメントの大容量ＳＡＭ及び小容量ＳＡＭに書き込まれる行列データ及びベクトルデータを示す図である。
【図１０】上記実施例に係る並列演算処理装置に設けられている各プロセッシングエレメントのＣＰＵが行う内積演算を説明するための図である。
【図１１】上記実施例に係る並列演算処理装置に設けられている各プロセッシングエレメントのＣＰＵから制御用ＣＰＵに、１つ目の行列データに係る内積演算データが転送される様子を示した図である。
【図１２】上記実施例に係る並列演算処理装置に設けられている各プロセッシングエレメントのＣＰＵから制御用ＣＰＵに、２つ目の行列データに係る内積演算データが転送される様子を示した図である。
【図１３】上記実施例に係る並列演算処理装置に設けられている各プロセッシングエレメントのＣＰＵにおける全体的な内積演算動作を説明するための図である。
【図１４】キャッシュメモリを用いた従来のコンピュータのブロック図である。
【図１５】複数のベクトルレジスタを用いた従来のスーパーコンピュータのブロック図である。
【符号の説明】
１，１ａ〜１ｍ・・・・・・・プロセッシングエレメント
２・・・・・・・・・・・・・大容量シリアルアクセスメモリ（ＳＡＭ）
３・・・・・・・・・・・・・小容量シリアルアクセスメモリ
４・・・・・・・・・・・・・高速汎用ランダムアクセスメモリ（ＲＡＭ）
５・・・・・・・・・・・・・中央演算ユニット（ＣＰＵ）
６・・・・・・・・・・・・・制御信号発生部
７ａ，７ｂ・・・・・・・・・バッファ
８，１０・・・・・・・・・・コントロールバス
９，１１・・・・・・・・・・データバス
１２・・・・・・・・・・・・制御用中央演算ユニット（制御用ＣＰＵ）
１２ａ・・・・・・・・・・・格納領域
１３０・・・・・・・・・・・ＲＡＭのメモリセルアレイ
１３１・・・・・・・・・・・行デコーダ
１３２・・・・・・・・・・・列デコーダ
１３３・・・・・・・・・・・アドレスライン
１３４・・・・・・・・・・・データライン
１４０・・・・・・・・・・・ＳＡＭのメモリセルアレイ
１４１・・・・・・・・・・・読み出し行アドレスカウンタ
１４２・・・・・・・・・・・書き込み行アドレスカウンタ
１４３・・・・・・・・・・・読み出し列アドレスカウンタ
１４４・・・・・・・・・・・書き込み列アドレスカウンタ
１４５・・・・・・・・・・・データ入力ライン
１４６・・・・・・・・・・・データ出力ライン
【図１】
0003608207.tif 000014
【図２】
0003608207.tif 000015
【図３】
0003608207.tif 000016
【図４】
0003608207.tif 000017
【図５】
0003608207.tif 000018
【図６】
0003608207.tif 000019
【図７】
0003608207.tif 000020
【図８】
0003608207.tif 000021
【図９】
0003608207.tif 000022
【図１０】
0003608207.tif 000023
【図１１】
0003608207.tif 000024
【図１２】
0003608207.tif 000025
【図１３】
0003608207.tif 000026
【図１４】
0003608207.tif 000027
【図１５】
0003608207.tif 000028