[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