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
  2. 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をベースとしたプラット フォームのディスカッション
  3. 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年に日本でイベント開催
  4. 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ボード
  5. 急速に脚光を浴びる 「オープンソースハードウェア」 • CPUコアは高い • ハードウェア設計をするのはコストが高い • 最先端プロセスを使うのは非常にコストがかかる 2019/9/18 9

    ソフトウェア業界に比べてハードウェア業界は参入の敷居が高い(気がする)。 少しずつ状況は変わりつつある、気がする • CPUコア・デジタル部はオープンソース化が進む
  6. ライバル現る この流れを作ったのはやはり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を低価格で使用でき、低価格でテープアウトすることができる。
  7. RISC-Vアーキテクチャ 命令セット外観 12 ARM Manual 6000ページくらい RISC-V Manual 200ページくらい どっちが良いかは別にして…

    細かいことをいろいろ喋っても仕方がないので外観だけ。 ざっくりと必要なところだけ説明します。 もはや凶器
  8. 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 アーキテクチャの呼び方 アーキテクチャ識別子を付加して呼ぶ
  9. RISC-Vの特権モードと動作モード • 3種類の動作モードが定義されている • 最初の版では4種類だったが削減されて3種類 • ユーザモード • 最も権限の少ないモード。アプリケーションを動かすためのモード •

    スーパバイザモード • OSが例外処理などを行うための権限の高いモード。 • マシンモード • 最も権限が高い。マシンモード。何でもできる • モード間の遷移について • 外部から割り込み挿入 or 命令実行中に例外発生 • ECALL命令によるSupervisor Call • 例外処理後に実行するMRET / SRET / URET • ハイパーバイザモード • スーパバイザモードとマシンモードの間に定義される。 • 現在議論中。 15 マシンモード スーパバイザモード ユーザモード
  10. 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
  11. 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 → 型を明確に識別するための手法
  12. 割り込み・例外 • RISC-Vの割り込み・例外要因は多くない • 割り込み • ソフトウェア割り込み • タイマ―割り込み •

    外部割込み • ユーザ・スーパバイザ・ マシンモード毎に定義 • 外部割込みが少ないので PLICを外部に定義 18
  13. なんで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では、多くの ベンチマークプログラムで他の 命令セットよりも優れる。
  14. 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命令で データを交換
  15. 仮想メモリ • 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 物理メモリ アドレス 仮想メモリ アドレス
  16. ベクタ命令 • 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をベースに説明しますが、今後変 更される可能性があります。
  17. 動的レジスタ・タイピング • 普通のベクトル命令・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レジスタを用意
  18. 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になるまで処理を繰り返す。
  19. 発表者の思う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/
  20. 仕様書を読んで感じた、 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/コルーチン
  21. RISC-Vが拡充するCHIPS Alliance • Linux Foundationが中心となり、オープンソースハードウェア を中心としたCPU・SoCの製品化を促進する UVM(Universal Verification Methodology) ベースの命令ストリームジェネレータの提供

    オープンソースハードウェア 記述言語Chiselの開発 オープンバスプロトコル TileLinkの開発 SystemVerilogで記述されたDual-Issue RISC-Vプロセッサの開発
  22. バスプロトコル TileLink • RISC-Vの実装でよく出てくるバスプロトコル • OCP, AXI, TileLink… • キャッシュコヒーレントをサポート

    • MOESIプロトコルに相当 • RISC-Vの実装”Rocket-Chip”がこの プロトコルを使っている。
  23. オフチップ間通信技術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 よ り抜粋
  24. RISC-VコアRocketの設計のために作られた ハードウェア記述言語Chisel GoogleのAIチップ Edge TPUの設計に 使用されたことで、(日本)でにわかに 脚光を浴びる Chisel(Based on Scala)

    IR Verilog Chisel Compiler FIRRTL ハードウェア記述言語 Verilog-HDL / SystemVerilogの圧倒的な生産性の低さに辟易する • シミュレータが遅い。商用のシミュレータはライセンスが高い。 • 抽象的・高位の記述ができない。ジェネリックな記法ができない。 • → ChiselはScalaをベースとしており、よりソフトウェア的な記法が可能。
  25. Chisel Compiler, FIRRTLは ハードウェア記述コンパイラとして面白い Chisel3 Syntax Analyzer FIR Emitter FIR

    (Flexible Intermediate Representation) FIRRTL Make Syntax Tree Passes Passes Passes Passes Verilog Emitter Verilog ただ聞いている話だと まだいろいろ不備があり 改善が必要… ただ聞いている話だと まだいろいろ不備があり 改善が必要…
  26. SiFive Core DesignerでWebでSoC設計 (経験上の)これまでのSoC設計 CPUベンダのフロントエンドの 営業と打ち合わせ フロントエンドが本社設計チーム に問い合わせ カスタマイズコアを 本社が生成開始

    カスタマイズコアがリリース IPを接続する&検証 性能検証 レイアウト テープアウト 1週間経過 1週間経過 1週間経過 WebでSoCのカスタマイズをする その環境をダウンロードする IPを接続する & 検証 性能検証 レイアウト テープアウト Core Designerでのクラウド設計 まあチップ設計ってこんなに単純な話じゃありませんが、 イメージで。。。
  27. 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
  28. 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でカスタムチップ を実装し、 ベンチマークを動かそう。
  29. 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
  30. GCCを使ってプログラムをコンパイル & シミュレーション 49 #include <stdio.h> 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 <<set terminal>> <<reset terminal>> hello world Calling GCD ... GCD(273, 21) = 21 GCD(411, 27117) = 3 <<reset terminal>> 命令セットシミュレータを実行
  31. 例: 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への移植とデバッグも簡単
  32. 現状入手可能な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)
  33. 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ならばなんとか。 日本国内でも代理店から購入可能
  34. 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
  35. OSは動かないの?→ リアルタイムOSが動きます 60 公式にサポートされているOS “FreeRTOS”, “Zephyr” Zephyr : ▪ The

    Linux Foundationが開発している小規模リアルタイムOS ▪ (発表者はあまり詳細を見たことがないけれども)ソースコードが Linuxに似ていると言われている。 HiFive1でZephyrを動作させるためのドキュメントが公開されている
  36. 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
  37. 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が無いので当然かな)
  38. 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
  39. 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より抜粋
  40. 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
  41. 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 これでも公称値とかなり差異がある…
  42. HiFive Unleashedで マルチコアプログラミングに挑戦 コア0 コア1 コア2 コア3 std::vector<std::thread> threads; for(size_t

    i = 0; i < num_threads; ++i){ double start = static_cast<double>(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] 使用コア数 使用コア数を変えたときの 実行時間
  43. 単体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を動かしていた私に届いた衝撃のメール ただしインスタンスをきちんと管理しないと…
  44. 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 クラウド ランファーム
  45. 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
  46. FPGA ワークロード1 Linux ワークロード2 Linux テストしたい コマンド ワークロード3 ベンチマーク1 ベンチマーク2

    ベンチマーク3 FireSim コンフィグ1 FireSim コンフィグ2 FireSim コンフィグ1 FireSimでベンチマークを動かす仕組み: Workloads 2019/9/18 77
  47. 拡張機能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つ分 計算
  48. 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