diff --git a/.cproject b/.cproject index 75845dc2c..9481bd99c 100644 --- a/.cproject +++ b/.cproject @@ -322,14 +322,6 @@ true true - - make - -j2 - testGaussianFactor.run - true - true - true - make -j2 @@ -356,6 +348,7 @@ make + tests/testBayesTree.run true false @@ -363,6 +356,7 @@ make + testBinaryBayesNet.run true false @@ -410,6 +404,7 @@ make + testSymbolicBayesNet.run true false @@ -417,6 +412,7 @@ make + tests/testSymbolicFactor.run true false @@ -424,6 +420,7 @@ make + testSymbolicFactorGraph.run true false @@ -439,11 +436,20 @@ make + tests/testBayesTree true false true + + make + -j2 + testGaussianFactor.run + true + true + true + make -j2 @@ -478,7 +484,6 @@ make - testGraph.run true false @@ -574,7 +579,6 @@ make - testInference.run true false @@ -582,7 +586,6 @@ make - testGaussianBayesNet.run true false @@ -590,7 +593,6 @@ make - testGaussianFactor.run true false @@ -598,7 +600,6 @@ make - testJunctionTree.run true false @@ -606,7 +607,6 @@ make - testSymbolicBayesNet.run true false @@ -614,7 +614,6 @@ make - testSymbolicFactorGraph.run true false @@ -830,6 +829,7 @@ make + -j2 testGaussianISAM.run true true @@ -843,6 +843,14 @@ true true + + make + -j2 + timeLinearOnDataset.run + true + true + true + make -j2 @@ -941,6 +949,7 @@ make + testErrors.run true false @@ -1132,6 +1141,7 @@ make + -j2 tests/testSymbolicFactorGraph.run true true @@ -1299,7 +1309,6 @@ make - testSimulated2DOriented.run true false @@ -1339,7 +1348,6 @@ make - testSimulated2D.run true false @@ -1347,7 +1355,6 @@ make - testSimulated3D.run true false @@ -1403,7 +1410,6 @@ make - tests/testGaussianISAM2 true false @@ -1425,6 +1431,86 @@ true true + + make + -j2 + install + true + true + true + + + make + -j2 + clean + true + true + true + + + make + -j2 + check + true + true + true + + + make + -j2 + all + true + true + true + + + make + -j2 + dist + true + true + true + + + make + -j2 + inference/tests/testEliminationTree + true + true + true + + + make + -j2 + slam/tests/testGaussianISAM2 + true + true + true + + + make + -j2 + inference/tests/testVariableIndex + true + true + true + + + make + -j2 + inference/tests/testJunctionTree + true + true + true + + + make + -j2 + linear/tests/testGaussianJunctionTree + true + true + true + make -j2 @@ -1521,94 +1607,6 @@ true true - - make - -j2 - install - true - true - true - - - make - -j2 - clean - true - true - true - - - make - -j2 - check - true - true - true - - - make - -j2 - all - true - true - true - - - make - -j2 - dist - true - true - true - - - make - -j2 - inference/tests/testEliminationTree - true - true - true - - - make - -j2 - slam/tests/testGaussianISAM2 - true - true - true - - - make - -j2 - inference/tests/testVariableIndex - true - true - true - - - make - -j2 - inference/tests/testJunctionTree - true - true - true - - - make - -j2 - linear/tests/testGaussianJunctionTree - true - true - true - - - make - -j2 - check - true - true - true - make -j2 @@ -1641,6 +1639,14 @@ true true + + make + -j2 + check + true + true + true + @@ -1963,14 +1969,6 @@ true true - - make - -j2 - testGaussianFactor.run - true - true - true - make -j2 @@ -1997,6 +1995,7 @@ make + tests/testBayesTree.run true false @@ -2004,6 +2003,7 @@ make + testBinaryBayesNet.run true false @@ -2051,6 +2051,7 @@ make + testSymbolicBayesNet.run true false @@ -2058,6 +2059,7 @@ make + tests/testSymbolicFactor.run true false @@ -2065,6 +2067,7 @@ make + testSymbolicFactorGraph.run true false @@ -2080,11 +2083,20 @@ make + tests/testBayesTree true false true + + make + -j2 + testGaussianFactor.run + true + true + true + make -j2 @@ -2119,7 +2131,6 @@ make - testGraph.run true false @@ -2215,7 +2226,6 @@ make - testInference.run true false @@ -2223,7 +2233,6 @@ make - testGaussianBayesNet.run true false @@ -2231,7 +2240,6 @@ make - testGaussianFactor.run true false @@ -2239,7 +2247,6 @@ make - testJunctionTree.run true false @@ -2247,7 +2254,6 @@ make - testSymbolicBayesNet.run true false @@ -2255,7 +2261,6 @@ make - testSymbolicFactorGraph.run true false @@ -2471,6 +2476,7 @@ make + -j2 testGaussianISAM.run true true @@ -2484,6 +2490,14 @@ true true + + make + -j2 + timeLinearOnDataset.run + true + true + true + make -j2 @@ -2582,6 +2596,7 @@ make + testErrors.run true false @@ -2773,6 +2788,7 @@ make + -j2 tests/testSymbolicFactorGraph.run true true @@ -2940,7 +2956,6 @@ make - testSimulated2DOriented.run true false @@ -2980,7 +2995,6 @@ make - testSimulated2D.run true false @@ -2988,7 +3002,6 @@ make - testSimulated3D.run true false @@ -3044,7 +3057,6 @@ make - tests/testGaussianISAM2 true false @@ -3066,6 +3078,86 @@ true true + + make + -j2 + install + true + true + true + + + make + -j2 + clean + true + true + true + + + make + -j2 + check + true + true + true + + + make + -j2 + all + true + true + true + + + make + -j2 + dist + true + true + true + + + make + -j2 + inference/tests/testEliminationTree + true + true + true + + + make + -j2 + slam/tests/testGaussianISAM2 + true + true + true + + + make + -j2 + inference/tests/testVariableIndex + true + true + true + + + make + -j2 + inference/tests/testJunctionTree + true + true + true + + + make + -j2 + linear/tests/testGaussianJunctionTree + true + true + true + make -j2 @@ -3162,94 +3254,6 @@ true true - - make - -j2 - install - true - true - true - - - make - -j2 - clean - true - true - true - - - make - -j2 - check - true - true - true - - - make - -j2 - all - true - true - true - - - make - -j2 - dist - true - true - true - - - make - -j2 - inference/tests/testEliminationTree - true - true - true - - - make - -j2 - slam/tests/testGaussianISAM2 - true - true - true - - - make - -j2 - inference/tests/testVariableIndex - true - true - true - - - make - -j2 - inference/tests/testJunctionTree - true - true - true - - - make - -j2 - linear/tests/testGaussianJunctionTree - true - true - true - - - make - -j2 - check - true - true - true - make -j2 @@ -3282,6 +3286,14 @@ true true + + make + -j2 + check + true + true + true + diff --git a/gtsam/base/DenseQR.cpp b/gtsam/base/DenseQR.cpp index 475083979..ffe3afacd 100644 --- a/gtsam/base/DenseQR.cpp +++ b/gtsam/base/DenseQR.cpp @@ -13,6 +13,8 @@ #include "DenseQR.h" +//#define DEBUG_MEMORY + // all the lapack functions we need here extern "C" { void dlarft_ (char *direct, char *storev, int *n, int *k, double *V, int *ldv, double *Tau, double *T, int *ldt) ; @@ -88,10 +90,15 @@ namespace gtsam { stairStartLast = stairStart; stairs[col] = stairStart = max(numGoodHHs + 1, stairs[col]); numZeros += numPendingHHs * (stairStart - stairStartLast); - if (numPendingHHs >= minSizeBlock && - numZeros > max(16, ((numPendingHHs * (numPendingHHs + 1)) / 2 + numPendingHHs * (stairStart - row1stHH - numPendingHHs)) / 2)) + if (numPendingHHs >= minSizeBlock && colPendingHHEnd < n && + numZeros > max(16, ((numPendingHHs * (numPendingHHs + 1)) / 2 + numPendingHHs * (stairStart - row1stHH - numPendingHHs)) / 2)) { +#ifdef DEBUG_MEMORY + if (row1stHH >= m) throw std::runtime_error("DenseQR: row1stHH >= m"); + if (colPendingHHEnd >= n) throw std::runtime_error("DenseQR: colPendingHHEnd >= n"); +#endif dlarftb_wrap(stairStartLast - row1stHH, n - colPendingHHEnd, numPendingHHs, m, m, vectorHH, tau, &A[row1stHH+colPendingHHEnd*m], workspace, &numPendingHHs, &numZeros); + } // compute Householder for the current column int n_ = stairStart - numGoodHHs; @@ -100,6 +107,9 @@ namespace gtsam { if (!numPendingHHs) { row1stHH = numGoodHHs; vectorHH = &A[row1stHH+col*m]; +#ifdef DEBUG_MEMORY + if (row1stHH+col*m >= m*n) throw std::runtime_error("DenseQR: row1stHH+col*m >= m*n"); +#endif colPendingHHEnd = NotEnoughLeft(m - row1stHH, n - col, sizeBlock) ? n : min(n, col + sizeBlock); // if not enough work left, go to unblocked mode } numPendingHHs++; @@ -115,9 +125,14 @@ namespace gtsam { numGoodHHs++; } - if (numGoodHHs == m || col + 1 == colPendingHHEnd) - dlarftb_wrap(stairStart - row1stHH, n - colPendingHHEnd, numPendingHHs, m, m, vectorHH, tau, &A[row1stHH+colPendingHHEnd*m], workspace, - &numPendingHHs, &numZeros); + if ((numGoodHHs == m || col + 1 == colPendingHHEnd) && colPendingHHEnd < n) { +#ifdef DEBUG_MEMORY + if (row1stHH >= m) throw std::runtime_error("DenseQR: row1stHH >= m"); + if (colPendingHHEnd >= n) throw std::runtime_error("DenseQR: colPendingHHEnd >= n"); +#endif + dlarftb_wrap(stairStart - row1stHH, n - colPendingHHEnd, numPendingHHs, m, m, + vectorHH, tau, &A[row1stHH+colPendingHHEnd*m], workspace, &numPendingHHs, &numZeros); + } } }