JP7252694B2 - ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えるための装置及び方法 - Google Patents

ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えるための装置及び方法 Download PDF

Info

Publication number
JP7252694B2
JP7252694B2 JP2020534594A JP2020534594A JP7252694B2 JP 7252694 B2 JP7252694 B2 JP 7252694B2 JP 2020534594 A JP2020534594 A JP 2020534594A JP 2020534594 A JP2020534594 A JP 2020534594A JP 7252694 B2 JP7252694 B2 JP 7252694B2
Authority
JP
Japan
Prior art keywords
accelerator
computer program
call
software library
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020534594A
Other languages
English (en)
Other versions
JP2021508117A (ja
Inventor
トンプソン、ランス、ゴードン
シャルト、ポール
チェン、ジム、チュンタ
キャリー、ジェイムズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2021508117A publication Critical patent/JP2021508117A/ja
Application granted granted Critical
Publication of JP7252694B2 publication Critical patent/JP7252694B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)

Description

本開示は、一般に、コンピュータ・システムに関し、より具体的には、コンピュータ・システムにおけるハードウェア・アクセラレータに関する。
Open Coherent Accelerator Processor Interface(OpenCAPI)は、産業界の先駆者たちのコンソーシアムにより開発された仕様である。OpenCAPI仕様は、任意のプロセッサが、コヒーレントなユーザ・レベル・アクセラレータ及びI/Oデバイスに取り付けられるのを可能にするインターフェースを定義する。OpenCAPIは、高性能のアクセラレータ設計の複雑さを最小にするように構築された、高帯域幅、低待ち時間のオープン・インターフェース設計仕様を提供する。レーン当たり毎秒25ギガビット(Gビット)のデータ転送速度の能力がある、OpenCAPIは、レーン当たり毎秒16Gビットの最大データ転送速度を提供する現在のperipheral component interconnect express(PCIe)仕様よりも性能が優れている。OpenCAPIは、データ処理を中心とする手法を提供し、計算能力をデータに近づけ、従来のシステム・アーキテクチャにおける非効率性を除去してシステム性能のボトルネックを取り除き、システム性能を向上させるのを助ける。OpenCAPIの大きな利点は、アクセラレータのようなOpenCAPIデバイスにおいて、プロセッサの仮想アドレスを共有し、プロセッサと同じ方法で利用できる点である。OpenCAPIの開発に伴い、今や、OpenCAPIアーキテクチャ上のインターフェースを含むハードウェア・アクセラレータが開発され得る。
ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに置き換えるための装置及び方法を提供する。
本発明の態様は、ソフトウェア・ライブラリへの呼び出しを含むコンピュータ・プログラムを提供する。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブル(virtual function table)が構築される。プログラム可能デバイスは、1つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応するソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの呼び出しが、対応する現在実装されているアクセラレータへの1つ又は複数の対応する呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の呼び出しが、新しいアクセラレータへの1又は複数の対応する呼び出しに置き換えられる。
第1の態様から見ると、本発明は、少なくとも1つのプロセッサと、少なくとも1つのプロセッサに結合されたメモリと、現在実装されているアクセラレータを含む、少なくとも1つのプロセッサに結合されたプログラム可能デバイスと、メモリ内にあり、少なくとも1つのプロセッサにより実行されるコンピュータ・プログラムと、メモリ内にあり、コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、メモリ内にあり、少なくとも1つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを判断し、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを含む仮想関数テーブルを構築し、プログラム可能デバイス内の現在実装されているアクセラレータが利用可能であることを判断し、ソフトウェア・ライブラリにおける複数の呼び出しの第1のものが、現在実装されているアクセラレータに対応することを判断し、仮想関数テーブル内のソフトウェア・ライブラリへの第1の呼び出しを現在実装されているアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、を含む装置を提供する。
好ましくは、本発明は、プログラム可能デバイスが、少なくとも1つのプロセッサに結合されたOpen Coherent Accelerator Processor Interface(OpenCAPI)を含む、装置を提供する。
好ましくは、本発明は、アクセラレータ・デプロイ・ツールが、新しいアクセラレータでソフトウェア・ライブラリにおける第2の呼び出しを実装できることを判断し、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、アクセラレータ・イメージをプログラム可能デバイスにデプロイして新しいアクセラレータを作成し、仮想関数テーブル内のソフトウェア・ライブラリへの第2の呼び出しを新しいアクセラレータへの呼び出しに置き換える、装置を提供する。
好ましくは、本発明は、新しいアクセラレータが、プログラム可能デバイス内の現在実装されているアクセラレータではない、装置を提供する。
好ましくは、本発明は、アクセラレータ・デプロイ・ツールが、コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、ハードウェア記述言語表現を処理して、そこからアクセラレータ・イメージを生成することにより、アクセラレータ・イメージを動的に生成する、装置を提供する。
好ましくは、本発明は、プログラム可能デバイスが、フィールド・プログラマブル・ゲート・アレイ(FPGA)を含む、装置を提供する。
第2の態様から見ると、本発明は、少なくとも1つのプロセッサと、少なくとも1つのプロセッサに結合されたメモリと、少なくとも1つのプロセッサに結合されたOpen Coherent Accelerator Processor Interface(OpenCAPI)を含む、少なくとも1つのプロセッサに結合され、現在実装されているアクセラレータを含む、フィールド・プログラマブル・ゲート・アレイ(FPGA)と、メモリ内にあり、少なくとも1つのプロセッサにより実行されるコンピュータ・プログラムと、メモリ内にあり、コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、メモリ内にあり、少なくとも1つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを判断し、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを含む仮想関数テーブルを構築し、プログラム可能デバイス内の現在実装されているアクセラレータが利用可能であることを判断し、ソフトウェア・ライブラリにおける複数の呼び出しの第1のものが、現在実装されているアクセラレータに対応することを判断し、仮想関数テーブル内のソフトウェア・ライブラリへの第1の呼び出しを現在実装されているアクセラレータへの呼び出しに置き換え、現在実装されているアクセラレータではない新しいアクセラレータでソフトウェア・ライブラリにおける第2の呼び出しを実装できることを判断し、コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、ハードウェア記述言語表現を処理して、そこからアクセラレータ・イメージを生成することにより、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、アクセラレータ・イメージをプログラム可能デバイスにデプロイして新しいアクセラレータを作成し、仮想関数テーブル内のソフトウェア・ライブラリへの第2の呼び出しを新しいアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールとを含む、装置を提供する。
第3の態様から見ると、本発明は、コンピュータ・プログラムのランタイム性能(run-time performance)を向上させるための方法を提供し、この方法は、プログラム可能デバイス内に現在実装されているアクセラレータを提供することと、コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリを提供することと、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを判断することと、コンピュータ・プログラムにおけるソフトウェア・ライブラリへの複数の呼び出しを含む仮想関数テーブルを構築することと、プログラム可能デバイス内の現在実装されているアクセラレータが利用可能であることを判断することと、ソフトウェア・ライブラリにおける複数の呼び出しの第1のものが、現在実装されているアクセラレータに対応することを判断することと、仮想関数テーブル内のソフトウェア・ライブラリへの第1の呼び出しを現在実装されているアクセラレータへの呼び出しに置き換えることとを含む。
好ましくは、本発明は、プログラム可能デバイスが、少なくとも1つのプロセッサに結合されたOpen Coherent Accelerator Processor Interface(OpenCAPI)を含む、方法を提供する。
好ましくは、本発明は、新しいアクセラレータでソフトウェア・ライブラリにおける第2の呼び出しを実装できることを判断することと、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することと、アクセラレータ・イメージをプログラム可能デバイスにデプロイして新しいアクセラレータを作成することと、仮想関数テーブル内のソフトウェア・ライブラリへの第2の呼び出しを新しいアクセラレータへの呼び出しに置き換えることとをさらに含む、方法を提供する。
好ましくは、本発明は、新しいアクセラレータが、プログラム可能デバイス内の現在実装されているアクセラレータではない、方法を提供する。
好ましくは、本発明は、新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することが、コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換することと、ハードウェア記述言語表現を処理して、そこからアクセラレータ・イメージを生成することとを含む、方法を提供する。
好ましくは、本発明は、プログラム可能デバイスが、フィールド・プログラマブル・ゲート・アレイ(FPGA)を含む、方法を提供する。
上記及び他の特徴及び利点は、添付図面と共に示される以下の1つ又は複数の具体的な説明からより明らかになるであろう。
添付図面と併せて本開示を説明し、図面では、同様の名称は、同様の要素を示す。
Open Coherent Accelerator Processor Interface(OpenCAPI)をどのように使用できるかを示すサンプル・システムのブロック図である。 1つ又は複数のハードウェア・アクセラレータを含むことができるOpenCAPIインターフェースを有するプログラム可能デバイスのブロック図である。 コンピュータ・プログラム内のコード部分に対するアクセラレータを動的に生成してデプロイするためのツールを含むコンピュータ・システムのブロック図である。 図3のアクセラレータ・イメージ生成器がコード部分からアクセラレータ・イメージをどのように生成するかについての特定の実装を示すフロー図である。 コンピュータ・プログラムを分析し、コード部分を選択する、図3のコード分析器についての特定の実装のブロック図である。 コンピュータ・プログラム内のコード部分を特定し、コード部分に対応するアクセラレータを動的に生成してデプロイし、次に、コード部分をデプロイされたアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムを改訂するための方法のフロー図である。 異なるコード部分を有する第1のサンプル・コンピュータ・プログラムを示すブロック図である。 どのようにコード部分をHDLに、次に、プログラム可能デバイスにデプロイしてアクセラレータを提供できるアクセラレータ・イメージに変換できるかを示すブロック図である。 コード部分Bがコード部分Bに対するアクセラレータへの呼び出しに置き換えられた後の、図7のコンピュータ・プログラムを示すブロック図である。 サンプル・アクセラレータ・カタログを示すブロック図である。 前に生成されたアクセラレータのカタログが保持されるときの、コード部分に対するアクセラレータをデプロイするための方法のフロー図である。 異なるコード部分を有する第2のサンプル・コンピュータ・プログラムを示すブロック図である。 アクセラレータによる恩恵を受けることができる、図12のコンピュータ・プログラム内の2つのコード部分を特定するブロック図である。 コード部分Qに対応するアクセラレータを含むサンプル・アクセラレータ・カタログを示すブロック図である。 図14のカタログにおいて特定されたコード部分Qに対するアクセラレータ・イメージの、プログラム可能デバイスへのデプロイを示すブロック図である。 コード部分Qがコード部分Qに対するアクセラレータへの呼び出しに置き換えられた後の、図12のコンピュータ・プログラムを示すブロック図である。 図12及び図16に示されるコンピュータ・プログラム内のコード部分Rからのアクセラレータ・イメージの生成を示すブロック図である。 コード部分Rに対する新しく生成されたアクセラレータ・イメージの、プログラム可能デバイスへのデプロイを示すブロック図である。 コード部分Rがコード部分Rに対するアクセラレータへの呼び出しに置き換えられた後の、図16のコンピュータ・プログラムを示すブロック図である。 コード部分Rに対するアクセラレータを表すエントリが作成された後の、図14に示されるアクセラレータ・カタログ1400のブロック図である。 サンプル・コンピュータ・プログラムのブロック図である。 OpenCAPIインターフェースを有し、図21のループ部分に対するアクセラレータと、図21の分岐ツリー部分に対するアクセラレータと、図21の非常に長いシリアル部分(lengthy serial portion)に対するアクセラレータとを含む、プログラム可能デバイスのブロック図である。 コード部分が対応するアクセラレータへの呼び出しに置き換えられた後の、図21のコンピュータ・プログラムのブロック図である。 ソフトウェア・ライブラリ内の関数を呼び出す従来技術のコンピュータ・プログラムのブロック図である。 ソフトウェア・ライブラリへの呼び出しを1つ又は複数の現在実装されているアクセラレータへの対応する呼び出しに置き換えるための方法のフロー図である。 コンピュータ・プログラムからソフトウェア・ライブラリへの呼び出しのための1レベルの間接化をもたらす仮想関数テーブルを示す。 ソフトウェア・ライブラリへの呼び出しが仮想関数テーブルへの呼び出しに置き換えられた後の、図24のコンピュータ・プログラムのブロック図である。 ソフトウェア・ライブラリにおける関数に対応する現在実装されているアクセラレータを示すアクセラレータ相関テーブルのブロック図である。 図28のテーブル内に列挙された3つの現在実装されているアクセラレータを示すプログラム可能デバイスのブロック図である。 ソフトウェア・ライブラリへの呼び出しが対応するアクセラレータへの呼び出しに置き換えられた後の、図26の仮想関数テーブルを示す。 新しいアクセラレータを生成し、ソフトウェア・ライブラリへの1つ又は複数の呼び出しを新しいアクセラレータへの1つ又は複数の対応する呼び出しに置き換えるための方法のフロー図である。 3つの前に生成されたアクセラレータと、図31で生成された1つの新しいアクセラレータとを示す、プログラム可能デバイスのブロック図である。 ソフトウェア・ライブラリへの呼び出しが新しいアクセラレータへの対応する呼び出しに置き換えられた後の、図26及び図30の仮想関数テーブルを示す。
上の背景技術セクションで述べたように、Open Coherent Accelerator Processor Interface(OpenCAPI)は、任意のプロセッサが、コヒーレントなユーザ・レベルのアクセラレータ及びI/Oデバイスに取り付けられるのを可能にするインターフェースを定義する仕様である。図1を参照して、OpenCAPIインターフェース150に関連した概念の一部を示すために、サンプル・コンピュータ・システム100が示される。当技術分野において周知のように、プロセッサ110が、標準メモリ140又はメモリ階層に結合される。プロセッサは、PCIeインターフェース120を介して、1つ又は複数のPCIeデバイス130に結合される。プロセッサ110は、OpenCAPIインターフェース150を介して、アクセラレータ160、コヒーレント・ネットワーク・コントローラ170、アドバンスト・メモリ180、及びストレージ195内に格納されるデータを制御するコヒーレント・ストレージ・コントローラ190などの1つ又は複数のコヒーレント・デバイスにも結合される。説明のために、OpenCAPIインターフェース150は、図1では別個のエンティティとして示されるが、図1に示されるような別個のインターフェースの代わりに、OpenCAPIインターフェース150をコヒーレント・デバイスの各々の内部に実装することもできる。従って、アクセラレータ160は、他のコヒーレント・デバイス170、180及び190のように、それ自体のOpenCAPIインターフェースを有することができる。OpenCAPIの大きな利点の1つは、プロセッサ110についての仮想アドレスを、OpenCAPIインターフェースに結合される又はこれを含むコヒーレント・デバイスと共有することができ、それらが、プロセッサ110と同じ方法で、仮想アドレスを使用するのを可能にすることである。
アクセラレータをプログラム可能デバイスにデプロイすることは、当技術分野においてよく知られている。図2を参照して、プログラム可能デバイス200は、任意の好適なプログラム可能デバイスを表す。例えば、プログラム可能デバイス200は、FPGA又はASICとすることができる。OpenCAPIインターフェース210が、プログラム可能デバイス内に実装され得る。さらに、プログラム可能デバイス200内に、1つ又は複数のアクセラレータが実装され得る。図1は、例として、アクセラレータ1 220A、アクセラレータ2 220B、・・・、アクセラレータN 220Nを示す。従来技術においては、人間の設計者が、ハードウェア内に実装されることにより加速される必要がある関数に基づいて、どのタイプのアクセラレータが必要とされるかを判断していた。アクセラレータ関数は、例えば、ハードウェア記述言語(HDL)で表すことができる。次に、人間の設計者は、既知のツールを用いて、HDLに対応するアクセラレータ・イメージを生成することができる。アクセラレータ・イメージは、ひとたび図2の200などのプログラム可能デバイスにロードされると、1つ又は複数のコンピュータ・プログラムにより必要に応じて呼び出すことができるアクセラレータをプログラグラム可能デバイス内に作成して、ハードウェア・アクセラレータを提供する。
コンピュータ・プログラムは、ソフトウェア・ライブラリへの呼び出しを含む。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される。プログラム可能デバイスは、1つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応する、ソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の呼び出しが、対応する現在実装されていうアクセラレータへの1又は複数の対応する呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の呼び出しが、新しいアクセラレータへの1又は複数の対応する呼び出しに置き換えられる。
図3を参照して、以下により詳細に説明されるように、コンピュータ・システム300は、ソフトウェア・ライブラリへの呼び出しを1つ又は複数のアクセラレータへの呼び出しと動的に置き換えるアクセラレータ・デプロイ・ツールを含むコンピュータ・システムの1つの好適な実装である。サーバ・コンピュータ・システム300は、IBM POWER9コンピュータ・システムである。しかしながら、当業者であれば、コンピュータ・システムが、複雑なマルチユーザ・コンピューティング装置、単一のユーザ・ワークステーション、ラップトップ・コンピュータ・システム、タブレット・コンピュータ、電話、又は内蔵型制御システムであるかどうかに関係なく、本明細書における開示がいずれのコンピュータ・システムにも等しく適用されることを理解するであろう。図3に示されるように、コンピュータ・システム300は、1つ又は複数のプロセッサ310、プログラム可能デバイス312、メイン・メモリ320、大容量ストレージ・インターフェース330、ディスプレイ・インターフェース340、及びネットワーク・インターフェース350を含む。これらのシステム・コンポーネントは、システム・バス360を用いて相互接続される。大容量ストレージ・インターフェース330は、ローカル大容量ストレージ・デバイス355などの大容量ストレージ・デバイスをコンピュータ・システム300に接続するために用いられる。1つの特定のタイプのローカル大容量ストレージ・デバイス355は、データをCD-RW395に格納し、そこから読み取ることができる読み取り可能及び書き込み可能CD-RWドライブである。別の好適なタイプのローカル大容量ストレージ・デバイス355は、SDカードなどの取り外し可能メモリ・カードを受け取り、取り外し可能メモリとの間で読み書きを実行するカード・リーダである。さらに別の好適なタイプのローカル大容量ストレージ・デバイス355は、サム・ドライブなどのストレージ・デバイスを読み取るユニバーサル・シリアル・バス(USB)である。
メイン・メモリ320は、好ましくは、データ321、オペレーティング・システム322、コンピュータ・プログラム323、アクセラレータ・デプロイ・ツール324、及びアクセラレータ・カタログ329を含む。データ321は、コンピュータ・システム300において任意のプログラムへの入力又はそこからの出力として働く任意のデータを表す。オペレーティング・システム322は、AIX又はLINUXなどのマルチタスク・オペレーティング・システムである。コンピュータ・プログラム323は、制限なく、アプリケーション・プログラム、オペレーティング・システム、ファームウェア、デバイス・ドライバ等を含む、任意の好適なコンピュータ・プログラムを表す。アクセラレータ・デプロイ・ツール324は、好ましくは、コード分析器325、アクセラレータ・イメージ生成器327、及びアクセラレータ実装器(implementer)328を含む。コード分析器325は、コンピュータ・プログラム323をそれが実行されるときに分析し、そのランタイム性能を判断する。コード分析器325がコンピュータ・プログラムを分析するための1つの好適な方法は、コンピュータ・プログラムのランタイム性能を監視するための既知の技術を用いることである。例えば、当技術分野において、例えば、コンピュータ・プログラム323の実行中、プロセッサ310によりどのアドレスが実行されているかを検知する、コンピュータ・プログラムの外部のモニタを用いて、コンピュータ・プログラムのランタイム性能のリアルタイム監視を可能にするツールが存在する。プロファイラとして知られる他のツールは、コンピュータ・プログラムの異なる分岐が実行されるとき、異なるカウンタをインクリメントするコードであるインストルメンテーション・コード(instrumentation code)をコンピュータ・プログラムに挿入するのを可能にする。カウンタの値を分析して、コンピュータ・プログラムの各部分を実行する頻度を求めることができる。コード分析器325は、コンピュータ・プログラムのランタイム性能を分析した後、コード部分326を特定し、このコード部分326は、コンピュータ・プログラム323内のコードの一部であるコード部分を特定し、ハードウェア・アクセラレータにデプロイされることにより改善され、コンピュータ・プログラム323のランタイム性能を向上させる。
アクセラレータ・イメージ生成器327は、コード分析器325により特定されたコンピュータ・プログラム323内のコード部分326に対応するアクセラレータ・イメージを動的に生成する。アクセラレータ・イメージ生成器327は、任意の好適な方法を用いて、コード部分326からアクセラレータ・イメージを生成することができる。例えば、アクセラレータ・イメージ生成器327は、コード部分326の同等のハードウェア記述言語(HDL)表現を生成し、次に、HDL表現を合成して、プログラム可能デバイス312のための好適なアクセラレータ・イメージにすることができる。アクセラレータ実装器328は、好ましくは、アクセラレータ・イメージ生成器327により生成されたアクセラレータ・イメージを取得し、アクセラレータ・イメージを有するようにプログラム可能デバイス312をプログラムし、それにより、コード部分326に対応するハードウェア・アクセラレータ314をプログラム可能デバイス312内に生成する。
第1の実装において、アクセラレータ・デプロイ・ツール324は、コンピュータ・プログラム323のコード部分326に対応するアクセラレータ・イメージを動的に生成し、次に、アクセラレータ・イメージを有するようにプログラム可能デバイスをプログラムするので、プログラム可能デバイスは、コード部分326に対応するハードウェア・アクセラレータを含む。第2の実装において、アクセラレータ・カタログ329が提供され、保持される。アクセラレータ・カタログ329は、好ましくは、前に生成されたアクセラレータのリストを含む。第2の実装において、アクセラレータ・デプロイ・ツール324は、最初に、アクセラレータ・カタログ329をチェックし、前に生成されたアクセラレータがコード部分326に利用可能であるかどうかを確認する。利用可能である場合、アクセラレータ・デプロイ・ツール324は、アクセラレータ・カタログ内に識別された前に生成されたアクセラレータ・イメージをデプロイする。利用可能でない場合、アクセラレータ・デプロイ・ツール324は、上述のようにアクセラレータ・イメージを動的に生成し、次に、イメージをプログラム可能デバイス312にロードし、コード部分326に対応するアクセラレータ314を提供する。
コンピュータ・システム300は、コンピュータ・システム300のプログラムが、メイン・メモリ320及びローカル大容量ストレージ・デバイス355などの複数のより小容量のストレージ・エンティティにアクセスする代わりに、あたかも、それらが大きい連続的なアドレス空間のみにアクセスできるように振る舞うことを可能にする周知の仮想アドレッシング機構を利用する。従って、データ321、オペレーティング・システム322、コンピュータ・プログラム323、アクセラレータ・デプロイ・ツール324、及びアクセラレータ・カタログ329は、メイン・メモリ320内にあるように示されるが、当業者であれば、これらの項目は、必ずしも全てがメイン・メモリ320内に同時に含まれる必要がないことを理解するであろう。また、本明細書では「メモリ」という用語は、一般的に、コンピュータ・システム300の仮想メモリ全体を指すように使用され、コンピュータ・システム300に結合された他のコンピュータ・システムの仮想メモリを含み得ることにも留意されたい。
プロセッサ310は、1つ又は複数のマイクロプロセッサ及び/又は集積回路から構成され得る。プロセッサ310は、例えば、1つ又は複数のPOWER9マイクロプロセッサとすることができる。プロセッサ310は、メイン・メモリ320内に格納されたプログラム命令を実行する。メイン・メモリ320は、プロセッサ310がアクセスできるプログラム及びデータを格納する。コンピュータ・システム300が起動すると、プロセッサ310は、最初に、オペレーティング・システム322を構成するプログラム命令を実行する。プロセッサ310はまた、コンピュータ・プログラム323及びアクセラレータ・デプロイ・ツール324も実行する。
プログラム可能デバイス312は、プロセッサ310により動的にプログラムすることができる任意の好適なプログラマブル論理デバイスとすることができる。既知の好適なプログラマブル論理デバイスの例として、フィールド・プログラマブル・ゲート・アレイ(FPGA)が挙げられる。しかしながら、プログラム可能デバイス312は、プロセッサ310が、既知の技術並びに将来開発される技術を含む、プログラム可能デバイス312を動的にプログラムすることを可能にする任意のプログラム可能論理デバイスを広く含む。
コンピュータ・システム300は、単一のプロセッサ及び単一のシステム・バスのみを含むように示されるが、当業者であれば、本明細書で説明されるアクセラレータ・デプロイ・ツールは、複数のプロセッサ及び/又は複数のバスを有するコンピュータ・システムを用いて実施され得ることを理解するであろう。さらに、使用されるインターフェースはそれぞれ、好ましくは、プロセッサ310から計算集中的な(compute-intensive)処理の負荷軽減のために用いられる別個の完全にプログラムされたマイクロプロセッサを含む。しかしながら、当業者であれば、これらの関数は、I/Oアダプタを用いても実行され得ることを理解するであろう。
ディスプレイ・インターフェース340は、1つ又は複数のディスプレイ365をコンピュータ・システム300に直接接続するために用いられる。ノン・インテリジェント(すなわち、ダム)端末又は完全にプログラム可能なワークステーションとすることができるこれらのディスプレイ365は、システム管理者及びユーザに、コンピュータ・システム300と通信する能力を与えるために用いられる。しかしながら、ディスプレイ・インターフェース340は、1つ又は複数のディスプレイ365との通信をサポートするために提供されるが、全ての必要なユーザとの対話及び他のプロセスは、ネットワーク・インターフェース350を介して行うことができるので、コンピュータ・システム300は、必ずしもディスプレイ365を必要としないことに留意されたい。
ネットワーク・インターフェース350は、ネットワーク370を介して、コンピュータ・システム300を他のコンピュータ・システム又はワークステーション375に接続するために用いられる。コンピュータ・システム375は、ネットワーク・インターフェース350を介してコンピュータ・システム300に接続されるコンピュータ・システムを表す。ネットワーク・インターフェース350は、ネットワーク370が今日のアナログ及び/又はデジタル技術を含むか、又は将来の何らかのネットワーキング技術を介するかに関係なく、電子デバイスを相互接続するための任意の好適な方法を広く表す。ネットワーク・インターフェース350は、好ましくは、ネットワーク370上での通信を可能にするハードウェアとソフトウェアとの組み合わせを含む。ネットワーク・インターフェース350内のソフトウェアは、好ましくは、適切なネットワーク・プロトコルを用いて、ネットワーク370を介する他のコンピュータ・システム375との通信を管理する通信マネージャを含む。ネットワークを実装するために、多くの異なるネットワーク・プロトコルを用いることができる。これらのプロトコルは、コンピュータがネットワークにわたって通信するのを可能にする専用コンピュータ・プログラムである。TCP/IP(伝送制御プロトコル/インターネット・プロトコル)は、ネットワーク・インターフェース350内で通信マネージャにより用いることができる好適なネットワーク・プロトコルの一例である。1つの好適な実装において、ネットワーク・インターフェース350は、物理イーサネット・アダプタである。
本発明は、統合のいずれかの可能な技術的詳細レベルにおける、システム、方法、及び/又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジ・サーバを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、及び、「C」プログラミング言語若しくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネットサービスプロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個別化することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び/又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作の態様を実施する命令を含む製品を含むようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生産し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の様々な実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
図4は、図3に示されるアクセラレータ・イメージ生成器327の1つの好適な実装の詳細を示す。アクセラレータ・イメージ生成器327は、図3及び図4に示されるコード部分326を入力として取得する。コード・ツー・HDL(Code to HDL)生成器410は、好ましくは、コード部分326を、コード部分に対するHDL420のような図4に示されるハードウェア記述言語(HDL)でのコード部分の対応する表現に変換する。既知の好適なハードウェア記述言語は、VHDL又はVerilogを含むが、任意の適切なハードウェア記述言語を用いることができる。コンピュータ・コードのHDL表現を生成するための既知のソフトウェア・ツールがある。例えば、XilinxのVivaldo High Level Synthesisは、Cプログラミング言語で書かれたコードをHDLに変換するソフトウェア・ツールである。当技術分野において、このタイプのツールは、「C to HDL」ツール又は「C to RTL」ツールと呼ばれることが多く、ここで、RTLは、ハードウェアにおいてコード部分を実装するのに必要とされるコード部分のレジスタ転送レベル表現を言う。図4のコード・ツー・HDL生成器410は、既知のソフトウェア・ツールとすることができ、又はアクセラレータ・イメージ生成器327用に特別に設計されたソフトウェア・ツールとすることもできる。
コード部分に対するHDL420が、合成及びシミュレーションの両方を含み得る1つ又は複数のプロセスに与えられる。合成プロセス430は、図4の中間部分におけるステップ432、434、436、438及び440に示される。シミュレーション・プロセス450は、図4の下部におけるステップ452、454及び460に示される。コード部分に対するHDL420を、どのハードウェア要素を必要とするかを判断する合成ブロック432に与えることができる。配置及び経路指定ブロック434は、プログラム可能デバイス上で、ハードウェア要素をどこに置くか、及び、それらのハードウェア要素間の相互接続をどのように経路指定するかを決定する。タイミング分析436は、ブロック434において、ハードウェア要素が配置され、相互接続が経路指定された後に、アクセラレータの性能を分析する。試験ブロック438は、結果として得られるアクセラレータ・イメージの試験を実行し、タイミング及び性能パラメータが満たされたかどうかを判断する。試験ブロック438は、アクセラレータの設計が依然として改善を必要とするとき、デバッグ・ブロック440に返す。このプロセスは、数回繰り返すことができる。
シミュレーション・プロセス450は、コード部分に対するHDL420を利用し、その機能を判断するために、コンピュータ・シミュレーションを実行する。シミュレートされた試験ブロック454は、必要に応じてシミュレートされた設計が機能するかどうかを判断する。シミュレートされた試験ブロック454は、アクセラレータの設計が依然として改善を必要とするとき、デバッグ・ブロック460に返す。
アクセラレータ・イメージ生成器327は、合成ブロック430、シミュレーション・ブロック450、又はその両方を含むことができる。最も好ましい実装において、アクセラレータ・イメージ生成器327は、合成ブロック430及びシミュレーション・ブロック450の両方を含む。合成プロセスは、非常に時間がかかり得る。シミュレーション・ブロックは、一般的には、合成ブロックよりも、HDLの設計の試験においてずっと迅速である。合成ブロック430及びシミュレーション・ブロック450の両方が存在するとき、アクセラレータ・イメージ生成器は、任意の適切な方法又は組み合わせでこれらの両方を用いることができる。例えば、シミュレーション・ブロック450を用いて、最初に設計に対して数回反復し、設計がほとんど完成すると、ほぼ完成した設計を合成ブロック430に入れることができる。別の実装において、合成及びシミュレーション・ブロックは、アクセラレータ・イメージの生成が完了するまで、並行して機能し、協働することができる。使用される特定のプロセスに関係なく、アクセラレータ・イメージ生成器327は、コード部分326について、コード部分326に対応するアクセラレータ・イメージ480を生成する。ひとたびアクセラレータ・イメージ480が生成されると、図3のアクセラレータ実装器328は、アクセラレータ・イメージ480をプログラム可能デバイス312にロードし、コード部分326に対応するアクセラレータ314を生成することができる。次に、コード部分326の代わりに、コンピュータ・プログラムにより、プログラム可能デバイス312内のアクセラレータ314を呼び出すことができる。
図3のコード分析器325についての1つの可能な実装の幾つかの詳細を図5に示す。コード分析器325は、コンピュータ・プログラムをプロファイルするために用いられるコード・プロファイラ510を含むことができる。コンピュータ・プログラムが実行されるとき、プロファイルは、好ましくは、インストルメンテーション・コードをコンピュータ・プログラムに挿入し、プロファイル・データ520を生成するコード・プロファイラ510により行われる。プロファイル・データ520は、異なる部分を実行する頻度、ループ反復の数、発生する例外、データ需要、帯域幅、重要部分において費やされた時間等を含む、コンピュータ・プログラムの多くの可能な特徴を示す。ソフトウェア・プロファイラは、当技術分野において非常によく知られており、従って、ここではさらに詳細には説明しない。ここでの目的のために、あえて言うなら、コード・プロファイラ510は、プロファイルされるコンピュータ・プログラムのランタイム性能を示すプロファイル・データ520を生成する。
コード分析器325は、ハードウェア・アクセラレータ内に実装されることにより改善されるコード部分326を特定するコード選択ツール530をさらに含む。任意の適切な基準、アルゴリズム、又は発見的問題解決法(heuristic)に従って、任意の適切なコード部分を特定することができる。例えば、浮動小数点計算を行うコードの部分を特定し、対応する浮動小数点アクセラレータを生成し、コード内の浮動小数点計算を行うことができるようにすることができる。データベースの検索を実行するコードの部分を特定し、対応するデータベース検索アクセラレータを生成し、データベース検索を置き換えることができる。データ圧縮、XML解析、パケット・スヌーピング(packet snooping)、金融リスク計算等のような特定の関数を実行するコードの部分を特定することもできる。もちろん、本明細書における開示及び特許請求の範囲の範囲内で、他のコード部分を特定することもできる。コード選択ツール530は、コード部分326を特定するために、現在知られているものであろうと、又は将来開発されるものであろうと、任意の適切な基準、アルゴリズム、又は発見的問題解決法を使用することができる。ひとたびコンピュータ・プログラム内のコード部分326が特定されると、対応するアクセラレータを動的に生成することができる。
図6を参照して、本明細書における開示及び特許請求の範囲による方法600が、コンピュータ・プログラムを実行すること(ステップ610)によって開始する。コンピュータ・プログラムのランタイム性能が分析される(ステップ620)。これは、例えば、図3及び図5に示され、上述されたコード分析器325により行うことができる。アクセラレータに実装するためのコンピュータ・プログラム内のコード部分が特定される(ステップ630)。コード部分に対するアクセラレータ・イメージが生成される(ステップ640)。アクセラレータ・イメージが、プログラム可能デバイスにデプロイされる(ステップ650)。次に、コード部分を、デプロイされたアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される(ステップ660)。この時点で、デプロイされたアクセラレータは、以前にはコード部分により実行されていた関数をハードウェアで実行し、それにより、コンピュータ・プログラムのランタイム性能が改善される。方法600は、ステップ610にループ・バックして続行し、そのことは、方法600が、コンピュータ・プログラムの性能を改善するために、反復してコンピュータ・プログラムを連続的に監視し、必要に応じて、アクセラレータをデプロイできることを意味する。
ここで、上述した概念を示すために、幾つかの例を提供する。図7は、図7においてコード部分A 710、コード部分B 720、コード部分C 730、...、コード部分N 790として示される複数のコード部分を含むサンプル・コンピュータ・プログラム700を示す。コード部分B 720は、ハードウェア・アクセラレータで実装されることにより改善されることになるコード部分として特定されるものと仮定する。次に、図8に示されるように、コード部分B 720は、対応するHDL表現に変換される。次に、コード部分BについてのHDL810は、コード部分Bについてのアクセラレータ・イメージ820を生成するために用いられる。これは、例えば、図4に示される方法を用いて、又は他のいずれかの適切な方法を用いて行うことができる。ひとたびコード部分Bについてのアクセラレータ・イメージ820が生成されると、アクセラレータ・イメージは、プログラム可能デバイス830にロードされて、コード部分に対するアクセラレータ850が生成される。プログラム可能デバイス830は、図3に示されるプログラム可能デバイス312についての1つの好適な実装であり、好ましくは、OpenCAPIインターフェース840を含む。
ひとたびアクセラレータがプログラム可能デバイス830内にデプロイされると、図9に示されるように、コンピュータ・プログラム内のコード部分Bが削除され、コード部分Bに対するアクセラレータへの呼び出し910に置き換えられる。最も好ましい実装において、コード部分Bに対するアクセラレータは、ひとたびコード部分Bに対するアクセラレータにおける処理が完了したときのそれを呼び出したコードへの戻りを含む。このように、コンピュータ・プログラム900は、前にコード部分Bだったものを実行する必要があるとき、必要とされる関数をハードウェアで実行するコード部分Bに対するアクセラレータへの呼び出しを行い、次にコンピュータ・プログラムに戻る。このように、特定されたコード部分に対して適切なアクセラレータを自動的に生成して、コンピュータ・プログラムのランタイム性能を向上させることができる。
第1の実装において、図4~図9に示され、上述されるように、コンピュータ・プログラムの性能を改善するために、アクセラレータを動的に生成することができる。第2の実装において、ひとたびアクセラレータが動的に生成されると、アクセラレータをカタログ内に格納できるので、必要に応じて、それを再使用することができる。図10は、図3に示されるアクセラレータ・カタログ329についての1つの好適な実装であるサンプル・アクセラレータ・カタログ1000を示す。アクセラレータ・カタログは、アクセラレータ又は対応するコード部分に必要とされ得るいずれかの適切なデータ又は情報を含むことができる。図10に示される特定の例において、アクセラレータ・カタログは、以下のフィールド、すなわち名前、位置、最長時間未使用(Least Recently used、LRU)、最最短時間未使用(Most Recently Used、MRU)、依存関係、能力、待ち時間、及び他の特性の各々を含む。名前フィールドは、好ましくは、アクセラレータについての名前を含む。名前フィールドはまた、アクセラレータに対応するコード部分についての名前を含むこともできる。位置フィールドは、好ましくは、アクセラレータ・イメージについての位置を特定する経路を指定する。アクセラレータ・イメージはカタログ1000内に格納され得るが、最も好ましい実装において、カタログ1000は代わりに、アクセラレータ・イメージが格納されるアクセラレータ・カタログ1000の外部のストレージへの経路を含む。最長時間未使用(LRU)フィールドは、アクセラレータが初めて使用された時期を含むことができる。代案において、LRUフィールドは、カタログ内の全てのアクセラレータのうち、アクセラレータが最長時間未使用であるときに設定されるフラグを含むことができる。最短時間未使用(MRU)フィールドは、アクセラレータが最後に使用された時期を含むことができる。代案において、MRUフィールドは、カタログ内の全てのアクセラレータのうち、アクセラレータが最短時間未使用のときに設定されるフラグを含むことができる。エラー率(error rate)フィールドは、アクセラレータについての適切なエラー率を提供し、任意の適切な方法で表すことができる。例えば図10において、エラー率は、アクセラレータの100回の実行当たりのエラーの数Xとして表される。エラー率フィールドは、例えば、動的に監視できる任意の適切なエラー情報を含むことができるので、エラー率の増大は、是正措置を取るための通知をもたらし得る。依存関係フィールドは、アクセラレータが有し得るいずれかの依存関係を示すことができる。例えば、依存関係フィールドは、アクセラレータが設計された特定のプログラム可能デバイスを指定することができる。依存関係フィールドはまた、他のアクセラレータへのいずれかの依存関係を指定することもできる。従って、図10のアクセラレータAcc1は、Acc2への依存関係を有し、そのことは、Acc1が、Acc2の実装を必要とすることを意味する。能力(capabilities)フィールドは、アクセラレータの能力の何らかの適切な表示を提供することができる。図10に示される2つのエントリにおいて、能力は、Acc1用のFPユニット及びAccN用のグラフィックスとして示される。しかしながら、能力は、任意の適切な方法で示し得ることに留意されたい。例えば、能力は、アクセラレータが実装されたコード部分の仕様を含むことができる。記述子、又はコード部分の属性を記述する他のデータと共に、各コード部分を対応するアクセラレータに相関させる別個のインデックスを保持することができる。能力フィールドは、インデックスへのポインタのような任意の適切な情報を含むことができるので、アクセラレータに対応するコード部分を容易に特定することができる。
待ち時間フィールドは、好ましくは、アクセラレータについての平均待ち時間を指定する。図10に示される例において、Acc1は、1.0マイクロ秒の待ち時間を有する一方、AccNは、500ナノ秒の待ち時間を有する。待ち時間は、例えば、アクセラレータがその意図した機能を実行するのに必要な時間を表すことができる。他の特性フィールドは、アクセラレータ、その特性及び属性、並びにアクセラレータに対応するコード部分を説明する又は他の方法で特定する任意の他の適切な情報又はデータを含むことができる。図10の2つのサンプル・エンティティにおいて、他の特性フィールドは、Acc1がネットワーク接続を含むことを示し、AccNは、Acc5に対するアフィニティ(affinity)を有し、そのことは、可能であれば、プログラム可能デバイス上で、AccNをAcc5の近くに配置すべきであることを意味する。図10の種々のフィールドが例として示され、それは本明細書における開示及び特許請求の範囲内にあり、アクセラレータ・カタログに任意の適切な情報又はデータを提供する。
図11を参照すると、第2の実装による方法1100が、コンピュータ・プログラムを実行する(ステップ1110)ことにより開始する。コンピュータ・プログラムのランタイム性能が分析される(ステップ1120)。ハードウェア・アクセラレータを用いて改善されることになるコンピュータ・プログラム内の1又は複数のコード部分が特定される(ステップ1130)。特定されたコード部分の1つが選択される(ステップ1140)。アクセラレータ・カタログ内に、選択されたコード部分に対する前に生成されたアクセラレータがあるとき(ステップ1150=はい)、前に生成されたアクセラレータ・イメージがプログラム可能デバイスにデプロイされ(ステップ1160)、アクセラレータを与える。次に、選択されたコード部分をアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される(ステップ1162)。カタログ内に、選択されたコード部分に対する前に生成されたアクセラレータがないとき(ステップ1150=いいえ)、選択されたコード部分に対するアクセラレータ・イメージが動的に生成され(ステップ1170)、アクセラレータ・イメージがプログラム可能デバイスにデプロイされ(ステップ1172)、コード部分を新しくデプロイされたアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂され(ステップ1174)、アクセラレータは、アクセラレータ・カタログに格納される(ステップ1176)。アクセラレータ・イメージがカタログ・エントリ内に格納されるときには、ステップ1176は、アクセラレータ・イメージをカタログに書き込む。アクセラレータ・イメージがカタログの外部のストレージ内に格納されるときには、ステップ1176は、アクセラレータ・イメージを外部ストレージに格納し、エントリを、外部ストレージ内のアクセラレータ・イメージへの経路を含むアクセラレータ・カタログに書き込む。
それ以上の特定されたコード部分があるとき(ステップ1180=はい)、方法1100は、ステップ1140にループ・バックして続行する。それ以上の特定されたコード部分がないとき(ステップ1180=いいえ)、方法1100は、ステップ1120にループ・バックして続行する。これは、方法1100が、最も好ましくは、コンピュータ・プログラムのランタイム性能を改善するために、コンピュータ・プログラムを連続的に監視し、必要に応じて、アクセラレータを動的に生成及びデプロイすることを意味する。
ここで、第2の好ましい実装に関連する図11における概念を示すために、1つの例を提供する。図12は、コード部分P 1210、コード部分Q 1220、コード部分R 1230、...、コード部分Z 1290として図12に表される多くのコード部分を含むサンプル・コンピュータ・プログラム1200を示す。図11のステップ1110、1120、及び1130が実行されると仮定する。ステップ1130において、図13の表1300に示されるように、コードQ 1220及びコード部分R 1230は、アクセラレータにおいてこれらのコード部分を実装することにより改善されるコード部分として特定されると仮定する。さらに、図3に示されるアクセラレータ・カタログ329に対する1つの適切な実装であるアクセラレータ・カタログ1400を有すると仮定する。アクセラレータ・カタログ1400は、前に生成されたコード部分Qに対するアクセラレータ1220であると仮定する。AccQについての単一のエントリを有する。コード部分Qに対するアクセラレータ1220は前に生成されているので、新たにアクセラレータ・イメージを生成する必要なく、対応するアクセラレータ・イメージを使用することができる。ステップ1140において、コード部分Q 1220が選択されると仮定する。カタログ内に、コード部分Qに対する前に生成されたアクセラレータがあるので(ステップ1150=はい)、図15に示されるように、コード部分Q 1510に対応する前に生成されたアクセラレータが、プログラム可能デバイスにデプロイされる(ステップ1160)。カタログ内で特定されたコード部分Qに対するアクセラレータ・イメージ1510の、プログラム可能デバイス1520へのデプロイにより、プログラム可能デバイス1520においてコード部分Qに対するアクセラレータ1540の実装がもたらされる。次に、コンピュータ・プログラムにより、コード部分Qに対するアクセラレータ1540を呼び出し、ハードウェアにおける前のコード部分Qの機能を実行することができ、それにより、コンピュータ・プログラムのランタイム性能が向上する。プログラム可能デバイス1520は、図3に示されるプログラム可能デバイス312の1つの適切な例であり、好ましくは、OpenCAPIインターフェース1530を含む。
次に、選択されたコード部分Q 1220をコード部分Qに対するアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される(ステップ1162)。図16は、コード部分Qが、図16の1610に示されるようなコード部分Qに対するアクセラレータへの呼び出しに置き換えられた後の、図12のコンピュータ・プログラム1200を示す。従って、コンピュータ・プログラム1600は、コード部分Qを実行する代わりに、プログラム可能デバイス1520内のコード部分Qに対するアクセラレータ1540を呼び出し、コンピュータ・プログラムのランタイム性能を向上させる。
さらに特定されたコード部分がある(ステップ1180=はい)、すなわち図13に示されるコード部分Rがあるので、図11の方法1100は、ステップ1140にループ・バックし、そこで、コード部分R 1230が選択される(ステップ1140)。図14に示されるカタログ1400内に、コード部分Rに対する前に生成されたアクセラレータがなく(ステップ1150=いいえ)、従って、コード部分Rに対するアクセラレータ・イメージが動的に生成される(ステップ1170)。これは図17に表され、ここで、コード部分R 1230は、コード部分R 1720に対するHDLを生成するために用いられ、HDLは、コード部分Rに対するアクセラレータ・イメージ1720を生成するために用いられる。次に、新しく動的に生成された、コード部分Rに対するアクセラレータ・イメージ1720が、プログラム可能デバイスにデプロイされる(ステップ1172)。これは図18に示され、ここで、コード部分Qに対するアクセラレータ1540を既に含むプログラム可能デバイス1520に、コード部分Rに対するアクセラレータ・イメージ1720がロードされ、コード部分Rに対するアクセラレータ1810を生成する。次に、コード部分Rを、コード部分Rに対するアクセラレータへの呼び出しに置き換えるように、コンピュータ・プログラムが改訂される(ステップ1174)。また、コード部分Rに対するアクセラレータは、アクセラレータ・カタログ内にも格納され(ステップ1176)、その結果、図20に示されるように、アクセラレータ・カタログ1400は、2つのアクセラレータに対応するエントリAccQ及びAccRを含む。
図21及び図22において、より具体的な例を示す。この例において、サンプル1と呼ばれるコンピュータ・プログラム2100は、関心ある3つの異なるコード部分、すなわちループ部分2110、分岐ツリー部分2120、及び非常に長いシリアル部分2130を含む。ループ部分2110は、各々の反復が他の反復とは大きく独立しているため、アンロールできるループであるコード部分を表す。各々の反復の独立性のため、ループをアンロールすることができ、ループ機能をアクセラレータにデプロイできるので、各々の反復は、ハードウェアにおいて並行して実行される。金融リスク計算は、ループ部分2110のようなコード部分を含むこともある。ハードウェア・アクセラレータにおいてループの異なる反復を並行して実行することにより、サンプル1のコンピュータ・プログラムのランタイム性能が向上する。
サンプル1のコンピュータ・プログラム2100はまた、分岐ツリー部分2120も含む。この例において、分岐ツリー部分2120は、1つ又は複数の比較的深い分岐ツリーで動作すると仮定する。この場合、分岐ツリー部分2120をアクセラレータにデプロイできるので、分岐ツリーの各分岐は、ハードウェアにおいて並行に実行され、分岐セクション基準が計算され、論理の最終段階において、結果が、選択された分岐から選択される。ハードウェア・アクセラレータにおいて分岐ツリーの異なる分岐を並行して実行することにより、サンプル1のコンピュータ・プログラムのランタイム性能が向上する。
サンプル1のコンピュータ・プログラム2100はまた、非常に長いシリアル部分2130も含む。この例において、非常に長いシリアル部分2130は、アクセラレータ内のハードウェア特有の能力を利用することにより、短くすることができると仮定する。例えば、アクセラレータ内に実装できる何らかの数学関数を、長い連続部分により実行することができる。ハードウェアにおいて非常に長いシリアル部分を実行することにより、サンプル1のコンピュータ・プログラムのランタイム性能が向上する。
図21のコード部分は、図5のコード・プロファイラ510により生成されたプロファイル・データ520に従って特定されると仮定する。図3及び図5のコード部分326の例であるコード部分2110、2120及び2130を選択するために、コード選択ツール530により使用される基準は、任意の適切な基準とすることができる。上述したような図21の3つの例示的なコード部分2110、2120及び2130は、1つ又は複数のアクセラレータ内に実装されるべきコード部分2110、2120及び2130を選択するために、コード選択ツール530により使用され得る適切な基準を示す。もちろん、本明細書における特許請求の範囲及び開示は、明白に、1つ又は複数のアクセラレータ内に実装されるべき1つ又は複数のコード部分326を選択するための、コード選択ツール530のための任意の適切な基準にも及ぶ。
図22は、ループ部分に対するアクセラレータ2240、分岐ツリー部分に対するアクセラレータ2250、及び非常に長いシリアル部分に対するアクセラレータ2260を含むOpenCAPIインターフェース2230を有するプログラム可能デバイス2220を示す。これらの3つのアクセラレータは、図22の同じプログラム可能デバイス2220内に実装されるように示されるが、当業者であれば、これらは別個のプログラム可能デバイス内にも実装され得ることを理解するであろう。
図23は、図21に示されるコード部分が図22に示されるハードウェア・アクセラレータへの呼び出しに置き換えられた後の、サンプル1のコンピュータ・プログラム2100を示す。従って、図21のループ部分2110は、ループ部分に対するアクセラレータ2310への呼び出しに置き換えられ、図21の分岐ツリー部分2320は、分岐ツリー部分に対するアクセラレータ2320への呼び出しに置き換えられ、図21の非常に長いシリアル部分2130は、非常に長いシリアル部分2330に対するアクセラレータへの呼び出しに置き換えられる。ここで図23のサンプル1のコンピュータ・プログラム2100は、ハードウェア・アクセラレータへの呼び出しを含むので、コンピュータ・プログラム2100のランタイム性能が向上する。
図24は、ソフトウェア・ライブラリ2410内の関数への呼び出しを含む、従来技術のコンピュータ・プログラム2400を示す。ソフトウェア・ライブラリは、当技術分野において非常によく知られており、これらの共通関数をコード化しなければならない代わりに、プログラマが使用できる共通関数を提供する。例えば、圧縮、グラフィック処理及びXML解析を実行する関数をソフトウェア・ライブラリ内に含めることができる。コンピュータ・プログラム2400は、コード部分D 2420、コード部分E 2422、コード部分F 2424、コード部分L 2428に至るまでの図示されない可能な他のコード部分を含む。ソフトウェア・ライブラリ2410は、関数L1 2430、L2 2432、L3 2434、L4 2436、LN2450に至るまでの可能な他の関数を含む。コンピュータ・プログラム2400内のコード部分D 2420は、ソフトウェア・ライブラリ2410内の関数L1 2430への呼び出しを含む。コード部分F 2424は、ソフトウェア・ライブラリ2410内の関数L4 2436への呼び出しを含む。コード部分L 2428は、ソフトウェア・ライブラリ2410内の関数L2 2432への呼び出しを含む。
図25を参照すると、方法2500が、好ましくは、図3のアクセラレータ・デプロイ・ツール324により実行される。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しが判断される(ステップ2510)。ソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される(ステップ2520)。1つ又は複数のプログラム可能デバイス内に現在実装されている利用可能なアクセラレータが判断される(ステップ2530)。次に、現在実装されているアクセラレータに対応するソフトウェア・ライブラリ内の呼び出しが判断される(ステップ2540)。次に、仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の関数呼び出しが、対応する現在実装されているアクセラレータへの1又は複数の対応する呼び出しに置き換えられる(ステップ2550)。次に、方法2500は、ステップ2510にループ・バックし、このことは、アクセラレータがデプロイ又は除去されるとき、この方法がその機能を連続的に実行できることを意味することに留意されたい。
仮想関数テーブルの1つの特定の実装が、図26の2600に示される。仮想関数テーブル2600は、ソフトウェア・ライブラリに前に直接行われたコンピュータ・プログラムからの呼び出しを列挙し、1レベルの間接化をもたらすので、可能なときは、代わりに、アクセラレータに対してそれらの呼び出しを行うことができる。図27のコンピュータ・プログラム2700に示されるように、図24のコンピュータ・プログラム2400における呼び出しが、仮想関数テーブル2600内の関数への呼び出しに置き換えられる。従って、L1への呼び出しは、F1への呼び出しに置き換えられ、L4への呼び出しは、F4への呼び出しに置き換えられ、L2への呼び出しは、F2への呼び出しに置き換えられる。仮想関数テーブル2600は、コンピュータ・プログラムからの各呼び出しついてどの関数を呼び出すかを示す。仮想関数テーブルが最初に構築されると、コンピュータ・プログラムからの各呼び出しは、ソフトウェア・ライブラリへの対応する呼び出しにマッピングされる。従って、変更されたコンピュータ・プログラム2700及び仮想関数テーブル2600は、図24に示されるものと類似の関数を提供するが、1レベルの間接化を伴う。従って、コード部分D 2720は、仮想関数テーブル2600における関数F1を呼び出し、そのことは、ソフトウェア・ライブラリ内のL1への呼び出しを生成する。コード部分F 2724は、仮想関数テーブル2600における関数F4を呼び出し、そのことは、ソフトウェア・ライブラリ内のL4への呼び出しを生成する。コード部分L 2728は、仮想関数テーブルにおける関数F2を呼び出し、そのことはソフトウェア・ライブラリ内のL2への呼び出しを生成する。この簡単な例から、仮想関数テーブルが最初に構築されると、それが図24に示されるような類似の関数を提供する、すなわち、仮想関数テーブルへの各呼び出しが、対応するソフトウェア・ライブラリへの呼び出しをもたらす。
図28は、アクセラレータ相関テーブル2800を示す。この例では、3つのアクセラレータ、すなわちAcc1、Acc2及びAcc3がデプロイされたと仮定する。これらのアクセラレータは、ソフトウェア・ライブラリ内の3つの関数に対応すると仮定する。従って、図28に示されるように、Acc1はライブラリ関数L4に対応し、Acc2はライブラリ関数L1に対応し、Acc3はライブラリ関数L2に対応する。アクセラレータとライブラリ関数との間の相関は、ユーザが、アクセラレータ相関テーブルへのエントリを手作業で生成する、又はアクセラレータ・デプロイ・ツールが、アクセラレータとライブラリ関数との間の相関を自動的に判断するなど、任意の適切な方法で判断することができる。ユーザにより手作業で生成されたアクセラレータの場合、ユーザは、同じライブラリ名及び関数名を使用することができ、従って、コード・リンカが、アクセラレータを自動的に検知し、ソフトウェア・ライブラリの代わりにアクセラレータへの呼び出しを生成することが可能になる。同様に、自動的に生成されたアクセラレータは、同じライブラリ名及び関数名を使用することができ、コード・リンカが、同様の方法でアクセラレータを自動的に検知し、ソフトウェア・ライブラリの代わりに、アクセラレータへの呼び出しを生成するのを可能にする。異なる実装において、アクセラレータは、その関数を特徴付けるデータを含むことができ、それにより、アクセラレータに問い合わせて、アクセラレータがサポートする関数を判断することが可能になり、その情報を用いて、ソフトウェア・ライブラリへの呼び出しを、代わりにアクセラレータへの呼び出しに置き換えることができる。
図29は、OpenCAPIインターフェース2230と、図28に参照される3つのアクセラレータAcc1、Acc2及びAcc3とを含むプログラム可能デバイス2900を示す。これらの3つのアクセラレータ2910、2920及び2930は、プログラム可能デバイス2900内に既に存在するので、現在実装されているアクセラレータである。図29はまた、まだ使用されていない、プログラム可能デバイス2900上の利用可能なリソース2950も示す。
ここで、図26~図29の特定の例に関して、図25の方法2500を考える。ステップ2510及び2520は、図26の仮想関数テーブル2600を構築する。ステップ2530は、Acc1 2910、Acc2 2920及びAcc3 2930がプログラム可能デバイス2900内に現在実装されており、使用できると判断する。ステップ2540は、アクセラレータ相関テーブル2800を読み取り、Acc1がライブラリ関数L4に対応し、Acc2がライブラリ関数L1に対応し、Acc3がライブラリ関数L2に対応することを判断する。上述のように、これらのライブラリ関数は、圧縮、グラフィック処理、XML解析、又は他の何れかの適切なライブラリ関数を実行する関数とすることができる。次に、図30の仮想関数テーブル2600に示されるように、ステップ2550は、仮想関数テーブル内のソフトウェア・ライブラリへの呼び出しを、現在実装されているアクセラレータへの呼び出しに置き換える。従って、仮想関数テーブルは、コンピュータ・プログラムが、ソフトウェア・ライブラリ関数がアクセラレータで実装されていることを認識することなく、ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えることを可能にする1レベルの間接化を提供する。その結果、コンピュータ・プログラムに透過的な方法で、コンピュータ・プログラムのランタイム性能が改善される。
代替的な実施形態において、現在実装されているアクセラレータを用いてソフトウェア・ライブラリ関数への呼び出しを置き換えることができるだけでなく、新しいアクセラレータを動的に生成して、ソフトウェア・ライブラリ関数への呼び出しを置き換えることもできる。図31を参照すると、新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装できないとき(ステップ3110=いいえ)、方法3100は、新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装できる(ステップ3110=はい)まで、ステップ3110にループ・バックして続行する。新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装できるかどうかを判断するのに作用する1つの要因は、1つ又は複数のプログラム可能デバイス上の利用可能なリソースである。例えば、図29の利用可能なリソース2950が、利用可能なリソース2950にデプロイされ得る新しいアクセラレータでソフトウェア・ライブラリへの呼び出しを実装するための十分なリソースを提供する場合、ステップ3110は、はい(肯定)であり得る。新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される(ステップ3120)。新しいアクセラレータ・イメージを動的に生成するための1つの適切な方法は、上に詳述した図4のプロセスを用いることである。もちろん、アクセラレータ・イメージを動的に生成するための他の方法も、本明細書における開示及び特許請求の範囲の範囲内にある。次に、ステップ3120において動的に生成されたアクセラレータ・イメージがプログラム可能デバイスにデプロイされて、新しいアクセラレータが生成される(ステップ3130)。仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の呼び出しが、新しいアクセラレータへの対応する1又は複数の呼び出しに置き換えられる(ステップ3140)。次に、方法3100は、ステップ3110にループ・バックして続行し、このことは、方法3100が、必要に応じて、新しいアクセラレータを作成するために連続的に監視し、機能できることを意味する。
図31の方法3100の議論において図26~図30の同じ例を続ける。この特定の例において、ステップ3110は、新しいアクセラレータでソフトウェア・ライブラリにおけるL3への呼び出しを実装できる(ステップ3110=はい)ことを判断すると仮定する。ステップ3120において、Acc4と呼ばれる新しいアクセラレータのためのアクセラレータ・イメージが生成され、次に、ステップ3130において、プログラム可能デバイスにデプロイされると仮定する。Acc4のためのイメージは、図29に示される同じプログラム可能デバイス2900にデプロイされ、図32に示されるように、Acc1 2910、Acc2 2920、Acc3 2930及びAcc4 3240を含むプログラム可能デバイス2900をもたらすと仮定する。利用可能なリソース3250は、Acc4がそれらのリソースの一部を使用しているので、図29におけるものより少ないことに留意されたい。次に、図33に示されるように、図31のステップ3140は、仮想関数テーブル内のL4への呼び出しを、Acc4への呼び出しに置き換える。この時点で、コンピュータ・プログラムが、仮想関数テーブル2600内の関数F4を呼び出すと、ソフトウェア・ライブラリへの呼び出しを介して関数を実行する代わりに、Acc4がこの関数を実行するために呼び出される。
図8、図15及び図22に示されるアクセラレータは、OpenCAPIインターフェースを含む。しかしながら、本明細書に開示され、特許請求の範囲に記載されているように、アクセラレータを動的に生成し、デプロイするためには、OpenCAPIインターフェースが厳密に必要とされるのではないことに留意されたい。OpenCAPIは仕様がオープンであり、誰もが、仕様に従って開発し、クラウド環境で相互運用するのが可能であることから、OpenCAPIインターフェースを含むプログラム可能デバイスにアクセラレータをデプロイすることは有用である。さらに、OpenCAPIインターフェースは、より低い待ち時間を提供し、アクセラレータと、アクセラレータが消費又は生成し得るデータとの間の「距離」を低減させる。さらに、OpenCAPIは、より高い帯域幅を提供し、所与の時間にアクセラレータが消費又は生成できるデータの量を増大させる。OpenCAPIのこれらの利点が組み合わされて、アクセラレータにおけるコンピュータ・プログラムのコード部分を実装するための良好な環境を提供し、コンピュータ・プログラムにおけるよりもアクセラレータにおいてより良好となるコード部分の閾値を低下させる。しかしながら、本明細書における開示及び特許請求の範囲は、OpenCAPIインターフェースを含まない又はこれにアクセスできないアクセラレータにも等しく適用される。
コンピュータ・プログラムは、ソフトウェア・ライブラリへの呼び出しを含む。コンピュータ・プログラムにおけるソフトウェア・ライブラリへの呼び出しを含む仮想関数テーブルが構築される。プログラム可能デバイスは、1つ又は複数の現在実装されているアクセラレータを含む。現在実装されている利用可能なアクセラレータが判断される。現在実装されているアクセラレータに対応するソフトウェア・ライブラリにおける呼び出しが判断される。仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の呼び出しが、対応する現在実装されているアクセラレータへの1又は複数の呼び出しに置き換えられる。新しいアクセラレータでソフトウェア・ライブラリにおける呼び出しを実装できるとき、新しいアクセラレータのためのアクセラレータ・イメージが動的に生成される。次に、アクセラレータ・イメージがデプロイされて、新しいアクセラレータが作成される。仮想関数テーブル内のソフトウェア・ライブラリへの1又は複数の呼び出しが、新しいアクセラレータへの1又は複数の対応する呼び出しに置き換えられる。
当業者であれば、特許請求の範囲内で多くの変形が可能であることを理解するであろう。従って、本開示が上記に具体的に示され、説明されるが、当業者は、特許請求の範囲から逸脱することなく、形態及び詳細におけるこれら及び他の変更を行い得ることを理解するであろう。
100、300:コンピュータ・システム
110、310:プロセッサ
120:PCIeインターフェース
140:標準メモリ
150、210、840、1530、2230:OpenCAPIインターフェース
160、220A、220B~220N、2910、2920、2930:アクセラレータ
170:コヒーレント・ネットワーク・コントローラ
180:アドバンスト・メモリ
195:ストレージ
200、312、830、1520、2220、2900:プログラム可能デバイス
320:メイン・メモリ
321:データ
322:オペレーティング・システム
323:コンピュータ・プログラム
324:アクセラレータ・デプロイ・ツール
325:コード分析器
326、710、720、730~790、1210、1220、1230~1290、2110、2120、2130、2420、2422、2424、2428、2720、2724、:コード部分
327:アクセラレータ・イメージ生成器
328:アクセラレータ実装器
329、1000、1400:アクセラレータ・カタログ
330:大容量ストレージ・インターフェース
340:ディスプレイ・インターフェース
350:ネットワーク・インターフェース
360:システム・バス
410:コード・ツー・HDL生成器
420:ハードウェア記述言語(HDL)
430:合成プロセス
450:シミュレーション・プロセス
510:コード・プロファイラ
530:コード選択ツール
700、900、1200、2100、2700:コンピュータ・プログラム
2110:ループ部分
2120:分岐ツリー部分
2130:非常に長いシリアル部分
2410:ソフトウェア・ライブラリ
2600:仮想関数テーブル
2800:アクセラレータ相関テーブル
2950:利用可能なソース

