相关疑难解决方法(0)

了解lfence对具有两个长依赖链的循环的影响,以增加长度

我正在玩这个答案的代码,稍微修改一下:

BITS 64

GLOBAL _start

SECTION .text

_start:
 mov ecx, 1000000

.loop:

 ;T is a symbol defined with the CLI (-DT=...)

 TIMES T imul eax, eax
 lfence
 TIMES T imul edx, edx


 dec ecx
jnz .loop

 mov eax, 60           ;sys_exit
 xor edi, edi
 syscall
Run Code Online (Sandbox Code Playgroud)

没有lfence我,我得到的结果与答案中的静态分析一致.

当我介绍一个单一 lfence我期望的CPU执行imul edx, edx的序列的第k个平行于迭代imul eax, eax的下一个(的序列K + 1个)迭代.
像这样的东西(调用一个imul eax, eax序列和dimul edx, edx一个): …

performance x86 assembly cpu-architecture perf

13
推荐指数
2
解决办法
472
查看次数

Cortex-A57可以双发出128位neon指令吗?

Cortex-A57 优化指南指出,大多数对 128 位向量数据进行操作的整数指令都可以双发出(第 24 页,整数基本 F0/F1,逻辑 F0/F1,执行吞吐量 2)。

然而,根据我们的内部(综合)基准测试,即使有大量可用的指令并行性,吞吐量似乎也仅限于 1 128 位 neon 整数指令(编写基准测试的目的是测试 128 位 neon 指令是否可以是双重发行的,所以这是我们关心的事情)。当将 50% 128 位指令与 50% 64 位指令混合时,我们能够实现每个时钟 1.25 条指令(仅霓虹灯整数算术,无加载/存储)。

使用 128 位 ASIMD/Neon 指令时是否需要采取特殊措施才能获得双发出吞吐量?

谢谢,克莱门斯

assembly arm pipeline

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

标签 统计

assembly ×2

arm ×1

cpu-architecture ×1

perf ×1

performance ×1

pipeline ×1

x86 ×1