for 루프를 벤치마킹하고 싶습니다. for 루프의 변수를 100 씩 증가시키고 그에 따라 시간을 측정하기로 결정했습니다.벤치마킹 (for 루프의 실행 시간) : for 루프의 한계가 증가함에 따라 단조 증가 함수를 사용하지 말아야합니다.
#include <cstdio>
#include <ctime>
#include <time.h>
#include <iostream>
#include <random>
#include <iomanip> // std::setprecision
using namespace std;
double difference(timespec start, timespec end);
int main()
{
timespec time1, time2;
for(int limit = 0; x < 100000; limit+= 100)
{
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
int temp = 0;
for (int i = 0; i< limit; i++)
temp+=temp;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
std::cout << std::fixed;
std::cout << std::setprecision(5);
cout<<x <<" " << difference(time1,time2)<<endl;
}
return 0;
}
double difference(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return (temp.tv_sec + temp.tv_nsec)/1000000000.00;
}
그래프
y 축은 x 축에는 반복의 증가하는 한계를 나타내는 시간 (초)을 나타낸다.
가설 : 증가하는 제한으로 시간이 증가해야합니다. 우리는 curvse이 otherswise을 보여주는 엄격하게 증가 기능을
이 있어야합니다. 왜 0.00001
초 걸려서 5300
번 걸리고 0.00002
초 걸리면 루프가 5400
번 걸리는 겁니까? 그래프에서 볼 수 있듯이 우리가 이걸 가지고있는 시간이 많이 있습니다.
내가 어디서부터 시작해야할지조차 모른다는 것은 너무 많은 것들이 잘못되었습니다. 1) 아마도 최적화 컴파일을하고있을 것입니다. 그렇지 않으면 DCE로 인해 0에 가까운 평평한 선이됩니다. 2) 부호있는 정수 오버 플로우는 UB입니다. 이것은 보통 무해하기는하지만 일부 컴파일러 (즉 GCC)는 예기치 않은 일을하는 것으로 알려져 있습니다. 3) 벤치 마크 루프가 너무 작아 의미가 없습니다. 작은 제한의 경우 루프를 실행하는 것보다 시간이 오래 걸립니다. – Mysticial
측정하는 값에서 약간의 소음이 데이터에 들어올 것으로 예상됩니다. –