如何编译和运行这个程序?我的意思是我将这个程序文件(matmul.c)存储在哪个文件夹中进行编译?我如何创建这个程序的目标文件?
如何对图像进行交叉编译不是 gem5 特有的,所以我会很简短。
首先,您必须获得图像的交叉编译器。
最好的方法是从与图像相同的源中获取交叉编译器,以确保兼容性。
我的首选方法是使用最少的 Buildroot 映像。构建根:
- 为我构建交叉编译器和映像,从而确保兼容性
- 使用其软件包系统可以轻松地自动化构建新软件
- 可以产生非常简单的图像,比较适合gem5和架构研究
这是我在 GitHub 上的设置。它包含一个最小的OpenMP hello world,我已在 gem5 中成功运行它。
另一个不错的选择是使用https://crosstool-ng.github.io/
由于您需要 OpenMP 支持,因此您必须构建具有支持的 GCC 交叉编译器编译器。
我认为这是在 GCC 中完成的:
./configure --enable-libgomp
或通过 Buildroot 选项:
BR2_GCC_ENABLE_OPENMP=y
然后在编译时,必须将-fopenmp
选项传递给gcc
.
如何更改处理器数量和缓存大小?
自己回答这个问题的最好方法是使用类似的东西:
./build/ARM/gem5.opt configs/example/fs.py -h
并搜索选项。
你遇到:
-n NUM_CPUS, --num-cpus=NUM_CPUS
.
对于 ARM,您还需要传递.dtb
带有相应核心数的 a,例如:./system/arm/dt/armv7_gem5_v1_2cpu.dtb
对于 2 个核心。
缓存:您会很容易找到以下选项:
--caches --l1d_size=1024 --l1i_size=1024 --l2cache --l2_size=1024 --l3_size=1024
但请记住:
- 自 fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4 起,Linux 内核无法正确看到缓存大小
恢复检查点后如何在 gem5 中切换 CPU 型号然后观察差异?
- 缓存仅影响某些 CPU 类型,通常更详细,例如 ARM
HPI
和 x86 DerivO3CPU
,但不影响AtomicSimpleCPU
.