Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SCIP, SCIP_PaPILO] use bliss_jll and enable boost #6054

Merged
merged 1 commit into from
Jan 5, 2023

Conversation

benlorenz
Copy link
Contributor

I bumped the patch-level from 300 to 301 to be able to add a compat entry for this version in polymake_jll.
This uses FindBLISS.cmake from the scip repo which does not do any version checks but this should not be necessary here.
I ran the testsuite for SCIP.jl on linux with locally built binaries and checked that I can now compile polymake_jll with the scip and soplex interfaces active.

cc: @matbesancon
fixes: #5651

S/SCIP/build_tarballs.jl Outdated Show resolved Hide resolved
@matbesancon
Copy link
Contributor

apart from the minor comment from @fingolfin looks good to me, thanks!

@@ -17,9 +18,15 @@ script = raw"""
# remove when CMake accounts for this
if [[ "${target}" == *86*-linux-gnu ]]; then
export LDFLAGS="-lrt"
elif [[ "${target}" == *-mingw* ]]; then
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

was this tested on windows? So far I've never managed to have the windows binaries work

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this change the linker would complain that it can't find bliss. I did not test it on Windows but I can give it a try in a VM later today.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is optional of course, but if it resolves the problem that would be fantastic

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't seem to change anything, I get the same crashes on Windows (without any meaningful backtrace) when using the current SCIP_jll and with my new binaries.

@benlorenz benlorenz marked this pull request as ready for review January 4, 2023 23:19
@giordano giordano merged commit d3d409b into JuliaPackaging:master Jan 5, 2023
@matbesancon
Copy link
Contributor

@benlorenz it seems it didn't suffice to get the windows build working, there is still a segfault somewhere :/
scipopt/SCIP.jl#254

@benlorenz
Copy link
Contributor Author

@benlorenz it seems it didn't suffice to get the windows build working, there is still a segfault somewhere :/ scipopt/SCIP.jl#254

Yes, that is what I observed as well and posted further up: #6054 (comment)

I did a little bit of experiments with different configurations and some debugging, the crash seems to happen in the constructor for SPxSolverBase and might be related to the thread_local infinity values. Setting -DTHREADLOCAL="" as a CXXFLAG makes the crash disappear.
Unfortunately it seems to run into some infinite loop a little bit later, more precisely the loop seems to be in heurInitAlns (it is in the disassembly for this function, but it might not be in the source for that function directly ...).

@matbesancon
Copy link
Contributor

ping @leoneifler in case if you've an idea about the thread local option?

@benlorenz
Copy link
Contributor Author

benlorenz commented Jan 6, 2023

The thread_local issue also disappears with gcc 12, but this is probably more related to the bundled binutils version which is version 2.38 for gcc 12.

With gcc 11 (binutils 2.36) we get errors like this:
/workspace/srcdir/scipoptsuite-8.0.3/soplex/src/soplex/spxlpbase_real.hpp:2450:(.text+0x559): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against undefined symbol `TLS init function for soplex::infinity'

The disassembly for the crashing code looks similar to what was happening here:
msys2/MINGW-packages#8868

Another option to fix this crash is to make soplex::infinity not THREADLOCAL, it is const anyway?

I did a few further experiments, that other weird infinite loop in heurInitAlns is gone with -O1, with -O3 it looks like this:

   for( i = 0; i < heurdata->nneighborhoods; ++i )
    1080:       83 c7 01                add    $0x1,%edi
    1083:       48 83 c5 08             add    $0x8,%rbp
    1087:       41 39 bc 24 d8 00 00    cmp    %edi,0xd8(%r12)
    108e:       00 
    108f:       0f 8f 9f fe ff ff       jg     f34 <heurInitAlns+0x84>
    1095:       eb fe                   jmp    1095 <heurInitAlns+0x1e5>
    1097:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
    109e:       00 00 

(Note that jmp to 1095 in line 1095 ...)

So in summary, building with -O1 together with one of the following three options makes at least some things work.

  • using gcc12
  • setting -DTHREADLOCAL=''
  • removing THREADLOCAL from soplex::infinity

At some point this discussion should probably be continued in the SCIP.jl repo.

Also I don't really have time to continue this debugging any further now but I hope this helps someone who knows more about the internals of scip & soplex.

Some tests with julia 1.8.4 on 64 bit Windows:
julia> using SCIP

julia> using Test

julia> @static if VERSION >= v"1.7"
           import LinearAlgebra, OpenBLAS32_jll
           LinearAlgebra.BLAS.lbt_forward(OpenBLAS32_jll.libopenblas_path)
       end
4860

julia>     include("test/MOI_nonlinear_exprs.jl");
Test Summary:      | Pass  Total   Time
linear expressions |    6      6  37.4s
Test Summary: | Pass  Total  Time
pot pourri    |   18     18  9.5s
Test Summary:                        |Time
add nonlinear constraint after solve | None  1.8s

julia>      include("test/direct_library_calls.jl");
Test Summary:                  | Pass  Total  Time
create small problem and solve |   18     18  4.3s
Test Summary:                | Pass  Total  Time
SCIP_CALL macro (@SCIP_CALL) |    3      3  1.1s

julia>     include("test/scip_data.jl");
Test Summary:          | Pass  Total  Time
create and manual free |    2      2  2.6s
Test Summary:                             | Pass  Total  Time
create, add var and cons, and manual free |    2      2  0.9s
Test Summary:               | Pass  Total  Time
create and semi-manual free |    2      2  0.2s
Test Summary:                       | Pass  Total  Time
create with vars and cons, and free |   22     22  0.1s
Test Summary:                               | Pass  Total  Time
create vars and cons, delete some, and free |   10     10  0.0s
Test Summary:    | Pass  Total   Time
print statistics |   51     51  35.7s

julia> include("test/sepa_support.jl");

julia>     include("test/sepa.jl");
Test Summary:             | Pass  Total  Time
DummySepa (no separation) |    1      1  5.0s
Test Summary:                               | Pass  Total  Time
AddSingleCut (cut off one optimal solution) |    5      5  4.0s
Test Summary:                                   | Pass  Total  Time
AddSingleCut (cut off another optimal solution) |    5      5  0.4s
Test Summary:                 | Pass  Total  Time
AddSingleCut (too strong cut) |    5      5  0.2s

julia>     include("test/cutcallback.jl");
Test Summary:             | Pass  Total  Time
obtaining the LP-solution |    5      5  2.3s
Test Summary:                | Pass  Total  Time
cutting one optimal solution |    6      6  1.8s
Test Summary:                    | Pass  Total  Time
cutting another optimal solution |    6      6  0.5s

Other things not so much:

julia>     include("test/MOI_wrapper_direct.jl")

Assertion failed: coef != 0.0, file /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip/expr.c, line 3425

Thread 1 hit Breakpoint 1, 0x00007ffc2ba520b7 in msvcrt!abort () from C:\Windows\System32\msvcrt.dll
=> 0x00007ffc2ba520b7 <msvcrt!abort+7>: e8 f0 b7 ff ff  call   0x7ffc2ba4d8ac <msvcrt!__fpecode+28>
(gdb) bt
#0  0x00007ffc2ba520b7 in msvcrt!abort () from C:\Windows\System32\msvcrt.dll
#1  0x00007ffc2ba4e9ed in msvcrt!_assert () from C:\Windows\System32\msvcrt.dll
#2  0x0000000005f26014 in SCIPexprCheckQuadratic (set=0x252ab1d92a0, blkmem=0x2529dd89220, expr=expr@entry=0x252ac712190, isquadratic=<optimized out>,
    isquadratic@entry=0x6b649f9b60) at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip/expr.c:3425
#3  0x00000000060bb677 in SCIPcheckExprQuadratic (scip=0x2529dbc5d40, expr=0x252ac712190, isquadratic=0x6b649f9b60)
    at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip/scip_expr.c:2360
#4  0x00000252ea6b3c35 in SCIPcheckExprQuadratic () at C:\Users\User\.julia\dev\SCIP\src/LibSCIP.jl:3822
#5  macro expansion () at C:\Users\User\.julia\dev\SCIP\src/wrapper.jl:11
#6  julia_get_2679 (o=..., ci=...) at C:\Users\User\.julia\dev\SCIP\src\MOI_wrapper\quadratic_constraints.jl:56
#7  0x000002529e5422c9 in macro expansion () at C:\msys64\home\User\julia2\usr\share\julia\stdlib\v1.8\Test\src/Test.jl:464

or:

julia>  include("test/conshdlr_support.jl");

julia>     include("test/conshdlr.jl");
Test Summary:                                    | Pass  Total  Time
dummy conshdlr (always satisfied, no constraint) |    3      3  1.6s
Test Summary:                                      | Pass  Total  Time
dummy conshdlr (always satisfied, with constraint) |    3      3  0.7s
Test Summary:                                                  | Pass  Total  Time
dummy conshdlr (always satisfied, no constraint, but needs it) |    3      3  0.0s
Test Summary:                                       | Pass  Total  Time
never satisfied conshdlr (does not need constraint) |    3      3  1.0s
Test Summary:                                                    | Pass  Total  Time
never satisfied conshdlr (needs constraint but does not have it) |    3      3  0.0s
Assertion failed: divecandvars != NULL, file /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip/heur_farkasdiving.c, line 143

signal (22): SIGABRT
in expression starting at C:\Users\User\.julia\dev\SCIP\test\conshdlr.jl:105
crt_sig_handler at C:/msys64/home/User/julia2/src\signals-win.c:93
raise at C:\Windows\System32\msvcrt.dll (unknown line)
abort at C:\Windows\System32\msvcrt.dll (unknown line)
assert at C:\Windows\System32\msvcrt.dll (unknown line)
checkDivingCandidates at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\heur_farkasdiving.c:143
checkGlobalProperties at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\heur_farkasdiving.c:267 [inlined]
heurExecFarkasdiving at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\heur_farkasdiving.c:401
SCIPheurExec at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\heur.c:1312
SCIPprimalHeuristics at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\solve.c:363
solveNode at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\solve.c:4226 [inlined]
SCIPsolveCIP at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\solve.c:4993
SCIPsolve at /workspace/srcdir/scipoptsuite-8.0.3/scip/src/scip\scip_solve.c:2780
SCIPsolve at C:\Users\User\.julia\dev\SCIP\src\LibSCIP.jl:6566
unknown function (ip: 00000172a97c828d)
jl_apply at C:/msys64/home/User/julia2/src\julia.h:1843 [inlined]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[SCIP]: bliss, boost
4 participants