colmap icon indicating copy to clipboard operation
colmap copied to clipboard

Image indexing became slower in vocab_tree_matcher after the c7a5846

Open yzslab opened this issue 8 months ago • 14 comments

Describe the bug Hi, the indexing stage of vocab_tree_matcher is much slower after the c7a5846.

Before c7a5846:

$ colmap --help
COLMAP 3.12.0.dev0 -- Structure-from-Motion and Multi-View Stereo
(Commit 8fbb7133 on 2025-05-28 with CUDA)
# ...
$ colmap vocab_tree_matcher --database_path colmap.db --VocabTreeMatching.vocab_tree_path ~/.cache/colmap/vocab_tree_flickr100K_words32K.bin
I0607 01:54:38.158710 1043744 misc.cc:44]
==============================================================================
Feature matching
==============================================================================
I0607 01:54:38.159461 1043745 sift.cc:1426] Creating SIFT GPU feature matcher
I0607 01:54:38.282248 1043744 pairing.cc:234] Generating image pairs with vocabulary tree...
I0607 01:54:38.411252 1043744 pairing.cc:358] Indexing image [1/152]
I0607 01:54:38.476401 1043744 pairing.cc:368]  in 0.065s
I0607 01:54:38.476433 1043744 pairing.cc:358] Indexing image [2/152]
I0607 01:54:38.516659 1043744 pairing.cc:368]  in 0.040s
I0607 01:54:38.516690 1043744 pairing.cc:358] Indexing image [3/152]
I0607 01:54:38.555771 1043744 pairing.cc:368]  in 0.039s
I0607 01:54:38.555804 1043744 pairing.cc:358] Indexing image [4/152]
I0607 01:54:38.594712 1043744 pairing.cc:368]  in 0.039s
I0607 01:54:38.594745 1043744 pairing.cc:358] Indexing image [5/152]
I0607 01:54:38.635025 1043744 pairing.cc:368]  in 0.040s
I0607 01:54:38.635053 1043744 pairing.cc:358] Indexing image [6/152]
I0607 01:54:38.678027 1043744 pairing.cc:368]  in 0.043s
I0607 01:54:38.678062 1043744 pairing.cc:358] Indexing image [7/152]
I0607 01:54:38.723492 1043744 pairing.cc:368]  in 0.045s
I0607 01:54:38.723527 1043744 pairing.cc:358] Indexing image [8/152]
I0607 01:54:38.767494 1043744 pairing.cc:368]  in 0.044s
I0607 01:54:38.767526 1043744 pairing.cc:358] Indexing image [9/152]
I0607 01:54:38.813766 1043744 pairing.cc:368]  in 0.046s
I0607 01:54:38.813802 1043744 pairing.cc:358] Indexing image [10/152]
I0607 01:54:38.882438 1043744 pairing.cc:368]  in 0.069s
I0607 01:54:38.882464 1043744 pairing.cc:358] Indexing image [11/152]
I0607 01:54:38.935454 1043744 pairing.cc:368]  in 0.053s
I0607 01:54:38.935488 1043744 pairing.cc:358] Indexing image [12/152]
I0607 01:54:38.983505 1043744 pairing.cc:368]  in 0.048s
I0607 01:54:38.983537 1043744 pairing.cc:358] Indexing image [13/152]
I0607 01:54:39.034024 1043744 pairing.cc:368]  in 0.050s
I0607 01:54:39.034055 1043744 pairing.cc:358] Indexing image [14/152]
I0607 01:54:39.086905 1043744 pairing.cc:368]  in 0.053s
I0607 01:54:39.086938 1043744 pairing.cc:358] Indexing image [15/152]
I0607 01:54:39.142647 1043744 pairing.cc:368]  in 0.056s
I0607 01:54:39.142680 1043744 pairing.cc:358] Indexing image [16/152]
I0607 01:54:39.182456 1043744 pairing.cc:368]  in 0.040s
...

After c7a5846 (also reproducible at 3e3ecb16):

$ colmap --help
COLMAP 3.12.0.dev0 -- Structure-from-Motion and Multi-View Stereo
(Commit c7a58462 on 2025-05-29 with CUDA)
# ...
$ colmap vocab_tree_matcher --database_path colmap.db --VocabTreeMatching.vocab_tree_path ~/.cache/colmap/vocab_tree_flickr100K_words32K.bin
I0607 01:56:53.574946 1044371 misc.cc:44]
==============================================================================
Feature matching
==============================================================================
I0607 01:56:53.581499 1044372 sift.cc:1426] Creating SIFT GPU feature matcher
I0607 01:56:53.700388 1044371 pairing.cc:238] Generating image pairs with vocabulary tree...
I0607 01:56:57.136135 1044371 pairing.cc:364] Indexing image [1/152]
I0607 01:56:57.546598 1044371 pairing.cc:375]  in 0.410s
I0607 01:56:57.546633 1044371 pairing.cc:364] Indexing image [2/152]
I0607 01:56:57.879165 1044371 pairing.cc:375]  in 0.333s
I0607 01:56:57.879197 1044371 pairing.cc:364] Indexing image [3/152]
I0607 01:56:58.196544 1044371 pairing.cc:375]  in 0.317s
I0607 01:56:58.196578 1044371 pairing.cc:364] Indexing image [4/152]
I0607 01:56:58.526727 1044371 pairing.cc:375]  in 0.330s
I0607 01:56:58.526760 1044371 pairing.cc:364] Indexing image [5/152]
I0607 01:56:58.874626 1044371 pairing.cc:375]  in 0.348s
I0607 01:56:58.874655 1044371 pairing.cc:364] Indexing image [6/152]
I0607 01:56:59.236918 1044371 pairing.cc:375]  in 0.362s
I0607 01:56:59.237255 1044371 pairing.cc:364] Indexing image [7/152]
I0607 01:56:59.594466 1044371 pairing.cc:375]  in 0.357s
I0607 01:56:59.595043 1044371 pairing.cc:364] Indexing image [8/152]
I0607 01:57:00.010049 1044371 pairing.cc:375]  in 0.415s
I0607 01:57:00.010088 1044371 pairing.cc:364] Indexing image [9/152]
I0607 01:57:00.422936 1044371 pairing.cc:375]  in 0.413s
I0607 01:57:00.423262 1044371 pairing.cc:364] Indexing image [10/152]
I0607 01:57:00.790429 1044371 pairing.cc:375]  in 0.367s
I0607 01:57:00.790467 1044371 pairing.cc:364] Indexing image [11/152]
I0607 01:57:01.178256 1044371 pairing.cc:375]  in 0.388s
I0607 01:57:01.178591 1044371 pairing.cc:364] Indexing image [12/152]
I0607 01:57:01.539673 1044371 pairing.cc:375]  in 0.361s
I0607 01:57:01.540014 1044371 pairing.cc:364] Indexing image [13/152]
I0607 01:57:01.880606 1044371 pairing.cc:375]  in 0.341s
I0607 01:57:01.880935 1044371 pairing.cc:364] Indexing image [14/152]
I0607 01:57:02.218297 1044371 pairing.cc:375]  in 0.337s
I0607 01:57:02.218626 1044371 pairing.cc:364] Indexing image [15/152]
I0607 01:57:02.657629 1044371 pairing.cc:375]  in 0.439s
I0607 01:57:02.657934 1044371 pairing.cc:364] Indexing image [16/152]
I0607 01:57:02.990415 1044371 pairing.cc:375]  in 0.332s
...

