У меня есть простой математический векторный класс с перегруженными операторами. Я хотел бы получить некоторые результаты синхронизации для моих операторов. Я могу легко раз мой + =, - =, * = и/= по времени следующий код:Оператор синхронизации +, оператор, оператор * и оператор/
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum += RandVector();
cout << sum << endl;
Тогда я могу вычесть время, необходимое для создания ИТЭР случайных векторов. В моих тестах Vector является 3-мерным, iter = 10 000 000.
Я пытался сделать нечто подобное с +, -, *, /:
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum = sum + RandVector();
cout << sum << endl;
Затем вычесть время, необходимое для создания ИТЭР случайных векторов и выполнять ITER задания, однако это дает «негативный» время, заставившее меня поверить, что компилятор каким-то образом оптимизирует операцию, или что-то странное происходит.
Я использую gcc-4.7.2 с использованием -O3 на компьютере Fedora Linux.
Вот мой код синхронизации:
clock_t start, k = clock();
do start = clock();
while(start == k);
F()();
clock_t end = clock();
double time = double(end-start)/double(CLOCKS_PER_SEC);
cout << time - time_iter_rand_v - time_iter_ass;
Здесь F является функцией объект, который выполняет код, указанный выше. time_iter_rand_v - это время, необходимое для создания случайных векторов iter, а time_iter_ass - время, затрачиваемое на операции присвоения итераций.
Мой вопрос заключается в том, как получить точное время только для функции «оператор +», а не для каких-либо назначений или генерации случайного вектора?
Как вы делаете время? – Gian
Я использую clock() от –
pippin1289
Компилятор не может заставить часы работать назад, не так ли? Очевидно, что ваш * код времени * неверен. – EJP