[saga-rg] SAGA, object states, and concurrency
Hartmut Kaiser
hkaiser at cct.lsu.edu
Tue Aug 1 08:34:32 CDT 2006
Hi Thilo,
> we seem to have different opinions on the proper handling of
> shared objects and of concurrency control. I had been silent
> as I did not see a way how to resolve this. First of all, we
> all should separate our own opinions from our own work,
> favourite language, and implementations...
>
> I think there are a few facts that we need to accept:
>
> 1. SAGA is about simplicity of use. Application programmers
> should require
> only a minimum of additional mental burden to use SAGA.
Agreed 100%
> 2. The SAGA spec MUST be independent of all possible
> implementation languages.
> The spec should allow language bindings that make
> SAGA-Java to "feel like"
> normal Java programming, SAGA-C++ to feel like normal C++
> programming, and
> SAGA-Fortran to feel like normal Fortran programming...
Agreed as well.
> Along the same line, a SAGA binding to C++ must not
> require using a library
> like boost, or equivalent.
Strongly disagree.
1. Boost is nothing else than the C++ Standards library of tomorrow. In fact
about 10 of Boosts libraries are accepted in C++ TR1 or TR2 already. More to
follow.
2. The Boost libraries are peer reviewed and nowadays used by half of the
C++ community. The code quality and portability is much more better than
everybody could easily craft. If we were not using Boost we'ld have to write
all this code ourselfs - which doesn't make any sense to me.
3. You are talking about keeping this discussion free from any language
specifics, but OTOH you're trying to push through a requirement, which is
highly language specific.
> 3. With the task model, SAGA has introduced a concurrent
> programming model.
Agreed.
> The recent discussion on the list has been revolving around:
> a) object lifecycle (and memory) management
> b) concurrency control
> c) being prescriptive or leaving freedom to the application programmer
Since you've started the C++ business youself here, I'll try to answer your
questions wrt the C++ implementation we have so far.
> In previous mails, I have argued for some amount of being presriptive.
> By now, I think, we should give up being presciptive all
> together, paving the road for both simplicity and flexibility
> for application programmers.
> (This will have a price to pay, though, see below.)
>
> And here comes my suggestion what to do with with a) and b):
>
> a) SAGA does NOT handle object life cycle and memory
> management at all.
> It is ALWAYS the responsibility of the application
> programmer to create
> and destroy objects, even if objects are created via SAGA
> constructors.
> SAGA thus NEVER destroys objects. (with the exception of
> data structures
> that are internal to its implementation, that are not
> exported/visible
> at the API) The application programmer has to do object
> creation and
> destruction, with the respective means of the programming
> language in use.
That's exactly the way it is in the C++ ref implementation we have so far.
> b) SAGA does NOT impose any concurrency control mechanisms. It is the
> responsibility of the application programmer to ensure the
> correctness of
> his/her program. In case of SAGA's tasks, the application
> programmer has
> to make sure that all tasks and the main program execute
> correctly, in
> any possible interleavings or execution orders. Whenever
> tasks share objects
> with each other or the main program, the application
> programmer must
> ensure that no race conditions will occur.
That's exactly the way it is in the C++ ref implementation we have so far,
with the exception, that SAGA protects internal data structures to avoid
internal race conditions.
> The application programmer is free to use separate
> concurrency control
> mechanisms from his/her own programming environment, like mutexes,
> semaphors, monitors, locks, etc.
IIUC, this mainly means, that the SAGA implementations should not prevent to
use the application programmer whatever concurency model/library he wants to
use. I don't see anyproblems here, since all the concurency handling
introduced by an implementation is internal to this implementation anyways
(at least as long this implementation is crafted in a sensible way).
> The related problem of thread-safety for SAGA operations is not
> applicable on the level of the SAGA specification. It has
> to be addressed
> on the level of language bindings.
I agree with your observations.
Regards Hartmut
>
>
>
> Thilo
> --
> Thilo Kielmann
> http://www.cs.vu.nl/~kielmann/
>
More information about the saga-rg
mailing list