DL_MESOでのベクトル化ずメモリアクセスの高速化倧芏暡プロゞェクトでのベクトル化アドバむザヌによる最適化の䟋

ベクトル化アドバむザヌず、簡単なサンプルでのそのアプリケヌションの䟋に぀いおはすでに曞いおいたす 。 本日、むンテルの゚ンゞニアが、英囜のSTFC Daresbury Laboratoryの研究者ず䞀緒にDL_MESOパッケヌゞを最適化した方法に関する情報を共有したす。







DL_MESOは、 メ゜スコピックレベルで凝瞮物質をシミュレヌトするための科孊パッケヌゞです化孊者ず物理孊者は、正しく翻蚳しなかった堎合は蚱しおくれたす。 このパッケヌゞはダヌズベリヌの研究所で開発され、研究コミュニティず業界Unilever、Syngenta、Infineumの䞡方で広く䜿甚されおいたす。 この゜フトりェアを䜿甚しお、シャンプヌ、肥料、燃料添加物の最適な凊方が怜玢されたす。 このプロセスは「コンピュヌタヌ支揎補剀」CAFず呌ばれたす-私はそれを「化孊匏の開発におけるCAD」ずしお翻蚳したした。



CAFシミュレヌションは非垞にリ゜ヌスを消費する蚈算なので、開発者はすぐに最も生産的な蚭蚈に興味を持ちたした。 たた、DL_MESOは、IntelずHartreeの間のIntel Parallel Computing CenterIPCCの共同プロゞェクトの1぀ずしお遞ばれたした。

DL_MESO開発者は、AVX-512などの今埌のテクノロゞヌにより、倍粟床の数倀でコヌドを8倍高速化できる可胜性があるためベクトル化されおいないコヌドず比范しお、ベクトル䞊列凊理のハヌドりェア機胜を利甚したいず考えたした。



この投皿では、Darsburyの科孊者がベクトル化アドバむザヌを䜿甚しおDL_MESOのラティスボルツマン方皋匏コヌドを分析した方法、芋぀かった具䜓的な問題、およびコヌドを修正しお2.5倍オヌバヌクロックした方法に぀いお説明したす。



調査プロファむル



ベクトル化アドバむザヌずは、 最初の蚘事をご芧ください 。 ここで、Lattice BoltzmanコンポヌネントのSurveyプロファむルに盎接進みたす。 党䜓の実行時間の玄半分は10の「ホット」サむクルに該圓し、その䞭には明確なリヌダヌはいたせん。各リヌダヌは合蚈プログラム時間の12以䞋しか費やしたせん。 この図は「フラットなプロファむル」に近いもので、通垞プログラマヌにずっおは悪いこずです。 実際、顕著な加速を達成するためには、各サむクルを個別に最適化する必芁がありたす。







しかし、Darsbury開発者にずっお幞いなこずに、ベクトル化アドバむザヌは次のようにルヌプをすばやく特城付けるこずができたす。



  1. SIMDコヌド生成を可胜にするために最小限のコヌド倉曎通垞はOpenMP4.xを䜿甚を必芁ずするベクトル化されたルヌプですが、ベクトル化されおいないルヌプ。 最初の4サむクルCPU時間はこのカテゎリに分類されたす。
  2. 単玔な操䜜でパフォヌマンスを改善できるベクトル化されたルヌプ。
  3. デヌタレむアりト構造によっおパフォヌマンスが制限されるベクトル化されたルヌプ。 このようなルヌプの最適化には、より深刻なコヌド凊理が必芁です。 埌で芋るように、最初の2぀のカテゎリの問題を解消した埌、これらは最も負荷の高い2぀のサむクルになりたす。
  4. すでにうたく機胜しおいるベクトル化されたルヌプ。
  5. その他のすべおのケヌスベクトル化できないルヌプを含む。


ベクトル化アドバむザヌは、サむクルに関する情報を提䟛するだけではありたせん。 「掚奚事項」および「コンパむラヌ蚺断の詳现」タブには、特定の問題ず解決策に関する情報が衚瀺されたす。



この堎合、3番目のホットスポット「ホット」サむクル、たずえば蚀語の玔粋さの保護者は私を蚱しおくれたすは、コンパむラヌが持぀反埩回数を掚定できなかったため、fGetSpeedSiteでベクトル化できたせんでした。 コンパむラの蚺断の詳现では、問題の本質を䟋ずそれを解決するための提案ずずもに説明したす-ディレクティブ「#pragma loop count」を远加したす。 アドバむスに埓っお、このサむクルはすぐにベクトル化され、カテゎリ2からカテゎリ4に移行したした。







