linux c 时间对比函数,什么是计算时间变化的最快linux C时间函数?眼看与clock_gettime和gettimeofday的...

long getTiming()

{

long start = someGetTimeFunction();

executeSomething();

return someTimeFunction() - start;

}

无论时间功能我用的东西表现不佳,这似乎增加显著的开销。我试过gettimeofday(),clock_gettime()与CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID和CLOCK_THREAD_CPUTIME_ID,我试过了一些装配,我发现here致电rdtsc。

随着各50万来看,这些都是他们的成本:

[INFO] [ OK ] X.TimeGetTimeOfDay (1165 ms)

[INFO] [ OK ] X.TimeRdtscl (1208 ms)

[INFO] [ OK ] X.TimeMonotomicGetTime (1536 ms)

[INFO] [ OK ] X.TimeProcessGetTime (1575 ms)

[INFO] [ OK ] X.TimeThreadGetTime (1522 ms)

这是在MacBook Pro上运行CentOS 5的虚框VM。

由于我需要计算增量,我不需要绝对时间。并且不存在比较在smp系统上的不同核心或CPU上获得的时间的风险。

我可以做得更好吗?

这里是我的测试案例:

TEST(X, TimeGetTimeOfDay)

{

for (int i = 0; i < 500000; i++) {

timeval when;

gettimeofday(&when, NULL);

}

}

TEST(X, TimeRdtscl)

{

for (int i = 0; i < 500000; i++) {

unsigned long long when;

rdtscl(&when);

}

}

TEST(X, TimeMonotomicGetTime)

{

for (int i = 0; i < 500000; i++) {

struct timespec when;

clock_gettime(CLOCK_MONOTONIC, &when);

}

}

TEST(X, TimeProcessGetTime)

{

for (int i = 0; i < 500000; i++) {

struct timespec when;

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &when);

}

}

TEST(X, TimeThreadGetTime)

{

for (int i = 0; i < 500000; i++) {

struct timespec when;

clock_gettime(CLOCK_THREAD_CPUTIME_ID, &when);

}

}

下面是我从here得到了RDTSC。

inline void rdtscl(unsigned long long *t)

{

unsigned long long l, h;

__asm__ __volatile__ ("rdtsc" : "=a"(l), "=d"(h));

*t = ((unsigned long long)l)|(((unsigned long long)h) <<32);

}

2014-09-21

marathon

+3

所以你观察**的开销高达每个呼叫** 0.00315ms。如果某物快得多,甚至接近那个执行时间,那么它真的很快。你确定这实际上有问题吗? (我不确定普通个人电脑实际上可以使用更小的时间间隔。) –

2014-09-21 00:44:43

+1

您应该阅读[时间(7)](http://man7.org/linux/man-pages/man7/time.7.html)并安排您的基准测试功能运行时间超过100毫秒。 –

2014-09-21 00:50:56

+0

@BaummitAugen我计时的功能差不多一样快,而且他们确实在工作。所以通过计时这些,我增加了100%的开销。我希望能做得更好。 –

2014-09-21 15:41:33

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值