簡體   English   中英

英特爾酷睿i7處理器和緩存行為

[英]Intel Core i7 processor and cache behaviour

我已經在英特爾酷睿i7 CPU(具有32KB L1數據高速緩存和64B L1高速緩存行大小)上運行以下匯編代碼:(對1000萬個元素(每個4字節)的數組進行1000次迭代)

main:
.LFB0:
    .cfi_startproc
    mov edx, 1000
    jmp .L2
.L3:
    mov ecx, DWORD PTR v[0+eax*4]
    add eax, 1

    cmp eax, 10000000
    jl  .L3
    sub edx, 1
    je  .L4
.L2:
    mov eax, 0
    jmp .L3
.L4:
    mov eax, 0
    ret
    .cfi_endproc

Perf提供以下統計信息:

10,135,716,950      L1-dcache-loads
601,544,266      L1-dcache-load-misses     #    5.93% of all L1-dcache hits
4.747253821 seconds time elapsed

這是完全有道理的,因為我正在訪問內存中的1 000 * 10 000 000 = 10 000 000 000個元素,並且高速緩存行為64B(向量中的一個元素為4 B),這意味着每16個元素會發生一次L1高速緩存未命中(因此,大約有625 000 000 L1高速緩存未命中)。

現在,我已經“展開”了循環的一部分,代碼是:

    .cfi_startproc
    mov     edx, 1000
    jmp     .L2
.L3:
    mov     ecx, DWORD PTR v[0+eax*4]
    mov     ecx, DWORD PTR v[0+eax*4 + 4]
    mov     ecx, DWORD PTR v[0+eax*4 + 8]
    mov     ecx, DWORD PTR v[0+eax*4 + 12]

    add     eax, 4

    cmp     eax, 2500000
    jl      .L3
    sub     edx, 1
    je      .L4
.L2:
    mov     eax, 0
    jmp     .L3
.L4:
    mov     eax, 0
    ret
    .cfi_endproc

Perf如何提供以下統計信息:

2,503,436,639      L1-dcache-loads
123,835,666      L1-dcache-load-misses     #    4.95% of all L1-dcache hits
0.629926637 seconds time elapsed

我不明白為什么?

1)因為我正在訪問相同數量的數據,所以L1緩存的負載更少了?

2)代碼運行速度比第一個版本快6倍嗎? 我知道這與亂序執行和超標量執行有關,但是我無法詳細解釋(我想確切地了解是什么原因導致了這種加速)。

壞消息-您在第二個中有一個錯誤;)

原始碼

.L3:
    mov ecx, DWORD PTR v[0+eax*4]
    add eax, 1
    cmp eax, 10000000
    jl  .L3

第二版

.L3:
    mov     ecx, DWORD PTR v[0+eax*4]
    mov     ecx, DWORD PTR v[0+eax*4 + 4]
    mov     ecx, DWORD PTR v[0+eax*4 + 8]
    mov     ecx, DWORD PTR v[0+eax*4 + 12]
    add     eax, 4
    cmp     eax, 2500000  <- here
    jl      .L3

在這兩種情況下,您都需要加載1000萬個元素。 兩種情況下訪問的最大元素地址必須相同,對嗎?

因此,在第一種情況下,最大地址為:

(10.000.000-1)*4 = 39.999.996

第二:

(2.500.000-4)*4+12 = 9.999.996

少四倍

只需將第二個示例修復為cmp eax, 10000000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM