Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
October 08, 2014 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 |
October 08, 2014 Re: Multithreading in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Konstantin | > 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 |
October 09, 2014 Re: Multithreading in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to AsmMan | > 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?
|
October 09, 2014 Re: Multithreading in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Konstantin | 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.
|
October 09, 2014 Re: Multithreading in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Konstantin | 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 |
November 02, 2014 Re: Multithreading in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sag Academy Attachments:
| On Thu, 2014-10-09 at 11:29 +0000, 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.winder@ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: russel@winder.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder |
Copyright © 1999-2021 by the D Language Foundation