OpenMP support
Jacob Carlborg
doob at me.com
Sat Jan 8 06:14:39 PST 2011
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.
--
/Jacob Carlborg
More information about the D.gnu
mailing list