(57)【要約】【課題】  ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに置き換えるための装置及び方法を提供する。【解決手段】  コンピュータ・プログラムが、ソフトウェア・ライブラリへの呼び出しを含む。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される。プログラム可能デバイスは、１つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応するソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの呼び出しが、対応する現在実装されているアクセラレータへの１つ又は複数の対応する呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの１つ又は複数の呼び出しが、新しいアクセラレータへの１つ又は複数の対応する呼び出しに置き換えられる。【選択図】      図１
2021508117.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに結合されたメモリと、
現在実装されているアクセラレータを含む、前記少なくとも１つのプロセッサに結合されたプログラム可能デバイスと、
前記メモリ内にあり、前記少なくとも１つのプロセッサにより実行されるコンピュータ・プログラムと、
前記メモリ内にあり、前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、
前記メモリ内にあり、前記少なくとも１つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断し、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築し、前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断し、前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第１のものが、前記現在実装されているアクセラレータに対応することを判断し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第１の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、
を含む、装置。
【請求項２】
前記プログラム可能デバイスは、前記少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、請求項１に記載の装置。
【請求項３】
前記アクセラレータ・デプロイ・ツールは、新しいアクセラレータで前記ソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断し、前記新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第２の呼び出しを前記新しいアクセラレータへの呼び出しに置き換える、請求項１に記載の方法。
【請求項４】
前記新しいアクセラレータは、前記プログラム可能デバイス内の前記現在実装されているアクセラレータではない、請求項１に記載の装置。
【請求項５】
前記アクセラレータ・デプロイ・ツールは、前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することにより、前記アクセラレータ・イメージを動的に生成する、請求項１に記載の装置。
【請求項６】
前記プログラム可能デバイスは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）を含む、請求項１に記載の装置。
【請求項７】
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに結合されたメモリと、
前記少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、前記少なくとも１つのプロセッサに結合され、かつ、現在実装されているアクセラレータを含む、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）と、
前記メモリ内にあり、前記少なくとも１つのプロセッサにより実行されるコンピュータ・プログラムと、
前記メモリ内にあり、前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、
前記メモリ内にあり、前記少なくとも１つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断し、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築し、前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断し、前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第１のものが、前記現在実装されているアクセラレータに対応することを判断し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第１の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換え、前記現在実装されているアクセラレータではない新しいアクセラレータで前記ソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断し、前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することにより、前記新しいアクセラレータのための前記アクセラレータ・イメージを動的に生成し、前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第２の呼び出しを前記新しいアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、
を含む、装置。
【請求項８】
コンピュータ・プログラムのランタイム性能を向上させるための方法であって、
プログラム可能デバイス内に現在実装されているアクセラレータを提供することと、
前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリを提供することと、
前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断することと、
前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築することと、
前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断することと、
前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第１のものが、前記現在実装されているアクセラレータに対応することを判断することと、
前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第１の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換えることと、
を含む、方法。
【請求項９】
前記プログラム可能デバイスは、前記少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、請求項８に記載の方法。
【請求項１０】
新しいアクセラレータで前記ソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断することと、
前記新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することと、
前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成することと、
前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第２の呼び出しを前記新しいアクセラレータへの呼び出しに置き換えることと、
をさらに含む、請求項８に記載の方法。
【請求項１１】
前記新しいアクセラレータは、前記プログラム可能デバイス内の前記現在実装されているアクセラレータではない、請求項８に記載の方法。
【請求項１２】
前記新しいアクセラレータのための前記アクセラレータ・イメージを動的に生成することは、
前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換することと、
前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することと、
を含む、請求項８に記載の方法。
【請求項１３】
前記プログラム可能デバイスは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）を含む、請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、コンピュータ・システムに関し、より具体的には、コンピュータ・システムにおけるハードウェア・アクセラレータに関する。
【背景技術】
【０００２】
Ｏｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）は、産業界の先駆者たちのコンソーシアムにより開発された仕様である。ＯｐｅｎＣＡＰＩ仕様は、任意のプロセッサが、コヒーレントなユーザ・レベル・アクセラレータ及びＩ／Ｏデバイスに取り付けられるのを可能にするインターフェースを定義する。ＯｐｅｎＣＡＰＩは、高性能のアクセラレータ設計の複雑さを最小にするように構築された、高帯域幅、低待ち時間のオープン・インターフェース設計仕様を提供する。レーン当たり毎秒２５ギガビット（Ｇビット）のデータ転送速度の能力がある、ＯｐｅｎＣＡＰＩは、レーン当たり毎秒１６Ｇビットの最大データ転送速度を提供する現在のｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ（ＰＣＩｅ）仕様よりも性能が優れている。ＯｐｅｎＣＡＰＩは、データ処理を中心とする手法を提供し、計算能力をデータに近づけ、従来のシステム・アーキテクチャにおける非効率性を除去してシステム性能のボトルネックを取り除き、システム性能を向上させるのを助ける。ＯｐｅｎＣＡＰＩの大きな利点は、アクセラレータのようなＯｐｅｎＣＡＰＩデバイスにおいて、プロセッサの仮想アドレスを共有し、プロセッサと同じ方法で利用できる点である。ＯｐｅｎＣＡＰＩの開発に伴い、今や、ＯｐｅｎＣＡＰＩアーキテクチャ上のインターフェースを含むハードウェア・アクセラレータが開発され得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに置き換えるための装置及び方法を提供する。
【課題を解決するための手段】
【０００４】
本発明の態様は、ソフトウェア・ライブラリへの呼び出しを含むコンピュータ・プログラムを提供する。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブル（virtual function table）が構築される。プログラム可能デバイスは、１つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応するソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの呼び出しが、対応する現在実装されているアクセラレータへの１つ又は複数の対応する呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の呼び出しが、新しいアクセラレータへの１又は複数の対応する呼び出しに置き換えられる。
【０００５】
第１の態様から見ると、本発明は、少なくとも１つのプロセッサと、少なくとも１つのプロセッサに結合されたメモリと、現在実装されているアクセラレータを含む、少なくとも１つのプロセッサに結合されたプログラム可能デバイスと、メモリ内にあり、少なくとも１つのプロセッサにより実行されるコンピュータ・プログラムと、メモリ内にあり、コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、メモリ内にあり、少なくとも１つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを判断し、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを含む仮想関数テーブルを構築し、プログラム可能デバイス内の現在実装されているアクセラレータが利用可能であることを判断し、ソフトウェア・ライブラリにおける複数の呼び出しの第１のものが、現在実装されているアクセラレータに対応することを判断し、仮想関数テーブル内のソフトウェア・ライブラリへの第１の呼び出しを現在実装されているアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、を含む装置を提供する。
【０００６】
好ましくは、本発明は、プログラム可能デバイスが、少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、装置を提供する。
【０００７】
好ましくは、本発明は、アクセラレータ・デプロイ・ツールが、新しいアクセラレータでソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断し、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、アクセラレータ・イメージをプログラム可能デバイスにデプロイして新しいアクセラレータを作成し、仮想関数テーブル内のソフトウェア・ライブラリへの第２の呼び出しを新しいアクセラレータへの呼び出しに置き換える、装置を提供する。
【０００８】
好ましくは、本発明は、新しいアクセラレータが、プログラム可能デバイス内の現在実装されているアクセラレータではない、装置を提供する。
【０００９】
好ましくは、本発明は、アクセラレータ・デプロイ・ツールが、コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、ハードウェア記述言語表現を処理して、そこからアクセラレータ・イメージを生成することにより、アクセラレータ・イメージを動的に生成する、装置を提供する。
【００１０】
好ましくは、本発明は、プログラム可能デバイスが、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）を含む、装置を提供する。
【００１１】
第２の態様から見ると、本発明は、少なくとも１つのプロセッサと、少なくとも１つのプロセッサに結合されたメモリと、少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、少なくとも１つのプロセッサに結合され、現在実装されているアクセラレータを含む、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）と、メモリ内にあり、少なくとも１つのプロセッサにより実行されるコンピュータ・プログラムと、メモリ内にあり、コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、メモリ内にあり、少なくとも１つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを判断し、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを含む仮想関数テーブルを構築し、プログラム可能デバイス内の現在実装されているアクセラレータが利用可能であることを判断し、ソフトウェア・ライブラリにおける複数の呼び出しの第１のものが、現在実装されているアクセラレータに対応することを判断し、仮想関数テーブル内のソフトウェア・ライブラリへの第１の呼び出しを現在実装されているアクセラレータへの呼び出しに置き換え、現在実装されているアクセラレータではない新しいアクセラレータでソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断し、コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、ハードウェア記述言語表現を処理して、そこからアクセラレータ・イメージを生成することにより、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、アクセラレータ・イメージをプログラム可能デバイスにデプロイして新しいアクセラレータを作成し、仮想関数テーブル内のソフトウェア・ライブラリへの第２の呼び出しを新しいアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールとを含む、装置を提供する。
【００１２】
第３の態様から見ると、本発明は、コンピュータ・プログラムのランタイム性能（run-time performance）を向上させるための方法を提供し、この方法は、プログラム可能デバイス内に現在実装されているアクセラレータを提供することと、コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリを提供することと、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを判断することと、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを含む仮想関数テーブルを構築することと、プログラム可能デバイス内の現在実装されているアクセラレータが利用可能であることを判断することと、ソフトウェア・ライブラリにおける複数の呼び出しの第１のものが、現在実装されているアクセラレータに対応することを判断することと、仮想関数テーブル内のソフトウェア・ライブラリへの第１の呼び出しを現在実装されているアクセラレータへの呼び出しに置き換えることとを含む。
【００１３】
好ましくは、本発明は、プログラム可能デバイスが、少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、方法を提供する。
【００１４】
好ましくは、本発明は、新しいアクセラレータでソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断することと、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することと、アクセラレータ・イメージをプログラム可能デバイスにデプロイして新しいアクセラレータを作成することと、仮想関数テーブル内のソフトウェア・ライブラリへの第２の呼び出しを新しいアクセラレータへの呼び出しに置き換えることとをさらに含む、方法を提供する。
【００１５】
好ましくは、本発明は、新しいアクセラレータが、プログラム可能デバイス内の現在実装されているアクセラレータではない、方法を提供する。
【００１６】
好ましくは、本発明は、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することが、コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換することと、ハードウェア記述言語表現を処理して、そこからアクセラレータ・イメージを生成することとを含む、方法を提供する。
【００１７】
好ましくは、本発明は、プログラム可能デバイスが、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）を含む、方法を提供する。
【００１８】
上記及び他の特徴及び利点は、添付図面と共に示される以下の１つ又は複数の具体的な説明からより明らかになるであろう。
【００１９】
添付図面と併せて本開示を説明し、図面では、同様の名称は、同様の要素を示す。
【図面の簡単な説明】
【００２０】
【図１】Ｏｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）をどのように使用できるかを示すサンプル・システムのブロック図である。
【図２】１つ又は複数のハードウェア・アクセラレータを含むことができるＯｐｅｎＣＡＰＩインターフェースを有するプログラム可能デバイスのブロック図である。
【図３】コンピュータ・プログラム内のコード部分に対するアクセラレータを動的に生成してデプロイするためのツールを含むコンピュータ・システムのブロック図である。
【図４】図３のアクセラレータ・イメージ生成器がコード部分からアクセラレータ・イメージをどのように生成するかについての特定の実装を示すフロー図である。
【図５】コンピュータ・プログラムを分析し、コード部分を選択する、図３のコード分析器についての特定の実装のブロック図である。
【図６】コンピュータ・プログラム内のコード部分を特定し、コード部分に対応するアクセラレータを動的に生成してデプロイし、次に、コード部分をデプロイされたアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムを改訂するための方法のフロー図である。
【図７】異なるコード部分を有する第１のサンプル・コンピュータ・プログラムを示すブロック図である。
【図８】どのようにコード部分をＨＤＬに、次に、プログラム可能デバイスにデプロイしてアクセラレータを提供できるアクセラレータ・イメージに変換できるかを示すブロック図である。
【図９】コード部分Ｂがコード部分Ｂに対するアクセラレータへの呼び出しに置き換えられた後の、図７のコンピュータ・プログラムを示すブロック図である。
【図１０】サンプル・アクセラレータ・カタログを示すブロック図である。
【図１１】前に生成されたアクセラレータのカタログが保持されるときの、コード部分に対するアクセラレータをデプロイするための方法のフロー図である。
【図１２】異なるコード部分を有する第２のサンプル・コンピュータ・プログラムを示すブロック図である。
【図１３】アクセラレータによる恩恵を受けることができる、図１２のコンピュータ・プログラム内の２つのコード部分を特定するブロック図である。
【図１４】コード部分Ｑに対応するアクセラレータを含むサンプル・アクセラレータ・カタログを示すブロック図である。
【図１５】図１４のカタログにおいて特定されたコード部分Ｑに対するアクセラレータ・イメージの、プログラム可能デバイスへのデプロイを示すブロック図である。
【図１６】コード部分Ｑがコード部分Ｑに対するアクセラレータへの呼び出しに置き換えられた後の、図１２のコンピュータ・プログラムを示すブロック図である。
【図１７】図１２及び図１６に示されるコンピュータ・プログラム内のコード部分Ｒからのアクセラレータ・イメージの生成を示すブロック図である。
【図１８】コード部分Ｒに対する新しく生成されたアクセラレータ・イメージの、プログラム可能デバイスへのデプロイを示すブロック図である。
【図１９】コード部分Ｒがコード部分Ｒに対するアクセラレータへの呼び出しに置き換えられた後の、図１６のコンピュータ・プログラムを示すブロック図である。
【図２０】コード部分Ｒに対するアクセラレータを表すエントリが作成された後の、図１４に示されるアクセラレータ・カタログ１４００のブロック図である。
【図２１】サンプル・コンピュータ・プログラムのブロック図である。
【図２２】ＯｐｅｎＣＡＰＩインターフェースを有し、図２１のループ部分に対するアクセラレータと、図２１の分岐ツリー部分に対するアクセラレータと、図２１の非常に長いシリアル部分（lengthy serial portion）に対するアクセラレータとを含む、プログラム可能デバイスのブロック図である。
【図２３】コード部分が対応するアクセラレータへの呼び出しに置き換えられた後の、図２１のコンピュータ・プログラムのブロック図である。
【図２４】ソフトウェア・ライブラリ内の関数を呼び出す従来技術のコンピュータ・プログラムのブロック図である。
【図２５】ソフトウェア・ライブラリへの呼び出しを１つ又は複数の現在実装されているアクセラレータへの対応する呼び出しに置き換えるための方法のフロー図である。
【図２６】コンピュータ・プログラムからソフトウェア・ライブラリへの呼び出しのための１レベルの間接化をもたらす仮想関数テーブルを示す。
【図２７】ソフトウェア・ライブラリへの呼び出しが仮想関数テーブルへの呼び出しに置き換えられた後の、図２４のコンピュータ・プログラムのブロック図である。
【図２８】ソフトウェア・ライブラリにおける関数に対応する現在実装されているアクセラレータを示すアクセラレータ相関テーブルのブロック図である。
【図２９】図２８のテーブル内に列挙された３つの現在実装されているアクセラレータを示すプログラム可能デバイスのブロック図である。
【図３０】ソフトウェア・ライブラリへの呼び出しが対応するアクセラレータへの呼び出しに置き換えられた後の、図２６の仮想関数テーブルを示す。
【図３１】新しいアクセラレータを生成し、ソフトウェア・ライブラリへの１つ又は複数の呼び出しを新しいアクセラレータへの１つ又は複数の対応する呼び出しに置き換えるための方法のフロー図である。
【図３２】３つの前に生成されたアクセラレータと、図３１で生成された１つの新しいアクセラレータとを示す、プログラム可能デバイスのブロック図である。
【図３３】ソフトウェア・ライブラリへの呼び出しが新しいアクセラレータへの対応する呼び出しに置き換えられた後の、図２６及び図３０の仮想関数テーブルを示す。
【発明を実施するための形態】
【００２１】
上の背景技術セクションで述べたように、Ｏｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）は、任意のプロセッサが、コヒーレントなユーザ・レベルのアクセラレータ及びＩ／Ｏデバイスに取り付けられるのを可能にするインターフェースを定義する仕様である。図１を参照して、ＯｐｅｎＣＡＰＩインターフェース１５０に関連した概念の一部を示すために、サンプル・コンピュータ・システム１００が示される。当技術分野において周知のように、プロセッサ１１０が、標準メモリ１４０又はメモリ階層に結合される。プロセッサは、ＰＣＩｅインターフェース１２０を介して、１つ又は複数のＰＣＩｅデバイス１３０に結合される。プロセッサ１１０は、ＯｐｅｎＣＡＰＩインターフェース１５０を介して、アクセラレータ１６０、コヒーレント・ネットワーク・コントローラ１７０、アドバンスト・メモリ１８０、及びストレージ１９５内に格納されるデータを制御するコヒーレント・ストレージ・コントローラ１９０などの１つ又は複数のコヒーレント・デバイスにも結合される。説明のために、ＯｐｅｎＣＡＰＩインターフェース１５０は、図１では別個のエンティティとして示されるが、図１に示されるような別個のインターフェースの代わりに、ＯｐｅｎＣＡＰＩインターフェース１５０をコヒーレント・デバイスの各々の内部に実装することもできる。従って、アクセラレータ１６０は、他のコヒーレント・デバイス１７０、１８０及び１９０のように、それ自体のＯｐｅｎＣＡＰＩインターフェースを有することができる。ＯｐｅｎＣＡＰＩの大きな利点の１つは、プロセッサ１１０についての仮想アドレスを、ＯｐｅｎＣＡＰＩインターフェースに結合される又はこれを含むコヒーレント・デバイスと共有することができ、それらが、プロセッサ１１０と同じ方法で、仮想アドレスを使用するのを可能にすることである。
【００２２】
アクセラレータをプログラム可能デバイスにデプロイすることは、当技術分野においてよく知られている。図２を参照して、プログラム可能デバイス２００は、任意の好適なプログラム可能デバイスを表す。例えば、プログラム可能デバイス２００は、ＦＰＧＡ又はＡＳＩＣとすることができる。ＯｐｅｎＣＡＰＩインターフェース２１０が、プログラム可能デバイス内に実装され得る。さらに、プログラム可能デバイス２００内に、１つ又は複数のアクセラレータが実装され得る。図１は、例として、アクセラレータ１  ２２０Ａ、アクセラレータ２  ２２０Ｂ、・・・、アクセラレータＮ  ２２０Ｎを示す。従来技術においては、人間の設計者が、ハードウェア内に実装されることにより加速される必要がある関数に基づいて、どのタイプのアクセラレータが必要とされるかを判断していた。アクセラレータ関数は、例えば、ハードウェア記述言語（ＨＤＬ）で表すことができる。次に、人間の設計者は、既知のツールを用いて、ＨＤＬに対応するアクセラレータ・イメージを生成することができる。アクセラレータ・イメージは、ひとたび図２の２００などのプログラム可能デバイスにロードされると、１つ又は複数のコンピュータ・プログラムにより必要に応じて呼び出すことができるアクセラレータをプログラグラム可能デバイス内に作成して、ハードウェア・アクセラレータを提供する。
【００２３】
コンピュータ・プログラムは、ソフトウェア・ライブラリへの呼び出しを含む。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される。プログラム可能デバイスは、１つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応する、ソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の呼び出しが、対応する現在実装されていうアクセラレータへの１又は複数の対応する呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の呼び出しが、新しいアクセラレータへの１又は複数の対応する呼び出しに置き換えられる。
【００２４】
図３を参照して、以下により詳細に説明されるように、コンピュータ・システム３００は、ソフトウェア・ライブラリへの呼び出しを１つ又は複数のアクセラレータへの呼び出しと動的に置き換えるアクセラレータ・デプロイ・ツールを含むコンピュータ・システムの１つの好適な実装である。サーバ・コンピュータ・システム３００は、ＩＢＭ  ＰＯＷＥＲ９コンピュータ・システムである。しかしながら、当業者であれば、コンピュータ・システムが、複雑なマルチユーザ・コンピューティング装置、単一のユーザ・ワークステーション、ラップトップ・コンピュータ・システム、タブレット・コンピュータ、電話、又は内蔵型制御システムであるかどうかに関係なく、本明細書における開示がいずれのコンピュータ・システムにも等しく適用されることを理解するであろう。図３に示されるように、コンピュータ・システム３００は、１つ又は複数のプロセッサ３１０、プログラム可能デバイス３１２、メイン・メモリ３２０、大容量ストレージ・インターフェース３３０、ディスプレイ・インターフェース３４０、及びネットワーク・インターフェース３５０を含む。これらのシステム・コンポーネントは、システム・バス３６０を用いて相互接続される。大容量ストレージ・インターフェース３３０は、ローカル大容量ストレージ・デバイス３５５などの大容量ストレージ・デバイスをコンピュータ・システム３００に接続するために用いられる。１つの特定のタイプのローカル大容量ストレージ・デバイス３５５は、データをＣＤ−ＲＷ３９５に格納し、そこから読み取ることができる読み取り可能及び書き込み可能ＣＤ−ＲＷドライブである。別の好適なタイプのローカル大容量ストレージ・デバイス３５５は、ＳＤカードなどの取り外し可能メモリ・カードを受け取り、取り外し可能メモリとの間で読み書きを実行するカード・リーダである。さらに別の好適なタイプのローカル大容量ストレージ・デバイス３５５は、サム・ドライブなどのストレージ・デバイスを読み取るユニバーサル・シリアル・バス（ＵＳＢ）である。
【００２５】
メイン・メモリ３２０は、好ましくは、データ３２１、オペレーティング・システム３２２、コンピュータ・プログラム３２３、アクセラレータ・デプロイ・ツール３２４、及びアクセラレータ・カタログ３２９を含む。データ３２１は、コンピュータ・システム３００において任意のプログラムへの入力又はそこからの出力として働く任意のデータを表す。オペレーティング・システム３２２は、ＡＩＸ又はＬＩＮＵＸなどのマルチタスク・オペレーティング・システムである。コンピュータ・プログラム３２３は、制限なく、アプリケーション・プログラム、オペレーティング・システム、ファームウェア、デバイス・ドライバ等を含む、任意の好適なコンピュータ・プログラムを表す。アクセラレータ・デプロイ・ツール３２４は、好ましくは、コード分析器３２５、アクセラレータ・イメージ生成器３２７、及びアクセラレータ実装器（implementer）３２８を含む。コード分析器３２５は、コンピュータ・プログラム３２３をそれが実行されるときに分析し、そのランタイム性能を判断する。コード分析器３２５がコンピュータ・プログラムを分析するための１つの好適な方法は、コンピュータ・プログラムのランタイム性能を監視するための既知の技術を用いることである。例えば、当技術分野において、例えば、コンピュータ・プログラム３２３の実行中、プロセッサ３１０によりどのアドレスが実行されているかを検知する、コンピュータ・プログラムの外部のモニタを用いて、コンピュータ・プログラムのランタイム性能のリアルタイム監視を可能にするツールが存在する。プロファイラとして知られる他のツールは、コンピュータ・プログラムの異なる分岐が実行されるとき、異なるカウンタをインクリメントするコードであるインストルメンテーション・コード（instrumentation code）をコンピュータ・プログラムに挿入するのを可能にする。カウンタの値を分析して、コンピュータ・プログラムの各部分を実行する頻度を求めることができる。コード分析器３２５は、コンピュータ・プログラムのランタイム性能を分析した後、コード部分３２６を特定し、このコード部分３２６は、コンピュータ・プログラム３２３内のコードの一部であるコード部分を特定し、ハードウェア・アクセラレータにデプロイされることにより改善され、コンピュータ・プログラム３２３のランタイム性能を向上させる。
【００２６】
アクセラレータ・イメージ生成器３２７は、コード分析器３２５により特定されたコンピュータ・プログラム３２３内のコード部分３２６に対応するアクセラレータ・イメージを動的に生成する。アクセラレータ・イメージ生成器３２７は、任意の好適な方法を用いて、コード部分３２６からアクセラレータ・イメージを生成することができる。例えば、アクセラレータ・イメージ生成器３２７は、コード部分３２６の同等のハードウェア記述言語（ＨＤＬ）表現を生成し、次に、ＨＤＬ表現を合成して、プログラム可能デバイス３１２のための好適なアクセラレータ・イメージにすることができる。アクセラレータ実装器３２８は、好ましくは、アクセラレータ・イメージ生成器３２７により生成されたアクセラレータ・イメージを取得し、アクセラレータ・イメージを有するようにプログラム可能デバイス３１２をプログラムし、それにより、コード部分３２６に対応するハードウェア・アクセラレータ３１４をプログラム可能デバイス３１２内に生成する。
【００２７】
第１の実装において、アクセラレータ・デプロイ・ツール３２４は、コンピュータ・プログラム３２３のコード部分３２６に対応するアクセラレータ・イメージを動的に生成し、次に、アクセラレータ・イメージを有するようにプログラム可能デバイスをプログラムするので、プログラム可能デバイスは、コード部分３２６に対応するハードウェア・アクセラレータを含む。第２の実装において、アクセラレータ・カタログ３２９が提供され、保持される。アクセラレータ・カタログ３２９は、好ましくは、前に生成されたアクセラレータのリストを含む。第２の実装において、アクセラレータ・デプロイ・ツール３２４は、最初に、アクセラレータ・カタログ３２９をチェックし、前に生成されたアクセラレータがコード部分３２６に利用可能であるかどうかを確認する。利用可能である場合、アクセラレータ・デプロイ・ツール３２４は、アクセラレータ・カタログ内に識別された前に生成されたアクセラレータ・イメージをデプロイする。利用可能でない場合、アクセラレータ・デプロイ・ツール３２４は、上述のようにアクセラレータ・イメージを動的に生成し、次に、イメージをプログラム可能デバイス３１２にロードし、コード部分３２６に対応するアクセラレータ３１４を提供する。
【００２８】
コンピュータ・システム３００は、コンピュータ・システム３００のプログラムが、メイン・メモリ３２０及びローカル大容量ストレージ・デバイス３５５などの複数のより小容量のストレージ・エンティティにアクセスする代わりに、あたかも、それらが大きい連続的なアドレス空間のみにアクセスできるように振る舞うことを可能にする周知の仮想アドレッシング機構を利用する。従って、データ３２１、オペレーティング・システム３２２、コンピュータ・プログラム３２３、アクセラレータ・デプロイ・ツール３２４、及びアクセラレータ・カタログ３２９は、メイン・メモリ３２０内にあるように示されるが、当業者であれば、これらの項目は、必ずしも全てがメイン・メモリ３２０内に同時に含まれる必要がないことを理解するであろう。また、本明細書では「メモリ」という用語は、一般的に、コンピュータ・システム３００の仮想メモリ全体を指すように使用され、コンピュータ・システム３００に結合された他のコンピュータ・システムの仮想メモリを含み得ることにも留意されたい。
【００２９】
プロセッサ３１０は、１つ又は複数のマイクロプロセッサ及び／又は集積回路から構成され得る。プロセッサ３１０は、例えば、１つ又は複数のＰＯＷＥＲ９マイクロプロセッサとすることができる。プロセッサ３１０は、メイン・メモリ３２０内に格納されたプログラム命令を実行する。メイン・メモリ３２０は、プロセッサ３１０がアクセスできるプログラム及びデータを格納する。コンピュータ・システム３００が起動すると、プロセッサ３１０は、最初に、オペレーティング・システム３２２を構成するプログラム命令を実行する。プロセッサ３１０はまた、コンピュータ・プログラム３２３及びアクセラレータ・デプロイ・ツール３２４も実行する。
【００３０】
プログラム可能デバイス３１２は、プロセッサ３１０により動的にプログラムすることができる任意の好適なプログラマブル論理デバイスとすることができる。既知の好適なプログラマブル論理デバイスの例として、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）が挙げられる。しかしながら、プログラム可能デバイス３１２は、プロセッサ３１０が、既知の技術並びに将来開発される技術を含む、プログラム可能デバイス３１２を動的にプログラムすることを可能にする任意のプログラム可能論理デバイスを広く含む。
【００３１】
コンピュータ・システム３００は、単一のプロセッサ及び単一のシステム・バスのみを含むように示されるが、当業者であれば、本明細書で説明されるアクセラレータ・デプロイ・ツールは、複数のプロセッサ及び／又は複数のバスを有するコンピュータ・システムを用いて実施され得ることを理解するであろう。さらに、使用されるインターフェースはそれぞれ、好ましくは、プロセッサ３１０から計算集中的な（compute-intensive）処理の負荷軽減のために用いられる別個の完全にプログラムされたマイクロプロセッサを含む。しかしながら、当業者であれば、これらの関数は、Ｉ／Ｏアダプタを用いても実行され得ることを理解するであろう。
【００３２】
ディスプレイ・インターフェース３４０は、１つ又は複数のディスプレイ３６５をコンピュータ・システム３００に直接接続するために用いられる。ノン・インテリジェント（すなわち、ダム）端末又は完全にプログラム可能なワークステーションとすることができるこれらのディスプレイ３６５は、システム管理者及びユーザに、コンピュータ・システム３００と通信する能力を与えるために用いられる。しかしながら、ディスプレイ・インターフェース３４０は、１つ又は複数のディスプレイ３６５との通信をサポートするために提供されるが、全ての必要なユーザとの対話及び他のプロセスは、ネットワーク・インターフェース３５０を介して行うことができるので、コンピュータ・システム３００は、必ずしもディスプレイ３６５を必要としないことに留意されたい。
【００３３】
ネットワーク・インターフェース３５０は、ネットワーク３７０を介して、コンピュータ・システム３００を他のコンピュータ・システム又はワークステーション３７５に接続するために用いられる。コンピュータ・システム３７５は、ネットワーク・インターフェース３５０を介してコンピュータ・システム３００に接続されるコンピュータ・システムを表す。ネットワーク・インターフェース３５０は、ネットワーク３７０が今日のアナログ及び／又はデジタル技術を含むか、又は将来の何らかのネットワーキング技術を介するかに関係なく、電子デバイスを相互接続するための任意の好適な方法を広く表す。ネットワーク・インターフェース３５０は、好ましくは、ネットワーク３７０上での通信を可能にするハードウェアとソフトウェアとの組み合わせを含む。ネットワーク・インターフェース３５０内のソフトウェアは、好ましくは、適切なネットワーク・プロトコルを用いて、ネットワーク３７０を介する他のコンピュータ・システム３７５との通信を管理する通信マネージャを含む。ネットワークを実装するために、多くの異なるネットワーク・プロトコルを用いることができる。これらのプロトコルは、コンピュータがネットワークにわたって通信するのを可能にする専用コンピュータ・プログラムである。ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネット・プロトコル）は、ネットワーク・インターフェース３５０内で通信マネージャにより用いることができる好適なネットワーク・プロトコルの一例である。１つの好適な実装において、ネットワーク・インターフェース３５０は、物理イーサネット・アダプタである。
【００３４】
本発明は、統合のいずれかの可能な技術的詳細レベルにおける、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。
【００３５】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
【００３６】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
【００３７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、及び、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個別化することができる。
【００３８】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【００３９】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作の態様を実施する命令を含む製品を含むようにすることもできる。
【００４０】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生産し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００４１】
図面内のフローチャート及びブロック図は、本発明の様々な実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００４２】
図４は、図３に示されるアクセラレータ・イメージ生成器３２７の１つの好適な実装の詳細を示す。アクセラレータ・イメージ生成器３２７は、図３及び図４に示されるコード部分３２６を入力として取得する。コード・ツー・ＨＤＬ（Code to HDL）生成器４１０は、好ましくは、コード部分３２６を、コード部分に対するＨＤＬ４２０のような図４に示されるハードウェア記述言語（ＨＤＬ）でのコード部分の対応する表現に変換する。既知の好適なハードウェア記述言語は、ＶＨＤＬ又はＶｅｒｉｌｏｇを含むが、任意の適切なハードウェア記述言語を用いることができる。コンピュータ・コードのＨＤＬ表現を生成するための既知のソフトウェア・ツールがある。例えば、ＸｉｌｉｎｘのＶｉｖａｌｄｏ  Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｙｎｔｈｅｓｉｓは、Ｃプログラミング言語で書かれたコードをＨＤＬに変換するソフトウェア・ツールである。当技術分野において、このタイプのツールは、「Ｃ  ｔｏ  ＨＤＬ」ツール又は「Ｃ  ｔｏ  ＲＴＬ」ツールと呼ばれることが多く、ここで、ＲＴＬは、ハードウェアにおいてコード部分を実装するのに必要とされるコード部分のレジスタ転送レベル表現を言う。図４のコード・ツー・ＨＤＬ生成器４１０は、既知のソフトウェア・ツールとすることができ、又はアクセラレータ・イメージ生成器３２７用に特別に設計されたソフトウェア・ツールとすることもできる。
【００４３】
コード部分に対するＨＤＬ４２０が、合成及びシミュレーションの両方を含み得る１つ又は複数のプロセスに与えられる。合成プロセス４３０は、図４の中間部分におけるステップ４３２、４３４、４３６、４３８及び４４０に示される。シミュレーション・プロセス４５０は、図４の下部におけるステップ４５２、４５４及び４６０に示される。コード部分に対するＨＤＬ４２０を、どのハードウェア要素を必要とするかを判断する合成ブロック４３２に与えることができる。配置及び経路指定ブロック４３４は、プログラム可能デバイス上で、ハードウェア要素をどこに置くか、及び、それらのハードウェア要素間の相互接続をどのように経路指定するかを決定する。タイミング分析４３６は、ブロック４３４において、ハードウェア要素が配置され、相互接続が経路指定された後に、アクセラレータの性能を分析する。試験ブロック４３８は、結果として得られるアクセラレータ・イメージの試験を実行し、タイミング及び性能パラメータが満たされたかどうかを判断する。試験ブロック４３８は、アクセラレータの設計が依然として改善を必要とするとき、デバッグ・ブロック４４０に返す。このプロセスは、数回繰り返すことができる。
【００４４】
シミュレーション・プロセス４５０は、コード部分に対するＨＤＬ４２０を利用し、その機能を判断するために、コンピュータ・シミュレーションを実行する。シミュレートされた試験ブロック４５４は、必要に応じてシミュレートされた設計が機能するかどうかを判断する。シミュレートされた試験ブロック４５４は、アクセラレータの設計が依然として改善を必要とするとき、デバッグ・ブロック４６０に返す。
【００４５】
アクセラレータ・イメージ生成器３２７は、合成ブロック４３０、シミュレーション・ブロック４５０、又はその両方を含むことができる。最も好ましい実装において、アクセラレータ・イメージ生成器３２７は、合成ブロック４３０及びシミュレーション・ブロック４５０の両方を含む。合成プロセスは、非常に時間がかかり得る。シミュレーション・ブロックは、一般的には、合成ブロックよりも、ＨＤＬの設計の試験においてずっと迅速である。合成ブロック４３０及びシミュレーション・ブロック４５０の両方が存在するとき、アクセラレータ・イメージ生成器は、任意の適切な方法又は組み合わせでこれらの両方を用いることができる。例えば、シミュレーション・ブロック４５０を用いて、最初に設計に対して数回反復し、設計がほとんど完成すると、ほぼ完成した設計を合成ブロック４３０に入れることができる。別の実装において、合成及びシミュレーション・ブロックは、アクセラレータ・イメージの生成が完了するまで、並行して機能し、協働することができる。使用される特定のプロセスに関係なく、アクセラレータ・イメージ生成器３２７は、コード部分３２６について、コード部分３２６に対応するアクセラレータ・イメージ４８０を生成する。ひとたびアクセラレータ・イメージ４８０が生成されると、図３のアクセラレータ実装器３２８は、アクセラレータ・イメージ４８０をプログラム可能デバイス３１２にロードし、コード部分３２６に対応するアクセラレータ３１４を生成することができる。次に、コード部分３２６の代わりに、コンピュータ・プログラムにより、プログラム可能デバイス３１２内のアクセラレータ３１４を呼び出すことができる。
【００４６】
図３のコード分析器３２５についての１つの可能な実装の幾つかの詳細を図５に示す。コード分析器３２５は、コンピュータ・プログラムをプロファイルするために用いられるコード・プロファイラ５１０を含むことができる。コンピュータ・プログラムが実行されるとき、プロファイルは、好ましくは、インストルメンテーション・コードをコンピュータ・プログラムに挿入し、プロファイル・データ５２０を生成するコード・プロファイラ５１０により行われる。プロファイル・データ５２０は、異なる部分を実行する頻度、ループ反復の数、発生する例外、データ需要、帯域幅、重要部分において費やされた時間等を含む、コンピュータ・プログラムの多くの可能な特徴を示す。ソフトウェア・プロファイラは、当技術分野において非常によく知られており、従って、ここではさらに詳細には説明しない。ここでの目的のために、あえて言うなら、コード・プロファイラ５１０は、プロファイルされるコンピュータ・プログラムのランタイム性能を示すプロファイル・データ５２０を生成する。
【００４７】
コード分析器３２５は、ハードウェア・アクセラレータ内に実装されることにより改善されるコード部分３２６を特定するコード選択ツール５３０をさらに含む。任意の適切な基準、アルゴリズム、又は発見的問題解決法（heuristic）に従って、任意の適切なコード部分を特定することができる。例えば、浮動小数点計算を行うコードの部分を特定し、対応する浮動小数点アクセラレータを生成し、コード内の浮動小数点計算を行うことができるようにすることができる。データベースの検索を実行するコードの部分を特定し、対応するデータベース検索アクセラレータを生成し、データベース検索を置き換えることができる。データ圧縮、ＸＭＬ解析、パケット・スヌーピング（packet snooping）、金融リスク計算等のような特定の関数を実行するコードの部分を特定することもできる。もちろん、本明細書における開示及び特許請求の範囲の範囲内で、他のコード部分を特定することもできる。コード選択ツール５３０は、コード部分３２６を特定するために、現在知られているものであろうと、又は将来開発されるものであろうと、任意の適切な基準、アルゴリズム、又は発見的問題解決法を使用することができる。ひとたびコンピュータ・プログラム内のコード部分３２６が特定されると、対応するアクセラレータを動的に生成することができる。
【００４８】
図６を参照して、本明細書における開示及び特許請求の範囲による方法６００が、コンピュータ・プログラムを実行すること（ステップ６１０）によって開始する。コンピュータ・プログラムのランタイム性能が分析される（ステップ６２０）。これは、例えば、図３及び図５に示され、上述されたコード分析器３２５により行うことができる。アクセラレータに実装するためのコンピュータ・プログラム内のコード部分が特定される（ステップ６３０）。コード部分に対するアクセラレータ・イメージが生成される（ステップ６４０）。アクセラレータ・イメージが、プログラム可能デバイスにデプロイされる（ステップ６５０）。次に、コード部分を、デプロイされたアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される（ステップ６６０）。この時点で、デプロイされたアクセラレータは、以前にはコード部分により実行されていた関数をハードウェアで実行し、それにより、コンピュータ・プログラムのランタイム性能が改善される。方法６００は、ステップ６１０にループ・バックして続行し、そのことは、方法６００が、コンピュータ・プログラムの性能を改善するために、反復してコンピュータ・プログラムを連続的に監視し、必要に応じて、アクセラレータをデプロイできることを意味する。
【００４９】
ここで、上述した概念を示すために、幾つかの例を提供する。図７は、図７においてコード部分Ａ  ７１０、コード部分Ｂ  ７２０、コード部分Ｃ  ７３０、．．．、コード部分Ｎ  ７９０として示される複数のコード部分を含むサンプル・コンピュータ・プログラム７００を示す。コード部分Ｂ  ７２０は、ハードウェア・アクセラレータで実装されることにより改善されることになるコード部分として特定されるものと仮定する。次に、図８に示されるように、コード部分Ｂ  ７２０は、対応するＨＤＬ表現に変換される。次に、コード部分ＢについてのＨＤＬ８１０は、コード部分Ｂについてのアクセラレータ・イメージ８２０を生成するために用いられる。これは、例えば、図４に示される方法を用いて、又は他のいずれかの適切な方法を用いて行うことができる。ひとたびコード部分Ｂについてのアクセラレータ・イメージ８２０が生成されると、アクセラレータ・イメージは、プログラム可能デバイス８３０にロードされて、コード部分に対するアクセラレータ８５０が生成される。プログラム可能デバイス８３０は、図３に示されるプログラム可能デバイス３１２についての１つの好適な実装であり、好ましくは、ＯｐｅｎＣＡＰＩインターフェース８４０を含む。
【００５０】
ひとたびアクセラレータがプログラム可能デバイス８３０内にデプロイされると、図９に示されるように、コンピュータ・プログラム内のコード部分Ｂが削除され、コード部分Ｂに対するアクセラレータへの呼び出し９１０に置き換えられる。最も好ましい実装において、コード部分Ｂに対するアクセラレータは、ひとたびコード部分Ｂに対するアクセラレータにおける処理が完了したときのそれを呼び出したコードへの戻りを含む。このように、コンピュータ・プログラム９００は、前にコード部分Ｂだったものを実行する必要があるとき、必要とされる関数をハードウェアで実行するコード部分Ｂに対するアクセラレータへの呼び出しを行い、次にコンピュータ・プログラムに戻る。このように、特定されたコード部分に対して適切なアクセラレータを自動的に生成して、コンピュータ・プログラムのランタイム性能を向上させることができる。
【００５１】
第１の実装において、図４〜図９に示され、上述されるように、コンピュータ・プログラムの性能を改善するために、アクセラレータを動的に生成することができる。第２の実装において、ひとたびアクセラレータが動的に生成されると、アクセラレータをカタログ内に格納できるので、必要に応じて、それを再使用することができる。図１０は、図３に示されるアクセラレータ・カタログ３２９についての１つの好適な実装であるサンプル・アクセラレータ・カタログ１０００を示す。アクセラレータ・カタログは、アクセラレータ又は対応するコード部分に必要とされ得るいずれかの適切なデータ又は情報を含むことができる。図１０に示される特定の例において、アクセラレータ・カタログは、以下のフィールド、すなわち名前、位置、最長時間未使用（Least Recently used、ＬＲＵ）、最最短時間未使用（Most Recently Used、ＭＲＵ）、依存関係、能力、待ち時間、及び他の特性の各々を含む。名前フィールドは、好ましくは、アクセラレータについての名前を含む。名前フィールドはまた、アクセラレータに対応するコード部分についての名前を含むこともできる。位置フィールドは、好ましくは、アクセラレータ・イメージについての位置を特定する経路を指定する。アクセラレータ・イメージはカタログ１０００内に格納され得るが、最も好ましい実装において、カタログ１０００は代わりに、アクセラレータ・イメージが格納されるアクセラレータ・カタログ１０００の外部のストレージへの経路を含む。最長時間未使用（ＬＲＵ）フィールドは、アクセラレータが初めて使用された時期を含むことができる。代案において、ＬＲＵフィールドは、カタログ内の全てのアクセラレータのうち、アクセラレータが最長時間未使用であるときに設定されるフラグを含むことができる。最短時間未使用（ＭＲＵ）フィールドは、アクセラレータが最後に使用された時期を含むことができる。代案において、ＭＲＵフィールドは、カタログ内の全てのアクセラレータのうち、アクセラレータが最短時間未使用のときに設定されるフラグを含むことができる。エラー率（error rate）フィールドは、アクセラレータについての適切なエラー率を提供し、任意の適切な方法で表すことができる。例えば図１０において、エラー率は、アクセラレータの１００回の実行当たりのエラーの数Ｘとして表される。エラー率フィールドは、例えば、動的に監視できる任意の適切なエラー情報を含むことができるので、エラー率の増大は、是正措置を取るための通知をもたらし得る。依存関係フィールドは、アクセラレータが有し得るいずれかの依存関係を示すことができる。例えば、依存関係フィールドは、アクセラレータが設計された特定のプログラム可能デバイスを指定することができる。依存関係フィールドはまた、他のアクセラレータへのいずれかの依存関係を指定することもできる。従って、図１０のアクセラレータＡｃｃ１は、Ａｃｃ２への依存関係を有し、そのことは、Ａｃｃ１が、Ａｃｃ２の実装を必要とすることを意味する。能力（capabilities）フィールドは、アクセラレータの能力の何らかの適切な表示を提供することができる。図１０に示される２つのエントリにおいて、能力は、Ａｃｃ１用のＦＰユニット及びＡｃｃＮ用のグラ���ィックスとして示される。しかしながら、能力は、任意の適切な方法で示し得ることに留意されたい。例えば、能力は、アクセラレータが実装されたコード部分の仕様を含むことができる。記述子、又はコード部分の属性を記述する他のデータと共に、各コード部分を対応するアクセラレータに相関させる別個のインデックスを保持することができる。能力フィールドは、インデックスへのポインタのような任意の適切な情報を含むことができるので、アクセラレータに対応するコード部分を容易に特定することができる。
【００５２】
待ち時間フィールドは、好ましくは、アクセラレータについての平均待ち時間を指定する。図１０に示される例において、Ａｃｃ１は、１．０マイクロ秒の待ち時間を有する一方、ＡｃｃＮは、５００ナノ秒の待ち時間を有する。待ち時間は、例えば、アクセラレータがその意図した機能を実行するのに必要な時間を表すことができる。他の特性フィールドは、アクセラレータ、その特性及び属性、並びにアクセラレータに対応するコード部分を説明する又は他の方法で特定する任意の他の適切な情報又はデータを含むことができる。図１０の２つのサンプル・エンティティにおいて、他の特性フィールドは、Ａｃｃ１がネットワーク接続を含むことを示し、ＡｃｃＮは、Ａｃｃ５に対するアフィニティ（affinity）を有し、そのことは、可能であれば、プログラム可能デバイス上で、ＡｃｃＮをＡｃｃ５の近くに配置すべきであることを意味する。図１０の種々のフィールドが例として示され、それは本明細書における開示及び特許請求の範囲内にあり、アクセラレータ・カタログに任意の適切な情報又はデータを提供する。
【００５３】
図１１を参照すると、第２の実装による方法１１００が、コンピュータ・プログラムを実行する（ステップ１１１０）ことにより開始する。コンピュータ・プログラムのランタイム性能が分析される（ステップ１１２０）。ハードウェア・アクセラレータを用いて改善されることになるコンピュータ・プログラム内の１又は複数のコード部分が特定される（ステップ１１３０）。特定されたコード部分の１つが選択される（ステップ１１４０）。アクセラレータ・カタログ内に、選択されたコード部分に対する前に生成されたアクセラレータがあるとき（ステップ１１５０＝はい）、前に生成されたアクセラレータ・イメージがプログラム可能デバイスにデプロイされ（ステップ１１６０）、アクセラレータを与える。次に、選択されたコード部分をアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される（ステップ１１６２）。カタログ内に、選択されたコード部分に対する前に生成されたアクセラレータがないとき（ステップ１１５０＝いいえ）、選択されたコード部分に対するアクセラレータ・イメージが動的に生成され（ステップ１１７０）、アクセラレータ・イメージがプログラム可能デバイスにデプロイされ（ステップ１１７２）、コード部分を新しくデプロイされたアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂され（ステップ１１７４）、アクセラレータは、アクセラレータ・カタログに格納される（ステップ１１７６）。アクセラレータ・イメージがカタログ・エントリ内に格納されるときには、ステップ１１７６は、アクセラレータ・イメージをカタログに書き込む。アクセラレータ・イメージがカタログの外部のストレージ内に格納されるときには、ステップ１１７６は、アクセラレータ・イメージを外部ストレージに格納し、エントリを、外部ストレージ内のアクセラレータ・イメージへの経路を含むアクセラレータ・カタログに書き込む。
【００５４】
それ以上の特定されたコード部分があるとき（ステップ１１８０＝はい）、方法１１００は、ステップ１１４０にループ・バックして続行する。それ以上の特定されたコード部分がないとき（ステップ１１８０＝いいえ）、方法１１００は、ステップ１１２０にループ・バックして続行する。これは、方法１１００が、最も好ましくは、コンピュータ・プログラムのランタイム性能を改善するために、コンピュータ・プログラムを連続的に監視し、必要に応じて、アクセラレータを動的に生成及びデプロイすることを意味する。
【００５５】
ここで、第２の好ましい実装に関連する図１１における概念を示すために、１つの例を提供する。図１２は、コード部分Ｐ  １２１０、コード部分Ｑ  １２２０、コード部分Ｒ  １２３０、．．．、コード部分Ｚ  １２９０として図１２に表される多くのコード部分を含むサンプル・コンピュータ・プログラム１２００を示す。図１１のステップ１１１０、１１２０、及び１１３０が実行されると仮定する。ステップ１１３０において、図１３の表１３００に示されるように、コードＱ  １２２０及びコード部分Ｒ  １２３０は、アクセラレータにおいてこれらのコード部分を実装することにより改善されるコード部分として特定されると仮定する。さらに、図３に示されるアクセラレータ・カタログ３２９に対する１つの適切な実装であるアクセラレータ・カタログ１４００を有すると仮定する。アクセラレータ・カタログ１４００は、前に生成されたコード部分Ｑに対するアクセラレータ１２２０であると仮定する。ＡｃｃＱについての単一のエントリを有する。コード部分Ｑに対するアクセラレータ１２２０は前に生成されているので、新たにアクセラレータ・イメージを生成する必要なく、対応するアクセラレータ・イメージを使用することができる。ステップ１１４０において、コード部分Ｑ  １２２０が選択されると仮定する。カタログ内に、コード部分Ｑに対する前に生成されたアクセラレータがあるので（ステップ１１５０＝はい）、図１５に示されるように、コード部分Ｑ  １５１０に対応する前に生成されたアクセラレータが、プログラム可能デバイスにデプロイされる（ステップ１１６０）。カタログ内で特定されたコード部分Ｑに対するアクセラレータ・イメージ１５１０の、プログラム可能デバイス１５２０へのデプロイにより、プログラム可能デバイス１５２０においてコード部分Ｑに対するアクセラレータ１５４０の実装がもたらされる。次に、コンピュータ・プログラムにより、コード部分Ｑに対するアクセラレータ１５４０を呼び出し、ハードウェアにおける前のコード部分Ｑの機能を実行することができ、それにより、コンピュータ・プログラムのランタイム性能が向上する。プログラム可能デバイス１５２０は、図３に示されるプログラム可能デバイス３１２の１つの適切な例であり、好ましくは、ＯｐｅｎＣＡＰＩインターフェース１５３０を含む。
【００５６】
次に、選択されたコード部分Ｑ  １２２０をコード部分Ｑに対するアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される（ステップ１１６２）。図１６は、コード部分Ｑが、図１６の１６１０に示されるようなコード部分Ｑに対するアクセラレータへの呼び出しに置き換えられた後の、図１２のコンピュータ・プログラム１２００を示す。従って、コンピュータ・プログラム１６００は、コード部分Ｑを実行する代わりに、プログラム可能デバイス１５２０内のコード部分Ｑに対するアクセラレータ１５４０を呼び出し、コンピュータ・プログラムのランタイム性能を向上させる。
【００５７】
さらに特定されたコード部分がある（ステップ１１８０＝はい）、すなわち図１３に示されるコード部分Ｒがあるので、図１１の方法１１００は、ステップ１１４０にループ・バックし、そこで、コード部分Ｒ  １２３０が選択される（ステップ１１４０）。図１４に示されるカタログ１４００内に、コード部分Ｒに対する前に生成されたアクセラレータがなく（ステップ１１５０＝いいえ）、従って、コード部分Ｒに対するアクセラレータ・イメージが動的に生成される（ステップ１１７０）。これは図１７に表され、ここで、コード部分Ｒ  １２３０は、コード部分Ｒ  １７２０に対するＨＤＬを生成するために用いられ、ＨＤＬは、コード部分Ｒに対するアクセラレータ・イメージ１７２０を生成するために用いられる。次に、新しく動的に生成された、コード部分Ｒに対するアクセラレータ・イメージ１７２０が、プログラム可能デバイスにデプロイされる（ステップ１１７２）。これは図１８に示され、ここで、コード部分Ｑに対するアクセラレータ１５４０を既に含むプログラム可能デバイス１５２０に、コード部分Ｒに対するアクセラレータ・イメージ１７２０がロードされ、コード部分Ｒに対するアクセラレータ１８１０を生成する。次に、コード部分Ｒを、コード部分Ｒに対するアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される（ステップ１１７４）。また、コード部分Ｒに対するアクセラレータは、アクセラレータ・カタログ内にも格納され（ステップ１１７６）、その結果、図２０に示されるように、アクセラレータ・カタログ１４００は、２つのアクセラレータに対応するエントリＡｃｃＱ及びＡｃｃＲを含む。
【００５８】
図２１及び図２２において、より具体的な例を示す。この例において、サンプル１と呼ばれるコンピュータ・プログラム２１００は、関心ある３つの異なるコード部分、すなわちループ部分２１１０、分岐ツリー部分２１２０、及び非常に長いシリアル部分２１３０を含む。ループ部分２１１０は、各々の反復が他の反復とは大きく独立しているため、アンロールできるループであるコード部分を表す。各々の反復の独立性のため、ループをアンロールすることができ、ループ機能をアクセラレータにデプロイできるので、各々の反復は、ハードウェアにおいて並行して実行される。金融リスク計算は、ループ部分２１１０のようなコード部分を含むこともある。ハードウェア・アクセラレータにおいてループの異なる反復を並行して実行することにより、サンプル１のコンピュータ・プログラムのランタイム性能が向上する。
【００５９】
サンプル１のコンピュータ・プログラム２１００はまた、分岐ツリー部分２１２０も含む。この例において、分岐ツリー部分２１２０は、１つ又は複数の比較的深い分岐ツリーで動作すると仮定する。この場合、分岐ツリー部分２１２０をアクセラレータにデプロイできるので、分岐ツリーの各分岐は、ハードウェアにおいて並行に実行され、分岐セクション基準が計算され、論理の最終段階において、結果が、選択された分岐から選択される。ハードウェア・アクセラレータにおいて分岐ツリーの異なる分岐を並行して実行することにより、サンプル１のコンピュータ・プログラムのランタイム性能が向上する。
【００６０】
サンプル１のコンピュータ・プログラム２１００はまた、非常に長いシリアル部分２１３０も含む。この例において、非常に長いシリアル部分２１３０は、アクセラレータ内のハードウェア特有の能力を利用することにより、短くすることができると仮定する。例えば、アクセラレータ内に実装できる何らかの数学関数を、長い連続部分により実行することができる。ハードウェアにおいて非常に長いシリアル部分を実行することにより、サンプル１のコンピュータ・プログラムのランタイム性能が向上する。
【００６１】
図２１のコード部分は、図５のコード・プロファイラ５１０により生成されたプロファイル・データ５２０に従って特定されると仮定する。図３及び図５のコード部分３２６の例であるコード部分２１１０、２１２０及び２１３０を選択するために、コード選択ツール５３０により使用される基準は、任意の適切な基準とすることができる。上述したような図２１の３つの例示的なコード部分２１１０、２１２０及び２１３０は、１つ又は複数のアクセラレータ内に実装されるべきコード部分２１１０、２１２０及び２１３０を選択するために、コード選択ツール５３０により使用され得る適切な基準を示す。もちろん、本明細書における特許請求の範囲及び開示は、明白に、１つ又は複数のアクセラレータ内に実装されるべき１つ又は複数のコード部分３２６を選択するための、コード選択ツール５３０のための任意の適切な基準にも及ぶ。
【００６２】
図２２は、ループ部分に対するアクセラレータ２２４０、分岐ツリー部分に対するアクセラレータ２２５０、及び非常に長いシリアル部分に対するアクセラレータ２２６０を含むＯｐｅｎＣＡＰＩインターフェース２２３０を有するプログラム可能デバイス２２２０を示す。これらの３つのアクセラレータは、図２２の同じプログラム可能デバイス２２２０内に実装されるように示されるが、当業者であれば、これらは別個のプログラム可能デバイス内にも実装され得ることを理解するであろう。
【００６３】
図２３は、図２１に示されるコード部分が図２２に示されるハードウェア・アクセラレータへの呼び出しに置き換えられた後の、サンプル１のコンピュータ・プログラム２１００を示す。従って、図２１のループ部分２１１０は、ループ部分に対するアクセラレータ２３１０への呼び出しに置き換えられ、図２１の分岐ツリー部分２３２０は、分岐ツリー部分に対するアクセラレータ２３２０への呼び出しに置き換えられ、図２１の非常に長いシリアル部分２１３０は、非常に長いシリアル部分２３３０に対するアクセラレータへの呼び出しに置き換えられる。ここで図２３のサンプル１のコンピュータ・プログラム２１００は、ハードウェア・アクセラレータへの呼び出しを含むので、コンピュータ・プログラム２１００のランタイム性能が向上する。
【００６４】
図２４は、ソフトウェア・ライブラリ２４１０内の関数への呼び出しを含む、従来技術のコンピュータ・プログラム２４００を示す。ソフトウェア・ライブラリは、当技術分野において非常によく知られており、これらの共通関数をコード化しなければならない代わりに、プログラマが使用できる共通関数を提供する。例えば、圧縮、グラフィック処理及びＸＭＬ解析を実行する関数をソフトウェア・ライブラリ内に含めることができる。コンピュータ・プログラム２４００は、コード部分Ｄ  ２４２０、コード部分Ｅ  ２４２２、コード部分Ｆ  ２４２４、コード部分Ｌ  ２４２８に至るまでの図示されない可能な他のコード部分を含む。ソフトウェア・ライブラリ２４１０は、関数Ｌ１  ２４３０、Ｌ２  ２４３２、Ｌ３  ２４３４、Ｌ４  ２４３６、ＬＮ２４５０に至るまでの可能な他の関数を含む。コンピュータ・プログラム２４００内のコード部分Ｄ  ２４２０は、ソフトウェア・ライブラリ２４１０内の関数Ｌ１  ２４３０への呼び出しを含む。コード部分Ｆ  ２４２４は、ソフトウェア・ライブラリ２４１０内の関数Ｌ４  ２４３６への呼び出しを含む。コード部分Ｌ  ２４２８は、ソフトウェア・ライブラリ２４１０内の関数Ｌ２  ２４３２への呼び出しを含む。
【００６５】
図２５を参照すると、方法２５００が、好ましくは、図３のアクセラレータ・デプロイ・ツール３２４により実行される。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しが判断される（ステップ２５１０）。ソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される（ステップ２５２０）。１つ又は複数のプログラム可能デバイス内に現在実装されている利用可能なアクセラレータが判断される（ステップ２５３０）。次に、現在実装されているアクセラレータに対応するソフトウェア・ライブラリ内の呼び出しが判断される（ステップ２５４０）。次に、仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の関数呼び出しが、対応する現在実装されているアクセラレータへの１又は複数の対応する呼び出しに置き換えられる（ステップ２５５０）。次に、方法２５００は、ステップ２５１０にループ・バックし、このことは、アクセラレータがデプロイ又は除去されるとき、この方法がその機能を連続的に実行できることを意味することに留意されたい。
【００６６】
仮想関数テーブルの１つの特定の実装が、図２６の２６００に示される。仮想関数テーブル２６００は、ソフトウェア・ライブラリに前に直接行われたコンピュータ・プログラムからの呼び出しを列挙し、１レベルの間接化をもたらすので、可能なときは、代わりに、アクセラレータに対してそれらの呼び出しを行うことができる。図２７のコンピュータ・プログラム２７００に示されるように、図２４のコンピュータ・プログラム２４００における呼び出しが、仮想関数テーブル２６００内の関数への呼び出しに置き換えられる。従って、Ｌ１への呼び出しは、Ｆ１への呼び出しに置き換えられ、Ｌ４への呼び出しは、Ｆ４への呼び出しに置き換えられ、Ｌ２への呼び出しは、Ｆ２への呼び出しに置き換えられる。仮想関数テーブル２６００は、コンピュータ・プログラムからの各呼び出しついてどの関数を呼び出すかを示す。仮想関数テーブルが最初に構築されると、コンピュータ・プログラムからの各呼び出しは、ソフトウェア・ライブラリへの対応する呼び出しにマッピングされる。従って、変更されたコンピュータ・プログラム２７００及び仮想関数テーブル２６００は、図２４に示されるものと類似の関数を提供するが、１レベルの間接化を伴う。従って、コード部分Ｄ  ２７２０は、仮想関数テーブル２６００における関数Ｆ１を呼び出し、そのことは、ソフトウェア・ライブラリ内のＬ１への呼び出しを生成する。コード部分Ｆ  ２７２４は、仮想関数テーブル２６００における関数Ｆ４を呼び出し、そのことは、ソフトウェア・ライブラリ内のＬ４への呼び出しを生成する。コード部分Ｌ  ２７２８は、仮想関数テーブルにおける関数Ｆ２を呼び出し、そのことはソフトウェア・ライブラリ内のＬ２への呼び出しを生成する。この簡単な例から、仮想関数テーブルが最初に構築されると、それが図２４に示されるような類似の関数を提供する、すなわち、仮想関数テーブルへの各呼び出しが、対応するソフトウェア・ライブラリへの呼び出しをもたらす。
【００６７】
図２８は、アクセラレータ相関テーブル２８００を示す。この例では、３つのアクセラレータ、すなわちＡｃｃ１、Ａｃｃ２及びＡｃｃ３がデプロイされたと仮定する。これらのアクセラレータは、ソフトウェア・ライブラリ内の３つの関数に対応すると仮定する。従って、図２８に示されるように、Ａｃｃ１はライブラリ関数Ｌ４に対応し、Ａｃｃ２はライブラリ関数Ｌ１に対応し、Ａｃｃ３はライブラリ関数Ｌ２に対応する。アクセラレータとライブラリ関数との間の相関は、ユーザが、アクセラレータ相関テーブルへのエントリを手作業で生成する、又はアクセラレータ・デプロイ・ツールが、アクセラレータとライブラリ関数との間の相関を自動的に判断するなど、任意の適切な方法で判断することができる。ユーザにより手作業で生成されたアクセラレータの場合、ユーザは、同じライブラリ名及び関数名を使用することができ、従って、コード・リンカが、アクセラレータを自動的に検知し、ソフトウェア・ライブラリの代わりにアクセラレータへの呼び出しを生成することが可能になる。同様に、自動的に生成されたアクセラレータは、同じライブラリ名及び関数名を使用することができ、コード・リンカが、同様の方法でアクセラレータを自動的に検知し、ソフトウェア・ライブラリの代わりに、アクセラレータへの呼び出しを生成するのを可能にする。異なる実装において、アクセラレータは、その関数を特徴付けるデータを含むことができ、それにより、アクセラレータに問い合わせて、アクセラレータがサポートする関数を判断することが可能になり、その情報を用いて、ソフトウェア・ライブラリへの呼び出しを、代わりにアクセラレータへの呼び出しに置き換えることができる。
【００６８】
図２９は、ＯｐｅｎＣＡＰＩインターフェース２２３０と、図２８に参照される３つのアクセラレータＡｃｃ１、Ａｃｃ２及びＡｃｃ３とを含むプログラム可能デバイス２９００を示す。これらの３つのアクセラレータ２９１０、２９２０及び２９３０は、プログラム可能デバイス２９００内に既に存在するので、現在実装されているアクセラレータである。図２９はまた、まだ使用されていない、プログラム可能デバイス２９００上の利用可能なリソース２９５０も示す。
【００６９】
ここで、図２６〜図２９の特定の例に関して、図２５の方法２５００を考える。ステップ２５１０及び２５２０は、図２６の仮想関数テーブル２６００を構築する。ステップ２５３０は、Ａｃｃ１  ２９１０、Ａｃｃ２  ２９２０及びＡｃｃ３  ２９３０がプログラム可能デバイス２９００内に現在実装されており、使用できると判断する。ステップ２５４０は、アクセラレータ相関テーブル２８００を読み取り、Ａｃｃ１がライブラリ関数Ｌ４に対応し、Ａｃｃ２がライブラリ関数Ｌ１に対応し、Ａｃｃ３がライブラリ関数Ｌ２に対応することを判断する。上述のように、これらのライブラリ関数は、圧縮、グラフィック処理、ＸＭＬ解析、又は他の何れかの適切なライブラリ関数を実行する関数とすることができる。次に、図３０の仮想関数テーブル２６００に示されるように、ステップ２５５０は、仮想関数テーブル内のソフトウェア・ライブラリへの呼び出しを、現在実装されているアクセラレータへの呼び出しに置き換える。従って、仮想関数テーブルは、コンピュータ・プログラムが、ソフトウェア・ライブラリ関数がアクセラレータで実装されていることを認識することなく、ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えることを可能にする１レベルの間接化を提供する。その結果、コンピュータ・プログラムに透過的な方法で、コンピュータ・プログラムのランタイム性能が改善される。
【００７０】
代替的な実施形態において、現在実装されているアクセラレータを用いてソフトウェア・ライブラリ関数への呼び出しを置き換えることができるだけでなく、新しいアクセラレータを動的に生成して、ソフトウェア・ライブラリ関数への呼び出しを置き換えることもできる。図３１を参照すると、新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装できないとき（ステップ３１１０＝いいえ）、方法３１００は、新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装できる（ステップ３１１０＝はい）まで、ステップ３１１０にループ・バックして続行する。新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装できるかどうかを判断するのに作用する１つの要因は、１つ又は複数のプログラム可能デバイス上の利用可能なリソースである。例えば、図２９の利用可能なリソース２９５０が、利用可能なリソース２９５０にデプロイされ得る新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装するための十分なリソースを提供する場合、ステップ３１１０は、はい（肯定）であり得る。新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される（ステップ３１２０）。新しいアクセラレータ・イメージを動的に生成するための１つの適切な方法は、上に詳述した図４のプロセスを用いることである。もちろん、アクセラレータ・イメージを動的に生成するための他の方法も、本明細書における開示及び特許請求の範囲の範囲内にある。次に、ステップ３１２０において動的に生成されたアクセラレータ・イメージがプログラム可能デバイスにデプロイされて、新しいアクセラレータが生成される（ステップ３１３０）。仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の呼び出しが、新しいアクセラレータへの対応する１又は複数の呼び出しに置き換えられる（ステップ３１４０）。次に、方法３１００は、ステップ３１１０にループ・バックして続行し、このことは、方法３１００が、必要に応じて、新しいアクセラレータを作成するために連続的に監視し、機能できることを意味する。
【００７１】
図３１の方法３１００の議論において図２６〜図３０の同じ例を続ける。この特定の例において、ステップ３１１０は、新しいアクセラレータでソフトウェア・ライブラリにおけるＬ３への呼び出しを実装できる（ステップ３１１０＝はい）ことを判断すると仮定する。ステップ３１２０において、Ａｃｃ４と呼ばれる新しいアクセラレータのためのアクセラレータ・イメージが生成され、次に、ステップ３１３０において、プログラム可能デバイスにデプロイされると仮定する。Ａｃｃ４のためのイメージは、図２９に示される同じプログラム可能デバイス２９００にデプロイされ、図３２に示されるように、Ａｃｃ１  ２９１０、Ａｃｃ２  ２９２０、Ａｃｃ３  ２９３０及びＡｃｃ４  ３２４０を含むプログラム可能デバイス２９００をもたらすと仮定する。利用可能なリソース３２５０は、Ａｃｃ４がそれらのリソースの一部を使用しているので、図２９におけるものより少ないことに留意されたい。次に、図３３に示されるように、図３１のステップ３１４０は、仮想関数テーブル内のＬ４への呼び出しを、Ａｃｃ４への呼び出しに置き換える。この時点で、コンピュータ・プログラムが、仮想関数テーブル２６００内の関数Ｆ４を呼び出すと、ソフトウェア・ライブラリへの呼び出しを介して関数を実行する代わりに、Ａｃｃ４がこの関数を実行するために呼び出される。
【００７２】
図８、図１５及び図２２に示されるアクセラレータは、ＯｐｅｎＣＡＰＩインターフェースを含む。しかしながら、本明細書に開示され、特許請求の範囲に記載されているように、アクセラレータを動的に生成し、デプロイするためには、ＯｐｅｎＣＡＰＩインターフェースが厳密に必要とされるのではないことに留意されたい。ＯｐｅｎＣＡＰＩは仕様がオープンであり、誰もが、仕様に従って開発し、クラウド環境で相互運用するのが可能であることから、ＯｐｅｎＣＡＰＩインターフェースを含むプログラム可能デバイスにアクセラレータをデプロイすることは有用である。さらに、ＯｐｅｎＣＡＰＩインターフェースは、より低い待ち時間を提供し、アクセラレータと、アクセラレータが消費又は生成し得るデータとの間の「距離」を低減させる。さらに、ＯｐｅｎＣＡＰＩは、より高い帯域幅を提供し、所与の時間にアクセラレータが消費又は生成できるデータの量を増大させる。ＯｐｅｎＣＡＰＩのこれらの利点が組み合わされて、アクセラレータにおけるコンピュータ・プログラムのコード部分を実装するための良好な環境を提供し、コンピュータ・プログラムにおけるよりもアクセラレータにおいてより良好となるコード部分の閾値を低下させる。しかしながら、本明細書における開示及び特許請求の範囲は、ＯｐｅｎＣＡＰＩインターフェースを含まない又はこれにアクセスできないアクセラレータにも等しく適用される。
【００７３】
コンピュータ・プログラムは、ソフトウェア・ライブラリへの呼び出しを含む。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される。プログラム可能デバイスは、１つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応するソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の呼び出しが、対応する現在実装されているアクセラレータへの１又は複数の呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの１又は複数の呼び出しが、新しいアクセラレータへの１又は複数の対応する呼び出しに置き換えられる。
【００７４】
当業者であれば、特許請求の範囲内で多くの変形が可能であることを理解するであろう。従って、本開示が上記に具体的に示され、説明されるが、当業者は、特許請求の範囲から逸脱することなく、形態及び詳細におけるこれら及び他の変更を行い得ることを理解するであろう。
【符号の説明】
【００７５】
１００、３００：コンピュータ・システム
１１０、３１０：プロセッサ
１２０：ＰＣＩｅインターフェース
１４０：標準メモリ
１５０、２１０、８４０、１５３０、２２３０：ＯｐｅｎＣＡＰＩインターフェース
１６０、２２０Ａ、２２０Ｂ〜２２０Ｎ、２９１０、２９２０、２９３０：アクセラレータ
１７０：コヒーレント・ネットワーク・コントローラ
１８０：アドバンスト・メモリ
１９５：ストレージ
２００、３１２、８３０、１５２０、２２２０、２９００：プログラム可能デバイス
３２０：メイン・メモリ
３２１：データ
３２２：オペレーティング・システム
３２３：コンピュータ・プログラム
３２４：アクセラレータ・デプロイ・ツール
３２５：コード分析器
３２６、７１０、７２０、７３０〜７９０、１２１０、１２２０、１２３０〜１２９０、２１１０、２１２０、２１３０、２４２０、２４２２、２４２４、２４２８、２７２０、２７２４、：コード部分
３２７：アクセラレータ・イメージ生成器
３２８：アクセラレータ実装器
３２９、１０００、１４００：アクセラレータ・カタログ
３３０：大容量ストレージ・インターフェース
３４０：ディスプレイ・インターフェース
３５０：ネットワーク・インターフェース
３６０：システム・バス
４１０：コード・ツー・ＨＤＬ生成器
４２０：ハードウェア記述言語（ＨＤＬ）
４３０：合成プロセス
４５０：シミュレーション・プロセス
５１０：コード・プロファイラ
５３０：コード選択ツール
７００、９００、１２００、２１００、２７００：コンピュータ・プログラム
２１１０：ループ部分
２１２０：分岐ツリー部分
２１３０：非常に長いシリアル部分
２４１０：ソフトウェア・ライブラリ
２６００：仮想関数テーブル
２８００：アクセラレータ相関テーブル
２９５０：利用可能なソース
【図１】
2021508117.tif 000003
【図２】
2021508117.tif 000004
【図３】
2021508117.tif 000005
【図４】
2021508117.tif 000006
【図５】
2021508117.tif 000007
【図６】
2021508117.tif 000008
【図７】
2021508117.tif 000009
【図８】
2021508117.tif 000010
【図９】
2021508117.tif 000011
【図１０】
2021508117.tif 000012
【図１１】
2021508117.tif 000013
【図１２】
2021508117.tif 000014
【図１３】
2021508117.tif 000015
【図１４】
2021508117.tif 000016
【図１５】
2021508117.tif 000017
【図１６】
2021508117.tif 000018
【図１７】
2021508117.tif 000019
【図１８】
2021508117.tif 000020
【図１９】
2021508117.tif 000021
【図２０】
2021508117.tif 000022
【図２１】
2021508117.tif 000023
【図２２】
2021508117.tif 000024
【図２３】
2021508117.tif 000025
【図２４】
2021508117.tif 000026
【図２５】
2021508117.tif 000027
【図２６】
2021508117.tif 000028
【図２７】
2021508117.tif 000029
【図２８】
2021508117.tif 000030
【図２９】
2021508117.tif 000031
【図３０】
2021508117.tif 000032
【図３１】
2021508117.tif 000033
【図３２】
2021508117.tif 000034
【図３３】
2021508117.tif 000035
【手続補正書】
【提出日】令和2年8月20日(2020.8.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに結合されたメモリと、
現在実装されているアクセラレータを含む、前記少なくとも１つのプロセッサに結合されたプログラム可能デバイスと、
前記メモリ内にあり、前記少なくとも１つのプロセッサにより実行されるコンピュータ・プログラムと、
前記メモリ内にあり、前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、
前記メモリ内にあり、前記少なくとも１つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断し、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築し、前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断し、前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第１の呼び出しが、前記現在実装されているアクセラレータに対応することを判断し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第１の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、
を含む、装置。
【請求項２】
前記プログラム可能デバイスは、前記少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、請求項１に記載の装置。
【請求項３】
前記アクセラレータ・デプロイ・ツールは、新しいアクセラレータで前記ソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断し、前記新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第２の呼び出しを前記新しいアクセラレータへの呼び出しに置き換える、請求項１に記載の方法。
【請求項４】
前記新しいアクセラレータは、前記プログラム可能デバイス内の前記現在実装されているアクセラレータではない、請求項３に記載の装置。
【請求項５】
前記アクセラレータ・デプロイ・ツールは、前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することにより、前記アクセラレータ・イメージを動的に生成する、請求項３に記載の装置。
【請求項６】
前記プログラム可能デバイスは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）を含む、請求項１に記載の装置。
【請求項７】
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに結合されたメモリと、
前記少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、前記少なくとも１つのプロセッサに結合され、かつ、現在実装されているアクセラレータを含む、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）と、
前記メモリ内にあり、前記少なくとも１つのプロセッサにより実行されるコンピュータ・プログラムと、
前記メモリ内にあり、前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、
前記メモリ内にあり、前記少なくとも１つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断し、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築し、前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断し、前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第１の呼び出しが、前記現在実装されているアクセラレータに対応することを判断し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第１の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換え、前記現在実装されているアクセラレータではない新しいアクセラレータで前記ソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断し、前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することにより、前記新しいアクセラレータのための前記アクセラレータ・イメージを動的に生成し、前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第２の呼び出しを前記新しいアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、
を含む、装置。
【請求項８】
コンピュータ・プログラムのランタイム性能を向上させるための方法であって、
プログラム可能デバイス内に現在実装されているアクセラレータを提供することと、
前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリを提供することと、
前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断することと、
前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築することと、
前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断することと、
前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第１の呼び出しが、前記現在実装されているアクセラレータに対応することを判断することと、
前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第１の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換えることと、
を含む、方法。
【請求項９】
前記プログラム可能デバイスは、前記少なくとも１つのプロセッサに結合されたＯｐｅｎ  Ｃｏｈｅｒｅｎｔ  Ａｃｃｅｌｅｒａｔｏｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＯｐｅｎＣＡＰＩ）を含む、請求項８に記載の方法。
【請求項１０】
新しいアクセラレータで前記ソフトウェア・ライブラリにおける第２の呼び出しを実装できることを判断することと、
前記新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することと、
前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成することと、
前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第２の呼び出しを前記新しいアクセラレータへの呼び出しに置き換えることと、
をさらに含む、請求項８に記載の方法。
【請求項１１】
前記新しいアクセラレータは、前記プログラム可能デバイス内の前記現在実装されているアクセラレータではない、請求項１０に記載の方法。
【請求項１２】
前記新しいアクセラレータのための前記アクセラレータ・イメージを動的に生成することは、
前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換することと、
前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することと、
を含む、請求項１０に記載の方法。
【請求項１３】
前記プログラム可能デバイスは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）を含む、請求項８に記載の方法。
【国際調査報告】
2021508117.tif 000036
2021508117.tif 000037