第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

x86的MOV真的可以“免費”嗎?為什么我不能復(fù)制這個?

x86的MOV真的可以“免費”嗎?為什么我不能復(fù)制這個?

C
素胚勾勒不出你 2019-06-21 16:01:55
x86的MOV真的可以“免費”嗎?為什么我不能復(fù)制這個?我經(jīng)??吹接腥寺暦Q,由于注冊重命名,所以在x86中MOV指令可以是免費的。為了我的生命,我無法在一個測試用例中驗證這一點。每一個測試用例我都試著揭穿它。例如,下面是我正在用VisualC+編譯的代碼:#include <limits.h>#include <stdio.h>#include <time.h>int main(void){     unsigned int k, l, j;     clock_t tstart = clock();     for (k = 0, j = 0, l = 0; j < UINT_MAX; ++j)     {         ++k;         k = j;     // <-- comment out this line to remove the MOV instruction         l += j;     }     fprintf(stderr, "%d ms\n", (int)((clock() - tstart) * 1000 / CLOCKS_PER_SEC));     fflush(stderr);     return (int)(k + j + l);}這將為循環(huán)生成以下程序集代碼(請隨意生成此代碼,您當(dāng)然不需要VisualC+):LOOP:     add edi,esi     mov ebx,esi     inc esi     cmp esi,FFFFFFFFh     jc  LOOP現(xiàn)在我運行了幾次這個程序,當(dāng)MOV指令被刪除時,我觀察到了相當(dāng)一致的2%的差異:Without MOV      With MOV  1303 ms         1358 ms  1324 ms         1363 ms  1310 ms         1345 ms  1304 ms          1343 ms  1309 ms         1334 ms  1312 ms         1336 ms  1320 ms         1311 ms  1302 ms           1350 ms  1319 ms         1339 ms  1324 ms         1338 ms那又是怎么回事?為什么MOV不是“免費”的?對于x86來說,這個循環(huán)太復(fù)雜了嗎?有沒有單株有什么例子可以證明MOV像人們所說的那樣是自由的?如果是,那是什么?如果不是,為什么每個人都聲稱MOV是免費的?
查看完整描述

2 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊

這里有兩項小測試,我認(rèn)為這些測試最終證明了消除運動的證據(jù):

__loop1:
    add edx, 1
    add edx, 1
    add ecx, 1
    jnc __loop1

對決

__loop2:
    mov eax, edx
    add eax, 1
    mov edx, eax
    add edx, 1
    add ecx, 1
    jnc __loop2

如果mov在依賴鏈中添加一個循環(huán),預(yù)計第二個版本每次迭代大約需要4個周期。在我的Haswell上,每一次迭代都需要大約2個周期,如果沒有運動消除,這是不可能發(fā)生的。


查看完整回答
反對 回復(fù) 2019-06-21
  • 2 回答
  • 0 關(guān)注
  • 621 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號