或许因为RISCV ISA规范的开放带来了RISCV快速发展证明了硬件开放也是一条可以尝试的方向,今年8月,上海交大先进计算机体系结构实验室团队对外发布了自研开源GPGPU平台“青花瓷”,试图通过开源这条路缩小和AMD,NVIDIA等产业国际巨头的距离。
GPGPU中文名叫做通用图形处理器,在面对并行任务处理时,CPU 与 GPU 的体系结构设计理念有着根本的区别。CPU 注重通用性来处理各种不同的数据类型,同时也必须支持复杂的控制指令,比如条件转移、分支、循环、逻辑判断及子程序调用等,因此 CPU 微架构的复杂性高,是面向指令执行的高效率而设计的。GPU 最初是针对图形处理领域而设计的。图形运算的特点是大量同类型数据的密集运算,因此 GPU 微架构是面向这种特点的计算而设计的。设计理念的不同导致 CPU 和 GPU 在架构上相差甚远。CPU 内核数量较少,常见的有 4核和 8 核等,而 GPU 则由数以千计的更小、更高效的核心组成。这些核心专为同时处理多任务而设计,因此 GPU 也属于通常所说的众核处理器。
多核 CPU 和众核 GPU 的架构对比如图下图所示。可以看到,CPU 中大部分晶体管用于构建控制电路和存储单元,只有少部分的晶体管来完成实际的运算工作,这使得 CPU 在大规模并行计算能力上极受限制,但更擅长于逻辑控制,能够适应复杂的运算环境。由于 CPU 一般处理的是低延迟任务,所以需要大量如图所示的一级(L1)、二级(L2)、三级(L3)高速缓存(cache)空间来减少访问指令和数据时产生的延迟。GPU 的控制则相对简单,对高速缓存的需求相对较小,所以大部分晶体管可以组成各类专用电路、多条流水线,使得 GPU 的计算能力有了突破性的飞跃。由于图形渲染的高度并行性,使得 GPU 可以通过简单增加并行处理单元和存储器控制单元的方式提高处理能力和存储器带宽。
GPGPU的结构
青花瓷项目对国内工程师融入GPU或者NPU开发平台,了解GPU软件栈应该是有积极意义的。下面我们就根据官方指导来在ubuntu22.04上搭建一个青花瓷的仿真环境。
主机环境
由于只开源了软件部分,硬件部分暂时没有开源,目前软件栈只支持CUDA的运行时,测试集多是AI领域比较热门的模型。所以需要主机安装有支持CUDA的N卡,并正确安装了CUDA的toolkit.
install utilis toools
sudo apt-get install build-essential
sudo apt-get install git bc numdiff
资源链接
开源官网:
项目代码github仓库地址:
https://github.com/SJTU-ACA-Lab/blue-porcelain
下载代码
$ git clone https://github.com/SJTU-ACA-Lab/blue-porcelain.git
hiarachy:
driver
: Host drivers repository.runtime
: Kernel Runtime software.sim
: Simulators repository.benchmarks
: Benchmarks for testing.ci
: Continuous integration scripts.
环境配置:
$ export CUDA_INSTALL_PATH=/usr/local/cuda
$ export PATH=$CUDA_INSTALL_PATH/bin:$PATH
下一步导入环境变量,由于我的主机CUDA版本比较高,所以出现下图中的错误,修改脚本,删掉这里的检查逻辑,让这里不报错即可。
$ source setup_environment
编译
项目顶层目录下,执行 make -s开始编译,编译完成后,没有发现有可执行程序生成,可能这里只是编译了某些库吧,比如cmodel.