Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RISC-V User level ISA

2,173 views

Published on

Risc-V spec V2.2 User level ISA

Published in: Technology
  • Login to see the comments

RISC-V User level ISA

  1. 1. RISC-V ユーザレベル ISA 2017.NOV.18 たけおか@AXE @takeoka
  2. 2. 2 たけおかって誰? 1977年(高校2年生): MITのJames Slagleの書いたAIの教科書(日本語版)を読んで 「○×」を打つプログラムを8bitマイコンTK-80(8080,RAM 512Bytes)の機械語で書く 1980年代:UNIXのサーバクライアント方式の仮名漢字変換システムWnn、国産シンクライアント(X Window端末”XMiNT”) などの設計開発に携わる。TCP/IPスタックの独自実装。 時相論理推論型言語Temporal Prologの合理的な実装などを行う 1990年代初頭: 1024PE規模の超並列計算機”SM-1”(豊橋技科大 湯淺研,住友金属)のLSIハードウェア、ソフトウェアの設 計開発に携わる。Common Lispで開発ツール書いた。 当時、超並列計算機は、ニューラルネットのシミュレーションによく使用された 1992年:(株)アックスを興し、マイクロカーネルXTALを設計。XTALはオリンパス社製デジタルカメラ、シャープ ザウルスなどに使 用された。現在、アックスは、人工知能を開発&販売中 名古屋大/東大の自動運転プロジェクト”Autoware”のお手伝い JASA技術本部長/理事,OSSコンソーシアム副会長,PCクラスタコンソーシアム理事,DEOS協会事務局長/理事 超並列計算機SM-1 (1992年) シンクライアントXMiNT (1988年) オリンパス デジカメ (2000年) カラーザウルス(1996年)
  3. 3. 論理推論AIを高速化する特許 ● 論理推論のルールの集合をルールセット と呼ぶ ● 機械学習(SVM)を使用して、 ルール・セットを選択 ● 論理推論する探索空間が小さくなる → 論理推論が高速になる 「ルールセットを選択可能な推論エンジンを有するプログ ラム、装置及び方法」
  4. 4. RISC-V の感想 極めて フツー 今回は riscv-spec-v2.2.pdfを読んだ結果です
  5. 5. 命令セットの種類 ● RV32Iが基本 ● RV32Eは組込み ● RV64: 64bit ● 16bit 縮小命令がある – “C”拡張 ● 今回は、RV32I について話す
  6. 6. レジスタ ● 32bitレジスタ 32個 – 0レジスタ – pcは別 ● PCが汎用レジスタは、特許 ● Flag は無し – MIPS 踏襲だなぁ – Carryフラグは要るんじゃないの…
  7. 7. Endian ● Little endianが基本 ● 命令は必ず little endianで格納 ● Little endian 全盛だな… – その方が、いいのだけど ● データは、下からフェッチしたほうが速いことが通常 – 日立の HPC系 Power も Little endianの時代だしな
  8. 8. 命令フォーマット ● opcodeが最下位にあるのは珍しい – 即値が最上位にある ● rs1,rs2(ソース),rd(デスティネーション) は固定位置 – ただし、5bit 即値 CSR命令は例外; rs1に即値
  9. 9. 即値の生成 ● 常に符号拡張される。 inst[31]が上位にコピー – 命令デコードと、符号拡張が並列にできる! ● 命令を見ずに、即値の最上位bitを、コピーできる! ● ブランチ先の計算も、並列にできるよ(頑張れば)
  10. 10. 整数演算 即値 ● ADDI / SLTI / ANDI / ORI / XORI – subが無いのは、定数を補数にしてadd しろと ● -1とXORで NOTだよ ● SLLI (左シフト)/ SRLI(右シフト) / SRAI (右算術シフト) – 0〜31bitシフト可能 ● LUI (上位にロード) / AUIPC – auipc: add upper imm. PC; imm を PCの上位20bitに加算
  11. 11. 整数演算 レジスタ ● ADD / SLT / SLTU / AND / OR / XOR ● SLL / SRL / SRA ● SUB – 減算ある ● NOP
  12. 12. 無条件 分岐命令● 無条件jump & link – ディレイスロットは無い – rdに、pc+4 が入る ● JAL – ±1MBの範囲 ; オフセットは20bit , 1 / 2 されている – pc ← (sex(imm) << 1 ) + pc +4 ● JALR – 相対アドレスjump; pc ← rs1 + sex(imm) + pc+4 – 演算結果の最下位bit は、0にされる – オフセットは、12bit ● x1 : return address, x5: alternate Link レジスタ が標準ソフトウェア・コーリング・コンベ ンション – alternate Linkレジスタは、圧縮(compressed)コードで、milli code ルーチンの呼び出しなどをサ ポートする
  13. 13. 条件 分岐命令 ● 条件分岐 – 2オペランド比較 – BEQ/BNE – BLT(less than)/BLTU (unsigned) ● rs1 < rs2 – BGE/BGEU ● Rs1 >= rs2 ● MIPSよりは、豊富だね ● 分岐のヒントは無し ● オーバフロー(符号なしキャリー)のチェックは簡単というが… – 多倍長演算になると、難しいんだよ – 下のワードからの、繰り上がりを加算しつつ、チェックするのは、何命令も必要 ● キャリー・フラグは要るよ – 32bit MIPSで、128bit 演算をする時とか
  14. 14. Load/store 命令 ● LW / LH / LHU / LB / LBU – LW:32bit load – LH: 16bit load 符号拡張 – LHU: 16bit load 符号拡張無し(上位に0フィル) – LB / LBU : 8bit load ● SW / SH / SB – rs2 の下位を Store ● データのミス・アラインも許す(基本命令セットでは)
  15. 15. スレッド ● 「hart」 – ハードウェア・スレッド – ソフトウェア制御のスレッド・コンテキストと、明確に区別 ● ハードウェア・スレッド – user register, state, PCを持つ ● IOや、他のhartとやりとりする時には、FENCE – FENCE前の命令の実行終了を待つ – Out of order 実行なので
  16. 16. FENCE命令 ● sync命令の類 ● コプロセッサも、この機構を使用 ● I:デバイス入力, O:デバイス出力, R:メモリ・リード, W: メ モリ・ライト – 非公式だが、Predecessor をセットしたhartだけが successorを見ることができる ● CPUを作る人は、メモリ・マップドIOは、I/Oにするべき
  17. 17. FENCE.I命令 ● 命令&データ ストリームの終わりがわからない ● 命令メモリに書く時、FENCE.Iで同期してから – 同一hartの時
  18. 18. Control and Status Register命令 ● RDCYCLE[H] – hartが実行したマシン・サイクル ● RDTIME[H] – タイマ読み出し – RDTIME[H]は wall clockの読み出し ● RDINSTRET[H] – このhartでの、実行完了した(retired)命令数の読み出し ● out of order実行も考慮ずみ
  19. 19. 整数 乗除算(基本拡張 “M”) ● MUL / MULH[S][U] / MULW – MULH は、符号 付き/なし – MULWは RV64 の時だけ ● DIV[U]/ REM[U] ● DIV[U]W / REM[U]W – 0除算、符号付き除算オーバーフローの結果が定義され ている
  20. 20. アトミック命令(基本拡張 “A”) ● LR/SC (Load-Reserved/Store-Conditional) – MIPSの LL/SCと同様 ● AMO (atomic memory operation) – rs1で指定されたメモリの内容とrs2で、 AND/OR/XOR/SWAP/MAX/MINができる – しかも、read modified write で行う
  21. 21. 浮動小数点(基本拡張 “F”,”D”,”Q”,”L”) ● 浮動小数点レジスタ 32個、fcsr 1個 ● 丸め指定可能 – 切り上げ/切り捨て/四捨五入 ● F命令: single float – 四則,SQRT,MIN,MAX – Mul add は無い ● D命令: double float ● Q命令: quad float (四倍精度) ● L命令: 10進 浮動小数点演算
  22. 22. SIMD "P”拡張 ● これは、”V”ベクトルのために、落ちるかも ● P命令 ● パックト・SIMD ● LOAD-FP, STORE-FP で、サイズを大きく指定でき る
  23. 23. ベクトル "V”拡張 ● データ・サイズ色々 ● 命令は、spec-v2.2の中では ちゃんと規定されていない ● vaddはある(例題に)
  24. 24. ベクトル "V”拡張 ● この例題をみれば、大体使えるな(^^;
  25. 25. 圧縮命令 "C”拡張 ● RVC ● 16bit命令
  26. 26. ユーザ・レベル割り込み "N”拡張 ● URET命令 ● UIEビット:割り込み禁止 ● ユーザレベル割込が受け付けられると – UIEがUPIEへコピーされる – UIEは0になる
  27. 27. その他 ● “B” ビット操作 ● “J” 動的変換言語 (Java用???) ● "T” トランザクション・メモリ
  28. 28. 以上

×