(57)【要約】      （修正有）【課題】加速利益推定に関するデバイス、方法、およびコンピュータ可読媒体を含む技術を提供する。【解決手段】データセンタ２０５は、プログラマブルハードウェアアクセラレータ（ＰＨＡ）から利益を得ることが可能なアプリケーションをアプリケーション選択器２１４で識別して、その加速バージョン２３２、すなわち、１つまたは複数の識別されたＰＨＡ１７１を使用するバージョンを動作させて、加速バージョンのパフォーマンスを基準バージョン２３１のパフォーマンス、すなわち、１つまたは複数の識別されたＰＨＡを使用しないバージョンとパフォーマンス比較器２２１で比較することによって、識別されたアプリケーションを試験することができる。データセンタは、比較結果（パフォーマンス利益推定データ２５２）をデータセンタカスタマ２０１に報告して、ＰＨＡのカスタマ採用を奨励することができる。【選択図】図２
2014191828.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルハードウェア加速利益を推定するための方法であって、
データセンタ内の１つまたは複数のコンピューティングデバイスによって、データセンタカスタマに関する１つまたは複数のタスクを実行するためにアプリケーションの基準バージョンを実行することと、
前記アプリケーションの前記基準バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを識別することであって、前記識別されたプログラマブルハードウェアアクセラレータが前記アプリケーションの前記基準バージョンを実行する間に利用されない、識別することと、
前記１つまたは複数のコンピューティングデバイスによって、前記アプリケーションの前記基準バージョンによって実行される前記１つまたは複数のタスクを実行するために前記アプリケーションの加速バージョンを自動的に実行することであって、前記アプリケーションの前記加速バージョンが前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用によって加速される、実行することと、
前記アプリケーションの前記加速バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つまたは複数を測定することと、
前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の実行時間の差、実行コストの差、または実行エネルギー消費量の差のうちの１つもしくは複数を計算することと、
実行時間の前記差、実行コストの前記差、または実行エネルギー消費量の前記差のうちの１つもしくは複数を前記データセンタカスタマに提供することと
を含む方法。
【請求項２】
前記データセンタ内のプログラマブルハードウェアリソースが前記データセンタカスタマによる使用のために利用可能であるかどうかを判断することをさらに含む、請求項１に記載の方法。
【請求項３】
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを前記識別することが、プログラマブルハードウェアアクセラレータによって少なくとも部分的に置換可能なセグメントに関する、前記アプリケーション内のコードを解析することを含む、請求項１に記載の方法。
【請求項４】
前記アプリケーションの前記セグメントを少なくとも部分的に置換するためのプログラマブルハードウェアアクセラレータをプログラマブルハードウェアアクセラレータのライブラリから取り出すことをさらに含む、請求項３に記載の方法。
【請求項５】
前記アプリケーションの前記セグメントを少なくとも部分的に置換するためのプログラマブルハードウェアアクセラレータを生成することをさらに含む、請求項３に記載の方法。
【請求項６】
前記アプリケーション内のコードを前記解析することが、フロー抽出プロセスを含む、請求項３に記載の方法。
【請求項７】
前記アプリケーション内のコードを前記解析することが、ハッシュ比較プロセスを含む、請求項３に記載の方法。
【請求項８】
アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとによって生成された出力を比較して、前記比較された出力が実質的に同一であるかどうかを判断することをさらに含む、請求項１に記載の方法。
【請求項９】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンによって実行される非加速セグメントと並行して、前記アプリケーションの加速セグメントを動作させるために、前記アプリケーションの前記基準バージョンをフォーキングすることを含む、請求項１に記載の方法。
【請求項１０】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンを実行することと同時に実行される、請求項１に記載の方法。
【請求項１１】
前記アプリケーションの前記基準バージョンを前記測定することと、前記アプリケーションに関するプログラマブルハードウェアアクセラレータを前記識別することと、前記アプリケーションの前記加速バージョンを前記測定することと、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を前記計算することと、前記差を前記データセンタカスタマに前記提供することとが自動的に実行される、請求項１に記載の方法。
【請求項１２】
前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとを実行する複数のインスタンスに対応する、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を集約することをさらに含み、差を前記データセンタカスタマに前記提供することが、前記複数のインスタンスを通して差を要約した報告を提供することを含む、請求項１に記載の方法。
【請求項１３】
前記アプリケーションの前記加速バージョンを実行する間に前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用を検証するために、前記１つまたは複数のコンピューティングデバイスのデバイス実行履歴を検査することをさらに含む、請求項１に記載の方法。
【請求項１４】
プロセッサによって実行されるとき、前記プロセッサに、
データセンタカスタマに関する１つもしくは複数のタスクを実行するためにアプリケーションの基準バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを識別することであって、前記識別されたプログラマブルハードウェアアクセラレータが前記アプリケーションの前記基準バージョンを実行する間に利用されない、識別することと、
前記アプリケーションの加速バージョンを自動的に実行して、前記アプリケーションの前記基準バージョンによって実行される前記１つまたは複数のタスクを実行することであって、前記アプリケーションの前記加速バージョンが、前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用によって加速される、実行することと、
前記アプリケーションの前記加速バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の実行時間の差、実行コストの差、または実行エネルギー消費量の差のうちの１つもしくは複数を計算することと、
実行時間の前記差、実行コストの前記差、または実行エネルギー消費量の前記差のうちの１つもしくは複数を前記データセンタカスタマに提供することと
を行わせるプログラマブルハードウェア加速利益推定器を実装する、プロセッサによって実行可能なコンピュータ実行可能命令を有する
非一時的コンピュータ可読記憶媒体。
【請求項１５】
前記プロセッサに、前記データセンタ内のプログラマブルハードウェアリソースが前記データセンタカスタマによる使用のために利用可能であるかどうかを判断させる命令をさらに含む、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項１６】
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを前記識別することが、プログラマブルハードウェアアクセラレータによって少なくとも部分的に置換可能なセグメントに関する、前記アプリケーション内のコードを解析することを含む、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記プロセッサに、前記アプリケーションの前記セグメントを少なくとも部分的に置換するためのプログラマブルハードウェアアクセラレータをプログラマブルハードウェアアクセラレータのライブラリから取り出させる命令をさらに含む、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記プロセッサに、前記アプリケーションの前記セグメントを少なくとも部分的に置換するためのプログラマブルハードウェアアクセラレータを生成させる命令をさらに含む、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
前記アプリケーション内のコードを前記解析することが、フロー抽出プロセスを含む、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記アプリケーション内のコードを前記解析することが、ハッシュ比較プロセスを含む、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項２１】
前記プロセッサに、アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとによって生成された出力を比較して、前記比較された出力が実質的に同一であるかどうかを判断させる命令をさらに含む、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項２２】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンによって実行される非加速セグメントと並行して、前記アプリケーションの加速セグメントを動作させるために、前記アプリケーションの前記基準バージョンをフォーキングすることを含む、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項２３】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンを実行することと同時に実行される、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項２４】
前記アプリケーションの前記基準バージョンを前記測定することと、前記アプリケーションに関するプログラマブルハードウェアアクセラレータを前記識別することと、前記アプリケーションの前記加速バージョンを前記測定することと、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を前記計算することと、前記差を前記データセンタカスタマに前記提供することとが自動的に実行される、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項２５】
前記プロセッサに、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとを実行する複数のインスタンスに対応する、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を集約させる命令をさらに含み、差を前記データセンタカスタマに前記提供することが、前記複数のインスタンスを通して差を要約した報告を提供することを含む、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項２６】
前記プロセッサに、前記アプリケーションの前記加速バージョンを実行する間に前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用を検証するために、前記１つまたは複数のコンピューティングデバイスのデバイス実行履歴を検査させる命令をさらに含む、請求項１４に記載の非一時的コンピュータ可読記憶媒体。
【請求項２７】
プログラマブルハードウェア加速利益を推定することを行うように構成されたコンピューティングデバイスであって、
プロセッサと、
メモリと、
前記メモリ内に記憶され、前記プロセッサによって実行可能なプログラマブルハードウェア加速利益推定器であって、
データセンタカスタマに関する１つもしくは複数のタスクを実行するためにアプリケーションの基準バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを識別することであって、前記識別されたプログラマブルハードウェアアクセラレータが前記アプリケーションの前記基準バージョンを実行する間に利用されていない、識別することと、
前記アプリケーションの加速バージョンを自動的に実行して、前記アプリケーションの前記基準バージョンによって実行される前記１つまたは複数のタスクを実行することであって、前記アプリケーションの前記加速バージョンが、前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用によって加速される、実行することと、
前記アプリケーションの前記加速バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の実行時間の差、実行コストの差、または実行エネルギー消費量の差のうちの１つもしくは複数を計算することと、
実行時間の前記差、実行コストの前記差、または実行エネルギー消費量の前記差のうちの１つもしくは複数を前記データセンタカスタマに提供することと
を行うように構成されたプログラマブルハードウェア加速利益推定器と
を備えたコンピューティングデバイス。
【請求項２８】
前記プログラマブルハードウェア加速利益推定器が、前記データセンタ内のプログラマブルハードウェアリソースが前記データセンタカスタマによる使用のために利用可能であるかどうかを判断することを行うように構成された、請求項２７に記載のコンピューティングデバイス。
【請求項２９】
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを前記識別することが、プログラマブルハードウェアアクセラレータによって少なくとも部分的に置換可能なセグメントに関する、前記アプリケーション内のコードを解析することを含む、請求項２７に記載のコンピューティングデバイス。
【請求項３０】
前記プログラマブルハードウェア加速利益推定器が、前記アプリケーションの前記セグメントを少なくとも部分的に置換するためのプログラマブルハードウェアアクセラレータをプログラマブルハードウェアアクセラレータのライブラリから取り出すことを行うように構成された、請求項２８に記載のコンピューティングデバイス。
【請求項３１】
前記プログラマブルハードウェア加速利益推定器が、前記アプリケーションの前記セグメントを少なくとも部分的に置換するためのプログラマブルハードウェアアクセラレータを生成することを行うように構成された、請求項２８に記載のコンピューティングデバイス。
【請求項３２】
前記アプリケーション内のコードを前記解析することが、フロー抽出プロセスを含む、請求項２８に記載のコンピューティングデバイス。
【請求項３３】
前記アプリケーション内のコードを前記解析することが、ハッシュ比較プロセスを含む、請求項２８に記載のコンピューティングデバイス。
【請求項３４】
前記プログラマブルハードウェア加速利益推定器が、アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとによって生成された出力を比較して、前記比較された出力が実質的に同一であるかどうかを判断することを行うように構成された、請求項２７に記載のコンピューティングデバイス。
【請求項３５】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンによって実行される非加速セグメントと並行して、前記アプリケーションの加速セグメントを動作させるために、前記アプリケーションの前記基準バージョンをフォーキングすることを含む、請求項２７に記載のコンピューティングデバイス。
【請求項３６】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンを実行することと同時に実行される、請求項２７に記載のコンピューティングデバイス。
【請求項３７】
前記アプリケーションの前記基準バージョンを前記測定することと、前記アプリケーションに関するプログラマブルハードウェアアクセラレータを前記識別することと、前記アプリケーションの前記加速バージョンを前記測定することと、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を前記計算することと、前記差を前記データセンタカスタマに前記提供することとが自動的に実行される、請求項２７に記載のコンピューティングデバイス。
【請求項３８】
前記プログラマブルハードウェア加速利益推定器が、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとを実行する複数のインスタンスに対応する、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を集約することを行うように構成され、差を前記データセンタカスタマに前記提供することが、前記複数のインスタンスを通して差を要約した報告を提供することを含む、請求項２７に記載のコンピューティングデバイス。
【請求項３９】
前記プログラマブルハードウェア加速利益推定器が、前記アプリケーションの前記加速バージョンを実行する間に前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用を検証するために、前記１つまたは複数のコンピューティングデバイスのデバイス実行履歴を検査することを行うように構成された、請求項２７に記載のコンピューティングデバイス。
【請求項４０】
データセンタ内のプログラマブルハードウェア加速利益を推定するための方法であって、
前記データセンタ内の１つまたは複数のコンピューティングデバイスによって実行される、１つまたは複数のアプリケーションのカスタマ活性加速を提供することであって、前記カスタマ活性加速が、プログラマブルハードウェアアクセラレータを用いて、１つまたは複数のアプリケーションタスクを実行する、提供することと、
前記カスタマ活性加速がデータセンタカスタマによって活性化されないアプリケーションを選択することと、
前記カスタマ活性加速なしに、前記アプリケーションの基準バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記１つまたは複数のコンピューティングデバイスによって、前記選択されたアプリケーションの加速バージョンを自動的に実行することと、
前記アプリケーションの前記加速バージョンを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することと、
前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の実行時間の差、実行コストの差、または実行エネルギー消費量の差を前記データセンタカスタマに提供することと
を含む方法。
【請求項４１】
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを識別することであって、前記プログラマブルハードウェアアクセラレータが前記アプリケーションの前記基準バージョンによって使用されない、識別することをさらに含む、請求項４０に記載の方法。
【請求項４２】
前記アプリケーションに関する１つまたは複数のプログラマブルハードウェアアクセラレータを前記識別することが、プログラマブルハードウェアアクセラレータによって少なくとも部分的に置換可能なセグメントに関する、前記アプリケーション内のコードを解析することを含む、請求項４１に記載の方法。
【請求項４３】
アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとによって生成された出力を比較して、前記比較された出力が実質的に同一であるかどうかを判断することをさらに含む、請求項４０に記載の方法。
【請求項４４】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンによって実行される非加速セグメントと並行して、前記アプリケーションの加速セグメントを実行するために、前記アプリケーションの前記基準バージョンをフォーキングすることを含む、請求項４０に記載の方法。
【請求項４５】
前記アプリケーションの前記加速バージョンを前記自動的に実行することが、前記アプリケーションの前記基準バージョンを実行することと同時に実行される、請求項４０に記載の方法。
【請求項４６】
前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとを実行する複数のインスタンスに対応する、前記アプリケーションの前記基準バージョンと前記アプリケーションの前記加速バージョンとの間の差を集約することをさらに含み、差を前記データセンタカスタマに前記提供することが、前記複数のインスタンスを通して差を要約した報告を提供することを含む、請求項４０に記載の方法。
【請求項４７】
前記アプリケーションの前記加速バージョンを実行する間に前記１つまたは複数の識別されたプログラマブルハードウェアアクセラレータの使用を検証するために、前記１つまたは複数のコンピューティングデバイスのデバイス実行履歴を検査することをさらに含む、請求項４０に記載の方法。
【請求項４８】
前記データセンタ内のプログラマブルハードウェアリソースが前記データセンタカスタマによる使用のために利用可能であるかどうかを判断することをさらに含む、請求項４０に記載の方法。
【請求項４９】
前記カスタマ活性加速がデータセンタカスタマによって活性化されないアプリケーションを前記選択することが、識別されたアプリケーションタイプを有するアプリケーションまたは識別されたアプリケーションセグメントタイプを含むアプリケーションを選択することを含み、前記識別されたアプリケーションタイプまたは前記識別されたアプリケーションセグメントタイプが、前記アプリケーションを選択するのに先立って、少なくとも１つの識別されたプログラマブルハードウェアアクセラレータで動作可能であるとして確定される、請求項４０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に別段の指定がない限り、本項に記載される材料は、本出願の請求項に対する先行技術ではなく、本項に包含することにより先行技術と認められない。
【背景技術】
【０００２】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）など、プログラマブルハードウェアの使用は、コンピューティングデバイスのエネルギー効率および処理速度にかなりの利益を生み出す可能性がある。ＦＰＧＡは、ある種のタイプの動作、たとえば、中でも、ビデオの復号動作および暗号化動作／解読動作の加速を専門とするプログラマブルハードウェアアクセラレータ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｏｒｓ）（ＰＨＡ）を用いてプログラム可能である。ＰＨＡは、多くの場合、汎用プロセッサよりも、それらの専門動作をより効率的に処理することができる。コンピュータシステムは、ＰＨＡを使用して、それらのコンピュータシステムがプログラムされる専用動作を処理するように適合可能であるのに対して、他のコンピューティングタスクは、コンピュータの中央処理装置（ＣＰＵ）内のプロセッサなど、汎用プロセッサによって処理可能である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
データセンタに配備されたＰＨＡは、データセンタカスタマによって実行されるアプリケーションのコンピューティング効率を高めることができる。データセンタとデータセンタカスタマは両方とも、より低いデータセンタコストおよびより高速のパフォーマンスの形で、ＰＨＡの採用から利益を得る立場にある。しかし、ＰＨＡの潜在的な利益に精通していないデータセンタカスタマは、カスタマとデータセンタとにとって不利なことに、ＰＨＡを採用することに手間取る場合がある。
【課題を解決するための手段】
【０００４】
本開示は、一般に、加速利益推定（ａｃｃｅｌｅｒａｔｉｏｎ  ｂｅｎｅｆｉｔ  ｅｓｔｉｍａｔｉｏｎ）に関するデバイス、方法、およびコンピュータ可読媒体を含む技術を記載する。いくつかの例示的な方法は、たとえば、データセンタ内の（１つもしくは複数の）コンピューティングデバイスによって、データセンタカスタマに関するタスクを実行するためにアプリケーションの基準バージョンを実行すること、アプリケーションの基準バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量を測定すること、アプリケーションに関するＰＨＡを識別することであって、識別されたＰＨＡがアプリケーションの基準バージョンの実行の間に利用されない、識別すること、（１つもしくは複数の）コンピューティングデバイスによって、アプリケーションの基準バージョンによって実行されるタスクを実行するためにアプリケーションの加速バージョンを自動的に実行することであって、アプリケーションの加速バージョンが識別されたＰＨＡの使用によって加速される、自動的に実行すること、アプリケーションの加速バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量を測定すること、アプリケーションの基準バージョンとアプリケーションの加速バージョンとの間の実行時間、実行コスト、および／または実行エネルギー消費量の差を計算すること、ならびに／あるいは計算された差をデータセンタカスタマに提供することによって、データセンタ内のプログラマブルハードウェア加速利益を推定することに関する場合がある。
【０００５】
いくつかの例示的な方法は、たとえば、データセンタ内の（１つまたは複数の）コンピューティングデバイスによって実行されるアプリケーションのカスタマ活性加速（ｃｕｓｔｏｍｅｒ−ａｃｔｉｖａｔｅｄ  ａｃｃｅｌｅｒａｔｉｏｎ）を提供することであって、カスタマ活性加速がＰＨＡを用いてアプリケーションタスクを実行する、提供することと、カスタマ活性加速がデータセンタカスタマによって活性化されないアプリケーションを選択することと、カスタマ活性加速なしに、アプリケーションの基準バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量を測定することと、（１つもしくは複数の）コンピューティングデバイスによって、選択されたアプリケーションの加速バージョンを自動的に実行することと、アプリケーションの加速バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量を測定することと、アプリケーションの基準バージョンとアプリケーションの加速バージョンとの間の実行時間の差、実行コストの差、もしくは実行エネルギー消費量の差をデータセンタカスタマに提供することとによって、データセンタ内のプログラマブルハードウェア加速利益を推定することに関する場合がある。
【０００６】
データセンタ、コンピューティングデバイス、および本明細書に記載されるさまざまな技術を実装する命令を有するコンピュータ可読媒体がやはり開示される。例示的なコンピュータ可読媒体は、プロセッサによって実行されるとき、プロセッサに本明細書で提供されるさまざまな方法のうちのいずれかの組み合わせを実行させる、プロセッサによって実行可能なコンピュータ実行可能命令を有する非一時的コンピュータ可読記憶媒体を備えることが可能である。例示的なデータセンタおよび／またはコンピューティングデバイスは、本明細書に記載される方法を実行することを行うように構成されたプロセッサ、メモリ、ならびにソフトウェアコンポーネントおよび／またはハードウェアコンポーネントを備えたサーバを含むことが可能である。
【０００７】
前述の要約は、単なる例示であり、決して限定的であるとことが意図されない。上に記載された例示的な態様、実施形態、および特徴に加えて、図面および以下の詳細な記載を参照することによってさらなる態様、実施形態、および特徴が明らかになるであろう。
【０００８】
本開示の前述の特徴およびその他の特徴は、添付の図面と共に、以下の記載および添付の請求項からより十分に明瞭になるであろう。これらの図面は本開示によるいくつかの実施形態だけを示し、したがって、その範囲を限定すると見なされないことを理解して、本開示は、添付の図面を使用することによって、さらに具体的かつ詳細に記載される。
【図面の簡単な説明】
【０００９】
【図１】加速利益推定に関して使用するように構成された、ある例示的なコンピューティングデバイスを示すブロック図である。
【図２】ＰＨＡ利益推定用に構成された、あるデータセンタを示すブロック図である。
【図３】利益推定マネージャを実装する、あるデバイスの一例としての、あるコンピューティングデバイスのブロック図である。
【図４】あるアプリケーションのある加速バージョンを構築するためのある例示的な方法を示す流れ図である。
【図５】プログラマブルハードウェア加速利益を推定するためのある例示的な方法を示す流れ図である。
【図６】すべて本開示の少なくともいくつかの実施形態に従って配列された（ａｒｒａｎｇｅｄ）、プログラマブルハードウェア加速利益を推定するためのある例示的な方法を示す流れ図である。
【発明を実施するための形態】
【００１０】
以下の詳細な記載で、本明細書の一部を形成する添付の図面が参照される。文脈に別段の明記がない限り、図面において、類似の記号は、概して、類似のコンポーネントを識別する。詳細な記載、図面、および請求項において記載される例示的な実施形態は、限定的であることを意味しない。ここに提示される主題の趣旨または範囲から逸脱せずに、その他の実施形態を利用することが可能であり、その他の変更を行うことが可能である。本明細書で一般に記載され、図面において例示される、本開示のこれらの態様を、幅広い異なる構成で配列、置換、結合、および設計することが可能であり、それらのすべてが明示的に企図され、本開示の一部を形成することが、容易に理解されよう。
【００１１】
本開示は、一般に、中でも、加速利益推定に関する、方法、デバイス、システム、および／またはそれらの中に配備されるコンピュータ可読媒体を含む技術を描写する。いくつかの例では、データセンタは、ＰＨＡから利益を得ることが可能なアプリケーションを識別して、その加速バージョン、すなわち、１つまたは複数の識別されたＰＨＡを使用するバージョンを動作させて（実行して）、加速バージョンのパフォーマンスを基準バージョンのパフォーマンス、すなわち、１つまたは複数の識別されたＰＨＡを使用しないバージョンと比較することによって、識別されたアプリケーションを試験することができる。データセンタは、比較結果をデータセンタカスタマに報告して、ＰＨＡの採用をカスタマに奨励することができる。
【００１２】
上に記述されたように、いくつかの例示的な方法は、たとえば、データセンタ内の（１つもしくは複数の）コンピューティングデバイスによって、アプリケーションの基準バージョンを実行して、データセンタカスタマに関するタスクを実行すること、アプリケーションの基準バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量を測定すること、アプリケーションに関するＰＨＡを識別することであって、識別されたＰＨＡがアプリケーションの基準バージョンを実行する間に利用されない、識別すること、（１つもしくは複数の）コンピューティングデバイスによって、アプリケーションの加速バージョンを自動的に実行して、アプリケーションの基準バージョンによって実行されるタスクを実行することであって、アプリケーションの加速バージョンが、識別されたＰＨＡの使用によって加速される、実行すること、アプリケーションの加速バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量を測定すること、アプリケーションの基準バージョンとアプリケーションの加速バージョンとの間の実行時間、実行コスト、および／または実行エネルギー消費量の差を計算すること、ならびに／あるいは計算された差をデータセンタカスタマに提供することによって、データセンタ内のプログラマブルハードウェア加速利益を推定することに関する場合がある。
【００１３】
いくつかの実施形態では、方法は、データセンタ内のプログラマブルハードウェアリソースがデータセンタカスタマによる使用のために利用可能であるかどうかを判断することを含むことが可能である。たとえば、方法は、データセンタ内のプログラマブルハードウェアリソースの可用性を加速利益推定の条件とすることができる。プログラマブルハードウェアリソースが利用可能であるとき、加速利益推定を進めることが可能であり、それによって、ＰＨＡの採用を奨励することができる。プログラマブルハードウェアリソースが利用可能でないとき、方法は、プログラマブルハードウェアリソースが利用可能になるときまでなど、加速利益推定を延期することができる。
【００１４】
いくつかの実施形態では、方法は、アプリケーションのカスタマ活性加速を提供することであって、カスタマ活性加速がＰＨＡを用いてアプリケーションタスクを実行する、提供することを含むことが可能である。たとえば、ウェブベースのユーザインターフェース（ＵＩ）は、カスタマアプリケーション加速選択を受信することを行うように構成可能であり、ＵＩを経由して受信されたカスタマアプリケーション加速選択を実装するようにデータセンタを適合することが可能である。方法は、カスタマがアプリケーションを加速することを選択してないシナリオ、特に、かなりの加速利益が可能であるシナリオにおいて加速利益を推定することが可能である。たとえば、方法は、カスタマ活性加速がデータセンタカスタマによって活性化されないアプリケーションを選択することと、カスタマ活性加速なしに、アプリケーションの基準バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量のうちの１つもしくは複数を測定することと、選択されたアプリケーションの加速バージョンを自動的に実行することと、アプリケーションの加速バージョンを実行するための実行時間、実行コスト、および／または実行エネルギー消費量のうちの１つもしくは複数を測定することと、アプリケーションの基準バージョンとアプリケーションの加速バージョンとの間の実行時間、実行コスト、および／または実行エネルギー消費量の差をデータセンタカスタマに提供することとを含むことが可能である。カスタマ活性加速が活性化されていない、選択されたアプリケーションは、たとえば、識別されたアプリケーションタイプを有するアプリケーション、または、アプリケーションを選択するのに先立って、少なくとも１つの識別されたＰＨＡで動作可能であるとして確定された、識別されたアプリケーションセグメントタイプを含むアプリケーションを含むことが可能である。アプリケーションタイプ／アプリケーションセグメントタイプは、たとえば、アプリケーションタイプを用いた履歴経験から、実行時間、実行コスト、および／または実行エネルギー消費量節約における５％以上の利益など、かなりの加速利益を得るとして知られる場合がある。
【００１５】
いくつかの実施形態では、アプリケーションに関する１つまたは複数のＰＨＡを識別することは、ＰＨＡによって少なくとも部分的に置換可能なセグメントに関する、そのアプリケーション内のコードを解析することを含むことが可能である。アプリケーション内のコードを解析することは、たとえば、フロー抽出プロセスおよび／またはハッシュ比較プロセスを含むことが可能である。置換可能なコードセグメントが識別されたとき、方法は、そのセグメントを少なくとも部分的に置換するためのＰＨＡをＰＨＡのライブラリから取り出すことが可能であるか、または方法は、そのセグメントを少なくとも部分的に置換するためのＰＨＡを生成することが可能である。
【００１６】
いくつかの実施形態は、アプリケーションの基準バージョンとアプリケーションの加速バージョンとによって生成された出力を比較して、比較された出力が実質的に同一であるかどうかを判断することを含むことが可能である。出力比較は、意図されたように機能しないＰＨＡの勧告および／または採用を防ぐ際に有用な場合がある。いくつかの実施形態は、たとえば、識別されたＰＨＡが実際に測定可能な利益の達成に関連することを確実にする目的で、アプリケーションの加速バージョンの実行の間に識別されたＰＨＡの使用を検証するために、コンピューティングデバイスのデバイス実行履歴を検査することを含むことが可能である。
【００１７】
いくつかの実施形態では、アプリケーションの加速バージョンを自動的に実行することは、基準バージョンに加えて、加速バージョンの「完全な」インスタンスを動作させることを含むことが可能である。いくつかの実施形態は、基準アプリケーションの非加速セグメントと並行して加速セグメントを実行するために、アプリケーション実行をフォーキング（ｆｏｒｋｉｎｇ）することによってリソースを保存することができる。たとえば、アプリケーションの加速バージョンを自動的に実行することは、アプリケーションの基準バージョンと共に実行される非加速セグメントと並行して、アプリケーションの加速セグメントを動作させるために、アプリケーションの基準バージョンをフォーキングすることを含むことが可能である。
【００１８】
いくつかの実施形態では、方法は、たとえば、データセンタカスタマによるアプリケーションの基準バージョンの使用に関して、加速利益推定をリアルタイムで実行することができる。アプリケーションの加速バージョンを自動的に実行することは、アプリケーションの基準バージョンを実行することと同時に実行可能である。いくつかの実施形態では、より低いデータセンタ需要期間中に、たとえば、夜間に、またはその他の低い需要期間中に加速利益推定を行うことが可能である。アプリケーションの加速バージョンを自動的に実行することは、基準バージョンを実行するのとは異なる時間に、たとえば、低いデータセンタ需要期間中に実行可能であり、パフォーマンスをアプリケーションの基準バージョンの先の実行のパフォーマンス測定値と比較することが可能である。あるいは、たとえば、アプリケーションの基準バージョンと加速バージョンの両方に関するカスタマ使用事例をシミュレートすることによって、より低いデータセンタ需要期間中にアプリケーションの基準バージョンと加速バージョンの両方を同時に実行することが可能である。
【００１９】
実施形態は、本明細書で議論される動作のうちのいずれかを自動化することができる。たとえば、データセンタ内のプログラマブルハードウェアリソースが利用可能であるかどうか／加速利益推定を実行するかどうかを判断することは、スケジュールに従って自己開始することができ、それによって、人間のオペレータによる開始をなくす。どのアプリケーションが加速利益推定に関する候補であるかを識別すること、アプリケーションの基準バージョンを測定すること、アプリケーションに関するＰＨＡを識別すること、アプリケーションの加速バージョンを実行すること、アプリケーションの加速バージョンを測定すること、アプリケーションの基準バージョンとアプリケーションの加速バージョンとの間の差を計算すること、および／または差をデータセンタカスタマに提供することは、たとえば、プログラマブルハードウェアリソースがデータセンタ内で利用可能であることを判断することに応答して、本明細書に記載されるようなさまざまなその他の動作のうちのいずれかの成功裏の完了と共に自動的に実行可能である。その他の実施形態は、オペレータ入力／本明細書に記載されるさまざまな動作のうちのいずれかの開始を含むことが可能である。
【００２０】
いくつかの実施形態は、アプリケーションの基準バージョンと加速バージョンとの間の複数の比較を実行して、ＰＨＡを用いてアプリケーションを経時的に加速することの利点をより完全に理解することを達成することを行うように配列可能である。同様に、いくつかの実施形態は、データセンタカスタマの代わりに実行される複数の異なるアプリケーションに関するプログラマブルハードウェア加速利益を推定して、そのカスタマに関するＰＨＡの利益のより完全な理解を得ることが可能である。たとえば、いくつかの実施形態は、アプリケーションの基準バージョンと加速バージョンとを実行する複数のインスタンスに対応する、アプリケーションの基準バージョンと加速バージョンとの間の差を集約することを含むことが可能であり、複数のインスタンスを通して差を要約した報告をデータセンタカスタマに提供することが可能である。
【００２１】
図１は、本開示の少なくともいくつかの実施形態に従って配列された加速利益測定に関して使用するように構成された、ある例示的なコンピューティングデバイスを示すブロック図である。示されるように、図１は、たとえば、複数のＶＭを動作させることを行うように構成されたサーバをデータセンタ内に備えることが可能なコンピューティングデバイス１００を含む。コンピューティングデバイス１００は、ＶＭ１０１、１０２．．．、Ｎと、ハイパーバイザ／プロセッサ１１５と、構成コントローラ１３０と、コンフィグウェア（ｃｏｎｆｉｇｗａｒｅ）ライブラリ１４０と、メモリ１５０と、ＦＰＧＡ１６０とを含む。コンピューティングデバイス１００は、Ｎ個のＶＭを管理することを行うように構成可能であり、この場合、Ｎは任意の数のＶＭであってよく、Ｎは経時的に変化し得る。ハイパーバイザ／プロセッサ１１５は、ハイパーバイザ１１０と処理コア１２１、１２２．．．Ｍとを含む。処理コア１２１、１２２．．．、Ｍは、任意の数のコアを含むことが可能である。コンピューティングデバイス１００は、ＰＨＡ１７１、１７２、１７３をＦＰＧＡ１６０内にロードすることができる。
【００２２】
図１では、ハイパーバイザ１１０は、処理コア１２１、１２２．．．ＭによるＶＭ１０１、１０２、．．．Ｎの実行をスケジュールすることを行うように構成可能である。ハイパーバイザ１１０は、たとえば、コンピューティングデバイス１００に関するリソース共有アルゴリズムに従って、異なる実行ＶＭ、たとえば、ＶＭ１０１およびＶＭ１０２の間で処理コア１２１を切り替えるためのコンテキスト切替えを実行することができる。いくつかの例示的な実施形態では、スケジューラプロセスがＶＭ１０１、１０２のそれぞれに等しい時間を与えることができる公平な共有バランスアルゴリズム（ｆａｉｒ−ｓｈａｒｅ  ｂａｌａｎｃｉｎｇ  ａｌｇｏｒｉｔｈｍ）を通してリソースを共有することが可能である。さまざまなその他のリソース共有アルゴリズムを使用すること、たとえば、いくつかのＶＭに他のＶＭよりもより多い処理時間を与えるために、ＶＭ１０１、１０２に重みを割り当てることが可能である。異なるＶＭを同じデータセンタカスタマまたは異なるデータセンタカスタマと関連付けることが可能であり、それぞれのＶＭは、そのそれぞれのデータセンタカスタマに代わってアプリケーションを実行することが可能である。ハイパーバイザ１１０は、例示されたコアのうちの１つまたは複数によって実行するために、例示されたＶＭのうちの１つまたは複数に関するＶＭ状態情報など、ＶＭデータ１０５をロードすることが可能である。
【００２３】
コンピューティングデバイス１００は、ＰＨＡをＦＰＧＡ１６０内にロードして、ＶＭ１０１、１０２．．．、Ｎのうちのいずれかおよび／またはそれらのＶＭ内で実行されるアプリケーションに代わって動作を処理することができる。ＰＨＡをロードするために、コア１２１、１２２．．．、Ｍのうちのいずれかは、たとえば、ＰＨＡ  ＩＤ１３１を構成コントローラ１３０に提供することができる。構成コントローラ１３０は、コプロセッサＰＨＡ  ＩＤ１３１に対応するＰＨＡ１７０をコンフィグウェアライブラリ１４０から取り出すように適合可能である。構成コントローラ１３０は、ＰＨＡ１７０、たとえば、例として、ＰＨＡ１７１、１７２、および１７３をＦＰＧＡ１６０内にロードするように適合可能である。
【００２４】
ＶＭを実行することに関して、ＶＭデータ１０５を用いて構成されたハイパーバイザ／プロセッサ１１５は、ＦＰＧＡ１６０内にロードされたＰＨＡによって、たとえば、ＰＨＡ１７１、１７２、および１７３によって、ＦＰＧＡ入力データ１６１を処理するために、たとえば、ＦＰＧＡ入力データ１６１をメモリ１５０内に配置することによって、ＰＨＡを使用することができる。ＦＰＧＡ１６０および／またはその中にロードされたＰＨＡ１７１、１７２、および１７３は、ＦＰＧＡ入力データ１６１を処理して、ＦＰＧＡ出力データ１６２を作成するように適合可能である。ＦＰＧＡ１６０ならびに／またはその中にロードされたＰＨＡ１７１、１７２、および１７３は、ＦＰＧＡ出力データ１６２をメモリ１５０内に配置することができる。ＦＰＧＡ出力データ１６２は、ハイパーバイザ／プロセッサ１１５によって、かつ／またはＶＭ、もしくはその中で実行しているＶＭ内のアプリケーションによって取出し可能であり、たとえば、それに関してＦＰＧＡ出力データ１６２が作成されるＶＭによって、ＦＰＧＡ出力データ１６２を記憶すること、使用すること、表示すること、さらに処理することなどが可能である。
【００２５】
いくつかの実施形態では、利益推定マネージャコンポーネント（図１に示されず）を、ハイパーバイザ１１０内に、ＶＭ内に、図２に例示されるような、コンピューティングデバイス１００と同じデータセンタ内の別のコンピューティングデバイス内に、かつ／またはそのような位置の組み合わせの中に含めることが可能である。利益推定マネージャは、プログラマブルハードウェア加速利益を推定することに関して、図２を参照して記載される動作を管理することを行うように構成可能である。利益推定マネージャは、たとえば、アプリケーションの基準バージョンのパフォーマンスを測定することが可能であり、この場合、たとえば、基準バージョンは、ＰＨＡ１７１、１７２、および１７３を使用しなくてよいか、またはこの場合、基準バージョンは、ＰＨＡ１７１、１７２、および１７３のサブセットを使用することが可能である。利益推定マネージャは、たとえば、本明細書に記載されるように、ＰＨＡ、たとえば、ＰＨＡ１７１、１７２、および／もしくは１７３を識別すること、ＰＨＡ１７１、１７２、および／もしくは１７３を使用するアプリケーションの加速バージョンを実行すること、アプリケーションの加速バージョンのパフォーマンスを測定すること、ならびに／または測定結果をアプリケーションの基準バージョンのパフォーマンスと比較することが可能である。
【００２６】
本明細書で開示される技術を採用することによって、ＦＰＧＡ１６０内のＰＨＡ１７１、１７２、および１７３など、データセンタ内のＰＨＡの使用の増大を達成することができる。データセンタ内のＰＨＡの使用の増大は、かなりの利益を実現できる。さらに、コンピューティング技術が発展し続けるにつれて、より広くＰＨＡを採用することの利益は増大し得る。プロセッサ設計は、旧来の半導体スケーリングに対する制限に支配されるようになった。形状寸法が非常に小さくなったため、絶縁は数原子厚であり得る。たとえば、現在のＩＮＴＥＬ（Ｒ）Ｉｖｙ  Ｂｒｉｄｇｅ世代は、２２ナノメートル（ｎｍ）技術を使用する。量子トンネル現象により、漏洩電流が増大する。絶縁が薄くなるにつれて、トンネル電流は急激に増大するため、我々は集積回路用の新しいスケーリング体制に入った。使用されるチップが、同じ電力を使用しながら、チップの密度と周波数とを高めた、旧来のデナードスケーリング（Ｄｅｎｎａｒｄ  ｓｃａｌｉｎｇ）の代わりに、漏洩電流は、現在、電力使用をＳ２倍に高めており、この場合、Ｓは、形状寸法が減少する係数である。この電力制限は、特に、電池式モバイルデバイスに関連するが、熱限界により、データセンタサーバにとっても重要になっている。本明細書でエネルギー消費とも呼ばれる電力使用は、データセンタ運営の主なコストにもなっている。
【００２７】
たとえば、本明細書に記載される技術を使用して、ＰＨＡの可用性および採用を高めることは、そのパフォーマンスをやはり改善しながら、コンピューティングハードウェアによるエネルギー消費を削減することが可能である。これは、少なくとも一部、ＰＨＡが汎用ＣＰＵよりもより少ない数のトランジスタ遷移を使用して計算を実行できるためである。ＰＨＡはＣＰＵの柔軟性と引き換えに、増大した効率性を手に入れる。ＰＨＡは、場合によっては、並列処理可能な計算に関する時間エネルギー積において１０００倍の削減を達成し、並列処理できない計算に関して最高で１０倍の削減を達成することが可能である。結果として、ＦＰＧＡ回路上に構築されたＰＨＡの採用を増大することは、漏洩限界問題に対する解決策を提供することができる。ＰＨＡを使用することの利益を推定することは、場合によっては、加速アプリケーションに関連してかなりのパフォーマンス改善を実証する可能性があり、それによって、特に、改善された計算パフォーマンスがますますＰＨＡに依存するにつれて、ＰＨＡ採用を奨励することが可能である。
【００２８】
図２は、本開示の少なくともいくつかの実施形態に従って配列されたＰＨＡ利益推定に関して構成された、あるデータセンタを例示するブロック図である。示されるように、図２は、データセンタカスタマ２０１、２０２、および２０３と、データセンタ２０５とを含む。データセンタ２０５は、（１つまたは複数の）コンピューティングデバイス２１０と、（１つまたは複数の）コンピューティングデバイス２３０とを含む。（１つまたは複数の）コンピューティングデバイス２１０は、カスタマアカウントインターフェース２１１と利益推定マネージャ２１２とを含む。利益推定マネージャ２１２は、プログラマブルハードウェアリソース評価器２１３と、アプリケーション選択器２１４と、ＰＨＡ識別子２１５と、ＰＨＡ生成器２１６および／またはＰＨＡデータベース２１７と、加速アプリケーションビルダ２１８と、実行／測定マネージャ２１９と、出力比較器２２０と、パフォーマンス比較器２２１とを含む。（１つまたは複数の）コンピューティングデバイス２３０は、アプリケーションの基準バージョン２３１と、アプリケーションの加速バージョン２３２と、パフォーマンス測定モジュール２３３とを含む。
【００２９】
図２では、基準バージョン２３１は、カスタマ２０１の代わりに、データセンタ２０５内で実行されるアプリケーションを含むことが可能である。カスタマアカウントインターフェース２１１は、アプリケーションのカスタマ活性加速を提供することができる。たとえば、カスタマアカウントインターフェース２１１は、インターネットを経由してカスタマ２０１によってアクセス可能な、ウェブベースのアカウント管理ＵＩを提供することができる。アカウント管理ＵＩは、活性化２５１など、アプリケーション加速選択を受信することを行うように構成可能であり、それによって、カスタマ２０１は、基準バージョン２３１の加速を選択することができる。データセンタ２０５は、中でも、１つまたは複数のＰＨＡを用いてアプリケーションタスクを実行することによって、活性化２５１を実装するように適合可能である。データセンタ２０５は、データセンタ２０５内に加速バージョン２３２を配備することによって、活性化２５１を実装するように適合可能である。
【００３０】
カスタマ２０１は、活性化２５１を提供することを選択しても、選択しなくてもよい。カスタマは、たとえば、カスタマ２０１が潜在的な加速利益に気づかないとき、活性化２５１を提供しないことを選択する場合がある。データセンタ２０５は、利益推定マネージャ２１２を適用して、活性化２５１の利益を推定して、パフォーマンス利益推定データ２５２をカスタマ２０１に提供することができる。データセンタ２０５は、それによって、パフォーマンス利益推定データ２５２に鑑みて、カスタマ２０１に活性化２５１を提供するように奨励することができ、いくつかの実施形態では、カスタマ２０１がパフォーマンス利益推定データ２５２を受信した後で、カスタマ２０１は活性化２５１データを提供することができる。
【００３１】
図２によるいくつかの実施形態では、データセンタカスタマは、基準バージョン２３１などのアプリケーションをデータセンタ２０５に当初提供することができる。アプリケーションが加速技術を活用しない場合、利益推定マネージャ２１２は、利用可能な未使用のアクセラレータリソースが存在するかどうかを判断することができる。利用可能なリソースが存在する場合、利益推定マネージャ２１２は、ＰＨＡ識別子２１５を介してアプリケーションを動作させて、基準バージョン２３１の一部を置換するためのＰＨＡを使用することができるかどうかを確かめることができる。そのようなＰＨＡが存在する場合、加速アプリケーションビルダ２１８は、（１つまたは複数の）コンピューティングデバイス２３０に送信するための加速バージョン２３２を含む加速実行時間パッケージを生み出すことができる。（１つまたは複数の）コンピューティングデバイス２３０は、両方のプロセス、すなわち、元の基準バージョン２３１と加速バージョン２３２とを並行して実行することができる。いくつかの実施形態では、上記のプロセスは、データセンタオペレータとの何の対話も必要としない、完全な自動式であってよいことに留意されたい。
【００３２】
いくつかの実施形態では、（１つまたは複数の）コンピューティングデバイス２３０は、図１に例示されたようなコンピューティングデバイスを含むことが可能であり、（１つまたは複数の）コンピューティングデバイス２１０は、データセンタカスタマ２０１、２０２、および２０３とインターフェースをとって、データセンタ２０５に関するさまざまな経営管理機能を実行することを行うように構成された管理デバイスを含むことが可能である。プログラマブルハードウェアリソース評価器２１３は、データセンタ２０５内のプログラマブルハードウェアリソース、たとえば、ＦＰＧＡ１６０が、たとえば、カスタマ２０１の基準バージョン２３１を加速する目的でデータセンタカスタマ２０１によって使用するために利用可能であるかどうかを判断することを行うように構成可能である。たとえば、プログラマブルハードウェアリソース評価器２１３は、データセンタ２０５内のＦＰＧＡが十分に利用されているかどうかを評価することができる。いくつかの実施形態では、プログラマブルハードウェアリソース評価器２１３は、ハイパーバイザ１１０など、ハイパーバイザに問い合わせることができるか、またはＦＰＧＡ利用データに関して、（１つまたは複数の）コンピューティングデバイス２３０内のＦＰＧＡマネージャプロセスに問い合わせることができる。ＦＰＧＡ利用データは、たとえば、ＦＰＧＡ１６０利用の割合、ＦＰＧＡ１６０内の未使用リソースの量、および／またはＦＰＧＡ１６０利用に関するプロキシを提供するデータを含むことが可能である。ハイパーバイザ１１０および／またはその他のＦＰＧＡマネージャプロセスは、ＦＰＧＡ利用データを判断して、ＦＰＧＡ利用データをハードウェアリソース評価器２１３に戻すことができる。ハードウェアリソース評価器２１３は、データセンタ２０５内の複数のコンピューティングデバイス２３０を通してＦＰＧＡ利用データを集約して、データセンタカスタマ２０１による使用のためにプログラマブルハードウェアリソースが利用可能であるかどうかを判断することができる。
【００３３】
プログラマブルハードウェアリソースが利用可能であるとき、プログラマブルハードウェアリソース評価器２１３は、プログラマブルハードウェアリソースが利用可能であることをアプリケーション選択器２１４に通知することによって、加速利益推定プロセスを開始することができる。プログラマブルハードウェアリソースが利用可能でないとき、プログラマブルハードウェアリソース評価器２１３は、プログラマブルハードウェアリソースが利用可能になるときまでなど、アプリケーション選択器２１４に通知するのを延期することができる。
【００３４】
いくつかの実施形態では、アプリケーション選択器２１４は、カスタマ活性加速がデータセンタカスタマ２０１によって活性化されないアプリケーションを選択することを行うように構成可能である。アプリケーション選択器２１４は、さらなる処理のために、ＰＨＡ識別子２１５に対して、選択されたアプリケーション、たとえば、基準バージョン２３１を識別することができる。たとえば、いくつかの実施形態では、活性化情報２５３は、プログラマブルハードウェア加速が活性化されたアプリケーションおよび／またはプログラマブルハードウェア加速が活性化されないアプリケーションを示すことができる。アプリケーション選択器２１４は、カスタマ活性加速が活性化されないアプリケーション、たとえば、基準バージョン２３１を選択することを行うように構成可能である。いくつかの実施形態では、アプリケーション選択器２１４は、識別されたアプリケーションタイプを有するアプリケーション、および／または、アプリケーションを選択するのに先立って、少なくとも１つの識別されたＰＨＡで動作可能であるとして、アプリケーション選択器２１４がそのタイプを確定できる、識別されたアプリケーションセグメントタイプを含むアプリケーションを選択することを行うように構成可能である。ある種のアプリケーションは、たとえば、暗号化、グラフィック、およびビデオ符号化など、プログラマブルハードウェア加速から利益を得る動作を実行することが知られている。これらのおよびその他のアプリケーションタイプ／アプリケーションセグメントタイプは、たとえば、アプリケーションタイプを用いた履歴経験から、実行時間、実行コスト、および／または実行エネルギー消費量節約における１％以上の利益など、かなりの加速利益を得るとして知られる場合がある。
【００３５】
いくつかの実施形態では、ＰＨＡ識別子２１５は、基準バージョン２３１など、アプリケーションに関するＰＨＡを識別することを行うように構成可能であり、識別されたＰＨＡは、基準バージョン２３１を実行する間利用されない。たとえば、図２では、ＰＨＡ識別子２１５は、基準バージョン２３１を加速させることに関して使用するためのＰＨＡ１７１を識別することができる。ＰＨＡ識別子２１５は、加速アプリケーションビルダ２１８に対してＰＨＡ１７１を識別することができるか、またはＰＨＡ識別子２１５は、ＰＨＡ１７１をＰＨＡデータベース２１７から取り出して、取り出されたＰＨＡ、たとえば、ＰＨＡ１７１を加速アプリケーションビルダ２１８に提供することができるか、またはＰＨＡ識別子２１５は、ＰＨＡ１７１を生成するようにＰＨＡ生成器２１６に命令して、生成されたＰＨＡ、たとえば、ＰＨＡ１７１を加速アプリケーションビルダ２１８に提供することができる。
【００３６】
いくつかの実施形態では、アプリケーションに関する１つまたは複数のＰＨＡを識別することは、ＰＨＡ１７１など、ＰＨＡによって少なくとも部分的に置換可能なセグメントに関する基準バージョン２３１などのアプリケーション内のコードを、たとえば、ＰＨＡ識別子２１５によって、解析することを含むことが可能である。アプリケーション内のコードを解析することは、たとえば、フロー抽出プロセスおよび／またはハッシュ比較プロセスを適用することを含むことが可能である。置換可能なコードセグメントが識別されたとき、その識別されたセグメントを少なくとも部分的に置換するためのＰＨＡは、ＰＨＡデータベース２１７など、ＰＨＡのライブラリから取出し可能であるか、またはＰＨＡ生成器２１６によってなど生成可能である。ＰＨＡデータベース２１７およびＰＨＡ生成器２１６は、そのとき使用されている技術、ならびに開発されうる技術を含めて、ＰＨＡを取り出すため、かつ／または合成するための任意の利用可能な技術を使用することができる。
【００３７】
いくつかの実施形態では、加速アプリケーションビルダ２１８は、アプリケーションの基準バージョン２３１の加速バージョンである、加速バージョン２３２など、選択されたアプリケーションの加速バージョンを構築することを行うように構成可能である。すなわち、加速バージョン２３２および基準バージョン２３１は、同じアプリケーションの２つの異なるバージョンを含むことが可能である。加速バージョン２３２はＰＨＡ１７１を利用できるのに対して、基準バージョン２３１はＰＨＡ１７１を使用することができない。基準バージョン２３１は、場合によっては、１つまたは複数のＰＨＡを使用することができるのに対して、加速バージョン２３２は、基準バージョン２３１によって使用されない、ＰＨＡ１７１など、１つまたは複数の追加のＰＨＡを使用することができる。加速バージョン２３２および基準バージョン２３１は、類似のまたは同一の入力を利用することが可能であり、類似のまたは同一の出力を作成することが可能であるが、加速バージョン２３２は、基準バージョン２３１よりも、より効率的に、かつ／またはより良好なパフォーマンスで動作することが可能である。ＰＨＡ識別子２１５によって識別された（１つまたは複数の）ＰＨＡを使用することによって加速バージョン２３２を加速することができ、たとえば、ＰＨＡ１７１を使用することによって加速バージョン２３２を加速することができる。
【００３８】
いくつかの実施形態では、加速アプリケーションビルダ２１８は、たとえば、アプリケーションの完全な加速バージョンの代わりに、フォーキング命令と共に、アプリケーションの加速セグメントを生み出すことを行うように構成可能である。フォーキング命令は、アプリケーションの基準バージョンに２つの実行経路内、すなわち、加速実行経路内と基準実行経路内とにフォーキングさせるように構成可能である。（１つまたは複数の）コンピューティングデバイス２３０は、第1の実行経路内で基準アプリケーションの非加速セグメントを実行することができ、（１つまたは複数の）コンピューティングデバイス２３０は、第２の実行経路内で加速セグメントを並行して実行することができる。これらの実行経路の出力およびパフォーマンスは、本明細書に記載されるように測定および比較され得る。第２の実行経路内の加速セグメントの実行が完了するとき、比較のために出力データおよびパフォーマンスデータを、記憶することが可能であり、第１の実行経路が継続できると同時に、第２の実行経路を終了することが可能である。
【００３９】
いくつかの実施形態では、実行／測定マネージャ２１９は、たとえば、（１つまたは複数の）コンピューティングデバイス２３０による実行のために、加速バージョン２３２をロードすることと、（１つまたは複数の）コンピューティングデバイス２３０による実行のために、パフォーマンス測定モジュール２３３をロードすることと、基準バージョン２３１、加速バージョン２３２、および／またはパフォーマンス測定２３３を自動的に開始２６１することとを行うように構成可能である。実行／測定マネージャ２１９は、したがって、（１つまたは複数の）コンピューティングデバイス２３０によって、加速バージョン２３２を実行して、基準バージョン２３１によって実行されるタスクを実行することができ、加速バージョン２３２は、アプリケーションと共に使用するために、ＰＨＡ識別子２１５によって識別された、ＰＨＡ１７１など、１つまたは複数のＰＨＡの使用によって加速される。いくつかの実施形態では、実行／測定マネージャ２１９は、基準バージョン２３１と共に使用するために、カスタマ２０１から受信されたタスク命令またはその他の入力を複写することができ、複写されたタスク命令またはその他の入力を加速バージョン２３２に提供することができる。
【００４０】
いくつかの実施形態では、実行／測定マネージャ２１９は、基準バージョン２３１を実行／開始するとの同時に加速バージョン２３２を自動的に実行／開始することができる。たとえば、実行／測定マネージャ２１９は、基準バージョン２３１と加速バージョン２３２とを「リアルタイム」で、すなわち、カスタマ２０１による基準バージョン２３１の使用と共に、またはより低いデータセンタ需要期間中のシミュレーションの間に同時に開始することができる。実行／測定マネージャ２１９は、パフォーマンス測定２３３を開始して、基準バージョン２３１および加速バージョン２３２のパフォーマンスを同時に測定することができる。いくつかの実施形態では、実行／測定マネージャ２１９は、基準バージョン２３１の実行とは異なる時間に、たとえば、低いデータセンタ需要期間中に加速バージョン２３２を自動的に実行／開始することができ、加速バージョン２３２のパフォーマンスを基準バージョン２３１の前の実行のパフォーマンス測定値と比較することが可能である。実行／測定マネージャ２１９は、パフォーマンス測定２３３を開始して、基準バージョン２３１のパフォーマンスを測定することができ、実行／測定マネージャ２１９は、後でパフォーマンス測定２３３を再開して、加速バージョン２３２のパフォーマンスを測定することができる。
【００４１】
いくつかの実施形態では、パフォーマンス測定２３３は、基準バージョン２３１および加速バージョン２３２のパフォーマンスを測定することを行うように構成可能である。パフォーマンス測定２３３は、たとえば、（１つまたは複数の）コンピューティングデバイス２３０上で基準バージョン２３１と加速バージョン２３２とを実行するための実行時間、実行コスト、または実行エネルギー消費量のうちの１つもしくは複数を測定することができる。パフォーマンス測定２３３は、基準バージョン２３１および加速バージョン２３２に関連するパフォーマンス測定結果を含む出力２７３をパフォーマンス比較器２２１に提供することができる。
【００４２】
いくつかの実施形態では、出力比較器２２０は、それぞれ、アプリケーションの基準バージョン２３１と加速バージョン２３２とによって生成された出力２７１および２７２を比較して、比較された出力２７１および２７２が実質的に同一であるかどうかを判断することを行うように構成可能である。出力２７１および２７２が実質的に同一であるとき、実施形態は、続いて、パフォーマンス比較器２２１によってパフォーマンスを比較して、パフォーマンス利益推定データ２５２をカスタマ２０１に提供することができる。出力２７１および２７２が実質的に同一でないとき、実施形態は、パフォーマンス比較器２２１によってパフォーマンスを比較すること、およびパフォーマンス利益推定データ２５２をカスタマ２０１に提供することなどの、利益推定動作を中止することができる。出力２７１および２７２が実質的に同一でないとき、いくつかの実施形態は、さらに、ＰＨＡ識別子２１５から始めて、利益推定マネージャ２１２の動作を繰り返すことを試みること、または基準バージョン２３１を加速させる利益を推定するために、利益推定マネージャ２１２によるさらなる試みを妨げる問題があるとして、基準バージョン２３１にフラグを立てることのいずれかが可能である。
【００４３】
いくつかの実施形態は、出力２７１および２７２を比較して、出力２７１および２７２が同一かどうかを判断することができるのに対して、いくつかの実施形態は、出力２７１および２７２を比較して、出力２７１および２７２が実質的に同一である、たとえば、９０％から１００％の範囲で同一であるかどうかを判断することができる。実質的に同一である出力がいつ利益推定プロセスに移るのに十分であるかを判断することは、アプリケーションタイプおよび／または出力２７１および２７２のデータタイプに依存し得る。
【００４４】
いくつかの実施形態では、出力比較器２２０は、アプリケーションの加速バージョン２３２の実行の間に識別されたＰＨＡ、たとえば、ＰＨＡ１７１の使用を検証するために、（１つまたは複数の）コンピューティングデバイス２３０の（１つまたは複数の）デバイス実行履歴を検査するように構成することができる。加速バージョン２３２を実行するデバイスに関するデバイス実行履歴がＰＨＡ１７１の使用を示すとき、実施形態は、続いて、パフォーマンス比較器２２１によってパフォーマンスを比較して、パフォーマンス利益推定データ２５２をカスタマ２０１に提供することができる。加速バージョン２３２を実行するデバイスに関するデバイス実行履歴がＰＨＡ１７１の非使用を示すとき、実施形態は、出力２７３をパフォーマンス比較器２２１に提供しないこと、または基準バージョン２３１および加速バージョン２３２の集約されたパフォーマンス測定値から出力２７３を除くようにパフォーマンス比較器２２１に通知することのいずれかが可能である。
【００４５】
いくつかの実施形態では、パフォーマンス比較器２２１は、アプリケーションの基準バージョン２３１とアプリケーションの加速バージョン２３２との間の実行時間の差、実行コストの差、または実行エネルギー消費量の差のうちの１つもしくは複数を計算することを行うように構成可能である。たとえば、出力２７３は、基準バージョン２３１および加速バージョン２３２に関して測定された実行時間、実行コスト、ならびに／または実行エネルギー消費量の情報を含むことが可能であり、パフォーマンス比較器２２１は、これらの測定値のうちのいずれかの差を計算することができる。いくつかの実施形態では、パフォーマンス比較器２２１は、たとえば、出力２７３内に含まれた実行時間測定値から実行コストおよび／または実行エネルギー消費量を導出することによって、差を計算し、次いで、実行時間、実行コスト、および／または実行エネルギー消費量の差を計算するのに先立って、測定値を導出することができる。差を計算することは、たとえば、基準バージョン２３１が加速バージョン２３２よりも２０分多い（または、任意のそれより多いもしくはそれより少ないの量の）実行時間を使用することを示すために、ある測定値を別の測定値から差し引くこと、および／あるいは、割合差を計算して、たとえば、基準バージョン２３１が加速バージョン２３２よりも２０％多い（またはそれ以上もしくはそれ以下の任の割合）の実行時間を使用することを示すために、ある測定値を別の測定値で除算することを含むことが可能である。
【００４６】
いくつかの実施形態では、パフォーマンス比較器２２１は、基準バージョン２３１および加速バージョン２３２を実行する複数のインスタンスに対応する、アプリケーションの基準バージョン２３１とアプリケーションの加速バージョン２３２との間の差を集約することができる。たとえば、実行／測定マネージャ２１９は、一月の間（または、その他の期間）の間に基準バージョン２３１が使用されるたびに、加速バージョン２３２の実行を開始することができ、パフォーマンス測定２３３は、基準バージョン２３１および加速バージョン２３２が実行されるたびに、基準バージョン２３１と加速バージョン２３２とを測定することができる。パフォーマンス比較器２２１は、２７３など、結果として生じる測定出力を集約することができる。パフォーマンス比較器２２１は、次いで、集約された測定出力を通したパフォーマンス差を計算することができる。
【００４７】
いくつかの実施形態では、パフォーマンス比較器２２１は、パフォーマンス利益推定データ２５２をカスタマアカウントインターフェース２１１に提供することができる。パフォーマンス利益推定データ２５２は、基準バージョン２３１と加速バージョン２３２との間の計算されたパフォーマンス差を含むことが可能であり、たとえば、パフォーマンス利益推定データ２５２は、基準バージョン２３１と加速バージョン２３２との間の実行時間の差、実行コストの差、または実行エネルギー消費量の差のうちの１つもしくは複数を含むことが可能である。いくつかの実施形態では、パフォーマンス利益推定データ２５２は、複数のインスタンス／その実行を通して基準バージョン２３１と加速バージョン２３２との間のパフォーマンス差を要約した報告、たとえば、本明細書に記載されるような、集約された差を要約した報告を含むことが可能である。いくつかの実施形態では、報告をさらに集約して、複数の異なるアプリケーション、たとえば、加速に関する候補であり得るカスタマ２０１に関するすべてのアプリケーションに関するパフォーマンス差を組み合わせることが可能である。
【００４８】
カスタマアカウントインターフェース２１１を経由して、および／または、パフォーマンス利益推定データ２５２をカスタマ２０１に電子メールもしくそれ以外の方法で通信することによって、パフォーマンス利益推定データ２５２をカスタマ２０１に提供することが可能である。パフォーマンス利益推定データ２５２をカスタマ２０１に提供するある例は、たとえば「ＢｉｇＣｌｏｕｄ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｊｅｃｔの使用を選択されていれば、あなたの２０１２年８月のＢｉｇＣｌｏｕｄのＩＴ料金は３４％さらに速く処理され、あなたのお支払金額（すなわち、コスト）は＄６５４の代わりに＄４７５になっていたことでしょう。」などのメッセージをカスタマ２０１に提供することが可能である。当然、パフォーマンス利益をデータセンタカスタマに伝えるための多くのその他の様式が可能である。
【００４９】
図３は、本開示の少なくともいくつかの実施形態に従って配列された、利益推定マネージャを実装するあるデバイスの一例としての、コンピューティングデバイス３００のブロック図である。非常に基本的な構成３０１で、コンピューティングデバイス３００は、１つまたは複数のプロセッサ３１０と、システムメモリ３２０とを含むことが可能である。プロセッサ３１０とシステムメモリ３２０との間で通信するためにメモリバス３３０を使用することができる。
【００５０】
所望の構成に応じて、プロセッサ３１０は、マイクロプロセッサ（μＰ）、マイクロコントローラ（μＣ）、デジタル信号プロセッサ（ＤＳＰ）、またはそれらの任意の組み合わせを含むが、これらに限定されない任意のタイプのものであってよい。プロセッサ３１０は、レベル１キャッシュ３１１およびレベル２キャッシュ３１２など、１つまたは複数のレベルのキャッシュと、プロセッサコア３１３と、レジスタ３１４とを含むことが可能である。プロセッサコア３１３は、論理演算装置（ＡＬＵ）、浮動小数点演算ユニット（ＦＰＵ）、デジタル信号処理コア（ＤＳＰコア）、またはそれらの任意の組み合わせを含むことが可能である。メモリコントローラ３１５をプロセッサ３１０と共に使用することも可能であり、いくつかの実装形態では、メモリコントローラ３１５はプロセッサ３１０の内部部品であってもよい。
【００５１】
所望の構成に応じて、システムメモリ３２０は、（ＲＡＭなど）揮発性メモリ、（ＲＯＭ、フラッシュメモリなど）不揮発性メモリ、またはこれらの任意の組み合わせを含むが、これらに限定されない任意のタイプのものであってよい。システムメモリ３２０は、典型的には、オペレーティングシステム３２１と、１つまたは複数のアプリケーション３２２と、プログラムデータ３２５とを含む。いくつかの実施形態では、オペレーティングシステム３２１は、仮想マシンマネージャ（ＶＭＭ）によって管理される仮想マシンを備えることが可能である。アプリケーション３２２は、たとえば、利益推定マネージャ２１２またはその一部を含むことが可能である。たとえば、アプリケーション３２２は、プログラマブルハードウェアリソース評価器２１３、アプリケーション選択器２１４、ＰＨＡ識別子２１５、ＰＨＡ生成器２１６、ＰＨＡデータベース２１７、加速アプリケーションビルダ２１８、実行／測定マネージャ２１９、出力比較器２２０、および／またはパフォーマンス比較器２２１のうちの１つもしくは複数を含むことが可能である。プログラムデータ３２５は、利益推定マネージャ２１２によって使用され得るデータ３２６、または、ＰＨＡデータベース２１７など、その一部、および／あるいは出力２７１、出力２７２、または出力２７３など、出力データを含むことが可能である。
【００５２】
コンピューティングデバイス３００は、基本構成３０１と任意の必要とされるデバイスおよびインターフェースとの間の通信を円滑にするために、追加の特徴または機能性、ならびに追加のインターフェースを有することが可能である。たとえば、ストレージインターフェースバス３４１を経由して、基本構成３０１と１つまたは複数のデータストレージデバイス３５０との間の通信を円滑にするために、バス／インターフェースコントローラ３４０を使用することができる。データストレージデバイス３５０は、取外し式ストレージデバイス３５１、非取外し式ストレージデバイス３５２、またはそれらの組み合わせであってよい。取外し式ストレージデバイスおよび非取外し式ストレージデバイスの例は、ほんのいくつかの例を挙げれば、フレキシブルディスクドライブおよびハードディスクドライブ（ＨＤＤ）などの磁気ディスクデバイスと、コンパクトディスク（ＣＤ）ドライブまたはデジタル多用途ディスク（ＤＶＤ）ドライブなどの光ディスクドライブと、固体ドライブ（ＳＳＤ）と、テープドライブとを含む。例示的なコンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、もしくはその他のデータなど、情報を記憶するための任意の方法または技術で実装される揮発性媒体および不揮発性媒体、取外し式媒体および非取外し式媒体を含むことが可能である。
【００５３】
レベル１キャッシュ３１１、レベル２キャッシュ３１２、システムメモリ３２０、取外し式ストレージ３５１、および非取外し式ストレージデバイス３５２は、すべて、コンピュータストレージ媒体の例である。コンピュータストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多目的ディスク（ＤＶＤ）もしくはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくはその他の磁気ストレージデバイス、または所望の情報を記憶するために使用可能であり、かつコンピューティングデバイス３００によってアクセス可能な任意のその他の媒体を含むが、これらに限定されない。任意のそのようなコンピュータストレージ媒体はデバイス３００の一部であってよい。
【００５４】
コンピューティングデバイス３００は、バス／インターフェースコントローラ３４０を経由して、さまざまなインターフェースデバイス（たとえば、出力インターフェース、周辺インターフェース、および通信インターフェース）から基本構成３０１への通信を円滑にするためのインターフェースバス３４２を含むことも可能である。例示的な出力デバイス３６０は、１つもしくは複数のＡ／Ｖポート３６３を経由して、ディスプレイまたはスピーカなど、さまざまな外部デバイスと通信することを行うように構成可能な、グラフィック処理ユニット３６１とオーディオ処理ユニット３６２とを含むことが可能である。例示的な周辺インターフェース３７０は、１つまたは複数のＩ／Ｏポート３７３を経由して、入力デバイス（たとえば、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなど）などの外部デバイス、またはその他の周辺デバイス（たとえば、プリンタ、スキャナなど）との有線接続または無線接続のいずれかを介して通信することを行うように構成可能なシリアルインターフェースコントローラ３７１あるいはパラレルインターフェースコントローラ３７２を含むことが可能である。マウス、キーボードなど、その他の従来のＩ／Ｏデバイスも同様に接続することが可能である。ある例示的な通信装置３８０は、１つもしくは複数の通信ポート３８２を経由してネットワーク通信上で１つもしくは複数のその他のコンピューティングデバイス３９０との通信、たとえば、（１つもしくは複数の）コンピューティングデバイス３００、カスタマアカウントインターフェース２１１を実装するコンピューティングデバイス、および／またはデータセンタカスタマ２０１、２０２、２０３によって操作されるコンピューティングデバイスとの通信を円滑にするように配列可能なネットワークコントローラ３８１を含む。
【００５５】
コンピュータストレージ媒体は、通信媒体の一例であり得る。通信媒体は、典型的には、搬送波もしくはその他の移送機構など、変調データ信号の形で、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータによって実施可能であり、任意の情報配信媒体を含む。「変調データ信号」は、その特性セットのうちの１つもしくは複数を有する信号、または信号内の情報を符号化するように設定または変更された信号であってよい。限定ではなく、例として、通信媒体は、有線ネットワーク接続または直接配線接続などの有線媒体と、音響媒体、無線周波数（ＲＦ）媒体、赤外線（ＩＲ）媒体、およびその他の無線媒体などの無線媒体とを含むことが可能である。
【００５６】
コンピューティングデバイス３００は、データセンタ内のサーバとして実装可能である。コンピューティングデバイス３００は、ネットワークサーバ、電子商取引サーバ、またはラップトップコンピュータ構成と非ラップトップコンピュータ構成とを含めて、個人用もしくは業務用コンピュータなど、ＦＰＧＡ加速を使用するように構成された任意のデバイスとしても実装可能である。
【００５７】
図４は、本開示の少なくともいくつかの実施形態に従って配列された、あるアプリケーションのある加速バージョンを構築するためのある例示的な方法を示す流れ図である。図４は、加速バージョンを構築する際に使用するためのＰＨＡを識別することと、加速バージョンの実行を開始することとを含む。例示的な流れ図は、ブロック４０１、４０２、４０３、および４０４を含む、ＰＨＡ識別子２１５、加速アプリケーションビルダ２１８、ＰＨＡデータベース２１７、ＰＨＡ生成器２１６、および／または実行／測定マネージャ２１９の１つもしくは複数の動作／モジュールを含むことが可能である。さまざまな例示されたブロックは、方法で実行され得る動作、コンピューティングデバイス３００内の機能モジュール、および／またはコンピュータ可読媒体４５０上に記録され得る命令を表す。
【００５８】
図４は、連続的に、たとえば、ブロック４０１が最初に、ブロック２１９が最後に実行されるとして例示されるブロックを含む。しかし、これらのブロックを特定の実施形態に適合させるのに便利なように再配列することが可能であり、いくつかの実施形態では、これらのブロックまたはその一部を同時に実行することが可能である点を理解されよう。いくつかの例では、さまざまなブロックは排除されてよく、追加のブロックに分割されてよく、かつ／または他のブロックと組み合わされてもよい点をやはり理解されよう。
【００５９】
図４は、コンピューティングデバイス３００が、アプリケーションの加速バージョンと共に使用するためのＰＨＡを識別することができ、識別されたＰＨＡを使用するように適合された加速バージョンを構築することができる、ある例示的な方法を示す。例示される方法は、一般に、アプリケーションの基準バージョンを逆コンパイルすることと、逆コンパイルされた基準バージョンを使用して、アプリケーションと共に使用するためのＰＨＡを識別および／または合成することと、識別された／合成されたＰＨＡを用いる加速バージョンを構築することとを含むことが可能である。その実行およびパフォーマンス測定のために、アプリケーションの加速バージョンを実行／測定マネージャ２１９に提供することが可能である。いくつかの実施形態では、図４による方法は、人間のオペレータからの何の入力も必要とせずに、完全な自動式であってよい。いくつかの実施形態では、方法は、オペレータ対話を含むことが可能である。
【００６０】
ＰＨＡ識別子２１５は、「基準バージョンをロードする」ブロック４０１と、「基準バージョンを逆コンパイルする」ブロック４０２と、「アクセラレータ識別」ブロック４０３と、「フロー抽出」ブロック４０４とを含むことが可能である。「基準バージョンをロードする」ブロック４０１は、選択されたアプリケーションの基準バージョンをコンピューティングデバイス３００メモリ内にロードすることができる。基準バージョンは、実行可能言語、すなわち「機械言語」であってよい。「基準バージョンを逆コンパイルする」ブロック４０２は、たとえば、アセンブリ言語、または基準バージョンを表す、その他のより高水準の言語出力を作成することによって、基準バージョンの機械言語を逆コンパイルすることができる。逆コンパイル済みコードは、加速アプリケーションビルダ２１８に提供可能であるとともに、解析のためにブロック４０３および４０４によって記憶可能である。基準アプリケーションの高水準言語バージョンが存在する実施形態では、ブロック４０１および４０２を省略することができる。また、ブロック４０１および４０２は、任意の基準バージョン入力、たとえば、高水準言語、コンパイル済みバイトコード、スクリプト、コンパイル済みコードなどを処理することを行うように適宜構成可能である。
【００６１】
「アクセラレータ識別」ブロック４０３は、ＰＨＡデータベース２１７内に記憶されたＰＨＡによって置換可能な、知られているアルゴリズム／アプリケーションセグメントに関する逆コンパイル済みアセンブリ言語を検索することができる。ブロック４０３は、識別されたアプリケーションセグメントを置換する際に使用するために、ＰＨＡデータベース２１７内に記憶されたＰＨＡに関する識別子と共に、加速アプリケーションビルダ２１８に対して置換可能なアルゴリズム／アプリケーションセグメントを識別することができる。「フロー抽出」ブロック４０４は、逆コンパイル済みアセンブリ言語のフローツリーを解析して、合成ＰＨＡによって置換され得るアプリケーションセグメントを識別することができる。ブロック４０４は、識別されたアプリケーションセグメントを置換するためのＰＨＡを生成する際に使用するために、加速アプリケーションビルダ２１８に対して置換可能なアルゴリズム／アプリケーションセグメントを識別することができる。
【００６２】
ＰＨＡデータベース２１７内のＰＨＡおよび／またはＰＨＡ生成器２１６によって合成されたＰＨＡは、多くの場合、コンフィグウェアと呼ばれる、ハードウェア記述言語（ＨＤＬ）ディスクリプタファイルを含むことが可能である。これらの要素から何らかのデジタル回路またはデジタルアプリケーションを生み出すことが可能である。しかし、コンフィグウェアおよびＨＤＬのプログラミングは、依然として、典型的には、データセンタカスタマに関するアプリケーションを生み出し、管理するソフトウェアプログラマではなく、電気技師の能力を主に使用する専門分野である。企業は、そのアプリケーションを加速するために、ＨＤＬ内にその独自のＰＨＡをプログラムするためのリソースを設置していない場合がある。幸い、データセンタは、図４に例示されるような２つのリソースのいずれかからコプロセッサをカスタマに供給することができる。
【００６３】
ＰＨＡデータベース２１７は、たとえば、予め生み出されたＰＨＡのライブラリを含むことが可能である。多くの場合、多くの異なるアプリケーション内で同じコードが繰り返される。たとえば、ＺＩＰおよびＪＰＥＧの処理命令は多くのアプリケーション内で発生する。ウェブコンテンツにサービス提供するものはどんなものでも、数段落を単に埋め込むときですら、テキストに関してＺＩＰを使用する可能性がある。同様に、コンパイラの背後の低レベル命令は特定の知られている動作につながる（ｔｅｎｄ  ｔｏｗａｒｄ）ため、ビタビ（ｖｉｔｅｒｂｉ）コマンドおよびラディックス（ｒａｄｉｘ）コマンドは、多くの一見異なる（ｄｉｆｆｅｒｅｎｔ−ｓｅｅｍｉｎｇ）アプリケーションコードベースの基礎を形成する。結果として、それに関するＨＤＬ  ＰＨＡを生み出して、それらをＰＨＡデータベース２１７などのライブラリ内に配置することは価値のあることであり得る、多くのコードセグメントが存在する。
【００６４】
いくつかの実施形態では、「アクセラレータ識別」ブロック４０３は、そのアプリケーションが、それに関するＰＨＡが存在するコードセグメントを含むかどうかを判断するためにアプリケーションを検索することができる。この問題は、知られているウィルスに関してバイナリファイルを検索する問題に類似している。知られているコードの「フィンガープリント」を見出すために使用できるいくつかの技法が存在する。１つの技法は、コードから制御フローグラフ（ＣＦＧ）を生み出し、次いで、ＰＨＡデータベース２１７内のＰＨＡのＣＦＧに対する形態比較（ｍｏｒｐｈｏｌｏｇｉｃａｌ  ｃｏｍｐａｒｉｓｏｎ）を行うことである。これは、フロー抽出と呼ばれる。もう１つの技法は、逆コンパイルされた基準アプリケーション内のコードの独自のスニペット（ｓｎｉｐｐｅｔ）を検索することである。たとえば、ハッシュ関数を使用してこれを行うことが可能である。
【００６５】
いくつかの実施形態では、「フロー抽出」ブロック４０４は、ループ内の頻繁に使用されるコードを識別することができ、この「ホットコード（ｈｏｔ  ｃｏｄｅ）」のＣＦＧを抽出して、そのホットコードを加速アプリケーションビルダ２１８に送って、ＰＨＡに変換することができる。
【００６６】
いくつかの実施形態では、加速アプリケーションビルダ２１８は、ＰＨＡデータベース２１７内の逆コンパイル済みコード、アプリケーションセグメント、およびＰＨＡの対応する識別子と、ＰＨＡ生成器２１６によって作成された合成ＰＨＡによる置換に関して識別されたアプリケーションセグメントとを受信することができる。加速アプリケーションビルダ２１８は、識別されたＰＨＡをＰＨＡデータベース２１７から取り出すこと、および／またはＰＨＡ生成器２１６を活性化して、ＰＨＡを合成して、置換に関して識別されたアプリケーションセグメントを合成ＰＨＡによって置換することができる。加速アプリケーションビルダ２１８は、たとえば、取り出された／合成されたＰＨＡまたはそれに対する基準を逆コンパイル済みコード内に挿入して、置換に関して識別されたアプリケーションセグメントを除去または修正することによって、アプリケーションの基準バージョンの、受信された逆コンパイル済みコードを修正することができる。加速アプリケーションビルダ２１８は、オプションで、修正されたコードをコンパイルして、加速バージョン２３２を作成することができる。加速アプリケーションビルダ２１８は、加速バージョン２３２を実行／測定マネージャ２１９に提供して、図２に関して記載された、加速バージョン２３２を実行および測定することができる。いくつかの実施形態では、加速アプリケーションビルダ２１８は、（１つまたは複数の）コンピューティングデバイス２３０内のサーバ内に加速バージョン２３２を送信またはロードすることができ、加速アプリケーションビルダ２１８は、加速バージョン２３２が測定の準備を整えていることを実行／測定マネージャ２１９に通知することができる。
【００６７】
図５は、本開示の少なくともいくつかの実施形態に従って配列された、プログラマブルハードウェア加速利益を推定するためのある例示的な方法を示す流れ図である。この例示的な流れ図は、方法で実行され得る動作、コンピューティングデバイス３００内の機能モジュール、および／またはコンピュータ可読媒体５５０上に記録され得る命令を表すブロック２１３、２１４、５０２、５０１、２３１、２３２、２１９、５０３、５０４、２２０、２２１、および５０５によって例示されるような、１つまたは複数の動作／モジュールを含むことが可能である。
【００６８】
図５は、連続的に、たとえば、ブロック２１３が最初に、ブロック５０５が最後に実行されるとして例示されるブロックを含む。しかし、これらのブロックを特定の実施形態に適合させるのに便利なように再配列することが可能であり、いくつかの実施形態では、これらのブロックまたはその一部を同時に実行することが可能である点を理解されよう。いくつかの例では、さまざまなブロックは排除されてよく、追加のブロックに分割されてよく、かつ／または他のブロックと組み合わされてもよい点をやはり理解されよう。
【００６９】
図５は、コンピューティングデバイス３００内の利益推定マネージャが、データセンタカスタマによるＰＨＡの採用を奨励することを正当化し、利益推定のために適切なアプリケーションを選択し、アプリケーションの加速バージョンを構築し、アプリケーションの基準バージョンと比較した加速バージョンのパフォーマンス利益を測定し、かつ／またはパフォーマンス利益推定データをデータセンタカスタマに提供するために十分なプログラマブルハードウェアリソースがデータセンタ内で利用可能かどうかを判断することができる、ある例示的な方法を示す。
【００７０】
ブロック２１３および２１４は図２で紹介されている。「プログラマブルハードウェアリソース評価器」ブロック２１３で、コンピューティングデバイス３００は、データセンタ内のプログラマブルハードウェアリソースがデータセンタカスタマによる使用のために利用可能であるかどうかを判断することができる。たとえば、コンピューティングデバイス３００は、データセンタ内の、コンピューティングデバイス１００など、コンピューティングデバイス内に未使用のＦＰＧＡまたは部分的に使用されたＦＰＧＡが存在するかどうかを判断することができる。いくつかの実施形態では、ブロック２１３は、たとえば、ブロック２１４で、利益推定に関して選択するためのいくつかのアプリケーションを判断する際に使用するために利用可能なプログラマブルハードウェアリソースを定量化することができる。
【００７１】
データセンタ内に十分な利用可能なプログラマブルハードウェアリソースが存在しないとき、たとえば、利用可能なプログラマブルハードウェアリソースが、データセンタのサイズ、データセンタ内のアプリケーションを加速するために必要とされるプログラマブルハードウェアリソースの量、および／または特定の実施形態に適用可能なその他の考慮事項に応じて設定され得る所定の最小値を下回るとき、ブロック２１３の後にブロック５０１「比較に進まない」が続くことができ、ブロック２１３が、プログラマブルハードウェアリソースが利用可能であることを判断するときまでなど、図５に例示される残りの動作を延期することが可能である。データセンタ内に十分に利用可能なプログラマブルハードウェアリソースが存在するとき、ブロック２１３に続いてブロック２１４が可能であり、ブロック２１３は、オプションで、利用可能なプログラマブルハードウェアリソースの量をブロック２１４に提供することができる。
【００７２】
「アプリケーション選択器」ブロック２１４で、コンピューティングデバイス３００は、加速するための１つまたは複数のアプリケーションを選択することができる。いくつかの実施形態では、ブロック２１４は、たとえば、データセンタ内により多くのプログラマブルハードウェアリソースが利用可能であるとき、加速のためにより多くのアプリケーションを選択して、データセンタ内により少ないプログラマブルハードウェアリソースが利用可能であるとき、加速のためにより少ないアプリケーションを選択することによって、利用可能なプログラマブルハードウェアリソースの量に相関するいくつかのアプリケーションを選択することができる。ブロック２１４は、さまざまなアプリケーション選択基準のうちのいずれかを使用することができる。たとえば、データセンタカスタマがそのアプリケーションを既に加速しているとき、加速利益を測定する必要は存在しない場合があるため、ブロック２１４は、加速がデータセンタカスタマによって活性化されないアプリケーションを選択することができる。
【００７３】
いくつかの実施形態では、ブロック２１４は、その実施形態がブロック５０２の使用を排除することができる、既存の加速バージョンを有するアプリケーションを選択することができる。既存の加速バージョンに関する測定データおよび／または出力比較データが既に存在するとき、実施形態はブロック２１９、５０３、５０４、２２０、および２２１を省略することも可能である点を理解されよう。
【００７４】
いくつかの実施形態では、ブロック２１４は、ブロック５０２が動作可能な加速バージョンを構築する準備が整ったアプリケーションを選択することができる。たとえば、ブロック２１４は、識別されたアプリケーションタイプを有するアプリケーションまたは識別されたアプリケーションセグメントタイプを含むアプリケーションを選択することができ、その識別されたアプリケーションまたはアプリケーションセグメントタイプは、アプリケーションを選択するのに先立って、ＰＨＡデータベース２１７内の少なくとも１つの識別されたプログラマブルハードウェアアクセラレータで動作可能であるとして確定される。ブロック２１４の後にブロック５０２が続くことができる。
【００７５】
「ＰＨＡ識別／加速バージョンを構築する」ブロック５０２で、コンピューティングデバイス３００は、図４に従ってアプリケーションの加速バージョンを構築するための方法、たとえば、図４に例示されたブロック２１５、２１６、２１７、および／または２１８に関する動作を実行することができる。ブロック５０２は、基準バージョン２３１を使用して、加速バージョン２３２を作成することができる。たとえば、ＰＨＡデータベース２１７内の適切なＰＨＡが利用可能でないことにより、またはＰＨＡ生成器２１６によって適切なＰＨＡを合成することができないことにより、何の加速バージョンも作成できないとき、加速できないアプリケーションに関して、ブロック５０２の後にブロック５０１「比較に進まない」が続くことができる。加速できないアプリケーションに関して、ブロック５０２の後にブロック２１９が続くことができる。
【００７６】
「実行／測定マネージャ」ブロック２１９で、コンピューティングデバイス３００は、ブロック５０３および／または５０４を開始して、基準バージョン２３１および加速バージョン２３２を動作させて、測定することが可能である。いくつかの実施形態では、ブロック２１９は、たとえば、加速バージョン２３２の実行経路においてカスタマ入力を基準バージョン２３１内にミラーリングすることによって、基準バージョン２３１によって実行されるタスクを実行するために、加速バージョン２３２の実行を管理することができる。
【００７７】
いくつかの実施形態では、データセンタカスタマは基準バージョン２３１を開始することができ、ブロック２１９は、たとえば、ブロック５０３でカスタマが基準バージョン２３１を開始することに応答して、ブロック５０４で加速バージョン２３２を自動的に実行することができる。ブロック２１９は、ブロック５０３で基準バージョン２３１の測定を自動的に開始して、ブロック５０４で加速バージョン２３２の測定を自動的に開始することができる。いくつかの実施形態では、ブロック２１９は、たとえば、パフォーマンス測定の目的で、基準バージョン２３１および加速バージョン２３２のデータセンタカスタマ使用をシミュレートするために、基準バージョン２３１および加速バージョン２３２の実行、ならびに基準バージョン２３１および加速バージョン２３２の測定の両方を開始することができる。ブロック５０２の後にブロック５０３および５０４が続くことができる。
【００７８】
「基準バージョンを動作させる／測定する」ブロック５０３および「加速バージョンを動作させる／測定する」ブロック５０４で、コンピューティングデバイス３００は、例示的なコンピューティングデバイス１００においてなど、（１つまたは複数の）コンピューティングデバイス２３０において基準バージョン２３１および／または加速バージョン２３２を実行させることができる。コンピューティングデバイス３００は、図２に例示されたパフォーマンス測定２３３を活性化して、（１つもしくは複数の）コンピューティングデバイス２３０において基準バージョン２３１と加速バージョン２３２とを実行するための実行時間、実行コスト、および／または実行エネルギー消費量など、パフォーマンス基準を測定することができる。ブロック５０３および５０４は、基準バージョン２３１および加速バージョン２３２からのアプリケーション出力をブロック２２０に提供することができ、ブロック５０３および５０４は、基準バージョン２３１および加速バージョン２３２の測定からのパフォーマンス測定出力をブロック２２１に提供することができる。ブロック５０３および５０４の後にブロック２２０が続くことができる。
【００７９】
「出力比較器」ブロック２２０で、コンピューティングデバイス３００は、図２を参照して説明されたように、基準バージョン２３１と加速バージョン２３２とによって生成された出力を比較して、比較された出力が実質的に同一であるかどうかを判断することができる。たとえば、ビデオ符号化アプリケーションの場合、基準バージョン２３１と加速バージョン２３２は両方とも符号化ビデオ出力を作成することができる。ブロック２２０で、符号化ビデオ出力を比較して、それらの出力が同一であるか、または実質的に同一であるかを判断することができる。ブロック２２０は、いくつかの実施形態では、本明細書に記載されるように実質的に同一を容認することができる。たとえば、場合によっては、加速バージョン２３２のＰＨＡは、加速バージョン２３２に、異なるが、それでもなお容認できる出力を作成させることが可能である。たとえば、符号化ビデオ内のある種の色は加速バージョン２３２によって作成された出力内で異なってレンダリングされる場合があるが、それでもなお、符号化ビデオ出力比較のために確立された基準に基づいて「実質的に同一」としてそれらの色を容認することが可能である。比較された出力が同一または実質的に同一であるとき、ブロック２２０の後にブロック２２１が続くことができる。比較された出力が同一または実質的に同一でないとき、ブロック２２０の後にブロック５０１「比較に進まない」が続くことができる。
【００８０】
「パフォーマンス比較器」ブロック２２０で、コンピューティングデバイス３００は、ブロック５０３および５０４で獲得されたパフォーマンス測定値を比較することができる。ブロック２２０は、たとえば、図２を参照して記載されたように、基準バージョン２３１と加速バージョン２３２との間の実行時間の差、実行コストの差、および／または実行エネルギー消費量の差のうちの１つもしくは複数を計算することができる。ブロック２２１の後にブロック５０５が続くことができる。
【００８１】
「パフォーマンス利益推定データを記憶する」ブロック５０５で、コンピューティングデバイス３００は、ブロック５０３および５０４で獲得された測定データならびに／またはブロック２２１からのパフォーマンス比較出力を記憶することができる。たとえば、ブロック５０５は、図２に例示されたように、パフォーマンス利益推定データをカスタマアカウントインターフェース２１１内に記憶することができる。ブロック５０５は、それによって、実行時間、実行コスト、および／または実行エネルギー消費量の差などのパフォーマンス利益推定データをデータセンタカスタマに提供することができる。
【００８２】
図６は、本開示の少なくともいくつかの実施形態に従って配列された、プログラマブルハードウェア加速利益を推定するためのある例示的な方法を示す流れ図である。この例示的な流れ図は、方法で実行され得る動作、コンピューティングデバイス３００内の機能モジュール、および／またはコンピュータ可読媒体６５０上に記録され得る命令を表すブロック２１３、２１４、６０１、５０１、２３１、６０２、２１９、６０３、６０４、６０５、２２０、２２１、および５０５によって例示されるような１つもしくは複数の動作／モジュールを含むことが可能である。
【００８３】
図６は、連続的に、たとえば、ブロック２１３が最初に、ブロック５０５が最後に実行されるとして例示されるブロックを含む。しかし、これらのブロックを特定の実施形態に適合させるのに便利なように再配列することが可能であり、いくつかの実施形態では、これらのブロックまたはその一部を同時に実行することが可能である点を理解されよう。いくつかの例では、さまざまなブロックは排除されてよく、追加のブロックに分割されてよく、かつ／または他のブロックと組み合わされてもよい点をやはり理解されよう。
【００８４】
図６は、いくつかの点で、図５による方法に類似したプログラマブルハードウェア加速利益を推定するためのある例示的な方法を示し、類似のブロックは類似の要素番号によって識別される。図６による方法では、加速技法は、アプリケーションの加速セグメントの使用を含むことが可能であり、基準バージョンの実行経路を非加速セグメントと加速セグメントの両方を動作させるためにフォーキングすることが可能である。パフォーマンス測定値を修正して、加速実行経路と非加速実行経理とを測定して、オプションで、これらの測定値を基準バージョンのフォーキングされていないセグメントの測定値と組み合わせることができる。
【００８５】
図６で、ブロック２１３および２１４は、図５および図２に関して記載されたように動作することが可能である。ブロック２１４の後にブロック６０１が続くことができる。「ＰＨＡ識別／フォーキング命令を作成する」ブロック６０１で、コンピューティングデバイス３００は、本明細書に記載されるように、基準バージョン２３１と共に使用するためのＰＨＡを識別および／または合成することができる。図５に例示されたように、加速バージョン２３２など、完全な加速バージョンを構築する代わりに、ブロック６０１は、加速セグメントおよびフォーキング命令６０２を生み出すことができる。加速セグメントおよびフォーキング命令６０２は、加速セグメントに関する実行経路と基準バージョン２３１の対応する元の非加速セグメントに関する実行経路とを含めて、少なくとも２つの実行経路内に基準バージョン２３１の実行をフォーキングするように実行マネージャ２１９を適合させることが可能である。加速セグメントおよびフォーキング命令６０２は、基準バージョン２３１を加速するために所望されるだけの数の異なる加速セグメントおよびフォーキング命令を含むことが可能である。ブロック６０１の後にブロック２１９が続くことができる。
【００８６】
「実行／測定マネージャ」ブロック２１９で、コンピューティングデバイス３００は、一般に、基準バージョン２３１およびブロック６０２からの加速セグメントの実行ならびに測定をセットアップして、開始することができる。ブロック２１９は、たとえば、下に記載されるように、ブロック６０３、６０４、および６０５の動作をセットアップして、管理することができる。ブロック２１９の後ブロック６０３が続くことができる。
【００８７】
「基準バージョンおよびフォーキング命令を動作させる／測定する」ブロック６０３で、コンピューティングデバイス３００は、例示的なコンピューティングデバイス１００など、（１つまたは複数の）コンピューティングデバイス２３０において基準バージョン２３１を動作させて、測定することができ、コンピューティングデバイス３００は、ブロック６０２からの加速セグメントを動作させて、測定するために基準バージョン２３１をフォーキングするようにコンピューティングデバイス１００を適合させることができる。コンピューティングデバイス３００は、コンピューティングデバイス１００において基準バージョン２３１の実行を開始することによって、または、ユーザが基準バージョン２３１を開始することに応答して、たとえば、図２に例示されたパフォーマンス測定２３３によって基準バージョン２３１の測定を開始することによって、ブロック６０３を開始することができる。コンピューティングデバイス３００は、コンピューティングデバイス１００において、ブロック６０２からのフォーキング命令をロードすることができる。コンピューティングデバイス３００は、たとえば、ＦＰＧＡ１６０においてＰＨＡをロードすることによって、コンピューティングデバイス１００において、ブロック６０２からの加速セグメント内に含まれたＰＨＡをロードすることができる。
【００８８】
「非加速セグメントを動作させる／測定する」ブロック６０４および「加速セグメントを動作させる／測定する」ブロック６０５で、フォーキング命令に応答して、コンピューティングデバイス１００は、基準バージョン２３１の非加速セグメントと、ブロック６０２からの、ＦＰＧＡ１６０内にロードされたＰＨＡの動作を含み得る加速セグメントの両方を動作させるために、基準バージョン２３１の実行経路をフォーキングすることができる。ブロック６０４は非加速セグメントのパフォーマンス測定を行うことができ、ブロック６０５は加速セグメントのパフォーマンス測定を行うことができる。ブロック６０５において加速セグメントの実行および測定が完了したとき、方法は加速セグメントを含む実行経路を終了することができる。ブロック６０４において、非加速セグメントの実行および測定が完了したとき、非加速セグメントを含む実行経路を継続すること／ブロック６０３に戻ることが可能である。ブロック６０３は、別のフォーキング命令まで、または基準バージョン２３１の実行および／もしくは測定が中断されるまで、基準バージョン２３１の実行および測定を続けることができる。ブロック６０３、６０４および／または６０５の後にブロック２２０が続くことができる。
【００８９】
「出力比較器」ブロック２２０で、コンピューティングデバイス３００は、図５および図２に関して記載されように、アプリケーション出力を比較することができる。図６による実施形態では、比較された出力は、ブロック６０４および６０５からの出力を含むことが可能である。ブロック２２０の後にブロック２２１が続くことができる。
【００９０】
「パフォーマンス比較器」ブロック２２１で、コンピューティングデバイス３００は、図５および図２に関して記載されたように、パフォーマンス測定値を比較することができる。図６によるいくつかの実施形態では、ブロック２２１は、ブロック６０３に関連する測定値をブロック６０４に関連する測定値と組み合わせることによって、基準バージョン２３１のパフォーマンスを計算することができ、ブロック６０３に関連する測定値をブロック６０５に関連する測定値と組み合わせることによって、「仮想」加速バージョンのパフォーマンスを計算することができる。次いで、本明細書に記載されたように、基準バージョン２３１および仮想加速バージョンに関連する組み合わされた測定値同士の間の差を判断することができる。いくつかの実施形態では、ブロック２２１は、ブロック６０３に関連するパフォーマンス測定値を考慮せずに、ブロック６０４と６０５との間のパフォーマンスの差を判断することが可能である。ブロック２２１の後にブロック５０５が続くことができる。ブロック５０５の動作は、図５を参照して記載されている。
【００９１】
システムの側面でのハードウェアの実装形態とソフトウェアの実装形態との間には、ほとんど相違が残されていない。ハードウェアまたはソフトウェアの使用は、一般に（いつもそうではないが、ある状況ではハードウェアとソフトウェアの間の選択が重要になり得るという点で）コスト対効果のトレードオフを表す設計上の選択である。本明細書に記載された、プロセスおよび／またはシステムおよび／または他の技術をもたらすことができるさまざまな達成手段があり（たとえば、ハードウェア、ソフトウェア、および／またはファームウェア）、好ましい達成手段は、プロセスおよび／またはシステムおよび／または他の技術が導入される状況によって異なる。たとえば、実装者が速度と正確性が最も重要であると決定すると、実装者は主にハードウェアおよび／またはファームウェアの達成手段を選択することができる。フレキシビリティが最も重要なら、実装者は主にソフトウェアの実装形態を選択することができる。または、さらに別の代替案として、実装者は、ハードウェア、ソフトウェア、および／またはファームウェアのなんらかの組み合わせを選択することができる。
【００９２】
前述の詳細な説明では、ブロック図、フローチャート、および／または例の使用によって、装置および／またはプロセスのさまざまな実施形態を説明してきた。そのようなブロック図、フローチャート、および／または例が１つまたは複数の機能および／または動作を含む限りにおいて、そのようなブロック図、フローチャート、または例の中のそれぞれの機能および／または動作は、広範囲のハードウェア、ソフトウェア、ファームウェア、または実質上それらのすべての組み合わせにより、個別におよび／または集合的に実装可能であることが、当業者には理解されるであろう。ある実施形態では、本明細書に記載された主題のいくつかの部分は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタルシグナルプロセッサ（ＤＳＰ）、または他の集積化方式によって実装することができる。しかし、本明細書で開示された実施形態のいくつかの態様が、全体においてまたは一部において、１つまたは複数のコンピュータ上で動作する１つまたは複数のコンピュータプログラムとして（たとえば、１つまたは複数のコンピュータシステム上で動作する１つまたは複数のプログラムとして）、１つまたは複数のプロセッサ上で動作する１つまたは複数のプログラムとして（たとえば、１つまたは複数のマイクロプロセッサ上で動作する１つまたは複数のプログラムとして）、ファームウェアとして、あるいは実質上それらの任意の組み合わせとして、等価に集積回路に実装することができることを、当業者は認識するであろうし、電気回路の設計ならびに／またはソフトウェアおよび／もしくはファームウェアのコーディングが、本開示に照らして十分当業者の技能の範囲内であることを、当業者は認識するであろう。さらに、本明細書に記載された主題のメカニズムをさまざまな形式のプログラム製品として配布することができることを、当業者は理解するであろうし、本明細書に記載された主題の例示的な実施形態が、実際に配布を実行するために使用される信号伝達媒体の特定のタイプにかかわらず適用されることを、当業者は理解するであろう。信号伝達媒体の例には、フロッピーディスク、ハードディスクドライブ、コンパクトディスク（ＣＤ）、デジタルビデオディスク（ＤＶＤ）、デジタルテープ、コンピュータメモリ、などの記録可能なタイプの媒体、ならびに、デジタル通信媒体および／またはアナログ通信媒体（たとえば、光ファイバケーブル、導波管、有線通信リンク、無線通信リンクなど）の通信タイプの媒体が含まれるが、それらには限定されない。
【００９３】
本明細書で説明したやり方で装置および／またはプロセスを記載し、その後そのように記載された装置および／またはプロセスを、データ処理システムに統合するためにエンジニアリング方式を使用することは、当技術分野で一般的であることを当業者は認識するであろう。すなわち、本明細書に記載された装置および／またはプロセスの少なくとも一部を、妥当な数の実験によってデータ処理システムに統合することができる。通常のデータ処理システムは、一般に、システムユニットハウジング、ビデオディスプレイ装置、揮発性メモリおよび不揮発性メモリなどのメモリ、マイクロプロセッサおよびデジタル信号プロセッサなどのプロセッサ、オペレーティングシステムなどの計算実体、ドライバ、グラフィカルユーザインタフェース、およびアプリケーションプログラムのうちの１つもしくは複数、タッチパッドもしくはスクリーンなどの１つもしくは複数の相互作用装置、ならびに／またはフィードバックループおよびコントロールモータを含むコントロールシステム（たとえば、位置検知用および／もしくは速度検知用フィードバック、コンポーネントの移動用および／もしくは数量の調整用コントロールモータ）を含むことを、当業者は理解するであろう。通常のデータ処理システムは、データコンピューティング／通信システムおよび／またはネットワークコンピューティング／通信システムの中に通常見られるコンポーネントなどの、市販の適切なコンポーネントを利用して実装することができる。
【００９４】
本明細書に記載された主題は、さまざまなコンポーネントをしばしば例示しており、これらのコンポーネントは、他のさまざまなコンポーネントに包含されるか、または他のさまざまなコンポーネントに接続される。そのように図示されたアーキテクチャは、単に例にすぎず、実際には、同じ機能を実現する多くの他のアーキテクチャが実装可能であることが理解されよう。概念的な意味で、同じ機能を実現するコンポーネントの任意の構成は、所望の機能が実現されるように効果的に「関連付け」される。したがって、特定の機能を実現するために組み合わされた、本明細書における任意の２つのコンポーネントは、アーキテクチャまたは中間のコンポーネントにかかわらず、所望の機能が実現されるように、お互いに「関連付け」されていると見ることができる。同様に、そのように関連付けされた任意の２つのコンポーネントは、所望の機能を実現するために、互いに「動作可能に接続」または「動作可能に結合」されていると見なすこともでき、そのように関連付け可能な任意の２つのコンポーネントは、所望の機能を実現するために、互いに「動作可能に結合できる」と見なすこともできる。動作可能に結合できる場合の具体例には、物理的に接続可能な、および／もしくは物理的に相互作用するコンポーネント、ならびに／またはワイヤレスに相互作用可能な、および／もしくはワイヤレスに相互作用するコンポーネント、ならびに／または論理的に相互作用する、および／もしくは論理的に相互作用可能なコンポーネントが含まれるが、それらに限定されない。
【００９５】
本明細書における実質的にすべての複数形および／または単数形の用語の使用に対して、当業者は、状況および／または用途に適切なように、複数形から単数形に、および／または単数形から複数形に変換することができる。さまざまな単数形／複数形の置き換えは、理解しやすいように、本明細書で明確に説明することができる。
【００９６】
通常、本明細書において、特に添付の特許請求の範囲（たとえば、添付の特許請求の範囲の本体部）において使用される用語は、全体を通じて「オープンな（ｏｐｅｎ）」用語として意図されていることが、当業者には理解されよう（たとえば、用語「含む（ｉｎｃｌｕｄｉｎｇ）」は、「含むがそれに限定されない（ｉｎｃｌｕｄｉｎｇ  ｂｕｔ  ｎｏｔ  ｌｉｍｉｔｅｄ  ｔｏ）」と解釈されるべきであり、用語「有する（ｈａｖｉｎｇ）」は、「少なくとも有する（ｈａｖｉｎｇ  ａｔ  ｌｅａｓｔ）」と解釈されるべきであり、用語「含む（ｉｎｃｌｕｄｅｓ）」は、「含むがそれに限定されない（ｉｎｃｌｕｄｅｓ  ｂｕｔ  ｉｓ  ｎｏｔ  ｌｉｍｉｔｅｄ  ｔｏ）」と解釈されるべきである、など）。導入される請求項で具体的な数の記載が意図される場合、そのような意図は、当該請求項において明示的に記載されることになり、そのような記載がない場合、そのような意図は存在しないことが、当業者にはさらに理解されよう。たとえば、理解の一助として、添付の特許請求の範囲は、導入句「少なくとも１つの（ａｔ  ｌｅａｓｔ  ｏｎｅ）」および「１つまたは複数の（ｏｎｅ  ｏｒ  ｍｏｒｅ）」を使用して請求項の記載を導くことを含む場合がある。しかし、そのような句の使用は、同一の請求項が、導入句「１つまたは複数の」または「少なくとも１つの」および「ａ」または「ａｎ」などの不定冠詞を含む場合であっても、不定冠詞「ａ」または「ａｎ」による請求項の記載の導入が、そのように導入される請求項の記載を含む任意の特定の請求項を、単に１つのそのような記載を含む発明に限定する、ということを示唆していると解釈されるべきではない（たとえば、「ａ」および／または「ａｎ」は、通常、「少なくとも１つの」または「１つまたは複数の」を意味すると解釈されるべきである）。同じことが、請求項の記載を導入するのに使用される定冠詞の使用にも当てはまる。また、導入される請求項の記載で具体的な数が明示的に記載されている場合でも、そのような記載は、通常、少なくとも記載された数を意味すると解釈されるべきであることが、当業者には理解されよう（たとえば、他の修飾語なしでの「２つの記載（ｔｗｏ  ｒｅｃｉｔａｔｉｏｎｓ）」の単なる記載は、通常、少なくとも２つの記載、または２つ以上の記載を意味する）。さらに、「Ａ、ＢおよびＣ、などの少なくとも１つ」に類似の慣例表現が使用されている事例では、通常、そのような構文は、当業者がその慣例表現を理解するであろう意味で意図されている（たとえば、「Ａ、Ｂ、およびＣの少なくとも１つを有するシステム」は、Ａのみ、Ｂのみ、Ｃのみ、ＡおよびＢを共に、ＡおよびＣを共に、ＢおよびＣを共に、ならびに／またはＡ、Ｂ、およびＣを共に、などを有するシステムを含むが、それに限定されない）。「Ａ、Ｂ、またはＣ、などの少なくとも１つ」に類似の慣例表現が使用されている事例では、通常、そのような構文は、当業者がその慣例表現を理解するであろう意味で意図されている（たとえば、「Ａ、Ｂ、またはＣの少なくとも１つを有するシステム」は、Ａのみ、Ｂのみ、Ｃのみ、ＡおよびＢを共に、ＡおよびＣを共に、ＢおよびＣを共に、ならびに／またはＡ、Ｂ、およびＣを共に、など���有するシステムを含むが、それに限定されない）。２つ以上の代替用語を提示する事実上いかなる離接する語および／または句も、明細書、特許請求の範囲、または図面のどこにあっても、当該用語の一方（ｏｎｅ  ｏｆ  ｔｈｅ  ｔｅｒｍｓ）、当該用語のいずれか（ｅｉｔｈｅｒ  ｏｆ  ｔｈｅ  ｔｅｒｍｓ）、または両方の用語（ｂｏｔｈ  ｔｅｒｍｓ）を含む可能性を企図すると理解されるべきであることが、当業者にはさらに理解されよう。たとえば、句「ＡまたはＢ」は、「Ａ」または「Ｂ」あるいは「ＡおよびＢ」の可能性を含むことが理解されよう。
【００９７】
一部の例示的な技法は、本明細書において、さまざまな方法、デバイス、およびシステムを使用して記載され、示されているが、特許請求される主題から逸脱せずに、さまざまなその他の修正を行うことが可能であり、均等物を置換することが可能である点を当業者は理解されたい。加えて、本明細書に記載された主な概念から逸脱せずに、特許請求される主題の教示に特定の状況を適合させるために、多くの修正を行うことが可能である。したがって、特許請求される主題は、開示される特定の例に限定されず、そのような特許請求される主題は、添付の請求項、およびそれらの均等物の範囲に該当するすべての実装形態を含むことも可能であることが意図される。
【図１】
2014191828.tif 000003
【図５】
2014191828.tif 000004
【図６】
2014191828.tif 000005
【図２】
2014191828.tif 000006
【図３】
2014191828.tif 000007
【図４】
2014191828.tif 000008