Memory Consistency Models: David Mosberger
Memory Consistency Models: David Mosberger
David Mosberger
TR 93/11
Abstract
This paper discusses memory consistency models and their influence on software in the context of parallel
machines. In the first part we review previous work on memory consistency models. The second part
discusses the issues that arise due to weakening memory consistency. We are especially interested in the
influence that weakened consistency models have on language, compiler, and runtime system design. We
conclude that tighter interaction between those parts and the memory system might improve performance
considerably.
1
This is an updated version of [Mos93]
1 Introduction increases.
Shared memory can be implemented at the hardware
Traditionally, memory consistency models were of in- or software level. In the latter case it is usually called
terest only to computer architects designing parallel ma- Distributed Shared Memory (DSM). At both levels work
chines. The goal was to present a model as close as has been done to reap the benefits of weaker models. We
possible to the model exhibited by sequential machines. conjecture that in the near future most parallel machines
The model of choice was sequential consistency (SC). will be based on consistency models significantly weaker
Sequential consistency guarantees that the result of any than SC [LLG+ 92, Sit92, BZ91, CBZ91, KCZ92].
execution of n processors is the same as if the opera- The rest of this paper is organized as follows. In
tions of all processors were executed in some sequential section 2 we discuss issues characteristic to memory
order, and the operations of each individual processor consistency models. In the following section we present
appear in this sequence in the order specified by the several consistency models and their implications on the
program. However, this model severely restricts the set programming model. We then take a look at implemen-
of possible optimizations. For example, in an architec- tation options in section 4. Finally, section 5 discusses
ture with a high-latency memory, it would be benefi- the influence of weakened memory consistency models
cial to pipeline write accesses and to use write buffers. on software. In particular, we discuss the interactions
None of these optimizations is possible with the strict between a weakened memory system and the software
SC model. Simulations have shown that weaker models using it.
allowing such optimizations could improve performance
on the order of 10 to 40 percent over a strictly sequential
model [GGH91, ZB92]. However, weakening the mem- 2 Consistency Model Issues
ory consistency model goes hand in hand with a change
in the programming model. In general, the program- Choosing an appropriate memory consistency model
ming model becomes more restricted (and complicated) (MCM) is a tradeoff between minimizing memory ac-
as the consistency model becomes weaker. That is, an cess order constraints and the complexity of the pro-
architecture can employ a weaker memory model only gramming model as well as of the complexity of the
if the software using it is prepared to deal with the new memory model itself. The weakest possible memory is
programming model. Consequently, memory consis- one returning for a read access some previously writ-
tency models are now of concern to operating system ten value or a value that will be written in the future.
and language designers too. Thus, the memory system could choose to return any
We can also turn the coin around. A compiler nor- of those values. While minimizing ordering constraints
mally considers memory accesses to be expensive and perfectly, it is not useful as a programming model. Im-
therefore tries to replace them by accesses to registers. plementing weaker models is also often more complex
In terms of a memory consistency model, this means that as it is necessary to keep track of outstanding accesses
certain accesses suddenly are not observable any more. and restrict the order of execution of two accesses when
In effect, compilers implicitly generate weak memory necessary. It is therefore not surprising that many differ-
consistency. This is possible because a compiler knows ent MCM’s have been proposed and new models are to
exactly (or estimates conservatively) the points where be expected in the future. Unfortunately, there is no sin-
memory has to be consistent. For example, compilers gle hierarchy that could be used to classify the strictness
typically write back register values before a function of a consistency model. Below, we define the design
call, thus ensuring consistency. It is only natural to at- space for consistency models. This allows us to classify
tempt to make this implicit weakening explicit in order the various models more easily.
to let the memory system take advantage too. In fact, Memory consistency models impose ordering restric-
it is anticipated that software could gain from a weak tions on accesses depending on a number of attributes.
model to a much higher degree than hardware [GGH91] In general, the more attributes a model distinguishes,
by enabling optimizations such as code scheduling or the weaker the model is. Some attributes a model could
delaying updates that are not legal under SC. distinguish are listed below:
In short, weaker memory consistency models can have
location of access
a positive effect on the performance of parallel shared
memory machines. The benefit increases as memory direction of access (read, write, or both)
latency increases. In recent years, processor perfor-
mance has increased significantly faster than memory value transmitted in access
system performance. In addition to that, memory la-
tency increases as the number of processors in a system causality of access
1
For example, if a critical region has only read accesses
memory access
to shared variables, then acquiring the lock can be done
non-exclusively.
shared private
Consistency models that distinguish access categories
employ different ordering constraints depending on the
competing non−competing access category. We therefore call such models hybrid.
In contrast, models that do not distinguish access cat-
synchronizing non−synchronizing egories are called uniform. The motivation for hybrid
models is engendered in Adve and Hill’s definition for
acquire release weak ordering [AH90]:
2
as the resulting history is equivalent to some serial exe-
3.1 Atomic Consistency (AC)
cution.
Atomic consistency is often used as a base model
when evaluating the performance of an MCM.
3.2 Sequential Consistency (SC)
3
3.5 Cache Consistency (Coherence)
P1 : W (x)1 W (x)3 Cache consistency [Goo89] and coherence [GLL+ 90]
P2 : R(x)1 W (x)2 are synonymous and to avoid confusion with causal con-
P3 : R(x)1 R(x)3 R(x)2 sistency, we will use the term coherence in this paper.
P4 : R(x)1 R(x)2 R(x)3 Coherence is a location-relative weakening of SC. Re-
call that under SC, all processors have to agree on some
Note that W (x)1 and W (x)2 are causally related as P2
sequential order of execution for all accesses. Coher-
observed the first write by P1 . Furthermore, P3 and
ence only requires that accesses are sequentially con-
P4 observe the accesses W (x)2 and W (x)3 in different sistent on a per-location basis. Clearly, SC implies co-
herence but not vice versa. Thus, coherence is strictly
orders, which would not be legal under SC.
weaker than SC. The example below is a history that is
Among the uniform models, CC appears to be one
coherent but not sequentially consistent:
of the more difficult to implement in hardware. This
can probably be explained by the fact that most other
models have been designed with a hardware implemen-
P1 : W (x)1 R(y)0
tation in mind. However, this does not imply that a P2 : W (y)1 R(x)0
CC implementation necessarily performs worse than an Clearly, any serial execution that respects program order
implementation of one of the simpler uniform models. starts with writing 1 into either x or y. It is therefore
impossible that both read accesses return 0. However,
3.4 Pipelined RAM (PRAM) the accesses to x can be linearized into R(x)0, W (x)1
and so can the accesses to y: R(y)0, W (y)1. The
Lipton and Sandberg [LS88] defined the Pipelined RAM history is therefore coherent, but not SC. In essence,
(PRAM) consistency model. The reader should be aware coherence removes the ordering constraints that program
that the acronym PRAM is often used as a shorthand for order imposes on accesses to different memory locations.
Parallel Random Access Machine which has nothing in
common with the Pipelined RAM consistency model. 3.6 Processor Consistency (PC)
The reasoning that led to this model was as follows:
consider a multi-processor where each processor has a Goodman proposed processor consistency in [Goo89].
local copy of the shared memory. For the memory to Unfortunately, his definition is informal and caused a
be scalable, an access should be independent of the time controversy as to what exactly PC refers to. Ahamad
it takes to access the other processors’ memories. They et al. [ABJ+ 92] give a formal definition of PC which
proposed that on a read, a PRAM would simply return the removes all ambiguity and appears to be a faithful trans-
value stored in the local copy of the memory. On a write, lation of Goodman’s definition. They also show that
it would update the local copy first and broadcast the new PC as defined by the DASH group in [GLL+ 90] is not
value to the other processors. Assuming a constant time comparable to Goodman’s definition (i.e., it is neither
for initiating a broadcast operation, the goal of making weaker nor stronger). We will not discuss the DASH
the cost for a read or write constant is thus achieved. version of PC except in the context of release consis-
In terms of ordering constraints, this is equivalent to tency (RC) and hence will use PC to refer to Goodman’s
requiring that all processors observe the writes from version and PCD to refer to the DASH version.
a single processor in the same order while they may Goodman defined PC to be stronger than coherence
disagree on the order of writes by different processors. but weaker than SC. PC can be interpreted as a combi-
The following execution history is legal under PRAM nation of coherence and PRAM. Thus, every PC history
but not under CC: is also coherent and PRAM. However, for a history to be
PC it not only has to be coherent and PRAM but those
two conditions also must be satisfiable in a mutually
P1 : W (x)1 consistent way. It is easiest to think of PC as a consis-
P2 : R(x)1 W (x)2 tency model that requires a history to be coherent and
P3 : R(x)1 R(x)2 PRAM simultaneously, rather than individually. That is,
P4 : R(x)2 R(x)1 processors must agree on the order of writes from each
processor but can disagree on the order of writes by dif-
P3 and P4 observe the writes by P1 and P2 in differ- ferent processors, as long as those writes are to different
ent orders, although W (x)1 and W (x)2 are potentially locations. The example given for coherence is also PC
causally related. Thus, this would not be a legal history so we give here a history that fails to be PC (this and the
for CC. previous example are from [Goo89]):
4
3.8 Weak Consistency (WC)
P1 : W (x)1 W (c)1 R(y)0 Weak consistency is the first and most strict hybrid model
P2 : W (y)1 W (c)2 R(x)0 we discuss. The model was originally proposed by
Dubois et al. [DSB86]. A memory system is weakly
Notice that P1 observes accesses in the order:
consistent if it enforces the following restrictions:
1. accesses to synchronization variables are sequen-
W (x)1; W (c)1; R(y)0; W (y)1; W (c)2; tially consistent and
3.7 Slow Memory 1. there are no data races (i.e., no competing accesses)
2. synchronization is visible to the memory system
Slow memory is a location relative weakening of PRAM
[HA90]. It requires that all processors agree on the order Note that WC does not allow for chaotic accesses as
of observed writes to each location by a single processor. found in chaotic relaxation algorithms. Such algorithms
Furthermore, local writes must be visible immediately would either have to be changed to avoid data races or it
(as in the PRAM model). The name for this model would be necessary to mask chaotic accesses as synchro-
was chosen because writes propagate slowly through the nizing accesses. The latter would be overly restrictive.
system. Slow memory is probably one of the weakest
uniform consistency models that can still be used for
3.9 Release Consistency (RC)
interprocess communication. Hutto and Ahamad present
a mutual exclusion algorithm in [HA90]. However, this Release consistency as defined by Gharachorloo et al.
algorithm guarantees physical exclusion only. There is [GLL+ 90] is a refinement of WC in the sense that
no guarantee of logical exclusion. For example, after competing accesses are divided into acquire, release,
two processes P1 and P2 were subsequently granted and non-synchronizing accesses. Competing accesses
access to a critical section and both wrote two variables a are also called special to distinguish them from non-
and b, then a third process P3 may enter the critical region competing, ordinary accesses. Non-synchronizing ac-
and read the value of a as written by P1 and the value cesses are competing accesses that do not serve a syn-
of b as written by P2. Thus, for P3 it looks like P1 and chronization purpose. This type of access was intro-
P2 had had simultaneous access to the critical section. duced to be able to handle chaotic relaxation algorithms.
This problem is inherent to slow memory because the An acquire access works like a synchronizing access
knowledge that an access to one location has performed under WC, except that the fence delays future accesses
cannot be used to infer that accesses to other locations only. Similarly, a release works like a synchronizing ac-
have also performed. Slow memory does not appear to cess under WC, except that the fence delays until all pre-
be of any practical significance. vious accesses have been performed. This, for example,
5
primitives are often written “once-and-forever.” That is,
worker[p : 1..N] : the typical programmer doesn’t need to worry about la-
arrived[p] := true [release] beling accesses correctly as high-level synchronization
do not go[p] ! skip od [acquire] primitives would be provided by a language or operating
go[p] := false [ordinary] system. Also, it is always safe to label a program con-
servatively. For example, if a compiler has incomplete
coordinator : information available, it could always revert to label
fa i := 1 to N ! reads with acquire and writes with release.
do not arrived[i] ! [nsync]
skip
od 3.10 Entry Consistency (EC)
arrived[i] := false [nsync] The entry consistency model is even weaker than RC
af [BZ91]. However, it imposes more restrictions on the
fa i := 1 to N ! programming model. EC is like RC except that every
go[i] := true [nsync] shared variable needs to be associated with a synchro-
af nization variable. A synchronizing variable is either a
lock or a barrier. The association between a variable and
Figure 3: Barrier Under Release Consistency its synchronization variable can change dynamically un-
der program control. Note that this, like slow memory,
is a location relative weakening of a consistency model.
allows (limited) overlap in executing critical sections, This has the effect that accesses to different critical sec-
which is not possible under WC. Another, more subtle, tions can proceed concurrently, which would not be pos-
change is that special accesses are executed under PCD sible under RC. Another feature of EC is that it refines
only (not under SC, as in WC). acquire accesses into exclusive and non-exclusive acqui-
To make the model more concrete, we give an exam- sitions. This, again, increases potential concurrency as
ple of how a critical section and a coordinator barrier non-exclusive acquisitions to the same synchronization
could be programmed under RC (see [And91], for ex- variable can be granted concurrently. However, unlike
ample). Below we show how a critical section could be RC, entry consistency is not prepared to handle chaotic
implemented under this model: accesses. This model is the first that was specifically de-
signed to be implemented as a software shared memory
do test and set(locked) ! [rd :acquire;wr :nsync] system.
skip
od
: : :critical section: : : 4 Implementations of Memory
locked := false [release] Consistency Models
Note the labeling of the read-modify-write operation
test and set(). The read is labeled acquire, while An implementation of a memory consistency model is
the write is labeled nsync, which stands for non- often stricter than the model would allow. For example,
synchronizing access. The acquire label ensures that SC allows the possibility of a read returning a value that
no future access is performed before the read has com- hasn’t been written yet (see example discussed under
pleted and the nsync label ensures that the write occurs 3.2 Sequential Consistency). Clearly, no implementa-
under PCD. Note that it would be legal but unnecessarily tion will ever exhibit an execution with such a history.
restrictive to mark the write access release. The release In general, it is often simpler to implement a slightly
label for the write access resetting the locked flag ensures stricter model than its definition would require. This is
especially true for hardware realizations of shared mem-
ories [AHJ91, GLL+ 90].
that all accesses in the critical sections are performed by
the time the flag is actually reset.
The coordinator barrier is considerably more compli- For each consistency model there are a number of im-
cated. The important thing however is that the heart plementation issues. Some of the more general questions
of the barrier is realized by a release followed by an are:
acquire, while the critical section does just the oppo- What is the consistency unit?
site. Pseudo-code for the barrier is shown in Figure 3.
Enforce eager or lazy consistency?
From these examples it should be clear that it is not at
all straight forward to write synchronization primitives Use update or invalidation protocol to maintain
under RC. However, it is important to realize that such consistency?
6
In hardware implementations the consistency unit is typ- for in operations if they are used with certain restric-
ically a word or a cache line. In software shared mem- tions. For example, the weakest and most efficient pro-
ories, the overhead per consistency unit is much higher tocol can be used only if, for a tuple with tag t, there
in absolute terms, so that a memory page or a shared is at most one process performing in operations and no
object (structured variable, segment) is often chosen as process performing read operations. Unfortunately,
the consistency unit. so far no performance study of the advantage of such
The notion of eager versus lazy maintenance of mem- “guided” memory systems has been reported. Carter
ory consistency appears to have been invented indepen- [CBZ91] indicates that Munin performs well for matrix
dently by Borrmann/Herdieckerhoff [BH90] and Ber- multiplicationand SOR when compared to a hand-coded
shad/Zekauskas [BZ91]. This notion is based on the message passing algorithm, but no comparison with a
observation that the consistency protocol can either be single-protocol DSM or a strict DSM was reported.
invoked each time an inconsistency arises or only when Also note that a change in the consistency model of
an inconsistency could be detected. Eager implementa- a memory system can lead to quite subtle changes. For
tions do the former, lazy the latter. The expected ben- example, Zucker and Baer note that
efit of lazy implementations is that if a process has a
cached copy of a shared variable but doesn’t access it
anymore, then this process does not have to participate in the analysis of Relax [a benchmark program]
maintaining consistency for this variable. Lazy release made us realize that how the program is writ-
consistency [KCZ92] and Midway [BZ91] are two ex- ten or compiled for peak performance depends
amples of lazy implementations. No performance data upon the memory model to be used.
is yet available.
In their example, under SC it was more efficient to sched-
ule a read access causing a cache-miss at the end of a
5 Influence of Consistency Model sequence of eight read accesses hitting the cache, while
under WC and RC the same access had to be scheduled
on Software at the beginning of the read-sequence.
As mentioned earlier, choosing a memory consistency
model is a tradeoff between increasing concurrency by
decreasing ordering constraints and implementation and
5.1 Chaotic Accesses
programming model complexity. With hybrid models,
the memory system is sequentially consistent as long as
Another issue raised by the introduction of weaker
its synchronization model is respected. That is, the soft-
consistency models is chaotic accesses (i.e., non-
ware executing on such a memory system has to provide
synchronizing competing accesses). Current DSM sys-
information about synchronization events to the mem-
tems do not handle them well. Neither Munin nor Mid-
ory system and its synchronization model must match
way have special provisions for chaotic accesses. Note
the memory system’s model. Synchronization informa-
that algorithms using such accesses often depend on
tion is provided by either a programmer in a explicitly
concurrent language2 or by a compiler or its runtime
having a “fairly recent” value available. That is, if ac-
cesses to variable x are unsynchronized, then reading x
system in a high-level language. Thus, software run-
must not return any previously written value but a “re-
ning on a hybrid memory system has to provide infor-
cent” one. For example, the LocusRoute application of
mation to execute correctly. However, it is possible and
the SPLASH benchmark does not perform well if non-
beneficial to go beyond that point. If the software can
synchronizing competing accesses return very old val-
provide information on the expected access pattern to
ues [Rin92, SWG91]. RC maintains such accesses under
a shared variable, optimizations for each particular ac-
PCD (which is safe but conservative in many cases). An-
cess pattern could be enabled resulting in substantially
other type of algorithm using non-synchronizing com-
improved performance. Munin [CBZ91] does this by
peting accesses is of the kind where a process needs some
providing a fixed set of sharing annotations. Each anno-
of the neighbor’s data, but instead of synchronizing with
tation corresponds to a consistency protocol optimized
its neighbor, the process computes the value itself and
for a particular access pattern. A similar approach was
stores it in the neighbors data field. In effect, this type of
taken by Chiba et al. [CKM92] where they annotate
algorithm trades synchronization with (re-)computation.
Linda programs in order to select an optimized protocol
We would expect having specialized consistency proto-
2 By “explicitly concurrent language” we mean a language in which cols for chaotic accesses could improve the performance
it is possible to program synchronization operations. of such algorithms.
7
5.2 Annotating Compilers control is typically implemented by compiler-generated
calls to a the runtime system. Therefore all that needs to
Only very little work has been done on annotating par-
be done to adapt to a new MCM is to change the runtime
allel programs automatically. In the general case, deter-
system. As mentioned above, it is still advantageous to
mining the access patterns to a shared variable is unde-
integrate the consistency model with the compiler and
cidable. It is also unclear exactly what access patterns
runtime system more tightly. As the compiler already
are useful to distinguish (some work in this direction
has information on synchronization and the concurrency
was done for Munin). However, a language could be
structure of the program, it might as well make this infor-
designed such that it becomes easier to infer certain
mation available to the memory system. Jade [RSL92] is
aspects of an access pattern. A simple example is a
a step in this direction. Its runtime system has for each
constant object. As there are no write accesses, such ob-
process precise information on the accessed locations
jects can be replicated among processes without needing
and whether a location is only read or also modified.
any consistency protocol. Another example is determin-
The language also allows one to express that some data
ing whether a critical region contains no write accesses
will not be accessed anymore in the future.
to shared variables. Under EC, this information de-
termines whether a lock can be acquired in exclusive It is unclear at this point exactly which information
or non-exclusive mode. As critical regions are typically can and should be provided to the memory system. It is
short and do not contain any function calls or unbounded equally open what information the memory system could
loops, this problem could be decided in most cases. provide to the runtime system. The latter, for example,
could be useful to guide a runtime system’s scheduler
based on what data is cheaply available (cached) in the
5.3 Explicitly Parallel Languages memory system.
As mentioned above, in an explicitly parallel language
the MCM defines the allowable memory-access opti-
mizations. Such a language depends very directly on
the memory consistency model as it allows the imple-
6 Conclusions
mentation of synchronization operations. For AC, SC,
and PC no special constructs must be available. For WC The central theme of this work is that being memory-
a memory-barrier (or full fence) operation would be suf- model conscious is a good thing. This applies to dis-
ficient. A memory-barrier would have to be inserted in a tributed shared memories, runtime systems, and com-
program wherever consistency of the memory has to be pilers, as well as languages. We have argued that con-
enforced. For RC things become even more complex. sistency models are important and that weaker models
Every access would have to be labeled according to its are beneficial to performance. While there are weakened
category. With EC, synchronization operations can be models that are uniform, they appear to be less promising
implemented based on the locks and barriers provided than hybrid models. Most current work seems to con-
by the system only. This shows clearly that it is not a centrate on the latter. While quite some work has been
good idea to allow a programmer to implement his or done in this area, the lack of meaningful performance
her own synchronization primitives based on individ- data is surprising. Also, it appears that in the language,
ual memory accesses. Instead, a language should pro- compiler, and runtime-system realms there are still a lot
vide efficient and primitive operations which can then be of open questions that could warrant further research.
used to implement higher-level synchronization opera- We expect that a tighter coupling between the memory
tions. Maybe locks and barriers as provided under EC system and the software using it could result in consid-
would be sufficient. However, for barriers it is not clear erable performance improvements.
whether a single implementation would be sufficient for
all possible applications. For example, sometimes it is
useful to do some work at the time all processes have
joined at a barrier but before releasing them. Under EC, Acknowledgements
such a construct would have to be implemented with two
barriers or in terms of locks; both methods would likely Several people provided useful comments on drafts of
be more inefficient than a direct implementation. this paper: Gregory Andrews, David Lowenthal and
Vincent Freeh. Several others provided helpful informa-
tion on aspects of memory consistency models: Brian
5.4 Implicitly Parallel Languages
Bershad, John Carter, Kourosh Gharachorloo, James
Implicitly parallel languages do not have any notion of Goodman, Bob Janssens, Karen Pieper, Martin Rinard,
concurrent execution at the language level. Concurrency and Andy Tanenbaum.
8
References [DSB86] M. Dubois, C. Scheurich, and F. A. Briggs.
Memory access buffering in multiproces-
[ABJ+ 92] Mustaque Ahamad, Rida Bazzi, Ranjit John, sors. In Proceedings of the Thirteenth An-
Prince Kohli, and Gil Neiger. The power nual International Symposium on Computer
of processor consistency. Technical Report Architecture, pages 434–442, June 1986.
GIT-CC-92/34, Georgia Institute of Tech-
nology, Atlanta, GA 30332-0280, USA, [GGH91] Kourosh Gharachorloo, Anoop Gupta, and
1992. John Hennessy. Performance evaluation
of memory consistency models for shared
[AH90] Sarita Adve and Mark Hill. Weak ordering: memory multiprocessors. ACM SIGPLAN
A new definition. In Proceedings of the 17th Notices, 26(4):245–257, April 1991.
Annual International Symposium on Com-
puter Architecture, pages 2–14, May 1990. [GLL+ 90] K. Gharachorloo, D. Lenoski, J. Laudon,
Phillip Gibbons, Anoop Gupta, and John
[AHJ91] M. Ahamad, P. W. Hutto, and R. John. Im- Hennessy. Memory consistency and event
plementing and programming causal dis- ordering in scalable shared-memory multi-
tributed shared memory. In Proceedings of processors. Computer Architecture News,
the 11th International Conference on Dis- 18(2):15–26, June 1990.
tributed Computing Systems, pages 274–
281, May 1991. [Goo89] James R. Goodman. Cache consistency and
sequential consistency. Technical Report 61,
[And91] Gregory R. Andrews. Concurrent Pro- SCI Committee, March 1989.
gramming: Principles and Practice. Ben-
jamin/Cummings, Menlo Park, 1991. [HA90] P. W. Hutto and M. Ahamad. Slow memory:
Weakening consistency to enhance concur-
[BH90] Lothar Borrmann and Martin Herdiecker- rency in distributed shared memories. In
hoff. A coherency model for virtually shared Proceedings of the 10th International Con-
memory. In International Conference on ference on Distributed Computing Systems,
Parallel Processing, volume II, pages 252– pages 302–311, May 1990.
257, 1990.
[KCZ92] P. Keleher, A. L. Cox, and W. Zwaenepoel.
[BHG87] Philip A. Bernstein, Vassos Hadzilacos, Lazy release consistency for software dis-
and Nathan Goodman. Concurrency Con- tributed shared memory. SIGARCH Com-
trol and Recovery in Database Systems. puter Architecture News, 20(2), May 1992.
Addison-Wesley, Reading, Massachusetts,
1987. [Lam78] Leslie Lamport. Time, clocks, and the order-
ing of events in a distributed system. Com-
[BZ91] Brian N. Bershad and Matthew J. munications of the ACM, 21(7):558–565,
Zekauskas. Midway: Shared memory paral- 1978.
lel programming with entry consistency for
distributed memory multiprocessors. Tech- [Lam79] Leslie Lamport. How to make a multi-
nical Report CMU-CS-91-170, Carnegie- processor computer that correctly executes
Mellon University, 1991. multiprocess programs. IEEE Transactions
on Computers, C-28(9):690–691, Septem-
[CBZ91] John B. Carter, John K. Bennett, and Willy ber 1979.
Zwaenepoel. Implementation and perfor-
mance of Munin. In Symposium on Op- [LLG+ 92] D. Lenoski, J. Laudon, K. Gharachor-
erating System Principles, pages 152–164, loo, W.-D. Weber, A. Gupta, J. Hennessy,
1991. M. Horowitz, and M. S. Lam. The Stan-
ford Dash multiprocessor. IEEE Computer,
[CKM92] Shigeru Chiba, Kazuhiko Kato, and Takashi pages 63–79, March 1992.
Masuda. Exploiting a weak consistency
to implement distributed tuple space. In [LS88] R. J. Lipton and J. S. Sandberg. PRAM:
Proceedings of the 12th International Con- A scalable shared memory. Technical Re-
ference on Distributed Computing Systems, port CS-TR-180-88, Princeton University,
pages 416–423, June 1992. September 1988.
9
[Mos93] David Mosberger. Memory consistency
models. Operating Systems Review,
17(1):18–26, January 1993.
[Rin92] Martin Rinard, September 1992. Personal
communication.
[RSL92] Martin C. Rinard, Daniel J. Scales, and
Monica S. Lam. Jade: A high-level,
machine-independent language for parallel
programming. September 1992.
[Sit92] Richard L. Sites, editor. Alpha Architecture
Reference Manual. Digital Press, Burling-
ton, MA, 1992.
[SWG91] Jaswinder Pal Singh, Wolf-Dietrich Weber,
and Anoop Gupta. Splash: Stanford parallel
applications for shared-memory. Technical
Report CSL-TR-91-469, Stanford Univer-
sity, 1991.
[ZB92] R. N. Zucker and J-L. Baer. A per-
formance study of memory consistency
models. SIGARCH Computer Architecture
News, 20(2), May 1992.
10