<?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=Jfswaffo</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=Jfswaffo"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jfswaffo"/>
	<updated>2026-07-06T09:44:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_aY3w&amp;diff=5922</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_aY3w&amp;diff=5922"/>
		<updated>2007-10-19T01:15:11Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: CSC/ECE 506 Fall 2007/wiki2 aY3w moved to CSC/ECE 506 Fall 2007/wiki3 2 aY3w: professor's instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 506 Fall 2007/wiki3 2 aY3w]]&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5921</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5921"/>
		<updated>2007-10-19T01:15:11Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: CSC/ECE 506 Fall 2007/wiki2 aY3w moved to CSC/ECE 506 Fall 2007/wiki3 2 aY3w: professor's instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on some possible race conditions in the final section.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The caches themselves follow the MESI protocol, and thus are in one of those four states.  Each block of cached data has a list of sharers, or processors that have that block cached.  This list is represented as a doubly linked list that is distributed among the sharers themselves.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to the MESI state, each cache maintains a &amp;quot;next&amp;quot; pointer and a &amp;quot;previous&amp;quot; pointer.  Each pointer points to another node in the list of sharers of the cached block of data.  The head of the list will have a previous pointer value of 0, and the tail of the list will have a next pointer value of 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each block of data has a &amp;quot;home directory,&amp;quot; located in some (possibly remote) memory location. The home directory is normally computable by the memory address of the block of data.  If the block is cached, the home directory will contain the head pointer of the list of sharers.  Additionally, the home directory will contain state information for the block.&lt;br /&gt;
As previously stated, in the SSCI protocol the memory directory is in one of three states.  They are:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
In this section we give a very brief overview of the SCI protocol.  This is not meant to be a complete description, but to give enough information to illustrate some key differences in the SSCI and SCI protocols.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The head of the list of sharers can be thought of as the owner.  Only the head can modify the cached data.  If some other sharer wants to modify the data, it must first rollout of the list and reattach as the head.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its previous pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/mi/&amp;amp;toc=comp/mags/mi/1992/01/m1toc.xml&amp;amp;DOI=10.1109/40.124376&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.hcs.ufl.edu/SCI_Internal/&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5837</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5837"/>
		<updated>2007-10-17T21:22:23Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on some possible race conditions in the final section.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The caches themselves follow the MESI protocol, and thus are in one of those four states.  Each block of cached data has a list of sharers, or processors that have that block cached.  This list is represented as a doubly linked list that is distributed among the sharers themselves.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to the MESI state, each cache maintains a &amp;quot;next&amp;quot; pointer and a &amp;quot;previous&amp;quot; pointer.  Each pointer points to another node in the list of sharers of the cached block of data.  The head of the list will have a previous pointer value of 0, and the tail of the list will have a next pointer value of 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each block of data has a &amp;quot;home directory,&amp;quot; located in some (possibly remote) memory location. The home directory is normally computable by the memory address of the block of data.  If the block is cached, the home directory will contain the head pointer of the list of sharers.  Additionally, the home directory will contain state information for the block.&lt;br /&gt;
As previously stated, in the SSCI protocol the memory directory is in one of three states.  They are:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
In this section we give a very brief overview of the SCI protocol.  This is not meant to be a complete description, but to give enough information to illustrate some key differences in the SSCI and SCI protocols.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The head of the list of sharers can be thought of as the owner.  Only the head can modify the cached data.  If some other sharer wants to modify the data, it must first rollout of the list and reattach as the head.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its previous pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/mi/&amp;amp;toc=comp/mags/mi/1992/01/m1toc.xml&amp;amp;DOI=10.1109/40.124376&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.hcs.ufl.edu/SCI_Internal/&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5836</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5836"/>
		<updated>2007-10-17T21:20:29Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on some possible race conditions in the final section.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The caches themselves follow the MESI protocol, and thus are in one of those four states.  Each block of cached data has a list of sharers, or processors that have that block cached.  This list is represented as a doubly linked list that is distributed among the sharers themselves.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to the MESI state, each cache maintains a &amp;quot;next&amp;quot; pointer and a &amp;quot;previous&amp;quot; pointer.  Each pointer points to another node in the list of sharers of the cached block of data.  The head of the list will have a previous pointer value of 0, and the tail of the list will have a next pointer value of 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each block of data has a &amp;quot;home directory,&amp;quot; located in some (possibly remote) memory location. The home directory is normally computable by the memory address of the block of data.  If the block is cached, the home directory will contain the head pointer of the list of sharers.  Additionally, the home directory will contain state information for the block.&lt;br /&gt;
As previously stated, in the SSCI protocol the memory directory is in one of three states.  They are:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
In this section we give a very brief overview of the SCI protocol.  This is not meant to be a complete description, but to give enough information to illustrate some key differences in the SSCI and SCI protocols.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The head of the list of sharers can be thought of as the owner.  Only the head can modify the cached data.  If some other sharer wants to modify the data, it must first rollout of the list and reattach as the head.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/mi/&amp;amp;toc=comp/mags/mi/1992/01/m1toc.xml&amp;amp;DOI=10.1109/40.124376&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.hcs.ufl.edu/SCI_Internal/&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5834</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5834"/>
		<updated>2007-10-17T21:19:01Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on some possible race conditions in the final section.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The caches themselves follow the MESI protocol, and thus are in one of those four states.  Each block of cached data has a list of sharers, or processors that have that block cached.  This list is represented as a doubly linked list that is distributed among the sharers themselves.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to the MESI state, each cache maintains a &amp;quot;next&amp;quot; pointer and a &amp;quot;previous&amp;quot; pointer.  Each pointer points to another node in the list of sharers of the cached block of data.  The head of the list will have a previous pointer value of 0, and the tail of the list will have a next pointer value of 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each block of data has a &amp;quot;home directory,&amp;quot; located in some (possibly remote) memory location. The home directory is normally computable by the memory address of the block of data.  If the block is cached, the home directory will contain the head pointer of the list of sharers.  Additionally, the home directory will contain state information for the block.&lt;br /&gt;
