FPGA開発日記

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

2022-08-01から1ヶ月間の記事一覧

サイクルベースシミュレータSniperについて調査する (サイクル情報の出力方法)

Sniperのトレースファイルを触っているのだが、いくつかやり方が分かってきた。 サイクルトーレスは一部しか出すことができず、もっと広範囲にトレースを出したい場合はソースコードを改変する必要がありそうだ。 config/base.cfg [loop_tracer] enabled = t…

サイクルベースシミュレータSniperについて調査する (RISC-Vシミュレーション環境構築の調査)

ビルド中にいろいろ怒られてしまった。 RISCVのデコーダにいくつか古いものがあり、再実装する必要がありそうだ。 diff --git a/decoder_lib/riscv_decoder.cc b/decoder_lib/riscv_decoder.cc index 08f5bea..16a62c2 100644 --- a/decoder_lib/riscv_decod…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (4. 内部構造について概観する)

github.com TenstorrentのOcelotの実装について多少情報が出てきているようだ。 https://github.com/tenstorrent/riscv-ocelot/blob/ocelot/README-TT.md https://github.com/tenstorrent/riscv-ocelot/blob/ocelot/docs/figures/rvv/Ocelot_Overview_Medium…

サイクルベースシミュレータSniperについて調査する (RISC-Vシミュレーション環境構築の調査)

Sniperのビルドについていくつかうまくいかなかった部分があるので、 ビルドスクリプトを修正してく。 結論としては、riscv/build-riscv.shを以下のように修正した。また、自分はSPEC2006を持っていないので、Dhrystoneなので代用しないとしようがない。 com…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (3. いくつかのテストケースを確認する)

Tenstorrentが、オープンソースのRISC-VベクトルプロセッサOcelotを公開した。 github.com https://github.com/tenstorrent/riscv-ocelot/blob/ocelot/docs/figures/rvv/Boom_uArch.png より引用 Oceletの環境にて、以前作成したmemcpyのコードを実行してみ…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す

Tenstorrentが、オープンソースのRISC-VベクトルプロセッサOcelotを公開した。 github.com https://github.com/tenstorrent/riscv-ocelot/blob/ocelot/docs/figures/rvv/Boom_uArch.png より引用 オープンソースでまともに動きそうなRISC-Vベクトルプロセッ…

TenstorrentのオープンソースRISC-Vベクトルプロセッサ実装Ocelotを試す (2. トレースファイルの生成)

Tenstorrentが、オープンソースのRISC-VベクトルプロセッサOcelotを公開した。 github.com https://github.com/tenstorrent/riscv-ocelot/blob/ocelot/docs/figures/rvv/Boom_uArch.png より引用 トレースファイルの修正について、Generator内のコンフィグレ…

Gem5のインストール試行とベンチマーク実行 (AArch64向けとSVE実行の試行)

Gem5について、SVEを使ってみたいので、AArch64の環境を構築しておく。GCCは以下からダウンロードできるようだ。 curl -L https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-…

AArch64のSVE命令コンパイルを試したい

現時点での最新版は以下のようにしてダウンロードできる。 curl -L https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz | tar xJ memcpyはデフォルトでSVEを生成で…

サイクルベースシミュレータSniperについて調査する (RISC-Vシミュレーション環境構築の調査)

SniperのRISC-V対応について、README.riscvにいくつか書いてあるのでやってみることにした。 基本的には./riscv/build-riscv.shで行けるようなのだが、いくつかステップを確認しておく必要がある。 riscv-toolsのインストールについては、リポジトリが古すぎ…

Dockerを使ってLLVM+RISC-Vビルド環境を構築したい

LLVMのビルド環境とRISC-Vのビルド環境をDocker上に構築するためにいろいろ試行している。 Dockerfileの作成自体はあまり経験がないのでTrial&Error状態だ。 構築したいのは Ubuntu 18.04LTSを使った古い環境を用いたLLVMビルド環境。LLVM+RISC-V本の環境に…

Gem5のインストール試行とベンチマーク実行 (memcpy試行)

