2023-08-01から1ヶ月間の記事一覧
自作CPUコアをBOOMv3と比較したくて、ベンチマーク(Dhrystone)、論理合成面積、タイミングを比較してみた。 タイトルではPPAと言っているけど、正確ではない。まあ似たようなもんでしょ。 性能:Dhrystoneを測定した。自作CPUコアのStandardがBOOMv3に匹敵す…
自作CPUコアをBOOMv3と比較したくて、ベンチマーク(Dhrystone)、論理合成面積、タイミングを比較してみた。 タイトルではPPAと言っているけど、正確ではない。まあ似たようなもんでしょ。 もともとパフォーマンスチューニング不足ということもあり、キリキリ…
今回のインタフェースの特集の内容自体はあまり自分と関係ないのだけれども、待望のFPGAマガジンが限定で復活したということなので早速購入してみた。 FPGAマガジンが終了してしまったのはとても寂しかったので、期間限定とはいえとてもうれしい。 interface…
追記:本当は[all_registers]のほうがいい。 Design Compilerとかだと結構あるけれども、Vivadoの論理合成スクリプトにおいて、フリップフロップがどの程度使用されたかを確認したい時がある。 このために、VivadoのDCPからすべてのフリップフロップのセルを…
自作CPUのFPUは、外部IPを使用している。FPNewというIPを使っている。 github.com FPNewは、簡単に浮動小数点演算を実装できるのだが、これをインテグレートした後に問題を見つけた。 Some compliance issues with IEEE 754-2008 are currently known to exi…
RISC-Vのベクトル命令一覧を作成するときに使った、wavedromの命令フォーマット表記が奇麗で気に入っているので、スカラ命令の命令一覧ページも同じように改変することを検討している。 msyksphinz-self.github.io 各命令の定義のページは、RestructuredText…
自作CPUのRAS(Return Address Stack)を一時的に無効化していたので、再度有効化して検証環境を作成する。 RASのC++モデルとRTLを一致させるためには、以下の情報が必要となる。 (投機実行しない)コミットした命令のみでRASにどのような情報が挿入されるかの…
自作CPUの分岐予測器(Gshare)をちゃんとデバッグしたいため、モデルとの比較環境を構築している。 比較環境に基づいて、Gshareの改良を行っている。ポイントは、複数の命令を同時にフェッチした際のGshareの履歴テーブルの作り方と、投機実行が失敗した際の…
RISC-Vのベクトル命令を使ってアプリケーションを記述するのに、いろいろとドキュメントを見て回るのが面倒だと思っている。 まず、 - どのような命令があるのか調べる(公式ドキュメント) - 本当に自分の意図とあっているのか確認する(Spikeの実装をチェ…
gem5の公式リポジトリにはRISC-VのRVV実装は入っていないのだが、ARMにおけるNEONやSVEのベクトル・レジスタの実装は入っている。 これをどのように実装するのかについて調査した。 SVEのベクトル・レジスタサイズを決めているのは以下のコードのようだ: sr…
自作CPUにZicondの命令を実装した。 Zicondの仕様については以下で定義されている。 github.com 実装しなければならないのは以下の2命令だ。 czero.eqz rd, rs1, rs2 czero.nez rd, rs1, rs2 実装自体は非常に簡単なので、デコーダと論理を追加するだけだ。 …
自作CPUの分岐予測器(Gshare)をちゃんとデバッグしたいため、モデルとの比較環境を構築している。 まずはGHR(Global History Table)の比較をしたいため、RTLとの比較環境を構築した。 もう少し進めて、モデル側にも同様なgshareの予測器を追加して、予測が一…
少しいろいろと、gem5の命令トレースの方法を解析していた。 gem5はcommit.ccにおいて、dump()により命令トレースの出力を行う。 src/cpu/o3/commit.cc bool Commit::commitHead(const DynInstPtr &head_inst, unsigned inst_num) { assert(head_inst); Thre…
自作CPUにBit-manipulationの命令を実装した。 Bit-manipulationのうちRatifiedされた命令群としてZba, Zbb, Zbc, Zbsがある。 以下の命令を自作CPUに実装した。 Zba : address generation instructions add.uw rd, rs1, rs2 Add unsigned word sh1add rd, r…
RISCOFを使って、Bit-manipulationのためのテストパタンを作って流してみる。 RISCOFについては、過去にブログで調査したのでこれが役に立った。 msyksphinz.hatenablog.com RISCOFのサポートするriscv-arch-testsにはB拡張のテストが含まれており、これをRI…
Bit-manipulationを自作CPUに実装してみたいので、まずはデコード情報を入力している。 以下のようなJSONを入力して、デコードを追加している。 [ { "name":"add.uw r[11:7],r[19:15],r[24:20]", "length":"32", "xlen":["32", "64"], "field": ["00001", "0…
自作CPUの分岐予測器(Gshare)をちゃんとデバッグしたいため、モデルとの比較環境を構築している。 まずはGHR(Global History Table)の比較をしたいため、RTLとの比較環境を構築した。 C++側の実装を構成して、RTLとの値を比較するようにしている: void step…
かつてWestern Digitalが開発していて、今はChipsAllianceに管理が移っているWhisper(VeeR-ISS)がかなり使いやすくなっていたのでメモ。 使い勝手としてはSpikeに近くなって、Linuxユーザモード向けのプログラムとかもかなり動かしやすくなっている。 github…
RISC-V 向けGCCを作るのに、glibcを用いたcross-compilerの作り方をメモしておく。 Binutilsのコンパイル curl -L ftp://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.gz | tar xz && \ cd binutils-2.40 && \ mkdir build && \ cd build && \ ../configure …
RISC-Vのベクトル命令は死ぬほど種類が豊富で、どういう命令が存在しているのかを調査するのだけでも非常に時間がかかる。 そこで、RISC-Vのベクトル拡張命令をHTML形式で参照することのできるページを作ることにした。 とりあえず、ベクトル・メモリアクセ…
RISC-VのBit Manipulationについて自分で理解するために、ウェブ上でマニュアルを参照できるページを作った。 最終的に日本語化しておきたいが、まだその途中だ。 msyksphinz-self.github.io github.com こう見てみると、Bit Manipulationは結構たくさん定義…
このブログではしばらくRISC-VのBit-manipulationについて取り扱っていなかったのだが、ちょっと調べる必要があったので、現在定義されている命令を調べてみることにした。 github.com 現在の仕様によると、Frozenな命令使用は大きく以下のグループに分けら…
GAP Benchmarkのグラフを変換するツールconverterが何をしているのかちょっと見ておく。 ./converter -f benchmark/graphs/raw/twitter.el -b benchmark/graphs/twitter.sg ./converter -f benchmark/graphs/raw/sk-2005/sk-2005.mtx -b benchmark/graphs/we…
QEMUにはLinux User ModeとSystem Modeがあるのだが、それぞれのビルド方法をまとめておく。 User ModeのQEMUのビルドはriscv64-linux-userを追加するのがポイント。 git clone https://gitlab.com/qemu-project/qemu.git cd qemu mkdir build cd build ../c…
GAP Benchmarkの各プログラムの中身を調べている。cc.ccについて調べた。 CC (Connected Components) : 連結成分 連結成分は、グラフの中でつながっているグループをまとめ上げる作業。 連結しているノードをグループ化し、最終的に連結していないグループで…
LLVMの18系ではRISC-VのAuto-vectorizationに手を加えられているという話を聞いたので、少しベンチマークを動かして試してみた。 使ったのは最近ハマっているGAP Benchmarkのコンパイルで、LLVM18(まだ開発中)のバージョンは f9da447fa791c078dcae52e48dcd03…
GAP Benchmarkの各プログラムの中身を調べている。sssp.ccについて調べた。 pr: PageRank とりあえずWikipediaでPageRankについて調べてみる。 ja.wikipedia.org 定義式を眺める: : ページAにリンクしているページ$T{n}$のページランク。仮にページAに対し…
GAP Benchmarkの各プログラムの中身を調べている。sssp.ccについて調べた。 sssp: Single source shortest path SSSPのコードをもうちょっと読み解いていこうと思う。 github.com 重要な変数: distベクトル:各ノードまでの最短距離を保持する。つまり、始…
GAP Benchmarkの各プログラムの中身を調べている。sssp.ccについて調べた。 sssp: Single source shortest path いわゆる一般的なグラフ問題で、あるノード(1点:single)からすべてのノードに対する最短距離を検出するためのアルゴリズムを総じてSSSPと呼ぶ…