Well, in that case, it sounds like having multiple independent Julia instances in a single process may be a surmountable problem, but it won't happen any time soon.
On Fri, Aug 1, 2014 at 2:45 PM, Jameson Nash <[email protected]> wrote: > llvm can be safely used from multiple threads, it is only challenging to > use because (as Keno pointed out) you need to synchronize the Julia side, > meaning care needs to be taken to compile a function exactly once, and not > attempt to run it until it is finished being compiled. > > We need to switch cfunction to generating custom wrappers at some point > anyways, for other reasons, so it is largely irrelevant to the internal > implementation how the external-facing implemention handles function call > entry. > > > On Friday, August 1, 2014, Keno Fischer <[email protected]> > wrote: > >> Yes, that's correct. TLS can be implemented pretty efficiently with a >> small bit of care. Regarding LLVM, it is technically possible to have >> multiple independent instances of LLVM in one thread. The reason that >> wasn't an option for the multithreaded case is that those instances >> can't share any code so it wouldn't be useful. >> >> On Fri, Aug 1, 2014 at 2:17 PM, Stefan Karpinski <[email protected]> >> wrote: >> > On Fri, Aug 1, 2014 at 9:11 AM, Jameson Nash <[email protected]> wrote: >> >> >> >> There isn't much benefit to running multiple julia instances from one >> >> binary, since Julia uses many c libraries, and these have generally >> not been >> >> written with this in mind. >> > >> > >> > Yes, also a problem, although threads may raise similar issues. >> > >> >> >> >> It might be faster to internally pass around pointer to the TLS in a >> >> register, since many functions need to access the GC-frame, so we might >> >> still want to do that for a different reason. But the external >> interface can >> >> just pull that information out of TLS, and maintaining thread-local >> state is >> >> not the same as having independent instances in one process. >> > >> > >> > My understanding – and Keno can probably correct me if I'm wrong here – >> is >> > that the fast way of doing TLS basically does just store it in a >> register. >> > However, there may be situations where Julia is called in a way that it >> > can't use the fast TLS mechanism (e.g. when libjulia is loaded as a >> shared >> > library), in which case avoiding slow TLS lookups wherever possible >> would >> > help in those cases. >> >
