标签: gem5

使用cachegrind和callgrind进行不同的读写计数

我正在使用Cachegrind,Callgrind和Gem5进行一些实验.我注意到一些访问被计为cachegrind的读取,如callgrind的写入以及gem5的读取和写入.

我们来看一个非常简单的例子:

int main() {
    int i, l;

    for (i = 0; i < 1000; i++) {
        l++;
        l++;
        l++;
        l++;
        l++;
        l++;
        l++;
        l++;
        l++;
        l++;
        ... (100 times)
     }
 }
Run Code Online (Sandbox Code Playgroud)

我编译:

gcc ex.c --static -o ex

所以基本上,根据asm文件,addl $1, -8(%rbp)执行100,000次.由于它既是读取也是写入,我期待100k读取和100k写入.但是,cachegrind只将它们计为read,而callgrind只计为write.

 % valgrind --tool=cachegrind --I1=512,8,64 --D1=512,8,64
--L2=16384,8,64 ./ex
==15356== Cachegrind, a cache and branch-prediction profiler
==15356== Copyright (C) 2002-2012, and GNU GPL'd, by Nicholas Nethercote et al.
==15356== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info …
Run Code Online (Sandbox Code Playgroud)

c assembly callgrind cachegrind gem5

14
推荐指数
1
解决办法
1155
查看次数

无法在 qemu 或 gem5 中打开 /lib/ld-linux-aarch64.so.1

我正在尝试在我的台式计算机上模拟一个简单的 Hello world ARM 示例。我尝试了 qemu 和 gem5。两者都给出了类似的错误。他们找不到ld-linux-aarch64.so.1。其实我也找不到。如果我能找到它,我将用 -L (在 qemu 中)或 --redirects (在 gem5 中)显示它。

该文件是:

armhello: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=23a21b7a545ac510923b6b3713d2bbee092f820a, for GNU/Linux 3.7.0, not stripped
Run Code Online (Sandbox Code Playgroud)

它是用以下内容编译的:aarch64-linux-gnu-gcc

我正在尝试在 qemu 中运行它:

qemu-aarch64 armhello
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

/lib/ld-linux-aarch64.so.1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我尝试在 gem5 中运行它:(simpleARM.py 指向我的可执行文件(名为armhello))

build/ARM/gem5.opt configs/tutorial/simpleARM.py
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

panic: panic condition fd < 0 occurred: Failed to open file /lib/ld-linux-aarch64.so.1.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

注意:我知道它在编译时有效--static。但我需要运行动态链接的更复杂的二进制文件,并且我无法更改它们。这只是一个例子。

qemu arm64 gem5

6
推荐指数
1
解决办法
3万
查看次数

如何使用 GCC 7.2 在 Ubuntu 17.10 上构建 gem5,处理 C++ 编译中的问题?

我在按照官方文档中的指示构建 gem5 时遇到了很多问题。

这些是我使用过的命令:

git clone https://gem5.googlesource.com/public/gem5
cd gem5
python2 `which scons` build/MIPS/gem5.opt
Run Code Online (Sandbox Code Playgroud)

这导致此输出:

scons: Reading SConscript files ...
Warning: Your compiler doesn't support incremental linking and lto at the same time, so lto is being disabled. To force lto on anyway, use the --force-lto option. That will disable partial linking.
Checking for C header file Python.h... (cached) yes
Checking for C library python2.7... (cached) yes
Checking for C library pthread... (cached) yes
Checking for C library dl... (cached) yes …
Run Code Online (Sandbox Code Playgroud)

ubuntu gcc scons gem5

5
推荐指数
1
解决办法
2222
查看次数

是否有 X86_64 (amd64) 未使用的二进制操作码列表

我正在尝试在 X86_64 (amd64) ISA 中添加自定义指令。我将使用这些指令创建一个二进制文件,然后在 gem5 模拟器中运行它。要查找未使用的操作码列表,我指的是http://ref.x86asm.net/coder64.html。然而,该网站仅列出了单字节未使用的操作码。我正在寻找的是 amd64 CPU 的解码器语法,以便我可以找到哪些二进制序列无效。我尝试测试一些随机二进制序列以查看它们是否无效,并且我能够找到一些(例如0xc5000c无效的 3 字节指令)。然而,我想要 amd64 CPU 用来解码指令的语法,以导出更长的无效二进制序列。是否有任何资源可用于此任务?

目前,为了查找二进制序列,我使用 C 程序,如下所示:

