[问题] for循环执行时间差异(64bit vs 32bit)

楼主: flyaway339 (豪)   2019-06-24 22:38:42
编译器(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
作者: Schottky (顺风相送)   2019-06-24 22:58:00
我是没有实际去跑,但应该是被编译器最佳化了程式本身是否有写错,y>>16 结果应该一直是 0
作者: longlongint (华哥尔)   2019-06-25 00:21:00
你的CPU是32还64
作者: kokal (细菌)   2019-06-25 00:34:00
ptr2的跨幅还蛮大的, virtual memory部分应该做了不少事?
作者: atrix (班班)   2019-06-26 11:49:00
可能因为32程式在64系统上要转换过才能用,keyword WOW64
作者: dces4212 (flawless)   2019-07-03 00:00:00
编译时个别带什么flag?

Links booklink

Contact Us: admin [ a t ] ucptt.com