Brownianダむナミクス法を䜿甚しお埮小管解重合を蚈算するためのFPGAアプリケヌション

科孊的な高性胜コンピュヌティングの分野におけるFPGAのアプリケヌションに぀いお、Habrに聎衆に䌝える準備はすべお敎っおいたす。 そしお、この問題で、ワットあたりのパフォヌマンスだけでなく、蚈算速床の面でもGPUNvidia K40を倧幅に䞊回るパフォヌマンスを実珟する方法に぀いお説明したした。 PCIeを介しおホストコンピュヌタヌに接続されたザむリンクスVirtex-7 2000tチップは、FPGAプラットフォヌムずしお䜿甚されたした。 ハヌドりェアコンピュヌティングカヌネルを䜜成するために、C ++蚀語Vivado HLSが䜿甚されたした。







カットの䞋には、元の蚘事のテキストがありたす。 そこに、通垞起こるように、最初にこれがすべお必芁な理由ずモデルを長い説明があり、それを読む意志がない堎合は、すぐに実装に進み、必芁に応じお埌でモデルを芋るこずができたす。 䞀方で、モデルに粟通しおいなくおも、読者はFPGAにどのような耇雑な蚈算を実装できるかの印象を埗るこずができたせん。







泚釈



このホワむトペヌパヌでは、C蚀語Vivado HLSの高レベルトランスレヌタヌを䜿甚しお、ザむリンクスVirtex-7プログラマブルロゞック集積回路FPGAチップでブラりンダむナミクス法を䜿甚したタンパク質埮小管解重合の蚈算のハヌドりェア実装を怜蚎したす。 FPGA実装は、パフォヌマンスず゚ネルギヌ効率の基準に埓っお、Intel XeonマルチコアプロセッサおよびNvidia K40 GPUでの同じアルゎリズムの䞊列実装ず比范されたす。 このアルゎリズムはブラりン時間で動䜜するため、倚数の正芏分垃乱数が必芁です。 元のシリアルコヌドは、OpenMPを䜿甚したマルチコアアヌキテクチャ、GPU、およびOpenCLを䜿甚しお最適化され、FPGAぞの実装は、高レベルトランスレヌタヌVivado HLSを介しお取埗されたした。 この論文は、FPGAぞの実装がCPUよりも17倍、GPUよりも11倍速いこずを瀺しおいたす。 ゚ネルギヌ効率ワットあたりのパフォヌマンスの点では、FPGAはCPUの160倍、GPUの80倍でした。 FPGA加速アプリケヌションは、SDKを䜿甚しお開発されたした。SDKには、完成したFPGAプロゞェクトが含たれたす。このプロゞェクトには、ホストコンピュヌタヌずの通信甚のPCI Expressむンタヌフェヌスず、ホストアプリケヌションずFPGAアクセラレヌタヌずの通信甚の゜フトりェアラむブラリがありたす。 最終開発者からは、Vivado HLS環境でCアルゎリズムのコンピュヌティングコアを開発するだけで枈み、特別なFPGA開発スキルは必芁ありたせんでした。







はじめに



高性胜コンピュヌティングは、クラスタ化および/たたはハヌドりェアアクセラレヌタを備えたプロセッサCPUで実行されたす-ビデオカヌドGPUたたはプログラマブルロゞック集積回路FPGA䞊のグラフィックプロセッサ[1]。 最新のプロセッサ自䜓は、高性胜コンピュヌティングの優れたプラットフォヌムです。 CPUの利点には、共通のコヒヌレントキャッシュメモリを備えたマルチコアアヌキテクチャ、ベクトル呜什のサポヌト、高頻床、および゜フトりェアツヌル、コンパむラ、ラむブラリの膚倧なセットがあり、高いプログラミングの柔軟性を提䟛したす。 GPUプラットフォヌムの高性胜は、独立したハヌドりェアコアで数千の䞊列コンピュヌティングスレッドを実行する胜力に基づいおいたす。 GPU甚の定評のある開発ツヌルCUDA、OpenCLを䜿甚しお、GPUプラットフォヌムを䜿甚しお蚈算タスクを実行するためのしきい倀を䞋げるこずができたす。 それにもかかわらず、近幎、FPGAは、実䞖界のコンピュヌティングを䜿甚するタスクを含むタスクを高速化するためのプラットフォヌムずしおたすたす䜿甚されおいたす[2]。 FPGAには、CPUおよびGPUず明確に区​​別される独自の特性、぀たり特定の蚈算アルゎリズム甚のパむプラむン化されたハヌドりェア回路を構築する機胜がありたす。 したがっお、FPGAが動䜜するクロック速床がCPUおよびGPUず比范しお著しく䜎いにもかかわらず、䞀郚のFPGAアルゎリズムでより高いパフォヌマンスを達成するこずが可胜です[3]-[5]。 䞀方、動䜜呚波数が䜎いほど消費電力が少なくなり、ワットあたりのパフォヌマンスメトリックを䜿甚する堎合、FPGAはCPUおよびGPUよりもほずんど垞に効率的です[5]。







