|
论证不了。 不同 CPU 架构的流水线处理方式不一样,以及对于相同的指令,不同 CPU 架构执行该指令所需周期不一样。 这些指令前面如果有前置的指令,那么这些前置的指令会对这些指令的实际执行产生影响,比如指令屏障是否存在等。 唯一可以明确的是你提出的第二个例子的指令数量多一条、总的指令字节数多一些,CPU 在内部转换 μ码 的时候存在耗时差异,但是因为实际的 μ码的执行情况会有更大的耗时差异,最终结论还是无法明确的。 |
谢谢! 那只好作死跑循环 测试下哪个快。。。 哈哈 |
tlwh163 发表于 2024-2-26 12:14 这样做是行不通的,你的代码在某个项目里跑死循环测出来 1 快 2 慢,可能换一个项目就会变成 2 快 1 慢。 正确做法是优先考虑算法优化,然后再考虑硬件设备相关的优化,最后才是汇编指令优化。 |
计算指令执行速度用rdtsc,执行速度分首次执行和循环执行,两者是有差别的 |
AyalaRs 发表于 2024-2-26 17:06 而且测速时必须锁定使用的 CPU 的特定某个核心才可以,因为不同的 CPU 核心的 tsc 计数是从不同的时间开始的,而 Windows/Linux 等现代操作系统会使用不同的 CPU 核心轮流执行你的程序代码。所以在 Windows 上可以使用以下 API 来指定你要使用的具体的 CPU 核心:
|
本帖最后由 tlwh163 于 2024-2-27 19:06 编辑 ASM rdtsc push eax .... rdtsc pop edx sub eax, edx retn End Asm 是这个样子? 试了下 中间有几条比较简单的指令 得到的结果是 24 。。。 挺稳定的 执行了几次都是24 |
tlwh163 发表于 2024-2-27 19:03 要先序列化流水线(比如用 |
tangptr@126.com 发表于 2024-2-27 23:49 以前测试过,单次执行时rdtscp比较可靠,循环执行时同指令的tsc在同工艺不同处理器的数值是一致的,用rdtsc和rdtscp的差值也是固定的,tsc在虚拟机是不准的 |
|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图
GMT+8, 2024-5-9 07:54 , Processed in 0.037211 second(s), 30 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2024 Discuz! Team.