(57)【要約】【課題】複数の演算器をアレイ状に組合せ、演算器間の接続をセレクタで切り替えることにより、演算器の構成を切り替えて動作させる再構成可能な演算装置に対して、人手による設計を介在させることなく、結線が可能な演算の割り当てをすることを目的とする。【解決手段】複数の演算器を有する演算ブロックを複数備える演算装置であって、各演算ブロックにおける演算器間の結線と演算ブロック間の結線とを切り替え可能な演算装置に対して、一連の演算を各演算ブロックに割当可能な単位に分割し、分割した演算をそれぞれ異なる演算ブロックの演算器に割り当てる。【選択図】図１
2012018545.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算器を有する演算ブロックを複数備える演算装置であって、各演算ブロックにおける演算器間の結線と演算ブロック間の結線とを切り替え可能な演算装置に対して、一連の演算を割り当てる演算割当装置であり、
一連の演算を規定したソースコードを取得するソースコード取得部と、
前記ソースコード取得部が取得したソースコードに規定される一連の演算を、各演算ブロックにおいて実行可能な単位の複数の演算に分割する演算分割部と、
前記演算分割部が分割した複数の演算の各演算を、それぞれ異なる演算ブロックが備える演算器に割り当てる演算割当部と、
前記演算割当部が各演算を割り当てた演算器間の前記演算ブロック内における結線と、前記演算割当部が各演算を割り当てた演算器を備える前記演算ブロック間の結線とを、割り当てた演算内容に従い決定する結線部と
を備えることを特徴とする演算割当装置。
【請求項２】
前記演算割当装置は、さらに、
前記各演算を割り当てた演算ブロックについて、ある演算ブロックＡにおいて演算を割り当てられていない割当未演算器の数が、前記演算ブロックＡとは異なる他の演算ブロックＢにおいて演算を割り当てられている割当済演算器の数よりも多い場合には、前記演算ブロックＢにおける割当済演算器に割り当てられた演算の割り当てを前記演算ブロックＡにおける割当未演算器へ移動させる演算ブロック統合部
を備えることを特徴とする請求項１に記載の演算割当装置。
【請求項３】
前記演算ブロック統合部は、前記割当未演算器へ割り当てを移動させた演算内容に従った前記割当未演算器間の結線が可能か否かを判定し、決定した結線が不可能であると判定した場合には、前記演算ブロックＡにおける割当未演算器へ移動させた演算の割り当てを前記演算ブロックＢにおける割当済演算器へ戻す
ことを特徴とする請求項２に記載の演算割当装置。
【請求項４】
前記演算ブロック統合部は、前記演算ブロックＢにおける割当済演算器に割り当てられた演算の割り当てを前記演算ブロックＡにおける割当未演算器へ移動させた場合に、前記演算ブロックＡにおいて演算を割り当てられていない演算器の数が、前記演算ブロックＡ及び前記演算ブロックＢとは異なる他の演算ブロックにおいて演算を割り当てられている割当済演算器の数よりも多い場合には、さらに、前記他の演算ブロックにおける割当済演算器に割り当てられた演算の割り当てを前記演算ブロックＡにおける割当未演算器へ移動させる
ことを特徴とする請求項２又は３に記載の演算割当装置。
【請求項５】
前記演算ブロック統合部は、前記各演算を割り当てた各演算ブロックについて、割当未演算器の数と割当済演算器の数とを計算して、ある演算ブロックにおける演算を割り当てられていない演算器の数が他の演算ブロックにおける演算を割り当てられている割当済演算器の数よりも多いか否かを判定する
ことを特徴とする請求項２から４までのいずれかに記載の演算割当装置。
【請求項６】
前記演算割当部は、演算ブロックが備える演算器に演算を割り当てる場合に、その演算ブロックに割当未演算器がある場合には、その演算ブロックの識別情報を記憶装置に記憶しておき、
前記演算ブロック統合部は、前記演算割当部が記憶した識別情報が示す各演算ブロックについて、割当未演算器の数と割当済演算器の数とを計算して、ある演算ブロックにおける演算を割り当てられていない演算器の数が他の演算ブロックにおける演算を割り当てられている割当済演算器の数よりも多いか否かを判定する
ことを特徴とする請求項２から４までのいずれかに記載の演算割当装置。
【請求項７】
前記演算割当部は、演算ブロックが備える演算器に演算を割り当てる場合に、その演算ブロックに演算を割り当てられていない割当未演算器がある場合には、その演算ブロックの識別情報と、割当未演算器の数とを記憶装置に記憶しておき、
前記演算ブロック統合部は、前記演算割当部が記憶した識別情報が示す各演算ブロックについて、割当未演算器の数を読み出すとともに、読み出した割当未演算器の数から割当済演算器の数を計算して、ある演算ブロックにおける演算を割り当てられていない演算器の数が他の演算ブロックにおける演算を割り当てられている割当済演算器の数よりも多いか否かを判定する
ことを特徴とする請求項２から４までのいずれかに記載の演算割当装置。
【請求項８】
前記演算割当装置は、さらに、
前記演算ブロックのうち演算を割り当てられていない割当未演算器がある演算ブロックについて、演算ブロックが有する演算器の数から、割り当てた演算を移動可能な演算ブロックの組合せパターンリストを生成するリスト生成部
を備え、
前記演算割当部は、生成した組合せパターンリストに基づき、演算が割り当てられた演算ブロックの数が少なくなるように、ある演算ブロックにおける割当未演算器へ他の演算ブロックにおける演算器に割り当てられた演算の割り当てを移動させる
ことを特徴とする請求項１に記載の演算割当装置。
【請求項９】
複数の演算器を有する演算ブロックを複数備える演算装置であって、各演算ブロックにおける演算器間の結線と演算ブロック間の結線とを切り替え可能な演算装置に対して、一連の演算を割り当てる演算割当方法であり、
入力装置が、一連の演算を規定したソースコードを取得するソースコード取得ステップと、
処理装置が、前記ソースコード取得ステップで取得したソースコードに規定される一連の演算を、各演算ブロックにおいて実行可能な単位の複数の演算に分割する演算分割ステップと、
処理装置が、前記演算分割ステップで分割した複数の演算の各演算を、それぞれ異なる演算ブロックが備える演算器に割り当てる演算割当ステップと、
処理装置が、前記演算割当ステップで各演算を割り当てた演算器間の前記演算ブロック内における結線と、前記演算割当ステップで各演算を割り当てた演算器を備える前記演算ブロック間の結線とを、割り当てた演算内容に従い決定する結線ステップと
を備えることを特徴とする演算割当方法。
【請求項１０】
複数の演算器を有する演算ブロックを複数備える演算装置であって、各演算ブロックにおける演算器間の結線と演算ブロック間の結線とを切り替え可能な演算装置に対して、一連の演算を割り当てる演算割当プログラムであり、
一連の演算を規定したソースコードを取得するソースコード取得処理と、
前記ソースコード取得処理で取得したソースコードに規定される一連の演算を、各演算ブロックにおいて実行可能な単位の複数の演算に分割する演算分割処理と、
前記演算分割処理で分割した複数の演算の各演算を、それぞれ異なる演算ブロックが備える演算器に割り当てる演算割当処理と、
前記演算割当処理で各演算を割り当てた演算器間の前記演算ブロック内における結線と、前記演算割当処理で各演算を割り当てた演算器を備える前記演算ブロック間の結線とを、割り当てた演算内容に従い決定する結線処理と
を備えることを特徴とする演算割当プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数の演算器を備える演算装置に、一連の演算を割り当てる技術に関する。
【背景技術】
【０００２】
複数の演算器をアレイ状に組合せ、演算器間の接続をセレクタで切り替えることにより、演算器の構成を切り替えて動作させる再構成可能な演算装置がある。
【０００３】
特許文献１には、再構成可能な演算装置における演算器の演算動作や演算器間の接続を規定するマイクロコードを生成する技術についての記載がある。
特許文献１では、演算装置に求められる処理内容を記述したソースプログラムから、意味的または機能的にまとまった単位演算処理を実行する複数の単位プログラムを抽出し、抽出した単位プログラムを再構成可能な演算装置の演算器に設定している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１８７４７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
再構成可能な演算装置では、演算器間の接続の制限をなくし、ある演算器には他の全ての演算器の出力を入力可能で、ある演算器の出力は他の全ての演算器に入力可能である形が、もっとも柔軟に演算器の構成を切り替えることを可能とする理想的な構造である。
しかし、これを実現しようとすると、演算器間を接続するバスの本数が膨大になり、またそのバスの切り替えを行うセレクタの回路規模も膨大になる。そのため、限定された実装面積内で処理に必要な演算器数を確保するために、一般的に演算器間の接続は制限を持つ。
【０００６】
このような実際の再構成可能な演算装置において、個々の演算器の動作と演算器間の接続とを規定するマイクロコードを生成する。この場合、従来のマイクロコード生成ツールでは、上述した接続の制限から、演算装置に割り当てた処理が実際には配線できない場合が発生する可能性がある。
また、従来のマイクロコード生成ツールには、配線できなくなることを回避するために、演算式上不要な演算器を経由するといった特殊な方法で結線を行うため、人手での設計によるマイクロコードを入力可能な構成を持たせているものもある。しかし、この場合、マイクロコード生成を完全に自動化できず、開発効率が低下してしまう。
【０００７】
この発明は、再構成可能な演算装置に対して、人手による設計を介在させることなく、結線が可能な演算の割り当てをすることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係る演算割当装置は、
複数の演算器を有する演算ブロックを複数備える演算装置であって、各演算ブロックにおける演算器間の結線と演算ブロック間の結線とを切り替え可能な演算装置に対して、一連の演算を割り当てる演算割当装置であり、
一連の演算を規定したソースコードを取得するソースコード取得部と、
前記ソースコード取得部が取得したソースコードに規定される一連の演算を、各演算ブロックにおいて実行可能な単位の複数の演算に分割する演算分割部と、
前記演算分割部が分割した複数の演算の各演算を、それぞれ異なる演算ブロックが備える演算器に割り当てる演算割当部と、
前記演算割当部が各演算を割り当てた演算器間の前記演算ブロック内における結線と、前記演算割当部が各演算を割り当てた演算器を備える前記演算ブロック間の結線とを、割り当てた演算内容に従い決定する結線部と
を備えることを特徴とする。
【発明の効果】
【０００９】
この発明に係る演算割当装置によれば、一連の演算を各演算ブロックに割当可能な単位に分割し、分割した演算をそれぞれ異なる演算ブロックの演算器に割り当てる。そのため、人手による設計を介在させることなく、結線が可能なマイクロコードを生成することが可能である。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るマイクロコード生成ツール１０１の構成図。
【図２】実施の形態１に係る並列演算装置２０１の構成図。
【図３】実施の形態１に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャート。
【図４】実施の形態１に係るソースコード１０２の例を示す図。
【図５】実施の形態２に係るマイクロコード生成ツール１０１の構成図。
【図６】実施の形態２に係る演算器個数テーブル１１５を示す図。
【図７】実施の形態２に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャート。
【図８】図７に示す実施の形態２に係る演算ブロック統合処理（Ｓ２０７）の流れを示すフローチャート。
【図９】実施の形態３に係るマイクロコード生成ツール１０１の構成図。
【図１０】実施の形態３に係るフラグ管理テーブル１１７を示す図。
【図１１】実施の形態３に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャート。
【図１２】図１１に示す実施の形態３に係る演算ブロック統合処理（Ｓ３１０）の流れを示すフローチャート。
【図１３】実施の形態４に係るフラグ管理テーブル１１７を示す図。
【図１４】実施の形態４に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャート。
【図１５】図１４に示す実施の形態４に係る演算ブロック統合処理（Ｓ４１２）の流れを示すフローチャート。
【図１６】実施の形態５に係る演算ブロック統合処理の流れを示すフローチャート。
【図１７】実施の形態６に係るマイクロコード生成ツール１０１の構成図。
【図１８】実施の形態６に係る演算ブロック統合処理の流れを示すフローチャート。
【図１９】実施の形態６に係る組合せパターンリストの例を示す図。
【図２０】マイクロコード生成ツール１０１のハードウェア構成の一例を示す図。
【発明を実施するための形態】
【００１１】
以下、図に基づき、発明の実施の形態を説明する。
以下の説明において、処理装置は後述するＣＰＵ９１１等である。記憶装置は後述するＲＯＭ９１３、ＲＡＭ９１４、磁気ディスク９２０等である。入力装置はキーボード９０２、マウス９０３等である。つまり、処理装置、記憶装置、入力装置はハードウェアである。
【００１２】
実施の形態１．
図１は、実施の形態１に係るマイクロコード生成ツール１０１（演算割当装置）の構成図である。
マイクロコード生成ツール１０１は、後述する並列演算装置２０１に実行させる一連の演算を記述したソースコード１０２を入力として受け取り、マイクロコード１０３を出力する。
マイクロコード生成ツール１０１は、ソースコード１０２を取得し、解析するソース解析部１１０（ソースコード取得部）、ソース解析部１１０が解析したソースコード１０２に規定された演算を分割する演算分割部１１１、演算分割部１１１が分割した演算を並列演算装置２０１の演算回路に割り当て、演算割当情報を生成する演算割当部１１２、演算回路間の結線を決定し、結線情報を生成する結線部１１３、演算割当情報と結線情報とからマイクロコードを生成するマイクロコード生成部１１４を備える。
【００１３】
図２は、実施の形態１に係る並列演算装置２０１の構成図である。
並列演算装置２０１は、複数の演算ブロック２０２を備える。各演算ブロック２０２は、複数の演算器２０３を備える。なお、ここでは、各演算ブロック２０２は、４個の演算器２０３を備える。演算ブロック２０２間の結線は、セレクタ２０４、２０５で選択可能であり、演算ブロック２０２内の演算器２０３の結線は入力セレクタ２０６、出力セレクタ２０７で選択可能である。なお、演算ブロック２０２、演算器２０３が演算回路である。
また、並列演算装置２０１は、マイクロコード制御部２１０を備える。マイクロコード制御部２１０は、マイクロコード生成ツール１０１により生成されたマイクロコード１０３を読み込み、読み込んだマイクロコード１０３に従い、各演算器２０３の演算処理内容を制御する。また、マイクロコード制御部２１０は、マイクロコード１０３に従い、演算ブロック２０２内の入力セレクタ２０６、出力セレクタ２０７、演算ブロック２０２間のセレクタ２０４、２０５の結線を切り替える。これより、マイクロコード制御部２１０は、どの演算器２０３にどのような演算をさせるかを制御するとともに、どの演算器２０３の出力をどの演算器２０３に入力するか、またはどの演算ブロック２０２の出力をどの演算ブロック２０２に入力するかを制御する。
【００１４】
実施の形態１に係るマイクロコード生成ツール１０１の動作について説明する。
図３は、実施の形態１に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャートである。
図４は、実施の形態１に係るソースコード１０２の例を示す図である。図４に示すように、ソースコード１０２は、並列演算装置２０１に対する入力信号を記述した入力信号宣言部３０１、並列演算装置２０１からの出力信号を記述した出力信号宣言部３０２、並列演算装置２０１における演算処理の内容を記述した演算式部３０３を備える。
【００１５】
ソース解析部１１０は、ソースコード１０２を入力装置を介して取得し、ソースコード１０２中の演算式部分（演算式部３０３）を処理装置により識別する（Ｓ１０１）。
ソースコード中の演算式部分の識別は、例えば図４の演算式部３０３の冒頭にある「Ｆｕｎｃｔｉｏｎｓ：」のタグを識別する方法や、演算式部３０３に示す「出力信号名、＝、関数名、（、入力信号名、）」の形式を持つ行を識別することにより行う。
【００１６】
次に、演算分割部１１１は、演算式を１つ取り出す（Ｓ１０２）。そして、演算割当部１１２は、並列演算装置２０１の最初の演算ブロック２０２を取り出し（Ｓ１０３）、取り出した演算ブロック２０２が備える演算器２０３に、（Ｓ１０２）で演算分割部１１１が取り出した演算式を割り当て、演算割当情報を処理装置により生成する（Ｓ１０４）。また、結線部１１３は、演算分割部１１１が取り出した演算式に従い、演算割当部１１２が取り出した演算ブロック２０２内の演算器２０３についての結線と、演算ブロック２０２間の結線と接続を示す結線情報を処理装置により生成する（Ｓ１０５）。
【００１７】
そして、演算分割部１１１は、全ての演算式の処理が完了したかを処理装置により判定する（Ｓ１０６）。完了していない場合（Ｓ１０６でＮＯ）、（Ｓ１０２）に処理を戻し、次の演算式を取り出し、次の演算ブロック２０２でに対して割り当てを行う処理を繰り返す。一方、完了している場合（Ｓ１０６でＹＥＳ）、マイクロコード生成部１１４は、（Ｓ１０４）で生成された演算割当情報と、（Ｓ１０５）で生成された結線情報とから、その演算割当情報と結線情報との内容を示すマイクロコード１０３を処理装置により生成する。
【００１８】
例えば、図４に示す例では、並列演算装置２０１に対するデータ入力信号ａを最初の演算ブロック２０２に入力し、最初の演算ブロック２０２にｆｕｎｃｔｉｏｎ１の機能を割り当て、最初の演算ブロック２０２の出力をｐという名称とする。
また、並列演算装置２０１に対するデータ入力信号ｂを２つ目の演算ブロック２０２に入力し、２つ目の演算ブロック２０２にｆｕｎｃｔｉｏｎ２の機能を割り当て、２つ目の演算ブロック２０２の出力をｘという名称とする。
さらに、最初の演算ブロック２０２の出力ｐを３つ目の演算ブロック２０２に入力し、３つ目の演算ブロック２０２にｆｕｎｃｔｉｏｎ３の機能を割り当て、３つ目の演算ブロック２０２の出力をｙという名称とする。
【００１９】
ここで、ソースコード１０２で用いられる関数（ｆｕｎｃｔｉｏｎ）は限定されており、各関数を実現するのに必要となる演算器２０３の数は予め分かっている。また、各関数を実現するために必要となる結線についても予め分かっている。そのため、ソースコード１０２で用いられるいずれの関数も１つの演算ブロック２０２で実現できるように、各演算ブロック２０２における演算器２０３の数や、入力セレクタ２０６、出力セレクタ２０７の結線本数等が決定されている。つまり、各演算ブロック２０２は、どの関数で必要となる演算器２０３の数よりも多い演算器２０３を備え、どの関数で必要となる結線本数よりも多くの結線本数を有する入力セレクタ２０６、出力セレクタ２０７を備える。また、各関数の入出力数も予め分かっているため、各関数の入出力を実現できるように、演算ブロック２０２間のセレクタ２０４、２０５の結線本数等が決定されている。
そのため、（Ｓ１０２）で演算分割部１１１が１つの関数からなる演算式を取り出した場合、必ず１つの演算ブロック２０２でその演算式を実現できる。また、１つの関数からなる演算式を１つの演算ブロック２０２で実現した場合、各演算ブロック２０２間の結線も実現できる。
【００２０】
図４の例では、ソースコード１０２中の各演算式が元々１つの関数からなる構成であった。したがって、演算分割部１１１は、単にソースコード１０２から各演算式を１つづつ取り出せばよかった。しかし、例えば、「ｚ＝ｆｕｎｃｔｉｏｎ４（ｃ）＋ｆｕｎｃｔｉｏｎ５（ｄ）」のように、２つ以上の関数からなる演算式がソースコード１０２中に記載されている場合も考えられる。この場合には、（Ｓ１０２）で演算分割部１１１は、その演算式を１つの関数からなる複数の演算式に分割して取り出す。上記例であれば、「ｘ＝ｆｕｎｃｔｉｏｎ４（ｃ）」と「ｙ＝ｆｕｎｃｔｉｏｎ５（ｄ）」と「ｚ＝ｘ＋ｙ」との３つの演算式に分割して取り出す。つまり、演算分割部１１１は、個々の演算式を実現するのに必要となる演算器２０３の数が、各演算ブロック２０２が備える演算器２０３の数以下となり、かつ、個々の演算式を実現するのに必要となる結線が、各演算ブロック２０２で実現可能となる単位で、演算式を取り出す。
【００２１】
図３に基づき説明した方法では、個々の演算式を演算ブロック２０２に割り当てたとしても、演算ブロック２０２内に存在する全ての演算器２０３に演算が割り当てられるとは限らない。
例えば、図４の演算式ｐ＝ｆｕｎｃｔｉｏｎ１（ａ）の演算ｆｕｎｃｔｉｏｎ１が簡易な演算であった場合、最初の演算ブロック２０２内の一部の演算器２０３のみが使用され、他の演算器２０３は使用されないこととなる。しかし、図３に示す処理の流れに従って、（Ｓ１０６）を経て、（Ｓ１０２）〜（Ｓ１０５）で次の演算式ｘ＝ｆｕｎｃｔｉｏｎ２（ｂ）の割り当てを行うときには、別の演算ブロック２０２に割り当てるため、最初の演算ブロック２０２で演算が割り当てされなかった演算器２０３を使用することはない。
したがって、個々の演算ブロック２０２に注目した場合に、その演算ブロック２０２内に存在する演算器２０３の利用効率が低下し、ソースコード１０２に記述された全ての演算式を処理するために必要な演算ブロック２０２の数が増加してしまう虞がある。
しかし、（Ｓ１０２）で取り出された演算式をある演算ブロック２０２が備える演算器２０３に割り当てた場合に、その演算ブロック２０２内の入力セレクタ２０６、出力セレクタ２０７の結線が不可能となることがない。また、演算ブロック２０２間のセレクタ２０４、２０５の結線が不可能となることがない。
【００２２】
以上のように、実施の形態１に係るマイクロコード生成ツール１０１では、演算ブロック２０２内の演算器２０３間、及び、演算ブロック２０２間の結線が不可能となるケースを回避して、演算式を演算器２０３に割り当てることができる。
これによって、人手で対応していた作業が不要となり、マイクロコード生成プロセス全体を自動化することができる。そのため、開発効率を上げ、生産性を向上させることができる。
【００２３】
実施の形態２．
実施の形態１では、演算式を実現するために必要な演算器２０３の数によらず、１つの演算ブロック２０２に１つの演算式のみを割り当てる方法を説明した。実施の形態１で説明した方法では、個々の演算ブロック２０２における演算器２０３の利用効率が低下し、必要な演算ブロック２０２の数が増加する虞があった。
実施の形態２では、演算ブロック２０２に対して複数の演算式を割り当てることにより、演算ブロック２０２内の演算器２０３の利用効率を向上させる方法について説明する。なお、実施の形態２では、実施の形態１と異なる点のみを説明する。
【００２４】
図５は、実施の形態２に係るマイクロコード生成ツール１０１の構成図である。
実施の形態２に係るマイクロコード生成ツール１０１は、実施の形態１に係るマイクロコード生成ツール１０１の構成に加え、各関数を実現するために必要な演算器２０３の数を記憶した演算器個数テーブル１１５と、演算が割り当てられた演算ブロック２０２を統合する演算ブロック統合部１１６とを備える。
【００２５】
図６は、実施の形態２に係る演算器個数テーブル１１５を示す図である。図６に示すように、演算器個数テーブル１１５は、関数（列４０１）と、その関数を実現するために必要となる演算器の数（列４０２）とを対応付けて記憶装置に記憶したテーブルである。例えば、ある演算ブロック２０２にｆｕｎｃｔｉｏｎ１を割り当てた場合、演算器個数テーブル１１５を参照することで、その演算ブロック２０２内の演算器２０３のうち４つの演算器２０３に演算が割り当てられていることが分かる。
【００２６】
実施の形態２に係るマイクロコード生成ツール１０１の動作について説明する。
図７は、実施の形態２に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャートである。
【００２７】
図７に示す（Ｓ２０１）から（Ｓ２０６）の処理は、図３に示す実施の形態１に係る（Ｓ１０１）から（Ｓ１０６）の処理と同じである。（Ｓ２０６）で全ての演算式の処理が完了したと判定された場合（Ｓ２０６でＹＥＳ）、演算ブロック統合部１１６が演算ブロック統合処理を処理装置により実行する（Ｓ２０７）。なお、（Ｓ２０７）が実行される段階では、実施の形態１と同様に演算ブロック２０２に演算式部３０３が１対１で割り当てられているため、単純な演算式が割り当てられた演算ブロック２０２には、利用されない空き演算器２０３が存在する状態である。そして、演算ブロック統合処理が実行された後、（Ｓ１０７）の処理と同様に、マイクロコード生成部１１４はマイクロコードを生成する（Ｓ２０８）。
【００２８】
（Ｓ２０７）の演算ブロック統合処理について説明する。
図８は、図７に示す実施の形態２に係る演算ブロック統合処理（Ｓ２０７）の流れを示すフローチャートである。
なお、ここでは、演算ブロック２０２のうち、演算ブロック１〜演算ブロックｎのｎ個の演算ブロック２０２に演算が割り当てられたとする。
【００２９】
まず、演算ブロック統合部１１６は、変数ｉに１を設定し（Ｓ２１１）、変数ｊにｉ＋１を設定する（Ｓ２１２）。次に、演算ブロック統合部１１６は、演算が割り当てられた演算ブロックｉを演算ブロックＡとして取り出す（Ｓ２１３）。演算ブロック統合部１１６は、演算ブロックＡに割り当てられた演算式の内容から、図６に示した演算器個数テーブル１１５を参照して、演算ブロックＡにおいて演算が割り当てられている演算器２０３の数を特定する（Ｓ２１４）。演算ブロック統合部１１６は、演算ブロックＡに演算が割り当てられていない空き演算器２０３があるか否かを判定する（Ｓ２１５）。なお、演算ブロックＡが備える演算器２０３の数は予めマイクロコード生成ツール１０１の内部メモリ等の記憶装置に記憶されているものとする。したがって、演算ブロックＡが備える演算器２０３の数から、（Ｓ２１４）で特定した演算が割り当てられている演算器２０３の数を減算すれば、空き演算器２０３の数（空き演算器２０３があるか否か）を特定することができる。
空き演算器２０３がない場合（Ｓ２１５でＮＯ）、変数ｉの値がｎでないことを確認し（Ｓ２１６でＮＯ）、演算ブロック統合部１１６は変数ｉをインクリメントした上で（Ｓ２１７）、処理を（Ｓ２１２）へ戻し、次の演算ブロック２０２を演算ブロックＡとして処理を行う。一方、空き演算器２０３がある場合（Ｓ２１５でＹＥＳ）、演算ブロック統合部１１６は処理を（Ｓ２１８）へ進める。（Ｓ２１８）以降の処理では、空き演算器２０３を利用して、他の演算ブロック２０２に割当済みの演算内容を演算ブロックＡに収容可能かを判断する。
【００３０】
演算ブロック統合部１１６は、演算が割り当てられた演算ブロックｊを演算ブロックＢとして取り出す（Ｓ２１８）。演算ブロック統合部１１６は、演算ブロックＢに割り当てられた演算式の内容から、図６に示した演算器個数テーブル１１５を参照して、演算ブロックＢにおいて演算が割り当てられている演算器２０３の個数を特定する（Ｓ２１９）。演算ブロック統合部１１６は、演算ブロックＡにおける空き演算器２０３の数と、演算ブロックＢにおける演算が割り当てられた演算器２０３の数とを比較する（Ｓ２２０）。
空き演算器２０３の数が、演算が割り当てられた演算器２０３の数よりも少ない場合（Ｓ２２０でＮＯ）、演算ブロックＢに割り当てられた演算を演算ブロックＡの空き演算器２０３に割り当てることはできないため、演算ブロック統合部１１６は処理を（Ｓ２２１）へ進める。そして、演算ブロック統合部１１６は、変数ｊの値がｎでないことを確認し（Ｓ２２１でＮＯ）、変数ｊをインクリメントした上で（Ｓ２２２）、処理を（Ｓ２１８）へ戻し、次の演算ブロック２０２を演算ブロックＢとして処理を行う。一方、空き演算器２０３の数が、演算が割り当てられた演算器２０３の数以上の場合（Ｓ２２０でＹＥＳ）、演算ブロック統合部１１６は処理を（Ｓ２２３）へ進める。
なお、変数ｊの値がｎである場合（Ｓ２２１でＹＥＳ）、演算ブロックＡに統合できる演算ブロック２０２はないことが確定する。そのため、演算ブロック統合部１１６は、変数ｉの値がｎでないことを確認し（Ｓ２１６でＮＯ）、変数ｉをインクリメントした上で（Ｓ２１７）、処理を（Ｓ２１２）へ戻し、次の演算ブロック２０２を演算ブロックＡとして処理を行う。
【００３１】
演算ブロック統合部１１６は、演算ブロックＢの演算器２０３に割り当てられた演算を、演算ブロックＡの空き演算器２０３へ移動し（Ｓ２２３）、演算ブロックＢの演算器２０３を解放する（Ｓ２２４）。このように演算の移動を行うことにより、演算に利用する演算ブロック２０２の数を削減して演算密度を向上することができる。
しかし、演算密度を上げることにより、演算ブロック２０２内の入力セレクタ２０６、出力セレクタ２０７の結線が不可能となる可能性がある。そのため、演算ブロック統合部１１６は、演算ブロックＢの演算器２０３に割り当てられた演算を、演算ブロックＡの空き演算器２０３へ移動しても、結線が可能であるか（結線の制限に抵触しないか）否かを判定する（Ｓ２２５）。
結線が不可能であった場合（Ｓ２２５でＮＯ）、演算ブロック統合部１１６は演算ブロックＡ、Ｂを元の通り戻す（Ｓ２２６）。そして、演算ブロック統合部１１６は、変数ｊの値がｎでないことを確認し（Ｓ２２１でＮＯ）、変数ｊをインクリメントした上で（Ｓ２２２）、処理を（Ｓ２１７）へ戻し、次の演算ブロック２０２を演算ブロックＢとして処理を行う。一方、結線が可能であった場合（Ｓ２２５でＹＥＳ）、演算ブロックＡ、Ｂの割り当て変更を確定とする。そして、演算ブロック統合部１１６は、変数ｉの値がｎでないことを確認し（Ｓ２１６でＮＯ）、変数ｉをインクリメントした上で（Ｓ２１７）、処理を（Ｓ２１２）へ戻し、次の演算ブロック２０２を演算ブロックＡとして処理を行う。
【００３２】
（Ｓ２１６）で変数ｉの値がｎである場合（Ｓ２１６でＹＥＳ）、全ての割り当てが完了した演算ブロック２０２について処理が完了したため、演算ブロック統合処理を終了する。
【００３３】
なお、図８に示すフローチャートでは説明を省略したが、（Ｓ２１３）で演算ブロックｉを演算ブロックＡとして取り出す際、演算ブロックｉが既に（Ｓ２２４）で演算ブロックＢとして解放済の演算ブロック２０２である場合が考えられる。この場合、演算ブロックｉを演算ブロックＡとして取り出すことはせず、変数ｉの値をさらにインクリメントして、次の演算ブロック２０２を演算ブロックＡとして取り出す。
同様に、（Ｓ２１８）で演算ブロックｊを演算ブロックＢとして取り出す際、演算ブロックｊが既に（Ｓ２２４）で演算ブロックＢとして解放済の演算ブロック２０２である場合が考えられる。この場合、演算ブロックｊを演算ブロックＢとして取り出すことはせず、変数ｊの値をさらにインクリメントして、次の演算ブロック２０２を演算ブロックＢとして取り出す。
【００３４】
以上のように、実施の形態２に係るマイクロコード生成ツール１０１は、演算器２０３の利用密度を向上させ、利用される演算ブロック２０２の個数を削減することができる。
また、演算器２０３の利用密度を向上させたことにより、入力セレクタ２０６、出力セレクタ２０７の結線制限により結線が不可能となった場合は、当該演算ブロック２０２の利用密度向上を止めて、結線可能な元の割り当てに戻す。これにより、結線制限を回避しつつ、可能な範囲で演算器２０３の利用密度を向上したマイクロコードの生成が可能となる。演算器２０３の利用効率を高めることで、並列演算装置２０１内の演算器２０３を有効利用し、処理速度を高めるとともに、消費電力を減らすことが可能となる。
【００３５】
実施の形態３．
実施の形態２では、演算ブロック統合処理において、演算を割り当てた全ての演算ブロック２０２について演算器２０３の空き状況を確認し、演算の割り当ての移動が可能かを判定した。
実施の形態３では、演算器２０３の空き状況を事前に記録しておくことにより、演算ブロック統合処理を効率的に行う方法について説明する。なお、実施の形態３では、実施の形態２と異なる点のみを説明する。
【００３６】
図９は、実施の形態３に係るマイクロコード生成ツール１０１の構成図である。
実施の形態３に係るマイクロコード生成ツール１０１は、実施の形態２に係るマイクロコード生成ツール１０１の構成に加え、空き演算器２０３の有無を記憶するフラグ管理テーブル１１７を備える。
【００３７】
図１０は、実施の形態３に係るフラグ管理テーブル１１７を示す図である。図１０に示すように、フラグ管理テーブル１１７は、演算ブロック２０２の識別情報（列５０１）と、その演算ブロック２０２に空き演算器２０３があるか否かを示すフラグ（列５０２）とを対応付けて記憶装置に記憶したテーブルである。ここでは、フラグが“１”である場合、空き演算器２０３があることを示し、フラグが“０”である場合、空き演算器２０３がないことを示す。なお、フラグ管理テーブル１１７の各フラグは、“０”に初期化されているものとする。
【００３８】
実施の形態３に係るマイクロコード生成ツール１０１の動作について説明する。
図１１は、実施の形態３に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャートである。
図１１に示す（Ｓ３０１）から（Ｓ３０４）の処理は、図７に示す実施の形態２に係る（Ｓ２０１）から（Ｓ２０４）の処理と同じである。
（Ｓ３０４）の処理が完了すると、フラグ保存処理が実行される（Ｓ３０５〜Ｓ３０６）。フラグ保存処理では、まず、演算割当部１１２が、図６に示す演算器個数テーブル１１５を参照し、（Ｓ３０４）で演算を割り当てた演算ブロック２０２に空き演算器２０３があるかを計算する。空き演算器２０３がある場合（Ｓ３０５でＹＥＳ）、演算割当部１１２は、フラグ管理テーブル１１７における演算ブロック２０２の識別情報が記憶されたレコードのフラグを“１”に更新する（Ｓ３０６）。一方、空き演算器２０３がない場合（Ｓ３０５でＮＯ）、（Ｓ３０６）の処理は実行されず、その演算ブロック２０２の識別情報が記憶されたレコードのフラグは“０”のままとなる。
図１１に示す（Ｓ３０７）から（Ｓ３０８）の処理は、図７に示す実施の形態２に係る（Ｓ２０５）から（Ｓ２０６）の処理と同じである。（Ｓ３０８）で全ての演算式の処理が完了したと判定された場合（Ｓ３０８でＹＥＳ）、演算ブロック統合部１１６は、フラグ管理テーブル１１７において、フラグが“１”に設定されたレコードの演算ブロック２０２の識別情報を読み出す（Ｓ３０９）。そして、演算ブロック統合部１１６は、読み出した識別情報が示す演算ブロック２０２を対象として、演算ブロック統合処理が実行する（Ｓ３１０）。演算ブロック統合処理が実行された後、（Ｓ２０８）と同様に、マイクロコード生成部１１４はマイクロコードを生成する（Ｓ３１１）。
【００３９】
（Ｓ３１０）の演算ブロック統合処理について説明する。ここでは、（Ｓ３１０）の演算ブロック統合処理について、図８に示す実施の形態２に係る（Ｓ２０７）の演算ブロック統合処理と異なる点のみを説明する。
図１２は、図１１に示す実施の形態３に係る演算ブロック統合処理（Ｓ３１０）の流れを示すフローチャートである。
なお、ここでは、演算ブロック１〜演算ブロックｎのｎ個の演算ブロック２０２についての識別情報が（Ｓ３０６）で記憶装置に記憶されていたとする。つまり、（Ｓ３０９）で演算ブロック１〜演算ブロックｎのｎ個の演算ブロック２０２についての識別情報が読み出され、演算ブロック１〜演算ブロックｎのｎ個の演算ブロック２０２を対象として演算ブロック統合処理が実行される。
【００４０】
図１２に示す（Ｓ３２１）から（Ｓ３２４）の処理は、図８に示す実施の形態２に係る（Ｓ２１１）から（Ｓ２１４）の処理と同じである。また、（Ｓ３２５）から（Ｓ３３５）の処理は、図８に示す実施の形態２に係る（Ｓ２１６）から（Ｓ２２６）の処理と同じである。
なお、（Ｓ３２３）では、（Ｓ２１３）と同様に、演算ブロック統合部１１６は、演算ブロックｉを演算ブロックＡとして取り出すが、取り出す対象となっている演算ブロック２０２は（Ｓ３０６）で識別情報が記憶装置に記憶された、空き演算器２０３のある演算ブロック２０２だけである。同様に、（Ｓ３２７）では、（Ｓ２１８）と同様に、演算ブロック統合部１１６は、演算ブロックｊを演算ブロックＢとして取り出すが、取り出す対象となっている演算ブロック２０２は（Ｓ３０６）で識別情報が記憶装置に記憶された、空き演算器２０３のある演算ブロック２０２だけである。
また、（Ｓ３２３）で取り出される演算ブロック２０２は、必ず空き演算器２０３がある演算ブロック２０２であるため、（Ｓ２１５）のように空き演算器２０３を有するか否かの判定は行わない。
【００４１】
以上のように、実施の形態３に係るマイクロコード生成ツール１０１は、１個の演算ブロック２０２に対して１個の演算式を割り当てる際、その演算ブロック２０２に空き演算器２０３が残っているか否かを記録しておく。そのため、演算ブロック統合処理の実行時に、空き演算器２０３がある演算ブロック２０２、換言すると演算を割り当て直すことにより統合することができる可能性のある演算ブロック２０２を、全演算ブロック２０２を検査することなく見つけ出すことができる。そのため、演算ブロック統合処理を効率的に行うことができる。
【００４２】
実施の形態４．
実施の形態３では、演算を割り当てた演算ブロック２０２について空き演算器２０３があるか否かを記録しておくことにより、効率的に演算ブロック統合処理を行う方法について説明した。
実施の形態４では、演算を割り当てた演算ブロック２０２について空き演算器２０３があるか否かだけでなく、空き演算器２０３の数を記録しておくことにより、さらに演算ブロック統合処理を効率的に行う方法について説明する。なお、実施の形態４では、実施の形態３と異なる点のみを説明する。
【００４３】
実施の形態４に係るマイクロコード生成ツール１０１の構成は、図９に示す実施の形態３に係るマイクロコード生成ツール１０１の構成と同じである。
【００４４】
図１３は、実施の形態４に係るフラグ管理テーブル１１７を示す図である。図１３に示すように、実施の形態４に係るフラグ管理テーブル１１７は、演算ブロック２０２の識別情報（列５０１）に、その演算ブロック２０２に空き演算器２０３があるか否かを示すフラグ（列５０２）と、その演算ブロック２０２の空き演算器の数（列５０３）とを対応付けて記憶装置に記憶したテーブルである。なお、フラグ管理テーブル１１７の各フラグと、空き演算器２０３の数とは“０”に初期化されているものとする。
【００４５】
実施の形態４に係るマイクロコード生成ツール１０１の動作について説明する。
図１４は、実施の形態４に係るマイクロコード生成ツール１０１の処理の流れを示すフローチャートである。
図１４に示す（Ｓ４０１）から（Ｓ４０４）の処理は、図１１に示す実施の形態３に係る（Ｓ３０１）から（Ｓ３０４）の処理と同じである。
（Ｓ４０４）の処理が完了すると、フラグ保存処理が実行される（Ｓ４０５〜Ｓ４０８）。フラグ保存処理では、まず、演算割当部１１２が、図６に示す演算器個数テーブル１１５を参照し、（Ｓ４０４）で演算を割り当てた演算ブロック２０２に空き演算器２０３があるかを計算する。空き演算器２０３がある場合（Ｓ４０５でＹＥＳ）、演算割当部１１２は、割り当てた演算式の内容から、図６に示した演算器個数テーブル１１５を参照して、演算が割り当てられている演算器２０３の数を特定し、空き演算器２０３の数を計算する（Ｓ４０６）。そして、演算割当部１１２は、フラグ管理テーブル１１７における演算ブロック２０２の識別情報が記憶されたレコードのフラグを“１”に更新するとともに（Ｓ４０７）、（Ｓ４０６）で計算した空き演算器２０３の数をそのレコードに記録する（Ｓ４０８）。一方、空き演算器２０３がない場合（Ｓ４０５でＮＯ）、（Ｓ４０６）から（Ｓ４０８）の処理は実行されない。
図１４に示す（Ｓ４０９）から（Ｓ４１１）の処理は、図１１に示す実施の形態３に係る（Ｓ３０７）から（Ｓ３０９）の処理と同じである。（Ｓ４１１）に続いて、演算ブロック統合部１１６は、読み出した識別情報が示す演算ブロック２０２を対象として、演算ブロック統合処理を実行し（Ｓ４１２）、（Ｓ３１１）と同様に、マイクロコード生成部１１４はマイクロコードを生成する（Ｓ４１３）。
【００４６】
（Ｓ４１２）の演算ブロック統合処理について説明する。なお、ここでは、（Ｓ４１２）の演算ブロック統合処理について、図１２に示す実施の形態３に係る（Ｓ３１０）の演算ブロック統合処理と異なる点のみを説明する。
図１５は、図１４に示す実施の形態４に係る演算ブロック統合処理（Ｓ４１２）の流れを示すフローチャートである。
図１５に示す（Ｓ４２１）から（Ｓ４２２）の処理は、図１２に示す実施の形態３に係る（Ｓ３２１）から（Ｓ３２２）の処理と同じである。
演算ブロック統合部１１６は、演算ブロックｉを演算ブロックＡとして、演算ブロックＡの空き演算器２０３の数をフラグ管理テーブル１１７から読み出す（Ｓ４２３）。同様に、演算ブロック統合部１１６は、演算ブロックｊを演算ブロックＢとして、演算ブロックＢの空き演算器２０３の数をフラグ管理テーブル１１７から読み出す（Ｓ４２６）。そして、演算ブロック統合部１１６は、（Ｓ４２６）で読み出した空き演算器２０３の数から、演算ブロックＢにおいて演算が割り当てられている演算器２０３の個数を特定する（Ｓ４２７）。
演算ブロック統合部１１６は、演算ブロックＡにおける空き演算器２０３の数と、演算ブロックＢにおける演算が割り当てられた演算器２０３の数とを比較し（Ｓ４２８）、空き演算器２０３の数が演算が割り当てられた演算器２０３の数以上であった場合（Ｓ４２８でＹＥＳ）、演算ブロックＡ，Ｂを取り出す（Ｓ４３１）。そして、取り出した演算ブロックＡの空き演算器２０３へ、取り出した演算ブロックＢに割り当てられた演算を移動させる（Ｓ４３２）。
図１５に示す（Ｓ４３３）から（Ｓ４３５）の処理は、図１２に示す実施の形態３に係る（Ｓ３３３）から（Ｓ３３５）の処理と同じである。また、図１５に示す（Ｓ４２４）から（Ｓ４２５）の処理は、図１２に示す実施の形態３に係る（Ｓ３２５）から（Ｓ３２６）の処理と同じであり、（Ｓ４２９）から（Ｓ４３０）の処理は、図１２に示す実施の形態３に係る（Ｓ３３０）から（Ｓ３３１）の処理と同じである。
【００４７】
以上のように、実施の形態４に係るマイクロコード生成ツール１０１は、１個の演算ブロック２０２に対して１個の演算式を割り当てる際、その演算ブロック２０２の空き演算器２０３の数を記録しておく。そのため、演算ブロック統合処理の実行時に、演算ブロック２０２を取り出すことなく、空き演算器２０３の数や演算が割り当てられた演算器２０３の数を特定することができる。したがって、演算ブロック統合処理を効率的に行うことができる。
【００４８】
実施の形態５．
実施の形態２から４では、ある演算ブロック２０２に、他の１つの演算ブロック２０２の演算を移動させることにより、演算ブロック２０２内の演算器２０３の利用効率を向上させる方法について説明した。
実施の形態５では、ある演算ブロック２０２に、他の演算ブロック２０２の演算を移動させることができなくなるまで、演算を移動させることにより、さらに演算ブロック２０２内の演算器２０３の利用効率を向上させる方法について説明する。なお、実施の形態５では、実施の形態４と異なる点のみを説明する。
【００４９】
実施の形態５に係るマイクロコード生成ツール１０１の構成は、図９に示す実施の形態３に係るマイクロコード生成ツール１０１の構成と同じである。
【００５０】
実施の形態５に係るマイクロコード生成ツール１０１の動作について説明する。
なお、実施の形態５に係るマイクロコード生成ツール１０１の全体的な動作は、図１４に示す実施の形態４に係るマイクロコード生成ツール１０１の全体的な動作と同じである。そこで、ここでは、演算ブロック統合処理についてのみ説明する。
図１６は、実施の形態５に係る演算ブロック統合処理の流れを示すフローチャートである。
【００５１】
図１６に示す（Ｓ５２１）から（Ｓ５３５）の処理は、図１５に示す実施の形態４に係る（Ｓ４２１）から（Ｓ４３５）の処理と同じである。
（Ｓ５３４）で結線可能である場合（Ｓ５３４でＹＥＳ）、演算ブロック統合部１１６は、演算ブロックＡにまだ空き演算器２０３があるか否かを判定する（Ｓ５３６）。そして、空き演算器２０３がある場合（Ｓ５３６でＹＥＳ）、変数ｊの値がｎでないことを確認し（Ｓ５２９でＮＯ）、変数ｊをインクリメントした上で（Ｓ５３０）、処理を（Ｓ５２６）へ戻す。そして、演算ブロック２０２を演算ブロックＢとして、さらに演算ブロックＡに演算を移動させる処理を行う。一方、空き演算器２０３がない場合（Ｓ５３６でＮＯ）、変数ｉの値がｎでないことを確認し（Ｓ５２４でＮＯ）、変数ｉをインクリメントした上で（Ｓ５２５）、処理を（Ｓ５２２）へ戻し、次の演算ブロック２０２を演算ブロックＡとして処理を行う。
【００５２】
以上のように、実施の形態５に係るマイクロコード生成ツール１０１は、演算ブロックＡに空き演算器２０３がある間は、繰り返し他の演算ブロック２０２に割り当てられた演算を演算ブロックＡへ移動させることを試みる。そのため、演算ブロック２０２内の演算器２０３の利用効率を向上させることができる。
【００５３】
実施の形態６．
実施の形態２から５では、順次各演算ブロック２０２の空き演算器２０３の数と、他の演算ブロック２０２における演算が割り当てられた演算器２０３の数とを比較して、演算の割り当ての移動を行った。
実施の形態６では、演算ブロック２０２を統合する組合せパターンリストを生成して、演算器２０３の利用効率を最適化する方法について説明する。
【００５４】
図１７は、実施の形態６に係るマイクロコード生成ツール１０１の構成図である。
実施の形態６に係るマイクロコード生成ツール１０１は、図９に示す実施の形態３に係るマイクロコード生成ツール１０１の構成に加え、組合せパターンリストを生成するリスト生成部１１８を備える。
【００５５】
実施の形態６に係るマイクロコード生成ツール１０１の動作について説明する。
なお、実施の形態６に係るマイクロコード生成ツール１０１の全体的な動作は、図１１に示す実施の形態３に係るマイクロコード生成ツール１０１の全体的な動作と同じである。そこで、ここでは、演算ブロック統合処理についてのみ説明する。
図１８は、実施の形態６に係る演算ブロック統合処理の流れを示すフローチャートである。
【００５６】
まず、リスト生成部１１８は、フラグ管理テーブル１１７において、フラグが“１”（空き演算器２０３あり）となっている全ての演算ブロック２０２の演算器２０３の数を読み出す（Ｓ７２１）。
そして、リスト生成部１１８は、（Ｓ７２１）で読み出した演算器２０３の数から、演算ブロック２０２の組合せパターンリストを作成する（Ｓ７２２）。
図１９は、実施の形態６に係る組合せパターンリストの例を示す図である。
ここで、例えば、図２に示す並列演算装置２０１では、１個の演算ブロック２０２内に４個の演算器２０３が存在している。図４に示したソースコードの演算式部３０３が１個につき、最低１個の演算器２０３を使用するので、１個の演算ブロック２０２には、最大４個までの演算式を割り当てられる可能性がある。一方で、演算式が必要とする演算器２０３の個数、結線制限により最小で１個の演算式しか割り当てられないこともある。
そこで、例えば図１９に示すように、空き演算器２０３のある演算ブロック２０２が演算ブロックＡ〜Ｈの８個であった場合、演算ブロックＡ〜Ｈを演算ブロック１個〜４個を組とする組合せ方法を全てリストアップし、これを組合せパターンリスト６０１とする。
【００５７】
次に、リスト生成部１１８は、この組合せパターンリスト中の各組合せパターン毎に、最終的に利用される演算ブロック２０２の個数を計算し（Ｓ７２３）、利用される演算ブロック２０２の個数が少ない順に組合せパターンをソートする（Ｓ７２４）。ここで、利用する演算ブロック２０２の数が最少の組合せパターンが、並列演算装置２０１全体における演算ブロック２０２の演算器２０３利用効率が最も高い組合せパターンとなることが分かる。そこで、演算ブロック統合部１１６は、利用する演算ブロック２０２の数が最少の組合せパターンを選択する（Ｓ７２５）。
そして、演算ブロック統合部１１６は、選択した組合せパターンに従って、演算ブロック２０２に対して演算の再割り当てを行い（Ｓ７２６）、統合され演算の割り当てが移動された演算ブロック２０２を解放する（Ｓ７２７）。演算ブロック統合部１１６は、演算ブロック２０２を統合しても、結線が可能であるか否かを判定する（Ｓ７２８）。
結線が不可能であった場合（Ｓ７２８でＮＯ）、演算ブロック統合部１１６は統合した演算ブロック２０２を元の通り戻す（Ｓ７２９）。そして、演算ブロック統合部１１６は、処理を（Ｓ７２５）へ戻し、次に利用する演算ブロック２０２の数が少ない組合せパターンを選択して、処理を行う。一方、結線が可能であった場合（Ｓ７２８でＹＥＳ）、統合した演算ブロック２０２の割り当て変更を確定とする。
【００５８】
以上のように、実施の形態６に係るマイクロコード生成ツール１０１は、統合可能な演算ブロック２０２の組合せパターンリストを作成して、組合せパターンリストに基づき、利用効率が最も高い組合せで統合を行う。したがって、演算器２０３の利用効率を最適化することができる。
【００５９】
次に、実施の形態におけるマイクロコード生成ツール１０１のハードウェア構成について説明する。
図２０は、マイクロコード生成ツール１０１のハードウェア構成の一例を示す図である。
図２０に示すように、マイクロコード生成ツール１０１は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、ＬＣＤ９０１（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、通信ボード９１５、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０（固定ディスク装置）の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。磁気ディスク装置９２０は、所定の固定ディスクインタフェースを介して接続される。
【００６０】
磁気ディスク装置９２０又はＲＯＭ９１３などには、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００６１】
プログラム群９２３には、上記の説明において「ソース解析部１１０」、「演算分割部１１１」、「演算割当部１１２」、「結線部１１３」、「マイクロコード生成部１１４」等として説明した機能を実行するソフトウェアやプログラムやその他のプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、上記の説明において「演算器個数テーブル１１５」、「フラグ管理テーブル１１７」に格納される情報やデータや信号値や変数値やパラメータと、「ソースコード１０２」、「マイクロコード１０３」等が、「データベース」の各項目として記憶される。「データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵ９１１の動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵ９１１の動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００６２】
また、上記の説明におけるフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、その他光ディスク等の記録媒体やＩＣチップに記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体や電波によりオンライン伝送される。
また、上記の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。また、「〜装置」として説明するものは、「〜回路」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。さらに、「〜処理」として説明するものは「〜ステップ」であっても構わない。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、ＲＯＭ９１３等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、上記で述べた「〜部」としてコンピュータ等を機能させるものである。あるいは、上記で述べた「〜部」の手順や方法をコンピュータ等に実行させるものである。
【符号の説明】
【００６３】
１０１  マイクロコード生成ツール、１０２  ソースコード、１０３  マイクロコード、１１０  ソース解析部、１１１  演算分割部、１１２  演算割当部、１１３  結線部、１１４  マイクロコード生成部、１１５  演算器個数テーブル、１１６  演算ブロック統合部、１１７  フラグ管理テーブル、１１８  リスト生成部、２０１  並列演算装置、２０２  演算ブロック、２０３  演算器、２０４，２０５  セレクタ、２０６  入力セレクタ、２０７  出力セレクタ、２１０  マイクロコード制御部、３０１  入力信号宣言部、３０２  出力信号宣言部、３０３  演算式部。
【図１】
2012018545.tif 000003
【図２】
2012018545.tif 000004
【図３】
2012018545.tif 000005
【図４】
2012018545.tif 000006
【図５】
2012018545.tif 000007
【図６】
2012018545.tif 000008
【図７】
2012018545.tif 000009
【図８】
2012018545.tif 000010
【図９】
2012018545.tif 000011
【図１０】
2012018545.tif 000012
【図１１】
2012018545.tif 000013
【図１２】
2012018545.tif 000014
【図１３】
2012018545.tif 000015
【図１４】
2012018545.tif 000016
【図１５】
2012018545.tif 000017
【図１６】
2012018545.tif 000018
【図１７】
2012018545.tif 000019
【図１８】
2012018545.tif 000020
【図１９】
2012018545.tif 000021
【図２０】
2012018545.tif 000022