To Reproduce Steps to reproduce the behavior:

  1. Download image set Family from https://www.tanksandtemples.org/download/
  2. Pull the colmap after the c7a5846 and build it
  3. Run feature extractor
  4. Run vocab_tree_matcher. You will notice that the indexing stage is significantly slower.

Expected behavior The indexing speed to be as fast as it was in 8fbb7133.

Environment:

  • OS: Ubuntu 20.04
  • CPU: AMD
  • COLMAP Version: c7a5846

yzslab avatar Jun 06 '25 18:06 yzslab

Your sample command looks a bit fishy, because you should be using the faiss index file but your file name suggests you are still using the old file?

ahojnnes avatar Jun 06 '25 19:06 ahojnnes

Your sample command looks a bit fishy, because you should be using the faiss index file but your file name suggests you are still using the old file?

Hi, I rebuilt and ran it again just now, and found that c7a58462 indeed requires the old index file rather than the faiss one.

Image

yzslab avatar Jun 07 '25 06:06 yzslab

This issue is also reproducible even with the faiss one:

Image

yzslab avatar Jun 07 '25 06:06 yzslab

I found it runs much faster with the environment variable OMP_NUM_THREADS=1 set:

Image

My CPU has 16 physical cores, with hyper-threading enabled, so it has 32 logical cores.

yzslab avatar Jun 07 '25 07:06 yzslab

Depending on the number of votes in your machine and the number of expected features per image, you’ll have to tune to number threads. You should be able to specify them using VocabTreeMatching.num_threads as well instead of the OMP environment variable.

ahojnnes avatar Jun 07 '25 07:06 ahojnnes

Depending on the number of votes in your machine and the number of expected features per image, you’ll have to tune to number threads. You should be able to specify them using VocabTreeMatching.num_threads as well instead of the OMP environment variable.

Thanks, I made such a modification so as to specify the num_threads via CLI:

diff --git a/src/colmap/controllers/option_manager.cc b/src/colmap/controllers/option_manager.cc
index 7c20b49b..55b7af31 100644
--- a/src/colmap/controllers/option_manager.cc
+++ b/src/colmap/controllers/option_manager.cc
@@ -405,6 +405,8 @@ void OptionManager::AddVocabTreeMatchingOptions() {
                               &vocab_tree_matching->vocab_tree_path);
   AddAndRegisterDefaultOption("VocabTreeMatching.match_list_path",
                               &vocab_tree_matching->match_list_path);
