JP7380823B2 - オフロードサーバ、オフロード制御方法およびオフロードプログラム - Google Patents

オフロードサーバ、オフロード制御方法およびオフロードプログラム Download PDF

Info

Publication number
JP7380823B2
JP7380823B2 JP2022501406A JP2022501406A JP7380823B2 JP 7380823 B2 JP7380823 B2 JP 7380823B2 JP 2022501406 A JP2022501406 A JP 2022501406A JP 2022501406 A JP2022501406 A JP 2022501406A JP 7380823 B2 JP7380823 B2 JP 7380823B2
Authority
JP
Japan
Prior art keywords
processing
library
gpu
code
offload
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
JP2022501406A
Other languages
English (en)
Other versions
JPWO2021166031A1 (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2021166031A1 publication Critical patent/JPWO2021166031A1/ja
Application granted granted Critical
Publication of JP7380823B2 publication Critical patent/JP7380823B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution

Description

本発明は、機能処理をFPGA(Field Programmable Gate Array)等のアクセラレータに自動オフロードするオフロードサーバ、オフロード制御方法およびオフロードプログラムに関する。
CPU(Central Processing Unit)以外のヘテロな計算リソースを用いることが増えている。例えば、GPU(Graphics Processing Unit)(アクセラレータ)を強化したサーバで画像処理を行ったり、FPGA(アクセラレータ)で信号処理をアクセラレートすることが始まっている。FPGAは、製造後に設計者等が構成を設定できるプログラム可能なゲートアレイであり、PLD(Programmable Logic Device)の一種である。Amazon Web Services (AWS)(登録商標)では、GPUインスタンス、FPGAインスタンスが提供されており、オンデマンドにそれらリソースを使うこともできる。Microsoft(登録商標)は、FPGAを用いて検索を効率化している。
OpenIoT(Internet of Things)環境では、サービス連携技術等を用いて、多彩なアプリケーションの創出が期待されるが、更に進歩したハードウェアを生かすことで、動作アプリケーションの高性能化が期待できる。しかし、そのためには、動作させるハードウェアに合わせたプログラミングや設定が必要である。例えば、CUDA(Compute Unified Device Architecture)、 OpenCL(Open Computing Language)といった多くの技術知識が求められ、ハードルは高い。OpenCLは、あらゆる計算資源(CPUやGPUに限らない)を特定のハードに縛られず統一的に扱えるオープンなAPI(Application Programming Interface)である。
GPUやFPGAをユーザのIoTアプリケーションで容易に利用できるようにするため下記が求められる。すなわち、動作させる画像処理、暗号処理等の汎用アプリケーションをOpenIoT環境にデプロイする際に、OpenIoTのプラットフォームがアプリケーションロジックを分析し、GPU、FPGAに自動で処理をオフロードすることが望まれる。
GPUの計算能力を画像処理以外にも使うGPGPU(General Purpose GPU)のための開発環境CUDAが発展している。CUDAは、GPGPU向けの開発環境である。また、GPU、FPGA、メニーコアCPU等のヘテロハードウェアを統一的に扱うための標準規格としてOpenCLも登場している。
CUDAやOpenCLでは、C言語の拡張によるプログラミングを行う。ただし、GPU等のデバイスとCPUの間のメモリコピー、解放等を記述する必要があり、記述の難度は高い。実際に、CUDAやOpenCLを使いこなせる技術者は数多くはいない。
簡易にGPGPUを行うため、ディレクティブベースで、ループ文等の並列処理すべき個所を指定し、ディレクティブに従いコンパイラがデバイス向けコードに変換する技術がある。技術仕様としてOpenACC(Open Accelerator)等、コンパイラとしてPGI(The Portland Group, Inc.)コンパイラ(登録商標)等がある。例えば、OpenACCを使った例では、ユーザはC/C++/Fortran言語で書かれたコードに、OpenACCディレクティブで並列処理させる等を指定する。PGIコンパイラは、コードの並列可能性をチェックして、GPU用、CPU用実行バイナリを生成し、実行モジュール化する。IBM JDK(登録商標)は、Java(登録商標)のlambda形式に従った並列処理指定を、GPUにオフロードする機能をサポートしている。これらの技術を用いることで、GPUメモリへのデータ割り当て等を、プログラマは意識する必要がない。
このように、OpenCL、CUDA、OpenACC等の技術により、GPUやFPGAへのオフロード処理が可能になっている。
しかし、オフロード処理自体は行えるようになっても、適切なオフロードには課題が多い。例えば、Intelコンパイラ(登録商標)のように自動並列化機能を持つコンパイラがある。自動並列化する際は、プログラム上のfor文(繰り返し文)等の並列処理部を抽出する。ところが、GPUを用いて並列に動作させる場合は、CPU-GPUメモリ間のデータやり取りのオーバヘッドのため、性能が出ないことも多い。GPUを用いて高速化する際は、スキル保持者が、OpenCLやCUDAでのチューニングや、PGIコンパイラ等で適切な並列処理部を探索することが必要になっている。
このため、スキルが無いユーザがGPUを使ってアプリケーションを高性能化することは難しいし、自動並列化技術を使う場合も、for文を並列するかしないかの試行錯誤のチューニング等、利用開始までに多くの時間がかかっている。
並列処理箇所の試行錯誤を自動化する取り組みとして、非特許文献1,2が挙げられる。非特許文献1,2は、GPUオフロードに適したループ文を、進化的計算手法を用いて検証環境での性能測定を繰り返すことで、適切に抽出し、ネストループ文内の変数をできるだけ上位のループでCPU-GPU転送を一括化することで自動での高速化を行っている。
Y. Yamato, T. Demizu, H. Noguchi and M. Kataoka, "Automatic GPU Offloading Technology for Open IoT Environment, "IEEE Internet of Things Journal, Sep. 2018. Y. Yamato, "Study of parallel processing area extraction and data transfer number reduction for automatic GPU offloading of IoT applications," Journal of Intelligent Information Systems, Springer, DOI: 10.1007/s10844-019-00575-8, Aug. 2019. 山登庸次,"アプリケーションループ文のFPGA自動オフロード手法の評価," 電子情報通信学会技術報告,SWIM2019-25, Feb. 2020. Numerical Recipes in C, https://www.cec.uchile.cl/cinetica/pcordero/MC_libros/NumericalRecipesinC.pdf https://www.intel.com/content/www/us/en/programmable/support/support-resources/design-examples/design-software/opencl/fft-2d.html
非特許文献1では、CPU向けの汎用的コードから、GPUオフロードに向けて、適切な並列処理領域を自動抽出し、並列処理可能なループ文群に対してGAを用いて、より適切な並列処理領域を探索することで、GPUへの自動オフロードを実現している。しかし、特に、FPGAで高速化する際は、CPU向けのアルゴリズムからハードウェア処理に適したアルゴリズムに変更し、高速化していることが多いため、ループ文の単純なオフロードだけでは、手動でアルゴリズムから変えて高速化している場合に比べ、性能が不十分なことが多かった。
このような点に鑑みて本発明がなされたのであり、PLD(例えば、FPGA)への自動オフロードにおいて、オフロード処理の高速化を図ることを課題とする。
前記した課題を解決するため、アプリケーションの特定処理をGPU(Graphics Processing Unit)またはPLD(Programmable Logic Device)にオフロードするオフロードサーバであって、前記GPUまたは前記PLDにオフロード可能なライブラリおよびIPコアを記憶する記憶部と、アプリケーションのソースコードを分析して、当該ソースコードに含まれる外部ライブラリ呼び出しを検出するアプリケーションコード分析部と、検出された前記外部ライブラリ呼び出しをキーにして、前記記憶部から前記ライブラリおよび前記IPコアを取得する置換機能検出部と、前記アプリケーションのソースコードの置換元の処理記述を、前記置換機能検出部が取得した前記ライブラリおよび前記IPコアの置換先の処理記述として置換するとともに、置換した前記ライブラリおよび前記IPコアの処理記述を、オフロード対象の機能ブロックとして、前記GPUまたは前記PLDにオフロードする置換処理部と、ホストプログラムとのインタフェースを作成し、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出するオフロードパターン作成部と、作成されたGPUまたはPLD処理パターンの前記アプリケーションをコンパイルして、実行ファイルを作成する実行ファイル作成部と、作成された前記実行ファイルをアクセラレータ検証用装置に配置し、前記GPUまたは前記PLDにオフロードした際の性能測定用処理を実行する性能測定部と、を備え、前記実行ファイル作成部は、前記性能測定用処理による性能測定結果をもとに、複数の前記GPUまたはPLD処理パターンから最高処理性能の前記GPUまたはPLD処理パターンを選択し、最高処理性能の前記GPUまたはPLD処理パターンをコンパイルして、最終実行ファイルを作成することを特徴とするオフロードサーバとした。
本発明によれば、PLDへの自動オフロードにおいて、オフロード処理の高速化を図ることができる。
本発明の実施形態に係るオフロードサーバを含む環境適応ソフトウェアシステムを示す図である。 上記実施形態に係るオフロードサーバの構成例を示す機能ブロック図である。 上記実施形態に係るオフロードサーバの機能ブロックのオフロード処理を示す図である。 上記実施形態に係るオフロードサーバの制御部が、機能ブロックのオフロード処理において<処理A-1>と<処理B-1>と<処理C-1>とを実行する場合のフローチャートである。 上記実施形態に係るオフロードサーバの制御部が、機能ブロックのオフロード処理において<処理A-2>と<処理B-2>と<処理C-2>とを実行する場合のフローチャートである。 本発明の実施形態に係るオフロードサーバの機能を実現するコンピュータの一例を示すハードウェア構成図である。
次に、本発明を実施するための形態(以下、「本実施形態」と称する。)における、オフロードサーバ1等について説明する。
以下、明細書の説明において、PLD(Programmable Logic Device)として、FPGA(Field Programmable Gate Array)に適用した例について説明する。本発明は、プログラマブルロジックデバイス全般に適用可能である。
(背景説明)
処理時間が長くかかる特定のループ文を、FPGAにオフロードして高速化することを考えた際に、どのループをオフロードすれば高速になるかの予測は難しい。
このため、非特許文献3では、GPU同様、検証環境で試行錯誤を自動で行うことを記載している。しかし、FPGAは、GPUと異なり、コンパイルに数時間以上かかる。そこで、オフロード候補のループ文を絞ってから、実測試行を行うようにしている。
しかし、特に、FPGAで高速化する際は、CPU向けのアルゴリズムからハードウェア処理に適したアルゴリズムに変更し、高速化していることが多い。このため、手動でアルゴリズムから変えて高速化している場合に比べ、ループ文の単純なオフロードだけでは、性能が不十分なことが多かった。例えば、行列積算の場合を例に採ると、行列のすべてのデータをFPGAのローカルメモリで持つことは難しいため、まずデータAを行方向に読み、次にデータBを列方向に読み込むことで、容量制限があるローカルメモリを上手く活用する等のアルゴリズムで高速化している例がある。GPUの場合も、例えばフーリエ変換を、GPU向けのアルゴリズムで実装してGPU向けに高速化したCUDAライブラリのcuFFT等がある。
しかしながら、このようなアプリケーションに応じた処理ハードウェア向けのアルゴリズム変更は、機械に自動で抽出させるのは現状では困難である。
そこで、本発明は、個々のループ文でなく、行列積算やフーリエ変換等のより大きな単位で、FPGAやGPU等ハードウェア向けのアルゴリズム含めて実装された機能ブロックに置換する。これにより、人の既存ノウハウの活用し、オフロード処理の高速化を図る。
(実施形態)
図1は、本実施形態に係るオフロードサーバ1を含む環境適応ソフトウェアシステムを示す図である。
本実施形態に係る環境適応ソフトウェアシステムは、従来の環境適応ソフトウェアの構成に加え、オフロードサーバ1を含むことを特徴とする。オフロードサーバ1は、アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバである。また、オフロードサーバ1は、クラウドレイヤ2、ネットワークレイヤ3、デバイスレイヤ4の3層に位置する各装置と通信可能に接続される。クラウドレイヤ2にはデータセンタ30が、ネットワークレイヤ3にはネットワークエッジ20が、デバイスレイヤ4にはゲートウェイ10が、それぞれ配設される。
そこで、本実施形態に係るオフロードサーバ1を含む環境適応ソフトウェアシステムでは、デバイスレイヤ、ネットワークレイヤ、クラウドレイヤのそれぞれのレイヤにおいて、機能配置や処理オフロードを適切に行うことによる効率化を実現する。主に、機能を3レイヤの適切な場所に配置し処理させる機能配置効率化と、画像分析等の機能処理をGPUやFPGA等のヘテロハードウェアにオフロードすることでの効率化を図る。クラウドレイヤでは、GPUやFPGA等のヘテロジニアスなHW(ハードウェア)(以下、「ヘテロデバイス」と称する。)を備えたサーバが増えてきている。例えば、Microsoft(登録商標)社のBing検索においても、FPGAが利用されている。このように、ヘテロデバイスを活用し、例えば、行列計算等をGPUにオフロードしたり、FFT(Fast Fourier Transform)計算等の特定処理をFPGAにオフロードしたりすることで、高性能化を実現している。
以下、本実施形態に係るオフロードサーバ1が、環境適応ソフトウェアシステムにおけるユーザ向けサービス利用のバックグラウンドで実行するオフロード処理を行う際の構成例について説明する。
サービスを提供する際は、初日は試し利用等の形でユーザにサービス提供し、そのバックグラウンドで画像分析等のオフロード処理を行い、翌日以降は画像分析をFPGAにオフロードしてリーズナブルな価格で見守りサービスを提供できるようにすることを想定する。
図2は、本発明の実施形態に係るオフロードサーバ1の構成例を示す機能ブロック図である。
オフロードサーバ1は、アプリケーションの特定処理をアクセラレータに自動的にオフロードする装置である。
また、オフロードサーバ1は、エミュレータに接続可能である。
図2に示すように、オフロードサーバ1は、制御部11と、入出力部12と、記憶部13と、検証用マシン14(Verification machine)(アクセラレータ検証用装置)と、を含んで構成される。
入出力部12は、各機器等との間で情報の送受信を行うための通信インタフェースと、タッチパネルやキーボード等の入力装置や、モニタ等の出力装置との間で情報の送受信を行うための入出力インタフェースとから構成される。
記憶部13は、ハードディスクやフラッシュメモリ、RAM(Random Access Memory)等により構成され、制御部11の各機能を実行させるためのプログラム(オフロードプログラム)や、制御部11の処理に必要な情報(例えば、中間言語ファイル(Intermediate file)132)が一時的に記憶される。
記憶部13は、コードパターンDB(Code pattern database)130(後記)、テストケースDB(Test case database)131を備える。
テストケースDB131には、性能試験項目が格納される。テストケースDB131は、高速化するアプリケーションの性能を測定するような試験を行うための情報が格納される。例えば、画像分析処理の深層学習アプリケーションであれば、サンプルの画像とそれを実行する試験項目である。
検証用マシン14は、環境適応ソフトウェアの検証用環境として、CPU(Central Processing Unit)、GPU、FPGA(アクセラレータ)を備える。
<コードパターンDB130>
・GPUライブラリ、IPコアの記憶
コードパターンDB130は、GPUやFPGA等にオフロード可能なライブラリおよびIPコア(後記)を記憶する。すなわち、コードパターンDB130は、後記<処理B-1>のために、特定のライブラリ、機能ブロックを高速化するGPU用ライブラリ(GPUライブラリ)やFPGA用IPコア(IPコア)とそれに関連する情報を保持する。例えば、コードパターンDB130は、FFT等算術計算等のライブラリリスト(外部ライブラリリスト)を保持する。
・CUDAライブラリの記憶
コードパターンDB130は、GPUライブラリとして、例えばCUDAライブラリと当該CUDAライブラリを利用するためのライブラリ利用手順とを記憶する。すなわち、後記<処理C-1>において、置換するライブラリやIPコアをGPUやFPGAに実装し、ホスト側(CPU)プログラムと繋ぐ場合、ライブラリ利用手順も含めて登録しておき、その手順に従って利用する。例えば、CUDAライブラリでは、C言語コードからCUDAライブラリを利用する手順がライブラリとともに公開されているため、コードパターンDB130にライブラリ利用手順も含めて登録しておく。
・クラス、構造体の記憶
コードパターンDB130は、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を記憶する。すなわち、後記<処理B-2>において、登録されていないライブラリ呼び出し以外の機能処理を検出するため、構文解析にてソースコードの定義記述からクラス、構造体等を検出する。コードパターンDB130は、後記<処理B-2>のために、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を登録しておく。なお、クラスまたは構造体の機能処理に対して、高速化するライブラリやIPコアがあることは、類似性検出ツール(後記)で検出する。
・OpenCLコードの記憶
コードパターンDB130は、IPコア関連の情報としてOpenCLコードを記憶する。コードパターンDB130に、OpenCLコードを記憶しておくことで、OpenCLコードから、OpenCLインタフェースを用いたCPUとFPGAの接続および、FPGAへのIPコア実装が、XilinxやIntel等のFPGAベンダの高位合成ツール(後記)を介して行うことができる。
<制御部11>
制御部11は、オフロードサーバ1全体の制御を司る自動オフロード機能部(Automatic Offloading function)であり、記憶部13に格納されたプログラム(オフロードプログラム)を不図示のCPUが、RAMに展開し実行することにより実現される。
特に、制御部11は、CPU向けの既存プログラムコードの中にFPGAやGPUへオフロードすることで処理を高速化できる機能ブロックを検出し、検出した機能ブロックをGPU向けライブラリやFPGA向けIPコア等に置き換えることで高速化をする機能ブロックのオフロード処理を行う。
制御部11は、アプリケーションコード指定部(Specify application code)111と、アプリケーションコード分析部(Analyze application code)112と、置換機能検出部113と、置換処理部114と、オフロードパターン作成部115と、性能測定部116と、実行ファイル作成部117と、本番環境配置部(Deploy final binary files to production environment)118と、性能測定テスト抽出実行部(Extract performance test cases and run automatically)119と、ユーザ提供部(Provide price and performance to a user to judge)120と、を備える。
<アプリケーションコード指定部111>
アプリケーションコード指定部111は、入力されたアプリケーションコードの指定を行う。具体的には、アプリケーションコード指定部111は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。
<アプリケーションコード分析部112>
アプリケーションコード分析部112は、後記<処理A-1>において、アプリケーションのソースコードを分析して、当該ソースコードに含まれる外部ライブラリの呼び出しを検出する。具体的には、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
上述したコード分析は、オフロードするデバイスを想定した分析が必要になるため、一般化は難しい。ただし、ループ文や変数の参照関係等のコードの構造を把握したり、機能ブロックとしてFFT処理を行う機能ブロックであることや、FFT処理を行うライブラリを呼び出している等を把握することは可能である。機能ブロックの判断は、オフロードサーバが自動判断することは難しい。これもDeckard等の類似性検出ツールを用いて類似度判定等で把握することは可能である。ここで、Clangは、C/C++向けツールであるが、解析する言語に合わせたツールを選ぶ必要がある。
また、アプリケーションコード分析部112は、後記<処理A-2>において、ソースコードからクラスまたは構造体のコードを検出する。
<置換機能検出部113>
置換機能検出部113は、後記<処理B-1>において、検出された呼び出しをキーにして、コードパターンDB130からGPUライブラリおよびIPコアを取得する。具体的には、置換機能検出部113は、検出したライブラリ呼び出しに対して、ライブラリ名をキーとして、コードパターンDB130と照合することで、GPU、FPGAにオフロードできるオフロード可能処理を抽出する。
ここで、コードパターンDB130は、GPUライブラリとして、例えばCUDAライブラリと当該CUDAライブラリを利用するためのライブラリ利用手順とを記憶している。そして、置換機能検出部113は、ライブラリ利用手順をもとに、コードパターンDB130からCUDAライブラリを取得する。
置換機能検出部113は、後記<処理B-2>において、検出されたクラスまたは構造体(後記)の定義記述コードをキーにして、コードパターンDB130からGPUライブラリおよびIPコアを取得する。具体的には、置換機能検出部113は、コピーコードやコピー後変更した定義記述コードを検出する類似性検出ツールを用いて、置換元コードに含まれるクラスや構造体に対して、コードパターンDB130から類似のクラスまたは構造体に紐づいて管理されているGPU、FPGAにオフロードできるGPUライブラリおよびIPコアを抽出する。
<置換処理部114>
置換処理部114は、後記<処理C-1>において、アプリケーションのソースコードの置換元の処理記述を、置換機能検出部113が取得した置換先のライブラリおよびIPコアの処理記述に置換する。具体的には、置換処理部114は、抽出したオフロード可能処理を、GPU向けのライブラリやFPGA向けのIPコア等に置換する。
また、置換処理部114は、置換したライブラリおよびIPコアの処理記述を、オフロード対象の機能ブロックとして、GPUやFPGA等にオフロードする。具体的には、置換処理部114は、GPU向けのライブラリやFPGA向けのIPコア等に置換した機能ブロックを、CPUプログラムとのインタフェースを作成することでオフロードする。置換処理部114は、CUDA,OpenCL等の中間言語ファイル132を出力する。
置換処理部114は、後記<処理C-2>において、アプリケーションのソースコードの置換元の処理記述を、取得したライブラリおよびIPコアの処理記述に置換するとともに、置換元と置換先で引数、戻り値の数または型が異なる場合に、その確認を通知する。
<オフロードパターン作成部115>
オフロードパターン作成部115は、1以上のオフロードするパターンを作成する。具体的には、ホストプログラムとのインタフェースを作成し、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出する。
ここで、コードパターンDB130は、IPコア関連の情報としてOpenCLコードを記憶している。オフロードパターン作成部115は、FPGA等のPLDにオフロードする場合は、OpenCLコードをもとにOpenCLインタフェースを用いてホストとPLDとを接続するとともに、OpenCLコードをもとにPLDへのIPコアの実装を行う。
OpenCLのAPIに沿う、カーネルプログラムとホストプログラムのインタフェース記述について述べる。なお、下記説明は、後記[処理C](ホスト側とのインタフェースの整合)の<処理C-1>の具体例に対応する。
OpenCLのC言語の文法に沿って作成したカーネルは、OpenCLのC言語のランタイムAPIを利用して、作成するホスト(例えば、CPU)側のプログラムによりデバイス(例えば、FPGA)で実行される。カーネル関数hello()をホスト側から呼び出す部分は、OpenCLランタイムAPIの一つであるclEnqueueTask()を呼び出すことである。
ホストコードで記述するOpenCLの初期化、実行、終了の基本フローは、下記ステップ1~13である。このステップ1~13のうち、ステップ1~10がカーネル関数hello()をホスト側から呼び出すまでの手続(準備)であり、ステップ11でカーネルの実行となる。
1.プラットフォーム特定
OpenCLランタイムAPIで定義されているプラットフォーム特定機能を提供する関数clGetPlatformIDs()を用いて、OpenCLが動作するプラットフォームを特定する。
2.デバイス特定
OpenCLランタイムAPIで定義されているデバイス特定機能を提供する関数clGetDeviceIDs()を用いて、プラットフォームで使用するGPU等のデバイスを特定する。
3.コンテキスト作成
OpenCLランタイムAPIで定義されているコンテキスト作成機能を提供する関数clCreateContext()を用いて、OpenCLを動作させる実行環境となるOpenCLコンテキストを作成する。
4.コマンドキュー作成
OpenCLランタイムAPIで定義されているコマンドキュー作成機能を提供する関数clCreateCommandQueue()を用いて、デバイスを制御する準備であるコマンドキューを作成する。OpenCLでは、コマンドキューを通して、ホストからデバイスに対する働きかけ(カーネル実行コマンドやホスト-デバイス間のメモリコピーコマンドの発行)を実行する。
5.メモリオブジェクト作成
OpenCLランタイムAPIで定義されているデバイス上にメモリを確保する機能を提供する関数clCreateBuffer()を用いて、ホスト側からメモリオブジェクトを参照できるようにするメモリオブジェクトを作成する。
6.カーネルファイル読み込み
デバイスで実行するカーネルは、その実行自体をホスト側のプログラムで制御する。このため、ホストプログラムは、まずカーネルプログラムを読み込む必要がある。カーネルプログラムには、OpenCLコンパイラで作成したバイナリデータや、OpenCL C言語で記述されたソースコードがある。このカーネルファイルを読み込む(記述省略)。なお、カーネルファイル読み込みでは、OpenCLランタイムAPIは使用しない。
7.プログラムオブジェクト作成
OpenCLでは、カーネルプログラムをプログラムオブジェクトとして認識する。この手続きがプログラムオブジェクト作成である。
OpenCLランタイムAPIで定義されているプログラムオブジェクト作成機能を提供する関数clCreateProgramWithSource()を用いて、ホスト側からメモリオブジェクトを参照できるようにするプログラムオブジェクトを作成する。カーネルプログラムのコンパイル済みバイナリ列から作成する場合は、clCreateProgramWithBinary()を使用する。
8.ビルド
ソースコードとして登録したプログラムオブジェクトを OpenCL Cコンパイラ・リンカを使いビルドする。
OpenCLランタイムAPIで定義されているOpenCL Cコンパイラ・リンカによるビルドを実行する関数clBuildProgram()を用いて、プログラムオブジェクトをビルドする。なお、clCreateProgramWithBinary()でコンパイル済みのバイナリ列からプログラムオブジェクトを生成した場合、このコンパイル手続は不要である。
9.カーネルオブジェクト作成
OpenCLランタイムAPIで定義されているカーネルオブジェクト作成機能を提供する関数clCreateKernel()を用いて、カーネルオブジェクトを作成する。1つのカーネルオブジェクトは、1つのカーネル関数に対応するので、カーネルオブジェクト作成時には、カーネル関数の名前(hello)を指定する。また、複数のカーネル関数を1つのプログラムオブジェクトとして記述した場合、1つのカーネルオブジェクトは、1つのカーネル関数に1対1で対応するので、clCreateKernel()を複数回呼び出す。
10.カーネル引数設定
OpenCLランタイムAPIで定義されているカーネルへ引数を与える(カーネル関数が持つ引数へ値を渡す)機能を提供する関数clSetKernel()を用いて、カーネル引数を設定する。
以上、上記ステップ1~10で準備が整い、ホスト側からデバイスでカーネルを実行するステップ11に入る。
11.カーネル実行
カーネル実行(コマンドキューへ投入)は、デバイスに対する働きかけとなるので、コマンドキューへのキューイング関数となる。
OpenCLランタイムAPIで定義されているカーネル実行機能を提供する関数clEnqueueTask()を用いて、カーネルhelloをデバイスで実行するコマンドをキューイングする。カーネルhelloを実行するコマンドがキューイングされた後、デバイス上の実行可能な演算ユニットで実行されることになる。
12.メモリオブジェクトからの読み込み
OpenCLランタイムAPIで定義されているデバイス側のメモリからホスト側のメモリへデータをコピーする機能を提供する関数clEnqueueReadBuffer()を用いて、デバイス側のメモリ領域からホスト側のメモリ領域にデータをコピーする。また、ホスト側からデバイス側のメモリへデータをコピーする機能を提供する関数clEnqueueWrightBuffer()を用いて、ホスト側のメモリ領域からデバイス側のメモリ領域にデータをコピーする。なお、これらの関数は、デバイスに対する働きかけとなるので、一度コマンドキューへコピーコマンドがキューイングされてからデータコピーが始まることになる。
13.オブジェクト解放
最後に、ここまでに作成してきた各種オブジェクトを解放する。
以上、OpenCL C言語に沿って作成されたカーネルの、デバイス実行について説明した。
<性能測定部116>
性能測定部116は、作成された処理パターンのアプリケーションをコンパイルして、検証用マシン14に配置し、GPUやFPGA等にオフロードした際の性能測定用処理を実行する。
性能測定部116は、バイナリファイル配置部(Deploy binary files)116aを備える。バイナリファイル配置部116aは、GPUやFPGAを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイ(配置)する。
性能測定部116は、配置したバイナリファイルを実行し、オフロードした際の性能を測定するとともに、性能測定結果を、バイナリファイル配置部116aに戻す。この場合、性能測定部116は、抽出された別の処理パターンを用いて、抽出された中間言語をもとに、性能測定を試行する(後記図3の符号e参照)。
性能測定の具体例について述べる。
オフロードパターン作成部115は、GPUやFPGAにオフロード可能な機能ブロックをオフロードする処理パターンを作成し、作成された処理パターンの中間言語を、実行ファイル作成部117がコンパイルする。性能測定部116は、コンパイルされたプログラムの性能を測定する(「1回目の性能測定」)。
そして、オフロードパターン作成部115は、性能測定された中でCPUに比べ高性能化された処理パターンをリスト化する。オフロードパターン作成部115は、リストの処理パターンを組み合わせてオフロードする新たな処理パターンを作成する。オフロードパターン作成部115は、組み合わせたオフロード処理パターンと中間言語を作成し、中間言語を、実行ファイル作成部がコンパイルする。
性能測定部116は、コンパイルされたプログラムの性能を測定する(「2回目の性能測定」)。
<実行ファイル作成部117>
実行ファイル作成部117は、オフロードする処理パターンの中間言語をコンパイルして実行ファイルを作成する。一定数繰り返された、性能測定結果をもとに、1以上の処理パターンから最高処理性能の処理パターンを選択し、最高処理性能の処理パターンをコンパイルして最終実行ファイルを作成する。
<本番環境配置部118>
本番環境配置部118は、作成した実行ファイルを、ユーザ向けの本番環境に配置する(「最終バイナリファイルの本番環境への配置」)。本番環境配置部118は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
<性能測定テスト抽出実行部119>
性能測定テスト抽出実行部119は、実行ファイル配置後、テストケースDB131から性能試験項目を抽出し、性能試験を実行する。
性能測定テスト抽出実行部119は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースDB131から抽出し、抽出した性能試験を自動実行する。
<ユーザ提供部120>
ユーザ提供部120は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する(「価格・性能等の情報のユーザへの提供」)。テストケースDB131には、アプリケーションの性能を測定する試験を自動で行うためのデータが格納されている。ユーザ提供部120は、テストケースDB131の試験データを実行した結果と、システムに用いられるリソース(仮想マシンや、FPGAインスタンス、GPUインスタンス等)の各単価から決まるシステム全体の価格をユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、サービスの課金利用開始を判断する。
以下、上述のように構成されたオフロードサーバ1の機能ブロックのオフロード処理について説明する。
上記、機能ブロックのオフロードの処理の概要と考慮点について説明する。
FPGAに関しては、ハードウェア回路設計に多大な時間がかかることもあり、一度設計した機能を、IPコア(Intellectual Property Core)という形で再利用可能にすることが多い。IPコアとは、FPGA、IC、LSIなどの半導体を構成するための部分的な回路情報であり、特に機能単位でまとめられている。IPコアは、暗号化/復号化処理、FFT(Fast Fourier Transform)等の算術演算、画像処理、音声処理等が代表的な機能例である。IPコアは、ライセンス料を支払うものが多いが、一部はフリーで提供されているものもある。
本実施形態では、FPGAに関しては、IPコアを自動オフロードに利用する。また、GPUに関しては、IPコアという言い方ではないものの、FFT、線形代数演算等が代表的な機能例であり、CUDAを用いて実装されたcuFFTやcuBLAS等がGPU向けライブラリとしてフリーで提供されている。本実施形態では、GPUに関してこれらのライブラリを活用する。
本実施形態では、CPU向けに作られた既存プログラムコードの中で、FFT処理等、GPU、FPGAにオフロードすることで高速化できるような機能ブロックが含まれる場合に、GPU向けライブラリやFPGA向けIPコア等に置き換えることでの高速化を図る。
[機能ブロックのオフロード処理概要]
本実施形態のオフロードサーバ1は、環境適応ソフトウェアの要素技術としてユーザアプリケーションロジックのGPU、FPGA自動オフロードに適用した例である。
図3は、オフロードサーバ1の機能ブロックのオフロード処理を示す図である。
図3に示すように、オフロードサーバ1は、環境適応ソフトウェアの要素技術に適用される。オフロードサーバ1は、制御部(自動オフロード機能部)11と、コードパターンDB130、テストケースDB131と、中間言語ファイル132と、検証用マシン14と、を有している。
オフロードサーバ1は、ユーザが利用するアプリケーションコード(Application code)130を取得する。
ユーザは、例えば、各種デバイス(Device)151、CPU-GPUを有する装置152、CPU-FPGAを有する装置153、CPUを有する装置154を利用する。オフロードサーバ1は、機能処理をCPU-GPUを有する装置152、CPU-FPGAを有する装置153のアクセラレータに自動オフロードする。
以下、図3のステップ番号を参照して各部の動作を説明する。
<ステップS11:Specify application code>
ステップS11において、アプリケーションコード指定部111(図2参照)は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。具体的には、アプリケーションコード指定部111は、入力されたアプリケーションコードの指定を行う。
<ステップS12:Analyze application code>(コード分析)
ステップS12において、アプリケーションコード分析部112(図2参照)は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
<ステップS13:Extract offloadable area>(オフロード可能処理抽出)
ステップS13において、置換機能検出部113(図2参照)は、把握したライブラリ呼び出しや機能処理について、コードパターンDB130と照合することで、GPU、FPGAにオフロードできるオフロード可能処理を抽出する。
<ステップS14:Output intermediate file>(オフロード用中間ファイル出力)
ステップS14において、置換処理部114(図2参照)は、抽出したオフロード可能処理を、GPU向けのライブラリやFPGA向けのIPコア等に置換する。置換処理部114は、GPU向けのライブラリやFPGA向けのIPコア等に置換した機能ブロックを、CPUプログラムとのインタフェースを作成することでオフロードする。置換処理部114は、CUDA,OpenCL等の中間言語ファイル132を出力する。中間言語抽出は、一度で終わりでなく、適切なオフロード領域探索のため、実行を試行して最適化するため反復される。
ここで、オフロード可能処理が直ちに高速化につながるか、またコスト効果が十分であるかは分からないので、オフロードパターン作成部115は、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出する。
<ステップS21:Deploy binary files>(デプロイ、性能測定試行)
ステップS21において、バイナリファイル配置部116a(図2参照)は、GPU、FPGAを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイする。バイナリファイル配置部116aは、配置したファイルを起動し、想定するテストケースを実行して、オフロードした際の性能を測定する。
<ステップS22:Measure performances>
ステップS22において、性能測定部116(図2参照)は、配置したファイルを実行し、オフロードした際の性能を測定する。
図3の符号eに示すように、制御部11は、上記ステップS12乃至ステップS22を繰り返し実行する。制御部11の自動オフロード機能をまとめると、下記である。すなわち、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。置換機能検出部113は、検出したライブラリ呼び出しや機能処理について、コードパターンDB130と照合することで、GPU、FPGAにオフロードできるオフロード可能処理を抽出する。置換処理部114は、抽出したオフロード可能処理を、GPU向けのライブラリやFPGA向けのIPコア等に置換する。そして、オフロードパターン作成部115は、GPU向けのライブラリやFPGA向けのIPコア等に置換した機能ブロックを、CPUプログラムとのインタフェースを作成することでオフロードする。
<ステップS23:Deploy final binary files to production environment>
ステップS23において、本番環境配置部118は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
<ステップS24:Extract performance test cases and run automatically>
ステップS24において、性能測定テスト抽出実行部119は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースDB131から抽出し、抽出した性能試験を自動実行する。
<ステップS25:Provide price and performance to a user to judge>
ステップS25において、ユーザ提供部120は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、サービスの課金利用開始を判断する。
上記ステップS11~ステップS25は、ユーザのサービス利用のバックグラウンドで行われ、例えば、仮利用の初日の間に行う等を想定している。また、コスト低減のためにバックグラウンドで行う処理は、GPU・FPGAオフロードのみを対象としてもよい。
上記したように、オフロードサーバ1の制御部(自動オフロード機能部)11は、環境適応ソフトウェアの要素技術に適用した場合、機能処理のオフロードのため、ユーザが利用するアプリケーションのソースコードから、オフロードする領域を抽出して中間言語を出力する(ステップS11~ステップS14)。制御部11は、中間言語から導かれる実行ファイルを、検証用マシン14に配置実行し、オフロード効果を検証する(ステップS21~ステップS22)。検証を繰り返し、適切なオフロード領域を定めたのち、制御部11は、実際にユーザに提供する本番環境に、実行ファイルをデプロイし、サービスとして提供する(ステップS23~ステップS25)。
なお、上記では、環境適応に必要な、コード変換、配置場所調整を一括して行う処理フローを説明したが、これに限らず、行いたい処理だけ切出すことも可能である。例えば、GPU、FPGA向けにコード変換だけ行いたい場合は、上記ステップS11~ステップS22の、環境適応機能や検証環境等必要な部分だけ利用すればよい。
一般に、性能に関しては、最大性能になる設定を一回で自動発見するのは難しい。このため、オフロードパターンを、性能測定を検証環境で何度か繰り返すことにより試行し、高速化できるパターンを見つけることが本発明の特徴である。
[機能ブロックのオフロード処理詳細]
機能ブロックのオフロードについては、機能ブロックの検出(以下、「処理A」という)、その機能ブロックがオフロード用の既存ライブラリ/IPコア等があるかを検出(以下、「処理B」という)、機能ブロックをライブラリ/IPコア等と置換した際にホスト側とのインタフェースの整合(以下、「処理C」という)、の3つ要素を考慮する必要がある。上記3つ要素の考慮点に従い、機能ブロックのオフロード処理について詳細に述べる。
[処理A](機能ブロックの検出)
「処理A」(機能ブロックの検出)は、ライブラリの関数呼び出しを行い、ライブラリの関数呼び出しを機能ブロックとする<処理A-1>と、登録されていないライブラリの関数呼び出しである場合、クラス、構造体等を検出して機能ブロックとする<処理A-2>と、に分けられる。すなわち、<処理A-1>は、既存のライブラリの関数呼び出しを検出して機能ブロックとするものであり、<処理A-2>は、<処理A-1>において機能ブロックを検出しない場合に、クラスまたは構造体から機能ブロックを抽出するものである。
<処理A-1>
アプリケーションコード分析部112は、構文解析を用いて、ソースコードから外部のライブラリの関数呼び出しを行っていることを検知する。詳細には、下記の通りである。コードパターンDB130は、FFT等算術計算等のライブラリリストを保持している。アプリケーションコード分析部112は、ソースコードを構文解析し、コードパターンDB130が保持しているライブラリリストと照合して、外部のライブラリの関数呼び出しを行っていることを検知する。
<処理A-2>
アプリケーションコード分析部112は、登録されていないライブラリ呼び出し以外の機能処理を機能ブロックとして検出するため、構文解析を用いて、ソースコードの定義記述からクラスまたは構造体の機能処理を検出する。アプリケーションコード分析部112は、例えば、C言語のstructを使って定義されるいくつかの変数をひとまとまりにした型である構造体(structure)や、インスタンス化したオブジェクトの型が値型である構造体に対して参照型であるクラス(class)を検出する。また、アプリケーションコード分析部112は、例えばJava(登録商標)において構造体に代替使用されるクラスを検出する。
[処理B](オフロード可能機能の検出)
[処理B](オフロード可能機能の検出)は、<処理A-1>を受け、コードパターンDB130を参照して置換可能GPUライブラリ、IPコアを取得する<処理B-1>と、<処理A-2>を受け、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する<処理B-2>と、に分けられる。すなわち、<処理B-1>は、ライブラリ名をキーに、コードパターンDB130から置換可能GPUライブラリ、IPコアを取得するものである。<処理B-2>は、クラス、構造体等のコードをキーに、置換可能GPUライブラリ・IPコアを検出し、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換するものである。
処理Bの前提として、コードパターンDB130には、特定のライブラリ、機能ブロックを高速化するGPU用ライブラリやFPGA用IPコアとそれに関連する情報が保持されている。また、コードパターンDB130には、置換元のライブラリ、機能ブロックについては、機能名とともにコードや実行ファイルが登録されている。
<処理B-1>
置換機能検出部113は、<処理A-1>でアプリケーションコード分析部112が検出したライブラリ呼び出しに対して、ライブラリ名をキーに、コードパターンDB130を検索し、コードパターンDB130から、置換可能GPUライブラリ(高速化できるGPU用ライブラリ)やFPGA用IPコアを取得する。
<処理B-1>の例を記載する。
置換機能検出部113は、例えば、置換元の処理が2D FFTの処理(非特許文献4等にコードがある)であった場合は、その外部ライブラリ名をキーに、2D FFTを処理するFPGA処理として、OpenCLコード(非特許文献5等にコードがある)を検出する(main.cpp(ホストプログラム)、fft2d.cl(カーネルプログラム)等)。なお、OpenCLコードは、コードパターンDB130に記憶されている。
置換機能検出部113は、例えば、置換元の処理が2D FFTの処理であった場合は、GPUライブラリとして検出されたcuFFTの中の関数である、 Function cufftPlan2d() 関数呼び出しに置換する。なお、GPUライブラリは、コードパターンDB130に記憶されている。
<処理B-2>
置換機能検出部113は、<処理A-2>でアプリケーションコード分析部112が検出したクラス、構造体等のコードをキーに、コードパターンDB130を検索し、コードパターンDB130から、類似性検出ツールを用いて置換可能GPUライブラリ(高速化できるGPU用ライブラリ)やFPGA用IPコアを取得する。類似性検出ツールとは、Deckard等、コピーコードやコピー後変更したコードの検出を対象とするツールである。置換機能検出部113が、類似性検出ツールを用いることで、行列計算のコード等、CPUで計算する場合は記述が同様になる処理や、他者のコードをコピーして変更した処理等を一部検出できる。なお、類似性検出ツールは、新規に独立に作成したようなクラス等については検出が困難となるため対象外である。
<処理B-2>の例を記載する。
置換機能検出部113は、置換元CPUコードに検知されたクラスや構造体に対して、Deckard等の類似性検知ツールを用いて、コードパターンDB130に登録された類似クラスや構造体を検索する。例えば、置換元の処理(非特許文献4等にコードがある)が2D FFTのクラスであった場合は、その類似クラスとしてコードパターンDB130に登録されたクラスが2D FFTのクラスが検出される。コードパターンDB130には、2D FFTをオフロード可能なIPコアやGPUライブラリが登録されている。そのため、<処理B-1>と同様に、2D FFTに対して、OpenCLコード(main.cpp(ホストプログラム)、fft2d.cl(カーネルプログラム)等)やGPUライブラリ(cuFFT Function cufftPlan2d())を検出する。
[処理C](ホスト側とのインタフェースの整合)
[処理C](ホスト側とのインタフェースの整合)は、<処理C-1>と、<処理C-2>とを有する。<処理C-1>は、<処理B-1>を受け、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換するとともに、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述する。<処理C-2>は、<処理B-2>を受け、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換するとともに、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述する。ここで、上記GPUライブラリ、IPコア呼び出しのためのインタフェース処理の記述が、「ホスト側とのインタフェースの整合」に対応する。
<処理C-1>
置換処理部114は、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する。そして、置換処理部114は、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述し(OpenCL API等)、作成したパターンをコンパイルする。
<処理C-1>について、より詳細に説明する。
置換機能検出部113は、<処理A-1>で検出したライブラリ呼び出しに対して、<処理B-1>で該当するライブラリやIPコアを検索している。このため、置換処理部114は、置換するライブラリやIPコアをGPUやFPGAに実装し、ホスト側(CPU)プログラムと繋ぐインタフェース処理を行う。
ここで、GPU用ライブラリの場合は、CUDA等のライブラリを想定しており、C言語コードからCUDAライブラリを利用する手法がライブラリとともに公開されている。そこで、コードパターンDB130に、ライブラリ利用手法も含めて登録しておき、置換処理部114は、コードパターンDB130に登録されたライブラリ利用手法に従って、アプリコードの置換元の処理記述を、置換先のGPUライブラリに置換するとともに、GPUライブラリで利用する関数の呼び出し等の所定記述を行う。
FPGA用IPコアの場合は、HDL等が想定される。この場合、IPコア関連の情報としてOpenCLコードもコードパターンDB130に保持されている。置換処理部114は、FPGAとのインタフェース処理を、高位合成ツール(例えば、Xilinx Vivado, Intel HLS Compiler等)を介して行うことができる。置換処理部114は、例えば、OpenCLコードから、OpenCLインタフェースを用いたCPUとFPGAの接続を、高位合成ツールを介して行う。同様に、置換処理部114は、FPGAへのIPコア実装を、XilinxやIntel等のFPGAベンダの高位合成ツールを介して行う。
<処理C-2>
置換処理部114は、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する。そして、置換処理部114は、置換元と置換先で引数や戻り値の数や型が異なる場合に、ユーザに確認し、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述(OpenCL API等)するとともに、作成したパターンをコンパイルする。すなわち、<処理C-2>では、置換処理部114は、<処理A-2>で検出したクラス、構造体等に対して、<処理B-2>で高速化できるライブラリやIPコアを検索している。このため、置換処理部114は、<処理C-2>では該当するライブラリやIPコアをGPUやFPGAに実装する。
<処理C-2>について、より詳細に説明する。
<処理C-1>では、特定のライブラリ呼び出しに対して高速化するライブラリやIPコアであるため、インタフェース部分の生成等は必要になるものの、GPU、FPGAとホスト側プログラムの想定する引数、戻り値の数や型は合っていた。しかし、<処理B-2>は、類似性等で判断しているため、引数や戻り値の数や型等の基本的な部分が合っている保証はない。ライブラリやIPコアは、既存ノウハウであり、引数、戻り値の数や型が合っていない場合であっても、変更が頻繁にできるものではない。このため、オフロードを依頼するユーザに対して、元のコードの引数や戻り値の数や型について、ライブラリやIPコアに合わせて変更するか否かを確認する。そして、確認了承後にオフロード性能試験を試行する。
型の違いについて、floatとdouble等キャストすればよいだけであれば、処理パターン作成時にキャストする処理を追加し、特にユーザ確認せずに性能測定試行に入ってもよい。また、引数や戻り値で、元のプログラムとライブラリやIPコアで数が異なる場合、例えば、CPUプログラムで引数1,2が必須で引数3がオプションであり、ライブラリやIPコアで引数1,2が必須の場合等は、オプション引数3は省略しても問題はない。このような場合は、ユーザに確認せず、処理パターン作成時にオプション引数は自動で無しとして扱うなどしてもよい。なお、引数や戻り値の数や型が完全に合っている場合は、<処理C-1>と同様の処理でよい。
[フローチャート]
次に、図4および図5を参照してオフロードサーバ1の動作概要を説明する。
・<処理A-1>と<処理B-1>と<処理C-1>のフローチャート
図4は、オフロードサーバ1の制御部(自動オフロード機能部)11が、機能ブロックのオフロード処理において<処理A-1>と<処理B-1>と<処理C-1>とを実行する場合のフローチャートである。
ステップS101でアプリケーションコード分析部112(図2参照)は、アプリケーションのオフロードしたいソースコードの分析を行う。具体的には、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
ステップS102で置換機能検出部113(図2参照)は、アプリケーションの外部ライブラリ呼び出しを検出する。
ステップS103で置換機能検出部113は、コードパターンDB130から、ライブラリ名をキーに、置換可能GPUライブラリ、IPコアを取得する。具体的には、置換機能検出部113は、把握した外部ライブラリ呼び出しについて、コードパターンDB130と照合することで、検出した置換可能GPUライブラリ・IPコアを、GPU、FPGAにオフロードできるオフロード可能な機能ブロックとして取得する。
ステップS104で置換処理部114は、アプリケーションコードの置換元の処理記述を、置換先のGPUライブラリ、IPコアの処理記述に置換する。
ステップS105で置換処理部114は、置換したGPUライブラリおよびIPコアの処理記述を、オフロード対象の機能ブロックとして、GPU、FPGAにオフロードする。
ステップS106で置換処理部114は、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述(OpenCL API等)する。
ステップS107で実行ファイル作成部117は、作成したパターンをコンパイルする。
ステップS108で性能測定部116は、作成したパターンを検証環境で性能測定する(「1回目の性能測定」)。
ステップS109で実行ファイル作成部117は、1回目測定時に高速化できたパターンについて組合せパターンを作成する。
ステップS110で実行ファイル作成部117は、作成した組合せパターンをコンパイルする。
ステップS111で性能測定部116は、作成した組合せパターンを検証環境で性能測定する(「2回目の性能測定」)。
ステップS112で本番環境配置部118は、1回目と2回目の測定の中で最高性能のパターンを選択して本フローの処理を終了する。
・<処理A-2>と<処理B-2>と<処理C-2>のフローチャート
図5は、オフロードサーバ1の制御部(自動オフロード機能部)11が、機能ブロックのオフロード処理において<処理A-2>と<処理B-2>と<処理C-2>とを実行する場合のフローチャートである。なお、<処理A-2>からの処理は、<処理A-1>からの処理と並行して行えばよい。
ステップS201でアプリケーションコード分析部112(図2参照)は、アプリケーションのオフロードしたいソースコードの分析を行う。具体的には、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
ステップS202で置換機能検出部113(図2参照)は、ソースコードからクラスまたは構造体の定義記述コードを検出する。
ステップS203で置換機能検出部113は、コードパターンDB130から、類似性検出ツールを用いて、クラスまたは構造体の定義記述コードをキーにして、置換可能GPUライブラリ、IPコアを取得する。
ステップS204で置換処理部114は、アプリケーションコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する。
ステップS205で置換処理部114は、置換元と置換先で引数、戻り値の数や型が異なる場合に、ユーザに確認する。
ステップS206で置換機能検出部113は、置換または確認したアプリケーションコードの置換元の処理記述を、オフロード対象の機能ブロックとして、GPU、FPGAにオフロードする。
ステップS207で置換処理部114は、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述(OpenCL API等)する。
ステップS208で実行ファイル作成部117は、作成したパターンをコンパイルする。
ステップS209で性能測定部116は、作成したパターンを検証環境で性能測定する(「1回目の性能測定」)。
ステップS210で実行ファイル作成部117は、1回目測定時に高速化できたパターンについて組合せパターンを作成する。
ステップS211で実行ファイル作成部117は、作成した組合せパターンをコンパイルする。
ステップS212で性能測定部116は、作成した組合せパターンを検証環境で性能測定する(「2回目の性能測定」)。
ステップS213で本番環境配置部118は、本番環境配置部118は、1回目と2回目の測定の中で最高性能のパターンを選択して本フローの処理を終了する。
[実装例]
実装例を説明する。
<実装する際の利用ツール例>
GPUは、NVIDIA Quadro P4000(CUDA core: 1792, Memory: GDDR5 8GB)が利用できる。FPGAは、Intel PAC with Intel Arria10 GX FPGA等が利用できる。
GPU処理は、市中のPGIコンパイラなどが利用できる。PGIコンパイラは、OpenACCを解釈するC/C++/Fortran向けコンパイラである。PGIコンパイラは、for文等のループ文を、OpenACCのディレクティブ #pragma acc kernels, #pragma acc parallel loopで指定することにより、GPU向けバイトコードを生成し,実行によりGPUオフロードを可能としている。併せて、PGIコンパイラは、cuFFTやcuBLAS等のCUDAライブラリの呼び出しも処理が可能である。
FPGA処理は、Intel Acceleration Stack(Intel FPGA SDK for OpenCL,Quartus Prime Version)等が利用できる、Intel FPGA SDK for OpenCLは、標準OpenCLに加えIntel向けの#pragma等を解釈する高位合成ツール(HLS)である。高位合成ツールは、FPGAで処理するカーネルとCPUで処理するホストプログラムを記述したOpenCLコードを解釈するとともに、リソース量等の情報を出力し、FPGAの配線作業等を行うことで、FPGAで動作できるようにする。FPGA実機で動作できるようにするには、100行程度の小プログラムでも3時間程の長時間がかかるが、リソース量オーバーの際は早めにエラーとなる。FPGAの既存OpenCLコードをカーネルコードに組み込めば、OpenCLプログラム処理の中でオフロードが可能である。
コードパターンDB130は、MySQL等が利用できる。コードパターンDB130は、呼び出しているライブラリ名をキーに、高速化できるGPU用ライブラリやFPGA用IPコアを検索するためのレコードを保持する。ライブラリやIPコアには、それに紐づく名前やコードや実行ファイルが保持される。実行ファイルはその利用手法等も登録されている。併せて、コードパターンDB130には、ライブラリやIPコアを類似性検出技術で検出するための、比較用コードとの対応関係も保持される。
類似性検出ツールには、Deckard等が利用できる。Deckardは、機能ブロックのオフロードの適用領域拡大のため、ライブラリ呼び出し以外にも、コードコピーし変更した機能等のオフロードを実現する。このため、Deckardは、照合対象となる部分コードと、コードパターンDB130に登録されたコードの類似性を判定する。
実装の動作概要を説明する。
<実装の動作概要>
実装例では、C/C++アプリケーションの利用依頼があると、まず、C/C++アプリケーションのコードを解析して、ループ文をオフロードに使うためにループ文を検出する。また、<処理A-1>で呼び出されているライブラリや<処理A-2>で定義されているクラス、構造体等のプログラム構造を把握する。構文解析には、LLVM/Clangの構文解析ライブラリ等が利用できる。呼び出されている外部ライブラリがあるかどうかは、コードパターンDB130の外部ライブラリリストと照合することで確認する。
実装例では、次に、<処理B-1>で呼び出されているライブラリを高速化できるGPU用ライブラリ、FPGA用IPコアの検出を行う。呼び出されているライブラリをキーに、コードパターンDB130に登録されているレコードから、高速化可能な実行ファイルやOpenCL等を取得する。高速化できる置換用機能が見つかった場合、<処理C-1>の実行用ファイルを作成する。GPU用ライブラリの場合は、置換用CUDAライブラリを呼び出すよう、C/C++コードに、元の部分は削除して置換記述する。FPGA用IPコアの場合は、取得したOpenCLコードを、元の部分をホストコードから削除してから、カーネルコードに置換記述する。それぞれの置換記述が終わった場合、GPU向けにはPGIコンパイラでコンパイルし、FPGA向けにはIntel acceleration stackでコンパイルする。FPGAに関しては、OpenCLコードに基づき、CPUとFPGAの接続が高位合成ツール(HLS)を介して行われる。
以上、ライブラリ呼び出しの場合について記載した。
置換機能検出部113(図2参照)が、類似性検出ツールを用いて類似性検出を行う場合について説明する。類似性検出を行う場合には、上記置換記述と並行して処理がされる。すなわち、置換機能検出部113が、類似性検出を行う場合、実装例では、<処理B-2>でDeckardを用いて、検出されたクラス、構造体等の部分コードとコードパターンDB130に登録された比較用コードとの類似性検出を行う。そして、置換機能検出部113は、閾値超えの機能ブロックと該当するGPU用ライブラリやFPGA用IPコアを検出する。置換機能検出部113は、<処理B-1>の場合と同様に、実行ファイルやOpenCLを取得する。実装例では、次にC-1の場合と同様に実行用ファイルを作成するが、特に置換元のコードと置換するライブラリやIPコアの引数や戻り値、型等のインタフェースが異なる場合は、オフロードを依頼したユーザに対して、置換先ライブラリやIPコアに合わせて、インタフェースを変更してよいか確認し、確認後に実行用ファイルを作成する。
この時点で、検証環境のGPUやFPGAで性能測定できる実行用ファイルが作成される。機能ブロックオフロードについては、置換する機能ブロックが一つの場合は、その一つをオフロードするかしないかだけである。複数ある場合は、一つずつオフロードする/しないを検証パターンとして作成し、性能を測定し高速な解を検出する。これは、高速化可能とされていても実測してみないとその条件で高速になるかわからないためである。例えば、5つオフロード可能な機能ブロックがあり、1回目測定の結果、2番と4番のオフロードが高速化できた場合は、2番と4番両方をオフロードするパターンで2回目測定を行い、2番と4番単独でオフロードする場合より高速となっている場合は、解として選択する。
[ハードウェア構成]
本実施形態に係るオフロードサーバ1は、例えば図6に示すような構成のコンピュータ900によって実現される。
図6は、オフロードサーバ1の機能を実現するコンピュータ900の一例を示すハードウェア構成図である。
コンピュータ900は、CPU910、RAM920、ROM930、HDD940、通信インタフェース(I/F:Interface)950、入出力インタフェース(I/F)960、およびメディアインタフェース(I/F)970を有する。
CPU910は、ROM930またはHDD940に格納されたプログラムに基づいて動作し、各部の制御を行う。ROM930は、コンピュータ900の起動時にCPU910によって実行されるブートプログラムや、コンピュータ900のハードウェアに依存するプログラム等を格納する。
HDD940は、CPU910によって実行されるプログラム、および、かかるプログラムによって使用されるデータ等を格納する。通信インタフェース950は、通信網80を介して他の機器からデータを受信してCPU910へ送り、CPU910が生成したデータを通信網80を介して他の機器へ送信する。
CPU910は、入出力インタフェース960を介して、ディスプレイやプリンタ等の出力装置、および、キーボードやマウス等の入力装置を制御する。CPU910は、入出力インタフェース960を介して、入力装置からデータを取得する。また、CPU910は、生成したデータを入出力インタフェース960を介して出力装置へ出力する。
メディアインタフェース970は、記録媒体980に格納されたプログラムまたはデータを読み取り、RAM920を介してCPU910に提供する。CPU910は、かかるプログラムを、メディアインタフェース970を介して記録媒体980からRAM920上にロードし、ロードしたプログラムを実行する。記録媒体980は、例えばDVD(Digital Versatile Disc)、PD(Phasechangerewritable Disk)等の光学記録媒体、MO(Magneto Optical disk)等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
例えば、コンピュータ900が本実施形態に係るオフロードサーバ1として機能する場合、コンピュータ900のCPU910は、RAM920上にロードされたプログラムを実行することにより、オフロードサーバ1の各部の機能を実現する。また、HDD940には、オフロードサーバ1の各部内のデータが格納される。コンピュータ900のCPU910は、これらのプログラムを記録媒体980から読み取って実行するが、他の例として、他の装置から通信網80を介してこれらのプログラムを取得してもよい。
[効果]
以上説明したように、本実施形態に係るオフロードサーバ1は、アプリケーションの特定処理をGPUまたはPLDにオフロードするオフロードサーバであって、GPUまたはPLDにオフロード可能なライブラリおよびIPコアを記憶するコードパターンDB130と、アプリケーションのソースコードを分析して、当該ソースコードに含まれる外部ライブラリ呼び出しを検出するアプリケーションコード分析部112と、検出された外部ライブラリ呼び出しをキーにして、コードパターンDB130からライブラリおよびIPコアを取得する置換機能検出部113と、アプリケーションのソースコードの置換元の処理記述を、置換機能検出部113が取得した置換先のライブラリおよびIPコアの置換先の処理記述として置換するとともに、置換したライブラリおよびIPコアの処理記述を、オフロード対象の機能ブロックとして、GPUまたはPLDにオフロードする置換処理部114と、ホストプログラムとのインタフェースを作成し、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出するオフロードパターン作成部115と、作成されたGPUまたはPLD処理パターンの前記アプリケーションをコンパイルして、実行ファイルを作成する実行ファイル作成部117と、作成された実行ファイルをアクセラレータ検証用装置に配置し、GPUまたはPLDにオフロードした際の性能測定用処理を実行する性能測定部116と、を備え、実行ファイル作成部117は、性能測定用処理による性能測定結果をもとに、複数のGPUまたはPLD処理パターンから最高処理性能のGPUまたはPLD処理パターンを選択し、最高処理性能のGPUまたはPLD処理パターンをコンパイルして、最終実行ファイルを作成する。
このようにすることにより、アプリケーションコードの置換元の処理記述を、置換先のライブラリおよびIPコア処理記述に置換して、オフロード可能な機能ブロックとして、GPUやPLD(FPGA等)にオフロードする。すなわち、個々のループ文でなく、行列積算やフーリエ変換等のより大きな単位で、FPGAやGPU等ハードウェア向けのアルゴリズム含めて実装された機能ブロックをオフロードする。これにより、GPUやPLD(FPGA等)への自動オフロードにおいて、機能ブロックの単位でオフロードすることで、オフロード処理の高速化を図ることができる。その結果、GPU、FPGA、IoTデバイス等環境が多様になる中で、アプリケーションを環境に合わせて適応させることが可能になり、高性能にアプリケーションを動作させることができる。
本実施形態では、コードパターンDB130は、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を記憶し、アプリケーションコード分析部112は、ソースコードからクラスまたは構造体の定義記述コードを検出し、置換機能検出部113は、検出されたクラスまたは構造体の定義記述コードをキーにして、コードパターンDB130からライブラリおよびIPコアを取得し、置換処理部114は、アプリケーションのソースコードの置換元の処理記述を、取得したライブラリおよびIPコアの処理記述に置換するとともに、置換元と置換先で引数、戻り値の数または型が異なる場合に、その確認を通知することを特徴とする。
このようにすることにより、クラスまたは構造体の定義記述コードをキーに、GPUライブラリおよびIPコアを検出し、アプリケーションコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する。また、置換元と置換先で引数、戻り値の数または型が異なる場合に、例えばユーザに確認する。これにより、登録されていないライブラリ呼び出し以外の機能処理を検出することができる。
本実施形態では、置換機能検出部113は、コピーコードやコピー後変更したコードを検出する類似性検出ツールを用いて、コードパターンDB130からライブラリおよびIPコアを取得することを特徴とする。
このようにすることにより、類似性検出ツールを用いて、照合対象となる部分コードと、記憶部に登録された定義記述コードとの類似性を判定することができ、機能ブロックのオフロードの適用領域を拡大することができる。
本実施形態では、コードパターンDB130は、ライブラリとして、CUDAライブラリと当該CUDAライブラリを利用するためのライブラリ利用手順とを記憶し、置換機能検出部113は、ライブラリ利用手順をもとに、コードパターンDB130からCUDAライブラリを取得することを特徴とする。
このようにすることにより、CUDAライブラリと利用手順も含めて記憶しておくことで、ソースコードからCUDAライブラリを検出することができる。これにより、アプリケーションコードの置換元の処理記述を、置換先のCUDAライブラリ処理記述に置換して、機能ブロックとして、GPUにオフロードすることができる。
本実施形態では、コードパターンDB130は、IPコア関連の情報としてOpenCLコードを記憶し、オフロードパターン作成部115は、OpenCLコードをもとにOpenCLインタフェースを用いてホストとPLDとを接続するとともに、OpenCLコードをもとにPLDへのIPコアの実装を行うことを特徴とする。
このようにすることにより、OpenCLコードを、カーネルコードとして、ホストとPLDとを接続することができ、PLDへのIPコアの実装を行うことができる。例えば、FPGA用IPコアの場合は、取得したOpenCLコードを、元の部分をホストコードから削除してから、カーネルコードに置換記述する。また、FPGAに関しては、OpenCLコードに基づき、CPUとFPGAの接続を、高位合成ツールを介して行うことができる。
本発明は、コンピュータを、上記オフロードサーバとして機能させるためのオフロードプログラムとした。
このようにすることにより、一般的なコンピュータを用いて、上記オフロードサーバ1の各機能を実現させることができる。
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手作業で行うこともでき、あるいは、手作業で行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。
また、本実施形態では、GPU、FPGA処理をオフロードできるものであればどのようなものでもよい。
1 オフロードサーバ
11 制御部
12 入出力部
13 記憶部
14 検証用マシン (アクセラレータ検証用装置)
15 商用環境
111 アプリケーションコード指定部
112 アプリケーションコード分析部
113 置換機能検出部
114 置換処理部
115 オフロードパターン作成部
116 性能測定部
116a バイナリファイル配置部
117 実行ファイル作成部
118 本番環境配置部
119 性能測定テスト抽出実行部
120 ユーザ提供部
130 コードパターンDB
131 テストケースDB
151 各種デバイス
152 CPU-GPUを有する装置
153 CPU-FPGAを有する装置
154 CPUを有する装置

Claims (7)

  1. アプリケーションの特定処理をGPU(Graphics Processing Unit)またはPLD(Programmable Logic Device)にオフロードするオフロードサーバであって、
    前記GPUまたは前記PLDにオフロード可能なライブラリおよびIPコアを記憶する記憶部と、
    アプリケーションのソースコードを分析して、当該ソースコードに含まれる外部ライブラリ呼び出しを検出するアプリケーションコード分析部と、
    検出された前記外部ライブラリ呼び出しをキーにして、前記記憶部から前記ライブラリおよび前記IPコアを取得する置換機能検出部と、
    前記アプリケーションのソースコードの置換元の処理記述を、前記置換機能検出部が取得した前記ライブラリおよび前記IPコアの置換先の処理記述として置換するとともに、
    置換した前記ライブラリおよび前記IPコアの処理記述を、オフロード対象の機能ブロックとして、前記GPUまたは前記PLDにオフロードする置換処理部と、
    ホストプログラムとのインタフェースを作成し、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出するオフロードパターン作成部と、
    作成されたGPUまたはPLD処理パターンの前記アプリケーションをコンパイルして、実行ファイルを作成する実行ファイル作成部と、
    作成された前記実行ファイルをアクセラレータ検証用装置に配置し、前記GPUまたは前記PLDにオフロードした際の性能測定用処理を実行する性能測定部と、を備え、
    前記実行ファイル作成部は、前記性能測定用処理による性能測定結果をもとに、複数の前記GPUまたはPLD処理パターンから最高処理性能の前記GPUまたはPLD処理パターンを選択し、最高処理性能の前記GPUまたはPLD処理パターンをコンパイルして、最終実行ファイルを作成する
    ことを特徴とするオフロードサーバ。
  2. 前記記憶部は、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を記憶し、
    前記アプリケーションコード分析部は、前記ソースコードから前記クラスまたは前記構造体の定義記述コードを検出し、
    前記置換機能検出部は、検出された前記クラスまたは前記構造体の定義記述コードをキーにして、前記記憶部から前記ライブラリおよび前記IPコアを取得し、
    前記置換処理部は、アプリケーションのソースコードの置換元の処理記述を、取得した前記ライブラリおよび前記IPコアの処理記述に置換するとともに、置換元と置換先で引数、戻り値の数または型が異なる場合に、当該異なることを通知する
    ことを特徴とする請求項1に記載のオフロードサーバ。
  3. 前記置換機能検出部は、コピーコードやコピー後変更したコードを検出する類似性検出ツールを用いて、前記記憶部から前記ライブラリおよび前記IPコアを取得する
    ことを特徴とする請求項2に記載のオフロードサーバ。
  4. 前記記憶部は、前記ライブラリとして、CUDAライブラリと当該CUDAライブラリを利用するためのライブラリ利用手順とを記憶し、
    前記置換機能検出部は、前記ライブラリ利用手順をもとに、前記記憶部から前記CUDAライブラリを取得する
    ことを特徴とする請求項1に記載のオフロードサーバ。
  5. 前記記憶部は、IPコア関連の情報としてOpenCLコードを記憶し、
    前記オフロードパターン作成部は、前記OpenCLコードをもとにOpenCLインタフェースを用いてホストと前記PLDとを接続するとともに、前記OpenCLコードをもとに前記PLDへの前記IPコアの実装を行う
    ことを特徴とする請求項1に記載のオフロードサーバ。
  6. アプリケーションの特定処理をGPU(Graphics Processing Unit)またはPLD(Programmable Logic Device)にオフロードするオフロードサーバのオフロード制御方法であって、
    前記オフロードサーバは、
    前記GPUまたは前記PLDにオフロード可能なライブラリおよびIPコアを記憶する記憶部を備えており、
    アプリケーションのソースコードを分析して、当該ソースコードに含まれる外部ライブラリ呼び出しを検出するステップと、
    検出された前記外部ライブラリ呼び出しをキーにして、前記記憶部から前記ライブラリおよび前記IPコアを取得するステップと、
    前記アプリケーションのソースコードの置換元の処理記述を、取得した前記ライブラリおよび前記IPコアの置換先の処理記述として置換するステップと、
    置換した前記ライブラリおよび前記IPコアの処理記述を、オフロード対象の機能ブロックとして、前記GPUまたはPLDにオフロードするステップと、
    ホストプログラムとのインタフェースを作成し、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出するステップと、
    作成されたGPUまたはPLD処理パターンの前記アプリケーションをコンパイルして、実行ファイルを作成するとともに、
    性能測定用処理による性能測定結果をもとに、複数の前記GPUまたはPLD処理パターンから最高処理性能の前記GPUまたはPLD処理パターンを選択し、最高処理性能の前記GPUまたはPLD処理パターンをコンパイルして、最終実行ファイルを作成するステップと、
    作成された前記実行ファイルをアクセラレータ検証用装置に配置し、前記GPUまたは前記PLDにオフロードした際の前記性能測定用処理を実行するステップと、を実行する
    ことを特徴とするオフロード制御方法。
  7. コンピュータを、請求項1乃至5のいずれか1項に記載のオフロードサーバとして機能させるためのオフロードプログラム。
JP2022501406A 2020-02-17 2020-02-17 オフロードサーバ、オフロード制御方法およびオフロードプログラム Active JP7380823B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2020/006065 WO2021166031A1 (ja) 2020-02-17 2020-02-17 オフロードサーバ、オフロード制御方法およびオフロードプログラム

Publications (2)

Publication Number Publication Date
JPWO2021166031A1 JPWO2021166031A1 (ja) 2021-08-26
JP7380823B2 true JP7380823B2 (ja) 2023-11-15

Family

ID=77391857

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022501406A Active JP7380823B2 (ja) 2020-02-17 2020-02-17 オフロードサーバ、オフロード制御方法およびオフロードプログラム

Country Status (3)

Country Link
US (1) US11947975B2 (ja)
JP (1) JP7380823B2 (ja)
WO (1) WO2021166031A1 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003023083A (ja) 2001-05-06 2003-01-24 Altera Corp Ip機能ブロックのフレキシブルな配置のためのpldアーキテクチャ
WO2019216127A1 (ja) 2018-05-09 2019-11-14 日本電信電話株式会社 オフロードサーバおよびオフロードプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9690928B2 (en) * 2014-10-25 2017-06-27 Mcafee, Inc. Computing platform security methods and apparatus
US10372497B1 (en) * 2017-09-05 2019-08-06 Parallels International Gmbh Offloading GPU computations for computers and virtual machines
US11593138B2 (en) * 2019-05-20 2023-02-28 Microsoft Technology Licensing, Llc Server offload card with SoC and FPGA

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003023083A (ja) 2001-05-06 2003-01-24 Altera Corp Ip機能ブロックのフレキシブルな配置のためのpldアーキテクチャ
WO2019216127A1 (ja) 2018-05-09 2019-11-14 日本電信電話株式会社 オフロードサーバおよびオフロードプログラム

Also Published As

Publication number Publication date
WO2021166031A1 (ja) 2021-08-26
JPWO2021166031A1 (ja) 2021-08-26
US20230096849A1 (en) 2023-03-30
US11947975B2 (en) 2024-04-02

Similar Documents

Publication Publication Date Title
US10372431B2 (en) Unified intermediate representation
Huang et al. Programming and runtime support to blaze FPGA accelerator deployment at datacenter scale
US11614927B2 (en) Off-load servers software optimal placement method and program
Pérez et al. Simplifying programming and load balancing of data parallel applications on heterogeneous systems
US20170109210A1 (en) Program Execution On Heterogeneous Platform
KR20140097548A (ko) 이종 병렬 처리 플랫폼을 위한 소프트웨어 라이브러리
US20160019071A1 (en) Accurate static dependency analysis via execution-context type prediction
JP6927424B2 (ja) オフロードサーバおよびオフロードプログラム
US20110131554A1 (en) Application generation system, method, and program product
JP7322978B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
JP2011170732A (ja) 並列化方法、システム、及びプログラム
JP7380823B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
CN116228515B (zh) 硬件加速系统、方法及相关装置
CN112997146A (zh) 卸载服务器和卸载程序
JP7363931B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
JP2023180315A (ja) 変換プログラムおよび変換処理方法
WO2022097245A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2024079886A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
Cartwright et al. Automating the design of mlut mpsopc fpgas in the cloud
JP7363930B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2023228369A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
JP7473003B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2022102071A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2023002546A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
Yamato Proposal and Evaluation of GPU Offloading Parts Reconfiguration During Applications Operations for Environment Adaptation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220712

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230627

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230821

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: 20231003

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20231016

R150 Certificate of patent or registration of utility model

Ref document number: 7380823

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150