我的驱动器上有一些读取不佳的扇区。我可以测量每个扇区所需的读取时间,然后比较好扇区和坏扇区的时间。
我可以使用处理器的定时器来进行测量。 如何用 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/