OpenMP support

scorn scorn at d.net
Fri Jan 7 11:44:03 PST 2011


Am 06.01.2011 20:20, schrieb Iain Buclaw:
> == 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

Oh! I didn't know this! Then, what are we waiting for ? :-)


With official syntax i meant something like for example the Parallel.For 
extension of the Microsoft Parallel FX Framework (see: 
http://pietschsoft.com/post/2007/09/Parallel-FX-Library-Optimize-your-code-for-Multi-Core-machines.aspx 
for example).


While it made sense for C++ to implement the openmp extensions in a 
"#pragma omp parallel for" comment style so that they are automatically 
supported by openmp c++ compilers and skipped by compilers which don't 
support these extensions, it feels just hacky when comparing it to a 
clean built in language solution like the Parallel FX extensions for the 
.Net languages. Since there do not exist as many D compilers as C++ 
compilers yet, i think it would be easily possible to have a clean 
language solution.


But anyway. If some folks would just start implementing openmp for gdc 
with a pragma compiler solution i just would be incredibly happy and 
wouldn't care at all :-)

Any volunteers ? ;-)


More information about the D.gnu mailing list