BOUNCE saga-rg@ggf.org: Non-member submission from ["Rosa M. Badia" <rosab@ac.upc.edu>] (fwd)

To: Tom Goodale <goodale@cct.lsu.edu> Cc: saga-rg@ggf.org, "Josep M. Perez Cancer" <perez@ac.upc.edu> Subject: Re: [saga-rg] Asynchronous calls Hi everyone, sorry for answering so late, but I hope better late than never. We agree with you. Option B is the best for us, given that is enough flexible, generic and simple. However, we are curious about the C API (for example, with GAT to copy a file from one location to another the C program is almost two pages - probably this will generate some discussion :-)). The option that we like less is F, because it is not very flexible and too sequential. However, it looks like the one that will fit better in a C API. In general we see options A and E suited for object oriented APIs , but that it has not been thought how will affect in non-object oriented programming languages. In any case, we can use C++, and if an API in C++ exists at some moment we will be able to use it without much trouble. Hope this can help. Best regards, Rosa On Fri, Jan 07, 2005 at 04:02:32PM -0600, Tom Goodale wrote:
Hi,
we'll shortly be circulating some strawman APIs from December's design team meeting. One issue which we would like some good feedback on is the subject of asynchronous calls. Currently we have an API with no callbacks, but even so we came up with six possible ways to make the API asynchronous, which are annotated below. The first five involve the generation of a task object, which would have as a minumum API
task.run task.wait(timeout) task.cancel
and the last one (model F) is a straight async model where each call has an asynchronous version. The advantage of a task model over that is that it allows more than one asynchronous operation on an object at one time.
The general feeling of the design team was that model B was the one to go for, and that is the one currently being written up, however we would like to get some more feedback on whether there are strong objections or if we have missed anything crucial which would make this model unviable in practice.
Cheers,
Tom
Note that the calls below are schematic, e.g. copy, move, signal, ... will take more arguments.
----------------------------- SAGA_Directory dir = new SAGA_Directory ("foo://bar/baz") SAGA_Job job = ...
----------------------------- Model A)
SAGA_DirTask dt1 = dir.createTask (); SAGA_DirTask dt2 = dir.createTask (); SAGA_DirTask dt3 = dir.createTask (); SAGA_JobTask jt1 = job.createTask (); SAGA_JobTask jt2 = job.createTask ();
dt1.ls (); dt2.copy (); dt3.move (); jt1.checkpoint (); jt2.signal ();
dt1.run (); dt2.run (); dt3.run (); jt1.run (); jt2.run ();
----------------------------- Model B)
dtf = dir.createTaskFactory (); jtf = job.createTaskFactory ();
SAGA_Task t1 = dtf.ls (); SAGA_Task t2 = dtf.copy (); SAGA_Task t3 = dtf.move (); SAGA_Task t4 = jtf.checkpoint (); SAGA_Task t5 = jtf.signal ();
t1.run (); t2.run (); t3.run (); t4.run (); t5.run ();
----------------------------- Model C)
SAGA_Task t1 = dir.task.ls (); SAGA_Task t2 = dir.task.copy (); SAGA_Task t3 = dir.task.move (); SAGA_Task t4 = job.task.checkpoint (); SAGA_Task t5 = job.task.signal ();
t1.run (); t2.run (); t3.run (); t4.run (); t5.run ();
----------------------------- Model D)
SAGA_Task t1 = dir.task_ls (); SAGA_Task t2 = dir.task_copy (); SAGA_Task t3 = dir.task_move (); SAGA_Task t4 = job.task_checkpoint (); SAGA_Task t5 = job.task_signal ();
t1.run (); t2.run (); t3.run (); t4.run (); t5.run ();
----------------------------- Model E)
SAGA_Task t1 = dir.getTask ("ls"); SAGA_Task t2 = dir.getTask ("copy"); SAGA_Task t3 = dir.getTask ("move"); SAGA_Task t4 = job.getTask ("checkpoint"); SAGA_Task t5 = job.getTask ("signal");
t1.run (); t2.run (); t3.run (); t4.run (); t5.run ();
----------------------------- Model F)
(Not a "task" model) dir.async_ls (); job.async_checkpoint (); job.wait (); dir.wait (); dir.async_copy (); dir.wait (); dir.async_move (); job.async_signal (URS); job.wait (); dir.wait ();
-- ------------------------------------------------------------------------ Rosa M. Badia CEPBA-IBM Research Institute Dept. Computer Architecture Universitat Politecnica Catalunya Campus Nord - Modul D6 c/Jordi Girona 1-3 E08034 - Barcelona http://personals.ac.upc.edu/rosab/ Tel. +34 - 934017191 Fax: +34 - 934017055 ------------------------------------------------------------------------
participants (1)
-
Shantenu Jha