(57)【要約】【課題】ＰＬＤにおける処理の効率を改善する。【解決手段】本願に係る調整装置は、処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、前記演算装置に所定の処理を実行させる機械語を生成するコンパイラが、前記機械語を生成するための前記所定の処理の内容から生成する第２グラフとを取得する取得部と、前記取得部により取得された前記第１グラフの構造と前記第２グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する調整部とを有することを特徴とする。【選択図】図１
2019200736.tif 000002
【特許請求の範囲】
【請求項１】
処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、前記演算装置に所定の処理を実行させる機械語を生成するコンパイラが、前記機械語を生成するための前記所定の処理の内容から生成する第２グラフとを取得する取得部と、
前記取得部により取得された前記第１グラフの構造と前記第２グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する調整部と
を有することを特徴とする調整装置。
【請求項２】
グラフラプラシアンに基づいて、前記第２グラフを複数の分解グラフに分解する分解部
を有し、
前記調整部は、複数の前記第１グラフの構造と、複数の前記分解グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する
ことを特徴とする請求項１に記載の調整装置。
【請求項３】
前記取得部は、複数の第１グラフを取得し、
前記調整部は、複数の分解グラフの構造と複数の前記第１グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する
ことを特徴とする請求項１または２に記載の調整装置。
【請求項４】
前記取得部は、スケジューリングのために前記コンパイラが中間表現から生成する第２グラフを取得する
ことを特徴とする請求項１〜３のうちいずれか１つに記載の調整装置。
【請求項５】
前記取得部は、低レベル仮想機械を用いて構成されたコンパイラが生成する第２グラフを取得する
ことを特徴とする請求項１〜４のうちいずれか１つに記載の調整装置。
【請求項６】
調整装置が実行する調整方法であって、
処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、前記演算装置に所定の処理を実行させる機械語を生成するコンパイラが、前記機械語を生成するための前記所定の処理の内容から生成する第２グラフとを取得する取得工程と、
前記取得工程により取得された前記第１グラフの構造と前記第２グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する調整工程と
を含むことを特徴とする調整方法。
【請求項７】
処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、前記演算装置に所定の処理を実行させる機械語を生成するコンパイラが、前記機械語を生成するための前記所定の処理の内容から生成する第２グラフとを取得する取得手順と、
前記取得手順により取得された前記第１グラフの構造と前記第２グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する調整手順と
をコンピュータに実行させるための調整プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、調整装置、調整方法および調整プログラムに関する。
【背景技術】
【０００２】
従来、複数の機能ブロックを有し、製造後に利用者が機能ブロックの構成を設定できるプログラマブルロジックデバイス（ＰＬＤ）の技術が知られている。このようなＰＬＤが有する構成の設定を容易にするため、高レベル言語からＰＬＤが有する機能ブロックの構成をコンパイルする技術が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１６５４９０号公報
【非特許文献】
【０００４】
【非特許文献１】“Assignment  Decision  Diagram  for  High-Level  Synthesis”，Viraphol  Chaiyakul,  Daniel  D.  Gajski  ＜インターネット＞http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.33.9420&rep=rep1&type=pdf（平成３０年５月１日検索）
【非特許文献２】“A  deeper  look  into  the  LLVM  code  generator,  Part  1,  Eli  Bendersky”＜インターネット＞https://eli.thegreenplace.net/2013/02/25/a-deeper-look-into-the-llvm-code-generator-part-1（平成３０年５月１日検索）
【非特許文献３】“QuickDough:  A  Rapid  FPGA  Accelerator  Generation  Framework  using  Soft  Coarse-Grained  Reconfigurable  Array  Overlay”  Hayden  Kwok-Hay  So,  ＜インターネット＞https://www.eee.hku.hk/~hso/olaf2013/so_olaf.pdf（平成３０年５月１日検索）
【非特許文献４】“パーシステントホモロジーと機械学習”  平岡  裕章＜インターネット＞http://ibisml.org/archive/ibis2016/Hiraoka_IBIS2016.pdf（平成３０年５月１日検索）
【非特許文献５】“グラフ分解と固有値問題”，川本  達郎,  日本神経回路学会誌  Ｖｏｌ．２１，Ｎｏ．４（２０１４），１６２−１６９＜インターネット＞https://www.jstage.jst.go.jp/article/jnns/21/4/21_162/_pdf（平成３０年５月１日検索）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した技術では、ＰＬＤにおける処理の効率を改善する余地がある。
【０００６】
例えば、上述した技術は、ＰＬＤに処理の処理を実行させるための構成をコンパイルしているに過ぎず、ＰＬＤが有する機能を効率的に利用する構成を実現しているとは言えない場合がある。
【０００７】
本願は、上記に鑑みてなされたものであって、ＰＬＤにおける処理の効率を改善することを目的とする。
【課題を解決するための手段】
【０００８】
本願に係る調整装置は、処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、前記演算装置に所定の処理を実行させる機械語を生成するコンパイラが、前記機械語を生成するための前記所定の処理の内容から生成する第２グラフとを取得する取得部と、前記取得部により取得された前記第１グラフの構造と前記第２グラフの構造、または、グラフ構造のパターンが類似するように、前記コンパイラ若しくは前記演算装置が発揮する機能を調整する調整部とを有することを特徴とする。
【発明の効果】
【０００９】
実施形態の一態様によれば、ＰＬＤにおける処理の効率を改善することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施形態に係る調整装置が実行する処理の一例を示す図である。
【図２】図２は、実施形態に係る調整装置の構成例を示す図である。
【図３】図３は、実施形態に係るＤＡＧデータベースに登録される情報の一例を示す図である。
【図４】図４は、実施形態に係る機能分解グラフデータベースに登録される情報の一例を示す図である。
【図５】図５は、実施形態に係る調整処理の流れの一例を説明するフローチャートである。
【図６】図６は、ハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願に係る調整装置、調整方法および調整プログラムを実施するための形態（以下、「実施形態」と記載する。）について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る調整装置、調整方法および調整プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
【００１２】
［実施形態］
〔１−１．演算装置の一例〕
まず、図１を用いて、調整装置が実行する調整処理の一例について説明する。なお、以下の説明では、調整処理により、所定の処理を示すコードを、所定の処理を演算装置１００に実行させるための機械語へとコンパイルするコンパイラの調整を行う処理の一例について説明する。
【００１３】
図１は、実施形態に係る調整装置が実行する処理の一例を示す図である。図１では、調整装置１０は、以下に説明する調整処理を実行する情報処理装置であり、例えば、サーバ装置やクラウドシステム等により実現される。
【００１４】
演算装置１００は、以下に説明する調整処理を実行する演算装置である。ここで、演算装置１００は、製造後に利用者が内部の論理回路を定義あるいは変更することができる集積回路であり、所謂ＰＬＤ（Programmable  Logic  Device）である。より具体的には、演算装置１００は、ＦＰＧＡ（Field-Programmable  Gate  Array）により実現される。また、演算装置１００は、調整装置１０および主記憶装置２００と接続されている。
【００１５】
主記憶装置２００は、各種データを記憶する記憶装置であり、例えば、ＲＡＭ（Random  Access  Memory)、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子等の記憶装置によって実現される。
【００１６】
例えば、演算装置１００は、プロセッサ１１０、入出力装置１２０、メモリコントローラ１３０、ＦＰＧＡ１５０およびＦＰＧＡ１５０を有する。プロセッサ１１０は、演算装置１００が有するプロセッサであり、例えば、ＡＲＭアーキテクチャやＰＯＷＥＲアーキテクチャを採用したプロセッサ若しくはマイクロプロセッサである。そして、プロセッサ１１０は、ＦＰＧＡと連携することで、各種の演算処理を実行する。
【００１７】
例えば、プロセッサ１１０は、プロセッサコア１１１とキャッシュメモリ１１２とを有する。プロセッサコア１１１は、論理演算や四則演算を実現する所謂コアであり、ＡＬＵ（Arithmetic  Logic  Unit）から構成される算術論理演算装置により実現される。キャッシュメモリ１１２は、プロセッサ１１０が有する補助記憶装置である。より具体的には、キャッシュメモリ１１２は、主記憶装置２００よりもプロセッサコア１１１が高速にアクセスすることができる記憶装置であり、所謂キャッシュメモリである。
【００１８】
入出力装置１２０は、演算装置１００と調整装置１０といった任意の外部装置との間の通信を中継する装置であり、所謂Ｉ／Ｏ（Input  Output）装置である。例えば、入出力装置１２０は、ＵＳＢ（Universal  Serial  Bus）、イーサーネット、ＳＤ（Secure  Digital）、ＵＡＲＴ（Universal  Asynchronous  Receiver/Transmitter）、ＳＰＩ（Serial  Peripheral  Interface）、Ｉ２Ｃ、ＧＰＩＯ（General-purpose  input/output）等、各種の通信規格に沿って外部装置との間の通信を制御する各種の入出力装置により実現される。
【００１９】
メモリコントローラ１３０は、演算装置１００による主記憶装置２００へのメモリアクセスを制御する。例えば、メモリコントローラ１３０は、ページング方式により主記憶装置２００に格納されたデータの読み出しや書込みを行う。より具体的な例を挙げると、メモリコントローラ１３０は、プロセッサ１１０やＦＰＧＡ１５０が処理を実行する際に用いる仮想ページ番号と、主記憶装置２００が有する記憶領域を示す物理ページ番号とを対応付けたページテーブルを有し、ページテーブルを参照しながら、プロセッサ１１０やＦＰＧＡ１５０が処理に用いる情報を主記憶装置２００から読み出したり、主記憶装置２００に対する情報の書込みを実現する。
【００２０】
例えば、図１に示す構成を有する場合、プロセッサコア１１１は、キャッシュメモリ１１２にアクセスし、演算対象となるデータの取得を試行する。そして、プロセッサコア１１１は、データがキャッシュメモリ１１２に格納されていない場合（すなわち、キャッシュミス）は、メモリコントローラ１３０に対して、演算対象となるデータが格納されている記憶領域のアドレスを通知する。より具体的には、プロセッサコア１１１は、演算処理に用いる仮想ページ番号をメモリコントローラ１３０に通知する。
【００２１】
このような場合、メモリコントローラ１３０は、ページテーブルを参照し、アクセス対象となる物理ページ番号を特定する。そして、メモリコントローラ１３０は、主記憶装置２００が有する記憶領域のうち、特定した物理ページ番号が示す記憶領域に格納されたデータを読出す。その後、メモリコントローラ１３０は、読み出したデータと仮想ページ番号とを対応付けてキャッシュメモリ１１２に登録する。
【００２２】
また、メモリコントローラ１３０は、キャッシュメモリ１１２に登録されたデータを主記憶装置２００に書き戻す場合（ライトバック）は、ページテーブルを参照し、書き戻しの対象となる情報と対応付けられた仮想ページ番号と対応する物理ページ番号を特定する。そして、メモリコントローラ１３０は、主記憶装置２００の記憶領域のうち、特定した物理ページ番号が示す記憶領域に書き戻しの対象となる情報を格納する。
【００２３】
ＦＰＧＡ１５０は、調整装置１０から提供される機械語に従って、回路構成を変更可能な演算装置である。例えば、ＦＰＧＡ１５０は、デジタル回路要素とアナログ回路要素とを含む。例えば、ＦＰＧＡ１５０には、所定の処理を実行可能な論理コンポーネントである複数の論理ブロックを有し、論理ブロック間が再構成可能な配線により相互接続されている。そして、ＦＰＧＡ１５０は、調整装置１０から提供されるハードウェア記述言語（ＨＤＬ：Hardware  Description  language）により、論理コンポーネント間の接続を変更することで、各種の処理をハードウェアにより実現することができる。すなわち、ＦＰＧＡ１５０は、処理に用いる論理回路の組み合わせを変更可能な演算装置として動作する。
【００２４】
〔１−２．調整処理の一例〕
ここで、ＦＰＧＡ１５０が有する各論理コンポーネントは、入力された情報に対して様々な処理を実行することができる。このような論理コンポーネントが実行可能な処理は、例えば、入力に対する出力の真理値表から生成される論理式を構成する回路により表すことができる。
【００２５】
一方、このようなＦＰＧＡ１５０に所定の処理を実行させるため、処理を記述したコードからＦＰＧＡ１５０に処理を実行させるためのＨＤＬを生成するコンパイラが知られている。このようなコンパイラは、例えば、仮想機械をターゲットとした中間コード（ビットコード）を生成し、その仮想機械向けコードを特定のマシンの機械語に変換するＬＬＶＭ（低レベル仮想機械）を用いて構成される（例えば、非特許文献３参照）。このようなＬＬＶＭにより構成されるコンパイラは、処理を記述したコードから処理のスケジューリングを行う。例えば、コンパイラは、処理を記述したコードから処理の流れを示すＤＡＧ（Directed  Acyclic  Graph）を生成し、生成したＤＡＧを用いてスケジューリングを行う。
【００２６】
ここで、ＤＡＧが有する構造と、ＦＰＧＡが有する各論理コンポーネントが発揮可能な機能の構造とが類似するように、コンパイラにコードをコンパイルさせた場合は、ＦＰＧＡ１５０の構成を処理に対して最適化することができるとも考えられる。より具体的には、所定の処理を実行する際にＦＰＧＡが構成する論理コンポーネントの機能の構造と、ＤＡＧが有する構造とが類似する場合は、ＨＤＬの最適化を実現できるとも考えられる。そこで、調整装置１０は、以下の調整処理を実行する。
【００２７】
まず、調整装置１０は、処理に用いる論理回路の組み合わせを変更可能な演算装置、すなわち、ＦＰＧＡ１５０の各論理回路が発揮する機能の内容を示す複数の第１グラフを取得する。例えば、調整装置１０は、所定の処理を実行する際に、ＦＰＧＡ１５０上に構成されうる論理モジュールの構造を示す第１グラフを取得する。例えば、ＦＰＧＡ１５０は、接続を変更可能な複数の論理回路を有する。そこで、調整装置１０は、ＦＰＧＡ１５０が所定の処理を実行する際に構成する１つまたは複数の機能を示す複数の第１グラフを生成する。この第１グラフは、グラフ構造だけではなく、顔認識処理、音声認識処理、言語処理、行列演算のような数学演算処理等のようなパッケージ化されたＦＰＧＡ回路を表すグラフ構造のパターンでもよい。
【００２８】
例えば、調整装置１０は、所定の処理を実行するために第１処理〜第５処理が必要となる場合、各処理のそれぞれをＦＰＧＡ１５０が実現するために、ＦＰＧＡ１５０が１つまたは複数の論理回路を用いて実現する処理の論理を処理ごとに特定する。そして、調整装置１０は、特定した各論理を示すグラフを第１グラフとして生成する。
【００２９】
また、調整装置１０は、ＦＰＧＡ１５０に所定の処理を実行させる機械語を生成するコンパイラが、機械語を生成するための所定の処理の内容から生成する第２グラフを取得する。すなわち、調整装置１０は、コンパイラが生成するＤＡＧを第２グラフとして取得する。
【００３０】
そして、調整装置１０は、第１グラフの構造と第２グラフの構造とが類似するように、コンパイラ、若しくは、ＦＰＧＡ１５０が発揮する機能を調整する。例えば、調整装置１０は、コードからコンパイラが生成するＤＡＧの構造が、ＦＰＧＡ１５０の機能を示す第１グラフの構造に近づくように、コンパイラを再構成する。このようなコンパイラの再構成は、例えば、コンパイラを構成するプログラムモジュールのうち、ＤＡＧを生成するためのプログラムモジュールを修正することで実現される。すなわち、調整装置１０は、ＦＰＧＡ１５０用のコンパイラコンパイラとしての処理を実行する際に、第１グラフの構造と第２グラフの構造とが類似するように、コンパイラを構成する。
【００３１】
例えば、コンパイラがＬＬＶＭにより実現される場合、コンパイラは、ＩＲ（Intermediate  Representation）ビルダを用いてコードから中間表現を生成し、オプティマイザを用いて中間表現からＨＤＬを生成する。ここで、オプティマイザは、中間表現からＨＤＬを生成する際に、ＤＡＧを生成し、生成したＤＡＧを用いてＨＤＬを生成する（例えば、非特許文献２参照）。そこで、調整装置１０は、中間表現から生成されるＤＡＧの構造が
第２グラフに近づくように、ＩＲビルダやオプティマイザの論理を修正すればよい。
【００３２】
このような処理の結果、調整装置１０は、ＦＰＧＡ１５０が有する機能の構造に類似する構造を有するＤＡＧを用いて、コードをＨＤＬにコンパイルするコンパイラを生成することができる。このようなコンパイラにより生成されたＨＤＬは、ＦＰＧＡ１５０が有する論理コンポーネントの効率的な構成を実現することができる。この結果、調整装置１０は、ＦＰＧＡ１５０等、ＰＬＤにおける処理の効率を改善することができる。
【００３３】
〔１−３．グラフの比較について〕
ここで、調整装置１０は、第１グラフの構造と第２グラフの構造とが類似するように、コンパイラを調整するのであれば、任意の手法により、第１グラフの構造と第２グラフの構造とを比較してよい。例えば、調整装置１０は、グラフが有するトポロジを比較する各種の手法を用いて、第１グラフの構造と第２グラフの構造とを比較し、比較結果に基づいて、第１グラフの構造と第２グラフの構造、または、グラフ構造のパターンが類似するように、コンパイラを調整すればよい。
【００３４】
例えば、複数のノードの集合で示される情報が有する構造を示す手法として、パーシステントホモロジーの技術が知られている。このようなパーシステントホモロジーの技術においては、所定のｎ次元空間上に配置された各ノードの大きさを変化させ、生じた穴の数、穴の大きさ、消滅した穴の数を特定する。そして、このような技術においては、特定した情報から穴の発生パラメータと穴の消滅パラメータとを特定し、特定した発生パラメータと消滅パラメータとから生成されるパーシステント図を、ノードの集合の構造が有する特徴として用いる（例えば、特許文献４参照）。
【００３５】
ここで、第１グラフから生成したパーシステント図と、第２グラフから生成したパーシステント図とが類似する場合（例えば、パーシステント図に現れる線形関数の傾きが類似する場合）は、第１グラフの構造と第２グラフの構造とが類似すると推定される。そこで、調整装置１０は、第１グラフから生成したパーシステント図と、第２グラフから生成したパーシステント図とを生成し、生成したパーシステント図の比較結果に基づいて、第１グラフと第２グラフとが類似するか否かを判定してもよい。また、調整装置１０は、第１グラフから生成したパーシステント図と、第２グラフから生成したパーシステント図とが類似するように、コンパイラの調整を行ってもよい。
【００３６】
また、上述した処理に係わらず、調整装置１０は、他の手法を用いて、第１グラフの構造と第２グラフの構造とが類似するかを判定して良い。例えば、調整装置１０は、第１グラフの位相と第２グラフの位相とを比較し、各位相が類似するようにコンパイラの調整を行ってもよい。
【００３７】
また、調整装置１０は、第２グラフを複数の分解グラフに分解し、分解した分解グラフと第１グラフの構造とが類似するように、コンパイラの調整を行ってもよい。例えば、調整装置１０は、ＦＰＧＡ１５０が発揮可能な機能を示す第１グラフであって、それぞれ異なる機能を示す複数の第１グラフを取得する。また、調整装置１０は、グラフラプラシアンに基づいて、第２グラフを複数の分解グラフに分解する。そして、調整装置１０は、複数の分解グラフの構造と、複数の第１グラフの構造とが類似するように、コンパイラを調整してもよい。
【００３８】
例えば、適切にグラフの分解を行うため、分解グラフ感のエッジの数がなるべく小さくなり、かつ、各分解グラフの大きさ（ノードの数）がなるべく等しくなるように、グラフを複数の分解グラフに分解するための様々な手法が提案されている。このような分解グラフに分解するための手法として、グラフ全体を示す隣接行列を生成し、生成した隣接行列に基づいたグラフラプラシアンを設定し、グラフラプラシアンに基づいて、グラフを分解するエッジを決定するスペクトラルクラスタリングの手法が知られている（例えば、非特許文献５参照）。
【００３９】
そこで、調整装置１０は、第２グラフのグラフラプラシアンに基づき、第２グラフを複数の分解グラフに分解する。また、調整装置１０は、ＦＰＧＡ１５０が発揮可能な各機能を示す複数の第１グラフを取得する。そして、調整装置１０は、複数の分解グラフと、複数の第１グラフとを比較し、各グラフの構造が類似するように、コンパイラの調整を行う。例えば、調整装置１０は、いずれかの第１グラフとの類似度が所定の範囲内に収まる分解グラフの数が最大化するように、コンパイラの調整を行ってもよい。また、調整装置１０は、各分解グラフと、各第１グラフとの類似度の和が最大化するように、コンパイラの調整を行ってもよい。すなわち、調整装置１０は、分解グラフの構造と第１グラフの構造との類似度を指標として、コンパイラの調整を実行する。
【００４０】
なお、調整装置１０は、グラフ構造そのものの類似性のみならず、グラフ構造のパターンが類似するように、コンパイラやＦＰＧＡ１５０の調整を行ってもよい。例えば、調整装置１０は、各種のパターン解析技術を用いて、グラフ構造が有するパターンを特定し、特定したパターンが類似するように、コンパイラやＦＰＧＡ１５０の調整を行ってもよい。
【００４１】
〔１−４．調整処理の一例について〕
次に、図１を用いて、調整装置１０が実行する調整処理の一例を説明する。まず、調整装置１０は、ＦＰＧＡ１５０が発揮可能な機能を示すグラフ（すなわち、第１グラフ）を機能分解グラフとして取得する。例えば、調整装置１０は、所定の処理を実行するためにＦＰＧＡ１５０が論理回路を用いて構成する各論理の内容を示す複数のグラフを機能分解グラフとして取得する。
【００４２】
また、調整装置１０は、所定の処理を示すソースコードからコンパイラが生成したＤＡＧを取得し、ＤＡＧの構造と機能分解グラフの構造とを比較する（ステップＳ２）。例えば、調整装置１０は、所定の処理を示すソースコードをＬＬＶＭに入力し、ＬＬＶＭが生成したＤＡＧを取得する。また、調整装置１０は、グラフラプラシアンに基づいて、ＤＡＧを複数の分解グラフＤＡＧ１〜ＤＡＧ４に分解する。そして、調整装置１０は、分解グラフＤＡＧ１〜ＤＡＧ４と、機能分解グラフのそれぞれとを比較し、類似するか否かを判定する。
【００４３】
そして、調整装置１０は、ＤＡＧと機能分解グラフとが相互に類似するように、コンパイラの調整を行う。例えば、調整装置１０は、機能分解グラフと類似するＤＡＧを生成するように、ＬＬＶＭが有するＩＲビルダやオプティマイザの調整を行う。そして、調整装置１０は、調整したコンパイラがソースコードから生成したＨＤＬを用いて、ＦＰＧＡ１５０の設定を行う（ステップＳ４）。
【００４４】
〔１−５．ＦＰＧＡ側の調整について〕
ここで、上述した説明では、調整装置１０は、コンパイラ側の調整を行うことで、ＦＰＧＡ１５０による処理の最適化を図った。しかしながら、実施形態は、これに限定されるものではない。例えば、調整装置１０は、所定の処理を実行する際にＦＰＧＡ１５０が発揮する機能を調整することで、処理の最適化を図ってもよい。
【００４５】
例えば、調整装置１０は、所定の処理を実現するためにＦＰＧＡ１５０に発揮させる機能の組み合わせを複数特定する。また、調整装置１０は、特定した組み合わせごとに、機能分解グラフとの構造とＤＡＧの構造とを比較する。そして、調整装置１０は、特定した組み合わせのうち、機能分解グラフの構造がＤＡＧの構造に最も近い機能分解グラフを特定する。その後、調整装置１０は、特定した機能分解グラフの組が示す機能を発揮するように、ＦＰＧＡ１５０の設定を行ってもよい。また、調整装置１０は、ＤＡＧの構造が、特定した組に含まれる機能分解グラフの構造と類似するように、コンパイラを調整してもよい。
【００４６】
すなわち、調整装置１０は、ＬＬＶＭの中間言語に合わせた最適化が行われるように、ＦＰＧＡ１５０の回路設計を調整し、ＦＰＧＡ１５０の回路設計に合わせた中間言語の最適化が行われるように、ＬＬＶＭの調整を行う。より具体的には、調整装置１０は、ＬＬＶＭがスケジューリングにより生成するＩｎｓｔｒｕｃｔｉｏｎ（中間表現）と、ＦＰＧＡ１５０が発揮する機能を示すＰｒｅ  Ｉｍｐｌｅｍｅｎｔｅｄ  Ｂｉｔｓｔｒｅａｍとが相互に類似するように、ＬＬＶＭやＦＰＧＡ１５０の回路設計を調整する。このような処理の結果、ＦＰＧＡ１５０の回路設計をＬＬＶＭの中間言語、すなわち、抽象的なバックエンドに近づけることができる。この結果、調整装置１０は、ＬＬＶＭおよびＦＰＧＡ１５０のボトルネックを相互に解消することができる。
【００４７】
〔２．生成装置の構成〕
以下、上記した調整処理を実現する調整装置１０が有する機能構成の一例について説明する。図２は、実施形態に係る調整装置の構成例を示す図である。図２に示すように、調整装置１０は、通信部２０、記憶部３０、および制御部４０を有する。
【００４８】
通信部２０は、例えば、ＮＩＣ（Network  Interface  Card）等によって実現される。そして、通信部２０は、所定のネットワークを介して演算装置１００と接続され、演算装置１００との間で各種通信を行う。
【００４９】
記憶部３０は、例えば、ＲＡＭ（Random  Access  Memory)、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。また、記憶部３０は、ＤＡＧデータベース３１、機能分解グラフデータベース３２、およびＬＬＶＭ３３を記憶する。
【００５０】
ＤＡＧデータベース３１には、ＬＬＶＭ３３が生成するＤＡＧの情報が登録される。例えば、図３は、実施形態に係るＤＡＧデータベースに登録される情報の一例を示す図である。図３に示すように、ＤＡＧデータベース３１には、「ノードＩＤ」、「機能」、「エッジ情報」、「条件情報」および「接続先」といった情報が対応付けて登録されている。
【００５１】
ここで、「ノードＩＤ」とは、ＤＡＧに含まれるノードを示す識別子である。また、「機能」とは、「ノードＩＤ」が示すノードと対応する機能（すなわち、処理の内容）を示す情報である。また、「エッジ情報」とは、ノード間を接続するエッジを示す識別子である。また、「条件情報」とは、対応付けられた「エッジ情報」が示すエッジにより接続された他のノードが示す機能を発揮させるための条件を示す情報である。また、「接続先」とは、対応付けられた「エッジ情報」が示すエッジにより接続された他のノードのノードＩＤである。
【００５２】
例えば、図３に示す例では、ＤＡＧデータベース３１には、ノードＩＤ「Ｎ１」、機能「機能＃１」、エッジ情報「Ｅ１２」、条件情報「Ｃ１」および接続先「Ｎ２」が対応付けて登録されている。このような情報は、ノードＩＤ「Ｎ１」が示す処理の内容が「機能＃１」であり、処理結果が条件情報「Ｃ１」を満たした場合に、エッジ情報「Ｅ１２」が示すエッジにより接続されたノードＩＤ「Ｎ２」が示すノードの処理が実行される旨を示す。なお、図３に示す例では、「機能＃１」や「Ｃ１」といった概念的な値を記載したが、実際には、実行する処理の内容を示す関数や文字列、条件を示す関数等が登録されることとなる。
【００５３】
図２に戻り、説明を続ける。機能分解グラフデータベース３２には、機能分解グラフが登録される。例えば、図４は、実施形態に係る機能分解グラフデータベースに登録される情報の一例を示す図である。図４に示すように、機能分解グラフデータベース３２には、「ノードＩＤ」、「機能」、「エッジ情報」、「条件情報」および「接続先」といった情報が登録される。すなわち、機能分解グラフデータベース３２には、ＤＡＧデータベース３１と同様に、ＦＰＧＡ１５０が構成可能な論理モジュールにおける処理の内容を示すグラフの情報が登録される。
【００５４】
図２に戻り、説明を続ける。ＬＬＶＭ３３は、所定のソースコードが示す処理を演算装置１００のＦＰＧＡ１５０に実行させるためのＨＤＬを生成するコンパイラである。
【００５５】
制御部４０は、コントローラ（controller）であり、例えば、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等のプロセッサによって、調整装置１０内部の記憶装置に記憶されている各種プログラムがＲＡＭ等を作業領域として実行されることにより実現される。また、制御部４０は、コントローラ（controller）であり、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路により実現されてもよい。
【００５６】
図２に示すように、制御部４０は、取得部４１、分解部４２、比較部４３、調整部４４、および設定部４５を有する。
【００５７】
取得部４１は、処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、演算装置に所定の処理を実行させる機械語を生成するコンパイラが、機械語を生成するための前記所定の処理の内容から生成する第２グラフとを取得する。例えば、取得部４１は、利用者が利用する端末装置（図示は省略）から、所定の処理を示すソースコードを受付ける。このような場合、取得部４１は、ＦＰＧＡ１５０が所定の処理を実行する際に構成する論理コンポーネントの組み合わせを特定する。そして、取得部４１は、生成した論理コンポーネントにおける処理の内容を示すグラフを機能分解グラフとして生成する。すなわち、取得部４１は、複数の機能分解グラフを生成する。そして、取得部４１は、生成した機能分解グラフを機能分解グラフデータベース３２に登録する。
【００５８】
また、取得部４１は、ＬＬＶＭ３３を読出し、受付けたソースコードをＬＬＶＭ３３に入力する。このような場合、ＬＬＶＭ３３は、処理を実行するためのＨＤＬを生成するが、その際に実行するスケジューリングにおいて中間表現を生成する。そこで、取得部４１は、ＬＬＶＭ３３がソースコードから生成した中間表現を取得し、取得した中間表現を示すグラフ、すなわち、ＤＡＧを取得する。そして、取得部４１は、取得したＤＡＧをＤＡＧデータベース３１に登録する。
【００５９】
分解部４２は、グラフラプラシアンに基づいて、第２グラフを複数の分解グラフに分解する。例えば、分解部４２は、ＤＡＧデータベース３１を参照し、ＤＡＧを取得する。このような場合、分解部４２は、ＤＡＧのグラフラプラシアンを生成し、生成したグラフラプラシアンを用いて、ＤＡＧを複数の分解グラフに分解する。例えば、分解部４２は、非特許文献５に開示された手法を用いて、分解グラフを生成する。
【００６０】
比較部４３は、ＤＡＧと機能分解グラフとの構造を比較する。例えば、比較部４３は、分解部４２がＤＡＧを分解することで生成した複数の分解グラフを取得する。このような場合、比較部４３は、機能分解グラフデータベース３２を参照し、各機能分解グラフを取得する。そして、比較部４３は、各分解グラフの構造と、各機能分解グラフの構造とを比較し、類似度を算出する。
【００６１】
例えば、比較部４３は、非特許文献４に開示された技術を用いて、各グラフのパーシステント図を生成し、生成したパーシステント図の類似度を算出する。例えば、比較部４３は、パーシステント図に現れる線形関数の傾きの値の類似度を算出する。
【００６２】
調整部４４は、第１グラフの構造と第２グラフの構造、または、グラフ構造のパターンが類似するように、コンパイラ若しくは演算装置が発揮する機能を調整する。例えば、調整部４４は、比較部４３による各分解グラフの構造と、各機能分解グラフの構造とを比較結果を取得する。より具体的には、調整部４４は、各分解グラフの構造と、各機能分解グラフの構造との類似度を取得する。
【００６３】
例えば、調整部４４は、各分解グラフの構造と各機能分解グラフの構造との類似度の総和が高くなるように、ＬＬＶＭ３３が有するＩＲビルダやオプティマイザを修正する。なお、調整部４４は、ＩＲビルダやオプティマイザの修正内容と、修正した結果新たにＬＬＶＭ３３が生成した中間表現に基づくＤＡＧの分解グラフの構造と、各機能分解グラフの構造との類似度との間の関係に基づいて、ＩＲビルダやオプティマイザの修正方針を決定してもよい。すなわち、調整部４４は、各分解グラフの構造と各機能分解グラフの構造との類似度の総和が高くなるように、ＬＬＶＭ３３から新たなＬＬＶＭを生成する。
【００６４】
なお、調整部４４は、各分解グラフの構造と各機能分解グラフの構造との類似度の総和が高くなるように、ＦＰＧＡ１５０が構成する論理モジュールの構造を修正してもよい。例えば、調整部４４は、ＦＰＧＡ１５０に構成させる論理モジュールを、各分解グラフの構造と類似する構造を有する論理モジュールに限定させてもよい。その後、調整部４４は、新たなＬＬＶＭを記憶部３０に登録する。
【００６５】
設定部４５は、調整部４４により調整されたＬＬＶＭを用いて、ＦＰＧＡ１５０の設定を行う。例えば、設定部４５は、ＬＬＶＭを用いて、ソースコードをＤＨＬに変換し、変換後のＨＤＬを演算装置１００へと提供することで、ＦＰＧＡ１５０に所定の処理を実行させるための論理コンポーネントを設定する。
【００６６】
〔３．生成装置が実行する処理の流れの一例〕
次に、図５を用いて、調整装置１０が実行する提供処理の流れの一例について説明する。図５は、実施形態に係る調整処理の流れの一例を説明するフローチャートである。まず、調整装置１０は、ＦＰＧＡの機能分解グラフを取得する（ステップＳ１０１）。また、調整装置１０は、コンパイラであるＬＬＶＭの中間表現に基づくＤＡＧが有する構造と機能分解グラフが有する構造とを比較する（ステップＳ１０２）。
【００６７】
そして、調整装置１０は、各グラフの構造が類似するようにコンパイラを構成する（ステップＳ１０３）。その後、調整装置１０は、調整したコンパイラを用いて、ソースコードを機械語に変換し（ステップＳ１０４）、変換後の機械語を用いてＦＰＧＡの設定を行い（ステップＳ１０５）、処理を終了する。
【００６８】
〔４．変形例〕
上記では、調整装置１０による提供処理の一例について説明した。しかしながら、実施形態は、これに限定されるものではない。以下、調整装置１０が実行する調整処理のバリエーションについて説明する。
【００６９】
〔４−１．装置構成〕
上述した例では、調整装置１０は、調整装置１０内で調整処理を実行した。しかしながら、実施形態は、これに限定されるものではない。例えば、調整装置１０は、演算装置１００の設定を行うフロントエンドサーバと、調整処理を実行するバックエンドサーバとにより実現されてもよい。このような場合、例えば、フロントエンドサーバは、図２に示す設定部４５を有し、バックエンドサーバは、図２に示す取得部４１、分解部４２、比較部４３、および調整部４４を有する。また、調整装置１０は、ＤＡＧデータベース３１や機能分解グラフデータベース３２を外部のストレージサーバに記憶させてもよい。
【００７０】
〔４−２．その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
【００７１】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００７２】
また、上記してきた各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【００７３】
〔４−３．プログラム〕
また、上述してきた実施形態に係る調整装置１０は、例えば図６に示すような構成のコンピュータ１０００によって実現される。図６は、ハードウェア構成の一例を示す図である。コンピュータ１０００は、出力装置１０１０、入力装置１０２０と接続され、演算装置１０３０、一次記憶装置１０４０、二次記憶装置１０５０、出力ＩＦ（Interface）１０６０、入力ＩＦ１０７０、ネットワークＩＦ１０８０がバス１０９０により接続された形態を有する。
【００７４】
演算装置１０３０は、一次記憶装置１０４０や二次記憶装置１０５０に格納されたプログラムや入力装置１０２０から読み出したプログラム等に基づいて動作し、各種の処理を実行する。一次記憶装置１０４０は、ＲＡＭ等、演算装置１０３０が各種の演算に用いるデータを一次的に記憶するメモリ装置である。また、二次記憶装置１０５０は、演算装置１０３０が各種の演算に用いるデータや、各種のデータベースが登録される記憶装置であり、ＲＯＭ(Read  Only  Memory)、ＨＤＤ、フラッシュメモリ等により実現される。
【００７５】
出力ＩＦ１０６０は、モニタやプリンタといった各種の情報を出力する出力装置１０１０に対し、出力対象となる情報を送信するためのインタフェースであり、例えば、ＵＳＢ（Universal  Serial  Bus）やＤＶＩ（Digital  Visual  Interface）、ＨＤＭＩ（登録商標）（High  Definition  Multimedia  Interface）といった規格のコネクタにより実現される。また、入力ＩＦ１０７０は、マウス、キーボード、およびスキャナ等といった各種の入力装置１０２０から情報を受信するためのインタフェースであり、例えば、ＵＳＢ等により実現される。
【００７６】
なお、入力装置１０２０は、例えば、ＣＤ（Compact  Disc）、ＤＶＤ（Digital  Versatile  Disc）、ＰＤ（Phase  change  rewritable  Disk）等の光学記録媒体、ＭＯ（Magneto-Optical  disk）等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等から情報を読み出す装置であってもよい。また、入力装置１０２０は、ＵＳＢメモリ等の外付け記憶媒体であってもよい。
【００７７】
ネットワークＩＦ１０８０は、ネットワークＮを介して他の機器からデータを受信して演算装置１０３０へ送り、また、ネットワークＮを介して演算装置１０３０が生成したデータを他の機器へ送信する。
【００７８】
演算装置１０３０は、出力ＩＦ１０６０や入力ＩＦ１０７０を介して、出力装置１０１０や入力装置１０２０の制御を行う。例えば、演算装置１０３０は、入力装置１０２０や二次記憶装置１０５０からプログラムを一次記憶装置１０４０上にロードし、ロードしたプログラムを実行する。
【００７９】
例えば、コンピュータ１０００が調整装置１０として機能する場合、コンピュータ１０００の演算装置１０３０は、一次記憶装置１０４０上にロードされたプログラムまたはデータを実行することにより、制御部４０の機能を実現する。コンピュータ１０００のＣＰＵ１１００は、これらのプログラムまたはデータを記録媒体１８００から読み取って実行するが、他の例として、他の装置からネットワークＮを介してこれらのプログラムを取得してもよい。
【００８０】
〔５．効果〕
上述したように、調整装置１０は、処理に用いる論理回路の組み合わせを変更可能な演算装置の各論理回路が発揮する機能の内容を示す複数の第１グラフと、演算装置に所定の処理を実行させる機械語を生成するコンパイラが、機械語を生成するための所定の処理の内容から生成する第２グラフとを取得する。そして、調整装置１０は、取得された第１グラフの構造と第２グラフの構造、または、グラフ構造のパターンが類似するように、コンパイラ若しくは演算装置が発揮する機能を調整する。このように、調整装置１０は、ＰＬＤの論理設計と、ＰＬＤの設定を行うコンパイラが中間表現を生成する際に用いる論理設計とを近づけることで、ＰＬＤの設定を最適化するので、ＰＬＤにおける処理の効率を改善できる。
【００８１】
また、調整装置１０は、グラフラプラシアンに基づいて、第２グラフを複数の分解グラフに分解し、複数の第１グラフの構造と複数の分解グラフの構造、または、グラフ構造のパターンが類似するように、コンパイラ若しくは演算装置が発揮する機能を調整する。また、調整装置１０は、複数の第１グラフを取得し、複数の分解グラフの構造と複数の第１グラフの構造、または、グラフ構造のパターンが類似するように、コンパイラ若しくは演算装置が発揮する機能を調整する。また、調整装置１０は、スケジューリングのためにコンパイラが中間表現から生成する第２グラフを取得する。また、調整装置１０は、低レベル仮想機械を用いて構成されたコンパイラが生成する第２グラフを取得する。このため、調整装置１０は、ＰＬＤの設定を最適化するので、ＰＬＤにおける処理の効率を改善できる。
【００８２】
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の欄に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
【００８３】
また、上記してきた「部（section、module、unit）」は、「手段」や「回路」などに読み替えることができる。例えば、生成部は、生成手段や生成回路に読み替えることができる。
【符号の説明】
【００８４】
１０  調整装置
２０  通信部
３０  記憶部
３１  ＤＡＧデータベース
３２  機能分解グラフデータベース
３３  ＬＬＶＭ
４０  制御部
４１  取得部
４２  分解部
４３  比較部
４４  調整部
４５  設定部
１００  演算装置
１５０  ＦＰＧＡ
【図１】
2019200736.tif 000003
【図２】
2019200736.tif 000004
【図３】
2019200736.tif 000005
【図４】
2019200736.tif 000006
【図５】
2019200736.tif 000007
【図６】
2019200736.tif 000008