From: Xavier D. <xav...@gm...> - 2008-04-18 15:36:52
|
On Fri, Apr 18, 2008 at 11:04 AM, Soeren Sonnenburg <swi...@nn...> wrote: > > The swig-octave module doesn't support multithreading (as noted in the > > docs)-- if two threads both call director methods, they will each run > > the interpreter in parallel. > > OK I understand. But why is this happening? > > CSVM::classify() launches a number of classify_example_helper threads, > that themselves call classify_example. Then the pthread_join collects > them and that's it. I don't understand why/how a swig method is involved > here - this is all internal in classify - only at the end there will be > a CLabel object that is returned... Because classify_example is a director method. It has a generated C++ implementation (SwigDirector_LibSVM::classify_example, from the stacktrace) that marshals the call into Octave, via the interpreter, who in turn routes to your C++ implementation via the non-director wrapper. Threading issues aside, you should be aware of this marshal/unmarshal overhead with director methods. The other languages have the same overhead. There's a good discussion of this in the swig-python docs. Xavier |