小编Meg*_*rcy的帖子

我如何获取计算机的 CPU 信息,即功能单元/延迟等

我正在尝试学习汇编,在我正在阅读的书中,我遇到了教科书表格中显示的功能单元及其延迟。

我想知道我的 CPU 的功能单元是什么,延迟是多少?整数加法、整数乘法、单精度加法、单精度乘法和双精度乘法。

My CPU is AMD Ryzen 5 3600
Run Code Online (Sandbox Code Playgroud)

我查看了这些链接:https : //www.amd.com/en/technologies/zen-core-3 https://en.wikichip.org/wiki/amd/microarchitectures/zen_3

但在我的处理器中找不到有关功能单元或其延迟的任何信息。

书中延迟表的示例:

书中延迟表的示例

英特尔酷睿 i7 Haswell 的功能单元信息示例:

英特尔酷睿 i7 Haswell 中的功能单元示例

任何帮助表示赞赏,谢谢!!:)

x86 assembly cpu-architecture micro-architecture

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

解释装配跳转表

我试图逐行解释这个汇编代码在做什么,但是当我看到这个汇编中的跳转表时,我发现自己真的很困惑。这是从教科书练习题 3.63 中获取的,但没有解释 -因此,为什么我在这里问它。目标是对提供的汇编列表进行逆向工程并编写可以生成它的 C 代码(感觉 switch 语句体)。请帮忙 :(

教科书是: Randal E. Bryant, David R. O'Hallaron - 计算机系统。程序员的观点 [第 3 版](2016 年,Pearson)

qn 3.63

long switch_prob(long x, long n) { 
    long result = x;  
    switch(n) {  
            /* Fill in code here */  
    }  
    return result;  
}  
Run Code Online (Sandbox Code Playgroud)

我不确定如何“解码”它或如何知道它指向哪里。

0000000000400590 <switch_prob>:  
    400590: 48 83 ee 3c             sub $0x3c,%rsi  
    400594: 48 83 fe 05             cmp $0x5,%rsi  
    400598: 77 29                     ja 4005c3 <switch_prob+0x33>  
    40059a: ff 24 f5 f8 06 40 00     jmpq *0x4006f8(,%rsi,8)  
    4005a1: …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly switch-statement jump-table

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

我们如何计算这段代码片段中缓存的读取/未命中次数?

鉴于我目前正在学习的这本教科书中的这段代码片段。Randal E. Bryant, David R. O'Hallaron - 计算机系统。A Programmer's Perspective [3rd ed.] (2016, Pearson) (全球版,所以书中的练习可能是错误的。)

for (i = 31; i >= 0; i--) {
    for (j = 31; j >= 0; j--) {
        total_x += grid[i][j].x;
    }
}

for (i = 31; i >= 0; i--) {
    for (j = 31; j >= 0; j--) {
         total_y += grid[i][j].y;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是给出的信息

最近热门游戏 SimAquarium 的核心是一个计算 512 藻类平均位置的紧密循环。您正在一台具有 2,048 字节直接映射数据缓存和 32 字节块 (B = 32) 的机器上评估其缓存性能。

  struct algae_position {
         int …
Run Code Online (Sandbox Code Playgroud)

computer-science caching cpu-architecture cpu-cache

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

如何从 switch 语句获取跳转表的案例编号

我正在阅读这本教科书,Randal E. Bryant、David R. O\xe2\x80\x99Hallaron - 计算机系统。A Programmer\xe2\x80\x99s Perspective [3rd ed.] (2016, Pearson)
\n我一直在弄清楚作者如何计算出开关表的案例编号,如下所示~

\n

我不确定的是他们如何获得案例编号,例如Case Ais Case 5: 以及如何Case 2/7isCase CCase D,对于本示例中的其余案例,依此类推

\n

任何帮助表示感谢,谢谢!!

\n

开关指令

\n

汇编代码

\n

给出答案

\n

c x86 assembly switch-statement jump-table

0
推荐指数
1
解决办法
1170
查看次数