OpenMP support

Iain Buclaw ibuclaw at ubuntu.com
Sat Jan 8 07:34:21 PST 2011


== Quote from Jacob Carlborg (doob at me.com)'s article
> On 2011-01-06 20:20, Iain Buclaw wrote:
> > == Quote from scorn (scorn at d.net)'s article
> >> Am 05.01.2011 21:24, schrieb Iain Buclaw:
> >>> == Quote from Scorn (scorn at 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
> Wouldn't that need to be wrapped in a version statement, unrecognized
> pragmas will result in an error.

To be extremely pedantic... yes.


More information about the D.gnu mailing list