JP7380823B2 - オフロードサーバ、オフロード制御方法およびオフロードプログラム - Google Patents
オフロードサーバ、オフロード制御方法およびオフロードプログラム Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims description 75
- 238000012545 processing Methods 0.000 claims description 302
- 238000001514 detection method Methods 0.000 claims description 66
- 238000005259 measurement Methods 0.000 claims description 61
- 230000008569 process Effects 0.000 claims description 48
- 238000004458 analytical method Methods 0.000 claims description 38
- 238000012795 verification Methods 0.000 claims description 32
- 238000012360 testing method Methods 0.000 claims description 23
- 238000003860 storage Methods 0.000 claims description 21
- 239000000284 extract Substances 0.000 claims description 19
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 claims 3
- 230000006870 function Effects 0.000 description 123
- 238000004519 manufacturing process Methods 0.000 description 16
- 238000011056 performance test Methods 0.000 description 12
- 230000015572 biosynthetic process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 238000003786 synthesis reaction Methods 0.000 description 8
- 230000003044 adaptive effect Effects 0.000 description 7
- 238000000605 extraction Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 238000010191 image analysis Methods 0.000 description 6
- 239000011159 matrix material Substances 0.000 description 6
- 230000006978 adaptation Effects 0.000 description 5
- 238000012790 confirmation Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000005266 casting Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 125000005842 heteroatom Chemical group 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
Description
このように、OpenCL、CUDA、OpenACC等の技術により、GPUやFPGAへのオフロード処理が可能になっている。
このため、スキルが無いユーザがGPUを使ってアプリケーションを高性能化することは難しいし、自動並列化技術を使う場合も、for文を並列するかしないかの試行錯誤のチューニング等、利用開始までに多くの時間がかかっている。
以下、明細書の説明において、PLD(Programmable Logic Device)として、FPGA(Field Programmable Gate Array)に適用した例について説明する。本発明は、プログラマブルロジックデバイス全般に適用可能である。
(背景説明)
処理時間が長くかかる特定のループ文を、FPGAにオフロードして高速化することを考えた際に、どのループをオフロードすれば高速になるかの予測は難しい。
このため、非特許文献3では、GPU同様、検証環境で試行錯誤を自動で行うことを記載している。しかし、FPGAは、GPUと異なり、コンパイルに数時間以上かかる。そこで、オフロード候補のループ文を絞ってから、実測試行を行うようにしている。
そこで、本発明は、個々のループ文でなく、行列積算やフーリエ変換等のより大きな単位で、FPGAやGPU等ハードウェア向けのアルゴリズム含めて実装された機能ブロックに置換する。これにより、人の既存ノウハウの活用し、オフロード処理の高速化を図る。
図1は、本実施形態に係るオフロードサーバ1を含む環境適応ソフトウェアシステムを示す図である。
本実施形態に係る環境適応ソフトウェアシステムは、従来の環境適応ソフトウェアの構成に加え、オフロードサーバ1を含むことを特徴とする。オフロードサーバ1は、アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバである。また、オフロードサーバ1は、クラウドレイヤ2、ネットワークレイヤ3、デバイスレイヤ4の3層に位置する各装置と通信可能に接続される。クラウドレイヤ2にはデータセンタ30が、ネットワークレイヤ3にはネットワークエッジ20が、デバイスレイヤ4にはゲートウェイ10が、それぞれ配設される。
サービスを提供する際は、初日は試し利用等の形でユーザにサービス提供し、そのバックグラウンドで画像分析等のオフロード処理を行い、翌日以降は画像分析をFPGAにオフロードしてリーズナブルな価格で見守りサービスを提供できるようにすることを想定する。
オフロードサーバ1は、アプリケーションの特定処理をアクセラレータに自動的にオフロードする装置である。
また、オフロードサーバ1は、エミュレータに接続可能である。
図2に示すように、オフロードサーバ1は、制御部11と、入出力部12と、記憶部13と、検証用マシン14(Verification machine)(アクセラレータ検証用装置)と、を含んで構成される。
・GPUライブラリ、IPコアの記憶
コードパターンDB130は、GPUやFPGA等にオフロード可能なライブラリおよびIPコア(後記)を記憶する。すなわち、コードパターンDB130は、後記<処理B-1>のために、特定のライブラリ、機能ブロックを高速化するGPU用ライブラリ(GPUライブラリ)やFPGA用IPコア(IPコア)とそれに関連する情報を保持する。例えば、コードパターンDB130は、FFT等算術計算等のライブラリリスト(外部ライブラリリスト)を保持する。
コードパターンDB130は、GPUライブラリとして、例えばCUDAライブラリと当該CUDAライブラリを利用するためのライブラリ利用手順とを記憶する。すなわち、後記<処理C-1>において、置換するライブラリやIPコアをGPUやFPGAに実装し、ホスト側(CPU)プログラムと繋ぐ場合、ライブラリ利用手順も含めて登録しておき、その手順に従って利用する。例えば、CUDAライブラリでは、C言語コードからCUDAライブラリを利用する手順がライブラリとともに公開されているため、コードパターンDB130にライブラリ利用手順も含めて登録しておく。
コードパターンDB130は、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を記憶する。すなわち、後記<処理B-2>において、登録されていないライブラリ呼び出し以外の機能処理を検出するため、構文解析にてソースコードの定義記述からクラス、構造体等を検出する。コードパターンDB130は、後記<処理B-2>のために、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を登録しておく。なお、クラスまたは構造体の機能処理に対して、高速化するライブラリやIPコアがあることは、類似性検出ツール(後記)で検出する。
コードパターンDB130は、IPコア関連の情報としてOpenCLコードを記憶する。コードパターンDB130に、OpenCLコードを記憶しておくことで、OpenCLコードから、OpenCLインタフェースを用いたCPUとFPGAの接続および、FPGAへのIPコア実装が、XilinxやIntel等のFPGAベンダの高位合成ツール(後記)を介して行うことができる。
制御部11は、オフロードサーバ1全体の制御を司る自動オフロード機能部(Automatic Offloading function)であり、記憶部13に格納されたプログラム(オフロードプログラム)を不図示のCPUが、RAMに展開し実行することにより実現される。
アプリケーションコード指定部111は、入力されたアプリケーションコードの指定を行う。具体的には、アプリケーションコード指定部111は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。
アプリケーションコード分析部112は、後記<処理A-1>において、アプリケーションのソースコードを分析して、当該ソースコードに含まれる外部ライブラリの呼び出しを検出する。具体的には、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
置換機能検出部113は、後記<処理B-1>において、検出された呼び出しをキーにして、コードパターンDB130からGPUライブラリおよびIPコアを取得する。具体的には、置換機能検出部113は、検出したライブラリ呼び出しに対して、ライブラリ名をキーとして、コードパターンDB130と照合することで、GPU、FPGAにオフロードできるオフロード可能処理を抽出する。
置換処理部114は、後記<処理C-1>において、アプリケーションのソースコードの置換元の処理記述を、置換機能検出部113が取得した置換先のライブラリおよびIPコアの処理記述に置換する。具体的には、置換処理部114は、抽出したオフロード可能処理を、GPU向けのライブラリやFPGA向けのIPコア等に置換する。
また、置換処理部114は、置換したライブラリおよびIPコアの処理記述を、オフロード対象の機能ブロックとして、GPUやFPGA等にオフロードする。具体的には、置換処理部114は、GPU向けのライブラリやFPGA向けのIPコア等に置換した機能ブロックを、CPUプログラムとのインタフェースを作成することでオフロードする。置換処理部114は、CUDA,OpenCL等の中間言語ファイル132を出力する。
オフロードパターン作成部115は、1以上のオフロードするパターンを作成する。具体的には、ホストプログラムとのインタフェースを作成し、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出する。
ホストコードで記述するOpenCLの初期化、実行、終了の基本フローは、下記ステップ1~13である。このステップ1~13のうち、ステップ1~10がカーネル関数hello()をホスト側から呼び出すまでの手続(準備)であり、ステップ11でカーネルの実行となる。
OpenCLランタイムAPIで定義されているプラットフォーム特定機能を提供する関数clGetPlatformIDs()を用いて、OpenCLが動作するプラットフォームを特定する。
OpenCLランタイムAPIで定義されているデバイス特定機能を提供する関数clGetDeviceIDs()を用いて、プラットフォームで使用するGPU等のデバイスを特定する。
OpenCLランタイムAPIで定義されているコンテキスト作成機能を提供する関数clCreateContext()を用いて、OpenCLを動作させる実行環境となるOpenCLコンテキストを作成する。
OpenCLランタイムAPIで定義されているコマンドキュー作成機能を提供する関数clCreateCommandQueue()を用いて、デバイスを制御する準備であるコマンドキューを作成する。OpenCLでは、コマンドキューを通して、ホストからデバイスに対する働きかけ(カーネル実行コマンドやホスト-デバイス間のメモリコピーコマンドの発行)を実行する。
OpenCLランタイムAPIで定義されているデバイス上にメモリを確保する機能を提供する関数clCreateBuffer()を用いて、ホスト側からメモリオブジェクトを参照できるようにするメモリオブジェクトを作成する。
デバイスで実行するカーネルは、その実行自体をホスト側のプログラムで制御する。このため、ホストプログラムは、まずカーネルプログラムを読み込む必要がある。カーネルプログラムには、OpenCLコンパイラで作成したバイナリデータや、OpenCL C言語で記述されたソースコードがある。このカーネルファイルを読み込む(記述省略)。なお、カーネルファイル読み込みでは、OpenCLランタイムAPIは使用しない。
OpenCLでは、カーネルプログラムをプログラムオブジェクトとして認識する。この手続きがプログラムオブジェクト作成である。
OpenCLランタイムAPIで定義されているプログラムオブジェクト作成機能を提供する関数clCreateProgramWithSource()を用いて、ホスト側からメモリオブジェクトを参照できるようにするプログラムオブジェクトを作成する。カーネルプログラムのコンパイル済みバイナリ列から作成する場合は、clCreateProgramWithBinary()を使用する。
ソースコードとして登録したプログラムオブジェクトを OpenCL Cコンパイラ・リンカを使いビルドする。
OpenCLランタイムAPIで定義されているOpenCL Cコンパイラ・リンカによるビルドを実行する関数clBuildProgram()を用いて、プログラムオブジェクトをビルドする。なお、clCreateProgramWithBinary()でコンパイル済みのバイナリ列からプログラムオブジェクトを生成した場合、このコンパイル手続は不要である。
OpenCLランタイムAPIで定義されているカーネルオブジェクト作成機能を提供する関数clCreateKernel()を用いて、カーネルオブジェクトを作成する。1つのカーネルオブジェクトは、1つのカーネル関数に対応するので、カーネルオブジェクト作成時には、カーネル関数の名前(hello)を指定する。また、複数のカーネル関数を1つのプログラムオブジェクトとして記述した場合、1つのカーネルオブジェクトは、1つのカーネル関数に1対1で対応するので、clCreateKernel()を複数回呼び出す。
OpenCLランタイムAPIで定義されているカーネルへ引数を与える(カーネル関数が持つ引数へ値を渡す)機能を提供する関数clSetKernel()を用いて、カーネル引数を設定する。
以上、上記ステップ1~10で準備が整い、ホスト側からデバイスでカーネルを実行するステップ11に入る。
カーネル実行(コマンドキューへ投入)は、デバイスに対する働きかけとなるので、コマンドキューへのキューイング関数となる。
OpenCLランタイムAPIで定義されているカーネル実行機能を提供する関数clEnqueueTask()を用いて、カーネルhelloをデバイスで実行するコマンドをキューイングする。カーネルhelloを実行するコマンドがキューイングされた後、デバイス上の実行可能な演算ユニットで実行されることになる。
OpenCLランタイムAPIで定義されているデバイス側のメモリからホスト側のメモリへデータをコピーする機能を提供する関数clEnqueueReadBuffer()を用いて、デバイス側のメモリ領域からホスト側のメモリ領域にデータをコピーする。また、ホスト側からデバイス側のメモリへデータをコピーする機能を提供する関数clEnqueueWrightBuffer()を用いて、ホスト側のメモリ領域からデバイス側のメモリ領域にデータをコピーする。なお、これらの関数は、デバイスに対する働きかけとなるので、一度コマンドキューへコピーコマンドがキューイングされてからデータコピーが始まることになる。
最後に、ここまでに作成してきた各種オブジェクトを解放する。
以上、OpenCL C言語に沿って作成されたカーネルの、デバイス実行について説明した。
性能測定部116は、作成された処理パターンのアプリケーションをコンパイルして、検証用マシン14に配置し、GPUやFPGA等にオフロードした際の性能測定用処理を実行する。
性能測定部116は、バイナリファイル配置部(Deploy binary files)116aを備える。バイナリファイル配置部116aは、GPUやFPGAを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイ(配置)する。
オフロードパターン作成部115は、GPUやFPGAにオフロード可能な機能ブロックをオフロードする処理パターンを作成し、作成された処理パターンの中間言語を、実行ファイル作成部117がコンパイルする。性能測定部116は、コンパイルされたプログラムの性能を測定する(「1回目の性能測定」)。
性能測定部116は、コンパイルされたプログラムの性能を測定する(「2回目の性能測定」)。
実行ファイル作成部117は、オフロードする処理パターンの中間言語をコンパイルして実行ファイルを作成する。一定数繰り返された、性能測定結果をもとに、1以上の処理パターンから最高処理性能の処理パターンを選択し、最高処理性能の処理パターンをコンパイルして最終実行ファイルを作成する。
本番環境配置部118は、作成した実行ファイルを、ユーザ向けの本番環境に配置する(「最終バイナリファイルの本番環境への配置」)。本番環境配置部118は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
性能測定テスト抽出実行部119は、実行ファイル配置後、テストケースDB131から性能試験項目を抽出し、性能試験を実行する。
性能測定テスト抽出実行部119は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースDB131から抽出し、抽出した性能試験を自動実行する。
ユーザ提供部120は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する(「価格・性能等の情報のユーザへの提供」)。テストケースDB131には、アプリケーションの性能を測定する試験を自動で行うためのデータが格納されている。ユーザ提供部120は、テストケースDB131の試験データを実行した結果と、システムに用いられるリソース(仮想マシンや、FPGAインスタンス、GPUインスタンス等)の各単価から決まるシステム全体の価格をユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、サービスの課金利用開始を判断する。
FPGAに関しては、ハードウェア回路設計に多大な時間がかかることもあり、一度設計した機能を、IPコア(Intellectual Property Core)という形で再利用可能にすることが多い。IPコアとは、FPGA、IC、LSIなどの半導体を構成するための部分的な回路情報であり、特に機能単位でまとめられている。IPコアは、暗号化/復号化処理、FFT(Fast Fourier Transform)等の算術演算、画像処理、音声処理等が代表的な機能例である。IPコアは、ライセンス料を支払うものが多いが、一部はフリーで提供されているものもある。
本実施形態のオフロードサーバ1は、環境適応ソフトウェアの要素技術としてユーザアプリケーションロジックのGPU、FPGA自動オフロードに適用した例である。
図3は、オフロードサーバ1の機能ブロックのオフロード処理を示す図である。
図3に示すように、オフロードサーバ1は、環境適応ソフトウェアの要素技術に適用される。オフロードサーバ1は、制御部(自動オフロード機能部)11と、コードパターンDB130、テストケースDB131と、中間言語ファイル132と、検証用マシン14と、を有している。
オフロードサーバ1は、ユーザが利用するアプリケーションコード(Application code)130を取得する。
<ステップS11:Specify application code>
ステップS11において、アプリケーションコード指定部111(図2参照)は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。具体的には、アプリケーションコード指定部111は、入力されたアプリケーションコードの指定を行う。
ステップS12において、アプリケーションコード分析部112(図2参照)は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
ステップS13において、置換機能検出部113(図2参照)は、把握したライブラリ呼び出しや機能処理について、コードパターンDB130と照合することで、GPU、FPGAにオフロードできるオフロード可能処理を抽出する。
ステップS14において、置換処理部114(図2参照)は、抽出したオフロード可能処理を、GPU向けのライブラリやFPGA向けのIPコア等に置換する。置換処理部114は、GPU向けのライブラリやFPGA向けのIPコア等に置換した機能ブロックを、CPUプログラムとのインタフェースを作成することでオフロードする。置換処理部114は、CUDA,OpenCL等の中間言語ファイル132を出力する。中間言語抽出は、一度で終わりでなく、適切なオフロード領域探索のため、実行を試行して最適化するため反復される。
ここで、オフロード可能処理が直ちに高速化につながるか、またコスト効果が十分であるかは分からないので、オフロードパターン作成部115は、検証環境での性能測定を通じて、オフロードするしないを試行することで、より高速となるオフロードパターンを抽出する。
ステップS21において、バイナリファイル配置部116a(図2参照)は、GPU、FPGAを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイする。バイナリファイル配置部116aは、配置したファイルを起動し、想定するテストケースを実行して、オフロードした際の性能を測定する。
ステップS22において、性能測定部116(図2参照)は、配置したファイルを実行し、オフロードした際の性能を測定する。
ステップS23において、本番環境配置部118は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
ステップS24において、性能測定テスト抽出実行部119は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースDB131から抽出し、抽出した性能試験を自動実行する。
ステップS25において、ユーザ提供部120は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、サービスの課金利用開始を判断する。
機能ブロックのオフロードについては、機能ブロックの検出(以下、「処理A」という)、その機能ブロックがオフロード用の既存ライブラリ/IPコア等があるかを検出(以下、「処理B」という)、機能ブロックをライブラリ/IPコア等と置換した際にホスト側とのインタフェースの整合(以下、「処理C」という)、の3つ要素を考慮する必要がある。上記3つ要素の考慮点に従い、機能ブロックのオフロード処理について詳細に述べる。
「処理A」(機能ブロックの検出)は、ライブラリの関数呼び出しを行い、ライブラリの関数呼び出しを機能ブロックとする<処理A-1>と、登録されていないライブラリの関数呼び出しである場合、クラス、構造体等を検出して機能ブロックとする<処理A-2>と、に分けられる。すなわち、<処理A-1>は、既存のライブラリの関数呼び出しを検出して機能ブロックとするものであり、<処理A-2>は、<処理A-1>において機能ブロックを検出しない場合に、クラスまたは構造体から機能ブロックを抽出するものである。
アプリケーションコード分析部112は、構文解析を用いて、ソースコードから外部のライブラリの関数呼び出しを行っていることを検知する。詳細には、下記の通りである。コードパターンDB130は、FFT等算術計算等のライブラリリストを保持している。アプリケーションコード分析部112は、ソースコードを構文解析し、コードパターンDB130が保持しているライブラリリストと照合して、外部のライブラリの関数呼び出しを行っていることを検知する。
アプリケーションコード分析部112は、登録されていないライブラリ呼び出し以外の機能処理を機能ブロックとして検出するため、構文解析を用いて、ソースコードの定義記述からクラスまたは構造体の機能処理を検出する。アプリケーションコード分析部112は、例えば、C言語のstructを使って定義されるいくつかの変数をひとまとまりにした型である構造体(structure)や、インスタンス化したオブジェクトの型が値型である構造体に対して参照型であるクラス(class)を検出する。また、アプリケーションコード分析部112は、例えばJava(登録商標)において構造体に代替使用されるクラスを検出する。
[処理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コア処理記述に置換するものである。
置換機能検出部113は、<処理A-1>でアプリケーションコード分析部112が検出したライブラリ呼び出しに対して、ライブラリ名をキーに、コードパターンDB130を検索し、コードパターンDB130から、置換可能GPUライブラリ(高速化できるGPU用ライブラリ)やFPGA用IPコアを取得する。
置換機能検出部113は、例えば、置換元の処理が2D FFTの処理(非特許文献4等にコードがある)であった場合は、その外部ライブラリ名をキーに、2D FFTを処理するFPGA処理として、OpenCLコード(非特許文献5等にコードがある)を検出する(main.cpp(ホストプログラム)、fft2d.cl(カーネルプログラム)等)。なお、OpenCLコードは、コードパターンDB130に記憶されている。
置換機能検出部113は、<処理A-2>でアプリケーションコード分析部112が検出したクラス、構造体等のコードをキーに、コードパターンDB130を検索し、コードパターンDB130から、類似性検出ツールを用いて置換可能GPUライブラリ(高速化できるGPU用ライブラリ)やFPGA用IPコアを取得する。類似性検出ツールとは、Deckard等、コピーコードやコピー後変更したコードの検出を対象とするツールである。置換機能検出部113が、類似性検出ツールを用いることで、行列計算のコード等、CPUで計算する場合は記述が同様になる処理や、他者のコードをコピーして変更した処理等を一部検出できる。なお、類似性検出ツールは、新規に独立に作成したようなクラス等については検出が困難となるため対象外である。
置換機能検出部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-1>と、<処理C-2>とを有する。<処理C-1>は、<処理B-1>を受け、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換するとともに、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述する。<処理C-2>は、<処理B-2>を受け、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換するとともに、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述する。ここで、上記GPUライブラリ、IPコア呼び出しのためのインタフェース処理の記述が、「ホスト側とのインタフェースの整合」に対応する。
置換処理部114は、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する。そして、置換処理部114は、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述し(OpenCL API等)、作成したパターンをコンパイルする。
置換機能検出部113は、<処理A-1>で検出したライブラリ呼び出しに対して、<処理B-1>で該当するライブラリやIPコアを検索している。このため、置換処理部114は、置換するライブラリやIPコアをGPUやFPGAに実装し、ホスト側(CPU)プログラムと繋ぐインタフェース処理を行う。
置換処理部114は、アプリコードの置換元の処理記述を、置換先のGPUライブラリ、IPコア処理記述に置換する。そして、置換処理部114は、置換元と置換先で引数や戻り値の数や型が異なる場合に、ユーザに確認し、GPUライブラリ、IPコア呼び出しのためのインタフェース処理を記述(OpenCL API等)するとともに、作成したパターンをコンパイルする。すなわち、<処理C-2>では、置換処理部114は、<処理A-2>で検出したクラス、構造体等に対して、<処理B-2>で高速化できるライブラリやIPコアを検索している。このため、置換処理部114は、<処理C-2>では該当するライブラリやIPコアをGPUやFPGAに実装する。
<処理C-1>では、特定のライブラリ呼び出しに対して高速化するライブラリやIPコアであるため、インタフェース部分の生成等は必要になるものの、GPU、FPGAとホスト側プログラムの想定する引数、戻り値の数や型は合っていた。しかし、<処理B-2>は、類似性等で判断しているため、引数や戻り値の数や型等の基本的な部分が合っている保証はない。ライブラリやIPコアは、既存ノウハウであり、引数、戻り値の数や型が合っていない場合であっても、変更が頻繁にできるものではない。このため、オフロードを依頼するユーザに対して、元のコードの引数や戻り値の数や型について、ライブラリやIPコアに合わせて変更するか否かを確認する。そして、確認了承後にオフロード性能試験を試行する。
次に、図4および図5を参照してオフロードサーバ1の動作概要を説明する。
・<処理A-1>と<処理B-1>と<処理C-1>のフローチャート
図4は、オフロードサーバ1の制御部(自動オフロード機能部)11が、機能ブロックのオフロード処理において<処理A-1>と<処理B-1>と<処理C-1>とを実行する場合のフローチャートである。
ステップS101でアプリケーションコード分析部112(図2参照)は、アプリケーションのオフロードしたいソースコードの分析を行う。具体的には、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
ステップS107で実行ファイル作成部117は、作成したパターンをコンパイルする。
ステップS109で実行ファイル作成部117は、1回目測定時に高速化できたパターンについて組合せパターンを作成する。
ステップS111で性能測定部116は、作成した組合せパターンを検証環境で性能測定する(「2回目の性能測定」)。
図5は、オフロードサーバ1の制御部(自動オフロード機能部)11が、機能ブロックのオフロード処理において<処理A-2>と<処理B-2>と<処理C-2>とを実行する場合のフローチャートである。なお、<処理A-2>からの処理は、<処理A-1>からの処理と並行して行えばよい。
ステップS201でアプリケーションコード分析部112(図2参照)は、アプリケーションのオフロードしたいソースコードの分析を行う。具体的には、アプリケーションコード分析部112は、Clang等の構文解析ツールを用いて、ループ文構造等とともに、コードに含まれるライブラリ呼び出しや、機能処理を分析するソースコードの分析を行う。
ステップS209で性能測定部116は、作成したパターンを検証環境で性能測定する(「1回目の性能測定」)。
ステップS212で性能測定部116は、作成した組合せパターンを検証環境で性能測定する(「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ライブラリの呼び出しも処理が可能である。
<実装の動作概要>
実装例では、C/C++アプリケーションの利用依頼があると、まず、C/C++アプリケーションのコードを解析して、ループ文をオフロードに使うためにループ文を検出する。また、<処理A-1>で呼び出されているライブラリや<処理A-2>で定義されているクラス、構造体等のプログラム構造を把握する。構文解析には、LLVM/Clangの構文解析ライブラリ等が利用できる。呼び出されている外部ライブラリがあるかどうかは、コードパターンDB130の外部ライブラリリストと照合することで確認する。
置換機能検出部113(図2参照)が、類似性検出ツールを用いて類似性検出を行う場合について説明する。類似性検出を行う場合には、上記置換記述と並行して処理がされる。すなわち、置換機能検出部113が、類似性検出を行う場合、実装例では、<処理B-2>でDeckardを用いて、検出されたクラス、構造体等の部分コードとコードパターンDB130に登録された比較用コードとの類似性検出を行う。そして、置換機能検出部113は、閾値超えの機能ブロックと該当するGPU用ライブラリやFPGA用IPコアを検出する。置換機能検出部113は、<処理B-1>の場合と同様に、実行ファイルやOpenCLを取得する。実装例では、次にC-1の場合と同様に実行用ファイルを作成するが、特に置換元のコードと置換するライブラリやIPコアの引数や戻り値、型等のインタフェースが異なる場合は、オフロードを依頼したユーザに対して、置換先ライブラリやIPコアに合わせて、インタフェースを変更してよいか確認し、確認後に実行用ファイルを作成する。
本実施形態に係るオフロードサーバ1は、例えば図6に示すような構成のコンピュータ900によって実現される。
図6は、オフロードサーバ1の機能を実現するコンピュータ900の一例を示すハードウェア構成図である。
コンピュータ900は、CPU910、RAM920、ROM930、HDD940、通信インタフェース(I/F:Interface)950、入出力インタフェース(I/F)960、およびメディアインタフェース(I/F)970を有する。
以上説明したように、本実施形態に係るオフロードサーバ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処理パターンをコンパイルして、最終実行ファイルを作成する。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
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)
- アプリケーションの特定処理を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処理パターンをコンパイルして、最終実行ファイルを作成する
ことを特徴とするオフロードサーバ。 - 前記記憶部は、ホストで計算する場合に記述が同様になる処理のクラスまたは構造体を記憶し、
前記アプリケーションコード分析部は、前記ソースコードから前記クラスまたは前記構造体の定義記述コードを検出し、
前記置換機能検出部は、検出された前記クラスまたは前記構造体の定義記述コードをキーにして、前記記憶部から前記ライブラリおよび前記IPコアを取得し、
前記置換処理部は、アプリケーションのソースコードの置換元の処理記述を、取得した前記ライブラリおよび前記IPコアの処理記述に置換するとともに、置換元と置換先で引数、戻り値の数または型が異なる場合に、当該異なることを通知する
ことを特徴とする請求項1に記載のオフロードサーバ。 - 前記置換機能検出部は、コピーコードやコピー後変更したコードを検出する類似性検出ツールを用いて、前記記憶部から前記ライブラリおよび前記IPコアを取得する
ことを特徴とする請求項2に記載のオフロードサーバ。 - 前記記憶部は、前記ライブラリとして、CUDAライブラリと当該CUDAライブラリを利用するためのライブラリ利用手順とを記憶し、
前記置換機能検出部は、前記ライブラリ利用手順をもとに、前記記憶部から前記CUDAライブラリを取得する
ことを特徴とする請求項1に記載のオフロードサーバ。 - 前記記憶部は、IPコア関連の情報としてOpenCLコードを記憶し、
前記オフロードパターン作成部は、前記OpenCLコードをもとにOpenCLインタフェースを用いてホストと前記PLDとを接続するとともに、前記OpenCLコードをもとに前記PLDへの前記IPコアの実装を行う
ことを特徴とする請求項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にオフロードした際の前記性能測定用処理を実行するステップと、を実行する
ことを特徴とするオフロード制御方法。 - コンピュータを、請求項1乃至5のいずれか1項に記載のオフロードサーバとして機能させるためのオフロードプログラム。
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)
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)
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 |
-
2020
- 2020-02-17 WO PCT/JP2020/006065 patent/WO2021166031A1/ja active Application Filing
- 2020-02-17 JP JP2022501406A patent/JP7380823B2/ja active Active
- 2020-02-17 US US17/800,069 patent/US11947975B2/en active Active
Patent Citations (2)
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 |