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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions