OpenMP support

Iain Buclaw ibuclaw at ubuntu.com
Thu Jan 6 11:20:03 PST 2011


== 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


More information about the D.gnu mailing list