[sdpb] 93/233: Removed timing information, made a few small fixes

Tobias Hansen thansen at moszumanska.debian.org
Thu Mar 9 04:06:23 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 fd8315bbde51d6586d8b3f2f3d87dea4c522fd19
Author: David Simmons-Duffin <dsd at minerva.sns.ias.edu>
Date:   Sat Oct 18 22:19:35 2014 -0400

    Removed timing information, made a few small fixes
---
 src/SDPSolver.cpp    | 98 ++++++++++------------------------------------------
 src/SDPSolverIO.cpp  |  1 +
 src/mpack/Rgetrf.cpp | 13 -------
 3 files changed, 19 insertions(+), 93 deletions(-)

diff --git a/src/SDPSolver.cpp b/src/SDPSolver.cpp
index a2c8524..c50d625 100644
--- a/src/SDPSolver.cpp
+++ b/src/SDPSolver.cpp
@@ -486,14 +486,9 @@ Real stepLength(BlockDiagonalMatrix &XCholesky,
 void SDPSolver::initializeSchurComplementSolverOld(const BlockDiagonalMatrix &BilinearPairingsXInv,
                                                    const BlockDiagonalMatrix &BilinearPairingsY) {
 
-  timers["computeSchurBlocks          "].resume();
   computeSchurBlocks(sdp, BilinearPairingsXInv, BilinearPairingsY, SchurBlocks);
-  timers["computeSchurBlocks          "].stop();
-  timers["choleskyDecomposeSchurBlocks"].resume();
   choleskyDecompositionStabilized(SchurBlocks, SchurBlocksCholesky, schurStabilizeIndices, schurStabilizeLambdas);
-  timers["choleskyDecomposeSchurBlocks"].stop();
 
-  timers["prepare U                   "].resume();
   // SchurUpdateLowRank = {{- 1, 0}, {E, G}}
   SchurUpdateLowRank.setCols(sdp.FreeVarMatrix.cols);
   SchurUpdateLowRank.copyFrom(sdp.FreeVarMatrix);
@@ -506,46 +501,28 @@ void SDPSolver::initializeSchurComplementSolverOld(const BlockDiagonalMatrix &Bi
   }
 
   // SchurUpdateLowRank = SchurBlocksCholesky^{-1} {{- 1, 0}, {E, G}}
-  timers["prepare U: schurblocksolve  "].resume();
   blockMatrixLowerTriangularSolve(SchurBlocksCholesky, SchurUpdateLowRank);
-  timers["prepare U: schurblocksolve  "].stop();
-  timers["prepare U                   "].stop();
 
-  timers["prepare Q                   "].resume();
-  timers["prepare Q: setRowsCols      "].resume();
   // Q = SchurUpdateLowRank^T SchurUpdateLowRank - {{0,0},{0,1}}
   Q.setRowsCols(SchurUpdateLowRank.cols, SchurUpdateLowRank.cols);
-  timers["prepare Q: setRowsCols      "].stop();
-  timers["prepare Q: matrixSquare     "].resume();
   matrixSquare(SchurUpdateLowRank, Q);
-  timers["prepare Q: matrixSquare     "].stop();
   int stabilizerStart = FreeVarMatrixReduced.cols;
   for (int i = stabilizerStart; i < Q.cols; i++)
     Q.elt(i,i) -= 1;
-  timers["prepare Q                   "].stop();
 
-  timers["LU decompose Q              "].resume();
   Qpivots.resize(Q.rows);
   LUDecomposition(Q, Qpivots);
-  timers["LU decompose Q              "].stop();
 }
 
 void SDPSolver::initializeSchurComplementSolver(const BlockDiagonalMatrix &BilinearPairingsXInv,
                                                 const BlockDiagonalMatrix &BilinearPairingsY) {
 
-  timers["computeSchurBlocks          "].resume();
   computeSchurBlocks(sdp, BilinearPairingsXInv, BilinearPairingsY, SchurBlocks);
-  timers["computeSchurBlocks          "].stop();
-  timers["choleskyDecomposeSchurBlocks"].resume();
   choleskyDecompositionStabilized(SchurBlocks, SchurBlocksCholesky, schurStabilizeIndices, schurStabilizeLambdas);
-  timers["choleskyDecomposeSchurBlocks"].stop();
 
-  timers["prepare U                   "].resume();
   // SchurUpdateLowRank = {{- 1, 0}, {E, G}}
-  // Can probably remove this line eventually
-  SchurUpdateLowRank.setCols(sdp.FreeVarMatrix.cols);
 
-  SchurUpdateLowRank.copyFrom(sdp.FreeVarMatrix);
+  SchurUpdateLowRank.copyFrom(sdp.FreeVarMatrix);  
   blockMatrixLowerTriangularSolve(SchurBlocksCholesky, SchurUpdateLowRank);
   int updateColumns = SchurUpdateLowRank.cols;
 
@@ -585,9 +562,7 @@ void SDPSolver::initializeSchurComplementSolver(const BlockDiagonalMatrix &Bilin
           &stabilizeBlocks[b].elt(0, 0),
           stabilizeBlocks[b].rows);
   }
-  timers["prepare U                   "].stop();
 
-  timers["prepare Q                   "].resume();
   // Q = SchurUpdateLowRank^T SchurUpdateLowRank - {{0,0},{0,1}}
   Q.setRowsCols(updateColumns, updateColumns);
   Q.setZero();
@@ -628,12 +603,9 @@ void SDPSolver::initializeSchurComplementSolver(const BlockDiagonalMatrix &Bilin
   for (int c = 0; c < SchurUpdateLowRank.cols; c++)
     for (int r = SchurUpdateLowRank.cols; r < Q.rows; r++)
       Q.elt(c,r) = Q.elt(r,c);
-  timers["prepare Q                   "].stop();
 
-  timers["LU decompose Q              "].resume();
   Qpivots.resize(Q.rows);
   LUDecomposition(Q, Qpivots);
-  timers["LU decompose Q              "].stop();
 }
 
 void SDPSolver::solveSchurComplementEquationOld(Vector &dx) {
@@ -735,6 +707,12 @@ void SDPSolver::initialize(const SDPSolverParameters &parameters) {
   Y.addDiagonal(parameters.initialMatrixScaleDual);
 }
 
+SDPSolverTerminateReason finishWith(const SDPSolverTerminateReason reason) {
+  timers["Run solver"].stop();
+  //saveCheckpoint(checkpointFile);
+  return reason;
+}
+
 SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
                                         const path checkpointFile) {
   printSolverHeader();
@@ -742,24 +720,13 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
   timers["Save checkpoint"].start();
   nanosecond_type const checkpointNanoseconds = parameters.checkpointInterval * 1000000000LL;
   nanosecond_type const maxRuntimeNanoseconds = parameters.maxRuntime * 1000000000LL;
-  SDPSolverTerminateReason finished = MaxIterationsExceeded;
 
-  for (int iteration = 1;; iteration++) {
+  for (int iteration = 1; iteration <= parameters.maxIterations; iteration++) {
 
-    if (timers["Save checkpoint"].elapsed().wall >= checkpointNanoseconds) {
+    if (timers["Save checkpoint"].elapsed().wall >= checkpointNanoseconds)
       saveCheckpoint(checkpointFile);
-      timers["Save checkpoint"].start();
-    }
-    if (timers["Run solver"].elapsed().wall >= maxRuntimeNanoseconds) {
-      finished = MaxRuntimeExceeded;
-      break;
-    }
-    if (iteration > parameters.maxIterations) {
-      finished = MaxIterationsExceeded;
-      break;
-    }
-
-    timers["basic+choleskyDecomposition"].resume();
+    if (timers["Run solver"].elapsed().wall >= maxRuntimeNanoseconds)
+      return finishWith(MaxRuntimeExceeded);
 
     // Maintain the invariant x_B = g + E^T x_N
     basicCompletion(dualObjectiveReduced, FreeVarMatrixReduced, basicIndices, nonBasicIndices, x);
@@ -767,15 +734,9 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
     choleskyDecomposition(X, XCholesky);
     choleskyDecomposition(Y, YCholesky);
 
-    timers["basic+choleskyDecomposition"].stop();
-    timers["compute bilinear pairings  "].resume();
-
     computeInvBilinearPairingsWithCholesky(XCholesky, sdp.bilinearBases, bilinearPairingsWorkspace, BilinearPairingsXInv);
     computeBilinearPairings(Y, sdp.bilinearBases, bilinearPairingsWorkspace, BilinearPairingsY);
 
-    timers["compute bilinear pairings  "].stop();
-    timers["compute residues           "].resume();
-
     // d_k = c_k - Tr(F_k Y)
     computeDualResidues(sdp, Y, BilinearPairingsY, dualResidues);
     nonBasicShift(FreeVarMatrixReduced, basicIndices, nonBasicIndices, dualResidues, dualResiduesReduced);
@@ -792,43 +753,25 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
     const bool isDualFeasible   = status.dualError    < parameters.dualErrorThreshold;
     const bool isOptimal        = status.dualityGap() < parameters.dualityGapThreshold;
 
-    if (isPrimalFeasible && isDualFeasible && isOptimal) {
-      finished = PrimalDualOptimal;
-      break;
-    } else if (isDualFeasible && status.dualObjective > parameters.maxDualObjective) {
-      finished = DualFeasibleMaxObjectiveExceeded;
-      break;
-    }
-
-    timers["compute residues           "].stop();
-    timers["initialize SchurComplement "].resume();
+    if (isPrimalFeasible && isDualFeasible && isOptimal)
+      return finishWith(PrimalDualOptimal);
+    else if (isDualFeasible && status.dualObjective > parameters.maxDualObjective)
+      return finishWith(DualFeasibleMaxObjectiveExceeded);
 
     initializeSchurComplementSolver(BilinearPairingsXInv, BilinearPairingsY);
 
-    timers["initialize SchurComplement "].stop();
-
     Real mu = frobeniusProductSymmetric(X, Y)/X.dim;
-    if (mu > parameters.maxComplementarity) {
-      finished = MaxComplementarityExceeded;
-      break;
-    }
-
-    timers["Mehrotra predictor solution"].resume();
+    if (mu > parameters.maxComplementarity)
+      return finishWith(MaxComplementarityExceeded);
 
     // Mehrotra predictor solution for (dx, dX, dY)
     Real betaPredictor = predictorCenteringParameter(parameters, isPrimalFeasible && isDualFeasible);
     computeSearchDirection(betaPredictor, mu, false);
 
-    timers["Mehrotra predictor solution"].stop();
-    timers["Mehrotra corrector solution"].resume();
-
     // Mehrotra corrector solution for (dx, dX, dY)
     Real betaCorrector = correctorCenteringParameter(parameters, X, dX, Y, dY, mu, isPrimalFeasible && isDualFeasible);
     computeSearchDirection(betaCorrector, mu, true);
 
-    timers["Mehrotra corrector solution"].stop();
-    timers["step length computation    "].resume();
-
     // Step length to preserve positive definiteness
     Real primalStepLength = stepLength(XCholesky, dX, StepMatrixWorkspace,
                                        eigenvaluesWorkspace, QRWorkspace, parameters);
@@ -840,8 +783,6 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
       dualStepLength = primalStepLength;
     }
 
-    timers["step length computation    "].stop();
-
     printSolverInfo(iteration, mu, status, primalStepLength, dualStepLength, betaCorrector);
 
     // Update current point
@@ -853,8 +794,5 @@ SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
     Y += dY;
   }
   
-  timers["Run solver"].stop();
-  //saveCheckpoint(checkpointFile);
-  //timers["Save checkpoint"].start();
-  return finished;
+  return finishWith(MaxIterationsExceeded);
 }
diff --git a/src/SDPSolverIO.cpp b/src/SDPSolverIO.cpp
index b6b7097..96f96ba 100644
--- a/src/SDPSolverIO.cpp
+++ b/src/SDPSolverIO.cpp
@@ -109,6 +109,7 @@ void SDPSolver::saveCheckpoint(const path &checkpointFile) {
   boost::archive::text_oarchive ar(ofs);
   cout << "Saving checkpoint to    : " << checkpointFile << endl;
   boost::serialization::serializeSDPSolverState(ar, x, X, Y);
+  timers["Save checkpoint"].start();
 }
 
 void SDPSolver::loadCheckpoint(const path &checkpointFile) {
diff --git a/src/mpack/Rgetrf.cpp b/src/mpack/Rgetrf.cpp
index 7d8d0ee..6cf6257 100644
--- a/src/mpack/Rgetrf.cpp
+++ b/src/mpack/Rgetrf.cpp
@@ -67,7 +67,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <mblas.h>
 #include <mlapack.h>
-#include "../Timers.h"
 
 void Rgetrf(INTEGER m, INTEGER n, REAL * A, INTEGER lda, INTEGER * ipiv, INTEGER * info)
 {
@@ -95,18 +94,14 @@ void Rgetrf(INTEGER m, INTEGER n, REAL * A, INTEGER lda, INTEGER * ipiv, INTEGER
     nb = iMlaenv(1, "Rgetrf", " ", m, n, -1, -1);
     if (nb <= 1 || nb >= min(m, n)) {
 //Use unblocked code.
-      timers["Rgetf2 unblocked"].resume();
 	Rgetf2(m, n, A, lda, ipiv, info);
-      timers["Rgetf2 unblocked"].stop();
     } else {
 //Use blocked code.
 	for (j = 1; j <= min(m, n); j = j + nb) {
 	    jb = min(min(m, n) - j + 1, nb);
 //Factor diagonal and subdiagonal blocks and test for exact
 //singularity.
-            timers["Rgetf2 blocked"].resume();
 	    Rgetf2(m - j + 1, jb, &A[(j - 1) + (j - 1) * lda], lda, &ipiv[j - 1], &iinfo);
-            timers["Rgetf2 blocked"].stop();
 //Adjust INFO and the pivot indices.
 	    if (*info == 0 && iinfo > 0) {
 		*info = iinfo + j - 1;
@@ -115,24 +110,16 @@ void Rgetrf(INTEGER m, INTEGER n, REAL * A, INTEGER lda, INTEGER * ipiv, INTEGER
 		ipiv[i - 1] = j - 1 + ipiv[i - 1];
 	    }
 //Apply interchanges to columns 1:J-one
-            timers["Rlaswp columns"].resume();
 	    Rlaswp(j - 1, A, lda, j, j + jb - 1, ipiv, 1);
-            timers["Rlaswp columns"].stop();
 	    if (j + jb <= n) {
 //Apply interchanges to columns J+JB:N.
-              timers["Rlaswp columns2"].resume();
 		Rlaswp(n - j - jb + 1, &A[0 + (j + jb - 1) * lda], lda, j, j + jb - 1, ipiv, 1);
-              timers["Rlaswp columns2"].stop();
 //Compute block row of U.
-              timers["Rtrsm"].resume();
 		Rtrsm("Left", "Lower", "No transpose", "Unit", jb, n - j - jb + 1, One, &A[(j - 1) + (j - 1) * lda], lda, &A[(j - 1) + (j + jb - 1) * lda], lda);
-                timers["Rtrsm"].stop();
 		if (j + jb <= m) {
 //Update trailing submatrix.
-                  timers["Rgemm"].resume();
 		    RgemmParallel("No transpose", "No transpose", m - j - jb + 1,
 			  n - j - jb + 1, jb, -One, &A[(j + jb - 1) + (j - 1) * lda], lda, &A[(j - 1) + (j + jb - 1) * lda], lda, One, &A[(j + jb - 1) + (j + jb - 1) * lda], lda);
-                    timers["Rgemm"].stop();
 		}
 	    }
 	}

-- 
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