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

ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向

ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向

FPGA開発日記 著者
@msyksphinz_dev
http://msyksphinz.hatenablog.com

2019/06/14 ET-West 2019 テクニカルセッション

msyksphinz

June 14, 2019
Tweet

More Decks by msyksphinz

Other Decks in Technology

Transcript

  1. TS-5
    ますます注目される
    オープンCPUアーキテクチャ
    RISC-Vの最新動向
    The latest trend of RISC-V, attracted open CPU architecture
    FPGA開発日記 著者
    @msyksphinz_dev
    http://msyksphinz.hatenablog.com
    1

    View full-size slide

  2. 目次

    RISC-Vの概要
    RISC-Vの命令セット仕様
    RISC-Vで広がるエコシステム
    HiFive Unleashedを動かしてみる
    クラウドRISC-V環境FireSimを
    動かしてみる
    まとめ
    ALL PLAY CHAPTER
    2019/9/18 2
    HiFive1ボードで
    簡単アプリケーション開発

    View full-size slide

  3. RISC-Vとは
    • カリフォルニア大学バークレイ校(UCB)が2011年から公開している新しい命令セットアーキテクチャ
    • シンプルかつオープン、しかしLinuxが動くまでにはしっかりしている
    • かつ、自由にカスタマイズ可能
    • RISC-Vの仕様を決定する非営利団体”RISC-V Foundation”
    • GoogleやNVIDIAなどがメンバーに加入し注目を浴びる
    • 2019年6月現在で加盟団体・企業は250に迫る

    View full-size slide

  4. RISC-V Foundation
    2019/9/18 4
    Board of Directorsを中心に、ISAの各分野
    でWorking Groupが存在している。
    RISC-V Foundation
    Working Group
    ボード・
    プラットフォーム
    SIMD拡張
    Privileged Spec
    セキュリティ
    メモリモデル
    ソフトウェアツー
    ルチェイン

    Board of Directors
    RISC-V ISA Manual
    特許問題などに対して非常に慎重に対応
    CPUの歴史は特許抗争の歴史?
    RISC-Vの命令セット自体は、他社の特許を
    侵害しないように慎重に設計されている。
    Working GroupでのDiscussion

    最終的な命令仕様に追加?
    Or 各種RISC-Vをベースとしたプラット
    フォームのディスカッション

    View full-size slide

  5. 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開催
    8th RISC-V
    Workshop in Barcelona
    RISC-V Day in
    Shanghai
    9th RISC-V
    Workshop in
    Chennai RISC-V Day in
    Tokyo
    RISC-V Day in
    MICRO51
    RISC-V Summit in
    Santa Clara
    Linuxが動作する
    RISC-Vボード
    2018
    ◼ 2015年から定期的にWorkshopを開催
    ◼ トップカンファレンスにRISC-Vネタで
    通している。
    ◼ パタヘネ・ヘネパタはRISC-Vに移行
    ◼ 2017年/2018年に日本でイベント開催

    View full-size slide

  6. 2019年も激しく活動中
    6
    ◼ RISC-V Tokyo 2019も計画中?
    しかし海外と比べると日本はかなり遅れている印象…
    8th RISC-V
    Workshop in Barcelona
    RISC-V Day in
    Shanghai
    9th RISC-V
    Workshop in
    Chennai RISC-V Day in
    Tokyo
    RISC-V Day in
    MICRO51
    RISC-V Summit in
    Santa Clara
    Linuxが動作する
    RISC-Vボード
    2018
    2019
    RISC-V Day in
    Taiwan
    RISC-V Day in
    Zurich
    CARRV
    2019
    RISC-V North
    America Roadshow
    RISC-V North China
    Roadshow
    HiFive RevB
    Wireless Coprocessorの乗った
    RISC-Vボード

    View full-size slide

  7. Turing Award 2017 を受賞した
    David A. PattersonがRISC-Vを推す
    7
    https://sdtimes.com/devexec/john-l-hennessy-david-patterson-awarded-2017-acm-m-turing-award-risc-approach/
    David Patterson & Andrew Waterman
    “RISC-V Reader : An Open Architecture Atlas”

    View full-size slide

  8. コンピュータアーキテクチャの教科書が
    次々とRISC-Vに移行
    8
    コンピュータの構成と設計
    通称パタヘネ
    Computer Architecture:
    A Quantitative
    通称ヘネパタ
    RISC-V原典
    オープンアーキテクチャのススメ
    原本: RISC-V Reader
    Patterson先生が書いた。10/22新発売

    View full-size slide

  9. 急速に脚光を浴びる
    「オープンソースハードウェア」
    • CPUコアは高い
    • ハードウェア設計をするのはコストが高い
    • 最先端プロセスを使うのは非常にコストがかかる
    2019/9/18 9
    ソフトウェア業界に比べてハードウェア業界は参入の敷居が高い(気がする)。
    少しずつ状況は変わりつつある、気がする
    • CPUコア・デジタル部はオープンソース化が進む

    View full-size slide

  10. ライバル現る この流れを作ったのはやはりRISC-Vでは?
    Wave Computing® Launches the MIPS Open Initiative To Accelerate Innovation for the Renowned MIPS® Architecture
    https://www.mipsopen.com/press/wave-computing-launches-the-mips-open-initiative-to-accelerate-innovation-for-the-renowned-mips-architecture/
    Wave Computing® Creates MIPS Open™ Advisory Board
    https://www.mipsopen.com/press/wave-computing-creates-mips-open-advisory-board/
    Wave Computing Releases First MIPS Open Program Components to Accelerate Innovation for Next-Generation System
    on Chip Designs
    https://www.mipsopen.com/press/wave-computing-releases-first-mips-open-program-components-to-accelerate-innovation-for-next-generation-system-on-chip-designs/
    Arm Cortex-Mシリーズの一部が無料で使用できる or FPGA向けのIPが無料で提供される。
    Cortex-A5を低価格で使用でき、低価格でテープアウトすることができる。

    View full-size slide

  11. RISC-V命令セット仕様概観
    11

    View full-size slide

  12. RISC-Vアーキテクチャ 命令セット外観
    12
    ARM Manual
    6000ページくらい
    RISC-V Manual
    200ページくらい
    どっちが良いかは別にして…
    細かいことをいろいろ喋っても仕方がないので外観だけ。
    ざっくりと必要なところだけ説明します。
    もはや凶器

    View full-size slide

  13. RISC-Vの命令セットを
    Webで参照できるページを作りました
    13
    https://msyksphinz.github.io/riscv-isadoc/html/index.html

    View full-size slide

  14. RISC-V命令セットアーキテクチャ形態について
    • RISC-Vは大きく「基本命令セット」と
    「拡張命令セット」に分かれる。
    • 基本命令セット : RV32I / RV32E / RV64I / RV128I
    • 拡張命令セット : 基本命令セット+特定向け命令
    • 浮動小数点とか、ベクトル命令とか
    14
    “A”
    atomic拡張
    “C”
    16bit短縮命令
    “F”
    単精度浮動小数点
    “D”
    倍精度浮動小数点
    “L”
    10進数浮動小数点
    “Q”
    4倍精度浮動小数点
    “M”
    乗除算命令
    “S”
    スーパバイザモード
    “P”
    Packed SIMD
    “V”
    Vector拡張
    “N”
    ユーザレベル割り込み
    RV32I RV32E RV64I RV128I
    拡張命令
    基本命令
    RV32I
    RV32E
    RV64I
    RV128I
    +
    M A F D
    +
    +
    +
    M A F D
    C
    = RV32G
    = RV64GC
    ■ RISC-V アーキテクチャの呼び方
    アーキテクチャ識別子を付加して呼ぶ

    View full-size slide

  15. RISC-Vの特権モードと動作モード
    • 3種類の動作モードが定義されている
    • 最初の版では4種類だったが削減されて3種類
    • ユーザモード
    • 最も権限の少ないモード。アプリケーションを動かすためのモード
    • スーパバイザモード
    • OSが例外処理などを行うための権限の高いモード。
    • マシンモード
    • 最も権限が高い。マシンモード。何でもできる
    • モード間の遷移について
    • 外部から割り込み挿入 or 命令実行中に例外発生
    • ECALL命令によるSupervisor Call
    • 例外処理後に実行するMRET / SRET / URET
    • ハイパーバイザモード
    • スーパバイザモードとマシンモードの間に定義される。
    • 現在議論中。
    15
    マシンモード
    スーパバイザモード
    ユーザモード

    View full-size slide

  16. RISC-Vのレジスタ
    16
    x0
    x1
    x2
    x3
    x4
    x5
    x31

    XLEN=128
    x0
    x1
    x2
    x3
    x4
    x5
    x31

    XLEN=64
    x0
    x1
    x2
    x3
    x4
    x5
    x31

    XLEN=32
    f0
    f1
    f2
    f3
    f4
    f5
    f31

    FLEN=128, Q Extension
    f0
    f1
    f2
    f3
    f4
    f5
    f31

    FLEN=64, D Extension
    f0
    f1
    f2
    f3
    f4
    f5
    f31

    FLEN=32, F Extension
    整数レジスタの表記は全てxN
    x0 – x31まで定義
    整数レジスタ長はXLENで表記される
    RV32 : XLEN=32
    RV64 : XLEN=64
    RV128 : XLEN=128
    浮動小数点レジスタの表記は全てfN
    f0 – f31まで定義
    浮動小数点レジスタ長はFLENで表記される
    F拡張 : FLEN=32
    D拡張 : FLEN=64
    Q拡張 : FLEN=128

    View full-size slide

  17. Floatレジスタは
    Single/Double/Quadで共有
    • 例えば、Float⇔DoubleのConvert命令の場合
    • FCVT.D.S fd, fs
    • FCVT.S.D fd, fs
    • DoubleとFloatがレジスタを
    共有しているので
    • NaN Boxingをサポートする必要がある
    • FLEN>32で、Single Floating Pointの命令を実行するときは、32bit
    以上の値は全て1が設定されている必要がある
    17
    fd
    fs
    Convert
    1111…1111 Single-Float Value
    FLEN=64
    Single値として見た場合 : 普通の値
    Double値としてみた場合 : 上位がすべて1 なので NaN
    → 型を明確に識別するための手法

    View full-size slide

  18. 割り込み・例外
    • RISC-Vの割り込み・例外要因は多くない
    • 割り込み
    • ソフトウェア割り込み
    • タイマ―割り込み
    • 外部割込み
    • ユーザ・スーパバイザ・
    マシンモード毎に定義
    • 外部割込みが少ないので
    PLICを外部に定義
    18

    View full-size slide

  19. C命令系列 (Compressed命令)
    • RISC-Vの通常命令は32-bit
    • C命令系列は16ビット長
    • RISC-Vの命令種はシンプルな分、命令密度が低い
    • 16-bit長命令を使ってマイクロアーキテクチャの面で
    効率を上げる
    19
    RD  RD + RS1
    RD  RD + IMM
    Stack-relative Store
    Compact Load
    Compact Store
    Compact Jump

    View full-size slide

  20. なんでCompressed命令が必要なの?
    20
    ・RV32 / RV64は他のISAに比べて
    コードサイズが大きい
    → フェッチサイズが大きい。
    ・そこで、RV32C / RV64Cという
    圧縮命令を活用する。
    → フェッチサイズを圧縮できる。
    Computer Architecture Research with RISC-V Krste Asanovic より抜粋
    ISA Shootout: Comparing RISC-V, ARM, and x86 on SPECInt 2006 より抜粋
    RV32GC / RV64GCでは、多くの
    ベンチマークプログラムで他の
    命令セットよりも優れる。

    View full-size slide

  21. その他にも、性能方向に振るなら頑張ってね
    21
    そもそも命令密度において優位性が無いので、マイクロアーキテクチャにより
    実行性能を上げるしかない。
    実行時に複数命令をFusionさせて発行することで、性能を向上させる
    → Micro-Op Fusion
    Computer Architecture Research with RISC-V より抜粋

    View full-size slide

  22. RISC-Vの拡張命令
    • RISC-Vの命令系列にはカスタム領域が存在する
    • 将来のための予約領域 (現時点では好き勝手に使うことも?)
    22
    実はRISC-Vの命令セットは64-bit長の領域が定義されている

    View full-size slide

  23. RISC-Vのシステムレジスタ
    • システムレジスタは専用命令でアクセスする。
    • csrrw (CSR Register Read/Write)
    • csrrs (CSR Register Set)
    • csrrc (CSR Register Clear)
    • csrrwi (CSR Register Read/Write Immediate)
    • csrrsi (CSR Register Set Immediate)
    • csrrci (CSR Register Clear Immediate)
    • 汎用レジスタとCSRレジスタの交換 (csrrw / csrrwi)
    • 即値を指定してCSRの特定のビットを1に設定する (csrrs/csrrsi)
    • 即値を指定してCSRの特定のビットを0に設定する(csrrc/csrrci)
    23
    x0
    x1
    x2
    x31
    CSR
    基本は1命令で
    データを交換

    View full-size slide

  24. CSRレジスタの系統
    • Machine-Mode, Supervisor-Mode, User-Mode用の
    CSRレジスタでアドレス空間が分けられている
    24
    User-Mode
    Supervisor-Mode
    Machine-Mode

    View full-size slide

  25. 仮想メモリ
    • RISC-Vの仮想メモリは(比較的)複雑
    • Sv32 : VA 32bit → PA : 34bit
    • Sv39 : VA 39bit → PA : 56bit
    • Sv48 : VA 48bit → PA : 56bit
    25
    Bare
    Sv32
    Bare
    Sv39
    Sv48
    RV32 RV64
    SATP
    vpn[2] vpn[1] vpn[0] offset
    ppn[1] ppn[0]
    +
    +
    ppn[1] ppn[0]
    +
    ppn[1] ppn[0]
    +
    Supervisor Address Translation and Protection Register
    物理メモリ
    アドレス
    仮想メモリ
    アドレス

    View full-size slide

  26. ベクタ命令
    • RISC-VではSIMD命令よりもベクタ命令が先行して定義されている
    • https://github.com/riscv/riscv-v-spec
    • 少し面白い仕様
    26
    RISC-V Readerでも先に紹介されているのは
    SIMDではなくVector命令
    動的レジスタ・タイピング
    プレディケート・レジスタ
    CSRレジスタの拡張
    以降の説明は”RISC-V Reader”およびRISC-V User-
    Level ISA V2.2をベースに説明しますが、今後変
    更される可能性があります。

    View full-size slide

  27. 動的レジスタ・タイピング
    • 普通のベクトル命令・SIMD命令
    • 命令が取り扱う「型」を決める。
    • RISC-Vのベクトル命令
    • レジスタが「型」を持つ
    27
    ADD.I.W4 : 整数レジスタについて、4-way SIMD
    の加算を実行する
    ADD.F.W2 : 単精度浮動小数点レジスタについて、
    2-way SIMDの加算を実行する
    v0
    v1
    v2
    v3
    v31
    int32
    float
    double
    int32
    int64
    ベクトルレジスタ
    vp0
    vp1
    vp7


    プレディケート・レジスタ
    型がバラバラなレジスタで、ベクトルレジスタ長を
    どのように定義するのか?
    → MVL(Maximum Vector Length)レジスタを使う
    各ベクトルレジスタがどの型を持っているのか?
    → CSRとしてvctypeレジスタを用意

    View full-size slide

  28. RISC-Vベクタ命令のプログラミング例
    28
    # 32ビット整数型どうしのベクトル配列の加算コード
    # ベクトルレジスタは32ビット整数型をサポートするように構成されて
    いるものとする。
    # a0 : ベクトル長Nを保持している。
    # a1 : 加算結果を格納するベクトルのポインタを保持している。
    # a2 : 加算するベクトル1つ目のポインタを保持している。
    # a3 : 加算するベクトル2つ目のポインタを保持している。
    loop:
    setvl t0, a0 # Nをvlに設定する。t0に現在のvlの値を設定する。
    vld v0, a2 # v0に1つ目のベクトルをロードする。
    sll t1, t0, 2 # t1はベクトル長Nに相当するバイト数を返す
    # (32ビット整数なので×4)
    add a2, t1 # a2をロードしたバイト数だけ進める
    vld v1, a3 # v1に2つ目のベクトルをロードする。
    add a3, t1 # a3をロードしたバイト数だけ進める。
    vadd v0, v1 # v0とv1を加算し、その結果をv0に格納する。
    sub a0, t0 # ベクトル命令で処理した分だけa0の値を減らす。
    vst v0, a1 # 加算した結果をメモリにストアする。
    add a1, t1 # 結果ベクトルのポインタを進める。
    bnez a0, loop # ベクトル要素が残っていればループを繰り返す。
    # そうでなければ終了する。
    setvl命令に対象データの長さを設定すると、
    同時に処理できる最大長の長さがMVLに
    設定される。
    例 : 最大で処理できるベクタ長が128で、
    N=1000のとき → MVL =128
    あとは、N=1000からMVL=128を毎回
    減算し、N=0になるまで処理を繰り返す。

    View full-size slide

  29. 発表者の思うRISC-Vのすごいところ(仕様編)
    • スーパバイザに権限を移譲する”Delegation(移譲)”
    • Machine Modeで処理するのが面倒な例外はSupervisor Modeに移譲して動かす
    • コンテキストスイッチ時にレジスタ退避を簡略化するための仕組み
    • XS / FSビットフィールドにより、レジスタの書き換え発生を記憶している
    • mstatusシステムレジスタは過去の実行モードを記憶することが可能
    • 例外処理に入る→復帰の処理が割と容易
    スーパバイザモード
    マシンモード
    例外発生
    移譲
    例外処理
    例外から戻る
    ユーザモード
    スーパバイザモード マシンモード
    例外発生
    例外受付
    動作モード変更
    例外処理
    例外から戻る
    ユーザモード
    割り込み・例外の移譲を使う場合 割り込み・例外の移譲を使わない場合
    こちらも参考になります : https://www.sifive.com/blog/2017/10/23/all-aboard-part-7-entering-and-exiting-the-linux-kernel-on-risc-v/

    View full-size slide

  30. 仕様書を読んで感じた、
    RISC-Vのすごいところ(仕様編)
    • 現代的(?)なプログラミングパラダイムのサポート
    • JALR rd, rs1, offset // PC ← x[rs1]+offset, x[rd] ← PC
    • リンクレジスタとしてx1/x5が指定可能
    • rd=x1/x5, rs1=x1/x5, かつ rd != rs1の場合
    • RAS(Return Address Stack) にPush / Popを同時実行
    • コルーチン動作をサポートするため
    2019/9/18 30
    コルーチンはいったん処理を中断した後、続
    きから処理を再開できる。接頭辞 co は協調を
    意味するが、複数のコルーチンが中断・継続
    により協調動作を行うことによる。
    Wikipedia より
    https://ja.wikipedia.org/wiki/コルーチン

    View full-size slide

  31. RISC-Vとエコシステム
    31

    View full-size slide

  32. 作られるのはISAだけじゃない
    2019/9/18 32

    View full-size slide

  33. RISC-Vを見ておけば、コンピュータ
    サイエンス技術全般を網羅できる
    2019/9/18 33

    View full-size slide

  34. RISC-Vを中心に発展するエコシステム
    • RISC-Vを中心としたセキュリティプラットフォームの開発
    「RISC-Vの狙いと、IoT、AIエッジセキュリティの実現」より抜粋
    ET/IoT Technology NAGOYA 2019【K-1】 2019/02/06
    http://www.jasa.or.jp/etnagoya/seminar/doc/doc_k01.pdf
    RISC-V Summit 2018 “Keystone Enclave”より抜粋
    https://keystone-enclave.org/files/keystone-risc-v-summit.pdf

    View full-size slide

  35. RISC-Vが拡充するCHIPS Alliance
    • Linux Foundationが中心となり、オープンソースハードウェア
    を中心としたCPU・SoCの製品化を促進する
    UVM(Universal Verification Methodology)
    ベースの命令ストリームジェネレータの提供
    オープンソースハードウェア
    記述言語Chiselの開発
    オープンバスプロトコル
    TileLinkの開発
    SystemVerilogで記述されたDual-Issue
    RISC-Vプロセッサの開発

    View full-size slide

  36. バスプロトコル TileLink
    • RISC-Vの実装でよく出てくるバスプロトコル
    • OCP, AXI, TileLink…
    • キャッシュコヒーレントをサポート
    • MOESIプロトコルに相当
    • RISC-Vの実装”Rocket-Chip”がこの
    プロトコルを使っている。

    View full-size slide

  37. オフチップ間通信技術OmniXtend
    2019/9/18 37
    • RISC-Vを中心とするオフチップ間通信のプロトコルを開発
    • Western Digitalを中心に。
    “CPU Project in Western Digital: From Embedded Cores for Flash Controllers to Vision of
    Datacenter Processors with Open Interfaces” RISC-V Summit 2018
    https://content.riscv.org/wp-content/uploads/2018/12/13.10-Bandic-Golla-Vucinic-CPU-Project-in-Western-
    Digital-From-Embedded-Cores-for-Flash-Controllers-to-Vision-of-Datacenter-Processors-with-Open-Interf.pdf よ
    り抜粋

    View full-size slide

  38. RISC-VコアRocketの設計のために作られた
    ハードウェア記述言語Chisel
    GoogleのAIチップ Edge TPUの設計に
    使用されたことで、(日本)でにわかに
    脚光を浴びる
    Chisel(Based on Scala)
    IR
    Verilog
    Chisel Compiler
    FIRRTL
    ハードウェア記述言語 Verilog-HDL / SystemVerilogの圧倒的な生産性の低さに辟易する
    • シミュレータが遅い。商用のシミュレータはライセンスが高い。
    • 抽象的・高位の記述ができない。ジェネリックな記法ができない。
    • → ChiselはScalaをベースとしており、よりソフトウェア的な記法が可能。

    View full-size slide

  39. Chisel Compiler, FIRRTLは
    ハードウェア記述コンパイラとして面白い
    Chisel3
    Syntax Analyzer
    FIR Emitter
    FIR (Flexible Intermediate
    Representation)
    FIRRTL
    Make Syntax Tree
    Passes
    Passes
    Passes
    Passes
    Verilog Emitter
    Verilog
    ただ聞いている話だと
    まだいろいろ不備があり
    改善が必要…
    ただ聞いている話だと
    まだいろいろ不備があり
    改善が必要…

    View full-size slide

  40. クラウドでRISC-V SoCを設計する時代
    https://www.sifive.com/core-designer
    SiFive Core DesignerでWebでSoC設計

    View full-size slide

  41. SiFive Core DesignerでWebでSoC設計
    (経験上の)これまでのSoC設計
    CPUベンダのフロントエンドの
    営業と打ち合わせ
    フロントエンドが本社設計チーム
    に問い合わせ
    カスタマイズコアを
    本社が生成開始
    カスタマイズコアがリリース
    IPを接続する&検証
    性能検証
    レイアウト
    テープアウト
    1週間経過
    1週間経過
    1週間経過
    WebでSoCのカスタマイズをする
    その環境をダウンロードする
    IPを接続する & 検証
    性能検証
    レイアウト
    テープアウト
    Core Designerでのクラウド設計
    まあチップ設計ってこんなに単純な話じゃありませんが、
    イメージで。。。

    View full-size slide

  42. 実チップ?FPGA?いえいえ、AWS
    大規模FPGAの購入にはかなりのコスト高。200~300万円
    FPGAを常に手元に置いておく必要がない。
    必要な時に必要な分だけコストがかかる。
    → コストダウン・参入障壁を下げる一要因になることを期待
    名前 FPGA vCPU Memory SSD Storage Cost/h
    f1.2xlarge 1 8 122 GB 470 GB 1.65 USD
    f1.4xlarge 2 16 244 GB 940 GB 3.30 USD
    f1.16xlarge 8 64 976 GB 4 x 940 GB 13.20 USD

    View full-size slide

  43. FireSim for Rocket-Chip/BOOM
    43
    FireSim : RISC-V Implementation on AWS F1 instance
    複数FPGAを使って最大1024コアまで動作。
    GitHubで公開されている (https://github.com/firesim)
    FPGA-Accelerated Cycle-Exact Scale-Out System Simulation in the Public Cloud
    http://iscaconf.org/isca2018/slides/1A3.pdf

    View full-size slide

  44. AWSを使ってRISC-Vを動かし
    Linuxをブートする
    (ちょっと見えにくいけど)
    AWS F1上でRISC-V Linuxがブート
    RISC-Vと関係なく、とりあえずAWSインスタンスを
    試したいということも可能:
    AWS FPGAリポジトリ : https://github.com/aws/aws-fpga
    Single使用なら
    個人でも何とか…

    View full-size slide

  45. RISC-Vをベースにして様々な
    プラットフォームが構築されており、
    自分の興味に応じて様々なアプローチがある
    2019/9/18 45

    View full-size slide

  46. RISC-Vを
    触ってみましょう
    46

    View full-size slide

  47. 47
    まず何をしたい?
    とりあえず手持ちのプログラムを
    RISC-V向けにコンパイルして
    実行してみたい。
    riscv-toolsによる
    開発環境の整備
    MicroPythonを
    RISC-Vで動かしてみよう
    クラウド環境 AWS F1インスタンスで
    RISC-V Rocket-Chipを動かそう
    RISC-VチップでOSを動かして
    プログラミングをしよう
    RISC-VチップHiFive1で
    Zephyr OSを動かそう
    RISC-VチップHiFive
    Unleashedでマルチコア
    プログラミングを
    してみよう。
    FireSimでRocket-Chipを
    ビルドし、Linuxを
    ブートしよう。
    FireSimでカスタムチップ
    を実装し、
    ベンチマークを動かそう。

    View full-size slide

  48. riscv-toolsリポジトリの中身
    48
    riscv-tools
    riscv-openocd
    riscv-isa-sim
    riscv-opcodes
    riscv-tests
    riscv-pk
    RISC-Vデバッグ用のOpenOCD実装
    命令セットシミュレータ
    RISC-Vテストパタン
    RISC-Vのプロキシカーネル
    RISC-Vのソフトウェア開発を行う際の最もBaseとなるツール群が
    入っている。
    全部ダウンロードするとかなりディスクを消費します(2GBくらい)。
    最近リポジトリの構成が変わりました!GNUツールチェインとデバッガは別でダウンロード。
    ツールチェインはSiFive社のウェブサイトからダウンロードするのが安心?
    https://www.sifive.com/boards
    • GNU Embedded Toolchain — v2019.02.0
    • OpenOCD — v2019.02.0

    View full-size slide

  49. GCCを使ってプログラムをコンパイル &
    シミュレーション
    49
    #include
    int gcd (int a, int b)
    {
    int c;
    if (a < b) {
    int tmp;
    tmp = b;
    b = a;
    a = tmp;
    }
    while (b != 0) {
    c = a % b;
    a = b;
    b = c;
    }
    return a;
    }
    int main ()
    {
    printf ("hello world¥nCalling GCD ...¥n");
    printf ("GCD(273, 21) = %d¥n", gcd(273, 21));
    printf ("GCD(411, 27117) = %d¥n", gcd(411, 27117));
    return 0;
    }
    $ riscv64-unknown-elf-gcc gcd.c -o gcd
    $ riscv64-unknown-elf-objdump -D gcd > gcd.dmp
    $ spike pk gcd
    <>
    <>
    hello world
    Calling GCD ...
    GCD(273, 21) = 21
    GCD(411, 27117) = 3
    <>
    命令セットシミュレータを実行

    View full-size slide

  50. 例: MicroPythonを移植してみましょう
    54
    $ cd ports/qemu-riscv32
    $ make
    Use make V=1 or set BUILD_VERBOSE in your environment to
    increase build verbosity.
    GEN build/genhdr/qstrdefs.collected.h
    QSTR not updated
    spike pk build/firmware.elf
    hello world!
    標準的なシステムコールを持ち合わせているSpikeを使えば、
    アプリケーションのRISC-Vへの移植とデバッグも簡単

    View full-size slide

  51. HiFive1で
    リアルタイムOSを
    動かす
    55

    View full-size slide

  52. 現状入手可能なRISC-Vボード
    SiFive : HiFive Unleashed
    RISC-V 64-bit(RV64GC) x4 + RISC-V 64-bit (RV64GC)
    SiFive : HiFive1
    RISC-V 32-bit(RV32GC)
    SiFive : HiFive1 Rev.B
    RISC-V 32-bit(RV32GC)
    Sipeed : MAIX GO
    RISC-V 64-bit (RV64IMAFDC)

    View full-size slide

  53. HiFive1
    57
    • SiFive社がリリースしているRISC-Vボード
    • Freedom FE310-G000
    • 最大動作周波数 320MHz
    • RV32IMAC
    • 32-bit RISC-V, 乗除算命令、アトミッ
    ク命令、Compressed命令
    • キャッシュL1IC : 16kB / L1DC : 16kB
    • 128 Mbit Off-Chip (ISSI SPI Flash)
    • 外部I/Oピン 19本
    • 外部割込みピン 19本
    • Linuxなどの高級なOSは動かないけれども、
    LightWeightなOSならばなんとか。
    日本国内でも代理店から購入可能

    View full-size slide

  54. HiFive Rev.Bもあるよ
    • SiFive社がリリースしているRISC-Vボード
    • Freedom FE310-G002
    • 最大動作周波数 320MHz
    • RV32IMAC
    • 32-bit RISC-V, 乗除算命令、アトミック命令、
    Compressed命令
    • キャッシュ
    • L1IC : 16kB / L1DC : 16kB
    • 128 Mbit Off-Chip (ISSI SPI Flash)
    • 外部I/Oピン 19本
    • 外部割込みピン 19本
    • WiFiモジュール付属。技適通過済み。
    58

    View full-size slide

  55. OSは動かないの?→
    リアルタイムOSが動きます
    60
    公式にサポートされているOS
    “FreeRTOS”, “Zephyr”
    Zephyr :
    ■ The Linux Foundationが開発している小規模リアルタイムOS
    ■ (発表者はあまり詳細を見たことがないけれども)ソースコードが
    Linuxに似ていると言われている。
    HiFive1でZephyrを動作させるためのドキュメントが公開されている

    View full-size slide

  56. HiFive1でリアルタイムOS
    Zephyrを動かしてみる
    61
    1. QEMUで動かす
    git clone https://github.com/zephyrproject-rtos/zephyr
    cd zephyr
    sudo pip3 install --user -r scripts/requirements.txt
    export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
    . ./zephyr-env.sh
    # 資料には下記のように記述してあるが、SDK 0.9.5ではビルドできなかった。SDK 0.10.0を使用する必要がある。
    # wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.5/zephyr-sdk-0.9.5-setup.run
    # sh zephyr-sdk-0.9.5-setup.run
    wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.10.0/zephyr-sdk-0.10.0-setup.run
    sh zephyr-sdk-0.10.0-setup.run
    mkdir build-example
    cd build-example
    cmake -DBOARD=qemu_riscv32 /home/msyksphinz/work/riscv/zephyr/samples/hello_world
    $ make -j $(nproc)
    $ make run
    ***** Booting Zephyr OS v1.14.0-rc3-246-g10327e59c622 *****
    Hello World! qemu_riscv32

    View full-size slide

  57. HiFive1でリアルタイムOS
    Zephyrを動かしてみる
    62
    2. HiFive1で動かす 3. 哲学者の食事問題を動かしてみる

    View full-size slide

  58. HiFive1 & Zephyrでアプリケーション開発
    ある程度はできる?
    63
    mallocはできるようだ。
    mem_ptr = k_malloc(sizeof(int)*200);
    if (mem_ptr == NULL) {
    printf("Memory not allocated");
    }
    for (int i = 0; i < 200; i++) {
    mem_ptr[i] = i;
    }
    for (int i = 0; i < 200; i++) {
    printk("STRING = %d¥n", mem_ptr[i]);
    }
    k_free(mem_ptr);
    struct fs_mount_t mount;
    fs_mount(&mount);
    struct fs_file_t file;
    fs_open (&file, "/test");
    char *wr_str = "This is a test.¥n";
    fs_write (&file, wr_str, sizeof(wr_str));
    fs_close (&file);
    ファイルオープンはできない?
    (マイクロSDが無いので当然かな)

    View full-size slide

  59. HiFive Unleashedを使って
    マルチコアプログラミング
    64

    View full-size slide

  60. HiFive
    Unleashed
    • SiFive社がリリースしているRISC-Vボード
    • U54 RV64GCアプリケーションコア x4
    • 最大動作周波数1.5GHz
    • E51 RV64IMAC管理コア x1
    • コヒーレント2MB L2 Cache
    • 8GB DDR-SDRAM
    • Gigabit Ethernetポート
    • 32MB Quad SPI フラッシュメモリ
    • MicroSD カードコネクタ
    65

    View full-size slide

  61. RISC-V PC
    https://abopen.com/news/building-a-risc-v-pc/
    2019/9/18 66

    View full-size slide

  62. Linuxも立ち上がる
    • デフォルトでBuildrootのインストールされた
    uSDカードがついてくる。
    • 他のLinux Distributionも立ち上げることができる
    • Debian GNU/Linux
    • Fedora

    View full-size slide

  63. DebianがRISC-Vに急速に対応
    https://content.riscv.org/wp-content/uploads/2018/05/09.25-09.55-tate-of-RISC-V-Software-RISC-V-Workshop-at-Barcelona-May-2018-1.pdf
    Debian GNU/Linux is imported
    and “apt-get” worked!

    View full-size slide

  64. Fedora + GNOME + HiFive Unleashedで
    Desktop Linux
    https://abopen.com/news/western-digital-releases-fedora-desktop-on-risc-v-tutorial/
    SiFive presentation at RISC-V Workshop in Barselona, 2018 May
    https://content.riscv.org/wp-content/uploads/2018/05/09.25-09.55-tate-of-RISC-V-Software-RISC-V-Workshop-at-Barcelona-May-2018-1.pdfより抜粋

    View full-size slide

  65. Debianを立ち上げてみる
    Welcome to Buildroot
    buildroot login: root
    Password: [sifive]
    # mount /dev/mmcblk0p2 /mnt
    # mount -t proc /proc /mnt/proc
    # cp /etc/resolv.conf /mnt/etc/resolv.conf
    # chroot /mnt/ /bin/bash
    # cat /etc/debian_version
    10.0
    ntpdate ntp.nict.jp
    export DEBIAN_FRONTEND=noninteractive
    DEBCONF_NONINTERACTIVE_SEEN=true
    export LC_ALL=C LANGUAGE=C LANG=C
    dpkg --configure -a

    View full-size slide

  66. Coremarkベンチマークを実行 &
    マルチコアプログラミング
    root@buildroot:~/work/riscv/coremark# less ./run2.log
    2K validation run parameters for coremark.
    CoreMark Size : 666
    Total ticks : 13323
    Total time (secs): 13.323000
    Iterations/Sec : 2251.745102
    Iterations : 30000
    Compiler version : GCC8.3.0
    Compiler flags : -O3 -DPERFORMANCE_RUN=1 -lrt
    Memory location : Please put data memory location here
    (e.g. code in flash, data on heap etc)
    seedcrc : 0x18f2
    [0]crclist : 0xe3c1
    [0]crcmatrix : 0x0747
    [0]crcstate : 0x8d84
    [0]crcfinal : 0xff48
    Correct operation validated. See README.md for run and reporting rules.
    CMK/MHz = 2251.724 / 1500 = 1.5011 あまりにも公称値とずれ過ぎている…
    CMK/MHz = 2251.724 / 1000 = 2.251 これでも公称値とかなり差異がある…

    View full-size slide

  67. HiFive Unleashedで
    マルチコアプログラミングに挑戦
    コア0 コア1 コア2 コア3
    std::vector threads;
    for(size_t i = 0; i < num_threads; ++i){
    double start = static_cast(i) / num_threads;
    threads.emplace_back(std::thread(worker,
    start,
    start + length));
    }
    for(auto& thread : threads){
    thread.join();
    }
    0
    2000
    4000
    6000
    8000
    1-core 2-cores 4-cores 8-cores
    実行時間[ms]
    使用コア数
    使用コア数を変えたときの
    実行時間

    View full-size slide

  68. クラウド+FPGAで
    より多くのチャンスを
    7
    3
    9/18/2019

    View full-size slide

  69. 単体FPGAで動かす時代から
    クラウドでFPGAを動かす時代へ
    2019/9/18 74
    高性能なFPGAを使いたい…
    購入するのはコストがかかりすぎる
    AWSクラウド上でFPGAを動かすF1インスタンス
    The best guidance on this is to either align with the Freedom repositories that target Arty and
    ZC707 boards or to use Firesim and migrate to an AWS worflow. Alternatively, you can write
    your own FPGA shell for whatever board you want to use and build up your own infrastructure
    and workflow. Fpga-zynq is deprecated, but should be fine if you use it's exact submodules and
    rebuild everything. Deviating from that will, likely, require modifications on your end (e.g., if you
    try to use rocket-chip master inside fpga-zynq master).
    手元のZYNQボードを騙し騙し使ってRocket-
    Chipを動かしていた私に届いた衝撃のメール
    ただしインスタンスをきちんと管理しないと…

    View full-size slide

  70. FireSim Easy-to-use, FPGA-accelerated Cycle-
    accurate Hardware Simulation in the Cloud
    2019/9/18 75
    マネージャインスタンス
    ビルドファーム
    FPGAデザイン
    合成用サーバ
    c4インスタンス
    c4インスタンス
    c4インスタンス
    c4インスタンス
    FPGA
    f1インスタンス
    FPGA
    f1インスタンス
    FPGA
    f1インスタンス
    m4インスタンス
    RISC-Vコアが
    動作する FPGA
    マルチクラスタを構成する場合は
    m4インスタンスがネットワークスイッチ
    をエミュレートする。
    Amazon Web Service クラウド
    ランファーム

    View full-size slide

  71. FireSim
    FireChip
    FireChip カスタム
    アクセラレータ
    Rocketコア
    FireChip環境でRocket-Chipを改造する。
    FireSimにカスタマイズしたFireSimを組み込み、
    オリジナルのコンフィグレーションを作成する。
    オリジナル
    FireSimデザイン
    オリジナルのFireSimデザインを
    Vivadoで論理合成し、AGFIをAWSクラウド上に
    作成する
    FPGA
    FireSimデザインをクラウドからダウンロードし、
    FPGAインスタンスに書き込む
    FPGA
    SW
    ベンチマークプログラムを実行する。
    FireSimでRISC-Vコアを
    実行する仕組み
    2019/9/18 76

    View full-size slide

  72. FPGA
    ワークロード1
    Linux
    ワークロード2
    Linux
    テストしたい
    コマンド
    ワークロード3
    ベンチマーク1
    ベンチマーク2
    ベンチマーク3
    FireSim
    コンフィグ1
    FireSim
    コンフィグ2
    FireSim
    コンフィグ1
    FireSimでベンチマークを動かす仕組み:
    Workloads
    2019/9/18 77

    View full-size slide

  73. 拡張機能RoCCを使ってRocket-Chipをカスタマイズ
    2019/9/18 78
    • 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 のレジスタデータ
    ・デコード情報など
    ×
    2つの行列のアドレスと長さを指定して、
    自動的にデータをフェッチ+MAD処理をするアクセラレータ
    =
    要素1つ分
    計算

    View full-size slide

  74. FireSimでテストコードの
    Workloadsを作って実行
    FPGA
    ワークロード3
    ベンチマーク1
    ベンチマーク2
    matrixmul
    行列積ベンチマーク
    FireSim
    コンフィグ1
    Rocket-Chip
    Custom-
    Accelerator
    0
    0.5
    1
    1.5
    2
    2.5
    3
    3.5
    4
    2 x 2 x 2 4 x 4 x 4 8 x 8 x 8 16x16x16 18x24x28
    性能比率
    SWを1とした場合の
    HW実行の性能向上率
    SWに対する性能向上率
    HWに対する実行性能
    SW実行 HW実行
    2 x 2 x 2 327 219
    4 x 4 x 4 1024 488
    8 x 8 x 8 7041 2527
    16x16x16 54559 16118
    18x24x28 154808 43806
    2019/9/18 79

    View full-size slide

  75. • RISC-Vを取り巻く最新動向についてご紹介しました。
    • RISC-Vアーキテクチャだけでなく、その周辺で構築されるエコシステムにも注目です。
    • RISC-Vの開発環境の構築方法について簡単にご説明しました。
    • シミュレータを使ったアプリケーションの実行
    • HiFive1を使ったアプリケーション開発
    • HiFive Unleashedを使ったLinuxのブート
    • FireSimを使ったクラウドでのRISC-Vコア開発
    • RISC-Vと、オープンハードウェアが向かう未来について、その一端をご紹
    介しました。
    81

    View full-size slide