3

我有一个函数,该函数需要根据机器上的负载进行调整,以准确消耗传递给函数的墙时间。该系数可以根据机器的负载而变化。

void execute_for_wallTime(int factor, int wallTime) 
{
   double d = 0;
   for (int n = 0; n<factor; ++n)
      for (int m = 0; wall_time; ++m)
        d += d * n*m;
}

有没有办法动态检查机器上的负载并相应地调整因子以消耗传递给函数的确切时间?

从文件中读取挂起时间并将其传递给此函数。这些值以微秒为单位,例如:

73
21
44
4

1 回答 1

3

根据OP评论:

#include <sys/time.h>

int deltaTime(struct timeval *tv1, struct timeval *tv2){
    return ((tv2->tv_sec - tv1->tv_sec)*1000000)+ tv2->tv_usec - tv1->tv_usec;
}
//might require longs anyway. this is time in microseconds between the 2 timevals

void execute_for_wallTime(int wallTime) 
{
    struct timeval  tvStart, tvNow;
    gettimeofday(&tvStart, NULL);

    double d = 0;
    for (int m = 0; wall_time; ++m){
      gettimeofday(&tvNow, NULL);
      if(deltaTime(tvStart,tvNow) >=wall_time) { // if timeWall is 1000 microseconds,
                                                 // this function returns after
                                                 // 1000 microseconds (and a
                                                 // little more due to overhead)
           return;
      }
      d += d*m;
   }
}

现在根据您的性能计算,通过在此函数之外的逻辑中增加或减少 timeWall 来处理它。这个函数只运行 timeWall 微秒。

对于 C++ 风格,您可以使用std::chrono

我必须评论说我会以不同的方式处理事情,例如通过调用 nanosleep()。除非在实际代码中您打算用实际操作替换这些“填充物”,否则这些操作毫无意义。在这种情况下,您可能会考虑线程和调度程序。除了时钟调用增加开销。

于 2018-05-20T00:01:15.927 回答