Claims (13)

  1. 少なくとも1つのプロセッサと、
    前記少なくとも1つのプロセッサに結合されたメモリと、
    現在実装されているアクセラレータを含む、前記少なくとも1つのプロセッサに結合されたプログラム可能デバイスと、
    前記メモリ内にあり、前記少なくとも1つのプロセッサにより実行されるコンピュータ・プログラムと、
    前記メモリ内にあり、前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、
    前記メモリ内にあり、前記少なくとも1つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断し、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築し、前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断し、前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第1の呼び出しが、前記現在実装されているアクセラレータに対応することを判断し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第1の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、
    を含む、装置。
  2. 前記プログラム可能デバイスは、前記少なくとも1つのプロセッサに結合されたOpen Coherent Accelerator Processor Interface(OpenCAPI)を含む、請求項1に記載の装置。
  3. 前記アクセラレータ・デプロイ・ツールは、新しいアクセラレータで前記ソフトウェア・ライブラリにおける第2の呼び出しを実装できることを判断し、前記新しいアクセラレータのためのアクセラレータ・イメージを動的に生成し、前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第2の呼び出しを前記新しいアクセラレータへの呼び出しに置き換える、請求項1に記載の方法。
  4. 前記新しいアクセラレータは、前記プログラム可能デバイス内の前記現在実装されているアクセラレータではない、請求項3に記載の装置。
  5. 前記アクセラレータ・デプロイ・ツールは、前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することにより、前記アクセラレータ・イメージを動的に生成する、請求項3に記載の装置。
  6. 前記プログラム可能デバイスは、フィールド・プログラマブル・ゲート・アレイ(FPGA)を含む、請求項1に記載の装置。
  7. 少なくとも1つのプロセッサと、
    前記少なくとも1つのプロセッサに結合されたメモリと、
    前記少なくとも1つのプロセッサに結合されたOpen Coherent Accelerator Processor Interface(OpenCAPI)を含む、前記少なくとも1つのプロセッサに結合され、かつ、現在実装されているアクセラレータを含む、フィールド・プログラマブル・ゲート・アレイ(FPGA)と、
    前記メモリ内にあり、前記少なくとも1つのプロセッサにより実行されるコンピュータ・プログラムと、
    前記メモリ内にあり、前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリと、
    前記メモリ内にあり、前記少なくとも1つのプロセッサに結合されたアクセラレータ・デプロイ・ツールであって、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断し、前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築し、前記FPGA内の前記現在実装されているアクセラレータが利用可能であることを判断し、前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第1の呼び出しが、前記現在実装されているアクセラレータに対応することを判断し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第1の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換え、前記現在実装されているアクセラレータではない新しいアクセラレータで前記ソフトウェア・ライブラリにおける第2の呼び出しを実装できることを判断し、前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換し、次に、前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することにより、前記新しいアクセラレータのための前記アクセラレータ・イメージを動的に生成し、前記アクセラレータ・イメージを前記FPGAにデプロイして前記新しいアクセラレータを作成し、前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第2の呼び出しを前記新しいアクセラレータへの呼び出しに置き換える、アクセラレータ・デプロイ・ツールと、
    を含む、装置。
  8. コンピュータ・プログラムのランタイム性能を向上させるための方法であって、
    プログラム可能デバイス内に現在実装されているアクセラレータを提供することと、
    前記コンピュータ・プログラムにより呼び出される複数の関数を含むソフトウェア・ライブラリを提供することと、
    前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの複数の呼び出しを判断することと、
    前記コンピュータ・プログラムにおける前記ソフトウェア・ライブラリへの前記複数の呼び出しを含む仮想関数テーブルを構築することと、
    前記プログラム可能デバイス内の前記現在実装されているアクセラレータが利用可能であることを判断することと、
    前記ソフトウェア・ライブラリにおける前記複数の呼び出しの第1の呼び出しが、前記現在実装されているアクセラレータに対応することを判断することと、
    前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第1の呼び出しを前記現在実装されているアクセラレータへの呼び出しに置き換えることと、
    を含む、方法。
  9. 前記プログラム可能デバイスは、少なくとも1つのプロセッサに結合されたOpen Coherent Accelerator Processor Interface(OpenCAPI)を含む、請求項8に記載の方法。
  10. 新しいアクセラレータで前記ソフトウェア・ライブラリにおける第2の呼び出しを実装できることを判断することと、
    前記新しいアクセラレータのためのアクセラレータ・イメージを動的に生成することと、
    前記アクセラレータ・イメージを前記プログラム可能デバイスにデプロイして前記新しいアクセラレータを作成することと、
    前記仮想関数テーブル内の前記ソフトウェア・ライブラリへの前記第2の呼び出しを前記新しいアクセラレータへの呼び出しに置き換えることと、
    をさらに含む、請求項8に記載の方法。
  11. 前記新しいアクセラレータは、前記プログラム可能デバイス内の前記現在実装されているアクセラレータではない、請求項10に記載の方法。
  12. 前記新しいアクセラレータのための前記アクセラレータ・イメージを動的に生成することは、
    前記コンピュータ・プログラム内のコード部分をハードウェア記述言語表現に変換することと、
    前記ハードウェア記述言語表現を処理して、そこから前記アクセラレータ・イメージを生成することと、
    を含む、請求項10に記載の方法。
  13. 前記プログラム可能デバイスは、フィールド・プログラマブル・ゲート・アレイ(FPGA)を含む、請求項8に記載の方法。
