我是一名本科生,正在撰写有关并行编程的论文。
我正在使用 OpenMP 模型。现在我想使用 gem5 来衡量性能。
这就是为什么我通过以下链接成功安装 gem5 完整系统:
http://cearial01.kaist.ac.kr/index.php/2016/08/26/gem5-documentation/ http://cearial01.kaist.ac.kr/index.php/2016/08/26/gem5-documentation/
现在我想使用 gem5 编译并运行 OpenMP (matmul.c) 的 c 程序。
我怎样才能编译和运行这个程序?
我的意思是我将这个程序文件(matmul.c)存储在哪个文件夹中进行编译?
我如何创建该程序的目标文件?
在运行和编译期间如何更改处理器数量、缓存大小、CPU 数量?
我是这个部门的新学生。这就是为什么我的要求清单太大了!
希望大家不要介意。
此致,
丽土
我怎样才能编译并运行这个程序?我的意思是我将这个程序文件(matmul.c)存储在哪个文件夹中进行编译?我如何创建该程序的目标文件?
如何交叉编译图像不是 gem5 特有的,所以我会简单介绍一下。
首先,您必须获得图像的交叉编译器。
最好的方法是从与映像相同的源获取交叉编译器以确保兼容性。
我的首选方法是使用最少的 Buildroot 映像。构建根目录:
- 为我构建交叉编译器和映像,从而确保兼容性
- 使用其软件包系统可以轻松自动构建新软件
- 可以生成非常简单的图像,更适合gem5和架构研究
This is 我在 GitHub 上的设置 https://github.com/cirosantilli/linux-kernel-module-cheat/tree/e208cc15ebcd0b369053ae8831c4a984f2d106f9#gem5。它包含最少的OpenMP 你好世界 https://github.com/cirosantilli/linux-kernel-module-cheat/blob/e208cc15ebcd0b369053ae8831c4a984f2d106f9/kernel_module/user/openmp.c我已经在 gem5 中成功运行了。
另一个不错的选择是使用https://crosstool-ng.github.io/ 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
与相应的核心数,例如:./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型号,然后观察差异? https://stackoverflow.com/questions/49011096/how-to-switch-cpu-models-in-gem5-after-restoring-a-checkpoint-and-then-observe-t
- 缓存仅影响某些CPU类型,通常是更详细的,例如ARM
HPI
和 x86DerivO3CPU
, 但不是AtomicSimpleCPU
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)