🍡

RISC-V勉強会で「RISC-Vの特徴とAArch64との比較」を発表しました #riscvjp

2023/02/09に公開

発表スライドと動画

https://risc-v.connpass.com/event/272834/

発表スライド

動画

AArch64はどう発音する?

https://twitter.com/tetsu_koba/status/1623560107627024388

ただ、そのサイトの投票結果もどの程度信用すべきなのか。面白がって組織票が入っているのかもしれないし。

で、今回の発表では私は「アーチろくよん」と呼ぶと宣言したものの、呼び慣れていないので
「エィアーチろくよん」とか「アークろくよん」とかブレブレになってしまいました。

ちなみにこの"AArch64"というのはLinuxカーネルの開発者の間でも評判が悪く、「ださい」「発音しにくい」と言われました。gccなどではArm社の公式名称であるAArch64からとったaarch64をアーキテクチャ名として採用しました。Linuxカーネルの最初のパッチではそれにならってarch/aarch64でした。でも、「本当にそれでいいのか?今ならまだ間に合うぞ」ということで、arch/arm64にリネームされたという経緯があります。

ただ、arm64もamd64(=x86_64)と字面が似ているので、たまに取り違えそうになるんですよね。

AArch64の呼び出し規約(2023/02/16追記)

AAPCS64

Soft-Flaotの呼び出し規約は定義されていません。AArch64では必ずSIMD and Floating-Point registersを装備しています。

いただいたコメントより

32bit固定長命令 (+ 16bitに圧縮された命令の拡張あり)

RISC-Vで48bit以上の命令の拡張も提案されたことがあるそうです。

ビッグエンディアンは無い。リトルエンディアンのみ

RISC-V も 2019年 12月の版でbig-endian 対応の記述が追加されたそうです。

YEILD命令とWFI命令は別物

WFI(Wait For Interrupt)は割り込みを待つ命令です。
何かの条件が整うのを待つという意味では使われる場面は似ているとも言えるのですが、YEILD命令はスピンロックのループなどビジーループの中で使用されます。能動的に条件が整ったかを繰り返し判定する方法です。
それに対して、条件が整ったら割り込みが入るようにセットアップして、その割り込みを待つのがWFI命令です。OSのアイドルタスクの中でのループに使用されます。さらに待っている間は消費電力が低くなる状態に遷移することもよくあります。
YIELD命令がシングルスレッドではNOPと同じ扱いです。SMT(いわゆるハイパースレッディング)ではCPUは別のスレッドに実行を切り替えます。

サンプルのソースのビルド環境

Cコンパイラとしてzig ccを使いました。

$ zig version
0.10.0
$ (cd aarch64 && zig cc -c -O2 -target aarch64-linux-musl ../a.c)
$ (cd riscv64 && zig cc -c -O2 -target riscv64-linux-musl ../a.c)
$ (cd aarch64 && zig build-lib -O ReleaseSafe -target aarch64-linux-musl ../iadd.zig)
$ (cd riscv64 && zig build-lib -O ReleaseSafe -target riscv64-linux-musl ../iadd.zig)

RISC-V勉強会の自分用メモ

半導体IP

何かのアクセラレータのハードウェアを作ったときに、それの細かな面倒をみるためのCPUを隣に置く必要がある。
昔だったらコストを抑えるために独自のマイコンなどを置いていたが、ツールチェーンやOSのサポートで苦労することになる。
今はそういう場面でRISC-V仕様のCPUが使われる。

CPUコアを2重に冗長化して故障の検出ができるようにする。

RISC-V 64bit Processer with Vector extention
MMUは付いていない。汎用OSを動かすのなくアクセラレータとしての使用を想定。

スレッドを増やすとスレッド切り替えのオーバーヘッドもある
llvmだとauto vectorizeもかなり効く
可変長のベクトルを扱える命令体系になっていると言われているが
結局サイズを決め打ちにしないと性能出ない?

RISC-V Summit

以前は32bitのデモが多かった。マイクロコントローラ向けが中心。
今年は64bit増えた。
データセンターでRISC-Vを使う。アマゾンとか。
64コアの64bit RISC-V
HPC でベクトル演算とか
バルセロナのスーパーコンピュータセンター
Googleがスポンサーになった。Androidの発表をするためか。

遅延分岐

最初は、パイプラインを乱さない「天才的なアイディア!」
流行した。「RISCといえば遅延分岐」というくらい。それがカッコいいとさえ思われていた。
遅延スロットがひとつでは足りなくなって、無駄に複雑にしただけに。
ソフト屋さんにとっても読みにくくてバグの温床
CPUを作っている側の人にとっても例外処理が大変でバグの温床

関連

https://zenn.dev/tetsu_koba/articles/e176172371bf6a
https://zenn.dev/tetsu_koba/articles/b54e954809a86c
https://zenn.dev/tetsu_koba/articles/0f65daab36d40a
https://zenn.dev/tetsu_koba/articles/6521a51a1dd47f
https://zenn.dev/tetsu_koba/articles/37b23424bb252b

Discussion