Ali, Shouldn't this be a pull request for std.parallelism to be extended?
If the function is in std.algorithm, then people should not have to write it for themselves in std.parallelism. On Mon, 2017-12-18 at 11:01 -0800, Ali Çehreli via Digitalmars-d-learn wrote: > […] > > Hi Ali, > > > > Thank you very much, may we know if possible as to when this > > would be > > added. > > > > From, > > Vino.B > > The implementation is almost a copy+paste from std.algorithm.fold. > You > can simply copy the following fold template to your project and > start > using it: > > import std.parallelism; > import std.stdio; > > int adder(int result, int element) { > return result + element; > } > > template fold(fun...) > if (fun.length >= 1) > { > import std.parallelism : TaskPool; > auto fold(R, S...)(TaskPool t, R r, S seed) > { > static if (S.length < 2) > { > return t.reduce!fun(seed, r); > } > else > { > import std.typecons : tuple; > return t.reduce!fun(tuple(seed), r); > } > } > } > > unittest { > import std.range; > > const N = 10_000; > const expected = N * (N - 1) / 2; > > foreach (numThreads; 1 .. 100) { > auto t = new TaskPool(numThreads); > const result = t.fold!adder(N.iota); > assert(result == expected); > t.finish(); > } > } > > void main() { > } > > If you want to provide an explicit seed value, good luck making sense > of > how it affects the final result. :) (The documentation of > TaskPool.reduce explains it but I find it too involved to > understand.) > > Ali -- Russel. =========================================== Dr Russel Winder t: +44 20 7585 2200 41 Buckmaster Road m: +44 7770 465 077 London SW11 1EN, UK w: www.russel.org.uk
signature.asc
Description: This is a digitally signed message part