Функция, потребляющая время на стене в течение определенного времени - PullRequest
0 голосов
/ 20 мая 2018

У меня есть функция, коэффициент которой необходимо отрегулировать в соответствии с нагрузкой на машину, чтобы она точно потребляла время стены, переданное этой функции.Коэффициент может варьироваться в зависимости от нагрузки машины.

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

1 Ответ

0 голосов
/ 20 мая 2018

Согласно комментарию ОП:

#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 ().Операции не имеют смысла, если только в реальном коде вы не планируете заменять эти «заполнители» фактическими операциями.В этом случае вы можете рассмотреть потоки и планировщики.Помимо часов звонки добавить накладные расходы.

...