FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

2023-06-01から1ヶ月間の記事一覧

gem5のドキュメントを読む (6. gem5のメモリサブシステムについて3)

gem5のサイクル精度モデルについて理解したいので、O3CPUのドキュメントを読んでみることにする。 次に、メモリサブシステムについてドキュメントを読み進めていく。 www.gem5.org メモリ・アクセス・オーダリング 各CPUの読み込み・書き込みリクエストには…

gem5のドキュメントを読む (5. gem5のメモリサブシステムについて2)

gem5のサイクル精度モデルについて理解したいので、O3CPUのドキュメントを読んでみることにする。 次に、メモリサブシステムについてドキュメントを読み進めていく。 www.gem5.org 本ドキュメントでは、gem5のメモリサブシステムについて、CPUでの単純なメモ…

gem5のドキュメントを読む (4. gem5のメモリサブシステムについて)

gem5のサイクル精度モデルについて理解したいので、O3CPUのドキュメントを読んでみることにする。 次に、メモリサブシステムについてドキュメントを読み進めていく。 www.gem5.org M5の新しいメモリーシステム(最初の2.0ベータリリースで導入)は、以下の目…

gem5のドキュメントを読む (3. O3CPUのサイクル計算の挙動をソースコード上で追いかける)

gem5のサイクル精度モデルについて理解したいので、O3CPUのドキュメントを読んでみることにする。 www.gem5.org 次はストア命令について。ソースコードを追いかけていく。 Store命令 Store命令の挙動は、コミット後から見て行こうと思う。 IEW::tick()->IEW:…

gem5のドキュメントを読む (2. O3CPUのサイクル計算の挙動をソースコード上で追いかける)

gem5のサイクル精度モデルについて理解したいので、O3CPUのドキュメントを読んでみることにする。 www.gem5.org ソースコードを読みながら、実際の流れをつかんでいこうと思う。 CPU::tick() CPU::tick()の内部で、各モジュールが1サイクルずつ動作している…

gem5のドキュメントを読む (1. O3CPUについて)

gem5のサイクル精度モデルについて理解したいので、O3CPUのドキュメントを読んでみることにする。 www.gem5.org パイプラインステージ Execute-in-executeモデル テンプレートポリシ ISA独立性 ThreadContextとの相互作用 O3CPUは、v2.0リリース用の新しい詳…

gem5の日本語ドキュメントおよび解析記事まとめ

Gem5 の トライアル Gem5でのROI (Region of Interests) の設定方法 Gem5でのROI (Region of Interests) の設定方法 (2. マクロとしての定義) Gem5における詳細ログ出力方法 Learning gem5 Gem5のチュートリアル "Learning Gem5"をやってみる(Part-1) Gem5の…

Gem5のチュートリアル "Learning Gem5"をやってみる(10. イベントドリブンプログラミング)

gem5を構成するSimObjectを追加するためのチュートリアルをやってみる。 www.gem5.org gem5記事一覧インデックス msyksphinz.hatenablog.com gem5はイベントドリブンのシミュレータである。本章では、イベントの作成とスケジューリングの方法を探る。hello-s…

Gem5のチュートリアル "Learning Gem5"をやってみる(9. デバッグ機能の追加)

gem5を構成するSimObjectを追加するためのチュートリアルをやってみる。 www.gem5.org 前章で作成したSimObjectの標準出力をデバッグ機能に変更してみる。 gem5はprintfスタイルのトレース・デバッグ機能をサポートしており、これを使うためにはdebug flagを…

Gem5のチュートリアル "Learning Gem5"をやってみる(8. SimObject作成チュートリアルをやってみる2)

gem5を構成するSimObjectを追加するためのチュートリアルをやってみる。 www.gem5.org Step.3 SimObject と C++ ファイルの登録 C++ ファイルをコンパイルし、Python ファイルを解析するためには、ビルドシステムにこれらのファイルについて知らせる必要があ…

Gem5のチュートリアル "Learning Gem5"をやってみる(7. SimObject作成チュートリアルをやってみる)

gem5を構成するSimObjectを追加するためのチュートリアルをやってみる。 www.gem5.org gem5はSimpleObjectと呼ばれるSimObjectを持っているため、もう一つSimpleObjectを作成すると、コンパイル時に問題が発生する可能性がある。 殆ど多くのgem5はSimObject…

Gem5のチュートリアル "Learning Gem5"をやってみる(6. RISC-V向けのコンフィグレーションスクリプトの変更)

www.gem5.org x86向けに作成した簡単なコンフィグレーションスクリプトを、RISC-V向けに拡張する。 ドキュメントではARM向けになっているが、RISC-Vでやってみることにする。 RISC-Vバイナリのダウンロード mkdir -p cpu_tests/benchmarks/bin/riscv cd cpu_…

Gem5のチュートリアル "Learning Gem5"をやってみる(5. Gem5のコンフィグレーションスクリプトの構成)

www.gem5.org se.py と fs.py の使用方法 ここでは、se.py と fs.py の使用方法と共通オプションについて議論する。フルシステムシミュレーションに関するより詳細な実行方法は、フルシステムシミュレーションの章を参照すること。ここでは、2つのファイルに…

Gem5のチュートリアル "Learning Gem5"をやってみる(4. Gem5のコンフィグレーションスクリプトの構成)

www.gem5.org Gem5のデフォルト設定スクリプトの構成について。 シミュレーションする内容を十分に理解せずにこのスクリプトを使用することは危険であり、コンピュータアーキテクチャの研究をするときは、これらのスクリプトを完全に理解することが重要であ…

Gem5のチュートリアル "Learning Gem5"をやってみる(3. Gem5の統計情報と出力について)

Gem5のシミュレーションにより生成されるログファイルについて確認する。 www.gem5.org シミュレーション終了後に、m5out ディレクトリに情報が出力される。 config.ini : シミュレーション向けに生成されたすべてのSimObjectのリストが、パラメータの値とと…

Gem5のチュートリアル "Learning Gem5"をやってみる(Part-2.5:configスクリプトをRISC-V向けに改造する)

まだ途中ではあるが、Learning Gem5で作成したconfigスクリプトをRISC-V向けに改造したのでこれを動作させるテストをする。 RISC-V向けに改造といっても、CPUのタイプを変更するだけである。 msyksphinz.hatenablog.com # configs/learning_gem5/part1/simpl…

Gem5のチュートリアル "Learning Gem5"をやってみる(番外編: RISC-Vのバイナリをビルドしてシミュレーションする手法)

Gem5で、RISC-Vのプログラムをシミュレーションするための方法を調査している。まず、簡単なHello Worldプログラムを探して、これをコンパイルする方法を調査する。 まずは、hello_world向けのビルド環境があるので動かしてみることにする。 # gem5/tests/te…

Gem5における詳細ログ出力方法

msyksphinz.hatenablog.com Gem5には便利なデバッグオプションがいろいろ入っていることを知った。 ../../../../../../../build/ARM/gem5.opt \ --debug-flags=Exec,LSQUnit --outdir result --debug-file lsu.log \ ../../../../../../configs/example/se.p…

Gem5のチュートリアル "Learning Gem5"をやってみる(Part-2)

Gem5の勉強のために、チュートリアルを1からやってみることにした。 www.gem5.org さらに、システムが正しく動作するためにさらにいくつかのポートを接続する。 I/OコントローラをCPUとメモリバスに接続する必要がある。 メモリバスに対して特殊なポートを接…

Gem5のチュートリアル "Learning Gem5"をやってみる(Part-1)

Gem5の勉強のために、チュートリアルを1からやってみることにした。 www.gem5.org ビルドの方法 ビルドの方法は大体わかっている。RISC-V向けのシミュレーションのためには以下のコマンドでビルドする。 scons build/RISCV/gem5.opt このoptのオプションには…

サイクル精度シミュレータSniperとSpikeでフックを使って情報交換をする

サイクル精度シミュレータSniperで、サイクル計算中に細かな挙動を指定したくて、いろいろ試行錯誤している。 例えば、SpikeからSniperへ特定のシステムレジスタのアップデート情報を送りたいときにどうするか。 こういう時は、SIFTフォーマットのMagicコマ…

RISC-Vソフトウェアエコシステムを推進するRISE Projectについて

https://riseproject.dev/ riseproject.dev www.design-reuse.com 商用ソフトウェアにおけるRISC-Vの対応を加速するためのプロジェクト。以下のミッションが挙げられている。 RISC-Vのためのオープンソースソフトウェアの開発を加速する RISC-Vプラットフォ…

SemiDynamicsのRISC-V Application Processorのベクトルユニット

前々から存在は知っていて、今回正式に発表になったということで読んでいたのだけれども、 www.design-reuse.com www.design-reuse.com Semidynamicsは、RISC-V市場で最大かつ完全にカスタマイズ可能なベクターユニットを発表し、前例のないデータ処理のため…

CNNに必要な演算とフィルタの構造について

とても分かりやすかったのでメモ: indoml.com

サイクル精度シミュレータSniperのDRAMの余計な挙動を抑える方法

昨日いろいろ調べたサイクル精度シミュレータ上でネットワークが走っている問題は、どうもDRAMの設定のデフォルト値がそのようになっていて、Sniperの設定を以下のように変えればよいらしい。 [perf_model/dram] type = constant # DRAM performance model t…

サイクル精度シミュレータSniperで動作しているスレッドについて

サイクル精度シミュレータの挙動がわからな過ぎていろいろ調べていたのだけれども、そもそも基本的なSniperの仕組みで理解の足りていないところがあって、そういうところをひたすらまとめていくメモ。 誰かの役には立たないけれども、自分の役には立つかもし…

NEONとRISC-V VectorのSoAとAoSのデータ並び変換命令について

もちろん、NEONはSIMD命令でRVVはVector命令群なので目的も細かな仕様も異なるわけだけれども、命令の挙動として似ているものを対比してみる。 Coding for Neon developer.arm.com Unit-Stride Load 命令 RVV命令の場合はVLE.V 命令などがある。VLE8.V / VLE…

Newlibが使用するmultilibの検出方法

Newlibのマルチプラットフォームのライブラリってどうやって作っているのかと思っていろいろ見ていた。 ../configure --prefix=${RISCV} --target=riscv64-unknown-elf make -j$(nproc) 本質的には以下のようなパラメータからとってくるらしい。 /home/msyks…

RISC-V Vectorized FFTW3を試す (3. Clangを使ってビルド)

FFTW3のビルドをいろいろ試行している。とりあえずC拡張を使いたくないのだが、GCCはCを除いたコンパイルをしてくれない。 Clangならば行ける気がしたので、試してみた。 git clone https://github.com/sh-zheng/fftw3.git fftw3-zheng cd fftw3-zheng ./boo…

makeコマンドの--output-sync オプションについて

自分用のメモ:大量のジョブを流した時に出力をまとめ上げたいときに使用する。 linuxjm.osdn.jp -O[type], --output-sync[=type] -j を使って複数ジョブを並行で実行する場合、それぞれのジョブからの出力をばらばらに行うのではなく、個々のジョブ出力を取…