int main()
{
        asm volatile(".byte 0x06" ::: "memory");
        asm volatile(".byte 0x07" ::: "memory");
        asm volatile(".byte 0x0E" ::: "memory");
        asm volatile(".byte 0x16" ::: "memory");
        asm volatile(".byte 0x17" ::: "memory");
        asm volatile(".byte 0x1E" ::: "memory");
        asm volatile(".byte 0x1F" ::: "memory");
        asm volatile(".byte 0x27" ::: "memory");
        asm volatile(".byte 0x2F" ::: "memory");
        asm volatile(".byte 0x37" ::: "memory");
        asm volatile(".byte 0x3F" ::: "memory"); …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 instruction-set opcode gem5

5
推荐指数
1
解决办法
597
查看次数

为什么一个简单的C程序需要系统调用?

其他问题相关.我试图在gem5中运行这个简单的C程序:

int main() {
    int a=1, b=2;
    int c=a+b;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

它失败了因为gem5没有实现一些系统调用.

我的问题是,为什么像这样的简单程序需要系统调用?这应该毫无困难地运行裸机.有没有办法编译这个以避免系统调用?我正在使用arm-linux-gnueabi-gcc -static -DUNIX来编译它.

c gcc arm system-calls gem5

4
推荐指数
1
解决办法
363
查看次数

如何使用 se.py 在 gem5 系统调用模拟模式下编译和运行可执行文件?

有许多可能的错误和解决方法分散在不同的地方,任何人都可以提供至少一种详细的工作设置,以及确切的 gem5 和编译器版本,希望在 Ubuntu 上吗?

gem5

4
推荐指数
1
解决办法
3933
查看次数

gem5模拟环境中测量时间的最佳方法是什么

我正在 gem5 模拟环境中运行一个小型矩阵乘法程序,并且想要测量该程序的执行时间。该程序是 Fortran 语言,我在矩阵乘法例程之前和之后使用 cpu_time 来获取时间。但是在gem5环境下还有其他更好的测量时间的方法吗?

gem5

3
推荐指数
1
解决办法
2057
查看次数

如何在 gem5 中运行动态链接的可执行系统调用仿真模式 se.py?

如何解决:运行gem5在系统调用仿真SE模式时,“致命的内核太旧”?我设法在某些条件下运行了一个静态链接的 hello world。

但是,如果我尝试针对 stdlib 运行一个 ARM 动态链接的:

./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
Run Code Online (Sandbox Code Playgroud)

它失败了:

fatal: Unable to open dynamic executable's interpreter.
Run Code Online (Sandbox Code Playgroud)

如何让它找到解释器?希望不要在我的主机根目录上复制我的交叉工具链的解释器。

对于 x86_64,如果我使用我的本机编译器,它就可以工作,并且正如预期的strace那样,它使用本机解释器,但如果我使用交叉编译器,它就不起作用。

当前的常见问题解答说不能使用动态可执行文件:http : //gem5.org/Frequently_Asked_Questions但我不相信它,然后这些演示文稿提到了它:

但不是如何实际使用它。

QEMU 用户模式有这个-L选项。

在 gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 中测试

https://www.mail-archive.com/gem5-users@gem5.org/msg15582.html

gem5

3
推荐指数
1
解决办法
1858
查看次数

Gem 5 IOError: 找不到系统文件的路径。完整系统 X86 模拟设置

我已经安装了 Gem5。我正在尝试进行完整的系统模拟。我添加了M5_PATH

echo "export M5_PATH==/home/sam/security/gem5/full/" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

我将所有系统映像和配置文件放在以下目录下:

  :~/security/gem5/full$ ls
binaries  configs  config-x86.tar.bz2  disks  x86-system.tar.bz2  x86-system.tar.bz2.1
Run Code Online (Sandbox Code Playgroud)

我将 SysPaths.py 文件中的路径更改为以下内容:

                paths = [ '/dist/m5/system', 'full' ]
Run Code Online (Sandbox Code Playgroud)

并在 Benchmark.py 中更新了以下行

            return env.get('LINUX_IMAGE', disk('linux-x86.img'))
Run Code Online (Sandbox Code Playgroud)

Gem5 已成功编译,我正在运行以下命令:

 ./build/X86/gem5.opt configs/example/fs.py  --disk-image=/home/sam/security/gem5/full/disks/linux-x86.img 
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误,它找不到系统文件的路径。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "build/X86/python/m5/main.py", line 438, in main
    exec(filecode, scope)
  File "configs/example/fs.py", line 335, in <module>
    test_sys = build_test_system(np)
  File "configs/example/fs.py", line 93, in build_test_system
    cmdline=cmdline)
  File "/home/sam/security/gem5/configs/common/FSConfig.py", line 614, in makeLinuxX86System
    makeX86System(mem_mode, numCPUs, …
Run Code Online (Sandbox Code Playgroud)

gem5

3
推荐指数
1
解决办法
2489
查看次数

英特尔/ ARM内在函数等价

我有一个使用英特尔内在函数的C应用程序,如:

__m128 _mm_add_ps (__m128 a, __m128 b)
__m128 _mm_sub_ps (__m128 a, __m128 b)
__m128 _mm_mul_ps (__m128 a, __m128 b)
__m128 _mm_set_ps (float e3, float e2, float e1, float e0)
void _mm_store_ps (float* mem_addr, __m128 a)
__m128 _mm_load_ps (float const* mem_addr)
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试修改我的应用程序,以便使用名为Gem5的模拟器使其在ARMv8上运行.所以,我开始寻找ARM内在函数,我发现了这个手册ARM®NEON™内在函数参考

好吧,我找到了算术内在函数,但是我对设置,存储和加载指令有点失落.

有ARM内在函数经验的人可以告诉我正确的内在函数吗?

c arm intrinsics neon gem5

2
推荐指数
1
解决办法
938
查看次数