<?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=Jdhartle</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=Jdhartle"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jdhartle"/>
	<updated>2026-09-11T17:08:15Z</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_2012/12b_jh&amp;diff=62459</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62459"/>
		<updated>2012-04-17T06:01:48Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;On-chip Interconnects&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to continue advancing in accordance with Moore's Law, multiprocessors are expected to continue the trend of increasing numbers of processors on a single chip. Current cutting-edge multiprocessors like the Intel Terascale chip have as many as 80 cores, and this is projected to continue to scale until hundreds of cores are implemented on a single piece of silicon. &amp;lt;sup&amp;gt;25&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Current interconnect topologies can not keep up with this dramatic increase in the number of cores, especially those that use only two dimensions (such as rings or 2-D meshes). The number of hops required to move data between cores in a 2-D topology grows linearly as the number of interconnected cores increases - clearly this will not scale well with dozens or hundreds of connections.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Multidrop Express Channels&amp;lt;/h2&amp;gt;&lt;br /&gt;
One potential solution uses express channels between cores that are physically distant, to reduce the total number of hops. In the following 4x4 grid, any two cores can be connected using only two hops (as opposed to a worst case of six hops in a regular 4x4 mesh). This method also scales well: going from 4x4 to 8x8 will double the number of hops required. This is far better than even an optimized 2-D solution like the flattened butterfly, which when going from 4x4 to 8x8 quadruples the number of hops required from 4 to 16.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:mec.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Tile Processor&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Another way to approach the scaling problem is to use several 2-D mesh networks that are each specialized for a different use. For example, Tilera's Tile Processor uses iMesh, an interconnect network that consists of five 2-D mesh networks, each focusing on a different type of communication (to main memory, to I/O devices, communication between cores). Using multiple mesh networks increases the total bandwidth available to the multiprocessor network - iMesh provides 1.28 terabits per second (Tbps) in and out of a single core. &amp;lt;sup&amp;gt;28&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A clear benefit to using multiple on-chip interconnect networks is the potential for specialization. By splitting the interconnection into several networks, the Tile Architecture can optimize each network for a different task. This improves performance when the multiprocessor is being used to run programs with varied requirements.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Tile.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[25] http://www.cs.utexas.edu/~bgrot/docs/CMP-MSI_08.pdf&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[26] http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4341445&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[27] http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1639301&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[28] http://www.eecg.toronto.edu/~enright/tilera.pdf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62458</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62458"/>
		<updated>2012-04-17T05:59:52Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;On-chip Interconnects&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to continue advancing in accordance with Moore's Law, multiprocessors are expected to continue the trend of increasing numbers of processors on a single chip. Current cutting-edge multiprocessors like the Intel Terascale chip have as many as 80 cores, and this is projected to continue to scale until hundreds of cores are implemented on a single piece of silicon. &amp;lt;sup&amp;gt;25&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Current interconnect topologies can not keep up with this dramatic increase in the number of cores, especially those that use only two dimensions (such as rings or 2-D meshes). The number of hops required to move data between cores in a 2-D topology grows linearly as the number of interconnected cores increases - clearly this will not scale well with dozens or hundreds of connections.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Multidrop Express Channels&amp;lt;/h2&amp;gt;&lt;br /&gt;
One potential solution uses express channels between cores that are physically distant, to reduce the total number of hops. In the following 4x4 grid, any two cores can be connected using only two hops (as opposed to a worst case of six hops in a regular 4x4 mesh). This method also scales well: going from 4x4 to 8x8 will double the number of hops required. This is far better than even an optimized 2-D solution like the flattened butterfly, which when going from 4x4 to 8x8 quadruples the number of hops required from 4 to 16.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:mec.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Tile Processor&amp;lt;/h2&amp;gt;&lt;br /&gt;
Another way to approach the scaling problem is to use several 2-D mesh networks that are each specialized for a different use. For example, Tilera's Tile Processor uses iMesh, an interconnect network that consists of five 2-D mesh networks, each focusing on a different type of communication (to main memory, to I/O devices, communication between cores). Using multiple mesh networks increases the total bandwidth available to the multiprocessor network - iMesh provides 1.28 terabits per second (Tbps) in and out of a single core.&amp;lt;sup&amp;gt;28&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A clear benefit to using multiple on-chip interconnect networks is the potential for specialization. By splitting the interconnection into several networks, the Tile Architecture can optimize each network for a different task. This improves performance when the multiprocessor is being used to run programs with varied requirements.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:Tile.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[25] http://www.cs.utexas.edu/~bgrot/docs/CMP-MSI_08.pdf&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[26] http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4341445&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[27] http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1639301&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[28] http://www.eecg.toronto.edu/~enright/tilera.pdf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Tile.png&amp;diff=62457</id>
		<title>File:Tile.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Tile.png&amp;diff=62457"/>
		<updated>2012-04-17T05:59:37Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62456</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62456"/>
		<updated>2012-04-17T05:34:11Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;On-chip Interconnects&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to continue advancing in accordance with Moore's Law, multiprocessors are expected to continue the trend of increasing numbers of processors on a single chip. Current cutting-edge multiprocessors like the Intel Terascale chip have as many as 80 cores, and this is projected to continue to scale until hundreds of cores are implemented on a single piece of silicon. (cite)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Current interconnect topologies can not keep up with this dramatic increase in the number of cores, especially those that use only two dimensions (such as rings or 2-D meshes). The number of hops required to move data between cores in a 2-D topology grows linearly as the number of interconnected cores increases - clearly this will not scale well with dozens or hundreds of connections.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Multidrop Express Channels&amp;lt;/h2&amp;gt;&lt;br /&gt;
One potential solution uses express channels between cores that are physically distant, to reduce the total number of hops. In the following 4x4 grid, any two cores can be connected using only two hops (as opposed to a worst case of six hops in a regular 4x4 mesh). This method also scales well: going from 4x4 to 8x8 will double the number of hops required. This is far better than even an optimized 2-D solution like the flattened butterfly, which when going from 4x4 to 8x8 quadruples the number of hops required from 4 to 16.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:mec.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62455</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62455"/>
		<updated>2012-04-17T05:33:21Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;On-chip Interconnects&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to continue advancing in accordance with Moore's Law, multiprocessors are expected to continue the trend of increasing numbers of processors on a single chip. Current cutting-edge multiprocessors like the Intel Terascale chip have as many as 80 cores, and this is projected to continue to scale until hundreds of cores are implemented on a single piece of silicon. (cite)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Current interconnect topologies can not keep up with this dramatic increase in the number of cores, especially those that use only two dimensions (such as rings or 2-D meshes). The number of hops required to move data between cores in a 2-D topology grows linearly as the number of interconnected cores increases - clearly this will not scale well with dozens or hundreds of connections.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Multidrop Express Channels&amp;lt;/h2&amp;gt;&lt;br /&gt;
One potential solution uses express channels between cores that are physically distant, to reduce the total number of hops. In the following 4x4 grid, any two cores can be connected using only two hops (as opposed to a worst case of six hops in a regular 4x4 mesh). This method also scales well: going from 4x4 to 8x8 will double the number of hops required. This is far better than even an optimized 2-D solution like the flattened butterfly, which when going from 4x4 to 8x8 quadruples the number of hops required from 4 to 16.&lt;br /&gt;
[[File:mec.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Mec.png&amp;diff=62454</id>
		<title>File:Mec.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Mec.png&amp;diff=62454"/>
		<updated>2012-04-17T05:33:13Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62450</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62450"/>
		<updated>2012-04-17T04:55:18Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62448</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62448"/>
		<updated>2012-04-17T04:52:51Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;History of Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62444</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62444"/>
		<updated>2012-04-17T04:45:50Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;h2&amp;gt;Interconnection networks: What? Where? Why?&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;History of Interconnection Networks&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&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; Interconnection Network Topology &amp;lt;/h2&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Types of Network Topologies &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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62443</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=62443"/>
		<updated>2012-04-17T04:45:05Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: &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;h2&amp;gt;Interconnection networks: What? Where? Why?&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;History of Interconnection Networks&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt; Interconnection Network Topology &amp;lt;/h1&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&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;Types of Network Topologies &amp;lt;/h2&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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=61831</id>
		<title>CSC/ECE 506 Spring 2012/12b jh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/12b_jh&amp;diff=61831"/>
		<updated>2012-04-12T04:15:33Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: Created page with &amp;quot;&amp;lt;h1&amp;gt;Interconnection Network Architecture &amp;lt;/h1&amp;gt;  &amp;lt;h2&amp;gt;Interconnection networks: What? Where? Why?&amp;lt;/h2&amp;gt; &amp;lt;br&amp;gt; &amp;lt;p&amp;gt; Interconnection network is a programmable system that transports dat...&amp;quot;&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;h2&amp;gt;Interconnection networks: What? Where? Why?&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Interconnection network is a programmable system that transports data between terminals. All the terminals are connected to the interconnection network. When one terminal wishes to send data to another terminal, terminal one sends a message containing the data into the network and network delivers message to another terminal. The network is programmable because it makes different connections at different points in time. The network is system because it is composed of many components: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Buffers&lt;br /&gt;
&lt;br /&gt;
*Channels &lt;br /&gt;
&lt;br /&gt;
*Switches &lt;br /&gt;
&lt;br /&gt;
*Controls &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These components work together to deliver data. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Interconnection networks are used in most of the digital systems that are large enough to have two components to connect. The most common examples are the computer systems and communication switches. In computer systems, they connect processors to memories and I/O devices to I/O controllers. In 1980s, most of the applications were served by a very simple interconnection networks, example, the multi-drop bus. However, this has changed. All high performance interconnections are performed by point to point interconnection networks rather then buses, and more systems that have historically been bus-based switch to networks every year. This is because of non-uniform performance scaling. The demand for interconnection performance is increasing with processor performance and network bandwidth. Buses are not able to keep up with the bandwidth demand, and point-to-point interconnection networks which both operate faster than buses and offer concurrency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interconnection networks are limiting factors in many systems. The interconnection network between processor and memory largely determines the memory latency and memory bandwidth. The performance of the interconnection network in a communication switch largely determines the capacity of the switch. Because the demand for interconnection has grown more rapidly that the capability of the underlying wires, interconnection has become a critical bottleneck in most systems. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;History of Interconnection Networks&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Networks developed along following main three parallel threads: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Telephone switching networks&lt;br /&gt;
&lt;br /&gt;
*Inter-processor communication&lt;br /&gt;
&lt;br /&gt;
*Processor-memory interconnect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Early telephone networks built form the electro-mechanical crossbars or electro-mechanical step-by-step switches. As late as the 1980s, most local telephone switches were still built from electro-mechanical relays, although toll switches were completely electronic and digital by that time. Key developments in telephone switching was non-blocking, multistage Clos networks in 1953 and the Benes network in 1962. Many large telephone switches today are still built from Clos or Clos-like networks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The first inter-processor interconnection networks were connections between the registers of neighboring processors connected in 2-D arrays. Example: Solomon machine developed in 1962. These early networks performed no routing. Therefore, processor has to explicitly relay communications to non-neighbors, making for poor performance and considerable programming complexity. By mid-1980s, router chips were developed to forward messages through intermediate nodes without processor interconnection. For example: Torus routing chip. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inter-processor interconnection networks have gone through a series of topology fads over the years – largely motivated by packaging and other technology constraints. The early machines, like Solomon, Illian and MPP were based on simple 2-D mesh or torus networks because of their physical regularity. Starting in the late 1970s, binary n-cube or hypercube networks become popular because of their low diameter. For example, cosmic cube, the nCUBE networks. In the mid-1980s it was shown that under realistic packaging constraints low dimensional networks outperformed hypercubes and most machines returned to 2-D and 3-D mesh or torus networks. Consequently most networks built over the last decade have returned to these networks, including the J machine. For example, Cray T3D, T3E, intel DELTA. Today, the high pin bandwidth of router chips relative to message length motivates the use of networks with much higher node degree, such as butterfly and Clos network. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Processor memory interconnection networks emerge in the late 1960s when parallel processor systems incorporated alignment networks to allow any processor to access any memory bank without burdening the other processors. The smallest machines employed crossbar switches for this purpose, whereas larger machines used networks with a butterfly topology, in a dance-hall arrangement. Variations on this theme were used through the 1980s for many shared memory parallel processors. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The three interconnections network evolution recently merged. Since the 1990s, there has been little difference in the design of processor-memory and inter-processor interconnection networks. In fact, the same router chips have been used for both. A variant of Clos and Benes networks of telephony has also emerged in multiprocessor networks in the form of the fat free topology. &lt;br /&gt;
&amp;lt;br&amp;gt;&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; Interconnection Network Topology &amp;lt;/h2&amp;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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typically, in a multiprocessor system, message passed between processors are frequent and short1. 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;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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. Topology is the pattern in which the individual switches of the network are connected to other switches and to processors and memories (nodes). Direct topologies connect each switch directly to a node, while in indirect topologies at least some of the switches connect only to other switches. Direct networks are 2D mesh of the 1970s-era Illiac IV' is similar to the 1990sera 2D mesh of the Intel Paragon and the toroidal 3D mesh of the CrayT3D' and T3E. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The indirect cube network, often referred to as a multistage interconnection nemork or MIN,617 has been used in a variety of machines. This topology was used in the Staran SIMD machine of the 1970s, in which data would traverse the network from one side to the other. Allowing data to reverse direction at any stage in a bidirectional MIN (or BMIN) leads to a variation sometimes called afat-tree. MINs and their fat-tree variants are used in MIMD machines of the 1990s such as the Meiko CS-2,9 the IBM SP2,&amp;quot; and the Thinking Machines CM. Direct networks often excel at routing local traffic patterns such as the passing of boundary data in grids Indirect networks (such as k-node MINs) can provide a variety of global communication paths by passing though the multiple stages of switches.&lt;br /&gt;
&amp;lt;br&amp;gt;&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;Types of Network Topologies &amp;lt;/h2&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;1&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;
&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;h2&amp;gt;Linear Array&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_linear.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. The longest distance between two nodes, or the diameter, is equivalent to the number of nodes. Linear network is easy to connect a computer or peripheral to a linear bus and requires less cable length than a star topology. Disadvantage of a linear bus topology is that entire network shuts down if there is a break in the main cable. Linear bus topology terminators are required at both ends of the backbone cable. It is difficult to identify the problem if the entire network shuts down. Linear topology is not meant to be used as a stand-alone solution in a large building. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linear array topology is used in fast floating point digital signal processor (DSP) chips.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Star&amp;lt;/h2&amp;gt;&lt;br /&gt;
[[Image:star1.jpeg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many home networks use star topology. A star network features a central connection point called a &amp;quot;hub&amp;quot; that can be switch, router or hub and terminals connected to it. Devices typically connect to the hub with Unshielded Twisted Pair (UTP) Ethernet. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Compared to the bus topology, a star network generally requires more cable, but a failure in any star network cable will only take down one computer's network access and not the entire LAN. (If the hub fails, however, the entire network . Star topology is easy to install and wire. There are no disruptions to the network when connecting or removing devices. It is easy to detect faults and to remove parts. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disadvantages of a Star topology are that it requires more cable length than a linear topology and more expensive than linear bus topologies because of the cost of the hubs. If the hub, switch, or concentrator fails, nodes attached are disabled. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ring&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_ring.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A network that uses a ring topology arranges for computer to be connected in a closed loop – a cable connects the first computer to a second computer, another cable connects the second computer to a third, and so on, until a cable connects the final computer to the third and so on until a cable connects the final computer back to the first. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Similar structure as the linear array, except, the ending nodes connect to each other, establishing a circular structure. The longest distance between two nodes is cut in half. A failure in any cable or device breaks the loop and can take down the entire network.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Token Ring is an example of a ring topology. IBM Token Ring (802.5) networks imitate a ring at layer 2 but use a physical star at layer 1 [16]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:mesh1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The mesh topology incorporates a unique network design in which each computer on the network connects to every other, creating a point-to-point connection between every device on the network. The purpose of the mesh design is to provide a high level of redundancy. If one network cable fails, the data always has an alternative path to get to its destination.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The wiring for a mesh network can be very complicated. Further, the cabling costs associated with the mesh topology can be high, and troubleshooting a failed cable can be tricky. Because of this, the mesh topology is rarely used. A variation on a true mesh topology is the hybrid mesh. It creates a redundant point-to-point network connection between only specific network devices. The hybrid mesh is most often seen in WAN implementations. Advantage of mesh topology is that it provides redundant paths between devices and network can be expanded without disruption to current users. Disadvantages of mesh network is that it requires more cable than the other LAN topologies and it is complicated. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some WANs, most notably the Internet, employ mesh routing.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2-D Mesh&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dmesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The 2-D mesh can be thought of as several linear arrays put together to form a 2-dimensional structure. Nodes that are not on the edge have 4 input or output links, or a degree of 4. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Designers like 2D meshes due to easy wiring layout and 2-D mesh have uniform and low wiring density throughout. A low wiring density means that no stringent constraints on channel width are placed. 2D Mesh networks provide a very simple network and lead to very short wires in the architecture. 2D Mesh is a very popular topology in Network on Chip due to its facilitated implementation, simplicity of the XY routing strategy and the network scalability. On the other hand, 2D Mesh has some disadvantages such as long network diameter as well as energy inefficiency because of the extra hops. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Most on-chip networks that have been proposed, mostly utilize a 2D Mesh such as the networks found in the RAW processor [6], the TRIPS processor [7], the 80-node Intel's Teraflops research chip [8], and the 64-node chip multiprocessor from Tilera [9]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_2Dtorus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 2-D torus takes the structure of the 2-D mesh and connects the nodes on the edges. This decreases the diameter, but the number of links is higher. Adding wrap-around links to a mesh creates a torus topology which decreases the average and maximum hop counts and doubling the bisection bandwidth. The wrap-around links, however, also double the number of wiring channels per tile edge to 2. The disadvantage of long wires which span the length of the die is overcome by the technique of “folding” which yields a maximum wires length spanning only 2 tiles.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2D torus topology is used in Cray X1 machines. The Cray X1 is a non-uniform memory access, vector processor supercomputer manufactured and sold by Cray Inc. since 2003. The X1 is often described as the unification of the Cray T90, Cray SV1, and Cray T3E architectures into a single machine. The X1 shares the multistreaming processors, vector caches, and CMOS design of the SV1, the highly scalable distributed memory design of the T3E, and the high memory bandwidth and liquid cooling of the T90[10].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Cube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_cube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cube can be thought of as a three-dimensional mesh.&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hypercube is essentially multiple cubes put together. Hypercube provides symmetrical topology but weak scalability.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SGI origin 2000 uses hypercube technology. The SGI Origin 2000, code named Lego, is a family of mid-range and high-end servers developed and manufactured by SGI and introduced in 1996 to succeed the SGI Challenge and POWER Challenge [11]. A hypercube communication topology is frequently found in real parallel applications. Some examples include parallel algorithms for FFT, sorts, etc.&lt;br /&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;h2&amp;gt;Tree&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The tree is a hierarchical structure nodes on the bottom and switching nodes at the upper levels. The tree experiences high traffic at the upper levels. Tree topologies integrate multiple star topologies together onto a bus. In its simplest form, only hub devices connect directly to the tree bus, and each hub functions as the &amp;quot;root&amp;quot; of a tree of devices. This bus/star hybrid approach supports future expandability of the network much better than a bus (limited in the number of devices due to the broadcast traffic it generates) or a star (limited by the number of hub connection points) alone.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The cable TV network is an example of tree topology, where main cable is divided into, branches and each branch is further divided into smaller branches and so on. The hub is used when a branch is created [12].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Top_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a tree network there is only one path between any two nodes. The taller the tree, the higher is communication bottleneck at high levels of the tree. Two remedies are possible:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*static tree networks&lt;br /&gt;
*dynamic tree networks&lt;br /&gt;
&lt;br /&gt;
[[Image:tree1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;
[[Image:Top_fat_tree.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&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 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. &lt;br /&gt;
&amp;lt;br&amp;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. The Connection Machine Model CM5 supercomputer (circa 1990) used a fat tree interconnection network. Mercury Computer Systems used a hypertree network, a variant of fat trees, in their multicomputer. From 2 to 360 compute nodes would reside in a circuit switched fat tree network, with each node having local memory that could be mapped by any other node. Each node in this heterogeneous system could be an Intel i860, a PowerPC, or a group of three SHARC DSPs. The fat tree network was particularly well suited to the FFT, which customers used for signal processing tasks like radar, sonar, medical imaging, and so on. A fat tree network is now preferred for the Infiniband cluster architecture [13].&lt;br /&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Image:Top_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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. If the link breaks, data cannot be re-routed, and communication is broken between different nodes. &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;Real-World Implementation of Network Topologies &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;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;2&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;
&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;
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;2&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;
The overall structure of the network is shown below. Note that this structure is very susceptible to failure and congestion.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_network.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Basic structure of Hospodor and Miller's experimental network''&amp;lt;sup&amp;gt;2&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;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 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;2&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;7&amp;lt;/sup&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;h2&amp;gt;Butterfly&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_butterfly.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Butterfly structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Meshes and Tori&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;2&amp;lt;/sup&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;7&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_mesh.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Mesh structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_torus.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Torus structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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;h2&amp;gt;Hypercube&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;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;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The CRAY T3E, CRAY XT3, and SGI Origin 2000 use k-ary n-cubed topologies.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Disknet_hypercube.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Hypercube structure''&amp;lt;sup&amp;gt;2&amp;lt;/sup&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 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;2&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.&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;2&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;2&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;2&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;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;3&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;4&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;4&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;4&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;4&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;6&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;5&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;5&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;
&amp;lt;h1&amp;gt;Metrics for Interconnection Networks&amp;lt;/h1&amp;gt;&lt;br /&gt;
1.'''Diameter''': Longest distance between two nodes in the network&lt;br /&gt;
&lt;br /&gt;
2.'''Bisection Width''': Minimum of wire cuts to divide the network in 2 halves. Examples&lt;br /&gt;
&lt;br /&gt;
3.'''Cost''': Number of links or switches (whichever is asymptotically higher)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Characteristics of Networks with p Processors&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[Image:chart-network.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Definitions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Clos Network: A Clos network is a kind of multistage circuit switching network, first formalized by Charles Clos in 1953 [1], which represents a theoretical idealization of practical multi-stage telephone switching systems [21]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MPP: (Massively Parallel Processing) A massively parallel computer is a distributed memory computer system which consists of many individual nodes, each of which is essentially an independent computer in itself, and in turn consists of at least one processor, its own memory, and a link to the network that connects all the nodes together [22].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SIMD: (single instruction, multiple-data). A processor which executes a single instruction simultaneously on multiple data locations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
MIMD: (multiple instruction, multiple data). A processor which executes multiple instructions simultaneously on multiple data locations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DSP: (Digital Signal Processor) DSP is a specialized microprocessor with an optimized architecture for the fast operational needs of digital signal processing [23].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
LAN: (Local Area Network) LAN is a computer network that connects computers and devices in a limited geographical area such as home, school, computer laboratory or office building .[24]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;References&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[1] Y. Solihin, Fundamentals of Parallel Computer Architecture. Madison: OmniPress, 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[2] [http://www.ssrc.ucsc.edu/Papers/hospodor-mss04.pdf Interconnection Architectures for Petabyte-Scale High-Performance Storage Systems]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://www.diit.unict.it/~vcatania/COURSES/semm_05-06/DOWNLOAD/noc_routing02.pdf The Odd-Even Turn Model for Adaptive Routing]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[4] [http://www.csm.ornl.gov/workshops/IAA-IC-Workshop-08/documents/wiki/dally_iaa_workshop_0708.pdf Interconnection Topologies:(Historical Trends and Comparisons)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[5] [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.]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[6] M. B. Taylor, W. Lee, S. Amarasinghe, and A. Agarwal. Scalar Operand Networks: On-Chip Interconnect for ILP in Partitioned Architectures.In International Symposium on High-Performance Computer Architecture (HPCA), pages 341–353, Anaheim, California,2003.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[7] P. Gratz, C. Kim, R. McDonald, S. Keckler, and D. Burger. Implementation and Evaluation of On-Chip Network Architectures.In International Conference on Computer Design (ICCD), 2006.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[8] S. Vangal et al. An 80-Tile 1.28TFLOPS Network-on-Chip in 65nm CMOS. In IEEE Int'l Solid-State Circuits Conf., Digest of Tech. Papers(ISSCC), 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[9] A. Agarwal, L. Bao, J. Brown, B. Edwards, M. Mattina, C.-C. Miao, C. Ramey, and D. Wentzlaff. Tile Processor: Embedded Multicore for Networking and Multimedia. In Hot Chips 19, Stanford, CA, Aug. 2007.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://en.wikipedia.org/wiki/Cray_X1.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://en.wikipedia.org/wiki/SGI_Origin_2000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://www.free-computer-tips.info/networking-tips/mesh-topology-tree-topology-and-hybrid-topology.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://en.wikipedia.org/wiki/Fat_tree&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[14] [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]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[15] [http://www.top500.org TOP500 Supercomputing Sites]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[16] http://en.wikipedia.org/wiki/Ring_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[17] http://compnetworking.about.com/od/networkdesign/a/topologies.htm&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[19] http://cat.inist.fr/?aModele=afficheN&amp;amp;cpsidt=3663038&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[20] http://www.design-reuse.com/articles/23347/on-chip-network.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[21] http://en.wikipedia.org/wiki/Clos_network&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[22] http://en.wikipedia.org/wiki/Massive_parallel_processing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[23] http://en.wikipedia.org/wiki/Digital_signal_processor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[24] http://en.wikipedia.org/wiki/LAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=ECE506_Main_Page&amp;diff=61830</id>
		<title>ECE506 Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=ECE506_Main_Page&amp;diff=61830"/>
		<updated>2012-04-12T04:14:52Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* Supplements to Solihin Text */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page serves as a portal for all wiki material related to CSC506 and ECE506. Link to any new wiki pages from this page, and add links to any current pages.&lt;br /&gt;
&lt;br /&gt;
=Supplements to Solihin Text=&lt;br /&gt;
&lt;br /&gt;
Post links to the textbook supplements in this section.&lt;br /&gt;
*Chapter 2 [[CSC/ECE 506 Spring 2011/ch2 dm | CSC/ECE 506 Spring 2011/ch2 dm]]&lt;br /&gt;
*Chapter 2 [[Parallel_Programming_Models | Parallel Programming Models]]&lt;br /&gt;
*Chapter 2 (Still being revised) [[CSC/ECE 506 Spring 2011/ch2 cl | CSC/ECE 506 Spring 2011/ch2 cl]]&lt;br /&gt;
*Chapter 2a [[ CSC/ECE 506 Spring 2011/ch2a mc | Current Data-Parallel Architectures ]]&lt;br /&gt;
*Chapter 2a [[ CSC/ECE 506 Spring_2012/2a va ]]&lt;br /&gt;
*Chapter 2b [[CSC/ECE 506 Spring 2012/ch2b cm | CSC/ECE 506 Spring 2012/ch2b cm]]&lt;br /&gt;
*Chapter 2b [[ECE506_CSC/ECE_506_Spring_2012/2b_az | CSC/ECE 506 Spring 2012/2b az - Data-Parallel Processing with the AMD HD 6900 Series Graphics Processing Unit]]&lt;br /&gt;
*Chapter 3 (Final Revision) [[ CSC/ECE 506 Spring 2011/ch3 ab | Parallel Architecture Mechanisms and Programming Models ]]&lt;br /&gt;
*Chapter 4a[[ CSC/ECE 506 Spring 2011/ch4a ob | Parallelization of Nelder Mead Algorithm ]]&lt;br /&gt;
*Chapter 4a (Under Construction) [[ CSC/ECE_506_Spring_2011/ch4a_bm | Parallelization of Algorithms  ]]&lt;br /&gt;
*Chapter 4a [[ CSC/ECE 506 Spring 2011/ch4a zz | CSC/ECE 506 Spring 2011/ch4a zz ]]&lt;br /&gt;
*Chapter 4b [[Chapter 4b CSC/ECE 506 Spring 2011 / ch4b]]&lt;br /&gt;
*Chapter 5a [[ CSC/ECE 506 Spring 2012/ch5a ja | CSC/ECE 506 Spring 2012/ch5a ja ]]&lt;br /&gt;
*Chapter 9a [[CSC/ECE 506 Spring 2012/ch9a cm | CSC/ECE 506 Spring 2012/ch9a cm]]&lt;br /&gt;
*Chapter 6a (Under Construction) [[ CSC/ECE 506 Spring 2011/ch6a jp | CSC/ECE 506 Spring 2011/ch6a jp ]]&lt;br /&gt;
*Chapter 6a (Under Construction) [[ CSC/ECE 506 Spring 2011/ch6a ep | CSC/ECE 506 Spring 2011/ch6a ep ]]&lt;br /&gt;
*Chapter 6b (Ready for First Review) [[CSC/ECE 506 Spring 2011/ch6b ab | CSC/ECE 506 Spring 2011/ch6b ab]]&lt;br /&gt;
*Chapter 7 (Under Construction) [[CSC/ECE 506 Spring 2011/ch7 jp | CSC/ECE 506 Spring 2011/ch7 jp]]&lt;br /&gt;
*Chapter 8 [[CSC/ECE 506 Spring 2011/ch8 mc | CSC/ECE 506 Spring 2011/ch8 mc]]&lt;br /&gt;
*Chapter 10 (Under Construction) [[CSC/ECE 506 Spring 2011/ch10 sb | CSC/ECE 506 Spring 2011/ch10 sb]]&lt;br /&gt;
*Chapter 10 [[CSC/ECE 506 Spring 2012/ch10 sj | CSC/ECE 506 Spring 2012/ch10 sj]]&lt;br /&gt;
*Chapter 10a [[CSC/ECE_506_Spring_2011/ch10a_dc | CSC/ECE_506_Spring_2011/ch10a_dc]]&lt;br /&gt;
*Chapter 11 [[CSC/ECE_506_Spring_2011/ch11_BB_EP | Chapter 11 Supplement]]&lt;br /&gt;
*Chapter 11 [[Scalable_Coherent_Interface | SCI (Scalable Coherent Interface) ]]&lt;br /&gt;
*Chapter 12 [[ CSC/ECE 506 Spring 2011/ch12 ob | Interconnection Network Topologies and Routing Algorithms]]&lt;br /&gt;
*Chapter 12 (Ready for Final Review) [[ CSC/ECE 506 Spring 2011/ch12 aj | Interconnection Network Topologies and Routing Algorithms]]&lt;br /&gt;
*Chapter 12 [[ CSC/ECE 506 Spring 2011/ch12 | Interconnection Network Topologies]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/1a ry]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/1c dm]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/1c cl]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/1a mw]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/3a yw]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/7b yw]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/3b sk]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/4b rs]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/6b am]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/8a cj]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/10a dr]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/10a jp]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/9a ms]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/10b sr]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2012/12b jh]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2010/8a fu]]&lt;br /&gt;
*[[CSC/ECE 506 Spring 2010/8a sk]]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60730</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60730"/>
		<updated>2012-03-29T14:52:35Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* Special Coherence Considerations in AMD64 architectures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called the '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariance of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence uses snooping on a bus. Snooping entails each processor seeing or &amp;quot;snooping&amp;quot; all bus transactions. Common bus transactions are &lt;br /&gt;
