(57)【要約】【課題】再構成処理に要する時間や回路規模の増大を抑えつつ、ブロック間のＦＩＦＯを動的に変更することができる情報処理装置、情報処理方法および情報処理プログラムの提供を図る。【解決手段】演算処理装置４および再構成デバイス６を備える情報処理装置であって、前記再構成デバイス６は、複数のブロックIIＡ，IIＢ，IIＣと、前記ブロックの間を接続するブロック間ＦＩＦＯ(３１ab，３１ac)と、前記ブロック間ＦＩＦＯのサイズを変更するための再構成を行う共用領域１０と、を有する。【選択図】図９
2019016133.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置および再構成デバイスを備える情報処理装置であって、
前記再構成デバイスは、
複数のブロックと、
前記ブロックの間を接続するブロック間ＦＩＦＯと、
前記ブロック間ＦＩＦＯのサイズを変更するための再構成を行う共用領域と、を有する、
ことを特徴とする情報処理装置。
【請求項２】
前記ブロックは、当該ブロックに接続された前記ブロック間ＦＩＦＯの空き容量を監視する容量監視部を有する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
さらに、
前記容量監視部により監視された前記ブロック間ＦＩＦＯの空き容量の情報を収集し、サイズ変更を行う変更対象となるブロック間ＦＩＦＯを特定して制御する制御機構部を有する、
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記容量監視部は、前記ブロック間ＦＩＦＯの空き容量を定期的に監視して、前記制御機構部に通知し、
前記制御機構部は、前記変更対象となるブロック間ＦＩＦＯの段数を制御してサイズ変更を行う、
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記制御機構部は、
前記ブロック間ＦＩＦＯの空き容量が常に大きければ、前記段数を削減するように制御し、
前記ブロック間ＦＩＦＯの空き容量の振れ幅が大きければ、前記段数を増加するように制御する、
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記制御機構部は、
前記変更対象となるブロック間ＦＩＦＯの段数を制御するとき、変更前の前記変更対象となるブロック間ＦＩＦＯを空にしてから行う、
ことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記制御機構部は、
前記変更対象となるブロック間ＦＩＦＯの段数を満たし、すでに空になっているＦＩＦＯがあれば、そのＦＩＦＯを流用するように制御する、
ことを特徴とする請求項５に記載の情報処理装置。
【請求項８】
前記制御機構部は、
前記変更対象となるブロック間ＦＩＦＯの段数の制御が完了したら、空になっている変更された前記ブロック間ＦＩＦＯに対して書き込みを開始するように制御する、
ことを特徴とする請求項６または請求項７に記載の情報処理装置。
【請求項９】
前記ブロック間ＦＩＦＯは、
サイズが小さければ、フリップフロップが選択され、
サイズが中であれば、ＳＲＡＭが選択され、
サイズが大きければ、ＤＲＡＭが選択される、
ことを特徴とする請求項５乃至請求項８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記フリップフロップおよび前記ＳＲＡＭは、前記共用領域に配置される、
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記制御機構部は、
前記ＳＲＡＭによる前記ブロック間ＦＩＦＯの段数を削減するとき、前記フリップフロップによる前記ブロック間ＦＩＦＯに変更し、
前記フリップフロップによる前記ブロック間ＦＩＦＯの段数を増加するとき、前記ＳＲＡＭによる前記ブロック間ＦＩＦＯに変更する、
ことを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
演算処理装置および再構成デバイスを利用して演算を行う情報処理方法であって、
複数のブロックを接続するブロック間ＦＩＦＯの空き容量を定期的に監視し、
監視された前記ブロック間ＦＩＦＯの空き容量の情報を収集して、サイズ変更を行う変更対象となるブロック間ＦＩＦＯを特定し、
共用領域において、前記ブロック間ＦＩＦＯのサイズを変更するための再構成を行う、
ことを特徴とする情報処理方法。
【請求項１３】
前記ブロック間ＦＩＦＯのサイズを変更するための再構成は、
前記ブロック間ＦＩＦＯの空き容量が常に大きければ、前記段数を削減するように制御し、
前記ブロック間ＦＩＦＯの空き容量の振れ幅が大きければ、前記段数を増加するように制御する、
ことを特徴とする請求項１２に記載の情報処理方法。
【請求項１４】
ＳＲＡＭによる前記ブロック間ＦＩＦＯの段数を削減するとき、フリップフロップによる前記ブロック間ＦＩＦＯに変更し、
フリップフロップによる前記ブロック間ＦＩＦＯの段数を増加するとき、ＳＲＡＭによる前記ブロック間ＦＩＦＯに変更し、
前記フリップフロップおよび前記ＳＲＡＭは、前記共用領域に配置されている、
ことを特徴とする請求項１３に記載の情報処理方法。
【請求項１５】
演算処理装置および再構成デバイスを利用して演算を行う情報処理プログラムであって、
前記演算処理装置に、
複数のブロックを接続するブロック間ＦＩＦＯの空き容量を定期的に監視し、
監視された前記ブロック間ＦＩＦＯの空き容量の情報を収集して、サイズ変更を行う変更対象となるブロック間ＦＩＦＯを特定し、
前記ブロック間ＦＩＦＯのサイズを変更するための再構成を、共用領域で行う処理を実行させる、
ことを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
近年、データ検索処理や動画処理を始めとして様々な情報処理分野において、ＣＰＵ(Central Processing Unit：演算処理装置)およびＦＰＧＡ(Field-Programmable Gate Array)を使用した演算処理システムが適用されている。例えば、インターネットの検索エンジンの検索処理やＨＥＶＣ(High Efficiency Video Coding：Ｈ．２６５)の動画処理等として、データ処理の高速化および低電力化のためにＦＰＧＡアクセラレータが用いられている。すなわち、ＦＰＧＡは、回路リソースの許す限りパイプライン化および並列化による高速化が可能であるため、検索処理や動画処理等に幅広く利用されている。
【０００３】
ここで、ＦＰＧＡは、例えば、製造後に購入者や設計者が構成を設定できる集積回路であり、ＦＰＧＡの動的再構成／部分的再構成の機能を利用して、１つのＦＰＧＡ上で複数ユーザのタスクを非同期的に配置および実行することが可能である。例えば、ＶＰＳ(Virtual Private Server)上で或るユーザがストリーミング映像の録画回路を動作している横で、他のユーザがデータベース検索回路を配置および実行しても、両ユーザに対する性能を保証することが可能である。なお、一人のユーザのタスクを実行してもよいのはいうまでもない。
【０００４】
ところで、従来、ＣＰＵとＦＰＧＡを混載した演算処理システムにおいて、ＦＰＧＡの部分的な動的再構成を行ってシステムの演算処理性能を向上させるようにしたものが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−１２４１３０号公報
【特許文献２】特開２０１５−２３０６１９号公報
【特許文献３】特開２００７−１７９３５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＦＰＧＡを搭載したＦＰＧＡ搭載回路(情報処理装置)において、ブロック(論理ブロック，ブロック回路)間によっては、ＦＩＦＯの段数(サイズ)が小さくて不足している場合、或いは、ＦＩＦＯの段数が大きくて過剰となっている場合があり得る。なお、ＦＰＧＡは、複数のブロックを有し、ＦＰＧＡの構成を設定する場合、例えば、ハードウェア記述言語(ＨＤＬ：Hardware Description Language)により指定することで、ユーザ側で(製品出荷後に)様々な機能を実装する。すなわち、複数のブロックにより様々な機能を有する回路を構成(再構成)可能となっている。
【０００７】
ところで、例えば、それぞれのブロック間で要求されるＦＩＦＯの段数に基づいて回路の書き換え(再構成)処理を行うことが考えられるが、関係するブロック全体を書き換えることになるため、再構成処理に要する時間だけスループットの低下を招くことになる。
【０００８】
或いは、予め各ブロック間に段数の異なる複数のＦＩＦＯを設けておき、状況に応じて適切な段数のＦＩＦＯを選択して使用することも考えられる。しかしながら、各ブロック間に対して段数の異なる複数のＦＩＦＯを形成しておくと、回路規模が大きくなり、さらに、ブロック数が多い場合には、配線が困難になるといった問題がある。
【課題を解決するための手段】
【０００９】
一実施形態によれば、演算処理装置および再構成デバイスを備える情報処理装置が提供される。
【００１０】
前記再構成デバイスは、複数のブロックと、前記ブロックの間を接続するブロック間ＦＩＦＯと、前記ブロック間ＦＩＦＯのサイズを変更するための再構成を行う共用領域と、を有する。
【発明の効果】
【００１１】
開示の情報処理装置、情報処理方法および情報処理プログラムは、再構成処理に要する時間や回路規模の増大を抑えつつ、ブロック間のＦＩＦＯを動的に変更することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、単一ＦＰＧＡ上における複数タスクの非同期実行の一例を説明するための図である。
【図２】図２は、ＦＰＧＡ搭載回路におけるブロック間ＦＩＦＯの段数を説明するための図である。
【図３】図３は、入出力ＦＩＦＯを介した各回路の性能を説明するための図である。
【図４】図４は、ＦＰＧＡ搭載回路における課題を説明するための図である。
【図５】図５は、本実施形態の情報処理装置におけるＦＩＦＯの一例の全体構成を模式的に示す図である。
【図６】図６は、本実施形態の情報処理装置におけるＦＩＦＯの配置先の例を模式的に示す図である。
【図７】図７は、本実施形態の情報処理装置におけるブロック間ＦＩＦＯの動的再構成を説明するための図である。
【図８】図８は、図７に示すブロック間ＦＩＦＯの動的再構成におけるブロック間ＦＩＦＯの容量監視方法の一例を説明するための図である。
【図９】図９は、本実施形態の情報処理装置の一例を模式的に示すブロック図である。
【図１０】図１０は、本実施形態の情報処理装置における処理の一例を説明するためのフローチャート図である。
【図１１】図１１は、本実施形態の情報処理方法の適用を説明するための図である。
【発明を実施するための形態】
【００１３】
まず、情報処理装置、情報処理方法および情報処理プログラムの実施例を詳述する前に、情報処理装置の例およびその課題を、図１〜図４を参照して説明する。図１は、単一ＦＰＧＡ上における複数タスクの非同期実行の一例を説明するための図であり、ＦＰＧＡの動的再構成／部分的再構成により非同期的に回路を配置し、ＦＰＧＡ演算資源の空き状況が逐一変化する様子を示すものである。
【００１４】
図１(a)は初期状態を示し、図１(b)は第１ユーザＩの割当／利用開始の様子を示し、さらに、図１(c)は第２ユーザIIの割当／利用開始の様子を示す。また、図１(d)は第３ユーザIIIの割当／利用開始の様子を示し、図１(e)は第２ユーザIIの利用完了の様子を示し、そして、図１(f)は第４ユーザIVの割当／利用開始の様子を示す。なお、他の実行中の回路は止めないようになっている。
【００１５】
図１(a)に示されるように、初期状態では、全ての演算資源(領域)ｒ11〜ｒ44は、使用されておらず空き状態になっており、第１ユーザＩにより領域ｒ11およびｒ21が使用されると、図１(b)のようになる。次に、第２ユーザIIにより領域ｒ31,ｒ32,ｒ33およびｒ41,ｒ42,ｒ43が使用されると、図１(c)のようになり、さらに、第３ユーザIIIにより領域ｒ12,ｒ13およびｒ22,ｒ23が使用されると、図１(d)のようになる。
【００１６】
図１(e)に示されるように、第２ユーザIIの利用が完了すると、ユーザIIが使っていた領域ｒ31,ｒ32,ｒ33およびｒ41,ｒ42,ｒ43が空き状態になる。そして、図１(f)に示されるように、第４ユーザIVは、空き状態になった領域ｒ31,ｒ32およびｒ41,ｒ42を使用する。このような領域(演算資源)の割り当て処理を継続することで、例えば、複数のユーザによる複数のタスクを非同期的に実行することができる。
【００１７】
図２は、ＦＰＧＡ搭載回路におけるブロック間ＦＩＦＯの段数(サイズ)を説明するための図であり、図２(a)は、ＦＩＦＯ(First-In First-Out)の段数が必要以上に大きい場合を示し、図２(b)は、ＦＩＦＯの段数が足りていない場合を示す。ここで、図２(a)および図２(b)において、縦軸はＦＩＦＯの使用量を表し、横軸は時間を表している。なお、前提として、各ユーザがＦＰＧＡ上に割り当てられた領域内で複数の回路ブロック(ブロック)を配置し、各ブロック間でＦＩＦＯ経由の通信を行うものとする。
【００１８】
ところで、ブロックのモード変更に伴って、ブロック間ＦＩＦＯの段数のみを変更したい場合があり、コアの処理内容は同一であっても、参照する情報を増やすことで処理結果がよりよくなるといった処理がある。具体的に、ＦＩＦＯ型のフレームメモリを持つＨＥＶＣエンコーダ回路において、例えば、低遅延モードでは数ＣＴＵ(Coding Tree Unit)ライン分のフレームメモリでよいが、高画質モードでは数十フレーム分のフレームメモリが必要になる。
【００１９】
また、ブロック間ＦＩＦＯの段数が入力されるデータと合っておらず、ＦＩＦＯの段数を変更した方が処理速度を高速化できる場合ある。すなわち、図２(a)に示されるように、ＦＩＦＯの段数が必要以上に大きい場合には、例えば、常に、ＦＩＦＯが空(empty)に近い状態になっているため、回路規模が無駄になる。
【００２０】
一方、図２(b)に示されるように、ＦＩＦＯの段数が足りていない場合には、ＦＩＦＯがempty(空)→full(満杯)→empty→…のように極端に変化して２つのブロック間の性能差を吸収できず、性能の低下を来す。すなわち、ＦＩＦＯの入力側のブロックと出力側のブッロックの処理速度の差を、ＦＩＦＯで吸収することができず、全体としての処理速度が低下することになる。
【００２１】
図３は、入出力ＦＩＦＯを介した各回路の性能を説明するための図である。ここで、図３(a)および図３(b)は、入出力ＦＩＦＯを書き込む回路(write側)と読み出す回路(read側)で処理量の平均はおなじだが、一時的に処理量が上下に変動する場合を示す。また、図３(c)および図３(d)は、入出力ＦＩＦＯの段数が小さく、各回路の処理速度の一時的な変化を吸収することができずに全体の性能が低下する場合を示す。なお、図３(a)および図３(c)における縦軸は、write側の処理量を示し、図３(b)および図３(d)における縦軸は、read側の処理量を示し、各図における横軸は、時間を示す。
【００２２】
図３(a)および図３(b)に示されるように、例えば、データの圧縮処理の場合には、入力データ長に対して出力データ長が一定にはならずに、時間的に変化(変動)する。また、図３(c)に示されるように、期間Ｐfにおいて、write側(書き込み回路)は、ＦＩＦＯが空くまで待つために、write側の処理が停止する。さらに、図３(d)に示されるように、期間Ｐeにおいて、read側(読み出し回路)は、ＦＩＦＯからのデータ(入力データ)を待つために、read側の処理が停止する。
【００２３】
図４は、ＦＰＧＡ搭載回路における課題を説明するための図であり、図４(a)は当初の構成を示すものであり、図４(b)は対応策１を説明するためのものであり、そして、図４(c)は対応策２を説明するためのものである。図４(a)に示されるように、ＦＰＧＡ搭載回路の当初の構成では、ブロック(block)Ａ−Ｂ間ではＦＩＦＯの段数が小さく(不足)し、ブロックＣ−Ｄ間ではＦＩＦＯの段数が大きい(過剰)の場合を想定する。すなわち、ブロックＡ−Ｂ間のＦＩＦＯ(２ab)の段数を増加することが求められ、ブロックＣ−Ｄ間ではＦＩＦＯ(２cd)の段数を低減することが求められる場合を想定する。
【００２４】
図４(b)に示されるように、対応策１としては、全回路の書き換え(再構成)処理を行って、ブロックＡ−Ｂ間におけるＦＩＦＯを２abから２ab'として段数を増加し、ブロックＣ−Ｄ間におけるＦＩＦＯを２cdから２cd'として段数を低減することが考えられる。すなわち、システムの状態に応じたマッピングを行うことで、ＦＩＦＯの段数を要求に基づいて変化させてスループットを向上させることが考えられる。
【００２５】
しかしながら、この対応策１では、例えば、一部のブロック間におけるＦＩＦＯの段数のみを変更する場合でも、関係するブロック全体を書き換えることになり、再構成処理に要する時間だけスループットが低下する。すなわち、ブロック全体を書き換える再構成処理は、かなりの時間を要するため、例えば、ＦＩＦＯの段数を制御するために、頻繁に再構成処理を行うと、かえってスループットの低下を招くことにもなりかねない。
【００２６】
また、図４(c)に示されるように、対応策２としては、予め各ブロックＡ〜Ｄの間に、例えば、段数の異なる複数(図４(c)では２つ)のＦＩＦＯを設けておき、状況に応じて適切な段数のＦＩＦＯを選択して使用することが考えられる。すなわち、ブロックＡ−Ｂ間には、段数の異なる２つのＦＩＦＯとして２ab1,２ab2を設け、ブロックＡ−Ｃ間には２ac1,２ac2を設け、ブロックＡ−Ｄ間には２ad1,２ad2を設ける。さらに、ブロックＢ−Ｄ間には２bd1,２bd2を設け、ブロックＣ−Ｄ間には２cd1,２dd2を設ける。なお、ブロックＢ−Ｃ間では、ＦＩＦＯを介したデータの受け渡しはないものとし、ＦＩＦＯを設けていない。
【００２７】
そして、図４(c)のように、段数の異なる複数のＦＩＦＯを設けておくことで、そのときの処理状況に応じたＦＩＦＯ段数の要求により、適した段数のＦＩＦＯを選択(例えば、図４(b)に対応する２ab1,２bd2,２ac2,２ad2を選択)することが考えられる。
【００２８】
しかしながら、この対応策２では、各ブロック間に対して、段数の異なる複数のＦＩＦＯを形成しておくために回路規模が大きくなり、さらに、ブロック数が多い場合には、配線が困難になるといった問題がある。
【００２９】
以下、情報処理装置、情報処理方法および情報処理プログラムの実施例を、添付図面を参照して詳述する。図５は、本実施形態の情報処理装置におけるＦＩＦＯの一例の全体構成を模式的に示す図である。図５において、クロスハッチングで示した格子状の部分は、演算回路およびブロックＦＩＦＯの共用領域１０を示す。
【００３０】
本実施形態の情報処理装置において、各ブロック間の通信を行うブロック間ＦＩＦＯは、ＦＰＧＡ上に設けた共用領域(演算回路およびブロックＦＩＦＯの共用領域)１０にのみ配置可能とされている。そして、ブロック間ＦＩＦＯの段数(サイズ)は、各ブロック間ＦＩＦＯの使用状況に基づいて、それぞれのブロック間ＦＩＦＯに適切な段数を求め、共用領域１０の再構成のみで動的にＦＩＦＯの段数を変更できるようになっている。なお、ビット幅の変更時およびＦＩＦＯ段数の変更時には、共用領域１０の再構成が行われる。
【００３１】
ここで、それぞれのＦＩＦＯは、例えば、ＦＦ(Flip-Flop)、オンチップＳＲＡＭ(Static Random Access Memory)、または、ＤＲＡＭ(Dynamic Random Access Memory)のどれかに配置される。すなわち、ＦＩＦＯは、その容量(サイズ)に基づいて選択され、容量が小さければＦＦが選択され、容量が大きければＤＲＡＭが選択され、容量が中(ＦＦを選択するときの小と、ＤＲＡＭを選択するときの大の間)であればＳＲＡＭが選択される。なお、ＦＩＦＯとしてＤＲＡＭを選択するのは、ＦＦやＳＲＡＭに比較して応答時間が大きい(長い)ため、例えば、読み出し(read)時間を隠蔽することが可能な処理に限るのが好ましい。
【００３２】
共用領域１０の再構成で行うＦＩＦＯの段数の変更は、各ＦＩＦＯの空き容量を監視し、状態に応じてＦＩＦＯ構成(ＦＩＦＯの段数)を動的に変更する。ここで、空き容量が常に大きいブロック間ＦＩＦＯは、段数削減の対象になり、空き容量の振れ幅が大きいブロック間ＦＩＦＯは、段数増加の対象になる。また、ブロック間ＦＩＦＯの段数の動的変更は、変更前のＦＩＦＯを空にしてから切り換え、さらに、流用可能なＦＩＦＯがあれば、新たなＦＩＦＯは配置せずに、その流用可能なＦＩＦＯに対する配線を変更する。なお、これは、ビット幅が一致していて、段数が足りている場合のみ可能である。
【００３３】
図６は、本実施形態の情報処理装置におけるＦＩＦＯの配置先の例を模式的に示す図である。図６において、参照符号１００は再構成デバイス(ＦＰＧＡ)、１１は通常の論理セル、１２は共用領域に割り当てる論理セル、１３はＳＲＡＭ、１４はＤＲＡＭコントローラ、そして、１５はＤＲＡＭを示す。
【００３４】
図６に示されるように、ＦＰＧＡ１００は、論理書き換え可能なセル(通常のセル１１，共用領域に割り当てる論理セル１２)がアレイ状に配置されており，通常のセル１１上にＤＲＡＭコントローラ１４が配置されている。ここで、各セル１１，１２内には、ＦＦ(フリップフロップ)およびＬＵＴ(Lookup table：ルックアップテーブル)が含まれる。また、ＳＲＡＭ１３は、ＦＰＧＡ１００上に帯状に配置され、ＤＲＡＭ１５は、例えば、ＦＰＧＡ１００の外部に接続される。
【００３５】
ここで、ＦＩＦＯの配置先は、例えば、ＤＲＡＭ１５、ＳＲＡＭ１３、或いは、共用領域に割り当てる論理セル１２内のＦＦに配置される。なお、ＤＲＡＭ１５は、ＦＰＧＡ１００に設けられたＤＲＡＭコントローラ１４により制御され、ＤＲＡＭ１５上のＦＩＦＯを用いるブロックは、ＤＲＡＭコントローラ１４に接続される。ここで、容量が大きければＤＲＡＭ１５が選択され、容量が中であればＳＲＡＭ１３が選択され、容量が小さければＦＦが選択されるのは、前述した通りである。
【００３６】
図７は、本実施形態の情報処理装置におけるブロック間ＦＩＦＯの動的再構成を説明するための図である。ここで、図７(a)は初期状態を示し、図７(b)は各ブロック間ＦＩＦＯの空き容量をレジスタ経由で定期的に制御機構部に通知する様子を示し、図７(c)は再構成の判定を行う様子を示し、図７(d)は変更対象となるＦＩＦＯへの書き込みを行うブロックへ書き込みを停止する要求を出した上で変更対象となるＦＩＦＯが空になるまで待つ様子を示す。さらに、図７(e)は変更対象となるＦＩＦＯが空になった後に再構成を行う様子を示し、図７(f)はＦＩＦＯが変更された回路に対して処理の再開を要求する様子を示す。
【００３７】
なお、以下の説明においても、図４(a)〜図４(c)を参照して説明したのと同様に、ブロック(block)Ａ−Ｂ間ではＦＩＦＯの段数が不足して増加することが求められ、ブロックＣ−Ｄ間ではＦＩＦＯの段数が過剰で低減することが求められる場合を想定する。また、図７(a)において、参照符号１０は、図５を参照して説明した共用領域(演算回路およびブロックＦＩＦＯの共用領域)を示し、ＦＦによるＦＩＦＯ(２１ab,２１ac,２１ad,２１cd)およびＳＲＡＭ(１３)によるＦＩＦＯ(２２ab,２２cd)を含む。さらに、参照符号２０は、容量監視部を示し、３０は、制御機構部を示す。なお、容量監視部２０は、ブロックＡ〜Ｃに設けられ、ＦＩＦＯの空き容量を定期的に監視して制御機構部３０に通知する。
【００３８】
ここで、図７(b)〜図７(f)において、共用領域１０は、簡略化のために省略してある。また、ＤＲＡＭ２３によるＦＩＦＯを用いるブロック(Ｂ，Ｄ)は、ＤＲＡＭコントローラ２４を介してＤＲＡＭ２３をアクセスする。図７(a)〜図７(f)におけるＤＲＡＭ２３およびＤＲＡＭコントローラ２４は、例えば、前述した図６におけるＤＲＡＭ１５およびＤＲＡＭコントローラ(ＤＲＡＭコントローラ用セル)１４に相当する。
【００３９】
本実施形態の情報処理装置において、ＦＩＦＯの配置先は、例えば、ＤＲＡＭ、ＳＲＡＭ、或いは、ＦＦである。すなわち、容量(サイズ)が大きければＤＲＡＭ２３が選択され、容量が中であればＳＲＡＭ(ＳＲＡＭによるＦＩＦＯ)２２ab,２２cdが選択され、容量が小さければＦＦ(ＦＦによるＦＩＦＯ)２１ab,２１ac,２１ad,２１cdが選択される。なお、ＳＲＡＭおよびＤＲＡＭは、単なる例であり、例えば、ＦeＲＡＭ(Ferroelectric Random Access Memory：強誘電体メモリ：ＦＲＡＭ（登録商標）)等の他のメモリであってもよいのはもちろんである。
【００４０】
まず、図７(a)に示す初期状態の構成において、図７(b)に示されるように、各ブロックＡ〜Ｄに設けられた容量監視部２０は、ＦＩＦＯの空き容量を定期的に監視して制御機構部３０に通知する。ここで、図７(c)に示されるように、容量監視部２０によるＦＩＦＯの空き容量に基づいて、制御機構部３０が、例えば、図２(a)および図２(b)を参照して説明したＦＩＦＯ段数が過剰およびＦＩＦＯ段数が不足と判定した場合を説明する。すなわち、ブロックＡ−Ｂ間では、ＦＩＦＯの段数(サイズ)が不足しているので増加することが求められ、ブロックＣ−Ｄ間では、ＦＩＦＯの段数が過剰なので低減することが求められる。このようにして、変更対象となるＦＩＦＯ(２１abおよび２２cd)を特定する。
【００４１】
このとき、図７(d)に示されるように、変更対象となるＦＩＦＯ(２１abおよび２２cd)を空にするために、書き込み(write)側のブロックに対して停止(stall)要求を出し、変更対象となるＦＩＦＯが空になるまで待つ(wait)。すなわち、制御機構部３０は、ブロックＡおよびＣのレジスタ２５を介して、ブロックＡによるＦＦのＦＩＦＯ(２１ab)への書き込み、および、ブロックＣによるＳＲＡＭのＦＩＦＯ(２２cd)への書き込みの停止を指示し、２１abおよび２２cdが空になるのを待つ。
【００４２】
次に、図７(e)に示されるように、変更対象となるＦＩＦＯ(２１abおよび２２cd)が空になったら、ＦＩＦＯ部分を再構成する。すなわち、ＦＩＦＯの段数増加が求められたブロックＡ−Ｂ間では、ＦＦのＦＩＦＯ(２１ab)をＳＲＡＭのＦＩＦＯ(２２ab)に変更し、ＦＩＦＯの段数低減が求められたブロックＣ−Ｄ間では、ＳＲＡＭのＦＩＦＯ(２２cd)をＦＦのＦＩＦＯ(２１cd)に変更する。なお、流用可能なＦＩＦＯがあれば、再利用(配線のみによる再構成)することができる。ここで、ＦＩＦＯ部分(２１ab,２２cd，２２ab, ２１cd)の再構成は、共用領域１０のみの再構成であり、ブロックＡ〜Ｄおよび他のＦＩＦＯ(２１ac,２１ad)は変更しない。
【００４３】
そして、図７(f)に示されるように、変更されたＦＩＦＯ(２２abおよび２１cd)に対して処理の再開を要求する。すなわち、制御機構部３０は、ブロックＡおよびＣのレジスタ２５を介して、ブロックＡによるＳＲＡＭのＦＩＦＯ(２２ab)への書き込み、および、ブロックＣによるＦＦのＦＩＦＯ(２１cd)への書き込みの再開を指示する。このように、本実施形態の情報処理装置によれば、再構成処理に要する時間や回路規模の増大を抑えつつ、ブロック間のＦＩＦＯを動的に変更することが可能になる。
【００４４】
図８は、図７に示すブロック間ＦＩＦＯの動的再構成におけるブロック間ＦＩＦＯの容量監視方法の一例を説明するための図である。ここで、図８(a)は、ブロックＡ−Ｂ間のＦＩＦＯ(２１ab)の使用量を監視するブロックＡの容量監視部２０を説明するためのものであり、図８(b)は、ＦＩＦＯの使用量の計算を説明するためのものである。
【００４５】
図８(a)に示されるように、例えば、ブロックＡ−Ｂにおいて、ブロックＡがＦＩＦＯ(２１ab)にデータを書き込み、ブロックＢが２１abからデータを読み出す場合、ブロックＡに設けられた容量監視部２０が、２１abにおけるＦＩＦＯの空き容量を監視する。ここで、容量監視部２０によるＦＩＦＯの空き容量監視は、例えば、定期的に監視対象のＦＩＦＯの使用量を計算し、履歴を保存する。そして、制御機構部３０は、各ブロックに設けられた容量監視部２０に保存された使用量の履歴を定期的に読み出す。なお、図８(a)では、ＦＩＦＯ(２１ab)の空き容量の監視は、ＦＩＦＯに書き込みを行うブロックＡの容量監視部２０で行っているが、例えば、ＦＩＦＯから読み出しを行うブロックＢの容量監視部２０で行ってもよい。
【００４６】
図８(b)に示されるように、例えば、ＦＩＦＯ(２１ab)の書き込みポインタ(wptr)と読み出しポインタ(rptr)の差分からＦＩＦＯの使用量(使用段数)が求められる。すなわち、ＦＩＦＯの使用量は、例えば、使用量＝wptr−rptr、或いは、使用量＝[ＦＩＦＯ段数]＋wptr−rptrとして求めることができる。なお、rptr＝＝wptrの場合、使用量は零(全て空き：empty)になり、また、rptr＝＝wptr＋１の場合、使用量は満杯(full)になる。なお、図８(a)および図８(b)は、単なる例を説明するためのものであり、様々な手法を適用することができるのはいうまでもない。
【００４７】
図９は、本実施形態の情報処理装置の一例を模式的に示すブロック図である。図９に示されるように、本実施形態の情報処理装置は、例えば、演算処理装置(ＣＰＵ)４，再構成デバイス(ＦＰＧＡ)６およびバス５を含む。ここで、バス５は、ＣＰＵ４とＦＰＧＡ６を接続し、様々な指令およびデータを遣り取りするために使用される。
【００４８】
ＦＰＧＡ６は、例えば、第１ユーザＩが利用可能な領域６１および第２ユーザIIが利用可能な領域６２を含み、第２ユーザIIが利用可能な領域６２は、ブロック(block)IIＡ，ブロックIIＢおよびブロックIIＣを含む。ブロックIIＡ−IIＢ間には、ＦＩＦＯ(ブロック間ＦＩＦＯ：３１ab)が設けられ、この３１abを介してブロックIIＡからのデータがブロックIIＢに伝えられる。また、ブロックIIＡ−IIＣ間には、ＦＩＦＯ(３１ac)が設けられ、この３１abを介してブロックIIＡからのデータがブロックIIＣに伝えられる。ここで、ＦＩＦＯ(３１ab,３１ac)は、図５を参照して説明した共用領域１０に設けられている。
【００４９】
すなわち、本実施形態の情報処理装置は、ＣＰＵ４と再構成デバイス６の両方を利用し、動的に回路の一部を変更可能となっている。例えば、ＣＰＵ４と再構成デバイス６の両方を利用して、複数のユーザに対して要求された演算を非同期的に行うことができる。そして、ＦＰＧＡ(再構成デバイス)６は、各ユーザＩ,IIに対して利用可能として割り当てた領域６１,６２(例えば、領域６２)内において自由に配置可能な回路(例えば、ブロックIIＡ〜IIＣ)を含む。ここで、各ブロックIIＡ〜IIＣは、例えば、それぞれ所定のハードウェア処理を実現するためのブロック(回路ブロック)であり、他のブロックとＦＩＦＯ(３１ab,３１ac)で接続される。なお、ＦＩＦＯ(３１ab,３１ac)は、共用領域１０に設けられ、共用領域１０の再構成のみで動的にＦＩＦＯ(３１ab,３１ac)の段数を変更できるようになっている。
【００５０】
図７(a)〜図７(e)を参照して説明したように、各ブロックIIＡ〜IIＣは、例えば、ＣＰＵ４によるレジスタ(２５)の設定で任意のＦＩＦＯに対する書き込みを停止する機能を有するのが好ましい。また、各ブロックIIＡ〜IIＣは、ブロック間に配置されるＦＩＦＯの空き容量を定期的に監視して制御機構部(３０)に通知する容量監視部(20)を有してもよい。なお、ＦＩＦＯとしては、例えば、ＦＰＧＡ６上のＦＦやＳＲＡＭ、或いは、ＦＰＧＡ６の外部に設けたＤＲＡＭ等に配置される。ここで、ＦＰＧＡ外部のＤＲＡＭにＦＩＦＯを配置する場合、例えば、ＤＲＡＭにアクセス可能なブロックの配線(再構成)を、共用領域１０の再構成のみで動的に行うことができる。また、本実施形態は、例えば、ＣＰＵ４上で動作するソフトウェア(プログラム)として実現することができ、その処理の一例は、図１０を参照して説明される。
【００５１】
なお、本実施形態の情報処理方法(情報処理プログラム)は、例えば、次のような処理を行う。まず、各ユーザＩ,IIが使用可能な領域６１,６２上で共用領域１０を確保する。ここで、ブロック間ＦＩＦＯ(３１ab,３１ac)は、共用領域１０にのみ配置可能とされ、共用領域１０のみを再構成することでブロックIIＡ,IIＢ,IIＣを変更することなく、ブロック間ＦＩＦＯ(３１ab,３１ac)の段数を変更することができるようになっている。
【００５２】
さらに、例えば、上述した容量監視部(２０)により定期的に監視された各ブロック間ＦＩＦＯ(３１ab,３１ac)の空き容量は、制御機構部(３０)に通知される。すなわち、制御機構部(３０)は、各ブロック間ＦＩＦＯの空き容量の情報をから定期的に収集し、ＦＩＦＯの空き容量(段数)に問題があるブロック間ＦＩＦＯを検出し、その検出されたブロック間ＦＩＦＯに対する適切な段数を決定する。また、検出されたブロック間ＦＩＦＯに書き込みを行うブロックに対して、書き込みを一時中断(停止)するように要求(制御)する。そして、例えば、レジスタ(２５)の値から検出されたブロック間ＦＩＦＯに有効データが存在しないこと(空の状態)を検出すると、共用領域１０のみを再構成することで検出されたブロック間ＦＩＦＯの段数を変更する。さらに、新たなブロック間ＦＩＦＯの再構成が完了したら、新たなブロック間ＦＩＦＯに書き込みを行うブロックに対して、処理再開を要求し、新たなブロック間ＦＩＦＯを介した処理が行われることになる。
【００５３】
図１０は、本実施形態の情報処理装置における処理の一例を説明するためのフローチャート図である。ここで、ＦＩＦＯの容量(空き段数、サイズ)は、例えば、容量監視部２０により所定の時間間隔で観測され、そのＦＩＦＯ容量の時間変化に基づいて、制御機構部３０によりＦＩＦＯの段数が不適切と判定されたものを再構成する。
【００５４】
図１０に示されるように、本実施形態の情報処理装置における処理の一例が開始すると、ステップＳＴ１において、各入出力ＦＩＦＯから直近の時間間隔のサイクル(Tw cycle)における空き容量の時間変化を取得してステップＳＴ２に進む。ステップＳＴ２では、満杯(full)になった期間が所定の満杯閾値Th-full以上、または、空(empty)になった期間が所定の空閾値Th-empty以上のＦＩＦＯがあるかどうかを判定する。ここで、Th-emptyは、Th-fullよりも十分に大きく設定(Th-empty>>Th-full)され、両方の条件を満たすことがないようにされている。
【００５５】
ステップＳＴ２において、fullになった期間がTh-full以上、または、emptyになった期間がTh-empty以上のＦＩＦＯがあると判定すると、ステップＳＴ３に進み、上記条件を満たすＦＩＦＯに対し、ＦＩＦＯ変更フラグを設定する。すなわち、ステップＳＴ３では、条件を満たすＦＩＦＯに対して、ＦＩＦＯ変更フラグflag-change[i]＝１に設定し、ステップＳＴ４に進む。ここで、ｉは、該当するＦＩＦＯのインデックス番号(idx)とし、ＦＩＦＯ変更フラグ『１』は、変更対象のＦＩＦＯであることを示す。
【００５６】
ステップＳＴ４では、条件を満たす全てのＦＩＦＯに対して、停止(stall)要求を出す。すなわち、図７(d)を参照して説明したように、変更対象(条件を満たす)ＦＩＦＯを空にするために、書き込み(write)側のブロック(回路)に対して停止(一時停止)要求を出す。そして、変更対象となるＦＩＦＯが空(empty)になるまで待って(wait)、ステップＳＴ５〜ＳＴ８の各ＦＩＦＯに関するループ処理を行う。
【００５７】
次に、ステップＳＴ５〜ＳＴ８のループ処理を説明する。まず、ステップＳＴ５において、ＦＩＦＯ変更フラグが『１』になっている各ＦＩＦＯに関するループを開始(start)して、ステップＳＴ６に進む。ここで、ステップＳＴ５〜ＳＴ８のループ処理は、異なる配置のＦＩＦＯ、すなわち、ＦＦ，ＳＲＡＭおよびＤＲＡＭに配置されるそれぞれのＦＩＦＯにおいて、並列的に行うことができる。
【００５８】
ステップＳＴ６では、前述した条件を満たすＦＩＦＯの変更後のＦＩＦＯ段数を導出して、ステップＳＴ７に進む。すなわち、ステップＳＴ６では、full(満杯)になった期間がTh-full以上のものはＦＩＦＯ段数を増やし、empty(空)になった期間がTh-empty以上のものはＦＩＦＯ段数を減らす。ここで、ＦＩＦＯ段数の増加量は、固定値またはullになった期間に比例させるのが好ましく、ＦＩＦＯ段数の減少量は、固定値にするのが好ましい。
【００５９】
ステップＳＴ７では、新たな段数のＦＩＦＯの配置先を決定してステップＳＴ８に進む。すなわち、ステップＳＴ７では、演算回路およびブロック間ＦＩＦＯの共用領域(１０)上で配置可能な位置を選択する。ここで、例えば、配線遅延が大きくならないように、なるべくＦＩＦＯを利用する回路の近くに配置するのが好ましい。また、例えば、他の未使用ＦＩＦＯ(すでに空になっているＦＩＦＯ)が段数を満たす場合には、その未使用ＦＩＦＯを流用することも可能である。そして、ステップＳＴ８では、ＦＩＦＯ変更フラグが『１』になっている各ＦＩＦＯに関するループを終了(end)して、ステップＳＴ９に進む。
【００６０】
ステップＳＴ９では、変更対象の全ての入出力ＦＩＦＯを再構成し、ＦＩＦＯ変更フラグを『０』にして、ステップＳＴ１０に進む。なお、ＦＩＦＯ変更フラグ『０』は、変更対象のＦＩＦＯではないことを示す。ステップＳＴ１０では、今回書き換えた(再構成を行った)入出力ＦＩＦＯに対する書き込み側(write)の回路の全てに対し、動作再開要求を出し、ステップＳＴ１に戻って、上述したのと同様の処理を繰り返す。以上では、ＦＩＦＯの段数の変更条件を満たした全てのＦＩＦＯを停止してから再構成する例を説明したが、例えば、或るＦＩＦＯを停止から再構成まで行った後、次のＦＩＦＯの処理を行うことも可能である。
【００６１】
図１１は、本実施形態の情報処理方法の適用を説明するための図であり、図１１(a)は、前述した図７(a)(図７(b))に対してＦＩＦＯ(２１bd)を追加したものに相当し、図１１(b)は、図７(e)(図７(f))に対してＦＩＦＯ(２１bd)を追加したものに相当する。
【００６２】
図１１(a)と図１１(b)の比較から明らかなように、本実施形態の情報処理方法を適用することにより、例えば、ＦＩＦＯの段数増加が求められたブロックＡ−Ｂ間におけるＦＦのＦＩＦＯ(２１ab)をＳＲＡＭのＦＩＦＯ(２２ab)に再構成して変更する。さらに、例えば、ＦＩＦＯの段数低減が求められたブロックＣ−Ｄ間では、ＳＲＡＭのＦＩＦＯ(２２cd)をＦＦのＦＩＦＯ(２１cd)に再構成して変更する。すなわち、各ブロック間ＦＩＦＯの使用状況に応じて適切な段数を求め、動的にＦＩＦＯの段数を再構成して変更する。
【００６３】
ここで、ＦＩＦＯ部分(２１ab,２２cd，２２ab, ２１cd)の再構成は、ＦＰＧＡ上に設けた共用領域１０のみの再構成であり、ブロックＡ〜Ｄおよび他のＦＩＦＯ(２１ac,２１ad,２１bd)は変更しない。このように、本実施形態の情報処理方法を適用することにより、再構成処理に要する時間や回路規模の増大を抑えつつ、ブロック間のＦＩＦＯを動的に変更することができる。
【００６４】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【００６５】
２ab，２ac，２ad，２cd，２ab'，２cd'，２ab1，２ab2，２ab，２ac1，２ac2，２ad1，２ad2，２cd1，２cd2，２ab，２１ab，２１ac，２１cd，２２ab，２２cd，３１ab，３１ac    ＦＩＦＯ
４    演算処理装置(ＣＰＵ)
５    バス
６，１００    再構成デバイス(ＦＰＧＡ)
１０    共用領域
１１    通常の論理セル
１２    共用領域に割り当てる論理セル
１３    ＳＲＡＭ
１４，２４    ＤＲＡＭコントローラ
１５，２３    ＤＲＡＭ
２０    容量監視部
２５    レジスタ
３０    制御機構部
６１    第１ユーザが利用可能な領域
６２    第２ユーザが利用可能な領域
Ｉ，II，III，IV    ユーザ
Ａ，Ｂ，Ｃ，Ｄ，IIＡ，IIＢ，IIＣ    ブロック(回路ブロック)
【図１】
2019016133.tif 000003
【図２】
2019016133.tif 000004
【図３】
2019016133.tif 000005
【図４】
2019016133.tif 000006
【図５】
2019016133.tif 000007
【図６】
2019016133.tif 000008
【図７】
2019016133.tif 000009
【図８】
2019016133.tif 000010
【図９】
2019016133.tif 000011
【図１０】
2019016133.tif 000012
【図１１】
2019016133.tif 000013