(57)【要約】  構成可能な処理アーキテクチャを実行時に最適化する方法を開示する。本方法は、少なくとも１つの関数を実行するための複数の呼出しを受け取るステップと、受け取った複数の呼出しの間で少なくとも１つのパターンを識別するステップと、少なくとも１つの関数を計算するために、この少なくとも１つのパターンに基づいて、構成可能な処理アーキテクチャの少なくとも一部を操作するステップと、を含む。【選択図】  図２Ａ
2020530175.tif 000002
【特許請求の範囲】
【請求項１】
構成可能な処理アーキテクチャを実行時に最適化する方法であって、
少なくとも１つの関数を実行するための複数の呼出しを受け取るステップと、
前記複数の呼出しの間で少なくとも１つのパターンを識別するステップと、
前記少なくとも１つの関数を計算するために、前記少なくとも１つのパターンに基づいて、前記構成可能な処理アーキテクチャの少なくとも一部を操作するステップと、
を含む、方法。
【請求項２】
各呼出しが、前記少なくとも１つの関数のそれぞれを計算するために計算装置に導かれる、請求項１に記載の方法。
【請求項３】
前記計算装置が、
マルチコア中央処理装置（ＣＰＵ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、グラフィック処理装置（ＧＰＵ）、粗粒度再構成可能アーキテクチャ（ＣＧＲＡ）、インテリジェンス処理ユニット（ＩＰＵ）、ニューラルネットワークアクセラレータ、特定用途向け集積回路（ＡＳＩＣ）、量子コンピュータ、
のいずれか１つである、
請求項２に記載の方法。
【請求項４】
前記少なくとも１つの関数を、前記計算装置ではなく計算グリッドによって計算するステップ、
をさらに含む、請求項２に記載の方法。
【請求項５】
前記計算グリッドが、
データ入力メッシュネットワークと、
複数の論理素子と、
複数のマルチプレクサであって、前記複数の論理素子と前記複数のマルチプレクサが少なくとも１つの計算グループを形成し、前記論理素子の少なくとも１つと前記複数のマルチプレクサの少なくとも１つが、前記少なくとも１つの計算グループのそれぞれを形成する、前記複数のマルチプレクサと、
をさらに備えている、
請求項４に記載の方法。
【請求項６】
前記少なくとも１つの関数のそれぞれが、前記少なくとも１つの計算グループのうちの少なくとも１つによって計算されるようにマッピングされている、請求項５に記載の方法。
【請求項７】
前記計算グリッドを操作する前記ステップは、
前記パターンが、ある関数の再出現を示しているときに、前記関数にマッピングされている前記少なくとも１つの計算グループの１つを複製するステップ、
をさらに含む、
請求項５に記載の方法。
【請求項８】
前記少なくとも１つの計算グループが、第１の計算グループと第２の計算グループを含み、前記少なくとも１つの関数が、第１の関数と第２の関数を含み、前記計算グリッドを操作する前記ステップが、
前記第１の関数にマッピングされている前記第１の計算グループと前記第２の関数にマッピングされている前記第２の計算グループとを、前記パターンに基づいて再配置するステップ、
をさらに含む、
請求項５に記載の方法。
【請求項９】
前記計算グリッドを操作する前記ステップが、
関数の呼出しが計算グループにマッピングされていないときに、前記計算グループを解放するステップ、
をさらに含む、
請求項５に記載の方法。
【請求項１０】
前記データ入力メッシュネットワークが、少なくとも１つのフィーダを含む、請求項５に記載の方法。
【請求項１１】
前記操作が、実行時に行われる、請求項１に記載の方法。
【請求項１２】
構成可能な処理アーキテクチャであって、
計算要素であって、前記計算要素が計算グリッドと処理ユニットのうちの少なくとも一方を含む、前記計算要素と、
前記処理ユニットに接続されているメモリであって、前記メモリが命令を含み、前記命令が前記計算要素によって実行されたときに、前記命令が、
少なくとも１つの関数を実行するための複数の呼出しを受け取り、
前記複数の呼出しの間で少なくとも１つのパターンを識別し、
前記少なくとも１つの関数を計算するために、前記少なくとも１つのパターンに基づいて、前記構成可能な処理アーキテクチャの少なくとも一部を操作する、
ように、前記構成可能な処理アーキテクチャを構成する、前記メモリと、
を備えている、構成可能な処理アーキテクチャ。
【請求項１３】
各呼出しが、前記少なくとも１つの関数のそれぞれを計算するために計算装置に導かれる、請求項１２に記載の構成可能な処理アーキテクチャ。
【請求項１４】
前記計算要素が、
マルチコア中央処理装置（ＣＰＵ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、グラフィック処理装置（ＧＰＵ）、粗粒度再構成可能アーキテクチャ（ＣＧＲＡ）、ニューラルネットワークアクセラレータ、インテリジェンス処理ユニット（ＩＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、量子コンピュータ、
のいずれか１つである、
請求項１２に記載の構成可能な処理アーキテクチャ。
【請求項１５】
前記計算要素が、
データ入力メッシュネットワークと、
複数の論理素子と、
複数のマルチプレクサであって、前記複数の論理素子と前記複数のマルチプレクサが少なくとも１つの計算グループを形成し、前記論理素子の少なくとも１つと前記複数のマルチプレクサの少なくとも１つが、前記少なくとも１つの計算グループのそれぞれを形成する、前記複数のマルチプレクサと、
をさらに備えている、
請求項１２に記載の構成可能な処理アーキテクチャ。
【請求項１６】
前記少なくとも１つの関数のそれぞれが、前記少なくとも１つの計算グループのうちの少なくとも１つによって計算されるようにマッピングされている、請求項１５に記載の構成可能な処理アーキテクチャ。
【請求項１７】
前記計算要素の操作が、
前記パターンが、ある関数の再出現を示しているときに、前記関数にマッピングされている前記少なくとも１つの計算グループの１つを複製するステップ、
をさらに含む、
請求項１５に記載の構成可能な処理アーキテクチャ。
【請求項１８】
前記少なくとも１つの計算グループが、第１の計算グループと第２の計算グループを含み、前記少なくとも１つの関数が、第１の関数と第２の関数を含み、前記計算要素の操作が、
前記第１の関数にマッピングされている前記第１の計算グループと前記第２の関数にマッピングされている前記第２の計算グループとを、前記パターンに基づいて再配置するステップ、
をさらに含む、
請求項１５に記載の構成可能な処理アーキテクチャ。
【請求項１９】
前記計算要素の操作が、
関数の呼出しが計算グループにマッピングされていないときに、前記計算グループを解放するステップ、
をさらに含む、
請求項１５に記載の構成可能な処理アーキテクチャ。
【請求項２０】
前記データ入力メッシュネットワークが、少なくとも１つのフィーダを含む、請求項１５に記載の構成可能な処理アーキテクチャ。
【請求項２１】
前記操作が、実行時に行われる、請求項１２に記載の構成可能な処理アーキテクチャ。
【請求項２２】
命令を格納している非一過性のコンピュータ可読媒体であって、前記命令が、構成可能な処理アーキテクチャを実行時に最適化するプロセスを処理ユニットに実行させ、前記プロセスが、
少なくとも１つの関数を実行するための複数の呼出しを受け取るステップと、
前記複数の呼出しの間で少なくとも１つのパターンを識別するステップと、
前記少なくとも１つの関数を計算するために、前記少なくとも１つのパターンに基づいて、前記構成可能な処理アーキテクチャの少なくとも一部を操作するステップと、
を含む、
非一過性のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、全般的には、ハードウェアの実行時の最適化に関し、より詳細には、構成可能なハードウェアを実行時に最適化する手法に関する。
【背景技術】
【０００２】
技術が進歩するにつれて、より高い処理能力を有する、より強力な処理システムのニーズが急速に高まる。最近では、プロセッサは、高い計算スループットを提供し、かつ高い電力効率であることが期待されている。しかしながら既存の処理システムは、メモリへの明示的な格納を通じて伝えられる命令の逐次的なストリームを実行し、したがってモデルの非省電力性という課題がある。
【０００３】
現代の処理アーキテクチャにおいては、たとえプログラムの大部分がコードの小さな静的部分を繰り返す場合でも、各動的命令をフェッチしてデコードしなければならない。さらには、状態を明示的に記憶することが、命令間でデータを伝えるための唯一の経路であるため、機能ユニットとレジスタファイルの間で中間結果が繰り返し伝送される。現代の計算アーキテクチャの制限としては、高い電力消費量、熱放散、ネットワークおよびＩ／Ｏのボトルネック、およびメモリパーティションが挙げられる。
【０００４】
例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、ソフトウェアによって構成されるハードウェア回路上で動作する。ＦＰＧＡでは、低レイテンシでの極めて高いスループット率が可能である。ＦＰＧＡの構成可能性は、マルチコアアーキテクチャにおけるコプロセッサとして使用することができ、またはシステムのＣＰＵの処理負荷をオフロードするためにクリティカルデータパス上に配置することができる。ＦＰＧＡの主たる欠点の１つは、柔軟なプログラミング性がないことである。さらに、ＦＰＧＡの計算能力は比較的低い。
【０００５】
プログラム可能な処理アーキテクチャの例は、マルチコアプロセッサである。マルチコアプロセッサのアーキテクチャは、２つ以上の独立した実際の処理ユニット（「コア」）を有する１つの計算要素を含み、処理ユニットはプログラム命令を読み取って実行するユニットである。これらの命令は、普通のＣＰＵ命令（例：加算、データの移動、分岐）である。このアーキテクチャでは、１つのプロセッサが、複数の命令を個別のコア上で並列に実行することができる。マルチコアプロセッサの主たる欠点は、高い電力消費量および低いスループットである。
【０００６】
処理アーキテクチャの別の例は、グラフィック処理装置（ＧＰＵ）である。ＧＰＵは、複数のタスクを同時に扱うように設計されている、より小さく、より効率的な何千ものコアからなる並列アーキテクチャに基づいている。ＧＰＵは、ディープラーニング、グラフィックスのレンダリング、機械学習のアプリケーションの計算タスクをアクセラレートさせるために利用することができる。ＧＰＵの主たる欠点は、高い電力消費量および高レイテンシである。さらにＧＰＵは、メモリ一貫性（memory coherency）がなく、したがって共有メモリには課題がある。
【０００７】
したがって、上述した欠陥を克服する処理アーキテクチャを提供することは有利であろう。
【発明の概要】
【課題を解決するための手段】
【０００８】
以下では、いくつかの例としての実施形態の要約を開示する。この要約は、そのような実施形態を読み手が基本的に理解できるように便宜的に提供されるものであり、本開示の範囲を完全に定義するものではない。この要約は、考えられるあらゆる実施形態の広範な概要ではなく、すべての実施形態の主要または重要な要素を識別することも、いずれかの態様またはすべての態様の範囲を示すことも意図していない。その唯一の目的は、１つまたは複数の実施形態のいくつかのコンセプトを、後から提示するさらに詳細な説明の導入部として簡略的な形で提示することである。本明細書では、本開示の１つの実施形態または複数の実施形態を指す目的で、便宜上、語「いくつかの実施形態」を使用することがある。
【０００９】
開示されている実施形態のさまざまな態様は、構成可能な処理アーキテクチャを実行時に最適化する方法を含む。本方法は、少なくとも１つの関数を実行するための複数の呼出しを受け取るステップと、受け取った複数の呼出しの間で少なくとも１つのパターンを識別するステップと、少なくとも１つの関数を計算するために、この少なくとも１つのパターンに基づいて、構成可能な処理アーキテクチャの少なくとも一部を操作するステップと、を含む。
【００１０】
開示されている実施形態のさまざまな態様は、構成可能な処理アーキテクチャをさらに含む。本システムは、計算グリッドと、処理ユニットと、処理ユニットに接続されているメモリであって、メモリが命令を含み、命令が処理ユニットによって実行されたとき、命令が、少なくとも１つの関数を実行するための複数の呼出しを受け取り、受け取った複数の呼出しの間で少なくとも１つのパターンを識別し、少なくとも１つの関数を計算するために、この少なくとも１つのパターンに基づいて、構成可能な処理アーキテクチャ内の計算グリッドを操作する、ように、処理ユニットを構成する、メモリと、を備えている。
【００１１】
本明細書に開示されている主題は、本明細書の最後における請求項に具体的に示され、明確に特許請求されている。本発明の上記およびそれ以外の目的、特徴、および利点は、添付の図面を参照しながら行われる以下の詳細な説明から明らかであろう。
【図面の簡単な説明】
【００１２】
【図１Ａ】一実施形態に係る構成可能な処理アーキテクチャの概略図である。
【図１Ｂ】一実施形態に係る構成可能な処理アーキテクチャの計算グリッドの概略図である。
【図２Ａ】一実施形態に係る、それぞれのパターンの識別および関数の構成を示している概略的なシミュレーションである。
【図２Ｂ】一実施形態に係る、それぞれのパターンの識別および関数の構成を示している概略的なシミュレーションである。
【図２Ｃ】一実施形態に係る、それぞれのパターンの識別および関数の構成を示している概略的なシミュレーションである。
【図２Ｄ】一実施形態に係る、それぞれのパターンの識別および関数の構成を示している概略的なシミュレーションである。
【図３】一実施形態に係る構成可能なハードウェアの実行時の最適化の流れ図である。
【発明を実施するための形態】
【００１３】
重要な点として、本明細書に開示されている実施形態は、本明細書における革新的な教示内容の多数の有利な使用の例にすぎない。本出願の明細書中に行われている記述は、一般的に、特許請求されるさまざまな実施形態のいずれも必ずしも制限しない。さらに、いくつかの記述は、いくつかの独創的な特徴にあてはまるが、それ以外の特徴にはあてはまらないことがある。一般には、特に明記しない限り、一般性を失うことなく、１つの要素は複数の要素であってもよく、逆も同様である。図面においては、類似する数字は、いくつかの図を通じて類似する部分を指している。
【００１４】
図１Ａは、一実施形態に係る構成可能な処理アーキテクチャ１００の例としての概略図を示している。処理アーキテクチャ１００は、計算グリッド１１０と、メモリ（プログラムメモリ１０２など）に結合されている処理ユニット（回路）１０１とを含む。
【００１５】
処理ユニット１０１は、計算グリッド１１０でのプログラムコードの一部の実行を最適化するための処理を実行するように構成されている。プログラムコードの一部は、関数、基本ブロック、またはその両方（まとめて関数と称する）を含むことができる。基本ブロックとは、ブロックの中からのジャンプ、またはブロックの中へのジャンプが存在しないような、連続する命令を有するプログラムコードの断片である。
【００１６】
一実施形態においては、構成可能な処理アーキテクチャ１００は、計算装置の動作をアクセラレートさせるように構成されている。このような装置としては、例えば、マルチコア中央処理装置（ＣＰＵ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、グラフィック処理装置（ＧＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、量子コンピュータ、光コンピューティング、ニューラルネットワークアクセラレータ、またはこれらの組合せ、が挙げられる。
【００１７】
開示されている実施形態によれば、アクセラレーションは、例えば、計算装置（図示していない）上ではなく、計算グリッド１１０上で関数を実行することによって達成される。計算グリッド１１０は、本明細書の中で後から図１Ｂを参照しながらさらに説明するように、論理素子のアレイおよびマルチプレクサ（ＭＵＸ）を含む。
【００１８】
計算グリッド１１０による関数の実行は、射影グラフ（projection graph）を使用して関数を計算グループに射影することによって行われる。計算グループとは、グリッド１１０内でＭＵＸを介して接続されている論理素子のセットである。グリッド１１０内で論理素子を正しく割り当てて選択することによって、関数の最適化された実行を達成することができる。
【００１９】
具体的には計算グリッド１１０は、グリッド１１０の動作を最適化するように、一部分が処理ユニット１０１によって構成される。この目的のため、処理ユニット１０１は、複数の最適化処理を実行する。
【００２０】
一実施形態においては、処理ユニット１０１は、計算装置内の計算要素によって動作する関数のための複数の呼出しを受け取るように構成されている。この呼出しは、複数の異なる関数、同じ関数、または両方の呼出し、メモリの異なる部分、メモリの同じ部分、または両方の呼出し、などとすることができる。関数は、算術演算、論理演算、またはその両方（ただしこれらに限定されない）を含む計算演算を実行することができる。
【００２１】
処理ユニット１０１は、受け取った複数の呼出しの間で少なくとも１つのパターンを識別するように構成されている。別の実施形態によれば、識別を外部処理によって行うことができ、その後にその識別を処理ユニット１０１に転送することができる。パターンは、一実施形態においては、２つ以上の関数が、ある所定のしきい値を超える関連性で再出現することである。しきい値は、特定の関数の再出現（re-occurrence）の特定の統計分析などに基づいて、経時的に動的に変更することができる。すなわち、例えば２つの関数が比較的頻繁に次々と実行されるとき、これら２つの関数の間の関連性のパターンが求められる。
【００２２】
処理ユニット１０１は、関数の実行を最適化するため、求められたパターンに基づいて計算グリッド１１０を構成する、または別の方法で操作する。関数の操作は、複数の処理（複製、拡張、縮小、インライン化、修正、またはこれらの組合せなどを含み、ただしこれらに限定されない）を通じて、達成することができる。
【００２３】
例としての一実施形態においては、再配置処理を実行するとき、処理ユニット１０１は、頻繁に互いを呼び出す２つの計算グループがグリッド１１０内で位相的に互いに近くに配置されるように、計算グリッド１１０を構成する。
【００２４】
別の実施形態においては、処理ユニット１０１は、それまでの使用頻度が高い計算グループのセットが多くのインスタンスに複製されるように、計算グリッド１１０を構成する。さらなる実施形態においては、計算グループの呼出し元は、複製された新しい計算グループの間で負荷分散する。
【００２５】
さらに別の実施形態においては、インライン化処理を実行するときには、処理ユニット１０１は、頻繁に互いを呼び出す２つの論理上の計算グループが、これら２つの論理上の計算グループを結合する１つの論理上の計算グループとして構成および再構成されるように、計算グリッド１１０を構成する。
【００２６】
さらに別の実施形態においては、拡張処理を実行するときには、処理ユニット１０１は、分岐およびループを含む論理上の計算グループが、インライン化処理および再配置処理を使用してループが展開された状態で再構成されるように、計算グリッド１１０を構成する。
【００２７】
さらに別の実施形態においては、縮小処理を実行するときには、処理ユニット１０１は、最適化された実行をもはや提供しない複製または拡張された計算グループが、再構成により解放されるように、計算グリッド１１０を構成する。縮小された計算グループの呼出し元は、別の計算グループに参照される。参照がなくなった時点で、計算グループを再構成により解放することができる。すなわち、その計算グループに関連付けられるリソースを解放することができる。
【００２８】
なお、処理ユニット１０１は、電力消費量、メモリアクセス、レイテンシ、ゲート使用回数（gate usage count）、およびスループット、のうちの少なくとも１つに関連する必要性に従って、より良好な性能が達成されるように計算グリッド１１０を構成することに留意されたい。
【００２９】
処理ユニット１０１は、１つまたは複数のハードウェア論理要素および論理回路として実施することができる。使用することのできるハードウェア論理要素のタイプの実例としては、例えば、以下に限定されないが、汎用マイクロプロセッサ、マイクロコントローラ、マルチコアＣＰＵ、ＦＰＧＡ、ＧＰＵ、ＡＳＩＣ、量子プロセッサ、光コンピューティングプロセッサ、ニューラルネットワークアクセラレータ、粗粒度再構成可能アーキテクチャ（ＣＧＲＡ：coarse-grained configurable architecture）、インテリジェンス処理ユニット（intelligence processing unit）など、または、情報の計算もしくは別の操作を実行することのできる任意の他のハードウェア論理要素、が挙げられる。いくつかの実施形態においては、アクセラレートさせる対象の計算装置は、処理ユニット１０１の役割を果たす。
【００３０】
いくつかの実施形態においては、メモリバウンドである関数を含む、メモリ的に厳しいコード断片の分析が実行される。このような関数は、計算装置のメモリの近くに再配置される計算グループにマッピングされる。このような分析は、Ｉ／Ｏ関連の動作に適用することもできる。例えば、ネットワークポート、記憶装置、ＰＣＩ−ｅ、ビデオセンサーなどに関する動作である。
【００３１】
次に図１Ｂを参照し、例としての一実装形態においては、計算グリッド１１０は、複数の論理素子１２０（まとめて１つ以上のＬＥ  １２０と称する、または個別にＬＥ  １２０と称する）を含む。一実施形態においては、ＬＥ  １２０は、論理演算子（ＡＮＤ、ＯＲ、ＮＯＴ、ＸＯＲなど）またはこれらの組合せとすることができる。さらに別の実施形態においては、ＬＥ  １２０を、ルックアップテーブル（ＬＵＴ）演算を実行するように構成することができる。さらに別の実施形態においては、ＬＥ  １２０を、高レベルの算術関数（固定小数点数または浮動小数点数の加算、減算、乗算、除算、指数など）を実行するように構成することができる。さらに別の実施形態においては、ＬＥ  １２０は、シフト演算（左シフト、右シフトなど）を実行することができる。
【００３２】
なお、計算グリッド１１０内の各ＬＥ  １２０は、上述した演算関数のいずれか１つ以上に対応するように構成することができることに留意されたい。いくつかの構成においては、第１のグループの１つ以上のＬＥ  １２０が第１の演算を実行することができ（例：論理演算子）、第２のグループの１つ以上のＬＥ  １２０が別の演算（例：シフト演算）を実行することができ、以下同様である。特定の構成においては、すべてのＬＥ  １２０が、同じ演算関数を実行することができる。
【００３３】
一実施形態においては、計算グリッド１１０は、マルチプレクサ、デマルチプレクサ、スイッチなど複数のデータルーティング中継部（data routing junction）１３０（まとめて１つ以上のＭＵＸ  １３０と称する、または個別にＭＵＸ  １３０と称する）をさらに含む。ＭＵＸ  １３０は、データを１つ以上のＬＥ  １２０にルーティングする、および１つ以上のＬＥ  １２０からのデータをルーティングする、ように構成されている。
【００３４】
計算グリッド１１０は、複数の計算グループから構成されている。各計算グループは、１つのＭＵＸ  １３０を介して接続されているＮ×Ｍ個のＬＥ  １２０を含む。「Ｎ」および「Ｍ」の値は、異なるかまたは等しい整数である。一実施形態においては、Ｍは、Ｎ−１に等しい（Ｍ＝Ｎ−１）。ＭＵＸ  １３０は、計算グリッド１１０内の２つの隣接する行からの１つ以上のＬＥ  １２０を接続している。
【００３５】
一実施形態においては、各ＭＵＸ  １３０は、リテラル値を維持するための複数のレジスタ（図示していない）を含む。ＭＵＸ  １３０は、実行される演算の条件、接続テーブル、およびコード有するようにさらに構成される。１つ以上のＭＵＸ  １３０は、バス（図示していない）を介して処理ユニット１０１によって構成される。
【００３６】
別の実施形態においては、計算グリッド１１０は、データ入力メッシュネットワーク（data input mesh network）の役割を果たす、フィーダ（feeder）（Ｆｒ）１４０のメッシュネットワークを含む。フィーダ１４０は、１つ以上のＬＥ  １２０によって処理するために入力（例えば関数のパラメータ、ただしこれに限定されない）を送り込むように構成されている。一実施形態においては、フィーダ１４０は、内部チップ相互接続（ＩＣＩ：internal chip interconnection）として実施される。
【００３７】
なお、計算グリッド１１０の操作は、アクセラレートさせる対象の計算装置の動作と同時にリアルタイムで実行されることを理解されたい。一実施形態によれば、操作は、１つまたは複数の関数を別の実行装置に移動させるステップをさらに含むことができ、すなわち、ある関数がアクセラレータ内に必要ではなく、したがってその関数がＣＰＵにおいて実行されるように再配置されることを決定することができる。
【００３８】
なお、１つ以上のＬＥ  １２０、１つ以上のＭＵＸ  １３０、および１つ以上のフィーダ  １４０は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せにおいて実施してよいことをさらに理解されたい。例示的な一実施形態においては、計算グリッド１１０（およびそのさまざまな素子）は、半導体デバイスとして実施される。別の実施形態においては、計算グリッド１１０は、一部が半導体デバイスとして実施され、一部がソフトウェア、ファームウェア、またはこれらの組合せとして実施される。一例として、より高い確率で、または多くの回数出現するものと判定される論理経路を、半導体デバイスにおいて実施することができ、その一方で、より低い確率で出現する、またはめったに出現しないと判定される論理経路を、ソフトウェアにおいて実施することができる。なお、このような実施形態は、同種の実施に頼る別の実施形態よりも、例えば実行時間や電力消費量における全体的な予測見返りコストが低くなりうることに留意されたい。論理経路は、処理ユニット１０１によって、または計算グリッド１１０内の専用ハードウェア素子によって検出することができる。
【００３９】
図２Ａおよび図２Ｂは、それぞれ、一実施形態に係る、特定の関数の再配置の例としてのシミュレーション２００Ａおよび２００Ｂである。再配置処理は、頻繁に互いを呼び出す２つの論理上の計算グループ（基本ブロックまたは関数など）が、計算グリッド内で互いに物理的に近くに位置するように、計算グリッドを構成または操作するステップを含む。
【００４０】
図２Ａおよび図２Ｂに示した例としてのシミュレーションには、複数のＬＥ  ２２０−１〜２２０−Ｎを有する計算グリッド２１０を示してあり、Ｎは１より大きいかまたは１に等しい整数である（グリッド２１０には、単に図面を簡略化する目的でＭＵＸは含まれていない）。計算グループが、射影グラフに基づいてそれぞれのＬＥ  ２２０にマッピングまたは射影されている。ＬＥ  ２２０−１，２２０−２，２２０−３を含む計算グループが、ＬＥ  ２２０−４，２２０−５，２２０−６を含む計算グループに関連付けられることを識別した時点で、図２Ｂに示したように、ＬＥ  ２２０−１，２２０−２，２２０−３を含む計算グループが、ＬＥ  ２２０−４，２２０−５，２２０−６を含む計算グループの近傍に再配置される。
【００４１】
図２Ｃおよび図２Ｄは、それぞれ、特定の関数の複製の、例としてのシミュレーション２００Ｃおよび２００Ｄである。複製処理は、計算の速度を高め、かつボトルネックを広げる目的で、頻繁に呼び出される計算グループにマッピングされている１つ以上のＬＥ  ２２０がグリッド２１０上で何度か複製されるように、計算グリッド２１０を構成するステップを含む。
【００４２】
例としての一実施形態においては、複製処理は、新たに複製されたインスタンスを対象とする負荷分散処理をさらに含むことができ、これは例えば、呼出し元からの元のブロックの参照を、呼出し元がすべての複製を均一に呼び出すように再構成することによる。別の例としては、呼出し元からの参照が、複製を負荷分散する、新たに構成可能なＭＵＸに再構成される。
【００４３】
頻繁に呼び出される関数の計算グループを複製することによって計算グリッド２１０を最適化することができると判定されたとき、そのような各グループが複製され、元のグループから遠く離して再配置される。図２Ｃおよび図２Ｄに示した例では、ＬＥ  ２２０−４，２２０−５，２２０−６を含む計算グループが複製される。複製されたグループは、このような関数の呼出しを強化する目的で、計算グリッド２１０上で元のグループのＬＥから遠く離して配置される。このことは図２Ｄに示してあり、図２Ｄは、図２Ｃに示した配置との比較における、複製されたグループを含む。複製されたグループを、他のグループより低い頻度で呼び出される関数のグループに置き換えることができる。これに代えて、複製された論理計算要素が性能に必要ないものと識別されたとき、操作は縮小処理、すなわち複製解放処理を含むことができ、したがってグリッドから削除される。
【００４４】
図３は、一実施形態に係る、構成可能な処理アーキテクチャにおいて動作する計算グリッドを実行時に最適化する方法を示す、例としての流れ図３００である。Ｓ３１０においては、少なくとも１つの関数を実行するための複数の要求を受け取る。これらの要求は、演算を実行するためにインタフェースを介して受け取る呼出しとすることができる。一例として、要求された演算は、例えばプログラムメモリ（例：図１Ｂのプログラムメモリ１０２）からのメモリのロードとすることができる。
【００４５】
Ｓ３２０においては、受け取ったシステムコールを分析して、２つ以上のシステムコールの間で少なくとも１つのパターンが識別されるかをチェックする。この識別は、呼出しを次々と受け取ったことの識別、または呼出しを次々と受け取らなかったことの識別とすることができる。一例として、パターンは、２つの関数が次々に実行されることを示す。このようなパターンが識別される場合、実行はＳ３３０に続き、そうでない場合、実行はＳ３１０に戻る。
【００４６】
Ｓ３３０においては、識別されたパターンを分析して、計算グリッドの修正または再構成が必要であるかを判定する。例えば、分析は、例えばある関数を実行するためにすでに割り当てられた計算グループがグリッド内に存在することをパターンが示しているか判定するステップを含む。別の例としては、分析は、関数の再出現をパターンが示しているか判定するステップを含む。別の例としては、分析は、１つの関数が別の関数を呼び出すことをパターンが示しているか判定する。
【００４７】
Ｓ３４０においては、分析に基づいて、計算グリッドの操作が必要であるかをチェックする。必要である場合、実行はＳ３５０に続く。そうでない場合、実行はＳ３６０に続く。
【００４８】
Ｓ３５０においては、受け取った呼出しによって呼び出される関数を最適化するために、計算グリッドを修正する、または別の方法で再構成する。計算グリッドの修正または再構成の一部として実行することのできる処理のさまざまな例は、上に説明してある。
【００４９】
Ｓ３６０においては、さらなる要求を受け取っているかをチェックし、受け取っている場合、実行はＳ３１０に続き、そうでない場合、実行は終了する。
【００５０】
本明細書に開示されている実施形態は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの任意の組合せとして実施することができる。任意の適切なアーキテクチャを備えたマシンに、アプリケーションプログラムをアップロードして実行することができる。マシンは、１つまたは複数の中央処理装置（「ＣＰＵ」）、メモリ、および入力／出力インタフェースなどのハードウェアを有するコンピュータプラットフォーム上に実施されることが好ましい。
【００５１】
コンピュータプラットフォームは、オペレーティングシステムおよびマイクロ命令コードをさらに含むことができる。本明細書に記載されているさまざまな処理および関数は、ＣＰＵ（そのようなコンピュータまたはプロセッサが明示的に示されているか否かを問わない）によって実行することのできるマイクロ命令コードの一部またはアプリケーションプログラムの一部のいずれか、またはこれらの任意の組合せとすることができる。
【００５２】
これに加えて、コンピュータプラットフォームには、追加のネットワークファブリック記憶装置（network fabric storage unit）や印刷装置など、さまざまな他の周辺装置を接続することができる。さらに、非一過性のコンピュータ可読媒体は、一過性の伝搬信号を除く任意のコンピュータ可読媒体である。
【００５３】
本明細書に記載されているすべての例、および条件を表す語（conditional language）は、この技術分野を発展させるために本発明者によって提供される本開示およびコンセプトの原理を読み手が理解できるように支援するための教示目的を意図しており、そのような具体的に記載されている例および条件に限定されないものと解釈されたい。
【００５４】
なお、本明細書において「第１の」、「第２の」などの指定を使用して要素が言及されている場合、一般的には、それによって、それらの要素の数量または順序が制限されることはない。そうではなく、本明細書では、これらの指定は、一般に２つ以上の要素、または要素の２つ以上のインスタンスを区別する簡便な方法として使用されている。したがって、第１の要素および第２の要素という表現は、２つの要素のみを採用してよいことを意味するのではなく、何らかの形で第１の要素が第２の要素に先行しなければならないことを意味する。また、特に明記されていない限り、要素のセットは、１つまたは複数の要素を含む。
【００５５】
本明細書において使用されているとき、後ろに項目のリストが続く句「の少なくとも１つ」は、リストされている項目のいずれかを個別に利用することができる、またはリストされている項目の２つ以上の任意の組合せを利用できることを意味する。例えば、システムが、「Ａ、Ｂ、Ｃの少なくとも１つ」を含むものと説明されている場合、そのシステムは、Ａのみを含む、Ｂのみを含む、Ｃのみを含む、ＡとＢを組合せで含む、ＢとＣを組合せで含む、ＡとＣを組合せで含む、またはＡとＢとＣを組合せで含む、ことができる。
【００５６】
本出願は、米国仮特許出願第６２／５４０，８４９号（出願日：２０１７年８月３日）および米国仮特許出願第６２／５５８，０９０号（出願日：２０１７年９月１３日）の利益を主張し、これらの文書の内容は参照により本明細書に組み込まれている。
【図１Ａ】
2020530175.tif 000003
【図１Ｂ】
2020530175.tif 000004
【図２Ａ】
2020530175.tif 000005
【図２Ｂ】
2020530175.tif 000006
【図２Ｃ】
2020530175.tif 000007
【図２Ｄ】
2020530175.tif 000008
【図３】
2020530175.tif 000009
【国際調査報告】
2020530175.tif 000010