[Cbc] Threadsafe usage of Cbc

John Forrest john.forrest at fastercoin.com
Tue Jan 14 08:56:11 EST 2014


Cornelius,

I will check further, but I don't think that patch is correct.

I will e-mail when I have finished investigating/updating.

John

On 14/01/14 12:32, Cornelius Riemenschneider wrote:
>
> Hello John,
>
> I finally made it to test your fix.
>
> I also modified callCbc with the attached patch, because the framework 
> we use to drive cbc uses callCbc.
>
> I now get a crash in ClpPackedMatrix::scale, with the following 
> backtrace (only relevant lines included)
>
> #4  0x00007f51494f5460 in JVM_handle_linux_signal (sig=11, 
> info=0x7f510c9ff8f0, ucVoid=0x7f510c9ff7c0,
>
>     abort_if_unrecognized=1)
>
>     at 
> /home/jmm/jdk/openjdk-6-6b27-1.12.6/build/openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp:528
>
> #5  <signal handler called>
>
> #6  __memset_sse2 () at ../sysdeps/x86_64/multiarch/../memset.S:387
>
> #7  0x00007f50fb5d428a in ClpPackedMatrix::scale(ClpModel*, ClpSimplex 
> const*) const ()
>
>    from 
> /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so
>
> #8  0x00007f50fb599809 in 
> OsiClpSolverInterface::setSpecialOptions(unsigned int) ()
>
>    from 
> /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so
>
> #9  0x00007f50fb3b5264 in CbcMain1(int, char const**, CbcModel&, int 
> (*)(CbcModel*, int), CbcSolverUsefulData&)
>
>     ()
>
>    from 
> /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so
>
> #10 0x00007f50fb3d14a7 in callCbc1(char const*, CbcModel&, int 
> (*)(CbcModel*, int)) ()
>
>    from 
> /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so
>
> #11 0x00007f50fb3d1b54 in callCbc(char const*, CbcModel&) ()
>
>    from 
> /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so
>
> #12 0x00007f50fb39c320 in operations_research::CBCInterface::Solve 
> (this=0x7f511c0a5fe0, param=...)
>
>     at src/linear_solver/cbc_interface.cc:378
>
> #13 0x00007f50fb36d2e2 in operations_research::MPSolver::Solve 
> (this=0x7f511f4dadf0, param=...)
>
>     at src/linear_solver/linear_solver.cc:973
>
> #14 0x00007f50fb36d25f in operations_research::MPSolver::Solve 
> (this=0x7f511f4dadf0)
>
>     at src/linear_solver/linear_solver.cc:961
>
> #15 0x00007f50fb366c6f in 
> Java_com_google_ortools_linearsolver_mainJNI_MPSolver_1solve_1_1SWIG_10 ()
>
>    from 
> /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so
>
> Do you have any idea about the crash?
>
> If not, where should I start debugging the issue?
>
> Regards,
>
> Cornelius Riemenschneider
>
> --
>
> ITscope GmbH
>
> Ludwig-Erhard-Allee 20
>
> 76131 Karlsruhe
>
> Email: cornelius.riemenschneider at itscope.de
>
> https://www.itscope.com
>
> Handelsregister: AG Mannheim, HRB 232782
>
> Sitz der Gesellschaft: Karlsruhe
>
> Geschäftsführer: Alexander Münkel, Benjamin Mund, Stefan Reger
>
> *Von:*john.forrest at fastercoin.com 
> [mailto:cbc-bounces at list.coin-or.org] *Im Auftrag von *John Forrest
> *Gesendet:* Mittwoch, 18. Dezember 2013 14:23
> *An:* cbc at list.coin-or.org
> *Betreff:* Re: [Cbc] Threadsafe usage of Cbc
>
> Cornelius,
>
> I have made some changes, which I hope will be enough for you.  I have 
> done the minimum amount of work.
>
> I don't think they can hurt anyone but as Ted Ralphs is preparing a 
> new release, I will delay updating Cbc/stable/CbcSolver.?pp for a day 
> or two.  If anyone wants to test the code I attach CbcSolver.?pp.
>
> You need to compile with -DCBC_THREAD_SAFE.  The main thing this does 
> is that Cbc only reads argv/argc type parameters in a crude threadsafe 
> way.  You also need to use alternative versions of CbcMain0/1.
>
> parallel.cpp has been added to Cbc/examples which is a simple example.
>
> Please tell me if there are any problems.  Some lesser used Cgl cut 
> generators may not be threadsafe, but I think the commonly used ones are.
>
> John Forrest
>
>
> On 17/12/13 15:11, Cornelius Riemenschneider wrote:
>
>     Hello,
>
>     we use CBC via googles or-tools from java in our application.
>
>     Compared to scientific problems, our problems are small and solved
>     by Cbc in <1s (which is great!).
>
>     As we process requests from users concurrently, we'd also like to
>     call Cbc concurrently.
>
>     Currently, this is impossible, because Cbc uses the static
>     parameters array in CbcMain0 and CbcMain1 and thus crashes or
>     reads incorrect parameters.
>
>     One backtrace, for example is:
>
>     #2 0x00007fb3435bf52b in __libc_message (do_abort=<optimized out>,
>     fmt=<optimized out>) at ../sysdeps/unix/sysv/linux/libc_fatal.c:189
>     #3 0x00007fb3435c8d76 in malloc_printerr (action=3,
>     str=0x7fb3436a1248 "double free or corruption (!prev)",
>     ptr=<optimized out>) at malloc.c:6283
>     #4 0x00007fb3435cdaac in *__GI___libc_free (mem=<optimized out>)
>     at malloc.c:3738
>     #5 0x00007fb342733f06 in std::string::assign(std::string const&)
>     () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
>     #6 0x00007fb2d652cb7b in establishParams(int&, CbcOrClpParam*) ()
>     from libjnilinearsolver.so
>     #7 0x00007fb2d64edc3b in CbcMain0(CbcModel&) () from
>     libjnilinearsolver.so
>     #8 0x00007fb2d6511bec in callCbc(char const*, CbcModel&) () from
>     libjnilinearsolver.so
>     #9 0x00007fb2d64e3fce in
>     operations_research::CBCInterface::Solve(operations_research::MPSolverParameters
>     const&) () from libjnilinearsolver.so
>     #10 0x00007fb2d64cfe45 in
>     operations_research::MPSolver::Solve(operations_research::MPSolverParameters
>     const&) () from libjnilinearsolver.so
>     #11 0x00007fb2d64cff3b in operations_research::MPSolver::Solve()
>     () from libjnilinearsolver.so
>     #12 0x00007fb2d64c91cf in
>     Java_com_google_ortools_linearsolver_mainJNI_MPSolver_1solve_1_1SWIG_10
>     () from libjnilinearsolver.so
>
>     # from here on it's just the JVM
>
>     As I don't know the code and it's hard to read, I can't really fix
>     the problem by myself,
>
>     but wouldn't it be better to move parameters inside CbcModel
>     instead of having a static array laying around?
>
>     Andi f that's done (or another solution is found), do you know of
>     any thread-safety issues in cbc?
>
>     Keep in mind, we don't want Cbc to solve our problem in multiple
>     threads, we just want to be able to solve different problems
>     simultaneous.
>
>     Regards,
>
>     Cornelius Riemenschneider
>
>     --
>
>     ITscope GmbH
>
>     Ludwig-Erhard-Allee 20
>
>     76131 Karlsruhe
>
>     Email: cornelius.riemenschneider at itscope.de
>     <mailto:cornelius.riemenschneider at itscope.de>
>
>     https://www.itscope.com
>
>     Handelsregister: AG Mannheim, HRB 232782
>
>     Sitz der Gesellschaft: Karlsruhe
>
>     Geschäftsführer: Alexander Münkel, Benjamin Mund, Stefan Reger
>
>
>
>
>     _______________________________________________
>
>     Cbc mailing list
>
>     Cbc at list.coin-or.org  <mailto:Cbc at list.coin-or.org>
>
>     http://list.coin-or.org/mailman/listinfo/cbc
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20140114/b2d60993/attachment.html>


More information about the Cbc mailing list