以下のリポジトリでVortexのソースコードをCloneできる。
- Specifications
とりあえずREADMEを読みながらビルドしてみた。
git clone --recursive https://github.com/vortexgpgpu/vortex.git cd vortex make
| ^ %Warning-EOFNEWLINE: ../dpi/util_dpi.vh:10:7: Missing newline at end of file (POSIX 3.206). : ... Suggest add newline. 10 | `endif | ^ %Warning-EOFNEWLINE: ../rtl/libs/VX_index_buffer.v:90:10: Missing newline at end of file (POSIX 3.206). : ... Suggest add newline. 90 | endmodule | ^ %Warning-EOFNEWLINE: ../rtl//VX_csr_data.v:217:10: Missing newline at end of file (POSIX 3.206). : ... Suggest add newline. 217 | endmodule | ^ %Warning-EOFNEWLINE: ../rtl/fp_cores/VX_fpu_fpnew.v:209:12: Missing newline at end of file (POSIX 3.206). : ... Suggest add newline. 209 | `TRACING_ON | ^ %Warning-EOFNEWLINE: ../rtl/libs/VX_serial_div.v:100:10: Missing newline at end of file (POSIX 3.206). : ... Suggest add newline. 100 | endmodule | ^ %Warning-UNUSED: ../rtl//VX_lsu_unit.v:26:16: Parameter is not used: 'REQ_ADDRW' : ... In instance Vortex.genblk2[0].cluster.genblk2[0].core.pipeline.execute.lsu_unit 26 | localparam REQ_ADDRW = 32 - REQ_ASHIFT; | ^~~~~~~~~ ../rtl//VX_execute.v:65:1: ... note: In file included from VX_execute.v ../rtl//VX_pipeline.v:194:1: ... note: In file included from VX_pipeline.v ../rtl//VX_core.v:86:1: ... note: In file included from VX_core.v ../rtl//VX_cluster.v:55:1: ... note: In file included from VX_cluster.v ../rtl//Vortex.v:53:1: ... note: In file included from Vortex.v %Warning-UNUSED: ../rtl/libs/VX_stream_arbiter.v:23:16: Parameter is not used: 'LOG_NUM_REQS' : ... In instance Vortex.genblk2[0].cluster.genblk2[0].core.pipeline.commit.writeback.rsp_arb 23 | localparam LOG_NUM_REQS = $clog2(NUM_REQS); | ^~~~~~~~~~~~ ../rtl/cache/VX_cache.v:537:1: ... note: In file included from VX_cache.v ../rtl//Vortex.v:102:1: ... note: In file included from Vortex.v %Error: Exiting due to 87 warning(s)
うーん、大量にエラーが出てきてしまった。Verilatorのバージョンがあっていないのか?
マイクロアーキテクチャについて
以下のドキュメントを読んでみる。
Vortexマイクロアーキテクチャ
Vortex GPU実行モデル
VortexはSIMT (Single Instruction, Multiple Threads) の実行モデルを使用しており、単一のWarpがサイクル毎に発行される。
- スレッド
- Wrap
Vortex RISC-V命令拡張
- スレッドマスク制御
- 実行中にアクティブなWarpの数を制御する
TMC
count:count
数のスレッド数をアクティベートする
- Warpスケジューリング
- コントロールフローの分岐
- 分岐したときに起動するスレッドを制御
SPLIT predicate
: 'taken' 述語のスレッドマスクを適用し、 'not-taken' を IPDOM スタックに保存する。JOIN
: 'not-taken' スレッドマスクの復元
- ワープの同期
BAR ID, count
: バリアIDに入るワープをカウント数に達するまでストールする
Vortexパイプライン/データパス
- フェッチ
- デコード
- フェッチされた命令をデコードし、以下の命令がデコードされたらWarpスケジューラに通知する
- 分岐、tmc、split/join、wspawn
- used_regs mask の事前計算 (Issueステージに必要)
- フェッチされた命令をデコードし、以下の命令がデコードされたらWarpスケジューラに通知する
- 発行
- 実行ユニット
- コミット
- クラスタリング
- FPGA AFUインターフェース