Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた

3.221 Aufrufe

Veröffentlicht am

2016年6月10日に開催したAltera SDK for OpenCL勉強会で発表に使ったスライドです。分光器という信号処理装置を高位合成ツールで作った内容です。

Veröffentlicht in: Ingenieurwesen
  • Als Erste(r) kommentieren

電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた

  1. 1. 電波望遠鏡⽤の分光器を サクッと作ってみた 中原啓貴 (東京⼯業⼤学) @oboe7man 1
  2. 2. ⾃⼰紹介 • Hiroki Nakahara • @oboe7man • 東京⼯業⼤学 准教授 • ビール解禁 • クラシック⾳楽(演奏側) • ⾼位合成にシフト中 • Altera OpenCL歴 約半⽉ • Vivado HLS歴 約10か⽉ 2
  3. 3. Custom Computing Machine 3 Multi‐valued logic Pattern matching circuit • Regular expression matching circuit • Packet classifier • IP address look‐up 40m Radio telescope Deep neural network
  4. 4. たまーに… 4 暇人だなぁ…
  5. 5. 電波望遠鏡 5 45m AirBUS A321 44.51m 53m
  6. 6. SKA (Square Kilometer Array) 6
  7. 7. 分光器 Feed horn Amplifier Mixer CASPER ROACH-2 Revision 2 Stand-alone FPGA board -FPGA: Xilinx Virtex-6 SX475T -PowerPC 440 EPx -Multi-gigabit transceiver (SFP+) -2 x ZDOKs 7 Sub Reflector Main Reflector
  8. 8. Next Generation of “ROACH” 8 Net FPGA Sume (Virtex7 FPGA) FMC-ZDOC Connector CASPER ADC1.3 (5Gsps) はみ出し!!
  9. 9. Origin of Life? 9 1. Protoplanetary Disks – protoplanetary disk can be observed even at cm- wavelength 2. Complex molecule – Large molecules related to the life radiate longer emission 3. SETI – Airport radar and TV radio etc. can be targets Chandler et al. 2005
  10. 10. 要求スペック 10 広帯域⾼分解能 230‐240 points FFT • OFDM: 28 • CT Scanner: 216 0.1 – 1000GHz • Digital TV: 470‐770MHz (UHF in Japan) • Cellular phone: 0.8‐2GHz Frequency [Hz] Frequency [Hz]
  11. 11. 分光器の構成 11 ADC BRAM FFT Magnitude Window Coefficient Data from Antenna Power Spectrum FFT FFT Magnitude Magnitude + Reg. + Reg. + Reg. 窓関数 FFT 積算処理
  12. 12. 窓関数 12 ADC BRAM FFT Magnitude Window Coefficient Data from Antenna Power Spectrum FFT FFT Magnitude Magnitude + Reg. + Reg. + Reg. × Voltage Voltage Time Time
  13. 13. Fast Fourier Transform (FFT) 13 ADC BRAM FFT Magnitude Window Coefficient Data from Antenna Power Spectrum FFT FFT Magnitude Magnitude + Reg. + Reg. + Reg. Time Frequency Voltage Power
  14. 14. 積算処理 14 ADC BRAM FFT Magnitude Window Coefficient Data from Antenna Power Spectrum FFT FFT Magnitude Magnitude + Reg. + Reg. + Reg. 14Frequency Power Power Frequency
  15. 15. CASPER Toolflow • MATLAB/Simulink • Yellow box (Dedicated DSP library) • Xilinx System Generator • Xilinx EDK • BORPH • Debian Linux on PowerPC • Spectrometer on FPGA • http://casper.berkeley.edu/wiki/BORPH 俗にいうモデルベース開発ネ
  16. 16. 問題点 • とーにかくシミュレーション・合成が遅い • MATLABベースですので… • 修正が⾮常にだるい… • 今どきパイプラインレジスタを⼿で挿⼊してるんですよ︕ • 新しいブロックを作るのが⾯倒、というかHDL書かないと • とくにループが超⾯倒(LabViewのときにトラウマ経験) 16
  17. 17. そこで⾼位合成 • 今回はAltera社OpenCLを採⽤ • HDL書いてたんじゃ間に合わない… (最近来た依頼︓Rスクリプトを3⽇以内にHWに落として︕) • Vivado HLSだと、ロジック周辺回路(特にDDR3, Etherとか)の サポートが厳しい… • Altera OpenCLだとBSP(Board Support Package)が 提供されてれば周辺回路を設計する必要なし • 研究室に⼊ってくる学⽣にHDLを教える⼿間が省ける 17 楽したいだけじゃん
  18. 18. = $ !? ハードルが… • ⾼性能PC • とにかくメモリが必要 (32GB以上) • ツールライセンス • Quartus II • Altera OpenCL • BSPが提供されているボードの⼀例 18 Donation多謝! Terasic DE5‐NET Terasic DE1‐SoC Nallatech 385A GiDEL Proc V
  19. 19. たまたま︕ 19あれ!︖
  20. 20. Cyclone V GT Development Kit • $1299 • Cyclone V GT5CGTFD9 • 301K LEs • 454K Regs • 1220 M10Ks • 684 18b Multipliers • 8 PLLs • 12 6Gbps Transceivers • Power: 14-20V DC (PCIeも可) 20 PCI Express x4 DDR3 HMC x 40 DDR3 SMC x 64 HSMC x 2 GibEPHY
  21. 21. (これ→にあわせて) 環境構築 • CPU: Pentium G3240@3.1GHz • MEM: DDR3 PC3-12800 8GBx2 • Motherboard: HASWELL対応H81M mini ITX • OS: CentOS 6.4 64bit • Tool: • Quartus II Prime 16.0 Subscription Edition • Altera OpenCL 16.0 Linux • Device Cyclone V (サイズがでかいので今回はC5Vのみ) 21
  22. 22. ポイント① • CentOSはPCI Expressのドライバが… • カーネルのバージョンまで合わさないといけなかったので CentOS 6.4に • Ubuntu だとPCIドライバのコンパイルで失敗orz • 添付のコンフィギュレーションをUSB Blaster経由でボードに書い て電源を⼀度落とす(再起動だとダメ︕) • パワーサイクルしないとPCIとして認識してくれなかった… • ディップスイッチはデフォルトのままでおk • Quartus II, OpenCLのインスコは特に問題なし • 仮想環境へのインストールはお勧めしません… • ただし、シミュレーションまでならインストールしてもいいかも 22 詳細は後⽇公開するんだってよ
  23. 23. ポイント② • Windowsで環境構築する場合 • Visual Studio 2010 Professionalが必要 • Express版もできるらしいが、どうあがいてもできませんでした • 私はVS2013 Proを使って構築 • Quartus II, OpenCLのパスを通すのはもちろんだが、VS2013⾃⾝の パスも通さないといけない. C:¥Program Files (x86)¥Microsoft Visual Studio 12.0 ¥VC¥bin¥amd64¥vcvars64.bat を実⾏する必要アリ • ⽇本語アカウントダメ絶対︕︕できれば英語版をお勧めします 23 必死だなw
  24. 24. とりあえず設計開始 • まずはアクセラレーションしたい部分をCで書く… (といいつつ、ほとんどネットを参考にしました) • 【所要時間】1時間位 (gnuplotのインストールに時間がかかったorz) 24 Win8.1のエディタで コードを書いて VMWare Player上の Ubuntu14.04LTSの gccで開発 (なんてややこしい…)
  25. 25. Cソースを元にAltera OpenCLの 設計開始 • カーネル+ホストで構成 • カーネル︓FPGAに落として⾼速化したい部分 • ホスト︓カーネルにデータを送る部分 25 ホストプログラム DDR3 SDRAM x 2DDR3 SDRAM x 2 PCI Express (+DMAとか) ここらへんの ⾯倒なHWは BSPで提供 カーネル FPGA PC
  26. 26. カーネルを書くにあたって… • Altera OpenCL Design Examples https://www.altera.com/support/support-resources/design-examples/design-software/opencl.html OpenCL meets FPGA #1 ⼊⾨編 http://qiita.com/iitaku/items/6c20ebb1099e595f3371 • OpenCL meets FPGA #2 最適化編 http://qiita.com/iitaku/items/e114272fe4235baaa9b2 • FPGA Channelizer Design in OpenCL https://www.altera.co.jp/content/dam/altera-www/global/en_US/pdfs/support/examples/download/exm_opencl_channelizer.pdf • Altera SDK for OpenCL Best Practices Guide https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/opencl-sdk/aocl_programming_guide.pdf • OTB Transnational Inc., BittWare Developper’s Bundleを使ったAltera OpenCL SDKによ るFPGA開発の紹介 http://www.slideshare.net/nabesan 26
  27. 27. FPGAに適した計算法 • ×ホストやオフチップメモリを頻繁にアクセス • GPUやCPUと⽐較して帯域が1桁狭い • ○外部I/Oやオンチップメモリを利⽤ FPGAFPGA |||||||| DDRDDR DDRDDR I/OI/O I/OI/O FPGAFPGA |||||||| DDRDDR DDRDDR I/OI/O I/OI/O ADC RAM ここに依存するアプリだと負け
  28. 28. プログラミングモデルの違い 28 D1 D2 D3 D4 D5 ↓ ↓ ↓ ↓ ↓ CC CC CC CC CC ↓ ↓ ↓ ↓ ↓ 広帯域 DDR4/DDR5 DDR3 HW1 D1 D2 D3 D4 HW2 D1 D2 D3 D4 HW3 D1 D2 D3 D4 HW4 D1 D2 D3 D4 狭 帯域 GPU FPGA • 均⼀な演算を空間的に並列実⾏ • 均⼀な演算器 • ワープダイバージェント (if⽂ダメ) • 帯域・動作周波数が⾼い • 特定な演算を時間的に並列実⾏ (要はパイプライン︕) • カスタマイズした演算器 • 帯域・動作周波数は低い
  29. 29. FFTのカーネルを書いた • __kernel を関数の前につけるとか#pragma unrollとかをつける • ⾃前で書いたのだが、サンプルがあることに気付く… https://www.altera.co.jp/support/support-resources/design-examples/design-software/opencl/fft-1d.html • エミュレータの動作が⼀致したからいっか • エミュレータ: CPUでFPGAの動作を模倣する $aoc -march=emulator (カーネルコード).cl ↓ (カーネルコード名).aocx が⽣成されるので $make を叩いてホストをコンパイル ↓ (デフォルトではbinディレクトリが⽣成されるので移動) $cp ../(カーネルコード名).aocx ./ $env CL_CONTEXT_EMULATOR_DEVICE_ALTERA=1 ./(カーネルコード名) 29 エミュレータだけなら時間かからないよ
  30. 30. FFTを動作させるホストを書く • フルスクラッチは恐らく無理… • Alteraのサイト(Design Example)を落として書換えましょう https://www.altera.co.jp/support/support-resources/design-examples/design-software/opencl/opencl.html • お作法は基本的に本家のOpenCLと同じ • たまにAltera OpenCL特有の記述がある • 関数や型の前にclをつける • カーネルを動かす前後に⾊々関数を呼び出す(結構⾯倒…) • ホスト内部の同期はイベントで管理 • ココ(↓)がよくまとまってわかりやすかったです C#でOpenCL⼊⾨チュートリアル⼀覧 http://memeplex.blog.shinobi.jp/opencl/ 30
  31. 31. 開発⾵景 31 VMWare Player上の Ubuntu14.04LTSで aoc -march=emulatorを 実⾏ 分光器の動作確認は ターミナル上の数値と Gnuplotによる スペクトルで確認 積算1回 積算50回 積算200回 テスト信号として ⽩⾊雑⾳に 800Hzと4kHzの 信号を⽤意 ホストとカーネルが 正しくかけていればチューニングへ
  32. 32. 性能チューニング • FPGAで早く動作させたいっ… • #pragma unroll指定っ… • 論理合成や配置配線に時間がかかるからHDLを吐い た時点でのHW量を⾒積もりっ… $aoc -g -v -c --report fft.cl -g: プロファイル情報を含んでコンパイル -v: コンパイル進捗状況をレポート -c: HDLを吐いた時点で停⽌ --report: HW量⾒積もり表⽰ (なくてもログファイルに出⼒される) 32
  33. 33. …。 33 メモリ利⽤率1423%wwwwww
  34. 34. 現実(しょぼいボードを使っていること) を受け⼊れよう • 性能チューニングを諦めてHW量を減らす⽅向へ • どこがボトルネック︖メモリ量なのでFFT内部が怪しい $aoc -c -v -g --report fft1d.cl $aocl vis fft1d.aoco (←オプション-cで⽣成する中間ファイル) 34 カーネルのどのレジスタが どのメモリにアクセスしているか 視覚的に⾒える カーネルのレジスタのサイズ 該当するコードを表⽰ (超重要︕︕)
  35. 35. メモリを減らすには • #pragma unroll → #pragma unroll 4とかに変更 • 展開量を制限 • double2 とかを float2 や int2 に変更 • ※float2 というのはベクトル型で, FFTは複素数を扱うので便利 • float2 val; と宣⾔すれば, val.x, val.y アクセスできる • アルゴリズムを⼯夫する 35
  36. 36. 近似計算の利⽤ • FFTの計算→回転因⼦(三⾓関数)の乗算 • sin(), cos()関数の利⽤ → 遅い • プレコンピューティング → メモリバカ⾷い • 線形⼀次近似法を利⽤ → 早くてメモリ⼩・ただし低精度 36 8 8 0 8 WW  1 8W 2 8W 3 8W 4 8W 5 8W 6 8W 7 8W Imaginary Real WN nk  e  j 2 N      k  cos 2 N      k  jsin 2 N      k 三角関数の性質を利用
  37. 37. メモリ量の削減 37 ‐1.5 ‐1 ‐0.5 0 0.5 1 1.5 COS(2piX) SIN(2piX) Shift the phase Point Symmetry Compute the first quadrant
  38. 38. Piecewise Linear Approximation • 定義域xをセグメントに分割 • 各セグメントを⼀次関数(y=ax+b)で近似→aとbのみメモリに格納 • Example: Linear approximation of cos(x) 38 Seg1=-1.35925x+1.010063 Seg2=-3.30703x+1.126829 Seg3=-5.14436x+1.342521 Seg4=-6.16934x+1.542548 0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0 0.2 0.4 0.6 0.8 1 1.2 0.000 0.014 0.028 0.042 0.056 0.070 0.084 0.098 0.112 0.126 0.140 0.154 0.168 0.182 0.196 0.210 0.224 0.238 cos(2πx) Approximation Error Error cos(2πx)
  39. 39. 係数テーブル • 傾きaと重みbをメモリに格納 • if⽂で選択 39 Input Output a b 0.000 -1.35925 1.010063 0.0624 -1.35925 1.010063 0.0625 -3.30703 1.126829 0.1249 -3.30703 1.126829 0.1250 -5.14436 1.342521 0.1874 -5.14436 1.342521 0.1875 -6.16934 1.542548 0.2499 -6.16934 1.542548 0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0 0.2 0.4 0.6 0.8 1 1.2 0.000 0.014 0.028 0.042 0.056 0.070 0.084 0.098 0.112 0.126 0.140 0.154 0.168 0.182 0.196 0.210 0.224 0.238 cos(2πx) Approximation Error Error cos(2πx)
  40. 40. とりあえずうごいた︕ 40
  41. 41. 今回の 開発フロー 41 分光器のモデルを Cで記述 Kernel, hostコードに 書き直し, HDL生成 $aoc ‐g ‐v ‐‐report ‐c xxx.cl OpenCL エミュレーション 論理合成, 配置配線 (ビットストリーム生成) $aoc xxx.aoco 実機動作確認 1時間 3~4時間 1時間 Kernel チューニング $aoc ‐g ‐v ‐‐profile xxx.cl 性能を 満たす? No Yes 動いた︕ • チューニング前に ⼀度実機で動作させておく
  42. 42. 実⾏時間の⽐較 • FFT点数: 64 • FPGA動作周波数: 217MHz 42 0.18  0.43  4.29  42.89  0.37  0.36  1.47  13.00  0.00 5.00 10.00 15.00 20.00 25.00 30.00 35.00 40.00 45.00 50.00 10 100 1000 10000 CPU CPU+FPGA 積算回数 実⾏時間[msec] 思ったほど 速くないねw
  43. 43. 考察 • オンチップRAMによる積算処理 • PCIe通信量削減 43 FPGAFPGA |||||||| DDRDDR DDRDDR I/OI/O I/OI/O RAM
  44. 44. まとめ • Altera OpenCLを使って分光器を作った • インストール&環境構築︓約2週間 • OpenCLの勉強と使い⽅︓約1週間 • Cで分光器を書いた時間︓約1時間 • OpenCLに書き直して動作︓約1⽇(←ここ重要︕) • 【参考】フルHDLによる設計︓約1ヵ⽉〜2ヵ⽉ • 【参考】Matlab/Simulinkによる設計︓約2週間 • CPUと⽐較して数倍⾼速, まだ速くなりそう • ほとんどチューニングしてないので… • 今後の展開 • 論理合成の時間を短縮したい(LogicLockを使う︖) • HDLを吐いた時点で⼤体の速度を⾒積もりたい • (同上) で各ブロック毎のHW量を⾒積もりたい 44

×