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