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);
+ }
}
}