[sdpb] 69/233: Generalized timer
Tobias Hansen
thansen at moszumanska.debian.org
Thu Mar 9 04:06:20 UTC 2017
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository sdpb.
commit 5191abbede33b7e2b1368159855a3729064e44df
Author: David Simmons-Duffin <dsd at neptune.sns.ias.edu>
Date: Mon Aug 11 14:08:49 2014 -0400
Generalized timer
---
src/main.cpp | 137 ++++++++++++++++++++++-------------------------------------
1 file changed, 50 insertions(+), 87 deletions(-)
diff --git a/src/main.cpp b/src/main.cpp
index 2ac9b06..f91483b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,6 +6,7 @@
#include <vector>
#include <assert.h>
#include <math.h>
+#include <map>
#include "omp.h"
#include "types.h"
#include "tinyxml2.h"
@@ -36,69 +37,31 @@ using boost::optional;
using boost::posix_time::second_clock;
using boost::timer::cpu_timer;
-class Timers {
+class Timer {
public:
- cpu_timer initializeSchurComplementSolver;
- cpu_timer choleskyXY;
- cpu_timer stepLength;
- cpu_timer predictorSolution;
- cpu_timer correctorSolution;
- cpu_timer bilinearPairings;
- cpu_timer computeSchurBlocks;
- cpu_timer schurBlocksCholesky;
- cpu_timer schurCholeskyUpdate;
- cpu_timer runSolver;
- cpu_timer csdComputeR;
- cpu_timer csdComputeZ;
- cpu_timer csdComputeSchurRHS;
- cpu_timer csdSolveSchurComp;
- cpu_timer csdComputedX;
- cpu_timer csdComputedY;
-
- Timers() {
- initializeSchurComplementSolver.stop();
- choleskyXY.stop();
- stepLength.stop();
- predictorSolution.stop();
- correctorSolution.stop();
- bilinearPairings.stop();
- computeSchurBlocks.stop();
- schurBlocksCholesky.stop();
- schurCholeskyUpdate.stop();
- runSolver.stop();
- csdComputeR.stop();
- csdComputeZ.stop();
- csdComputeSchurRHS.stop();
- csdSolveSchurComp.stop();
- csdComputedX.stop();
- csdComputedY.stop();
- }
+ std::map<std::string,cpu_timer> timers;
+
+ void start(const std::string &t) {
+ timers[t].resume();
+ }
- friend ostream& operator<<(ostream& os, const Timers& t);
+ void stop(const std::string &t) {
+ timers[t].stop();
+ }
+
+ friend ostream& operator<<(ostream& os, const Timer& t);
};
-ostream& operator<<(ostream& os, const Timers& t) {
- cout << "Time elapsed:" << endl;
- cout << " initializeSchurComplementSolver: " << t.initializeSchurComplementSolver.format();
- cout << " choleskyXY : " << t.choleskyXY.format();
- cout << " stepLength : " << t.stepLength.format();
- cout << " predictorSolution : " << t.predictorSolution.format();
- cout << " correctorSolution : " << t.correctorSolution.format();
- cout << " bilinearPairings : " << t.bilinearPairings.format();
- cout << " computeSchurBlocks : " << t.computeSchurBlocks.format();
- cout << " schurBlocksCholesky : " << t.schurBlocksCholesky.format();
- cout << " schurCholeskyUpdate : " << t.schurCholeskyUpdate.format();
- cout << " csdComputeR : " << t.csdComputeR.format();
- cout << " csdComputeZ : " << t.csdComputeZ.format();
- cout << " csdComputeSchurRHS : " << t.csdComputeSchurRHS.format();
- cout << " csdSolveSchurComp : " << t.csdSolveSchurComp.format();
- cout << " csdComputedX : " << t.csdComputedX.format();
- cout << " csdComputedY : " << t.csdComputedY.format();
- cout << " runSolver : " << t.runSolver.format();
+ostream& operator<<(ostream& os, const Timer& t) {
+ for (std::map<std::string,cpu_timer>::const_iterator it = t.timers.begin();
+ it != t.timers.end();
+ ++it) {
+ os << it->first << "\t:" << it->second.format();
+ }
return os;
}
-Timers timers;
+Timer timer;
template<class Iter, class T>
Iter binaryFind(Iter begin, Iter end, T val)
@@ -1801,13 +1764,13 @@ void addKernelColumn(const Matrix &FreeVarMatrixReduced,
void SDPSolver::initializeSchurComplementSolver(const BlockDiagonalMatrix &BilinearPairingsXInv,
const BlockDiagonalMatrix &BilinearPairingsY) {
- timers.computeSchurBlocks.resume();
+ timer.start("computeSchurBlocks");
computeSchurBlocks(sdp, BilinearPairingsXInv, BilinearPairingsY, SchurBlocks);
- timers.computeSchurBlocks.stop();
+ timer.stop("computeSchurBlocks");
- timers.schurBlocksCholesky.resume();
+ timer.start("schurBlocksCholesky");
choleskyDecomposition(SchurBlocks, SchurBlocksCholesky);
- timers.schurBlocksCholesky.stop();
+ timer.stop("schurBlocksCholesky");
for (unsigned int b = 0; b < SchurBlocks.blocks.size(); b++)
stabilizeCholesky(SchurBlocksCholesky.blocks[b],
@@ -1868,66 +1831,66 @@ void SDPSolver::computeSearchDirection(const Real &beta,
const Real &mu,
const bool correctorPhase) {
- timers.csdComputeR.resume();
+ timer.start("csdComputeR");
blockDiagonalMatrixScaleMultiplyAdd(-1, X, Y, 0, R);
if (correctorPhase)
blockDiagonalMatrixScaleMultiplyAdd(-1, dX, dY, 1, R);
R.addDiagonal(beta*mu);
- timers.csdComputeR.stop();
+ timer.stop("csdComputeR");
- timers.csdComputeZ.resume();
+ timer.start("csdComputeZ");
// Z = Symmetrize(X^{-1} (PrimalResidues Y - R))
blockDiagonalMatrixMultiply(PrimalResidues, Y, Z);
Z -= R;
blockMatrixSolveWithCholesky(XCholesky, Z);
Z.symmetrize();
- timers.csdComputeZ.stop();
+ timer.stop("csdComputeZ");
- timers.csdComputeSchurRHS.resume();
+ timer.start("csdComputeSchurRHS");
// dx_k = -d_k + Tr(F_k Z)
computeSchurRHS(sdp, dualResidues, Z, dx);
- timers.csdComputeSchurRHS.stop();
+ timer.stop("csdComputeSchurRHS");
- timers.csdSolveSchurComp.resume();
+ timer.start("csdSolveSchurComp");
// dx_N = B_{NN}^{-1} dx_N, dx_B = E^T dx_N
solveSchurComplementEquation(dx);
- timers.csdSolveSchurComp.stop();
+ timer.stop("csdSolveSchurComp");
- timers.csdComputedX.resume();
+ timer.start("csdComputedX");
// dX = R_p + sum_p F_p dx_p
constraintMatrixWeightedSum(sdp, dx, dX);
dX += PrimalResidues;
- timers.csdComputedX.stop();
+ timer.stop("csdComputedX");
- timers.csdComputedY.resume();
+ timer.start("csdComputedY");
// dY = Symmetrize(X^{-1} (R - dX Y))
blockDiagonalMatrixMultiply(dX, Y, dY);
dY -= R;
blockMatrixSolveWithCholesky(XCholesky, dY);
dY.symmetrize();
dY *= -1;
- timers.csdComputedY.stop();
+ timer.stop("csdComputedY");
}
SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters ¶meters,
const path outFile,
const path checkpointFile) {
printSolverHeader();
- timers.runSolver.resume();
+ timer.start("runSolver");
for (int iteration = 1; iteration <= parameters.maxIterations; iteration++) {
// Maintain the invariant x_B = g + E^T x_N
basicCompletion(dualObjectiveReduced, FreeVarMatrixReduced, basicIndices, nonBasicIndices, x);
- timers.choleskyXY.resume();
+ timer.start("choleskyXY");
choleskyDecomposition(X, XCholesky);
choleskyDecomposition(Y, YCholesky);
- timers.choleskyXY.stop();
+ timer.stop("choleskyXY");
- timers.bilinearPairings.resume();
+ timer.start("bilinearPairings");
computeInvBilinearPairingsWithCholesky(XCholesky, sdp.bilinearBases, bilinearPairingsWorkspace, BilinearPairingsXInv);
computeBilinearPairings(Y, sdp.bilinearBases, bilinearPairingsWorkspace, BilinearPairingsY);
- timers.bilinearPairings.stop();
+ timer.stop("bilinearPairings");
// d_k = c_k - Tr(F_k Y)
computeDualResidues(sdp, Y, BilinearPairingsY, dualResidues);
@@ -1951,33 +1914,33 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters ¶meters,
else if (isDualFeasible && status.dualObjective > parameters.maxDualObjective)
return DualFeasibleMaxObjectiveExceeded;
- timers.initializeSchurComplementSolver.resume();
+ timer.start("initializeSchurComplementSolver");
initializeSchurComplementSolver(BilinearPairingsXInv, BilinearPairingsY);
- timers.initializeSchurComplementSolver.stop();
+ timer.stop("initializeSchurComplementSolver");
Real mu = frobeniusProductSymmetric(X, Y)/X.dim;
// Mehrotra predictor solution for (dx, dX, dY)
Real betaPredictor = predictorCenteringParameter(parameters, reductionSwitch,
isPrimalFeasible && isDualFeasible);
- timers.predictorSolution.resume();
+ timer.start("predictorSolution");
computeSearchDirection(betaPredictor, mu, false);
- timers.predictorSolution.stop();
+ timer.stop("predictorSolution");
// Mehrotra corrector solution for (dx, dX, dY)
Real betaCorrector = correctorCenteringParameter(parameters, X, dX, Y, dY, mu,
isPrimalFeasible && isDualFeasible);
- timers.correctorSolution.resume();
+ timer.start("correctorSolution");
computeSearchDirection(betaCorrector, mu, true);
- timers.correctorSolution.stop();
+ timer.stop("correctorSolution");
- timers.stepLength.resume();
+ timer.start("stepLength");
// Step length to preserve positive definiteness
Real primalStepLength = stepLength(XCholesky, dX, StepMatrixWorkspace,
eigenvaluesWorkspace, QRWorkspace, parameters);
Real dualStepLength = stepLength(YCholesky, dY, StepMatrixWorkspace,
eigenvaluesWorkspace, QRWorkspace, parameters);
- timers.stepLength.stop();
+ timer.stop("stepLength");
printSolverInfo(iteration, mu, status, isPrimalFeasible, isDualFeasible,
primalStepLength, dualStepLength, betaCorrector);
@@ -1991,7 +1954,7 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters ¶meters,
Y += dY;
}
- timers.runSolver.stop();
+ timer.stop("runSolver");
return MaxIterationsExceeded;
}
@@ -2072,7 +2035,7 @@ void solveSDP(const path &sdpFile,
cout << "\nTerminated: " << reason << endl;
cout << "\nStatus:\n";
cout << solver.status << endl;
- cout << timers << endl;
+ cout << timer << endl;
// cout << "X = " << solver.X << ";\n";
// cout << "Y = " << solver.Y << ";\n";
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/sdpb.git
More information about the debian-science-commits
mailing list