(57)【特許請求の範囲】
【請求項１】
世代番号を格納する世代フィールド、ノード番号を格納するノードフィールド、命令を格納する命令フィールドおよびデータを格納するデータフィールドからなるデータパケットをパイプラインを周回させることにより、予め記憶したデータフロープログラムを実行するデータ駆動型処理装置であって、
ｋビット長（ｋは任意の正の整数）のメモリデータが格納されて、前記世代フィールドの世代番号に基づきアドレス指定される複数の領域を含むメモリと、
前記パイプラインに含まれる演算処理部であって、前記データパケットを入力して、入力データパケットの前記命令フィールドの前記命令に従い当該入力データパケットの内容を演算処理して、演算結果を当該入力データパケットに格納して、当該入力データパケットを前記パイプラインに出力する演算処理部とを備え、
２個のｍ（ｍはｎ＊ｋ＝ｍを満たす任意の整数、ただしｎは２以上の整数）ビット長の多倍精度データ同士のうち、一方の前記多倍精度データを前記ｋビット長ごとに分割して得られたｎ個のデータＡ[ｉ]（ただしｉ＝１〜ｎのいずれかの整数）と、他方の前記多倍精度データを前記ｋビット長ごとに分割して得られたｎ個のデータＢ[ｊ]（ただしｊ＝１〜ｎのいずれかの整数）との全ての組合わせについて、所定演算処理をすることにより、前記多倍精度データ同士の前記所定演算処理を行なうために、
前記演算処理部は、
前記全ての組合せの各組について、当該組の前記データＡ[ｉ]と前記データＢ[ｊ]を前記データフィールドに格納した前記データパケットを入力して、入力した当該データパケットの前記データフィールドのデータを前記命令フィールドの所定演算命令に従い前記所定演算処理して、前記所定演算処理の結果を複数の前記ｋビット長のデータに分割して、前記分割により得られた前記複数のｋビット長のデータのそれぞれを前記データフィールドに格納し、かつ前記アドレス指定される領域を異ならせる前記世代番号それぞれを前記世代フィールドに格納した複数の前記データパケットを当該演算処理部から出力する所定演算手段と、
前記演算処理部から出力された前記データパケットを入力して、入力したデータパケットのそれぞれについて累算処理して処理結果を格納した当該入力データパケットを前記演算処理部から出力する累算手段とを含み、
前記所定演算手段の前記所定演算処理により出力される前記複数のデータパケットの前記アドレス指定される領域を異ならせる前記世代番号は、当該所定演算処理の対象である前記データＡ[ｉ]と前記データＢ[ｊ]のｉとｊの値に基づき決定されて、
前記累算手段は、
入力した前記データパケットの前記データフィールドの前記ｋビット長のデータを、当該入力データパケットの前記世代フィールドの内容に基づく前記メモリの指定アドレスの前記領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、前記桁あふれしたデータを前記データフィールドに格納し前記世代フィールドに当該指定アドレスの次位のアドレスを指定するための前記世代番号を格納した当該入力データパケットを前記演算処理部から出力するデータ累積加算手段と、
前記桁あふれしたデータを前記データフィールドに格納した前記データパケットを入力して、当該入力データパケットの前記データフィールドの前記桁あふれしたデータを、当該入力データパケットの前記世代フィールドの内容に基づく前記メモリの指定アドレスの前記領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、当該桁あふれしたデータを前記データフィールドに格納し前記世代フィールドに当該指定アドレスの次位のアドレスを指定するための前記世代番号を格納した当該入力データパケットを前記演算処理部から出力するあふれデータ累積加算手段とを有して、
前記累積加算により前記指定アドレスの領域において桁あふれしたデータが生じる間は、前記あふれデータ累積加算手段による前記桁あふれしたデータについての前記累積加算が繰返されることを特徴とする、データ駆動型処理装置。
【請求項２】
前記演算処理部は、前記累積加算により前記指定アドレスの領域において桁あふれしたデータが生じているか否か判定する桁あふれ判定手段をさらに含み、
前記桁あふれ判定手段により桁あふれしたデータが生じていると判定されたことに応じて、前記あふれデータ累積加算手段により前記桁あふれしたデータについての前記累積加算が行なわれることを特徴とする、請求項１に記載のデータ駆動型処理装置。
【請求項３】
前記一方の多倍精度データを前記ｋビット長ごとに分割して得られたｎ個の前記データＡ[ｉ]（ただしｉ＝１〜ｎのいずれかの整数）は、前記メモリのｎ個の領域に前記メモリデータとしてそれぞれ格納されて、
前記他方の多倍精度データを前記ｋビット長ごとに分割して得られたｎ個の前記データＢ[ｊ]（ただしｊ＝１〜ｎのいずれかの整数）は、前記メモリの前記データＡ[ｉ]が格納される領域とは異なるｎ個の領域に前記メモリデータとしてそれぞれ格納されて、
前記累積加算結果は前記メモリの、ｎ個の前記データＡ[ｉ]が格納される領域およびｎ個の前記データＢ[ｉ]が格納される領域とは異なる領域に、前記累算手段により前記アドレス指定されて格納されて、
前記メモリから前記データＡ[ｉ]と前記データＢ[ｊ]からなる前記全ての組合わせを読出し、読出した各組のデータＡ[ｉ]とデータＢ[ｊ]を前記データフィールドに格納した各前記データパケットを、前記演算処理部に順次に与えることを特徴とする、請求項１または２に記載のデータ駆動型処理装置。
【請求項４】
前記データ累積加算手段および前記あふれデータ累積加算手段のそれぞれは、
与えられる前記データパケットを入力して、該入力データパケット中の前記データフィールドの内容を、当該入力データパケットの前記世代フィールドの内容に基づく前記メモリの指定アドレスの前記領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、前記桁あふれしたデータを当該入力データパケットの前記データフィールドに格納して、当該入力データパケットを出力することを指示する演算命令に従い動作することを特徴とする、請求項１から３のいずれかに記載のデータ駆動型処理装置。
【請求項５】
世代番号を格納する世代フィールド、ノード番号を格納するノードフィールド、命令を格納する命令フィールドおよびデータを格納するデータフィールドからなるデータパケットをパイプラインを周回させることにより、予め記憶したデータフロープログラムを実行するデータ駆動型処理装置におけるデータ処理方法であって、
前記データ駆動型処理装置は、
ｋビット長（ｋは任意の正の整数）のメモリデータが格納されて、前記世代フィールドの世代番号に基づきアドレス指定される複数の領域を含むメモリと、
前記パイプラインに含まれる演算処理部であって、前記データパケットを入力して、入力データパケットの前記命令フィールドの前記命令に従い当該入力データパケットの内容を演算処理して、演算結果を当該入力データパケットに格納して、当該入力データパケットを前記パイプラインに出力する演算処理部とを備え、
前記データ処理方法は、
２個のｍ（ｍはｎ＊ｋ＝ｍを満たす任意の整数、ただしｎは２以上の整数）ビット長の多倍精度データ同士のうち、一方の前記多倍精度データを前記ｋビット長ごとに分割して得られたｎ個のデータＡ[ｉ]（ただしｉ＝１〜ｎのいずれかの整数）と、他方の前記多倍精度データを前記ｋビット長ごとに分割して得られたｎ個のデータＢ[ｊ]（ただしｊ＝１〜ｎのいずれかの整数）との全ての組合わせについて、所定演算処理をすることにより、前記多倍精度データ同士の前記所定演算処理を行なう場合に、
前記演算処理部において、
前記全ての組合せの各組について、当該組の前記データＡ[ｉ]と前記データＢ[ｊ]を前記データフィールドに格納した前記データパケットを入力して、入力した当該データパケットの前記データフィールドのデータを前記命令フィールドの所定演算命令に従い前記所定演算処理して、前記所定演算処理の結果を複数の前記ｋビット長のデータに分割して、前記分割により得られた前記複数のｋビット長のデータのそれぞれを前記データフィールドに格納し、かつ前記アドレス指定される領域を異ならせる前記世代番号それぞれを前記世代フィールドに格納した複数の前記データパケットを当該演算処理部から出力する所定演算ステップと、
前記演算処理部から出力された前記データパケットを入力して、入力したデータパケットのそれぞれについて累算処理して処理結果を格納した当該入力データパケットを前記演算処理部から出力する累算ステップとを含み、
前記所定演算ステップにおける前記所定演算処理により出力される前記複数のデータパケットの前記アドレス指定される領域を異ならせる前記世代番号は、当該所定演算処理の対象である前記データＡ[ｉ]と前記データＢ[ｊ]のｉとｊの値に基づき決定されて、
前記累算ステップでは、
入力した前記データパケットの前記データフィールドの前記ｋビット長のデータを、当該入力データパケットの前記世代フィールドの内容に基づく前記メモリの指定アドレスの前記領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、前記桁あふれしたデータを前記データフィールドに格納し前記世代フィールドに当該指定アドレスの次位のアドレスを指定するための前記世代番号を格納した当該入力データパケットを前記演算処理部から出力するデータ累積加算ステップと、
前記桁あふれしたデータを前記データフィールドに格納した前記データパケットを入力して、当該入力データパケットの前記データフィールドの前記桁あふれしたデータを、当該入力データパケットの前記世代フィールドの内容に基づく前記メモリの指定アドレスの前記領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、当該桁あふれしたデータを前記データフィールドに格納し前記世代フィールドに当該指定アドレスの次位のアドレスを指定するための前記世代番号を格納した当該入力データパケットを前記演算処理部から出力するあふれデータ累積加算ステップとを有して、
前記累積加算により前記指定アドレスの領域において桁あふれしたデータが生じる間は、前記あふれデータ累積加算ステップによる前記桁あふれしたデータについての前記累積加算が繰返されることを特徴とする、データ駆動型処理装置におけるデータ処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はデータ駆動型処理装置およびデータ駆動型処理装置におけるデータ処理方法に関し、特に、多倍精度形式のデータ（以下、多倍精度データという）についてデータ駆動型の演算を行なうデータ駆動型処理装置およびデータ駆動型処理装置におけるデータ処理方法に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
大量データの高速処理が望まれる場合には、並列処理が有効である。並列処理向きアーキテクチャのうちでも、データ駆動型と呼ばれるものが特に注目される。
【０００３】
データ駆動型情報処理システムでは、「ある処理に必要な入力データがすべて揃い、かつその処理に必要な演算装置などの資源が割当てられたときに処理が行なわれる」という規則に従って処理が並列に進行する。
【０００４】
図１３は、従来およびこの発明の実施の形態に適用されるデータ駆動型情報処理システムのブロック構成図である。図１４は、従来のデータ駆動型処理装置の構成図である。図１５（Ａ）と（Ｂ）は従来およびこの発明の実施の形態に適用されるデータパケットのフィールド構成図である。図１５（Ａ）では、データ駆動型処理装置の入出力データパケットＰＡの基本構成が示される。図１５（Ｂ）では、データ駆動型処理装置内部を流れるデータパケットＰＡ１の基本構成が示される。
【０００５】
図１５（Ａ）のデータパケットＰＡはプロセッサ番号ＰＥ（Processing Element）を格納するフィールド１８、ノード番号Ｎを格納するフィールド１９、世代番号Ｇを格納するフィールド２０およびデータＤを格納するフィールド２１を含む。図１５（Ｂ）のデータパケットＰＡ１は、図１５（Ａ）と同様のフィールド１９〜２１と、命令コードＣを格納するフィールド２２とを含む。
【０００６】
図１３においてデータ駆動型情報処理システムは従来のデータ駆動型処理装置１（本実施の形態に適用されるデータ駆動型処理装置１０）、複数のデータが予め格納されるデータメモリ３およびメモリインターフェース２を含む。データ駆動型処理装置１（１０）はデータ伝送路４、５および９のそれぞれが接続される入力ポートＩＡ、ＩＢおよびＩＶ、ならびにデータ伝送路６、７および８のそれぞれが接続される出力ポートＯＡ、ＯＢおよびＯＶを含む。
【０００７】
データ駆動型処理装置１（１０）はデータ伝送路４または５から入力ポートＩＡまたはＩＢを介して、データパケットＰＡが、時系列的に入力される。データ駆動型処理装置１（１０）には所定の処理内容がプログラムとして予め記憶されており、そのプログラム内容に基づく処理が実行される。
【０００８】
メモリインターフェース２はデータ駆動型処理装置１（１０）の出力ポートＯＶから出力されてデータメモリ３に対するアクセス（データメモリ３の内容の参照／更新など）要求を、データ伝送路８を介して受理する。メモリインターフェース２は受理したアクセス要求に従ってメモリアクセス制御線ＳＳＬを介してデータメモリ３に対してアクセスを行なった後、その結果を、データ伝送路９および入力ポートＩＶを介してデータ駆動型処理装置１（１０）に与える。
【０００９】
データ駆動型処理装置１（１０）は、入力したデータパケットＰＡに対する処理をして、処理が終了した後、出力ポートＯＡおよびデータ伝送路６または出力ポートＯＢおよびデータ伝送路７を介してデータパケットＰＡを出力する。
【００１０】
図１４には、従来のデータ駆動型処理装置１の構成が示される。図において、データ駆動型処理装置１は入出力制御部１１、合流部１２、データ駆動型の処理を行なうために発火制御部１３、内蔵メモリ１５が接続される演算部１４およびプログラム記憶部１６ならびに分岐部１７を含む。
【００１１】
ここで図１５（Ａ）と（Ｂ）を参照すると、プロセッサ番号ＰＥは、複数のデータ駆動型処理装置１が接続されたシステムにおいて対応するデータパケットＰＡが処理されるべきデータ駆動型処理装置１を特定するための情報である。ノード番号Ｎは、プログラム記憶部１６の内容をアクセスするためのアドレスとして用いられる。世代番号Ｇは、データ駆動型処理装置１に時系列に入力されるデータパケットを一意に識別するための識別子として用いられる。また世代番号Ｇはデータメモリ３が画像データメモリであった場合には、データメモリ３をアクセスするためのアドレスとしても用いられる。その際には、世代番号Ｇは上位ビットから順にフィールド番号Ｆ♯、ライン番号Ｌ♯およびピクセル番号Ｐ♯を示す。
【００１２】
動作において、図１５（Ａ）のデータパケットＰＡはデータ伝送路４、５を介してプロセッサ番号ＰＥで指定されたデータ駆動型処理装置１に与えられると入出力制御部１１において図１５（Ｂ）のデータパケットＰＡ１となる。つまり入出力制御部１１は、入力したデータパケットＰＡのプロセッサ番号ＰＥのフィールド１８を破棄して、該入力データパケットＰＡのノード番号Ｎに基づいて、命令コードＣと新たなノード番号Ｎとを得て、該入力データパケットＰＡのフィールド１８と１９にそれぞれ格納して、データパケットＰＡ１を合流部１２に出力する。したがって、入出力制御部１１から合流部１２に与えられたデータパケットＰＡ１は図１５（Ｂ）の構成を有する。なお、入出力制御部１１では世代番号ＧとデータＤは変化しない。
【００１３】
合流部１２は、入出力制御部１１から与えられるデータパケットＰＡ１、ならびに分岐部１７から出力されるデータパケットＰＡ１を順次入力して、発火制御部１３に出力する。
【００１４】
発火制御部１３には、対となるデータパケットＰＡ１を検出する（これを発火という）ための待合せメモリ７３１と定数データが１つ以上格納される定数データメモリ７３２が含まれる。発火制御部１３は、待合せメモリ７３１を利用して合流部１２から与えられるデータパケットＰＡ１について必要に応じて待合せを行なう。この結果、ノード番号Ｎおよび世代番号Ｇが一致する２つのデータパケットＰＡ１、すなわち対となる異なる２つのデータパケットＰＡ１のうち一方のデータパケットＰＡ１のフィールド２１のデータＤを、他方のデータパケットＰＡ１のフィールド２１に追加して格納して、この他方のデータパケットＰＡ１を演算部１４に出力する。このとき一方のデータパケットＰＡ１は消去される。ここでは、演算されるべき相手がデータパケットＰＡ１ではなく定数データである場合には、発火制御部１３での待合せは行なわれず、定数データが定数データメモリ７３２から読出されてデータパケットＰＡ１のフィールド２１に追加して格納されて、該データパケットＰＡ１は演算部１４に出力される。
【００１５】
演算部１４は発火制御部１３から与えられたデータパケットＰＡ１を入力して、データパケットＰＡ１の命令コードＣを解読して、解読結果に基づいて、所定の処理を行なう。命令コードＣがデータＤを含むデータパケットＰＡ１の内容に対する演算命令を示す場合には該命令コードＣに従いデータパケットＰＡ１の内容について所定の演算処理が施されて、その結果は該データパケットＰＡ１に格納されて、該データパケットＰＡ１はプログラム記憶部１６に出力される。また、このとき、データパケットＰＡ１の命令コードＣがメモリアクセス命令を指示している場合には内蔵メモリ１５へのアクセス処理が行なわれて、アクセス結果を格納したデータパケットＰＡ１はプログラム記憶部１６に出力される。なお、演算部１４に接続されるメモリはデータ駆動型処理装置１に内蔵されるメモリ１５に限定されず該装置に外付けされるメモリであってもよい。
【００１６】
また演算部１４は、命令コードＣがデータメモリ３に対するアクセス命令を示す場合にはアクセス要求として該データパケットＰＡ１を、データ伝送路８を介してメモリインターフェース２に与える。
【００１７】
メモリインターフェース２は、データ伝送路８を介して与えられたデータパケットＰＡ１を入力して、該入力データパケットＰＡ１の内容に従って、メモリアクセス制御線ＳＳＬを介してデータメモリ３をアクセスする。そのアクセスの結果は該入力データパケットＰＡ１のフィールド２１にデータＤとして格納されて、該データパケットＰＡ１はデータ伝送路９を介して演算部１４に与えられる。
【００１８】
プログラム記憶部１６は、複数の次位の命令コードＣおよびノード番号Ｎからなるデータフロープログラムが格納されたプログラムメモリ１６１を有する。プログラム記憶部１６は、演算部１４から与えられたデータパケットＰＡ１を入力し、該入力データパケットＰＡ１のノード番号Ｎに基づくアドレス指定によって、次位のノード番号Ｎおよび次位の命令コードＣをプログラムメモリ１６１から読出し、読出したノード番号Ｎおよび命令コードＣを、該入力データパケットＰＡ１のフィールド１９および２２のそれぞれに格納して、該入力データパケットＰＡ１を分岐部１７に出力する。
【００１９】
分岐部１７は、与えられたデータパケットＰＡ１の命令コードＣが該データ駆動型処理装置１内の演算部１４で実行されるべきものか、外部のデータ駆動型処理装置１の演算部１４で実行されるべきものかを判別する。外部のデータ駆動型処理装置１の演算部１４で実行されるべきと判別された場合にはデータパケットＰＡ１が入出力制御部１１に出力されて、入出力制御部１１はデータパケットＰＡ１を適切な出力ポートから該装置の外部に出力する。一方、該データ駆動型処理装置１内の演算部１４で実行すべきと判別された場合は、データパケットＰＡ１は合流部１２に与えられる。
【００２０】
このようにして、データパケットＰＡ１がデータ駆動型処理装置１内を周回することにより、プログラムメモリ１６１に予め記憶されたデータフロープログラムに従う処理が進行する。
【００２１】
データパケットはデータ駆動型処理装置１内においてはハンドシェイクによって非同期に転送される。プログラムメモリ１６１に格納されたデータフロープログラムに従う処理は、データパケットがデータ駆動型処理装置１内を周回することによるパイプライン処理に従い並列に実行される。よって、データ駆動型処理方法によれば、データパケット単位での処理の並列性が高く装置内を周回するデータパケットのフローレートが処理性能の１つの尺度となる。
【００２２】
近年はこのようなデータ駆動型処理方法の特徴が、大量の演算を高速で行なうことが必要とされる画像処理あるいは映像信号処理へと応用される。画像や映像信号の性質上、これらに対応のデータのビット長は短い。したがって、画像処理あるいは映像信号処理においても短いビット長のデータが処理対象とされる。現在、図１５（Ａ）と（Ｂ）のデータＤのフィールド２１は１２ｂｉｔ長を有する。同様に、データメモリ３や内蔵メモリ１５における１ワードも、１２ｂｉｔ長を有する。
【００２３】
上述したような画像処理あるいは映像信号処理とは異なり処理対象とされるデータのビット長が非常に長い処理もある。このような処理としては、たとえば公開された鍵を用いた暗号化処理である公開鍵暗号化処理やそのための復号化処理がある。
【００２４】
ここで、上述の公開鍵暗号化処理について説明する。周囲には秘密にして、特定の相手にだけある文（データ）を伝えたいとき、その伝えたい文（データ）を平文と呼び、平文を相手に伝達するために暗号化処理を施したものを暗号文と呼ぶ。平文をある法則によって暗号文へ変換する（暗号化する）あるいは暗号文を平文へ変換する（復号化する）ためのパラメータを鍵と呼ぶ。公開鍵暗号化方式では、数学的な性質が利用されることにより暗号文や公開鍵が第三者にわかっても送受信者が互いに独自に持っている秘密の鍵が知られなければ暗号文を解読できない、または容易には解読できない仕組みとなっている。公開鍵暗号化方式の代表的なものとしてはＲＳＡ（Rivest ，Shamir, Adlemanの略）やＤＨ（Diffie Hellmanの略）がある。以下、一例としてＤＨの鍵交換について説明する。
【００２５】
鍵交換を行なう２人をＡとＢとする。ＡとＢは、自分の秘密鍵Ｓ（Ａ）およびＳ（Ｂ）のそれぞれを生成し、これを使って自分の公開鍵Ｐ（Ａ）およびＰ（Ｂ）のそれぞれを、次の方法で作成する。なお、秘密鍵Ｓ（Ａ）およびＳ（Ｂ）のそれぞれは１０２４ｂｉｔ長のデータである。公開鍵暗号化処理では秘密鍵は一般的に１０２４ｂｉｔ長を有する。
【００２６】
公開鍵Ｐ（Ａ）＝Ｇ＾Ｓ（Ａ）ｍｏｄＰおよび公開鍵Ｐ（Ｂ）＝Ｇ＾Ｓ（Ｂ）ｍｏｄＰで求められる。ここで“＾”は冪乗算を示し“ｍｏｄ”は剰余算を示す。また、変数ＧおよびＰの値は定数として予め定められている。ＡとＢは、お互いに生成した公開鍵を相手に送信し、各人が相手の公開鍵を受理すると、次のように共通鍵Ｃが作成される。つまり、Ａは、Ｃ＝Ｐ（Ｂ）＾Ｓ（Ａ）ｍｏｄＰにより共通鍵Ｃを作成し、ＢはＣ＝Ｐ（Ｂ）＾Ｓ（Ａ）ｍｏｄＰに従い共通鍵Ｃを作成する。
【００２７】
２人が求めた共通鍵Ｃは全く同じ値となり、こうして秘密鍵を第三者に知られることなく送受信者で鍵の共有を図ることができる。なおＳ（Ａ）、Ｓ（Ｂ）およびＰは１０２４ｂｉｔ長のデータであり、Ｐ（Ａ）、Ｐ（Ｂ）およびＣもまた１０２４ｂｉｔ長のデータである。
【００２８】
上述した公開鍵の作成で使用される“Ｘ＾ＹｍｏｄＺ”という式に従う演算結果を求める際には、Ｘを定数とする乗算または２乗演算と、Ｚを除数とする除算とが交互に繰返し行なわれる。またこの繰返し計算の中間結果を格納するために作業領域Ｕ（２０４８ｂｉｔ）およびＶ（２０４８ｂｉｔ）が準備される。“Ｘ＾ＹｍｏｄＺ”の演算のための処理フローが図１６に示される。
【００２９】
図１６はノイマン型計算機においてＸ＾ＹｍｏｄＺの演算を実行するための処理フローチャートである。図１６の処理フローを説明する。変数Ｘ，ＹおよびＺは、それぞれ１０２４ｂｉｔ長で構成されている。これら変数の値は、計算機内の内部メモリに格納されており処理開始時に内部メモリから読出される。その後、交互に中間演算とその結果格納が行なわれながら演算が進行する。なお、処理フローにおいて変数Ｙ［ｋ］は変数Ｙのｋビット目の値を示す。
【００３０】
まず、ステップＳ１において初期設定がなされる。つまり作業領域Ｕの内容はリセットされて作業領域Ｖの内容には１が設定される。そして制御変数ｋに１０２３がセットされる。つまり、制御変数ｋが１０２３から０まで１ずつデクリメントされながら、以下の演算が繰返される。
【００３１】
ステップＳ２では、変数Ｙ［ｋ］が１であるか０であるかで処理は分岐する。もし、変数Ｙ［ｋ］が１であれば、ステップＳ３の処理に移行するが、０であれば後述のステップＳ６に移行する。
【００３２】
ステップＳ３では、Ｖ×Ｘの演算が行なわれ、その結果が作業領域Ｕに格納される。次のステップＳ４ではＵ％Ｚに従う演算がなされて、つまり（作業領域Ｕに格納された値÷Ｚ）の剰余が求められて、その剰余値が作業領域Ｖに格納される。次のステップＳ５では、制御変数ｋが０であるか否かが判定される。０でなければステップＳ６において、作業領域Ｖの値が２乗されて、その結果が作業領域Ｕに格納される。そして、次のステップＳ７ではＵ％Ｚに従う演算がなされて、すなわち（作業領域Ｕに格納された値÷Ｚ）の剰余が求められて、その剰余値が作業領域Ｖに格納される。次のステップＳ８においては、制御変数ｋの値が１デクリメントされる。以降Ｓ２〜Ｓ８の処理が、ステップＳ５においてｋ＝０と判定されるまで繰返される。その結果、作業領域Ｖに格納されている値が、“Ｘ＾ＹｍｏｄＺ”の演算結果値となる。
【００３３】
このように公開鍵暗号化処理および復号化処理に代表されるように多倍精度データを処理する要求が生じているが、従来のデータ駆動型処理装置１によって多倍精度データを処理する方式はまだ確立されていない。詳述すると、公開鍵暗号化処理で必要とされる演算のビット長は１０２４ｂｉｔ程度であり、データ駆動型処理装置１によって、そのようなビット長を有した演算器、データパケットおよびメモリの１ワードを構成することは、データ駆動型処理装置１をＬＳＩ（集積回路の略）を用いて実現する場合の回路実装面積およびバス幅などの物理的な制約上非常に困難である。
【００３４】
それゆえにこの発明の目的は、多倍精度データを効率よく処理することのできるデータ駆動型処理装置およびデータ駆動型処理装置におけるデータ処理方法を提供することである。
【００３５】
【課題を解決するための手段】
この発明のある局面に係るデータ駆動型処理装置は、世代番号を格納する世代フィールド、ノード番号を格納するノードフィールド、命令を格納する命令フィールドおよびデータを格納するデータフィールドからなるデータパケットをパイプラインを周回させることにより、予め記憶したデータフロープログラムを実行するデータ駆動型処理装置であって、ｋビット長（ｋは任意の正の整数）のメモリデータが格納されて、世代フィールドの世代番号に基づきアドレス指定される複数の領域を含むメモリと、パイプラインに含まれる演算処理部であって、データパケットを入力して、入力データパケットの命令フィールドの命令に従い当該入力データパケットの内容を演算処理して、演算結果を当該入力データパケットに格納して、当該入力データパケットをパイプラインに出力する演算処理部を備える。
【００３６】
２個のｍ（ｍはｎ＊ｋ＝ｍを満たす任意の整数、ただしｎは２以上の整数）ビット長の多倍精度データ同士のうち、一方の多倍精度データをｋビット長ごとに分割して得られたｎ個のデータＡ[ｉ]（ただしｉ＝１〜ｎのいずれかの整数）と、他方の多倍精度データをｋビット長ごとに分割して得られたｎ個のデータＢ[ｊ]（ただしｊ＝１〜ｎのいずれかの整数）との全ての組合わせについて、所定演算処理をすることにより、多倍精度データ同士の所定演算処理を行なうために、演算処理部は、所定演算手段と累算手段とを有する。
【００３７】
所定演算手段は、全ての組合せの各組について、当該組のデータＡ[ｉ]とデータＢ[ｊ]をデータフィールドに格納したデータパケットを入力して、入力した当該データパケットのデータフィールドのデータを命令フィールドの所定演算命令に従い所定演算処理して、所定演算処理の結果を複数のｋビット長のデータに分割して、分割により得られた複数のｋビット長のデータのそれぞれをデータフィールドに格納し、かつアドレス指定される領域を異ならせる世代番号それぞれを世代フィールドに格納した複数のデータパケットを当該演算処理部から出力する。
【００３８】
累算手段は、演算処理部から出力されたデータパケットを入力して、入力したデータパケットのそれぞれについて累算処理して処理結果を格納した当該入力データパケットを演算処理部から出力する。
所定演算手段の所定演算処理により出力される複数のデータパケットのアドレス指定される領域を異ならせる世代番号は、当該所定演算処理の対象であるデータＡ[ｉ]とデータＢ[ｊ]のｉとｊの値に基づき決定される。
【００３９】
累算手段は、データ累積加算手段とあふれデータ累積加算手段とを有する。
データ累積加算手段は、入力したデータパケットそれぞれのデータフィールドのｋビット長のデータを、当該入力データパケットの世代フィールドの内容に基づくメモリの指定アドレスの領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、桁あふれしたデータをデータフィールドに格納し世代フィールドに当該指定アドレスの次位のアドレスを指定するための世代番号を格納した当該入力データパケットを演算処理部から出力する。
【００４０】
あふれデータ累積加算手段は、桁あふれしたデータをデータフィールドに格納したデータパケットを入力して、当該入力データパケットのデータフィールドの桁あふれしたデータを、当該入力データパケットの世代フィールドの内容に基づくメモリの指定アドレスの領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、桁あふれしたデータをデータフィールドに格納し世代フィールドに当該指定アドレスの次位のアドレスを指定するための世代番号を格納した当該入力データパケットを演算処理部から出力する。累積加算により指定アドレスの領域において桁あふれしたデータが生じる間は、あふれデータ累積加算手段による桁あふれしたデータについての累積加算は繰返される。
【００４１】
上述のデータ駆動型処理装置によれば、多倍精度データについて所定演算処理が行なわれる際には、多倍精度データはｋビット長単位に分割された複数の単精度データとして、そしてメモリのｋビット長のｎ個の領域の集合は該多倍精度データとして扱われる。それゆえに、データ駆動型処理装置において多倍精度データ専用の累算器を特別に用意しなくても通常のメモリの領域で多倍精度データの累算器の役割を果たすことができるから、多倍精度データについて所定演算処理が行なわれる際でも、データ駆動型処理装置の小型化は阻害されない。
【００４２】
また多倍精度データの所定演算では、多倍精度データはｋビット長の単精度データ単位の互いに独立な演算要素に分割することによってデータについての演算をすべて同時並列に実行できるから、データ駆動型処理装置の並列処理能力を最大限に発揮することができる。
【００４３】
また、データ駆動型処理装置では、複数の演算の同時並列処理能力に加えてパイプライン並列処理という特徴を有しているから、多倍精度データの所定演算処理において、メモリを用いたデータの累算時に桁あふれが連続的に発生しても連続発生する桁あふれによる処理の遅延量は他の単精度データの処理によって抑制される。つまりオーバーフローの発生度合いは多倍精度データ演算処理全体にかかる所要時間（レスポンス）にほとんど影響しない。
【００４４】
さらに多倍精度データのデータ長に関して論理的な制約がない。データ駆動型処理装置の通常のメモリの領域やデータパケットが利用されるから、物理的に資源の許す限りどんなに長いビット長の多倍精度データであっても所定演算処理できる。しかも、ビット長が異なる多種類の多倍精度データを同時に扱うこともできる。
【００４５】
上述の所定演算処理は、加算、減算、除算および乗算のいずれであってもよい。
【００４６】
上述のデータ駆動型処理装置において、演算処理部は、累積加算により指定アドレスの領域において桁あふれしたデータが生じているか否か判定する桁あふれ判定手段をさらに有して、桁あふれ判定手段により桁あふれしたデータが生じていると判定されたことに応じて、あふれデータ累積加算手段により桁あふれしたデータについての累積加算が行なわれる。
【００４７】
上述のデータ駆動型処理装置によれば、桁あふれ判定手段を設けることにより、桁あふれしたデータが生じている間は、あふれデータ累積加算手段により桁あふれしたデータについての累積加算が行なわれる。それゆえに、桁あふれしたデータを確実に繰上げながら所定演算を実行することができる。
【００４８】
上述のデータ駆動型処理装置において、一方の多倍精度データをｋビット長ごとに分割して得られたｎ個のデータＡ[ｉ]（ただしｉ＝１〜ｎのいずれかの整数）は、メモリのｎ個の領域のそれぞれにメモリデータとして格納されて、他方の多倍精度データがｋビット長ごとに分割して得られたｎ個のデータＢ[ｊ]（ただしｊ＝１〜ｎのいずれかの整数）は、メモリのデータＡ[ｉ]が格納される領域とは異なるｎ個の領域にメモリデータとしてそれぞれ格納される。
累積加算結果はメモリの、ｎ個のデータＡ[ｉ]が格納される領域およびｎ個のデータＢ[ｉ]が格納される領域とは異なる領域に、累算手段によりアドレス指定されて格納される。
メモリから前記データＡ[ｉ]とデータＢ[ｊ]からなる全ての組合わせを読出し、読出した各組のデータＡ[ｉ]とデータＢ[ｊ]をデータフィールドに格納した各データパケットは、演算処理部に順次与えられる。
【００４９】
上述のデータ駆動型処理装置によれば、２個のｍビット長の多倍精度データ同士を所定演算処理することができる。
【００５０】
上述のデータ駆動型処理装置では、データパケットは、該データパケットを一意に識別するための世代番号が格納される世代フィールドを有する。
【００５１】
上述のデータ駆動型処理装置によれば、累算器として機能するメモリの領域のアドレスは、データパケットを一意に識別するための世代番号が格納される世代フィールドの内容に基づいて指定される。したがって、多倍精度データを分割して得られた複数のｋビット長の単精度データのそれぞれについて対応するアドレスが一意に指定されることになって、メモリにおける累算を確実に行うことができる。
【００５２】
上述のデータ駆動型処理装置において、データ累積加算手段およびあふれデータ累積加算手段のそれぞれは、以下の特徴を有する。つまり、与えられるデータパケットを入力して、該入力データパケット中のデータフィールドの内容を、当該入力データパケットの世代フィールドの内容に基づくメモリの指定アドレスの領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、桁あふれしたデータを入力データパケットのデータフィールドに格納して、該入力データパケットを出力することを指示する演算命令に従い動作する。
【００５３】
上述のデータ駆動型処理装置によれば、データ累積加算手段およびあふれデータ累積加算手段のそれぞれにおいては、同一種類の演算命令が実行される。したがって、多倍精度データを所定演算する場合であっても、実行に必要とされる演算命令の種類数を少なくできて、プログラムのメンテナンスおよびデバッグは容易である。
【００５４】
この発明の他の局面に係るデータ駆動型処理装置におけるデータ処理方法は、世代番号を格納する世代フィールド、ノード番号を格納するノードフィールド、命令を格納する命令フィールドおよびデータを格納するデータフィールドからなるデータパケットをパイプラインを周回させることにより、予め記憶したデータフロープログラムを実行するデータ駆動型処理装置におけるデータ処理方法である。
データ駆動型処理装置は、ｋビット長（ｋは任意の正の整数）のメモリデータが格納されて、世代フィールドの世代番号に基づきアドレス指定される複数の領域を含むメモリと、パイプラインに含まれる演算処理部であって、データパケットを入力して、入力データパケットの命令フィールドの命令に従い当該入力データパケットの内容を演算処理して、演算結果を当該入力データパケットに格納して、当該入力データパケットをパイプラインに出力する演算処理部とを備える。
【００５５】
データ処理方法は、２個のｍ（ｍはｎ＊ｋ＝ｍを満たす任意の整数、ただしｎは２以上の整数）ビット長の多倍精度データ同士のうち、一方の前記多倍精度データをｋビット長ごとに分割して得られたｎ個のデータＡ[ｉ]（ただしｉ＝１〜ｎのいずれかの整数）と、他方の多倍精度データをｋビット長ごとに分割して得られたｎ個のデータＢ[ｊ]（ただしｊ＝１〜ｎのいずれかの整数）との全ての組合わせについて、所定演算処理をすることにより、多倍精度データ同士の所定演算処理を行なう場合に、演算処理部において、全ての組合せの各組について、当該組のデータＡ[ｉ]とデータＢ[ｊ]をデータフィールドに格納したデータパケットを入力して、入力した当該データパケットのデータフィールドのデータを命令フィールドの所定演算命令に従い所定演算処理して、所定演算処理の結果を複数のｋビット長のデータに分割して、分割により得られた複数のｋビット長のデータのそれぞれをデータフィールドに格納し、かつアドレス指定される領域を異ならせる世代番号それぞれを世代フィールドに格納した複数のデータパケットを当該演算処理部から出力する所定演算ステップと、演算処理部から出力されたデータパケットを入力して、入力したデータパケットのそれぞれについて累算処理して処理結果を格納した当該入力データパケットを演算処理部から出力する累算ステップとを含む。
所定演算ステップにおける所定演算処理により出力される複数のデータパケットのアドレス指定される領域を異ならせる世代番号は、当該所定演算処理の対象であるデータＡ[ｉ]とデータＢ[ｊ]のｉとｊの値に基づき決定される。
【００５６】
累算ステップは、データ累積加算ステップと、あふれデータ累積加算ステップとを有する。
データ累積加算ステップでは、入力したデータパケットそれぞれのデータフィールドのｋビット長のデータを、当該入力データパケットの世代フィールドの内容に基づくメモリの指定アドレスの領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、桁あふれしたデータをデータフィールドに格納し世代フィールドに当該指定アドレスの次位のアドレスを指定するための世代番号を格納した当該入力データパケットを演算処理部から出力する。
【００５７】
あふれデータ累積加算ステップでは、桁あふれしたデータをデータフィールドに格納したデータパケットを入力して、当該入力データパケットの前記データフィールドの桁あふれしたデータを、当該入力データパケットの世代フィールドの内容に基づくメモリの指定アドレスの前記領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、当該桁あふれしたデータをデータフィールドに格納し世代フィールドに当該指定アドレスの次位のアドレスを指定するための世代番号を格納した当該入力データパケットを演算処理部から出力する。
【００５８】
累積加算により指定アドレスの領域において桁あふれしたデータが生じる間は、あふれデータ累積加算ステップによる桁あふれしたデータについての累積加算は繰返される。
【００５９】
上述のデータ駆動型処理装置におけるデータ処理方法によれば、多倍精度データについて所定演算処理が行なわれる際には、多倍精度データはｋビット長単位に分割された複数の単精度データとして、そしてメモリのｋビット長のｎ個の領域の集合は該多倍精度データとして扱われる。それゆえに、データ駆動型処理装置において多倍精度データ専用の累算器を特別に用意しなくても通常のメモリの領域で多倍精度データの累算器の役割を果たすことができるから、多倍精度データについて所定演算処理が行なわれる際でも、データ駆動型処理装置の小型化は阻害されない。
【００６０】
また多倍精度データの所定演算では、多倍精度データはｋビット長の単精度データ単位の互いに独立な演算要素に分割することによってデータについての演算をすべて同時並列に実行できるから、データ駆動型処理装置のデータ処理における並列処理能力を最大限に発揮することができる。
【００６１】
また、データ駆動型処理装置のデータ処理方法は、複数の演算の同時並列処理能力に加えてパイプライン並列処理という特徴を有しているから、多倍精度データの所定演算処理において、メモリを用いたデータの累算時に桁あふれが連続的に発生しても連続発生する桁あふれによる処理の遅延量は他の単精度データの処理によって抑制される。つまりオーバーフローの発生度合いは多倍精度データ演算処理全体にかかる所要時間（レスポンス）にほとんど影響しない。
【００６２】
さらに多倍精度データのデータ長に関して論理的な制約がない。データ駆動型処理装置の通常のメモリの領域やデータパケットが利用されるから、物理的に資源の許す限りどんなに長いビット長の多倍精度データであっても所定演算処理できる。しかも、ビット長が異なる多種類の多倍精度データを同時に扱うこともできる。
【００６３】
上述の所定演算処理は、加算、減算、除算および乗算のいずれであってもよい。
【００６４】
上述のデータ処理方法において、演算処理ステップは、累積加算により所定アドレスの領域において桁あふれしたデータが生じているか否か判定する桁あふれ判定ステップをさらに有して、桁あふれ判定ステップにより桁あふれしたデータが生じていると判定されたことに応じて、あふれデータ累積加算ステップにより桁あふれしたデータについての累積加算が行なわれる。
【００６５】
上述のデータ処理方法によれば、桁あふれ判定ステップを設けることにより、桁あふれしたデータが生じている間は、あふれデータ累積加算ステップにより桁あふれしたデータについての累積加算が行なわれる。それゆえに、桁あふれしたデータを確実に繰上げながら所定演算を実行することができる。
【００６６】
上述のデータ駆動型処理方法において、２個のｍ（ｍはｎ＊ｋ≧ｍを満たす任意の整数）ビット長の多倍精度データ同士を所定演算処理する場合には、以下の特徴を有する。つまり、一方の多倍精度データをｋビット長ごとに分割して得られたそれぞれのデータは、メモリのｎ個の領域のそれぞれにメモリデータとして格納されて、他方の多倍精度データがｋビット長ごとに分割して得られたそれぞれのデータは、ｎ個のデータパケットのそれぞれのデータフィールドに格納されて、ｎ個のデータパケットは所定演算ステップに順次与えられる。
【００６７】
上述のデータ駆動型処理方法によれば、２個のｍ（ｍはｎ＊ｋ≧ｍを満たす任意の整数）ビット長の多倍精度データ同士を所定演算処理することができる。
【００６８】
上述のデータ駆動型処理方法では、データパケットは、該データパケットを一意に識別するための世代番号が格納される世代フィールドをさらに有して、所定アドレスは、データパケットの世代フィールドの内容に基づいて指定される。
【００６９】
上述のデータ駆動型処理方法によれば、累算器として機能するメモリの領域の所定アドレスは、データパケットを一意に識別するための世代番号が格納される世代フィールドの内容に基づいて指定される。したがって、多倍精度データを分割して得られた複数のｋビット長の単精度データのそれぞれについて対応する所定アドレスが一意に指定されることになって、メモリにおける累算を確実に行うことができる。
【００７０】
上述のデータ駆動型処理方法において、データ累積加算ステップおよびあふれデータ累積加算ステップのそれぞれは、以下の特徴を有する。つまり、与えられるデータパケットを入力して、該入力データパケット中のデータフィールドの内容を、メモリの所定アドレスに対応の領域のメモリデータに累積加算して、桁あふれしたデータを除く累積加算結果を該領域に格納して、桁あふれしたデータを入力データパケットのデータフィールドに格納して、該入力データパケットを出力することを指示する演算命令に従い動作する。
【００７１】
上述のデータ駆動型処理方法によれば、データ累積加算ステップおよびあふれデータ累積加算ステップのそれぞれにおいては、同一種類の演算命令が実行される。したがって、多倍精度データを所定演算する場合であっても、実行に必要とされる演算命令の種類数を少なくできて、プログラムのメンテナンスおよびデバッグは容易である。
【００７２】
【発明の実施の形態】
以下、この発明の実施の形態について説明する。
【００７３】
まず、本実施の形態の特徴について説明する。
本実施の形態では、データ駆動型処理装置において多倍精度データの演算を実現するために、ＬＳＩとして実現できる現実的な範囲での短いビット長を有したデータやメモリワードを使用して多倍精度データの演算処理を実現する。なお、ここでメモリワードとは、データ駆動型処理装置における１回のメモリアクセス命令の実行によりアクセスできるメモリのデータ量を示す。
【００７４】
図１は、この発明の実施の形態に係る演算部１４１の構成を、入出力されるデータパケットとともに示す図である。図２は、図１のｓｗｉｔｃｈ回路６５の構成を入出力されるデータとともに示す図である。図３はこの発明の実施の形態に係るデータ駆動型処理装置１０のブロック図である。図４（Ａ）と（Ｂ）は、本実施の形態による多倍精度データの分割を説明する図である。
【００７５】
図３のデータ駆動型処理装置１０は、図１３のシステムにおいて従来のデータ駆動型処理装置１に代替して設けられる。図３のデータ駆動型処理装置１０と図１４の従来のデータ駆動型処理装置１と比較し異なる点は、データ駆動型処理装置１０がデータ駆動型処理装置１の演算部１４および内蔵メモリ１５に代替して演算部１４１および累算メモリ１５１を有した内蔵メモリ１５０を備える点にある。データ駆動型処理装置１０の他の部分はデータ駆動型処理装置１と同様であり説明を省略する。
【００７６】
図１を参照して、演算部１４１は従来の演算部１４の構成に加えてメモリ累算命令ＡＣＣＭＣを実行するＡＣＣＭＣ回路６８を追加実装している。演算部１４１はＤＥＭＵＸ回路６４、分岐命令ｓｗｉｔｃｈを実行するｓｗｉｔｃｈ回路６５、命令ｉｎｃ＿ｇｅｎを実行するｉｎｃ＿ｇｅｎ回路６６、乗算命令ＭＵＬ３２を実行するＭＵＬ３２回路６７、ＡＣＣＭＣ回路６８、他の種類の演算を行なう演算回路６９〜７１、およびＭＵＸ（マルチプレクサの略）回路７２を含む。
【００７７】
ｓｗｉｔｃｈ回路６５、ｉｎｃ＿ｇｅｎ回路６６およびＭＵＬ３２回路６７は従来から提供される回路である。命令ｓｗｉｔｃｈと命令ｉｎｃ＿ｇｅｎについては、後述する。
【００７８】
演算部１４１にはデータパケットＰＡ１（ＩＮ）が入力される。データパケットＰＡ１（ＩＮ）は命令コードＣ、ノード番号Ｎ、世代番号Ｇ、およびフィールド２１のデータＤとして左データＬＤおよび右データＲＤが格納されている。左データＬＤおよび右データＲＤは、命令コードＣが２項演算命令などであった場合に、発火制御部１３における待合せによって得られた２つのオペランドデータである。ただし、命令コードＣが２項演算命令であっても、演算対象となる２つのオペランドデータの一方が定数である場合には発火制御部１３において定数データメモリ７３２から読出された定数データが格納される。
【００７９】
データパケットＰＡ１（ＩＮ）が演算部１４１に入力されると、入力データパケットＰＡ１の命令コードＣは、ＤＥＭＵＸ回路６４とＭＵＸ回路７２に与えられる。ＤＥＭＵＸ回路６４は、与えられる命令コードＣに基づいて演算回路６５〜７１のうちのいずれか１つを選択して、選択した回路に該入力データパケットＰＡ１（ＩＮ）を与える。演算回路７１およびＡＣＣＭＣ回路６８は必要に応じて内蔵メモリ１５０をアクセスする。各演算回路は、与えられるデータパケットＰＡ１（ＩＮ）の内容を、対応の命令コードＣに基づいて演算し、その演算結果をフィールド２１に格納したデータパケットＰＡ１（ＩＮ）をＭＵＸ回路７２に与える。
【００８０】
ＭＵＸ回路７２は与えられる命令コードＣに基づいて、演算回路６５〜７１のいずれか１つの出力を選択して入力する。そして、入力したデータパケットはＰＡ１（ＯＵＴ）として出力されて、プログラム記憶部１６に与えられる。
【００８１】
データパケットＰＡ１（ＯＵＴ）は命令コードＣ、ノード番号Ｎ、世代番号Ｇおよびフィールド２１においてデータＤおよび真偽フラグＦＬを格納する。
【００８２】
真偽フラグＦＬは、命令ｓｗｉｃｈを含む分岐命令の実行結果によって出力される１ビットのフラグデータである。命令ｓｗｉｔｃｈによる判定結果が「真」のときは真偽フラグＦＬに１が設定され、「偽」のときには０が設定される。分岐命令以外の命令では、真偽フラグＦＬには「真」を表わす１が常に出力される。この真偽フラグＦＬによって次位の命令コードＣとノード番号Ｎとがプログラム記憶部１６のプログラムメモリ１６１から読出される。つまり、命令ｓｗｉｔｃｈの次に実行される命令として真偽フラグＦＬの値によって、たとえば、命令ｅｎｄ＿ｊｕｄｇｅおよび命令ｉｎｃ＿ｇｅｎのいずれか一方がプログラムメモリ１６１から選択的に読出される。
【００８３】
図２には図１のｓｗｉｔｃｈ回路６５の構成例が示される。ｓｗｉｔｃｈ回路６５はロジック回路ＬＵを含む。ｓｗｉｔｃｈ回路６５はデータパケットＰＡ１（ＩＮ）のフィールド２１のビットデータを参照した分岐機能とメモリ累算命令ＡＣＣＭＣの出力値は０であるかどうかの判定機能を有する。ｓｗｉｔｃｈ回路６５では、データパケットＰＡ１（ＩＮ）のフィールド２１のデータＤの下位１ビットの値（１または０）がロジック回路ＬＵに与えられる。ロジック回路ＬＵは、与えられる下位１ビットのデータが０のときには真偽フラグＦＬとして１を出力し、１のときは真偽フラグＦＬとして０を出力する。したがって、真偽フラグＦＬが１のときは、メモリ累算命令ＡＣＣＭＣの実行結果として出力値０が得られたことが判定される。また入力データパケットＰＡ１（ＩＮ）のフィールド２１のデータは出力データパケットＰＡ１（ＯＵＴ）のフィールド２１のデータＤとして格納される。
【００８４】
本実施の形態では演算対象となる多倍精度データを、データ駆動型処理装置１０をフローするデータパケットのフィールド２１に格納可能なビット長を有した複数のデータに分割する。仮に、１０２４ｂｉｔの多倍精度データは３２ｂｉｔの３２個のデータに分割されると想定する。この分割の様子が図４（Ａ）と（Ｂ）に示される。図４（Ａ）の１０２４ｂｉｔの多倍精度データＡは、図４（Ｂ）の３２ｂｉｔのデータＡ［０］〜Ａ［３１］に分割される。データＡ［０］〜Ａ［３１］のそれぞれは、対応するそれぞれのデータパケットＰＡ１のフィールド２１に格納されるとともに、データＡ［ｊ］（ただしｊ＝０、１、２、…、３１）が多倍精度データＡにおけるいずれの桁（ビット）の位置に対応するかを示すｊの値に相当する情報がフィールド２０の一部として格納される。ただし、フィールド２０への正確な格納方法は実際の演算の形態に依存する。
【００８５】
このようにして１０２４ｂｉｔの多倍精度データＡは、３２個のデータパケットＰＡ１の集合として表現される。図４（Ｂ）の３２個のデータパケットＰＡ１それぞれについては、フィールド２１に格納されるデータＡ［０］〜Ａ［３１］のそれぞれのみが示されて、他のフィールドのデータは省略されている。
【００８６】
図５（Ａ）と（Ｂ）は、累算メモリ１５１の領域における多倍精度データの格納例を説明する図である。内蔵メモリ１５０の累算メモリ１５１の領域は、多倍精度データの演算の中間結果や最終結果を格納するためのメモリとしてアクセスされる。累算メモリ１５１の領域は、多倍精度データを演算することが可能なビット長を有したメモリワード単位に分割される。仮に、２０４８ｂｉｔの多倍精度データの演算を想定すると、この多倍精度データは、３２ｂｉｔ長の６４個のデータに分割されて累算メモリ１５１の領域に格納される。この様子が図５（Ａ）と（Ｂ）に示される。
【００８７】
図５（Ａ）の２０４８ｂｉｔの多倍精度データＣは、図５（Ｂ）のような３２ｂｉｔのデータＣ［０］〜Ｃ［６３］へと分割された後に、これらデータは累算メモリ１５１のアドレス０〜６３のメモリワードのそれぞれに格納される。データＣ［ｈ］（ｈ＝０、１、２、…、６３）が多倍精度データＣのうちのいずれの桁（ビット）に相当するかを示すｈの値に相当する情報は、アドレス０〜６３に相当する。ここでいうアドレスは、あるオフセットを基準（アドレス０）として相対値として与えられる。このようにして２０４８ｂｉｔの多倍精度データＣは累算メモリ１５１では６４個のメモリワードの列として表現される。
【００８８】
また、６４個のメモリワードの列は２０４８ｂｉｔの記憶領域を有する累算器として機能させることが所望されるが、これらのメモリワード列は、６４個の全く独立した３２ｂｉｔ長のメモリワードの集合にすぎない。しかしながら、メモリを用いた累算は、データパケットＰＡ１のフィールド２１の３２ｂｉｔ長のデータＤとメモリの３２ｂｉｔ長の１メモリワードとを対象にして行なわれるので、前述した６４個のメモリワードを多倍精度データの累算器として機能させるには、３２ｂｉｔ単位の累算時に生じる桁あふれ、すなわちオーバーフローまたはアンダーフローを、次位のアドレスのメモリワードに反映させなければならない。
【００８９】
言換えると、「データＤ（３２ｂｉｔ）＋所定メモリワードに格納されたデータ（３２ｂｉｔ）」の結果値が３２ｂｉｔで表現できる値を超えてオーバーフローした場合、所定メモリワードには結果値の下位３２ｂｉｔだけが格納されて、所定メモリワードの次位のアドレスのメモリワードの内容にオーバーフローした１が加算されなければならない。逆に「データＤ（３２ｂｉｔ）−所定メモリワードに格納されたデータ（３２ｂｉｔ）」の結果値が負の値になってアンダーフローした場合、所定メモリワードには結果値の下位３２ｂｉｔだけが格納され、所定メモリワードの次位のアドレスのメモリワードの内容からアンダーフローした１を引かなければならない。そのために、データ駆動型処理装置１０の演算部１４１は、図１に示されるようにオーバーフローおよびアンダーフローを処理するためのメモリアクセスに関する命令を実行するための機能を、従来の機能に追加して備えている。
【００９０】
図６は、メモリワードでオーバフローが生じた例を説明する図である。図６ではデータパケットＰＡ１については、フィールド２１の内容のみが示されて、他のフィールドの図示は省略されている。仮に、データパケットＰＡ１のデータＤを、ある指定アドレスのメモリワードの内容に累算し、その結果オーバーフローが生じた場合の例が図６に示される。
【００９１】
図６において、メモリ累算命令ＡＣＣＭＣを用いずに、「データパケットＰＡ１のフィールド２１のデータＡ［ｘ］はメモリワードＣ［ｘ］へ累算して、その累算結果をメモリワードＣ［６３］〜Ｃ［０］へと反映させる」という命令セットを用いて処理することを想定すると処理の流れは次のようになる。
【００９２】
（Ａ１）のデータパケットＰＡ１の世代番号Ｇから累算メモリ１５１のアドレスを算出する。たとえば、アドレスｘが算出されたとする。
【００９３】
（Ａ２）  メモリワードＣ［ｘ］の値を累算メモリ１５１から読出す。
（Ａ３）  上述の（Ａ２）の結果とデータＡ［ｘ］を加算し加算結果Ｄとする（Ｄ→Ｃ［ｘ］、Ａ［ｘ］）。
【００９４】
（Ａ４）  上述の（Ａ３）の加算結果の下位３２ｂｉｔのデータを累算メモリ１５１のアドレスｘへ書込む。
【００９５】
（Ａ５）  上述の（Ａ３）の加算結果が３２ｂｉｔで表現できる値を超えていないか（オーバーフローしていないか）を判定し、オーバーフローしていなければ終了し、オーバーフローしていれば次の処理に移行する。
【００９６】
（Ｂ１）  次のメモリアドレスｘ＋１を算出する。
（Ｂ２）  メモリワードＣ［ｘ＋１］を累算メモリ１５１から読出す。
【００９７】
（Ｂ３）  上述の（Ｂ２）の読出値に１を加算して、加算結果をＤとする（Ｄ→Ｃ［ｘ＋１］＋１）。
【００９８】
（Ｂ４）  上述の（Ｂ３）の加算結果の下位３２ｂｉｔのデータを累算メモリ１５１のアドレスｘ＋１へ書込む。
【００９９】
（Ｂ５）  上述の（Ｂ３）の加算結果が３２ｂｉｔで表現できる値を超えていないか（オーバーフローしていないか）判定し、オーバーフローしていなければ処理を終了し、オーバーフローしていればｘ＋１に１を加えてｘ＋２として、上述の（Ｂ１）〜（Ｂ５）の処理を繰返す。このオーバーフローは、Ｃ［ｘ＋１］＝０ｘｆｆｆｆである限り発生する。
【０１００】
このような不定回数のオーバーフローが連続して発生する可能性を考慮すると、１回の実行で不定回数のメモリアクセスを指示するような命令を処理するためのハードウェアを従来の演算部１４に実装することは、困難であった。なぜならば、上述の処理は加算結果がオーバーフローしなくなるまで繰返されて、繰返しの回数は、連続するオーバーフローの回数に依存しているため、この命令実行に要する時間は毎回異なるから、命令実行に要する時間が固定でない。また、データ駆動型処理装置は周回パイプライン構造になっており、データパケットＰＡ１がこのパイプライン内をフローする場合には、全体においてデータパケットＰＡ１の処理が滞りなく進行して、前段のパイプラインが空き状態にならないとデータパケットＰＡ１は前段へは進めない。したがって、この命令で長い実行時間がかかると、該命令の実行はパイプラインの輻輳を引き起こすかもしれない。この輻輳を回避するのにはパイプラインの経路の分岐や緩衝バッファを追加するなどの特別な工夫が必要となる。
【０１０１】
また演算部のパイプラインにおいて、上述のような累算命令と他の命令とに基づいて、データパケットＰＡ１の経路を分岐させたとしても、パイプラインの経路を、すなわち内蔵メモリ１５の一部を累算器として用いることを想定しているから、上述のように内蔵メモリ１５に関する不定回数のメモリアクセス実行中は他の命令によるメモリアクセスが妨げられるから、全体としての処理速度は低下する。
【０１０２】
そこで、本実施の形態では、上述したパイプラインにおける輻輳および処理速度低下というデメリットを回避するために、次のようになされる。つまり、オーバフローが生じた場合には、累算メモリ１５１内の上位のメモリワードにオーバフローした値（１）を累算するのではなくて、データパケットＰＡ１のフィールド２１にデータＤとして格納して該データパケットＰＡ１を出力するというメモリ累算命令ＡＣＣＭＣが提案される。
【０１０３】
図７は、本実施の形態に係るメモリ累算命令ＡＣＣＭＣを説明する図である。図７では、データパケットＰＡ１は、フィールド２１に格納されたデータＤの値のみが示されて、他のフィールドの内容の図示は省略されている。図７においては処理ＯＰ１とＯＰ２が実行されている。まず、処理ＯＰ１においては、演算部１４１に命令コードＣとして“ＡＣＣＭＣ”を、データＤとしてＡ[ｘ]を、世代番号Ｇとしてｘを格納したデータパケットＰＡ１が与えられると、メモリ累算命令ＡＣＣＭＣに基づいて、累算メモリ１５１のアドレスｘのメモリワードＣ[ｘ]の内容が読み出されて、その値にデータパケットＰＡ１のデータＡ[ｘ]が累算されて、オーバフローを含まない結果はメモリワードＣ[ｘ]に書き込まれる。この累算で生じたオーバフローの値（＋１）を用いて、データパケットＰＡ１のフィールド２１の内容はＡ[ｘ＋１]に書き換えられて、該データパケットは演算部１４１から出力される。
【０１０４】
該データパケットＰＡ１は該装置のパイプラインを１回以上周回した後に、演算部１４１に与えられると、処理ＯＰ２において、同様にして該データパケット中のメモリ累算命令ＡＣＣＭＣに従い累算メモリ１５１の次のアドレスｘ＋１のメモリワードＣ[ｘ＋１]の内容が読み出されて、読み出された内容と該データパケットのデータＡ[ｘ＋１]（Ａ[ｘ＋１]＝１）とが累算されて、累算結果は、累算メモリ１５１のアドレスｘ＋１のメモリワードＣ[ｘ＋１]に書き込まれる。これにより、累算と、累算により生じたオーバフロー処理とを実行することができる。
【０１０５】
上述したように、連続してオーバーフローが発生しても、１つの累算命令実行当り、累算メモリ１５１に関して読出と書込をそれぞれ１回行なうだけでよい。また、上述したように連続的にオーバーフローが発生して複数回の累算命令が連続的に実行されることになったとしても、データ駆動型処理装置におけるパイプライン処理による処理の並列性の特徴により、演算に関する遅延時間を抑制することができる。
【０１０６】
次に、上述した本実施の形態の特徴に基づいた具体的な動作を以下に説明する。
【０１０７】
ここで１０２４ｂｉｔの多倍精度データＡと１０２４ｂｉｔの多倍精度データＢとを乗算して２０４８ｂｉｔの多倍精度データＣを得る演算処理を例示して説明する。
【０１０８】
図３のデータ駆動型処理装置１０のパイプラインを周回する図１５（Ｂ）のデータパケットＰＡ１は３２ｂｉｔのフィールド２１を有し、累算メモリ１５１では１メモリワード当り３２ｂｉｔで構成されるものとする。
【０１０９】
初期状態として多倍精度データＡとＢは累算メモリ１５１に格納される。累算メモリ１５１では、多倍精度データＡはメモリワードＡ［０］〜Ａ［３１］の３２ワードに格納され、多倍精度データＢはメモリワードＢ［０］〜Ｂ［３１］の３２ワードに格納される。乗算が実行されるときには、メモリワードＡ［ｉ］とメモリワードＢ［ｊ］（ｉ、ｊ＝０，１，２，３…，３１）が累算メモリ１５１から必要に応じて読出されて演算に使用される。そして、乗算結果である２０４８ｂｉｔの多倍精度データＣは、累算メモリ１５１のメモリワードＣ［０］〜Ｃ［６３］の６４ワードで構成される。演算においては中間結果がメモリワードＣ［０］〜Ｃ［６３］の６４ワードにその都度累算される。したがって、累算処理終了時点でのメモリワードＣ［０］〜Ｃ［６３］の６４ワードにより最終の乗算結果が示される。
【０１１０】
上述したＡ＊Ｂの乗算処理を説明する。まず、乗算命令ＭＵＬ３２が定義される。乗算命令ＭＵＬ３２はＡ＊Ｂについての各部分積データ（６４ｂｉｔ）を求め、該部分積データを上位３２ｂｉｔのデータと下位３２ｂｉｔのデータに分けて、分けられたそれぞれのデータを各データパケットのフィールド２１に格納して出力することを指示する。
【０１１１】
また、ここでは上述したメモリ累算命令ＡＣＣＭＣが定義される。演算部１４１では乗算命令ＭＵＬ３２の実行後、メモリ累算命令ＡＣＣＭＣが実行される。メモリ累算命令ＡＣＣＭＣが実行されることにより、データパケットＰＡ１の世代番号Ｇに基づいて累算メモリ１５１の所定アドレスが算出されて、該所定アドレスによりアドレス指定される累算メモリ１５１のメモリワードから読出された値に、該データパケットＰＡ１のフィールド２１のデータＤを累算する。そしてこの累算によりオーバーフローおよびアンダーフローした値を除く累算結果を該所定アドレスに対応する累算メモリ１５１のメモリワードに書込むとともに、オーバーフローおよびアンダーフローのいずれかが発生すればその値（＋１または−１）を該データパケットＰＡ１のフィールド２１のデータＤに代替して格納して、該データパケットＰＡ１を出力する。
【０１１２】
次に上述したＡ＊Ｂの乗算処理を、上述した乗算命令ＭＵＬ３２およびメモリ累算命令ＡＣＣＭＣを用いて説明する。図８には本実施の形態によるＡ＊Ｂの乗算式が示されている。図示されるように多倍精度データＡ（１０２４ｂｉｔ）、多倍精度データＢ（１０２４ｂｉｔ）の乗算は、３２ｂｉｔ同士の乗算結果（以下、部分積という）の総和であって図８の式（１）のように示される。図８の式（１）において、＜＜（３２＊１）は左へ３２ビットシフトとすることを示す。また＜＜（３２＊３）は左へ３２×３ビットシフトすることを示す。
【０１１３】
図８の式（１）の各部分積Ａ［ｉ］＊Ｂ［ｊ］は６４ｂｉｔ長を有する。これを、３２ｂｉｔ長のフィールド２１を有するデータパケットＰＡ１２つで表現する。この部分積は、演算部１４１のＭＵＬ３２回路６７において乗算命令ＭＵＬ３２が実行されることにより求められる。乗算命令ＭＵＬ３２が実行されると、部分積Ａ［ｉ］＊Ｂ［ｊ］が求められて、該部分積は上位３２ｂｉｔのデータと下位３２ｂｉｔのデータに分けられて、各データをデータＤとしてフィールド２１に格納したデータパケットがそれぞれ出力される。
【０１１４】
図９は、本実施の形態に係る乗算命令ＭＵＬ３２を用いた処理フローチャートである。図９では、３２ビットのデータＸ（Ａ［ｉ］）をデータＤとして格納したデータパケットＰＡ１と３２ビットのデータＹ（Ｂ［ｊ］）をデータＤとして格納したデータパケットＰＡ１とが発火制御部１３にて発火して、命令コードＣとして“ＭＵＬ３２”を、データＤとしてデータＸ（Ａ［ｉ］）とＹ（Ｂ［ｊ］）とが格納されたデータパケットＰＡ（ＩＮ）が演算部１４１に与えられる。ただし、データパケットＰＡ（ＩＮ）ではフィールド２１および２２の内容のみが示されて、他のフィールドの図示は省略される。
【０１１５】
そして、演算部１４１のＭＵＬ３２回路６７において、与えられたデータパケットＰＡ（ＩＮ）が入力されて、入力データパケットＰＡ（ＩＮ）のフィールド２２に格納されていた乗算命令ＭＵＬ３２が実行される（ステップＳ１）。実行により得られた乗算結果の値Ｚ（Ａ［ｉ］＊Ｂ［ｊ］）は上位の３２ｂｉｔのデータＺｕ（Ａ［ｉ］＊Ｂ［ｊ］＿upper）と下位の３２ｂｉｔのデータＺｌ（Ａ［ｉ］＊Ｂ［ｊ］#lower）に分割されて、分割により得られた２つのデータは２つのデータパケットＰＡ（ＯＵＴ）のフィールド２１にデータＤとしてそれぞれ格納されて、２つのデータパケットＰＡ（ＯＵＴ）は演算部１４１から出力される（ステップＳ２）。ただし、データパケットＰＡ（ＯＵＴ）ではフィールド２１の内容のみが示されて、他のフィールドの図示は省略される。
【０１１６】
データパケットＰＡ１が部分積Ａ［ｉ］＊Ｂ［ｊ］に関するデータパケットの場合には、世代番号Ｇのフィールド２０には、前述したように、添字ｉとｊが格納される。具体的には、世代番号Ｇのフィールド２０には２つの領域が含まれて、一方の領域には“ｉ”が、もう一方の領域には“ｊ”が格納されることによって部分積Ａ［ｉ］＊Ｂ［ｊ］の識別が行なわれる。そして、世代番号Ｇのフィールド２０の２つの領域から部分積Ａ［ｉ］＊Ｂ［ｊ］を累算するためのメモリワードのアドレスを求めることができる。つまり、データＡ［ｉ］＊Ｂ［ｊ］＿lowerについては、これら２つの領域の値を加えるだけで、累算に用いられるメモリワードのアドレス（ｉ＋ｊ）が得られ、データＡ［ｉ］＊Ｂ［ｊ］＿upperについては、これら２つの領域の値の加算値にさらに１を加えることにより累算に用いられるメモリワードのアドレス（ｉ＋ｊ＋１）が得られる。
【０１１７】
図１０は、本実施の形態に係る部分積毎の処理内容（乗算と累算）を示す処理フローチャートである。なお、図１０では、累算により、桁あふれは生じていないと想定している。図９の乗算命令ＭＵＬ３２が実行された後、図９のデータパケットＰＡ（ＯＵＴ）は、パイプラインを周回することにより、プログラム記憶部１６において対応の命令コードＣが累算命令ＡＣＣＭＣに更新されて、再度、演算部１４１に与えられる。
【０１１８】
演算部１４１のＡＣＣＭＣ回路６８に、与えられる２つのデータパケットＰＡ（ＩＮ）は、データＤとしてデータＡ［ｉ］＊Ｂ［ｊ］＿upperとデータＡ［ｉ］＊Ｂ［ｊ］#lowerとをそれぞれ格納しており、命令コードＣとして“ＡＣＣＭＣ”を格納しており、世代番号Ｇとしてｉとｊが格納されている。演算部１４１のＡＣＣＭＣ回路６８は、２つのデータパケットＰＡ（ＩＮ）を入力して、データＡ［ｉ］＊Ｂ［ｊ］＿upperを格納したデータパケットＰＡ（ＩＮ）の世代番号Ｇに基づいて、累算メモリ１５１のアドレス（ｉ＋ｊ＋１）のメモリワードＣ［ｉ＋ｊ＋１］の内容を読出して（ステップＳ１ａ）、読出された値に該データパケットＰＡ（ＩＮ）に格納されているデータＡ［ｉ］＊Ｂ［ｊ］＿upperを累算して、その結果値を累算メモリ１５１のアドレス（ｉ＋ｊ＋１）のメモリワードＣ［ｉ＋ｊ＋１］に書き込む（ステップＳ２ａ）。
【０１１９】
また、データＡ［ｉ］＊Ｂ［ｊ］#lowerを格納したデータパケットＰＡ（ＩＮ）の世代番号Ｇに基づいて、累算メモリ１５１のアドレス（ｉ＋ｊ）のメモリワードＣ［ｉ＋ｊ］の内容を読出して（ステップＳ１ｂ）、読出された値に該データパケットＰＡ（ＩＮ）に格納されているデータＡ［ｉ］＊Ｂ［ｊ］＿lowerを累算されて、その結果値を累算メモリ１５１のアドレス（ｉ＋ｊ）のメモリワードＣ［ｉ＋ｊ］に書込む（Ｓ２ｂ）。
【０１２０】
図１０で示されるように、部分積を求める対象となっているデータＡ［ｊ］、データＢ［ｊ］の添字ｉとｊを変化させていくことで、累算メモリ１５１で指定されるメモリワードのアドレスも同様に変更されて、３２ビット単位でシフト演算が行なわれていることになる。このことは図８の式（１）の部分積の和を表わす中で、３２ｂｉｔずつシフトすることに相当する。
【０１２１】
このように、累算メモリ１５１を用いて、求めた各部分積が累算されることで最終的に乗算結果Ｃ（２０４８ｂｉｔ）が求められることになる。
【０１２２】
図１１は、本実施の形態に係るメモリ累算命令ＡＣＣＭＣを説明するためのフローチャートである。なお、図においては、データパケットＰＡ（ＩＮ）およびＰＡ（ＯＵＴ）については、フィールド２１と２０のみが示されて他のフィールドの図示は省略されている。メモリ累算命令ＡＣＣＭＣが実行される際に、まずフィールド２１に３２ｂｉｔのデータＸ（部分積Ａ［ｉ］＊Ｂ［ｊ］＿lowerまたは部分積Ａ［ｉ］＊Ｂ［ｊ］＿upper）とフィールド２０の世代番号Ｇを格納したデータパケットＰＡ（ＩＮ）が演算部１４１に与えられる。データパケットＰＡ（ＩＮ）の世代番号Ｇのフィールド２０は、前述したように部分積Ａ［ｉ］＊Ｂ［ｊ］を特定するためのｉを格納する領域３６とｊを格納する領域３７とを含む。演算部１４１のＡＣＣＭＣ回路６８は与えられるデータパケットＰＡ（ＩＮ）を入力して、該入力データパケットＰＡ（ＩＮ）のフィールド２２のメモリ累算命令ＡＣＣＭＣに従って、フィールド２０の内容を用いてｉ＋ｊ＋ｋが算出される（ステップＳ１）。なお、ｋは累算メモリ１５１の領域中のメモリワードＣ［０］を決めるための３２ｂｉｔの値（オフセット値）であって、定数である。
【０１２３】
そして、累算メモリ１５１のアドレスｉ＋ｊ＋ｋのメモリワードＣ［ｉ＋ｊ］に格納されているデータＭが読出されて（ステップＳ２）、読み出されたデータＭ（３２ｂｉｔ）を左入力データとし、データパケットＰＡ（ＩＮ）のフィールド２１のデータＸを右入力データとして加算が行なわれて、３３ｂｉｔの加算結果Ｚが得られると（ステップＳ３）、加算結果Ｚは下位３２ｂｉｔのデータと上位１ビットのデータとに分割されて（ステップＳ４）、下位３２ｂｉｔのデータは累算メモリ１５１のアドレスｉ＋ｊ＋ｋのメモリワードＣ［ｉ＋ｊ］に書込まれて（ステップＳ５）、上位１ｂｉｔのデータはデータパケットＰＡ（ＩＮ）のフィールド２１にデータＸに代替して格納されて該データパケットＰＡ（ＩＮ）はデータパケットＰＡ（ＯＵＴ）として演算部１４１から出力される。
【０１２４】
データパケットＰＡ（ＯＵＴ）にデータＤとして格納された加算結果の上位１ｂｉｔのデータは加算結果によるオーバーフローの有無を表わし、この値が“１”であればオーバーフローが発生したことを、“０”であればオーバーフローが発生していないことを示す。そして、このデータパケットＰＡ（ＯＵＴ）のフィールド２０には、データパケットＰＡ（ＩＮ）のフィールド２０の値ｉおよびｊのいずれかが１つ増加されて、ｉ＋ｊ＋ｋ＋１が格納される。これは、アンダーフローが生じた場合でも同様にして行なうことができる。
【０１２５】
ここで、仮にオーバーフローのデータパケットＰＡ１が出力された場合、これを累算メモリ１５１へ反映させるためにオーバーフローした値をデータＤとして格納したデータパケットを、パイプラインを周回させて、再度、演算部１４１のＡＣＣＭＣ回路６８に与えて、該データパケットの内容についてメモリ累算命令ＡＣＣＭＣを、同様にして実行する。この実行により、さらにオーバーフローが発生すれば累算メモリ１５１のさらに１つ上のアドレスに対してメモリ累算命令ＡＣＣＭＣが実行される。このような処理がオーバーフローが生じなくなるまで継続される。
【０１２６】
上述した乗算命令ＭＵＬ３２に従う乗算とメモリ累算命令ＡＣＣＭＣに従う累算処理を図８の式（１）のすべての部分積について実行すると、多倍精度データＡとＢの乗算終了は、すべての部分積に対するメモリ累算命令ＡＣＣＭＣの出力として“０”が得られたか、つまりオーバーフローが生じなくなったかどうかで判定できる。これは、図８の式（１）の部分積の総数（１０２４個）に対応してメモリ累算命令ＡＣＣＭＣの出力値“０”をデータＤとして格納したデータパケットＰＡ１が２０４８個（＝１０２４×２）だけカウントされたことにより判定される。
【０１２７】
図１２は、本実施の形態による多倍精度データ同士の乗算に関する全体の処理を示すフローチャートである。図の処理フローは、ｉｎｉｔ＿ｌｏａｄモジュール４２、ｉｎｉｔ＿ｓｔｒｅａｍモジュール４３、モジュール４４、ｎｅｘｔ＿ｓｔｒｅａｍモジュール４５、ｉｎｃ＿ｇｅｎモジュール４６と４９、ＡＣＣＭＣモジュール４７、ｓｗｉｔｃｈモジュール４８およびｅｎｄ＿ｊｕｄｇｅモジュール５０を含む。
【０１２８】
ｉｎｉｔ＿ｌｏａｄモジュール４２では、入力データＡ［０］〜Ａ［３１］と入力データＢ［０］〜Ｂ［３１］を累算メモリ１５１に格納する。次のｉｎｉｔ＿ｓｔｒｅａｍモジュール４３では、世代番号の領域３７の値（ｊ）を０として、累算メモリ１５１のメモリワードＡ［０］〜Ａ［３１］およびＢ［ｊ］の計３３個が累算メモリ１５１から読出される。次のモジュール４４はＭＵＬ３２回路６７に相当して、乗算命令ＭＵＬ３２を前述のように実行する。ＭＵＬ３２命令は図９に示された命令である。
【０１２９】
次のｎｅｘｔ＿ｓｔｒｅａｍモジュール４５では、入力データパケットＰＡ１のフィールド２１の領域３７の値（ｊ）に１を加えて、累算メモリ１５１のメモリワードＡ［０］〜Ａ［３１］とＢ［ｊ］の計３３個を累算メモリ１５１から読出す。上述したモジュール４４と４５の処理を、ｊ＝０〜３１まで順に繰返すことで、すべての部分積が求められる。これらの部分積の値の上位３２ｂｉｔのデータと下位３２ｂｉｔのデータとは、２つのデータパケットＰＡ１のそれぞれのフィールド２１に格納されて、これら２つのデータパケットＰＡ１はｉｎｃ＿ｇｅｎモジュール４６に出力される。
【０１３０】
次にｉｎｃ＿ｇｅｎモジュール４６はｉｎｃ＿ｇｅｎ回路６６に相当して、上位３２ｂｉｔのデータを格納しているデータパケットＰＡ１の領域３７の値（ｊ）に１を加える。一方下位３２ｂｉｔのデータを格納しているデータパケットＰＡ１の領域３７の値はそのままである。これは、前述したように累算メモリ１５１のメモリワードのアドレスに対応させるためになされる。
【０１３１】
次にメモリ累算命令ＡＣＣＭＣのモジュール４７は、ＡＣＣＭＣ回路６８に相当して、図１１に示される処理を実行する。なお、図１１の定数ｋにはメモリワードＣ［０］のアドレスが格納される。
【０１３２】
次のｓｗｉｔｃｈモジュール４８は、ｓｗｉｔｃｈ回路６５に相当して、モジュール４７から出力されたデータパケットＰＡ１を順次入力して、オーバーフローの値を格納したデータパケットＰＡ１とそうでないパケットＰＡ１とを識別して、オーバーフローの値を格納したデータパケットＰＡ１はｉｎｃ＿ｇｅｎモジュール４９に出力して、そうでないデータパケットＰＡ１はｅｎｄ＿ｊｕｄｇｅモジュール５０に出力する。この出力の分岐は次のようになされる。つまり、図２のロジック回路ＬＵが、与えられる下位１ビットのデータが０のときには真偽フラグＦＬとして１を出力し、１のときは真偽フラグＦＬとして０を出力するので、真偽フラグＦＬが１のときは、メモリ累算命令ＡＣＣＭＣの実行結果として出力値０が得られたことがわかる。そして、ｓｗｉｔｃｈモジュール４８から出力された真偽フラグＦＬの値に基づくプログラムメモリ１６１からの次位の命令コードＣの読み出しは、命令ｉｎｃ＿ｇｅｎおよび命令ｅｎｄ＿ｊｕｄｇｅのいずれか一方の選択的な読出しとなるから、上述した出力の分岐が実現される。
【０１３３】
ｉｎｃ＿ｇｅｎモジュール４９は、ｉｎｃ＿ｇｅｎ回路６６に相当してモジュール４６と同等の機能が行なわれる。ｅｎｄ＿ｊｕｄｇｅモジュール５０ではオーバーフローを示さない値０を持つデータパケットＰＡ１の入力がカウントされて、カウント結果が２０４８になったとき、演算処理の終了信号ＥＮＤが出力される。このときの累算メモリ１５１内のメモリワードＣ［０］〜Ｃ［６３］で示される多倍精度データＣの値が、多倍精度データＡ＊Ｂの最終の乗算結果を示す。
【０１３４】
ここで、上述した実施の形態から得られる効果について説明する。
まず多倍精度データＡおよびＢを複数の単精度データＡ〔ｉ〕およびＢ〔ｊ〕に分割し、累算メモリ１５１の固定長のメモリワードの集合を多倍精度データとして扱うことによって、データ駆動型処理装置１０において多倍精度データ専用の累算器を特別に容易しなくても通常のメモリワードで多倍精度データの累算器の役割を果たすことができる。
【０１３５】
また多倍精度データの演算を単精度データ単位の互いに独立な演算要素に分割することによってデータについての演算をすべて同時並列に実行できるから、データ駆動型処理装置１０の並列処理能力を最大限に発揮することができる。データ駆動型処理方式は、複数の演算の同時並列処理能力に加えてパイプライン並列処理という特徴を有しているから、多倍精度データの乗算処理において、累算メモリ１５１を用いたデータの累算時にオーバーフローが連続的に発生しても連続発生するオーバーフローによる処理の遅延量は他の単精度データの処理によって抑制される。つまりオーバーフローの発生度合いは多倍精度データ演算処理全体にかかる所要時間（レスポンス）にほとんど影響しない。
【０１３６】
さらに多倍精度データのデータ長に関して論理的な制約がない。データ駆動型処理装置１０の通常のメモリワードやデータパケットＰＡ（ＰＡ１）が利用されるから物理的に資源の許す限りどんなに長いビット長のデータであっても演算処理できる。しかも、ビット長が異なる多種類の多倍精度データを同時に扱うこともできる。
【０１３７】
上述の実施の形態では多倍精度データの乗算の例を示したが加算／減算／除算のいずれについても同様の処理方式を採用することができる。減算と除算の場合は図１１の累算メモリ１５１の内容への累算とオーバーフロー出力命令の代わりに、累算メモリ１５１の内容からの減算とアンダーフロー出力命令を導入すればよい。
【０１３８】
また、図１２のデータフローグラフよりメモリ累算命令ＡＣＣＭＣを用いた多倍精度データの演算処理では累算メモリ１５１の３２ｂｉｔのデータを１回加算する際には、メモリ累算命令ＡＣＣＭＣ、分岐命令ｓｗｉｔｃｈおよび命令ｉｎｃ＿ｇｅｎの３命令が実行される。したがって、この加算実行時に、ｎ回のオーバーフローが発生すると、３＊ｎ＋１命令分の実行時間がかかる。
【０１３９】
そこで、メモリ累算命令ＡＣＣＭＣを用いずに前述したステップ（Ａ１）〜（Ｂ５）を実現する命令セットを実装する方が、累算メモリ１５１を用いた１回の加算処理を１命令時間で実行できてよいようにも見える。ところが図８の式（１）のような演算を実行する場合には、パイプライン型並列処理能力を十分に利用して、式（１）の複数の部分積が同時並列に計算される。この場合には、図３の周回パイプラインにおいて同時に多くのデータパケットＰＡ１がフローする。したがって前述したようなパイプラインの輻輳および処理速度低下というデメリットが生じて、データ駆動型処理装置におけるパイプライン型並列処理能力を十分に発揮できなくなる。
【０１４０】
一方、メモリ累算命令ＡＣＣＭＣを用いて同様な処理を行う場合には、たとえ累算メモリ１５１への加算１回について３＊ｎ＋命令分の実行時間がかかったとしても、多倍精度データの演算処理全体はパイプライン型並列処理によって実効的な処理性能は飛躍的に向上する。
【０１４１】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０１４２】
【発明の効果】
この発明に係るデータ駆動型処理装置およびデータ処理方法によれば、多倍精度データについて所定演算処理が行なわれる際には、多倍精度データはｋビット長単位に分割された複数の単精度データとして、そしてメモリのｋビット長のｎ個の領域の集合は該多倍精度データとして扱われる。それゆえに、データ駆動型処理装置において多倍精度データ専用の累算器を特別に用意しなくても通常のメモリの領域で多倍精度データの累算器の役割を果たすことができるから、多倍精度データについて所定演算処理が行なわれる際でも、データ駆動方処理装置の小型化は阻害されない。
【０１４３】
また多倍精度データの所定演算では、多倍精度データはｋビット長の単精度データ単位の互いに独立な演算要素に分割することによってデータについての演算をすべて同時並列に実行できるから、データ駆動型処理装置の並列処理能力を最大限に発揮することができる。
【０１４４】
また、データ駆動型処理装置では、複数の演算の同時並列処理能力に加えてパイプライン並列処理という特徴を有しているから、多倍精度データの所定演算処理において、メモリを用いたデータの累算時に桁あふれが連続的に発生しても連続発生する桁あふれによる処理の遅延量は他の単精度データの処理によって抑制される。つまりオーバーフローの発生度合いは多倍精度データ演算処理全体にかかる所要時間（レスポンス）にほとんど影響しない。
【０１４５】
さらに多倍精度データのデータ長に関して論理的な制約がない。データ駆動型処理装置の通常のメモリの領域やデータパケットが利用されるから、物理的に資源の許す限りどんなに長いビット長の多倍精度データであっても所定演算処理できる。しかも、ビット長が異なる多種類の多倍精度データを同時に扱うこともできる。
【図面の簡単な説明】
【図１】  この発明の実施の形態に係る演算部１４１の構成を、入出力されるデータパケットとともに示す図である。
【図２】  図１のｓｗｉｔｃｈ回路６５の構成を入出力されるデータとともに示す図である。
【図３】  この発明の実施の形態に係るデータ駆動型処理装置１０のブロック図である。
【図４】  （Ａ）と（Ｂ）は、本実施の形態による多倍精度データの分割を説明する図である。
【図５】  （Ａ）と（Ｂ）は、累算メモリ１５１の領域における多倍精度データの格納例を説明する図である。
【図６】  メモリワードでオーバフローが生じた例を説明する図である。
【図７】  本実施の形態に係るメモリ累算命令ＡＣＣＭＣを説明する図である。
【図８】  本実施の形態によるＡ＊Ｂの乗算式を示す図である。
【図９】  本実施の形態に係る乗算命令ＭＵＬ３２を用いた処理フローチャートである。
【図１０】  本実施の形態に係る部分積毎の処理内容（乗算と累算）を示す処理フローチャートである。
【図１１】  本実施の形態に係るメモリ累算命令ＡＣＣＭＣを説明するためのフローチャートである。
【図１２】  本実施の形態による多倍精度データ同士の乗算に関する全体の処理を示すフローチャートである。
【図１３】  従来およびこの発明の実施の形態に適用されるデータ駆動型情報処理システムのブロック構成図である。
【図１４】  従来のデータ駆動型処理装置の構成図である。
【図１５】  （Ａ）と（Ｂ）は従来およびこの発明の実施の形態に適用されるデータパケットのフィールド構成図である。
【図１６】  ノイマン型計算機においてＸ＾ＹｍｏｄＺの演算を実行するための処理フローチャートである。
【符号の説明】
１、１０  データ駆動型処理装置、１１  入出力制御部、１２  合流部、１３発火制御部、１４、１４１  演算部、１５、１５０  内蔵メモリ、１５１  累算メモリ、１６  プログラム記憶部、１７  分岐部、ＰＡ、ＰＡ１、ＰＡ１（ＩＮ）、ＰＡ１（ＯＵＴ）  データパケット。
【図１】
0003912958.tif 000002
【図２】
0003912958.tif 000003
【図３】
0003912958.tif 000004
【図４】
0003912958.tif 000005
【図５】
0003912958.tif 000006
【図６】
0003912958.tif 000007
【図７】
0003912958.tif 000008
【図８】
0003912958.tif 000009
【図９】
0003912958.tif 000010
【図１０】
0003912958.tif 000011
【図１１】
0003912958.tif 000012
【図１２】
0003912958.tif 000013
【図１３】
0003912958.tif 000014
【図１４】
0003912958.tif 000015
【図１５】
0003912958.tif 000016
【図１６】
0003912958.tif 000017