相关疑难解决方法(0)

32 字节对齐例程不适合 uops 缓存

KbL i7-8550U

我正在研究 uops-cache 的行为并遇到了关于它的误解。

如英特尔优化手册2.5.2.2(我的)中所述:

解码的 ICache 由 32 组组成。每组包含八种方式。 每路最多可容纳六个微操作。

——

Way 中的所有微操作表示在代码中静态连续的指令,并且它们的 EIP 位于相同的对齐 32 字节区域内。

——

最多三种方式可以专用于相同的 32 字节对齐块,从而允许在原始 IA 程序的每个 32 字节区域中缓存总共 18 个微操作。

——

无条件分支是 Way 中的最后一个微操作。


情况1:

考虑以下例程:

uop.h

void inhibit_uops_cache(size_t);
Run Code Online (Sandbox Code Playgroud)

uop.S

align 32
inhibit_uops_cache:
    mov edx, esi
    mov edx, esi
    mov edx, esi
    mov edx, esi
    mov edx, esi
    mov edx, esi
    jmp decrement_jmp_tgt
decrement_jmp_tgt:
    dec rdi
    ja inhibit_uops_cache ;ja is intentional to avoid Macro-fusion
    ret
Run Code Online (Sandbox Code Playgroud)

为了确保例程的代码实际上是 32 字节对齐的,这里是 asm …

performance x86 assembly intel cpu-architecture

7
推荐指数
1
解决办法
483
查看次数

标签 统计

assembly ×1

cpu-architecture ×1

intel ×1

performance ×1

x86 ×1