服务器上使用docker搭建gem5-gcn3环境

使用docker配置gem5-gcn3环境

3步:拉取镜像,编译gcn,测试square

1、拉取镜像

默认主机有梯子/代理,根据官网步骤 gem5 gpu:AMD VEGA GPU

docker pull ghcr.io/gem5-test/gcn-gpu:v23-1

报错:

Error response from daemon: Head "https://ghcr.io/v2/gem5-test/gcn-gpu/manifests/v23-1": denied

解决,需要在github上设置一下token信息,参考链接 关于容器注册表支持。设置步骤:

vim ~/.bashrc
export CR_PAT=YOUR_TOKEN
### 退出重新进入终端,或者
source ~/.bashrc
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
### login success

重新拉取镜像,

docker pull ghcr.io/gem5-test/gcn-gpu:v23-1

报错: Error response from daemon: manifest unknown,清单未知。去gem5 github主页,查看gcn的package下的版本列表 gcn-gpu 。发现目前没有v23-1的版本,改为已经发布的最新的v23-0,重新拉取

docker pull ghcr.io/gem5-test/gcn-gpu:v23-0

2、环境编译

根据镜像创建一个gcn3-gpu的容器,然后进入容器。

docker run --net host -itd --name gcn3-gpu -v /home/wgs/gem5space/:/root/gem5space  ghcr.io/gem5/gcn-gpu:v23-0 bash
docker exec -w /root/gem5space -it gcn3-gpu bash

上面的一些参数说明:

docker run:
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
-i : 以交互模式运行容器,通常与 -t 同时使用;
-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--volume , -v: 绑定一个卷
docker exec:
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
-w :指定初始化的工作目录

描述一下后面的文件夹结构

gem5-space
	|--gem5
	|--gem5-resources

gem5的源码,可以从github gem5的历史版本中下载相应的源码压缩包,然后解压
gem5-resources可以从github上clone下来,

git clone https://github.com/gem5/gem5-resources.git

编译gem5-gcn3的部分:

cd gem5
scons build/GCN3_X86/gem5.opt -j 64

编译的输出如下
在这里插入图片描述
其他的一些说明:
如果想实现快速创建,进入或者删除容器,可以在主机的环境变量~/.bashrc中添加下面内容

alias cgcn3='docker run --net host -itd --name gcn3-gpu -v /home/wgs/gem5space/:/root/gem5space  ghcr.io/gem5/gcn-gpu:v23-0 bash'
alias egcn3='docker exec -w /root/gem5space -it gcn3-gpu bash'
alias dgcn3='docker stop gcn3-gpu; docker rm -f gcn3-gpu'

在主机终端分别执行cgn3/egcn3/dgcn3可以实现,对容器的创建/进入/删除操作。
进入容器,可以通过下面操作修改终端的显示彩色

apt update & apt install vim
vim ~/.barshrc
# 在vim命令中输入: j 64,跳转到第64行
# 取消第39行的注释
#force_color_prompt=yes

3、测试square

square在github上的介绍和测试流程 square

# pwd: /root/gem5space
cd gem5-resources/src/gpu/square
make
# Warning: The specified HIP target: gfx902 is unknown. Correct compilation is not guaranteed.
cd -
gem5/build/GCN3_X86/gem5.opt gem5/configs/example/apu_se.py -n 3 -c gem5-resources/src/gpu/square/bin/square

成功运行后的输出如下:

info: check result
PASSED!
Ticks: 139906310500
Exiting because  exiting with last active thread context

运行时会有一些warning,而且也需要等待一小段时间。

其他的情况说明

docker官网有一个版本的gem5-gcn3, 地址docker官网 gcn3。这个版本可以编译,但是运行起来会有报错,不太清楚这个docker里面环境什么情况。而且是两年前的一个版本。

### 关于 gem5GCN3 集成的相关信息 gem5 是一种模块化、可扩展的计算机体系结构仿真器,广泛用于研究处理器架构和系统设计。GCN3(Graphics Core Next 3)是 AMD 开发的一种图形处理单元架构,支持 DirectX 12、OpenGL 4.x 和 OpenCL 2.0 等特性。 #### gem5 中 GPU 模型的支持 gem5 提供了一个名为 `GPU models` 的功能集来模拟 GPU 行为。通过这些模型可以实现对不同 GPU 架构的仿真,其中包括对 AMD GCN 架构的部分支持[^1]。为了在 gem5 中集成 GCN3,通常需要以下几个方面的配置: 1. **ISA 支持**: gem5 必须能够解析并执行 GCN3 的指令集。这涉及定义特定的寄存器文件以及相应的操作码映射表。对于 GCN3 来说,其主要特点是引入了更高效的 SIMD 单元和支持异步计算队列的功能[^2]。 2. **内存层次结构建模**: 在 gem5 中构建完整的 GPU 存储子系统的仿真是至关重要的一步。它包括 L1 缓存、共享全局数据缓存 (LDS),以及与 CPU 共享的最后一级缓存 (LLC)[^3]。这种建模允许研究人员分析带宽利用率及延迟隐藏策略的效果。 3. **编程接口兼容性**: 考虑到现代应用程序依赖高级 API 如 Vulkan 或 Metal 运行,在 gem5 上运行实际工作负载可能还需要额外开发驱动程序层或者翻译中间表示(IR)至目标硬件描述语言(HDL)[^4]。 以下是基于 Python 的简单示例脚本片段展示如何初始化一个具有基本参数设置的基础版 GPU 对象: ```python from m5.objects import * gpu = GpuDevice() gpu.numComputeUnits = 8 # 设置计算单元数量 gpu.shaderModelVersion = 'SM_5' # 定义着色器版本号 gpu.memoryBusWidth = 256 # 显存总线宽度(bit) system = System(cpu=gpu) root = Root(full_system=False, system=system) ``` 上述代码仅作为概念验证用途,并未完全覆盖所有必要细节;具体实施过程可能会更加复杂且需参照官方文档进一步调整各项属性值直至满足需求为止。 #### 参考链接补充说明 虽然当前提供的参考资料并未直接提及 gem5GCN3 的相关内容,但是可以从其他公开资源获取更多关于两者结合的技术资料。例如查阅 gem5 社区论坛帖子讨论或是参与相关开源项目贡献等方式加深理解程度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值