fixed parsing GPU archs in BIN(PTX) format
authorAlexey Spizhevoy <no@email>
Thu, 27 Jan 2011 08:26:10 +0000 (08:26 +0000)
committerAlexey Spizhevoy <no@email>
Thu, 27 Jan 2011 08:26:10 +0000 (08:26 +0000)
CMakeLists.txt
cvconfig.h.cmake
modules/gpu/src/initialization.cpp
modules/gpu/src/precomp.hpp

index 586f8eb..df8e9a2 100644 (file)
@@ -712,24 +712,32 @@ if(WITH_CUDA)
         set(CUDA_ARCH_PTX "1.1 1.3" CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for")              \r
         \r
         # These variables are used in config templates\r
-        string(REGEX REPLACE "\\." "" ARCH_GPU_NO_POINTS "${CUDA_ARCH_BIN}")\r
+        string(REGEX REPLACE "\\." "" ARCH_BIN_NO_POINTS "${CUDA_ARCH_BIN}")\r
         string(REGEX REPLACE "\\." "" ARCH_PTX_NO_POINTS "${CUDA_ARCH_PTX}")\r
         \r
         # Ckeck if user specified 1.0 compute capability\r
         string(REGEX MATCH "1.0" HAS_ARCH_10 "${CUDA_ARCH_BIN} ${CUDA_ARCH_PTX}")\r
+        set(CUDA_ARCH_BIN_OR_PTX_10 0)\r
         if(NOT ${HAS_ARCH_10} STREQUAL "")\r
-            set(OPENCV_ARCH_GPU_OR_PTX_10 1)\r
+            set(CUDA_ARCH_BIN_OR_PTX_10 1)\r
         endif()\r
         \r
-        set(NVCC_FLAGS_EXTRA "")\r
+        # Flags to be set\r
+        set(NVCC_FLAGS_EXTRA "")      \r
+        \r
+        # These variables are passed into the template\r
+        set(OPENCV_CUDA_ARCH_BIN "") \r
+        set(OPENCV_CUDA_ARCH_PTX "") \r
         \r
         # Tell nvcc to add binaries for the specified GPUs\r
-        string(REGEX MATCHALL "[0-9()]+" ARCH_LIST "${ARCH_GPU_NO_POINTS}")\r
+        string(REGEX MATCHALL "[0-9()]+" ARCH_LIST "${ARCH_BIN_NO_POINTS}")\r
         foreach(ARCH IN LISTS ARCH_LIST)\r
             if (ARCH MATCHES "([0-9]+)\\(([0-9]+)\\)")\r
                 set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})\r
+                set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${CMAKE_MATCH_1}")\r
             else()\r
                 set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=sm_${ARCH})\r
+                set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${ARCH}")\r
             endif()\r
         endforeach()\r
         \r
@@ -737,8 +745,10 @@ if(WITH_CUDA)
         string(REGEX MATCHALL "[0-9]+" ARCH_LIST "${ARCH_PTX_NO_POINTS}")\r
         foreach(ARCH IN LISTS ARCH_LIST)\r
             set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=compute_${ARCH})\r
+            set(OPENCV_CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX} ${ARCH}")\r
         endforeach()               \r
         \r
+        # Wil; be processed in other scripts\r
         set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA})        \r
         set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}")\r
         \r
index 5b35d24..e04cc47 100644 (file)
 #cmakedefine HAVE_CUDA
 
 /* Compile for 'real' NVIDIA GPU architectures */
-#define OPENCV_ARCH_GPU "${ARCH_GPU_NO_POINTS}"
+#define CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN}"
 
 /* Compile for 'virtual' NVIDIA PTX architectures */
-#define OPENCV_ARCH_PTX "${ARCH_PTX_NO_POINTS}"
+#define CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX}"
 
-/* Create PTX or CUBIN for 1.0 compute capability */
-#cmakedefine OPENCV_ARCH_GPU_OR_PTX_10
+/* Create PTX or BIN for 1.0 compute capability */
+#cmakedefine CUDA_ARCH_BIN_OR_PTX_10
 
 /* VideoInput library */
 #cmakedefine HAVE_VIDEOINPUT
index 0104bd0..17bd150 100644 (file)
@@ -164,33 +164,33 @@ namespace
 \r
 CV_EXPORTS bool cv::gpu::hasPtxVersion(int major, int minor)\r
 {\r
-    return ::compare(OPENCV_ARCH_PTX, major * 10 + minor, std::equal_to<int>());\r
+    return ::compare(CUDA_ARCH_PTX, major * 10 + minor, std::equal_to<int>());\r
 }\r
 \r
 \r
 CV_EXPORTS bool cv::gpu::hasLessOrEqualPtxVersion(int major, int minor)\r
 {\r
-    return ::compare(OPENCV_ARCH_PTX, major * 10 + minor, \r
+    return ::compare(CUDA_ARCH_PTX, major * 10 + minor, \r
                      std::less_equal<int>());\r
 }\r
 \r
 \r
 CV_EXPORTS bool cv::gpu::hasGreaterOrEqualPtxVersion(int major, int minor)\r
 {\r
-    return ::compare(OPENCV_ARCH_PTX, major * 10 + minor, \r
+    return ::compare(CUDA_ARCH_PTX, major * 10 + minor, \r
                      std::greater_equal<int>());\r
 }\r
 \r
 \r
 CV_EXPORTS bool cv::gpu::hasCubinVersion(int major, int minor)\r
 {\r
-    return ::compare(OPENCV_ARCH_GPU, major * 10 + minor, std::equal_to<int>());\r
+    return ::compare(CUDA_ARCH_BIN, major * 10 + minor, std::equal_to<int>());\r
 }\r
 \r
 \r
 CV_EXPORTS bool cv::gpu::hasGreaterOrEqualCubinVersion(int major, int minor)\r
 {\r
-    return ::compare(OPENCV_ARCH_GPU, major * 10 + minor, \r
+    return ::compare(CUDA_ARCH_BIN, major * 10 + minor, \r
                      std::greater_equal<int>());\r
 }\r
 \r
index 624e67f..d5ad3cc 100644 (file)
@@ -85,7 +85,7 @@
     #error "Insufficient NPP version, please update it."\r
 #endif\r
 \r
-#if defined(OPENCV_ARCH_GPU_OR_PTX_10)\r
+#if defined(CUDA_ARCH_BIN_OR_PTX_10)\r
     #error "OpenCV GPU module doesn't support NVIDIA compute capability 1.0"\r
 #endif\r
 \r