+  AddAndRegisterDefaultOption("VocabTreeMatching.num_threads",
+                              &vocab_tree_matching->num_threads);
 }
 
 void OptionManager::AddSpatialMatchingOptions() {
diff --git a/src/colmap/feature/pairing.cc b/src/colmap/feature/pairing.cc
index 498425ba..bec79a27 100644
--- a/src/colmap/feature/pairing.cc
+++ b/src/colmap/feature/pairing.cc
@@ -356,6 +356,8 @@ void VocabTreePairGenerator::IndexImages(
   index_options.num_checks = options_.num_checks;
   index_options.num_threads = options_.num_threads;
 
+  LOG(INFO) << "index_options.num_threads=" << index_options.num_threads;
+
   for (size_t i = 0; i < image_ids.size(); ++i) {
     Timer timer;
     timer.Start();

But found it still significantly slower than using OMP_NUM_THREADS=1:

Image

yzslab avatar Jun 10 '25 05:06 yzslab

Thanks @yzslab @qchenevier for reporting the issue. I cannot reproduce this on my system (MacOS with libomp 5.1). Can you post the output of the CMake configuration to see which OpenMP version is picked up on your system?

ahojnnes avatar Jun 10 '25 10:06 ahojnnes

Hey @ahojnnes , here is cmake output for Ubuntu 22.04

~/Dev/colmap/build$ cmake .. -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc -DCMAKE_CUDA_ARCHITECTURES=89
-- Enabling LSD support
-- The C compiler identification is GNU 12.3.0
-- The CXX compiler identification is GNU 12.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found FreeImage
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libfreeimage.so
-- Found Metis
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libmetis.so
-- Found Glog
--   Target : glog::glog
-- Found SQLite3: /usr/include (found version "3.37.2")
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
-- Found Glew
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libGLEW.so
-- Found Git: /usr/bin/git (found version "2.34.1")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found required Ceres dependency: Eigen version 3.4.0 in /usr/include/eigen3
-- Found required Ceres dependency: glog
-- Found required Ceres dependency: gflags
-- Found Ceres version: 2.0.0 installed in: /usr with components: [EigenSparse, SparseLinearAlgebraLibrary, LAPACK, SuiteSparse, CXSparse, SchurSpecializations, Multithreading]
-- Using header-only CGAL
-- Targetting Unix Makefiles
-- Using /usr/bin/c++ compiler.
-- Found GMP: /usr/lib/x86_64-linux-gnu/libgmp.so
-- Found MPFR: /usr/lib/x86_64-linux-gnu/libmpfr.so
-- Boost include dirs: /usr/include
-- Boost libraries:    
-- Using gcc version 4 or later. Adding -frounding-math
-- Found CGAL
--   Includes : /usr/include
--   Libraries : CGAL
-- Enabling download support
-- The CUDA compiler identification is NVIDIA 12.1.66
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /usr/local/cuda/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Enabling CUDA support (version: 12.1.66, archs: 89)
-- Found Qt
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5Core
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5OpenGL
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5Widgets
-- Enabling GUI support
-- Enabling OpenGL support
-- Enabling GPU support (OpenGL: ON, CUDA: ON)
-- Build type not specified, using Release
-- Enabling SIMD support
-- Disabling interprocedural optimization
-- Disabling ccache support
-- Disabling profiling support
-- Disabling tests
-- Disabling coverage support
-- Configuring PoseLib...
-- BUILD_SHARED_LIBS: OFF
-- CMAKE_BUILD_TYPE: Release
-- CMAKE_GENERATOR: Single-config
-- CMAKE_GENERATOR: Unix Makefiles
-- CMAKE_REGISTRY_FOLDER: OFF
-- Found Eigen3: /usr/include/eigen3 (found suitable version "3.4.0", minimum required is "3.1.0")
-- Configuring PoseLib... done
-- Configuring faiss...
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Looking for sgemm_
-- Looking for sgemm_ - not found
-- Looking for sgemm_
-- Looking for sgemm_ - found
-- Found BLAS: /usr/lib/x86_64-linux-gnu/libblas.so
-- Looking for cheev_
-- Looking for cheev_ - not found
-- Looking for cheev_
-- Looking for cheev_ - found
-- Found LAPACK: /usr/lib/x86_64-linux-gnu/liblapack.so;/usr/lib/x86_64-linux-gnu/libblas.so
-- Configuring faiss... done
-- Configuring done (3.6s)
-- Generating done (0.1s)
-- Build files have been written to: /home/clementin/Dev/colmap/build

On my side, indexing and matching are equally as fast with and without OMP_NUM_THREADS=1.

clementinboittiaux avatar Jun 10 '25 12:06 clementinboittiaux

OK, I replicated the issue under Ubuntu 24.04. I think I traced this back to the following issue: https://github.com/facebookresearch/faiss/wiki/Troubleshooting#surprising-faiss-openmp-and-openblas-interaction. The fix of installing libopenblas-openmp-dev and libopenblas0-openmp resolves the issue for me. Make sure to start from an entirely clean build of colmap to test the fix. Rebuilding from an existing build folder did not fix the issue for me. See https://github.com/colmap/colmap/pull/3390

Can you please check if this fixes your issue?

ahojnnes avatar Jun 10 '25 12:06 ahojnnes

Each time deleting build directory and rebuilding from scratch.

With FLANN (commit 8fbb71338592df8e193992e2d048794bd2fee2e0)

$ colmap vocab_tree_matcher --database_path database.db --VocabTreeMatching.vocab_tree_path ~/Downloads/vocab_tree_flickr100K_words1M.bin 
I0610 15:06:08.643350 227197 misc.cc:44] 
==============================================================================
Feature matching
==============================================================================
I0610 15:06:08.643954 227198 sift.cc:1426] Creating SIFT GPU feature matcher
I0610 15:06:08.674958 227197 pairing.cc:234] Generating image pairs with vocabulary tree...
I0610 15:06:11.073834 227197 pairing.cc:358] Indexing image [1/146]
I0610 15:06:11.220906 227197 pairing.cc:368]  in 0.147s
I0610 15:06:11.220932 227197 pairing.cc:358] Indexing image [2/146]
I0610 15:06:11.383579 227197 pairing.cc:368]  in 0.163s
I0610 15:06:11.383601 227197 pairing.cc:358] Indexing image [3/146]
I0610 15:06:11.532110 227197 pairing.cc:368]  in 0.149s
I0610 15:06:11.532136 227197 pairing.cc:358] Indexing image [4/146]
I0610 15:06:11.687610 227197 pairing.cc:368]  in 0.155s
I0610 15:06:11.687633 227197 pairing.cc:358] Indexing image [5/146]
I0610 15:06:11.832011 227197 pairing.cc:368]  in 0.144s
I0610 15:06:11.832037 227197 pairing.cc:358] Indexing image [6/146]
I0610 15:06:11.972260 227197 pairing.cc:368]  in 0.140s
I0610 15:06:11.972283 227197 pairing.cc:358] Indexing image [7/146]
I0610 15:06:12.115949 227197 pairing.cc:368]  in 0.144s
I0610 15:06:12.115971 227197 pairing.cc:358] Indexing image [8/146]
I0610 15:06:12.252662 227197 pairing.cc:368]  in 0.137s
I0610 15:06:12.252684 227197 pairing.cc:358] Indexing image [9/146]
I0610 15:06:12.407625 227197 pairing.cc:368]  in 0.155s
I0610 15:06:12.407649 227197 pairing.cc:358] Indexing image [10/146]
I0610 15:06:12.552965 227197 pairing.cc:368]  in 0.145s
I0610 15:06:12.552989 227197 pairing.cc:358] Indexing image [11/146]
I0610 15:06:12.694944 227197 pairing.cc:368]  in 0.142s
I0610 15:06:12.694968 227197 pairing.cc:358] Indexing image [12/146]
I0610 15:06:12.886672 227197 pairing.cc:368]  in 0.192s
I0610 15:06:12.886701 227197 pairing.cc:358] Indexing image [13/146]
I0610 15:06:13.035436 227197 pairing.cc:368]  in 0.149s
I0610 15:06:13.035465 227197 pairing.cc:358] Indexing image [14/146]
I0610 15:06:13.184250 227197 pairing.cc:368]  in 0.149s
I0610 15:06:13.184273 227197 pairing.cc:358] Indexing image [15/146]
I0610 15:06:13.340750 227197 pairing.cc:368]  in 0.156s
I0610 15:06:13.340780 227197 pairing.cc:358] Indexing image [16/146]
I0610 15:06:13.487207 227197 pairing.cc:368]  in 0.146s
I0610 15:06:13.487236 227197 pairing.cc:358] Indexing image [17/146]
I0610 15:06:13.637234 227197 pairing.cc:368]  in 0.150s
I0610 15:06:13.637256 227197 pairing.cc:358] Indexing image [18/146]
I0610 15:06:13.783906 227197 pairing.cc:368]  in 0.147s
I0610 15:06:13.783927 227197 pairing.cc:358] Indexing image [19/146]
I0610 15:06:13.925032 227197 pairing.cc:368]  in 0.141s
I0610 15:06:13.925050 227197 pairing.cc:358] Indexing image [20/146]
I0610 15:06:14.067032 227197 pairing.cc:368]  in 0.142s
I0610 15:06:14.067045 227197 pairing.cc:358] Indexing image [21/146]
I0610 15:06:14.210742 227197 pairing.cc:368]  in 0.144s
I0610 15:06:14.210762 227197 pairing.cc:358] Indexing image [22/146]
I0610 15:06:14.359712 227197 pairing.cc:368]  in 0.149s
I0610 15:06:14.359736 227197 pairing.cc:358] Indexing image [23/146]
I0610 15:06:14.504069 227197 pairing.cc:368]  in 0.144s
I0610 15:06:14.504084 227197 pairing.cc:358] Indexing image [24/146]
I0610 15:06:14.652621 227197 pairing.cc:368]  in 0.149s
I0610 15:06:14.652635 227197 pairing.cc:358] Indexing image [25/146]
I0610 15:06:14.797915 227197 pairing.cc:368]  in 0.145s
...
I0610 15:06:33.070248 227197 pairing.cc:319] Matching image [1/146]
I0610 15:06:36.216490 227197 feature_matching.cc:46] in 3.146s
I0610 15:06:36.216957 227197 pairing.cc:319] Matching image [2/146]
I0610 15:06:37.382977 227197 feature_matching.cc:46] in 1.166s
I0610 15:06:37.383342 227197 pairing.cc:319] Matching image [3/146]
I0610 15:06:38.479022 227197 feature_matching.cc:46] in 1.096s
I0610 15:06:38.479271 227197 pairing.cc:319] Matching image [4/146]
I0610 15:06:39.578019 227197 feature_matching.cc:46] in 1.099s
I0610 15:06:39.578414 227197 pairing.cc:319] Matching image [5/146]
I0610 15:06:40.634709 227197 feature_matching.cc:46] in 1.056s
I0610 15:06:40.635178 227197 pairing.cc:319] Matching image [6/146]
I0610 15:06:41.687929 227197 feature_matching.cc:46] in 1.053s
I0610 15:06:41.688217 227197 pairing.cc:319] Matching image [7/146]
I0610 15:06:42.716641 227197 feature_matching.cc:46] in 1.028s
I0610 15:06:42.717016 227197 pairing.cc:319] Matching image [8/146]
I0610 15:06:43.770164 227197 feature_matching.cc:46] in 1.053s
I0610 15:06:43.770567 227197 pairing.cc:319] Matching image [9/146]
I0610 15:06:44.782793 227197 feature_matching.cc:46] in 1.012s
I0610 15:06:44.783242 227197 pairing.cc:319] Matching image [10/146]
I0610 15:06:45.777308 227197 feature_matching.cc:46] in 0.994s
I0610 15:06:45.777542 227197 pairing.cc:319] Matching image [11/146]
I0610 15:06:46.775913 227197 feature_matching.cc:46] in 0.998s
I0610 15:06:46.776290 227197 pairing.cc:319] Matching image [12/146]
I0610 15:06:47.762049 227197 feature_matching.cc:46] in 0.986s
I0610 15:06:47.762351 227197 pairing.cc:319] Matching image [13/146]
I0610 15:06:48.744451 227197 feature_matching.cc:46] in 0.982s
I0610 15:06:48.744733 227197 pairing.cc:319] Matching image [14/146]
I0610 15:06:49.723538 227197 feature_matching.cc:46] in 0.979s
I0610 15:06:49.723739 227197 pairing.cc:319] Matching image [15/146]
I0610 15:06:50.735090 227197 feature_matching.cc:46] in 1.011s
I0610 15:06:50.735487 227197 pairing.cc:319] Matching image [16/146]
I0610 15:06:51.703969 227197 feature_matching.cc:46] in 0.968s
I0610 15:06:51.704226 227197 pairing.cc:319] Matching image [17/146]
I0610 15:06:52.685461 227197 feature_matching.cc:46] in 0.981s
I0610 15:06:52.686347 227197 pairing.cc:319] Matching image [18/146]
I0610 15:06:53.714085 227197 feature_matching.cc:46] in 1.028s
I0610 15:06:53.716329 227197 pairing.cc:319] Matching image [19/146]
I0610 15:06:54.768942 227197 feature_matching.cc:46] in 1.053s
I0610 15:06:54.769435 227197 pairing.cc:319] Matching image [20/146]
I0610 15:06:55.739483 227197 feature_matching.cc:46] in 0.970s
I0610 15:06:55.739815 227197 pairing.cc:319] Matching image [21/146]
I0610 15:06:56.694203 227197 feature_matching.cc:46] in 0.954s
I0610 15:06:56.694561 227197 pairing.cc:319] Matching image [22/146]
I0610 15:06:57.656375 227197 feature_matching.cc:46] in 0.962s
I0610 15:06:57.656535 227197 pairing.cc:319] Matching image [23/146]
I0610 15:06:58.551779 227197 feature_matching.cc:46] in 0.895s
I0610 15:06:58.552109 227197 pairing.cc:319] Matching image [24/146]
I0610 15:06:59.472283 227197 feature_matching.cc:46] in 0.920s
I0610 15:06:59.472522 227197 pairing.cc:319] Matching image [25/146]
I0610 15:07:00.411425 227197 feature_matching.cc:46] in 0.939s
...
I0610 15:08:20.413229 227197 timer.cc:91] Elapsed time: 2.196 [minutes]

With FAISS without fix (commit 6dc550d)

$ colmap vocab_tree_matcher --database_path database.db --VocabTreeMatching.vocab_tree_path ~/Downloads/vocab_tree_flickr100K_words1M_faiss.bin
I0610 14:54:48.629179 218713 misc.cc:44] 
==============================================================================
Feature matching
==============================================================================
I0610 14:54:48.634968 218714 sift.cc:1428] Creating SIFT GPU feature matcher
I0610 14:54:48.690142 218713 pairing.cc:238] Generating image pairs with vocabulary tree...
I0610 14:54:49.486366 218713 pairing.cc:362] Indexing image [1/146]
I0610 14:54:49.812938 218713 pairing.cc:373]  in 0.327s
I0610 14:54:49.812965 218713 pairing.cc:362] Indexing image [2/146]
I0610 14:54:50.126158 218713 pairing.cc:373]  in 0.313s
I0610 14:54:50.126184 218713 pairing.cc:362] Indexing image [3/146]
I0610 14:54:50.461002 218713 pairing.cc:373]  in 0.335s
I0610 14:54:50.461026 218713 pairing.cc:362] Indexing image [4/146]
I0610 14:54:50.820068 218713 pairing.cc:373]  in 0.359s
I0610 14:54:50.820091 218713 pairing.cc:362] Indexing image [5/146]
I0610 14:54:51.156054 218713 pairing.cc:373]  in 0.336s
I0610 14:54:51.156075 218713 pairing.cc:362] Indexing image [6/146]
I0610 14:54:51.476665 218713 pairing.cc:373]  in 0.321s
I0610 14:54:51.476686 218713 pairing.cc:362] Indexing image [7/146]
I0610 14:54:51.785246 218713 pairing.cc:373]  in 0.309s
I0610 14:54:51.785274 218713 pairing.cc:362] Indexing image [8/146]
I0610 14:54:52.107563 218713 pairing.cc:373]  in 0.322s
I0610 14:54:52.107587 218713 pairing.cc:362] Indexing image [9/146]
I0610 14:54:52.417490 218713 pairing.cc:373]  in 0.310s
I0610 14:54:52.417513 218713 pairing.cc:362] Indexing image [10/146]
I0610 14:54:52.763638 218713 pairing.cc:373]  in 0.346s
I0610 14:54:52.763659 218713 pairing.cc:362] Indexing image [11/146]
I0610 14:54:53.085098 218713 pairing.cc:373]  in 0.321s
I0610 14:54:53.085120 218713 pairing.cc:362] Indexing image [12/146]
I0610 14:54:53.438961 218713 pairing.cc:373]  in 0.354s
I0610 14:54:53.438983 218713 pairing.cc:362] Indexing image [13/146]
I0610 14:54:53.751341 218713 pairing.cc:373]  in 0.312s
I0610 14:54:53.751363 218713 pairing.cc:362] Indexing image [14/146]
I0610 14:54:54.063555 218713 pairing.cc:373]  in 0.312s
I0610 14:54:54.063577 218713 pairing.cc:362] Indexing image [15/146]
I0610 14:54:54.382902 218713 pairing.cc:373]  in 0.319s
I0610 14:54:54.382925 218713 pairing.cc:362] Indexing image [16/146]
I0610 14:54:54.728328 218713 pairing.cc:373]  in 0.345s
I0610 14:54:54.728350 218713 pairing.cc:362] Indexing image [17/146]
I0610 14:54:55.048278 218713 pairing.cc:373]  in 0.320s
I0610 14:54:55.048302 218713 pairing.cc:362] Indexing image [18/146]
I0610 14:54:55.415079 218713 pairing.cc:373]  in 0.367s
I0610 14:54:55.415100 218713 pairing.cc:362] Indexing image [19/146]
I0610 14:54:55.728040 218713 pairing.cc:373]  in 0.313s
I0610 14:54:55.728065 218713 pairing.cc:362] Indexing image [20/146]
I0610 14:54:56.080252 218713 pairing.cc:373]  in 0.352s
I0610 14:54:56.080273 218713 pairing.cc:362] Indexing image [21/146]
I0610 14:54:56.423516 218713 pairing.cc:373]  in 0.343s
I0610 14:54:56.423538 218713 pairing.cc:362] Indexing image [22/146]
I0610 14:54:56.768146 218713 pairing.cc:373]  in 0.345s
I0610 14:54:56.768168 218713 pairing.cc:362] Indexing image [23/146]
I0610 14:54:57.107820 218713 pairing.cc:373]  in 0.340s
I0610 14:54:57.107842 218713 pairing.cc:362] Indexing image [24/146]
I0610 14:54:57.443341 218713 pairing.cc:373]  in 0.336s
I0610 14:54:57.443363 218713 pairing.cc:362] Indexing image [25/146]
I0610 14:54:57.790521 218713 pairing.cc:373]  in 0.347s
...
I0610 14:55:38.740692 218713 pairing.cc:323] Matching image [1/146]
I0610 14:55:44.071174 218713 feature_matching.cc:47] in 5.331s
I0610 14:55:44.071206 218713 pairing.cc:323] Matching image [2/146]
I0610 14:55:45.304260 218713 feature_matching.cc:47] in 1.233s
I0610 14:55:45.304293 218713 pairing.cc:323] Matching image [3/146]
I0610 14:55:46.499089 218713 feature_matching.cc:47] in 1.195s
I0610 14:55:46.499120 218713 pairing.cc:323] Matching image [4/146]
I0610 14:55:47.753265 218713 feature_matching.cc:47] in 1.254s
I0610 14:55:47.753298 218713 pairing.cc:323] Matching image [5/146]
I0610 14:55:48.945508 218713 feature_matching.cc:47] in 1.192s
I0610 14:55:48.945772 218713 pairing.cc:323] Matching image [6/146]
I0610 14:55:50.097218 218713 feature_matching.cc:47] in 1.151s
I0610 14:55:50.097250 218713 pairing.cc:323] Matching image [7/146]
I0610 14:55:51.147270 218713 feature_matching.cc:47] in 1.050s
I0610 14:55:51.147297 218713 pairing.cc:323] Matching image [8/146]
I0610 14:55:52.237437 218713 feature_matching.cc:47] in 1.090s
I0610 14:55:52.237461 218713 pairing.cc:323] Matching image [9/146]
I0610 14:55:53.246304 218713 feature_matching.cc:47] in 1.009s
I0610 14:55:53.246328 218713 pairing.cc:323] Matching image [10/146]
I0610 14:55:54.252714 218713 feature_matching.cc:47] in 1.006s
I0610 14:55:54.252748 218713 pairing.cc:323] Matching image [11/146]
I0610 14:55:55.248778 218713 feature_matching.cc:47] in 0.996s
I0610 14:55:55.248816 218713 pairing.cc:323] Matching image [12/146]
I0610 14:55:56.239153 218713 feature_matching.cc:47] in 0.990s
I0610 14:55:56.239187 218713 pairing.cc:323] Matching image [13/146]
I0610 14:55:57.220685 218713 feature_matching.cc:47] in 0.982s
I0610 14:55:57.220708 218713 pairing.cc:323] Matching image [14/146]
I0610 14:55:58.184151 218713 feature_matching.cc:47] in 0.963s
I0610 14:55:58.184175 218713 pairing.cc:323] Matching image [15/146]
I0610 14:55:59.280404 218713 feature_matching.cc:47] in 1.096s
I0610 14:55:59.280426 218713 pairing.cc:323] Matching image [16/146]
I0610 14:56:00.294687 218713 feature_matching.cc:47] in 1.014s
I0610 14:56:00.294714 218713 pairing.cc:323] Matching image [17/146]
I0610 14:56:01.329798 218713 feature_matching.cc:47] in 1.035s
I0610 14:56:01.329833 218713 pairing.cc:323] Matching image [18/146]
I0610 14:56:02.315907 218713 feature_matching.cc:47] in 0.986s
I0610 14:56:02.315930 218713 pairing.cc:323] Matching image [19/146]
I0610 14:56:03.301151 218713 feature_matching.cc:47] in 0.985s
I0610 14:56:03.301174 218713 pairing.cc:323] Matching image [20/146]
I0610 14:56:04.321481 218713 feature_matching.cc:47] in 1.020s
I0610 14:56:04.321503 218713 pairing.cc:323] Matching image [21/146]
I0610 14:56:05.323341 218713 feature_matching.cc:47] in 1.002s
I0610 14:56:05.323375 218713 pairing.cc:323] Matching image [22/146]
I0610 14:56:06.361371 218713 feature_matching.cc:47] in 1.038s
I0610 14:56:06.361394 218713 pairing.cc:323] Matching image [23/146]
I0610 14:56:07.254999 218713 feature_matching.cc:47] in 0.894s
I0610 14:56:07.255033 218713 pairing.cc:323] Matching image [24/146]
I0610 14:56:08.080520 218713 feature_matching.cc:47] in 0.825s
I0610 14:56:08.080545 218713 pairing.cc:323] Matching image [25/146]
I0610 14:56:09.010752 218713 feature_matching.cc:47] in 0.930s
...
I0610 14:57:32.270380 218713 timer.cc:91] Elapsed time: 2.727 [minutes]

