
A popular approach to designing shared-memory computer systems is to
specify a {\em memory model} upon which a variety of program
execution models may be implemented.
Alternatively, one may choose a desired {\em program execution model} (PXM)
and specify a memory model suited to the PXM. We argue that this
second approach is to be preferred because it avoids the trap of
specifying features of the memory model (consistency, for example)
that may not needed to implement a desired program execution model.
If the PXM is a dataflow model (one based on or equivalent to
recursive dataflow program graphs), then no cache consistency problem
need arise if the memory model supports synchronizing memory operations.
Then why use a memory consistency model
as a basis for designing shared-memory multiprocessors?
One argument is that a general
memory model can support a variety of PXMs. However, many good PXMs,
object-oiented programming, for example, may be built on top of a
basic program model that does not require memory
consistency---a dataflow model for example.
Perhaps the principal justification for the consistent memory approach
is the desire to build massively parallel processors using conventional
RISC and superscalar processors---processors that do not offer
efficient support for synchronizing memory operations.
In contrast, we believe that memory systems supporting synchronizing
memory operations will be cheaper to implement than memory consistency
protocols, and will support a preferred class of program execution models.
This paper is written in support of this alternative view.