&lt;br /&gt;
* '''BusRd''' The cache controller asks for a copy of the data it does not intend to modify&lt;br /&gt;
* '''Bus Read-Exclusive (BusRdX)''' The cache controller asks for a copy of the data it intends to modify (all other caches need to be invalidated)&lt;br /&gt;
* '''Writeback (BusWB)''' Main memory updates its contents&lt;br /&gt;
* '''Bus upgrade (BusUpgr)''' Bus upgrade obtains exclusive ownership and invalidates other copies - bus does not return data to the requestor&lt;br /&gt;
&lt;br /&gt;
==MSI==&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back invalidation protocol. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in Modified state. If the cache line is clean and is shared by more than one processor , it is marked as Shared. Invalid means the cache line is either not present or is in invalid state. BusRdx causes all other processors to invalidate (demote) their copy of the cache line to the I state. If the cache line is present in the M state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
===MSI Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
==MESI==&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E (Exclusive) state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line as being in one of the Modified, Exclusive, Shared or Invalid states. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as follows: &lt;br /&gt;
A line that is just fetched receives E or S state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the M state when a processor writes to it. If the line is not in E or M state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or, as the Intel manuals call it, a “Read-For-Ownership (RFO) request” which ensures that the line exists in the cache and is in the I state in all other processors on the bus (if any). The table shown below will summarize the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
===MESI Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
In 1984, researchers at the University of Illinois developed and published a new, improved cache coherence protocol. This protocol added an &amp;quot;exclusive&amp;quot; state to the MSI protocol. The new state improves performance by reducing bus traffic when data is being used by a single processor. For more information on MESI, here is an excerpt of the original article:	&lt;br /&gt;
[http://www.deepdyve.com/lp/association-for-computing-machinery/a-low-overhead-coherence-solution-for-multiprocessors-with-private-AqsgSDo8s0 A low-overhead coherence solution for multiprocessors with private cache memories]&lt;br /&gt;
	&lt;br /&gt;
The improved performance comes at the cost of greater implementation complexity. The MESI protocol requires an additional COPIES-EXIST bus line, which is not necessary when using MSI. Transferring data between caches is also more complicated, especially the FlushOpt (a snooped request used to indicate that a cache block has been posted on the bus for another processor). In the worst case, several cache controllers may attempt to flush the same cache block to the bus, only to realize that another controller has already completed the FlushOpt. They will have wasted time and power by reading the cache, trying to access the bus, and then canceling the operation.	&lt;br /&gt;
For more details, see pages 215-220 of the Solihin textbook.&lt;br /&gt;
&lt;br /&gt;
==MOESI==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using too much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to  [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the owned state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state owned, it can provide other processors the modified data without writing it to the main memory. This is called dirty sharing. The processor with the data in the owned state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
===MOESI Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
Allowing dirty sharing by implementing an owner state reduces bus traffic between the individual caches and main memory, but comes at the cost of higher complexity. MOESI has two more states than MSI, so the underlying state transition logic is more complex. In addition, MOESI has six bus=side request types, compared with three for MSI (or four, if BusUpgr is used). For more information, see p. 222-228 in the Solihin text.&lt;br /&gt;
&lt;br /&gt;
One complexity problem applying to a number of the protocols deals with invalidation. In newer protocols, individual words may be modified in a cache line, as opposed to the entirety of the line. The other processors will thus have a mostly correct cache line, with only a word difference. This leads to potential complexity, because to 'correct' the error the other processors must transition from shared to invalid, where they then can read the correct word from the bus and place it back into the line, transitioning back into shared. This transition is potentially unnecessary, as the second processor may never access the specific word changed, but it may access other words in the cache line. One potential solution to this is being researched at the present time, advancing the protocols so that a cache line is &amp;quot;not invalidated on the first dirty word, but after the number of dirty words crosses some predetermined value, which is data type and application dependent.&amp;quot; In other words, if the application can possibly have multiple words 'incorrect,' several transitions to and from the invalid state may be avoided.&lt;br /&gt;
Source: http://tab.computer.org/tcca/NEWS/sept96/dsmideas.ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In essence, the solution proposed here is to advance the MOESI protocol with word invalidation and specific treatment of temporal and spatial data, so that the block is not invalidated.&lt;br /&gt;
&lt;br /&gt;
==MESIF==&lt;br /&gt;
Intel's solution to the redundant messages sent using the MESI protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the MESI protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, Forward state, was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the F state is copied, the F state migrates to the newer copy, while the older one drops back to the S state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from M to F and E to F.  &lt;br /&gt;
The F state is different from the Owned state of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
===MESIF Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
Intel has used the MESIF protocol in their recent Nehalem architecture, in an attempt to reduce the amount of snooping traffic between caches. They accomplish this by using a large L3 cache that is shared between all the processor caches to keep track of which cores are using data. If the L3 cache has been modified, each core using that data will need to update its L1/L2 caches with the new value.&lt;br /&gt;
&lt;br /&gt;
MESIF uses the new &amp;quot;Forward&amp;quot; state to designate a single cache which will respond to all read requests for the shared data. This protocol is very similar in complexity to the MESI protocol, and actually reduces the amount of communication between cores. For more details, see [http://rolfed.com/nehalem/nehalemPaper.pdf Cache Organization and Memory Management of the Intel Nehalem Computer Architecture].&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic2.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
Simulation results yield somewhat unexpected results with the MESI protocol showing negligible traffic savings over the MSI protocol with BusUpgr. The addition of the Exclusive state is expected to reduce traffic however simulation reveals that there is only a small fraction of E-&amp;gt;M transitions and thus little performance gain by the addition of the E state. This  suggests that a more complex protocol may not lead to substantial savings because  of the link between program structure and protocol. While  additional complexity doesn’t always provide savings, it is evident that the added complexity of the BusUpgr command (2nd bar) reduces traffic of the RdEx command (3rd bar). This again reaffirms that design decisions are part art, part science.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Pentium Pro microprocessor, introduced in 1992 was the first Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in Intel's (Nehalem-EP) quad-core x86-64. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called MESIF, by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The Intel architecture uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the basis to ensure cache coherence, which is true whether you're on one of the older processors that use a common bus to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the processor/core,&lt;br /&gt;
* A Memory/L2 access control unit, through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the prefetch unit and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the L2 cache and only on a miss, were they forwarded to the main memory via the front side bus (FSB). The Memory/L2 access control unit served as a central point for maintaining coherence within the core and with the external world. It contains a snoop control unit that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the directory protocol because though directory protocol reduces the active power due to reduced snoop activity, it increased the design complexity and the static power due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how CMP was implemented in Intel Core Duo, which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* L1 cache and the processor/core structure is duplicated to give 2 cores.&lt;br /&gt;
* The Memory/L2 access control unit is split into 2 logical units: L2 controller and bus controller. The L2 controller handles all requests to the L2 cache from the core and the snoop requests from the FSB. The bus controller handles data and I/O requests to and from the FSB.&lt;br /&gt;
* The prefetching unit is extended to handle the hardware prefetches for each core separately.&lt;br /&gt;
* A new logical unit(represented by the hexagon) was added to maintain fairness between the requests coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new partitioned structure for the  memory/L2 access control unit enhanced the performance while reducing power consumption.&lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The Intel bus architecture has been evolving in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a single shared bus to dual independent buses (DIB) doubling the available bandwidth and to the logical conclusion of DIB with the introduction of dedicated high-speed interconnects (DHSI). The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache are invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The MOESI protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the Mstate for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the M state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the O state in the L3 cache and pulls down a shared (S) copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked ‘O’) cache line, it finds that it cannot, since a cache line in the O state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the M state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the M state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://ctho.org/toread/forclass/18-742/3/p273-archibald.pdf Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=289691 XDBus]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60729</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60729"/>
		<updated>2012-03-29T14:41:57Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* Introduction to bus-based cache coherence in real machines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called the '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariance of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence uses snooping on a bus. Snooping entails each processor seeing or &amp;quot;snooping&amp;quot; all bus transactions. Common bus transactions are &lt;br /&gt;
&lt;br /&gt;
* '''BusRd''' The cache controller asks for a copy of the data it does not intend to modify&lt;br /&gt;
* '''Bus Read-Exclusive (BusRdX)''' The cache controller asks for a copy of the data it intends to modify (all other caches need to be invalidated)&lt;br /&gt;
* '''Writeback (BusWB)''' Main memory updates its contents&lt;br /&gt;
* '''Bus upgrade (BusUpgr)''' Bus upgrade obtains exclusive ownership and invalidates other copies - bus does not return data to the requestor&lt;br /&gt;
&lt;br /&gt;
==MSI==&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back invalidation protocol. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in Modified state. If the cache line is clean and is shared by more than one processor , it is marked as Shared. Invalid means the cache line is either not present or is in invalid state. BusRdx causes all other processors to invalidate (demote) their copy of the cache line to the I state. If the cache line is present in the M state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
===MSI Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
==MESI==&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E (Exclusive) state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line as being in one of the Modified, Exclusive, Shared or Invalid states. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as follows: &lt;br /&gt;
A line that is just fetched receives E or S state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the M state when a processor writes to it. If the line is not in E or M state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or, as the Intel manuals call it, a “Read-For-Ownership (RFO) request” which ensures that the line exists in the cache and is in the I state in all other processors on the bus (if any). The table shown below will summarize the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
===MESI Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
In 1984, researchers at the University of Illinois developed and published a new, improved cache coherence protocol. This protocol added an &amp;quot;exclusive&amp;quot; state to the MSI protocol. The new state improves performance by reducing bus traffic when data is being used by a single processor. For more information on MESI, here is an excerpt of the original article:	&lt;br /&gt;
[http://www.deepdyve.com/lp/association-for-computing-machinery/a-low-overhead-coherence-solution-for-multiprocessors-with-private-AqsgSDo8s0 A low-overhead coherence solution for multiprocessors with private cache memories]&lt;br /&gt;
	&lt;br /&gt;
The improved performance comes at the cost of greater implementation complexity. The MESI protocol requires an additional COPIES-EXIST bus line, which is not necessary when using MSI. Transferring data between caches is also more complicated, especially the FlushOpt (a snooped request used to indicate that a cache block has been posted on the bus for another processor). In the worst case, several cache controllers may attempt to flush the same cache block to the bus, only to realize that another controller has already completed the FlushOpt. They will have wasted time and power by reading the cache, trying to access the bus, and then canceling the operation.	&lt;br /&gt;
For more details, see pages 215-220 of the Solihin textbook.&lt;br /&gt;
&lt;br /&gt;
==MOESI==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using too much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to  [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the owned state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state owned, it can provide other processors the modified data without writing it to the main memory. This is called dirty sharing. The processor with the data in the owned state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
===MOESI Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
Allowing dirty sharing by implementing an owner state reduces bus traffic between the individual caches and main memory, but comes at the cost of higher complexity. MOESI has two more states than MSI, so the underlying state transition logic is more complex. In addition, MOESI has six bus=side request types, compared with three for MSI (or four, if BusUpgr is used). For more information, see p. 222-228 in the Solihin text.&lt;br /&gt;
&lt;br /&gt;
One complexity problem applying to a number of the protocols deals with invalidation. In newer protocols, individual words may be modified in a cache line, as opposed to the entirety of the line. The other processors will thus have a mostly correct cache line, with only a word difference. This leads to potential complexity, because to 'correct' the error the other processors must transition from shared to invalid, where they then can read the correct word from the bus and place it back into the line, transitioning back into shared. This transition is potentially unnecessary, as the second processor may never access the specific word changed, but it may access other words in the cache line. One potential solution to this is being researched at the present time, advancing the protocols so that a cache line is &amp;quot;not invalidated on the first dirty word, but after the number of dirty words crosses some predetermined value, which is data type and application dependent.&amp;quot; In other words, if the application can possibly have multiple words 'incorrect,' several transitions to and from the invalid state may be avoided.&lt;br /&gt;
Source: http://tab.computer.org/tcca/NEWS/sept96/dsmideas.ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In essence, the solution proposed here is to advance the MOESI protocol with word invalidation and specific treatment of temporal and spatial data, so that the block is not invalidated.&lt;br /&gt;
&lt;br /&gt;
==MESIF==&lt;br /&gt;
Intel's solution to the redundant messages sent using the MESI protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the MESI protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, Forward state, was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the F state is copied, the F state migrates to the newer copy, while the older one drops back to the S state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from M to F and E to F.  &lt;br /&gt;
The F state is different from the Owned state of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
===MESIF Implementation Complexities===&lt;br /&gt;
----&lt;br /&gt;
Intel has used the MESIF protocol in their recent Nehalem architecture, in an attempt to reduce the amount of snooping traffic between caches. They accomplish this by using a large L3 cache that is shared between all the processor caches to keep track of which cores are using data. If the L3 cache has been modified, each core using that data will need to update its L1/L2 caches with the new value.&lt;br /&gt;
&lt;br /&gt;
MESIF uses the new &amp;quot;Forward&amp;quot; state to designate a single cache which will respond to all read requests for the shared data. This protocol is very similar in complexity to the MESI protocol, and actually reduces the amount of communication between cores. For more details, see [http://rolfed.com/nehalem/nehalemPaper.pdf Cache Organization and Memory Management of the Intel Nehalem Computer Architecture].&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic2.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
Simulation results yield somewhat unexpected results with the MESI protocol showing negligible traffic savings over the MSI protocol with BusUpgr. The addition of the Exclusive state is expected to reduce traffic however simulation reveals that there is only a small fraction of E-&amp;gt;M transitions and thus little performance gain by the addition of the E state. This  suggests that a more complex protocol may not lead to substantial savings because  of the link between program structure and protocol. While  additional complexity doesn’t always provide savings, it is evident that the added complexity of the BusUpgr command (2nd bar) reduces traffic of the RdEx command (3rd bar). This again reaffirms that design decisions are part art, part science.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Pentium Pro microprocessor, introduced in 1992 was the first Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in Intel's (Nehalem-EP) quad-core x86-64. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called MESIF, by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The Intel architecture uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the basis to ensure cache coherence, which is true whether you're on one of the older processors that use a common bus to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the processor/core,&lt;br /&gt;
* A Memory/L2 access control unit, through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the prefetch unit and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the L2 cache and only on a miss, were they forwarded to the main memory via the front side bus (FSB). The Memory/L2 access control unit served as a central point for maintaining coherence within the core and with the external world. It contains a snoop control unit that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the directory protocol because though directory protocol reduces the active power due to reduced snoop activity, it increased the design complexity and the static power due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how CMP was implemented in Intel Core Duo, which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* L1 cache and the processor/core structure is duplicated to give 2 cores.&lt;br /&gt;
* The Memory/L2 access control unit is split into 2 logical units: L2 controller and bus controller. The L2 controller handles all requests to the L2 cache from the core and the snoop requests from the FSB. The bus controller handles data and I/O requests to and from the FSB.&lt;br /&gt;
* The prefetching unit is extended to handle the hardware prefetches for each core separately.&lt;br /&gt;
* A new logical unit(represented by the hexagon) was added to maintain fairness between the requests coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new partitioned structure for the  memory/L2 access control unit enhanced the performance while reducing power consumption.&lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The Intel bus architecture has been evolving in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a single shared bus to dual independent buses (DIB) doubling the available bandwidth and to the logical conclusion of DIB with the introduction of dedicated high-speed interconnects (DHSI). The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The MOESI protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the Mstate for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the M state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the O state in the L3 cache and pulls down a shared (S) copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked ‘O’) cache line, it finds that it cannot, since a cache line in the O state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the M state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the M state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://ctho.org/toread/forclass/18-742/3/p273-archibald.pdf Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=289691 XDBus]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60348</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60348"/>
		<updated>2012-03-21T11:53:48Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MESIF Implementation Complexities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
n 1984, researchers at the University of Illinois developed and published a new, improved cache coherence protocol. This protocol added an &amp;quot;exclusive&amp;quot; state to the MSI protocol. The new state improves performance by reducing bus traffic when data is being used by a single processor. For more information on MESI, here is an excerpt of the original article:	&lt;br /&gt;
[http://www.deepdyve.com/lp/association-for-computing-machinery/a-low-overhead-coherence-solution-for-multiprocessors-with-private-AqsgSDo8s0 A low-overhead coherence solution for multiprocessors with private cache memories]&lt;br /&gt;
	&lt;br /&gt;
The improved performance comes at the cost of greater implementation complexity. The MESI protocol requires an additional COPIES-EXIST bus line, which is not necessary when using MSI. Transferring data between caches is also more complicated, especially the FlushOpt (a snooped request used to indicate that a cache block has been posted on the bus for another processor). In the worst case, several cache controllers may attempt to flush the same cache block to the bus, only to realize that another controller has already completed the FlushOpt. They will have wasted time and power by reading the cache, trying to access the bus, and then canceling the operation.	&lt;br /&gt;
For more details, see pages 215-220 of the Solihin textbook.&lt;br /&gt;
&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MOESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
Allowing '''dirty sharing''' by implementing an owner state reduces bus traffic between the individual caches and main memory, but comes at the cost of higher complexity. MOESI has two more states than MSI, so the underlying state transition logic is more complex. In addition, MOESI has six bus=side request types, compared with three for MSI (or four, if BusUpgr is used). For more information, see p. 222-228 in the Solihin text.&lt;br /&gt;
&lt;br /&gt;
One complexity problem applying to a number of the protocols deals with invalidation. In newer protocols, individual words may be modified in a cache line, as opposed to the entirety of the line. The other processors will thus have a mostly correct cache line, with only a word difference. This leads to potential complexity, because to 'correct' the error the other processors must transition from shared to invalid, where they then can read the correct word from the bus and place it back into the line, transitioning back into shared. This transition is potentially unnecessary, as the second processor may never access the specific word changed, but it may access other words in the cache line. One potential solution to this is being researched at the present time, advancing the protocols so that a cache line is &amp;quot;not invalidated on the first dirty word, but after the number of dirty words crosses some predetermined value, which is data type and application dependent.&amp;quot; In other words, if the application can possibly have multiple words 'incorrect,' several transitions to and from the invalid state may be avoided.&lt;br /&gt;
Source: http://tab.computer.org/tcca/NEWS/sept96/dsmideas.ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In essence, the solution proposed here is to advance the MOESI protocol with word invalidation and specific treatment of temporal and spatial data, so that the block is not invalidated.&lt;br /&gt;
&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=====MESIF Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
Intel has used the MESIF protocol in their recent Nehalem architecture, in an attempt to reduce the amount of snooping traffic between caches. They accomplish this by using a large L3 cache that is shared between all the processor caches to keep track of which cores are using data. If the L3 cache has been modified, each core using that data will need to update its L1/L2 caches with the new value.&lt;br /&gt;
&lt;br /&gt;
MESIF uses the new &amp;quot;Forward&amp;quot; state to designate a single cache which will respond to all read requests for the shared data. This protocol is very similar in complexity to the MESI protocol, and actually reduces the amount of communication between cores. For more details, see [http://rolfed.com/nehalem/nehalemPaper.pdf Cache Organization and Memory Management of the Intel Nehalem Computer Architecture].&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic2.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
Simulation results yield somewhat unexpected results with the MESI protocol showing negligible traffic savings over the MSI protocol with BusUpgr. The addition of the Exclusive state is expected to reduce traffic however simulation reveals that there is only a small fraction of E-&amp;gt;M transitions and thus little performance gain by the addition of the E state. This  suggests that a more complex protocol may not lead to substantial savings because  of the link between program structure and protocol. While  additional complexity doesn’t always provide savings, it is evident that the added complexity of the BusUpgr command (2nd bar) reduces traffic of the RdEx command (3rd bar). This again reaffirms that design decisions are part art, part science.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60347</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60347"/>
		<updated>2012-03-21T11:35:01Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MOESI Implementation Complexities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
n 1984, researchers at the University of Illinois developed and published a new, improved cache coherence protocol. This protocol added an &amp;quot;exclusive&amp;quot; state to the MSI protocol. The new state improves performance by reducing bus traffic when data is being used by a single processor. For more information on MESI, here is an excerpt of the original article:	&lt;br /&gt;
[http://www.deepdyve.com/lp/association-for-computing-machinery/a-low-overhead-coherence-solution-for-multiprocessors-with-private-AqsgSDo8s0 A low-overhead coherence solution for multiprocessors with private cache memories]&lt;br /&gt;
	&lt;br /&gt;
The improved performance comes at the cost of greater implementation complexity. The MESI protocol requires an additional COPIES-EXIST bus line, which is not necessary when using MSI. Transferring data between caches is also more complicated, especially the FlushOpt (a snooped request used to indicate that a cache block has been posted on the bus for another processor). In the worst case, several cache controllers may attempt to flush the same cache block to the bus, only to realize that another controller has already completed the FlushOpt. They will have wasted time and power by reading the cache, trying to access the bus, and then canceling the operation.	&lt;br /&gt;
For more details, see pages 215-220 of the Solihin textbook.&lt;br /&gt;
&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MOESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
Allowing '''dirty sharing''' by implementing an owner state reduces bus traffic between the individual caches and main memory, but comes at the cost of higher complexity. MOESI has two more states than MSI, so the underlying state transition logic is more complex. In addition, MOESI has six bus=side request types, compared with three for MSI (or four, if BusUpgr is used). For more information, see p. 222-228 in the Solihin text.&lt;br /&gt;
&lt;br /&gt;
One complexity problem applying to a number of the protocols deals with invalidation. In newer protocols, individual words may be modified in a cache line, as opposed to the entirety of the line. The other processors will thus have a mostly correct cache line, with only a word difference. This leads to potential complexity, because to 'correct' the error the other processors must transition from shared to invalid, where they then can read the correct word from the bus and place it back into the line, transitioning back into shared. This transition is potentially unnecessary, as the second processor may never access the specific word changed, but it may access other words in the cache line. One potential solution to this is being researched at the present time, advancing the protocols so that a cache line is &amp;quot;not invalidated on the first dirty word, but after the number of dirty words crosses some predetermined value, which is data type and application dependent.&amp;quot; In other words, if the application can possibly have multiple words 'incorrect,' several transitions to and from the invalid state may be avoided.&lt;br /&gt;
Source: http://tab.computer.org/tcca/NEWS/sept96/dsmideas.ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In essence, the solution proposed here is to advance the MOESI protocol with word invalidation and specific treatment of temporal and spatial data, so that the block is not invalidated.&lt;br /&gt;
&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=====MESIF Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic2.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
Simulation results yield somewhat unexpected results with the MESI protocol showing negligible traffic savings over the MSI protocol with BusUpgr. The addition of the Exclusive state is expected to reduce traffic however simulation reveals that there is only a small fraction of E-&amp;gt;M transitions and thus little performance gain by the addition of the E state. This  suggests that a more complex protocol may not lead to substantial savings because  of the link between program structure and protocol. While  additional complexity doesn’t always provide savings, it is evident that the added complexity of the BusUpgr command (2nd bar) reduces traffic of the RdEx command (3rd bar). This again reaffirms that design decisions are part art, part science.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60341</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60341"/>
		<updated>2012-03-21T11:25:38Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MESI Implementation Complexities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
n 1984, researchers at the University of Illinois developed and published a new, improved cache coherence protocol. This protocol added an &amp;quot;exclusive&amp;quot; state to the MSI protocol. The new state improves performance by reducing bus traffic when data is being used by a single processor. For more information on MESI, here is an excerpt of the original article:	&lt;br /&gt;
[http://www.deepdyve.com/lp/association-for-computing-machinery/a-low-overhead-coherence-solution-for-multiprocessors-with-private-AqsgSDo8s0 A low-overhead coherence solution for multiprocessors with private cache memories]&lt;br /&gt;
	&lt;br /&gt;
The improved performance comes at the cost of greater implementation complexity. The MESI protocol requires an additional COPIES-EXIST bus line, which is not necessary when using MSI. Transferring data between caches is also more complicated, especially the FlushOpt (a snooped request used to indicate that a cache block has been posted on the bus for another processor). In the worst case, several cache controllers may attempt to flush the same cache block to the bus, only to realize that another controller has already completed the FlushOpt. They will have wasted time and power by reading the cache, trying to access the bus, and then canceling the operation.	&lt;br /&gt;
For more details, see pages 215-220 of the Solihin textbook.&lt;br /&gt;
&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MOESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=====MESIF Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic2.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
Simulation results yield somewhat unexpected results with the MESI protocol showing negligible traffic savings over the MSI protocol with BusUpgr. The addition of the Exclusive state is expected to reduce traffic however simulation reveals that there is only a small fraction of E-&amp;gt;M transitions and thus little performance gain by the addition of the E state. This  suggests that a more complex protocol may not lead to substantial savings because  of the link between program structure and protocol. While  additional complexity doesn’t always provide savings, it is evident that the added complexity of the BusUpgr command (2nd bar) reduces traffic of the RdEx command (3rd bar). This again reaffirms that design decisions are part art, part science.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60230</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60230"/>
		<updated>2012-03-21T01:35:58Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MESIF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MOESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=====MESIF Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
[[Image:TypeOfMiss.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 6:&amp;lt;/b&amp;gt; Type of Miss [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60229</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60229"/>
		<updated>2012-03-21T01:35:37Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MOESI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MOESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
[[Image:TypeOfMiss.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 6:&amp;lt;/b&amp;gt; Type of Miss [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60228</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60228"/>
		<updated>2012-03-21T01:35:16Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MESI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MESI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
[[Image:TypeOfMiss.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 6:&amp;lt;/b&amp;gt; Type of Miss [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60227</id>
		<title>CSC/ECE 506 Spring 2012/8a cj</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Spring_2012/8a_cj&amp;diff=60227"/>
		<updated>2012-03-21T01:33:36Z</updated>

		<summary type="html">&lt;p&gt;Jdhartle: /* MSI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to bus-based cache coherence in real machines=&lt;br /&gt;
&lt;br /&gt;
Most parallel software in the commercial market relies on the shared-memory&lt;br /&gt;
programming model in which all processors access the same physical address space. The most common multiprocessors today use [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture which use a common bus as the interconnect.  In the case of multicore processors (&amp;quot;chip multiprocessors,&amp;quot; or [http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) the [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] architecture applies to the cores treating them as separate processors. The key problem of shared-memory multiprocessors is providing a consistent view of memory with various cache hierarchies.  This is called '''''[http://en.wikipedia.org/wiki/Cache_coherence cache coherence problem]'''''. It is  critical to  achieve correctness and performance-sensitive design point for supporting the shared-memory model. The cache coherence mechanisms not only govern communication in a shared-memory multiprocessor, but also typically determine how the memory system transfers data between processors, caches, and memory.&lt;br /&gt;
&lt;br /&gt;
[[Image:Busbased SMP.jpg|frame|center|&amp;lt;b&amp;gt;Figure 1:&amp;lt;/b&amp;gt; Typical Bus-Based Processor Model]]&lt;br /&gt;
&lt;br /&gt;
==Summary of Cache Coherence Protocols==&lt;br /&gt;
At any point in logical time, the permissions for a cache block can allow either a single writer or multiple readers. The '''''[http://en.wikipedia.org/wiki/Cache_coherence#Coherency_protocol coherence protocol]''''' ensures the invariants of the states are maintained. The different coherent states used by most of the cache coherent protocols are shown in ''Table 1'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''States'''&lt;br /&gt;
|  '''Access Type'''&lt;br /&gt;
|  '''Invariant'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  read, write&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Owned'''&lt;br /&gt;
|  read&lt;br /&gt;
|  all other caches in I or S state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  read&lt;br /&gt;
|  no other cache in M or E state&lt;br /&gt;
|-&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|  -&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 1:&amp;lt;/b&amp;gt; States Used by the Cache Coherent Protocols&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The first widely adopted approach to cache coherence is snooping on a bus. We will now discuss them in details in the following sections.&lt;br /&gt;
&lt;br /&gt;
===MSI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''', one of the earliest snooping-based cache coherence-protocols, is a three-state write-back '''invalidation protocol'''. It marks the cache line with one of three possible states: '''Modified (M), Shared (S)''', and '''Invalid (I)'''. If a cache line is dirty and the processor has exclusive ownership of it, it is in '''Modified''' state. If the cache line is clean and is shared by more than one processor , it is marked as '''Shared'''. '''Invalid''' means the cache line is either not present or is in invalid state. '''BusRdx''' causes all other processors to invalidate (demote) their copy of the cache line to the '''I''' state. If the cache line is present in the '''M''' state in another cache, it will flush. &lt;br /&gt;
&lt;br /&gt;
The following state transition diagram for MSI protocol explains the working of the protocol:&lt;br /&gt;
&lt;br /&gt;
[[Image:MSIfig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MSI State Diagram]]&lt;br /&gt;
&lt;br /&gt;
=====MSI Implementation Complexities=====&lt;br /&gt;
----&lt;br /&gt;
MSI is the most basic cache coherence protocols, and also the easiest to implement. However, the MSI protocol requires that all state changes occur atomically to ensure cache coherency, and is therefore not recommended for real-world, complex systems.[http://books.google.com/books?id=eqSYY7CRWhoC&amp;amp;pg=PA107&amp;amp;lpg=PA107&amp;amp;dq=msi+cache++implementation&amp;amp;source=bl&amp;amp;ots=V3sO0fSt5a&amp;amp;sig=HmK3ntQ3daI7uTaowAgi7crVgcU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=2CRpT7rkMcWrsQKB8fmvCQ&amp;amp;ved=0CFoQ6AEwBg#v=onepage&amp;amp;q=msi%20cache%20%20implementation&amp;amp;f=true] Adding an exclusive, owner, or forwarding state to the architecture increases the cache coherence design complexity, but greatly improves performance. For this reason, most modern multiprocessors use a variant of MSI (MESI, MOSI, or MOESI). [http://en.wikipedia.org/wiki/MSI_protocol]&lt;br /&gt;
&lt;br /&gt;
===MESI===&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MSI_protocol MSI protocol]''' has a major drawback in that each read-write sequence incurs two bus transactions irrespective of whether the cache line is stored in only one cache or not. This is a huge setback for highly parallel programs that have little data sharing. '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol solves this problem by introducing the E ('''Exclusive''') state to distinguish between a cache line stored in multiple caches and a line stored in a single cache.&lt;br /&gt;
Let us briefly look at how the MESI protocol works. (For a more detailed version readers are referred to Solihin textbook pg. 215)&lt;br /&gt;
&lt;br /&gt;
'''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' coherence protocol marks each cache line in one of the Modified, Exclusive, Shared or Invalid state. &lt;br /&gt;
* '''Invalid''' : The cache line is either not present or is invalid&lt;br /&gt;
* '''Exclusive''' : The cache line is clean and is owned by this core/processor only&lt;br /&gt;
* '''Modified''' :  This implies that the cache line is dirty and the core/processor has  exclusive ownership of the cache line, exclusive of the memory also.&lt;br /&gt;
* '''Shared''' : The cache line is clean and is shared by more than one core/processor&lt;br /&gt;
&lt;br /&gt;
The '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol works as the following: &lt;br /&gt;
A line that is just fetched receives '''E''' or '''S''' state depending on whether it exists in other processors in the system or not. Similarly, a cache line gets the '''M''' state when a processor writes to it. If the line is not in '''E''' or '''M''' state prior to being written to, the cache sends a Bus Upgrade (BusUpgr) signal or as the Intel manuals call it, a “Read-For-Ownership (RFO) request” that ensures that the line exists in the cache and is in the '''I''' state in all other processors on the bus (if any). The table shown below will summarize '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''  &lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 2:&amp;lt;/b&amp;gt; MESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFig.jpg|thumb|400px|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MESI State Diagram]]&lt;br /&gt;
==Five State Cache Coherence Protocols==&lt;br /&gt;
&lt;br /&gt;
===MOESI===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Opteron AMD Opteron] was AMD’s first-generation dual core processor which had two distinct [http://en.wikipedia.org/wiki/Athlon_64 K8 cores] together on a single die. Cache coherence produces bigger problems on such multicore processors. It was necessary to use an appropriate coherence protocol to address this problem. The [http://en.wikipedia.org/wiki/Xeon Intel Xeon], which was the competitive counterpart from Intel to AMD dual core Opteron, used the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol to handle cache coherence. [http://en.wikipedia.org/wiki/MESI_protocol MESI] came with the drawback of using much time and bandwidth in certain situations. &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI] was AMD’s answer to this problem. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] added a fifth state to [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol called the '''owned''' state. [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol addresses the bandwidth problem faced by MESI protocol when processor having invalid data in its cache wants to modify the data.  The processor seeking the data will have to wait for the processor which modified this data to write back to the main memory, which takes time and bandwidth. This drawback is removed in MOESI by allowing dirty sharing.  When the data is held by a processor in the new state '''owned''', it can provide other processors the modified data without writing it to the main memory. This is called '''''dirty sharing'''''. The processor with the data in the '''owned''' state stays responsible to update the main memory later when the cache line is evicted.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/MOESI_protocol MOESI]  has become one of the most popular snoop-based protocols supported in AMD64 architecture.  AMD dual-core Opteron can maintain cache coherence in systems up to 8 processors using this protocol.&lt;br /&gt;
&lt;br /&gt;
The five different states of [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol are:&lt;br /&gt;
* '''Modified (M)''': The most recent copy of the data is present in the cache line. But it is not present in any other processor cache.&lt;br /&gt;
* '''Owned (O)''': The cache line has the most recent correct copy of the data. This can be shared by other processors. The processor in this state for this cache line is responsible to update the correct value in the main memory before it gets evicted.&lt;br /&gt;
* '''Exclusive (E)''': A cache line holds the most recent, correct copy of the data, which is exclusively present on this processor and a copy is present in the main memory.&lt;br /&gt;
* '''Shared (S)''': A cache line in the shared state holds the most recent, correct copy of the data, which may be shared by other processors.&lt;br /&gt;
* '''Invalid (I)''': A cache line does not hold a valid copy of the data.&lt;br /&gt;
&lt;br /&gt;
A detailed explanation of this protocol implementation on AMD processor can be found in the manual [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64-bit core]&lt;br /&gt;
&lt;br /&gt;
The following table summarizes the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''Cache Line State:'''&lt;br /&gt;
|  '''Modified'''&lt;br /&gt;
|  '''Owner''' &lt;br /&gt;
|  '''Exclusive'''&lt;br /&gt;
|  '''Shared'''&lt;br /&gt;
|  '''Invalid'''&lt;br /&gt;
|-&lt;br /&gt;
|  '''This cache line is valid?'''&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  Yes&lt;br /&gt;
|  No&lt;br /&gt;
|-&lt;br /&gt;
|  '''The memory copy is…'''&lt;br /&gt;
|  out of date&lt;br /&gt;
|  out of date&lt;br /&gt;
|  valid&lt;br /&gt;
|  valid&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''Copies exist in caches of other processors?'''&lt;br /&gt;
|  No&lt;br /&gt;
|  No&lt;br /&gt;
|  Yes(out of date values)|  Maybe&lt;br /&gt;
|  Maybe&lt;br /&gt;
|  -&lt;br /&gt;
|-&lt;br /&gt;
|  '''A write to this line'''&lt;br /&gt;
|  does not go to bus&lt;br /&gt;
|  does not go to bus|  does not go to bus&lt;br /&gt;
|  goes to bus and updates cache&lt;br /&gt;
|  goes directly to bus&lt;br /&gt;
|  -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;Table 3:&amp;lt;/b&amp;gt; MOESI Protocol Summary&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
State transition for [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]is as shown below : &lt;br /&gt;
&lt;br /&gt;
[[Image:MOESIfig.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; MOESI State Diagram]]&lt;br /&gt;
===MESIF===&lt;br /&gt;
Intel's solution to the redundant messages sent using the '''MESI''' protocol was the '''[http://en.wikipedia.org/wiki/MESIF_protocol MESIF]''' protocol incorporated in the latest Intel multi-core processors Core i7, and accommodating the point-to-point links used in the [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]. Using the '''MESI''' protocol in this architecture would send many redundant messages between different processors, often with unnecessarily high latency. For example, when a processor requests a cache line that is stored in multiple locations, every location might respond with the data. As the requesting processor only needs a single copy of the data, the system would be wasting the bandwidth. &lt;br /&gt;
As a solution to this problem, an additional state, '''Forward state''', was added by slightly changing the role of the Shared state. Whenever there is a read request, only the cache line in the F state will respond to the request, while all the S state caches remain dormant.  Hence, by designating a single cache line to respond to requests, coherency traffic is substantially reduced when multiple copies of the data exist. This advantage is diagrammatically depicted in figure 5.  Also, on a read request, the F state transitions to the S state. That is, when a cache line in the '''F''' state is copied, the F state migrates to the newer copy, while the older one drops back to the '''S''' state. Moving the new copy to the F state exploits both temporal and spatial locality. Because the newest copy of the cache line is always in the F state, it is very unlikely that the line in the F state will be evicted from the caches. This takes advantage of the temporal locality of the request. The second advantage is that if a particular cache line is in high demand due to spatial locality, the bandwidth used to transmit that data will be spread across several cores.&lt;br /&gt;
All M to S state transitions and E to S state transitions will now be from '''M to F''' and '''E to F'''.  &lt;br /&gt;
The '''F state''' is different from the '''Owned state''' of the MOESI protocol as it is not a unique' copy because a valid copy is stored in memory. Thus, unlike the Owned state of the MOESI protocol, in which the data in the O state is the only valid copy of the data, the data in the F state can be evicted or converted to the S state, if desired. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MESIFVMESI.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Reduced Traffic with MESIF Protocol [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1]]]&lt;br /&gt;
&lt;br /&gt;
=Protocol Performance=&lt;br /&gt;
Protocol performance is strongly linked to the program that is running on the parallel system. This complicates protocol performance evaluation and prevents the designer from definitively choosing the best protocol. This binding of program and protocol makes &amp;quot;Making design decisions in real systems ... part art and part science. The art is the past experience,&lt;br /&gt;
intuition, and aesthetics of the designers, and the science is workload-driven evaluation.&amp;quot; [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false]&lt;br /&gt;
&lt;br /&gt;
While making definitive design decisions for machine designed to run a variety of programs is challenging, the performance of various cache parameters for specific programs can be simulated allowing for the prediction of general trends. Figure 5 shows the performance of the MESI protocol (III) and the standard MSI 3 state protocol (3st). The MSI protocol when BusRdX instead of BusUpgr is used for S -&amp;gt; M transitions is also shown (3st-RdX)&lt;br /&gt;
&lt;br /&gt;
[[Image:ProtocolTraffic.jpg|thumb|upright|center|450px|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Traffic for various protocols [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
[[Image:TypeOfMiss.jpg|thumb|upright|center|800px|&amp;lt;b&amp;gt;Figure 6:&amp;lt;/b&amp;gt; Type of Miss [http://ams.ict.ac.cn/wp-content/uploads/2012/03/Parallel-computer-architecture.pdf]]]&lt;br /&gt;
&lt;br /&gt;
===Performance Enhancement in Five State Protocols===&lt;br /&gt;
&lt;br /&gt;
=Protocol Implementation on Real Machines=&lt;br /&gt;
==Intel==&lt;br /&gt;
===MESI &amp;amp; Intel Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''Pentium Pro''' microprocessor, introduced in 1992 was the '''first''' Intel architecture microprocessor to support symmetric multiprocessing ('''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''') in various multiprocessor configurations. '''[http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP]''' and '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol was the architecture used consistently until the introduction of the 45-nm Hi-k Core micro-architecture in '''Intel's (Nehalem-EP) quad-core x86-64'''. The 45-nm Hi-k Intel Core microarchitecture utilizes a new system of framework called the '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnect]''' which uses point-to-point interconnection technology based on distributed shared memory architecture. It uses a modified version of '''[http://en.wikipedia.org/wiki/MESI_protocol MESI]''' protocol called '''MESIF''', by introducing an additional state, F, the forward state. &lt;br /&gt;
&lt;br /&gt;
The '''Intel architecture''' uses the '''[http://en.wikipedia.org/wiki/MESI_protocol MESI'''] protocol  as the '''basis''' to ensure cache coherence, which is true whether you're on one of the older processors that use a '''common bus''' to communicate or using the new Intel '''[http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath]''' point-to-point interconnection technology.&lt;br /&gt;
&lt;br /&gt;
=== CMP Implementation in Intel Architecture ===&lt;br /&gt;
&lt;br /&gt;
Let us now see how Intel architecture using the [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol progressed from a uniprocessor architecture to a Chip MultiProcessor ([http://en.wikipedia.org/wiki/Multi-core_(computing) CMP]) using the bus as the interconnect. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Uniprocessor Architecture'''&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the structure of the memory cluster in Intel Pentium M processor.&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache1.jpg|frame|center|&amp;lt;b&amp;gt;Figure 5:&amp;lt;/b&amp;gt; Memory Structure of the Pentium M Processor]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this structure we have,&lt;br /&gt;
* A unified on-chip '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L1 cache]''' with the '''processor/core''',&lt;br /&gt;
* A '''Memory/L2 access control unit''', through which all the accesses to the L2 cache, main memory and IO space are made,&lt;br /&gt;
* The second level '''[http://en.wikipedia.org/wiki/CPU_cache#Multi-level_caches L2 cache]''' along with the '''prefetch unit''' and&lt;br /&gt;
* '''[http://en.wikipedia.org/wiki/Front-side_bus Front side bus (FSB)]''', a single shared bi-directional bus through which all the traffic is sent across.These wide buses bring in multiple data bytes at a time. &lt;br /&gt;
&lt;br /&gt;
As Intel explains it, using this structure, the processor requests were first sought in the '''L2 cache''' and only on a '''miss''', were they '''forwarded''' to the main '''memory''' via the front side bus ('''FSB'''). The '''Memory/L2 access control''' unit served as a central point for '''maintaining coherence''' within the core and with the external world. It '''contains''' a '''snoop control unit''' that receives snoop requests from the bus and performs the required operations on each cache (and internal buffers) in parallel. It also handles RFO requests (BusUpgr) and ensures the operation continues only after it guarantees that no other version on the cache line exists in any other cache in the system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CMP Architecture'''&lt;br /&gt;
&lt;br /&gt;
For CMP implementation, Intel chose the bus-based architecture using snoopy protocols vs the '''directory protocol''' because though directory protocol reduces the active power due to reduced snoop activity, it '''increased''' the '''design complexity''' and the '''static power''' due to larger tag arrays. Since Intel has a large market for the processors in the mobility family, directory-based solution was less favorable since battery life mainly depends on static power consumption and less on dynamic power.&lt;br /&gt;
Let us examine how '''CMP''' was implemented in '''Intel Core Duo''', which was one of the first dual-core processor for the budget/entry-level market. &lt;br /&gt;
The general CMP implementation structure of the Intel Core Duo is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:intel_cache2.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; Intel Core Duo CMP Implementation]]&lt;br /&gt;
&lt;br /&gt;
This structure has the following changes when compared to the uniprocessor memory cluster structure. &lt;br /&gt;
* '''L1 cache''' and the '''processor/core''' structure is '''duplicated''' to give 2 cores.&lt;br /&gt;
* The '''Memory/L2 access control''' unit is '''split''' into 2 logical units: '''L2 controller''' and '''bus controller'''. The L2 controller handles all '''requests to the L2''' cache from the core and the snoop requests from the FSB. The '''bus controller''' handles '''data and I/O requests''' to and from the FSB.&lt;br /&gt;
* The '''prefetching''' unit is extended to handle the hardware '''prefetches for each core separately'''.&lt;br /&gt;
* A '''new logical unit''' (represented by the hexagon) was added to maintain '''fairness between the requests''' coming from the different cores and hence balance the requests to L2 and memory.&lt;br /&gt;
&lt;br /&gt;
This new '''partitioned structure''' for the  memory/L2 access control unit '''enhanced''' the '''performance''' while '''reducing power consumption'''. &lt;br /&gt;
For more information on uniprocessor and multiprocessor implementation under the Intel architecture, refer to &lt;br /&gt;
[http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
&lt;br /&gt;
The '''Intel bus architecture''' has been '''evolving''' in order to accommodate the demands of scalability while using the '''same [http://en.wikipedia.org/wiki/MESI_protocol MESI] protocol'''; From using a '''single shared bus''' to '''dual independent buses (DIB)''' doubling the available bandwidth and to the logical conclusion of DIB with the introduction of '''dedicated high-speed interconnects (DHSI)'''. The DHSI-based platforms use four FSBs, one for each processor in the platform. In both DIB and DHSI, the snoop filter was used in the chipset to cache snoop information, thereby significantly reducing the broadcasting needed for the snoop traffic on the buses. With the production of processors based on next generation 45-nm Hi-k Intel Core microarchitecture, the [http://en.wikipedia.org/wiki/Xeon Intel Xeon] processor fabric will transition from a DHSI, with the memory controller in the chipset, to a distributed shared memory architecture using '''Intel [http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect QuickPath Interconnects] using MESIF protocol'''.&lt;br /&gt;
&lt;br /&gt;
==AMD - Advanced Micro Devices Processors==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MOESI &amp;amp; AMD Processors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AMD Opteron memory Architecture===&lt;br /&gt;
&lt;br /&gt;
[[Image:Untitled.jpg|frame|center|&amp;lt;b&amp;gt;Figure 3:&amp;lt;/b&amp;gt; AMD Opteron memory Architecture]]&lt;br /&gt;
&lt;br /&gt;
The AMD processor’s high-performance cache architecture includes an integrated, 64-bit, dual-ported  128-Kbyte split-L1 cache with separate snoop port, multi-level translation lookaside buffers (TLBs), a scalable L2 cache controller with a 72-bit (64-bit data + 8-bit ECC) interface to as much as 8-Mbyte of industry-standard SDR or DDR SRAMs, and an integrated tag for the most cost-effective 512-Kbyte L2 configurations. The AMD Athlon processor’s integrated L1 cache comprises two separate 64-Kbyte, two-way set-associative data and instruction caches.&lt;br /&gt;
&lt;br /&gt;
More information about this can be found in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD 64 bit Architecture Programmers's Manual]&lt;br /&gt;
&lt;br /&gt;
===Special Coherence Considerations in AMD64 architectures===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Instruction prefetching is a technique used to speedup the execution of the program. But in multiprocessors, prefetching comes at the cost of performance. Due to prefetching, the data can be modified in such a way that the memory coherence protocol will not be able to handle the effects. In such situations software must use serializing instructions or cache-invalidation instructions to guarantee subsequent data accesses are coherent. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
An example of this type of a situation is a page-table update followed by accesses to the physical pages referenced by the updated page tables. The physical-memory references for the page tables are different than the physical-memory references for the data. Because of prefetching, there maybe problem with correctness. The following sequence of events shows such a situation when software changes the translation of virtual-page A from physical-page M to physical-page N:&lt;br /&gt;
# The tables that translate virtual-page A to physical-page M are now held only in main memory. The copies in the cache ae invalidated.&lt;br /&gt;
# Page-table entry is changed by the software for virtual-page A in main memory to point to physical page N rather than physical-page M.&lt;br /&gt;
# Data in virtual-page A is accessed.&lt;br /&gt;
&lt;br /&gt;
Software expects the processor to access the data from physical-page N after the update. However, it is possible for the processor to prefetch the data from physical-page M before the page table for virtual page A is updated. Because the physical-memory references are different, the processor does not recognize them as requiring coherence checking and believes it is safe to prefetch the data from virtual-page A, which is translated into a read from physical page M. Similar behavior can occur when instructions are prefetched from beyond the page table update instruction.&lt;br /&gt;
&lt;br /&gt;
In order to prevent errors from occuring, there are special instructions provided by software like INVLPG or MOV CR3 instruction which is executed immediately after the page-table update to ensure that subsequent instruction fetches and data accesses use the correct virtual-page-to-physical-page translation. It is not necessary to perform a [http://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB] invalidation operation preceding the table update.&lt;br /&gt;
&lt;br /&gt;
More information can be found about this in [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
&lt;br /&gt;
===Optimization techniques on MOESI when implemented on AMD Phenom processors===&lt;br /&gt;
&lt;br /&gt;
In real machines, using some optimization techniques on the standard cache coherence protocol used, improves the performance of the machine. For example, [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] family of microprocessors (Family 0×10) which is AMD’s first generation to incorporate 4 distinct cores on a single die. It is the first to have a cache that all the cores share, using the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol with some optimization techniques incorporated. &lt;br /&gt;
&lt;br /&gt;
It focuses on a small subset of compute problems which behave like Producer and Consumer programs. In such a computing problem, a thread of a program running on a single core produces data, which is consumed by a thread that is running on a separate core. With such programs, it is desirable to get the two distinct cores to communicate through the shared cache, to avoid round trips to/from main memory. The '''MOESI''' protocol that the [http://en.wikipedia.org/wiki/AMD_Phenom AMD Phenom] cache uses for cache coherence can also limit bandwidth. Hence by keeping the cache line in the '''M''' state for such computing problems, we can achieve better performance.&lt;br /&gt;
&lt;br /&gt;
When the producer thread , writes a new entry, it allocates cache-lines in the '''M''' state. Eventually, these M-marked cache lines will start to fill the L3 cache. When the consumer reads the cache line, the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI] protocol changes the state of the cache line to the '''O''' state in the L3 cache and pulls down a '''shared (S)''' copy for its own use. Now, the producer thread circles the ring buffer to arrive back to the same cache line it had previously written. However, when the producer attempts to write new data to the owned (marked '''‘O’''') cache line, it finds that it cannot, since a cache line in the '''O''' state by the previous consumer read does not have sufficient permission for a write request (in the [http://en.wikipedia.org/wiki/MOESI_protocol MOESI]). To maintain coherence, the memory controller must initiate probes in the other caches (to handle any other S copies that may exist). This will slow down the process.&lt;br /&gt;
&lt;br /&gt;
Thus, it is preferable to keep the cache line in the '''M''' state in the L3 cache. In such a situation, when the producer comes back around the ring buffer, it finds the previously written cache line still in the '''M''' state, to which it is safe to write without coherence concerns. Thus better performance can be achieved by such optimization techniques to standard protocols when implemented in real machines.&lt;br /&gt;
&lt;br /&gt;
You can find more information on how this is implemented and various other ways of optimizations in this manual [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors].&lt;br /&gt;
=References=&lt;br /&gt;
# [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4606981&amp;amp;tag=1 The research of the inclusive cache used in multi-core processor]&lt;br /&gt;
# [http://books.google.com/books?id=MHfHC4Wf3K0C&amp;amp;pg=PA620&amp;amp;lpg=PA620&amp;amp;dq=Culler+and+Singh+1998&amp;amp;source=bl&amp;amp;ots=1KHO-a3JXQ&amp;amp;sig=ZEZ0Xjer6Y4IJJgm6GXjnerYnkI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ko9oT4LfH4aPsQKItY2wCQ&amp;amp;ved=0CCsQ6AEwAQ#v=onepage&amp;amp;q=Culler%20and%20Singh%201998&amp;amp;f=false Parallel Computer Architecture: A Hardware/Software Approach]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Cache_coherence Cache coherence]&lt;br /&gt;
# [http://www.intel.com/technology/quickpath/introduction.pdf Introduction to QuickPath Interconnect]&lt;br /&gt;
# [http://www.intel.com/technology/itj/2006/volume10issue02/art02_CMP_Implementation/p03_implementation.htm CMP Implementation in Intel Core Duo Processors]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Symmetric_multiprocessing Common System Interface in Intel Processors]&lt;br /&gt;
# [http://www.zak.ict.pwr.wroc.pl/nikodem/ak_materialy/Cache%20consistency%20&amp;amp;%20MESI.pdf Cache consistency with MESI on Intel processor]&lt;br /&gt;
# [http://techreport.com/articles.x/8236/2 AMD dual core Architecture]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf AMD64 Architecture Programmer's manual]&lt;br /&gt;
# [http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf Software Optimization guide for AMD 10h Processors]&lt;br /&gt;
# [http://www.chip-architect.com/news/2003_09_21_Detailed_Architecture_of_AMDs_64bit_Core.html Architecture of AMD 64 bit core]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=4913 Silicon Graphics Computer Systems]&lt;br /&gt;
# [http://www.freepatentsonline.com/5283886.html Three state invalidation protocols]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=1499317&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=83027384&amp;amp;CFTOKEN=95680533 Synapse tightly coupled multiprocessors: a new approach to solve old problems]&lt;br /&gt;
# [http://portal.acm.org/citation.cfm?id=6514Cache Coherence protocols: evaluation using a multiprocessor simulation model]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Dragon_protocol Dragon Protocol]&lt;br /&gt;
# [http://en.wikipedia.org/wiki/Xerox_Dragon Xerox Dragon]&lt;br /&gt;
# [http://thanaseto.110mb.com/courses/CSD-527-report-engl.pdf Coherence Protocols]&lt;br /&gt;
# [http://ieeexplore.ieee.org.www.lib.ncsu.edu:2048/stamp/stamp.jsp?tp=&amp;amp;arnumber=289691 XDBus]&lt;br /&gt;
# [http://www.ece.wisc.edu/~wddd/2002/final/ekman.pdf Evaluation of Snoop-Energy Reduction Techniques for Chip-Multiprocessors]&lt;br /&gt;
# [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.79.7463&amp;amp;rep=rep1&amp;amp;type=pdf Power Efficient Cache Coherence]&lt;br /&gt;
# [http://www.realworldtech.com/page.cfm?ArticleID=RWT082807020032&amp;amp;p=5 The Common System Interface: Intel's Future Interconnect]&lt;br /&gt;
# [http://support.amd.com/us/Processor_TechDocs/24593.pdf AMD64 Architecture Programmer's Manual Vol 2 'System Programming']&lt;br /&gt;
# [http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&amp;amp;arnumber=5375423&amp;amp;queryText%3D%28%28mesi%29+AND+moesi%29%26openedRefinements%3D*%26matchBoolean%3Dtrue%26searchField%3DSearch+All+Text 'Comparing cache architectures and coherency protocols on x86-64 multicore SMP systems' by Hackenberg, D., Molka, D. and Nagel, W.E.]&lt;/div&gt;</summary>
		<author><name>Jdhartle</name></author>
	</entry>
</feed>