As previously stated, in the SSCI protocol the memory directory is in one of three states.  They are:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
In this section we give a very brief overview of the SCI protocol.  This is not meant to be a complete description, but to give enough information to illustrate some key differences in the SSCI and SCI protocols.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The head of the list of sharers can be thought of as the owner.  Only the head can modify the cached data.  If some other sharer wants to modify the data, it must first rollout of the list and reattach as the head.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/mi/&amp;amp;toc=comp/mags/mi/1992/01/m1toc.xml&amp;amp;DOI=10.1109/40.124376&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.hcs.ufl.edu/SCI_Internal/&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5820</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5820"/>
		<updated>2007-10-17T20:52:46Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on some possible race conditions in the final section.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The caches themselves follow the MESI protocol, and thus are in one of those four states.  Each block of cached data has a list of sharers, or processors that have that block cached.  This list is represented as a doubly linked list that is distributed among the sharers themselves.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to the MESI state, each cache maintains a &amp;quot;next&amp;quot; pointer and a &amp;quot;previous&amp;quot; pointer.  Each pointer points to another node in the list of sharers of the cached block of data.  The head of the list will have a previous pointer value of 0, and the tail of the list will have a next pointer value of 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each block of data has a &amp;quot;home directory,&amp;quot; located in some (possibly remote) memory location. The home directory is normally computable by the memory address of the block of data.  If the block is cached, the home directory will contain the head pointer of the list of sharers.  Additionally, the home directory will contain state information for the block.&lt;br /&gt;
As previously stated, in the SSCI protocol the memory directory is in one of three states.  They are:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
In this section we give a very brief overview of the SCI protocol.  This is not meant to be a complete description, but to give enough information to illustrate some key differences in the SSCI and SCI protocols.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The head of the list of sharers can be thought of as the owner.  Only the head can modify the cached data.  If some other sharer wants to modify the data, it must first rollout of the list and reattach as the head.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/mi/&amp;amp;toc=comp/mags/mi/1992/01/m1toc.xml&amp;amp;DOI=10.1109/40.124376&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.hcs.ufl.edu/SCI_Internal/&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5784</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5784"/>
		<updated>2007-10-17T17:41:04Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5783</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5783"/>
		<updated>2007-10-17T17:40:37Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5780</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5780"/>
		<updated>2007-10-17T17:35:21Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 both read miss.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 set aside space for the line to be read in (possibly by evicting another line).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 and P2 concurrently set the state of that line to a &amp;quot;pending&amp;quot; state, and issue a read request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.  Since the block is not cached anywhere, the memory directory will be in state HOME.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to FRESH, its head pointer to 1, and replies to P1 with the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives P2's READ.  Since the home node is in state FRESH, its data is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 remains in a pending state and sends a request to P1 to become the new head of the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the request from P2, but is since it hasn't yet received the reply from the home directory it is still in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 &amp;quot;extends&amp;quot; the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the reply from the home directory and becomes the &amp;quot;true&amp;quot; head of the list.  Even though P2 is ahead of P1 in the list, it's not the &amp;quot;true head,&amp;quot; but a part of the &amp;quot;pending list.&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 passes the &amp;quot;true head&amp;quot; status on to P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By maintaining a &amp;quot;pending list&amp;quot; and a &amp;quot;true head&amp;quot;, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5779</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5779"/>
		<updated>2007-10-17T17:25:22Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P2 sends a READ request to the home node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sets its state to EM, its head pointer to 1 (P1), and sends the data to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node receives the request from P2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The home node sends a ReplyID to P2, informing it that P1 &amp;quot;owns&amp;quot; the data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 receives the ReplyID and sends WB+Int+UpdPtr to P1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P1 receives the message from P2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P1 hasn't yet received the ReplyD from the home directory!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that network messages are received &amp;quot;out of order,&amp;quot; causing race conditions such as the one above.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P1 and P2 both read miss.  Both set aside space for the line to be read in, set the state of that line to a &amp;quot;pending&amp;quot; state, and issue the read request to the home node.  When the home node receives the request from P1, the memory directory will be in state HOME (since the block is not cached anywhere).  It will set its state to FRESH, set its head pointer to 1, and reply with the data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now P2's request is processed by the home node.  Since the home node is in state FRESH, its data is up to date.  It sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.  So, P2 remains in a pending state and sends a request to P1 to become the new head of the list.  Recall that in our scenario, due to network latency, P1 still hasn't received the initial response from the home directory; P1 is still in a pending state.  Under the SCI protocol, if a processor is in a pending state when it receives a list operation request (such as becoming the new head of the list), it will extend the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.  When P1 completes its operation and becomes the &amp;quot;true&amp;quot; head of the list, it can then pass the &amp;quot;true head&amp;quot; status on to P2.  In this way, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge their lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR! P4 does not have the line cached!&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.  In the SCI protocol, a node that wants to &amp;quot;roll out&amp;quot; is put in a pending state until it receives acknowledgment from both the next and previous nodes.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 sends UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deadlock!  Neither P3 nor P4 will respond to the other while in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resolution: the node nearer to the tail of the list (P4) is given priority.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 must wait until P4 completes its rollout, giving a shared list of P1-P2-P3-P5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 rolls out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, pending states are necessary to preserve a correct representation of the shared list, but even then we must deal with deadlock resolution.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5756</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5756"/>
		<updated>2007-10-17T16:17:59Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.  Suppose that P1 and P2 simultaneously send read request to the home node, and the home node processes the request from P1 first.  Now, after the home node has updated its state to &amp;quot;EM&amp;quot; and its head pointer to 1, but before P1 has received the ReplyD, the home node processes the request from P2.  The home node will set its state to S, update its head pointer to 2 and send a ReplyID(H-&amp;gt;P2) telling P2 that P1 has the data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that P2 will receive the ReplyID and send a WB+Int+UpdPtr(P2-&amp;gt;P1), and that P1 will receive that message before it even received the data from the home node! So, because P1's read is not atomic, we have a race condition.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P1 and P2 both read miss.  Both set aside space for the line to be read in, set the state of that line to a &amp;quot;pending&amp;quot; state, and issue the read request to the home node.  When the home node receives the request from P1, the memory directory will be in state HOME (since the block is not cached anywhere).  It will set its state to FRESH, set its head pointer to 1, and reply with the data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now P2's request is processed by the home node.  Since the home node is in state FRESH, its data is up to date.  It sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.  So, P2 remains in a pending state and sends a request to P1 to become the new head of the list.  Recall that in our scenario, due to network latency, P1 still hasn't received the initial response from the home directory; P1 is still in a pending state.  Under the SCI protocol, if a processor is in a pending state when it receives a list operation request (such as becoming the new head of the list), it will extend the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.  When P1 completes its operation and becomes the &amp;quot;true&amp;quot; head of the list, it can then pass the &amp;quot;true head&amp;quot; status on to P2.  In this way, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example 2 ====&lt;br /&gt;