With FAISS and fix (commit ac74e5c) - installing libopenblas-openmp-dev and libopenblas0-openmp

$ colmap vocab_tree_matcher --database_path database.db --VocabTreeMatching.vocab_tree_path ~/Downloads/vocab_tree_flickr100K_words1M_faiss.bin
I0610 14:38:57.414953 206495 misc.cc:44] 
==============================================================================
Feature matching
==============================================================================
I0610 14:38:57.415562 206496 sift.cc:1428] Creating SIFT GPU feature matcher
I0610 14:38:57.459625 206495 pairing.cc:238] Generating image pairs with vocabulary tree...
I0610 14:38:58.257313 206495 pairing.cc:362] Indexing image [1/146]
I0610 14:38:58.475543 206495 pairing.cc:373]  in 0.218s
I0610 14:38:58.475564 206495 pairing.cc:362] Indexing image [2/146]
I0610 14:38:58.663970 206495 pairing.cc:373]  in 0.188s
I0610 14:38:58.663992 206495 pairing.cc:362] Indexing image [3/146]
I0610 14:38:58.854804 206495 pairing.cc:373]  in 0.191s
I0610 14:38:58.854825 206495 pairing.cc:362] Indexing image [4/146]
I0610 14:38:59.052996 206495 pairing.cc:373]  in 0.198s
I0610 14:38:59.053018 206495 pairing.cc:362] Indexing image [5/146]
I0610 14:38:59.247498 206495 pairing.cc:373]  in 0.194s
I0610 14:38:59.247517 206495 pairing.cc:362] Indexing image [6/146]
I0610 14:38:59.432065 206495 pairing.cc:373]  in 0.185s
I0610 14:38:59.432088 206495 pairing.cc:362] Indexing image [7/146]
I0610 14:38:59.640395 206495 pairing.cc:373]  in 0.208s
I0610 14:38:59.640420 206495 pairing.cc:362] Indexing image [8/146]
I0610 14:38:59.823707 206495 pairing.cc:373]  in 0.183s
I0610 14:38:59.823727 206495 pairing.cc:362] Indexing image [9/146]
I0610 14:39:00.009493 206495 pairing.cc:373]  in 0.186s
I0610 14:39:00.009514 206495 pairing.cc:362] Indexing image [10/146]
I0610 14:39:00.213356 206495 pairing.cc:373]  in 0.204s
I0610 14:39:00.213378 206495 pairing.cc:362] Indexing image [11/146]
I0610 14:39:00.399525 206495 pairing.cc:373]  in 0.186s
I0610 14:39:00.399546 206495 pairing.cc:362] Indexing image [12/146]
I0610 14:39:00.590795 206495 pairing.cc:373]  in 0.191s
I0610 14:39:00.590816 206495 pairing.cc:362] Indexing image [13/146]
I0610 14:39:00.779597 206495 pairing.cc:373]  in 0.189s
I0610 14:39:00.779618 206495 pairing.cc:362] Indexing image [14/146]
I0610 14:39:00.966811 206495 pairing.cc:373]  in 0.187s
I0610 14:39:00.966833 206495 pairing.cc:362] Indexing image [15/146]
I0610 14:39:01.162354 206495 pairing.cc:373]  in 0.196s
I0610 14:39:01.162374 206495 pairing.cc:362] Indexing image [16/146]
I0610 14:39:01.355588 206495 pairing.cc:373]  in 0.193s
I0610 14:39:01.355612 206495 pairing.cc:362] Indexing image [17/146]
I0610 14:39:01.550908 206495 pairing.cc:373]  in 0.195s
I0610 14:39:01.550931 206495 pairing.cc:362] Indexing image [18/146]
I0610 14:39:01.744299 206495 pairing.cc:373]  in 0.193s
I0610 14:39:01.744321 206495 pairing.cc:362] Indexing image [19/146]
I0610 14:39:01.931763 206495 pairing.cc:373]  in 0.187s
I0610 14:39:01.931787 206495 pairing.cc:362] Indexing image [20/146]
I0610 14:39:02.119460 206495 pairing.cc:373]  in 0.188s
I0610 14:39:02.119483 206495 pairing.cc:362] Indexing image [21/146]
I0610 14:39:02.305831 206495 pairing.cc:373]  in 0.186s
I0610 14:39:02.305853 206495 pairing.cc:362] Indexing image [22/146]
I0610 14:39:02.495048 206495 pairing.cc:373]  in 0.189s
I0610 14:39:02.495070 206495 pairing.cc:362] Indexing image [23/146]
I0610 14:39:02.689492 206495 pairing.cc:373]  in 0.194s
I0610 14:39:02.689514 206495 pairing.cc:362] Indexing image [24/146]
I0610 14:39:02.884706 206495 pairing.cc:373]  in 0.195s
I0610 14:39:02.884728 206495 pairing.cc:362] Indexing image [25/146]
I0610 14:39:03.081738 206495 pairing.cc:373]  in 0.197s
...
I0610 14:39:26.911756 206495 pairing.cc:323] Matching image [1/146]
I0610 14:39:30.005072 206495 feature_matching.cc:47] in 3.093s
I0610 14:39:30.005111 206495 pairing.cc:323] Matching image [2/146]
I0610 14:39:31.230021 206495 feature_matching.cc:47] in 1.225s
I0610 14:39:31.230052 206495 pairing.cc:323] Matching image [3/146]
I0610 14:39:32.408035 206495 feature_matching.cc:47] in 1.178s
I0610 14:39:32.408061 206495 pairing.cc:323] Matching image [4/146]
I0610 14:39:33.482746 206495 feature_matching.cc:47] in 1.075s
I0610 14:39:33.482772 206495 pairing.cc:323] Matching image [5/146]
I0610 14:39:34.506848 206495 feature_matching.cc:47] in 1.024s
I0610 14:39:34.506881 206495 pairing.cc:323] Matching image [6/146]
I0610 14:39:35.577487 206495 feature_matching.cc:47] in 1.071s
I0610 14:39:35.577512 206495 pairing.cc:323] Matching image [7/146]
I0610 14:39:36.647898 206495 feature_matching.cc:47] in 1.070s
I0610 14:39:36.647930 206495 pairing.cc:323] Matching image [8/146]
I0610 14:39:37.684724 206495 feature_matching.cc:47] in 1.037s
I0610 14:39:37.684744 206495 pairing.cc:323] Matching image [9/146]
I0610 14:39:38.697189 206495 feature_matching.cc:47] in 1.012s
I0610 14:39:38.697217 206495 pairing.cc:323] Matching image [10/146]
I0610 14:39:39.707410 206495 feature_matching.cc:47] in 1.010s
I0610 14:39:39.707434 206495 pairing.cc:323] Matching image [11/146]
I0610 14:39:40.708798 206495 feature_matching.cc:47] in 1.001s
I0610 14:39:40.708824 206495 pairing.cc:323] Matching image [12/146]
I0610 14:39:41.700258 206495 feature_matching.cc:47] in 0.991s
I0610 14:39:41.700285 206495 pairing.cc:323] Matching image [13/146]
I0610 14:39:42.665447 206495 feature_matching.cc:47] in 0.965s
I0610 14:39:42.665475 206495 pairing.cc:323] Matching image [14/146]
I0610 14:39:43.623339 206495 feature_matching.cc:47] in 0.958s
I0610 14:39:43.623363 206495 pairing.cc:323] Matching image [15/146]
I0610 14:39:44.631280 206495 feature_matching.cc:47] in 1.008s
I0610 14:39:44.631299 206495 pairing.cc:323] Matching image [16/146]
I0610 14:39:45.617151 206495 feature_matching.cc:47] in 0.986s
I0610 14:39:45.617169 206495 pairing.cc:323] Matching image [17/146]
I0610 14:39:46.589323 206495 feature_matching.cc:47] in 0.972s
I0610 14:39:46.589346 206495 pairing.cc:323] Matching image [18/146]
I0610 14:39:47.550848 206495 feature_matching.cc:47] in 0.962s
I0610 14:39:47.550879 206495 pairing.cc:323] Matching image [19/146]
I0610 14:39:48.499835 206495 feature_matching.cc:47] in 0.949s
I0610 14:39:48.499858 206495 pairing.cc:323] Matching image [20/146]
I0610 14:39:49.420934 206495 feature_matching.cc:47] in 0.921s
I0610 14:39:49.420990 206495 pairing.cc:323] Matching image [21/146]
I0610 14:39:50.335141 206495 feature_matching.cc:47] in 0.914s
I0610 14:39:50.335175 206495 pairing.cc:323] Matching image [22/146]
I0610 14:39:51.218986 206495 feature_matching.cc:47] in 0.884s
I0610 14:39:51.219008 206495 pairing.cc:323] Matching image [23/146]
I0610 14:39:52.120174 206495 feature_matching.cc:47] in 0.901s
I0610 14:39:52.120194 206495 pairing.cc:323] Matching image [24/146]
I0610 14:39:53.058413 206495 feature_matching.cc:47] in 0.938s
I0610 14:39:53.058437 206495 pairing.cc:323] Matching image [25/146]
I0610 14:39:53.903167 206495 feature_matching.cc:47] in 0.845s
...
I0610 14:41:15.939260 206495 timer.cc:91] Elapsed time: 2.309 [minutes]

