[opengm] 238/386: Allow to build SubrgradientSSVM without OpenMP, and link the learning python module against openmp
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Aug 31 08:37:57 UTC 2016
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch debian/master
in repository opengm.
commit d9a3ac0120f84484e975b5a0b19a2862eeee3a6b
Author: Carsten Haubold <carstenhaubold at googlemail.com>
Date: Wed Jan 14 17:23:10 2015 +0100
Allow to build SubrgradientSSVM without OpenMP, and link the learning python module against openmp
---
CMakeLists.txt | 3 +++
include/opengm/learning/subgradient_ssvm.hxx | 26 +++++++++++++++++++---
.../python/opengm/learning/CMakeLists.txt | 10 ++++++---
src/unittest/learning/CMakeLists.txt | 6 ++---
4 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2508635..53b7707 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -476,6 +476,9 @@ endif(WITH_MPLP)
find_package(Threads)
find_package(OpenMp)
+if(OPENMP_FOUND)
+ add_definitions(-DWITH_OPENMP)
+endif()
#--------------------------------------------------------------
# rt lib
diff --git a/include/opengm/learning/subgradient_ssvm.hxx b/include/opengm/learning/subgradient_ssvm.hxx
index 008cbb4..1210d16 100644
--- a/include/opengm/learning/subgradient_ssvm.hxx
+++ b/include/opengm/learning/subgradient_ssvm.hxx
@@ -9,7 +9,11 @@
#include <opengm/utilities/random.hxx>
#include <opengm/learning/gradient-accumulator.hxx>
#include <opengm/learning/weight_averaging.hxx>
+
+#ifdef WITH_OPENMP
#include <omp.h>
+#endif
+
#include <boost/circular_buffer.hpp>
@@ -194,24 +198,28 @@ namespace opengm {
// reset the weights
featureAcc_.resetWeights();
+ double totalLoss = 0;
-
-
+#ifdef WITH_OPENMP
omp_lock_t modelLockUnlock;
omp_init_lock(&modelLockUnlock);
omp_lock_t featureAccLock;
omp_init_lock(&featureAccLock);
- double totalLoss = 0;
#pragma omp parallel for reduction(+:totalLoss)
+#endif
for(size_t gmi=0; gmi<nModels; ++gmi)
{
// lock the model
+#ifdef WITH_OPENMP
omp_set_lock(&modelLockUnlock);
dataset_.lockModel(gmi);
omp_unset_lock(&modelLockUnlock);
+#else
+ dataset_.lockModel(gmi);
+#endif
@@ -249,16 +257,24 @@ namespace opengm {
}
}
+#ifdef WITH_OPENMP
omp_set_lock(&featureAccLock);
featureAcc_.accumulateFromOther(featureAcc);
omp_unset_lock(&featureAccLock);
+#else
+ featureAcc_.accumulateFromOther(featureAcc);
+#endif
}
else{
FeatureAcc featureAcc(nWegihts);
featureAcc.accumulateModelFeatures(gm, dataset_.getGT(gmi).begin(), arg.begin());
+#ifdef WITH_OPENMP
omp_set_lock(&featureAccLock);
featureAcc_.accumulateFromOther(featureAcc);
omp_unset_lock(&featureAccLock);
+#else
+ featureAcc_.accumulateFromOther(featureAcc);
+#endif
}
@@ -269,9 +285,13 @@ namespace opengm {
//omp_unset_lock(&featureAccLock);
// unlock the model
+#ifdef WITH_OPENMP
omp_set_lock(&modelLockUnlock);
dataset_.unlockModel(gmi);
omp_unset_lock(&modelLockUnlock);
+#else
+ dataset_.unlockModel(gmi);
+#endif
}
if(iteration_%1==0){
std::cout << '\r'
diff --git a/src/interfaces/python/opengm/learning/CMakeLists.txt b/src/interfaces/python/opengm/learning/CMakeLists.txt
index 45ab4ce..b0fc171 100644
--- a/src/interfaces/python/opengm/learning/CMakeLists.txt
+++ b/src/interfaces/python/opengm/learning/CMakeLists.txt
@@ -40,11 +40,16 @@ endif(APPLE)
#--------------------------------------------------------------
# Link libraries
#--------------------------------------------------------------
+if(OPENMP_FOUND)
+ SET_TARGET_PROPERTIES(_learning PROPERTIES COMPILE_FLAGS "${OpenMP_CXX_FLAGS}")
+ SET_TARGET_PROPERTIES(_learning PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS}")
+endif()
+
if(MSVC AND NOT(MSVC_VERSION LESS 1400))
- SET_TARGET_PROPERTIES(_learning PROPERTIES COMPILE_FLAGS "/bigobj")
+ SET_PROPERTY(TARGET _learning APPEND_STRING PROPERTY COMPILE_FLAGS " /bigobj")
endif()
if(APPLE)
- SET_TARGET_PROPERTIES(_learning PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
+ SET_PROPERTY(TARGET _learning APPEND_STRING PROPERTY LINK_FLAGS " -undefined dynamic_lookup")
endif(APPLE)
@@ -58,7 +63,6 @@ endif(LINK_RT)
set_target_properties(_learning PROPERTIES PREFIX "")
-
IF(WIN32)
SET_TARGET_PROPERTIES(_learning PROPERTIES OUTPUT_NAME "learning" PREFIX "_" SUFFIX ".pyd")
ELSEIF(APPLE)
diff --git a/src/unittest/learning/CMakeLists.txt b/src/unittest/learning/CMakeLists.txt
index 4bbf402..9c46812 100644
--- a/src/unittest/learning/CMakeLists.txt
+++ b/src/unittest/learning/CMakeLists.txt
@@ -37,13 +37,13 @@ if(BUILD_TESTING)
if(WITH_CPLEX)
+ ADD_EXECUTABLE(test-subgradient-ssvm test_subgradient_ssvm.cxx ${headers})
if(OPENMP_FOUND)
- ADD_EXECUTABLE(test-subgradient-ssvm test_subgradient_ssvm.cxx ${headers})
SET_TARGET_PROPERTIES(test-subgradient-ssvm PROPERTIES COMPILE_FLAGS "${OpenMP_CXX_FLAGS}")
SET_TARGET_PROPERTIES(test-subgradient-ssvm PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS}")
- target_link_libraries(test-subgradient-ssvm ${CPLEX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
- add_test(test-subgradient-ssvm ${CMAKE_CURRENT_BINARY_DIR}/test-subgradient-ssvm)
endif()
+ target_link_libraries(test-subgradient-ssvm ${CPLEX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+ add_test(test-subgradient-ssvm ${CMAKE_CURRENT_BINARY_DIR}/test-subgradient-ssvm)
endif()
add_executable(test-generalized-hammingloss test_generalized_hammingloss.cxx ${headers})
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/opengm.git
More information about the debian-science-commits
mailing list