测量一组指令的确切时间(周期数)

时间:2011-02-07 23:08:48

标签: c assembly latency

我的驱动器上有一些扇区读数很差。我可以衡量每个部门所需的阅读时间,然后比较好部门和坏部门的时间。

我可以使用处理器的计时器进行测量。 如何在C / Assembly中编写一个程序来衡量每个扇区读取的确切时间?

所以程序将是这样的:

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

2 个答案:

答案 0 :(得分:5)

最有用的功能是“rdtsc”指令(ReaD时间戳计数器),每当处理器的内部时钟递增时,该指令就会递增。对于3 Ghz处理器,它每秒增加30亿次。它返回一个64位无符号整数,包含自处理器上电以来的时钟周期数。

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

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

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

答案 1 :(得分:3)

在C中,最有用的函数是time.h中的clock()。

要计时,请在它周围调用clock(),如下所示:

clock_t start, end;
float elapsed_time;
start = clock();
read_disk_sector();
end = clock();
elapsed_time = (float)(end - start) / (float)CLOCKS_PER_SEC;
printf("Elapsed time: %f seconds\n", elapsed_time);

此代码打印出read_disk_sector()函数调用所用的秒数。

您可以在此处详细了解时钟功能: http://www.cplusplus.com/reference/clibrary/ctime/clock/