linux – 用于基准测试和时间戳计数器频率的rdtsc的准确性
作为基准测试任务的一部分,我正在研究可用于测量经过时间的不同机制.我已经完成了使用clock_gettime的工作,但我也确实对RDTSC指令进行了充分的研究和测试.我有几个相同的问题(基于我在几个在线线程上读到的内容): >在较新的处理器(> Pentium 4)上,TSC以系统上CPU的最大频率进行计时.它是否正确?在这种情况下,使用滴答数和频率来确定时间是否有效? 请注意,由于与之相关的各种问题(便携性,可靠性等),我没有使用RDTSC.这些问题只是为了提高我对TSC如何工作以及一般基准测试的理解. 解决方法根据英特尔的说法,不变的TSC意味着
但那是多少?好,
看起来好像他们希望它是品牌字符串的频率,但不知何故并不总是正确的..
但这可能不是很有帮助. TL; DR,以编程方式找到TSC速率是太费力了.您当然可以在自己的系统上轻松找到它,只是根据定时循环得到一个不准确的猜测,并采用“最接近的数字”.无论如何,它可能是品牌字符串中的数字.它已经在我测试过的所有系统上,但我没有测试过那么多.如果不是,那么它将是一些显着不同的速率,所以你肯定会知道.
是的,然而并非所有希望都失去了,使用TSC滴答和TSC费率(如果你以某种方式知道它)获得的时间将给出实际时间……几乎?这里通常会发出大量关于不可靠性的FUD.是的,RDTSC没有序列化(但您可以添加序列化指令). RDTSCP正在序列化,但在某些方面还不够(它不能太早执行,但它执行得太晚).但它不是你不能使用它们,你可以接受一个小错误,或阅读我下面链接的论文.
是的,不,也许 – 它将被同步,除非写入TSC.谁知道,有人可能会这样做.你无法控制.它也不会在不同的套接字之间同步. 最后,我并没有真正在基准测试的背景下购买关于RDTSC(P)的FUD.您可以根据需要对其进行序列化,TSC是不变的,您知道速率,因为它是您的系统.也没有任何替代方案,它基本上是高分辨率时间测量的来源,最终其他一切最终都会被使用.即使没有特殊的预防措施(但过滤了你的数据),大多数基准测试的准确性和精确度都很好,如果你需要更多,那么阅读How to Benchmark Code Execution Times on Intel? IA-32 and IA-64 Instruction Set Architectures,他们编写一个内核模块,这样他们就可以摆脱其他两个基准测试错误源.受到大量FUD,抢占和中断的影响. (编辑:应用网_常德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一
- 在Linux环境中获取类似Active Directory的系统需要什么?
- linux – 在raspbian(arm hf)上安装amd_64或i386软件包
- linux防火墙相关 iptables
- linux – 使用10GB内存的Haproxy和50k连接的100%CPU
- 如何在Linux上查找此抖动的来源?
- Linux VMware新添加网络适配器找不到配置文件问题
- system libzip must be upgraded to version gt;= 0.11
- 分析操作系统 IO 模式
- Linux平台上的写作者必备神器