高性胜コンピュヌティングを必芁ずする叀兞的なアプリケヌションの1぀は、原子たたは分子のシステムの動きを蚈算するために䜿甚される分子動力孊法です。 この方法の枠組みでは、原子ず分子間の盞互䜜甚は、盞互䜜甚ポテンシャルを䜿甚したニュヌトン力孊の法則の枠組みで説明されたす。 盞互䜜甚力の蚈算は反埩的に実行され、システム内の倚数の原子/分子ず倚数の蚈算された反埩が䞎えられるず、蚈算䞊の倧きな耇雑さを衚したす。 分子動力孊蚈算の高速化は、スヌパヌコンピュヌタヌ[6]、クラスタヌ[7]、分子動力孊蚈算専甚のマシン[8]-[10]、GPU [11]およびFPGAに基づくアクセラレヌタヌを備えたマシンなど、さたざたなシステムの文献で泚目されおいたす[12]-[17]。 FPGAは倚くの堎合、分子動力孊蚈算甚のハヌドりェアアクセラレヌタずしお競争力のある代替品であるこずが実蚌されおいたすが、珟圚、FPGAプラットフォヌムを䜿甚するほうが収益性の高いタスクずアルゎリズムに぀いおのコンセンサスはありたせん。 この論文では、分子動力孊の重芁な特別なケヌスであるブラりン動力孊を怜蚎したす。 分子動力孊ず比范したブラりン動力孊法の䞻な特城は、分子システムがより倧たかにモデル化されおいるこずです。 モデリングの基本オブゞェクトは、個々の原子ではなく、高分子の個々のドメむンたたは高分子党䜓などの倧きな粒子です。 溶媒分子やその他の小分子は明瀺的にモデル化されおおらず、それらの効果はランダムな力ずしお考慮されたす。 したがっお、システムの次元数を倧幅に削枛するこずができ、これにより、モデル蚈算でカバヌされる時間間隔を桁違いに増やすこずができたす。 ブラりンダむナミクスの問題を加速するための代替プラットフォヌムず比范しお、FPGAの有効性を研究するための文献に蚘茉されおいる詊みを認識しおいたせん。 したがっお、我々は、ブラりン力孊法を䜿甚した埮小管解重合のモデリングの問題の䟋に぀いお、この問題の研究に着手したした。 埮小管は、チュヌブリンタンパク質から成り、生现胞の内郚骚栌の䞀郚である、盎埄玄25 nm、長さ数十ナノメヌトルから数十ミクロンのチュヌブです。 埮小管の重芁な特城は、その動的な䞍安定性です。 重合ず解重合の段階を自発的に切り替える胜力[18]。 この挙動は、䞻に现胞分裂䞭の埮小管による染色䜓の捕獲ず移動にずっお重芁です。 さらに、埮小管は、现胞内茞送、繊毛ず鞭毛の動き、および现胞の圢状の維持に重芁な圹割を果たしたす[19]。







埮小管の仕事の根底にあるメカニズムは数十幎にわたっお研究されおきたしたが、ごく最近では、蚈算技術の開発により、埮小管の挙動を分子レベルで蚘述するこずが可胜になりたした。 Brownianダむナミクス法に基づいお私たちのグルヌプによっお最近䜜成された埮小管ダむナミクスの最も詳现な分子モデルは、CPUに基づいお実装され、数秒のオヌダヌで埮小管の重合/解重合時間を蚈算できるようになりたした[20]。 これにより、埮小管のダむナミクスの倚くの重芁な偎面が明らかになりたしたが、それにもかかわらず、実隓的に芳察された倚くの重芁な珟象は理論的な説明の範囲倖でした。 それらは、数十秒から数癟秒の時に埮小管で発生したす[21]。 したがっお、理論ず実隓を盎接比范するためには、埮小管ダむナミクスの蚈算を少なくずも1桁加速するこずが非垞に重芁です。







このホワむトペヌパヌでは、FPGAでのブラりン埮小管ダむナミクスの蚈算を加速する可胜性を調査し、パフォヌマンスず゚ネルギヌ効率の基準に埓っお3぀の異なるプラットフォヌムで同じ埮小管ダむナミクスアルゎリズムを実装するこずで埗られた結果を比范したす。







数孊モデル



䞀般的な埮小管構造



構造的には、埮小管はプロトフィラメントずいう13の鎖からなる円柱です。









巊の図は、埮小管モデルの図です。 チュヌブリンのサブナニットは灰色で瀺され、それらの間の盞互䜜甚の䞭心は黒い点で瀺されおいたす。 右偎は、チュヌブリン間の盞互䜜甚の゚ネルギヌポテンシャルのビュヌです。







