[問題] for迴圈執行時間差異(64bit vs 32bit)

看板C_and_CPP (C/C++)作者 (豪)時間6年前 (2019/06/24 22:38), 6年前編輯推噓3(303)
留言6則, 5人參與, 6年前最新討論串1/1
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Linux - terminal 問題(Question): 在32bit 64bit執行下列迴圈 發現在32bit花了15ms, 在64bit卻只要3ms 不明白主要是什麼機制造成, 是因為data aligment? 網路上也找不太到資料, 還請大大解惑, 感謝 此外如果想要在32bit上加速執行時間, 有什麼方法或編譯方式可以用? int y = 16500; for (int i = 0; i < 1000; ++i) { ptr1 += (y >> 16)*2000; for (int j = 0; j < 2000 ; j += 2) { ptr2[1] = ptr2[0] = ptr1[0]; ptr1 += 1; ptr2 += 2; } ptr2 += 4000; y += 33000; } 註: uint8_t *ptr1 , uint8_t *ptr2 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.228.173 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1561387124.A.C4C.html ※ 編輯: flyaway339 (223.140.228.173 臺灣), 06/24/2019 22:41:13 ※ 編輯: flyaway339 (223.140.228.173 臺灣), 06/24/2019 22:42:00 ※ 編輯: flyaway339 (223.140.228.173 臺灣), 06/24/2019 22:43:31 ※ 編輯: flyaway339 (223.140.228.173 臺灣), 06/24/2019 22:44:23

06/24 22:58, 6年前 , 1F
我是沒有實際去跑,但應該是被編譯器最佳化了
06/24 22:58, 1F

06/24 22:59, 6年前 , 2F
程式本身是否有寫錯,y>>16 結果應該一直是 0
06/24 22:59, 2F
y 會一直累加上去,後面不會是0

06/25 00:21, 6年前 , 3F
你的CPU是32還64
06/25 00:21, 3F
64

06/25 00:34, 6年前 , 4F
ptr2的跨幅還蠻大的, virtual memory部分應該做了不少事?
06/25 00:34, 4F
ptr1也是,會要一直位移 ※ 編輯: flyaway339 (223.137.124.192 臺灣), 06/25/2019 12:10:30 ※ 編輯: flyaway339 (223.137.124.192 臺灣), 06/25/2019 12:12:02

06/26 11:49, 6年前 , 5F
可能因為32程式在64系統上要轉換過才能用,keyword WOW64
06/26 11:49, 5F

07/03 00:00, 6年前 , 6F
編譯時個別帶什麼flag?
07/03 00:00, 6F
文章代碼(AID): #1T4E1qnC (C_and_CPP)
文章代碼(AID): #1T4E1qnC (C_and_CPP)