我想问一下需要计算地址的mov
指令,即(在at&t语法中)
mov i(r, r, i), reg
或mov reg, i(r, reg, i)
是否必须在端口1上执行,因为它们实际上是带有3个操作数+ MOV的LEA,或者它们可以在端口0156上自由执行。
如果它们确实在端口1上执行LEA部分,那么一旦地址计算完成,端口1是否会解除阻塞,还是整个内存加载需要先完成。
在ICL上,似乎p7可以执行索引地址模式?
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#define BENCH_ATTR __attribute__((noinline, noclone, aligned(4096)))
#define TERMS 3
void BENCH_ATTR
test_store_port() {
const uint32_t N = (1 << 29);
uint64_t dst, loop_cnt;
uint64_t src[16] __attribute__((aligned(64)));
asm volatile(
"movl %[N], %k[loop_cnt]\n\t"
".p2align 5\n\t"
"1:\n\t"
"movl %k[loop_cnt], %k[dst]\n\t"
"andl $15, %k[dst]\n\t"
#if TERMS == 3
"movl %k[dst], (%[src], %[dst], 4)\n\t"
#else
"movl %k[dst], (%[src])\n\t"
#endif
"decl %k[loop_cnt]\n\t"
"jnz 1b\n\t"
: [ dst ] "+r"(dst), [ loop_cnt ] "+r"(loop_cnt)
: [ N ] "i"(N), [ src ] "r"(src), "m"(*((const uint32_t(*)[16])src))
: "cc");
}
int
main(int argc, char ** argv) {
test_store_port();
}
#define TERMS 3
的结果:
perf stat -e uops_dispatched.port_2_3 -e uops_dispatched.port_7_8 -e uops_issued.any -e cpu-cycles ./bsf_dep
Performance counter stats for './bsf_dep':
297,191 uops_dispatched.port_2_3
537,039,830 uops_dispatched.port_7_8
2,149,098,661 uops_issued.any
761,661,276 cpu-cycles
0.210463841 seconds time elapsed
0.210366000 seconds user
0.000000000 seconds sys
#define TERMS 1
的结果:
perf stat -e uops_dispatched.port_2_3 -e uops_dispatched.port_7_8 -e uops_issued.any -e cpu-cycles ./bsf_dep
Performance counter stats for './bsf_dep':
291,370 uops_dispatched.port_2_3
537,040,822 uops_dispatched.port_7_8
2,148,947,408 uops_issued.any
761,476,510 cpu-cycles
0.202235307 seconds time elapsed
0.202209000 seconds user
0.000000000 seconds sys
mov [r14+r13*1+0x4],r8d
。他们显然没有测试缩放索引,但我希望它是相同的。特别是如果端口7和端口8没有单独的计数器,希望它们是相同的。 - undefined[reg + 0..2047]
这种特殊情况当reg本身是另一个加载操作的结果时,一切都是始终5c的总负载使用延迟。(或者在Ice Lake上,似乎已经取消了这种特殊情况,现在始终是5c。)但即使在ICL之前,CPU只在指针追踪时尝试乐观地跳过关键路径上的AGU加法器,这是加载延迟最关键的情况。 - undefined==
比较的命中都会导致将相应的数据混合到输出中。https://courses.cs.washington.edu/courses/cse378/09wi/lectures/lec16.pdf#page=19 上有一个示例图表。 - undefined