Skip to content

HiGHS 1.15.1: C++ API crashes with "IOT instruction (core dumped)", CLI executable succeeds #3150

Description

@sducomman

Hello,

For some MIP model I have some IOT instruction (core dumped) when parallel is activated.
But when I run this MIP model in command line, Highs solved it.

Example with the file last_model.lp :
With this code :

#include <Highs.h>

int main(int argc, char **argv) {

    std::string filename = "last_model.lp";
    Highs highs;
    highs.readModel(filename);
    highs.setOptionValue("parallel", "on");
    highs.run();
}

The output is

Running HiGHS 1.15.1 (git hash: 04024d7): Copyright (c) 2026 under MIT licence terms
Includes third-party software components, see THIRD_PARTY_NOTICES.md for full details
MIP last_model has 21180 rows; 22063 cols; 170585 nonzeros; 22063 integer variables (8839 binary)
Coefficient ranges:
  Matrix  [1e+00, 1e+06]
  Cost    [1e+04, 1e+04]
  Bound   [1e+00, 6e+03]
  RHS     [1e+00, 3e+03]
Presolving model
20760 rows, 20614 cols, 166957 nonzeros 0s
19099 rows, 19230 cols, 154917 nonzeros 0s
Presolve reductions: rows 19099(-2081); columns 19230(-2833); nonzeros 154917(-15668)
Objective function is integral with scale 0.0001

Solving MIP model with:
   19099 rows
   19230 cols (7937 binary, 11293 integer, 0 implied int., 0 continuous, 0 domain fixed)
   154917 nonzeros
   Thread count 11 (of 22 threads). Using 19 max workers. Parallel search on

Src: B => Branching; C => Central rounding; F => Feasibility pump; H => Heuristic;
     I => Shifting; J => Feasibility jump; L => Sub-MIP; P => Empty MIP; R => Randomized rounding;
     S => Solve LP; T => Evaluate node; U => Unbounded; X => User solution; Y => HiGHS solution;
     Z => ZI Round; l => Trivial lower; p => Trivial point; u => Trivial upper; z => Trivial zero

        Nodes      |    B&B Tree     |            Objective Bounds              |  Dynamic Constraints |       Work
Src  Proc. InQueue |  Leaves   Expl. | BestBound       BestSol              Gap |   Cuts   InLp Confl. | LpIters     Time

 J       0       0         0   0.00%   -inf            640000             Large        0      0      0         0     0.5s
 R       0       0         0   0.00%   10000           520000            98.08%        0      0      0       463     0.8s
 C       0       0         0   0.00%   10000           510000            98.04%     2233     47      6       722     1.6s
[1]    985161 IOT instruction (core dumped)  ./bench_error 2>&1 |
       985162 done                           tee "log_error.txt"

But in command line :

../../depends/ubuntu2404/highs/bin/highs last_model.lp --parallel "on" 2>&1 | tee "log_no_error.txt"

Highs resolve the model :

Running HiGHS 1.15.1 (git hash: 04024d7): Copyright (c) 2026 under MIT licence terms
Includes third-party software components, see THIRD_PARTY_NOTICES.md for full details
Command line parsed using CLI11 2.5.0: Copyright (c) 2017-2025 University of Cincinnati
Set option parallel to "on"
MIP last_model has 21180 rows; 22063 cols; 170585 nonzeros; 22063 integer variables (8839 binary)
Coefficient ranges:
  Matrix  [1e+00, 1e+06]
  Cost    [1e+04, 1e+04]
  Bound   [1e+00, 6e+03]
  RHS     [1e+00, 3e+03]
Presolving model
20760 rows, 20614 cols, 166957 nonzeros 0s
19099 rows, 19230 cols, 154917 nonzeros 0s
Presolve reductions: rows 19099(-2081); columns 19230(-2833); nonzeros 154917(-15668)
Objective function is integral with scale 0.0001

Solving MIP model with:
   19099 rows
   19230 cols (7937 binary, 11293 integer, 0 implied int., 0 continuous, 0 domain fixed)
   154917 nonzeros
   Thread count 11 (of 22 threads). Using 19 max workers. Parallel search on

Src: B => Branching; C => Central rounding; F => Feasibility pump; H => Heuristic;
     I => Shifting; J => Feasibility jump; L => Sub-MIP; P => Empty MIP; R => Randomized rounding;
     S => Solve LP; T => Evaluate node; U => Unbounded; X => User solution; Y => HiGHS solution;
     Z => ZI Round; l => Trivial lower; p => Trivial point; u => Trivial upper; z => Trivial zero

        Nodes      |    B&B Tree     |            Objective Bounds              |  Dynamic Constraints |       Work
Src  Proc. InQueue |  Leaves   Expl. | BestBound       BestSol              Gap |   Cuts   InLp Confl. | LpIters     Time

 J       0       0         0   0.00%   -inf            640000             Large        0      0      0         0     0.6s
 R       0       0         0   0.00%   10000           520000            98.08%        0      0      0       463     0.8s
 C       0       0         0   0.00%   10000           510000            98.04%     2233     47      6       722     1.6s
 L       0       0         0 100.00%   10000           10000              0.00%     3588    103      6      1543     7.8s
         1       0         1 100.00%   10000           10000              0.00%     1630    103      6      1718     7.8s

