Skip to content

poisson_mesher crashes with PoissonRecon::Exception on ARM64 (aarch64) — "Failed to close loop for node" #4335

Description

@LeanderFischer

Describe the bug

colmap poisson_mesher crashes with a PoissonRecon::Exception on an ARM64 (aarch64) system (NVIDIA DGX Spark / Grace Blackwell). The same pipeline and data work correctly on x86_64 machines. The crash occurs during isosurface extraction (extractLevelSet) inside a parallel region (GOMP_parallel), suggesting either a threading race condition or a floating-point behavior difference on ARM/NEON.

The error message is:

terminate called after throwing an instance of 'PoissonRecon::Exception'
  what():  [EXCEPTION] .../PoissonRecon/FEMTree.LevelSet.3D.inl (Line 1645)
            operator()
            Failed to close loop for node[57220]: [2 40 14 @ 6] | ...

The crash is not data-dependent — it occurs on both the raw fused_geometric.ply output from patch_match_stereo + stereo_fusion and on cleaned/filtered versions of the same point cloud. It also occurs at any --PoissonMeshing.depth (tested 10 and default 13).

To Reproduce

  1. Build COLMAP from source on an aarch64 system (tested on NVIDIA DGX Spark with GB10 GPU)
  2. Run a standard dense reconstruction pipeline (feature_extractorexhaustive_matchermapperpatch_match_stereostereo_fusion)
  3. Run colmap poisson_mesher --input_path <fused_geometric.ply> --output_path <output.ply>
  4. Crash with PoissonRecon::Exception / SIGABRT

The input point cloud has ~30M vertices with valid normals (float x/y/z/nx/ny/nz + uchar RGB).

Expected behavior

poisson_mesher should produce a Poisson surface mesh, as it does on x86_64 with the same COLMAP version and equivalent data.

Environment:

  • OS: Ubuntu 24.04.4 LTS (Noble Numbat)
  • Architecture: aarch64 (ARM64)
  • Hardware: NVIDIA DGX Spark (Grace CPU + Blackwell GB10 GPU)
  • COLMAP Version: 4.1.0.dev0 (commit 9b4190b8, built with CUDA)
  • GPU Driver: 580.126.09
  • CPU cores: 20
  • Capture Device: DJI Matrice 4T (drone)

Additional context

  • The recent commit 9b4190b8 ("Fix empty PatchMatch results on Blackwell GPUs") was needed to get patch_match_stereo working on this platform — so ARM/Blackwell support is still maturing.
  • The crash occurs in FEMTree.LevelSet.3D.inl line 1645, inside a ParallelFor lambda during SetLevelSet / extractLevelSet.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions