Upgrade to Pro — share decks privately, control downloads, hide ads and more …

さわって分かるオープンソースプロセッサ「RISC-V」の世界

msyksphinz
December 28, 2017

 さわって分かるオープンソースプロセッサ「RISC-V」の世界

msyksphinz

December 28, 2017
Tweet

More Decks by msyksphinz

Other Decks in Technology

Transcript

  1. RISC-Vとは • カリフォルニア大学バークレイ校(UCB)が2011年から公開して いる新しい命令セットアーキテクチャ • シンプルかつオープン、しかしLinuxが動くまでにはしっかりしている • かつ、自由にカスタマイズ可能 • MIPSと少し似ているが、MIPSの「膿」を除去し現代向けに再設計

    • 例 : 遅延スロットは無い, 乗除算向けのHILOレジスタが無い、など • RISC-Vの仕様を決定する非営利団体”RISC-V Foundation” • GoogleやnVIDIAなどがメンバーに加入し注目を浴びる • RISC-Vを商用化するベンチャー企業 “SiFive” • 世界初のRISC-V向けASICチップを商用化する 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  2. RISC-V発展の歴史 2011 2012 2013 2014 2015 2016 2017 RISC-V Processor

    Raven-1 7th RISC-V Workshop 6th RISC-V Workshop RISC-V Processor Raven-2 RISC-V Processor Raven-3 5th RISC-V Workshop 4th RISC-V Workshop 3th RISC-V Workshop 1th RISC-V Workshop 2th RISC-V Workshop User-Level ISA Ver. 1.0 User-Level ISA Ver. 2.0 User-Level ISA Ver. 2.1 User-Level ISA Ver. 2.2 Privileged ISA Ver. 1.7 Privileged ISA Ver. 1.9 Privileged ISA Ver. 1.10 世界発の商用 RISC-Vボード 研究チップの制御 プロセッサとして利用 ヘネパタ第6版は RISC-Vで刷新 パタヘネのRISC-V 版が登場 約半年に1回の頻度で Workshop開催 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  3. 半導体産業はより一強化 & かつてのソフトウェア企業も参入 • 最先端プロセスは巨大企業しか追従できない • IP, EDA, ウェハ製造費, パッケージ費

    … • 中小企業は追従できず、アイデアはあってもチャンス減 • なるべく自社の「売りの部分」に時間を掛けたい • それ以外の部分(制御コア, 外部I/F)などはなるべく時間を掛けたくない • (本音) CPUなんかに時間掛けていられない • もはや組み込み業界で、制御用CPUに価値を置くことは無いのでは?(予想) • だったら、アリモノで早く作って、 「本当に価値のあるところ」に注力したい • 共通の制御コアはRISC-Vでさっさと終わらせよう! • タダだし、(そこそこ)性能良いし、 ソフトウェアスタックもある程度揃っている。 という選択肢もあるのでは 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  4. 無理に”RISC-V”に注目する必要はない、ただ • お金がない中小企業こそ、「RISC-V」に目を向けてほしい • 理由その1. コスト面 • すべてオープン (すべてのソース・ドキュメントはgithubに置いてある) •

    ソフトウェアもそれなりにある (Linux動く) • 理由その2. 充実したデザイン・設計環境 • UCBの設計したデザインでも複数種類ある 「Rocket Core」「BOOMv1」「BOOMv2」 • FPGAがあれば、すぐさまダウンロードして試行できる環境がある • 番外編: 企業とか関係なく、純粋に「RISC-V」が面白い理由 • RISC-Vの仕様が公開されたのはまだ数年前の話 • 仕様はまだバージョンアップしています (最近は落ち着きました) • 2015年当初は、制御レジスタの仕様が公開されたばかりだった。 • メーリングリストがかなり活発。様々な人が意見を出して、仕様が決まって いく。 すぐさま!誰でも!始められます CPUを自分で育てられる!なかなか無い体験! 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  5. 初の商用RISC-V評価ボード “HiFive1” • SiFive社から発売 • 日本だとボード1枚につき10,000円で入手可 • Raspberry-Pi3よりも高い • 主な仕様

    • RV32IMAC (32bitモード、HW Mult/Div搭載、Atomic搭載、Compact命 令搭載) • 64bitアドレッシング搭載なし、FPU搭載なし • シングルコアなのにAtomic搭載、と言われてもなあ • 最大動作周波数320MHz, L1IC 16kB, L1DC 16kB • SPIフラッシュ 128Mbit (L2,L3が無いのでL1とのギャップがヒドい) • あくまでフラグシップボードなので細かい仕様は見逃してやるか… • 高速動作の割にインタフェースが少ないので、何に使うん だと迷った人も多いのでは 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  6. 様々な開発環境を用意している • RISC-Vのアピールチップだと思えば 何ということはない • HiFive1を制御するアプローチはさまざま • Windows, Linux, MacOSどれでも可

    • GUI, CUIなど様々な環境が用意されている • Lチカ、ベンチマークプログラム動作 くらいなら一瞬で出来る • 立ち上げは超お手軽 • GUIでも開発できる • Freedom Studio • Windows • Linux • MacOS 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  7. GUIが嫌いな人のための、”Freedom-SDK”開発環境 • https://github.com/sifive/freedom-e-sdk • HiFive1構成用riscv-tools、ベンチマークプログラム、サンプルプログラムなど 一通り揃う • printf、getc的な物も使える freedom-e-sdk bsp

    openocd riscv-gnu-toolchain software demo_gpio dhrystone welcome local_interrupt led_fade mnist ここにプログラムを追加 # software/demo_gpioをコンパイル $ make software PROGRAM=demo_gpio # software/demo_gpio を Hifive1にupload $ make upload PROGRAM=demo_gpio # HiFive1のコンソールを出力を取得 $ screen /dev/ttyUSB1 115200 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  8. HiFive1を使ってちょっと複雑なプログラムを実行してみたい • 最近流行りのニューラルネットワークをHiFive1に移植して動作させる • ターゲットアプリケーション: MNIST (数字文字認識) • 今回は推論の部分のみ •

    学習フェーズはx86で実施  パラメータを抽出 参考にした本: ゼロから学ぶDeep Learning 全部Pythonで書いてあるのでC言語に移植 ※ 発表者はディープラーニング初心者なので、あまり詳細な ことは知りません。 性能評価などもあまり突っ込んだことはしていません… 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip 入力値 Batch_Size 28x28 重み W0 28x28 Hidden_size × Affine1 出力 Batch_Size Hidden_Size  1. Affine1 Affine1 出力 Batch_Size Hidden_Size ReLU 出力 Batch_Size Hidden_Size  2. ReLU Batch_Size 重み W1 Hidden_Size 10 × ReLU 出力 Batch_Size Hidden_Size  3. Affine2 Batch_Size 10 Batch_Size  4. Softmax Affine2 出力 10 Affine2 出力 10 Softmax 出力 重み b0 + 重み b1 + 図. 実装した主な演算
  9. MNISTを動かした! • x86と同等の認識率を、HiFive1上の実装でも確認 • 90%以上の認識率で動作 • Arduino互換チップとしてはなかなか強力 • 320MHzで動くArduinoチップは他に無いのでは? •

    課題: • L1Dキャッシュが小さい & SPIフラッシュメモリへのアクセスが遅い • 学習済みパラメータのアクセスが異常に遅くなって しまう。 • SPIフラッシュのRead: Latency=160cycle程度 • 28x28 (MNISTの画像1枚)x10バイトのデータに 必要なアクセスサイクル • 1220472サイクル。想定するレイテンシよりもちょっ と長すぎる。 L1D以外にデータ格納領域が(SPIしか)無いので、L1Dを溢れさせないように注 意して実行する必要がある。  キャッシュ容量を増やしてほしい & 2次大容量キャッシュを! 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  10. HiFive1で「ちょっとだけ」複雑なプログラムを動かした感想 • まだまだ「お遊びガジェット」の領域を抜けない • 320MHz高速動作の割に、足回りが弱すぎる & SPIが無駄にでかい • 個人的にHiFive2(?), 3

    …に期待すること • キャッシュ強化, DDRなど接続できること希望 • (Officialに)オペレーティングシステムをサポートして欲しい • 64bitアドレッシングモードをサポートして欲しい • とは言え、RISC-Vプラットフォームの幅広さを感じさせる一品 • Eclipse, GDB, Arduino, Baremetal, … • HiFive1をさらに小型に!”LoFive1” 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  11. でも、RISC-Vは進化しています E31 Coreplex E51 Coreplex U54-MC Coreplex RV32IMAC: 32bit RISC-V

    Core Integer only, Hardware Multiplier, など RV64IMAC: 64bit RISC-V Core Integer only, Hardware Multiplier, など NEW! SiFiveからQuad CoreのSoC環境がリリースされた。 SiFiveボードとして発売して欲しい! RV64IMAFD x4: 64bit RISC-V Core, Integer, Float, Doubleなど RV64IMAC: 64bit RISC-V Core 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  12. RISC-V Implementationの代表格「Rocket-Chip」 • UCBの開発したRISC-V Implementation • XilinxのFPGAボードならばサポート ZedBoard Zybo ZC706

    HiFive1の中身も実際は Rocket Chip(32-bit) RISC-V RV32IMAC SiFiveの提供するCoreplex-IPも実体は Rocket Chip(32-bit, 64-bit) Rocket-ChipのRTLシミュレーションと ソフトウェアデバッグの様子 無料 ソースコード公開 最新仕様に(かなり)追従 開発が活発 Chiselって何? どうやって動かすの? カスタマイズの方法が分からん 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  13. Rocket-Chipの実装言語 “Chisel” • Scalaをベースとしたハードウェア記述言語 • Rocket Chipはすべて”Chisel”で実装してある • 最終的にはVerilogに変換される •

    Chiselを使うことにより、合成用言語Verilogと分離する • Chisel→FIRRTL(中間言語)と変換することで、 VHDLなども出せる(一応) • 検証で有利 • Verilogシミュレータを走らせなくても Chisel(≒Scala)で検証パタンを書ける→高速 FIRRTL Verilog 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  14. FPGA への実装 • ZedBoard向けに論理合成→インプリメント • UCBのfpga-zynqリポジトリが便利 • (https://github.com/ucb-bar/fpga-zynq) • インプリメントの手順は非常に単純

    • cd zedboard; make • 合成後binファイル (.bin) • FSBL, U-Boot, BOOT.binなどZynqの起動に必要なもの • PS部(ARM)で動作させるPeta-Linuxのビルド • RISC-Vで動作させるLinuxのビルド • 全部自動でやってくれる! • このフレームワークはRISC-Vだけで 使うのはもったいない • SDカードに書き込むファイル群が ディレクトリにまとめて生成させるので、 SDカードにコピーするだけ fpga-zynq rocket-chip zedboard zynq zc706 sub-repo 合成ディレクトリ 合成ディレクトリ 合成ディレクトリ 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  15. Rocket-Chipの拡張機能 RoCC • RoCC (Rocket Custom Coprocessor) • Rocket Coreとダイレクトに接続

    (L1DC, External MemoryIFに接続) • RISC-Vのカスタム命令の仕様と直結 CMD RESP RESP CMD Rocket Core L1 D-cache Accelerator CMD RESP External ここを自作するこ とで、オリジナル 命令を作成できる custom0 rd, rs1, rs2 ・rd, rs1, rs2のレジスタアドレス情報 ・rs1, rs2 のレジスタデータ ・デコード情報など 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  16. Dot Product Acceleratorを作って Rocket Coreに接続した × 2つの行列のアドレスと長さを指定して、 自動的にデータをフェッチ+MAD処理をするアクセラレータ = 要素1つ

    分計算 実装はgithubに公開してあります。 http://github.com/msyksphinz/xxx ハードウェアを使って、メモリ のフェッチ処理とデータの演算 処理をオーバラップさせること で高速化を狙う CMD RESP RESP CMD Rocket Core L1 D-cache Accelerator CMD RESP External H_addr MAD V_addr 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  17. 性能評価  ZedBoardで動作させた  SW: ソフトウェアで実行  HW1: ハードウェアで実行 

    行列積を「行」「列」の順番で実行  HW2: ハードウェアで実行  行列積を「列」「行」の順番で実行  行列のサイズが大きくなると、約4倍の性能向上  行列積の計算の順番で、キャッシュのヒット率が変わる? 0 20000 40000 60000 80000 100000 120000 140000 160000 180000 2 x 2 x 2 4 x 4 x 4 8 x 8 x 8 16 x16 x16 17 x23 x27 サイクル数 行列サイズ Dot Product Acceleratorを使った行列積 サイクル数 SW HW1 HW2 0.0 1.0 2.0 3.0 4.0 5.0 2 x 2 x 2 4 x 4 x 4 8 x 8 x 8 16 x16 x16 17 x23 x27 性能比率 行列サイズ ソフトウェア実行を1とした場合の、 ハードウェア実行の性能向上率 SW/SW SW HW1 HW2 2 x 2 x 2 221 145 178 4 x 4 x 4 1284 512 539 8 x 8 x 8 8336 2510 2590 16 x16 x16 66735 16099 16161 17 x23 x27 164199 39571 39877 表1. サイクル数 SW/SW HW1/SW HW2/SW 2 x 2 x 2 1.000 1.524 1.242 4 x 4 x 4 1.000 2.508 2.382 8 x 8 x 8 1.000 3.321 3.219 16 x16 x16 1.000 4.145 4.129 17 x23 x27 1.000 4.149 4.118 表2. 性能向上比率 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  18. Chisel+Rocket Chipでアクセラレータを作った感想 • Chiselは「高位合成言語」ではない • Chiselの学習コスト ××× • Chiselで開発するとき、脳内は「Verilogモード」 •

    ほとんどの高位合成系だってそうだと思いますが。CだろうがPythonだろうが… • インタフェースは仕様として公開されて いるので、Verilog得意な人はVerilogで 書いた方がベター • その方が過去の資産なども 使いまわしやすいでしょう。 • RoCCのインタフェース自体は 非常に便利なので積極的に活用すべき Chisel勉強+簡単なデザ インをChiselで動かす 行列積のアイデアを固める ソフトで実装 Chiselで実装 RTLSim → FPGA動作 学習コストさえ 払えば、Chiselの利用やRoCC の開発は障壁は高くない 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip
  19. まとめ: RISC-Vは弱い者の味方 • お金が無くてもRISC-Vってトライできる • いろんな手段が用意されてます! • FPGAボードを使う : カスタムデザインでゴリゴリに最適化

    • 評価ボードを買う : 簡単にアプリケーション評価可能 • まずは資料を探してみよう • https://riscv.org/specifications/ (RISC-Vの仕様書一覧) • https://www.sifive.com (SiFiveのWebSite) • https://github.com/freechipsproject/rocket-chip (Rocket Chip) • https://github.com/sifive/freedom-e-sdk (Freedom SDK) • http://msyksphinz.hatenablog.com (発表者のブログ)