JP7063289B2 - オフロードサーバのソフトウェア最適配置方法およびプログラム - Google Patents

オフロードサーバのソフトウェア最適配置方法およびプログラム Download PDF

Info

Publication number
JP7063289B2
JP7063289B2 JP2019030871A JP2019030871A JP7063289B2 JP 7063289 B2 JP7063289 B2 JP 7063289B2 JP 2019030871 A JP2019030871 A JP 2019030871A JP 2019030871 A JP2019030871 A JP 2019030871A JP 7063289 B2 JP7063289 B2 JP 7063289B2
Authority
JP
Japan
Prior art keywords
offload
processing
performance
code
application
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
JP2019030871A
Other languages
English (en)
Other versions
JP2020137017A (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
Priority to JP2019030871A priority Critical patent/JP7063289B2/ja
Priority to US17/432,701 priority patent/US11614927B2/en
Priority to PCT/JP2020/007255 priority patent/WO2020171234A1/ja
Publication of JP2020137017A publication Critical patent/JP2020137017A/ja
Application granted granted Critical
Publication of JP7063289B2 publication Critical patent/JP7063289B2/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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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/60Software deployment
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

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)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、機能処理をGPU(Graphics Processing Unit)等のアクセラレータに自動オフロードするオフロードサーバのソフトウェア最適配置方法およびプログラムに関する。
近年、IoT(Internet of Things)技術が進展しており、デバイス側で収集したデータをネットワークを介してクラウド技術を用いて分析し可視化するといったアプリケーションが続々と出現している。
従来IoTのサービスは、デバイスからネットワーク、アプリケーションまで一体構築されたサイロ型が多かった。しかし、よりコストを下げ多様なサービスを提供するため、デバイスを複数アプリケーションで共有し、クラウド、ネットワーク、デバイスのリソースをダイナミックに連携してサービス化するOpenIoTの概念が注目されている。
OpenIoTでは、街中の複数団体が持つ監視カメラを共有し、迷子の探索やテロリストの発見等、複数の用途に使うことが期待される。しかし、この例で、カメラ映像の画像処理を複数の用途で用いることは、デバイス側、クラウド側のどこで分析するとしても、CPU計算リソースが膨大になる。
一方、近年、IoT等多彩な分野に対応するため、CPU以外のヘテロな計算リソースを用いることが増えている。例えば、GPU(Graphics Processing Unit)(アクセラレータ)を強化したサーバで画像処理を行ったり、FPGA(Field Programmable Gate Array)(アクセラレータ)で信号処理をアクセラレートすることが始まっている。Amazon Web Services (AWS)(登録商標)では、GPUインスタンス、FPGAインスタンスが提供されており、オンデマンドにそれらリソースを使うこともできる。Microsoft(登録商標)は、FPGAを用いて検索を効率化している。
OpenIoT環境では、サービス連携技術等を用いて、多彩なアプリケーションの創出が期待されるが、更に進歩したハードウェアを生かすことで、動作アプリケーションの高性能化が期待できる。しかし、そのためには、動作させるハードウェアに合わせたプログラミングや設定が必要である。例えば、CUDA(Compute Unified Device Architecture)、 OpenCL(Open Computing Language)といった多くの技術知識が求められ、ハードルは高い。
GPUやFPGAをユーザのIoTアプリケーションで容易に利用できるようにするため下記が求められる。すなわち、動作させる画像処理、暗号処理等の汎用アプリケーションをOpenIoT環境にデプロイする際に、OpenIoTのプラットフォームがアプリケーションロジックを分析し、GPU、FPGAに自動で処理をオフロードすることが望まれる。
(GPUへのオフロード)
GPUの計算能力を画像処理以外にも使うGPGPU(General Purpose GPU)のための開発環境CUDAが発展している。CUDAは、GPGPU向けの開発環境である。また、GPU、FPGA、メニーコアCPU等のヘテロハードウェアを統一的に扱うための標準規格としてOpenCLも登場している。
CUDAやOpenCLでは、C言語の拡張によるプログラミングを行う。ただし、GPU等のデバイスとCPUの間のメモリコピー、解放等を記述する必要があり、記述の難度は高い。実際に、CUDAやOpenCLを使いこなせる技術者は数多くはいない。
簡易にGPGPUを行うため、ディレクティブベースで、ループ文等の並列処理すべき個所を指定し、ディレクティブに従いコンパイラがデバイス向けコードに変換する技術がある。技術仕様としてOpenACC(Open Accelerator)等、コンパイラとしてPGIコンパイラ(登録商標)等がある。例えば、OpenACCを使った例では、ユーザはC/C++/Fortran言語で書かれたコードに、OpenACCディレクティブで並列処理させる等を指定する。PGIコンパイラは、コードの並列可能性をチェックして、GPU用、CPU用実行バイナリを生成し、実行モジュール化する。IBM JDK(登録商標)は、Java(登録商標)のlambda形式に従った並列処理指定を、GPUにオフロードする機能をサポートしている。これらの技術を用いることで、GPUメモリへのデータ割り当て等を、プログラマーは意識する必要がない。
このように、OpenCL、CUDA、OpenACC等の技術により、GPUへのオフロード処理が可能になっている。
しかし、GPU処理は行えるようになっても、高速化には課題が多い。マルチコアCPU向けには、例えば、Intelコンパイラ(登録商標)等の自動並列化機能を持つコンパイラがある。自動並列化時は、プログラム上のfor文(繰り返し文)等の並列可能部を抽出するが、GPUを用いる場合は、CPU-GPUメモリ間のデータ転送オーバヘッドのため性能が出ないことも多い。GPUを用いて高速化する際は、スキル者が、CUDAでのチューニングや、PGI(登録商標)コンパイラ等で適切な並列処理部を探索することが必要になっている(非特許文献1参照)。
このため、スキルが無いユーザがGPUやFPGAを使ってアプリケーションを高性能化することは難しいし、自動並列化技術等を使う場合も並列処理可否の試行錯誤や高速化できない場合があった。
IoTデバイスに関しては、計算リソース等が限られているIoTデバイスでは、細かい制御を行う際は、アセンブリ等の組み込みソフトウェアの知識が必要になるのが現状である。Rasberry Pi(登録商標)等のシングルボードコンピュータでは、リソース量は限られるものの、Linux(登録商標)やJava等が動作するため、Rasberry PiをGW(gateway)として複数のIoTデバイスからデータを収集したり制御したりする等の自由度が開発者に出てくる。しかし、IoTデバイスを何台収容するかや、IoTデバイスとシングルボードコンピュータでどのように処理を分担するか等は、アプリケーション、利用形態によって異なり、環境に合わせた設計が必要である。
Y. Yamato, T. Demizu, H. Noguchi and M. Kataoka, "Automatic GPU Offloading Technology for Open IoT Environment," IEEE Internet of Things Journal, DOI: 10.1109/JIOT.2018.2872545, Sep. 2018. K. Shirahata, H. Sato and S. Matsuoka, "Hybrid Map Task Scheduling for GPU-Based Heterogeneous Clusters,"IEEE Second International Conference on Cloud Computing Technology and Science (CloudCom), pp.733-740, Dec. 2010. Y. Yamato, "Automatic verification technology of software patches for user virtual environments on IaaS cloud," Journal of Cloud Computing, Springer, 2015, 4:4, DOI: 10.1196/s13677-015-0028-6, Feb. 2015. Y. Yamato, M. Muroi, K. Tanaka and M. Uchimura, "Development of Template Management Technology for Easy Deployment of Virtual Resources on OpenStack," Journal of Cloud Computing, Springer, 2014, 3:7, DOI: 10.1196/s13677-014-0007-3, June 2014. Y. Yamato, "Server Selection, Configuration and Reconfiguration Technology for IaaS Cloud with Multiple Server Types," Journal of Network and Systems Management, Springer, DOI: 10.1007/s10922-017-9418-z, Aug. 2017.
近年、クラウドファーストという言葉もあるように、アプリケーションをクラウド等の事業者設備で動作させることは一般的となっている。その際に、ユーザはアプリケーションを低コストで高性能に運用することを求めている。アプリケーションを動作させる場合にコストや性能に大きく影響する点として以下の考慮が必要である。
(1)まず、GPUやFPGA等のアクセラレータを使う方が性能、コストで効果がある場合にそれらの利用が考えられる。勿論、通常のCPU向けに作られたコードではそれらのアクセラレータは使えないため、画像処理やFFT(Fast Fourier Transform)処理といった、GPUやFPGAに適した処理を、それらハードウェアにオフロードするコードに変換やライブラリ呼び出しを行う必要がある。コード変換は、IoTデバイスの制御等の処理を、Rasberry Piのようなシングルボードコンピュータに切り出して、配置する際も必要である。
(2)動作させるアプリケーションのコードが決まると、どの程度のリソース量を確保するかの決定が必要である。例えば、CPUとGPUで動作させるアプリケーションの場合に、CPU処理が1000秒で、GPU処理が1秒等の場合は、仮想マシンのCPUリソースを増強した方がシステムとして性能が出ることが期待できる。
(3)アプリケーションを実行する場所も性能に影響する。例えば、IoTカメラの画像分析で不審者探索を0.5sec以内に行いたい場合に、クラウドまでデータを上げてから画像分析していては遅延が大きくなるので、カメラデータを集約するゲートウェイや、NWの端点であるエッジサーバで画像分析することが必要になる等、処理場所の考慮が必要である。また、画像分析をエッジサーバで行い、不審者がいる場合だけ詳細画像をクラウドに送る場合でも、処理場所によって、計算量、通信トラフィックが変わるため、コストも変化する。
(4)ハードウェアに合わせたコード変換、リソース量調整、配置場所調整が終わり、アプリケーションの運用を開始しても、運用中にリクエスト特性が大きく変わった場合など、開始当初の性能が保てなくなる場合がある。そういった際は、運用中に構成を変更することで、システムとしての性能、コストを改善することも考慮が必要である。
このような点に鑑みて本発明がなされたのであり、アプリケーションを環境に合わせて適応させるとともに、高性能にアプリケーションを動作させることができるオフロードサーバのソフトウェア最適配置方法およびプログラムを提供することを課題とする。
前記した課題を解決するため、請求項1に記載の発明は、アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバのソフトウェア最適配置方法であって、前記オフロードサーバは、アプリケーションのソースコードを分析するアプリケーションコード分析ステップと、前記アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップと、配置先環境に合わせたコード変換をするコード変換ステップと、コード変換された前記アプリケーションをコンパイルして、アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置にオフロードした際の性能測定用処理を実行する検証環境用性能測定ステップと、を反復し、前記配置先環境に合わせたリソース量の設定を行うリソース量設定ステップと、前記コード変換ステップがコード変換した変換コードを、前記リソース量設定ステップが設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップと、本番環境配置後に、前記アプリケーションをコンパイルして、運用装置に配置し、前記運用装置にオフロードした実際の性能測定テストを実行する性能測定テストステップと、を備え、前記コード変換ステップ、前記リソース量設定ステップ、前記配置場所選択ステップ、前記検証環境用性能測定ステップ、前記性能測定テストステップのいずれか一つ以上のステップを実行し、前記リソース量設定ステップにおいて、アプリケーションテストケースの処理時間から、CPUとオフロード先の処理時間が同等のオーダーになるように、CPUとオフロード先のリソース比を定め、前記リソース比の決定後は、想定するテストケースの処理性能が、要求性能およびコスト要求を満たすように前記リソース比はキープしつつ、リソース量を設定することを特徴とするオフロードサーバのソフトウェア最適配置方法とした。
このようにすることで、例えば、GPU,FPGA,IoTデバイス等環境が多様になる中で、アプリケーションを環境に合わせて適応させとともに、GPUやFPGAを適切に活用し、高性能にアプリケーションを動作させることができる。また、一度記述したソフトウェアを、異なる環境でも高性能に動作させることができる。
また、CPUとオフロード先のリソース比を定めて、要求性能およびコスト要求を満たした上で、リソース量を設定することができる。
請求項2に記載の発明は、アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバのソフトウェア最適配置方法であって、前記オフロードサーバは、アプリケーションのソースコードを分析するアプリケーションコード分析ステップと、前記アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップと、配置先環境に合わせたコード変換をするコード変換ステップと、コード変換された前記アプリケーションをコンパイルして、アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置にオフロードした際の性能測定用処理を実行する検証環境用性能測定ステップと、を反復し、前記配置先環境に合わせたリソース量の設定を行うリソース量設定ステップと、前記コード変換ステップがコード変換した変換コードを、前記リソース量設定ステップが設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップと、本番環境配置後に、前記アプリケーションをコンパイルして、運用装置に配置し、前記運用装置にオフロードした実際の性能測定テストを実行する性能測定テストステップと、を備え、前記コード変換ステップ、前記リソース量設定ステップ、前記配置場所選択ステップ、前記検証環境用性能測定ステップ、前記性能測定テストステップのいずれか一つ以上のステップを実行し、前記配置場所選択ステップにおいて、アプリケーションテストケースの結果から、アプリケーションを配置した際の計算量と発生トラフィックを算出し、クラウド、エッジ、Home GW(gateway)を含むリンク関係をモデル化し、アプリケーションを特定のノードに配置した際に、コストが要求条件に収まることを制約条件に、処理遅延および/またはスループットの性能を最大化する配置、あるいは性能が要求条件を満たす形でコストが最低になる配置のいずれかを計算することを特徴とするオフロードサーバのソフトウェア最適配置方法とした。
このようにすることで、例えば、GPU,FPGA,IoTデバイス等環境が多様になる中で、アプリケーションを環境に合わせて適応させとともに、GPUやFPGAを適切に活用し、高性能にアプリケーションを動作させることができる。また、一度記述したソフトウェアを、異なる環境でも高性能に動作させることができる。
また、処理遅延、スループットの性能の最大化、または性能が要求条件を満たす形でコストが最低になる配置場所を選択することができる。
請求項3に記載の発明は、アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバのソフトウェア最適配置方法であって、前記オフロードサーバは、アプリケーションのソースコードを分析するアプリケーションコード分析ステップと、前記アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップと、配置先環境に合わせたコード変換をするコード変換ステップと、コード変換された前記アプリケーションをコンパイルして、アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置にオフロードした際の性能測定用処理を実行する検証環境用性能測定ステップと、を反復し、前記配置先環境に合わせたリソース量の設定を行うリソース量設定ステップと、前記コード変換ステップがコード変換した変換コードを、前記リソース量設定ステップが設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップと、本番環境配置後に、前記アプリケーションをコンパイルして、運用装置に配置し、前記運用装置にオフロードした実際の性能測定テストを実行する性能測定テストステップと、を備え、前記コード変換ステップ、前記リソース量設定ステップ、前記配置場所選択ステップ、前記検証環境用性能測定ステップ、前記性能測定テストステップのいずれか一つ以上のステップを実行し、アプリケーション運用開始後に、当初期待していた性能が出ない場合に、ソフトウェア設定を再構成する再構成実行ステップを有し、前記再構成実行ステップにおいて、ソフトウェア設定の変更では、リソース量設定、配置場所選択の試行計算を周期的、または、性能がある閾値以下となった場合に試行模擬し、性能向上やコスト低減度合を計算し、リソース量の変更や配置場所の変更で性能やコストが改善できる見込みがある場合に、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する場合に、リソースを変更する再構成先構築ステップと、配置場所変更の際、移行先環境を複製して、そこに移行元からアプリケーション実行環境をマイグレーションするマイグレーション処理ステップと、を実行し、前記再構成実行ステップにおいて、コード変換処理を、周期的、または、性能がある閾値以下となった場合に試行模擬し、コード変換して、GPUオフロードのソフトロジック変更および/またはFPGA(Field Programmable Gate Array)のハードロジックの変更で、性能やコストが改善できる見込みがある場合は、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する際に、GPUオフロードするソフトロジックの変更を行い、ソフトウェア構成の変更の場合は、前記マイグレーション処理ステップが、更新する実行ファイルを起動する環境を複製後、アプリケーションのデータのマイグレーションを行い、FPGAのハードロジックを変更する場合は、前記マイグレーション処理ステップにおいて、移行先にハードロジックを構成済みのFPGAを準備し当該FPGAを制御するコンテナのマイグレーションを行う、もしくは、前記再構成実行ステップにおいて、当該FPGAのハードロジックを再構成することを特徴とするオフロードサーバのソフトウェア最適配置方法とした。
このようにすることで、例えば、GPU,FPGA,IoTデバイス等環境が多様になる中で、アプリケーションを環境に合わせて適応させとともに、GPUやFPGAを適切に活用し、高性能にアプリケーションを動作させることができる。また、一度記述したソフトウェアを、異なる環境でも高性能に動作させることができる。
さらに、ユーザに再構成を提案して、ユーザ了承を得た場合には、アプリケーション実行環境をマイグレーションすることができる。
また、ユーザに再構成を提案して、ユーザ了承を得た場合、ソフトウェア構成の変更のときは、アプリケーションのデータのマイグレーションを、またハードロジックを構成済みのFPGAを準備しFPGAを制御するコンテナ等をマイグレーションすることができる。
請求項4に記載の発明は、コンパイルエラーが出るループ文に対して、オフロード対象外とするとともに、コンパイルエラーが出ないループ文に対して、オフロード処理するかしないかの指定を行うオフロード処理パターンを作成するオフロードパターン作成ステップと、所定回数繰り返された、性能測定結果をもとに、複数のオフロードパターンから最高処理性能のオフロードパターンを選択し、最高処理性能のオフロードパターンをコンパイルして実行ファイルを作成する実行ファイル作成ステップと、をさらに有し、前記オフロード処理指定ステップにおいて、遺伝的アルゴリズムに基づき、コンパイルエラーが出ないループ文の数を遺伝子長とし、前記オフロードパターン作成ステップにおいて、アクセラレータ処理をする場合を1または0のいずれか一方、しない場合を他方の0または1として、アクセラレータ処理可否を遺伝子パターンにマッピングし、前記遺伝子の各値を1か0にランダムに作成した指定個体数の前記遺伝子パターンを準備し、前記性能測定テストステップにおいて、各個体に応じて、前記アクセラレータにおける並列処理指定文を指定したアプリケーションコードをコンパイルして、前記アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置において性能測定用処理を実行し、前記実行ファイル作成ステップにおいて、全個体に対して、性能測定を行い、処理時間の短い個体ほど適合度が高くなるように評価し、全個体から、前記適合度が所定値より高いものを性能の高い個体として選択し、選択された個体に対して、交叉、突然変異の処理を行い、次世代の個体を作成し、指定世代数の処理終了後、最高性能の前記オフロードパターンを解として選択することを特徴とする請求項1乃至3のいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法とした。
このように、最初に並列可能なループ文のチェックを行い、次に並列可能繰り返し文群に対してGA(Genetic Algorithm:遺伝的アルゴリズム)を用いて検証環境で性能検証試行を反復し適切な領域を探索する。並列可能なループ文(例えばfor文)に絞った上で、遺伝子の部分の形で、高速化可能なオフロードパターンを保持し組み換えていくことで、取り得る膨大なオフロードパターンから、効率的に高速化可能なパターンを探索できる。
請求項5に記載の発明は、前記配置先環境が、前記アクセラレータとしてFPGA(Field Programmable Gate Array)を備え、前記オフロード処理指定ステップにおいて、機能ブロック処理、ライブラリ呼び出しを含むアプリケーションの処理構造から、コードパターンDBを参照して、機能ブロック処理、ライブラリ呼び出しを含む前記FPGAにオフロード可能な処理を特定し、前記コードパターンDBからオフロードに該当する中間言語の定義情報を、アプリケーションソースコードに置換することを特徴とする請求項1乃至3のいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法とした。
このようにすることで、機能ブロック処理、ライブラリ呼び出しを含むFPGAにオフロード可能な処理を特定して、アプリケーションソースコードに置換することができる。
請求項に記載の発明は、コンピュータ、請求項1乃至請求項のうちいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法を実行させるためのオフロードプログラムとした。
このようにすることにより、一般的なコンピュータを用いて、請求項1乃至請求項のいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法を実行させることができる。
本発明によれば、アプリケーションを環境に合わせて適応させるとともに、高性能にアプリケーションを動作させることができるオフロードサーバのソフトウェア最適配置方法およびプログラムを提供することができる。
本発明の実施形態に係るオフロードサーバを含むシステムを示す図である。 上記実施形態に係るオフロードサーバの構成例を示す機能ブロック図である。 上記実施形態に係るオフロードサーバのソフトウェア最適配置処理を示すフローチャートである。 上記実施形態に係るオフロードサーバのGAを用いた自動オフロード処理を示す図である。 上記実施形態に係るオフロードサーバのSimple GAによる制御部(環境適応機能部)の探索イメージを示す図である。 上記実施形態に係るオフロードサーバのCPUからGPUへのデータ転送する場合のループ文において、CPUプログラム側で定義した変数とGPUプログラム側で参照する変数が重なる場合の例を示す図である。 上記実施形態に係るオフロードサーバのGPUからCPUへのデータ転送する場合のループ文において、CPUプログラム側で定義した変数とGPUプログラム側で参照する変数が重なる場合の例を示す図である。 上記実施形態に係るオフロードサーバの実装の動作概要を説明するフローチャートである。 上記実施形態に係るオフロードサーバの実装の動作概要を説明するフローチャートである。
次に、本発明を実施するための形態(以下、「本実施形態」と称する。)における、オフロードサーバ1等について説明する。
図1は、本実施形態に係るオフロードサーバ1を含むシステムを示す図である。
本実施形態に係るシステムは、オフロードサーバ1を含むことを特徴とする。オフロードサーバ1は、アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバである。また、オフロードサーバ1は、クラウドレイヤ2、ネットワークレイヤ3、デバイスレイヤ4の3層に位置する各装置と通信可能に接続される。クラウドレイヤ2にはデータセンタ(DC:data center)30が、ネットワークレイヤ3にはネットワークエッジ20が、デバイスレイヤ4にはゲートウェイ10が、それぞれ配設される。
そこで、本実施形態に係るオフロードサーバ1を含むシステムでは、デバイスレイヤ2、ネットワークレイヤ3、クラウドレイヤ4のそれぞれのレイヤにおいて、機能配置や処理オフロードを適切に行うことによる効率化を実現する。主に、機能を3レイヤの適切な場所に配置し処理させる機能配置効率化と、画像分析等の機能処理をGPUやFPGA等のヘテロハードウェアにオフロードすることでの効率化を図る。クラウドレイヤでは、GPUやFPGA等のヘトロジニアスなHW(ハードウェア)(以下、「ヘトロデバイス」と称する。)を備えたサーバが増えてきている。例えば、Microsoft(登録商標)社のBing検索においても、FPGAが利用されている。このように、へトロデバイスを活用し、例えば、行列計算等をGPUにオフロードしたり、FFT(Fast Fourier Transform)計算等の特定処理をFPGAにオフロードしたりすることで、高性能化を実現している。
以下、本実施形態に係るオフロードサーバ1が、ユーザ向けサービス利用のバックグラウンドで行うオフロード処理を行う際の構成例について説明する。
図2は、本発明の実施形態に係るオフロードサーバ1の構成例を示す機能ブロック図である。
オフロードサーバ1は、アプリケーションの特定処理をアクセラレータに自動的にオフロードする装置である。
図2に示すように、オフロードサーバ1は、制御部11と、入出力部12と、記憶部13と、検証用マシン14(Verification machine)(アクセラレータ検証用装置)と、運用装置15と、を含んで構成される。
入出力部12は、クラウドレイヤ2、ネットワークレイヤ3およびデバイスレイヤ4に属する各デバイス等との間で情報の送受信を行うための通信インタフェースと、タッチパネルやキーボード等の入力装置や、モニタ等の出力装置との間で情報の送受信を行うための入出力インタフェースとから構成される。
記憶部13は、ハードディスクやフラッシュメモリ、RAM(Random Access Memory)等により構成される。
この記憶部13には、テストケースDB(Test case database)131、コードパターンDB132、および設備リソースDB133が記憶されるとともに、制御部11の各機能を実行させるためのプログラム(オフロードプログラム)や、制御部11の処理に必要な情報(例えば、中間言語ファイル(Intermediate file)134)が一時的に記憶される。
テストケースDB131には、性能試験項目が格納される。テストケースDB131は、性能試験項目に対応した、価格(例えば、IoTサービスの課金情報)、性能(アクセラレータの計算リソース)等のデータを格納する。
コードパターンDB132には、FPGAにオフロード可能な処理のライブラリ呼び出しや機能ブロックと、オフロードするFPGAの処理ロジックをOpenCLやHDLで記述したコードを、登録している。
設備リソースDB133には、ネットワークやコンピュータの設備などのリソース情報を蓄積する。設備リソースDB133を参照することで、ネットワークやコンピュータの設備などのリソースを割り当てることができる。また、分散システムや記憶装置等のリソースを仮想化技術によって一つのリソースとみなし、必要な時に必要な分だけオンデマンドでリソースを割り当てることができる。
検証用マシン14は、検証環境用としてのCPU・GPU・FPGA(アクセラレータ)・IoT GWである。検証用マシン14は、後記検証環境用性能測定部119が行う検証環境で、適切なコードパターン生成時の性能測定のために用いられる。
運用装置15は、本番環境としてのユーザ宅のHome GWやそれがつながるエッジルータ等である。運用装置15は、本番環境配置後に、後記本番環境性能測定テスト実行部123が実際にどのくらいの性能が出るかを見せる性能測定のために用いられる。
<制御部11>
制御部11は、オフロードサーバ1全体の制御を司る環境適応機能部である。制御部11は、例えば、記憶部13に格納されたプログラム(オフロードプログラム)を不図示のCPU(Central Processing Unit)が、RAMに展開し実行することにより実現される。
制御部11は、アプリケーションコード指定部(Specify application code)111と、アプリケーションコード分析部(Analyze application code)112と、データ転送指定部113と、オフロード処理指定部114と、オフロードパターン作成部115(コード変換部)と、リソース量計算部116(リソース量設定部)と、リソース量指定部117(リソース量設定部)と、配置先計算部118(配置場所選択部)と、検証環境用性能測定部119と、実行ファイル作成部120と、本番環境配置部(Deploy final binary files to production environment)121と、本番環境性能測定テスト抽出実行部(Extract performance test cases)122と、本番環境性能測定テスト実行部(Run performance test cases automatically)123と、再構成必要性定期チェック部124と、再構成シミュレーション試算部125と、再構成実行部126と、ユーザ提供部(Provide price and performance to a user to judge)127と、を備える。
制御部11は、環境適応機能部として、後記する、コード変換ステップ、リソース量設定ステップ、配置場所選択ステップ、性能測定ステップ、性能測定テストステップのいずれか一つ以上のステップを実行する。
<アプリケーションコード指定部111>
ユーザは動作させたいアプリケーションコードと利用を想定したテストケース、要望する性能とコストを、アプリケーションコード指定部111に指定する。アプリケーションコード指定部111は、入力されたアプリケーションコードの指定を行う。具体的には、アプリケーションコード指定部111は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。
<アプリケーションコード分析部112>
アプリケーションコード分析部112は、アプリケーションのコードを分析するアプリケーションコード分析ステップを実行する。アプリケーションコード分析部112は、処理機能のソースコードを分析し、ループ文や変数の参照関係、処理する機能ブロック(FFT:Fast Fourier Transform処理)等、コードの構造を把握する。
<データ転送指定部113>
データ転送指定部113は、アプリケーションのループ文の中で用いられる変数の参照関係を分析し、ループ外でデータ転送してよいデータについては、ループ外でのデータ転送を明示的に指定する明示的指定行(#pragma acc data copyin/copyout/copy(a[…]) ただし、変数a)を用いたデータ転送指定を行う。
データ転送指定部113は、CPUからGPUへのデータ転送を明示的に指定する明示的指定行(#pragma acc data copyin (a[…]))と、GPUからCPUへのデータ転送を明示的に指定する明示的指定行(#pragma acc data copyout (a[…]))と、同じ変数に関してCPUからGPUへの転送とGPUからCPUへの転送とが重なる場合、データコピーの往復をまとめて明示的に指定する明示的指定行(#pragma acc data copy(a[…]))と、を用いたデータ転送指定を行う。
データ転送指定部113は、CPUプログラム側で定義した変数とGPUプログラム側で参照する変数が重なる場合、CPUからGPUへのデータ転送の指示を行い、データ転送を指定する位置を、GPU処理するループ文かそれより上位のループ文で、該当変数の設定、定義を含まない最上位のループとする。また、データ転送指定部113は、GPUプログラム側で設定した変数とCPUプログラム側で参照する変数とが重なる場合、GPUからCPUへのデータ転送の指示を行い、データ転送を指定する位置を、GPU処理するループ文か、それより上位のループ文で、該当変数の参照、設定、定義を含まない最上位のループとする。
<オフロード処理指定部114>
オフロード処理指定部114は、アプリケーションのループ文(繰り返し文)や特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップを実行し、各ループ文に対して、アクセラレータにおける並列処理指定文を指定してコンパイルする。
具体的には、オフロード処理指定部114は、機能ブロック処理、ライブラリ呼び出しを含むアプリケーションの処理構造から、コードパターンDB132を参照して、機能ブロック処理、ライブラリ呼び出しを含むFPGAにオフロード可能な処理を特定し、コードパターンDBからオフロードに該当する中間言語の定義情報を、アプリケーションソースコードに置換する。
オフロード処理指定部114は、オフロード可能部抽出部(Extract offloadable area)114aと、中間言語ファイル出力部(Output intermediate file)114bと、を備える。
オフロード可能部抽出部114aは、ループ文やFFT等、GPU・FPGAにオフロード可能な処理を特定し、オフロード処理に応じた中間言語を抽出する。オフロード可能部抽出部114aは、アプリケーションコードの並列処理可能なループ文やFFT処理の機能ブロック、ライブラリ呼び出し等のオフロード可能な処理をコードパターンDB132を参照して特定し、オフロード先に応じた中間言語(OpenCL等)を抽出する。
中間言語ファイル出力部114bは、抽出した中間言語ファイル134を出力する。中間言語抽出は、一度で終わりでなく、適切なオフロード領域探索のため、実行を試行して最適化するため反復される。なお、中間言語抽出は一度で終わりでなく、適切なオフロード領域探索のため、実行試行して最適化するため反復(例えば、GAの20世代、100回試行など)される。
<オフロードパターン作成部115>
オフロードパターン作成部115は、配置先環境に合わせたコード変換であるコード変換ステップを実行する。本実施形態では、オフロードパターン作成部115は、コンパイルエラーが出るループ文(繰り返し文)に対して、オフロード対象外とするとともに、コンパイルエラーが出ない繰り返し文に対して、並列処理するかしないかの指定を行うオフロードパターンを作成するオフロードパターン作成ステップを実行する。
<リソース量計算部116>
リソース量計算部116は、配置先環境に合わせたリソース量の設定を行う。具体的には、リソース量計算部116は、アプリケーションテストケースの処理時間から、CPUとオフロード先の処理時間が同等のオーダーになるように、CPUとオフロード先のリソース比を定め、前記リソース比を決定後は、想定するテストケースの処理性能が、要求性能およびコスト要求を満たすように前記リソース比はキープしつつ、リソース量を設定であるリソース量設定ステップを実行する。
図4を参照して、リソース量計算部116の機能を説明する。リソース量計算部116は、図4のステップS21,S22のコードパターンを決定後、適切なリソース量の設定を行う。具体的には、図4のステップS21,S22の検証環境性能測定で取得される、想定するテストケースの処理時間の中で、CPU処理時間とGPU等のCPU以外ハードウェアの処理時間を分析し、適切なリソース比を定める。上記リソース比は、CPUとGPU等ハードウェアの確保するリソースの比である。例えば、リソースの比は、vCPUコア:仮想GPU=4:1が適切であるとする。次に、リソース量計算部116は、ユーザの要望する性能、コストと適切なリソース比を鑑みて、実際に確保するリソース量を定める。例えば、リソース量は、vCPUコアが「8」で仮想GPUが「2」の場合、性能およびコストを満たす量であるとする。
このように、リソース量計算部116は、まずリソース比を定め、その上でリソース比を鑑みて、実際に確保するリソース量を定める。これにより、CPUとオフロード先のリソース比を定めて、要求性能およびコスト要求を満たした上で、リソース量を設定することができる。
<リソース量指定部117>
リソース量指定部117は、リソース量計算部116で計算したリソース量を実行ファイルに指定する。
<配置先計算部118>
配置先計算部118は、オフロードパターン作成部115がコード変換した変換コードを、リソース量計算部116が計算したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップを実行する。
具体的には、配置先計算部118は、アプリケーションテストケースの結果から、アプリケーションを配置した際の計算量と発生トラフィックを算出し、クラウド、エッジ、Home GWを含むリンク関係をモデル化し、アプリケーションを特定のノードに配置した際に、コストが要求条件に収まることを制約条件に、処理遅延および/またはスループットの性能を最大化する配置、あるいは性能が要求条件を満たす形でコストが最低になる配置のいずれかを線形計画手法を用いて計算する。
図4を参照して、配置先計算部118の機能を説明する。配置先計算部118は、図4のステップS21,S22で定めたコードパターン(図2のコードパターンDB132に格納されている)の実行ファイルを、図4のステップS14,S15で定めたリソース量を確保して配置する際に、性能およびコストが適切になる場所を計算し配置先を決める。配置先計算部118は、実行するアプリケーションの想定するテストケースの特性、設備リソースDB133(図2参照)の情報から、性能とコストが適切になる配置場所を計算する。
例えば、IoTカメラの画像情報を分析して不審者を見つける処理を、0.5sec以内の遅延で行いたいような場合は、IoTカメラに近いエッジサーバを特定して、配置する。ここで、配置したい場所には、リソース量制限から、必要なリソースを確保できない場合等は、リソース量や場所を再調整するため、図4のステップS14に処理を戻す場合がある。
<検証環境用性能測定部119>
検証環境用性能測定部119は、オフロードパターンのアプリケーションをコンパイルして、検証用マシン14に配置し、アクセラレータにオフロードした際の性能測定用処理である検証環境用性能測定ステップを実行する。
検証環境用性能測定部119は、バイナリファイル配置部(Deploy binary files)116aを備える。バイナリファイル配置部119aは、検証環境用として、GPUやFPGA、IoTデバイス用GW等を備えた検証環境用である検証用マシン14に、中間言語から導かれる実行ファイルをデプロイ(配置)する。
検証環境用性能測定部119は、GPUやFPGAを備えた検証環境(例えば、通信事業者の実験室等)で、検証用マシン14を用いて、for文のGPU処理パターンを試行錯誤する際の性能測定を行う。
具体的には、検証環境用性能測定部119は、配置したファイルを起動し、想定するテストケースを実行して、オフロードした際の性能を測定するとともに、性能測定結果を、オフロード可能部抽出部114aに戻す。この場合、オフロード可能部抽出部114aは、別のオフロードパターン抽出を行い、中間言語ファイル出力部114bは、抽出された中間言語をもとに、性能測定を試行する(後記図4の符号e参照)。
上記検証環境での性能測定を繰り返し、最終的に配置するコードパターンを決定する。
ここで、オフロードパターン作成部115による配置先環境に合わせたコード変換であるコード変換ステップと、検証環境用性能測定部119による、コード変換されたアプリケーションをコンパイルして、検証用マシン14に配置しアクセラレータにオフロードした際の検証環境用性能測定ステップと、を反復する。すなわち、検証環境用性能測定は、コード変換と繰り返すように反復される。
<実行ファイル作成部120>
実行ファイル作成部120は、所定回数繰り返された、性能測定結果をもとに、複数のオフロードパターンから最高処理性能のオフロードパターンを選択し、最高処理性能のオフロードパターンをコンパイルして実行ファイルを作成する実行ファイル作成ステップを実行する。
<本番環境配置部121>
本番環境配置部121は、作成した実行ファイルを、ユーザ向けの本番環境に配置する(「最終バイナリファイルの本番環境への配置」)。本番環境配置部121は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境に配置(デプロイ)する本番環境配置ステップを実行する。
<本番環境性能測定テスト抽出部122>
本番環境性能測定テスト抽出部122は、実行ファイル配置後、テストケースDB131から性能試験項目を抽出する(「最終バイナリファイルの本番環境への配置」)。
<本番環境性能測定テスト実行部123>
本番環境性能測定テスト実行部123は、実行ファイル配置後、ユーザに性能を示すため、本番環境性能測定テスト抽出部122が抽出した性能試験項目を、運用装置15を用いて自動実行する(「最終バイナリファイルの本番環境への配置」)。ここで、運用装置15は、本番環境としてのユーザ宅のHome GWやそれがつながるエッジルータ等である。本番環境性能測定テスト実行部123は、本番環境(ユーザ宅のHome GWやそれがつながるエッジルータ等)に実行ファイルを配置後に、性能測定を実行してその結果をユーザに見せる。
図4を参照して、本番環境性能測定テスト抽出部122の機能を説明する。本番環境性能測定テスト抽出部122は、図4のステップS15で定めた商用環境配置場所に、図4のステップS21,S22で定めたコードパターンの実行ファイルを、図4のステップS14で定めたリソース量を確保して配置すると、期待通りの動作となるかを動作検証する。具体的には、ユーザが指定した想定テストケースや、テストケースDB131に保持されているアプリケーションリグレッションテストケースを用いて、動作検証する。この際に、想定テストケースの商用環境での実際の性能を、確保した全リソースのスペックやコストも含めて、ユーザに提示し、ユーザにサービス開始判断をしてもらい、OKの場合にアプリケーションの運用を開始する。
<再構成必要性定期チェック部124>
再構成必要性定期チェック部124は、再構成必要性を定期的にチェックする。
<再構成シミュレーション試算部125>
再構成シミュレーション試算部125は、再構成必要性がある場合、再構成をシミュレーション試算する。
図4を参照して、再構成シミュレーション試算部125の機能を説明する。再構成シミュレーション試算部125は、図4のステップS23で開始したアプリケーション運用にて、リクエスト特性変化等で当初期待していた性能が出ない場合に、ソフトウェア設定、ソフトウェア/ハードウェア構成を再構成する。ソフトウェア設定とは、リソース量や配置場所の再変更を意味しており、例えば、CPUとGPUの処理時間バランスが悪い場合に、リソースの比を変更したり、リクエスト量が増え応答時間が劣化してきた場合に、リソースの比はキープして量を増やす。あるいは、配置する場所を別のクラウドに変えるなどである。ソフトウェア/ハードウェア構成とは、コード変換から行い、GPUであればオフロード処理するロジックを変更したり、FPGAのようにハードウェアロジックを運用中に変更できる場合はハードウェアロジックを再構成することを意味している。例えば、後者で、SQL DBとNo SQLのDBを両運用している場合に、元々SQLリクエストが多かったが、No SQLリクエストが一定よりも増えてきた場合に、No SQLをアクセラレートするFPGAにロジックを再構成する。
ここで図4のステップS25で、環境適応に必要な、コード変換、リソース量調整、配置場所調整、運用中再構成を一括して行う処理フローを説明したが、行いたい処理だけ切出すことも可能である。例えば、GPU向けにコード変換だけ行いたい場合は、図4のステップS11-S13だけ行い、環境適応機能部11や検証環境等必要な部分だけ利用すればよい。
<再構成実行部126>
再構成実行部126は、アプリケーション運用開始後に、当初期待していた性能が出ない場合に、ソフトウェア設定を再構成する。
再構成実行部126は、再構成先構築部126aと、マイグレーション処理部126bと、を備える。
再構成先構築部126aは、ソフトウェア設定の変更において、リソース量設定、配置場所選択の試行計算を周期的、または、性能がある閾値以下となった場合に試行模擬し、性能向上やコスト低減度合を計算し、リソース量の変更や配置場所の変更で性能やコストが改善できる見込みがある場合に、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する場合に、リソースを変更する再構成先構築ステップを実行する。
マイグレーション処理部126bは、配置場所変更の際、移行先環境を複製して、そこに移行元からアプリケーション実行環境をマイグレーションするマイグレーション処理ステップを実行する。
再構成実行部126は、コード変換処理を、周期的、または、性能がある閾値以下となった場合に試行模擬し、コード変換して、GPUオフロードのソフトロジック変更やFPGAのハードロジックの変更で、性能やコストが改善できる見込みがある場合は、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する際に、GPUオフロードするソフトロジックの変更を行う。
ソフトウェア構成の変更の場合は、マイグレーション処理部126bが、更新する実行ファイルを起動する環境を複製後、アプリケーションのデータのマイグレーションを行い、FPGAのハードロジックを変更する場合は、マイグレーション処理部126bが、移行先にハードロジックを構成済みのFPGAを準備しFPGAを制御するコンテナ等をマイグレーションを行う、もしくは、再構成実行部126が、FPGAのハードロジックを再構成する。
<ユーザ提供部127>
ユーザ提供部127は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する(「価格・性能等の情報のユーザへの提供」)。テストケースDB131には、性能試験項目に対応した、価格、性能等のデータが格納されている。ユーザ提供部127は、テストケースDB131に格納された試験項目に対応した、価格、性能等のデータを読み出して、上記性能試験結果と共にユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、IoTサービスの課金利用開始を判断する。ここで、本番環境への一括デプロイには、非特許文献3の既存技術を、また、性能自動試験には、非特許文献4の既存技術を用いればよい。
<性能測定>
上述したように、制御部11(環境適応機能部)が行う性能測定は2種類ある。
(1)検証環境で、適切なコードパターン生成時の性能測定
GPUとかFPGAを備えた検証環境(通信事業者の実験室等)で、for文のGPU処理パターンを試行錯誤する際の性能測定。本実施形態では、検証環境用性能測定部119が検証用マシン14を用いて行う。
(2)本番環境配置後に、実際にどのくらいの性能が出るかを見せるための性能測定
本番環境(ユーザ宅のHGWやそれがつながるエッジルータ等)に実行ファイルを配置後に、性能測定してその結果をユーザに見せる。本実施形態では、本番環境性能測定テスト抽出部122が、実行ファイル配置後、テストケースDB131から性能試験項目を抽出し、本番環境性能測定テスト実行部123が運用装置15を用いて行う。
[遺伝的アルゴリズムの適用]
オフロードサーバ1は、オフロードの最適化にGAを用いることができる。GAを用いた場合のオフロードサーバ1の構成は下記の通りである。
すなわち、オフロード処理指定部114は、遺伝的アルゴリズムに基づき、コンパイルエラーが出ないループ文(繰り返し文)の数を遺伝子長とする。オフロードパターン作成部115は、アクセラレータ処理をする場合を1または0のいずれか一方、しない場合を他方の0または1として、アクセラレータ処理可否を遺伝子パターンにマッピングする。
オフロードパターン作成部115は、遺伝子の各値を1か0にランダムに作成した指定個体数の遺伝子パターンを準備し、検証環境用性能測定部119は、各個体に応じて、アクセラレータにおける並列処理指定文を指定したアプリケーションコードをコンパイルして、検証用マシン14に配置する。検証環境用性能測定部119は、検証用マシン14において性能測定用処理を実行する。
ここで、検証環境用性能測定部119は、途中世代で、以前と同じオフロードパターンの遺伝子が生じた場合は、当該オフロードパターンに該当するアプリケーションコードのコンパイル、および、性能測定はせずに、性能測定値としては同じ値を使う。
また、検証環境用性能測定部119は、コンパイルエラーが生じるアプリケーションコード、および、性能測定が所定時間で終了しないアプリケーションコードについては、タイムアウトの扱いとして、性能測定値を所定の時間(長時間)に設定する。
実行ファイル作成部120は、全個体に対して、性能測定を行い、処理時間の短い個体ほど適合度が高くなるように評価する。実行ファイル作成部120は、全個体から、適合度が所定値(例えば、全個数の上位n%、または全個数の上位m個 n,mは自然数)より高いものを性能の高い個体として選択し、選択された個体に対して、交叉、突然変異の処理を行い、次世代の個体を作成する。実行ファイル作成部120は、指定世代数の処理終了後、最高性能のオフロードパターンを解として選択する。
以下、上述のように構成されたオフロードサーバ1のソフトウェア最適配置方法について説明する。
[最適配置動作]
図3は、オフロードサーバ1のソフトウェア最適配置処理を示すフローチャートである。
ステップS1で制御部11のアプリケーションコード分析部112は、アプリケーションの処理機能のソースコードを分析し、ループ文や変数の参照関係、処理する機能ブロック等、コードの構造を把握する。
ステップS2でオフロード処理指定部114は、アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定する。オフロード処理指定部114は、各ループ文に対して、アクセラレータにおける並列処理指定文を指定してコンパイルする。
ステップS3でオフロードパターン作成部115は、配置先環境に合わせたコード変換をする。
ステップS4でリソース量計算部116は、配置先環境に合わせたリソース量の設定を行う。リソース量計算部116は、アプリケーションテストケースの処理時間から、CPUとオフロード先の処理時間が同等のオーダーになるように、CPUとオフロード先のリソース比を定め、リソース比を決定後は、想定するテストケースの処理性能が、要求性能およびコスト要求を満たすようにリソース比はキープしつつ、リソース量を設定する。
ステップS5で配置先計算部118は、オフロードパターン作成部115がコード変換した変換コードを、リソース量計算部116およびリソース量指定部117が設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する。具体的には、配置先計算部118は、アプリケーションテストケースの結果から、アプリケーションを配置した際の計算量と発生トラフィックを算出し、クラウド、エッジ、Home GWを含むリンク関係をモデル化し、アプリケーションを特定のノードに配置した際に、コストが要求条件に収まることを制約条件に、処理遅延および/またはスループットの性能を最大化する配置、あるいは性能が要求条件を満たす形でコストが最低になる配置のいずれかを最適化手法(例えば、線形計画手法等)を用いて計算する。
ステップS6で検証環境用性能測定部119は、コード変換されたアプリケーションをコンパイルして、検証用マシン14に配置し、アクセラレータにオフロードした際の性能測定用処理を実行する。
ステップS7で制御部(環境適応機能部)11は、コード変換ステップ、リソース量設定ステップ、配置場所選択ステップ、性能測定ステップのいずれか一つ以上のステップを実行する環境適応処理を行い本フローの処理を終了する。
[自動オフロード動作]
本実施形態のオフロードサーバ1を、ユーザアプリケーションロジックの、GPU自動オフロード技術に適用した例について説明する。
図4は、オフロードサーバ1のGAを用いた自動オフロード処理を示す図である。
図4に示すように、オフロードサーバ1は、制御部(環境適応機能部)11と、テストケースDB131と、コードパターンDB132と、設備リソースDB133と、中間言語ファイル134と、検証用マシン14と、を有している。
オフロードサーバ1は、ユーザが利用するアプリケーションコード(Application code)130を取得する。
ユーザは、OpenIoTリソース(OpenIoTResources)15を利用する。OpenIoTリソース15は、例えば、各種デバイス(Device)としてIoT GW151、CPU-GPUを有する装置152、CPU-FPGAを有する装置153、CPUを有する装置154である。オフロードサーバ1は、機能処理をCPU-GPUを有する装置152、CPU-FPGAを有する装置153のアクセラレータに自動オフロードする。
以下、図4のステップ番号を参照して各部の動作を説明する。
<ステップS11:Specify application code>
ステップS11において、アプリケーションコード指定部111(図2参照)は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。具体的には、アプリケーションコード指定部111は、入力されたアプリケーションコードの指定を行う。
<ステップS12:Analyze application code>
ステップS12において、アプリケーションコード分析部112(図2参照)は、処理機能のソースコードを分析し、ループ文やFFTライブラリ呼び出し等の構造を把握する。
<ステップS13:Extract offloadable area>
ステップS13において、オフロード処理指定部114(図2参照)は、アプリケーションのループ文(繰り返し文)を特定し、各繰り返し文に対して、アクセラレータにおける並列処理指定文を指定してコンパイルする。具体的には、オフロード可能部抽出部114a(図2参照)は、ループ文やFFT等、GPU・FPGAにオフロード可能な処理を特定し、オフロード処理に応じた中間言語を抽出する。
<ステップS14:Output intermediate file>
ステップS14において、中間言語ファイル出力部114b(図2参照)は、中間言語ファイル134を出力する。中間言語抽出は、一度で終わりでなく、適切なオフロード領域探索のため、実行を試行して最適化するため反復される。
<ステップS15:Compile error>
ステップS15において、オフロードパターン作成部115(図2参照)は、コンパイルエラーが出るループ文に対して、オフロード対象外とするとともに、コンパイルエラーが出ない繰り返し文に対して、並列処理するかしないかの指定を行うオフロードパターンを作成する。
<ステップS21:Deploy binary files>
ステップS21において、バイナリファイル配置部119a(図2参照)は、GPU・FPGA・IoT GWを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイする。
<ステップS22:Measure performances>
ステップS22において、検証環境用性能測定部119(図2参照)は、配置したファイルを実行し、オフロードした際の性能を測定する。
オフロードする領域をより適切にするため、この性能測定結果は、オフロード可能部抽出部114aに戻され、オフロード可能部抽出部114aが、別パターンの抽出を行う。そして、中間言語ファイル出力部114bは、抽出された中間言語をもとに、性能測定を試行する(図4の符号a参照)。
図4の符号a,bに示すように、制御部11は、上記ステップS12乃至ステップS22を繰り返し実行する。制御部11の自動オフロード機能をまとめると、下記である。すなわち、オフロード処理指定部114は、アプリケーションのループ文(繰り返し文)を特定し、各繰返し文に対して、GPUでの並列処理指定文を指定して、コンパイルする。そして、オフロードパターン作成部115は、コンパイルエラーが出るループ文を、オフロード対象外とし、コンパイルエラーが出ないループ文に対して、並列処理するかしないかの指定を行うオフロードパターンを作成する。そして、バイナリファイル配置部119aは、該当オフロードパターンのアプリケーションをコンパイルして、検証用マシン14に配置し、検証環境用性能測定部119が、検証用マシン14で性能測定用処理を実行する。実行ファイル作成部120は、所定回数繰り返された、性能測定結果をもとに、複数のオフロードパターンから最高処理性能のパターンを選択し、選択パターンをコンパイルして実行ファイルを作成する。
<ステップS23:Deploy final binary files to production environment>
ステップS23において、本番環境配置部121は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
<ステップS24:Extract performance test cases and run automatically>
ステップS24において、本番環境性能測定テスト抽出部122は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースDB131から抽出し、抽出した性能試験を自動実行する。
<ステップS25:Provide price and performance to a user to judge>
ステップS25において、ユーザ提供部127は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、IoTサービスの課金利用開始を判断する。
上記ステップS11~ステップS25は、ユーザのIoTサービス利用のバックグラウンドで行われ、例えば、仮利用の初日の間に行う等を想定している。また、コスト低減のためにバックグラウンドで行う処理は、機能配置最適化とGPU・FPGAオフロードのみを対象としてもよい。
上記したように、オフロードサーバ1の制御部(環境適応機能部)11は、機能処理のオフロードのため、ユーザが利用するアプリケーションのソースコードから、オフロードする領域を抽出して中間言語を出力する(ステップS11~ステップS15)。制御部11は、中間言語から導かれる実行ファイルを、検証用マシン14に配置実行し、オフロード効果を検証する(ステップS21~ステップS22)。検証を繰り返し、適切なオフロード領域を定めたのち、制御部11は、実際にユーザに提供する本番環境に、実行ファイルを配置(デプロイ)し、サービスとして提供する(ステップS23~ステップS25)。
[GAを用いたGPU自動オフロード]
GPU自動オフロードは、GPUに対して、図4のステップS12~ステップS22を繰り返し、最終的にステップS23でデプロイするオフロードコードを得るための処理である。
GPUは、一般的にレイテンシーは保証しないが、並列処理によりスループットを高めることに向いたデバイスである。IoTで動作させるアプリケーションは、多種多様である。IoTデータの暗号化処理や、カメラ映像分析のための画像処理、大量センサデータ分析のための機械学習処理等が代表的であり、それらは、繰り返し処理が多い。そこで、アプリケーションの繰り返し文をGPUに自動でオフロードすることでの高速化を狙う。
しかし、従来技術で記載の通り、高速化には適切な並列処理が必要である。特に、GPUを使う場合は、CPUとGPU間のメモリ転送のため、データサイズやループ回数が多くないと性能が出ないことが多い。また、メモリデータ転送のタイミング等により、並列高速化できる個々のループ文(繰り返し文)の組み合わせが、最速とならない場合等がある。例えば、10個のfor文(繰り返し文)で、1番、5番、10番の3つがCPUに比べて高速化できる場合に、1番、5番、10番の3つの組み合わせが最速になるとは限らない等である。
適切な並列領域指定のため、PGIコンパイラを用いて、for文の並列可否を試行錯誤して最適化する試みがある。しかし、試行錯誤には多くの稼働がかかり、IoTサービスとして提供する際に、ユーザの利用開始が遅くなり、コストも上がってしまう問題がある。
そこで、本実施形態では、並列化を想定していない汎用プログラムから、自動で適切なオフロード領域を抽出する。このため、最初に並列可能for文のチェックを行い、次に並列可能for文群に対してGAを用いて検証環境で性能検証試行を反復し適切な領域を探索すること、を実現する。並列可能for文に絞った上で、遺伝子の部分の形で、高速化可能なオフロードパターンを保持し組み換えていくことで、取り得る膨大なオフロードパターンから、効率的に高速化可能なパターンを探索できる。
[Simple GAによる制御部(環境適応機能部)11の探索イメージ]
図5は、Simple GAによる制御部(環境適応機能部)11の探索イメージを示す図である。図5は、処理の探索イメージと、for文の遺伝子配列マッピングを示す。
GAは、生物の進化過程を模倣した組合せ最適化手法の一つである。GAのフローチャートは、初期化→評価→選択→交叉→突然変異→終了判定となっている。
本実施形態では、GAの中で、処理を単純にしたSimple GAを用いる。Simple GAは、遺伝子は1、0のみとし、ルーレット選択、一点交叉、突然変異は1箇所の遺伝子の値を逆にする等、単純化されたGAである。
<初期化>
初期化では、アプリケーションコードの全for文の並列可否をチェック後、並列可能for文を遺伝子配列にマッピングする。GPU処理する場合は1、GPU処理しない場合は0とする。遺伝子は、指定の個体数Mを準備し、1つのfor文にランダムに1、0の割り当てを行う。
具体的には、制御部(環境適応機能部)11(図2参照)は、ユーザが利用するアプリケーションコード(Application code)130(図4参照)を取得し、図5に示すように、アプリケーションコード130のコードパターン(Code patterns)141からfor文の並列可否をチェックする。図5に示すように、コードパターン141から5つのfor文が見つかった場合(図5の符号c参照)、各for文に対して1桁、ここでは5つのfor文に対し5桁の1または0をランダムに割り当てる。例えば、CPUで処理する場合0、GPUに出す場合1とする。ただし、この段階では1または0をランダムに割り当てる。
遺伝子長に該当するコードが5桁であり、5桁の遺伝子長のコードは2=32パターン、例えば10001、10010、…となる。なお、図5では、コードパターン141中の丸印(○印)をコードのイメージとして示している。
<評価>
評価では、デプロイとパフォーマンスの測定(Deploy & performance measurement)を行う(図5の符号d参照)。すなわち、検証環境用性能測定部119(図2参照)は、遺伝子に該当するコードをコンパイルして検証用マシン14にデプロイして実行する。検証環境用性能測定部119は、ベンチマーク性能測定を行う。性能が良いパターン(オフロードパターン)の遺伝子の適合度を高くする。
<選択>
選択では、適合度に基づいて、高性能コードパターンを選択(Select high performance code patterns)する(図5の符号e参照)。検証環境用性能測定部119(図2参照)は、適合度に基づいて、高適合度の遺伝子を、指定の個体数選択する。本実施形態では、適合度に応じたルーレット選択および最高適合度遺伝子のエリート選択を行う。
図5では、選択されたコードパターン(Select code patterns)142の中の丸印(○印)が、3つに減ったことを探索イメージとして示している。
<交叉>
交叉では、一定の交叉率Pcで、選択された個体間で一部の遺伝子をある一点で交換し、子の個体を作成する。
ルーレット選択された、あるパターン(オフロードパターン)と他のパターンとの遺伝子を交叉させる。一点交叉の位置は任意であり、例えば上記5桁のコードのうち3桁目で交叉させる。
<突然変異>
突然変異では、一定の突然変異率Pmで、個体の遺伝子の各値を0から1または1から0に変更する。
また、局所解を避けるため、突然変異を導入する。なお、演算量を削減するために突然変異を行わない態様でもよい。
<終了判定>
図5に示すように、クロスオーバーと突然変異後の次世代コードパターンの生成(Generate next generation code patterns after crossover & mutation)を行う(図5の符号f参照)。
終了判定では、指定の世代数T回、繰り返しを行った後に処理を終了し、最高適合度の遺伝子を解とする。
例えば、性能測定して、速い3つ10010、01001、00101を選ぶ。この3つをGAにより、次の世代は、組み換えをして、例えば新しいパターン(オフロードパターン)10101(一例)を作っていく。このとき、組み換えをしたパターンに、勝手に0を1にするなどの突然変異を入れる。上記を繰り返して、一番早いパターンを見付ける。指定世代(例えば、20世代)などを決めて、最終世代で残ったパターンを、最後の解とする。
<デプロイ(配置)>
最高適合度の遺伝子に該当する、最高処理性能のオフロードパターンで、本番環境に改めてデプロイして、ユーザに提供する。
<補足説明>
GPUにオフロードできないfor文(ループ文;繰り返し文)が相当数存在する場合について説明する。例えば、for文が200個あっても、GPUにオフロードできるものは30個くらいである。ここでは、エラーになるものを除外し、この30個について、GAを行う。
OpenACCには、ディレクティブ #pragma acc kernelsで指定して、GPU向けバイトコードを抽出し、実行によりGPUオフロードを可能とするコンパイラがある。この#pragmaに、for文のコマンドを書くことにより、そのfor文がGPUで動くか否かを判定することができる。
例えばC/C++を使った場合、C/C++のコードを分析し、for文を見付ける。for文を見付けると、OpenACCで並列処理の文法である #pragma acc kernelsを使ってfor文に対して書き込む。詳細には、何も入っていない #pragma acc kernels に、一つ一つfor文を入れてコンパイルして、エラーであれば、そのfor文はそもそも、GPU処理できないので、除外する。このようにして、残るfor文を見付ける。そして、エラーが出ないものを、長さ(遺伝子長)とする。エラーのないfor文が5つであれば、遺伝子長は5であり、エラーのないfor文が10であれば、遺伝子長は10である。なお、並列処理できないものは、前の処理を次の処理に使うようなデータに依存がある場合である。
以上が準備段階である。次にGA処理を行う。
for文の数に対応する遺伝子長を有するコードパターンが得られている。始めはランダムにオフロードパターン10010、01001、00101、…を割り当てる。GA処理を行い、コンパイルする。その時に、オフロードできるfor文であるにもかかわらず、エラーがでることがある。for文が階層になっている(どちらか指定すればGPU処理できる)場合である。この場合は、エラーとなったfor文は、残してもよい。具体的には、処理時間が多くなった形にして、タイムアウトさせる方法がある。
検証用マシン14でデプロイして、ベンチマーク、例えば画像処理であればその画像処理でベンチマークする、その処理時間が短い程、適応度が高いと評価する。例えば、処理時間の逆数、処理時間10秒かかるものは1、100秒かかるものは0.1、1秒のものは10とする。
適応度が高いものを選択して、例えば10個のなかから、3~5個を選択して、それを組み替えて新しいコードパターンを作る。作成途中で、前と同じものができる場合がある。この場合、同じベンチマークを行う必要はないので、前と同じデータを使う。本実施形態では、コードパターンと、その処理時間は記憶部13に保存しておく。
以上で、Simple GAによる制御部(環境適応機能部)11の探索イメージについて説明した。次に、データ転送の一括処理手法について述べる。
[データ転送の一括処理手法]
上述したように、遺伝的アルゴリズムを用いることで、GPU処理で効果のある並列処理部を自動チューニングしている。しかしながら、CPU-GPUメモリ間のデータ転送によっては高性能化できないアプリケーションもあった。このため、スキルが無いユーザがGPUを使ってアプリケーションを高性能化することは難しいし、自動並列化技術等を使う場合も並列処理可否の試行錯誤が必要であり、高速化できない場合があった。
そこで、本実施形態では、より多くのアプリケーションを、自動でGPUで高性能化することを狙うとともに、GPUへのデータ転送回数を低減できる技術を提供する。
次に、本実施形態のオフロードサーバ1によるデータ転送の一括処理手法について説明する。
図6および図7は、本実施形態の環境適応機能部が処理するアプリケーションのソースコードのループ文を示す図であり、CPUプログラム側で定義した変数とGPUプログラム側で参照する変数が重なる場合の例である。
本実施形態の制御部(環境適応機能部)11(図2参照)は、データ転送指定部113を備えている。
《本実施形態のCPUからGPUへのデータ転送》
本実施形態では、CPUプログラム側で設定、定義した変数とGPUプログラム側で参照する変数が重なる場合は、CPUからGPUへのデータ転送が必要として、データ転送指定を行う。
データ転送を指定する位置は、GPU処理するループ文かそれより上位のループ文で、かつ、該当変数の設定、定義を含まない最上位のループとする(図6参照)。データ転送指示行の挿入位置は、for,do,while等のループの直前に行う。
図6は、CPUからGPUへのデータ転送する場合のループ文において、CPUプログラム側で定義した変数とGPUプログラム側で参照する変数が重なる場合の例である。
図6に示す本実施形態のループ文は、CPUプログラム側で記述され、
(1) ループ〔 for|do|while 〕 {
}
の中に、
(2) ループ〔 for|do|while 〕 {
}
があり、さらにその中に、
(3) ループ〔 for|do|while 〕 {
}
があり、さらにその中に、
(4) ループ〔 for 〕 {
}
がある。
また、(1) ループ〔 for|do|while 〕 {
}で、変数aが設定され、(4) ループ〔 for 〕 {
}で、変数aが参照される。
さらに、(3) ループ〔 for|do|while 〕 {
}で、PGIコンパイラによるfor文等の並列処理可能処理部を、OpenACCのディレクティブ #pragma acc kernels(並列処理指定文)で指定している(詳細後記)。
図6に示す本実施形態のループ文では、図6の符号mに示す位置に、データ転送指示行、ここでは変数aの copyin 節の #pragma acc data copyin(a[…])を挿入する。
上記 #pragma acc data copyin(a[…])は、変数aの設定、定義を含まない最上位のループ(ここでは、(1) ループ〔 for|do|while 〕の中)に指定され、その挿入位置は、for,do,while等のループの直前(ここでは、(2) ループ〔 for|do|while 〕の前)である。
このように、CPUからGPUへのデータ転送において、変数aの copyin 節の #pragma acc data copyin(a[…])を、上述した位置に挿入することによりデータ転送を明示的に指示する。これにより、できるだけ上位のループでデータ転送を一括して行うことができ、ループ毎に毎回データを転送する非効率な転送を避けることができる。
《本実施形態のGPUからCPUへのデータ転送》
本実施形態では、GPUプログラム側で設定した変数とCPUプログラム側で参照、設定、定義する変数または大域変数(グローバル変数:全ての関数から直接アクセスすることができる変数)とが重なる場合は、GPUからCPUへのデータ転送が必要として、データ転送指定を行う。
データ転送を指定する位置は、GPU処理するループ文か、それより上位のループ文で、かつ、該当変数の参照、設定、定義を含まない最上位のループとする(後記図7参照)。データ転送指示行の挿入位置は、for,do,while等のループの直前に行う。
ここで、「設定」まで含めるのは、その設定がif文等で実行されたり、されなかったりするケースを考慮するためである。また、条件にCPU側で「定義」も含めているのは、変数のスコープ外に 展開しないためのガードである。大域変数は、解析対象ソース外で「参照」される可能性があるため、条件に含める。
図7は、GPUからCPUへのデータ転送する場合のループ文において、CPUプログラム側で定義した変数とGPUプログラム側で参照する変数が重なる場合の例である。
図7に示す本実施形態のループ文は、CPUプログラム側で記述され、
(1) ループ〔 for|do|while 〕 {
}
の中に、
(2) ループ〔 for|do|while 〕 {
}
があり、さらにその中に、
(3) ループ〔 for|do|while 〕 {
}
があり、さらにその中に、
(4) ループ〔 for 〕 {
}
がある。
また、(3) ループ〔 for|do|while 〕 {
}で、PGIコンパイラによるfor文等の並列処理可能処理部を、OpenACCのディレクティブ #pragma acc kernels(並列処理指定文)で指定している。
さらに、(4) ループ〔 for 〕 {
}で、変数aが設定され、(2) ループ〔 for|do|while 〕 {
}で、変数aが参照される。
図7に示す本実施形態のループ文では、図7の符号nに示す位置に、データ転送指示行、ここでは変数aの copyout 節の #pragma acc data copyout(a[…])を挿入する。
上記 #pragma acc data copyout(a[…])は、変数aの参照、設定、定義を含まない最上位のループ(ここでは、(1) ループ〔 for|do|while 〕の中)に指定され、その挿入位置は、for,do,while等のループの直前(ここでは、(2) ループ〔 for|do|while 〕の前)である。
上記copyout 動作が実行されるのは、図7の符号oに示すように、ループ終了後である。
このように、GPUからCPUへのデータ転送において、変数aの copyout 節の #pragma acc data copyout(a[…])を、上述した位置に挿入することによりデータ転送を明示的に指示する。これにより、できるだけ上位のループでデータ転送を一括して行うことができ、ループ毎に毎回データを転送する非効率な転送を避けることができる。
《本実施形態のCPUからGPUへのデータ転送と、GPUからCPUへのデータ転送の往復》
同じ変数に関して、CPUからGPUへの転送と、GPUからCPUへの転送が重なる場合は、データコピーの往復にまとめて指示する。
具体的には、前記図6に示す本実施形態のループ文の #pragma acc data copyin(a[…])に代えて、#pragma acc data copy (a[…])を挿入する。
上記 #pragma acc data copy(a[…])は、変数aの設定、定義を含まない最上位のループ(ここでは、(1) ループ〔 for|do|while 〕の中)に指定され、その挿入位置は、for,do,while等のループの直前(ここでは、(2) ループ〔 for|do|while 〕の前)である。
このように、CPUからGPUへのデータ転送と、GPUからCPUへのデータ転送の往復において、変数aの copy 節の #pragma acc data copy(a[…])を、上述した位置に挿入することによりデータ転送を明示的に指示する。また、上記 #pragma acc data copy(a[…])を用いることで、前記図7に示す上記 #pragma acc data copyout(a[…])を挿入を省略することができる。
以上、本実施形態では、できるだけ上位のループでデータ転送を一括して行うように、データ転送を明示的に指示することで、ループ毎に毎回データを転送する非効率な転送を避けることができる。
[GPUオフロード処理]
上述したデータ転送の一括処理手法により、オフロードに適切なループ文を抽出し、非効率なデータ転送を避けることができる。
ただし、上記データ転送の一括処理手法を用いても、GPUオフロードに向いていないプログラムも存在する。効果的なGPUオフロードには、オフロードする処理のループ回数が多いことが必要である。
そこで、本実施形態では、本格的なオフロード処理探索の前段階として、プロファイリングツールを用いて、ループ回数を調査する。プロファイリングツールを用いると、各行の実行回数を調査できるため、例えば、5000万回以上のループを持つプログラムをオフロード処理探索の対象とする等、事前に振り分けることができる。以下、具体的に説明する(前記図5で述べた内容と一部重複する)。
本実施形態では、まず、オフロード処理部を探索するアプリケーションを分析し、for,do,while等のループ文を把握する。次に、サンプル処理を実行し、プロファイリングツールを用いて、各ループ文のループ回数を調査し、一定の値以上のループがあるか否かで、オフロード処理部探索を本格的に行うか否かの判定を行う。
探索を本格的に行うと決まった場合は、GAの処理に入る(前記図5参照)。初期化ステップでは、アプリケーションコードの全ループ文の並列可否をチェックした後、並列可能ループ文をGPU処理する場合は1、しない場合は0として遺伝子配列にマッピングする。遺伝子は、指定の個体数が準備されるが、遺伝子の各値にはランダムに1,0の割り当てをする。
ここで、遺伝子に該当するコードでは、GPU処理すると指定されたループ文内の変数データ参照関係から、データ転送の明示的指示(#pragma acc data copyin/copyout/copy)を追加する。
評価ステップでは、遺伝子に該当するコードをコンパイルして検証用マシンにデプロイして実行し、ベンチマーク性能測定を行う。性能が良いパターンの遺伝子の適合度を高くする。遺伝子に該当するコードは、上述のように、並列処理指示行とデータ転送指示行(例えば、図6の符号l、図7の符号m参照参照)が挿入されている。
選択ステップでは、適合度に基づいて、高適合度の遺伝子を、指定の個体数選択する。本実施形態では、適合度に応じたルーレット選択および最高適合度遺伝子のエリート選択を行う。交叉ステップでは、一定の交叉率Pcで、選択された個体間で一部の遺伝子をある一点で交換し、子の個体を作成する。突然変異ステップでは、一定の突然変異率Pmで、個体の遺伝子の各値を0から1または1から0に変更する。
突然変異ステップまで終わり、次の世代の遺伝子が指定個体数作成されると、初期化ステップと同様に、データ転送の明示的指示を追加し、評価、選択、交叉、突然変異ステップを繰り返す。
最後に、終了判定ステップでは、指定の世代数、繰り返しを行った後に処理を終了し、最高適合度の遺伝子を解とする。最高適合度の遺伝子に該当する、最高性能のコードパターンで、本番環境に改めてデプロイして、ユーザに提供する。
以下、図2に示すオフロードサーバ1の制御部(環境適応機能部)11の動作について、図4を参照して説明する。
<FPGA向けオフロード>
GPUでは高速化は、ループ文等の並列処理が中心であった。一方、FPGAでは、並列処理とパイプライン処理を活用して高速化するのが一般的であり、オフロードの自由度は高いが、機械がオフロード用のロジックを自動生成することは難しいのが現状である。そこで、FPGAのオフロードでは、今までにプログラマーが蓄積したノウハウ(Well-knownパターン)を活かして、大きな単位でオフロードする。
具体的には、図4のステップS11のコード分析で把握した、類似コード検出等を用いたコード機能ブロックが、例えばFFT処理である場合や、ライブラリ呼び出しでFFT処理を呼び出している場合に、FFT処理で既に定義されているFPGAロジックに置換して、オフロードを行う。この置換のために、コードパターンDB132は、FPGAにオフロード可能な処理のライブラリ呼び出しや機能ブロックと、オフロードするFPGAの処理ロジックをOpenCLやHDLで記述したコードを、登録している。制御部(環境適応機能部)11は、コード分析結果と、コードパターンDB132を照合し、オフロード可能な処理を、FPGAにオフロードする処理ロジック記述に置換する。
<リソース量調整>
図4のステップS14,S15のリソース量調整については、まず適切なリソース比を決め、次に性能、コスト要件に合うリソース量に設定する。アプリケーションをCPUとGPUで動作させるようオフロードするコードに、図4のステップS11-S13で変換したとして、コード自体は適切であっても、CPUとオフロード先であるGPUとのリソース量が適切なバランスでない場合は、性能が出ない。例えば、ある処理を行う際に、CPUの処理時間が1000秒,GPUの処理時間が1秒では、CPUがボトルネックとなるっている。非特許文献2では、CPUとGPUを使ってMapReduceフレームワークで処理している際に、CPUとGPUの実行時間が同じになるようMapタスクを配分することで、全体の高性能化を図っている。本実施形態では、リソース比を決める際は、何れかのハードウェアでの処理がボトルネックとなる配置を避けるため、想定するテストケースの処理時間から、リソース量計算部116が、CPUとオフロード先の処理時間が同等のオーダーになるように、リソース比を決定する。
リソース比を決定後は、想定するテストケースの処理性能が、図4のステップS14,S15でユーザが指定した要求性能およびコスト要求を満たすように、リソース量計算部116が、リソース比をキープして、リソース量を決定する。
<配置場所調整>
図4のステップS15の配置場所調整では、性能、コストが適切になる場所を計算し配置先を決める。適切な配置先を決める手法については、最適化計算を用いた手法をとる。配置先を決めるための情報としては、配置するアプリケーションの想定するテストケースの性能情報(処理遅延やスループット)と、システムで利用できる設備リソース情報(クラウド、エッジ、Home GW等の計算リソース、ノード間帯域、およびその既に利用されている量と、利用した際のコスト)がある。
配置先を決定するロジックは、以下のようになる。想定テストケースの性能結果から、アプリケーションを配置した際の計算量と発生トラフィックを算出する。併せて、クラウド、エッジ、Home GW等のリンク関係をモデル化しておく。アプリケーションを特定のノードに配置した際に、コストが要求条件に収まることを制約条件に、処理遅延やスループット等の性能を最大化する配置、あるいは性能が要求条件を満たす形でコストが最低になる配置を、最適化手法(例えば、線形計画手法等)を用いて導く。ここで、アプリケーションが、エッジとクラウドのように分割される場合は、その組み合わせに対して最適計算を行う。
<配置場所調整>
図4のステップS23の動作検証では、図4のステップS12,S13で決まった実行ファイルを図4のステップS14の指定リソース量で図4のステップS15の指定場所に配置した後に、期待通りの動作であることを、性能検証テストケースやリグレッションテストケースを実行することで確認する。性能検証テストケースは、ユーザが指定した想定テストケースをJenkins等の試験自動実行ツールを用いて行い、処理時間やスループット等を測定する。リグレッションテストについては、システムにインストールされるミドルウェアやOS等のソフトウェアの情報を取得して、それらに対応するリグレッションテストをJenkins等を用いて実行する自動検証技術(非特許文献3参照)を用いる。
動作検証の結果として、性能検証テストケースの処理時間やスループット、リグレッションテストの実行結果の情報が、ユーザに提示される。ユーザには合わせて、確保したリソース(仮想マシンスペックや数等)とその価格が提示されており、それら情報を参照してユーザは運用開始を判断する。
<運用中再構成>
アプリケーション運用において、図4のステップS23の運用開始後、リクエスト特性の変化等で当初期待していた性能が出ない場合に、再構成シミュレーション試算部125は、ソフトウェア設定、ソフトウェア/ハードウェア構成を再構成する。再構成の判断は、運用開始前に想定したテストケースでなく、現在の実運用にマッチするテストケースを元に、図4のステップS11-S15のコード変換、リソース量調整、配置場所調整を試行模擬し、性能、コストが、ユーザの期待を満たす場合に、ユーザ提供部127が、再構成をユーザに提案し、ユーザ了承後、再構成する。再構成は、再構成実行部126の再構成先構築部121a(図2参照)が実行する。
<ソフトウェア設定>
ソフトウェア設定の変更は、図4のステップS14,S15の処理を、周期的、または、性能がある閾値以下となった場合に試行模擬し、性能向上やコスト低減度合を計算する。リソース量の変更や配置場所の変更で性能やコストが改善できる見込みがある場合は、ユーザに再構成を提案する。ユーザ了承を得て、再構成を実施する場合に、リソースを変更する際は、クラウド関連技術により、メモリサイズ等の変更であれば断時間は無く変更できることが多い。
<マイグレーション>
配置場所変更の際は、一括プロビジョニング技術(OpenStack Heatを使った手法等(非特許文献4参照)を用いて、移行先環境を複製しておき、そこに移行元からマイグレーションを行う。マイグレーションは、再構成実行部126のマイグレーション処理部126b(図2参照)が行う。
配置場所変更で、ディスクが共用でよい場合は、OpenStack等でサポートされる仮想マシンの移行を行うライブマイグレーションを行う。また、配置場所が大きく変わりディスク情報も含めて移行する場合は、ブロックマイグレーションを行う。GPU等のハードウェアは仮想マシンでなく、コンテナで制御する場合が多いため、コンテナの移行時は、LXD等のコンテナ管理技術を使ってマイグレーションを行う。
<ソフトウェア/ハードウェア構成>
ソフトウェア/ハードウェア構成の変更は、図4のステップS12,S13の処理を、周期的、または、性能がある閾値以下となった場合に試行模擬し、コード変換して、GPUオフロードのソフトロジック変更やFPGAのハードロジックの変更で、性能やコストが改善できる見込みがある場合は、ユーザに再構成を提案する(非特許文献5参照)。ユーザ了承を得て、再構成を実行する際に、GPUオフロードするソフトロジックの変更等や、ソフトウェア構成の変更の場合には、更新する実行ファイルを起動する環境を複製後、アプリケーション実行中のデータをマイグレーションする。
<ハードロジック変更>
再構成を実行する際に、FPGA等のハードロジックを変更する場合は、ソフトウェア構成の変更時と同様に移行先にハードロジックを構成済みのFPGAを準備し、アプリケーション実行中のデータをマイグレーションする方法と、FPGAのハードロジックを運用中に再構成する方法とがある。FPGAのハードロジック構成の再構成は、近年のAltera,Xilinxのツールを用いると、運用中の数秒単位での再構成が可能である。ハードロジックの変更は、SQL DBとNo SQLのDBを両運用している場合に、当初SQLリクエストが多かったが、No SQLリクエストが一定よりも増えてきた場合に、No SQLをアクセラレートするFPGAにロジックを再構成する等がある。
以下、オフロードサーバ1の実装を説明する。本実装は、本実施形態の有効性を確認するためのものである。
<実装の動作概要>
実装の動作概要を説明する。
実装はPerl 5(Perlバージョン5)で行い、以下の処理を行う。
下記図8のフローの処理を開始する前に、高速化するアプリケーションとそれを性能測定するベンチマークツールを準備する。
実装では、アプリケーションの利用依頼があると、まず、アプリケーションのコードを解析して、for文を発見するとともに、for文内で使われる変数データ等の、プログラム構造を把握する。構文解析には、LLVM/Clangの構文解析ライブラリ(libClangのpython binding)等を使用する。
実装では、最初に、そのアプリケーションがGPUオフロード効果があるかの見込みを得るため、ベンチマークを実行し、上記構文解析で把握したfor文のループ回数を把握する。ループ回数把握には、GNUカバレッジのgcov等を用いる。プロファイリングツールとしては、「GNUプロファイラ(gprof)」、「GNUカバレッジ(gcov)」が知られている。双方とも各行の実行回数を調査できるため、どちらを用いてもよい。実行回数は、例えば、1000万回以上のループ回数を持つアプリケーションのみ対象とするようにできるが、この値は変更可能である。
CPU向け汎用アプリケーションは、並列化を想定して実装されているわけではない。そのため、まず、GPU処理自体が不可なfor文は排除する必要がある。そこで、各for文一つずつに対して、並列処理の#pragma acc kernels ディレクティブ挿入を試行し、コンパイル時にエラーが出るかの判定を行う。コンパイルエラーに関しては、幾つかの種類がある。for文の中で外部ルーチンが呼ばれている場合、ネストfor文で異なる階層が重複指定されている場合、break等でfor文を途中で抜ける処理がある場合、for文のデータにデータ依存性がある場合等がある。アプリケーションによって、コンパイル時エラーの種類は多彩であり、これ以外の場合もあるが、コンパイルエラーは処理対象外とし、#pragmaディレクティブは挿入しない。
コンパイルエラーは自動対処が難しく、また対処しても効果が出ないことも多い。外部ルーチンコールの場合は、#pragma acc routineにより回避できる場合があるが、多くの外部コールはライブラリであり、それを含めてGPU処理してもそのコールがネックとなり性能が出ない。for文一つずつを試行するため、ネストのエラーに関しては、コンパイルエラーは生じない。また、break等で途中で抜ける場合は、並列処理にはループ回数を固定化する必要があり、プログラム改造が必要となる。データ依存が有る場合はそもそも並列処理自体ができない。
ここで、並列処理してもエラーが出ないループ文の数がaの場合、aが遺伝子長となる。遺伝子の1は並列処理ディレクティブ有、0は無に対応させ、長さaの遺伝子に、アプリケーションコードをマッピングする。
次に、初期値として、指定個体数の遺伝子配列を準備する。遺伝子の各値は、図5で説明したように、0と1をランダムに割当てて作成する。準備された遺伝子配列に応じて、遺伝子の値が1の場合は並列処理を指定するディレクティブ #pragma acc kernels をC/C++コードに挿入する。この段階で、ある遺伝子に該当するコードの中で、GPUで処理させる部分が決まる。上記Clangで解析した、for文内の変数データの参照関係をもとに、上述したルールに基づいて、CPUからGPUへのデータ転送、その逆の場合のディレクティブ指定を行う。
具体的には、CPUからGPUへのデータ転送が必要な変数は、 #pragma acc data copyinで指定し(図6参照)、GPUからCPUへのデータ転送が必要な変数は、 #pragma acc data copyoutで指定する(図7参照)。同じ変数に関して、copyinとcopyoutが重なる場合は、#pragma acc data copyで纏め、記述をシンプルにする。
並列処理およびデータ転送のディレクティブを挿入されたC/C++コードを、GPUを備えたマシン上のPGIコンパイラでコンパイルを行う。コンパイルした実行ファイルをデプロイし、ベンチマークツールで性能を測定する。
全個体数に対して、ベンチマーク性能測定後、ベンチマーク処理時間に応じて、各遺伝子配列の適合度を設定する。設定された適合度に応じて、残す個体の選択を行う。選択された個体に対して、交叉処理、突然変異処理、そのままコピー処理のGA処理を行い、次世代の個体群を作成する。
次世代の個体に対して、ディレクティブ挿入、コンパイル、性能測定、適合度設定、選択、交叉、突然変異処理を行う。ここで、GA処理の中で、以前と同じパターンの遺伝子が生じた場合は、その個体についてはコンパイル、性能測定をせず、以前と同じ測定値を用いる。
指定世代数のGA処理終了後、最高性能の遺伝子配列に該当する、ディレクティブ付きコードを解とする。
この中で、個体数、世代数、交叉率、突然変異率、適合度設定、選択方法は、GAのパラメータであり、別途指定する。提案技術は、上記処理を自動化することで、従来、専門技術者の時間とスキルが必要だった、GPUオフロードの自動化を可能にする。
図8A-Bは、上述した実装の動作概要を説明するフローチャートであり、図8Aと図8Bは、結合子で繋がれる。
<コード解析>
ステップS101で、アプリケーションコード分析部112(図2参照)は、アプリのコード解析を行う。
<ループ文特定>
ステップS102で、オフロード処理指定部114(図2参照)は、アプリのループ文、参照関係および機能ブロックを特定する。
<ループ文の並列処理可能性>
ステップS103で、オフロード処理指定部114は、各ループ文の並列処理可能性をチェックする。
<ループ文の繰り返し>
制御部(環境適応機能部)11は、ステップS104のループ始端とステップS107のループ終端間で、ステップS105-S106の処理についてループ文の数だけ繰り返す。
ステップS105で、オフロード処理指定部114は、各ループ文に対して、中間言語でパイプライン処理を指定してコンパイルする。なお、パイプライン処理の一つに並列処理がある。
ステップS106で、オフロード処理指定部114は、エラー時は、該当ループ文は、対象外とする。
ステップS108で、オフロード処理指定部114は、コンパイルエラーが出ないループ文の数と機能ブロック数をカウントし、遺伝子長とする。
<指定個体数パターン準備>
次に、初期値として、オフロード処理指定部114は、指定個体数の遺伝子配列を準備する。ここでは、0と1をランダムに割当てて作成する。
ステップS109で、オフロード処理指定部114は、アプリコードを、遺伝子にマッピングし、指定パターン数準備を行う。
準備された遺伝子配列に応じて、遺伝子の値が1の場合は並列処理を指定するディレクティブをコードに挿入する(例えば図5(b)の#pragmaディレクティブ参照)。
制御部(環境適応機能部)11は、ステップS110のループ始端とステップS118のループ終端間で、ステップS111-S118の処理について指定世代数繰り返す。
また、上記指定世代数繰り返しにおいて、さらにステップS111のループ始端とステップS115のループ終端間で、ステップS112-S114の処理について指定個体数繰り返す。すなわち、指定世代数繰り返しの中で、指定個体数の繰り返しが入れ子状態で処理される。
<データ転送指定>
ステップS112で、データ転送指定部113は、変数参照関係をもとに、データ転送指定し、特定パターンで並列、パイプライン処理、機能ブロックのオフロードを指定したアプリの中間言語を作成する。
上記ステップS112において、ループ文特定するところまでは共通処理であり、その後、GPU、FPGA、パイプライン処理、またはFFT処理などの機能ブロックに対応した処理を行う。例えば、GPUの際は並列処理を行う、FPGAの際は並列処理やパイプライン処理を行う、FFT処理などの機能ブロックであればオフロード用の中間言語を作成する。
なお、パイプライン処理の一つである並列処理を例にとり、明示的指示行(#pragma acc data copy/in/out)を用いたデータ転送指定について、図6-図7により説明した。
<コンパイル>
ステップS113で、検証環境用性能測定部119(図2参照)は、CPU-GPU搭載の検証用マシン14に、中間言語をもとに実行ファイルを配置する。
ステップS114で、検証環境用性能測定部119は、配置したバイナリファイルを実行し、テストケース性能を測定する。
ここで、途中世代で、以前と同じパターンの遺伝子については測定せず、同じ値を使う。つまり、GA処理の中で、以前と同じパターンの遺伝子が生じた場合は、その個体についてはコンパイルや性能測定をせず、以前と同じ測定値を用いる。
ステップS116で、実行ファイル作成部120(図2参照)は、処理時間が短いパターンほど適合度が高くなるように評価し、性能の高いパターンを選択する。
ステップS117で、実行ファイル作成部120は、選択パターンに対して、交叉、突然変異の処理を行い、次世代のパターンを作成する。次世代のパターンに対して、コンパイル、性能測定、適合度設定、選択、交叉、突然変異処理を行う。
すなわち、全個体に対して、ベンチマーク性能測定後、ベンチマーク処理時間に応じて、各遺伝子配列の適合度を設定する。設定された適合度に応じて、残す個体の選択を行う。選択された個体に対して、交叉処理、突然変異処理、そのままコピー処理のGA処理を行い、次世代の個体群を作成する。
ステップS119で、実行ファイル作成部120は、指定世代数のGA処理終了後、最高性能の遺伝子配列に該当するコード(最高性能のオフロードパターン)を解とする。
<GAのパラメータ>
上記、個体数、世代数、交叉率、突然変異率、適合度設定、選択方法は、GAのパラメータである。GAのパラメータは、例えば、以下のように設定してもよい。
実行するSimple GAの、パラメータ、条件は例えば以下のようにできる。
遺伝子長:並列可能ループ文数
個体数M:遺伝子長以下
世代数T:遺伝子長以下
適合度:(処理時間)(-1/2)
この設定により、ベンチマーク処理時間が短い程、高適合度になる。また、適合度を、処理時間の(-1/2)乗とすることで、処理時間が短い特定の個体の適合度が高くなり過ぎて、探索範囲が狭くなるのを防ぐことができる。また、性能測定が一定時間で終わらない場合は、タイムアウトさせ、処理時間1000秒等の時間(長時間)であるとして、適合度を計算する。このタイムアウト時間は、性能測定特性に応じて変更させればよい。
選択:ルーレット選択
ただし、世代での最高適合度遺伝子は交叉も突然変異もせず次世代に保存するエリート保存も合わせて行う。
交叉率Pc:0.9
突然変異率Pm:0.05
<コストパフォーマンス>
自動オフロード機能のコストパフォーマンスについて述べる。
NVIDIA Tesla(登録商標)等の、GPUボードのハードウェアの価格だけを見ると、GPUを搭載したマシンの価格は、通常のCPUのみのマシンの約2倍となる。しかし、一般にデータセンタ等のコストでは、ハードウェアやシステム開発のコストが1/3以下であり、電気代や保守・運用体制等の運用費が1/3超であり、サービスオーダ等のその他費用が1/3程度である。本実施形態では、暗号処理や画像処理等動作させるアプリケーションで時間がかかる処理を2倍以上高性能化できる。このため、サーバハードウェア価格自体は2倍となっても、コスト効果が十分に期待できる。
本実施形態では、gcov,gprof等を用いて、ループが多く実行時間がかかっているアプリケーションを事前に特定して、オフロード試行をする。これにより、効率的に高速化できるアプリケーションを見つけることができる。
<本番サービス利用開始までの時間>
本番サービス利用開始までの時間について述べる。
コンパイルから性能測定1回は3分程度とすると、20の個体数、20の世代数のGAで最大20時間程度解探索にかかるが、以前と同じ遺伝子パターンのコンパイル、測定は省略されるため、8時間以下で終了する。多くのクラウドやホスティング、ネットワークサービスではサービス利用開始に半日程度かかるのが実情である。本実施形態では、例えば半日以内の自動オフロードが可能である。このため、半日以内の自動オフロードであれば、最初は試し利用ができるとすれば、ユーザ満足度を十分に高めることが期待できる。
より短時間でオフロード部分を探索するためには、複数の検証用マシンで個体数分並列で性能測定することが考えられる。アプリケーションに応じて、タイムアウト時間を調整することも短時間化に繋がる。例えば、オフロード処理がCPUでの実行時間の2倍かかる場合はタイムアウトとする等である。また、個体数、世代数が多い方が、高性能な解を発見できる可能性が高まる。しかし、各パラメータを最大にする場合、個体数×世代数だけコンパイル、および性能ベンチマークを行う必要がある。このため、本番サービス利用開始までの時間がかかる。本実施形態では、GAとしては少ない個体数、世代数で行っているが、交叉率Pcを0.9と高い値にして広範囲を探索することで、ある程度の性能の解を早く発見するようにしている。
以上説明したように、本実施形態に係るオフロードサーバ1(図2参照)は、アプリケーションのソースコードを分析するアプリケーションコード分析部112と、アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定部114と、配置先環境に合わせたコード変換をするオフロードパターン作成部115(コード変換部)と、コード変換されたアプリケーションをコンパイルして、検証用マシン14に配置し、検証用マシン14にオフロードした際の性能測定用処理を実行する検証環境用性能測定部119と、を反復し、配置先環境に合わせたリソース量の設定を行うリソース量指定部117と、オフロードパターン作成部115がコード変換した変換コードを、リソース量指定部117が設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置先計算部118と、実行ファイル配置後、本番環境性能測定テスト抽出部122が抽出した性能試験項目を、運用装置15を用いて自動実行する本番環境性能測定テスト実行部123と、コード変換ステップ、リソース量設定ステップ、配置場所選択ステップ、性能測定ステップ、性能測定テストステップのいずれか一つ以上のステップを実行する環境適応処理を行う制御部11(環境適応機能部)と、を備える。
この構成により、GPU,FPGA,IoTデバイス等環境が多様になる中で、アプリケーションを環境に合わせて適応させ、GPUやFPGAを適切に活用し、高性能にアプリケーションを動作させることができる。また、一度記述したソフトウェアを、異なる環境でも高性能に動作させることができる。
本実施形態では、オフロード処理指定部114は、遺伝的アルゴリズムに基づき、コンパイルエラーが出ないループ文の数を遺伝子長とし、オフロードパターン作成部は、アクセラレータ処理をする場合を1または0のいずれか一方、しない場合を他方の0または1として、アクセラレータ処理可否を遺伝子パターンにマッピングし、遺伝子の各値を1か0にランダムに作成した指定個体数の遺伝子パターンを準備し、検証環境用性能測定部119は、各個体に応じて、アクセラレータにおける並列処理指定文を指定したアプリケーションコードをコンパイルして、検証用マシン14に配置し、検証用マシン14において性能測定用処理を実行する。実行ファイル作成部120は、全個体に対して、性能測定を行い、処理時間の短い個体ほど適合度が高くなるように評価し、全個体から、適合度が所定値より高いものを性能の高い個体として選択し、選択された個体に対して、交叉、突然変異の処理を行い、次世代の個体を作成し、指定世代数の処理終了後、最高性能のオフロードパターンを解として選択する。
このように、最初に並列可能なループ文のチェックを行い、次に並列可能繰り返し文群に対してGAを用いて検証環境で性能検証試行を反復し適切な領域を探索する。並列可能なループ文(例えばfor文)に絞った上で、遺伝子の部分の形で、高速化可能なオフロードパターンを保持し組み換えていくことで、取り得る膨大なオフロードパターンから、効率的に高速化可能なパターンを探索できる。
本実施形態では、配置先環境がFPGAを備え、オフロード処理指定部114は、機能ブロック処理、ライブラリ呼び出しを含むアプリケーションの処理構造から、コードパターンDBを参照して、機能ブロック処理、ライブラリ呼び出しを含むFPGAにオフロード可能な処理を特定し、コードパターンDBからオフロードに該当する中間言語の定義情報を、アプリケーションソースコードに置換する。
このようにすることで、機能ブロック処理、ライブラリ呼び出しを含むFPGAにオフロード可能な処理を特定して、アプリケーションソースコードに置換することができる。
本実施形態では、リソース量指定部117は、アプリケーションテストケースの処理時間から、CPUとオフロード先の処理時間が同等のオーダーになるように、CPUとオフロード先のリソース比を定め、リソース比を決定後は、想定するテストケースの処理性能が、要求性能およびコスト要求を満たすようにリソース比はキープしつつ、リソース量を設定する。
このように、CPUとオフロード先のリソース比を定めて、要求性能およびコスト要求を満たした上で、リソース量を設定することができる。
本実施形態では、配置先計算部118は、アプリケーションテストケースの結果から、アプリケーションを配置した際の計算量と発生トラフィックを算出し、クラウド、エッジ、Home GWを含むリンク関係をモデル化し、アプリケーションを特定のノードに配置した際に、コストが要求条件に収まることを制約条件に、処理遅延および/またはスループットの性能を最大化する配置、あるいは性能が要求条件を満たす形でコストが最低になる配置のいずれかを線形計画手法を用いて計算する。
この構成により、処理遅延、スループットの性能の最大化、または性能が要求条件を満たす形でコストが最低になる配置場所を選択することができる。
本実施形態では、アプリケーション運用開始後に、当初期待していた性能が出ない場合に、ソフトウェア設定を再構成する再構成実行部126を備える。
この構成により、ユーザに再構成を提案して、ユーザ了承を得た場合には、アプリケーション実行環境をマイグレーションすることができる。
本実施形態では、再構成実行部126が、コード変換処理を、周期的、または、性能がある閾値以下となった場合に試行模擬し、コード変換して、GPUオフロードのソフトロジック変更やFPGAのハードロジックの変更で、性能やコストが改善できる見込みがある場合は、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する際に、GPUオフロードするソフトロジックの変更を行う。ソフトウェア構成の変更の場合は、マイグレーション処理部126bが、更新する実行ファイルを起動する環境を複製後、アプリケーションのデータのマイグレーションを行い、FPGAのハードロジックを変更する場合は、マイグレーション処理部126bが、移行先にハードロジックを構成済みのFPGAを準備しFPGAを制御するコンテナ等をマイグレーションを行う、もしくは、再構成実行部が、FPGAのハードロジックを再構成する。
この構成により、ユーザに再構成を提案して、ユーザ了承を得た場合、ソフトウェア構成の変更のときは、アプリケーションのデータのマイグレーションを、またハードロジックを構成済みのFPGAを準備しFPGAを制御するコンテナ等をマイグレーションすることができる。
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手作業で行うこともでき、あるいは、手作業で行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。
また、本実施形態では、組合せ最適化問題を、限られた最適化期間中に解を発見できるようにするため、遺伝的アルゴリズム(GA)の手法を用いているが、最適化の手法はどのようなものでもよい。例えば、local search(局所探索法)、Dynamic Programming(動的計画法)、これらの組み合わせでもよい。
また、本実施形態では、C/C++向けOpenACCコンパイラを用いているが、GPU処理をオフロードできるものであればどのようなものでもよい。例えば、Java lambda(登録商標) GPU処理、IBM Java 9 SDK(登録商標)でもよい。なお、並列処理指定文は、これらの開発環境に依存する。
例えば、Java(登録商標)では、Java 8よりlambda形式での並列処理記述が可能である。IBM(登録商標)は、lambda形式の並列処理記述を、GPUにオフロードするJITコンパイラを提供している。Javaでは、これらを用いて、ループ処理をlambda形式にするか否かのチューニングをGAで行うことで、同様のオフロードが可能である。
また、本実施形態では、繰り返し文(ループ文)として、for文を例示したが、for文以外のwhile文やdo-while文も含まれる。ただし、ループの継続条件等を指定するfor文がより適している。
1 オフロードサーバ
11 制御部
12 入出力部
13 記憶部
14 検証用マシン(アクセラレータ検証用装置)
15 運用装置
15 OpenIoTリソース
111 アプリケーションコード指定部
112 アプリケーションコード分析部
113 データ転送指定部
114 オフロード処理指定部
114a オフロード可能部抽出部
114b 中間言語ファイル出力部
115 オフロードパターン作成部
116 リソース量計算部(リソース量設定部)
117 リソース量指定部(リソース量設定部)
118 配置先計算部(配置場所選択部)
119 検証環境用性能測定部
120 実行ファイル作成部
121 本番環境配置部
122 本番環境性能測定テスト抽出部
123 本番環境性能測定テスト実行部
124 再構成必要性定期チェック部
125 再構成シミュレーション試算部
126 再構成実行部
126a 再構成先構築部
126b マイグレーション処理部
127 ユーザ提供部
130 アプリケーションコード
131 テストケースDB
132 コードパターンDB
133 設備リソースDB
134 中間言語ファイル
151 Io GWを有する装置
152 CPU-GPUを有する装置
153 CPU-FPGAを有する装置
154 CPUを有する装置

Claims (6)

  1. アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバのソフトウェア最適配置方法であって、
    前記オフロードサーバは、
    アプリケーションのソースコードを分析するアプリケーションコード分析ステップと、
    前記アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップと、
    配置先環境に合わせたコード変換をするコード変換ステップと、
    コード変換された前記アプリケーションをコンパイルして、アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置にオフロードした際の性能測定用処理を実行する検証環境用性能測定ステップと、を反復し、
    前記配置先環境に合わせたリソース量の設定を行うリソース量設定ステップと、
    前記コード変換ステップがコード変換した変換コードを、前記リソース量設定ステップが設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップと、
    本番環境配置後に、前記アプリケーションをコンパイルして、運用装置に配置し、前記運用装置にオフロードした実際の性能測定テストを実行する性能測定テストステップと、を備え、
    前記コード変換ステップ、前記リソース量設定ステップ、前記配置場所選択ステップ、前記検証環境用性能測定ステップ、前記性能測定テストステップのいずれか一つ以上のステップを実行し、
    前記リソース量設定ステップにおいて、
    アプリケーションテストケースの処理時間から、CPUとオフロード先の処理時間が同等のオーダーになるように、CPUとオフロード先のリソース比を定め、
    前記リソース比の決定後は、想定するテストケースの処理性能が、要求性能およびコスト要求を満たすように前記リソース比はキープしつつ、リソース量を設定する
    ことを特徴とするオフロードサーバのソフトウェア最適配置方法。
  2. アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバのソフトウェア最適配置方法であって、
    前記オフロードサーバは、
    アプリケーションのソースコードを分析するアプリケーションコード分析ステップと、
    前記アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップと、
    配置先環境に合わせたコード変換をするコード変換ステップと、
    コード変換された前記アプリケーションをコンパイルして、アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置にオフロードした際の性能測定用処理を実行する検証環境用性能測定ステップと、を反復し、
    前記配置先環境に合わせたリソース量の設定を行うリソース量設定ステップと、
    前記コード変換ステップがコード変換した変換コードを、前記リソース量設定ステップが設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップと、
    本番環境配置後に、前記アプリケーションをコンパイルして、運用装置に配置し、前記運用装置にオフロードした実際の性能測定テストを実行する性能測定テストステップと、を備え、
    前記コード変換ステップ、前記リソース量設定ステップ、前記配置場所選択ステップ、前記検証環境用性能測定ステップ、前記性能測定テストステップのいずれか一つ以上のステップを実行し、
    前記配置場所選択ステップにおいて、
    アプリケーションテストケースの結果から、アプリケーションを配置した際の計算量と発生トラフィックを算出し、
    クラウド、エッジ、Home GW(gateway)を含むリンク関係をモデル化し、アプリケーションを特定のノードに配置した際に、コストが要求条件に収まることを制約条件に、処理遅延および/またはスループットの性能を最大化する配置、あるいは性能が要求条件を満たす形でコストが最低になる配置のいずれかを計算する
    ことを特徴とするオフロードサーバのソフトウェア最適配置方法。
  3. アプリケーションの特定処理をアクセラレータにオフロードするオフロードサーバのソフトウェア最適配置方法であって、
    前記オフロードサーバは、
    アプリケーションのソースコードを分析するアプリケーションコード分析ステップと、
    前記アプリケーションの並列処理可能なループ文、特定処理の機能ブロック、ライブラリ呼び出しを含むオフロード可能な処理を特定するオフロード処理指定ステップと、
    配置先環境に合わせたコード変換をするコード変換ステップと、
    コード変換された前記アプリケーションをコンパイルして、アクセラレータ検証用装置に配置し、前記アクセラレータ検証用装置にオフロードした際の性能測定用処理を実行する検証環境用性能測定ステップと、を反復し、
    前記配置先環境に合わせたリソース量の設定を行うリソース量設定ステップと、
    前記コード変換ステップがコード変換した変換コードを、前記リソース量設定ステップが設定したリソース量を確保して配置する際に、性能およびコストをもとに配置先を計算して配置場所を選択する配置場所選択ステップと、
    本番環境配置後に、前記アプリケーションをコンパイルして、運用装置に配置し、前記運用装置にオフロードした実際の性能測定テストを実行する性能測定テストステップと、を備え、
    前記コード変換ステップ、前記リソース量設定ステップ、前記配置場所選択ステップ、前記検証環境用性能測定ステップ、前記性能測定テストステップのいずれか一つ以上のステップを実行し、
    アプリケーション運用開始後に、当初期待していた性能が出ない場合に、ソフトウェア設定を再構成する再構成実行ステップを有し、
    前記再構成実行ステップにおいて、
    ソフトウェア設定の変更では、リソース量設定、配置場所選択の試行計算を周期的、または、性能がある閾値以下となった場合に試行模擬し、性能向上やコスト低減度合を計算し、リソース量の変更や配置場所の変更で性能やコストが改善できる見込みがある場合に、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する場合に、リソースを変更する再構成先構築ステップと、
    配置場所変更の際、移行先環境を複製して、そこに移行元からアプリケーション実行環境をマイグレーションするマイグレーション処理ステップと、を実行し、
    前記再構成実行ステップにおいて、コード変換処理を、周期的、または、性能がある閾値以下となった場合に試行模擬し、コード変換して、GPUオフロードのソフトロジック変更および/またはFPGA(Field Programmable Gate Array)のハードロジックの変更で、性能やコストが改善できる見込みがある場合は、ユーザに再構成を提案し、ユーザ了承を得て、再構成を実行する際に、GPUオフロードするソフトロジックの変更を行い、
    ソフトウェア構成の変更の場合は、前記マイグレーション処理ステップが、更新する実行ファイルを起動する環境を複製後、アプリケーションのデータのマイグレーションを行い、
    FPGAのハードロジックを変更する場合は、前記マイグレーション処理ステップにおいて、移行先にハードロジックを構成済みのFPGAを準備し当該FPGAを制御するコンテナのマイグレーションを行う、もしくは、前記再構成実行ステップにおいて、当該FPGAのハードロジックを再構成する
    ことを特徴とするオフロードサーバのソフトウェア最適配置方法。
  4. コンパイルエラーが出るループ文に対して、オフロード対象外とするとともに、コンパイルエラーが出ないループ文に対して、オフロード処理するかしないかの指定を行うオフロード処理パターンを作成するオフロードパターン作成ステップと、
    所定回数繰り返された、性能測定結果をもとに、複数のオフロードパターンから最高処理性能のオフロードパターンを選択し、最高処理性能のオフロードパターンをコンパイルして実行ファイルを作成する実行ファイル作成ステップと、をさらに有し、
    前記オフロード処理指定ステップにおいて、遺伝的アルゴリズムに基づき、
    コンパイルエラーが出ないループ文の数を遺伝子長とし、
    前記オフロードパターン作成ステップにおいて、アクセラレータ処理をする場合を1または0のいずれか一方、しない場合を他方の0または1として、アクセラレータ処理可否を遺伝子パターンにマッピングし、
    前記遺伝子の各値を1か0にランダムに作成した指定個体数の前記遺伝子パターンを準備し、
    前記性能測定テストステップにおいて、各個体に応じて、前記アクセラレータにおける並列処理指定文を指定したアプリケーションコードをコンパイルして、前記アクセラレータ検証用装置に配置し、
    前記アクセラレータ検証用装置において性能測定用処理を実行し、
    前記実行ファイル作成ステップにおいて、全個体に対して、性能測定を行い、処理時間の短い個体ほど適合度が高くなるように評価し、
    全個体から、前記適合度が所定値より高いものを性能の高い個体として選択し、
    選択された個体に対して、交叉、突然変異の処理を行い、次世代の個体を作成し、
    指定世代数の処理終了後、最高性能の前記オフロードパターンを解として選択する
    ことを特徴とする請求項1乃至3のいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法。
  5. 前記配置先環境が、前記アクセラレータとしてFPGA(Field Programmable Gate Array)を備え、
    前記オフロード処理指定ステップにおいて、
    機能ブロック処理、ライブラリ呼び出しを含むアプリケーションの処理構造から、コードパターンDBを参照して、機能ブロック処理、ライブラリ呼び出しを含む前記FPGAにオフロード可能な処理を特定し、前記コードパターンDBからオフロードに該当する中間言語の定義情報を、アプリケーションソースコードに置換する
    ことを特徴とする請求項1乃至3のいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法。
  6. コンピュータ、請求項1乃至請求項のうちいずれか1項に記載のオフロードサーバのソフトウェア最適配置方法を実行させるためのプログラム。
JP2019030871A 2019-02-22 2019-02-22 オフロードサーバのソフトウェア最適配置方法およびプログラム Active JP7063289B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2019030871A JP7063289B2 (ja) 2019-02-22 2019-02-22 オフロードサーバのソフトウェア最適配置方法およびプログラム
US17/432,701 US11614927B2 (en) 2019-02-22 2020-02-21 Off-load servers software optimal placement method and program
PCT/JP2020/007255 WO2020171234A1 (ja) 2019-02-22 2020-02-21 オフロードサーバのソフトウェア最適配置方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019030871A JP7063289B2 (ja) 2019-02-22 2019-02-22 オフロードサーバのソフトウェア最適配置方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2020137017A JP2020137017A (ja) 2020-08-31
JP7063289B2 true JP7063289B2 (ja) 2022-05-09

Family

ID=72144250

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019030871A Active JP7063289B2 (ja) 2019-02-22 2019-02-22 オフロードサーバのソフトウェア最適配置方法およびプログラム

Country Status (3)

Country Link
US (1) US11614927B2 (ja)
JP (1) JP7063289B2 (ja)
WO (1) WO2020171234A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022079748A1 (ja) * 2020-10-12 2022-04-21 日本電信電話株式会社 オフロードサーバ、オフロード制御方法およびオフロードプログラム
JPWO2022097245A1 (ja) * 2020-11-05 2022-05-12
JPWO2022102071A1 (ja) * 2020-11-12 2022-05-19
KR102382884B1 (ko) * 2020-11-13 2022-04-06 한국전자기술연구원 엣지 단말의 클러스터 구성 및 운용 시스템 및 방법
US11917230B2 (en) * 2020-12-21 2024-02-27 Quanta Cloud Technology Inc. Method and system for maximizing uplink bandwidth in a communication system
US11972297B2 (en) * 2021-05-18 2024-04-30 Microsoft Technology Licensing, Llc Generating abstractions for offloading tasks to heterogeneous accelerators
US11726904B2 (en) * 2021-09-23 2023-08-15 International Business Machines Corporation Controlled input/output in progress state during testcase processing
WO2023188437A1 (ja) * 2022-04-01 2023-10-05 日本電信電話株式会社 制御装置、制御方法、及びプログラム
WO2023228369A1 (ja) * 2022-05-26 2023-11-30 日本電信電話株式会社 オフロードサーバ、オフロード制御方法およびオフロードプログラム
CN115134243B (zh) * 2022-09-02 2022-12-06 北京科技大学 一种工业控制任务分布式部署方法及系统
WO2024079886A1 (ja) * 2022-10-14 2024-04-18 日本電信電話株式会社 オフロードサーバ、オフロード制御方法およびオフロードプログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011186701A (ja) 2010-03-08 2011-09-22 Nec Corp リソース割当装置、リソース割当方法、およびリソース割当プログラム
JP2017142581A (ja) 2016-02-08 2017-08-17 日本電信電話株式会社 構成選択システム、構成選択方法及びプログラム
WO2017170309A1 (ja) 2016-03-31 2017-10-05 日本電気株式会社 ネットワークシステム、その管理方法および装置ならびにサーバ
JP2017204213A (ja) 2016-05-13 2017-11-16 日本電信電話株式会社 設定サーバ、設定方法および設定プログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190042232A1 (en) * 2018-09-28 2019-02-07 Intel Corporation Technologies for automatic compilation of storage offloads

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011186701A (ja) 2010-03-08 2011-09-22 Nec Corp リソース割当装置、リソース割当方法、およびリソース割当プログラム
JP2017142581A (ja) 2016-02-08 2017-08-17 日本電信電話株式会社 構成選択システム、構成選択方法及びプログラム
WO2017170309A1 (ja) 2016-03-31 2017-10-05 日本電気株式会社 ネットワークシステム、その管理方法および装置ならびにサーバ
JP2017204213A (ja) 2016-05-13 2017-11-16 日本電信電話株式会社 設定サーバ、設定方法および設定プログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
山登庸次、外3名,オープンIoTに向けたGPU自動オフロード技術の検討,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2018年05月25日,Vol.118 No.72,pp.53-58

Also Published As

Publication number Publication date
US20220188086A1 (en) 2022-06-16
US11614927B2 (en) 2023-03-28
WO2020171234A1 (ja) 2020-08-27
JP2020137017A (ja) 2020-08-31

Similar Documents

Publication Publication Date Title
JP7063289B2 (ja) オフロードサーバのソフトウェア最適配置方法およびプログラム
Yamato Study of parallel processing area extraction and data transfer number reduction for automatic GPU offloading of IoT applications
JP6927424B2 (ja) オフロードサーバおよびオフロードプログラム
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
WO2021156956A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
JP2011170732A (ja) 並列化方法、システム、及びプログラム
JP6992911B2 (ja) オフロードサーバおよびオフロードプログラム
WO2021156955A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
Kienberger et al. Parallelizing highly complex engine management systems
WO2022097245A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
Wang et al. Clustered workflow execution of retargeted data analysis scripts
Angelelli et al. Towards a multi-objective scheduling policy for serverless-based edge-cloud continuum
Yamato Proposal and evaluation of GPU offloading parts reconfiguration during applications operations for environment adaptation
JP7184180B2 (ja) オフロードサーバおよびオフロードプログラム
WO2023144926A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2021156954A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2023228369A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
Bakhtizin et al. The development of the agent-based demography and migration model of Eurasia and its supercomputer implementation
WO2022102071A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
JP7473003B2 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
WO2024079886A1 (ja) オフロードサーバ、オフロード制御方法およびオフロードプログラム
US20230096849A1 (en) Offload server, offload control method, and offload program
Yamato et al. Proposal of parallel processing area extraction and data transfer number reduction for automatic GPU offloading of IoT applications
Menard et al. Mocasin—Rapid Prototyping of Rapid Prototyping Tools
Yamato Study and evaluation of automatic offloading method in mixed offloading destination environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210520

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220303

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220404

R150 Certificate of patent or registration of utility model

Ref document number: 7063289

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150