[Swift-user] How to wait on functions that return no data?
Mihael Hategan
hategan at mcs.anl.gov
Tue Mar 25 10:23:44 CDT 2008
On Tue, 2008-03-25 at 10:14 -0500, Michael Wilde wrote:
> >> In the example below, I want collectResults() to get invoked after all
> >> the runam() calls complete in doall().
> >
> > results = doall();
> > collectResults(results);
> >
> > Mihael
>
> But thats the problem: doall() does not in this example return results.
Then it should be fixed.
> If it would return an artificial result, how would we get such a return
> to wait until all the runam() calls made within the freach() have completed?
>
> Each of the runam() call runs a small model, and in this proposed
> scenario would leave those results on a local disk for later collection,
> either in a single shared file that many invocations would append to, or
> in a set of files.
I don't think the solution to performance problems in Swift is to hack
stuff like that.
>
> Then collectresults() would run a job that collects all the data when done.
>
> One approach can be to have collectresults() just run iteratively until
> it has collected a sufficient number of results. I.e., to have it not
> depend on swift to find out when all the runam() calls have completed.
> That might work.
Don't use Swift then. Seriously. If you don't want to express things in
a dataflow oriented way, and are not satisfied with its performance for
the given problem, don't use it.
Mihael
>
> - Mike
>
>
> On 3/25/08 10:00 AM, Mihael Hategan wrote:
> > On Tue, 2008-03-25 at 09:46 -0500, Michael Wilde wrote:
> >> For the petro-model app Im working on, it would be interesting to run
> >> the parameter sweep in "map reduce" manner, in which each invocation
> >> bites off a portion of the parameter space and processes it, resulting
> >> in a set of result tuples. Each run of the model will produce a set of
> >> tuples, and when all are done, we want to aggregate and plot the tuples.
> >>
> >> While with batching this is not strictly needed, it would be interesting
> >> to let the model results accumulate on the local filesystem (as in this
> >> case they are small) and collect them either at the end of the run, or
> >> periodically and perhaps asynchronously during the run.
> >>
> >> To do this, we'd want to write the model invocation as a swift function
> >> with only scalar numeric parameters, and no output.
> >
> > That assertion I'm not sure about.
> >
> >> The question is how to call a zero-returns function in a swift foreach()
> >> loop, and embed that foreach() in a function that doesnt return until
> >> all members of the foreach() have been processed.
> >
> > The very notion of "return" as it would appear in a strict language
> > doesn't make much sense in Swift, so I'm not quite sure.
> >
> >> I havent tried to code this yet, because I cant think of a way to
> >> express it in swift, due to the data-dependency semantics.
> >>
> >> In the example below, I want collectResults() to get invoked after all
> >> the runam() calls complete in doall().
> >
> > results = doall();
> > collectResults(results);
> >
> > Mihael
> >
> >> Anyone have any ideas?
> >>
> >> This is a low-priority question, just food for thought, as the batched
> >> way of running this parameter sweep should be straightforward and efficient.
> >>
> >> Mike
> >>
> >>
> >>
> >> // Amiga-Mars Parameter Sweep
> >>
> >> type amout;
> >>
> >> runam (string id , string p1, string p2) // no ret val
> >> {
> >> app { runam3 id p1 p2 ; }
> >> }
> >>
> >> type params {
> >> string id;
> >> string p1;
> >> string p2;
> >> };
> >>
> >> doall(params p[])
> >> {
> >> foreach pset in p {
> >> runam(pset.id, pset.p1, pset.p2);
> >> }
> >> // waitTillAllDone();
> >> // want to block here till all above finish,
> >> // but no data to wait on. any way to
> >> // achieve this???
> >> }
> >>
> >> // Main
> >>
> >> params p[];
> >> p = readdata("paramlist");
> >> doall(p);
> >> amout amdata <some mapping>;
> >> amdata = collectResults();
> >>
> >> // ^^^ Want collectresults to run AFTER all runam() calls finish
> >> // in the doall() function.
> >>
> >>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> Swift-user mailing list
> >> Swift-user at ci.uchicago.edu
> >> http://mail.ci.uchicago.edu/mailman/listinfo/swift-user
> >>
> >
> >
>
More information about the Swift-user
mailing list