Re: Better multithreading with D
On Saturday, 21 April 2018 at 02:08:24 UTC, solidstate1991 wrote: In order to call a function multiple time at parallel (rendering function, very well parallelizable), but in order to push the CPU to it's limits I have to get some form of parallelization. Currently I'm using parallel foreach, which isn't very nice, and since it uses GC allocation that creates some performance impact from time to time. Did you attempt to create a memory pool with the GC? Any memory allocation will take time, whatever it's CG or manual.
Better multithreading with D
In order to call a function multiple time at parallel (rendering function, very well parallelizable), but in order to push the CPU to it's limits I have to get some form of parallelization. Currently I'm using parallel foreach, which isn't very nice, and since it uses GC allocation that creates some performance impact from time to time.
Re: Multithreading in D
On Thu, 2014-10-09 at 11:29 +, Sag Academy via Digitalmars-d-learn wrote: On Thursday, 9 October 2014 at 10:10:20 UTC, Konstantin wrote: Are you looking for parallel? http://dlang.org/library/std/parallelism/parallel.html I have seen this, but I'm not sure how to use it. Maybe: float[][] maps = new float[#threads][resolution * resolution]; foreach(i, ref elem; parallel(maps)){ elem = generateTerrain(...); } Does this look right? Yeah, it is. Or maybe not. The code above is fine per se, but only tackles the generation phase, there will be later phases. It may be that other parts of http://dlang.org/library/std/parallelism.html used slightly differently would be better for describing more of the problem. taskPool has a lot of interesting capabilities, including parallel reduce which gives a full map–reduce type scatter–gather approach: OP did mention that there was a generation then integration activity overall. Of course, if absolute performance is required things get a bit more tricky avoiding overheads. -- Russel. = Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.win...@ekiga.net 41 Buckmaster Roadm: +44 7770 465 077 xmpp: rus...@winder.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder signature.asc Description: This is a digitally signed message part
Re: Multithreading in D
Are you looking for parallel? http://dlang.org/library/std/parallelism/parallel.html I have seen this, but I'm not sure how to use it. Maybe: float[][] maps = new float[#threads][resolution * resolution]; foreach(i, ref elem; parallel(maps)){ elem = generateTerrain(...); } Does this look right?
Re: Multithreading in D
On Thursday, 9 October 2014 at 10:10:20 UTC, Konstantin wrote: Are you looking for parallel? http://dlang.org/library/std/parallelism/parallel.html I have seen this, but I'm not sure how to use it. Maybe: float[][] maps = new float[#threads][resolution * resolution]; foreach(i, ref elem; parallel(maps)){ elem = generateTerrain(...); } Does this look right? Yeah, it is.
Re: Multithreading in D
On 10/09/2014 03:10 AM, Konstantin wrote: Are you looking for parallel? http://dlang.org/library/std/parallelism/parallel.html I have seen this, but I'm not sure how to use it. I have the following chapter with some examples: http://ddili.org/ders/d.en/parallelism.html If concurrency is more suited to your application, then there is the following as well: http://ddili.org/ders/d.en/concurrency.html Ali
Multithreading in D
Hello D-World, I've written a small terraingenerator in D based on the Hill-Algorithm. To generate a terrain I only need to call the method generateTerrain(...) which returns a float-Array containing the height of each pixel (2D Array mapped with a 1D array with length resolution^2). What I'd like to do: Generate #treads seperate maps in a own thread and combine and normalize them afterwards. I have little to no experience working with multiple threads. I tried it once in java for University but did not really get working. What I imagine as solution (I know it won't work this way, but to give you a better idea): for(int i = 0; i #threads; i++){ runInThread(generateTerrain(...)); } Greetings and thanks in advance Konstantin
Re: Multithreading in D
What I imagine as solution (I know it won't work this way, but to give you a better idea): for(int i = 0; i #threads; i++){ runInThread(generateTerrain(...)); } Are you looking for parallel? http://dlang.org/library/std/parallelism/parallel.html