| 68 | |
| 69 | template <typename TLRSolver> |
| 70 | void SpeedBenchmark(const TPool& originalPool) { |
| 71 | TDeviationCalculator speedTest; |
| 72 | |
| 73 | static const size_t runsCount = 1000; |
| 74 | for (size_t runNumber = 0; runNumber < runsCount; ++runNumber) { |
| 75 | TLRSolver solver; |
| 76 | TLinearModel model; |
| 77 | { |
| 78 | TSimpleTimer timer; |
| 79 | for (const TInstance& instance : originalPool) { |
| 80 | solver.Add(instance.Features, instance.Goal, instance.Weight); |
| 81 | } |
| 82 | model = solver.Solve(); |
| 83 | |
| 84 | speedTest.Add(timer.Get().MicroSeconds()); |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | const double multiplier = 1e-6; |
| 89 | Cout << Sprintf("%.5lf +/- %.5lf: ", speedTest.GetMean() * multiplier, speedTest.GetStdDev() * multiplier) << TypeName<TLRSolver>() << Endl; |
| 90 | } |
| 91 | |
| 92 | int main(int argc, const char** argv) { |
| 93 | for (int taskNumber = 1; taskNumber < argc; ++taskNumber) { |