&lt;br /&gt;
Suppose some block of data is being shared among several caches.  Our linked list of sharers is P1-P2-P3-P4-P5. P3 needs to purge the line containing that block of data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the SSCI protocol, P3 will send an UpdPtr message to the processors represented by the previous and next pointers (P2 and P4 respectively).  P2 will set its next pointer to P4, and P4 will set its next pointer to P2.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if P3 and P4 concurrently purge the lines of shared data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 send UpdPtr(P3-&amp;gt;P2) and UpdPtr(P3-&amp;gt;P4) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Concurrently, P4 sends UpdPtr(P4-&amp;gt;P3) and UpdPtr(P4-&amp;gt;P5) and purges its data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P2 received the UpdPtr from P3 and sets its &amp;quot;next&amp;quot; pointer to P4&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Since P4 has already purged and is no longer in the list of sharers, we have a race condition.&amp;lt;br&amp;gt;&lt;br /&gt;
Now let's examine the same scenario under the SCI protocol.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P3 and P4 both put themselves in a pending state.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5753</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5753"/>
		<updated>2007-10-17T15:29:39Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
==== Example 1 ====&lt;br /&gt;
Suppose some processor, say P1, issues a read request and misses on some block that is not cached by any processor. So, the block will have to be fetched from main memory (or possibly some remote cache), and the line will be put into P1's local cache.  Space will have to be allocated in P1's cache, usually by evicting some other line.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the SSCI protocol, P1 will send a READ message to the home directory.  The home directory will reply with the data and set its state to EM, and its head pointer to 1.  Upon receipt, P1 will put the block in the allocated line, set its state to E (from the MESI protocol), and its next/previous pointers to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consider what might happen if two processors both read miss concurrently.  Suppose that P1 and P2 simultaneously send read request to the home node, and the home node processes the request from P1 first.  Now, after the home node has updated its state to &amp;quot;EM&amp;quot; and its head pointer to 1, but before P1 has received the ReplyD, the home node processes the request from P2.  The home node will set its state to S, update its head pointer to 2 and send a ReplyID(H-&amp;gt;P2) telling P2 that P1 has the data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Due to network latency, it's possible that P2 will receive the ReplyID and send a WB+Int+UpdPtr(P2-&amp;gt;P1), and that P1 will receive that message before it even received the data from the home node! So, because P1's read is not atomic, we have a race condition.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now let's consider the same scenario in SCI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P1 and P2 both read miss.  Both set aside space for the line to be read in, set the state of that line to a &amp;quot;pending&amp;quot; state, and issue the read request to the home node.  When the home node receives the request from P1, the memory directory will be in state HOME (since the block is not cached anywhere).  It will set its state to FRESH, set its head pointer to 1, and reply with the data.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now P2's request is processed by the home node.  Since the home node is in state FRESH, its data is up to date.  It sets its head pointer to 2 and replies to P2 with the data, and the &amp;quot;old&amp;quot; head pointer (P1).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P2 receives the data, but the action is not complete until it receives &amp;quot;permission&amp;quot; from P1 to become the new head of the list.  So, P2 remains in a pending state and sends a request to P1 to become the new head of the list.  Recall that in our scenario, due to network latency, P1 still hasn't received the initial response from the home directory; P1 is still in a pending state.  Under the SCI protocol, if a processor is in a pending state when it receives a list operation request (such as becoming the new head of the list), it will extend the pending list backwards.  That is, P2 will be put at the head of the list, but in a &amp;quot;pending&amp;quot; state.  When P1 completes its operation and becomes the &amp;quot;true&amp;quot; head of the list, it can then pass the &amp;quot;true head&amp;quot; status on to P2.  In this way, read requests are atomic and we avoid the race condition sufferred under the SSCI protocol (albeit by adding more complexity).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5752</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5752"/>
		<updated>2007-10-17T14:14:51Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: /* A Brief Overview of the SCI Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== List Operations ====&lt;br /&gt;
SCI defines three primitive list operations for shared lists:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;List construction - adding a new node to the head of the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rollout - removing a node from the sharing list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invalidation - invalidate all other sharers.  Can only be performed by the head node.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5751</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5751"/>
		<updated>2007-10-17T14:00:26Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: /* Cache States */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These two parts together describe the cache state, e.g. FRESH-ONLY or MID-VALID.&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5750</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 2 aY3w</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_2_aY3w&amp;diff=5750"/>
		<updated>2007-10-17T13:48:54Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SCI. The IEEE Scalable Coherent Interface is a superset of the SSCI protocol we have been considering in class. A lot has been written about it, but it is still difficult to comprehend. Using SSCI as a starting point, explain why additional states are necessary, and give (or cite) examples that demonstrate how they work. Ideally, this would still be an overview of the working of the protocol, referencing more detailed documentation on the Web.&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SSCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
The Simple Scalable Coherence Interface (SSCI) protocol is a simplified version of the SCI protocol.  While the SCI protocol has 29 stable states and many pending states, the SSCI protocol has only 3 states.  Consequently, many race conditions are possible.  Here we give a brief overview of the SSCI protocol, and elaborate on the possible race conditions in the final section.&lt;br /&gt;
&lt;br /&gt;
As previously states, in the SSCI protocol the memory directory is in one of three states.  They are:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UNOWNED - the block is unowned by any cache.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SHARED - the block is owned by multiple caches.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXCLUSIVE/MODIFIED - the (possibly dirty) block is owned by a single cache.  Main memory is possibly out of date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== A Brief Overview of the SCI Protocol ===&lt;br /&gt;
&lt;br /&gt;
==== Memory Directory States ====&lt;br /&gt;
Similar to the SSCI protocol, in SCI the memory directory is one of three states:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HOME - no remote cache contains a copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - one of more remote caches may have a read-only copy of the block.  Main memory is up to date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GONE - the cache at the head of the sharing list contains an exclusive (possibly dirty) copy of the block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Cache States ====&lt;br /&gt;
Additionally, each cache has a state, either stable or pending.  Stable states have two parts:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Where the cache entry is located in the sharing list for that block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ONLY - singleton list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HEAD - head of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MID - not head or tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TAIL - tail of sharing list of more than one node&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;State of the cached block&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DIRTY - modified and writable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAN - unmodified and writable, same contents as memory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FRESH - data is readable and writable, but memory must be informed before memory is written&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COPY - unmodified and readable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many others&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Why Additional States are Needed ===&lt;br /&gt;
&lt;br /&gt;
The principle difference between SCI and SSCI is that SCI provides mechanisms for '''resolving race conditions''' and '''preserving serialization'''.  &lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
http://www.scizzl.com/WhatIsSCI.html&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.lrr.in.tum.de/~gerndt/home/Teaching/scalable_shared_memory_systems/Kapitel8.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3267</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3267"/>
		<updated>2007-09-10T20:45:20Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Section 1.1.1, first half: Scientific/engineering application trends. What characterizes present-day applications? How much memory, processor time, etc.? How high is the speedup?'' &lt;br /&gt;
