GPGPU processor supporting RISCV-V extension, developed with Verilog.
Copyright (c) 2023-2024 C*Core Technology Co.,Ltd,Suzhou.
这是“乘影”的Verilog版本,原版(Chisel HDL)链接在这里
乘影开源GPGPU项目网站:opengpgpu.org.cn
目前乘影在硬件设计上还有很多不足,如果您有意愿参与到“乘影”的开发中,欢迎在github上pull request
乘影的硬件架构文档在这里
我们针对GPGPU进行了DC综合(采用tsmc 28nm工艺),以下是几个重要的配置参数:
- NUM_THREAD = 32
- NUM_SM = 2
- NUM_WARP = 8
- DCACHE_BLOCKWORDS = 2
在只采用HVT和SVT cell的条件下,GPGPU频率为620MHz,总面积为3.908mm2
以gaussian用例为例,进入testcase/test_gpgpu_axi_top/tc_gaussian
:
在仿真之前,需要确认GPGPU单个warp的大小:在
src/define/define.v
目录下,修改NUM_THREAD
- 用VCS仿真:
make run-vcs-4w4t
- 结果会显示
PASSED
或FAILED
:
- 用Verdi查看波形
make verdi
- 如果不需要对外的AXI接口,则进入
testcase/test_gpgpu_top/tc_gaussian
,步骤同上
测试集 | warp/thread数 | 是否通过 | 当前执行周期数 | 说明 |
---|---|---|---|---|
vecadd:向量加法 | 4w16t | pass | 1800 | 64个元素向量加 |
4w8t | pass | 2696 | 64个元素向量加 | |
4w32t | pass | 2164 | 64个元素向量加 | |
8w4t | pass | 2899 | 64个元素向量加 | |
matadd:矩阵加法 | 1w32t | pass | 2808 | 4*4矩阵加法 |
1w16t | pass | 2500 | 4*4矩阵加法 | |
2w8t | pass | 2640 | 4*4矩阵加法 | |
4w4t | pass | 4054 | 4*4矩阵加法 | |
nn:最近邻内插法 | 2w16t | pass | 2031 | 19个点找最近的5个点 |
4w8t | pass | 4033 | 28个点找最近的5个点 | |
4w16t | pass | 2269 | 53个点找最近的5个点 | |
8w4t | pass | 3382 | 19个点找最近的5个点 | |
8w8t | pass | 2038 | 53个点找最近的5个点 | |
gaussian:高斯消元 | 1w16t | pass | 10151 | 四元一次线性方程组消元 |
2w8t | pass | 11670 | 四元一次线性方程组消元 | |
4w4t | pass | 11537 | 四元一次线性方程组消元 | |
4w8t | pass | 15940 | 五元一次线性方程组消元 | |
bfs:宽度优先搜索算法 | 2w16t | pass | 20938 | |
4w8t | pass | 22730 | ||
4w32t | pass | 36114 | ||
8w4t | pass | 40888 |
注:当前由于DCACHE_BLOCKWORDS较小,执行周期数会比较长,当DCACHE_BLOCKWORDS增大的时候,
执行周期会有比较大的改善,这里只是为了评估不同NUM_THREAD下GPGPU的执行效率
我们在开发Ventus GPGPU时参考了一些开源设计
Sub module | Source | Detail |
---|---|---|
CTA scheduler | MIAOW | Our CTA scheduler module is based on MiaoW ultra-threads dispatcher |
L2Cache | block-inclusivecache-sifive | Our L2Cache design is inspired by Sifive's block-inclusivecache |
FPU | XiangShan | We reused Array Multiplier in XiangShan. FPU design is also inspired by XiangShan |
SFU | openhwgroup | Our SFU module is based on pulp-platform |
Config, ... | rocket-chip | Some modules are sourced from RocketChip |