Я хочу сравнить цикл 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;
}
График
Ось ординат представляет время в секундах, ось х представляет собой возрастающую предел итерации.
Гипотеза: с увеличением предела время должно увеличиваться. Мы должны иметь строго возрастающую функцию
curvse показывает otherswise. Зачем нужно 0.00001
секунд до цикла 5300
раз и 0.00002
секунд до цикла 5400
раз. Как вы можете видеть на графике, есть много раз, когда у нас есть эта вещь.
Здесь так много ошибок, что я даже не знаю, с чего начать. 1) Вероятно, вы компилируете с отключением оптимизации. В противном случае это будет плоская линия вблизи нуля из-за DCE. 2) Подписанное целочисленное переполнение - UB. Хотя это обычно безобидно, некоторые компиляторы (а именно GCC), как известно, делают с ним неожиданные вещи. 3) Ваша контрольная петля слишком мала, чтобы иметь смысл. Для меньших пределов времени требуется больше времени, чем для запуска цикла. – Mysticial
При значениях, которые вы измеряете, вы должны ожидать некоторого шума, чтобы ползти в данные. –