== Quote from scorn (sc...@d.net)'s article > Am 05.01.2011 21:24, schrieb Iain Buclaw: > > == Quote from Scorn (sc...@scorn.net)'s article > >> I too wonder how much work it would be to support OpenMP in gdc. From > >> http://www.drdobbs.com/high-performance-computing/226300277 it seems to be that > >> there is also quite a lot of magic on the compiler side (but which could > > already > >> be in the gcc parts). Maybe a concurrent garbage collector would also be needed > >> (Leandro Lucarella worked on this for his diploma thesis). > >> I hope someone can help to clear this up. If not OpenMP then at least a better > >> support for multicore programming in one way or another will be really > > important > >> for the future of D. > > > > Would take just a little bit of work, yes. ;) > > > > Most of the heavy duty work for GCC OMP support is done by their own C > > parser/internal codegen functions. So to start, will need to rewrite half of what > > is there for the DMDFE AST. > That really sounds tempting. Maybe we should bring this up on the main D > mailing list (whatever this is (d.learn ?)) for discussion. While this > might at first be a gdc only solution, having a general, developer > approved official D syntax for all three compilers (dmd, gdc, ldc) would > be great.
Official syntax? Question... why? We already have pragma to perform compiler- independent tasks. ie: LDC: pragma(intrinsic, "llvm.frameaddress") void* llvm_frameaddress(uint level); GDC: pragma(attribute, optimize("-freg-struct-return")) foo getFoo(); DMD: pragma(startaddress, foo); A typical hello world application would likely look like this: void main () { int th_id, nthreads; pragma(omp, parallel private(th_id)) { th_id = omp_get_thread_num(); writefln("Hello World from thread %d\n", th_id); pragma(omp, barrier) if ( th_id == 0 ) { nthreads = omp_get_num_threads(); writefln("There are %d threads\n",nthreads); } } } Regards