2025-01-01から1年間の記事一覧
common_cellsに入っている 2つのメモリインターフェース変換モジュールについてみてみる。 1. mem_to_banks_detailed.sv mem_to_banks_detailed.svは、メモリアクセスを複数の並列バンクに分割する実際の実装を含むモジュールである。 https://github.com/pu…
stream_to_mem.sv フロー制御付きのリクエストを持つが、出力データにフロー制御がないメモリインターフェースを、ストリームインターフェースで使用できるように変換するモジュールである。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f…
stream_filter.sv ストリームのドロップを制御するシンプルなフィルタモジュールである。 drop_iが1の場合、下流に関係なく上流にreadyをアサートし、validを下流へ伝播しない。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f741e7dd57366…
stream_fork.sv 1つの入力ストリームを複数の出力ストリームへ分配するモジュールである。 各入力ハンドシェイクに対して、すべての出力が正確に1回ハンドシェイクする。 入力はすべての出力がハンドシェイクした後にのみハンドシェイクするが、出力は同時に…
stream_arbiter.sv 複数の入力ストリームを1つの出力ストリームへアービトレーションするモジュールである。 ラウンドロビンまたは優先度ベースのアービトレーション方式をサポートする。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f741…
stream_mux.sv 複数の入力ストリームから1つの出力ストリームへ選択的に接続するマルチプレクサモジュールである。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f741e7dd5736669a20a301325194c28/src/stream_mux.sv#L16 /// Stream multip…
stream_ モジュール群についての解析を行っている。 まずは、基本的なストリーム・モジュールについて。 stream_register.sv シンプルなready/validハンドシェイクを備えたレジスタモジュールである。 すべての制御信号の組み合わせパスを切断しないため、完…
common_cellsライブラリに含まれるstream_から始まるモジュール群の構成について分析する。 これらのモジュールは、ready/validハンド・シェイク・プロトコルを使用したストリームインターフェースを提供する。 github.com stream_モジュール群では、一般的…
Riescue-Dのサンプルテストコード(bfs.s、幅優先探索のテスト)を実行してみた。 riescued --testfile riescue/riescue/dtest_framework/tests/bfs.s --cpuconfig cpu_config.json --run_dir bfs --iss spike 実行ログ: fpgen unavailable, skipping /home/…
Riescue-C(CTK: Compliance Test Kit)を使ってテストキットを生成してみた。 Riescue-Cとは RiescueDは単一のテストファイルを処理するフレームワークだが、Riescue-CはCompliance Testを含めて複数のテストを自動生成できる点が本質的な違いだ。 Riescue-…
RiescueDダイレクトテスト実装メモ 実行コマンド: riescued --testfile test1.s --cpuconfig cpu_configuration.yml --run_dir test1 --iss spike まず、以下のエラーが生成された。 ValueError: key test_access is not a boolean in cfg={'address': '0x20…
Riscue-D(正式名称 RiescueD)は、Tenstorrent が提供する RISC-V 向け Directed Test Framework である。 単なる ISA 命令列テストの生成ツールではなく、特権レベル、仮想メモリ、例外処理、OS ライクな実行環境まで含めたシステムレベルのテストを、アセ…
前回の続き。Sniperによるシミュレーションを実行してみる。 make run_sniper_403.gcc sed: -e expression #1, char 11: unknown option to `s' === Running Sniper simulations for 403.gcc === find /home/msyksphinz/work/bench_trace/bench_trace_env/sp…
SPEC CPU2006のベンチマークをSniperでシミュレーションするために、Sniperのダウンロードからビルドまでのフローをspec2006_work/Makefileに追加した。 Makefileに以下のターゲットを追加した。 # Download and build Sniper build_sniper: .build_sniper .…
msyksphinz.hatenablog.com 実際の解析パイプラインは、以下のような流れになった。 make prepare CDROM_DIR=/home/msyksphinz/spec_bechmarks/spec2006_cdrom && \ make build -j${NPROC} && \ make run_bbv -j${NPROC} && \ make build_simpoint && \ make…
SPEC CPU2006のSimPoint解析までをGitHub Actionsで自動化する必要があった。 セルフホステッドランナーとDockerを使って実装したので、その作業ログを残しておく。 まずは、GitHub Actionsのワークフローファイルを作成した。最初は以下のような構成にした…
https://github.com/pulp-platform/common_cells/blob/master/src/cdc_4phase.sv 基本設計方針 cdc_4phase.svは、4相ハンドシェイクプロトコルを使用してクロックドメイン間でデータを転送するモジュールである。 4相ハンドシェイクでは、req信号とack信号が…
cdc_2phase.svは、2相ハンドシェイクプロトコルを使用してクロックドメイン間でデータを転送するモジュールである。2相ハンドシェイクでは、各トランザクションごとにreq信号とack信号がトグルする。この方式は、4相ハンドシェイクと比較して効率的であるが…
Common Cellsライブラリには、クロックドメイン間(Clock Domain Crossing, CDC)でデータを安全に転送するための実装が8つ用意されている: github.com cdc_2phase.sv: 2相ハンドシェイクによるCDC cdc_2phase_clearable.sv: クリア機能付き2相ハンドシェイ…
github.com 5. isochronous_spill_register.sv:等時性クロックドメイン間スピルレジスタ 基本設計方針 isochronous_spill_register.svは、等時性(isochronous)クロックドメイン間でデータを転送するためのスピルレジスタである。 等時性とは、2つのクロッ…
github.com 3. spill_register.sv:後方互換性ラッパー 基本設計方針 spill_register.svは、spill_register_flushableのラッパーモジュールであり、後方互換性を維持するために提供されている。 flush_i信号を常に1'b0に固定して、フラッシュ機能なしのスピ…
github.com 2. fall_through_register.sv:フォールスルー動作レジスタ 基本設計方針 fall_through_register.svは、フォールスルー(fall-through)動作を実装したレジスタである。 出力側のモジュールが同じクロックサイクル内でデータを受け取る準備ができ…
github.com Common Cellsライブラリには、ready/validハンドシェイクプロトコルに対応したレジスタの実装が5つ用意されている: stream_register.sv: シンプルなストリームレジスタ fall_through_register.sv: フォールスルー動作を持つレジスタ spill_regis…
前回: RISC-VのN-Traceの仕様について調べる (1. RISC-V Trace Control Interface の仕様について) - FPGA開発日記 レジスタ群 1. Trace Encoder 周りのレジスタ群 1.1 Trace Encoder 本体 (trTe??) ベース: trBaseEncoderN RISC-V-Trace-Control-Interface…
RISC-V トレース機能は、プログラム実行時の挙動を外部へ記録し、デバッグ・性能解析・実行経路再現などを可能とする仕組みである。 本機能は主として、Trace Encoder がトレース情報を生成し、各種 Sink がそれを保存・出力するという構造で成り立っている…
ジョブサーバーの自動セットアップフロー ジョブサーバーでは、以下の処理が自動実行される: ホスト名の設定 パッケージのインストール EFSのマウント フロントエンドサーバーからのNFSマウント Slurm設定ファイルとMunge keyの取得 Slurmワーカーのインス…
user_dataとは user_dataは、EC2インスタンス起動時に実行されるスクリプトである。Terraformのaws_instanceリソースでuser_dataパラメータを指定すると、インスタンスの初回起動時にそのスクリプトが自動実行される。 resource "aws_instance" "frontend" {…
Terraformを設定したので、使い方をまとめておく。 変数ファイルの設定 example.tfvarsを編集して、VPC ID、サブネットID、キーペア名を設定した: vpc_id = "vpc-xxxxxxxx" subnet_id = "subnet-xxxxxxxx" key_name = "your-key-name" frontend_instance_ty…
作業の目的 AWS上にSlurmクラスターを構築する必要があったので、Terraformを使って完全自動化で構築できるようにした。 構築した環境 フロントエンドサーバ: Slurmコントローラー(slurmctld)を実行 ジョブサーバ: Slurmワーカー(slurmd)を実行 固定IPア…
SIFTファイルを生成してデバッグできるようになったが、いくつか問題があるのでデバッグしていこう。 SniperシミュレータのQEMUフロントエンドにおいて、RISC-V命令のメモリアクセスのレコード機能についてデバッグする。 実行時に以下のようなデバッグ出力…