&lt;br /&gt;
== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems ''require more memory and faster processing capabilities''.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
&lt;br /&gt;
=== Architecture Evolution ===&lt;br /&gt;
According the the U.S. Army Research Laboratory, there have been five generations of architectures in the realm of scientific computing .  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present) [http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272].&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems [http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html]. Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.   [http://en.wikipedia.org/wiki/Tony_Hey Tony Hey], a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores [http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM].&lt;br /&gt;
&lt;br /&gt;
=== Cluster and Grid Computing ===&lt;br /&gt;
There have also been strong trends towards [http://en.wikipedia.org/wiki/Cluster_computing cluster] and [http://en.wikipedia.org/wiki/Grid_computing grid] computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet [http://en.wikipedia.org/wiki/Cluster_computing].  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
=== Why it is This Way ===&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
=== Supercomputers: faster than ever ===&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the [http://en.wikipedia.org/wiki/Linpack Linpack Benchmark], is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at [http://www.top500.org Top500.org].&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
=== Multiprocessor Capabilities ===&lt;br /&gt;
An increasing number of scientific/engineering applications, such as Mathematica 6 by Wolfram Research, are becoming '''multiprocessor capable'''.&lt;br /&gt;
While Mathematica does not ''require'' multiple processors, it does benefit from them, particularly when performing long running linear algebra equations or when dealing with machine-precision real numbers.  Mathematica requires a significant amount of RAM (at least, from the average personal computer) - at least 512mb.  Wolfram does offer a  [http://www.wolfram.com/products/applications/parallel parallel computing toolkit] that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see [http://www.wolfram.com/products/gridmathematica/ http://www.wolfram.com/products/gridmathematica/].&lt;br /&gt;
&lt;br /&gt;
=== Virtualization ===&lt;br /&gt;
There is a trend in HPC towards [http://en.wikipedia.org/wiki/Virtualization '''virtualization'''].  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose [http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html].&lt;br /&gt;
&lt;br /&gt;
=== Visualization ===&lt;br /&gt;
Another trend that continues today is the [http://en.wikipedia.org/wiki/Scientific_visualization '''visualization'''] of structured, complex data.  Visualization often make complex concepts easier to understand.  [http://en.wikipedia.org/wiki/Medical_imaging Medical imaging] allows doctors to visualize internal organs without surgery. There are an almost endless number of domains which use data visualization, such as [http://en.wikipedia.org/wiki/Molecular_geometry molecular geometry], [http://en.wikipedia.org/wiki/Weather_forecasting weather forecasting], [http://en.wikipedia.org/wiki/Fluid_dynamics fluid dynamics], and [http://en.wikipedia.org/wiki/Earth_sciences earth sciences].&lt;br /&gt;
&lt;br /&gt;
Visualization is a memory intensive process.  How much so depends on the data set being rendered, but most modern PCs are now capable of running applications with complex visualization capabilities.  Several products, such as those from [http://www.avs.com/index_nf.html Advanced Visual Systems], offer software development kits to aid developers in incorporating visualization into their applications.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements/Utilization ===&lt;br /&gt;
Generalizing from these examples, modern day scientific/engineering applications are becoming increasingly more capable and more demanding of system resources (RAM and CPU).  However, many are targeted for consumer hardware platforms.  Many applications are now multiprocessor capable.  In the best case, the speedup obtained from having multiple processors is near linear, but normally the speedup is somewhat less, depending on how well the problem parallelizes, how well the program is written, and the communication latency.&lt;br /&gt;
&lt;br /&gt;
== Applications for HPC ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
=== Biology ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Human_genome_project Human Genome Project (HGP)].  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  [http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe This paper] &lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. [http://www.unisci.com/stories/20021/0204026.htm]&lt;br /&gt;
&lt;br /&gt;
=== Space Exploration ===&lt;br /&gt;
[http://www.seti.org Search for Extraterrestrial Intelligence (SETI)].  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
=== Weather Forecasting ===&lt;br /&gt;
Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago [http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html].&lt;br /&gt;
&lt;br /&gt;
=== Game Playing===&lt;br /&gt;
Checkers was solved by the program [http://www.cs.ualberta.ca/~chinook/project/ Chinook] in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of [http://www.cs.ualberta.ca/~chinook/publications/research.html research publications] have emerged from the Chinook project, including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3266</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3266"/>
		<updated>2007-09-10T20:40:20Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Section 1.1.1, first half: Scientific/engineering application trends. What characterizes present-day applications? How much memory, processor time, etc.? How high is the speedup?'' &lt;br /&gt;
&lt;br /&gt;
== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems ''require more memory and faster processing capabilities''.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory, there have been five generations of architectures in the realm of scientific computing .  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present) [http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272].&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems [http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html]. Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.   [http://en.wikipedia.org/wiki/Tony_Hey Tony Hey], a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores [http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM].&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards [http://en.wikipedia.org/wiki/Cluster_computing cluster] and [http://en.wikipedia.org/wiki/Grid_computing grid] computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet [http://en.wikipedia.org/wiki/Cluster_computing].  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the [http://en.wikipedia.org/wiki/Linpack Linpack Benchmark], is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at [http://www.top500.org Top500.org].&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
=== Multiprocessor Capabilities ===&lt;br /&gt;
An increasing number of scientific/engineering applications, such as Mathematica 6 by Wolfram Research, are becoming '''multiprocessor capable'''.&lt;br /&gt;
While Mathematica does not ''require'' multiple processors, it does benefit from them, particularly when performing long running linear algebra equations or when dealing with machine-precision real numbers.  Mathematica requires a significant amount of RAM (at least, from the average personal computer) - at least 512mb.  Wolfram does offer a  [http://www.wolfram.com/products/applications/parallel parallel computing toolkit] that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see [http://www.wolfram.com/products/gridmathematica/ http://www.wolfram.com/products/gridmathematica/].&lt;br /&gt;
&lt;br /&gt;
=== Virtualization ===&lt;br /&gt;
There is a trend in HPC towards [http://en.wikipedia.org/wiki/Virtualization '''virtualization'''].  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose [http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html].&lt;br /&gt;
&lt;br /&gt;
=== Visualization ===&lt;br /&gt;
Another trend that continues today is the [http://en.wikipedia.org/wiki/Scientific_visualization '''visualization'''] of structured, complex data.  Visualization often make complex concepts easier to understand.  [http://en.wikipedia.org/wiki/Medical_imaging Medical imaging] allows doctors to visualize internal organs without surgery. There are an almost endless number of domains which use data visualization, such as [http://en.wikipedia.org/wiki/Molecular_geometry molecular geometry], [http://en.wikipedia.org/wiki/Weather_forecasting weather forecasting], [http://en.wikipedia.org/wiki/Fluid_dynamics fluid dynamics], and [http://en.wikipedia.org/wiki/Earth_sciences earth sciences].&lt;br /&gt;
&lt;br /&gt;
Visualization is a memory intensive process.  How much so depends on the data set being rendered, but most modern PCs are now capable of running applications with complex visualization capabilities.  Several products, such as those from [http://www.avs.com/index_nf.html Advanced Visual Systems], offer software development kits to aid developers in incorporating visualization into their applications.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements/Utilization ===&lt;br /&gt;
Generalizing from these examples, modern day scientific/engineering applications are becoming increasingly more capable and more demanding of system resources (RAM and CPU).  However, many are targeted for consumer hardware platforms.  Many applications are now multiprocessor capable.  In the best case, the speedup obtained from having multiple processors is near linear, but normally the speedup is somewhat less, depending on how well the problem parallelizes, how well the program is written, and the communication latency.&lt;br /&gt;
&lt;br /&gt;
== Applications for HPC ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
=== Biology ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Human_genome_project Human Genome Project (HGP)].  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  [http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe This paper] &lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. [http://www.unisci.com/stories/20021/0204026.htm]&lt;br /&gt;
&lt;br /&gt;
=== Space Exploration ===&lt;br /&gt;
[http://www.seti.org Search for Extraterrestrial Intelligence (SETI)].  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
=== Weather Forecasting ===&lt;br /&gt;
Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago [http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html].&lt;br /&gt;
&lt;br /&gt;
=== Game Playing===&lt;br /&gt;
Checkers was solved by the program [http://www.cs.ualberta.ca/~chinook/project/ Chinook] in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of [http://www.cs.ualberta.ca/~chinook/publications/research.html research publications] have emerged from the Chinook project, including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3265</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3265"/>
		<updated>2007-09-10T20:37:22Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Section 1.1.1, first half: Scientific/engineering application trends. What characterizes present-day applications? How much memory, processor time, etc.? How high is the speedup?'' &lt;br /&gt;
&lt;br /&gt;
== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory, there have been five generations of architectures in the realm of scientific computing .  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present) [http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272].&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems [http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html]. Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.   [http://en.wikipedia.org/wiki/Tony_Hey Tony Hey], a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores [http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM].&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards [http://en.wikipedia.org/wiki/Cluster_computing cluster] and [http://en.wikipedia.org/wiki/Grid_computing grid] computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet [http://en.wikipedia.org/wiki/Cluster_computing].  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the [http://en.wikipedia.org/wiki/Linpack Linpack Benchmark], is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at [http://www.top500.org Top500.org].&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
=== Multiprocessor Capabilities ===&lt;br /&gt;
An increasing number of scientific/engineering applications, such as Mathematica 6 by Wolfram Research, are becoming '''multiprocessor capable'''.&lt;br /&gt;
While Mathematica does not ''require'' multiple processors, it does benefit from them, particularly when performing long running linear algebra equations or when dealing with machine-precision real numbers.  Mathematica requires a significant amount of RAM (at least, from the average personal computer) - at least 512mb.  Wolfram does offer a  [http://www.wolfram.com/products/applications/parallel parallel computing toolkit] that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see [http://www.wolfram.com/products/gridmathematica/ http://www.wolfram.com/products/gridmathematica/].&lt;br /&gt;
&lt;br /&gt;
=== Virtualization ===&lt;br /&gt;
There is a trend in HPC towards [http://en.wikipedia.org/wiki/Virtualization '''virtualization'''].  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose [http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html].&lt;br /&gt;
&lt;br /&gt;
=== Visualization ===&lt;br /&gt;
Another trend that continues today is the [http://en.wikipedia.org/wiki/Scientific_visualization '''visualization'''] of structured, complex data.  Visualization often make complex concepts easier to understand.  [http://en.wikipedia.org/wiki/Medical_imaging Medical imaging] allows doctors to visualize internal organs without surgery. There are an almost endless number of domains which use data visualization, such as [http://en.wikipedia.org/wiki/Molecular_geometry molecular geometry], [http://en.wikipedia.org/wiki/Weather_forecasting weather forecasting], [http://en.wikipedia.org/wiki/Fluid_dynamics fluid dynamics], and [http://en.wikipedia.org/wiki/Earth_sciences earth sciences].&lt;br /&gt;
&lt;br /&gt;
Visualization is a memory intensive process.  How much so depends on the data set being rendered, but most modern PCs are now capable of running applications with complex visualization capabilities.  Several products, such as those from [http://www.avs.com/index_nf.html Advanced Visual Systems], offer software development kits to aid developers in incorporating visualization into their applications.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements/Utilization ===&lt;br /&gt;
Generalizing from these examples, modern day scientific/engineering applications are becoming increasingly more capable and more demanding of system resources (RAM and CPU).  However, many are targeted for consumer hardware platforms.  Many applications are now multiprocessor capable.  In the best case, the speedup obtained from having multiple processors is near linear, but normally the speedup is somewhat less, depending on how well the problem parallelizes, how well the program is written, and the communication latency.&lt;br /&gt;
&lt;br /&gt;
== Applications for HPC ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
=== Biology ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Human_genome_project Human Genome Project (HGP)].  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
=== Physics ===&lt;br /&gt;
Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  [http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe This paper] &lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. [http://www.unisci.com/stories/20021/0204026.htm]&lt;br /&gt;
&lt;br /&gt;
=== Space Exploration ===&lt;br /&gt;
[http://www.seti.org Search for Extraterrestrial Intelligence (SETI)].  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
=== Weather Forecasting ===&lt;br /&gt;
Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago [http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html].&lt;br /&gt;
&lt;br /&gt;
=== Game Playing===&lt;br /&gt;
Checkers was solved by the program [http://www.cs.ualberta.ca/~chinook/project/ Chinook] in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of [http://www.cs.ualberta.ca/~chinook/publications/research.html research publications] have emerged from the Chinook project, including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3260</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3260"/>
		<updated>2007-09-10T20:08:09Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Section 1.1.1, first half: Scientific/engineering application trends. What characterizes present-day applications? How much memory, processor time, etc.? How high is the speedup?'' &lt;br /&gt;
&lt;br /&gt;
== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory, there have been five generations of architectures in the realm of scientific computing .  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present) [http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272].&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems [http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html]. Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.   [http://en.wikipedia.org/wiki/Tony_Hey Tony Hey], a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores [http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM].&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet [http://en.wikipedia.org/wiki/Cluster_computing].  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the [http://en.wikipedia.org/wiki/Linpack Linpack Benchmark], is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at [http://www.top500.org Top500.org].&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
An increasing number of scientific/engineering applications, such as Mathematica 6 by Wolfram Research, are becoming '''multiprocessor capable'''.&lt;br /&gt;
While Mathematica does not ''require'' multiple processors, it does benefit from them, particularly when performing long running linear algebra equations or when dealing with machine-precision real numbers.  Mathematica requires a significant amount of RAM (at least, from the average personal computer) - at least 512mb.  Wolfram does offer a  [http://www.wolfram.com/products/applications/parallel parallel computing toolkit] that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see [http://www.wolfram.com/products/gridmathematica/ http://www.wolfram.com/products/gridmathematica/].&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose [http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html].&lt;br /&gt;
&lt;br /&gt;
Another trend that continues today is the [http://en.wikipedia.org/wiki/Scientific_visualization '''visualization'''] of structured, complex data.  Visualization often make complex concepts easier to understand.  [http://en.wikipedia.org/wiki/Medical_imaging Medical imaging] allows doctors to visualize internal organs without surgery. There are an almost endless number of domains which use data visualization, such as [http://en.wikipedia.org/wiki/Molecular_geometry molecular geometry], [http://en.wikipedia.org/wiki/Weather_forecasting weather forecasting], [http://en.wikipedia.org/wiki/Fluid_dynamics fluid dynamics], and [http://en.wikipedia.org/wiki/Earth_sciences earth sciences].&lt;br /&gt;
&lt;br /&gt;
Visualization is a memory intensive process.  How much so depends on the data set being rendered, but most modern PCs are now capable of running applications with complex visualization capabilities.  Several products, such as those from [http://www.avs.com/index_nf.html Advanced Visual Systems], offer software development kits to aid developers in incorporating visualization into their applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - [http://en.wikipedia.org/wiki/Human_genome_project Human Genome Project (HGP)].  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' - Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  [http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe This paper] &lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. [http://www.unisci.com/stories/20021/0204026.htm]&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - [http://www.seti.org Search for Extraterrestrial Intelligence (SETI)].  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Weather Forecasting''' - Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago [http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html].&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program [http://www.cs.ualberta.ca/~chinook/project/ Chinook] in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of [http://www.cs.ualberta.ca/~chinook/publications/research.html research publications] have emerged from the Chinook project, including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3258</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=3258"/>
		<updated>2007-09-10T19:24:27Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Section 1.1.1, first half: Scientific/engineering application trends. What characterizes present-day applications? How much memory, processor time, etc.? How high is the speedup?'' &lt;br /&gt;
&lt;br /&gt;
== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory, there have been five generations of architectures in the realm of scientific computing .  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present) [http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272].&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems [http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html]. Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.   [http://en.wikipedia.org/wiki/Tony_Hey Tony Hey], a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores [http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM].&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet [http://en.wikipedia.org/wiki/Cluster_computing].  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the [http://en.wikipedia.org/wiki/Linpack Linpack Benchmark], is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at [http://www.top500.org Top500.org].&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a  [http://www.wolfram.com/products/applications/parallel parallel computing toolkit] that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see [http://www.wolfram.com/products/gridmathematica/ http://www.wolfram.com/products/gridmathematica/].&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose [http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html].&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - [http://en.wikipedia.org/wiki/Human_genome_project Human Genome Project (HGP)].  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' - Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  [http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe This paper] &lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. [http://www.unisci.com/stories/20021/0204026.htm]&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - [http://www.seti.org Search for Extraterrestrial Intelligence (SETI)].  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Weather Forecasting''' - Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago [http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html].&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program [http://www.cs.ualberta.ca/~chinook/project/ Chinook] in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of [http://www.cs.ualberta.ca/~chinook/publications/research.html research publications] have emerged from the Chinook project, including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2573</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2573"/>
		<updated>2007-09-05T15:14:48Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' - Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  This paper (http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe)&lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. (http://www.unisci.com/stories/20021/0204026.htm)&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - Search for Extraterrestrial Intelligence (SETI) (http://www.seti.org/).  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Weather Forecasting''' - Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago (http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html).&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2567</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2567"/>
		<updated>2007-09-05T15:08:51Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Interestingly, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  This paper (http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe)&lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. (http://www.unisci.com/stories/20021/0204026.htm)&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - Search for Extraterrestrial Intelligence (SETI) (http://www.seti.org/).  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Weather Forecasting''' - Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago (http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html).&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2566</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2566"/>
		<updated>2007-09-05T15:08:16Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  However, an increasing number of applications are being designed to run on more modest platforms, such as a cluster of commodity processors.&lt;br /&gt;
&lt;br /&gt;
Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  This paper (http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe)&lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. (http://www.unisci.com/stories/20021/0204026.htm)&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - Search for Extraterrestrial Intelligence (SETI) (http://www.seti.org/).  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Weather Forecasting''' - Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago (http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html).&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2561</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2561"/>
		<updated>2007-09-05T14:59:47Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  This paper (http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe)&lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. (http://www.unisci.com/stories/20021/0204026.htm)&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - Search for Extraterrestrial Intelligence (SETI) (http://www.seti.org/).  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Weather Forecasting''' - Weather forecasting, a classic &amp;quot;supercomputer&amp;quot; problem, remains in the realm of supercomputers and will for the foreseeable future.  Weather forecasting technology continues to improve, not only from increased hardware performance but also by improved software/modeling capabilities.  Three day forecasts today are as accurate as one day forecast just 20 years ago (http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0813/108178.html).&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2556</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2556"/>
		<updated>2007-09-05T14:51:09Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' Distributed and parallel computing is playing an increasing role in physics, including Particle Beam Physics.  This paper (http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6TJM-4B5R97X-3&amp;amp;_user=10&amp;amp;_coverDate=02%2F21%2F2004&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=721502408864d5addf95e432dfe4e0fe)&lt;br /&gt;
examines computational techniques in which cluster computing can be employed for a variety of beam physics problems.&lt;br /&gt;
&lt;br /&gt;
The University of California at Santa Cruz uses a supercomputer to model supernova explosions, galaxy formation, and the fluid dynamics of the interiors of stars and planets. (http://www.unisci.com/stories/20021/0204026.htm)&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - Search for Extraterrestrial Intelligence (SETI) (http://www.seti.org/).  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test)&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2549</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2549"/>
		<updated>2007-09-05T14:39:22Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Space Exploration''' - Search for Extraterrestrial Intelligence (SETI) (http://www.seti.org/).  SETI's stated mission is to &amp;quot;explore, understand and explain the origin, nature and prevalence of life in the universe.&amp;quot;  The SETI@Home project (which is not an official project of SETI) uses CPU cycles from millions of computers to process data from the Arecibo Radio Telescope, in Puerto Rico.  To take part in the project, users simply download and install a screensaver which, when activated, downloads and processes data, then uploads the results.&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test)&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2546</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2546"/>
		<updated>2007-09-05T14:26:45Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are classified as &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test)&lt;br /&gt;
&lt;br /&gt;
'''Game Playing''' - Checkers was solved by the program Chinook (http://www.cs.ualberta.ca/~chinook/project/) in March 2007, after over a decade of a dozen or more computers working nonstop on the problem.  The search space for checkers is rather large - 5x10^20 nodes.  (Chess is estimated at 10^44, which probably exceeds the number of molecules in the universe.)  A number of research publications have emerged from the Chinook project (http://www.cs.ualberta.ca/~chinook/publications/research.html), including &amp;quot;APHID - Asynchronous Parallel Game Tree Search&amp;quot;, and &amp;quot;Distributed Game-Tree Searching Using Transposition Table Driven Work Schedule.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2543</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2543"/>
		<updated>2007-09-05T14:16:43Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Challenging Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Below are a sample of scientific/engineering applications that employ HPC. (Note: not all are &amp;quot;Grand Challenge&amp;quot; problems, but all are challenging!)&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test)&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2542</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2542"/>
		<updated>2007-09-05T14:13:45Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test)&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2541</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2541"/>
		<updated>2007-09-05T13:59:33Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  &lt;br /&gt;
The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2540</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2540"/>
		<updated>2007-09-05T13:58:58Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (HGP) (http://en.wikipedia.org/wiki/Human_genome_project).  The goal of the HGP is to &amp;quot;understand the genetic makeup of the human species.&amp;quot;  By some definitions of &amp;quot;complete sequencing&amp;quot; this work was completed in 2003.  However, some work remains in that large area of the genome remain unsequenced.  Some estimate the genome to be 92% sequenced.  The remaining portions , highly repetitive sequences of DNA known as centromeres, are proving difficult with today's technology.&lt;br /&gt;
&lt;br /&gt;
The basic approach to HGP is a classic &amp;quot;divide and conquer&amp;quot;.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2539</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2539"/>
		<updated>2007-09-05T13:38:41Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards '''virtualization'''.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2538</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2538"/>
		<updated>2007-09-05T13:37:53Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, particularly when doing linear algebra equations and dealing with machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2537</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2537"/>
		<updated>2007-09-05T13:36:19Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require multiple processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2536</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2536"/>
		<updated>2007-09-05T13:34:17Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a Grand Challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2535</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2535"/>
		<updated>2007-09-05T13:33:29Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientists to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2534</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2534"/>
		<updated>2007-09-05T13:32:57Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  Much work has been done in the areas of computational modeling and simulation.  By using modeling, scientists are able to analyze hypothetical designs, rather than relying on empirical evidence, which is often difficult or impossible to come by.  Higher performance computers afford the resources to build richer, more complicated models that allow scientist to study more difficult problems.  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2533</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2533"/>
		<updated>2007-09-05T13:25:44Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demand higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2284</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2284"/>
		<updated>2007-09-04T00:33:49Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demands higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with physical platforms.  There are many benefits to running on virtual machines, among them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2282</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2282"/>
		<updated>2007-09-04T00:32:39Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demands higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematica tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with the physical platforms.  There are many benefits to running on virtual machines, amonth them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2281</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2281"/>
		<updated>2007-09-04T00:31:35Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demands higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is one of a growing number of commercially available scientific/engineering applications.  Mathematica does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematic tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
There is a trend in HPC towards virtualization.  Virtualization allows application programmers to write applications for virtual machines, not concerning themselves with the physical platforms.  There are many benefits to running on virtual machines, amonth them the ability to seamlessly migrate the virtual machines (along with its running applications) off its physical host machine.  However, in practice there are many challenges related to virtualization, chief among them the performance limitations they impose (http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html).&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2280</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2280"/>
		<updated>2007-09-04T00:12:36Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
With dramatic increases in hardware performance come more demanding applications, which in turn demands higher performance software.  Many scientific applications available today, some even commercially, were not available on general purpose architectures even a few years ago.&lt;br /&gt;
&lt;br /&gt;
'''Mathematica 6''' by Wolfram Research, is a commercially available scientific/engineering application that does not require parallel processors, but does require significant resources (at least, from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  However, on many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers.  Wolfram does offer a parallel computing toolkit (http://www.wolfram.com/products/applications/parallel) that allows Mathematica application designers to take advantage of various parallel architectures, ranging from shared memory multiprocessor machines to supercomputers.  Wolfram also offers a version of Mathematic tailored to cluster/grid computing, see http://www.wolfram.com/products/gridmathematica/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2279</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2279"/>
		<updated>2007-09-03T23:56:38Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's Blue Gene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2278</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2278"/>
		<updated>2007-09-03T23:56:15Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  More information on IBM's BlueGene and other supercomputers can be found at http://www.top500.org/.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2277</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2277"/>
		<updated>2007-09-03T23:54:10Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is 1 x 10^12 FLOPS.)  As of June 2007, the world's fastest computer, as measured by the Linpack (http://en.wikipedia.org/wiki/Linpack) benchmark, is IBM's massively parallel Blue Gene/L.  IBM has plans to build a 3 petaflop (3 x 10^15 FLOPS) machine by fall 2007, and a 10 petaflop machine in the 2010-2012 timeframe.  &lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2276</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2276"/>
		<updated>2007-09-03T23:46:43Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Despite these trends, the &amp;quot;traditional&amp;quot; supercomputer is alive and well.  Today's highest performance machines are capable of performing  hundreds of teraflops per second. (A teraflop is &amp;lt;math&amp;gt;1 x 10^12 FLOPS&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2275</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2275"/>
		<updated>2007-09-03T23:38:07Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2274</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2274"/>
		<updated>2007-09-03T23:37:50Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) Multi-core processors are becoming more and more mainstream.  Today, many new desktop systems contain dual cores, with some quad cores being sold.  Tony Hey (http://en.wikipedia.org/wiki/Tony_Hey), a leading researcher in parallel computing, has predicted that by 2015, a single socket will contain hundreds of cores. (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2273</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2273"/>
		<updated>2007-09-03T22:49:27Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) &lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).  Perhaps the strongest driving force behind these trends is one of supply and demand, or economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers and manufacturers alike to favor more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tony Hey - &amp;quot;hundreds of cores on a socket by 2015.&amp;quot; (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2272</id>
		<title>CSC/ECE 506 Fall 2007/wiki1 2 3K8i</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki1_2_3K8i&amp;diff=2272"/>
		<updated>2007-09-03T22:44:50Z</updated>

		<summary type="html">&lt;p&gt;Jfswaffo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Trends in Scientific and Engineering Computing ==&lt;br /&gt;
&lt;br /&gt;
Scientific and engineering applications continue to demand the highest performance computers available, a trend established in the early days of supercomputers that continues today in the realm of &amp;quot;High Performance Computing&amp;quot; (HPC).  As problems are solved, new, more complex problems arise to take their place.  Many Grand Challenge Problems &amp;quot;on the radar&amp;quot; today were not feasible on the supercomputers of a just decade ago.  Generally, each successive generation of Grand Challenge problems require more memory and faster processing capabilities.  The architectures used to deliver those memory and processing speed requirements are changing, and along with them the algorithms and techniques used to make efficient use of them.&lt;br /&gt;
&lt;br /&gt;
Before looking at some of today's most challenging computational problems, it may be instructive to look at the trends in HPC over the last decade or so.  &lt;br /&gt;
&lt;br /&gt;
== Hardware Trends ==&lt;br /&gt;
According the the U.S. Army Research Laboratory (http://www.arl.army.mil/www/default.cfm?Action=20&amp;amp;Page=272), there have been five generations of architectures in the realm of scientific computing.  They are serial processors (1947-1986), vector processors (1986-2002), shared memory (1993-present), distributed memory (2000-present), and commodity clusters (2001-present).&lt;br /&gt;
&lt;br /&gt;
Indeed, the trend in recent years in multiprocessing has been away from vector architectures and towards low cost, multi-threaded single address spaced systems. (http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html) &lt;br /&gt;
&lt;br /&gt;
There have also been strong trends towards cluster and grid computing, which seek to take advantage of multiple, low cost (commodity) computer systems and treat them as a logical entity.  Perhaps the strongest driving force behind this trend is the economies of scale.  Specialized hardware is, by definition, in less demand then general purpose hardware, making it much more difficult to recover design and production costs.  Hence, there is a strong economic incentive for consumers to use more general purpose solutions.&lt;br /&gt;
&lt;br /&gt;
Several categories of clusters exists, ranging from high performance computers linked together via high speed interconnects, to geographically separated systems linked together over the Internet.  (http://en.wikipedia.org/wiki/Cluster_computing)  Grid computing is a form of the latter, generally composed of multiple &amp;quot;collections&amp;quot; of computers (grid elements) that do not necessarily trust each other.&lt;br /&gt;
&lt;br /&gt;
Putting these together, we see a clear movement towards commodity processors in both the areas of parallel computing (processors in a single computer system) and distributed computing (using multiple computer systems).&lt;br /&gt;
&lt;br /&gt;
Tony Hey - &amp;quot;hundreds of cores on a socket by 2015.&amp;quot; (http://www.accessmylibrary.com/coms2/summary_0286-30177016_ITM)&lt;br /&gt;
&lt;br /&gt;
http://www.nus.edu.sg/comcen/svu/publications/SVULink/vol_1_iss_1/hpc-trends.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Trends ==&lt;br /&gt;
Mathematica 6 - does not require parallel processors, but does require significant resources (from the &amp;quot;average&amp;quot; personal computer) - at least 512mb memory.  On many operating systems Mathematica is able to take advantage of multiple processors, focusing on linear algebra and machine-precision real numbers. (http://support.wolfram.com/mathematica/systems/allplatforms/multipleprocessors.html)&lt;br /&gt;
See also: http://www.wolfram.com/products/applications/parallel/&lt;br /&gt;
http://www.wolfram.com/products/gridmathematica/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some challenges today in keeping the &amp;quot;performance&amp;quot; in HPC (High Performance Computing): &lt;br /&gt;
http://www.scientificcomputing.com/ShowPR~PUBCODE~030~ACCT~3000000100~ISSUE~0707~RELTYPE~HPCC~PRODCODE~00000000~PRODLETT~C.html&lt;br /&gt;
All is not well in HPC.  There is a tend towards virtualization, or running on virtual machines.  One benefit of this approach is that the virtual machine can be seamlessly migrated off its physical host machine.  However, in practice there are many challenges related to virtualization.  Current designs impose some performance limitations on HPC.&lt;br /&gt;
&amp;lt;examples, source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Petascale computing - 10^15 floating point operations per second!  Should be a reality by 2010 (http://www.nsf.gov/pubs/2005/nsf05625/nsf05625.htm).&lt;br /&gt;
&lt;br /&gt;
Computational modeling/simulation: why, benefits. in-depth analysis can be performed cheaply on hypothetical designs.&lt;br /&gt;
There is a direct correlation between computational performance and the problems that can be studied through simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grand Challenge Problems ==&lt;br /&gt;
// todo: work on wording below&amp;lt;br&amp;gt;&lt;br /&gt;
Some problems are so complex that to solve them would require a significant increase (in some cases by orders of magnitude) in the current computational capabilities of today's computers.  These problems are loosely defined as &amp;quot;Grand Challenge Problems.&amp;quot;  Grand Challenge problems are problems that are solvable, but not in a reasonable period of time on today's computers.  Further, a grand challenge problem is a problem of some importance, either socially or economically.&lt;br /&gt;
&lt;br /&gt;
'''Biology''' - Human Genome Project (http://en.wikipedia.org/wiki/Human_genome_project)&lt;br /&gt;
Looks like a &amp;quot;divide and conquer&amp;quot; approach.  The genome was broken down into smaller pieces, approximately 150,000 base pairs in length, processed separately, then assembled to form chromosones.&lt;br /&gt;
&lt;br /&gt;
'''Physics''' (nuclear technology)&lt;br /&gt;
&lt;br /&gt;
'''Astronomy'''&lt;br /&gt;
&lt;br /&gt;
'''Cognition/Strong AI''' - the idea that computers can become &amp;quot;self aware.&amp;quot;  (vs. weak AI who's goal is not so grandiose - Turing test) &lt;br /&gt;
&lt;br /&gt;
'''Game playing''' - chess, checkers (Jonathon Schaefer)&lt;br /&gt;
&lt;br /&gt;
Linpack benchmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
http://en.wikipedia.org/wiki/High_Performance_Computing&lt;br /&gt;
&lt;br /&gt;
http://www.top500.org/&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge_problem&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Grand_Challenge&lt;/div&gt;</summary>
		<author><name>Jfswaffo</name></author>
	</entry>
</feed>