JP2020534594A 2017-12-20 2018-12-19 ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えるための装置及び方法 Active JP7252694B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/849,560 2017-12-20
US15/849,560 US11645059B2 (en) 2017-12-20 2017-12-20 Dynamically replacing a call to a software library with a call to an accelerator
PCT/IB2018/060306 WO2019123292A1 (en) 2017-12-20 2018-12-19 Dynamically replacing a call to a software library with a call to an accelerator

Publications (2)

Publication Number Publication Date
JP2021508117A JP2021508117A (ja) 2021-02-25
JP7252694B2 true JP7252694B2 (ja) 2023-04-05

Family

ID=66814393

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020534594A Active JP7252694B2 (ja) 2017-12-20 2018-12-19 ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えるための装置及び方法

Country Status (6)

Country Link
US (1) US11645059B2 (ja)
JP (1) JP7252694B2 (ja)
CN (1) CN111656321B (ja)
DE (1) DE112018006540T5 (ja)
GB (1) GB2582120B (ja)
WO (1) WO2019123292A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018111224A1 (en) * 2016-12-12 2018-06-21 Hitachi, Ltd. System and method of dynamic allocation of hardware accelerator
US10901827B2 (en) * 2018-05-14 2021-01-26 International Business Machines Corporation Failover of a hardware accelerator to software
US10817280B1 (en) * 2018-05-21 2020-10-27 Amazon Technologies, Inc. Overriding shared service interfaces
US10725839B2 (en) 2018-07-12 2020-07-28 International Business Machines Corporation Helping a hardware accelerator using software
US11604653B2 (en) * 2020-12-11 2023-03-14 International Business Machines Corporation Identifying dependencies in a control sequence for execution on a hardware accelerator

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001090887A1 (fr) 2000-05-25 2001-11-29 Fujitsu Limited Procede de traitement de programme permettant un traitement haute vitesse au moyen d'un materiel a reconfiguration dynamique et programme permettant d'executer ce procede de traitement
JP2005228183A (ja) 2004-02-16 2005-08-25 Hitachi Ltd プログラム実行方法、および、プログラム実行のための計算機システム
JP2009070265A (ja) 2007-09-14 2009-04-02 Ricoh Co Ltd 情報処理装置
JP2011013955A (ja) 2009-07-02 2011-01-20 Hitachi Systems & Services Ltd メディアチェック回避システム
JP2017097478A (ja) 2015-11-19 2017-06-01 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9320982D0 (en) * 1993-10-12 1993-12-01 Ibm A data processing system
US6785881B1 (en) 2001-11-19 2004-08-31 Cypress Semiconductor Corporation Data driven method and system for monitoring hardware resource usage for programming an electronic device
US7073158B2 (en) 2002-05-17 2006-07-04 Pixel Velocity, Inc. Automated system for designing and developing field programmable gate arrays
US6775810B2 (en) * 2002-10-08 2004-08-10 Sun Microsystems, Inc. Boosting simulation performance by dynamically customizing segmented object codes based on stimulus coverage
US7356672B2 (en) 2004-05-28 2008-04-08 The Regents Of The University Of California Warp processor for dynamic hardware/software partitioning
US20060075007A1 (en) 2004-09-17 2006-04-06 International Business Machines Corporation System and method for optimizing a storage system to support full utilization of storage space
US20090240717A1 (en) * 2008-03-20 2009-09-24 Hitachi, Ltd. Method and apparatus for verifying archived data integrity in integrated storage systems
FR2938943B1 (fr) * 2008-11-21 2010-11-12 Thales Sa Systeme multiprocesseur.
CN101441564B (zh) * 2008-12-04 2011-07-20 浙江大学 为程序定制的可重构加速器实现方法
US9378003B1 (en) * 2009-07-23 2016-06-28 Xilinx, Inc. Compiler directed cache coherence for many caches generated from high-level language source code
US8825972B1 (en) * 2010-11-19 2014-09-02 Symantec Corporation Method and system of producing a full backup image using an incremental backup method
US8788871B2 (en) * 2011-06-28 2014-07-22 International Business Machines Corporation Unified, workload-optimized, adaptive RAS for hybrid systems
US9081925B1 (en) * 2012-02-16 2015-07-14 Xilinx, Inc. Estimating system performance using an integrated circuit
US9424019B2 (en) 2012-06-20 2016-08-23 Microsoft Technology Licensing, Llc Updating hardware libraries for use by applications on a computer system with an FPGA coprocessor
US9298438B2 (en) 2012-06-20 2016-03-29 Microsoft Technology Licensing, Llc Profiling application code to identify code portions for FPGA implementation
US9990189B2 (en) * 2013-07-03 2018-06-05 International Business Machines Corporation Method to optimize provisioning time with dynamically generated virtual disk contents
US9501393B2 (en) 2014-01-27 2016-11-22 Western Digital Technologies, Inc. Data storage system garbage collection based on at least one attribute
US10108622B2 (en) 2014-03-26 2018-10-23 International Business Machines Corporation Autonomic regulation of a volatile database table attribute
US9921971B2 (en) 2014-06-26 2018-03-20 SAP Portal Israel Ltd. Context based cache eviction
US20150379169A1 (en) * 2014-06-27 2015-12-31 Yong Wu Efficient emulation for pseudo-wrapped callback handling in binary translation software
US9607120B2 (en) 2014-12-30 2017-03-28 International Business Machines Corporation Implementing system irritator accelerator FPGA unit (AFU) residing behind a coherent attached processors interface (CAPI) unit
US9720714B2 (en) 2015-08-26 2017-08-01 International Business Machines Corporation Accelerator functionality management in a coherent computing system
KR101847262B1 (ko) * 2016-03-18 2018-05-28 연세대학교 산학협력단 하드웨어 가속기를 포함하는 메인 메모리 및 메인 메모리의 동작 방법
US10034407B2 (en) 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US10417364B2 (en) * 2017-01-04 2019-09-17 Stmicroelectronics International N.V. Tool to create a reconfigurable interconnect framework
US10296741B2 (en) * 2017-07-27 2019-05-21 International Business Machines Corporation Secure memory implementation for secure execution of virtual machines

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001090887A1 (fr) 2000-05-25 2001-11-29 Fujitsu Limited Procede de traitement de programme permettant un traitement haute vitesse au moyen d'un materiel a reconfiguration dynamique et programme permettant d'executer ce procede de traitement
JP2005228183A (ja) 2004-02-16 2005-08-25 Hitachi Ltd プログラム実行方法、および、プログラム実行のための計算機システム
JP2009070265A (ja) 2007-09-14 2009-04-02 Ricoh Co Ltd 情報処理装置
JP2011013955A (ja) 2009-07-02 2011-01-20 Hitachi Systems & Services Ltd メディアチェック回避システム
JP2017097478A (ja) 2015-11-19 2017-06-01 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Also Published As

