Slide 1

Slide 1 text

さわって分かる オープンソースプロセッサ 「RISC-V」の世界 FPGA開発日記 著者 @msyksphinz_dev http://msyksphinz.hatenablog.com 2017年10月13日 デザインソリューションフォーラム トラックB3 12:00 – 12:40

Slide 2

Slide 2 text

今回の発表について • RISC-Vは何となく聞いたことあるけど、積極的に触っ たことが無い方をターゲットに • 3年間、RISC-Vについて調査し続けた発表者の体験から紹介 何故注目を 浴びているのか? まず何から始めれば良いのか? Rocket-Chip HiFive1

Slide 3

Slide 3 text

RISC-Vの概要と、発展の歴史

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

手っ取り早くRISC-Vを試すために (情報収集方法) RISC-V メーリングリスト, github Wikiなど sifive.com メーリングリスト 書籍、雑誌など ブログなど 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip

Slide 7

Slide 7 text

再編は続いても、拡大し続ける半導体市場 一方でプロセスが進むごとに 開発コストは急増 新製品の開発コストは微細化と共に増加 出典:IBS、Semiconductor Engineering https://www.semiconportal.com/archive/editorial/industry/140424-chipcost.html 大型プレーヤーでないと先端 プロセスを使えない時代に。 RISC-Vの発展の歴史を見る中で… 最近の半導体市場ってどうよ? 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip

Slide 8

Slide 8 text

半導体産業はより一強化 & かつてのソフトウェア企業も参入 • 最先端プロセスは巨大企業しか追従できない • IP, EDA, ウェハ製造費, パッケージ費 … • 中小企業は追従できず、アイデアはあってもチャンス減 • なるべく自社の「売りの部分」に時間を掛けたい • それ以外の部分(制御コア, 外部I/F)などはなるべく時間を掛けたくない • (本音) CPUなんかに時間掛けていられない • もはや組み込み業界で、制御用CPUに価値を置くことは無いのでは?(予想) • だったら、アリモノで早く作って、 「本当に価値のあるところ」に注力したい • 共通の制御コアはRISC-Vでさっさと終わらせよう! • タダだし、(そこそこ)性能良いし、 ソフトウェアスタックもある程度揃っている。 という選択肢もあるのでは 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip

Slide 9

Slide 9 text

無理に”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

Slide 10

Slide 10 text

手っ取り早くRISC-Vを試すために (ボード編) • 既存のもの、UCBからリリースされているものを中心に紹介 • 何はともあれ使ってみたい、という方向け。 • 趣味の成果の紹介なので「やってみた」感はあることにご注意 Arduino互換 RISC-Vチップ HiFive-1 FPGAで動くカスタマイズ可能な 64-bit RISC-Vデザイン Rocket-Chip

Slide 11

Slide 11 text

世界初のRISC-V商用チップ HiFive1

Slide 12

Slide 12 text

初の商用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

Slide 13

Slide 13 text

様々な開発環境を用意している • RISC-Vのアピールチップだと思えば 何ということはない • HiFive1を制御するアプローチはさまざま • Windows, Linux, MacOSどれでも可 • GUI, CUIなど様々な環境が用意されている • Lチカ、ベンチマークプログラム動作 くらいなら一瞬で出来る • 立ち上げは超お手軽 • GUIでも開発できる • Freedom Studio • Windows • Linux • MacOS 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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 + 図. 実装した主な演算

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

HiFive1で「ちょっとだけ」複雑なプログラムを動かした感想 • まだまだ「お遊びガジェット」の領域を抜けない • 320MHz高速動作の割に、足回りが弱すぎる & SPIが無駄にでかい • 個人的にHiFive2(?), 3 …に期待すること • キャッシュ強化, DDRなど接続できること希望 • (Officialに)オペレーティングシステムをサポートして欲しい • 64bitアドレッシングモードをサポートして欲しい • とは言え、RISC-Vプラットフォームの幅広さを感じさせる一品 • Eclipse, GDB, Arduino, Baremetal, … • HiFive1をさらに小型に!”LoFive1” 1. RISC-Vの概要 2. HiFive1 3. Rocket-Chip

Slide 18

Slide 18 text

でも、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

Slide 19

Slide 19 text

カスタム可能なRISC-V実装 Rocket Chip

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

性能評価  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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

まとめ: 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 (発表者のブログ)