LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

функция получения времени занимают много времени

Сколько именно?

#include <stdio.h>
#include <time.h>
#include <stdint.h>

#define N 1000

int main() {
  struct timespec ts;
  uint64_t prev, curr, diff[N];
  double avg;
  int i;

  prev = 0;
  avg = 0;
  for (i = -1; i < N; ++i) {
    clock_gettime(CLOCK_MONOTONIC, &ts);
    curr = ts.tv_sec * 1000000000 + ts.tv_nsec;
    if (i >= 0) {
      diff[i] = curr - prev;
    }
    prev = curr;
  }
  for (i = 0; i < N; ++i) {
    printf("diff[%d] = %.2fs : %zu\n", i, diff[i] / 1000000000.0, diff[i]);
    avg += diff[i];
  }
  avg /= N;
  printf("diff[avg] = %.2fs : %zu\n", avg  / 1000000000.0, (uint64_t)avg);
  return 0;
}

Мой результат

1000 diff[avg] = 0.00s : 87
1000000 diff[avg] = 0.00s : 10

Довольно быстрая функция.

Исправление MOPKOBKA, :

функция получения времени занимают много времени

Сколько именно?

#include <stdio.h>
#include <time.h>
#include <stdint.h>

#define N 1000

int main() {
  struct timespec ts;
  uint64_t prev, curr, diff[N];
  double avg;
  int i;

  prev = 0;
  avg = 0;
  for (i = -1; i < N; ++i) {
    clock_gettime(CLOCK_MONOTONIC, &ts);
    curr = ts.tv_sec * 1000000000 + ts.tv_nsec;
    if (i >= 0) {
      diff[i] = curr - prev;
    }
    prev = curr;
  }
  for (i = 0; i < N; ++i) {
    printf("diff[%d] = %.2fs : %zu\n", i, diff[i] / 1000000000.0, diff[i]);
    avg += diff[i];
  }
  avg /= N;
  printf("diff[avg] = %.2fs : %zu\n", avg  / 1000000000.0, (uint64_t)avg);
  return 0;
}

Мой результат

1000 diff[avg] = 0.00s : 87
1000000 diff[avg] = 0.00s : 10

Исходная версия MOPKOBKA, :

функция получения времени занимают много времени

Сколько именно?

#include <stdio.h>
#include <time.h>
#include <stdint.h>

#define N 1000

int main() {
  struct timespec ts;
  uint64_t prev, curr, diff[N];
  double avg;
  int i;

  prev = 0;
  avg = 0;
  for (i = -1; i < N; ++i) {
    clock_gettime(CLOCK_MONOTONIC, &ts);
    curr = ts.tv_sec * 1000000000 + ts.tv_nsec;
    if (i >= 0) {
      diff[i] = curr - prev;
    }
    prev = curr;
  }
  for (i = 0; i < N; ++i) {
    printf("diff[%d] = %.2fs : %zu\n", i, diff[i] / 1000000000.0, diff[i]);
    avg += diff[i];
  }
  avg /= N;
  printf("diff[avg] = %.2fs : %zu\n", avg  / 1000000000.0, (uint64_t)avg);
  return 0;
}

Мой результат

diff[avg] = 0.00s : 87