Optimizations for mutable structures?

Lennart Augustsson lennart at augustsson.net
Thu Dec 8 07:58:26 EST 2005


Simon,

Don't worry, your implementation (and any implementation)
has "strong fairness".  Just run it enough times that the
hardware fails in the way peoplewant. ;)

Jest aside, I'm totally on your side in this discussion.
Asking an implementation to promise to generate all possible
interleavings is just stupid.  That way lies madness...
(and slowness!).

	-- Lennart


Simon Marlow wrote:
> On 07 December 2005 19:57, Claus Reinke wrote:
> 
> 
>>there seem to be two issues here - can we agree on that at least?
>>
>>1) scheduling non-sequential programs on sequential processors
>>
>>i wasn't arguing that the scheduler should realise all possible
>>interleavings at once. the issue i was referring to is known as
>>"fairness" in concurrent systems literature. as with referential
>>transparency, various non-equivalent definitions are in use,
>>but one informal description might be something like:
>>
>>    if, for a given experiment, some event is possible according to
>>    the semantics, it should happen eventually if the experiment is
>>    repeated often enough.
>>
>>see, eg,
>>
> 
> http://research.microsoft.com/users/lamport/pubs/pubs.html#lamport-fairn
> ess
> 
> Yes, good point.  Regarding fairness, I've been working with the
> assumption that we don't need to preserve (certain kinds of) fairness
> properties when performing optimisations, whereas you and others want to
> preserve all fairness.
> 
> Why don't I care about preserving fairness?  Well you said it - it's not
> practical to implement.  And since the implementation already doesn't
> guarantee strong fairness (or whatever it's called), it doesn't do any
> harm to weaken the fairness that we do provide, because programmers
> can't rely on strong fairness anyway.  In practical terms, you won't
> notice the difference.
> 
> Furthermore, I'd go so far as to say that a program that relies on the
> kind of fairness we've been talking about (arbitrary interleaving) for
> correctness or termination, is broken.
> 
> We ceratinly *do* care about some kind of fairness.  The property that
> we try to maintain is something like this:
> 
>   If a thread is unblocked according to the semantics, then the
>   implementation ensures that it runs after a finite time.
> 
> I'm not familiar with the fairness literature, perhaps this property is
> known?
> 
> You may well call our implementation incomplete because it doesn't
> implement full fairness.  I don't think that's useful though; I'd much
> rather characterise exactly what fairness property we can and do
> implement, and use that for reasoning with.
> 
> [snip]
> 
> 
>>2) compiler optimisation validity in sequential and non-sequential
>>    environments
>>
>>the original motivation of this thread - are sequential
>>transformations still valid in a non-sequential setting?
>>
>>in general, the answer is no, to the surprise/annoyance of many many
>>compiler implementors who want their valuable optimisations to work
>>even when their sequential language acquires threads.
> 
> 
> I don't think this applies in our setting.  The reason we have IORef and
> {M,T}Vars, and not just a single mutable reference type, is that
> {M,T}Vars provide strong consistency guarantees when used to communicate
> between threads, whereas IORefs do not.  Hence, IORefs can be
> implemented with much fewer restrictions.
> 
> If you share IORefs between threads and run on a multiprocessor, you are
> at the mercy of both sequential optimisations and your architecture's
> memory consistency guarantees.  In other words, don't do it.  Use
> communication primitives that have strong properties in a multi-threaded
> setting.
> 
> 
>>i'd really, really prefer concurrent haskell not to go down a route
>>in which demands of simpler implementation leads to subtle problems
>>in reasoning about programs.
> 
> 
> If you think any of this impacts your ability to reason about programs,
> please elaborate - I don't think it does.  
> 
> Cheers,
> 	Simon
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> 



More information about the Glasgow-haskell-users mailing list