<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mchen4</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mchen4"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Mchen4"/>
	<updated>2026-05-10T20:49:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2013/12a_cm&amp;diff=74964</id>
		<title>CSC/ECE 506 Spring 2013/12a cm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2013/12a_cm&amp;diff=74964"/>
		<updated>2013-04-18T04:23:09Z</updated>

		<summary type="html">&lt;p&gt;Mchen4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Interconnection Network Architecture &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a multi-processor system, processors need to communicate with each other and access each other's resources. In order to route data and messages between processors, an interconnection architecture is needed.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. Therefore, the interconnection network architecture must handle messages quickly by having '''low latency''', and must handle several messages at a time and have '''high bandwidth'''. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a network, a processor along with its cache and memory is considered a '''node'''. The physical wires that connect between them is called a '''link'''. The device that routes messages between nodes is called a router. The shape of the network, such as the number of links and routers, is called the network '''topology'''.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Network Topologies&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hypercube topologies were invented in the 80s and had desirable characteristics when the number of nodes is small (~1000 maximum, often &amp;lt;100) and every processor must stop working to receive and forward the message &amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[4]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. The low-radix era began in 1985 and was defined by routers with between 4 and 8 ports using toroidal, mesh or fat-tree topologies and wormhole routing. This era lasted about 20 years until it was determined that routers with dozens of ports offered superior performance. Two topologies were developed to take advantage of the newly developed high-radix routers. These are flattened butterfly and dragonfly, which are somewhere between a mesh with each point on the mesh being a router (or virtual router in the case of dragonfly) with dozens or hundreds of nodes attached and a fat tree with sufficiently high arity as to only have two levels. &lt;br /&gt;
&lt;br /&gt;
The use of different topologies has changed over the years. The following pie charts from top500.org show the share of different network topologies over the years.&lt;br /&gt;
&lt;br /&gt;
[[Image:ob_wiki_12_2001.png ]] ''Interconnect Family Market Share for 2001''&lt;br /&gt;
[[Image:ob_wiki_12_2004.png]] ''Interconnect Family Market Share for 2004''&lt;br /&gt;
[[Image:ob_wiki_12_2007.png]] ''Interconnect Family Market Share for 2007''&lt;br /&gt;
[[Image:ob_wiki_12_2010.png]] ''Interconnect Family Market Share for 2010''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt; Performance Metrics for Interconnection Network Topologies&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The several metrics used for evaluating characteristics of a network topology like latency, bandwidth, cost, etc. are as follows:&lt;br /&gt;
*Diameter: This is the longest distance between any pair of nodes of the network. It is measured in terms of network hops (the number of links the message must travel before reaching the destination).&lt;br /&gt;
*Bisection Bandwidth: This is the minimum number of links that one must cut in order to partition the network into two halves. &lt;br /&gt;
*Degree: This is the total number of links in and out from a router. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Diameter and Bisection bandwidth are the measure of performance of a network while the degree along with the total number of links is the measure of cost.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Interconnection evolution in the Top500 List&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:Top500interconnect.png|thumbnail|300px|left|]] &lt;br /&gt;
&lt;br /&gt;
This chart shows the evolution over time of the different interconnect topologies by their dominance in the top500 list of supercomputers &amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;7body&amp;quot;&amp;gt;[[#7foot|[7]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. As one can see, many technologies came into vogue briefly before losing performance share and disappearing. In the early days of the list, most of the computers list that the interconnect type is not applicable. However, the trailing end of the hypercube phase is clear in burnt orange. The dark blue at the top is &amp;quot;other&amp;quot; and the dark red in the middle is &amp;quot;proprietary&amp;quot;, so we can only speculate about what topologies they might employ. The toroidal mesh appears briefly at the start in a cream color, and slightly outlasts the hypercube. The two crossbar technologies (blue and olive) followed the toroidal mesh. The fully-distributed crossbar died out quickly, but the multi-stage crossbar lasted longer but wasn't ever dominant. The 3-D torus (purple) dominates much of the 90s with hypercube topologies (dark pink) enjoying a short comeback in the later part of the decade. SP Switch (light olive), an IBM interconnect technology which uses a multi-stage crossbar switch replaced the 3-D torus&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;8body&amp;quot;&amp;gt;[[#8foot|[8]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. Myrinet, Quadrics, and Federation all shared the spotlight in the mid 00s each used a similar fat-tree topology&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;9body&amp;quot;&amp;gt;[[#9foot|[9]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;10body&amp;quot;&amp;gt;[[#10foot|[10]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. The current class of supercomputers is dominated by nodes connected with either Infiniband or gigabit ethernet. Both can be connected in either a fat-tree or 2-D mesh topology. The primary difference between them is speed. Infiniband is considerably faster per link and allows links to be ganged into groups of 4 or 12. Gigabit ethernet is vastly less expensive, however, and some supercomputer designers have apparently chosen to save money on the interconnect technology in order to allow the use of faster nodes &amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;11body&amp;quot;&amp;gt;[[#11foot|[11]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;12body&amp;quot;&amp;gt;[[#12foot|[12]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Several metrics are normally choose to represent the cost and performance for a certain topology. In this section, degree, number of links, diameter and bisection width will be calculated for each topology.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_linear.jpg|thumbnail|frame|right|]]&lt;br /&gt;
&lt;br /&gt;
The nodes are connected linearly as in an array. This type of topology is simple, however, it does not scale well. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  p-1 &lt;br /&gt;
* ''Bisection BW:''  1&lt;br /&gt;
* ''# Links:''   p-1&lt;br /&gt;
* ''Degree:''    2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A linear array is the cheapest way to connect a group of nodes together. The number of links and degree of linear array have the smallest value of any topology. However, the draw back of this topology is also obvious: the two end points suffer the longest distance between each other, which makes the diameter p-1. This topology is also not reliable since the bisection bandwidth is 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg|thumbnail|right|]]&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  p/2&lt;br /&gt;
* ''Bisection BW:''  2&lt;br /&gt;
* ''# Links:''   p&lt;br /&gt;
* ''Degree:''    2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Compared with the cheapest linear array topology, the ring topology uses least effort (only add one link) to get a relatively big improvement. The longest distance between two nodes is cut into half. And the biseciton bandwidth has increased to 2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_2Dmesh.jpg|thumbnail|right|]]&lt;br /&gt;
&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. This topology is very suitable for some of the applications such as the ocean application and matrix calculation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  2(sqrt(p)-1)   &lt;br /&gt;
* ''Bisection BW:''  sqrt(p)&lt;br /&gt;
* ''# Links:''   2sqrt(p)(sqrt(p)-1)&lt;br /&gt;
* ''Degree:''    4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nodes that are not on the edge have a '''degree''' of 4. To calculate the number of links, add the number of vertical links, sqrt(p)(sqrt(p)-1), to the number of horizontal links, also sqrt(p)(sqrt(p)-1), to get 2sqrt(p)(sqrt(p)-1). The diameter is calculated by the distance between two diagonal nodes which is the sum of 2 edges of length sqrt(p)-1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Torus&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_2Dtorus.jpg|thumbnail|right|]]&lt;br /&gt;
&lt;br /&gt;
Similarly as the trick we did from linear array to ring topology, the 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Diameter sqrt(p)–1&lt;br /&gt;
* Bisection BW 2sqrt(p)&lt;br /&gt;
* # Links 2p&lt;br /&gt;
* Degree 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
With end-around connection, the longest distance has been cut. And the biseciton bandwidth also increased. Of course, the cost from 2-D mesh to 2-D torus almost increased twice.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube (3-D Mesh)&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg|thumbnail|right|]]&lt;br /&gt;
&lt;br /&gt;
If we add two more neighbor to each node, we can get a cube. The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  3(p&amp;lt;sup&amp;gt;1/3&amp;lt;/sup&amp;gt;-1)   --this is the corner-to-corner distance, analogous to the 2-d mesh formula&lt;br /&gt;
* ''Bisection BW:''  p&amp;lt;sup&amp;gt;2/3&amp;lt;/sup&amp;gt;  -- p&amp;lt;sup&amp;gt;1/3&amp;lt;/sup&amp;gt; rows of p&amp;lt;sup&amp;gt;1/3&amp;lt;/sup&amp;gt; links must be cut to bisect a cube&lt;br /&gt;
* ''# Links:''   3*p&amp;lt;sup&amp;gt;2/3&amp;lt;/sup&amp;gt;   -- there are p&amp;lt;sup&amp;gt;2/3&amp;lt;/sup&amp;gt; links in each of 3 dimensions.&lt;br /&gt;
* ''Degree:''    6 (from the inside nodes)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_hypercube.jpg|thumbnail|right|Hypercube]]&lt;br /&gt;
&lt;br /&gt;
In the N-dimensional cube, the boundary nodes are normally the one who hurts the performance of entire network. Thus, we can fix it by connecting those broundary nodes together. The hypercube is essentially multiple cubes put together.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)  &lt;br /&gt;
* ''Bisection BW:''  p/2              -- p/2 links run from one N-1 cube to the other.&lt;br /&gt;
* ''# Links:''   p/2 * log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)  -- each node has a degree of log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p). Multiply by p nodes and divide by 2 nodes per link.&lt;br /&gt;
* ''Degree:''    log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
From the metrics we can see, the diameter and bisection bandwidth are significantly improved for the high order topologies. Each node is numbered with a bitstring that is log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p) bits long. The farthest away node is this bitstring's complement. One bit can be flipped per hop so the diameter is log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_tree.jpg|thumbnail|right|Tree]]&lt;br /&gt;
&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  2log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)  -- the path from a leaf through the root to the farthest leaf on the other side&lt;br /&gt;
* ''Bisection BW:''  1   -- breaking either link to the root bisects the tree&lt;br /&gt;
* ''# Links:''   2(p-1)  -- there are 2 links for each router and there are p routers if p is a power of 2.&lt;br /&gt;
* ''Degree:''    3  -- interior routers have a degree of 3.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The tree experiences high traffic at the upper levels. Since almost half of the messages need go through the root node, the root of the tree becomes the bottom neck of the tree topology. Also, the other disadvantage of tree topology is that the bisection bandwidth is only 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Fat Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_fat_tree.jpg|thumbnail|right|Fat Tree]]&lt;br /&gt;
In order to improve the performance of the tree topology, the fat tree alleviates the traffic at upper levels by &amp;quot;fattening&amp;quot; up the links at the upper levels. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* ''Diameter:''  2log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)  -- same as a regular tree&lt;br /&gt;
* ''Bisection BW:''  p/2        -- all links to (one side of) the root must be cut to bisect the tree&lt;br /&gt;
* ''# Links:''   plog&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p) -- there are p links at each of log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p) levels&lt;br /&gt;
* ''Degree:''    p     -- the root node has p links through it. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The fat tree relieved pressure of root node, the biseciton bandwidth has also been increased.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Top_butterfly.jpg|thumbnail|right|Butterfly]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The butterfly structure is similar to the tree structure, but it replicates the switching node structure of the tree topology and connects them together so that there are equal links and routers at all levels.&lt;br /&gt;
* ''Diameter:''  2log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)  -- same as a tree since butterfly has the same depth as a tree (just with p nodes at each level)&lt;br /&gt;
* ''Bisection BW:''  p            -- p links connect the two halves at the top level&lt;br /&gt;
* ''# Links:''   2p*log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p)  -- there are 2*p links at each level times log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(p) levels.&lt;br /&gt;
* ''Degree:''    4    -- the routers in the middle levels all have 4 links. The leaves and routers at the top level each have 2 links.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Butterfly has similar performance to Hypercube. In terms of cost, butterfly has a smaller degree (so cheaper routers can be used) but hypercube has fewer links.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a research study by Andy Hospodor and Ethan Miller, several network topologies were investigated in a high-performance, high-traffic network&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. Several topologies were investigated including the fat tree, butterfly, mesh, torii, and hypercube structures. Advantages and disadvantages including cost, performance, and reliability were discussed. &lt;br /&gt;
&lt;br /&gt;
[[File:Machines.png|frame|center|''Current Machine Statistics''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;13body&amp;quot;&amp;gt;[[#13foot|[13]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
In this experiment, a petabyte-scale network with over 100 GB/s total aggregate bandwidth was investigated. The network consisted of 4096 disks with large servers with routers and switches in between&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Disknet_network.jpg|frame|center|''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Fat Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In large scale, high performance applications, fat tree can be a choice. However, in order to &amp;quot;fatten&amp;quot; up the links, redundant connections must be used. Instead of using one link between switching nodes, several must be used. The problem with this is that with more input and output links, one would need routers with more input and output ports. Router with an excess of 100 ports are difficult to build and expensive, so multiple routers would have to be stacked together. Still, the routers would be expensive and would require several of them&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The Japan Agency for Marine-Earth Science and Technology supercomputing system uses the fat tree topology. The system connects 1280 processors using NEC processors&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;7body&amp;quot;&amp;gt;[[#7foot|[7]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Mercury Computer System's RACEway, their original interconnect fabric, uses 6-way crossbar chips organized in a fat tree network. The fat tree network was particularly well suited for Fast Fourier Transforms, which was used for signal processing&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;13body&amp;quot;&amp;gt;[[#13foot|[13]]]&amp;lt;/span&amp;gt;.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In high performance applications, the butterfly structure is a good choice. The butterfly topology uses fewer links than other topologies, however, each link carries traffic from the entire layer. Fault tolerance is poor. There exists only a single path between pairs of nodes. Should the link break, data cannot be re-routed, and communication is broken&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Disknet_butterfly.jpg|frame|center|''Butterfly structure''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mesh and torus structure used in this application would require a large number of links and total aggregate of several thousands of ports. However, since there are so many links, the mesh and torus structures provide alternates paths in case of failures&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Image:Disknet_mesh.jpg|frame|center|''Mesh structure''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Disknet_torus.jpg|frame|center|''Torus structure''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Some examples of current use of torus structure include the QPACE SFB TR Cluster in Germany using the PowerXCell 8i processors. The systems uses 3-D torus topology with 4608 processors&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;7body&amp;quot;&amp;gt;[[#7foot|[7]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Originally developed for military applications, wireless mesh networks are now being used in the consumer sector. MIT Media Lab's XO-1 laptop, also known as &amp;quot;OLPC&amp;quot; (One Laptop Per Child) uses mesh networking to create an inexpensive infrastructure. The connections made by the laptops are used to reduce the need for an external infrastructure&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;15body&amp;quot;&amp;gt;[[#15foot|[15]]]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to the torii structures, the hypercube requires larger number of links. However, the bandwidth scales better than mesh and torii structures.&lt;br /&gt;
 &lt;br /&gt;
Intel produced several supercomputers using hypercube design, of which the best known was the iPSC/860. Other early supercomputers, including the first few models of the Conection Machine family from Thinking Machines Corporation, also used the hypercube design. The CRAY T3E, CRAY XT3, and SGI Origin 2000 also used k-ary n-cubed topologies.&lt;br /&gt;
&lt;br /&gt;
[[Image:Disknet_hypercube.jpg|frame|center|''Hypercube structure''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
It is worth to mention that even though there are many topologies have much better performance than 2-D mesh, the cost of these advanced topologies are also high. Since most of the chips is in 2-D space, it is very expensive to implement high dimensional topology on 2-D chip. For hypercube topology, the increases of number of node will cause higher degree for each node. For the butterfly topology, although the increases of degree is relatively slow but the required number of links and number of switches increases rapidly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt; Why do meshes dominate?&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
From the perspective of performance and flexibility for each of the topologies, it looks like higher dimension networks are preferable compared to low dimensional networks. However, in reality, cost of building the network is also an important consideration. A mesh network is much easier to layout because all of the connections can be made in 2 dimensions. Conversely, hypercubes and butterflies contain many crossing wires which may need to be quite long to loop around the edge. &lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
In a 2D network, each router is very simple since it only needs to have a degree of 4. A router usually uses crossbar switches to route inputs to outputs and the cost of additional ports increase the complexity quadratically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In comparison to a 2D mesh, a router for a hypercube is much more complex with a degree of twice the diameter. For example, for 5 dimensions, we need a router of degree 10. With other networks like a butterfly, the complexity of a router remains same at 4 but we would need a larger number of routers as the number of links is more.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example, IBM's [http://en.wikipedia.org/wiki/Blue_Gene/Q Blue Gene/Q] uses a 3D mesh interconnect with auxiliary networks for global communications (broadcast and reductions), I/O, and management.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Comparison of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table shows the total number of ports required for each network topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_ports.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Number of ports for each topology''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As the figure above shows, the 6-D hypercube requires the largest number of ports, due to its relatively complex six-dimensional structure. In contrast, the fat tree requires the least number of ports, even though links have been &amp;quot;fattened&amp;quot; up by using redundant links. The butterfly network requires more than twice the number of ports as the fat tree, since it essentially replicates the switching layer of the fat tree. The number of ports for the mesh and torii structures increase as the dimensionality increases. However, with modern router technology, the number of ports is a less important consideration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Below the average path length, or average number of hops, and the average link load (GB/s) is shown.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_load.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Average path length and link load for each topology''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Looking at the trends, when average path length is high, the average link load is also high. In other words, average path length and average link load are proportionally related. It is obvious from the graph that 2-D mesh has, by far, the worst performance. In a large network such as this, the average path length is just too high, and the average link load suffers. For this type of high-performance network, the 2-D mesh does not scale well. Likewise the 2-D torus cuts the average path length and average link load in half by connected the edge nodes together, however, the performance compared to other types is relatively poor. The butterfly and fat-tree have the least average path length and average link load. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The figure below shows the cost of the network topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_cost.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Cost of each topology''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Despite using the fewest number of ports, the fat tree topology has the highest cost, by far. Although it uses the fewest ports, the ports are high bandwidth ports of 10 GB/s. Over 2400, ports of 10 GB/s are required have enough bandwidth at the upper levels of the tree. This pushes the cost up dramatically, and from a cost standpoint is impractical. While the total cost of fat tree is about 15 million dollars, the rest of the network topologies are clustered below 4 million dollars. When the dimensionalality of the mesh and torii structures increase, the cost increases. The butterfly network costs between the 2-D mesh/torii and the 6-D hypercube. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
When the cost and average link load is factored the following graph is produced.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_overall.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Overall cost of each topology''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;2body&amp;quot;&amp;gt;[[#2foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
From the figure above, the 6-D hypercube demonstrates the most cost effective choice on this particular network setup. Although the 6-D hypercube costs more because it needs more links and ports, it provides higher bandwidth, which can offset the higher cost. The high dimensional torii also perform well, but cannot provide as much bandwidth as the 6-D hypercube. For systems that do not need as much bandwidth, the high-dimensional torii is also a good choice. The butterfly topology is also an alternative, but has lower fault tolerance. &lt;br /&gt;
&lt;br /&gt;
However, when the number of nodes increases, the relative cost of the higher-dimensional topologies increases far faster than their relative performance when compared to a 2-D mesh. This is because the 2-D mesh only uses low-cost, short links. The higher-dimensional structures must be projected onto our 3-dimensional world, and thus require many long, expensive links that wrap around the outside of the system like an impenetrable tangle of jungle vines. Maintaining such a network is also quite slow and tedious.  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Packet Routing&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The '''routing''' algorithm determines what path a packet of data will take from source to destination. Routing can be '''deterministic''', where the path is the same given a source and destination, or '''adaptive''', where the path can change. The routing algorithm can also be '''partially adaptive''' where packets have multiple choices, but does not allow all packets to use the shortest path&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Deadlock&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When packets are in '''deadlock''' when they cannot continue to move through the nodes. The illustration below demonstrates this event. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_deadlock.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Example of deadlock''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assume that all of the buffers are full at each node. Packet from Node 1 cannot continue to Node 2. The packet from Node 2 cannot continue to Node 3, and so on. Since packet cannot move, it is deadlocked. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The deadlock occurs from cyclic pattern of routing. To avoid deadlock, avoid circular routing pattern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To avoid circular patterns of routing, some routing patterns are disallowed. These are called '''turn restrictions''', where some turns are not allowed in order to avoid making a circular routing pattern. Some of these turn restrictions are mentioned below.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Dimensional ordered (X-Y) routing&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Turns from the y-dimension to the x-dimension are not allowed.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;West First&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Turns to the west are not allowed.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;North Last&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Turns after a north direction are not allowed. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Negative First&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Turns in the negative direction (-x or -y) are not allowed, except on the first turn.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Odd-Even Turn Model&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Unfortunately, the above turn-restriction models reduce the degree of adaptiveness and are partially adaptive. The models cause some packets to take different routes, and not necessarily the minimal paths. This may cause unfairness but reduces the ability of the system to reduce congestion. Overall performance could suffer&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ge-Ming Chiu introduces the Odd-Even turn model as an adaptive turn restriction, deadlock-free model that has better performance than the previously mentioned models&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. The model is designed primarily for 2-D meshes.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
''Turns from the east to north direction from any node on an even column are not allowed.''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Turns from the north to west direction from any node on an odd column are not allowed.''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Turns from the east to south direction from any node on an even column are not allowed.''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Turns from the south to west direction from any node on an odd column are not allowed.''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The illustration below shows allowed routing for different source and destination nodes. Depending on which column the packet is in, only certain directions are allowed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_odd_even.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Odd-Even turn restriction model proposed by Ge-Ming Chiu''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Comparison of Turn Restriction Models&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To simulate the performance of various turn restriction models, Chiu simulated a 15 x 15 mesh under various traffic patterns. All channels have bandwidth of 20 flits/usec and has a buffer size of one flit. The dimension-ordered x-y routing, west-first, and negative-first models were compared against the odd-even model. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Traffic patterns including uniform, transpose, and hot spot were conducted. Uniform simulates one node send messages to any other node with equal probability. Transpose simulates two opposite nodes sending messages to their respective halves of the mesh. Hot spot simulates a few &amp;quot;hot spot&amp;quot; nodes that receive high traffic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_uniform.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Uniform traffic simulation of various turn restriction models''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The performance of the different routing algorithms is shown above for the uniform traffic. For uniform traffic, the dimensional ordered x-y model outperforms the rest of the models. As the number of messages increase, the x-y model has the &amp;quot;slowest&amp;quot; increase in average communication latency. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_transpose.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''First transpose traffic simulation of various turn restriction models''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The performance of the different routing algorithms is shown above for the first transpose traffic. The negative-first model has the best performance, while the odd-even model performs better than the west-first and x-y models.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_transpose2.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Second transpose traffic simulation of various turn restriction models''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
With the second transpose simulation, the odd-even model outperforms the rest.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_hotspot.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hotspot traffic simulation of various turn restriction models''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The performance of the different routing algorithms is shown above for the hotspot traffic. Only one hotspot was simulated for this test. The performance of the odd-even model outperforms other models when hotspot traffic is 10%.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Routing_hotspot2.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Second hotspot traffic simulation of various turn restriction models''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
When the number of hotspots is increased to five, the performance of the odd-even begins to shine. The latency is lowest for both 6 and 8 percent hotspot. Meanwhile, the performance of x-y model is horrendous. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
While the x-y model performs well in uniform traffic, it lacks adaptiveness. When traffic becomes hotspot, the x-y model suffers from the inability to adapt and re-route traffic to avoid the congestion caused by hotspots. The odd-even model has superior adaptiveness under high congestion. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Router Architecture&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The '''router''' is a device that routes incoming data to its destination. It does this by having several input ports and several output ports. Data incoming from one of the inputs ports is routed to one of the output ports. Which output port is chosen depends on the destination of the data, and the routing algorithms. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The internal architecture of a router consists of input and output ports and a '''crossbar switch'''. The crossbar switch connects the selects which output should be selected, acting essentially as a multiplexer. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Router technology has improved significantly over the years. This has allowed networks with high dimensionality to become feasible. As shown in the real-world example above, high dimensional torii and hypercube are excellent choice of topology for high-performance networks. The cost of high-performance, high-radix routers has contributed to the viability of these types of high dimensionality networks. As the graph below shows, the bandwidth of routers has improved tremendously over a period of 10 years&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[4]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Router_bandwidth.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Bandwidth of various routers over 10 year period''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[4]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Looking at the physical architecture and layout of router, it is evident that the circuitry has been dramatically more dense and complex.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Router_physical.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Router hardware over period of time''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[4]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Router_radix.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Radix and latency of routers over 10 year period''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[4]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The '''radix''', or the number of ports of routers has also increased. The current technology not only has high radix, but also low latency compared to last generation. As radix increases, the latency remains steady. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With high-performance routers, complex topologies are possible. As the router technology improves, more complex, high-dimensionality topologies are possible. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Fault Tolerant Routing&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Fault-tolerant routing means the successful routing of messages between any pair of non faulty nodes in the presence of faulty components&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;6body&amp;quot;&amp;gt;[[#6foot|[6]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;. With increased number of processors in a multiprocessor system and high data rates reliable transmission of data in event of network fault is of great concern and hence fault tolerant routing algorithms are important.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Fault Models&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Faults in a network can be categorized in two types:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1.'''Transient Faults'''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt; : A transient fault is a temporary fault that occurs for a very short duration of time. This fault can be caused due to change in output of flip-flop leading to generation of invalid header. These faults can be minimized using error controlled coding. These errors are generally evaluated in terms of Bit Error Rate.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2.'''Permanent Faults'''&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;: A permanent fault is a fault that does not go away and causes a permanent damage to the network. This fault could be due to damaged wires and associated circuitry. These faults are generally evaluated in terms of Mean Time between Failures.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Fault Tolerance Mechanisms (for permanent faults)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The permanent faults can be handled using one of the two mechanisms:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1.'''Static Mechanism''': In static fault tolerance model, once the fault is detected all the processes running in the system are stopped and the routing tables are emptied. Based on the information of faults the routing tables are re-calculated to provide a fault free path.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2.'''Dynamic Mechanisms''': In dynamic fault tolerance model, it is made sure that the operation of the processes in the network is not completely stalled and only the affected regions are provided cure. Some of the methods to do this are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
a.'''Block Faults''': In this method many of the healthy nodes in vicinity of the faulty nodes are marked as faulty nodes so that no routes are created close to the actual faulty nodes. The shape of the region could be convex or non-convex, and is made sure that none of the new routes introduce cyclic dependency in the cyclic dependency graph (CDG).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DISADVANTAGE: This method causes lot of healthy nodes to be declared as faulty leading to reduction in system capacity.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Fault_pic1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
b.'''Fault Rings''': This method was introduced by Chalasani and Boppana. A fault tolerant ring is a set of nodes and links that are adjunct to faulty nodes/links. This approach reduces the number of healthy nodes to be marked as faulty and blocking them.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Fault_pic2.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; Y. Solihin, ''Fundamentals of Parallel Computer Architecture''. Madison: OmniPress, 2009. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://dspace.upv.es/xmlui/bitstream/handle/10251/2603/tesisUPV2824.pdf?sequence=1 Efficient mechanisms to provide fault tolerance in interconnection networks for PC clusters, José Miguel Montañana Aliaga. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://web.ebscohost.com.www.lib.ncsu.edu:2048/ehost/pdfviewer/pdfviewer?vid=2&amp;amp;hid=15&amp;amp;sid=72e3828d-3cb1-42b9-8198-5c1e974ea53f@sessionmgr4 Adaptive Fault Tolerant Routing Algorithm for Tree-Hypercube Multicomputer, Qatawneh Mohammad &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; http://www.top500.org TOP500 Supercomputing Sites &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;8foot&amp;quot;&amp;gt;[[#8body|8.]]&amp;lt;/span&amp;gt; http://www.redbooks.ibm.com/abstracts/sg245161.html?Open Understanding and Using the SP Switch &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;9foot&amp;quot;&amp;gt;[[#9body|9.]]&amp;lt;/span&amp;gt; http://www.myri.com/myrinet/overview/ Myrinet Overview  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;10foot&amp;quot;&amp;gt;[[#10body|10.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/QsNet QsNet (Quadrics' network)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;11foot&amp;quot;&amp;gt;[[#11body|11.]]&amp;lt;/span&amp;gt; http://www.google.com/research/pubs/pub35155.html Dragonfly Topology &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;12foot&amp;quot;&amp;gt;[[#12body|12.]]&amp;lt;/span&amp;gt; http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.573&amp;amp;rep=rep1&amp;amp;type=pdf Flattened Butterfly Topology &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;13foot&amp;quot;&amp;gt;[[#13body|13.]]&amp;lt;/span&amp;gt; http://courses.engr.illinois.edu/cs533/sp2012/notes/InterconnectionNet.pdf  &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;14foot&amp;quot;&amp;gt;[[#14body|14.]]&amp;lt;/span&amp;gt; http://courses.csail.mit.edu/6.896/spring04/handouts/papers/fat_trees.pdf  &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;15foot&amp;quot;&amp;gt;[[#15body|15.]]&amp;lt;/span&amp;gt; http://wiki.laptop.org/go/Mesh_Network_Details  &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mchen4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2013/2a_lm&amp;diff=73041</id>
		<title>CSC/ECE 506 Spring 2013/2a lm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2013/2a_lm&amp;diff=73041"/>
		<updated>2013-02-15T20:44:36Z</updated>

		<summary type="html">&lt;p&gt;Mchen4: Added new reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Dsm.jpg|300px|thumb|left|SCD's IBM SP system blackforest, a distributed shared memory ('''DSM''') system]]&lt;br /&gt;
&lt;br /&gt;
== SAS programming on distributed-memory machines ==&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1898MW7jXRhuz40HXXiTsobSUDdUVBZ-aUjEyLdeQdNc/edit#, Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_506_Spring_2012/2a_bm Original Page]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Shared_memory '''Shared Address Space'''] (SAS) programming on distributed memory machines is a programming abstraction that provides less development effort than that of the traditional method of [http://en.wikipedia.org/wiki/Message_passing '''Message Passing'''] (MP) on distributed memory machines, such as clusters of servers.  Distributed systems are groups of computers that communicate through a network and share a common work goal.  Distributed systems typically do not physically share the same memory (are not [http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29 '''tightly coupled''']) but rather each processor or group of processors must depend on mechanisms other than direct memory access the shared memory, this arrangement is called Distributed Shared Memory and is discussed below.  Relevant issues that come to bear include [http://en.wikipedia.org/wiki/Memory_coherence '''memory coherence'''], types of memory access, data and process [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 '''synchronization'''], and performance.&lt;br /&gt;
&lt;br /&gt;
=== Background ===&lt;br /&gt;
Distributed memory systems are multi-processor systems in which each processor has its own individual memory. Tasks can only operate on a processor's local memory and if non-local data is required, the processor must communicate with one or more remote processors. Distributed memory systems started to flourish in the 1980s. The increasing performance in processors and network connectivity offered the perfect environment for parallel processing over a network of computers. This was a cheap way to put together massive computing power. The main drawback was going from sequential programs made for local memory to parallel programming in shared memory. This was where SAS provided the means to simplify programming by hiding the mechanisms to access distant memory located in other computers of the cluster.&lt;br /&gt;
&lt;br /&gt;
In 1985, Cheriton, in his article [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/858336.858338 &amp;quot;Preliminary thoughts on problem-oriented shared memory: a decentralized approach to distributed systems&amp;quot;], introduced ideas for the application of shared memory techniques in distributed memory systems. Cheriton envisioned a system of nodes with a pool of shared memory using a common file namespace that could &amp;quot;decentralize the implementation of a service.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Early distributed computer systems relied almost exclusively on message passing in order to communicate with one another, and this technique is still widely used today.  In a message passing (MP) model, each processor's local memory can be considered as isolated from that of the rest of the system.  Processes or objects can send or receive messages in order to communicate, and this can occur in a synchronous or asynchronous manner.  In distributed systems, and particularly with certain types of programs, the message passing model can become overly burdensome to the programmer as tracking data movement and maintaining data integrity can become challenging with many control threads.  A shared address or shared-memory system, however, can provide a programming model that simplifies data sharing via uniform mechanisms of data structure reads and writes on common memory.  Current distributed systems seek to take advantage both SAS and MP programming model principles in hybrid systems.&lt;br /&gt;
&lt;br /&gt;
=== Distributed Shared Memory (DSM) ===&lt;br /&gt;
[[File:Dsmd.jpg|400px|thumb|right|Distributed Shared Memory]]&lt;br /&gt;
Most commonly, a distributed system utilizing SAS will consist of a set of nodes connected by a network.  Nodes may be comprised of individual processors or a multiprocessor system (e.g. [http://en.wikipedia.org/wiki/Symmetric_multiprocessing '''Symmetric Multiprocessor'''] (SMP)), the latter typically sharing a system bus.  Each node itself contains a local memory, which maps partially to the distributed address space.  Relevant design elements of early SAS implementations included scalability, coherence, structure and granularity.  Most early examples did not structure memory, that is the layout of shared memory was simply a linear array of words.  Some, however, structured data as objects or language types.  '''IVY''' , an early example of a DSM system, implemented shared memory as virtual memory.  The granularity, or unit share size, for IVY was in 1-Kbyte pages and the memory was unstructured.  A problem when considering optimal page size is the balance between a process likely needing quick access to a large range of the shared address space, which argues for a larger page size, countered by the greater contention for individual pages that the larger page may cause amongst processes and the [http://en.wikipedia.org/wiki/False_sharing '''false sharing'''] it may lead to.  [http://en.wikipedia.org/wiki/Memory_coherence Memory coherence] is another important design element consideration, and semantics can be instituted that run gradations of strict to weak consistencies.  The strictest consistency guarantees that a read returns the most recently written value.  Weaker consistencies may use synchronization operations to guarantee sequential consistency.&lt;br /&gt;
&lt;br /&gt;
==== Cache-Coherent DSM ====&lt;br /&gt;
&lt;br /&gt;
Early DSM systems implemented a shared address space where the amount of time required to access a piece of data was &lt;br /&gt;
related to its location.  These systems became known as [http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access '''Non-Uniform Memory Access'''] (NUMA), whereas an SMP type&lt;br /&gt;
system is known as [http://en.wikipedia.org/wiki/Uniform_Memory_Access '''Uniform Memory Access'''] (UMA) architecture.  NUMA architectures were difficult to program due &lt;br /&gt;
to potentially significant differences in data access times. SMP architectures dealt with this problem through caching. &lt;br /&gt;
Protocols were established that ensured prior to writing a location, all other copies of the location (in other caches)&lt;br /&gt;
were invalidated.  These protocols do not scale to DSM machines and different approaches are necessary.&lt;br /&gt;
&lt;br /&gt;
Cache-coherent DSM architectures rely on a directory-based [http://en.wikipedia.org/wiki/Cache_coherency '''cache coherence'''] protocol where an extra directory structure keeps track of all blocks that have been cached by each processor.  A coherence protocol can then establish a consistent view of &lt;br /&gt;
memory by maintaining state and other information about each cached block.  These states usually minimally include Invalid,&lt;br /&gt;
Shared, and Exclusive.  Furthermore, in a cache-coherent DSM machine, the directory is distributed in memory to associate&lt;br /&gt;
with the cache block it describes in the physical local memory.&lt;br /&gt;
&lt;br /&gt;
==== User-level DSM ====&lt;br /&gt;
[[File:Untitled_Project.jpg|350px|thumb|left|Memory Mapping in Mome]]&lt;br /&gt;
&lt;br /&gt;
Another form of SAS is a User-level DSM system. In this arrangement, shared memory does not exist until defined by the programmer. Through explicit commands, segments of a processor's private memory become mapped and available as shared memory. &lt;br /&gt;
&lt;br /&gt;
An in depth example of a user-level DSM system is [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=1199404 Mome]. Mome, in 2003, was a run-time model that mapped Mome segments onto node private address space.    &lt;br /&gt;
&lt;br /&gt;
===== Mome Segment creation =====&lt;br /&gt;
&lt;br /&gt;
Segment creation was initiated through a ''MomeCreateSegment(size)'' call which returned an identifier for mapping used by all nodes.  Any process can request for a mapping of a section of its local memomy to a Mome segment section by calling ''MomeMap(Addr, Lg, Prot, Flags, Seg, Offset)'', which returns the starting address of the mapped region.  Each mapping request made by a process is independent and the addresses of the mappings may or may not be consistent on all nodes.  If mappings are consistent between processes, however, then pointers may be shared by them.  Mome supports strong and weak consistency models, and for any particular page each node is able to dynamically manage its consistency during program execution.&lt;br /&gt;
&lt;br /&gt;
===== Page Management in Mome =====&lt;br /&gt;
&lt;br /&gt;
Mome manages [http://en.wikipedia.org/wiki/Page_%28computer_memory%29 '''pages'''] in a directory based scheme where each page directory maintains the status of six characteristics per page on each node.  The page manager acts upon collections of nodes according to these characteristics for each page:  &lt;br /&gt;
V nodes posses the current version, M nodes have a modified version, S nodes want strong consistency, I nodes are &lt;br /&gt;
invalidated, F nodes have initiated a modification merge and H nodes are a special type of hidden page.  A new version of &lt;br /&gt;
a page is created prior to a constraint violation and before modifications are integrated as a result of a consistency&lt;br /&gt;
request.  &lt;br /&gt;
&lt;br /&gt;
===== Memory mapping in Mome =====&lt;br /&gt;
&lt;br /&gt;
The Mome memory mapping figure to the left shows a possible DSM memory organization on a single node.  The DSM memory size&lt;br /&gt;
shown is 22 pages.  When a new segment is created on a node a segment descriptor is created on that node.  In this case the&lt;br /&gt;
segment descriptor is 12 pages, with each segment descriptor block corresponding to one page.  Each block also contains&lt;br /&gt;
three DSM memory references for current, modified and next version of pages.  The memory organization state shows an &lt;br /&gt;
application with two mappings, M1 and M2, with segment offsets at 0 and 8.  The six pages of M1 are managed by segment &lt;br /&gt;
descriptor blocks 0 to 5.  The descriptor blocks (and application memory) show that pages 1,2 and 5 have no associated &lt;br /&gt;
memory, while M1 page 0 is mapped to block 6 as a current version and M1 page 3 is mapped to block 13 as a current version,&lt;br /&gt;
block 8 as a modified version, and has initiated a modifications merge as indicated by the block 17 pointer.  The communication&lt;br /&gt;
layer manages incoming messages from other nodes. &lt;br /&gt;
&lt;br /&gt;
[[File:Mem hierarchy.png|200px|thumb|right|Memory hierarchy of node]]&lt;br /&gt;
&lt;br /&gt;
==== Configurable Shared Virtual Space ====&lt;br /&gt;
As described by [http://www.cs.utexas.edu/ftp/techreports/tr94-21.pdf Yoon, et al.] in 1994 the communication paradigm &lt;br /&gt;
for their DSM node network relies on a memory hierarchy for each node that places remote memories at the same hierarchy as &lt;br /&gt;
its own local disk storage.  [http://en.wikipedia.org/wiki/Page_fault '''Page faults'''] within a given node that can be resolved within disk storage are handled &lt;br /&gt;
normally while those that cannot are resolved between node main memory and memory of other nodes. Point to point &lt;br /&gt;
communication at the node level is supported through message passing, and the specific mechanism for communication is&lt;br /&gt;
agreed to by all nodes. &lt;br /&gt;
&lt;br /&gt;
Yoon describes a DSM system that generates a shared virtual memory on a per job basis.  A '''configurable shared virtual address space'''&lt;br /&gt;
(CSVS) is readied for when a member node receives a job, generates a job identification number and creates&lt;br /&gt;
an information table in its memory:&lt;br /&gt;
&lt;br /&gt;
                                     ''JOB_INFORMATION {''&lt;br /&gt;
                                         ''status;''&lt;br /&gt;
                                         ''number_of_tasks;''&lt;br /&gt;
                                         ''number_of_completed_tasks;''&lt;br /&gt;
                                         ''*member_list;''                    /*pointer to first member*/&lt;br /&gt;
                                         ''number_of_members;''&lt;br /&gt;
                                         ''IO_server;''&lt;br /&gt;
                                     ''}''&lt;br /&gt;
&lt;br /&gt;
The ''status'' refers to the creation of the CSVS and ''number_of_members'' and ''member_list'' are established through&lt;br /&gt;
a task distribution process during address space assignment.  All tasks associated with the program are tagged with&lt;br /&gt;
the ''job_id'' and ''requester_id'' and, following address space assignment, are distributed across the system.  The&lt;br /&gt;
actual CSVS creation occurs when the first task of a job is initiated by a member, who requests the generation of the new&lt;br /&gt;
CSVS to all other members.  Subspace assignment for the SAS model ensues under the specific ''job_id''.&lt;br /&gt;
&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Operating_system '''operating system'''] (OS) or [http://en.wikipedia.org/wiki/Memory_management_unit '''memory management unit'''] (MMU) of each member maintains a copy of the ''JOB_INFORMATION'' &lt;br /&gt;
table which is consulted to identify the default manager when a page fault occurs.  When a page fault does occur, the MMU&lt;br /&gt;
locates the default manager and handles the fault normally.  If the page requested is out of its subspace then the &lt;br /&gt;
virtual address, ''job_id'', and default manager identification are sent to the [http://en.wikipedia.org/wiki/Control_unit '''control unit'''] (CU) to construct a &lt;br /&gt;
message requesting a page copy.  All messages sent through the CSVS must include a virtual address and the ''job_id'',&lt;br /&gt;
which acts as protection to control access to relevant memory locations.  When received at the appropriate member&lt;br /&gt;
node, the virtual address is translated to a local physical address.&lt;br /&gt;
[[File:Jacobi_code.jpg|300px|thumb|left|Jacobi method pseudocode using TreadMarks API]]&lt;br /&gt;
&lt;br /&gt;
=====Improvements in communication=====&lt;br /&gt;
Early SAS programming models in DSM environments suffered from poor performance because protection schemes demanded&lt;br /&gt;
applications to access the network via system calls, significantly increasing latency.  Later software&lt;br /&gt;
systems and network interfaces arose that were able to ensure safety without incurring the time cost of the system calls.  Addressing this and other &lt;br /&gt;
latency sources on both ends of communication were an important goal for projects such as the '''Virtual Memory-Mapped Communication''' (VMMC) model that was developed as part of the [http://shrimp.cs.princeton.edu/index.html Shrimp Project]. &lt;br /&gt;
&lt;br /&gt;
Protection is achieved in VMMC because the receiver must grant permission before the sender is allowed to transfer data&lt;br /&gt;
to a receiver defined area of its address space.  In this communication scheme, the receiver process exports areas of its&lt;br /&gt;
address space that will act as receive buffers and sending processes must import the destinations.  There is no explicit &lt;br /&gt;
receive operation in VMMC.  Receivers are able&lt;br /&gt;
to define which senders can import specific buffers and VMMC ensures only receiver buffer space is overwritten.  Imported&lt;br /&gt;
receive buffers are mapped to a destination proxy space which can be implemented as part of the sender's virtual address&lt;br /&gt;
space and can be translated by VMMC to a receiver, process and memory address.  VMMC supports a deliberate update&lt;br /&gt;
request and will update data sent previously to an imported receive buffer.  This transfer occurs directly without receiver&lt;br /&gt;
CPU interruption.&lt;br /&gt;
&lt;br /&gt;
[[File:Shortest_path_pseudocode.jpg|300px|thumb|right|Shortest path pseudocode using TreadMarks API]]&lt;br /&gt;
&lt;br /&gt;
=== Programming Environment ===&lt;br /&gt;
The globally shared memory abstraction provided through virtual memory or some other DSM mechanism allows programmers &lt;br /&gt;
to focus on algorithms instead of processor communication and data tracking.  Many programming environments have been&lt;br /&gt;
developed for DSM systems including Rice University's [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=485843&amp;amp;tag=1 TreadMarks]&lt;br /&gt;
in the 1990s.  TreadMarks was a user-level library that ran on top of Unix.  Programs were written in&lt;br /&gt;
C, C++ or Fortran and then compiled and linked with the TreadMarks library.  &lt;br /&gt;
&lt;br /&gt;
Shown at left is a pseudocode example of using the TreadMarks API to implement the Jacobi method, a type of partial &lt;br /&gt;
differential equation solver.  The code iterates over a 2D array and updates each element to the average of its four&lt;br /&gt;
nearest neighbors.  All processors are assigned an approximately equivalent number of rows and neighboring processes &lt;br /&gt;
share boundary rows as is necessary for the calculation.  This example shows TreadMarks use of [http://en.wikipedia.org/wiki/Barrier_%28computer_science%29 '''barriers'''], a technique used for process [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 '''synchronization'''].  Barriers prevent race&lt;br /&gt;
conditions.  ''void Tmk_startup(int argc, char **argv'') initializes TreadMarks and starts the remote processes.  &lt;br /&gt;
The ''void Tmk_barrier(unsigned id)'' call blocks the calling process until every other process arrives at the barrier.  In this&lt;br /&gt;
example, ''Tmk_barrier(0)'' guarantees that process 0 completes initialization before any process proceeds, ''Tmk_barrier(1)'' &lt;br /&gt;
guarantees all previous iteration values are read before any current iteration values are written, and ''Tmk_barrier(2)''&lt;br /&gt;
guarantees all current iteration values are written before any next iteration computation begins.&lt;br /&gt;
&lt;br /&gt;
To the right is shown a short pseudocode program exemplifying another SAS synchronization technique which uses [http://en.wikipedia.org/wiki/Lock_%28computer_science%29 '''locks'''].  This program calculates the shortest path in a grouping of nodes that starts at any designated start node, visits each&lt;br /&gt;
other node once and returns to the origin node.  The shortest route identified thus far is stored in the shared ''Shortest_length''&lt;br /&gt;
and investigated routes are kept in a queue, most promising at the front, and expanded one node at a time.  A process&lt;br /&gt;
compares its resulting shortest partial path with ''Shortest_length'', updating if necessary and returns to the queue&lt;br /&gt;
to continue its search.  Process 0 allocates the shared queue and minimum length.  Exclusive access must be established&lt;br /&gt;
and maintained to ensure correctness and this is achieved through a lock on the queue and ''Shortest_length''.  Each&lt;br /&gt;
process acquires the queue lock to identify a promising partial path and releases it upon finding one.  When &lt;br /&gt;
increasing the ''Shortest_path'' a lock is acquired to ensure [http://en.wikipedia.org/wiki/Mutual_exclusion '''mutual exclusion'''] to update this shared data as well.&lt;br /&gt;
&lt;br /&gt;
=== Notable DSM Implementations ===&lt;br /&gt;
From an architectural point of view, DSMs are composed of several nodes connected via a network. Each of the nodes can be an individual machine or a cluster of machines. Each system has local memory modules that are either partially or completely part of the shared memory. There are many characteristics that can be used to classify DSM implementations. One of them is based on the nature of the memory demarcation: Software, Hardware, and Hybrid. This historical classification has been extracted from [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=494605&amp;amp;isnumber=10721 Distributed shared memory: concepts and systems].&lt;br /&gt;
&lt;br /&gt;
Software DSM implementations refer to the DSM implemented by using user-level software, OS, programming language, or combination of these. &lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Implementation'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Type of Implementation / Cluster configuration'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Network'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Type of Algorithm'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Consistency Model'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Granularity Unit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Coherence Policy'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''SW/HW/Hybrid'''&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cs.uwaterloo.ca/~brecht/courses/702/Possible-Readings/vm-and-gc/ivy-shared-virtual-memory-li-icpp-1988.pdf IVY]||User-level library + OS modification || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRSW ||Sequential ||1 Kbyte ||Invalidate ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/121133.121159 Munin]||Runtime system + linker + library + preprocessor + OS modifications ||style=&amp;quot;padding-left: 2em&amp;quot; | - ||Type-specific (SRSW, MRSW, MRMW) ||Release ||Variable size objects ||Type-specific (delayed update, invalidate) ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=485843&amp;amp;tag=1 TreadMarks]||User-level || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRMW ||Lazy release ||4 Kbytes ||Update, Invalidate ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/74851.74871 Mirage]||OS kernel ||style=&amp;quot;padding-left: 2em&amp;quot; | - ||MRSW ||Sequential ||512 bytes ||Invalidate ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://onlinelibrary.wiley.com.prox.lib.ncsu.edu/doi/10.1002/spe.4380210503/pdf Clouds]||OS, out of kernel || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRSW ||Inconsistent, sequential ||8 Kbytes ||Discard segment when unlocked ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1663305&amp;amp;tag=1 Linda]||Language || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRSW ||Sequential ||Variable (tuple size) ||Implementation- dependent ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=93183 Memnet]||Single processor, Memnet device||Token ring||MRSW||Sequential||32 bytes||Invalidate||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Scalable_Coherent_Interface SCI]||Arbitrary||Arbitrary||MRSW||Sequential||16 bytes||Invalidate||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.8026&amp;amp;rep=rep1&amp;amp;type=pdf KSR1]||64-bit custom PE, I+D caches, 32M local memory||Ring-based||MRSW||Sequential||128 bytes||Invalidate||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=766965&amp;amp;isnumber=16621 RMS]||1-4 processors, caches, 256M local memory||RM bus||MRMW||Processor||4 bytes||Update||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Alewife_(multiprocessor) Alewife]||Sparcle PE, 64K cache, 4M local memory, CMMU|| mesh||MRSW||Sequential||16 Kbytes||Invalidate||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
| [http://dl.acm.org/citation.cfm?id=192056 Flash]||MIPS T5, I +D  caches, Magic controller|| mesh||MRSW||Release||128 Kbytes||Invalidate||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cs.utexas.edu/users/dburger/teaching/cs395t-s08/papers/10_tempest.pdf Typhoon]||SuperSparc, 2-L caches|| NP controller||MRSW||Custom||32 Kbytes||Invalidate custom||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
| [http://shrimp.cs.princeton.edu/ Shrimp]||16 Pentium PC nodes|| Intel Paragon routing network||MRMW||AURC, scope||4 Kbytes||Update/Invalidate||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Below is an explanation of the main characteristics listed in the DSM classification.&lt;br /&gt;
 &lt;br /&gt;
There are three types of DSM algorithm: &lt;br /&gt;
* '''Single Reader/ Single Writer''' (SRSW) &lt;br /&gt;
** central server algorithm - produces long network delays &lt;br /&gt;
** migration algorithm - produces thrashing and false sharing&lt;br /&gt;
* '''Multiple Readers/ Single Writer''' (MRSW) - read replication algorithm. It uses write invalidate. MRSW is the most adopted algorithm.&lt;br /&gt;
* '''Multiple Readers/Multiple Writers''' (MRMW) - full replication algorithm.  It has full concurrency and uses atomic updates.&lt;br /&gt;
&lt;br /&gt;
The consistency model plays a fundamental role in DSM systems. Due to the nature of the distributed systems, memory accesses are constrained in the different consistency models. &amp;quot;A memory consistency model defines the legal ordering of memory references issued by some processor, as observed by other processors.&amp;quot; The stricter the consistency model, the higher the access times, but programming is more simplified. Some of the consistency models types are:&lt;br /&gt;
* Sequential consistency - all processors see the same ordering of memory references, and these are issued in sequences by the individual processors.&lt;br /&gt;
* Processor consistency - the order of writes is observed by every individual processor in the system, but the order of reads does not need to be in sequence. &lt;br /&gt;
* Weak consistency - consistency is required only on synchronization accesses.&lt;br /&gt;
* Release consistency - divides the synchronization accesses into acquire and release. Normal read and writes for a particular node can be done only after all acquires for that node are finished. Similarly, releases can only be done after all writes and reads are finished. &lt;br /&gt;
* Lazy Release consistency - extends the Release consistency, by propagating modifications to the shared data only on the acquire, and of those, only the ones related to critical sections.&lt;br /&gt;
* Entry consistency - synchronization is performed at variable level. This increases programming labor but helps with lowering latency and traffic exchanges as only the specific variable needs to be synchronized.&lt;br /&gt;
&lt;br /&gt;
Granularity refers to the unit of data blocks that are managed by the coherence protocols. The unit differs between hardware and software systems, as hardware systems tend to use smaller size blocks than the virtual layer that manages the data in the software systems. The problem with larger size blocks is that the probability for contingency is higher, even when the different processors involved are not accessing the exact same piece of memory, just a part contained in the block size. This is known as false sharing and creates thrashing (memory blocks keep being requested by processors and processors keep waiting for the same memory blocks).&lt;br /&gt;
&lt;br /&gt;
Coherence policy regulates data replication. The coherence policy dictates if the data that is being written at a site should be invalidated or updated at the remote sites. Usually, systems with fine-grain coherence (byte/word) impose the update policy, whereas the systems based on coarse-grain (page) coherence utilize the invalidate policy. This is also known in other parts of the literature as coherence protocol. And the two types of protocols are known as write-invalidate and write-update. The write-invalidate protocol invalidates all the copies except one before writing to it. In contrast, write-update maintains all copies updated.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
There are numerous studies of the performance of shared memory applications in distributed systems. The vast majority of them use a collection of programs named [http://dl.acm.org/citation.cfm?id=223990 SPLASH and SPLASH-2.]&lt;br /&gt;
===== SPLASH and SPLASH-2 =====&lt;br /&gt;
The '''Stanford ParalleL Applications for SHared memory''' (SPLASH) is a collection of parallel programs engineered for the evaluation of shared address space machines. These programs have been used by research studies to provide measurements and analysis of different aspects of the emerging DSM architectures at the time. A subsequent suite of programs (SPLASH-2) evolved from the necessity of improving on the SPLASH programs limitations. SPLASH-2 covers a more ample domain of scientific programs, makes use of improved algorithms, and pays more attention to the architecture of the underlying systems.&lt;br /&gt;
&lt;br /&gt;
Selected applications in the SPLASH-2 collections include:&lt;br /&gt;
*FFT: a '''Fast Fourier Transform''' implementation, in which the data is organized in source and destination matrices so that processors have stored in their local memory a contiguous set of rows. In this application all processors involved communicate among them, sending data to each other, to evaluate a matrix transposition.&lt;br /&gt;
*Ocean: calculations of large scale ocean movements simulating eddy currents. For the purpose of calculations, it shows nearest-neighbors accessing patterns in multi-grid formation as opposed to using a single grid.&lt;br /&gt;
*LU: matrix decomposition in the product of an upper triangular and lower triangular matrices. LU exhibits a &amp;quot;one-to-many non-personalized communication&amp;quot;.&lt;br /&gt;
*Barnes: simulates the interaction of a group of particles over time steps. &lt;br /&gt;
*Radix sort: integer sorting algorithm. This algorithm implementation displays an example of communication among all the processors involved, and the nature of this communication presents irregular patterns.&lt;br /&gt;
&lt;br /&gt;
===== Case Study - 2001 - Shan et al. =====&lt;br /&gt;
In 2001, [http://escholarship.org/uc/item/76p9b40g#page-1 Shan et al.] presented a comparison of the performance and programming effort of MP versus SAS running on clusters of '''Symmetric Memory Processors''' (SMPs). They highlighted the &amp;quot;automatic management and coherent replication&amp;quot; of the SAS programming model which facilitates the programming tasks in these types of clusters. This study uses MPI/Pro protocol for the MP programming model and GeNIMA SVM protocol (a page-based shared virtual memory protocol) for SAS on a 32 processors system (using a cluster of 8 machines with 4-way SMPs each). The subset of applications used involves regularly structured applications as FFT, Ocean, and LU contrasting with irregular ones as for example RADIX sort, among others.&lt;br /&gt;
&lt;br /&gt;
The complexity of development is represented by the number of code lines per application as shown in the table below this lines. It is observed that SAS complexity is significantly lower than that of MP and this difference increases as applications are more irregular and dynamic in nature (almost doubles for Radix).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Appl.&lt;br /&gt;
!FFT &lt;br /&gt;
!OCEAN &lt;br /&gt;
!LU &lt;br /&gt;
!RADIX &lt;br /&gt;
!SAMPLE &lt;br /&gt;
!N-BODY&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| MPI ||222||4320||470||384||479||1371&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| SAS ||210 ||2878 ||309||201||450||950&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The results performance-wise indicated that SAS was only half efficiently dealing with parallelism for most of the applications in this study. The only application that showed similar performance for both methods (MP and SAS) was the LU application. The authors concluded that the overhead of the SVM protocol for maintaining page coherence and synchronization were the handicap of the easier SAS programming model.&lt;br /&gt;
&lt;br /&gt;
===== Case Study - 2004 - Iosevich and Schuster =====&lt;br /&gt;
&lt;br /&gt;
In 2004, [http://dl.acm.org/citation.cfm?id=1006252 Iosevich and Schuster] performed a study on two memory consistency models in a DSM, the '''sequential consistency''' (SC) model and a relaxed consistency model called '''home-based lazy release consistency''' (HLRC) protocol. The SC provides a less complex programming model, whereas the HLRC improves on running performance as it allows parallel memory access. Memory consistency models provide a specific set of rules for interfacing with memory.&lt;br /&gt;
&lt;br /&gt;
The authors used a [http://www.cs.uga.edu/~dkl/6730/Fall02/Readings/millipage.pdf multiview] (MV) technique to ensure an efficient implementation of SC with fine-grain access to memory. The main advantage of this technique is that by mapping one physical region to several virtual regions, the system avoids fetching the whole content of the physical memory when there is a fault accessing a specific variable located in one of the virtual regions. One step further is the mechanism proposed by [http://onlinelibrary.wiley.com/doi/10.1002/spe.417/abstract Niv and Shuster] to dynamically change the granularity during runtime.&lt;br /&gt;
For this SC (with MV), only all page replicas need to be tracked, whereas for HLRC the tracking needed is much more complex. The advantage of HLRC is that write faults on read only pages are local, resulting in a lower cost for these operations.&lt;br /&gt;
&lt;br /&gt;
This table summarizes the characteristics of the benchmark applications used for the measurements. In the Synch column, B represents barriers and  L locks.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Application&lt;br /&gt;
! Input data set&lt;br /&gt;
! Shared memory&lt;br /&gt;
!Sharing granularity&lt;br /&gt;
! Synch&lt;br /&gt;
!Allocation pattern&lt;br /&gt;
|-&lt;br /&gt;
| Water-nsq|| 8000 molecules|| 5.35MB|| a molecule (672B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| Water-sp|| 8000 molecules|| 10.15MB|| a molecule (680B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| LU|| 3072 × 3072|| 72.10MB|| block (coarse)|| B|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| FFT|| 2^20 numbers|| 48.25MB|| a row segment|| B|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| TSP|| A graph of 32 cities|| 27.86MB|| a tour (276B)|| L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| SOR|| 2066 × 10240|| 80.73MB|| a row (coarse)|| B|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| Barnes-sp|| 32768 bodies|| 41.21MB|| body fields (4-32B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| Radix|| 10240000 keys|| 82.73MB|| an integer (4B)|| B, L|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| Volrend|| a file -head.den-|| 29.34MB|| a 4 × 4 box (4B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| Ocean|| a 514 × 514 grid|| 94.75MB|| grid point (8B)|| B, L|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| NBody|| 32768 bodies|| 2.00MB|| a body (64B)|| B|| fine&lt;br /&gt;
|-&lt;br /&gt;
| NBodyW|| 32768 bodies|| 2.00MB|| a body (64B)|| B|| fine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The authors found that the average speedup of the HLRC protocol is 5.97, and the average speedup of the SC (with MV) protocol is 4.5 if non-optimized allocation is used, and 6.2 if the granularity is changed dynamically.&lt;br /&gt;
&lt;br /&gt;
===== Case Study - 2008 - Roy and Chaudhary =====&lt;br /&gt;
&lt;br /&gt;
In 2008, [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.1319 Roy and Chaudhary] compared the communication requirements of three different page-based DSM systems ([http://www.cs.umd.edu/projects/cvm/ CVM], [http://www.cs.utah.edu/flux/quarks.html Quarks], and [http://ieeexplore.ieee.org/iel4/5737/15339/00709960.pdf?arnumber=709960 Strings]) that use virtual memory mechanisms to trap accesses to shared areas. Their study was also based on the SPLASH-2 suite of programs.&lt;br /&gt;
In their experiments, Quarks was running tasks on separate processes (it does not support more than one application thread per process) while CVM and Strings were run with multiple application threads.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Program &lt;br /&gt;
!CVM &lt;br /&gt;
!Quarks &lt;br /&gt;
!Strings&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| FFT||1290||2419||1894&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| LU-c||135||-||485&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| LU-n||385||2873||407&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| OCEAN-c||1955||15475||6676&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| WATER-n2||2253||38438||10032&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| WATER-sp||905||7568||1998&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| MATMULT||290||1307||645&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| SOR||247||7236||934&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The results indicate that Quarks generates a large quantity of messages in comparison with the other two systems. This can be observed in the table above. LU-c (contiguous version of LU) does not have a result for Quarks, as it was not possible to obtain results for the number of tasks (16) used in the experiment. This was due to the excessive number of collisions. In general, due to the lock related traffic, the performance of Quarks is quite low when compared to the other two systems for many of the application programs tested.&lt;br /&gt;
CVM improves on the lock management by allowing out of order access through a centralized lock manager. This makes the locking times for CVM much smaller than for others. &lt;br /&gt;
Nevertheless, the best performer is Strings. It wins in overall performance over the two other system compared, but there is room for improvement here too, as it was observed that the locking times in Strings are an elevated percentage of the overall computation. &lt;br /&gt;
&lt;br /&gt;
The overall conclusion is that using multiple threads per node and optimized locking mechanisms (CVM-type) provides the best performance.&lt;br /&gt;
&lt;br /&gt;
=== Evolution ===&lt;br /&gt;
A more recent version of a distributed shared memory system is vNUMA.   [http://www.usenix.org/event/usenix09/tech/full_papers/chapman/chapman_html/index.html Chapman and Heiser], describe vNUMA (where v is for virtual and NUMA is for [http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access Non Uniform Memory Access]) as &amp;quot;a virtual machine that presents a cluster as a virtual shared-memory multiprocessor.&amp;quot; The virtualization in vNUMA is a layer between the real CPUs that form the distributed shared memory system and the OS that runs on top it, usually Linux. The DSM in vNUMA is part of the hypervisor, which is the part of a virtual system that maps guest virtual addresses into real physical ones. The guest virtual addresses get then mapped into virtual memory addresses through the guest OS. &lt;br /&gt;
&lt;br /&gt;
The difference with other virtual machines is that vNUMA runs one OS on top of several physical machines, whereas virtual machines often run several guest OS on top of one host OS that runs on one machine. And it uses DSM software techniques to present all the virtualized memory as a whole.&lt;br /&gt;
&lt;br /&gt;
The DSM in vNUMA is a single-writer/multiple-reader write-invalidate protocol with sequential coherence. It is based on the IVY DSM, but it introduces several improvements to increase performance. The owner of a page can determine if the page needs to be sent by looking at the copyset (contains information of the set of nodes that maintain a copy of the page), avoiding several page faults and the manager becomes the owner of the copyset as soon as it is part of it. There are a couple other improvements: ''incremental deterministic merging'' and ''write-update-plus (WU+)''. ''Incremental deterministic merging'' uses sequence numbers to ensure that a location gets updated with the latest value and not intermediate, out of order writes. ''Write-update-plus (WU+)'' enforces single-writer for pages where atomic operations are done. vNUMA dynamically changes from multiple-writer to single-writer when atomic operations are detected. &lt;br /&gt;
&lt;br /&gt;
In [http://communities.vmware.com/community/vmtn/cto/high-performance/blog/2011/09/19/vnuma-what-it-is-and-why-it-matters vNUMA what it is and why it matters], VMware presents vNUMA as part of vSphere, a virtualization platform oriented to build cloud computing frameworks.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[http://www.sgi.com/pdfs/4250.pdf Performance and Productivity Breakthroughs with Very Large Coherent Shared Memory: The SGI® UV Architecture] SGI white paper.&lt;br /&gt;
*[http://www.scalemp.com/architecture#2 Versatile SMP (vSMP) Architecture]&lt;br /&gt;
*Adrian Moga, Michel Dubois, [http://www.sciencedirect.com/science/article/pii/S1383762108001136 &amp;quot;A comparative evaluation of hybrid distributed shared-memory systems,&amp;quot;] Journal of Systems Architecture, Volume 55, Issue 1, January 2009, Pages 43-52&lt;br /&gt;
*Jinbing Peng; Xiang Long; Limin Xiao; , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=4708970&amp;amp;isnumber=4708921 &amp;quot;DVMM: A Distributed VMM for Supporting Single System Image on Clusters,&amp;quot;] Young Computer Scientists, 2008. ICYCS 2008. The 9th International Conference for , vol., no., pp.183-188, 18-21 Nov. 2008&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Shan, H.; Singh, J.P.; Oliker, L.; Biswas, R.; , [http://escholarship.org/uc/item/76p9b40g#page-1 &amp;quot;Message passing vs. shared address space on a cluster of SMPs,&amp;quot;] Parallel and Distributed Processing Symposium., Proceedings 15th International , vol., no., pp.8 pp., Apr 2001&lt;br /&gt;
*Protic, J.; Tomasevic, M.; Milutinovic, V.; , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=494605&amp;amp;isnumber=10721 &amp;quot;Distributed shared memory: concepts and systems,&amp;quot;] Parallel &amp;amp; Distributed Technology: Systems &amp;amp; Applications, IEEE , vol.4, no.2, pp.63-71, Summer 1996&lt;br /&gt;
*Chandola, V. , [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.135.5206&amp;amp;rep=rep1&amp;amp;type=pdf &amp;quot;Design Issues in Implementation of Distributed Shared Memory in User Space,&amp;quot;]&lt;br /&gt;
*Nitzberg, B.; Lo, V. , [http://www.cdf.toronto.edu/~csc469h/fall/handouts/nitzberg91.pdf &amp;quot;Distributed Shared Memory:  A Survey of Issues and Algorithms&amp;quot;]&lt;br /&gt;
*Steven Cameron Woo , Moriyoshi Ohara , Evan Torrie , Jaswinder Pal Singh , Anoop Gupta, [http://dl.acm.org/citation.cfm?id=223990 &amp;quot;The SPLASH-2 programs: characterization and methodological considerations,&amp;quot;] Proceedings of the 22nd annual international symposium on Computer architecture, p.24-36, June 22-24, 1995, S. Margherita Ligure, Italy&lt;br /&gt;
*Jegou, Y. , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=1199404 Implementation of page management in Mome, a user-level DSM] Cluster Computing and the Grid, 2003. Proceedings. CCGrid 2003. 3rd IEEE/ACM International Symposium on, p.479-486, 21 May 2003, IRISA/INRIA, France&lt;br /&gt;
*Hennessy, J.; Heinrich, M.; Gupta, A.; , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=747863 &amp;quot;Cache-Coherent Distributed Shared Memory:  Perspectives on Its Development and Future Chanllenges,&amp;quot;] Proceedings of the IEEE, Volume: 87 Issue:3, pp.418 - 429, Mar 1999, Comput. Syst. Lab., Stanford Univ., CA&lt;br /&gt;
*J. Protic, M. Tomasevic, and V. Milutinovic, [http://media.wiley.com/product_data/excerpt/76/08186773/0818677376-2.pdf An Overview of Distributed Shared Memory]&lt;br /&gt;
*Yoon, M.; Malek, M.; , [http://www.cs.utexas.edu/ftp/techreports/tr94-21.pdf &amp;quot;Configurable Shared Virtual Memory for Parallel Computing&amp;quot;] University of Texas Technical Report tr94-21, July 15 1994, Department of Electrical and Computer Engineering, The University of Texas at Austin&lt;br /&gt;
*Dubnicki, C.;   Iftode, L.;   Felten, E.W.;   Kai Li;  , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=508084 &amp;quot;Software Support for Virtual Memory-Mapped Communication&amp;quot;] Parallel Processing Symposium, 1996., Proceedings of IPPS '96, The 10th International, pp.372 - 381, 15-19 Apr 1996, Dept. of Comput. Sci., Princeton Univ., NJ &lt;br /&gt;
*Dubnicki, C.;   Bilas, A.;   Li, K.;   Philbin, J.;  , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=580931 &amp;quot;Design and Implementation of Virtual Memory-Mapped Communication on Myrinet&amp;quot;] Parallel Processing Symposium, 1997. Proceedings., 11th International, pp.388 - 396, 1-5 Apr 1997, Princeton Univ., NJ&lt;br /&gt;
*Kranz, D.; Johnson, K.; Agarwal, A.; Kubiatowicz, J.; Lim, B.; , [http://delivery.acm.org.prox.lib.ncsu.edu/10.1145/160000/155338/p54-kranz.pdf?ip=152.1.24.251&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=81831968&amp;amp;CFTOKEN=62928147&amp;amp;__acm__=1327853249_029db7e958cb50bd47056f939f3296f7 &amp;quot;Integrating Message-Passing and Shared-Memory:  Early Experience&amp;quot;] PPOPP '93 Proceedings of the fourth ACM SIGPLAN symposium on Principles and practice of parallel programming, pp.54 - 63&lt;br /&gt;
*Amza, C.;  Cox, A.L.;  Dwarkadas, S.;  Keleher, P.;  Honghui Lu;  Rajamony, R.;  Weimin Yu;  Zwaenepoel, W.; , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=485843&amp;amp;tag=1 &amp;quot;TreadMarks: shared memory computing on networks of workstations&amp;quot;] Computer, Volume: 29 Issue:2, pp. 18 - 28, Feb 1996, Dept. of Comput. Sci., Rice Univ., Houston, TX&lt;br /&gt;
*David R. Cheriton. 1985. [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/858336.858338 Preliminary thoughts on problem-oriented shared memory: a decentralized approach to distributed systems.] SIGOPS Oper. Syst. Rev. 19, 4 (October 1985), 26-33.&lt;br /&gt;
*Matthew Chapman and Gernot Heiser. 2009. [http://www.usenix.org/event/usenix09/tech/full_papers/chapman/chapman_html/index.html vNUMA: a virtual shared-memory multiprocessor.] In Proceedings of the 2009 conference on USENIX Annual technical conference (USENIX'09). USENIX Association, Berkeley, CA, USA, 2-2.&lt;br /&gt;
&lt;br /&gt;
*Protic, Jelica, Milo Tomagevic, and Veljk Milutinovic. [http://www.cs.rit.edu/~pns6910/docs/Distributed%20Shared%20Memory%20Systems/A%20survey%20of%20distributed%20shared%20memory%20systems.pdf &amp;quot;A Survey of Distributed Shared Memory Systems.&amp;quot;] 28th Annual Hawaii International Conference on System Sciences. IEEE. Hawaii, 1995. Reading.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
The memory hierarchy described for the CSVS system places remote memories:&lt;br /&gt;
# Between main memory and local disk storage&lt;br /&gt;
# Same hierarchy as local disk storage&lt;br /&gt;
# Below local disk storage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When messages are sent by the OS to retrieve non-local data the virtual address of the retrieved data is translated to physical:&lt;br /&gt;
# At the origin of the message, i.e. where the page fault occurs&lt;br /&gt;
# By the DSM system default manager&lt;br /&gt;
# At the location where the desired page resides&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSM nodes&lt;br /&gt;
# partially map variable amounts of their memory to the distributed address space&lt;br /&gt;
# are configured to supply a contiguous and fixed amount of memory to the distributed address space&lt;br /&gt;
# utilize I/O to access the entirely non-local distributed address space&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The SAS programming model:&lt;br /&gt;
# Has evolved beyond MP as it is difficult to program in scalable DSM environments&lt;br /&gt;
# Utilize MP to communicate but rely on the ease of a common address space&lt;br /&gt;
# Has suffered too many security problems, scalable MP now dominates the landscape&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Page management in MOME:&lt;br /&gt;
# Requires consistent address space mapping across all nodes&lt;br /&gt;
# Is managed from a global DSM perspective&lt;br /&gt;
# Allows an F and V page descriptor to occur for the same page on the same node&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The most adopted DSM algorithm is:&lt;br /&gt;
# Single Reader/ Single Writer (SRSW)&lt;br /&gt;
# Multiple Readers/ Single Writer (MRSW)&lt;br /&gt;
# Multiple Readers/Multiple Writers (MRMW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Sequential Consistency:&lt;br /&gt;
# all processors see the same ordering of memory references, and these are issued in sequences by the individual processors&lt;br /&gt;
# the order of writes is observed by every individual processor in the system, but the order of reads does not need to be in sequence&lt;br /&gt;
# consistency is required only on synchronization accesses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SPLASH is a&lt;br /&gt;
# coherence protocol&lt;br /&gt;
# collection of parallel programs engineered for the evaluation of shared address space machines&lt;br /&gt;
# DSM implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The complexity of development is &lt;br /&gt;
# the same for MP and SAS&lt;br /&gt;
# lower for SAS&lt;br /&gt;
# lower for MP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vNUMA is a&lt;br /&gt;
# Fast Fourier Transform implementation&lt;br /&gt;
# network implementation&lt;br /&gt;
# virtual machine that presents a cluster as a virtual shared-memory multiprocessor&lt;/div&gt;</summary>
		<author><name>Mchen4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2013/2a_lm&amp;diff=73040</id>
		<title>CSC/ECE 506 Spring 2013/2a lm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2013/2a_lm&amp;diff=73040"/>
		<updated>2013-02-15T20:36:16Z</updated>

		<summary type="html">&lt;p&gt;Mchen4: Updated background section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Dsm.jpg|300px|thumb|left|SCD's IBM SP system blackforest, a distributed shared memory ('''DSM''') system]]&lt;br /&gt;
&lt;br /&gt;
== SAS programming on distributed-memory machines ==&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/1898MW7jXRhuz40HXXiTsobSUDdUVBZ-aUjEyLdeQdNc/edit#, Topic Writeup]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_506_Spring_2012/2a_bm Original Page]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Shared_memory '''Shared Address Space'''] (SAS) programming on distributed memory machines is a programming abstraction that provides less development effort than that of the traditional method of [http://en.wikipedia.org/wiki/Message_passing '''Message Passing'''] (MP) on distributed memory machines, such as clusters of servers.  Distributed systems are groups of computers that communicate through a network and share a common work goal.  Distributed systems typically do not physically share the same memory (are not [http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29 '''tightly coupled''']) but rather each processor or group of processors must depend on mechanisms other than direct memory access the shared memory, this arrangement is called Distributed Shared Memory and is discussed below.  Relevant issues that come to bear include [http://en.wikipedia.org/wiki/Memory_coherence '''memory coherence'''], types of memory access, data and process [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 '''synchronization'''], and performance.&lt;br /&gt;
&lt;br /&gt;
=== Background ===&lt;br /&gt;
Distributed memory systems are multi-processor systems in which each processor has its own individual memory. Tasks can only operate on a processor's local memory and if non-local data is required, the processor must communicate with one or more remote processors. Distributed memory systems started to flourish in the 1980s. The increasing performance in processors and network connectivity offered the perfect environment for parallel processing over a network of computers. This was a cheap way to put together massive computing power. The main drawback was going from sequential programs made for local memory to parallel programming in shared memory. This was where SAS provided the means to simplify programming by hiding the mechanisms to access distant memory located in other computers of the cluster.&lt;br /&gt;
&lt;br /&gt;
In 1985, Cheriton, in his article [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/858336.858338 &amp;quot;Preliminary thoughts on problem-oriented shared memory: a decentralized approach to distributed systems&amp;quot;], introduced ideas for the application of shared memory techniques in distributed memory systems. Cheriton envisioned a system of nodes with a pool of shared memory using a common file namespace that could &amp;quot;decentralize the implementation of a service.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Early distributed computer systems relied almost exclusively on message passing in order to communicate with one another, and this technique is still widely used today.  In a message passing (MP) model, each processor's local memory can be considered as isolated from that of the rest of the system.  Processes or objects can send or receive messages in order to communicate, and this can occur in a synchronous or asynchronous manner.  In distributed systems, and particularly with certain types of programs, the message passing model can become overly burdensome to the programmer as tracking data movement and maintaining data integrity can become challenging with many control threads.  A shared address or shared-memory system, however, can provide a programming model that simplifies data sharing via uniform mechanisms of data structure reads and writes on common memory.  Current distributed systems seek to take advantage both SAS and MP programming model principles in hybrid systems.&lt;br /&gt;
&lt;br /&gt;
=== Distributed Shared Memory (DSM) ===&lt;br /&gt;
[[File:Dsmd.jpg|400px|thumb|right|Distributed Shared Memory]]&lt;br /&gt;
Most commonly, a distributed system utilizing SAS will consist of a set of nodes connected by a network.  Nodes may be comprised of individual processors or a multiprocessor system (e.g. [http://en.wikipedia.org/wiki/Symmetric_multiprocessing '''Symmetric Multiprocessor'''] (SMP)), the latter typically sharing a system bus.  Each node itself contains a local memory, which maps partially to the distributed address space.  Relevant design elements of early SAS implementations included scalability, coherence, structure and granularity.  Most early examples did not structure memory, that is the layout of shared memory was simply a linear array of words.  Some, however, structured data as objects or language types.  '''IVY''' , an early example of a DSM system, implemented shared memory as virtual memory.  The granularity, or unit share size, for IVY was in 1-Kbyte pages and the memory was unstructured.  A problem when considering optimal page size is the balance between a process likely needing quick access to a large range of the shared address space, which argues for a larger page size, countered by the greater contention for individual pages that the larger page may cause amongst processes and the [http://en.wikipedia.org/wiki/False_sharing '''false sharing'''] it may lead to.  [http://en.wikipedia.org/wiki/Memory_coherence Memory coherence] is another important design element consideration, and semantics can be instituted that run gradations of strict to weak consistencies.  The strictest consistency guarantees that a read returns the most recently written value.  Weaker consistencies may use synchronization operations to guarantee sequential consistency.&lt;br /&gt;
&lt;br /&gt;
==== Cache-Coherent DSM ====&lt;br /&gt;
&lt;br /&gt;
Early DSM systems implemented a shared address space where the amount of time required to access a piece of data was &lt;br /&gt;
related to its location.  These systems became known as [http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access '''Non-Uniform Memory Access'''] (NUMA), whereas an SMP type&lt;br /&gt;
system is known as [http://en.wikipedia.org/wiki/Uniform_Memory_Access '''Uniform Memory Access'''] (UMA) architecture.  NUMA architectures were difficult to program due &lt;br /&gt;
to potentially significant differences in data access times. SMP architectures dealt with this problem through caching. &lt;br /&gt;
Protocols were established that ensured prior to writing a location, all other copies of the location (in other caches)&lt;br /&gt;
were invalidated.  These protocols do not scale to DSM machines and different approaches are necessary.&lt;br /&gt;
&lt;br /&gt;
Cache-coherent DSM architectures rely on a directory-based [http://en.wikipedia.org/wiki/Cache_coherency '''cache coherence'''] protocol where an extra directory structure keeps track of all blocks that have been cached by each processor.  A coherence protocol can then establish a consistent view of &lt;br /&gt;
memory by maintaining state and other information about each cached block.  These states usually minimally include Invalid,&lt;br /&gt;
Shared, and Exclusive.  Furthermore, in a cache-coherent DSM machine, the directory is distributed in memory to associate&lt;br /&gt;
with the cache block it describes in the physical local memory.&lt;br /&gt;
&lt;br /&gt;
==== User-level DSM ====&lt;br /&gt;
[[File:Untitled_Project.jpg|350px|thumb|left|Memory Mapping in Mome]]&lt;br /&gt;
&lt;br /&gt;
Another form of SAS is a User-level DSM system. In this arrangement, shared memory does not exist until defined by the programmer. Through explicit commands, segments of a processor's private memory become mapped and available as shared memory. &lt;br /&gt;
&lt;br /&gt;
An in depth example of a user-level DSM system is [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=1199404 Mome]. Mome, in 2003, was a run-time model that mapped Mome segments onto node private address space.    &lt;br /&gt;
&lt;br /&gt;
===== Mome Segment creation =====&lt;br /&gt;
&lt;br /&gt;
Segment creation was initiated through a ''MomeCreateSegment(size)'' call which returned an identifier for mapping used by all nodes.  Any process can request for a mapping of a section of its local memomy to a Mome segment section by calling ''MomeMap(Addr, Lg, Prot, Flags, Seg, Offset)'', which returns the starting address of the mapped region.  Each mapping request made by a process is independent and the addresses of the mappings may or may not be consistent on all nodes.  If mappings are consistent between processes, however, then pointers may be shared by them.  Mome supports strong and weak consistency models, and for any particular page each node is able to dynamically manage its consistency during program execution.&lt;br /&gt;
&lt;br /&gt;
===== Page Management in Mome =====&lt;br /&gt;
&lt;br /&gt;
Mome manages [http://en.wikipedia.org/wiki/Page_%28computer_memory%29 '''pages'''] in a directory based scheme where each page directory maintains the status of six characteristics per page on each node.  The page manager acts upon collections of nodes according to these characteristics for each page:  &lt;br /&gt;
V nodes posses the current version, M nodes have a modified version, S nodes want strong consistency, I nodes are &lt;br /&gt;
invalidated, F nodes have initiated a modification merge and H nodes are a special type of hidden page.  A new version of &lt;br /&gt;
a page is created prior to a constraint violation and before modifications are integrated as a result of a consistency&lt;br /&gt;
request.  &lt;br /&gt;
&lt;br /&gt;
===== Memory mapping in Mome =====&lt;br /&gt;
&lt;br /&gt;
The Mome memory mapping figure to the left shows a possible DSM memory organization on a single node.  The DSM memory size&lt;br /&gt;
shown is 22 pages.  When a new segment is created on a node a segment descriptor is created on that node.  In this case the&lt;br /&gt;
segment descriptor is 12 pages, with each segment descriptor block corresponding to one page.  Each block also contains&lt;br /&gt;
three DSM memory references for current, modified and next version of pages.  The memory organization state shows an &lt;br /&gt;
application with two mappings, M1 and M2, with segment offsets at 0 and 8.  The six pages of M1 are managed by segment &lt;br /&gt;
descriptor blocks 0 to 5.  The descriptor blocks (and application memory) show that pages 1,2 and 5 have no associated &lt;br /&gt;
memory, while M1 page 0 is mapped to block 6 as a current version and M1 page 3 is mapped to block 13 as a current version,&lt;br /&gt;
block 8 as a modified version, and has initiated a modifications merge as indicated by the block 17 pointer.  The communication&lt;br /&gt;
layer manages incoming messages from other nodes. &lt;br /&gt;
&lt;br /&gt;
[[File:Mem hierarchy.png|200px|thumb|right|Memory hierarchy of node]]&lt;br /&gt;
&lt;br /&gt;
==== Configurable Shared Virtual Space ====&lt;br /&gt;
As described by [http://www.cs.utexas.edu/ftp/techreports/tr94-21.pdf Yoon, et al.] in 1994 the communication paradigm &lt;br /&gt;
for their DSM node network relies on a memory hierarchy for each node that places remote memories at the same hierarchy as &lt;br /&gt;
its own local disk storage.  [http://en.wikipedia.org/wiki/Page_fault '''Page faults'''] within a given node that can be resolved within disk storage are handled &lt;br /&gt;
normally while those that cannot are resolved between node main memory and memory of other nodes. Point to point &lt;br /&gt;
communication at the node level is supported through message passing, and the specific mechanism for communication is&lt;br /&gt;
agreed to by all nodes. &lt;br /&gt;
&lt;br /&gt;
Yoon describes a DSM system that generates a shared virtual memory on a per job basis.  A '''configurable shared virtual address space'''&lt;br /&gt;
(CSVS) is readied for when a member node receives a job, generates a job identification number and creates&lt;br /&gt;
an information table in its memory:&lt;br /&gt;
&lt;br /&gt;
                                     ''JOB_INFORMATION {''&lt;br /&gt;
                                         ''status;''&lt;br /&gt;
                                         ''number_of_tasks;''&lt;br /&gt;
                                         ''number_of_completed_tasks;''&lt;br /&gt;
                                         ''*member_list;''                    /*pointer to first member*/&lt;br /&gt;
                                         ''number_of_members;''&lt;br /&gt;
                                         ''IO_server;''&lt;br /&gt;
                                     ''}''&lt;br /&gt;
&lt;br /&gt;
The ''status'' refers to the creation of the CSVS and ''number_of_members'' and ''member_list'' are established through&lt;br /&gt;
a task distribution process during address space assignment.  All tasks associated with the program are tagged with&lt;br /&gt;
the ''job_id'' and ''requester_id'' and, following address space assignment, are distributed across the system.  The&lt;br /&gt;
actual CSVS creation occurs when the first task of a job is initiated by a member, who requests the generation of the new&lt;br /&gt;
CSVS to all other members.  Subspace assignment for the SAS model ensues under the specific ''job_id''.&lt;br /&gt;
&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Operating_system '''operating system'''] (OS) or [http://en.wikipedia.org/wiki/Memory_management_unit '''memory management unit'''] (MMU) of each member maintains a copy of the ''JOB_INFORMATION'' &lt;br /&gt;
table which is consulted to identify the default manager when a page fault occurs.  When a page fault does occur, the MMU&lt;br /&gt;
locates the default manager and handles the fault normally.  If the page requested is out of its subspace then the &lt;br /&gt;
virtual address, ''job_id'', and default manager identification are sent to the [http://en.wikipedia.org/wiki/Control_unit '''control unit'''] (CU) to construct a &lt;br /&gt;
message requesting a page copy.  All messages sent through the CSVS must include a virtual address and the ''job_id'',&lt;br /&gt;
which acts as protection to control access to relevant memory locations.  When received at the appropriate member&lt;br /&gt;
node, the virtual address is translated to a local physical address.&lt;br /&gt;
[[File:Jacobi_code.jpg|300px|thumb|left|Jacobi method pseudocode using TreadMarks API]]&lt;br /&gt;
&lt;br /&gt;
=====Improvements in communication=====&lt;br /&gt;
Early SAS programming models in DSM environments suffered from poor performance because protection schemes demanded&lt;br /&gt;
applications to access the network via system calls, significantly increasing latency.  Later software&lt;br /&gt;
systems and network interfaces arose that were able to ensure safety without incurring the time cost of the system calls.  Addressing this and other &lt;br /&gt;
latency sources on both ends of communication were an important goal for projects such as the '''Virtual Memory-Mapped Communication''' (VMMC) model that was developed as part of the [http://shrimp.cs.princeton.edu/index.html Shrimp Project]. &lt;br /&gt;
&lt;br /&gt;
Protection is achieved in VMMC because the receiver must grant permission before the sender is allowed to transfer data&lt;br /&gt;
to a receiver defined area of its address space.  In this communication scheme, the receiver process exports areas of its&lt;br /&gt;
address space that will act as receive buffers and sending processes must import the destinations.  There is no explicit &lt;br /&gt;
receive operation in VMMC.  Receivers are able&lt;br /&gt;
to define which senders can import specific buffers and VMMC ensures only receiver buffer space is overwritten.  Imported&lt;br /&gt;
receive buffers are mapped to a destination proxy space which can be implemented as part of the sender's virtual address&lt;br /&gt;
space and can be translated by VMMC to a receiver, process and memory address.  VMMC supports a deliberate update&lt;br /&gt;
request and will update data sent previously to an imported receive buffer.  This transfer occurs directly without receiver&lt;br /&gt;
CPU interruption.&lt;br /&gt;
&lt;br /&gt;
[[File:Shortest_path_pseudocode.jpg|300px|thumb|right|Shortest path pseudocode using TreadMarks API]]&lt;br /&gt;
&lt;br /&gt;
=== Programming Environment ===&lt;br /&gt;
The globally shared memory abstraction provided through virtual memory or some other DSM mechanism allows programmers &lt;br /&gt;
to focus on algorithms instead of processor communication and data tracking.  Many programming environments have been&lt;br /&gt;
developed for DSM systems including Rice University's [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=485843&amp;amp;tag=1 TreadMarks]&lt;br /&gt;
in the 1990s.  TreadMarks was a user-level library that ran on top of Unix.  Programs were written in&lt;br /&gt;
C, C++ or Fortran and then compiled and linked with the TreadMarks library.  &lt;br /&gt;
&lt;br /&gt;
Shown at left is a pseudocode example of using the TreadMarks API to implement the Jacobi method, a type of partial &lt;br /&gt;
differential equation solver.  The code iterates over a 2D array and updates each element to the average of its four&lt;br /&gt;
nearest neighbors.  All processors are assigned an approximately equivalent number of rows and neighboring processes &lt;br /&gt;
share boundary rows as is necessary for the calculation.  This example shows TreadMarks use of [http://en.wikipedia.org/wiki/Barrier_%28computer_science%29 '''barriers'''], a technique used for process [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 '''synchronization'''].  Barriers prevent race&lt;br /&gt;
conditions.  ''void Tmk_startup(int argc, char **argv'') initializes TreadMarks and starts the remote processes.  &lt;br /&gt;
The ''void Tmk_barrier(unsigned id)'' call blocks the calling process until every other process arrives at the barrier.  In this&lt;br /&gt;
example, ''Tmk_barrier(0)'' guarantees that process 0 completes initialization before any process proceeds, ''Tmk_barrier(1)'' &lt;br /&gt;
guarantees all previous iteration values are read before any current iteration values are written, and ''Tmk_barrier(2)''&lt;br /&gt;
guarantees all current iteration values are written before any next iteration computation begins.&lt;br /&gt;
&lt;br /&gt;
To the right is shown a short pseudocode program exemplifying another SAS synchronization technique which uses [http://en.wikipedia.org/wiki/Lock_%28computer_science%29 '''locks'''].  This program calculates the shortest path in a grouping of nodes that starts at any designated start node, visits each&lt;br /&gt;
other node once and returns to the origin node.  The shortest route identified thus far is stored in the shared ''Shortest_length''&lt;br /&gt;
and investigated routes are kept in a queue, most promising at the front, and expanded one node at a time.  A process&lt;br /&gt;
compares its resulting shortest partial path with ''Shortest_length'', updating if necessary and returns to the queue&lt;br /&gt;
to continue its search.  Process 0 allocates the shared queue and minimum length.  Exclusive access must be established&lt;br /&gt;
and maintained to ensure correctness and this is achieved through a lock on the queue and ''Shortest_length''.  Each&lt;br /&gt;
process acquires the queue lock to identify a promising partial path and releases it upon finding one.  When &lt;br /&gt;
increasing the ''Shortest_path'' a lock is acquired to ensure [http://en.wikipedia.org/wiki/Mutual_exclusion '''mutual exclusion'''] to update this shared data as well.&lt;br /&gt;
&lt;br /&gt;
=== Notable DSM Implementations ===&lt;br /&gt;
From an architectural point of view, DSMs are composed of several nodes connected via a network. Each of the nodes can be an individual machine or a cluster of machines. Each system has local memory modules that are either partially or completely part of the shared memory. There are many characteristics that can be used to classify DSM implementations. One of them is based on the nature of the memory demarcation: Software, Hardware, and Hybrid. This historical classification has been extracted from [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=494605&amp;amp;isnumber=10721 Distributed shared memory: concepts and systems].&lt;br /&gt;
&lt;br /&gt;
Software DSM implementations refer to the DSM implemented by using user-level software, OS, programming language, or combination of these. &lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Implementation'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Type of Implementation / Cluster configuration'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Network'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Type of Algorithm'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Consistency Model'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Granularity Unit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Coherence Policy'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''SW/HW/Hybrid'''&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cs.uwaterloo.ca/~brecht/courses/702/Possible-Readings/vm-and-gc/ivy-shared-virtual-memory-li-icpp-1988.pdf IVY]||User-level library + OS modification || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRSW ||Sequential ||1 Kbyte ||Invalidate ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/121133.121159 Munin]||Runtime system + linker + library + preprocessor + OS modifications ||style=&amp;quot;padding-left: 2em&amp;quot; | - ||Type-specific (SRSW, MRSW, MRMW) ||Release ||Variable size objects ||Type-specific (delayed update, invalidate) ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=485843&amp;amp;tag=1 TreadMarks]||User-level || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRMW ||Lazy release ||4 Kbytes ||Update, Invalidate ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/74851.74871 Mirage]||OS kernel ||style=&amp;quot;padding-left: 2em&amp;quot; | - ||MRSW ||Sequential ||512 bytes ||Invalidate ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://onlinelibrary.wiley.com.prox.lib.ncsu.edu/doi/10.1002/spe.4380210503/pdf Clouds]||OS, out of kernel || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRSW ||Inconsistent, sequential ||8 Kbytes ||Discard segment when unlocked ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1663305&amp;amp;tag=1 Linda]||Language || style=&amp;quot;padding-left: 2em&amp;quot; |- ||MRSW ||Sequential ||Variable (tuple size) ||Implementation- dependent ||SW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=93183 Memnet]||Single processor, Memnet device||Token ring||MRSW||Sequential||32 bytes||Invalidate||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Scalable_Coherent_Interface SCI]||Arbitrary||Arbitrary||MRSW||Sequential||16 bytes||Invalidate||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.8026&amp;amp;rep=rep1&amp;amp;type=pdf KSR1]||64-bit custom PE, I+D caches, 32M local memory||Ring-based||MRSW||Sequential||128 bytes||Invalidate||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=766965&amp;amp;isnumber=16621 RMS]||1-4 processors, caches, 256M local memory||RM bus||MRMW||Processor||4 bytes||Update||HW&lt;br /&gt;
|-&lt;br /&gt;
| [http://en.wikipedia.org/wiki/Alewife_(multiprocessor) Alewife]||Sparcle PE, 64K cache, 4M local memory, CMMU|| mesh||MRSW||Sequential||16 Kbytes||Invalidate||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
| [http://dl.acm.org/citation.cfm?id=192056 Flash]||MIPS T5, I +D  caches, Magic controller|| mesh||MRSW||Release||128 Kbytes||Invalidate||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cs.utexas.edu/users/dburger/teaching/cs395t-s08/papers/10_tempest.pdf Typhoon]||SuperSparc, 2-L caches|| NP controller||MRSW||Custom||32 Kbytes||Invalidate custom||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
| [http://shrimp.cs.princeton.edu/ Shrimp]||16 Pentium PC nodes|| Intel Paragon routing network||MRMW||AURC, scope||4 Kbytes||Update/Invalidate||Hybrid&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Below is an explanation of the main characteristics listed in the DSM classification.&lt;br /&gt;
 &lt;br /&gt;
There are three types of DSM algorithm: &lt;br /&gt;
* '''Single Reader/ Single Writer''' (SRSW) &lt;br /&gt;
** central server algorithm - produces long network delays &lt;br /&gt;
** migration algorithm - produces thrashing and false sharing&lt;br /&gt;
* '''Multiple Readers/ Single Writer''' (MRSW) - read replication algorithm. It uses write invalidate. MRSW is the most adopted algorithm.&lt;br /&gt;
* '''Multiple Readers/Multiple Writers''' (MRMW) - full replication algorithm.  It has full concurrency and uses atomic updates.&lt;br /&gt;
&lt;br /&gt;
The consistency model plays a fundamental role in DSM systems. Due to the nature of the distributed systems, memory accesses are constrained in the different consistency models. &amp;quot;A memory consistency model defines the legal ordering of memory references issued by some processor, as observed by other processors.&amp;quot; The stricter the consistency model, the higher the access times, but programming is more simplified. Some of the consistency models types are:&lt;br /&gt;
* Sequential consistency - all processors see the same ordering of memory references, and these are issued in sequences by the individual processors.&lt;br /&gt;
* Processor consistency - the order of writes is observed by every individual processor in the system, but the order of reads does not need to be in sequence. &lt;br /&gt;
* Weak consistency - consistency is required only on synchronization accesses.&lt;br /&gt;
* Release consistency - divides the synchronization accesses into acquire and release. Normal read and writes for a particular node can be done only after all acquires for that node are finished. Similarly, releases can only be done after all writes and reads are finished. &lt;br /&gt;
* Lazy Release consistency - extends the Release consistency, by propagating modifications to the shared data only on the acquire, and of those, only the ones related to critical sections.&lt;br /&gt;
* Entry consistency - synchronization is performed at variable level. This increases programming labor but helps with lowering latency and traffic exchanges as only the specific variable needs to be synchronized.&lt;br /&gt;
&lt;br /&gt;
Granularity refers to the unit of data blocks that are managed by the coherence protocols. The unit differs between hardware and software systems, as hardware systems tend to use smaller size blocks than the virtual layer that manages the data in the software systems. The problem with larger size blocks is that the probability for contingency is higher, even when the different processors involved are not accessing the exact same piece of memory, just a part contained in the block size. This is known as false sharing and creates thrashing (memory blocks keep being requested by processors and processors keep waiting for the same memory blocks).&lt;br /&gt;
&lt;br /&gt;
Coherence policy regulates data replication. The coherence policy dictates if the data that is being written at a site should be invalidated or updated at the remote sites. Usually, systems with fine-grain coherence (byte/word) impose the update policy, whereas the systems based on coarse-grain (page) coherence utilize the invalidate policy. This is also known in other parts of the literature as coherence protocol. And the two types of protocols are known as write-invalidate and write-update. The write-invalidate protocol invalidates all the copies except one before writing to it. In contrast, write-update maintains all copies updated.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
There are numerous studies of the performance of shared memory applications in distributed systems. The vast majority of them use a collection of programs named [http://dl.acm.org/citation.cfm?id=223990 SPLASH and SPLASH-2.]&lt;br /&gt;
===== SPLASH and SPLASH-2 =====&lt;br /&gt;
The '''Stanford ParalleL Applications for SHared memory''' (SPLASH) is a collection of parallel programs engineered for the evaluation of shared address space machines. These programs have been used by research studies to provide measurements and analysis of different aspects of the emerging DSM architectures at the time. A subsequent suite of programs (SPLASH-2) evolved from the necessity of improving on the SPLASH programs limitations. SPLASH-2 covers a more ample domain of scientific programs, makes use of improved algorithms, and pays more attention to the architecture of the underlying systems.&lt;br /&gt;
&lt;br /&gt;
Selected applications in the SPLASH-2 collections include:&lt;br /&gt;
*FFT: a '''Fast Fourier Transform''' implementation, in which the data is organized in source and destination matrices so that processors have stored in their local memory a contiguous set of rows. In this application all processors involved communicate among them, sending data to each other, to evaluate a matrix transposition.&lt;br /&gt;
*Ocean: calculations of large scale ocean movements simulating eddy currents. For the purpose of calculations, it shows nearest-neighbors accessing patterns in multi-grid formation as opposed to using a single grid.&lt;br /&gt;
*LU: matrix decomposition in the product of an upper triangular and lower triangular matrices. LU exhibits a &amp;quot;one-to-many non-personalized communication&amp;quot;.&lt;br /&gt;
*Barnes: simulates the interaction of a group of particles over time steps. &lt;br /&gt;
*Radix sort: integer sorting algorithm. This algorithm implementation displays an example of communication among all the processors involved, and the nature of this communication presents irregular patterns.&lt;br /&gt;
&lt;br /&gt;
===== Case Study - 2001 - Shan et al. =====&lt;br /&gt;
In 2001, [http://escholarship.org/uc/item/76p9b40g#page-1 Shan et al.] presented a comparison of the performance and programming effort of MP versus SAS running on clusters of '''Symmetric Memory Processors''' (SMPs). They highlighted the &amp;quot;automatic management and coherent replication&amp;quot; of the SAS programming model which facilitates the programming tasks in these types of clusters. This study uses MPI/Pro protocol for the MP programming model and GeNIMA SVM protocol (a page-based shared virtual memory protocol) for SAS on a 32 processors system (using a cluster of 8 machines with 4-way SMPs each). The subset of applications used involves regularly structured applications as FFT, Ocean, and LU contrasting with irregular ones as for example RADIX sort, among others.&lt;br /&gt;
&lt;br /&gt;
The complexity of development is represented by the number of code lines per application as shown in the table below this lines. It is observed that SAS complexity is significantly lower than that of MP and this difference increases as applications are more irregular and dynamic in nature (almost doubles for Radix).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Appl.&lt;br /&gt;
!FFT &lt;br /&gt;
!OCEAN &lt;br /&gt;
!LU &lt;br /&gt;
!RADIX &lt;br /&gt;
!SAMPLE &lt;br /&gt;
!N-BODY&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| MPI ||222||4320||470||384||479||1371&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| SAS ||210 ||2878 ||309||201||450||950&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The results performance-wise indicated that SAS was only half efficiently dealing with parallelism for most of the applications in this study. The only application that showed similar performance for both methods (MP and SAS) was the LU application. The authors concluded that the overhead of the SVM protocol for maintaining page coherence and synchronization were the handicap of the easier SAS programming model.&lt;br /&gt;
&lt;br /&gt;
===== Case Study - 2004 - Iosevich and Schuster =====&lt;br /&gt;
&lt;br /&gt;
In 2004, [http://dl.acm.org/citation.cfm?id=1006252 Iosevich and Schuster] performed a study on two memory consistency models in a DSM, the '''sequential consistency''' (SC) model and a relaxed consistency model called '''home-based lazy release consistency''' (HLRC) protocol. The SC provides a less complex programming model, whereas the HLRC improves on running performance as it allows parallel memory access. Memory consistency models provide a specific set of rules for interfacing with memory.&lt;br /&gt;
&lt;br /&gt;
The authors used a [http://www.cs.uga.edu/~dkl/6730/Fall02/Readings/millipage.pdf multiview] (MV) technique to ensure an efficient implementation of SC with fine-grain access to memory. The main advantage of this technique is that by mapping one physical region to several virtual regions, the system avoids fetching the whole content of the physical memory when there is a fault accessing a specific variable located in one of the virtual regions. One step further is the mechanism proposed by [http://onlinelibrary.wiley.com/doi/10.1002/spe.417/abstract Niv and Shuster] to dynamically change the granularity during runtime.&lt;br /&gt;
For this SC (with MV), only all page replicas need to be tracked, whereas for HLRC the tracking needed is much more complex. The advantage of HLRC is that write faults on read only pages are local, resulting in a lower cost for these operations.&lt;br /&gt;
&lt;br /&gt;
This table summarizes the characteristics of the benchmark applications used for the measurements. In the Synch column, B represents barriers and  L locks.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Application&lt;br /&gt;
! Input data set&lt;br /&gt;
! Shared memory&lt;br /&gt;
!Sharing granularity&lt;br /&gt;
! Synch&lt;br /&gt;
!Allocation pattern&lt;br /&gt;
|-&lt;br /&gt;
| Water-nsq|| 8000 molecules|| 5.35MB|| a molecule (672B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| Water-sp|| 8000 molecules|| 10.15MB|| a molecule (680B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| LU|| 3072 × 3072|| 72.10MB|| block (coarse)|| B|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| FFT|| 2^20 numbers|| 48.25MB|| a row segment|| B|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| TSP|| A graph of 32 cities|| 27.86MB|| a tour (276B)|| L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| SOR|| 2066 × 10240|| 80.73MB|| a row (coarse)|| B|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| Barnes-sp|| 32768 bodies|| 41.21MB|| body fields (4-32B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| Radix|| 10240000 keys|| 82.73MB|| an integer (4B)|| B, L|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| Volrend|| a file -head.den-|| 29.34MB|| a 4 × 4 box (4B)|| B, L|| fine&lt;br /&gt;
|-&lt;br /&gt;
| Ocean|| a 514 × 514 grid|| 94.75MB|| grid point (8B)|| B, L|| coarse&lt;br /&gt;
|-&lt;br /&gt;
| NBody|| 32768 bodies|| 2.00MB|| a body (64B)|| B|| fine&lt;br /&gt;
|-&lt;br /&gt;
| NBodyW|| 32768 bodies|| 2.00MB|| a body (64B)|| B|| fine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The authors found that the average speedup of the HLRC protocol is 5.97, and the average speedup of the SC (with MV) protocol is 4.5 if non-optimized allocation is used, and 6.2 if the granularity is changed dynamically.&lt;br /&gt;
&lt;br /&gt;
===== Case Study - 2008 - Roy and Chaudhary =====&lt;br /&gt;
&lt;br /&gt;
In 2008, [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.1319 Roy and Chaudhary] compared the communication requirements of three different page-based DSM systems ([http://www.cs.umd.edu/projects/cvm/ CVM], [http://www.cs.utah.edu/flux/quarks.html Quarks], and [http://ieeexplore.ieee.org/iel4/5737/15339/00709960.pdf?arnumber=709960 Strings]) that use virtual memory mechanisms to trap accesses to shared areas. Their study was also based on the SPLASH-2 suite of programs.&lt;br /&gt;
In their experiments, Quarks was running tasks on separate processes (it does not support more than one application thread per process) while CVM and Strings were run with multiple application threads.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Program &lt;br /&gt;
!CVM &lt;br /&gt;
!Quarks &lt;br /&gt;
!Strings&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| FFT||1290||2419||1894&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| LU-c||135||-||485&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| LU-n||385||2873||407&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| OCEAN-c||1955||15475||6676&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| WATER-n2||2253||38438||10032&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| WATER-sp||905||7568||1998&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| MATMULT||290||1307||645&lt;br /&gt;
|- style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
| SOR||247||7236||934&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The results indicate that Quarks generates a large quantity of messages in comparison with the other two systems. This can be observed in the table above. LU-c (contiguous version of LU) does not have a result for Quarks, as it was not possible to obtain results for the number of tasks (16) used in the experiment. This was due to the excessive number of collisions. In general, due to the lock related traffic, the performance of Quarks is quite low when compared to the other two systems for many of the application programs tested.&lt;br /&gt;
CVM improves on the lock management by allowing out of order access through a centralized lock manager. This makes the locking times for CVM much smaller than for others. &lt;br /&gt;
Nevertheless, the best performer is Strings. It wins in overall performance over the two other system compared, but there is room for improvement here too, as it was observed that the locking times in Strings are an elevated percentage of the overall computation. &lt;br /&gt;
&lt;br /&gt;
The overall conclusion is that using multiple threads per node and optimized locking mechanisms (CVM-type) provides the best performance.&lt;br /&gt;
&lt;br /&gt;
=== Evolution ===&lt;br /&gt;
A more recent version of a distributed shared memory system is vNUMA.   [http://www.usenix.org/event/usenix09/tech/full_papers/chapman/chapman_html/index.html Chapman and Heiser], describe vNUMA (where v is for virtual and NUMA is for [http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access Non Uniform Memory Access]) as &amp;quot;a virtual machine that presents a cluster as a virtual shared-memory multiprocessor.&amp;quot; The virtualization in vNUMA is a layer between the real CPUs that form the distributed shared memory system and the OS that runs on top it, usually Linux. The DSM in vNUMA is part of the hypervisor, which is the part of a virtual system that maps guest virtual addresses into real physical ones. The guest virtual addresses get then mapped into virtual memory addresses through the guest OS. &lt;br /&gt;
&lt;br /&gt;
The difference with other virtual machines is that vNUMA runs one OS on top of several physical machines, whereas virtual machines often run several guest OS on top of one host OS that runs on one machine. And it uses DSM software techniques to present all the virtualized memory as a whole.&lt;br /&gt;
&lt;br /&gt;
The DSM in vNUMA is a single-writer/multiple-reader write-invalidate protocol with sequential coherence. It is based on the IVY DSM, but it introduces several improvements to increase performance. The owner of a page can determine if the page needs to be sent by looking at the copyset (contains information of the set of nodes that maintain a copy of the page), avoiding several page faults and the manager becomes the owner of the copyset as soon as it is part of it. There are a couple other improvements: ''incremental deterministic merging'' and ''write-update-plus (WU+)''. ''Incremental deterministic merging'' uses sequence numbers to ensure that a location gets updated with the latest value and not intermediate, out of order writes. ''Write-update-plus (WU+)'' enforces single-writer for pages where atomic operations are done. vNUMA dynamically changes from multiple-writer to single-writer when atomic operations are detected. &lt;br /&gt;
&lt;br /&gt;
In [http://communities.vmware.com/community/vmtn/cto/high-performance/blog/2011/09/19/vnuma-what-it-is-and-why-it-matters vNUMA what it is and why it matters], VMware presents vNUMA as part of vSphere, a virtualization platform oriented to build cloud computing frameworks.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[http://www.sgi.com/pdfs/4250.pdf Performance and Productivity Breakthroughs with Very Large Coherent Shared Memory: The SGI® UV Architecture] SGI white paper.&lt;br /&gt;
*[http://www.scalemp.com/architecture#2 Versatile SMP (vSMP) Architecture]&lt;br /&gt;
*Adrian Moga, Michel Dubois, [http://www.sciencedirect.com/science/article/pii/S1383762108001136 &amp;quot;A comparative evaluation of hybrid distributed shared-memory systems,&amp;quot;] Journal of Systems Architecture, Volume 55, Issue 1, January 2009, Pages 43-52&lt;br /&gt;
*Jinbing Peng; Xiang Long; Limin Xiao; , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=4708970&amp;amp;isnumber=4708921 &amp;quot;DVMM: A Distributed VMM for Supporting Single System Image on Clusters,&amp;quot;] Young Computer Scientists, 2008. ICYCS 2008. The 9th International Conference for , vol., no., pp.183-188, 18-21 Nov. 2008&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Shan, H.; Singh, J.P.; Oliker, L.; Biswas, R.; , [http://escholarship.org/uc/item/76p9b40g#page-1 &amp;quot;Message passing vs. shared address space on a cluster of SMPs,&amp;quot;] Parallel and Distributed Processing Symposium., Proceedings 15th International , vol., no., pp.8 pp., Apr 2001&lt;br /&gt;
*Protic, J.; Tomasevic, M.; Milutinovic, V.; , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=494605&amp;amp;isnumber=10721 &amp;quot;Distributed shared memory: concepts and systems,&amp;quot;] Parallel &amp;amp; Distributed Technology: Systems &amp;amp; Applications, IEEE , vol.4, no.2, pp.63-71, Summer 1996&lt;br /&gt;
*Chandola, V. , [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.135.5206&amp;amp;rep=rep1&amp;amp;type=pdf &amp;quot;Design Issues in Implementation of Distributed Shared Memory in User Space,&amp;quot;]&lt;br /&gt;
*Nitzberg, B.; Lo, V. , [http://www.cdf.toronto.edu/~csc469h/fall/handouts/nitzberg91.pdf &amp;quot;Distributed Shared Memory:  A Survey of Issues and Algorithms&amp;quot;]&lt;br /&gt;
*Steven Cameron Woo , Moriyoshi Ohara , Evan Torrie , Jaswinder Pal Singh , Anoop Gupta, [http://dl.acm.org/citation.cfm?id=223990 &amp;quot;The SPLASH-2 programs: characterization and methodological considerations,&amp;quot;] Proceedings of the 22nd annual international symposium on Computer architecture, p.24-36, June 22-24, 1995, S. Margherita Ligure, Italy&lt;br /&gt;
*Jegou, Y. , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=1199404 Implementation of page management in Mome, a user-level DSM] Cluster Computing and the Grid, 2003. Proceedings. CCGrid 2003. 3rd IEEE/ACM International Symposium on, p.479-486, 21 May 2003, IRISA/INRIA, France&lt;br /&gt;
*Hennessy, J.; Heinrich, M.; Gupta, A.; , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=747863 &amp;quot;Cache-Coherent Distributed Shared Memory:  Perspectives on Its Development and Future Chanllenges,&amp;quot;] Proceedings of the IEEE, Volume: 87 Issue:3, pp.418 - 429, Mar 1999, Comput. Syst. Lab., Stanford Univ., CA&lt;br /&gt;
*J. Protic, M. Tomasevic, and V. Milutinovic, [http://media.wiley.com/product_data/excerpt/76/08186773/0818677376-2.pdf An Overview of Distributed Shared Memory]&lt;br /&gt;
*Yoon, M.; Malek, M.; , [http://www.cs.utexas.edu/ftp/techreports/tr94-21.pdf &amp;quot;Configurable Shared Virtual Memory for Parallel Computing&amp;quot;] University of Texas Technical Report tr94-21, July 15 1994, Department of Electrical and Computer Engineering, The University of Texas at Austin&lt;br /&gt;
*Dubnicki, C.;   Iftode, L.;   Felten, E.W.;   Kai Li;  , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=508084 &amp;quot;Software Support for Virtual Memory-Mapped Communication&amp;quot;] Parallel Processing Symposium, 1996., Proceedings of IPPS '96, The 10th International, pp.372 - 381, 15-19 Apr 1996, Dept. of Comput. Sci., Princeton Univ., NJ &lt;br /&gt;
*Dubnicki, C.;   Bilas, A.;   Li, K.;   Philbin, J.;  , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=580931 &amp;quot;Design and Implementation of Virtual Memory-Mapped Communication on Myrinet&amp;quot;] Parallel Processing Symposium, 1997. Proceedings., 11th International, pp.388 - 396, 1-5 Apr 1997, Princeton Univ., NJ&lt;br /&gt;
*Kranz, D.; Johnson, K.; Agarwal, A.; Kubiatowicz, J.; Lim, B.; , [http://delivery.acm.org.prox.lib.ncsu.edu/10.1145/160000/155338/p54-kranz.pdf?ip=152.1.24.251&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=81831968&amp;amp;CFTOKEN=62928147&amp;amp;__acm__=1327853249_029db7e958cb50bd47056f939f3296f7 &amp;quot;Integrating Message-Passing and Shared-Memory:  Early Experience&amp;quot;] PPOPP '93 Proceedings of the fourth ACM SIGPLAN symposium on Principles and practice of parallel programming, pp.54 - 63&lt;br /&gt;
*Amza, C.;  Cox, A.L.;  Dwarkadas, S.;  Keleher, P.;  Honghui Lu;  Rajamony, R.;  Weimin Yu;  Zwaenepoel, W.; , [http://ieeexplore.ieee.org.prox.lib.ncsu.edu/stamp/stamp.jsp?tp=&amp;amp;arnumber=485843&amp;amp;tag=1 &amp;quot;TreadMarks: shared memory computing on networks of workstations&amp;quot;] Computer, Volume: 29 Issue:2, pp. 18 - 28, Feb 1996, Dept. of Comput. Sci., Rice Univ., Houston, TX&lt;br /&gt;
*David R. Cheriton. 1985. [http://doi.acm.org.prox.lib.ncsu.edu/10.1145/858336.858338 Preliminary thoughts on problem-oriented shared memory: a decentralized approach to distributed systems.] SIGOPS Oper. Syst. Rev. 19, 4 (October 1985), 26-33.&lt;br /&gt;
*Matthew Chapman and Gernot Heiser. 2009. [http://www.usenix.org/event/usenix09/tech/full_papers/chapman/chapman_html/index.html vNUMA: a virtual shared-memory multiprocessor.] In Proceedings of the 2009 conference on USENIX Annual technical conference (USENIX'09). USENIX Association, Berkeley, CA, USA, 2-2.&lt;br /&gt;
&lt;br /&gt;
== Quiz ==&lt;br /&gt;
The memory hierarchy described for the CSVS system places remote memories:&lt;br /&gt;
# Between main memory and local disk storage&lt;br /&gt;
# Same hierarchy as local disk storage&lt;br /&gt;
# Below local disk storage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When messages are sent by the OS to retrieve non-local data the virtual address of the retrieved data is translated to physical:&lt;br /&gt;
# At the origin of the message, i.e. where the page fault occurs&lt;br /&gt;
# By the DSM system default manager&lt;br /&gt;
# At the location where the desired page resides&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DSM nodes&lt;br /&gt;
# partially map variable amounts of their memory to the distributed address space&lt;br /&gt;
# are configured to supply a contiguous and fixed amount of memory to the distributed address space&lt;br /&gt;
# utilize I/O to access the entirely non-local distributed address space&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The SAS programming model:&lt;br /&gt;
# Has evolved beyond MP as it is difficult to program in scalable DSM environments&lt;br /&gt;
# Utilize MP to communicate but rely on the ease of a common address space&lt;br /&gt;
# Has suffered too many security problems, scalable MP now dominates the landscape&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Page management in MOME:&lt;br /&gt;
# Requires consistent address space mapping across all nodes&lt;br /&gt;
# Is managed from a global DSM perspective&lt;br /&gt;
# Allows an F and V page descriptor to occur for the same page on the same node&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The most adopted DSM algorithm is:&lt;br /&gt;
# Single Reader/ Single Writer (SRSW)&lt;br /&gt;
# Multiple Readers/ Single Writer (MRSW)&lt;br /&gt;
# Multiple Readers/Multiple Writers (MRMW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Sequential Consistency:&lt;br /&gt;
# all processors see the same ordering of memory references, and these are issued in sequences by the individual processors&lt;br /&gt;
# the order of writes is observed by every individual processor in the system, but the order of reads does not need to be in sequence&lt;br /&gt;
# consistency is required only on synchronization accesses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SPLASH is a&lt;br /&gt;
# coherence protocol&lt;br /&gt;
# collection of parallel programs engineered for the evaluation of shared address space machines&lt;br /&gt;
# DSM implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The complexity of development is &lt;br /&gt;
# the same for MP and SAS&lt;br /&gt;
# lower for SAS&lt;br /&gt;
# lower for MP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vNUMA is a&lt;br /&gt;
# Fast Fourier Transform implementation&lt;br /&gt;
# network implementation&lt;br /&gt;
# virtual machine that presents a cluster as a virtual shared-memory multiprocessor&lt;/div&gt;</summary>
		<author><name>Mchen4</name></author>
	</entry>
</feed>