From 766a04e51be217a8b122b4c9eedad131684e5d69 Mon Sep 17 00:00:00 2001 From: Marek Otahal Date: Sat, 20 May 2017 14:35:42 +0200 Subject: [PATCH 1/2] SP: optimize using minmax_element 25% faster than using both min() and max() separately --- src/nupic/algorithms/SpatialPooler.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/nupic/algorithms/SpatialPooler.cpp b/src/nupic/algorithms/SpatialPooler.cpp index e460b30784..102a674980 100644 --- a/src/nupic/algorithms/SpatialPooler.cpp +++ b/src/nupic/algorithms/SpatialPooler.cpp @@ -947,11 +947,9 @@ Real SpatialPooler::avgConnectedSpanForColumn1D_(UInt column) vector connectedSparse = connectedSynapses_.getSparseRow(column); if (connectedSparse.empty()) return 0; - UInt minIndex = *min_element(connectedSparse.begin(), + auto minmax = minmax_element(connectedSparse.begin(), connectedSparse.end()); - UInt maxIndex = *max_element(connectedSparse.begin(), - connectedSparse.end()); - return maxIndex - minIndex + 1; + return *minmax.second /*max*/ - *minmax.first /*min*/ + 1; } Real SpatialPooler::avgConnectedSpanForColumn2D_(UInt column) @@ -978,11 +976,11 @@ Real SpatialPooler::avgConnectedSpanForColumn2D_(UInt column) return 0; } - UInt rowSpan = *max_element(rows.begin(),rows.end()) - - *min_element(rows.begin(),rows.end()) + 1; + auto minmaxRows = minmax_element(rows.begin(),rows.end()); + UInt rowSpan = *minmaxRows.second /*max*/ - *minmaxRows.first /*min*/ +1; - UInt colSpan = *max_element(cols.begin(),cols.end()) - - *min_element(cols.begin(),cols.end()) + 1; + auto minmaxCols = minmax_element(cols.begin(),cols.end()); + UInt colSpan = *minmaxCols.second - *minmaxCols.first +1; return (rowSpan + colSpan) / 2.0; From c1d2ac4e6929def5a5986acf53f99f40825353b7 Mon Sep 17 00:00:00 2001 From: Marek Otahal Date: Thu, 8 Jun 2017 11:30:16 +0200 Subject: [PATCH 2/2] whitespace cleanup --- src/nupic/algorithms/SpatialPooler.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/nupic/algorithms/SpatialPooler.cpp b/src/nupic/algorithms/SpatialPooler.cpp index 102a674980..bd8b366173 100644 --- a/src/nupic/algorithms/SpatialPooler.cpp +++ b/src/nupic/algorithms/SpatialPooler.cpp @@ -976,11 +976,11 @@ Real SpatialPooler::avgConnectedSpanForColumn2D_(UInt column) return 0; } - auto minmaxRows = minmax_element(rows.begin(),rows.end()); - UInt rowSpan = *minmaxRows.second /*max*/ - *minmaxRows.first /*min*/ +1; + auto minmaxRows = minmax_element(rows.begin(), rows.end()); + UInt rowSpan = *minmaxRows.second /*max*/ - *minmaxRows.first /*min*/ + 1; - auto minmaxCols = minmax_element(cols.begin(),cols.end()); - UInt colSpan = *minmaxCols.second - *minmaxCols.first +1; + auto minmaxCols = minmax_element(cols.begin(), cols.end()); + UInt colSpan = *minmaxCols.second - *minmaxCols.first + 1; return (rowSpan + colSpan) / 2.0;