c - 测量一组指令的准确时间(周期数)

标签 c assembly latency

我的驱动器上有一些读取不佳的扇区。我可以测量每个扇区所需的读取时间,然后比较好扇区和坏扇区的时间。

我可以使用处理器的定时器来进行测量。 如何用 C/汇编语言编写一个程序来测量读取每个扇区所需的确切时间?

所以程序应该是这样的:

Start the timer
Read the disk sector
Stop the timer
Read the time measured by the timer

最佳答案

最有用的功能是“rdtsc”指令(ReadD Time Stamp Counter),每次处理器的内部时钟递增时它都会递增。对于 3 Ghz 处理器,它每秒递增 30 亿次。它返回一个 64 位无符号整数,其中包含自处理器上电以来的时钟周期数。

显然,两次读数之间的差异在于执行中间代码序列所消耗的时钟周期数。对于 3 Ghz 机器,您可以使用以下任何算法转换为秒的部分:

(time_difference+150)/300 给出以 0.1 us(十分之一微秒)为单位的经过舍入的时间 (time_difference+1500)/3000 给出我们的四舍五入耗时(微秒) (time_difference+1500000/3000000 给出以 ms(毫秒)为单位的经过四舍五入的时间

0.1 us 算法是您可以使用的最精确值,无需针对读出开销进行调整。

关于c - 测量一组指令的准确时间(周期数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927769/

相关文章:

java - Apache Flink 的吞吐量和延迟

c++ - 在 Windows 中分配内存

c++ - 在 C/C++ 中包含未使用的头文件是否会影响性能?

c - 我未编译一些汇编代码。它有什么作用?

assembly - x86 汇编操作系统 hello world 未按预期工作

iPad 上的 Javascript 加载缓慢

输入 float 值时交互式菜单的 C 编程小问题

用于 C 风格向下转型的 C++ 转型

assembly - 确定寄存器值是否等于零的最简单方法是什么?

c++ - 测量网络延迟