Am 08.01.2011 08:47, schrieb "Jérôme M. Berger":
scorn wrote:
Am 06.01.2011 20:20, schrieb Iain Buclaw:
== Quote from scorn (sc...@d.net)'s article
Am 05.01.2011 21:24, schrieb Iain Buclaw:
== Quote from Scorn (sc...@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).

        You mean like this:
foreach(i; pool.parallel( iota(squares.length), 100)) {
     // Iterate over squares using work units of size 100.
     squares[i] = i * i;
}



Yes, exactly like that! (Thanks for the hint.)


        It is currently under review for D2:
http://cis.jhu.edu/~dsimcha/d/phobos/std_parallelism.html and
http://dsource.org/projects/scrapple/browser/trunk/parallelFuture/std_parallelism.d

                Jerome


Is it already usable ?


If yes, then it would really be a reason for me to switch to D2 now.

Reply via email to