以下図面に基づいて本発明の実施の形態を詳述する。
(1)アクセラレータの全体構成
図1において1はアクセラレータを示し、制御器2とデータパス3とから構成されており、結線論理で構成された融合結線論理制御回路4を制御器2に有し、この融合結線論理制御回路4からの制御信号に基づいてデータパス3において所定の演算処理を実行し、予め定められた所定の固定機能だけを実現し得る。かかる構成に加えて、このアクセラレータは、制御器2にパッチ回路5を備えており、結線論理からなり製造後に機能修正を行えなかった融合結線論理制御回路4でも、当該パッチ回路5によって製造後に小規模な機能修正を行え得るようになされている。なお、制御器2は、マルチプレクサM15を介して疎結合配線ネットワークから各種データを受け取り得る。
かかる構成に加えてデータパス3は、後述するデータパス合成手法を基に、製造後における仕様変更や設計誤りにより起こり得るであろう潜在的な機能修正を予め想定して、例えば比較器10、ALU(Arithmetic Logic Unit)111、ALU212、乗算器13、及びバレルシフタ14(以下、単にこれらをそれぞれ機能ユニットとも呼ぶ)が設けられている。これによりアクセラレータ1では、製造後に制御器2について小規模な機能修正を行っても、当該機能修正により性能制約を満たすために必要になるであろう機能ユニットが、データパス合成手法により予め選定され設けられていることから、機能修正後の性能歩留まりを最大化し得る。
なお、ここで、動画再生処理や音声処理等のある特定の機能だけを実現する固定機能のアクセラレータ1では、性能制約(例えば、何秒以内に所定の処理を終了しなければいけない等のように実行時間の上限等の所定の制約)を持っており、性能歩留まりとは、予め決められた所定の性能制約を満たす確率をいう。
実際上、データパス3は、機能ユニット(比較器10、ALU111、ALU212、乗算器13、及びバレルシフタ14)の他に、メモリ素子として、例えばレジスタファイル17、定数生成器18、及びローカルストア19が設けられており、これらが疎結合配線ネットワーク20によって互いに接続された構成を有する。ここで、各機能ユニットは、それぞれ予め決められた1種類以上の演算を実行し得るように構成されており、制御器2から受け取った制御信号に応じてレジスタファイル17から読み出したデータを基に各演算を実行し得るようになされている。
なお、このデータパス3では、レジスタファイル17に設けられた書き込みポートRFI1及び読み込みポートRFO1,RFO2と、定数生成器18に設けられた読み込みポートCGO1,CGO2と、ローカルストア19に設けられた書き込みポートLSI1及び読み込みポートLSO1とをそれぞれ機能ユニットとみなすことで、データパス合成、及び製造後の機能修正を行う際に、レジスタファイル17、定数生成器18及びローカルストア19へのアクセスを算術演算と同様に扱うことができる。
実際上、比較器10、ALU111、ALU212、乗算器13及びバレルシフタ14は、各入力がそれぞれマルチプレクサM1〜M10を介して疎結合配線ネットワーク20に接続され、各出力がそれぞれ疎結合配線ネットワーク20に直接接続された構成を有し、マルチプレクサM1〜M10からの制御信号によってそれぞれ入力信号を選択する。
レジスタファイル17は、複数のレジスタ(図示せず)を備え、入力が書き込みポートRFI1及びマルチプレクサM11を介して疎結合配線ネットワーク20に接続されているとともに、出力が読み込みポートRFO1,RFO2を介して疎結合配線ネットワーク20に接続されている。レジストファイル17は、各レジスタにそれぞれ局所変数値を格納し得るように構成されており、書き込みポートRFI1の制御信号によって、複数のレジスタのうちいずれのレジスタにアクセスするかが決定され得る。
定数生成器18は、予め決められた所定の定数を出力し得るようになされており、レジスタファイル17同様、読み込みポートCGO1,CGO2への制御信号に基づいて定数を生成し得る。ローカルストア19は、主にデータの配列やグローバル変数値を格納するRAM(Random Access Memory)であり、入力が書き込みポートLSI1及びマルチプレクサM12,M13を介して疎結合配線ネットワーク20に接続されているとともに、出力が読み込みポートLSO1を介して疎結合配線ネットワークに接続されている。
なお、読み込みポートLSO1は、マルチプレクサM14にも接続されており、疎結合配線ネットワーク20から受け取ったデータをローカルストア19へ受け渡す。また、ローカルストア19は、外部と各種データの授受を実行し得るようになされている。このようなローカルストア19は、書き込みポートLSI1及び読み込みポートLSO1が他のメモリ素子とは異なり、アドレスとデータの2つの信号線を有し、当該書き込みポートLSI1に書き込みイネーブルの制御入力を備えている。因みに、バレルシフタ14は、演算処理の際に必要に応じてデータを所定ビットシフトさせるものであり、比較器10は、必要に応じて2つの演算結果等を比較して比較結果を得るものであり、それぞれ必要に応じて演算処理に用いられる。
疎結合配線ネットワーク20に接続された制御器2は、結線論理で実現された回路構成からなる融合結線論理制御回路4や、パッチ回路5からの制御信号により比較器10、ALU111、ALU212、乗算器13、バレルシフタ14、レジスタファイル17、定数生成器18及びローカルストア19等の各種回路を統括的に制御し、所定の演算処理を実行し得るようになされている。
図2に示すように、この実施の形態の場合、融合結線論理制御回路4は、IDCT(Inverse Discrete Cosine Transform)制御回路25と、FIR(Finite Impulse Response)制御回路26と、CRC(Cyclic Redundancy Check)制御回路27とを備え、これらIDCT制御回路25とFIR制御回路26とCRC制御回路27とがマルチプレクサM16に接続された構成を有する。融合結線論理制御回路4は、マルチプレクサM16への選択信号が変更されることにより、IDCT制御回路25、FIR制御回路26及びCRC制御回路27のうちいずれか1つが選択され、選択されたIDCT制御回路25、FIR制御回路26又はCRC制御回路27により生成された制御信号をデータパス3に送出し、当該データパス3に所定の演算処理を実行させ得る。
このように融合結線論理制御回路4では、製造後にIDCT制御回路25、FIR制御回路26及びCRC制御回路27を適宜選択し得ることから、例えば製造後の用途の変更に応じてIDCT処理、FIR処理又はCRC処理のいずれかの処理を実行する回路構成へと機能変更し得るようになされている。ここで、IDCT制御回路25、FIR制御回路26及びCRC制御回路27は、それぞれ初期設計仕様を基に、高位合成手法によって設計された固定機能を実現する結線論理制御回路であり、結線論理だけで実現されメモリ等の余分な回路構成を有していない分だけ小型化が図られ、かつ処理速度及び電力効率の向上も図られている。
図3(A)は、例えばIDCT制御回路25に対して初期設計されたデータフローグラフF1の一例を示す。このようなデータフローグラフF1は、所定データを演算ノードN1で乗算した後その結果を演算ノードN2で他のデータに加算し、次いでこの加算結果を演算ノードN3でさらに他のデータに加算する一連の演算処理が実行され得る。また、これとは別にこのデータフローグラフF1では、所定データを乗算した結果を演算ノードN4で他のデータに減算し、次いでこの減算結果を演算ノードN5でさらに他のデータに乗算する一連の演算処理が実行され得る。このような初期設計のデータフローグラフF1は、図3(B)に示すようなスケジュール100として表すことができ、このスケジュール100に従ってIDCT制御回路25で生成された制御信号に基づいてALU111、ALU212及び乗算器13(図3(B)中「MUL1」と表記)によりデータフローグラフF1の一連の演算処理が実行され得る。
スケジュール100は、IDCT制御回路25において生成される制御信号の内容が結線論理部分に示されており、当該結線論理部分にプログラムカウンタ1〜3が割り当てられ(図3(B)中の「PC」欄)、これらプログラムカウンタ1〜3にそれぞれ次に実行するプログラムカウンタ(以下、次カウンタと呼ぶ)が設定されている(図3(B)中の「次PC」欄)。実際上、このスケジュール100では、乗算処理を実行させる演算処理命令たる状態cs1がプログラムカウンタ1に設定され、加算処理及び減算処理を実行させる演算処理命令たる状態cs2がプログラムカウンタ2に設定され、加算処理及び乗算処理を実行させる演算処理命令たる状態cs3がプログラムカウンタ3に設定されている。
また、このスケジュール100では、例えばプログラムカウンタ1に対し次カウンタとしてプログラムカウンタ2が示され、プログラムカウンタ2に対し次カウンタとしてプログラムカウンタ3が示され、プログラムカウンタ3に対し次カウンタとしてプログラムカウンタ1が示されており、次カウンタに従った状態遷移としてプログラムカウンタ1、プログラムカウンタ2、プログラムカウンタ3、プログラムカウンタ1の順で演算処理が繰り返される。
このようなスケジュール100を実行する場合、図2に示したように、融合結線論理制御回路4では、所定の選択信号がマルチプレクサM16(図2)に送出されることにより、当該スケジュール100を実行するIDCT制御回路25が選択され、次カウンタに従って、プログラムカウンタ1の内容を示す制御信号、プログラムカウンタ2の内容を示す制御信号、プログラムカウンタ3の内容を示す制御信号の順にそれぞれIDCT制御回路25から制御信号がデータパス3に送出され得る。
ローカルストア19は、疎結合配線ネットワーク20、マルチプレクサM12,M13及び書き込みポートLSI1を順次介して、IDCT制御回路25からの制御信号を受け取ると、制御信号に基づいて外部のメモリから所定のデータを受け取り、読み込みポートLSO1、疎結合配線ネットワーク20、マルチプレクサM11及び書き込みポートRFI1を順次介してレジスタファイル17に当該データを受け渡す。
レジスタファイル17は、このデータをいずれかのレジスタに書き込んだ後、プログラムカウンタ1の内容を示した制御信号に基づき状態cs1に従って、当該データを読み込みポートRFO1を介して乗算器13に送出する。乗算器13は、レジスタファイル17からのデータや他のデータをマルチプレクサM7,M8を介して受け取ると、当該データを基に乗算処理を実行し、その結果得られた乗算結果をレジスタファイル17に送出する。レジスタファイル17は、マルチプレクサM11及び書き込みポートRFI1を介して乗算結果を受け取り、この乗算結果を所定のレジスタに書き込む。
次いで、データパス3は、次カウンタに従ってプログラムカウンタ2の内容を示す制御信号をIDCT制御回路25から受け取り、当該制御信号に従ってレジスタファイル17から乗算結果を読み出し、これを読み込みポートRFO1を介してALU111及びALU212にそれぞれ送出させる。これにより、ALU111は、マルチプレクサM3,M4を介して乗算結果や他のデータを受け取り、プログラムカウンタ2の状態cs2に従って、当該乗算結果を基に加算処理を実行し、その結果得られた加算結果をレジスタファイル17に送出する。
また、これと同時にALU212は、マルチプレクサM5,M6を介して乗算結果や他のデータを受け取り、同じくプログラムカウンタ2の状態cs2に従って、当該乗算結果を基に減算処理を実行し、その結果得られた減算結果をレジスタファイル17に送出する。レジスタファイル17は、ALU111からの加算結果と、ALU212からの減算結果とをそれぞれマルチプレクサM11及び書き込みポートRFI1を順次介して受け取り、所定のレジスタに書き込む。
次いで、データパス3は、次カウンタに従ってプログラムカウンタ3の内容を示す制御信号をIDCT制御回路25から受け取り、当該制御信号に従ってレジスタファイル17から読み込みポートRFO1を介して加算結果を読み出し、これをALU111に送出するとともに、同じくレジスタファイル17から読み込みポートRFO2を介して減算結果を読み出し、これを乗算器13に送出する。
これにより、ALU111は、マルチプレクサM3,M4を介して加算結果や他のデータを受け取り、プログラムカウンタ3に示された状態cs3に従って、加算処理を実行し、その結果得られた新たな加算結果をレジスタファイル17に送出する。これと同時に乗算器13は、マルチプレクサM7,M8を介して減算結果や他のデータを受け取り、同じくプログラムカウンタ3に示された状態cs3に従って乗算処理を実行し、その結果得られた乗算結果をレジスタファイル17に送出する。レジスタファイル17は、ALU111で得られた新たな加算結果と、乗算器13で得られた乗算結果とをそれぞれマルチプレクサM11及び書き込みポートRFI1を介して受け取り、それぞれ所定のレジスタに書き込む。
次いで、レジスタファイル17は、プログラムカウンタ3の次カウンタに従ってプログラムカウンタ1の内容を示す制御信号を再び受け取り、当該制御信号に基づき状態cs1に従って、例えばローカルストア19を介して外部から新たなデータを受け取り、所定のレジスタに書き込んだ後、当該データを乗算器13に送出し、上述した一連の演算処理を再び実行する。このようにしてアクセラレータ1は、IDCT制御回路25において生成された制御信号をデータパス3に順次送出し、図3(B)に示すスケジュール100に従った一連の演算処理を実行し得るようになされている。
因みに、上述した実施の形態においては、結線論理で構成されているIDCT制御回路25からの制御信号に基づいて、スケジュール100に従った演算処理をデータパス3で実行させる場合について説明したが、本発明では、結線論理で構成されているFIR制御回路26やCRC制御回路27についても同様に、これらFIR制御回路26やCRC制御回路27からの制御信号に基づいて、それぞれのスケジュールに従った一連の演算処理をデータパス3で実行させることになる。
また、かかる構成に加えて、このアクセラレータ1では、融合結線論理制御回路4におけるIDCT制御回路25、FIR制御回路26及びCRC制御回路27が固定機能を実現すべく結線論理で構成されているものの、製造後においても後述するパッチ回路5によって僅かに機能修正し得るようになされている。次に、パッチ回路5による製造後の機能修正について以下説明する。
(2)製造後におけるアクセラレータの機能修正の概要
ここでは、一例として、図3(A)に示した初期設計のデータフローグラフF1について、減算処理を行う演算ノードN4を、図4(A)に示すように、乗算処理を行う演算ノードN6に変更したデータフローグラフF2に機能修正する場合について説明する。このような機能修正後のデータフローグラフF2は、図4(B)に示すようなスケジュール200として表すことができ、このスケジュール200の結果に従って融合結線論理制御回路4及びパッチ回路5で生成された制御信号に基づいて、ALU111、ALU212及び乗算器13等によりデータフローグラフF2の一連の演算処理が実行され得る。
この場合、機能修正後のスケジュール200には、パッチ回路5で生成される制御信号の内容がパッチ部分に示されており、当該パッチ部分に追加プログラムカウンタ4及び5が割り当てられ(図3(B)中の「PC」欄)、加算処理及び乗算処理を実行させる修正演算処理命令たる状態cs4が、追加プログラムカウンタ4にパッチとして設定されている。また、このスケジュール200では、プログラムカウンタ1に次カウンタとして設定されていたプログラムカウンタ2が、追加プログラムカウンタ4に変更され、当該追加プログラムカウンタ4に次カウンタとしてプログラムカウンタ3が設定されており、次カウンタに従った状態遷移としてプログラムカウンタ1、追加プログラムカウンタ4、プログラムカウンタ3、プログラムカウンタ1の順で演算処理が繰り返される。
すなわち、機能修正後のスケジュール200では、プログラムカウンタ1の次カウンタが追加プログラムカウンタ4に修正されていることから、プログラムカウンタ1に示された状態cs1が実行された後、プログラムカウンタ2に移行することなく新たに設定された追加プログラムカウンタ4に移行し、追加プログラムカウンタ4に設定された状態cs4が実行され得る。また、スケジュール200では、追加プログラムカウンタ4の次カウンタに従って、機能修正前と同様にプログラムカウンタ3に移行して状態cs3が実行された後、当該プログラムカウンタ3の次カウンタに従ってプログラムカウンタ1に再び戻り、上述した機能修正された一連の演算処理を繰り返す。
このようにして機能修正後のスケジュール200では、乗算処理を実行するプログラムカウンタ1の次に、加算処理及び乗算処理を実行する状態cs4の追加プログラムカウンタ4に移行させることができ、アクセラレータ1を機能修正し得るようになされている。
ここで、上述した機能修正を実行し得るパッチ回路5は、図5に示すように、プログラムカウンタパッチ部30と、制御信号パッチ部31とから構成されており、プログラムカウンタパッチ部30によって、例えばプログラムカウンタ1の次に実行されるはずのプログラムカウンタ2を、新たに追加プログラムカウンタ4へ修正し得るようになされている。
この場合、プログラムカウンタパッチ部30は、修正するプログラムカウンタの数(ここでは2つ)に合わせて第1修正元状態レジスタ32aと、第2修正元状態レジスタ32bとが設けられており、当該第1修正元状態レジスタ32aに対応付けて第1修正後状態レジスタ33aが設けられているとともに、当該第2修正元状態レジスタ32bに対応付けて第2修正後状態レジスタ33bが設けられている。
因みに、上述した実施の形態においては、第1修正元状態レジスタ32aと、第2修正元状態レジスタ32bとを2つ設けるようにした場合について述べたが、本発明はこれに限らず、修正するプログラムカウンタの数に合わせて、さらに第3修正元状態レジスタや、第4修正元状態レジスタ等、複数の修正元状態レジスタを設けるようにしてもよい。
ここで、図3(B)に示したスケジュール100を、図4(B)に示したスケジュール200に機能修正する場合には、第1修正元状態レジスタ32a及び第2修正元状態レジスタ32bのうち、第1修正元状態レジスタ32aにだけプログラムカウンタ2が記憶される。また、これに伴い、この第1修正元状態レジスタ32aに対応付けられた第1修正後状態レジスタ33aには、追加プログラムカウンタ4が記憶される。
実際上、プログラムカウンタパッチ部30は、状態レジスタ35にプログラムカウンタ1が与えられると、これをカウンタデータとして等価判定部36a,36b及びマルチプレクサM17にそれぞれ送出し得る。等価判定部36a,36bは、それぞれ対応する第1修正元状態レジスタ32a又は第2修正元状態レジスタ32bに、カウンタデータと同じプログラムカウンタ1が記憶されているか否かを判断し得るようになされている。この実施の形態の場合、等価判定部36a,36bは、それぞれ対応する第1修正元状態レジスタ32a又は第2修正元状態レジスタ32bに、カウンタデータと同じプログラムカウンタ1が記憶されていないことから、このことを示すカウンタ不一致信号を生成し、これをマルチプレクサM17へ送出する。
これによりマルチプレクサM17は、状態レジスタ35から受け取ったプログラムカウンタ1を示すカウンタデータをそのまま融合結線論理制御回路4及び制御信号パッチ部31へそれぞれ送出する。ここで、制御信号パッチ部31は、大小判定部38と、制御信号メモリ40とを備えており、プログラムカウンタパッチ部30から受け取ったカウンタデータを大小判定部39及び制御信号メモリ40により受け取る。
ここで、大小判定部39は、結線論理部分となるプログラムカウンタの最大値SF(例えば、図3(B)ではプログラムカウンタ1〜3の最大の値を示す最大値「3」)が設定されており、プログラムカウンタパッチ部30から受け取ったカウンタデータの値と、プログラムカウンタの最大値SFとの大小関係を判定し得るようになされている。
そして、大小判定部39は、プログラムカウンタパッチ部30から受け取ったカウンタデータが、最大値SF以内のとき、融合結線論理制御回路4にて生成された制御信号をマルチプレクサM18を介してデータパス3に送出させ得る。一方、大小判定部39は、プログラムカウンタパッチ部30から受け取ったカウンタデータが、最大値SFを超えているとき、融合結線論理制御回路4にて生成される制御信号に替えて、制御信号メモリ40にて生成された制御信号をマルチプレクサM18を介してデータパス3に送出させ得るようになされている。
例えば融合結線論理制御回路4において選択信号によりIDCT制御回路25が選択されている場合、大小判定部39は、プログラムカウンタ1を示すカウンタデータを受け取ると、カウンタデータの値(プログラムカウンタ1)が、最大値SF「3」以内であることから、IDCT制御回路25から送出されたプログラムカウンタ1の内容を示す制御信号を、マルチプレクサM18を介してデータパス3と状態レジスタ35へそれぞれ送出させる。これにより、データパス3は、制御信号に基づいてプログラムカウンタ1の状態cs1に従った演算処理を実行し得る。
一方、状態レジスト35は、プログラムカウンタ1に設定された次カウンタであるプログラムカウンタ2を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17に送出する。この場合、第1修正元状態レジスタ32aに接続された等価判定部36aは、当該第1修正元状態レジスタ32aに記憶されたプログラムカウンタ2と、状態レジスタ35から受け取ったカウンタデータとが一致していると判定し、その判定結果をカウンタ一致信号としてマルチプレクサM17に送出する。
これによりマルチプレクサM17は、第1修正元状態レジスタ32aに対応付けられている第1修正後状態レジスタ33aに記憶された追加プログラムカウンタ4を変更カウンタデータとして選択し、状態レジスト35から受け取ったカウンタデータに換えて変更カウンタデータを大小判定部39、制御信号パッチ部31及び融合結線論理制御回路4に送出する。
ここで、制御信号パッチ部31の制御信号メモリ40には、プログラムカウンタ2を設計修正した内容である加算処理及び乗算処理を実行させる状態cs4と、次カウンタとして設定されたプログラムカウンタ3とが追加プログラムカウンタ4にパッチとして記憶されている。なお、制御信号メモリ40に記憶される状態cs4等の機能修正用のデータは、製造後にアクセラレータ1に生じた機能修正の内容に応じて、後述する「(3)整数線形計画法に基づくパッチコンパイル手法」に従って他のコンピュータで生成され、制御信号メモリ40の追加プログラムカウンタ4に記憶され得る。
大小判定部39は、追加プログラムカウンタ4を示す変更カウンタデータをプログラムカウンタパッチ部30から受け取ると、変更カウンタデータの値(追加プログラムカウンタ4)が、最大値SF「3」を超えていることから、融合結線論理制御回路4からの制御信号に替えて、制御信号メモリ40から読み出された追加プログラムカウンタ4の内容を、制御信号としてマルチプレクサM18を介しデータパス3及び状態レジスタ35へそれぞれ送出させる。
これによりデータパス3は、この制御信号に基づいて追加プログラムカウンタ4に設定された状態cs4に従った演算処理を実行し得る。このようにして、パッチ回路5は、プログラムカウンタ2を無効化して、このプログラムカウンタ2に替えて追加プログラムカウンタ4を選択し、状態cs4に従って機能修正された演算処理をデータパス3に実行させ得るようになされている。
一方、状態レジスタ35は、制御信号パッチ部31から制御信号を受け取ると、追加プログラムカウンタ4に設定された次カウンタであるプログラムカウンタ3を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17へそれぞれ送出し得る。等価判定部36a,36bは、カウンタデータと同じプログラムカウンタ3が第1修正元状態レジスタ32a又は第2修正元状態レジスタ32bに記憶されていないことから、このことを示す不一致信号を生成し、これをマルチプレクサM17に送出する。
これによりマルチプレクサM17は、状態レジスタ35から受け取ったプログラムカウンタ3を示したカウンタデータをそのまま大小判定部39、融合結線論理制御回路4及び制御信号パッチ部31に送出する。大小判定部39は、プログラムカウンタ3を示すカウンタデータを受け取ると、カウンタデータの値(プログラムカウンタ3)が、最大値SF「3」以内であることから、IDCT制御回路25から送出されたプログラムカウンタ3の内容を示す制御信号を、マルチプレクサM18を介してデータパス3と状態レジスタ35へそれぞれ送出させる。これにより、データパス3は、この制御信号に基づいてプログラムカウンタ3の状態cs3に従った演算処理を実行し得る。
一方、状態レジスト35は、プログラムカウンタ3に設定された次カウンタであるプログラムカウンタ1を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17に送出する。等価判定部36a,36bは、それぞれ対応する第1修正元状態レジスタ32a又は第2修正元状態レジスタ32bに、カウンタデータと同じプログラムカウンタ1が記憶されていないことから、このことを示すカウンタ不一致信号を生成し、これをマルチプレクサM17へ送出する。
これによりマルチプレクサM17は、状態レジスタ35から受け取ったプログラムカウンタ1を示すカウンタデータをそのまま大小判定部39、融合結線論理制御回路4及び制御信号パッチ部31へそれぞれ送出し得る。これにより大小判定部39は、カウンタデータの値(プログラムカウンタ1)が、最大値SF「3」以内であることから、上述と同様に、IDCT制御回路25から送出されたプログラムカウンタ1の内容を示す制御信号を、再びマルチプレクサM18を介してデータパス3と状態レジスタ35にそれぞれ送出させる。これにより、データパス3は、制御信号に基づいてプログラムカウンタ1の状態cs1に従った演算処理を再び実行し得る。
このようにして、制御器2は、プログラムカウンタ1、追加プログラムカウンタ4、プログラムカウンタ3、プログラムカウンタ1の順で一連の演算処理を繰り返させ、プログラムカウンタ2の状態cs2に替えて追加プログラムカウンタ4の状態cs4をデータパス3に実行させ、機能修正し得るようになされている。
因みに、このパッチ回路5では、さらにプログラムカウンタパッチ部30において、第2修正元状態レジスタ32bに例えばプログラムカウンタ3を記憶させ、かつ第2修正後状態レジスタ33bに追加プログラムカウンタ5を新たに記憶させることもできる。
この場合、状態レジスト35は、追加プログラムカウンタ4に設定された次カウンタであるプログラムカウンタ3を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17にそれぞれ送出し得る。第2修正元状態レジスタ32bに接続された等価判定部36bは、当該第2修正元状態レジスタ32bに記憶されたプログラムカウンタ3と、状態レジスタ35から受け取ったカウンタデータとが一致していることから、その判定結果をカウンタ一致信号としてマルチプレクサM17に送出する。
これによりマルチプレクサM17は、第2修正元状態レジスタ32bに対応付けられている第2修正後状態レジスタ33bに記憶された追加プログラムカウンタ5を、変更カウンタデータとして選択し、状態レジスト35から受け取ったカウンタデータに換えて変更カウンタデータを大小判定部39、制御信号パッチ部31及び融合結線論理制御回路4に送出する。
ここで、制御信号パッチ部31の制御信号メモリ40には、プログラムカウンタ3を設計修正した所定の演算処理を実効させる状態cs5と、次カウンタとして設定されたプログラムカウンタ1とが追加プログラムカウンタ5にパッチとして記憶されている。大小判定部39は、追加プログラムカウンタ5を示す変更カウンタデータをプログラムカウンタパッチ部30から受け取ると、変更カウンタデータの値(追加プログラムカウンタ5)が、最大値SF「3」を超えていることから、融合結線論理制御回路4からの制御信号に替えて、制御信号メモリ40から読み出した追加プログラムカウンタ5の内容を、制御信号としてマルチプレクサM18を介してデータパス3及び状態レジスタ35にそれぞれ送出させる。
これによりデータパス3は、この制御信号に基づいて追加プログラムカウンタ5に設定された状態cs5に従った演算処理を実行し得る。このようにして、パッチ回路5は、さらにプログラムカウンタ3をも無効化して、このプログラムカウンタ3に替えて追加プログラムカウンタ5を選択し、状態cs5に従って機能修正された演算処理をデータパス3に実行させ得るようになされている。かくして、制御器2は、プログラムカウンタ1、追加プログラムカウンタ4、追加プログラムカウンタ5、プログラムカウンタ1の順で処理を繰り返させるように機能修正し得るようになされている。
(3)整数線形計画法に基づくパッチコンパイル手法
次に、製造後に制御器2を機能修正する際、初期設計記述と、機能修正後の設計記述との差分から制御信号メモリ40に格納される内容をコンパイルするパッチコンパイル手法について説明する。この場合、初期設計されたデータフローグラフF1(図3(A))と、機能修正後のデータフローグラフF2(図4(A))との差分を設計者が求め、この差分からパッチをコンパイルする問題を、整数線形計画法で定式化し、この整数線形計画法を用いて厳密解を求める手法を適用する。因みに、整数線形計画法の定式化や、当該整数線形計画法から求められる制御信号メモリ40の追加プログラムカウンタ4や追加プログラムカウンタ5の設定内容は、別途、図示しないコンピュータを用いて求められる。
ここで、修正前後の設計記述は、修正前後のデータフローグラフを融合したグラフG=(O,E)で表現される。Oは、演算ノードの集合を示し、修正されない演算ノードの集合Ofと、除去された演算ノードの集合Orと、新たに追加された演算ノードの集合Omとの和集合であり、O=Of∪Om∪Orとして表される。つまり、修正前の演算ノード集合はOf∪Orとなり、修正後の演算ノード集合はOf∪Omとなる。なお、以下、新たに追加された演算ノードの集合Om={o1,o2,…}のうち、所定の演算ノードをoiと示す。各データ依存辺e∈Eは各演算ノード間のデータ依存関係を示す。すなわち、データ依存辺とは演算ノード間を繋げるデータエッジを示す。
なお、データパスは、機能ユニットの集合F={f1,f2,…}(以下、そのうち所定の機能ユニットをfjと示す)と、レジスタファイルポート(図1ではレジスタファイル17に設けられた読み込みポートRFO1,RFO2及び書き込みポートRFI1)の集合P={p1,p2,…}(以下、そのうち所定のレジスタファイルポートをpqと示す)とからなる。制御ステップS={s1,s2,…}(以下、そのうち所定の制御ステップをskと示す)は制御回路(IDCT制御回路25、FIR制御回路26及びCRC制御回路27のうち、例えばIDCT制御回路25)の各状態cs1,cs2,…に対応しており、修正前の各演算o∈Of∪Orの実行される制御ステップをS0(o)とし、演算で使用する機能ユニットをF0(o)とする。また、修正可能な制御ステップの総数の最大値をMmaxとする。この修正可能な制御ステップの総数の最大値Mmaxは、制御信号メモリ40のワード数に対応している。
ここでパッチコンパイル手法においては、各追加演算ノードo∈Omの制御ステップS(o)と、各追加演算ノードo∈Omの演算に使用する機能ユニットF(o)とを求める必要がある。そこで、このような各追加演算ノードo∈Omの制御ステップS(o)と、各追加演算ノードo∈Omの演算に使用する機能ユニットF(o)とを、整数変数を用いた制約式で表現し、整数線形計画法で求める手法について説明する。
因みに、この場合、修正前の演算は既に制御ステップにスケジュールされているとする。次に各制御ステップ間に空の制御ステップを挿入する。なお、この空の制御ステップにスケジュールされた演算はパッチ回路5における制御信号メモリ40に実装されることになる。各制御ステップ間に挿入される空の制御ステップの数は制御信号メモリ40のワード数、又は最も悲観的にスケジュールした場合に必要な制御ステップ数のうち小さい方となる。なお、最も悲観的にスケジュールした場合とは、各追加演算ノードを異なる制御ステップにスケジュールした場合であり、必要な制御ステップ数の理論的な上限を表す。
次に、制約式で用いる変数について説明する。後述する変数は全て2値変数である。例えばBi,j,kは、制御ステップskにおいて演算ノードoiが機能ユニットfjを使用しているときに1となる変数である(i、j及びkは、それぞれ所定の整数を示す)。また、Gj,k,q,tは、制御ステップskにおいて機能ユニットFjのt番目の入出力信号線がレジスタファイルポートpqを使用する場合に1となる変数である。さらに、Mkは、制御ステップskに修正がある場合に1となる変数である。そして、制約式は以下の7種類に分類される。
(3−1) 制約1(演算使用制約)
データフローグラフにおける各追加演算ノードoiは、所定の制御ステップskにおいて一度のみスケジュールされなくてはならない。これを制約式として表すと以下のようになる。
(3−2) 制約2(資源制約)
機能ユニットFjは、各制御ステップskにおいて高々一度のみ使用可能である。これを制約式として表すと以下のようになる。
(3−3) 制約3(データ依存制約)
データフローグラフにおける演算ノードol及び演算ノードox間の関係を示すデータ依存辺について、始点の演算は終点の演算よりも先にスケジュールされなければならない。これを制約式として表すと以下のようになる。なお、下記数3の左辺の最初の項は始点の演算の制御ステップに対応し、右辺は終点の演算の制御ステップに対応する。
(3−4) 制約4(修正制御ステップ制約)
変数であるMkは、制御ステップskが修正された際に1となる。これを制約式にすると以下のようになる。
(3−5) 制約5(除去演算制約)
除去する演算ノードoy∈Orがスケジュールされている制御ステップは、無条件に修正制御ステップとなり、変数であるMstep(oy)は1となる。これを制約式にすると以下のようになる。
(3−6) 制約6(最大修正制御ステップ数制約)
修正可能な制御ステップの最大値Mmaxの上限はパッチ回路内の制御信号メモリ40のワード数で決定される。これを制約式にすると以下のようになる。
(3−7) 制約7(レジスタポート制約)
ここでは説明の簡略化のためチェイニングを考慮しない。つまり、各機能ユニットはレジスタファイル17から所定のデータを読み出し、演算結果をレジスタファイル17に格納する。よって、各機能ユニットの入出力はレジスタファイルポート(図1ではレジスタファイル17に設けられた読み込みポートRFO1,RFO2及び書き込みポートRFI1)に接続されている必要がある。これを制約式にすると以下のようになる。
因みに、各変数のレジスタへの割り当てについては、整数線形計画法問題を解いた後に、「P. Brisk, F. Dabiri, R. Jafari, and M. Sarrafzadeh, "Optimal register sharing for high-level synthesis of SSA form programs," IEEE Trans. Computer-Aided Design, vol. 25, no. 5, pp. 772-779, May 2006」等の手法を用いて求める。
上述した制約1〜7までの制約式を整数線形計画法によって解くことによって、各演算の制御ステップと、それに用いる機能ユニットとが求まる。因みに、上述した制約1〜7までの制約式を整数線形計画法によって解いても、仮に解が求まらない場合には、パッチ回路5に設けられた制御信号メモリ40のワード数では機能修正が不可能であることを示している。
(4)データパス合成手法
(4−1)データパス合成手法の概要
ここで、本発明によるアクセラレータ1のデータパス3は、設計時において、後述するデータパス合成手法を基に、製造後に起こり得るであろう潜在的な機能修正を予め想定して機能ユニットが選定されており、機能修正後の性能歩留まりを最大化し得るようになされている。以下、本発明によるデータパス合成手法について説明する。
ここで図6は本発明のデータパス合成手法の一連の流れを示す概略図である。このデータパス合成手法では、アクセラレータ1の設計時に、先ず始めに、初期の設計仕様45に基づいて、一般的な高位合成を利用し、初期の設計記述を動作させるために必要となる最小構成の機能ユニットを割り当てる。実際上、一般的な高位合成手法と同様に、C言語等で記述された高位設計記述と、設計制約とをコンピュータに入力し、LSIの動作を記述した動作記述から、ハードウェアレベルの記述であるRTL(レジスタ転送レベル)記述を生成し、初期の設計仕様に対応したデータパスを決定する。
次いで、初期の設計仕様を表したデータフローグラフに所定の演算ノードを新たに追加したり、或いは当該データフローグラフにおける演算ノード間の繋がりを変える等の仮想的な変更をランダムに実行し、機能修正を想定してデータフローグラフの内容を変更した例えば数百パターンの修正データフローグラフを多様性集合として生成する。なお、多様性集合とは、異なる事象の集合であり、各事象が確率を持つような確率空間である。ここで各事象を変異形と呼び、各事象の確率は性能歩留まりの計算に使用される。
高位設計における設計修正では、初期設計記述の一部を変更する。一般的に初期設計の段階では、実際どのような機能修正が製造後に行われるかは不明であり、また初期設計から可能な設計修正の方法は非常に多数であるため網羅的に求めることは現実的に不可能である。そのため、本発明では、機能修正による変形パターンを予めモデル化し、かつその変形回数を予め設定した機能修正仕様46からランダムサンプリングによって潜在的な機能修正の候補を生成し、Cプログラムを設計変更した修正Cプログラム48を複数求め、これら修正Cプログラム48で表された機能修正後の設計記述の集合を多様性集合とする。
ここでは、初期設計のデータフローグラフを基準に、演算ノードを追加したり、データエッジを変更して設計修正を行い、初期設計のデータフローグラフを変形させて潜在的な機能修正をモデル化する。機能修正仕様46としては、データエッジ上に所定の演算ノードを挿入する第1の変形モデルと、データエッジを削除又は追加する第2の変形モデルとの2つの変形モデルを考え、これら第1の変形モデル及び第2の変形モデルがランダムに所定回数選択され初期の設計仕様45が変形される。第1のモデルは、高位記述において、ある式中に新しい演算を追加するという設計変更に相当し、第2のモデルは、高位記述において、2つの変数参照を交換するという設計変更に相当する。
例えば、図7(A)は、初期の設計仕様を基に生成されたデータフローグラフF3を示し、このデータフローグラフF3は、所定データを演算ノードN8で加算した後その結果を演算ノードN9で「3」からのデータに乗算する一連の乗算処理を表している(なお、「3」は所定の演算ノードを示す)。また、データフローグラフF3では、これとは別に、所定データを演算ノードN10で加算するとともに、他のデータを演算ノードN11で加算し、これら加算結果を演算ノードN12で乗算する一連の演算処理を表している。以下、これらデータフローグラフF3を用いて、上述した第1の変形モデルと第2の変形モデルについて説明する。
図7(B)に示すように、データフローグラフF3の機能修正の一例を示す仮想演算処理を示す修正データフローグラフF4では、例えば加算処理の演算ノードN11と乗算処理の演算ノードN12との間のデータ依存関係を示すデータエッジがランダムに選択され変更データエッジとなっている。また、この実施の形態の場合では、例えば加算処理の演算ノードや、減算処理の演算ノード、乗算処理の演算ノードのうち乗算処理の演算ノードN13がランダムに選択され、変更データエッジに当該演算ノードN13が新たに追加され、さらにランダムに選択された他の加算処理の演算ノードN8と、演算ノードN13との間に新たなデータエッジが生成されている。
このように仮想演算処理を示す修正データフローグラフF4では、乗算処理の演算ノードN13を新たに追加する変更と、他の加算処理の演算ノードN8及び乗算処理の演算ノードN13間を繋げるデータエッジを生成する変更との2つの変更をランダムに選択して実行し得るようになされている。なお、新しい演算ノードが複数入力を持つ場合には、適当な数の演算ノードをランダムに選択して入力とする。
また、データフローグラフF3の機能修正の他の例として、図7(C)に示すように、修正データフローグラフF5では、加算処理の演算ノードN8と、乗算処理の演算ノードN9とのデータ依存関係を示すデータエッジがランダムに選択され(図7(A))、当該データエッジを削除するとともに、加算処理の演算ノードN8と、ランダムに選ばれた他の乗算処理の演算ノードN12とを繋げて新たなデータエッジを生成している。
また、この仮想演算処理を示す修正データフローグラフF5では、他の加算処理の演算ノードN10と、乗算処理の演算ノードN12とのデータ依存関係を示すデータエッジ(図7(A))がランダムに選択され、当該データエッジを削除するとともに、加算処理の演算ノードN10と、ランダムに選ばれた他の乗算処理の演算ノードN9とを繋げて新たなデータエッジを生成している。
このように修正データフローグラフF5では、所定の加算処理の演算ノードN8及び乗算処理の演算ノードN9間のデータエッジを削除し、かつ当該演算ノードN8及び乗算処理の演算ノードN12間を繋げるデータエッジを新たな生成する変更と、他の加算処理の演算ノードN10及び乗算処理の演算ノードN12間のデータエッジを削除し、かつ当該演算ノードN10及び乗算処理の演算ノードN9間を繋げるデータエッジを新たに生成する変更との2つの変更をランダムに選択して実行し得るようになされている。
なお、この実施の形態の場合、1回の変形によって初期設計から生成される機能修正設計は、初期設計から機能修正される規模が変形回数で決められており、例えば初期設計から数%以下で機能修正され得るように変形回数が予め指定されている。また、新たな演算ノードの追加や、データエッジの追加等の各変形は同じ確率で起こるものとする。
実際上、このデータパス合成手法では、先ず初めに、初期設計仕様45に従って生成されたデータフローグラフF3に対して、第1の変更モデル又は第2の変更モデルのうちいずれかをランダムに選択して新たな修正データフローグラフF4を1つ生成する。次いで、図6に示したように、この修正データフローグラフF4に対して、後述するインクリメンタルスケジューリング・バインディング合成を繰り返し適用し、初期のデータパスによって修正データフローグラフF4を実行し得るように機能ユニット間の接続が必要に応じて追加されていく。
その後、このようにして機能ユニット間の接続が新たに生成されたデータパス60が、予め決められている性能制約を満たしているか否かについて判断され、性能制約が満たしていない場合には、性能制約を満たすために必要であろうと推定される機能ユニットを特定し、この機能ユニットを初期のデータパスに対して新たに割り当て(図6中「インクリメンタル機能ユニット割り当て」)、新たなデータパス(以下、これを機能修正耐性データパスと呼ぶ)61の構成を決定する。
次いで、再度、第1の変更モデル又は第2の変更モデルのうちいずれかをランダムに選択し、初期設計に従って生成されたデータフローグラフF3から新たな修正データフローグラフF5を再び生成する。次いで、この新たな修正データフローグラフF5に対して、後述するインクリメンタルスケジューリング・バインディング合成を繰り返し適用し、先に生成された機能修正耐性データパス61によって、当該修正データフローグラフF5を実行し得るように機能ユニット間の接続が必要に応じて追加されていく。
その後、このようにして機能ユニット間の接続が新たに生成された機能修正耐性データパス61が、予め決められている性能制約を満たしているか否かについて判断し、性能制約が満たしていない場合には、性能制約を満たすために必要であろうと推定される機能ユニットを特定し、この機能ユニットを機能修正耐性データパス61に対してさらに割り当て(図6中「インクリメンタル機能ユニット割り当て」)、再度、新たな機能修正耐性データパス62の構成を決定する。
このようにして、データパス合成手法では、予め決められた回数で設計修正を実行してゆき、各設計修正毎に所定の制約性能を満たすように、必要に応じて新たな機能ユニットを次第に追加させてゆき、最終的に、これら設計修正毎に必要に応じて追加された機能ユニット全てが設けられたデータパス3を生成し、このデータパス3に制御器2が設けられ本発明のアクセラレータ1が製造され得る。かくして、このようなデータパス合成手法では、製造後に起こり得るであろう潜在的な機能修正を予め想定して必要となる機能ユニットを設けることができるので、パッチ回路5による機能修正した際に、例えば乗算器13が足りずに性能制約を満たす範囲で機能修正し得ないとの問題を防止でき、機能修正後における性能歩留まりを最大化し得るようになされている。
因みに、図6において性能分布を示したグラフ70は、例えば横軸が、左側にゆくに従って処理能力が良いことを示し、縦軸が、各処理能力を有するデータパスの該当数を示しており、設計修正したデータパスのうち性能制約を満たすデータパスがどの程度あるかの目安となり得る。
(4−1)インクリメンタルスケジューリング・バインディング合成
次に、上述したインクリメンタルスケジューリング・バインディング合成手法について、説明する。なお、この「(4−1)インクリメンタルスケジューリング・バインディング合成」の説明に用いる記号は、上述した「(3)整数線形計画法に基づくパッチコンパイル手法」の説明に用いた記号とは別に定義しており、同じ記号であっても同じ意味を表すものではない。
この場合、先ず、入力の高位設計記述を解析してコントロールデータフローグラフ(CDFG)を構築する。ここで、コントロールデータフローグラフ内で表現される式は、それぞれ静的単一代入(SSA)形式になっているものとする。コントロールデータフローグラフは、コントロールフローグラフ(CFG)GC=(VC,EC)と、データフローグラフ(DFG)GD =(VD,ED)からなる。コントロールフローグラフは、基本ブロックを表す制御ノードの集合VCと、制御ノード間の制御フローを表す制御エッジの集合ECからなる。ここで、基本ブロックとは、制御の変更を伴わない一連の演算を表す。
データフローグラフは、演算ノードの集合VDと、演算ノード間のデータ依存関係を表すデータエッジの集合EDからなる。スケジュールS:VD→Uは演算ノードの集合から制御ステップの集合への写像として定義される。データパスA=(F,I)は、機能ユニットの集合Fと、機能ユニット間の配線の集合Iとからなる。機能ユニットの割り当てB:VD→Fは、演算ノードの集合から機能ユニットの集合Fへの写像として定義される。インクリメンタルスケジューリング・バインディング合成の対象となる演算ノードの集合T⊆VDを対象ノードと呼ぶ。ここで、残りの演算ノード(VD−T)のスケジュールと、機能ユニットの割り当ては与えられているものとする。
そして、このインクリメンタルスケジューリング・バインディング合成手法は、スケジューリングと、バインディングとを並行して行う。具体的には、各演算ノードn∈VDに対して、まずnをどの制御ステップで実行するかを決定(スケジューリング)した後、どの機能ユニットでnを実行するかを決定(バインディング)する。図8に示すスケジューリングの手続きは、「J. Llosa, "Swing modulo scheduling: A lifetime-sensitive approach,"in Proc. IEEE Int. Conf. on Parallel Architecture and Compilation Techniques (PACT), Oct. 1996, pp. 80-87.」に記載されたswing modulo スケジューリングに基づいている。
ここで、各基本ブロックBBに対して、swing modulo スケジューリング手法を用いて演算ノードの集合(BB∩T)のスケジューリング順を決定する(3行目、手続きSMS-Sort())。スケジューリングの品質は、スケジューリング順に大きく依存する。swing modulo スケジューリングは、クリティカルパス上の演算ノードを最優先とし、次に変数の寿命を最小にするようにスケジューリング順を決定する。決定されたスケジューリング順に各演算ノードnを選択し(4行目)、以下の処理を繰り返す。
手続きAvailable-Slots()によってnがスケジュール可能な制御ステップの集合Sを決定する(5行目)。手続きScan-Direction()によって決定(6行目)した順で、Sの各制御ステップを選択し、バインディングを試みる(9行目)。割り当てが見つからない場合には、新しい制御ステップを挿入し(New-Step())、再びバインディングを行う(12-15行目)。
次にレジスタ割り当てAssign-Registers()を行い、各変数をレジスタファイル17内のレジスタに割り当てる。ここではすべての局所変数は必ずレジスタに割り当てられる。つまりメモリスピルは行わない。この手法では、コントロールデータフローグラフ内に表現される式がSSA形式の場合に最適性を保証するレジスタ割り当てアルゴリズムを採用した(「P. Brisk, F. Dabiri, R. Jafari, and M. Sarrafzadeh, "Optimal register sharing for high-level synthesis of SSA form programs," IEEE Trans.Computer-Aided Design, vol. 25, no. 5, pp. 772-779, May 2006.」参照)。最後に手続きGenerate-Control-Words()によってスケジューリング及びバインディング結果から制御プログラムを生成する。
図9にバインディングの手続きを示す。先ず、演算ノードnに割り当て可能な機能ユニットの集合を手続きAvailable-FUs()で求める。その後、手続きSort-FUs()によって機能ユニットの集合をバインディングのコストに基づいてソートする。演算ノードnを機能ユニットfに割り当てるコストは、割り当てた際に追加する必要のある配線のコストとする。ソートされた順に演算ノードnを機能ユニットfに割り当て、機能ユニットfに隣接する演算ノードmに対応する機能ユニットgに接続する。
ここで演算ノードmと演算ノードnとの間にデータエッジが存在している場合に、2ノードが隣接していると呼ぶ。演算ノードmがすでに機能ユニットgに割り当てられている場合には、手続きBind-Path()によって機能ユニットfと、機能ユニットgとの間を接続する。このとき,機能ユニットfと機能ユニットgとの間の接続には、配線、マルチプレクサ、レジスタポートを組み合わせる。仮に演算ノードmと演算ノードnとが異なる制御ステップにスケジュールされている場合には、演算結果をレジスタに格納するようにバインディングする。
仮に演算ノードmと演算ノードnとの間にそのようなパスがない場合には、手続きNew-Interconnects()によって新しい配線を導入してバインディングを再び行う。コンパイル時には、New-Connection()は実行されない。この部分が唯一合成とコンパイルで異なる点である。それでもパスが見つからない場合には、直前の繰り返しで導入された配線をすべて除去し(Undo-New-Interconnects())、次の機能ユニット候補f´∈Gを演算ノードnに割り当てる。
次に、図10に示すデータフローグラフF7を例として、インクリメンタルスケジューリング・バインディング合成手法を説明する。先ず、3つの演算ノード1,2,3をswing modulo スケジューリング手法を用いてソートする。なお、図10中の数字はスケジューリング順を表している。図11(A)は、最初の2つの演算ノード1,2のスケジューリング・バインディング結果を示す。演算ノード1には、MUL1(図1の乗算器13に相当)が割り当てられており、レジスタファイル17に接続された読み出しポートRFO1が片方の入力に接続されている。演算ノード2には、ALU1(図1のALU111に相当)が割り当てられており、レジスタファイル17に接続された書き出しポートRFI1が出力に接続されている。図11(B)に示すように、このようなスケジュール結果に対応するデータパス71では、ALU1及び書き出しポートRFI1間と、読み出しポートRFO1及びMUL1間とにそれぞれ配線が設けられる。
次に、演算ノード3を制御ステップB(図中step B)にバインディングする。ここで、図11(A)に示すように、スケジューリング結果では、制御ステップBにALU1が既に割り当てられているため、図12(A)に示すように、新しい制御ステップC(図中step C)を挿入し、制御ステップCにおいてALU1を演算ノード3に割り当てる。
ここで、演算ノード3及び演算ノード1は、その間にデータエッジが存在しており(図10)、かつ演算ノード1が制御ステップAにスケジュールされ、演算ノード3が制御ステップC(図中step C)にスケジュールされており、異なる制御ステップA,Cにスケジュールされている。従って、このようなスケジュール結果では、図12(A)に示すように、レジスタファイル17に接続された読み込みポートRFO2に演算ノード1が接続され、レジスタファイル17に接続された書き込みポートRF1に演算ノード3が接続される。ここで、図11(B)に示したデータパス71では、ALU1及び書き込みポートRFI1間に配線があるものの、読み込みポートRFO2及びMUL1間に配線が存在していない。そこで、図12(B)に示すように、最終的には、読み込みポートRFO2及びMUL1間に新たな配線を追加し、スケジュール結果に対応したデータパス72を生成する。
(5)動作及び効果
以上の構成において、アクセラレータ1では、予め論理が固定された結線論理からなり、予め決められたプログラムカウンタ1〜3の順番に従って所定の演算処理の命令を制御信号として順次生成する融合結線論理制御回路4を備え、当該融合結線論理制御回路4によって固定機能を実現しており、メモリ等の余分な回路構成を有していない分だけ小型化を図り、かつ処理速度及び電力効率の向上を図ることができる。
また、このアクセラレータ1では、融合結線論理制御回路4からプログラムカウンタ1〜3を受け取り、これらプログラムカウンタ1〜3のうち所定のプログラムカウンタ2を追加プログラムカウンタ4に置き換えるプログラムカウンタパッチ部30と、追加プログラムカウンタ4に対応付けて修正演算処理命令である状態cs4を記憶した制御信号パッチ部31とが設けられている。
これにより、アクセラレータ1では、制御信号パッチ部31がプログラムカウンタパッチ部30から追加プログラムカウンタ4を示すカウンタデータを受け取ると、融合結線論理制御回路4から出力されるプログラムカウンタ2の内容を示す制御信号に替えて、追加プログラムカウンタ4に対応付けられた修正演算処理命令である状態cs4を制御信号としてデータパス3に送出する。
かくして、アクセラレータ1では、仕様変更や設計誤りにより製造後に回路構成を修正する必要が生じた場合でも、高位合成手法によって機能修正したアクセラレータを新たに設計し製造し直すことなく、融合結線論理制御回路4自体を修正せずに、データパス3によって状態cs4に従って機能修正後の演算処理を実行させることができる。
すなわち、図13に示すように、一般的に、結線論理からなる固定機能のアクセラレータ80を製造する場合には、高位記述を利用した高位合成手法(ステップSP10)によって結線論理の構成等の論理・物理設計(ステップSP11)が行われ、この初期設計に基づいて固定機能のアクセラレータ80が製造(ステップSP12)される。その後、製造したアクセラレータ80に動作上の欠陥が発見された場合には、初期設計の仕様通りに動作させるために必要な修正を特定する作業(ステップSP13)を行い、この欠陥を修正した修正後記述を作成して再び高位合成手法(ステップSP10)によって結線論理の構成等の論理・物理設計(ステップSP11)が行われ、初期設計が修正されたアクセラレータ80を製造(ステップSP12)していた。
これに対して、本発明では、修正後記述を利用して整数線形計画法に基づくパッチコンパイル手法を適用(ステップSP14)することで、制御信号メモリ40に格納されるパッチをコンパイルすることができ、従来のような、論理・物理設計(ステップSP11)や、アクセラレータ自体の再製造(ステップSP12)等の一から製造のやり直しを不要とすることができる。
また、このアクセラレータ1では、当該アクセラレータ1の設計時において、初期の設計仕様を基に高位合成手法により生成したデータフローグラフから、演算ノードの追加やデータエッジの変更等した複数の修正データフローグラフを生成し、これら修正データフローグラフの演算処理について所定の性能制約を満たす範囲内で実行し得るように機能ユニットが選定され、これら選定された全ての機能ユニットを備えたデータパス3が用いられている。
これにより、アクセラレータ1では、製造後における仕様変更や設計誤りにより起こり得るであろう潜在的な機能修正を予め想定して、例えば比較器10、ALU111、ALU212、乗算器13、及びバレルシフタ14(機能ユニット)を設けることができ、製造後に制御器2について小規模な機能修正を行っても、当該機能修正により性能制約を満たすために必要になるであろう機能ユニットを有する確率を高め、機能修正後の性能歩留まりを最大化し得る。
ここで、図14は、本発明のアクセラレータ1の概要について纏めた概略図である。図14に示すように、アクセラレータ1では、設計時に、Cプログラムを用いた初期の設計仕様と、演算ノードの追加やデータエッジの変更等を示す機能修正仕様とを基に、潜在的な機能修正を想定して複数の修正データフローグラフを生成し、高位合成手法によりこれら修正データフローグラフの演算処理を所定の性能制約内で実行可能なデータパス3が生成されている。
アクセラレータ1では、製造後に仕様変更や設計誤りにより機能修正が必要となった場合でも、Cプログラムを用いた機能修正後の設計記述から上述したパッチコンパイル手法に基づいてパッチを生成し、このパッチの内容を制御信号メモリ40に書き込むことで、機能修正することができる。
また、このアクセラレータ1では、異なる固定機能を実現するIDCT制御回路25、FIR制御回路26及びCRC制御回路27を備えた融合結線論理制御回路4が設けられ、かつこれらIDCT制御回路25、FIR制御回路26及びCRC制御回路27のいずれが選択されても、IDCT処理、FIR処理及びCRC処理が実行可能な機能ユニットが予め選択され設けられている。これによりアクセラレータ1では、製造後に用途の変更が生じても、これに応じてIDCT処理、FIR処理及びCRC処理のいずれかの処理を実行する回路構成へと簡単に機能変更させることができる。
ところで、図15に示すように、従来の集積回路85では、例えばIDCT処理や、FIR処理、CRC処理等の複数の処理のうちいずれかの処理を選択的に実行可能とする場合、各処理毎にそれぞれ個別に高位合成手法により設計されたアクセラレータ86a,86b,86c,86dが設けられていた。また、従来の集積回路85では、各アクセラレータ86a,86b,86c,86dがそれぞれ結線論理により構成され固定機能を実現していることから、製造後に設計変更を殆んど行うことができなかった。
これに対して、図15に示すように、パッチ回路5(図1)を有する本発明のアクセラレータ1a,1bを用いた集積回路88では、従来、各処理毎にそれぞれ個別に設けられていたデータパスを共通化させることができるので、その分だけ集積回路88全体の面積を小さくすることができ、小型化を図ることができる。また、このような集積回路88では、各アクセラレータ1a,1b毎にそれぞれパッチ回路5が設けられていることから、上述したようにパッチ回路5を用いることで、製造後であってもアクセラレータ1a,1b毎に小規模な機能修正を行うことができるようになり、製造後に機能修正が仮に生じても、製造時の回路構成をそのまま利用しつつ機能修正を行え得る集積回路88を実現できる。
この実施の形態の場合、アクセラレータ1では、制御信号メモリ40が一部の制御信号のみを変更可能な程度のメモリ量しかないことから、仮に読み出しか数が非常に多くなっても消費電力を低減させることができる。
以上の構成によれば、アクセラレータ1では、予め論理が固定された結線論理からなる融合結線論理制御回路4によりプログラムカウンタ1〜3の順番に従って順次生成された制御信号のうち、機能修正が必要となったプログラムカウンタ2の制御信号に替えて、機能修正を行った状態cs4を制御信号として新たにデータパス3に送出することにより、機能修正した演算処理をデータパス3に実行させるようにした。
これにより、アクセラレータ1では、主として所定の機能を実現する融合結線論理制御回路を結線論理で構成することで、小型化を図り、かつ処理速度及び電力効率の向上を図ることができるとともに、仮に仕様変更や設計誤りにより製造後に機能修正する必要が生じた場合でも、高位合成により融合結線論理制御回路自体の再設計を行わずに、パッチ回路5によって機能修正が行えるので、その分だけコスト低減を図ることができる。かくして、小型化を図るとともに、処理速度及び電力効率の向上を図りつつ、製造後の機能修正に掛かるコストを格段的に低減し得るアクセラレータ1を提案できる。
(6)検証結果
次に、本発明のアクセラレータ1における回路構成全体の面積と、実行時における消費電力とについて、従来からある1つの機能しか実現できない固定機能アクセラレータと、機能修正が可能な高いプログラマビリティを持つ一般的な汎用プロセッサと比べて、どの程度異なるか検証を行った。図16は、本発明のアクセラレータ1と、従来の固定機能アクセラレータと、一般的な汎用プロセッサとについて回路構成の面積を比較した検証結果を示している。図17は、本発明のアクセラレータ1と、従来の固定機能アクセラレータと、一般的な汎用プロセッサとについて消費電力について比較した検証結果を示している。
ここでは、比較例となる従来の固定機能アクセラレータとして、C言語で記述し固定機能アクセラレータとして高位合成した「bubble sort(バブルソート)」と、「ADPCM Decoder(ADPCMでコーダ)」と、「8x8 IDCT(8x8 逆離散コサイン変換)」と、「MPEG-1 Prediction(MPEG-1 予測関数)」と、「MPEG-2 bdist2(MPEG-2 bdist関数)」の5つの回路を用意した。なお、図16では、汎用プロセッサを「Prog.Micricided」と表している。
また、本発明のアクセラレータ1としては、上述した従来の固定機能アクセラレータである「bubble sort」と、「ADPCM Decoder」と、「8x8 IDCT」と、「MPEG-1 Prediction」と、「MPEG-2 bdist2」の5つの機能を全て実行可能な回路構成とし、最大修正制御ステップ数Mmaxを3,10,50とした3種類のアクセラレータ1を用意した。
なお、本発明のアクセラレータ1において、入力Cプログラムを解析し、SSA形式のコントロールデータフローグラフ(CDFG)を構築する処理には、LLVMコンパイラ・インフラストラクチャ(C. Lattner and V. Adve, "LLVM: A compilation framework for lifelong program analysis & transformation,"in Proc. IEEE/ACM Int. Symp. on Code Generation and Optimization (CGO), May 2004, p. 75.)を用いた。また、本発明のアクセラレータでは、データパス合成として、上述した「(4)データパス合成手法」を利用し、潜在的多様性を考慮したデータパスを用いた。すなわち、本発明のアクセラレータ1では複数機能の実行に最適化されたデータパスが合成されている。本発明のアクセラレータ1の製造の際に用いる整数線形計画法のソルバとしては、Gurobi Optimizer(Gurobi Optimizer Reference Manual, Version 3.0.Gurobi Optimization, Inc., 2010.)を用いた。
また、ここでは、制御回路(Controller)と、マルチプレクサ(Multiplexers)と、演算器(Arithmetic)と、レジスタファイル(Register file)と、ローカルストア(Local Store)の各回路について面積を比較する検証を行った。
本発明のアクセラレータ1と、従来の固定機能アクセラレータと、一般的な汎用プロセッサについて、公平な比較を行うため、全ての回路の動作周波数は200MHzとなるように設計した。また、面積評価及び消費電力評価には、45nmプロセスの仮想テクノロジであるFreePDK45(FreePDK45, http://www.eda.ncsu.edu/wiki/FreePDK45:Contents. North Carolina State University, 2010.)を用いた。また、スタンダードセルライブラリはNangate社提供のものを用いた。論理合成にはSynopsys 社Design Compilerを用い、静的タイミング解析、面積評価、消費電力評価にはSynopsys社PrimeTime を用いた。
複数のアクセラレータ1のうち、最大修正制御ステップ数Mmaxが3であるアクセラレータ1では汎用プロセッサに比べて面積で78%、消費電力で83%小さくできることを確認した。また、この最大修正制御ステップ数Mmaxが3であるアクセラレータ1は、従来の固定機能アクセラレータの中で最も大きな面積を持つ回路である「MPEG-2 bdist2」に比べて面積で18%、消費電力で13%のオーバーヘッドであった。このように、本発明のアクセラレータ1は、複数機能の実行時の変更や、製造後の機能修正を可能にしつつ、従来の固定機能アクセラレータに匹敵する面積・消費電力を実現可能であることが分かり、面積と消費電力の面において従来方式よりも優れていることが確認できた。
次に、上述した「(4)データパス合成手法」を基に製造後の機能修正を考慮して生成されたデータパスと、従来の固定機能アクセラレータに用いられるデータパスとについて、性能歩留まりを比較する検証を行ったところ、図18に示すような結果が得られた。図18では、多様性を考慮したデータパスを備えたアクセラレータ1を「Variation-Aware」と表記し、従来の多様性を考慮しないデータパスを備えたアクセラレータを「Variation-Unaware」と表記している。
ここでは入力C プログラムを解析し,SSA 形式のCDFG を構築する処理には、上述のLLVM コンパイラ・インフラストラクチャを用いている。Cプログラムが関数呼び出しを含む場合には、関数インライン化を用いて単一関数を生成している。また、SystemC言語による記述を入力とすることも可能とし、各モジュールに対して1つのアクセラレータを合成する。このとき、複数モジュール間は、ローカルストアを通じて通信する。合成されたアクセラレータのRTL記述はVerilog HDL言語で出力することが可能となっており、制御プログラムも様々な形式で出力可能である。
比較例としては、一般的な高位合成ツールが生成するデータパスと同等のもので多様性を考慮しないデータパスを合成した。機能ユニットやマルチプレクサ、メモリ素子、配線の面積はRohm 0.18μmテクノロジを用いて見積もった。
本発明のアクセラレータ1に設けられるデータパスでは、演算ノードを追加したり、データエッジを変更して初期設計のデータフローグラフを変形させた多様性集合を生成した。この生成に際しては、演算ノードの増加が全体の3%以下になるように制約を与え、また各設計に対して100個の異なる変異形を生成した。この変異形を考慮することで、機能修正に対する耐性を持つデータパスを合成した。
次に、比較例とした多様性を考慮しないデータパスと、多様性を考慮したデータパスのそれぞれに対して、上と同じ方法で生成した設計多様性集合を入力としてコンパイルを行い、実行ステップ数を100個求めた。なお、性能歩留まりは100個の実行ステップ数のうち初期設計の実行ステップ数の103%以内になった割合である。図18から、本発明のデータパスは、全体として2.8%の面積オーバーヘッドで43.4%の性能歩留まりの向上を確認した。
(7)他の実施の形態
例えば、図19において、90は、半導体チップ上に必要とされる一連の機能(システム)を集積するシステムオンチップでなる集積回路を示し、本発明のアクセラレータ1と、汎用プロセッサ91と、共有メモリ92と、周辺回路93a,93bとが共有バス94に接続されており、各回路間において種々のデータを授受し得るようになされている。
この場合、アクセラレータ1には、制御信号メモリ40に共有バス40を介して共有メモリ92のパッチメモリ96が接続されており、当該パッチメモリ96に記憶されたデータが必要に応じて制御信号メモリ40に転送され得るようになされている。実際上、図20に示すように、パッチメモリ96は、制御信号メモリ40よりも記憶容量が大きく、制御信号メモリ40において必要となる全てのパッチ1及びパッチ2を予め記憶している。
制御信号メモリ40は、パッチメモリ96からパッチ1又はパッチ2のいずれかを必要に応じて読み出し動的更新し、例えばパッチ1からパッチ2に記憶内容を変更させたり、或いはパッチ2からパッチ1に記憶内容を変更し得るようになされている。
これによりアクセラレータ1では、図21に示すように、初めに制御信号メモリ40にパッチ1を記憶させておき、プログラムカウンタ及び追加プログラムカウンタに従った順番で所定回数(例えば10000回)繰り返されるデータパス3による演算処理(ループ1)の際、パッチ1の内容による演算処理を実行し得る。
次いで、アクセラレータ1は、パッチメモリ96からパッチ2を読み出し、制御信号メモリ40に記憶されていたパッチ1に替えてパッチ2を記憶し得るようになされている。これにより、アクセラレータ1は、プログラムカウンタ及び追加プログラムカウンタに従った順番で所定回数(例えば10000回)繰り返されるデータパス3による演算処理(ループ2)の際、パッチ2の内容による演算処理を実行し得る。
なお、上述した実施の形態においては、パッチメモリ96をパッチ回路5の外部に設けるようにした場合について述べたが、本発明はこれに限らず、パッチメモリ96をパッチ回路5の内部に設けるようにしてもよい。
以上の構成において、アクセラレータ1では、パッチ可能な機能変更の規模が制御信号メモリ40のメモリ量によって制限されるものの、制御信号メモリ40に記憶される内容をパッチメモリ96の内容に更新可能とすることで、機能変更が大きい場合でも、制御信号メモリ40の内容をパッチメモリ96に記憶されたパッチに更新することで、異なるパッチ内容に簡単に変更することができる。
また、このようなアクセラレータ1では、一般的にメモリ量を増加すると消費電力が大きくなり、消費電力の効率が悪くなるものの、パッチメモリ96からの読み出し回数が2回であり、制御信号メモリ40の読み出し回数が20000回であることから、パッチメモリ96からの読み出し回数が格段的に少ないことから、当該パッチメモリ96での消費電力をほぼ無視できる程度まで低減させることができる。
さらに、このようなアクセラレータ1では、制御信号メモリ40の内容をデータパス3による演算処理を実行中においてもパッチ1からパッチ2へ変更することができることから、実質的に制御信号メモリ40のメモリ量を増やしたときと同等の効果を得ることができる。
なお、本発明は、本実施形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。例えば、上述した実施の形態においては、融合結線論理制御回路4に設けた複数の異なる機能を実現する回路構成として、IDCT制御回路25、FIR制御回路26又はCRC制御回路27を設けるようにした場合について述べたが、本発明はこれに限らず、例えばFFT制御回路やDCT制御回路等その他種々の回路構成を設けるようにしてもよい。
また、上述した実施の形態においては、整数線形計画法に基づくパッチコンパイル手法により、制御信号メモリ40に記憶されるパッチの内容を生成するようにした場合について述べたが、本発明はこれに限らず、要は、追加プログラムカウンタに記憶しておくことで機能修正を行えるパッチを生成することができればよく、その他種々の手法によりパッチを生成するようにしてもよい。
さらに、上述した実施の形態においては、機能修正により性能制約を満たすために必要になるであろう機能ユニットが選定できれば、上述したデータパス合成手法のほかに種々の手法を適用してもよい。
さらに、上述した実施の形態においては、大小判定部39によってプログラムカウンタパッチ部30からのカウンタデータの値が、最大値SF以内であるか否かを判定し、大小判定部39の判定結果を基に、例えば当該カウンタデータの値が最大値SF以内のとき、融合結線論理制御回路4からの制御信号をデータパス3へ送出し、一方、当該カウンタデータの値が最大値SFを超えているとき、制御信号メモリ40からの制御信号をデータパス3へ送出するようにした場合について述べたが、本発明はこれに限らず、大小判定部39を設けることなく、融合結線論理制御回路4及び制御信号メモリ40が、それぞれプログラムカウンタパッチ部30からのカウンタデータの値について、自己が制御信号を生成すべきカウンタデータであるか否かを判定し、その判定結果に応じてそれぞれ対応する制御信号をデータパス3に送出するようにしてもよい。