clementinboittiaux avatar Jun 10 '25 13:06 clementinboittiaux

Matching time is pretty much the same for all versions. Average FLANN: 0.7346s Average FAISS without fix: 0.7775s Average FAISS with fix: 0.7467s

Indexing is faster after fix but still slower than FLANN: Average FLANN: 0.1498s Average FAISS without fix: 0.3365s Average FAISS with fix: 0.1953s

clementinboittiaux avatar Jun 10 '25 13:06 clementinboittiaux

OK, I replicated the issue under Ubuntu 24.04. I think I traced this back to the following issue: https://github.com/facebookresearch/faiss/wiki/Troubleshooting#surprising-faiss-openmp-and-openblas-interaction. The fix of installing libopenblas-openmp-dev and libopenblas0-openmp resolves the issue for me. Make sure to start from an entirely clean build of colmap to test the fix. Rebuilding from an existing build folder did not fix the issue for me. See #3390

Can you please check if this fixes your issue?

I tried but it is still much slower than using OMP_NUM_THREADS=1. Below are the cmake outputs:

$ sudo apt install libopenblas-openmp-dev libopenblas0-openmp
# ...
$ apt list --installed | grep openblas

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libopenblas-dev/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64 [installed]
libopenblas-openmp-dev/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64 [installed]
libopenblas-pthread-dev/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64 [installed,automatic]
libopenblas0-openmp/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64 [installed]
libopenblas0-pthread/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64 [installed,automatic]
libopenblas0/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64 [installed,automatic]
$ mkdir build-openblas-openmp
$ cd build-openblas-openmp
$ cmake -DCMAKE_CUDA_ARCHITECTURES="75;89" -DEigen3_DIR=/usr/local/share/eigen3/cmake/ ..
-- Enabling LSD support
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found FreeImage
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libfreeimage.so
-- Found Metis
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libmetis.so
-- Found Glog
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libglog.so
-- Found SQLite3: /usr/include (found version "3.31.1")
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
-- Found Glew
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libGLEW.so
-- Found Git: /usr/bin/git (found version "2.49.0")
-- Found METIS: /usr/include (found suitable version "5.1.0", minimum required is "5.1.0")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found AMD headers in: /usr/include/suitesparse
-- Found AMD library: /usr/lib/x86_64-linux-gnu/libamd.so
-- Found CAMD headers in: /usr/include/suitesparse
-- Found CAMD library: /usr/lib/x86_64-linux-gnu/libcamd.so
-- Found CCOLAMD headers in: /usr/include/suitesparse
-- Found CCOLAMD library: /usr/lib/x86_64-linux-gnu/libccolamd.so
-- Found CHOLMOD headers in: /usr/include/suitesparse
-- Found CHOLMOD library: /usr/lib/x86_64-linux-gnu/libcholmod.so
-- Found COLAMD headers in: /usr/include/suitesparse
-- Found COLAMD library: /usr/lib/x86_64-linux-gnu/libcolamd.so
-- Found SPQR headers in: /usr/include/suitesparse
-- Found SPQR library: /usr/lib/x86_64-linux-gnu/libspqr.so
-- Found Config headers in: /usr/include/suitesparse
-- Found Config library: /usr/lib/x86_64-linux-gnu/libsuitesparseconfig.so
-- Found Intel Thread Building Blocks (TBB) library (2020.1). Assuming SuiteSparseQR was compiled with TBB.
-- Looking for shm_open in rt
-- Looking for shm_open in rt - found
-- Adding librt to SuiteSparse_config libraries (required on Linux & Unix [not OSX] if SuiteSparse is compiled with timing).
-- Found METIS: /usr/include (found version "5.1.0")
-- Looking for cholmod_metis
-- Looking for cholmod_metis - found
-- Found SuiteSparse: /usr/include/suitesparse (found suitable version "5.7.1", minimum required is "5.7.1") found components: AMD CAMD CCOLAMD CHOLMOD COLAMD SPQR Config
-- Found CUDAToolkit: /usr/local/cuda-12.6/targets/x86_64-linux/include (found suitable version "12.6.85", minimum required is "12.6.85")
-- Detected and included cudss-static-targets.cmake
-- Found cudss: (Version:0.5.0
               CMakePackageDir:/usr/lib/x86_64-linux-gnu/cmake/cudss
               IncludeDir:/usr/include
               LibraryDir:/usr/lib/x86_64-linux-gnu/libcudss/12/.
               ComponentsFound:[cudss;cudss_static])