Publication number Publication date
GB2582120B (en) 2021-01-27
WO2019123292A1 (en) 2019-06-27
DE112018006540T5 (de) 2020-08-27
JP2021508117A (ja) 2021-02-25
US20190187966A1 (en) 2019-06-20
CN111656321A (zh) 2020-09-11
GB202010578D0 (en) 2020-08-26
CN111656321B (zh) 2024-03-22
GB2582120A (en) 2020-09-09
US11645059B2 (en) 2023-05-09

Similar Documents

Publication Publication Date Title
JP7252694B2 (ja) ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えるための装置及び方法
US11362891B2 (en) Selecting and using a cloud-based hardware accelerator
US11372739B2 (en) Accelerator monitoring and testing
US11132282B2 (en) Managing cloud-based hardware accelerators
US10754624B2 (en) Accelerator generation using parallel synthesis and simulation
US10977098B2 (en) Automatically deploying hardware accelerators based on requests from users
US10740257B2 (en) Managing accelerators in application-specific integrated circuits
US11144357B2 (en) Selecting hardware accelerators based on score
US11150969B2 (en) Helping a hardware accelerator using software
US10747705B2 (en) On-chip accelerator management
US10740160B2 (en) Dynamic accelerator generation and deployment
US10901827B2 (en) Failover of a hardware accelerator to software
US10572250B2 (en) Dynamic accelerator generation and deployment
US20190163447A1 (en) Dynamic accelerator generation and deployment
US20210117239A1 (en) Dynamic accelerator generation and deployment
US10496586B2 (en) Accelerator management
US10831975B2 (en) Debug boundaries in a hardware accelerator
US20200004666A1 (en) Debug boundaries for hardware accelerators
US10824472B2 (en) Coalescing multiple accelerators into a single accelerator
US10936043B2 (en) Thermal management of hardware accelerators

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200820

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210525

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20220502

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220525

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220607

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20220906

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20221107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230307

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20230307

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230322

R150 Certificate of patent or registration of utility model

Ref document number: 7252694

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150