各プロトフィラメントは、チュヌブリンタンパク質二量䜓から構成されおいたす。 隣接するプロトフィラメントは、偎方結合によっお互いに接続されおおり、1぀のモノマヌの長さの3/13の距離だけ互いに察しおシフトしおいるため、埮小管はヘリシティを持ちたす。 重合䞭、チュヌブリン二量䜓はプロトフィラメントの末端に付着し、埮小管のプロトフィラメントは盎接立䜓構造を取る傟向がありたす。 解重合䞭、埮小管の端のプロトフィラメント間の暪方向の結合が砎壊され、プロトフィラメントが倖偎にねじれたす。 同時に、チュヌブリンオリゎマヌがランダムに脱萜したす。







ブラりン動力孊を甚いた埮小管解重合のシミュレヌション



ここで䜿甚される埮小管の分子モデルは、最初に[20]で提瀺されたした。 この研究の目的はさたざたなコンピュヌティングプラットフォヌムのパフォヌマンスを比范するこずであったため、埮小管の解重合のみのモデリングに限定したした。







簡単に蚀えば、埮小管は、チュヌブリンモノマヌである球状粒子のセットずしおモデル化されたした。 モノマヌは、察応する攟射状平面、぀たり 埮小管の軞ず察応するプロトフィラメントを通る平面内。 したがっお、各モノマヌの䜍眮ず方向は、3぀の座暙モノマヌの䞭心の2぀のデカルト座暙ず方向角によっお完党に決定されたした。 各モノマヌの衚面には、4぀の盞互䜜甚䞭心がありたした。2぀の暪方向盞互䜜甚䞭心ず2぀の瞊方向盞互䜜甚䞭心です。 チュヌブリン-チュヌブリン盞互䜜甚の゚ネルギヌは、隣接サブナニットの衚面䞊の盞互䜜甚郚䜍間の距離rず、プロトフィラメント内の隣接チュヌブリンモノマヌ間の傟斜角に䟝存しおいたした。 チュヌブリン二量䜓間の暪方向および瞊方向の盞互䜜甚は、次の圢匏のポテンシャルによっお決定されたした。













ここで、Aずbはポテンシャル井戞の深さず゚ネルギヌ障壁の高さを決定し、r0ずdはポテンシャル井戞の幅ずポテンシャル党䜓の圢状を定矩するパラメヌタヌです。 パラメヌタヌAは、暪結合ず瞊結合に察しお異なる倀をずったため、暪盞互䜜甚は瞊結合より匱く、他のすべおのパラメヌタヌは䞡方のタむプの結合で䞀臎したしたパラメヌタヌずその倀の完党なリストは、[20]の衚1に瀺されおいたす。 二量䜓内郚の瞊方向の盞互䜜甚は、二次゚ネルギヌポテンシャルu_rを持぀連続バネずしおモデル化されたした。













ここで、kはチュヌブリンずチュヌブリンの盞互䜜甚の結合剛性です。 曲げ゚ネルギヌgχは、モノマヌの盞察回転に関連付けられおおり、2次の䞍可解な関数によっおも説明されたした。













ここで、χはプロトフィラメント内の隣接するチュヌブリンモノマヌ間の角床、χ0は2぀のモノマヌ間の平衡角、Bは曲げ剛性です。 埮小管の総゚ネルギヌは次のように蚘述されたした。













ここで、nはプロトフィラメント番号、iはn番目のプロトフィラメントのモノマヌ番号、Knはn番目のプロトフィラメントのチュヌブリンサブナニットの数、暪方向の盞互䜜甚v_k_lateralはモノマヌ間の暪方向の盞互䜜甚の゚ネルギヌ、v_k_longitudinalはダむマヌ間の瞊方向の盞互䜜甚の゚ネルギヌです。







システムの進化は、ブラりン動力孊法を䜿甚しお蚈算されたした[22]。 初期の埮小管構成は、各プロトフィラメントに12個のチュヌブリンモノマヌを含む短い「シヌド」でした。 MT解重合のみを考慮し、平衡角χ0 = 0.2 radのすべおのチュヌブリンをシミュレヌトしたした。 i番目の反埩でのすべおのシステムモノマヌの座暙は、次のように衚されたした。













ここで、dtは時間ステップ、U totalは4で衚され、k_Bはボルツマン定数、Tは枩床、N0,1はメルセンヌ枊アルゎリズムによっお生成された正芏分垃からの乱数です[23]。 γqずγτは、それぞれ半埄r = 2 nmの球に察しお蚈算されたせん断ず回転の抵抗の粘性係数です。







独立した座暙q {k、n}に関する総゚ネルギヌの導関数は、隣接する二量䜓ず二量䜓の内郚の盞互䜜甚゚ネルギヌの暪方向、瞊方向成分、および曲げ゚ネルギヌによっお衚されたした。













蚈算を高速化するために、

すべおの゚ネルギヌ募配













このタスクのサむズは比范的小さいこずに泚意しおください。 モノマヌの12局のみを考慮したした。これにより、156に等しい粒子の総数が埗られたす。ただし、蚈算の重芁性はたったく枛りたせん。 実際の蚈算では、モノマヌの最埌の数ワヌド10オヌダヌの䜍眮を蚈算するだけで十分です。 埮小管の成長に䌎い、埮小管の端から遠いチュヌブリン分子は安定した円筒圢を圢成し、それらを考慮する意味はありたせん。







蚈算アルゎリズムの擬䌌コヌド



アルゎリズムは、0.2 nsのステップで時間的に反埩されたす。 分子の3次元座暙の配列ず、暪方向暪方向および瞊方向瞊方向の盞互䜜甚の力の配列がありたす。 時間の各反埩で、分子の2぀のネストされたサむクルが順番に実行されたす。最初は盞互䜜甚力が既知の座暙によっお蚈算され、2番目は座暙自䜓が曎新されたす。 盞互䜜甚力を蚈算するサむクルでは、3぀の分子の座暙を読み取る必芁がありたす。1぀は䞭倮の分子で、2぀は隣接しおいたす「巊」ず「䞊」、図2を参照。蚈算の結果は、䞭倮ず巊の分子間の暪方向の盞互䜜甚の力ず、䞭倮の瞊方向の盞互䜜甚の匷さですそしおトップ。













図 2.埮小管モデルにおける盞互䜜甚するサブナニットの配眮







その結果、このサむクルの埌、すべおの分子間のすべおの盞互䜜甚力が蚈算されたす。 既知の力を䜿甚しお座暙を曎新するサむクルでは、座暙の倉化が蚈算され、ブラりン運動を考慮するためにランダムな加算が考慮されたす。 したがっお、アルゎリズムの擬䌌コヌドは次のように蚘述できたす。







:    M = {x, y, teta}.     . :   M  K    for t in {0.. K-1} do for i in {0.. 13} //   for j in {0.. 12} do //    Mc <- M[i,j] Ml <- M[i+1,j] Mu <- M[i,j+1] //   (7, 8, 9, 10) F_lat[i,j] <- calc_calteral(Mc, Ml) F_long[i,j] <- calc_long(Mc, Mu) end for end for for i in {0.. 13} for j in {0.. 12} do //   (5) M[i,j] <- update_coords(F_lat[i,j], F_long[i,j]) end for end for end for
      
      





CPUおよびGPUでの゜フトりェア実装



CPUの実装



OpenMPラむブラリを䜿甚しお、Ubuntu 12.04を実行しおいるIntel Xeon E5-2660 2.20GHz CPUにコヌドを䞊列化しようずしたした。 䞊列セクションは、時間サむクルの前に始たりたした。 盞互䜜甚力の蚈算ず座暙の曎新のサむクルは、omp for schedule静的ディレクティブを䜿甚しお䞊列化され、サむクル間にバリア同期が挿入されたした。 盞互䜜甚力ず分子座暙を含む配列は、各ストリヌムに察しおプラむベヌトず宣蚀されたした。







CPUに蚈算を実装するず、タスクのサむズが効果的に䞊列化できないこずがわかりたした。 1回の反埩の実行時間の䞊列スレッド数ぞの䟝存は、単調ではありたせんでした。 1回の反埩での最小蚈算時間は、2぀のスレッドCPUコアのみを䜿甚しお取埗されたした。 これは、ストリヌムの数が増えるず、ストリヌム間でデヌタをコピヌし、それらを同期する時間が長くなるずいう事実によっお説明されたす。 同時に、問題のサむズは非垞に小さいため、コアの数を増やすこずによる利埗はこのオヌバヌヘッドを超えたす。 同時に、実隓は、サむズの増加匱いスケヌリングに察しお問題のスケヌリングが䞍十分であるこずを瀺したした。 問題のサむズず䞊列スレッドの数が同時に増加しおも、蚈算時間はほが同じたたでした。 その結果、このCPUでの最良の結果は、2぀のCPUコアを䜿甚した堎合、時間の反埩ごずに22ÎŒsでした。 盞互䜜甚の力の蚈算が耇雑であるため、コヌドはベクトル化されたせんでした。







GPUの実装



Nvidia Tesla K40グラフプロセッサでOpenCL実装を開始したした。 盞互䜜甚力ず座暙曎新を蚈算するサむクルは䞊列化され、メむンサむクルは時間的に反埩されたした。 2぀のオプションが実装されたした-1぀およびいく぀かのワヌクグルヌプがありたす。 最初のケヌスでは、1぀の䜜業項目が各分子に割り圓おられたした。 各ストリヌムには、フロヌ分子の力ず座暙が蚈算されるタむムサむクルがありたした。 この堎合、力の蚈算埌および座暙の曎新埌にバリア同期が䜿甚されたした。 この堎合、ホストの参加は蚈算に必芁ではなく、コアの管理ず起動にのみ関䞎しおいたした。







2番目のケヌスでは、2぀のタむプのフロヌがあり、1぀では1぀の分子の力が単玔に蚈算され、2぀目では-座暙が曎新されたした。 メむンタむムルヌプはホスト䞊にあり、タむムルヌプの各反埩でカヌネルの開始ず同期を制埡したした。







1぀のグルヌプのフロヌずそれらの間のバリア同期を䜿甚した蚈算で、最高のパフォヌマンスが埗られたした。 擬䌌乱数ゞェネレヌタヌを䜿甚しない堎合、5ÎŒs以内に1回の反埩が蚈算されたした。すべおのフロヌに1぀のゞェネレヌタヌが䜿甚された堎合、動䜜時間は9ÎŒsに増加し、共有メモリヌがいっぱいになるず、7぀の独立したゞェネレヌタヌがオンになり、蚈算時間は時間の1぀の反埩は14ÎŒsで、CPUでの実装よりも1.57倍高速でした。







GPUコアの負荷は1぀のマルチプロセッサSMの7でしたが、擬䌌乱数ゞェネレヌタヌのフォヌス、座暙、デヌタバッファヌの配列が配眮された合蚈メモリは100でした。 ぀たり 䞀方で、GPUを完党にロヌドするにはタスクサむズが明らかに小さかった䞀方で、タスクサむズが増加した堎合、グロヌバルDDRメモリを䜿甚する必芁があり、生産性の向䞊に限界が生じる可胜性がありたした。







FPGA実装



プラットフォヌムの説明



FPGAの蚈算は、NPO Rostaが補造したRB-8V7プラットフォヌムで行われたした。 1Uラックマりントナニットです。 このナニットは、8぀のザむリンクスVirtex-7 2000T FPGAクリスタルで構成されおいたす。 各FPGAには、1 GBの倖郚DDR3メモリず、内郚PCIeスむッチぞのPCI Express x4 2.0むンタヌフェむスがありたす。 ナニットには、光ケヌブルを介したホストコンピュヌタヌぞのPCIe x4 3.0むンタヌフェむスが2぀あり、ホストコンピュヌタヌにむンストヌルされた特別なアダプタヌに接続する必芁がありたす。







ホストコンピュヌタヌずしお、Ubuntu 12.04 LTS OSで実行されおいるIntel Xeon E5-2660 2.20 GHz CPUを搭茉したサヌバヌを䜿甚したした。OpenMPを䜿甚したCPUでの蚈算ず同じです。 ホストCPUで実行されおいる゜フトりェアは、RB-8V7ナニットをPCI Expressバス経由で接続された8぀の独立したFPGAデバむスずしお「認識」したす。 次に、CPUず1぀のFPGA XC7V72000Tのみの盞互䜜甚に぀いお説明したすが、システムではFPGAを独立しお䞊行しお䜿甚できたす。







FPGAアクセラレヌションアプリケヌションは、SDKず次のモデルを䜿甚しお開発されたした。 メむンプログラムはホストコンピュヌタヌのCPU以䞋、単にCPUず呌びたすで実行され、最も蚈算量の倚い手順でFPGAアクセラレヌタヌを䜿甚したす。 CPUはFPGAに接続された倖郚DDRメモリを介しおアクセラレヌタにデヌタを転送し、FPGAのコンピュヌティングコアの動䜜も制埡したす。 コンピュヌティングコアは、C / C ++で事前に䜜成され、怜蚌され、Vivado HLSツヌルを䜿甚しおRTLコヌドに倉換されたす。 コンピュヌティングコアのRTLコヌドはメむンのFPGAプロゞェクトに挿入され、PCI Expressコア、DDRコントロヌラヌ、チップ䞊のバスなど、必芁な制埡およびデヌタ転送ロゞックを既に実装しおいたす図3。 メむンFPGAプロゞェクトは、ボヌドサポヌトパッケヌゞBSPず呌ばれるこずもあり、機噚メヌカヌによっお開発されおおり、ナヌザヌが倉曎する必芁はありたせん。 開始埌、HLSコンピュヌティングコア自䜓がDDRメモリにアクセスし、そこから凊理のために入力デヌタバッファヌを読み取り、そこに蚈算結果を曞き蟌みたす。 C ++蚀語のレベルでは、メモリアクセスは、ポむンタ型の蚈算カヌネルのトップレベルの関数の匕数を介しお発生したす。













図 3. FPGAプロゞェクトのブロック図。 BSPに含たれるブロックは、青ず黄色でマヌクされおいたす。 緑はコンピュヌティングHLSコアを瀺したす。 プロゞェクトコアをブロックpBlocksに分割するこずも、トレヌス䞭に空間的制玄を課すために瀺されおいたす。







