私は、Honrerの方法とNaiveの方法の2つの異なる方法で多項式を評価するプログラムを持っています。私はそれぞれの実行時間を見ようとしていますが、どの順番で関数を呼び出すかによって、時間の変化が呼び出されます。たとえば、私はHornerメソッドを最初に置くと時間がかかります。私は最初に純粋な方法で試してみました。 Hornerメソッドは、素朴なメソッドが入れ子になったループを持つループが1つしかないので、はるかに高速でなければなりません。だから、私はそれがクロノ・ライブラリーの時計を使う方法でなければならないと思った。私はhigh_resolution_clockとsystem_clockの両方を試しましたが、同じことが起こります。どんな助け/コメントも歓迎されます。クロノの高解像度のクロックが矛盾した時間を与えていますか?
#include <cstdlib>
#include <iostream>
#include <chrono>
#include "Polynomial.h"
int main(int argc, char** argv) {
double c[5] = {5, 0, -3, 1, -8};
int degree = 4;
Polynomial obj(c, degree);
auto start = std::chrono::high_resolution_clock::now();
std::cout<<"Horner Evaluation: " << obj.hornerEval(-2)<<", ";
auto elapsed = std::chrono::high_resolution_clock::now() - start;
auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed).count();
std::cout<< duration << " nanoseconds "<<std::endl;
auto start2 = std::chrono::high_resolution_clock::now();
std::cout<<"Naive Evaluation: " << obj.naiveEval(-2)<<", ";
auto elapsed2 = std::chrono::high_resolution_clock::now() - start2;
auto duration2 = std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed2).count();
std::cout<< duration2 << " nanoseconds "<<std::endl;
}
かなりの時間をかけて 'std :: cout'と思っています。測定にI/O時間を含めるべきではありません。 –
1)最適化が有効になっていることを確認してください。 2)各ベンチマークを数千回実行する。 3)ベンチマークに標準時を含めないでください。 –
私はそれをしたと信じています...私は彼らが両方ともはるかに速く走って取り出した。ありがとう。 – Matt