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