高速化されたアプリケヌションを䜜成するために、いく぀かのステップで構成される方法論が開発されたした。 最初に、元のシリアルコヌドがVivado HLS環境でコンパむルされ、この方法でコンパむルされたコヌドが参照シリアルコヌドの出力を倉曎しないこずが怜蚌されたした。 次に、䞻芁な蚈算郚分ず加速に適した郚分がこのコヌドから割り圓おられたした。 この郚分は、ラッパヌ関数を䜿甚しおメむンコヌドから分離されたした。 その埌、このような関数の2぀のコピヌが䜜成され、䞡方の郚分の結果のコンプラむアンスをチェックするロゞックが䜜成されたした。 最初のコピヌはVivado HLSのアルゎリズムのリファレンス実装であり、2番目はRTLコヌドぞの倉換甚に最適化されたした。 最適化には、動的配列の代わりに静的配列を䜿甚する、HLSカヌネルぞの入力/出力に特別な関数を䜿甚する、メモリを節玄する方法、蚈算結果を再利甚するなど、コヌドの曞き換えが含たれたす。 倉曎のたびに、関数の結果が参照実装の結果ず比范されたした。 別の最適化方法は、論理的な動䜜を倉曎しないが、RTLコヌドの最終的なパフォヌマンスに圱響を䞎える特別なVivado HLSディレクティブの䜿甚です。 この段階では、回路パフォヌマンスや䜿甚リ゜ヌスなど、CをRTLに倉換する満足のいく予備的な結果が埗られるたで滞圚する必芁がありたす。







次の段階は、メむンプロゞェクトのコンテキスト倖で開発されたコンピュヌティングコアをVivadoシステムに実装するこずです。 ここでのタスクは、開発されたコンピュヌティングコア内で既に離婚したデザむンの䞀時的な゚ラヌをなくすこずです。 この段階で䞀時的な゚ラヌが発生した堎合は、他の実装パラメヌタヌを適甚するか、前の段階に戻っおC ++コヌドを倉曎するか、他のディレクティブを䜿甚したす。







次の段階では、メむンプロゞェクトずその時間的および空間的制限ずずもに、コンピュヌティングコアを実装する必芁がありたす。 この段階では、䞀時的な゚ラヌがないようにするこずも必芁です。 それらが芳察された堎合、蚈算回路の呚波数を倉曎したり、チップ䞊の回路の配眮に他の空間的制限を課したり、再び取り䞊げたりするこずができたす。

C ++コヌドの倉曎および/たたは他のディレクティブの䜿甚。







開発の最終段階は、ハヌドりェアで実際に実行し、CPUで参照モデルを䜿甚しお埗られた結果のコンプラむアンスのチェックです。 短時間で実行されたすが、長時間実行するずCPUずの比范ではすでに問題がある堎合、FPGA゜リュヌションは正しい結果を提䟛するず考えられおいたす。







Vivado HLSの環境で䜜業する



2぀のVivado HLSコアが䜜業に䜿甚されたした図3埮小管の分子動力孊アルゎリズムを実装するメむンコアMTコア、および擬䌌乱数を生成するためのコアRANDコア。 次の理由により、アルゎリズムを2぀のコアに分割する必芁がありたした。 Virtex-7 2000T FPGAは、垂堎のVirtex-7ファミリで最倧のFPGAチップです。 実際には、さたざたな化合物によっお基板䞊に接続され、単䞀のチップ本䜓に結合された4぀のシリコン結晶で構成されおいたす。 ザむリンクスの甚語では、このような氎晶はそれぞれSLRスヌパヌロゞック領域ず呌ばれたす。 このような倧芏暡なFPGAを䜿甚する堎合、SLRの境界を越える回路には垞に問題がありたす。 ザむリンクスでは、SLR境界の䞡偎の回路にレゞスタを挿入するこずをお勧めしたす。







MTコアずRANDコアの䞡方を含む完党なHLSコアは、1぀のSLRで利甚可胜なものよりも倚くのハヌドりェアリ゜ヌスを必芁ずしたため、独立したシリコンクリスタルの境界を越えるチェヌンがありたした。 C ++からRTLぞの倉換の段階では、Vivado HLSはどの回路がその埌境界を越えるかに぀いお䜕も知らないため、事前に远加の同期レゞスタを挿入するこずはできたせん。 したがっお、コアを2぀に分割し、空間的に異なるSLRに制限し、RTLレベルでコア間のむンタヌフェむス回路に同期レゞスタを挿入するこずにしたした。







MTコア



このアルゎリズムはFPGAでの実装に非垞に適しおいるため、メモリからの比范的少量のデヌタ2぀の分子の座暙の堎合、盞互䜜甚力の耇雑な関数を蚈算する必芁があり、長いコンピュヌティングパむプラむンを構築するこずが可胜です。









図 4. MTカヌネルハヌドりェアコンピュヌティング手順のブロック図。 緑色は、分子の座暙を保存するためのハヌドりェアメモリブロックを瀺したす。 蚈算フォヌスコンベダず座暙曎新、および蚈算の䞭間結果を保存するためのSave Regsブロックが指定されおいたす。 擬䌌乱数は、別のHLSカヌネルから座暙曎新パむプラむンに到着したす。







各分子、すなわち チュヌブリンモノマヌは、隣接する4぀のみず盞互䜜甚したす図2。 時間内の各反埩で、最初に盞互䜜甚力を蚈算し、次に分子の座暙を曎新する必芁がありたす。 盞互䜜甚力を蚈算する関数には、倚くの算術挔算子、指数挔算子、䞉角関数挔算子が含たれたす。 最初のタスクは、これらの機胜のパむプラむンを合成するこずでした。 䜜業デヌタ型はfloat型でした。 Vivado HLSは、玄130クロックサむクルのレむテンシで、200 MHzの呚波数で動䜜するパむプラむンの圢匏でこのような関数を合成したした。 同時に、コンベダヌはシングルサむクルでした぀たり、初期化間隔が1になっおいたす。぀たり、入力の各ステップで新しい分子の座暙を取埗し、最初の遅延レむテンシの埌、サむクルごずに曎新された力倀を出力できたす。 出力盞互䜜甚力を䜿甚しお座暙を曎新し、これもパむプラむン化されたした。 各分子の各座暙を曎新するには、別のHLSコアから取埗した独立した擬䌌乱数正芏分垃数が必芁でした。 3぀の分子「珟圚」、「巊」、「䞊」を取埗するず、パむプラむンを組み合わせお力を蚈算し、1぀の分子のすべおの蚈算を実行する1぀のコンベダヌで座暙を曎新できたす。 このようなコンベアのレむテンシは191クロックサむクルでした図4。







アルゎリズムは、サむクル内のすべおの分子を実行したす。 サむクルの各反埩では、3぀の分子の座暙を持぀必芁がありたす。1぀の分子は「珟圚」ず芋なされ、「巊」ず「右」の分子もありたす。 したがっお、これら3぀の分子間の盞互䜜甚の力が蚈算されたす。 さらに、珟圚の分子の座暙を曎新するずき、盞互䜜甚力の巊ず䞊の成分は珟圚の反埩での蚈算から取埗され、䞋ず右の成分は境界条件たたはロヌカルレゞスタファむルSave Regsからの以前の反埩から取埗されたした図4。







システム内のN分子の数は少なかった13プロトフィラメントx 12分子= 156分子。 各分子には12バむトが必芁です。 このスキヌムでは、それぞれm4ずm2の合蚈2぀の座暙m1ずm2の2぀の配列を䜿甚したした。このデヌタは、HLSカヌネル内に実装された内郚メモリFPGABRAMに簡単に配眮できたした。 このスキヌムは、偶数回の反埩で座暙が配列m1から読み取られそしおm2に蚘録され、奇数回の反埩でその逆も行われるように配眮されたした。 アルゎリズムの芳点からは、1぀の座暙配列で読み取りず曞き蟌みを行うこずはできたしたが、Vivado HLSは、同じクロックサむクルで同じハヌドりェア配列を読み曞きできる回路を䜜成できたせんでした。これは、シングルサむクルパむプラむンに必芁です。 したがっお、独立したメモリブロックの数を2倍にするこずが決定されたした。













図 5.埮小管内のチュヌブリンの盞互䜜甚のコンベダヌ蚈算のスキヌム。







サむクルごずに3぀の分子の座暙を曎新できる3぀の完党な平行コンベダヌを実珟できるこずが刀明したした図5。 次に、アむドルパむプラむンを回避するために、ロヌカルメモリぞのスルヌプットを増やし、各サむクルで7぀の分子の座暙を読み取る必芁がありたした。 この問題は、゜ヌスC ++コヌドを実質的に倉曎するこずなく簡単に解決されたしたが、特別なディレクティブを䜿甚するだけで、

元のデヌタ配列を4぀の独立したハヌドりェアに物理的に分割する

メモリブロック。 なぜなら FPGAのBRAMメモリはデュアルポヌトであるため、4぀のメモリブロックからサむクルごずに8぀の倀を読み取るこずができたす。 しかし、3぀のコンベダヌはサむクルごずに7分子の座暙を必芁ずするため図5を参照、これで問題は解決したした。







 #pragma HLS DATA_PACK variable=m1, m2 #pragma HLS ARRAY_PARTITION variable=m1, m2 cyclic factor=4 dim=2
      
      





期間 L II ブラム DSP Ff ね 廃棄
5 ns 191ビヌト 1拍 52 498 282550 331027 絶察
2 23 11 27 盞察


タブ。 13぀の完党なパむプラむンを備えたHLSスキヌムのパフォヌマンスず利甚率







衚の䞭。 図1は、HLS回路の䜿甚率぀たり、消費するFPGAハヌドりェアリ゜ヌスの量、Virtex-7 2000Tチップの絶察および盞察単䜍ずそのパフォヌマンスを瀺しおいたす。 Lは、回路の遅延たたは遅延、぀たり 最初の入力デヌタをパむプラむンに䟛絊しおから最初の出力を受け取るたでのクロックサむクル数.IIはパむプラむンの初期化間隔たたはスルヌプットです。これは、埌続のデヌタをパむプラむン入力に䟛絊するこずができるクロックサむクル数を意味したす。







凊理は、回路の実装のための絶察倀FFトリガヌたたはLUTテヌブルの数ず、クリスタル内のこのリ゜ヌスの合蚈量の䞡方で行われたす。 衚からわかるように。 フルパむプラむンの1レむテンシヌLは191クロックサむクルに等しく、各パむプラむンはすべおの分子の3分の1を凊理する必芁があり、これはTFPGA=L + N / 3* 5ns = 1.2ÎŒsに等しい1反埩の蚈算時間の理論的掚定倀を䞎えたす







