JP7473003B2 - オフロードサーバ、オフロード制御方法およびオフロードプログラム - Google Patents
オフロードサーバ、オフロード制御方法およびオフロードプログラム Download PDFInfo
- Publication number
- JP7473003B2 JP7473003B2 JP2022557221A JP2022557221A JP7473003B2 JP 7473003 B2 JP7473003 B2 JP 7473003B2 JP 2022557221 A JP2022557221 A JP 2022557221A JP 2022557221 A JP2022557221 A JP 2022557221A JP 7473003 B2 JP7473003 B2 JP 7473003B2
- Authority
- JP
- Japan
- Prior art keywords
- offloading
- performance
- pattern
- offload
- accelerators
- 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 146
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 title 1
- 238000012545 processing Methods 0.000 claims description 195
- 230000008569 process Effects 0.000 claims description 125
- 238000005259 measurement Methods 0.000 claims description 102
- 238000012795 verification Methods 0.000 claims description 61
- 238000004458 analytical method Methods 0.000 claims description 26
- 230000006872 improvement Effects 0.000 claims description 20
- 230000006870 function Effects 0.000 description 65
- 108090000623 proteins and genes Proteins 0.000 description 55
- 230000002068 genetic effect Effects 0.000 description 36
- 238000012360 testing method Methods 0.000 description 23
- 238000004364 calculation method Methods 0.000 description 22
- 230000035772 mutation Effects 0.000 description 20
- 238000000605 extraction Methods 0.000 description 19
- 238000004519 manufacturing process Methods 0.000 description 16
- 230000000694 effects Effects 0.000 description 15
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 11
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 239000000284 extract Substances 0.000 description 9
- 238000011056 performance test Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 238000013508 migration Methods 0.000 description 7
- 230000005012 migration Effects 0.000 description 7
- 239000000203 mixture Substances 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 6
- 230000003044 adaptive effect Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000003500 gene array Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000004888 barrier function Effects 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000003252 repetitive effect Effects 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241000220317 Rosa Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000010429 evolutionary process Effects 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- 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/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3404—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- 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
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
発明者は、環境適応ソフトウェアの要素として、ソースコードのループ文及び機能ブロックを、FPGA、GPUに自動オフロードする方式を非特許文献2,3,4にて提案している。
その他の手段については、発明を実施するための形態のなかで説明する。
発明者は、環境適応ソフトウェアのコンセプトを具体化するために、これまでに、プログラムのループ文のGPU自動オフロード、FPGA自動オフロード、プログラムの機能ブロックの自動オフロードの方式を提案してきた。これらの要素技術検討も踏まえて、移行先環境について対象を定義し、対象が多様化した場合でも踏襲する基本的考えを記述する、更に、個々の移行先環境への自動オフロードと、移行先環境が多様化した際の自動オフロード方式について提案する。
本実施形態で対象とする多様な移行先環境としては、GPU、FPGA、メニーコアCPUの3つとする。GPU、FPGAについてはCPUとは異なるヘテロジニアスなハードウェアとして歴史も深く、CUDAやOpenCLを用いた手動でのオフロードによる高速化事例も多く、市場も大きい。また、メニーコアCPUに関しては、近年16コア以上の多数のコアを搭載したCPUが千ドルから数千ドルの低価格でも市場に出るようになり、OpenMP等の技術仕様を用いて並列化を行い、手作業でチューニングすることで、高速化する事例が出てきている。
オフロードサーバ1は、アプリケーションの特定処理を、GPUやFPGAやメニーコアCPU等のアクセラレータに自動的にオフロードする装置である。
図1に示すように、オフロードサーバ1は、制御部11と、入出力部12と、記憶部13と、検証用マシン14(アクセラレータ検証用装置)と、を含んで構成される。
検証用マシン14は、環境適応ソフトウェアシステムの検証用環境として、GPUやFPGAやメニーコアCPU等のアクセラレータを備える。
コード指定部111は、入力されたソースコードの指定を行う。具体的には、コード指定部111は、受信したファイルに記載されたソースコードを、コード分析部112に渡す。
コード分析部112は、ソフトウェアプログラムのソースコードを分析し、for/do-while/whileなどのループ文や、FFTライブラリや行列演算や乱数生成等の機能ブロックを把握する。これらループ文や機能ブロックは、アクセラレータによる実行が可能なものである。
処理指定部114は、各機能ブロックに対して、アクセラレータへオフロードする処理に置換してコンパイルし、各ループ文に対して、アクセラレータにオフロードする並列処理指定文を指定してコンパイルする。処理指定部114は、オフロード範囲抽出部114aと中間言語ファイル出力部114bとを含んでいる。
処理パターン作成部115は、抽出したオフロード範囲に基づき、機能ブロックやループ文をアクセラレータにオフロードするパターンを作成する。
性能測定部116は、処理パターンのソースコードをコンパイルして、検証用マシン14に配置し、アクセラレータにオフロードした際の性能測定用処理を実行する。
性能測定部116は、バイナリファイル配置部116aを備える。バイナリファイル配置部116aは、メニーコアCPUとGPUとFPGAを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイ(配置)する。
実行ファイル作成部117は、所定回数繰り返された性能測定結果をもとに、複数のオフロードパターンから最高処理性能のオフロードパターンを選択し、最高処理性能のオフロードパターンをコンパイルして実行ファイルを作成する。
本番環境配置部118は、作成した実行ファイルを、ユーザ向けの本番環境に配置する(「最終バイナリファイルの本番環境への配置」)。本番環境配置部118は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
性能測定テスト抽出実行部119は、実行ファイル配置後、テストケースデータベース131から性能試験項目を抽出し、性能試験を実行する(「最終バイナリファイルの本番環境への配置」)。
性能測定テスト抽出実行部119は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースデータベース131から抽出し、抽出した性能試験を自動実行する。
ユーザ提供部120は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する(「価格・性能等の情報のユーザへの提供」)。テストケースデータベース131には、検証対象ソフトに対応した試験項目のデータが格納されている。ユーザ提供部120は、テストケースデータベース131に格納された試験項目を実施して得られた性能等のデータと、ユーザソフトを配置するリソース(仮想マシンやGPU等)の価格情報等のデータを、ユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、サービスの課金利用開始を判断する。
オフロードサーバ1は、オフロードの最適化に遺伝的アルゴリズムを用いることができる。遺伝的アルゴリズムを用いた場合のオフロードサーバ1の構成は下記の通りである。
すなわち、処理指定部114は、遺伝的アルゴリズムに基づき、ループ文(繰り返し文)の数を遺伝子長とする。処理パターン作成部115は、アクセラレータ処理をする場合を1または0のいずれか一方、しない場合を他方の0または1として、アクセラレータ処理可否を遺伝子パターンにマッピングする。
コンピュータ900は、CPU910、RAM920、ROM930、HDD940、通信インタフェース950、入出力インタフェース960、およびメディアインタフェース970を有する。
オフロードサーバ1は、GPU、FPGA、メニーコアCPUの3つの移行先環境に対して、機能ブロックとループ文の2つの方法で、自動オフロードを検討する。
これらステップS201~S208の処理により、複数種類のアクセラレータが混在する環境が移行先であっても、機能ブロックを自動で高性能化できる。更に、制御部11は、メニーコアCPU、GPU、FPGAの順に試行することにより、効率的に高速化可能なパターンを探索できる。
制御部11は、1ノードへの複数のオフロードが可能な候補が無ければ(No)、この図の処理を終了する。制御部11は、1ノードへの複数のオフロードが可能な候補があれば(Yes)、図3CのステップS217に進む。
そして制御部11は、組み合わせパターンの性能を測定し(S226)、全測定から最高性能のパターンを選択すると(S227)、この選択処理を終了する。
これらステップS217~S227の処理により、移行先が同一ノードに複数種類のアクセラレータを持つ場合は、複数種類のアクセラレータに対して同時にオフロードすることで、単一アクセラレータの利用の場合よりも高速なオフロードを実現する。
多様な移行先での自動オフロードについて検討する。
性能については、行う処理は同じでも、処理ハードウェアのスペック、処理内容(データサイズ、ループ回数等)により大きく変わるため、検証環境の実機で測定する事が必要である。移行先環境GPU、FPGA、メニーコアCPUの3つに対して、ループ文、機能ブロックの2つの方法でのオフロードがあるため、合計3×2の6つオフロードが考えられる。
CPUとGPUではデバイスが異なるため、丸め誤差の違い等で、正しくオフロードできても計算結果が異なる場合がある。
解となるパターンを作る際も試行錯誤が必要となる。6つのオフロード試行で、通常CPUよりも高速になるのが1つだけの場合は、そのパターンの実行ファイルを商用環境に配置すればよい。
(a) 同じ機能ブロックを複数種類のアクセラレータにオフロード可能な場合にはより高性能化効果が高いオフロード先を選択する。
(b) 異なる機能ブロックが異なる種類のアクセラレータにオフロード可能で、かつ同一ノードにオフロードできない場合は、より高性能化効果が高い機能ブロックをオフロード対象にする。
(c) 異なる機能ブロックが異なる種類のアクセラレータにオフロード可能で、かつ同一ノードにオフロードできる場合は、それら機能ブロックをオフロード対象にする。
ルール(c)の例として、シングルコアCPUで20秒を要する乱数処理をGPUにオフロードすると20秒を要し、シングルコアCPUで10秒を要するFFT処理をFPGAにオフロードすると1秒を要し、シングルコアCPUで50秒を要する行列計算をメニーコアCPUにオフロードすると10秒を要する場合を考える。更に、GPUとメニーコアCPUの両方を搭載したノードがあるとする。この場合は、同一ノード上で、乱数処理はGPUに、行列計算はメニーコアCPUにオフロードするパターンを選択するとよい。
このようにすることで、複数種類のアクセラレータが混在する環境に対して、機能ブロックを効率的に高速化可能なパターンを探索できる。
オフロードサーバ1の制御部11は、同じ機能ブロックを複数種類のアクセラレータにオフロード可能か否かを判定する(S50)。制御部11は、同じ機能ブロックを複数種類のアクセラレータにオフロード可能ならば(Yes)、より高性能化効果が高いオフロード先を選択し(S51)、図4Aの処理を終了する。制御部11は、同じ機能ブロックを複数種類のアクセラレータにオフロードできないならば(No)、ステップS52に進む。
制御部11は、異なる機能ブロックが異なる種類のアクセラレータにオフロードできないならば(No)、より高性能化効果が高い機能ブロックをオフロード対象にして(S54)、図4Aの処理を終了する。
ループ文のオフロードは、機能ブロックオフロードが可能な場合、オフロード可能な機能ブロック部分を除いたコードに対して行われる。ループ文オフロードでの高速化が、機能ブロックオフロードでのオフロード先と別ノードに対してのオフロードとなり、高性能化効果も小さい場合は、ループ文オフロードは行わない。
(d) 同じループ文が複数種類のアクセラレータにオフロードできる場合は、より高性能化効果が高いオフロード先を選択する。
オフロードサーバ1の制御部11は、同じループ文を複数種類のアクセラレータにオフロード可能か否かを判定する(S60)。制御部11は、同じループ文を複数種類のアクセラレータにオフロード可能ならば(Yes)、より高性能化効果が高いオフロード先を選択し(S61)、図4Bの処理を終了する。制御部11は、同じループ文を複数種類のアクセラレータにオフロードできないならば(No)、ステップS62に進む。
制御部11は、異なるループ文が異なる種類のアクセラレータにオフロードできないならば(No)、より高性能化効果が高いループ文をオフロード対象にして(S64)、図4Bの処理を終了する。
このようにすることで、複数種類のアクセラレータが混在する環境に対して、ループ文を効率的に高速化可能なパターンを探索できる。
最初、コード分析部112は、C/C++ソースコードのオフロード分析を行う(S30)。具体的には、コード分析部112は、Clang等の構文解析ツールを用いて、コードに含まれるライブラリ呼び出しや、機能処理を分析する。
次に実行ファイル作成部117は、作成したパターンをコンパイルする(S36)。性能測定部116は、作成したパターンを検証環境で性能測定する(S37)。これは、1回目の性能測定である。
オフロードサーバ1は、コード解析にて、呼び出されているライブラリや定義されているクラス、構造体等のプログラム構造を把握する。
オフロードサーバ1は、呼び出されているライブラリをキーに、コードパターンデータベース133に登録されているレコードから、高速化可能な実行ファイルやOpenCL等を取得する。高速化できる置換用機能が検出されたら、オフロードサーバ1は、その実行用ファイルを作成する。
機能ブロックオフロードにおいて、オフロードサーバ1は、置換機能ブロック一つずつに対してオフロードするしないを性能測定して高速化できるか確認する。6つのオフロード試行で、通常CPUより高速のパターンが、1つだけの場合はそのパターンを選択するが、複数の際には解となるパターンを、以下のロジックで作成する。
本実施形態のオフロードサーバ1は、環境適応ソフトウェアシステムの要素技術として、ユーザアプリケーションロジックをアクセラレータに自動オフロードする技術に適用した例である。
図6に示すように、オフロードサーバ1は、環境適応ソフトウェアシステムの要素技術に適用される。オフロードサーバ1は、制御部11と、テストケースデータベース131と、中間言語ファイル132と、検証用マシン14と、を有している。
オフロードサーバ1は、ユーザが利用するソースコード130を取得する。
《ステップS11:ソースコードの指定》
ステップS11において、コード指定部111(図1参照)は、ユーザに提供しているサービスの処理機能(画像分析等)を特定する。具体的には、コード指定部111は、入力されたソースコードを指定する。
ステップS12において、コード分析部112(図1参照)は、処理機能のソースコードを分析し、ループ文やFFTライブラリ呼び出し等の構造を把握する。
ステップS13において、処理指定部114(図1参照)は、アプリケーションのソースコードに含まれるループ文を特定し、各ループ文に対して、アクセラレータにおける並列処理指定文を指定してコンパイルする。具体的には、オフロード範囲抽出部114a(図1参照)は、ループ文やFFT等、GPU・FPGAにオフロード可能な範囲を抽出する。
ステップS14において、処理指定部114(図1参照)は、中間言語ファイル出力部114bにより、中間言語ファイル132を出力する。中間言語の出力は、一度で終わりでなく、適切なオフロード領域探索のため、実行を試行して最適化するため反復される。
ステップS15において、処理パターン作成部115(図1参照)は、コンパイルエラーが出るループ文に対して、オフロード対象外とするとともに、コンパイルエラーが出ないループ文に対して、並列処理するかしないかの指定を行う並列処理パターンを作成する。
ステップS21において、実行ファイル配置部116a(図1参照)は、メニーコアCPUとGPUとFPGAを備えた検証用マシン14に、中間言語から導かれる実行ファイルをデプロイする。
ステップS22において、性能測定部116(図1参照)は、配置したファイルを実行し、オフロードした際の性能を測定する。
オフロードする領域をより適切にするため、この性能測定結果は、処理パターン作成部115に戻され、処理パターン作成部115が、別のオフロードパターンを作成する。そして、性能測定部116は、別のオフロードパターンの性能を測定する(図6の符号e参照)。
すなわち、処理指定部114は、ソースコードのループ文を特定し、各ループ文に対して、並列処理指定文を指定して、コンパイルする。そして、処理パターン作成部115は、コンパイルエラーが出るループ文を、オフロード対象外とし、コンパイルエラーが出ないループ文に対して、並列処理するか否かの指定を行う並列処理パターンを作成する。そして、性能測定部116は、該当並列処理パターンのソースコードをコンパイルして、検証用マシン14に配置し、検証用マシン14で性能測定用処理を実行する。実行ファイル作成部117は、所定回数繰り返された、性能測定結果をもとに、複数の並列処理パターンから最高処理性能のパターンを選択し、選択パターンをコンパイルして実行ファイルを作成する。
ステップS23において、本番環境配置部118は、最終的なオフロード領域を指定したパターンを決定し、ユーザ向けの本番環境にデプロイする。
ステップS24において、性能測定テスト抽出実行部119は、実行ファイル配置後、ユーザに性能を示すため、性能試験項目をテストケースデータベース131から抽出し、抽出した性能試験を自動実行する。
ステップS25において、ユーザ提供部120は、性能試験結果を踏まえた、価格・性能等の情報をユーザに提示する。ユーザは、提示された価格・性能等の情報をもとに、サービスの課金利用開始を判断する。
GPUやメニーコアCPUへのループ文自動オフロードは、図6のステップS12~ステップS22を繰り返し、最終的にステップS23でデプロイするオフロードコードを得るための処理である。
図7は、オフロードサーバの単純遺伝的アルゴリズムによる制御部11の探索イメージを示す図である。
遺伝的アルゴリズムは、生物の進化過程を模倣した組み合わせ最適化手法の一つである。遺伝的アルゴリズムのフローチャートは、初期化→評価→選択→交叉→突然変異→終了判定となっている。
初期化では、ソースコードの全ループ文の並列可否をチェック後、並列可能ループ文を遺伝子配列にマッピングする。GPU処理する場合は1、GPU処理しない場合は0とする。遺伝子は、指定の個体数Mを準備し、1つのループ文にランダムに1と0を割り当てる。
遺伝子長に該当するコードが3桁であり、3桁の遺伝子長のコードは23=8パターン、例えば100、110、…となる。なお、図7では、コードパターン141中の丸印(○印)をコードのイメージとして示している。
ステップS300の評価では、デプロイとパフォーマンスの測定を行う。すなわち、性能測定部116(図1参照)は、遺伝子に該当するコードをコンパイルして検証用マシン14にデプロイして実行する。性能測定部116は、ベンチマーク性能測定を行う。性能が良いパターン(並列処理パターン)の遺伝子の適合度を高くする。
ステップS301の選択では、適合度に基づいて、高性能コードパターンを選択する。性能測定部116(図1参照)は、適合度に基づいて、高適合度の遺伝子を、指定の個体数だけ選択する。本実施形態では、適合度に応じたルーレット選択および最高適合度遺伝子のエリート選択を行う。
図7では、選択されたコードパターン142の中の丸印(○印)が、3つに減ったことを探索イメージとして示している。
交叉では、一定の交叉率Pcで、選択された個体間で一部の遺伝子をある一点で交換し、子の個体を作成する。
ルーレット選択された、あるパターン(並列処理パターン)と他のパターンとの遺伝子を交叉させる。一点交叉の位置は任意であり、例えば上記3桁のコードのうち2桁目で交叉させる。
突然変異では、一定の突然変異率Pmで、個体の遺伝子の各値を0から1または1から0に変更する。
また、局所解を避けるため、突然変異を導入する。なお、演算量を削減するために突然変異を行わない態様でもよい。そして、ステップS302で示すように、これら交叉や突然変異を施した各コードを次世代のコードとする。
クロスオーバーと突然変異後の次世代コードパターンを生成する。
終了判定では、指定の世代数T回、繰り返しを行った後に処理を終了し、最高適合度の遺伝子を解とする。
例えば、性能測定して、処理速度が速い個体を3つ、例えば遺伝子110,010,001の個体を選ぶ。この3つを遺伝的アルゴリズムにより、次の世代は、組み換えをして、例えば新しいパターン(並列処理パターン)011(一例)を作っていく。このとき、組み換えをしたパターンに、勝手に0を1にするなどの突然変異を入れる。上記を繰り返して、一番処理速度が速いパターンを見付ける。指定世代(例えば、20世代)などを決めて、最終世代で残ったパターンを、最後の解とする。
最高適合度の遺伝子に該当する、最高処理性能の並列処理パターンで、本番環境に改めてデプロイして、ユーザに提供する。
GPUにオフロードできないループ文(ループ文;繰り返し文)が相当数存在する場合について説明する。例えば、ループ文が200個あっても、GPUにオフロードできるものは30個くらいである。ここでは、エラーになるものを除外し、この30個について、遺伝的アルゴリズムを行う。
以上が準備段階である。次に遺伝的アルゴリズム処理を行う。
コードパターン141dは、3つのループ文を含んでいる。ここで、各ループ文に対してバイナリ1桁が割り振られ、3つのループ文に対して3桁の1または0がランダムに割り当てられる。
最初、コード分析部112は、C/C++ソースコードのループ文を分析する(S90)。処理指定部114は、C/C++ソースコードのループ文、参照関係を特定する(S91)。
また、指定世代数の繰り返しにおいて、さらにステップS101~S104の処理について指定個体数だけ繰り返す。すなわち、指定世代数の繰り返しの中で、指定個体数の繰り返しが入れ子状態で処理される。
ここで、ネストした複数のループ文を並列処理を指定する場合等でコンパイルエラーとなることがある。この場合は、性能測定時の処理時間がタイムアウトした場合と同様に扱う。
実行ファイル作成部117(図1参照)は、各個体の計算結果とシングルコアCPUの計算結果との差を評価し、許容範囲となる個体を選択する(S107)。実行ファイル作成部117は、性能測定の際に、最終計算結果が並列処理しない場合と同じ結果であることを、オリジナルコードを通常CPUで処理した場合と比較し、もし差分が許容できない程大きい場合はそのパターンの適応度は0として次世代には選ばれないようにする。実行ファイル作成部117は、並列処理した場合の最終計算結果が正しいかどうかのチェックも性能測定時に行うことで、進化計算の中で、正しい計算結果が出るパターンに絞り込むことができる。
このようにすることで、メニーコアCPUの環境が移行先であっても、ループ文を効率的に高速化可能なパターンを探索できる。
オフロードサーバ1は、C/C++ソースコードを解析して、ループ文を発見するとともに、ループ文内で使われる変数データ、その変数の処理等の、プログラム構造を把握する。
コードパターン141eの最初のforループ文には、“#pragma acc kernels”が付与されている。このとき、最初のforループ文は、GPUにオフロードするようにコンパイルされる。更に、コードパターン141eの左側には、コードパターン141eの遺伝子配列100が示されている。
オフロードサーバ1は、C/C++向けOpenACCコンパイラを用いて以下の処理を行う。
処理指定部114は、各ループ文に対して並列処理を指定してコンパイルする(S125)。図10に示すように、OpenACCにおける並列処理の指定は、“#pragma acc kernels”である。
コンパイルのエラー時に処理指定部114は、並列処理の指定を削除し、当該ループ文をオフロード対象から除外する(S126)。そして制御部11は、全てのループ文について処理を繰り返したならば、ステップS128に進む。
また、指定世代数の繰り返しにおいて、さらにステップS131~S134の処理について指定個体数だけ繰り返す。すなわち、指定世代数の繰り返しの中で、指定個体数の繰り返しが入れ子状態で処理される。
ここで、ネストループ文を複数並列指定する場合等でコンパイルエラーとなることがある。この場合は、性能測定時の処理時間がタイムアウトした場合と同様に扱う。
すなわち、実行ファイル作成部117は、全個体に対して、ベンチマーク性能測定後、ベンチマーク処理時間に応じて、各遺伝子配列の適合度を設定する。そして実行ファイル作成部117は、設定された適合度に応じて、残す個体を選択する。そして実行ファイル作成部117は、選択された個体に対して、交叉、突然変異、そのままコピーの遺伝的アルゴリズム処理を行い、次世代の個体群を作成する。
ループ文のGPU自動オフロードについては、進化計算手法を用いた最適化と、CPU-GPU転送の低減により、自動でのオフロードを可能としている。
最初、コード分析部112は、オフロードしたいソースコードを分析し(S150)、ソースコードの言語に合わせて、ループ文や変数の情報を分析する。
オフロードサーバ1は、C/C++ソースコードを解析して、ループ文を発見するとともに、ループ文内で使われる変数データ等の、プログラム構造を把握する。
次に、オフロードサーバ1は、ROSEを実行して、各ループ文の算術強度を取得し、gcovを用いて、各ループ文のループ回数を取得する。
最後に、オフロードサーバ1は、複数の測定パターンから高速なパターンを解として選択する。
請求項1に記載の発明では、ソフトウェアプログラムのソースコードがアクセラレータによる実行が可能な機能ブロックを含むか否かを分析するコード分析部と、前記機能ブロックを前記アクセラレータにオフロードするパターンを作成する処理パターン作成部と、前記機能ブロックをオフロードする各前記パターンを検証環境にデプロイして性能を測定する性能測定部と、前記性能測定部が測定した性能が所望のものであった場合、前記処理パターン作成部により、前記ソフトウェアプログラムのうち、前記機能ブロックを除く残りのループ文をオフロードするパターンを作成して、前記性能測定部により、各前記パターンを前記検証環境にデプロイして性能を測定し、前記性能測定部が測定した性能が所望のものでなかった場合、前記処理パターン作成部により、前記ソフトウェアプログラムのループ文をオフロードするパターンを作成して、前記性能測定部により、各前記パターンを前記検証環境にデプロイして性能を測定する制御部と、を備えることを特徴とするオフロードサーバとした。
2 クラウドレイヤ
3 ネットワークレイヤ
4 デバイスレイヤ
10 ゲートウェイ
20 ネットワークエッジ
30 データセンタ
11 制御部
12 入出力部
13 記憶部
14 検証用マシン
15 リソース
111 コード指定部
112 コード分析部
114 処理指定部
114a オフロード範囲抽出部
114b 中間言語ファイル出力部
115 処理パターン作成部
116 性能測定部
116a 実行ファイル配置部
117 実行ファイル作成部
118 本番環境配置部
119 性能測定テスト抽出実行部
120 ユーザ提供部
130 ソースコード
131 テストケースデータベース
132 中間言語ファイル
133 コードパターンデータベース
141,142 コードパターン
151~154 装置
80 通信網
900 コンピュータ
910 CPU
920 RAM
930 ROM
940 HDD
950 通信インタフェース
960 入出力インタフェース
970 メディアインタフェース
980 記録媒体
Claims (7)
- ソフトウェアプログラムのソースコードがアクセラレータによる実行が可能な機能ブロックを含むか否かを分析するコード分析部と、
前記機能ブロックを各前記アクセラレータの何れかにオフロードするパターンを作成し、前記ソフトウェアプログラムのループ文を各前記アクセラレータの何れかにオフロードするパターンを作成する処理パターン作成部と、
前記機能ブロックまたは前記ループ文を前記アクセラレータにオフロードする各前記パターンを検証環境にデプロイして性能を測定する性能測定部と、
前記性能測定部が前記機能ブロックを各前記アクセラレータの何れかにオフロードするパターンを測定した性能が所望のものでなかった場合、前記処理パターン作成部により、前記ソフトウェアプログラムの前記ループ文を各前記アクセラレータの何れかにオフロードするパターンを作成して、前記性能測定部により、各前記パターンを前記検証環境にデプロイして性能を測定する制御部と、
を備えることを特徴とするオフロードサーバ。 - 前記アクセラレータは複数種類であり、
前記制御部は、前記機能ブロックまたは前記ループ文を各前記アクセラレータの何れかにオフロードするパターンのうち、最も高速なものを選択する、
ことを特徴とする請求項1に記載のオフロードサーバ。 - 前記制御部は、前記アクセラレータへのオフロード対象として前記機能ブロックの試行の次に前記ループ文を試行し、前記機能ブロックまたは/および前記ループ文のオフロード先の前記アクセラレータとして、メニーコアCPU、GPU、FPGAの順に試行する、
ことを特徴とする請求項1または2に記載のオフロードサーバ。 - 前記制御部は、前記機能ブロックまたは前記ループ文のオフロードにおいて、元の処理よりも高速なパターンが複数のアクセラレータに対して見つかり、かつ同じ機能ブロックまたはループ文が前記複数のアクセラレータにオフロードできる場合、より性能が高くなるアクセラレータをオフロード先とし、
異なる機能ブロックまたは異なるループ文が異なるアクセラレータにオフロードでき,かつ同一ノードのアクセラレータにオフロードできない場合、より性能が高くなるアクセラレータをオフロード先とし、
異なる機能ブロックまたは異なるループ文が異なるアクセラレータにオフロードでき,かつ同一ノードのアクセラレータにオフロードできる場合、前記機能ブロックまたは前記ループ文のオフロード先をそれぞれ異なるアクセラレータとする、
ことを特徴とする請求項1に記載のオフロードサーバ。 - 前記制御部は、前記機能ブロックと前記ループ文のオフロードにおいて、前記ループ文のオフロード先が,前記機能ブロックのオフロード先とは別ノードとなる場合,前記ループ文のオフロードによる性能の向上が前記機能ブロックのオフロードによる性能向上以下ならば、前記ループ文をオフロードするパターンを試行せず、かつ前記機能ブロックをオフロードするパターンを試行し、
前記ループ文のオフロードによる性能の向上が前記機能ブロックのオフロードによる性能向上を超えたならば、前記機能ブロックをオフロードするパターンを試行せず、かつ前記ループ文をオフロードするパターンを試行し、
前記ループ文のオフロード先が前記機能ブロックのオフロード先と同一ノードとなる場合,前記機能ブロックと前記ループ文とをオフロードしたパターンを試行する、
ことを特徴とする請求項1に記載のオフロードサーバ。 - コード分析部が、ソフトウェアプログラムのソースコードがアクセラレータによる実行が可能な機能ブロックを含むか否かを分析するステップと、
処理パターン作成部が、前記機能ブロックを各前記アクセラレータの何れかにオフロードするパターンを作成するステップと、
性能測定部が、前記機能ブロックを各前記アクセラレータの何れかにオフロードする各前記パターンを検証環境にデプロイして性能を測定するステップと、を実行し、
前記性能測定部が前記機能ブロックを各前記アクセラレータの何れかにオフロードするパターンを測定した性能が所望のものでなかった場合、前記処理パターン作成部が、前記ソフトウェアプログラムのループ文を各前記アクセラレータの何れかにオフロードするパターンを作成するステップと、
前記性能測定部が、各前記パターンを前記検証環境にデプロイして性能を測定するステップと、を実行する、
ことを特徴とするオフロード制御方法。 - コンピュータに、
ソフトウェアプログラムのソースコードがアクセラレータによる実行が可能な機能ブロックを含むか否かを分析させる手順、
前記機能ブロックを各前記アクセラレータの何れかにオフロードするパターンを作成させる手順、
前記機能ブロックを各前記アクセラレータの何れかにオフロードする各前記パターンを検証環境にデプロイして性能を測定させる手順、
前記機能ブロックを各前記アクセラレータの何れかにオフロードするパターンを測定した性能が所望のものでなかった場合、前記ソフトウェアプログラムのループ文を各前記アクセラレータの何れかにオフロードするパターンを作成させ、各前記パターンを前記検証環境にデプロイして性能を測定させる手順、
を実行させるためのオフロードプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2024033327A JP2024063183A (ja) | 2020-10-12 | 2024-03-05 | オフロードサーバ、および、オフロード制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2020/038416 WO2022079748A1 (ja) | 2020-10-12 | 2020-10-12 | オフロードサーバ、オフロード制御方法およびオフロードプログラム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2024033327A Division JP2024063183A (ja) | 2020-10-12 | 2024-03-05 | オフロードサーバ、および、オフロード制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2022079748A1 JPWO2022079748A1 (ja) | 2022-04-21 |
JP7473003B2 true JP7473003B2 (ja) | 2024-04-23 |
Family
ID=81207861
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022557221A Active JP7473003B2 (ja) | 2020-10-12 | 2020-10-12 | オフロードサーバ、オフロード制御方法およびオフロードプログラム |
JP2024033327A Pending JP2024063183A (ja) | 2020-10-12 | 2024-03-05 | オフロードサーバ、および、オフロード制御方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2024033327A Pending JP2024063183A (ja) | 2020-10-12 | 2024-03-05 | オフロードサーバ、および、オフロード制御方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230385178A1 (ja) |
EP (1) | EP4227815A1 (ja) |
JP (2) | JP7473003B2 (ja) |
CN (1) | CN116261720A (ja) |
WO (1) | WO2022079748A1 (ja) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020137017A (ja) | 2019-02-22 | 2020-08-31 | 日本電信電話株式会社 | オフロードサーバのソフトウェア最適配置方法およびプログラム |
-
2020
- 2020-10-12 WO PCT/JP2020/038416 patent/WO2022079748A1/ja unknown
- 2020-10-12 JP JP2022557221A patent/JP7473003B2/ja active Active
- 2020-10-12 EP EP20957577.8A patent/EP4227815A1/en active Pending
- 2020-10-12 US US18/248,637 patent/US20230385178A1/en active Pending
- 2020-10-12 CN CN202080105871.3A patent/CN116261720A/zh active Pending
-
2024
- 2024-03-05 JP JP2024033327A patent/JP2024063183A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020137017A (ja) | 2019-02-22 | 2020-08-31 | 日本電信電話株式会社 | オフロードサーバのソフトウェア最適配置方法およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
JP2024063183A (ja) | 2024-05-10 |
US20230385178A1 (en) | 2023-11-30 |
WO2022079748A1 (ja) | 2022-04-21 |
EP4227815A1 (en) | 2023-08-16 |
JPWO2022079748A1 (ja) | 2022-04-21 |
CN116261720A (zh) | 2023-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Fang et al. | Turbotransformers: an efficient gpu serving system for transformer models | |
Pérez et al. | Simplifying programming and load balancing of data parallel applications on heterogeneous systems | |
JP7063289B2 (ja) | オフロードサーバのソフトウェア最適配置方法およびプログラム | |
EP3126971B1 (en) | Program execution on heterogeneous platform | |
JP6927424B2 (ja) | オフロードサーバおよびオフロードプログラム | |
JP7322978B2 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
US20110131554A1 (en) | Application generation system, method, and program product | |
US20110088020A1 (en) | Parallelization of irregular reductions via parallel building and exploitation of conflict-free units of work at runtime | |
Shen et al. | Improving performance by matching imbalanced workloads with heterogeneous platforms | |
JP2011170732A (ja) | 並列化方法、システム、及びプログラム | |
JP6992911B2 (ja) | オフロードサーバおよびオフロードプログラム | |
JP7473003B2 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
JP7363931B2 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
WO2022097245A1 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
WO2023002546A1 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
JP7363930B2 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
WO2022102071A1 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
WO2023144926A1 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
WO2023228369A1 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
WO2024079886A1 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
JP7184180B2 (ja) | オフロードサーバおよびオフロードプログラム | |
JP7380823B2 (ja) | オフロードサーバ、オフロード制御方法およびオフロードプログラム | |
US20220116284A1 (en) | Methods and apparatus for dynamic xpu hardware-aware deep learning model management | |
US20220222177A1 (en) | Systems, apparatus, articles of manufacture, and methods for improved data transfer for heterogeneous programs | |
Azzopardi et al. | Mapping CSP Networks to MPI Clusters Using Channel Graphs and Dynamic Instrumentation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230217 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20240123 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240305 |
|
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: 20240312 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240325 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7473003 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |