FLOPSを枬定する方法ず理由

画像 ご存じのずおり 、FLOPSは オりム 浮動小数点挔算におけるコンピュヌタヌの蚈算胜力の枬定単䜍であり、倚くの堎合、誰がより倚くを持っおいるかを枬定するために䜿甚されたす。 トップ500のスヌパヌコンピュヌタヌの䞖界でFLOPSを枬定し、それらの䞭で誰が最も優れおいるかを調べるこずが特に重芁です。 ただし、枬定の察象には、少なくずもいく぀かの実甚的なアプリケヌションが必芁です。そうでない堎合、枬定ず比范のポむントは䜕ですか。 したがっお、スヌパヌコンピュヌタヌだけの機胜を調べるには、SPEC SPECintおよびSPECfpなど、実際のコンピュヌティングタスクに近いベンチマヌクを少し増やしたす。 それでも、FLOPSはパフォヌマンス評䟡で積極的に䜿甚され、レポヌトで公開されおいたす。 Linpackテストはそれを枬定するために長い間䜿甚されおきたしたが、珟圚はLAPACKのオヌプンスタンダヌドベンチマヌクを䜿甚しおいたす。 これらの枬定は、高性胜で科孊的なアプリケヌションの開発者に䜕を提䟛したすか FLOPSでアルゎリズムを実装するパフォヌマンスを簡単に評䟡するこずは可胜ですか 枬定ず比范は正しいですか このすべおに぀いお以䞋で説明したす。





最初に、甚語ず定矩を芋おみたしょう。 したがっお、FLOPSは、1秒あたりの浮動小数点オペランドFPで実行される蚈算操䜜たたは呜什の数です。 ここでは、「コンピュヌティング」ずいう語が䜿甚されたす。これは、マむクロプロセッサが、メモリからのロヌドなど、そのようなオペランドを持぀他の呜什も実行できるためです。 このような操䜜は有甚な蚈算負荷を䌎わないため、考慮されたせん。



特定のシステム甚に公開されたFLOPS倀は、プログラムではなく、䞻にコンピュヌタヌ自䜓の特性です。 理論ず実甚の2぀の方法で取埗できたす。 理論的には、システム内にマむクロプロセッサがいく぀あるか、各プロセッサに実行可胜な浮動小数点デバむスがいく぀あるかがわかりたす。 それらはすべお同時に動䜜し、サむクルごずにパむプラむンの次の呜什で動䜜を開始できたす。 したがっお、このシステムの理論䞊の最倧倀を蚈算するには、これらすべおの量にプロセッサ呚波数を掛けるだけで枈みたす。1秒あたりのFP操䜜の数を取埗したす。 すべおが単玔ですが、圌らはスヌパヌコンピュヌタヌを構築するための将来の蚈画に぀いおマスコミで発衚しおいるこずを陀いお、そのような掚定倀を䜿甚しおいたす。



実際の枬定は、Linpackベンチマヌクを起動するこずです。 ベンチマヌクは、マトリックスにマトリックスを数十回掛ける挔算を実行し、テスト実行時間の平均倀を蚈算したす。 アルゎリズムの実装におけるFP操䜜の数は事前にわかっおいるため、1぀の倀を別の倀で陀算するこずにより、目的のFLOPSを取埗したす。 むンテルMKLラむブラリヌMath Kernel Libraryには、線圢代数問題を解決するためのラむブラリヌのパッケヌゞであるLAPACKパッケヌゞが含たれおいたす。 ベンチマヌクは、このパッケヌゞに基づいお構築されおいたす。 その有効性は理論的に可胜な90のレベルであるず考えられおおり、これによりベンチマヌクを「参照枬定」ず芋なすこずができたす。 別途、Windows、Linux、およびMacOS甚のIntel Optimized LINPACK Benchmarkはここからダりンロヌドできたす。IntelParallel Studio XEがむンストヌルされおいる堎合は、composerxe / mkl /ベンチマヌクディレクトリで取埗できたす。



明らかに、高性胜アプリケヌションの開発者は、FLOPSメトリックを䜿甚しおアルゎリズムの実装の有効性を評䟡したいず考えおいたすが、アプリケヌションに぀いおはすでに枬定されおいたす。 枬定されたFLOPSず「リファレンス」ずの比范により、アルゎリズムのパフォヌマンスが理想からどれだけ離れおいるか、およびその改善の理論的可胜性はどれくらいかがわかりたす。 これを行うには、アルゎリズムの実行に必芁なFP操䜜の最小数を知り、プログラムたたは評䟡されたアルゎリズムを実行するプログラムの䞀郚の実行時間を正確に枬定する必芁がありたす。 このような結果は、メモリバスの特性の枬定ずずもに、アルゎリズムの実装がハヌドりェアシステムの機胜に䟝存する堎所ず、制限芁因であるメモリ垯域幅、デヌタ転送遅延、アルゎリズム、たたはシステムパフォヌマンスを理解するために必芁です。



画像



それでは、ご存じのように、すべおの悪の詳现を掘り䞋げたしょう。 理論、ベンチマヌク、プログラムの3぀のFLOPS評䟡/枬定倀がありたす。 ケヌスごずにFLOPSを蚈算する機胜を怜蚎しおください。



システムのFLOPSの理論的評䟡

プロセッサでの同時操䜜の数がどのように蚈算されるかを理解するために、Intel Sandy Bridgeプロセッサのパむプラむンにある順䞍同のブロックデバむスを芋おみたしょう。



画像



ここでは、コンピュヌティングデバむス甚に6぀のポヌトがあり、1サむクルたたはプロセッササむクルで、ディスパッチャに最倧6぀のマむクロオペレヌション3぀のメモリ操䜜ず3぀のコンピュヌティング操䜜を割り圓おるこずができたす。 x87 FPナニットずSSEたたはAVXの䞡方で、1぀の乗算挔算 MUL ず1぀の加算 ADD を同時に実行できたす。 256ビットSIMDレゞスタの幅を考えるず、次の結果が埗られたす。



画像



8 MUL32ビットおよび8 ADD32ビット 16 SP FLOP /サむクル 、぀たり、サむクルごずに16の単粟床浮動小数点挔算。

4 MUL64ビットおよび4 ADD64ビット 8 DP FLOP /サむクル 、぀たりサむクルごずに8぀の倍粟床浮動小数点挔算。



1゜ケットXeon E3-12754コア@ 3.574GHzの理論䞊のピヌクFLOPSは次のずおりです。

16FLOP /サむクル* 4 * 3.574Gcycles /秒= 228 GFLOPS SP

8FLOP /サむクル* 4 * 3.574Gcycles /秒= 114 GFLOPS DP



Linpackベンチマヌクを起動する

ベンチマヌクはシステム䞊のIntel MKLパッケヌゞから実行され、次の結果が埗られたす簡単に衚瀺できるようにカットされおいたす。



画像



ここで、ベンチマヌクでFP操䜜が正確に考慮される方法を蚀う必芁がありたす。 すでに述べたように、このテストは、行列の乗算に必芁なMULおよびADD操䜜の数を事前に「認識」しおいたす。 簡略化したビュヌ線圢方皋匏Ax = bのシステムは、サむズMxKの実数real8の密行列を乗算するこずにより数千個解かれ、アルゎリズムの実装に必芁な加算および乗算挔算の数が考慮されたす察称行列の堎合Nflop = 2 *M ^ 3+M ^ 2。 ほずんどのベンチマヌクず同様に、倍粟床の数倀に察しお蚈算が行われたす。 アルゎリズムの実装で実際に浮動小数点を䜿甚しお実行される操䜜の数。ナヌザヌは気にしたせんが、それ以䞊掚枬したす。 これは、コンピュヌティングプラットフォヌムで最倧のアルゎリズムパフォヌマンスを達成するために、ブロックぞのマトリックス分解ず倉換因数分解が実行されるずいう事実によるものです。 ぀たり、実際には、䞍必芁な倉換操䜜やシフトなどの補助操䜜を無芖しおいるため、物理FLOPSの倀が過小評䟡されおいるこずを芚えおおく必芁がありたす。



FLOPSプログラムの評䟡

比范可胜な結果を​​調べるために、MKL Performance Library開発チヌムの数孊の専門家の助けを借りずに、高性胜アプリケヌションずしお、日曜倧工の行列乗算の䟋を䜿甚したす。 Cで蚘述された行列乗算の実装䟋は、Intel VTune Amplifier XEパッケヌゞのSamplesディレクトリにありたす。 匏Nflop = 2 *M ^ 3を䜿甚しお基本的な行列乗算アルゎリズムに基づいおFP挔算を蚈算し、察称行列M = 4096のサむズの乗算3アルゎリズムの堎合の乗算時間を枬定したす。 効率的なコヌドを取埗するために、むンテル®Cコンパむラヌの最適化オプション–O3 積極的なルヌプ最適化および–xavx AVX呜什を䜿甚を䜿甚しお、AVXアクチュ゚ヌタヌのベクトルSIMD呜什を生成したす。 コンパむラヌは、マトリックス乗算サむクルがベクトル化されおいるかどうかを調べるのに圹立ちたす。 これを行うには、 –vec-report3オプションを指定したす 。 コンパむル結果には、オプティマむザヌメッセヌゞが衚瀺されたす。multiplier.cファむルの内郚ルヌプの本文の行の反察偎に「LOOP WAS VECTORIZED」が衚瀺されたす。



画像



念のため、乗算サむクルに察しおコンパむラヌが生成する呜什を確認したす。

$ icl –g –O3 –xavx –S

タグ__​​tag_value_multiply3によっお、目的のサむクルを探しおいたす-指瀺は正しいです。



$ vi muliply3.s

画像



プログラムの結果〜7秒

画像



次の倀が埗られたすFLOPS = 2 * 4096 * 4096 * 4096/7 [s] = 19.6 GFLOPS

もちろん、結果はLinpackで埗られるものずは倧きく異なりたす。これは、蚘事の著者ずMKLラむブラリの開発者ずの間の資栌のギャップによっおのみ説明されたす。



さお、今デザヌト 実際、私はこの䞀芋退屈で長幎の話題に぀いお研究を始めたために。 FLOPSを枬定する新しい方法。



FLOPSプログラムの枬定

線圢代数には問題があり、そのような掚定倀を芋぀けるこず自䜓が自明な数孊的問題であるずいう意味で、FP挔算の数で゜フトりェア実装を評䟡するこずは非垞に困難です。 そしお、圌らが蚀うように、私たちは到着したした。 プログラムのFLOPSの読み方 実隓的、実隓的の2぀の方法がありたす。難しい、正確な結果を䞎える、そしお簡単ですが、倧たかな芋積もりを提䟛したす。 最初のケヌスでは、問題の解決策の基本的な゜フトりェア実装を取り、それをアセンブラヌ呜什にコンパむルし、プロセッサヌシミュレヌタヌで実行しお、FP操䜜の数を蚈算する必芁がありたす。 簡単ではあるが信頌できない方法を望んでいるように聞こえたす。 さらに、タスク実行の分岐が入力デヌタに䟝存する堎合、評䟡の正確性党䜓がすぐに疑問芖されたす。



簡単な方法のアむデアは次のずおりです。 プロセッサに完了したFP呜什の数を尋ねないでください。 もちろん、プロセッサパむプラむンはこれを認識しおいたせん。 しかし、1぀たたは別のコンピュヌティングナニットで実行されたマむクロ操䜜の数をカりントできるパフォヌマンスカりンタヌPMU-ここでは興味深いがありたす。 VTune Amplifier XEは、このようなカりンタヌで動䜜したす。



VTuneには倚くの組み蟌みプロファむルがありたすが、FLOPSを枬定するための特別なプロファむルはただありたせん。 ただし、30秒以内に独自のナヌザヌプロファむルを䜜成するこずを劚げるものはありたせん。 VTuneむンタヌフェヌスの基本的な操䜜に煩わされるこずなく付属の入門チュヌトリアルで孊習できたす、プロファむルの䜜成ずデヌタの収集のプロセスをすぐに説明したす。



  1. 新しいプロゞェクトを䜜成し、 マトリックスアプリケヌションをタヌゲットアプリケヌションずしお指定したす。
  2. Lightweight HotspotsプロファむルHadware Event-based Samplingプロセッサヌカりンタヌサンプリングテクノロゞヌを䜿甚を遞択し、それをコピヌしおカスタムプロファむルを䜜成したす。 それをMy FLOPS Analysisず呌びたす。
  3. プロファむルを線集し、そこにSandy BridgeEventsプロセッサむベントの新しいプロセッサカりンタを远加したす。 もう少し詳しく説明したす。 その名前では、実行デバむスx87、SSE、AVXおよび操䜜が実行されたデヌタのタむプが暗号化されおいたす。 プロセッサヌの各サむクルで、カりンタヌは実行に割り圓おられた蚈算操䜜の数を合蚈したす。 念のため、FPで可胜なすべおの操䜜にカりンタヌを远加したした。




分析を実行し、結果を埅぀こずしかできたせん。 結果では、ハヌドりェアむベントビュヌポむントに切り替え、 multiply3関数で収集されたむベント数34,648,000,000をコピヌしたす。



画像



次に、匏を䜿甚しおFLOPS倀を単玔に蚈算したす。 デヌタはすべおのプロセッサに぀いお収集されおいるため、ここでそれらの数を乗算する必芁はありたせん。 倍粟床デヌタ挔算は、256ビットレゞスタ内の4぀の64ビットDPオペランドで同時に実行されるため、4倍にしたす。それぞれ単粟床の耇数デヌタに8倍したす。最埌の匏では、コプロセッサヌ挔算x87はスカラヌ倀でのみ実行されたす。 プログラムがいく぀かの異なるタむプのFP操䜜を実行する堎合、それらの数に係数を掛けお合蚈し、結果のFLOPSを取埗したす。



FLOPS = 4 * SIMD_FP_256.PACKED_DOUBLE /経過時間

FLOPS = 8 * SIMD_FP_256.PACKED_SINGLE /経過時間

FLOPS =FP_COMP_OPS_EXE.x87/経過時間



プログラムではAVX呜什のみが実行されたため、結果の倀は1぀のカりンタヌSIMD_FP_256.PACKED_DOUBLEのみです。

これらのむベントが、 multiply3関数のルヌプに察しお収集されおいるこずを確認したす゜ヌスビュヌに切り替えお。



画像



FLOPS = 4 * 34.6Gops / 7s = 19.7 GFlops

この倀は、前の段萜で蚈算された掚定倀ず䞀臎しおいたす。 したがっお、十分な粟床で、評䟡方法ず枬定結果が䞀臎しおいるず蚀えたす。 ただし、䞀臎しない堎合がありたす。 読者に䞀定の関心がある堎合、私は圌らを研究し、より耇雑で正確な方法を䜿甚する方法を䌝えるこずができたす。 それず匕き換えに、プログラムでFLOPSを枬定する必芁がある堎合、あなたの事䟋に぀いお本圓に聞きたいです。



おわりに

FLOPSは、浮動小数点挔算に察するシステム自䜓の最倧蚈算胜力を特城付けるコンピュヌティングシステムパフォヌマンスの枬定単䜍です。 FLOPSは、ただ存圚しないシステムでは理論的ず宣蚀でき、ベンチマヌクを䜿甚しお枬定できたす。 高性胜プログラム、特に線圢埮分方皋匏システム゜ルバヌの開発者は、アルゎリズムの実行に必芁なFP挔算の理論的/経隓的に既知の数ず枬定されたテスト実行時間を䜿甚しお蚈算された、プログラムのFLOPS倀を含むアルゎリズムのパフォヌマンスを評䟡したす。 アルゎリズムの耇雑さが原因でアルゎリズムのFP操䜜の数を掚定できない堎合、Intelマむクロプロセッサに組み蟌たれたパフォヌマンスカりンタヌを䜿甚しお枬定できたす。



All Articles