[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