(57)【要約】      （修正有）【課題】行列の乗算に際して並列度を向上させることができるリコンフィギュラブルプロセッサを提供する。【解決手段】制御回路は、行列Ｂの列をバッファメモリに保持する第１の回路をリコンフィギュラブル回路上に構成した後、行列Ａをロードするとともにバッファメモリに保持した行列Ｂの列との積和演算を行う第２の回路をリコンフィギュラブル回路上に構成する。構成行列の乗算を行う回路を第１の回路と第２の回路とに時間的に分割することによって並列度を向上できる。また、コンフィギュレーションメモリに事前にロードされた第１の構成情報と第２の構成情報とに基づいて第１の回路と第２の回路とを繰り返しリコンフィギュラブル回路上に構成するため、構成情報を繰り返しロードする必要がなく、構成情報のロードに掛かる時間を低減できる。【選択図】図４
2020042479.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッシングエレメントを有し、該複数のプロセッシングエレメントによる回路構成を動的に再構成可能なリコンフィギュラブル回路と、該リコンフィギュラブル回路に構成される回路構成を示す複数の構成情報を記憶するコンフィギュレーションメモリと、前記リコンフィギュラブル回路と前記コンフィギュレーションメモリとを制御する制御回路とを備え、接続された外部メモリに記憶された行列の乗算を行うリコンフィギュラブルプロセッサであって、
前記制御回路は、
前記外部メモリに記憶された一方の行列における少なくとも１つの所定の行または少なくとも１つの所定の列に含まれる全要素をバッファメモリに保持する第１の回路を示す第１の構成情報と、前記外部メモリに記憶された他方の行列の全要素と前記バッファメモリに保持された全要素とに基づく積和処理を実行する第２の回路を示す第２の構成情報とを前記外部メモリから前記コンフィギュレーションメモリにロードするロード処理部と、
前記コンフィギュレーションメモリにロードされた前記第１の構成情報に基づいて前記リコンフィギュラブル回路に構成された前記第１の回路による処理動作と、前記コンフィギュレーションメモリにロードされた前記第２の構成情報に基づいて前記第１の回路とは異なるタイミングにおいて前記リコンフィギュラブル回路に構成された前記第２の回路による処理動作とを、前記一方の行列の全要素と前記他方の行列の全要素との積和処理が終了するまで繰り返し実行する処理制御部とを備えることを特徴とするリコンフィギュラブルプロセッサ。
【請求項２】
前記制御回路は、前記行列のデータサイズが第１の閾値以上であるか否かを判定するサイズ判定部を更に備え、
前記処理制御部は、前記行列のデータサイズが前記第１の閾値以上である場合、前記第１の回路による処理動作と前記第２の回路による処理動作とを行うことを特徴とする請求項１に記載のリコンフィギュラブルプロセッサ。
【請求項３】
前記ロード処理部は、前記外部メモリに記憶された一方の行列における少なくとも１つの所定の行または少なくとも１つの所定の列に含まれる全要素をバッファメモリに保持するとともに、前記外部メモリに記憶された他方の行列の全要素と前記バッファメモリに保持された全要素とに基づく積和処理を実行する第３の回路を示す第３の構成情報を前記外部メモリから前記コンフィギュレーションメモリにロードし、
前記処理制御部は、前記行列のデータサイズが前記第１の閾値未満である場合、前記コンフィギュレーションメモリにロードされた前記第３の構成情報に基づいて前記リコンフィギュラブル回路に構成された前記第３の回路による処理動作を行うことを特徴とする請求項２に記載のリコンフィギュラブルプロセッサ。
【請求項４】
前記サイズ判定部は、前記行列のデータサイズが前記第１の閾値より小さい第２の閾値以上であるか否かを判定し、
前記処理制御部は、前記行列のデータサイズが前記第１の閾値未満且つ前記第２閾値以上である場合、前記第３の回路による処理動作を行うことを特徴とする請求項３に記載のリコンフィギュラブルプロセッサ。
【請求項５】
前記制御回路は、該制御回路により前記一方の行列と前記他方の行列との乗算を行う演算部を更に備え、
前記演算部は、前記行列のデータサイズが前記第２閾値未満である場合、前記一方の行列と前記他方の行列との乗算を行うことを特徴とする請求項４に記載のリコンフィギュラブルプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、リコンフィギュラブルプロセッサに関する。
【背景技術】
【０００２】
従来、設計者が独自の回路を再構成することができ、例えば、特定の処理に特化した専用ハードウェアまたはアプリケーション専用プロセッサとして機能させることができるチップとして、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やリコンフィギュラブルプロセッサが知られている。ＦＰＧＡとリコンフィギュラブルプロセッサは、回路の再構成に係る基本構成要素の粒度において特に異なっており、ＦＰＧＡの基本構成単位が１ビットの細粒度を有するＬＵＴ（Ｌｏｏｋｕｐ  ｔａｂｌｅ）であるのに対し、リコンフィギュラブルプロセッサの基本構成単位は少なくとも４ビット以上、例えば１６ビット程度の粗粒度を有するプロサッサエレメントとなっている。
【０００３】
リコンフィギュラブルプロセッサにおいては、複数のプロセッシングエレメントが行列状に配置され、この複数のプロセッシングエレメントの配線の接続関係と各プロセッシングエレメントの機能定義とを含む構成情報が書き込まれるプロセスであるコンフィギュレーションによって、特定の機能がリコンフィギュラブルプロセッサにより実装される。ＦＰＧＡにおいても、概ね同様のコンフィギュレーションによって特定の機能が実装される。リコンフィギュラブルプロセッサにおける構成データは、ＦＰＧＡにおける構成情報と比較して、その基本構成単位の粒度が粗いことから、必要とするパラメータが少なく、データ量が小さくなっており、従って、構成情報のロードに掛かる時間も短くなっている。
【０００４】
このため、ＦＰＧＡにおいて構成情報を格納するコンフィギュレーションメモリが現行の機能を実装するための構成情報を格納するための１つのバンクのみを有するのに対し、リコンフィギュラブルプロセッサにおけるコンフィギュレーションメモリは、現行の機能を実装するための構成情報を格納するフォアグラウンドバンクと、将来用いる機能を実装するための構成情報を格納するバックグラウンドバンクとを有する。リコンフィギュラブルプロセッサは、構成情報のロードに掛かる時間が短いために処理中に複数のバンクをデータの処理中に切り換えることができ、このような動作は、複数のプロセッシングエレメントを動的に再構成することから、ダイナミックリコンフィギュレーションと呼ばれる。
【０００５】
なお、このようなリコンフィギュラブルプロセッサに関する技術として、複数のプロセッシングエレメントのうち、第１のプロセッシングエレメントをデータの記憶に用いた後、第１のプロセッシングエレメントと第２のプロセッシングエレメントとを接続して、データを第１のプロセッシングエレメントから第２のプロセッシングエレメントに移動複写させると同時に、他のプロセッシングエレメントにおいて所定の機能を実現するリコンフィギュラブルプロセッサの制御方法、が知られている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第５８８２７１４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
近年、その柔軟性の高さ、コスト及び消費電力の低減という観点から、ディープラーニングなどの機械学習に対して、並列処理性能に優れたＦＰＧＡやリコンフィギュラブルプロセッサを応用することが提案されている。機械学習を行う上では行列の乗算が必須であるが、特にリコンフィギュラブルプロセッサにおいて、行列の乗算に際して、より並列度を向上させることが要求されている。
【０００８】
本発明の実施形態は、上述した問題点を解決するためになされたものであり、行列の乗算に際して並列度を向上させることができるリコンフィギュラブルプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決するため、本実施形態に係るリコンフィギュラブルプロセッサは、複数のプロセッシングエレメントを有し、該複数のプロセッシングエレメントによる回路構成を動的に再構成可能なリコンフィギュラブル回路と、該リコンフィギュラブル回路に構成される回路構成を示す複数の構成情報を記憶するコンフィギュレーションメモリと、前記リコンフィギュラブル回路と前記コンフィギュレーションメモリとを制御する制御回路とを備え、接続された外部メモリに記憶された行列の乗算を行うリコンフィギュラブルプロセッサであって、前記制御回路は、前記外部メモリに記憶された一方の行列における少なくとも１つの所定の行または少なくとも１つの所定の列に含まれる全要素をバッファメモリに保持する第１の回路を示す第１の構成情報と、前記外部メモリに記憶された他方の行列の全要素と前記バッファメモリに保持された全要素とに基づく積和処理を実行する第２の回路を示す第２の構成情報とを前記外部メモリから前記コンフィギュレーションメモリにロードするロード処理部と、前記コンフィギュレーションメモリにロードされた前記第１の構成情報に基づいて前記リコンフィギュラブル回路に構成された前記第１の回路による処理動作と、前記コンフィギュレーションメモリにロードされた前記第２の構成情報に基づいて前記第１の回路とは異なるタイミングにおいて前記リコンフィギュラブル回路に構成された前記第２の回路による処理動作とを、前記一方の行列の全要素と前記他方の行列の全要素との積和処理が終了するまで繰り返し実行する処理制御部とを備えることを特徴とする。
【発明の効果】
【００１０】
本発明の実施形態によれば、行列の乗算に際して並列度を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態に係るリコンフィギュラブルプロセッサのハードウェア構成を示すブロック図である。
【図２】リコンフィギュラブル回路のハードウェア構成を示すブロック図である。
【図３】演算対象とする行列を示す図である。
【図４】制御回路の機能構成を示すブロック図である。
【図５】行列の乗算に係る制御回路の全体動作を示すフローチャートである。
【図６】転置制御処理の動作を示すフローチャートである。
【図７】動作制御処理の動作を示すフローチャートである。
【図８】第１演算制御処理の動作を示すフローチャートである。
【図９】第１の回路を示すブロック図である。
【図１０】第２の回路を示すブロック図である。
【図１１】第２演算制御処理の動作を示すフローチャートである。
【図１２】第３の回路を示すブロック図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、本発明の実施形態について説明する。
【００１３】
（リコンフィギュラブルプロセッサのハードウェア構成）
本実施形態に係るリコンフィギュラブルプロセッサのハードウェア構成について説明する。図１は、リコンフィギュラブルプロセッサのハードウェア構成を示すブロック図である。図２は、リコンフィギュラブル回路のハードウェア構成を示すブロック図である。
【００１４】
図１に示すように、本実施形態に係るリコンフィギュラブルプロセッサ１は、リコンフィギュラブル回路１０、コンフィギュレーションメモリ１１、制御回路１２、データバス１３、外部メモリ２と接続された外部Ｉ／Ｏ１４を備える。
【００１５】
外部メモリ２は、制御回路１２により実行されるプログラム、リコンフィギュラブル回路１０または制御回路１２により処理されるデータ、リコンフィギュラブル回路１０の回路構成を示す構成情報などを格納するＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１６】
リコンフィギュラブル回路１０は、図２に示すように、行列状に配置された複数のプロセッシングエレメントＰＥを有し、これらのプロセッシングエレメントＰＥによる回路の構成を、構成情報に基づいて動的に変更可能なダイナミックリコンフィギュラブルデバイスである。ここで、構成情報は、回路構成として、各プロセッシングエレメントＰＥの機能定義と複数のプロセッシングエレメントＰＥ間の接続関係とを示す。
【００１７】
なお、図２においては、説明上、リコンフィギュラブル回路１０に含まれるプロセッシングエレメントＰＥの一部のみが示されているものとし、後述する図９，１０，１１についても同様である。また、本実施形態に係るリコンフィギュラブル回路１０は、同一種類のプロセッシングエレメントＰＥのみにより構成されるホモ型、または特定の機能に特化した複数種類のプロセッシングエレメントＰＥにより構成されるヘテロ型のいずれであっても良い。
【００１８】
コンフィギュレーションメモリ１１は、外部メモリ２からロードされた構成情報が格納される記憶装置であり、本実施形態においては、それぞれ１つの構成情報を格納可能な３つのバンクを有する。これら３つのバンクのうち、所定の１バンクをフォアグラウンドバンクとすることができ、この際、残り２つのバンクはバックグラウンドバンクとして扱われる。ここで、フォアグラウンドバンクは、現行の回路構成を示す１つの構成情報を格納するバンクであり、バックグラウンドバンクは、動的に切り替えるべき回路構成を示す２つの構成情報を格納するバンクである。３つのバンクのうち、１つのバンクがフォアグラウンドバンクとして選択され、このフォアグラウンドバンクに格納された構成情報に基づいてリコンフィギュラブル回路１０の回路が構成される。
【００１９】
制御回路１２は、リコンフィギュラブル回路１０及びコンフィギュレーションメモリ１１を制御するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。制御回路１２は、基本的に、外部メモリ２に格納された構成情報のコンフィギュレーションメモリ１１へのロード、コンフィギュレーションメモリ１１におけるフォアグラウンドバンクの選択、リコンフィギュラブル回路１０による処理の実行の開始及び停止を行う。また、後述する各機能を実現するため、外部メモリ２に格納されたプログラムを実行する。
【００２０】
（行列の乗算におけるメモリアクセス）
上述したハードウェア構成によるリコンフィギュラブルプロセッサは行列の乗算を行うものである。行列の乗算においては、後述するようにメモリアクセスがボトルネックとなる。ここで、行列の乗算におけるメモリアクセスについて説明する。図３は、演算対象とする行列を示す図である。
【００２１】
図３に示すように、行列Ａと行列Ｂとの積を行列Ｃとして算出する場合、行列Ｃにおける要素Ｃ１の算出において、行列ＡにおけるＡ１〜Ａ４の４要素を含む行と、行列ＢにおけるＢ１〜Ｂ４の要素を含む列との積和が、Ｃ１＝Ａ１×Ｂ１＋Ａ２×Ｂ２＋Ａ３×Ｂ３＋Ａ４×Ｂ４の式により算出される。つまり、行列Ａの所定の行における各要素と、この所定の行に対応する行列Ｂの列において行の要素それぞれに対応する要素とが乗算され、全ての要素についての積を加算したものが行列Ｃの要素となる。
【００２２】
リコンフィギュラブル回路１０が行列Ｃを算出する場合、行列Ａ及び行列Ｂは処理すべきデータとして外部メモリ２に格納される。行列Ａの１要素とこれに対応する行列Ｂの１要素との積を算出する度にこれらの要素を外部メモリ２から読み出す場合、行列Ｃの１要素、例えば要素Ｃ１の算出に際しては要素Ａ１〜Ａ４、要素Ｂ１〜Ｂ４の計８要素が外部メモリ２から読み出される必要があり、行列Ｃの全要素の算出には行列Ａ及び行列Ｂにおける要素が外部メモリ２から１２８回読み出される必要がある。このように、行列の乗算においては、演算処理が容易であるのに比較して、外部メモリ２へのメモリアクセス量が大きいため、メモリアクセスが処理速度においてボトルネックとなり得る。このことは、演算対象とする行列の要素数が大きくなる程に顕著となる。
【００２３】
本実施形態において、リコンフィギュラブル回路１０は、その内部にバッファメモリを複数構成し、これらのバッファメモリ内に行列Ｂの少なくとも１つ以上の列に含まれる全要素を保持して行列の乗算を行う。行列Ｂの１列の全要素がバッファメモリに保持されて行列の乗算がなされる場合、まず、行列Ｂの１列分の４要素（例えば、Ｂ１〜Ｂ４）が外部メモリ２から読み出されてバッファメモリに保持され、行列Ａの所定の１行における４要素（例えば、Ａ１〜Ａ４）が外部メモリ２から読み出されて、この４要素（Ａ１〜Ａ４）とバッファメモリに保持された４要素（Ｂ１〜Ｂ４）との積和により行列Ｃの１要素（Ｃ１）が算出される。バッファメモリに保持された行列Ｂの１列分の４要素（Ｂ１〜Ｂ４）は、行列Ｃの１列における全要素（Ｃ１，Ｃ５，Ｃ９，Ｃ１３）の算出に用いることができるため、行列Ｃの１列の算出に際しては、行列Ｂの４要素（Ｂ１〜Ｂ４）と行列Ａの１６要素（Ａ１〜Ａ１６）とを含む計２０要素が外部メモリ２から読み出される。したがって、行列Ｃの全要素の算出に際して、行列Ａ及び行列Ｂにおける要素が外部メモリ２から８０回読み出されることとなる。このように、バッファメモリに要素を保持することによって、保持した要素を複数回用いることができ、行列の乗算に要するメモリアクセス量を低減することができ、延いては、処理時間を低減することができる。
【００２４】
また、行列Ｂの２列の全要素（例えば、Ｂ１〜Ｂ８）がバッファメモリに保持されて行列の乗算がなされる場合、まず、行列Ｂの２列分の８要素（Ｂ１〜Ｂ８）が外部メモリ２から読み出されてバッファメモリに保持され、行列Ａの所定の１行における４要素（例えば、Ａ１〜Ａ４）が外部メモリ２から読み出されて、この４要素（Ａ１〜Ａ４）と、バッファメモリに保持された１列分の４要素（Ｂ１〜Ｂ４）と他の１列分の４要素（Ｂ５〜Ｂ８）のそれぞれとの積和により行列Ｃの１行に含まれる２要素（Ｃ１，Ｃ２）が算出される。バッファメモリに保持された行列Ｂの２列分の８要素（Ｂ１〜Ｂ８）は、行列Ｃの２列における全要素（Ｃ１，Ｃ５，Ｃ９，Ｃ１３，Ｃ２，Ｃ６，Ｃ１０，Ｃ１４）の算出に用いることができるため、行列Ｃの２列の算出に際しては、行列Ｂの８要素（Ｂ１〜Ｂ８）と行列Ａの１６要素（Ａ１〜Ａ１６）とを含む計２４要素が外部メモリ２から読み出されることとなり、したがって、行列Ｃの全要素の算出に際して、行列Ａ及び行列Ｂにおける要素が外部メモリ２から４８回読み出されることとなる。
【００２５】
このように、バッファメモリに保持する要素数が多い程、行列の乗算に係るメモリアクセスを低減させることができる。なお、以降の説明において、リコンフィギュラブルプロセッサ１は行列Ｂの１列分の要素をバッファメモリに保持して行列の乗算を行うものとするが、複数列文の要素をバッファメモリに保持するようにしても良く、また、行列Ａの少なくとも１つの行以上に含まれる要素をバッファメモリに保持するようにしても良い。
【００２６】
（制御回路の機能構成）
制御回路の機能構成について説明する。図４は、制御回路の機能構成を示すブロック図である。
【００２７】
制御回路１２は、機能として、サイズ判定部１２１、選択部１２２、パラメータ変更部１２３、ロード処理部１２４、回路構成部１２５、処理制御部１２６、演算部１２７、処理判定部１２８を備える。
【００２８】
サイズ判定部１２１は、演算対象とする行列のサイズが所定の閾値以上か否かを判定する。ここで、行列のサイズは、外部メモリ２に格納された行列Ａまたは行列Ｂのデータサイズである。選択部１２２は、サイズ判定部１２１による判定に応じて外部メモリ２に格納された構成情報を選択する。パラメータ変更部１２３は、選択部１２２により選択された構成情報のパラメータを変更する。ここで構成情報のパラメータとは、構成情報に基づいてリコンフィギュラブル回路１０において構成された回路により用いられる外部メモリ２上のデータを示すポインタであり、具体的には外部メモリ２に格納された行列の要素を示すポインタである。
【００２９】
ロード処理部１２４は、パラメータ変更部１２３によりパラメータを変更された構成情報をコンフィギュレーションメモリ１１へロードする。回路構成部１２５は、コンフィギュレーションメモリ１１における３つのバンクのうち、１つのバンクをフォアグラウンドバンクとして選択することによりリコンフィギュラブル回路１０の回路構成を変更する。処理制御部１２６は、リコンフィギュラブル回路１０による処理動作の開始及び停止を制御する。演算部１２７は、制御回路１２により行列の乗算を行う。処理判定部１２８は、リコンフィギュラブル回路１０による行列の乗算において、全ての行列要素による積和処理が終了したか否か、即ち行列の乗算が終了したか否かを判定する。
【００３０】
（制御回路の全体動作）
行列の乗算に係る制御回路の全体動作について説明する。図５は、行列の乗算に係る制御回路の全体動作を示すフローチャートである。
【００３１】
図５に示すように、まず、サイズ判定部１２１は、演算対象とする行列のサイズが所定の第１閾値以上か否かを判定する（Ｓ１０１）。
【００３２】
行列のサイズが第１閾値以上である場合（Ｓ１０１，ＹＥＳ）、後述する転置制御処理が実行され（Ｓ１０２）、その後、後述する第１演算制御処理が実行され（Ｓ１０３）、全体処理が終了する。
【００３３】
一方、行列のサイズが第１閾値未満である場合（Ｓ１０１，ＮＯ）、サイズ判定部１２１は、行列のサイズが、第１閾値より値が小さい第２閾値以上であるか否かを判定する（Ｓ１０４）。
【００３４】
行列のサイズが第２閾値以上である場合（Ｓ１０４，ＹＥＳ）、転置制御処理が実行され（Ｓ１０５）、その後、後述する第２演算制御処理が実行され（Ｓ１０６）、全体処理が終了する。
【００３５】
一方、行列のサイズが第２閾値未満である場合（Ｓ１０４，ＮＯ）、制御回路１２が行列の積を演算する演算処理を実行し（Ｓ１０７）、全体処理が終了する。
【００３６】
このように、制御回路１２は、演算対象とする行列のサイズに応じて、リコンフィギュラブル回路１０により実行される第１演算制御処理、第２演算制御処理、演算処理を実行する。ここで、第１演算制御処理は、リコンフィギュラブル回路１０において並列度が高い回路を構成して行列の乗算を行う処理である。また、第２演算制御処理は、第１演算制御処理と比較して、リコンフィギュラブル回路１０において並列度は低いが構成情報のロード時間が短い回路を構成して行列の乗算を行う処理である。また、演算処理は、制御回路１２において構成情報をロードする必要なく行列の乗算を行う処理である。
【００３７】
したがって、第１閾値は、第１の演算制御処理により行列の乗算を行う際に構成情報のロード時間がボトルネックとなるような小さい行列のサイズに設定されると良く、第２閾値は、第２の演算制御処理により行列の演算を行う際に構成情報のロード時間がボトルネックとなるような小さい行列のサイズに設定されると良い。
【００３８】
（転置制御処理の動作）
上述の全体動作におけるステップＳ１０２，Ｓ１０５において実行される転置制御処理について説明する。図６は、転置制御処理の動作を示すフローチャートである。
【００３９】
図６に示すように、まず、選択部１２２は、リコンフィギュラブル回路１０により転置処理を行うための構成情報を選択する（Ｓ２０１）。ここで、転置処理は、行列Ｂの行と列を入れ替える処理であり、行列Ａと行列Ｂとの乗算を容易に行うための処理である。なお、後に詳述する第１演算制御処理及び第２演算制御処理において、処理対象は転置された行列ＢＴであるが、便宜上、以降の説明において、行列Ｂの列という表現は、転置された行列ＢＴの行を示すものとする。
【００４０】
次に、パラメータ変更部１２３は、選択された構成情報に基づいて構成される回路により用いられるパラメータを変更する（Ｓ２０２）。ここで変更されるパラメータは、外部メモリ２に格納される行列Ｂの要素を示すポインタである。
【００４１】
パラメータの変更後、ロード処理部１２４は、選択部１２２により選択された構成情報、即ち、転置処理を行うための構成情報を外部メモリ２からコンフィギュレーションメモリ１１におけるバンクへロードし（Ｓ２０３）、回路構成部１２５がこのバンクをフォアグラウンドバンクとして選択することによりリコンフィギュラブル回路１０の回路構成を変更する（Ｓ２０４）。
【００４２】
回路構成の変更後、処理制御部１２６は、リコンフィギュラブル回路１０により動作処理を制御する動作制御処理を実行する（Ｓ２０５）。この動作制御処理により、転置処理を行うための回路が構成されたリコンフィギュラブル回路１０による処理動作が開始される。
【００４３】
（動作制御処理の動作）
上述の転置制御処理におけるステップＳ２０５において実行される動作制御処理の動作について説明する。図７は、動作制御処理の動作を示すフローチャートである。
【００４４】
図７に示すように、処理制御部１２６は、リコンフィギュラブル回路１０による処理動作を開始し（Ｓ３０１）、リコンフィギュラブル回路１０をポーリングし（Ｓ３０２）、予め与えられた停止条件が満たされたか否かを判定する（Ｓ３０３）。転置制御処理においては、行列Ｂの全ての要素について転置された場合に停止条件を満たしたものと判定されるものとする。
【００４５】
停止条件が満たされた場合（Ｓ３０３，ＹＥＳ）、処理制御部１２６は、リコンフィギュラブル回路１０による処理動作を終了し（Ｓ３０４）、動作制御処理を終了する。
【００４６】
一方、停止条件が満たされない場合（Ｓ３０３，ＮＯ）、処理制御部１２６は、再度、リコンフィギュラブル回路１０をポーリングする（Ｓ３０２）。
【００４７】
このような動作制御処理によって、所定の回路が構成されたリコンフィギュラブル回路１０を予め与えられた停止条件を満たすまで動作させることができる。なお、この動作制御処理は、転置制御処理だけでなく、第１演算制御処理、第２演算制御処理においても異なる停止条件が与えられて実行される。
【００４８】
（第１演算制御処理）
第１演算制御処理について説明する。図８は、第１演算制御処理の動作を示すフローチャートである。図９は、第１の回路を示すブロック図である。図１０は、第２の回路を示すブロック図である。
【００４９】
図８に示すように、まず、選択部１２２は、第１の構成情報及び第２の構成情報を選択する（Ｓ４０１）。ここで、第１の構成情報によれば、リコンフィギュラブル回路１０が、その内部に構成したバッファメモリ内に行列Ｂの２列に含まれる全ての要素を保持させる第１の回路として構成される。また、第２の構成情報によれば、リコンフィギュラブル回路１０が、行列Ａにおける全ての要素を外部メモリ２からロードし、行列Ａの行とバッファメモリ内に保持された列とに基づく積和を算出する第２の回路として構成される。
【００５０】
次に、パラメータ変更部１２３は、選択された第１の構成情報及び第２の構成情報のそれぞれについて、パラメータを変更する（Ｓ４０２）。ここで、第１の構成情報について変更されるパラメータは、外部メモリ２に格納された行列Ｂの所定の２列に含まれる全ての要素のデータサイズ、及びこれらの要素を示すポインタであり、第２の構成情報について変更されるパラメータは、外部メモリ２に格納された行列Ａに含まれる全ての要素のデータサイズ、及びこれらの要素を示すポインタである。このパラメータが更新されることにより行列Ｂの所定の２列が順次選択される。
【００５１】
パラメータの変更後、ロード処理部１２４は、選択部１２２により選択された第１の構成情報を外部メモリ２からコンフィギュレーションメモリ１１へロードし（Ｓ４０３）、同様に、第２の構成情報を外部メモリ２からコンフィギュレーションメモリ１１へロードする（Ｓ４０４）。
【００５２】
構成情報のロード後、回路構成部１２５は、コンフィギュレーションメモリ１１において第１の構成情報が格納されたバンクをフォアグラウンドバンクとして選択することにより、リコンフィギュラブル回路１０において、第１の回路を構成する（Ｓ４０５）。
【００５３】
ここで、第１の回路について説明する。この第１の回路は、リコンフィギュラブル回路１０において複数構成される。第１の回路のそれぞれは、図９に示すように、第１ロード回路１０１と、バッファメモリ１０２と、ライトポインタ１０３と、ライトデータ１０４とを含む。第１ロード回路１０１は、行列Ｂの所定の２列に含まれる要素を外部メモリ２からロードする。バッファメモリ１０２は、第１ロード回路１０１によりロードされたデータを保持する。ライトポインタ１０３は、バッファメモリ１０２におけるデータのライト位置を指定する。ライトデータ１０４は、第１ロード回路１０１によりロードされたデータをバッファメモリ１０２へ書き込む。
【００５４】
第１の回路への変更後、処理制御部１２６は、リコンフィギュラブル回路１０に対して動作制御処理を実行する（Ｓ４０６）。ここで、動作制御処理は、行列Ｂの所定の２列に含まれる全ての要素がリコンフィギュラブル回路１０におけるバッファメモリ１０２に書き込まれるとリコンフィギュラブル回路１０の処理動作を停止する。
【００５５】
第１の回路に構成されたリコンフィギュラブル回路１０の処理動作後、回路構成部１２５は、コンフィギュレーションメモリ１１において第２の構成情報が格納されたバンクをフォアグラウンドバンクとして選択することにより、第１の回路が構成されたリコンフィギュラブル回路１０において、第２の回路を再構成する（Ｓ４０７）。
【００５６】
ここで、第２の回路について説明する。この第２の回路は、リコンフィギュラブル回路１０において複数の第１の回路に対応して複数構成される。第２の回路のそれぞれは、図１０に示すように、第１の回路において行列Ｂの所定の２列における要素が書き込まれたバッファメモリ１０２と、リードポインタ１０５と、第２ロード回路１０６と、積和演算回路１０７とを含む。リードポインタ１０５は、バッファメモリ１０２に保持される行列Ｂの要素を読み出す。第２ロード回路１０６は、バッファメモリ１０２に保持される行列Ｂの要素に対応する行列Ａに含まれる要素を外部メモリ２からロードする。積和演算回路１０７は、リードポインタ１０５によりバッファメモリ１０２から読み出された行列Ｂの要素と第２ロード回路１０６によりロードされた行列Ａの要素とに基づく積和演算を行う。
【００５７】
第２の回路の構成後、処理制御部１２６は、リコンフィギュラブル回路１０に対して動作制御処理を実行する（Ｓ４０８）。ここで、動作制御処理は、バッファメモリ１０２に保持される行列Ｂの所定の２列とロードされた行列Ａの全ての行による積和演算を終えるとリコンフィギュラブル回路１０の処理動作を停止する。なお、積和演算の結果は行列Ｃの要素として外部メモリ２にストアされるものとする。
【００５８】
第２の回路に構成されたリコンフィギュラブル回路１０の処理動作後、処理判定部１２８は、行列Ａと行列Ｂとの乗算を終了したか否か、即ち、行列Ｂの全ての列について行列Ａにおける行との積和演算がなされたか否かを判定する（Ｓ４０９）。
【００５９】
行列の乗算が終了していない場合（Ｓ４０９，ＮＯ）、パラメータ変更部１２３は、第１の構成情報及び第２構成情報について、パラメータとしてのポインタを更新し（Ｓ４１０）、回路構成部１２５は、第２の回路が構成されたリコンフィギュラブル回路１０において、第１の回路を再構成する（Ｓ４０５）。なお、ステップＳ４１０のパラメータの更新については、例えば、ポインタの更新を行うハードウェア機構をリコンフィギュラブル回路１０に追加することによって省略することができる。
【００６０】
一方、行列の乗算が終了した場合（Ｓ４０９，ＹＥＳ）、第１演算制御処理が終了される。
【００６１】
このような第１演算制御処理によれば、行列Ｂの列をバッファメモリ１０２に保持する第１の回路がリコンフィギュラブル回路１０上に構成された後、行列Ａをロードするとともにバッファメモリ１０２に保持した行列Ｂの列との積和演算を行う第２の回路がリコンフィギュラブル回路１０上に構成される。このように、行列の乗算を行う回路を第１の回路と第２の回路とに時間的に分割することによって、これらの回路を同時にリコンフィギュラブル回路１０上に構成するのと比較して、より多くの回路をリコンフィギュラブル回路１０上に構成し、並列度を向上させることができる。また、コンフィギュレーションメモリ１１に事前にロードされた第１の構成情報と第２の構成情報とに基づいて第１の回路と第２の回路とを繰り返しリコンフィギュラブル回路１０上に構成するため、第１の回路と第２の回路とをリコンフィギュラブル回路１０上に構成する度に第１の構成情報と第２の構成情報をロードする必要がなく、したがって、構成情報のロードに掛かる時間を低減することができる。
【００６２】
（第２演算制御処理）
第２演算処理について説明する。図１１は、第２演算制御処理の動作を示すフローチャートである。図１２は、第３の回路構成を示すブロック図である。
【００６３】
図１１に示すように、まず、選択部１２２は、第３の構成情報を選択する（Ｓ５０１）。ここで、第３の構成情報によれば、リコンフィギュラブル回路１０において、第１の回路と第２の回路とを結合した第３の回路が構成される。
【００６４】
次に、パラメータ変更部１２３は、選択された第３の構成情報について、パラメータを変更する（Ｓ５０２）。ここで、第３の構成情報について変更されるパラメータは、外部メモリ２に格納された行列Ｂの所定の１列に含まれる全ての要素のデータサイズ及びこれらの要素を示すポインタと、外部メモリ２に格納された行列Ａに含まれる全ての要素のデータサイズ及びこれらの要素を示すポインタである。
【００６５】
パラメータの変更後、ロード処理部１２４が、選択部１２２により選択された第３の構成情報を外部メモリ２からコンフィギュレーションメモリ１１へロードし（Ｓ５０３）、回路構成部１２５が、コンフィギュレーションメモリ１１において第３の構成情報が格納されたバンクをフォアグラウンドバンクとして選択することにより、リコンフィギュラブル回路１０において、第３の回路が構成される（Ｓ５０４）。
【００６６】
ここで、第３の回路について説明する。この第３の回路は、リコンフィギュラブル回路１０において複数構成される。第３の回路のそれぞれは、図１２に示すように、第１ロード回路１０１と、バッファメモリ１０２と、ライトポインタ１０３と、ライトデータ１０４と、リードポインタ１０５と、第２ロード回路１０６と、積和演算回路１０７とを含み、上述したように、第１の回路と第２の回路を結合した構成となっている。
【００６７】
第３の回路の構成後、処理制御部１２６は、リコンフィギュラブル回路１０に対して動作制御処理を実行する（Ｓ５０５）。ここで、動作制御処理は、バッファメモリ１０２に保持される行列Ｂの所定の１列とロードされた行列Ａの全ての行による積和演算を終えるとリコンフィギュラブル回路１０の処理動作を停止する。なお、積和演算の結果は行列Ｃの要素として外部メモリ２にストアされるものとする。
【００６８】
第３の回路に構成されたリコンフィギュラブル回路１０の処理動作後、処理判定部１２８は、行列Ａと行列Ｂとの乗算を終了したか否か、即ち、行列Ｂの全ての列について行列Ａにおける行との積和演算がなされたか否かを判定する（Ｓ５０６）。
【００６９】
行列の乗算が終了していない場合（Ｓ５０６，ＮＯ）、パラメータ変更部１２３は、第３の構成情報について、パラメータとしてのポインタを更新し（Ｓ５０７）、処理制御部１２６は、再度、リコンフィギュラブル回路１０に対して動作制御処理を実行する（Ｓ５０５）。
【００７０】
一方、行列の乗算が終了した場合（Ｓ５０６，ＹＥＳ）、第２演算制御処理が終了される。
【００７１】
このような第２演算制御処理によれば、第１の回路と第２の回路とに時間的に分割する場合と比較して、１つの第３の回路が必要とするプロセッシングエレメントＰＥの数が多くなるために並列度は低減するが、１つの構成情報のみをロードするために構成情報のロードの掛かる時間を低減することができる。
【００７２】
なお、バッファメモリ１０２に保持する行列Ｂの列数を、第１演算制御処理においては２列とし、第２演算制御処理において１列としたが、いずれの処理においても少なくとも１列以上とすれば良く、第１演算制御処理における列数を第２演算制御処理における列数より多くすることが望ましい。
【００７３】
本発明の実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７４】
１  リコンフィギュラブルプロセッサ
２  外部メモリ
１０  リコンフィギュラブル回路
１２  制御回路
ＰＥ  プロセッシングユニット
１２１  サイズ判定部
１２３  パラメータ変更部
１２５  回路構成部
１２６  処理制御部
【図１】
2020042479.tif 000003
【図２】
2020042479.tif 000004
【図３】
2020042479.tif 000005
【図４】
2020042479.tif 000006
【図５】
2020042479.tif 000007
【図６】
2020042479.tif 000008
【図７】
2020042479.tif 000009
【図８】
2020042479.tif 000010
【図９】
2020042479.tif 000011
【図１０】
2020042479.tif 000012
【図１１】
2020042479.tif 000013
【図１２】
2020042479.tif 000014