clock()可以用作可靠的API来测量cpu执行代码片段所花费的时间吗?当使用times()/ clock()验证时,两者似乎都不能精确测量所花费的cpu时间.
首先,可以使用API clock()/ times()来测量函数/代码片段的执行时间,如下例所示?有没有更好更可靠的选择?该机制适用于Linux,HP-UX,IBM-AIX和Sun Solaris,因为我们需要测量(和比较)所有这些平台上的一段代码的性能.
请建议.另外,如果我遗漏了任何微不足道的事,请告诉我.
bbb@m_001:/tmp/kk1$./perf_clock 102400
{clock(): S 0 E 0 D 0.0000000000}
bbb@m_001:/tmp/kk1$./perf_clock 204800
{clock(): S 0 E 10000 D 0.0100000000}
bbb@m_001:/tmp/kk1$cat perf_clock.c
#include
#include
#include
#include
void test_clock(char* sbuf,int* len){
clock_t start,end; int i=0;
start = clock();
while(i++ < 500) memset((char*)sbuf,*len);
end = clock();
printf("{clock(): S %10lu E %10lu D %15.10f}\n",start,end,(end-start)/(double) CLOCKS_PER_SEC);
}
int main(int argc,char* argv[])
{
int len=atoi(argv[1]);
char *sbuf=(char*)malloc(len);
test_clock(sbuf,&len);
free(sbuf); return 0;
}
结果似乎说memset()一个100 KB的块,500次,没有时间花.还是说它在几微秒内无法测量?
实际上,它不是memset()而是另一个函数[准备一个大小约1MB的巨大结构,mallocs这个结构的副本,Oracle DB选择并使用来自DB的数据填充这些结构]我试图测量.即使这显示0滴答,这也让我感到困惑.
谢谢!