Hi Bruce, thank you for your answer. What I want to know is following: Imagine that I create threads in some way. I want threads to execute the same BC, while using the same memory space. I know that LLVM IR has a nice structure: Context - Module - Execution engine. Is there a way to run several instances of LLVM (using threads for example) with the same memory space? On Fri, May 30, 2014 at 11:18 AM, Bruce Hoult <bruce at hoult.org> wrote:> Hi Jasmin, > > Creating threads is the responsibility of the operating system or runtime > system. It will provide functions that can be called from assembly language > or from a language such as C. > > You can of course write such C programs (or other languages) and then > compile them using Clang & LLVM, but LLVM itself does not know what, for > example, pthread_create() means. It's just a library function. > > > On Fri, May 30, 2014 at 8:46 PM, Jasmin Jahic <jasmin.jahic at gmail.com> > wrote: > >> Hello, >> >> I'm interested in development of multi threaded applications using LLVM. >> I would like to ask, is there a possibility in LLVM to create several >> threads, executing software concurrently, while sharing the same memory >> space? >> If yes, on which level this can be done (e.g. context, execution >> engine,...)? >> >> Best regards, >> Jasmin JAHIC >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140530/99159f17/attachment.html>
On 30 May 2014, at 10:52, Jasmin Jahic <jasmin.jahic at gmail.com> wrote:> What I want to know is following: Imagine that I create threads in some way. I want threads to execute the same BC, while using the same memory space. I know that LLVM IR has a nice structure: Context - Module - Execution engine. Is there a way to run several instances of LLVM (using threads for example) with the same memory space?I think your question is a result of misunderstanding the nature of LLVM. It is not a virtual machine, it is an abstract machine and a set of tools implementing compilers for that abstract machine. You don't run the bitcode (well, you can interpret it, but you don't usually), you compile the bitcode and then run the resulting code. If you want to run the same code on all threads, then you just use the LLVM [MC]JIT to compile it once and then you call the generated functions from different threads. David
On 30 May 2014 10:52, Jasmin Jahic <jasmin.jahic at gmail.com> wrote:> What I want to know is following: Imagine that I create threads in some way. > I want threads to execute the same BC, while using the same memory space. I > know that LLVM IR has a nice structure: Context - Module - Execution engine. > Is there a way to run several instances of LLVM (using threads for example) > with the same memory space?Do you want to write a program to load LLVM libraries, spawn a few threads and use the LLVM libraries inside each thread? And, if you do, are you trying to understand where the cut is, regarding shared memory and thread-local memory, WRT the LLVM API? IIUC, you should have a separate Module per thread, to be able to compile/run on each thread. AFAIK, the ExecutionEngine has no concept of multiple threads, so you would have to use one EE per thread, which is wasteful. But that was my understanding a few years ago, and it might have changed. --renato
On 30 May 2014 11:01, David Chisnall <David.Chisnall at cl.cam.ac.uk> wrote:> I think your question is a result of misunderstanding the nature of LLVM. It is not a virtual machine, it is an abstract machine and a set of tools implementing compilers for that abstract machine. You don't run the bitcode (well, you can interpret it, but you don't usually), you compile the bitcode and then run the resulting code. If you want to run the same code on all threads, then you just use the LLVM [MC]JIT to compile it once and then you call the generated functions from different threads.Try VMKit: http://vmkit.llvm.org/ They may have answered your question already. --renato