ぐだぐだ低レベルプログラミング(47) RISC-V、K210、浮動小数点除算サイクル数

RISC-V fdiv CycDUMP
Joseph Halfmoon

今回から再びRISC-Vの実機(K210)を使って、浮動小数点命令を動かしていきたいと思います。今回は第44回でやったサイクル数の計測を浮動小数点の割り算命令に適用。流石に割り算命令には時間かかっているっしょ、みたいなところを眺めてみたいです。でもま、たまたまK210の実装で、この命令列ならこの程度くらいな数字かと。

“ぐだぐだ低レベルプログラミング(47) RISC-V、K210、浮動小数点除算サイクル数” の続きを読む

ぐだぐだ低レベルプログラミング(46) RISC-V、浮動小数点の丸めと例外、その2

NaN
Joseph Halfmoon

前回は柄にもなく浮動小数点の丸めを説明したところで力尽きてしまいました。今回は前回の残り、浮動小数点の例外についてです。こういうメンドイものがあるので浮動小数点演算は後回しにしたくなるのですが、実際に浮動小数点演算命令を動かすにあたっては避けていられません。それにしても面倒くさいよ。

“ぐだぐだ低レベルプログラミング(46) RISC-V、浮動小数点の丸めと例外、その2” の続きを読む

ぐだぐだ低レベルプログラミング(45) RISC-V、浮動小数点の丸めと例外

RoungingMode
Joseph Halfmoon

RISC-Vの浮動小数点演算命令セットを実際に動かして堪能しようと思いつつ、ついつい後回しにしてきました。何でかといって難物の「丸め」と「例外」などがチラチラしていたからでございます。浮動小数点素人の私としては触りたくない「奴ら」ですが、これに触れないことには先に進みませぬ。

“ぐだぐだ低レベルプログラミング(45) RISC-V、浮動小数点の丸めと例外” の続きを読む

ぐだぐだ低レベルプログラミング(44) 64bit RISC-V、サイクル数と命令数の計測

DUT_EC
Joseph Halfmoon

環境を変えたのに確かめていなかった命令群があります。サイクル数と命令数の計測機能です。32bit RISC-V(GD32VF103)では、お世話になっています。64bit RISC-VのK210でも使える筈ではあるのですが、確認しておきたいと思います。しかし、前々回からFlashへの書き込みはラズパイ4機に頼り切り、そろそろなんとかしないと。

“ぐだぐだ低レベルプログラミング(44) 64bit RISC-V、サイクル数と命令数の計測” の続きを読む

ぐだぐだ低レベルプログラミング(43) 64bitRISC-V、レジスタとレジスタ間転送

floatFormat
Joseph Halfmoon

前回は、まさかのトラブル勃発で、最低説明しておくべき項目を落としてしまいました。64bit かつ 単精度/倍精度の浮動小数点演算命令を備えたRISC-Vのレジスタセットと、レジスタ間転送についてです。今回はその補遺であります。ぶちゃけレジスタの図が1枚。

“ぐだぐだ低レベルプログラミング(43) 64bitRISC-V、レジスタとレジスタ間転送” の続きを読む

ぐだぐだ低レベルプログラミング(42) 64bitRISC-V、単精度浮動小数点add

RPi4_MaixBit
Joseph Halfmoon

前回から64bitのRISC-V搭載のK210にターゲットを切り替えたのですが、今回はまさかの問題勃発。Flashに書き込めません。というか接続するとPCの挙動が不審。どうしたものか。そこで困ったときのラズパイ頼み、Picoの母艦のラズパイ4機にK210ボードへの書き込みをお願い。OK、単精度浮動小数点add命令動いています。

“ぐだぐだ低レベルプログラミング(42) 64bitRISC-V、単精度浮動小数点add” の続きを読む

ぐだぐだ低レベルプログラミング(41) 64bitのRISC-Vでインライン・アセンブラ

ArduinoInlineASM_EC
Joseph Halfmoon

RISC-VインタナショナルがVectorなどの拡張命令セット多数を制定したとのニュースが流れるなか、こちらはようやく64ビット命令に入ります。前回まで32ビットのRISC-V、GD32VF103でしたが、今回からは64ビット、Kendryte社のK210です。前回同様VSCode+PlatformIOでのビルドは同じ、しかしプラットフォームが異なるのでまずはアセンブラ命令を走らせる環境の確認から。

“ぐだぐだ低レベルプログラミング(41) 64bitのRISC-Vでインライン・アセンブラ” の続きを読む

ぐだぐだ低レベルプログラミング(40) RISC-V、div、RV32M拡張その3

DIV_EC
Joseph Halfmoon

前回の乗算に比べると今回の除算命令は分かり易いです。商と余りのどちらか結果はひとつだけという割り切りの効果でしょう。C書いていたら、どちらか一つを求めるのが普通だし、プログラミング言語的にもあっている感じ。そんなこんななのでサクッとやりたいと思います。割り算だよ。

“ぐだぐだ低レベルプログラミング(40) RISC-V、div、RV32M拡張その3” の続きを読む

ぐだぐだ低レベルプログラミング(39) RISC-V、mul、RV32M拡張その2

mul_signed
Joseph Halfmoon

前回は、RISC-Vの乗算命令と除算命令を1命令づつ動かしてみました。今回は 乗算命令 の全貌を見てみます。といっても4命令ですが。実装がシンプルになるように考慮した結果でしょうが、命令の使用方法はクセが強い、気がします(個人の感想です。)それにnucleriのツールチェーンにも制限が?

“ぐだぐだ低レベルプログラミング(39) RISC-V、mul、RV32M拡張その2” の続きを読む

ぐだぐだ低レベルプログラミング(38) RISC-V、mulとdiv、RV32M拡張その1

TargetBoardandDebugger
Joseph Halfmoon

今回のRV32Mは拡張命令セットといいつつ、ほとんどの実装で採用されている筈のもの。整数掛け算と割り算であります。しかし命令が存在しても何サイクルで処理できるのかは実装依存です。まずはmulとdiv命令を使ってみて処理サイクル数を数えてみるところから始めました(前にもやったっけ?忘れているからいいか。)

“ぐだぐだ低レベルプログラミング(38) RISC-V、mulとdiv、RV32M拡張その1” の続きを読む