-- Found GTest: /usr/local/lib/cmake/GTest/GTestConfig.cmake (found version "1.14.0")
-- Found required Ceres dependency: absl version 20240116 in /usr/local/lib/cmake/absl
-- Found required Ceres dependency: Eigen version 3.4.0 in /usr/local/share/eigen3/cmake/
-- Found Ceres version: 2.3.0 installed in: /usr/local with components: [EigenSparse, SparseLinearAlgebraLibrary, LAPACK, SuiteSparse, cuDSS, SchurSpecializations]
-- Using header-only CGAL
-- Targetting Unix Makefiles
-- Using /usr/bin/c++ compiler.
-- Found GMP: /usr/lib/x86_64-linux-gnu/libgmp.so
-- Found MPFR: /usr/lib/x86_64-linux-gnu/libmpfr.so
-- Boost include dirs: /usr/include
-- Boost libraries:
-- Using gcc version 4 or later. Adding -frounding-math
-- Found CGAL
--   Includes : /usr/include
--   Libraries : CGAL
-- Disabling download support (Curl/Crypto not found)
-- The CUDA compiler identification is NVIDIA 12.6.85 with host compiler GNU 9.4.0
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /usr/local/cuda-12.6/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Enabling CUDA support (version: 12.6.85, archs: 75;89)
-- Found Qt
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5Core
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5OpenGL
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5Widgets
-- Enabling GUI support
-- Enabling OpenGL support
-- Enabling GPU support (OpenGL: ON, CUDA: ON)
-- Build type not specified, using Release
-- Enabling SIMD support
-- Disabling interprocedural optimization
-- Disabling ccache support
-- Disabling profiling support
-- Disabling tests
-- Disabling coverage support
-- Configuring PoseLib...
-- BUILD_SHARED_LIBS: OFF
-- CMAKE_BUILD_TYPE: Release
-- CMAKE_GENERATOR: Single-config
-- CMAKE_GENERATOR: Unix Makefiles
-- CMAKE_REGISTRY_FOLDER: OFF
-- Found Eigen3: /usr/local/include/eigen3 (found suitable version "3.4.0", minimum required is "3.1.0")
-- Configuring PoseLib... done
-- Configuring faiss...
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP_CUDA: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found BLAS: /usr/lib/x86_64-linux-gnu/libopenblas.so
-- Found LAPACK: /usr/lib/x86_64-linux-gnu/libopenblas.so;-lpthread;-lm;-ldl
-- Configuring faiss... done
-- Configuring done (9.9s)
-- Generating done (0.3s)
-- Build files have been written to: /home/zhensheng/src/colmap/build-openblas-openmp

yzslab avatar Jun 10 '25 14:06 yzslab

You may have to uninstall the pthread version of openblas. It looks like it is still finding the wrong version: Found LAPACK: /usr/lib/x86_64-linux-gnu/libopenblas.so;-lpthread;-lm;-ldl.

ahojnnes avatar Jun 10 '25 14:06 ahojnnes

You may have to uninstall the pthread version of openblas. It looks like it is still finding the wrong version: Found LAPACK: /usr/lib/x86_64-linux-gnu/libopenblas.so;-lpthread;-lm;-ldl.

Linking to the openmp version indeed fixes this issue:

$ cmake -DCMAKE_CUDA_ARCHITECTURES="75;89" -DEigen3_DIR=/usr/local/share/eigen3/cmake/ -DBLAS_LIBRARIES=/usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblas.so ..
-- Enabling LSD support
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found FreeImage
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libfreeimage.so
-- Found Metis
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libmetis.so
-- Found Glog
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libglog.so
-- Found SQLite3: /usr/include (found version "3.31.1")
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
-- Found Glew
--   Includes : /usr/include
--   Libraries : /usr/lib/x86_64-linux-gnu/libGLEW.so
-- Found Git: /usr/bin/git (found version "2.49.0")
-- Found METIS: /usr/include (found suitable version "5.1.0", minimum required is "5.1.0")
-- Found AMD headers in: /usr/include/suitesparse
-- Found AMD library: /usr/lib/x86_64-linux-gnu/libamd.so
-- Found CAMD headers in: /usr/include/suitesparse
-- Found CAMD library: /usr/lib/x86_64-linux-gnu/libcamd.so
-- Found CCOLAMD headers in: /usr/include/suitesparse
-- Found CCOLAMD library: /usr/lib/x86_64-linux-gnu/libccolamd.so
-- Found CHOLMOD headers in: /usr/include/suitesparse
-- Found CHOLMOD library: /usr/lib/x86_64-linux-gnu/libcholmod.so
-- Found COLAMD headers in: /usr/include/suitesparse
-- Found COLAMD library: /usr/lib/x86_64-linux-gnu/libcolamd.so
-- Found SPQR headers in: /usr/include/suitesparse
-- Found SPQR library: /usr/lib/x86_64-linux-gnu/libspqr.so
-- Found Config headers in: /usr/include/suitesparse
-- Found Config library: /usr/lib/x86_64-linux-gnu/libsuitesparseconfig.so
-- Found Intel Thread Building Blocks (TBB) library (2020.1). Assuming SuiteSparseQR was compiled with TBB.
-- Looking for shm_open in rt
-- Looking for shm_open in rt - found
-- Adding librt to SuiteSparse_config libraries (required on Linux & Unix [not OSX] if SuiteSparse is compiled with timing).
-- Found METIS: /usr/include (found version "5.1.0")
-- Looking for cholmod_metis
-- Looking for cholmod_metis - found
-- Found SuiteSparse: /usr/include/suitesparse (found suitable version "5.7.1", minimum required is "5.7.1") found components: AMD CAMD CCOLAMD CHOLMOD COLAMD SPQR Config
-- Found CUDAToolkit: /usr/local/cuda-12.6/targets/x86_64-linux/include (found suitable version "12.6.85", minimum required is "12.6.85")
-- Found Threads: TRUE
-- Detected and included cudss-static-targets.cmake
-- Found cudss: (Version:0.5.0
               CMakePackageDir:/usr/lib/x86_64-linux-gnu/cmake/cudss
               IncludeDir:/usr/include
               LibraryDir:/usr/lib/x86_64-linux-gnu/libcudss/12/.
               ComponentsFound:[cudss;cudss_static])
-- Found GTest: /usr/local/lib/cmake/GTest/GTestConfig.cmake (found version "1.14.0")
-- Found required Ceres dependency: absl version 20240116 in /usr/local/lib/cmake/absl
-- Found required Ceres dependency: Eigen version 3.4.0 in /usr/local/share/eigen3/cmake/
-- Found Ceres version: 2.3.0 installed in: /usr/local with components: [EigenSparse, SparseLinearAlgebraLibrary, LAPACK, SuiteSparse, cuDSS, SchurSpecializations]
-- Using header-only CGAL
-- Targetting Unix Makefiles
-- Using /usr/bin/c++ compiler.
-- Found GMP: /usr/lib/x86_64-linux-gnu/libgmp.so
-- Found MPFR: /usr/lib/x86_64-linux-gnu/libmpfr.so
-- Boost include dirs: /usr/include
-- Boost libraries:
-- Using gcc version 4 or later. Adding -frounding-math
-- Found CGAL
--   Includes : /usr/include
--   Libraries : CGAL
-- Disabling download support (Curl/Crypto not found)
-- The CUDA compiler identification is NVIDIA 12.6.85 with host compiler GNU 9.4.0
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /usr/local/cuda-12.6/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Enabling CUDA support (version: 12.6.85, archs: 75;89)
-- Found Qt
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5Core
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5OpenGL
--   Module : /usr/lib/x86_64-linux-gnu/cmake/Qt5Widgets
-- Enabling GUI support
-- Enabling OpenGL support
-- Enabling GPU support (OpenGL: ON, CUDA: ON)
-- Build type not specified, using Release
-- Enabling SIMD support
-- Disabling interprocedural optimization
-- Disabling ccache support
-- Disabling profiling support
-- Disabling tests
-- Disabling coverage support
-- Configuring PoseLib...
-- BUILD_SHARED_LIBS: OFF
-- CMAKE_BUILD_TYPE: Release
-- CMAKE_GENERATOR: Single-config
-- CMAKE_GENERATOR: Unix Makefiles
-- CMAKE_REGISTRY_FOLDER: OFF
-- Found Eigen3: /usr/local/include/eigen3 (found suitable version "3.4.0", minimum required is "3.1.0")
-- Configuring PoseLib... done
-- Configuring faiss...
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP_CUDA: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found BLAS: /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblas.so
-- Found LAPACK: /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblas.so;-lpthread;-lm;-ldl
-- Configuring faiss... done
-- Configuring done (13.3s)
CMake Warning at cmake/CMakeHelper.cmake:105 (add_executable):
  Cannot generate a safe runtime search path for target colmap_main because
  files in some directories may conflict with libraries in implicit
  directories:

    runtime library [libopenblas.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /usr/lib/x86_64-linux-gnu/openblas-openmp

  Some of these libraries may not be found correctly.
Call Stack (most recent call first):
  src/colmap/exe/CMakeLists.txt:69 (COLMAP_ADD_EXECUTABLE)


-- Generating done (0.3s)
-- Build files have been written to: /home/zhensheng/src/colmap/build-openblas-openmp
$ make -j
# ...
$ ldd ~/src/colmap/build-openblas-openmp/src/colmap/exe/colmap | grep -i blas
        libopenblas.so.0 => /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblas.so.0 (0x00007fcad0fdf000)
        libcublas.so.12 => /usr/local/cuda-12.6/lib64/libcublas.so.12 (0x00007fcac111b000)
        libblas.so.3 => /lib/x86_64-linux-gnu/libblas.so.3 (0x00007fcaa63e9000)
        libcublasLt.so.12 => /usr/local/cuda-12.6/lib64/libcublasLt.so.12 (0x00007fca8163d000)
$ pushd ~/data/TanksAndTemples/colmap/Family-test
~/data/TanksAndTemples/colmap/Family-test ~/src/colmap/build-openblas-openmp
$ ~/src/colmap/build-openblas-openmp/src/colmap/exe/colmap vocab_tree_matcher --database_path colmap.db --VocabTreeMatching.vocab_tree_path ~/.cache/colmap/vocab_tree_faiss_flickr100K_words32K.bin
I0610 23:34:29.371321 2519190 misc.cc:44]
==============================================================================
Feature matching
==============================================================================
I0610 23:34:29.372686 2519191 sift.cc:1428] Creating SIFT GPU feature matcher
I0610 23:34:29.499990 2519190 pairing.cc:238] Generating image pairs with vocabulary tree...
I0610 23:34:29.543471 2519190 pairing.cc:362] Indexing image [1/152]
I0610 23:34:29.602301 2519190 pairing.cc:373]  in 0.059s
I0610 23:34:29.602334 2519190 pairing.cc:362] Indexing image [2/152]
I0610 23:34:29.640093 2519190 pairing.cc:373]  in 0.038s
I0610 23:34:29.640125 2519190 pairing.cc:362] Indexing image [3/152]
I0610 23:34:29.675343 2519190 pairing.cc:373]  in 0.035s
I0610 23:34:29.675375 2519190 pairing.cc:362] Indexing image [4/152]
I0610 23:34:29.710184 2519190 pairing.cc:373]  in 0.035s
I0610 23:34:29.710213 2519190 pairing.cc:362] Indexing image [5/152]
I0610 23:34:29.746186 2519190 pairing.cc:373]  in 0.036s
# ...

yzslab avatar Jun 10 '25 15:06 yzslab