(57)【要約】      （修正有）【課題】命令列を含むパケットをベースにしたデータ駆動アーキテクチャで、ループプログラムの同期処理の実現と、パケットの異常な増大を抑制する。【解決手段】ＭＣＥ３００にループ制御部３０８を設け、ループプログラムの各ループ処理の完了を通知する”ｄｏｎｅ”命令を次命令とするパケットをループ制御部３０８に送り、その都度、ループ制御部３０８はループ処理の進み具合からループＩＤの上限値を算出し、全ＰＥにその上限値をブロードキャストする。ＰＥのパケット生成部はループ処理に必要なパケットの生成をループＩＤ以内に制限することで、高速性を維持しながらパケット数を適正に抑制することが可能になる。また、ループ制御部３０８に届いた、ループプログラムの最後の”ｄｏｎｅ”パケットのみを通過させ、それ以前の”ｄｏｎｅ”パケットを消去することでループプログラムとそれ以降の処理の同期をとることが可能になる。【選択図】図９
2014041640.tif 000002
【特許請求の範囲】
【請求項１】
データごとに、当該データを識別する識別情報および当該データに対する１つ以上の処理命令を示す命令情報を含む拡張識別情報が付加されたパケットを処理する複数の処理部を備えるデータ処理装置において、
前記処理命令はループ処理の完了を通知するループ処理完了命令を含み、
ループ数を取得する手段と、ループ処理完了数をカウントするループカウンタを有すループ制御部を含み、
前記ループ制御部は、次命令に前記ループ処理完了命令を有すパケットを取得し、該ループ処理完了命令の実行によりループカウンタを１加算し、該ループカウンタが前記ループ数より小さい場合は、該パケットを削除し、そうでない場合は該パケットを通過させることを特徴とするデータ処理装置。
【請求項２】
データごとに、当該データを識別する識別情報および当該データに対する１つ以上の処理命令を示す命令情報を含む拡張識別情報が付加されたパケットを処理する複数の処理部を備えるデータ処理装置において、
前記識別情報は、ループ処理ごとに設定されるループＩＤを含み、
前記処理命令は、ループ処理の完了を通知するループ処理完了命令を含み、
前記ループ処理完了命令が次命令のパケットを取得し、前記ループＩＤの上限値を算出するループ制御部と、
前記ループＩＤを、前記上限値以下で、１づつ加算してループ処理に必要なパケットを生成するループパケット生成部と、
を備えることを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関する。
【背景技術】
【０００２】
新しいコンピュータアーキテクチャとして、従来のデータ駆動計算機を改良したアーキテクチャが特許文献１にて開示された。このアーキテクチャの特徴は、ＰＥ内にプログラムエリアを持たず、プログラムが実行すべき全ての処理命令をパケットの中に持たせたことと、メモリアクセスを一括して行うモジュールを持たせたことで、プログラム言語との親和性向上、およびロジック数の低減を果たしている。
また、特許文献２ではループ処理において、ループＩＤを１ずつ増加させながらループ内の処理に必要な複数のパケットをループ数だけ複製する機能を開示し、これにより高速化を果たしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５０５７２５６号
【特許文献２】国際公開第２０１３／１１８７５４号
【特許文献３】国際公開第２０１３／１４１２９０号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献２で示された方法には同期処理が考慮されておらず、例えばあるメモリエリアをループ処理を使って初期化した後で、そのメモリエリアを参照しながらさらに処理を進めるようなプログラムを作成しようとしても、ループ処理の終了が分からず、結果的にメモリエリアの初期化完了を待たずに次の処理を進めてしまう事になるため、データの不整合が起きて、まともに処理ができない。
【０００５】
また、ループ処理のループ数や処理の複雑さが増えると、複製するパケットが多くなり、それらを多くのＰＥが分担して高速に複製を繰り返した場合、短時間にデータ処理装置の処理能力を上回るほどにパケットの量が増大する。その弊害として、各ＰＥが持っている待ち合わせ用のバッファがパケットで一杯になり、溢れたパケットがデータ処理装置内を回り続け、その結果、待ち合わせで発火する確率が低下し、処理速度が低下する。また、データ処理装置内の各所にバッファやＦＩＦＯを設けているが、これらもパケットで一杯になると最悪の場合、データ処理装置全体がデッドロックしていまう現象も発生している。
【課題を解決するための手段】
【０００６】
本発明による第１の態様のデータ処理装置は、データごとに、当該データを識別する識別情報および当該データに対する１つ以上の処理命令を示す命令情報を含む拡張識別情報が付加されたパケットを処理する複数の処理部を備え、前記処理命令はループ処理の完了を通知するループ処理完了命令を含み、ループプログラムの実行に際して、ループ数を取得する手段と、ループ処理完了数をカウントするループカウンタを有するループ制御部を含み、前記ループ制御部は、次命令が前記ループ処理完了命令を有すパケットを取得し、該ループ処理完了命令の実行によりループカウンタを１加算し、該ループカウンタが前記ループ数より小さい場合は、該パケットを削除し、そうでない場合は該パケットを通過させることを特徴とするものである。
【０００７】
また、本発明による第２の態様のデータ処理装置は、データごとに、当該データを識別する識別情報および当該データに対する１つ以上の処理命令を示す命令情報を含む拡張識別情報が付加されたパケットを処理する複数の処理部を備え、前記識別情報は、ループ処理ごとに設定されるループＩＤを含み、前記処理命令は、ループ処理の完了を通知するループ処理完了命令を含み、前記ループ処理完了命令が次命令のパケットを取得し、前記ループＩＤの上限値を算出するループ制御部と、前記ループＩＤを、前記上限値を超えない範囲で１づつ加算してループ処理に必要なパケットを生成するループパケット生成部とを備えることを特徴とするものである。
【発明の効果】
【０００８】
本発明によれば、ループプログラムとその後続のプログラムの同期問題を解決するだけでなく、ループプログラム処理中のパケットの増大を抑制し、処理の高速性を損なうことなく、安定した処理を実現する。
【図面の簡単な説明】
【０００９】
【図１】本発明のデータ処理装置を備えたデータ処理システム全体の構成を示すブロック図である。
【図２】本発明のデータ処理装置で処理されるプログラム（実行コード）の概略フォーマットの一例である。
【図３】図２に示した中間パケットリストに入っている中間パケットのフォーマットを示す図である。
【図４】命令情報の実行順を示す図である。
【図５】データ処理装置内のＭＣＥおよびルーター間で通信される通信パケットのフォーマットを示す図である。
【図６】ＰＥ内、およびＭＣＥ内で使われる内部パケットのフォーマットを示す図である。
【図７】データ処理装置で用いられる命令セットの一例を示す図である。
【図８】データ処理装置内の構成を示すブロック図である。
【図９】ＭＣＥ内の構成を示すブロック図である。
【図１０】ＰＥ内の構成を示すブロック図である。
【図１１】宛先情報算出部の動作の一例を説明するためのフローチャートである。
【図１２】ＰＥ座標算出方法を説明するフローチャートである。
【図１３】基本的な命令セットを使ったデータフロー図の一例を示す図である。
【図１４】図１３のデータフロー図に対応した内部パケットの動作を示す図である。
【図１５】ループプログラムの動作を説明するための１例となるデータフロー図である。
【図１６】ループ制御部がパケット取得後の処理を説明するためのフローチャートである。
【図１７】ｌｉｄ上限値を算出する１例を説明するための図である。
【発明を実施するための形態】
【００１０】
以下、本発明の好適な実施の形態を、図１ないし図１７を参照して説明する。
まず、図１を参照して、データ処理装置を備えたデータ処理システム全体の構成の概略について説明する。
図１に示されているデータ処理システムは、データ処理装置１を備えた並列コンピュータシステムであり、データ処理装置１以外に、記憶装置６、入力装置７、出力装置８、およびバス９を含んで構成されている。また、データ処理装置１、記憶装置６、入力装置７、および出力装置８は、バス９を介して互いに接続されている。なお、データ処理装置１の構成についての詳細な説明は後述する。
【００１１】
記憶装置６は、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）などで構成され、後述するプログラム（実行コード）や当該プログラムの実行に用いられるデータなどを記憶している。また、データ処理装置１は、コンピュータシステムのＣＰＵに相当し、記憶装置６に記憶されているプログラムを実行する。なお、データ処理装置１の動作についての詳細な説明は後述する。
入力装置７は、キーボードやマウスなどで構成され、データやプログラム（実行コード）を含む情報を外部から当該データ処理システムに入力する。一方、出力装置８は、ディスプレイやプリンタなどで構成され、情報を文字や画像などとして外部に出力する。
【００１２】
なお、上記データ処理装置１、記憶装置６、入力装置７、および出力装置８の分類は、固定的なものではない。例えば、ハードディスクドライブや光ディスクドライブなどの補助記憶装置は、記憶装置６として用いられるが、外部との間で情報を入出力する入力装置７および出力装置８に分類してもよい。
【００１３】
図２はデータ処理装置１が実行可能なプログラム（実行コード）の概略データ構造図である。プログラムヘッダー４００、関数情報を記述した関数ディスクリプタリスト４０１、プログラムの実行に必要な全ての中間パケット４０２で構成された中間パケットリスト４０２、文字列リスト４０３、およびグローバルデータ４０４から構成される。
【００１４】
本実施形態における中間パケット４０２は図３のデータ構造をしており、データ１４が６４ビット、後述する延長フラグ１３と再延長フラグ１２がそれぞれ１ビット、命令数１１が４ビット、および８ビットの命令が最大８個書き込める命令情報１３が６４ビットで構成される。命令情報は図４に示すようにビットの下位から上位に向けて、左詰めで実行順に並んでいる。従って、命令数が１であれば、次に実行すべき次命令の命令コードは６３ビット目からの８ビットであり、式で表すと命令数をｎとして（７１ーｎ＊８）ビットから（６４−ｎ＊８）ビットである。なお、命令セットの中には２バイト命令があり、その場合は（７９−ｎ＊８）ビットから（６４ーｎ＊８）ビットが命令であるが、２バイト目はダウンカウンタ等の補助データになっており、命令コード自体は８ビットで示され、次命令としては１バイト命令の場合と同じ（７１ーｎ＊８）ビットから（６４−ｎ＊８）ビットである。
【００１５】
図８はデータ処理装置１内部の構成を示しており、ルーター１３０ａないし１３０ｐ、ＰＥ１００ａないし１００ｐ、ＭＣＥ３００（Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌ  Ｅｌｅｍｅｎｔ）、キャッシュメモリ制御部１２０、および通信路（伝送路）１４０で構成されている。
【００１６】
通信路１４０を流れるデータは図５に示す構造をしており、図３の中間パケットのデータに、消去フラグ２２、条件フラグ２１、識別情報２０、宛先ＰＥｙ３０、宛先ＰＥｘ３１，及びモード３２が付加されている。なお、図３と同じデータ部分は同じ符号を付している。
【００１７】
ここでＰＥ１００ａないし１００ｐの座標（Ｘ，Ｙ）を図６に示すように（０，０）ないし（３，３）と表し、図５の宛先ＰＥｘ３１が座標Ｘに、宛先ＰＥｙ３０が座標Ｙに対応するデータである。
モード３２は、値が１であれば次命令がＭＣＥで実行されることを意味し、パケットはＭＣＥに転送され、値が０であれば次命令はＰＥで実行されることを意味し、宛先ＰＥｘ３１と宛先ＰＥｙ３０が示す座標のＰＥに転送される。
【００１８】
図６はＭＣＥの内部、およびＰＥの内部のモジュール間でやりとりされる内部パケットのデータ構成図である。内部パケットは通信パケットのデータからモード３２，宛先ＰＥｘ３１、および宛先ＰＥｙ３０を削除した構造になっている。なお、図５および図６は図３と同じデータの部分には同じ符号を付けて重複説明を省いている、とともに太線で示してある。
【００１９】
以下、図９を参照して、本実施形態におけるＭＣＥの構成について説明する。
図９に示されているＭＣＥ３００はコマンド実行部３０１、パケット命令実行部３０２、バッファメモリ３０３、分配・比較・選択部３０４、入出力部３０５、メモリアクセス命令実行部３０７、およびループ制御部３０８をそれぞれ含んで構成されている。さらに入出力部３０５は、宛先情報算出部３０６を含み、ループ制御部３０８はｌｉｄ上限値算出器３０９を含む。
【００２０】
コマンド実行部３０１は、例えば入力装置７を使ってオペレータから入力・指示されたコマンドを、通信路９を通して取得し、該コマンドを実行する。一例としてオペレータが、あるプログラムを指定して、その起動を指示した場合は、コマンド実行部３０１は指定されたプログラムのプログラムヘッダ４００、および関数ディスクリプタ４０１をキャッシュメモリ制御部１２０を通して、記憶装置６から読み込み、プログラムの起動に必要なパケット列の中間パケットリスト４０２内のアドレスとパケット数を割り出し、その情報をパケット命令実行部３０２に渡してパケット生成を指示する。
【００２１】
パケット命令実行部３０２はコマンド実行部３０１からの命令、もしくは分配・比較・選択部３０４から受け取ったパケットの命令により、キャッシュメモリ制御部１２０を通して、記憶装置６にある図２のプログラムの中間パケットを１ないし複数読み込み、図６の内部パケット構造に変換して入出力部３０５に転送する。
【００２２】
入出力部３０５はパケット命令実行部３０２、メモリアクセス命令実行部３０７ないしループ制御部３０８から受け取った内部パケットに、後述する宛先情報算出部３０６で算出された宛先情報を付加して図５の通信パケット構造に変換し、隣接するルーターに転送する。ただし、ループ制御部３０８からは通信パケットを受け取る事があり、その場合はそのままルーターに転送する。隣接するルーターから取得した通信パケットは、モード３２、宛先ＰＥｘ３１、および宛先ＰＥｙ３０を削除した図６の内部パケット構造に変換し、分配・比較・選択部３０４に転送する。
【００２３】
分配・比較・選択部３０４は、取得パケットを次命令に応じて他のモジュールに分配する機能と、”ｗｒｉｔｅ”命令の待ち合わせをする機能を持っている。パケットの分配先はパケット命令実行部３０２、ループ制御部３０８、およびメモリアクセス命令実行部３０７であり、図７の命令セットの”Ｍｏｄｕｌｅ”の列に示す”Ｐ”はパケット命令実行部３０２を、”Ｌ”はループ制御部３０８を、”Ｍ”はメモリアクセス命令実行部３０７を示し、次命令によりそれぞれ対応するモジュールに転送する。
【００２４】
待ち合わせ機能は、次命令が２入力命令である”ｗｒｉｔｅ”命令の場合で、比較の結果ペアとなるパケットが見つからない取得パケットはバッファメモリ３０３に記憶し、ペアとなるパケットが見つかった（発火した）場合は、該パケットをバッファメモリ３０３から読み出し、取得パケットとペアにしてメモリアクセス命令実行部３０７に転送する。なお、パケットの比較方法は後述する。
【００２５】
メモリアクセス命令実行部３０７は分配・比較・選択部３０４から取得した１もしくは２個のパケットから、次命令が「ｒｅａｄ」であれば、そのパケットのデータ部に入っているアドレスから、キャッシュメモリ制御部１２０を通して記憶装置６のデータを読み込み、取得パケットのデータ部に読み込んだデータを上書きし、パケット中の命令数１１を１減算して入出力部３０５に転送する。次命令が「ｗｒｉｔｅ」であれば、左側オペランドのデータをアドレスとして、右側オペランドのデータを、キャッシュメモリ制御部１２０を通して記憶装置６に書き込む。その後、パケット中の命令数１１を１減算して入出力部３０５に転送する。
【００２６】
以下、図１０を参照して、本実施形態におけるＰＥの構成について説明する。
図１０に示されているＰＥ１００ａないし１００ｐは、入出力部２００、比較・選択部２０３，バッファメモリ２０４、処理命令実行部２０５、パケット生成部２０６、およびテンプレートバッファ２０７をそれぞれ含んで構成されている。入出力部２００は、さらに宛先情報算出部２０１を含む。
【００２７】
入出力部２００は、隣接するルーターから図５の通信パケットを入力し、図６の内部パケットに変換して比較・選択部２０３に転送する。また、処理命令実行部２０５から入力された内部パケットは、後述する宛先情報算出部２０１で宛先情報を算出し、その情報を該内部パケットに付加することで図５の通信パケットの形式に変換し、隣接するルーターに転送する。
【００２８】
比較・選択部２０３は、１入力命令であれば取得したパケットをそのまま処理命令実行部２０５に転送し、２入力命令であれば取得パケットをバッファメモリ２０４に記録した複数のパケットと前述した比較を行い、ペアとなるパケットが見つかればそのパケットを読み出し、取得パケットとペアにして処理命令実行部２０５に転送し、見つからない場合は取得パケットをバッファメモリに記録させる。
【００２９】
ここでパケットの比較について説明する。パケットの中の比較する部分は識別情報と処理命令である。比較しペアとなる条件は、識別情報全６４ビットの一致と、処理命令については、図７の命令セットの”Ｃｏｍｐａｒｅ”が”Ｎ”の場合は、次命令の左右フラグが反対であることと、該左右フラグを除く未実行命令のビット列が一致していることであり、”Ｃｏｍｐａｒｅ”が”２”の場合は、次命令の左右フラグが反対であることと、２バイト命令である次命令の該左右フラグを除く１５ビットのビット列が一致していることである。
【００３０】
パケット生成部２０６はテンプレートバッファ２０７に登録されたテンプレートを基に複数のパケットを生成し、入出力部２００に転送する。テンプレートにはＲ−ｔｅｍｐｌａｔｅデータとＳ−ｔｅｍｐｌａｔｅデータの２種類があり、それぞれ”ｒｅｐｅａｔ”命令と”ｓｔｅｐ”命令でテンプレートバッファに登録されたデータである。Ｒ−ｔｅｍｐｌａｔｅデータは基になるパケットにパケット生成数とｌｉｄピッチという生成条件を付加したデータで、Ｓ−ｔｅｍｐｌａｔｅデータはＲ−ｔｅｍｐｌａｔｅデータと同じ情報に加え、さらにデータの初期値とデータピッチという生成条件を付加したデータである。パケットの生成方法は、Ｒ−ｔｅｍｐｌａｔｅデータは基となるパケットのｌｉｄ値を０から１ずつ増加させ、パケット生成数だけ生成する。Ｓ−ｔｅｍｐｌａｔｅデータは基となるパケットのｌｉｄ値を０から１ずつ増加させたうえに、データ部にも生成条件の初期値からデータピッチずつ増加させたデータを書き込んだパケットをパケット生成数だけ生成するものである。
【００３１】
パケット生成部２０６はさらにｌｉｄ上限値を識別情報毎に複数持つことができ、これらは初期値として０が入っている。パケット生成時はこの該当する識別情報のｌｉｄ上限値を参照して、ｌｉｄ上限値以下のｌｉｄ値を持つパケットであれば生成し、そうでない場合はｌｉｄ上限値が更新されるのを待つ。ＭＣＥのループ制御部は更新したい識別情報を書き込み、それに対応するｌｉｄ上限値をデータ部に書き込み、”ｓｅｔ＿ｌｉｍｉｔ”命令を処理命令に書き込んだパケットを全ＰＥにブロードキャストすることでｌｉｄ上限値を更新する。
【００３２】
図１１と図１２のフローチャートを参照して、図９の宛先情報算出部３０６と、図１０の宛先情報算出部２０１における宛先ＰＥｘ３１、宛先ＰＥｙ３０、およびモード３２のデータを算出する具体的な動作の一例について説明する。
まず、パケットが入力されると（Ｓ１）、そのパケットの命令数が０であるか判定し（Ｓ２）、０であればそのパケットを消去し（Ｓ８）、０より大きければ、次命令が命令追加命令かどうかを判定する（Ｓ３）。これは具体的には、命令数＝１かつ延長フラグ＝１であるか判定する。命令追加命令であれば宛先ＰＥ座標（Ｘ，Ｙ）を算出して宛先ＰＥｘ３１と宛先ＰＥｙ３０に書き込み（Ｓ５）、モード３２に０を書き込む（Ｓ６）。次命令が命令追加命令でなければ（Ｓ３のＮＯ）、次命令がＭＣＥで実行する命令であるかどうかを判定する（Ｓ４）。次命令が３２より小さいかどうかを判定する。次命令がＭＣＥで実行する命令であれば（Ｓ４のＹＥＳ）モード３２に１を書き込み、そうでなければ（Ｓ４のＮＯ）Ｓ５に進む。
Ｓ５では宛先ＰＥ座標を算出したのち、Ｓ６に進み、モード３２に０を書き込む。
【００３３】
前述した宛先ＰＥ座標の算出の一例を図１２のフローチャートで示す。次命令が”ｒｅｐｅａｔ”命令であれば（Ｓ１１）、ダウンカウンタ値のビット列を使って宛先ＰＥ座標を生成する（Ｓ１２）。例えばＰＥの構成が８ｘ８＝６４個であればＸ，Ｙ座標はそれぞれ３ビットずつ必要なので、ダウンカウンタ値の３ビット目から５ビット目の３ビットをＰＥのＸ座標に使い、ダウンカウンタ値の０ビット目から２ビット目の３ビットをＹ座標に使う事ができる。これによりＰＥのテンプレートバッファはほぼ均一に使うことができ、パケット生成部２０６のパケット生成能力がほぼ均等になる。Ｓ１１の分岐で”ＮＯ”の場合は、特許文献３にあるように、ｌｉｄのビット列をＸ，Ｙ座標それぞれの上位ビットに使い、Ｘ，Ｙ座標それぞれの下位ビットに識別情報、および処理命令のうち次命令の左右情報を除く未実行命令を入力値とし、疑似乱数発生器で発生させた疑似乱数のビット列を使うことが有効である。これにより、ＰＥ間のパケット移動量の削減とＰＥ負荷の均一化が得られる。
【００３４】
ここで、データ処理装置１で用いられる命令セットの一例を図７に示す。図７において、各命令はＭＣＥで実行される命令とＰＥで実行される命令とに大別され、それぞれに１入力命令と２入力命令が含まれている。２入力命令は左側オペランドと右側オペランドがあり、データフロー図上ではノードの左側にくる矢印が左側オペランドで、ノードの右側に来る矢印が右側オペランドである。図７に示すように、”Ｄｉｒｅｃｔｉｏｎ”の列に”Ｌ”とあるのが左側オペランドで、”Ｒ”とあるのが右側オペランドで、空白になっている命令は１入力命令である。また”Ｈｅｘ”の列で、各命令に対して、オペレータ（演算子）に相当する記号と機械語における１６進表記とが設定されており、これらはデータフロー図やパケット列についての説明で適宜用いられる。各命令は、例えば８ビットの固定長のコードで識別できるようになっている。”Ｂｙｔｅｓ”の列は各命令のバイト数を示しており、１バイト命令を示す”１”のほかに２バイト命令を示す”２”もあるが、２バイト命令の２バイト目はダウンカウンターになっており、命令コードの部分は１バイト命令と同様に８ビットコードで識別している。
【００３５】
”Ｃｏｍｐａｒｅ”の列は２入力命令においてペアとなるパケットを探す際の、比較する処理命令部分を示し、”Ｎ”は命令数１１の数の未実行命令全てを比較するもので、”２”は次命令である２バイト命令の部分のみを比較するものである。”Ｍｏｄｕｌｅ”の列は実際に命令を実行するＭＣＥ、ＰＥ内部のモジュールを示し、これらについては適宜後述する。また、”Ｈｅｘ”の列に示すように、各命令に対して、オペレータ（演算子）に相当する記号と機械語における１６進表記とが設定されており、これらはデータフロー図やパケット列についての説明で適宜用いられる。
【００３６】
２入力命令については、説明の中で左右オペランドを識別する場合があり、例えば”ｗｒｉｔｅ”命令であれば左側オペランドは”ｗｒｉｔｅ＿Ｌ”、右側オペランドは”ｗｒｉｔｅ＿Ｒ”というように左側オペランドには”＿Ｌ”を、右側オペランドには”＿Ｒ”を付加して示す。
【００３７】
なお、図７に示す命令追加命令”ａｐｐ”は特殊な命令となっており、延長フラグが１の場合のみ命令情報の最上位の１バイト（最後に実行すべき命令）は強制的に命令追加命令である、という規則の基で実行される命令である。この規則のため命令追加命令は８ビット全ての値を命令コードとして使えるようになっている。これにより比較・選択部においてペアとなるべき対象パケットが複数見つかり、誤選択が発生することを防いでいる。
【００３８】
図１３のデータフロー図と図１４のパケット図を参照して、基本的な命令の実行について説明する。
図１３のデータフロー図は値がそれぞれ「５」と「３」の２個のデータを加算してから、その値をアドレスとするメモリのデータを読み込み、その読み込んだ値をメモリに書き込むというデータフロー図である。図中の四角はデータを表し、楕円はノード（処理命令）を表す。以降の図では図示しないが、矢印の近くの符号はその矢印の符号ではなく、その矢印上を流れるパケットの符号を示している。データ５５０を基に生成したパケットは”Ｐ５５０”、データ５５１を基に生成したパケットは”Ｐ５５１”とデータの符号の先頭に”Ｐ”を付加するものとする。また、各ノードで命令を実行後のパケットには数字の後に”ａ”，”ｂ”，．．．とアルファベットを添えていくものとし、２入力１出力命令では左から来るパケットの符号を使って出力パケットを示す。
【００３９】
図１４は、図１３のそれぞれのパケットをパケット図として示したものである。なお、パケット図の見やすさを考慮し、説明に不要な部分はできるだけ空欄にしているが、値としては０が入っているものとする。パケットＰ５５０はデータ部が５で、命令数が３個で”ｗｒｉｔｅ＿Ｒ”、”ｒｅａｄ”、および”＋＿Ｌ”である。パケットＰ５５１はデータ部が３で、命令数が３個で”ｗｒｉｔｅ＿Ｒ”、”ｒｅａｄ”、および”＋＿Ｒ”である。この２つのパケットは”ｗｒｉｔｅ＿Ｒ”と”ｒｅａｄ”が一致し、次命令は”＋”が一致し左右フラグが異なるため比較・選択部でペアと見なされ（発火し）”＋”（加算）が実行される。実行後のパケットはパケットＰ５５０ａに示すようにデータ部が５＋３＝８となり、命令数は１減算し２となる。次命令の”ｒｅａｄ”は単項演算のため、単独で実行され、その結果は一例として１００という値がメモリから読み込まれたとして、パケットＰ５５０ｂで示すようにデータ部が１００になり、命令数は１減算され１となる。この後は命令数が１で処理命令が”ｗｒｉｔｅ＿Ｌ”であるパケットとペアになり（発火し）、”ｗｒｉｔｅ”（メモリ書き込み）を実行する事になる。
【００４０】
図１５を参照して、ループプログラムの一例をデータフロー図で説明する。なお、ここでもパケットの符号には前述した規則を使用する。
図１５で示しているのはＣ言語で記述されたプログラムソースコードの一部分である次の３行だけをデータフロー図で示したものである。
【００４１】
for( int ii=0 ; ii < 8 ; ii++ ){
buf[ii] = 0 ;
}
【００４２】
図１５のデータフロー図の２重線の楕円は複数の２入力２出力のノードを省略して表現したもので、左から来るパケットの矢印に”Ｌ”を示し、その出力がダウンカウンターを減算しながら右から来る複数のパケットと演算を繰り返すものである。楕円が３重なっているノードはループプログラム内のノードを表し、ｌｉｄの異なるループ数のパケットが実行するノードである。
【００４３】
データ７０１はループ数の８、データ７０２はｌｉｄピッチの１で、”ｐａｃｋ”ノード７０６で１つのパケットのデータ部の上位と下位に詰める。”ｍａｘ＿ｌｉｄ”ノード７０７でＭＣＥのループ制御部３０８に最大ｌｉｄ値（８ｘ１−１＝７）を通知する。その後”ｒｅｐｅａｔ”ノード７０８と”ｓｔｅｐ”ノード７０９でループ数とｌｉｄピッチを含めて、パケットＰ７０２ａ、Ｐ７０３ａ、およびパケットＰ７０４とパケットＰ７０５から”ｐａｃｋ”命令と”ｓｔｅｐ”命令を実行した結果のパケットＰ７０４ｂを、ＰＥのテンプレートバッファ２０７に登録する。ＰＥのパケット生成部２０６は登録されたテンプレートデータを基にｌｉｄを０から７まで変化させた８個のパケットをテンプレートデータごとに生成、さらにＳ−ｔｅｍｐｌａｔｅデータの場合はｌｉｄの変化に加え、データ部を０から７まで変化させたパケットを生成、これはソースコードの変数”ｉｉ”に相当する。
【００４４】
これらそれぞれ８個ずつのパケットは”＋”、”ｗｒｉｔｅ”命令を実行後、”ｄｏｎｅ”命令７１０をＭＣＥのループ制御部３０８で実行する。ループ制御部３０８の処理の詳細は後述するが、ループ処理の最後に届いた”ｄｏｎｅ”命令７１０を持つパケットのみｌｉｄ値を０にしたうえで、未実行の命令を処理すべく入出力部３０５に転送するが、それ以前に届いた”ｄｏｎｅ”命令を持つパケットは全て消去する。その結果、ループプログラム以降の命令、この例では”ｗａｉｔ”命令７１１を実行するパケットは１個になり、ループプログラムの外で実行できるようにｌｉｄ値を０にしている。このパケットは”ｗａｉｔ”命令の左から来るパケットなので、全ループ処理の完了を待ってから実行すべき処理のパケット群は”ｗａｉｔ”命令の右から来るパケットにすることで同期処理を実現できる。
【００４５】
図１６のフローチャートを参照して、ＭＣＥのループ制御部３０８の処理について説明する。
図１６のフローチャートはループ制御部３０８がパケットを取得したときの処理である。ループ制御部３０８が処理する命令は”ｍａｘ＿ｌｉｄ”もしくは”ｄｏｎｅ”であるため、まず分岐Ｓ１で取得パケットの次命令から”ｍａｘ＿ｌｉｄ”の処理に進む（Ｓ１のＮＯ）。ここで初期化処理として取得パケットの識別情報の登録、ｌｉｄ上限値の初期化、ｌｉｄ上限値算出器３０９の初期化を行う（Ｓ２）。その後、ｌｉｄ上限値算出器３０９が算出したｌｉｄ上限値を全ＰＥにブロードキャストする。具体的には全てのＰＥごとにそのＰＥ座標を宛先とするパケットを作成し、それぞれの処理命令は”ｓｅｔ＿ｌｉｍｉｔ”の１命令だけにして、データ部にｌｉｄ上限値を書き込み、入出力部３０５に宛先情報算出不要の指示をして転送する。取得パケットの次命令が”ｄｏｎｅ”の場合（Ｓ１のＹＥＳ）は、”ｄｏｎｅ”を実行した回数がこのパケットを含めてループ数に達していなければ（Ｓ４のＮＯ）、ｌｉｄ上限値算出器３０９でｌｉｄ上限値を算出し（Ｓ５）、算出した値が以前にブロードキャストしたｌｉｄ上限値と同じでなければ（Ｓ６のＹＥＳ）、算出したｌｉｄ上限値をブロードキャストする（Ｓ３）。
【００４６】
なお、ここでデータ処理装置内のバッファやＦＩＦＯの状態を見て、ビジーと判断すればｌｉｄ上限値をブロードキャストしないという判断を加えることも有効である。また、Ｓ４でＮＯの場合は取得パケットは入出力部３０５に転送されないためここで消去され、”ｄｏｎｅ”の実行回数がループ数に達した場合（Ｓ４のＹＥＳ）は、終了処理（Ｓ７）を行った後、取得パケットの命令数を１減算し、ｌｉｄ値を０にセットして入出力部３０５に転送する。
【００４７】
ｌｉｄ上限値算出器３０９におけるｌｉｄ上限値の算出方法には以下の２つがある。
（１）”ｄｏｎｅ”パケット取得数  ＋（ＰＥ数ｘＮ）  ー１
（２）”ｄｏｎｅ”が来てない最小ｌｉｄ値  ＋（ＰＥ数ｘＮ）  ー１
【００４８】
上記”Ｎ”は整数値で、固定値のまま使う方法と、初期値からＰＥの処理命令実行部２０５の稼働率で変動させる方法の２種類がある。ＰＥ数を使うのはＰＥ全体の負荷をできるだけ均一にするためである。その上で、（１）はｌｉｄのカウンタを使えば容易に実装できる。（２）の実装は図１７に示す実線部分のｌｉｄフラグを用意し、常に０ビット目が０になるように実線エリアを図中左方向にずらし（ｌｉｄフラグとしては右方向にデータをシフトする）ながら、０ビット目の破線を含めたビット位置（”ｄｏｎｅ”が来ていない最小ｌｉｄ）を更新していくことで最小限のハードウェアリソースで実現できる。なお、実線エリアのビット数は想定される最大の（ＰＥ数ｘＮ）が必要である。（１）の欠点は、処理が進むにつれ同時に実行中のループ処理それぞれのｌｉｄ値のバラツキが大きくなってきて、画像処理のようにメモリを多く使うプログラムではメモリキャッシュのヒット率が低下する傾向があることである。（２）はその欠点を補ったもので、ｌｉｄ値のバラツキを完全に抑制しているため安定した性能が得られる特徴がある。
【００４９】
なお、これまでｌｉｄ上限値はＰＥのパケット生成部２０６で生成できるパケットの最大ｌｉｄ値として説明してきたが、これに限るものでなく、ｌｉｄ上限値未満のｌｉｄ値まで生成できるとしてもよく、その場合、前記ｌｉｄ上限値の算出方法は以下になる。
（１）”ｄｏｎｅ”パケット取得数  ＋（ＰＥ数ｘＮ）
（２）”ｄｏｎｅ”が来てない最小ｌｉｄ値  ＋（ＰＥ数ｘＮ）
【００５０】
なお、上記実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得るとともに、本発明にはその等価物も含まれる。
【符号の説明】
【００５１】
１                  データ処理装置
６                  記憶装置
７                  入力装置
８                  出力装置
９                  バス
１０                命令情報
１１                命令数
１２                再延長フラグ
１３                延長フラグ
１４                データ
２０                識別情報
２１                条件フラグ
２２                消去フラグ
３０                宛先ＰＥｙ
３１                宛先ＰＥｘ
３２                モード
１００ａ〜１００ｐ  ＰＥ
１２０              キャッシュメモリ制御部
１３０ａ〜１３０ｐ  ルーター
１４０              通信路
２００              入出力部（ＰＥ）
２０１              宛先情報算出部（ＰＥ）
２０３              比較・選択部
２０４              バッファメモリ（ＰＥ）
２０５              処理命令実行部
２０６              パケット生成部
２０７              テンプレートバッファ
３００              ＭＣＥ
３０１              コマンド実行部
３０２              パケット命令実行部
３０３              バッファメモリ（ＭＣＥ）
３０４              分配・比較・選択部
３０５              入出力部（ＭＣＥ）
３０６              宛先情報算出部（ＭＣＥ）
３０７              メモリアクセス命令実行部
３０８              ループ制御部
３０９              ｌｉｄ上限値算出器
４００              プログラムヘッダー
４０１              関数ディスクリプタリスト
４０２              中間パケットリスト
４０３              文字列リスト
４０４              グローバルデータ
【図１】
2014041640.tif 000003
【図２】
2014041640.tif 000004
【図３】
2014041640.tif 000005
【図４】
2014041640.tif 000006
【図５】
2014041640.tif 000007
【図６】
2014041640.tif 000008
【図７】
2014041640.tif 000009
【図８】
2014041640.tif 000010
【図９】
2014041640.tif 000011
【図１０】
2014041640.tif 000012
【図１１】
2014041640.tif 000013
【図１２】
2014041640.tif 000014
【図１３】
2014041640.tif 000015
【図１４】
2014041640.tif 000016
【図１５】
2014041640.tif 000017
【図１６】
2014041640.tif 000018
【図１７】
2014041640.tif 000019