Solving report
  Model             last_model
  Status            Optimal
  Primal bound      10000
  Dual bound        10000
  Gap               0% (tolerance: 0.01%)
  P-D integral      7.04683010339
  Solution status   feasible
                    10000 (objective)
                    0 (bound viol.)
                    0 (int. viol.)
                    0 (row viol.)
  Timing            7.80
                    1.73 (Presolve)
                        MIP    time [calls] = 0.46 [1]
                        subMIP time [calls] = 1.27 [5]
                    6.06 (Solve)
                        MIP    time [calls] = 2.37 [1]
                        subMIP time [calls] = 3.69 [5]
                    0.00 (Postsolve)
                        MIP    time [calls] = 0.00 [1]
                        subMIP time [calls] = 0.00 [5]
  Max sub-MIP depth 10
  Nodes             1
  Repair LPs        0
  LP iterations     1718
                    0 (strong br.)
                    1080 (separation)
                    175 (heuristics)

Environment

  • HiGHS 1.15.1 (git 04024d7)
  • Ubuntu 24.04
  • GCC 13.3
  • x86_64
  • 22 logical CPUs
  • HiGHS built from source with CMake Release

gdb backtrace :

Thread 10 "bench_error" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffd6ffd6c0 (LWP 994723)]
__pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
warning: 44     ./nptl/pthread_kill.c: No such file or directory
(gdb) bt
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
#1  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#2  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3  0x00007ffff764527e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4  0x00007ffff76288ff in __GI_abort () at ./stdlib/abort.c:79
#5  0x00007ffff7f597c2 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#6  0x00007ffff7f7c17d in __gcc_personality_v0 () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#7  0x000055555566fc12 in _Unwind_RaiseException_Phase2 ()
#8  0x00005555556704a0 in _Unwind_RaiseException ()
#9  0x00005555555c3c44 in __cxa_throw ()
#10 0x00007ffff7a84568 in HighsSplitDeque::checkInterrupt() [clone .part.0] [clone .lto_priv.0] ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#11 0x00007ffff7a9c48f in ipx::Control::InterruptCheck(int) const [clone .cold] ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#12 0x00007ffff7d99a86 in ipx::ConjugateResiduals::Solve(ipx::LinearOperator&, ipx::LinearOperator&, std::valarray<double> const&, double, double const*, int, std::valarray<double>&) ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#13 0x00007ffff7da801b in ipx::KKTSolverDiag::_Solve(std::valarray<double> const&, std::valarray<double> const&, double, std::valarray<double>&, std::valarray<double>&, ipx::Info*) ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#14 0x00007ffff7da4aa7 in ipx::KKTSolver::Solve(std::valarray<double> const&, std::valarray<double> const&, double, std::valarray<double>&, std::valarray<double>&, ipx::Info*) () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#15 0x00007ffff7da5dfa in ipx::IPM::SolveNewtonSystem(double const*, double const*, double const*, double const*, double const*, double const*, ipx::IPM::Step&) () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#16 0x00007ffff7da6514 in ipx::IPM::Predictor(ipx::IPM::Step&) ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#17 0x00007ffff7da6eb6 in ipx::IPM::Driver(ipx::KKTSolver*, ipx::Iterate*, ipx::Info*) ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#18 0x00007ffff7daf381 in ipx::LpSolver::RunInitialIPM(ipx::IPM&) ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#19 0x00007ffff7daf860 in ipx::LpSolver::RunIPM() ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#20 0x00007ffff7daf9dd in ipx::LpSolver::InteriorPointSolve() ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#21 0x00007ffff7db0269 in ipx::LpSolver::Solve() ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#22 0x00007ffff7b1dd2b in solveLpIpx(HighsOptions const&, HighsTimer&, HighsLp const&, HighsBasis&, HighsSolution&, HighsModelStatus&, HighsInfo&, HighsCallback&) () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#23 0x00007ffff7b1e72d in solveLpIpx(HighsLpSolverObject&) ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#24 0x00007ffff7baa213 in solveLp(HighsLpSolverObject&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#25 0x00007ffff7b3b518 in Highs::callSolveLp(HighsLp&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#26 0x00007ffff7b30f0d in Highs::calledOptimizeModel()::{lambda(HighsLp&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, double&)#1}::operator()(HighsLp&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, double&) const () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#27 0x00007ffff7b364ba in Highs::calledOptimizeModel() ()
   from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#28 0x00007ffff7c307fe in HighsMipSolverData::startAnalyticCenterComputation(highs::parallel::TaskGroup const&)::{lambda()#1}::operator()() const [clone .lto_priv.0] () from /mnt/data/projets/pbyes-utils-benchmarks/depends/ubuntu2404/highs/lib/libhighs.so.1
#29 0x00007ffff7c35b16 in HighsTask::Callable<HighsMipSolverData::startAnalyticCenterComputation(highs::parallel::TaskGroup const&)::{lambda()#1}>::operator()() [clone .lto_priv.0] ()

Is there any known issue with the parallel MIP search when using the C++ API, or is there any additional information (backtrace, debug build, etc.) that would help diagnose the problem?

last_model.txt

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions