标签: intel

我可以在每个核心的基础上编写汇编代码吗?

有人愿意演示英特尔汇编代码如何表示不同内核正在处理的不同线程吗?我想你没有每个线程/核心一个汇编文件?

编辑:让我改写一下:如果我想在不同的CPU核心上编写汇编程序,我可以控制核心X上发生的事情以及每个核心之间的通信(就像可以控制核心上的寄存器值一样)吗?

x86 assembly intel masm

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

具有 64 位立即值的长模式(64 位)相对调用

是否可以?英特尔文档称操作码 E8 可以与相对位移值一起使用。

E8 cd 调用 rel32

“调用近、相对、相对于下一条指令的位移。在 64 位模式下,32 位位移符号扩展到 64 位。”

这是否意味着只允许 32 位位移?我对这里的措辞很不清楚。

c assembly x86-64 intel

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

Intel x86_64 汇编,如何在 x87 和 SSE2 之间移动?(计算双精度数的反正切)

我尝试计算双精度浮点值的反正切,该值保存在 xmm 寄存器中。对于正常的浮点,可以使用旧的 x87 指令 FPATAN,但是如何使用 double 来做到这一点?

precision assembly x86-64 intel

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

从哪里获得英特尔 bios 源代码?

我想学习英特尔 BIOS。那么我在哪里可以获得开源代码和一些开发指南?从链接http://www.crn.com/news/applications-os/21401337/intel-bios-code-goes-open-source.htm,我知道英特尔已经开放了 BIOS 源,但我不知道如何获得。

x86 intel bios

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

什么内存访问架构有 i9 处理器?

什么内存访问架构i9 处理器(UMA 、NUMA 或 CC-NUMA)?

它与以前的处理器(如i7)有什么不同?

x86 intel cpu-architecture memory-access numa

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

基础和位移之间的差异

我在理解遇到的两条指令时遇到一些问题。
第一个如下:

imul   eax,DWORD PTR [esi+ebx*4-0x4]
Run Code Online (Sandbox Code Playgroud)

该指令是否意味着 => 将您在括号之间计算的地址处的值乘以 eax 并将其存储在同一寄存器(eax)中?如果是的话,我们是否像这样计算括号之间的地址?

  1. EBX * 4
  2. esi + 运算1的结果
  3. 从结果中减去 4
  4. 转到地址(结果)并获取其中的值。

我解码的第二条指令是这个

jmp    DWORD PTR [eax*4+0x80497e8]
Run Code Online (Sandbox Code Playgroud)

- eax *4 是否等于index * scale ?
- 0x80497e8 是位移吗?

那么要获取括号内的地址,我们应该遵循这个顺序吗?

  1. 电子轴 * 4
  2. 将1.中的结果添加到地址0x80497e8
  3. 跳转到该地址

根据我的理解, [base + index * scales] 用于获取数组内部的值。基数是指向数组中第一个元素的指针。索引实际上是存储我们想要的值的索引,而比例是数组包含的日期的大小

我的问题是,当您在方程中添加位移时,位移的用途是什么?当位移为负值时意味着什么?

x86 assembly intel addressing-mode

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

CS:IP对应的物理地址在8086中超过20位会怎样?

在 8086 微处理器中,假设 CS 为 FFFFH,IP 为 FAB0H,那么物理内存地址将通过将 CS 乘以 16 并加上 IP 来计算。ie Add = FFFF0 + FAB0 这个总和会导致溢出,因为总和不能存储在 20 位中。会发生什么?

x86 intel real-mode memory-address x86-16

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

使用intel_pstate时如何设置特定的cpu频率

当我使用intel_pstate时,我发现无法使用以下命令更改cpu频率:

sudo cpupower frequency-set -f SomeValue
Run Code Online (Sandbox Code Playgroud)

我知道原因是 intel_pstate 的调控器(省电和性能)不支持手动更改频率。我还尝试将频率值直接写入文件 /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq。但它说我正在更改只读文件。

那么有没有办法在使用 intel_pstate 驱动程序时更改内核的频率?

linux cpu x86 intel

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

通过施加内存压力来降低 CPU 频率

我强调我的系统,看看它如何影响我使用stress-ng编写的一些程序。

程序本身是一个神经网络,主要由一些嵌套循环组成,进行一些乘法运算,并使用大约 1G 的 RAM 整体用 C++ 编码。

我使用以下方法对系统施加了一些内存压力:

stress-ng --vm 4 --vm-bytes 2G -t 100s
Run Code Online (Sandbox Code Playgroud)

这会创建 4 个工作人员在 mmap 上旋转,每个工作人员分配 2G 的 RAM。这显着减慢了我的程序的执行速度(从大约 150 毫秒到 250 毫秒)。但是程序变慢的原因不是缺少内存或内存带宽之类的。相反,CPU 周期从 3.4GHz(无压力 ng)减少到 2.8GHz(有压力 ng)。正如预期的那样,CPU 利用率保持大致相同 (99%)。

我使用以下方法测量了 CPU 频率

sudo perf stat -B ./my_program
Run Code Online (Sandbox Code Playgroud)

有人知道为什么内存压力会降低 CPU 的速度吗?

我的 CPU 是 Intel(R) Core(TM) i5-8250U,我的操作系统是 Ubuntu 18.04。

亲切的问候 lpolari

c++ linux cpu intel cpu-architecture

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

Haswell AVX/FMA 延迟测试比英特尔指南说的慢 1 个周期

在英特尔内部函数指南,vmulpdvfmadd213pd已延迟5,vaddpd具有延迟3。

我写了一些测试代码,但所有的结果都慢了 1 个周期。

这是我的测试代码:

.CODE
test_latency PROC
    vxorpd  ymm0, ymm0, ymm0
    vxorpd  ymm1, ymm1, ymm1

loop_start:
    vmulpd  ymm0, ymm0, ymm1
    vmulpd  ymm0, ymm0, ymm1
    vmulpd  ymm0, ymm0, ymm1
    vmulpd  ymm0, ymm0, ymm1
    sub     rcx, 4
    jg      loop_start

    ret
test_latency ENDP
END
Run Code Online (Sandbox Code Playgroud)
.CODE
test_latency PROC
    vxorpd  ymm0, ymm0, ymm0
    vxorpd  ymm1, ymm1, ymm1

loop_start:
    vmulpd  ymm0, ymm0, ymm1
    vmulpd  ymm0, ymm0, ymm1
    vmulpd  ymm0, ymm0, ymm1
    vmulpd  ymm0, ymm0, ymm1
    sub     rcx, 4
    jg …
Run Code Online (Sandbox Code Playgroud)

performance x86-64 intel cpu-architecture avx

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