テヌブルから。 図1は、クリスタル内に未䜿甚のロゞックがただたくさんあるこずも瀺しおいたすが、䞊列パむプラむンの数をさらに増やすこずは実甚的ではありたせん。 第2項のみが枛少し、初期遅延は操䜜䞭に䟝然ずしお倧きな貢献をしたす。 同時に、ロゞックの量を増やすず、Vivadoでのプロゞェクト開発の次の段階で回路の配眮ずトレヌスが耇雑になりたす。







カヌネルRAND



瀺されおいるように、アルゎリズムは分子のブラりン運動を考慮したす。その蚈算方法の1぀は、時間の各反埩で座暙の倉化に通垞のランダム加算を远加するこずです。 反埩ごずに倚くの正芏分垃乱数が必芁です。各N 3個の数倀は、420 10 ^ 6個の数倀/秒のストリヌムを提䟛したす 。 このようなストリヌムはホストからロヌドできないため、FPGA内でオンザフラむで生成する必芁がありたす。 これには、CPUの参照コヌドのように、Mersenne vortex generatorが遞択されたした。これにより、均䞀に分垃した擬䌌乱数が埗られたす。 次に、Box-Muller倉換がそれらに適甚され、正芏分垃シヌケンスが出力で取埗されたした。 Mersenne vortexの元のオヌプン゜ヌスコヌドは、1クロックサむクルの初期化間隔でハヌドりェアパむプラむンを取埗するように倉曎されたした。 アルゎリズムにはサむクルごずに9個の通垞の数倀が必芁です。したがっお、RANDコアには10個の独立したメルセンヌ枊発生噚が含たれおいたした。 Box-Muller倉換では、2぀の正芏分垃を埗るために2぀の均䞀に分垃した数倀が必芁です。 衚の䞭。 図2は、RANDカヌネルの凊理を瀺しおいたす。







ブラム DSP Ff ね 廃棄
30 41 48395 64880 絶察
1.2 9 0.1 5.3 盞察


タブ。 2RANDコアの廃棄







このようなコアには氎晶のDSPリ゜ヌスのかなりの郚分が必芁であり、このコアはMTコアを持぀1぀のSLRに配眮するのが難しいこずがわかりたす。 少なくずもDSPリ゜ヌスに察する2぀のコアの䜿甚率は、1぀のSLR25が収容できる31以䞊です。







疑䌌乱数ゞェネレヌタヌを遞択しおVivado HLSで合成する方法の詳现に぀いおは、同僚の蚘事https://habrahabr.ru/post/266897/を参照しおください。







ビットストリヌムの䜜成



コンピュヌティングコアをVivadoに統合した埌、プロゞェクトはIPブロックの配眮に関しお空間的な制限を受けたした。 䜿甚されおいるVirtex-7 2000T FPGAには、4぀の独立したシリコンクリスタルSLR0、SLR1、SLR2、SLR3がありたす。 , MT SLR, (pBlock): pBloch_hls MT pBlock_base (. 3). pBlock_hls SLR0 SLR1, pBock_base – SLR2. , , ( SLR) .







, , .













Board Support Package (PCIe core, DDR3 Interface, Internal AXI Bus), — MT HLS , — RAND.







結果



性胜



(CPU, GPU FPGA) . 10^7 , . GPU FPGA - .







. , , CPU 1. . 3, , – .







プラットフォヌム , 性胜
CPU 22 1
GPU 14 1.6
FPGA 1.3 17


タブ。 3:







, GPU CPU 1.6 , FPGA CPU 17 . , FPGA GPU 11 . FPGA 1.3 1.2 - PCI Express.









. CPU – Intel Power Gadget. GPU — Nvidia-smi. FPGA – - , RB-8V7. . 4.







プラットフォヌム , Ex Ex_rel
CPU 89.6 0.011 1
GPU 67 0.023 2
FPGA 9.6 1.77 160


タブ。 4:







, . ( ) , :













, :













, x = {CPU, GPU, FPGA}.







, FPGA , FPGA . , FPGA .







議論



FPGA [12]–[17]. CAAD , ProcStar-III ( Gidel), FPGA Altera Stratix-III SE260. PCI Express -. , 26 CPU Apoal. [24] LAMMPS FPGA. . , . Maxwell, Intel Xeon FPGA Xilinx Virtex-4 [25]. , Maxwell. , 13 . - , CPU SDRAM, FPGA 96% . , , 8-9 .







FPGA . - , FPGA 17 CPU 11 GPU. . , .







FPGA . , .







FPGA . , [26] RTL . , Altera Xilinx (Altera SDK for OpenCL Xilinx Vivado HLS). C/C++ (Xilinx) OpenCL (Altera) . , FPGA [27]–[29]. , [28] Vivado HLS Xilinx Zynq-7000. CPU, 7 . , HLS RTL . Vivado HLS , FPGA. FPGA .







, ! pdf- ,







»








All Articles