コヌドをベクトル化できる堎合でも、必ずしもすぐに生産性が向䞊するわけではありたせんカテゎリ2および3。 したがっお、すでにベクトル化されたサむクルの有効性を調査するこずが重芁です。



単玔な最適化「平衡分垃」コアのパディング



int fGetEquilibriumF(double *feq, double *v, double rho) { double modv = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; double uv; for(int i=0; i<lbsy.nq; i++) { uv = lbv[i*3] * v[0] + lbv[i*3+1] * v[1] + lbv[i*3+2] * v[2]; feq[i] = rho * lbw[i] * (1 + 3.0 * uv + 4.5 * uv * uv - 1.5 * modv); } return 0; }
      
      





lbv配列は、すべおの次元にわたる空間栌子の速床を栌玍したす。 lbsy.nq倉数には速床の数が含たれおいたす。 このモデルは、3次元の19スピヌドグリルD3Q19スキヌムを衚しおいたす。 ぀たり lbsy.nqの倀は19です。結果の平衡はfeq [i]配列に保存されたす。



最初の分析では、サむクルはベクトル化ではなくスカラヌでした。 ルヌプの前に「#pragma omp simd」を远加するだけで、ベクトル化され、合蚈CPU時間に占める割合が13から9に䜎䞋したした。 しかし、これらの倉曎があっおも、ただ改善の䜙地がありたす。



Advisor XEの新しい結果は、コンパむラが1぀ではなく2぀のサむクルを生成するこずを瀺したした。





このスカラヌの残りは䞍必芁なオヌバヌヘッドです。 その存圚は、䞊列効果に有害です。 このような倧きな「重み」の䜙りは、反埩回数がVLベクトル長で正確に陀算されないずいう事実によっお匕き起こされたす。 コンパむラは、反埩0〜15のベクトル呜什を生成し、残りの反埩16〜18はスカラヌ剰䜙で実行されたす。 3回の反埩で、ゆっくりず順次実行される堎合でも、サむクル時間の30を占めたす。 理想的には、すべおの反埩はベクトルコヌドで実行され、残りはたったく実行されたせん。



ルヌプにデヌタパディング手法を適甚できたす。 反埩回数を20に増やしたす。これはVLの倍数になりたす4。 Advisor XEは、[掚奚事項]タブでこれを明瀺的にアドバむスしたす。







デヌタを「ノックアりト」するには、セグメンテヌション違反が発生しないように、配列feq []、lbv []、およびlbw []のサむズを倧きくする必芁がありたす。 蚘事の最埌にある衚は、コヌドの倉曎を瀺しおいたす。 lbsy.nqpad倀は、元の反埩回数ずパディング倀NQPAD_COUNTの合蚈です。



さらに、DL_MESO開発者は、ルヌプの前に「#pragma loop count」ディレクティブを远加したした。 反埩回数がVLの倍数であるこずを明瀺的に確認するず、コンパむラヌはベクトルコヌドを生成し、残りは実行されたせん。



DL_MESOコヌドには、同じ方法で改善できる倚くの同じ構造がありたす。 同じ゜ヌスファむル内の他の3぀のサむクルを修正し、それぞれのサむクルを15加速したした。



オヌバヌヘッドのバランスず最適化のトレヌドオフ



最初の2サむクルに䜿甚されるパディング手法には、代償が䌎いたす。





私たちの堎合、パフォヌマンスに察するプラスの効果が短所を䞊回り、コヌドの耇雑さは蚱容範囲でした。



デヌタレむアりトの最適化配列構造



ベクトル化、デヌタパディング、およびデヌタアラむメントにより、ホットスポットNo. 1のパフォヌマンスが25〜30向䞊し、Advisor XEによるベクトル化の効率は56に向䞊したした。



なぜなら 56はただ100ずはほど遠いため、開発者は生産性の向䞊を劚げる芁因を調査するこずにしたした。 「ベクタヌの問題/掚奚事項」をもう䞀床芋お、圌らは新しい問題を発芋したした-「可胜性のある非効率的なメモリアクセスパタヌンが存圚する」。 察応する掚奚事項は、「メモリアクセスパタヌン」MAP分析を実行するこずです。 同じアドバむスが特性列にもありたした







MAP分析を開始するには、開発者は必芁なサむクルにマヌクを付け、[ワヌクフロヌ]パネルの[MAP開始]ボタンをクリックしたす。







MAPの結果ずしおのストラむドの分垃は、ナニットストラむドシヌケンシャルアクセスず非ナニット「䞀定」ストラむド-䞀定のステップでのメモリアクセスの存圚を瀺しおいたす。







゜ヌスコヌドのMAPデヌタは、lbv配列にアクセスするずきに、ストラむド3元のスカラヌバヌゞョンの堎合およびストラむド12パディングのあるベクトル化バヌゞョンの堎合のヒットの存圚を瀺したす最埌の衚を参照。



ステップ3の魅力は、速床lbvの配列の芁玠に発生したす。 新しい反埩ごずに、配列の3぀の芁玠がシフトされたす。 3がどこから来るかは、lbv [i * 3 + X]ずいう匏から明らかです。これは、メモリアクセスの原因です。



このような䞀貫性のないアクセスは、タむプmovの1぀の呜什のベクトルレゞスタにすべおの芁玠をロヌドできないため、ベクトル化にはあたり適しおいたせん「パック」バヌゞョンは別の方法で呌び出されたす。 しかし、「構造の配列」から「配列の構造」ぞの倉換を適甚するこずにより、䞀定のステップでの凊理をシヌケンシャルアクセスに倉換できるこずがよくありたす。 MAP分析埌、掚奚りィンドりはこれを正確に通知しAoS-> SoA、非効率的なメモリアクセスの問題を解決するこずに泚意しおください-䞊蚘のスクリヌンショットを参照しおください。



開発者は、この倉換をlbv配列に適甚したした。 これを行うために、もずもずX、Y、Zの速床を含んでいたlbv配列は、lbvx、lbvy、lbvzの3぀の配列に分割されたした。



DL_MESO開発者は、配列の構造の倉換はパディングず比范しお手間がかかるず蚀いたしたが、結果は努力する䟡倀がありたした-fGetEquilibriumのサむクルは2倍速くなり、lbvアレむで動䜜するいく぀かのサむクルで同様の改善が起こりたした。



デヌタ構造の倉換ずルヌプの最適化の結果パディング、アラむメント、およびパフォヌマンスメトリックずAdvisor XEメモリアクセスパタヌン







問題のサむクルの゜ヌスコヌドの進化-ベクトル化ディレクティブ、アラむメント、パディング、AoS-> SoA倉換、およびAdvisor XEからのMAP結果











たずめ



Vectorization AdvisorのDL_MESO分析を䜿甚しお、コヌドにいく぀かのディレクティブを远加するず、3぀の最もホットなサむクルの時間を10〜19短瞮できたした。 すべおの最適化は、アドバむザの掚奚事項に基づいおいたす。 ベクトル化を「有効化」し、「パディング」を䜿甚しおルヌプパフォヌマンスを改善する䜜業が行われたした。 同様の手法をさらに数サむクルに適甚するず、アプリケヌション党䜓が18加速されたした。



デヌタを「構造の配列」から「配列構造」に倉換するこずにより、次の倧きな改善が埗られたした。 繰り返したすが、Advisor XEの掚奚に基づいおいたす。



さらに、Xeonプロセッサを搭茉したサヌバヌで䜜業ずテストが最初に実行されたしたAdvisorはコプロセッサではただ動䜜したせん。 Xeon Phiコプロセッサヌで実行されおいるコヌドに察しお同じこずが行われたずき、私たちはほが同じ利益を埗たした-远加の劎力なしでコプロセッサヌを最適化したした。



以䞋は、通垞のサヌバヌAVXのラベルずXeon PhiカヌドKnCのラベルで埗られたアクセラレヌションを瀺しおいたす。 Xeon CPUでは2.5倍、Xeon Phiでは4.1倍加速したした。







DL_MESO開発者を匕甚するず、「私はすでにこのツヌルで販売されおいたす。珟圚必芁なのはXeon Phiのバヌゞョンです」Dukeslab研究所の蚈算科孊者Luke Mason。



この投皿は、Zakhar MatveevIntel Corporationによる蚘事の翻蚳です。



All Articles