以下のリポジトリで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の数を制御する
TMCcount: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インターフェース