[Cbc] Threadsafe usage of Cbc

Cornelius Riemenschneider cri at itscope.de
Thu Dec 19 10:44:40 EST 2013


Hello,

thank you very much for your work!

As I?ll be away for the holidays, I?ll try your patch in the new year and will report back.

Can you elaborate on the cut generator problem? Is it user-specified which one is used, or is this a choice done by the algorithm?

And can you point me at the source code for them, so that I can check them for thread safety in case we actually use them?

 

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

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

http://list.coin-or.org/mailman/listinfo/cbc

 

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


More information about the Cbc mailing list