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; }
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 -- mailto:jeber...@free.fr http://jeberger.free.fr Jabber: jeber...@jabber.fr
signature.asc
Description: OpenPGP digital signature