如何测量C代码的运行时间比较

How can i measure running time comparison of C code?

本文关键字:代码 运行时间 比较 何测量 测量      更新时间:2023-10-16

示例代码1:

const int N=100000;
for(int j=0;j<N;j++){
    arr1[j] += a1[j];
    arr2[j] += a2[j];
}

示例代码2:

for(int j=0;j<N;j++){
    arr1[j] += a1[j];
}
for(int j=0;j<N;j++){
    arr2[j] += a2[j];
}

我需要计算这些代码块的运行时间。有什么工具(基准)可以计算吗?

如果您在包含它的系统下运行,您可以在time:下执行它

$ time ./benchmark1

$ time ./benchmark2
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
const int N=100000;
void time_first() {
  struct timeval start, mid, end;
  long mtime, seconds, useconds;    
  gettimeofday(&start, NULL);
  for(int j=0;j<N;j++){
    arr1[j] += a1[j];
    arr2[j] += a2[j];
  }  
  gettimeofday(&end, NULL);
  seconds  = end.tv_sec  - start.tv_sec;
  useconds = end.tv_usec - start.tv_usec;
  mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;
  printf("First elapsed time: %ld millisecondsn", mtime);
}
void time_second() {
  struct timeval start, mid, end;
  long mtime, seconds, useconds;    
  gettimeofday(&start, NULL);
  for(int j=0;j<N;j++){
    arr1[j] += a1[j];
  }
  for(int j=0;j<N;j++){
    arr2[j] += a2[j];
  }
  gettimeofday(&end, NULL);
  seconds  = end.tv_sec  - start.tv_sec;
  useconds = end.tv_usec - start.tv_usec;
  mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;
  printf("Second elapsed time: %ld millisecondsn", mtime);
}
int main() {
  initialize arr1, a1 and a2
  time_first();
  time_second();
  return 0;
}