基本的なmemcpyの動作をシミュレートしてみる。RISC-Vのスカラ命令を使って以下のようなmemcpyのベンチマークを作ってみた。 void copy_data_scalar(int8_t *dest_data, int8_t *source_data, const int data_num) { memcpy (dest_data, source_data, data_n…

Gem5のインストール試行とベンチマーク実行 (ベクトル命令実行試行)

Gem5のサイクルモードについて基本をつかんだので、次は問題となるベクトル命令を動かしてみたい。ユーザモードで以下のようなmemcpyのコードを含む プログラムをコンパイルして、main()で囲んで実行してみた。 .text .global copy_data_vec # void copy_dat…

Branch Prediction Championship KitをDPI-Cで実RTLと接続する試行 (Gshare分岐予測器を接続する)

Branch Prediction Championship Kitの使い方がわかってきたので、これを実際のRTLと接続して性能検証する機能を作ってみようと思う。 前回Bimodalの分岐予測器を接続できたので、次はGShareの分岐予測器をRTLで実装して接続してみようと思う。 github.com …

Gem5のインストール試行とベンチマーク実行 (サイクルモードでの実行と結果取得)

Gem5のインストール方法についてまとめ。 Gem5によるサイクルベースシミュレーションの試行。以下のようにしてみたが何も出ない。 ./build/RISCV/gem5.debug --debug-file printf.out --debug-start 0 --debug-flags=O3PipeView configs/example/se.py -c /h…

サイクルベースシミュレータSniperについて調査する (RISC-V CARRVの論文を読む)

carrv.github.io Flexible Timing Simulation of RISC-V Processors with Sniperという論文を読んでいる。SniperのRISC-V対応に関する初期の論文だ。2018年の論文なので実装はもう少し進んでいるはず。 Sniperについて、インターバル・シミュレーションをベ…

サイクルベースシミュレータSniperについて調査する

http://snipersim.org/download/980fe7028b4bf959/git/sniper.git Sniperはサイクルベースのトレース型シミュレータだ。インストールの手順をメモしておく。 Docker上へのインストール方法は以下の通りだ。 cd sniper/docker make # build the Docker image …

Gem5のインストール試行とベンチマーク実行 (RISC-Vユーザアプリケーションの実行)

Gem5のインストール方法についてまとめ。 Dhrystoneがどうして動かないのか、デバッグ情報を確認した。 command line: ./build/RISCV/gem5.debug --debug-flags=Exec configs/example/se.py -c /home/msyksphinz/riscv64/riscv64-unknown-elf/share/riscv-te…

分岐予測の評価キット Branch Prediction Championship Kit を試す (13. BATAGEの詳細2)

TAGE分岐予測詳細の続き。BATAGEの論文の細かいところを見て行く。 https://dl.acm.org/doi/10.1145/3226098 CAT(Controlled Allocation Throttling)について。 ベイズ推定による自信度の見積もりはcold-counter問題を緩和させることができるが、根本的な問…

Gem5のインストール試行とベンチマーク実行

Gem5のインストール方法についてまとめ。 WSL2上のUbuntu 20.04LTSで試行したが、だいたい以下のページの通りに進めばいける。 www.gem5.org sudo apt install build-essential git m4 scons zlib1g zlib1g-dev \ libprotobuf-dev protobuf-compiler libprot…

分岐予測の評価キット Branch Prediction Championship Kit をDPIで実RTLに接続する試行

Branch Prediction Championship Kitの使い方がわかってきたので、これを実際のRTLと接続して性能検証する機能を作ってみようと思う。 まず適当に作ってみたBimodal 分岐予測器を用意する。これをDPI-Cで接続してみよう。 // Bimodal module predictor ( inp…

分岐予測の評価キット Branch Prediction Championship Kit を試す (13. BATAGEの詳細)

TAGE分岐予測詳細の続き。BATAGEの論文の細かいところを見て行く。 https://dl.acm.org/doi/10.1145/3226098 ポイント デュアルカウンタと呼ばれる新しいPredictionオートマトン デュアルカウンタと米巣信頼度推定を利用した予測・更新のアルゴリズム 割り当…

分岐予測の評価キット Branch Prediction Championship Kit を試す (12. BATAGEの実装を読む)

TAGE分岐予測詳細の続き。BATAGEの論文をざっくり読んでみたので、例によってC++のモデルをチェックする。 https://dl.acm.org/doi/10.1145/3226098 batageのソースコードは、TAGE-SC-Lのものとまた異なっており、もう一度読み直す必要がある(ただし多少シン…

分岐予測の評価キット Branch Prediction Championship Kit を試す (11. TAGEのモデルを読む)

TAGEの続き。 いろいろさがして、以下のC++コードを見つけた。 github.com このソースコードを理解してみよう。 class Tage { private: /* data */ int num_branches; // Stores the number of branch instructions since the last useful reset uint8_t bim…

分岐予測の評価キット Branch Prediction Championship Kit を試す (10. TAGEの基本)

この論文のイントロダクションを見ると、TAGEの発想はPerceptronと似たようなと来ていることが分かる。Hashed PerceptronおよびO-GEHLはGHRの使用する長さをGeometric、つまり等比数列的に伸ばすのが特徴であるが、TAGEのGEも同じようにGeometricであり、等…

分岐予測の評価キット Branch Prediction Championship Kit を試す (9. Hashed Perceptronについて1)

Branch Prediction Championship Simulatorの続きを試す。 Hashed Perceptronという分岐予測器について勉強する。論文は以下を参照している。 ieeexplore.ieee.org とりあえず細かいことは無視してソースコードを読んでみるのがいい気がする。そのあとで論文…

VLSIの配置配線アルゴリズムMincut (Kernighan–Linのアルゴリズム)について復習

ちょっと諸事情で過去に勉強したアルゴリズムを復習したくて、Mincutアルゴリズムを再度勉強していた。 VLSIにおいて配置配線をする際に使用されるアルゴリズムとして有名なものに、Quadratic Placement & Mincutというものがある。 そのうちのMincutは、1つ…

Docker上でのLLVMビルド環境の構築試行

GitHubのIssueにLLVMのビルド環境をDockerで作る方法を教えていただいたので、試してみることにした。 github.com docker run --name=riscv_dev_container -it ubuntu:latest コンテナ内で、以下を実行する apt-get update apt-get -y dist-upgrade apt-get …

Yosysの使い方を勉強する (10. parameterとgenerate)

RTLILでの階層構造の確認。もうちょっとパラメータ付きで確認する。 やってみたかったのは、パラメータの取り扱いとgenerate文の取り扱い。 module adder_sub #(parameter WIDTH = 8) ( input logic [WIDTH-1: 0] in0, input logic [WIDTH-1: 0] in1, output…

Yosysの使い方を勉強する (9. 階層構造の確認)

RTLILでの階層構造の確認。これはaddとmulの時にやってみたので簡単に想像できる。 以下のVerilogファイルで確認する。 module adder_wrapper ( input logic clk, input logic reset, input logic [31:0] in0, input logic [31:0] in1, input logic [31:0] i…