<?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=Bvuong</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=Bvuong"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Bvuong"/>
	<updated>2026-07-25T18:10:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82552</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82552"/>
		<updated>2013-11-22T08:07:45Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Non-Uniform Memory Access(NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. NUMA is a very important processor feature and if it is ignored one can expect sub-par application memory performance.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
NUMA is often grouped together with Uniform Memory Access(UMA) because the two methods of memory management have similar features. The architecture of UMA(see figure 1.1)&amp;lt;ref name=&amp;quot;ott11&amp;quot;&amp;gt;David Ott. Optimizing Applications for NUMA. http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
 |      title = Optimizing Applications for NUMA&lt;br /&gt;
 |      last1 = Ott&lt;br /&gt;
 |     first1 = David&lt;br /&gt;
 |   location = Intel&lt;br /&gt;
 |       date = November 02, 2011&lt;br /&gt;
 | accessdate = November 18, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt; however has a directl connection between the processor/cache and the memory for the processor, the bus is then connected to the memory. The main trade off between UMA and NUMA is related to memory access time. Since the NUMA memory is directly linked to the processor/cache it provides faster access to local data but is slower when accessing remote data&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.1 Diagram of the UMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Diagram of the NUMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model(see figure 1.3)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This design implements a mixture of UMA and NUMA by creating a node at encompasses a NUMA system and connects the nodes so the entire architecture resembles the UMA system.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA&amp;amp;NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.3 Diagram of the mixture of the UMA and NUMA memory configurations'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issues with NUMA====&lt;br /&gt;
As previously stated one of the advantages from using the NUMA system is the fast local memory access due to the location of the memory in relation to the processor/cache. This is also a disadvantage, when comparing NUMA to UMA, when a thread tries to access memory not located locally. NUMA is slower and less efficient about obtaining the non-localized data from memory but this can be solved in two different ways&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The first method of improving the performance of NUMA is using processor affinity&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. Processor affinity can be used when multiple threads are running on different processors. In order to reduce the amount of overhead from running these different threads processor affinity is used to manage them. Processor affinity is the practice of assigning threads that correspond with a certain application to certain cores because of the memory they are locally storing&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This is designed the decrease the amount of memory requests that are not within the local memory. However this practice can also cause issues because it does not balance the work evenly so the resources can be under or over utilized&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. The second way of improving the performance of NUMA memory management is by using different page allocation strategies to utilize the local memory in more efficient ways.&lt;br /&gt;
   &lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&amp;lt;ref name=&amp;quot;fasdf&amp;quot;&amp;gt;http://www.sciencedirect.com/science/article/pii/074373159190117R&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;br /&gt;
&lt;br /&gt;
===Page Allocation Support in OpenMP===&lt;br /&gt;
* has directives for allocating blocks a certain way (concerning NUMA)&lt;br /&gt;
** &amp;lt;code&amp;gt;!dec$ migrate_next_touch(v1,...,v2)&amp;lt;/code&amp;gt; - migrates selected pages to referencing thread for easy access&amp;lt;ref name=&amp;quot;craig00&amp;quot;&amp;gt;http://www.sc2000.org/techpapr/papers/pap.pap226.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;!dec$ memories&amp;lt;/code&amp;gt; - interprets memories of a machine to be seen as an array&lt;br /&gt;
** &amp;lt;code&amp;gt;!dec$ template&amp;lt;/code&amp;gt; - defines virtual array&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;ref name=&amp;quot;lee96&amp;quot;&amp;gt;JongWoo Lee and Yookun Cho. An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors. https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
 |      title = An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors&lt;br /&gt;
 |      last1 = Lee&lt;br /&gt;
 |     first1 = JongWoo&lt;br /&gt;
 |      last2 = Cho&lt;br /&gt;
 |     first2 = Yookun&lt;br /&gt;
 |   location = Korea&lt;br /&gt;
 |       date = 1996&lt;br /&gt;
 | accessdate = November 19, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82551</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82551"/>
		<updated>2013-11-22T08:06:27Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Page Allocation Support in OpenMP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Non-Uniform Memory Access(NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. NUMA is a very important processor feature and if it is ignored one can expect sub-par application memory performance.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
NUMA is often grouped together with Uniform Memory Access(UMA) because the two methods of memory management have similar features. The architecture of UMA(see figure 1.1)&amp;lt;ref name=&amp;quot;ott11&amp;quot;&amp;gt;David Ott. Optimizing Applications for NUMA. http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
 |      title = Optimizing Applications for NUMA&lt;br /&gt;
 |      last1 = Ott&lt;br /&gt;
 |     first1 = David&lt;br /&gt;
 |   location = Intel&lt;br /&gt;
 |       date = November 02, 2011&lt;br /&gt;
 | accessdate = November 18, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt; however has a directl connection between the processor/cache and the memory for the processor, the bus is then connected to the memory. The main trade off between UMA and NUMA is related to memory access time. Since the NUMA memory is directly linked to the processor/cache it provides faster access to local data but is slower when accessing remote data&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.1 Diagram of the UMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Diagram of the NUMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model(see figure 1.3)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This design implements a mixture of UMA and NUMA by creating a node at encompasses a NUMA system and connects the nodes so the entire architecture resembles the UMA system.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA&amp;amp;NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.3 Diagram of the mixture of the UMA and NUMA memory configurations'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issues with NUMA====&lt;br /&gt;
As previously stated one of the advantages from using the NUMA system is the fast local memory access due to the location of the memory in relation to the processor/cache. This is also a disadvantage, when comparing NUMA to UMA, when a thread tries to access memory not located locally. NUMA is slower and less efficient about obtaining the non-localized data from memory but this can be solved in two different ways&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The first method of improving the performance of NUMA is using processor affinity&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. Processor affinity can be used when multiple threads are running on different processors. In order to reduce the amount of overhead from running these different threads processor affinity is used to manage them. Processor affinity is the practice of assigning threads that correspond with a certain application to certain cores because of the memory they are locally storing&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This is designed the decrease the amount of memory requests that are not within the local memory. However this practice can also cause issues because it does not balance the work evenly so the resources can be under or over utilized&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. The second way of improving the performance of NUMA memory management is by using different page allocation strategies to utilize the local memory in more efficient ways.&lt;br /&gt;
   &lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;br /&gt;
&lt;br /&gt;
===Page Allocation Support in OpenMP===&lt;br /&gt;
* has directives for allocating blocks a certain way (concerning NUMA)&lt;br /&gt;
** &amp;lt;code&amp;gt;!dec$ migrate_next_touch(v1,...,v2)&amp;lt;/code&amp;gt; - migrates selected pages to referencing thread for easy access&amp;lt;ref name=&amp;quot;craig00&amp;quot;&amp;gt;http://www.sc2000.org/techpapr/papers/pap.pap226.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;!dec$ memories&amp;lt;/code&amp;gt; - interprets memories of a machine to be seen as an array&lt;br /&gt;
** &amp;lt;code&amp;gt;!dec$ template&amp;lt;/code&amp;gt; - defines virtual array&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;ref name=&amp;quot;lee96&amp;quot;&amp;gt;JongWoo Lee and Yookun Cho. An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors. https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
 |      title = An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors&lt;br /&gt;
 |      last1 = Lee&lt;br /&gt;
 |     first1 = JongWoo&lt;br /&gt;
 |      last2 = Cho&lt;br /&gt;
 |     first2 = Yookun&lt;br /&gt;
 |   location = Korea&lt;br /&gt;
 |       date = 1996&lt;br /&gt;
 | accessdate = November 19, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82550</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82550"/>
		<updated>2013-11-22T07:10:16Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Non-Uniform Memory Access(NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. NUMA is a very important processor feature and if it is ignored one can expect sub-par application memory performance.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
NUMA is often grouped together with Uniform Memory Access(UMA) because the two methods of memory management have similar features. The architecture of UMA(see figure 1.1)&amp;lt;ref name=&amp;quot;ott11&amp;quot;&amp;gt;David Ott. Optimizing Applications for NUMA. http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
 |      title = Optimizing Applications for NUMA&lt;br /&gt;
 |      last1 = Ott&lt;br /&gt;
 |     first1 = David&lt;br /&gt;
 |   location = Intel&lt;br /&gt;
 |       date = November 02, 2011&lt;br /&gt;
 | accessdate = November 18, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt; however has a directl connection between the processor/cache and the memory for the processor, the bus is then connected to the memory. The main trade off between UMA and NUMA is related to memory access time. Since the NUMA memory is directly linked to the processor/cache it provides faster access to local data but is slower when accessing remote data&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.1 Diagram of the UMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Diagram of the NUMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model(see figure 1.3)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This design implements a mixture of UMA and NUMA by creating a node at encompasses a NUMA system and connects the nodes so the entire architecture resembles the UMA system.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA&amp;amp;NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.3 Diagram of the mixture of the UMA and NUMA memory configurations'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issues with NUMA====&lt;br /&gt;
As previously stated one of the advantages from using the NUMA system is the fast local memory access due to the location of the memory in relation to the processor/cache. This is also a disadvantage, when comparing NUMA to UMA, when a thread tries to access memory not located locally. NUMA is slower and less efficient about obtaining the non-localized data from memory but this can be solved in two different ways&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The first method of improving the performance of NUMA is using processor affinity&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. Processor affinity can be used when multiple threads are running on different processors. In order to reduce the amount of overhead from running these different threads processor affinity is used to manage them. Processor affinity is the practice of assigning threads that correspond with a certain application to certain cores because of the memory they are locally storing&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This is designed the decrease the amount of memory requests that are not within the local memory. However this practice can also cause issues because it does not balance the work evenly so the resources can be under or over utilized&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. The second way of improving the performance of NUMA memory management is by using different page allocation strategies to utilize the local memory in more efficient ways.&lt;br /&gt;
   &lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;br /&gt;
&lt;br /&gt;
===Page Allocation Support in OpenMP===&lt;br /&gt;
* has directives for allocating blocks a certain way&lt;br /&gt;
** !dec$ migrate_next_touch(v1,...,v2) - migrates selected pages to referencing thread for easy access&amp;lt;ref name=&amp;quot;craig00&amp;quot;&amp;gt;http://www.sc2000.org/techpapr/papers/pap.pap226.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;ref name=&amp;quot;lee96&amp;quot;&amp;gt;JongWoo Lee and Yookun Cho. An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors. https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
 |      title = An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors&lt;br /&gt;
 |      last1 = Lee&lt;br /&gt;
 |     first1 = JongWoo&lt;br /&gt;
 |      last2 = Cho&lt;br /&gt;
 |     first2 = Yookun&lt;br /&gt;
 |   location = Korea&lt;br /&gt;
 |       date = 1996&lt;br /&gt;
 | accessdate = November 19, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82549</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82549"/>
		<updated>2013-11-22T06:48:03Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Non-Uniform Memory Access(NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. NUMA is a very important processor feature and if it is ignored one can expect sub-par application memory performance.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
NUMA is often grouped together with Uniform Memory Access(UMA) because the two methods of memory management have similar features. The architecture of UMA(see figure 1.1)&amp;lt;ref name=&amp;quot;ott11&amp;quot;&amp;gt;David Ott. Optimizing Applications for NUMA. http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://software.intel.com/en-us/articles/optimizing-applications-for-numa&lt;br /&gt;
 |      title = Optimizing Applications for NUMA&lt;br /&gt;
 |      last1 = Ott&lt;br /&gt;
 |     first1 = David&lt;br /&gt;
 |   location = Intel&lt;br /&gt;
 |       date = November 02, 2011&lt;br /&gt;
 | accessdate = November 18, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt; however has a directl connection between the processor/cache and the memory for the processor, the bus is then connected to the memory. The main trade off between UMA and NUMA is related to memory access time. Since the NUMA memory is directly linked to the processor/cache it provides faster access to local data but is slower when accessing remote data&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.1 Diagram of the UMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Diagram of the NUMA memory configuration'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model(see figure 1.3)&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This design implements a mixture of UMA and NUMA by creating a node at encompasses a NUMA system and connects the nodes so the entire architecture resembles the UMA system.&lt;br /&gt;
&lt;br /&gt;
[[File:UMA&amp;amp;NUMA.jpg|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.3 Diagram of the mixture of the UMA and NUMA memory configurations'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Issues with NUMA====&lt;br /&gt;
As previously stated one of the advantages from using the NUMA system is the fast local memory access due to the location of the memory in relation to the processor/cache. This is also a disadvantage, when comparing NUMA to UMA, when a thread tries to access memory not located locally. NUMA is slower and less efficient about obtaining the non-localized data from memory but this can be solved in two different ways&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The first method of improving the performance of NUMA is using processor affinity&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. Processor affinity can be used when multiple threads are running on different processors. In order to reduce the amount of overhead from running these different threads processor affinity is used to manage them. Processor affinity is the practice of assigning threads that correspond with a certain application to certain cores because of the memory they are locally storing&amp;lt;ref name = &amp;quot;ott11&amp;quot;/&amp;gt;. This is designed the decrease the amount of memory requests that are not within the local memory. However this practice can also cause issues because it does not balance the work evenly so the resources can be under or over utilized&amp;lt;ref name =&amp;quot;ott11&amp;quot;/&amp;gt;. The second way of improving the performance of NUMA memory management is by using different page allocation strategies to utilize the local memory in more efficient ways.&lt;br /&gt;
   &lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;br /&gt;
&lt;br /&gt;
===Page Allocation Support in OpenMP===&lt;br /&gt;
* has directives for allocating blocks a certain way&lt;br /&gt;
** !dec$ migrate_next_touch(v1,...,v2) - migrates selected pages to referencing thread for easy access&amp;lt;ref name=&amp;quot;craig00&amp;quot;&amp;gt;http://www.sc2000.org/techpapr/papers/pap.pap226.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;lee96&amp;quot;&amp;gt;JongWoo Lee and Yookun Cho. An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors. https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = https://parasol.tamu.edu/~rwerger/Courses/689/spring2002/day-3-ParMemAlloc/papers/lee96effective.pdf&lt;br /&gt;
 |      title = An Effective Shared Memory Allocator for Reducing False Sharing in NUMA Processors&lt;br /&gt;
 |      last1 = Lee&lt;br /&gt;
 |     first1 = JongWoo&lt;br /&gt;
 |      last2 = Cho&lt;br /&gt;
 |     first2 = Yookun&lt;br /&gt;
 |   location = Korea&lt;br /&gt;
 |       date = 1996&lt;br /&gt;
 | accessdate = November 19, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82524</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82524"/>
		<updated>2013-11-19T17:07:41Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&lt;br /&gt;
&lt;br /&gt;
Non-Uniform Memory (NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. Due to the access that this memory system is allowed in order to effectively utilize it there needs to be an efficient way of handling page management.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model. The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector. This system creates page pools for each of the different nodes and can swap pages from each of these nodes using a swapper thread. The page pools contain free lists that hold the available pages; the active and inactive lists are used to manage page reclamation.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;br /&gt;
&lt;br /&gt;
===Page Allocation Support in OpenMP===&lt;br /&gt;
* has directives for allocating blocks a certain way&lt;br /&gt;
** !dec$ migrate_next_touch(v1,...,v2) - migrates selected pages to referencing thread for easy access&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82505</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82505"/>
		<updated>2013-11-19T16:50:14Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&lt;br /&gt;
&lt;br /&gt;
Non-Uniform Memory (NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. Due to the access that this memory system is allowed in order to effectively utilize it there needs to be an efficient way of handling page management.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model. The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector. This system creates page pools for each of the different nodes and can swap pages from each of these nodes using a swapper thread. The page pools contain free lists that hold the available pages; the active and inactive lists are used to manage page reclamation.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;br /&gt;
&lt;br /&gt;
===Page Allocation Support in OpenMP===&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82464</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82464"/>
		<updated>2013-11-18T04:19:14Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Different Strategies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&lt;br /&gt;
&lt;br /&gt;
Non-Uniform Memory (NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. Due to the access that this memory system is allowed in order to effectively utilize it there needs to be an efficient way of handling page management.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model. The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector. This system creates page pools for each of the different nodes and can swap pages from each of these nodes using a swapper thread. The page pools contain free lists that hold the available pages; the active and inactive lists are used to manage page reclamation.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* random -&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82463</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82463"/>
		<updated>2013-11-17T01:10:32Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Different Strategies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&lt;br /&gt;
&lt;br /&gt;
Non-Uniform Memory (NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. Due to the access that this memory system is allowed in order to effectively utilize it there needs to be an efficient way of handling page management.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model. The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector. This system creates page pools for each of the different nodes and can swap pages from each of these nodes using a swapper thread. The page pools contain free lists that hold the available pages; the active and inactive lists are used to manage page reclamation.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
** demand fetching&lt;br /&gt;
** prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
** Fixed-Node&lt;br /&gt;
** Preferred-Node&lt;br /&gt;
** Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
** Per-Task&lt;br /&gt;
** Per-Computation&lt;br /&gt;
** Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* local to first access - waits &lt;br /&gt;
* local to first request&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82462</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82462"/>
		<updated>2013-11-17T01:10:18Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&lt;br /&gt;
&lt;br /&gt;
Non-Uniform Memory (NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. Due to the access that this memory system is allowed in order to effectively utilize it there needs to be an efficient way of handling page management.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model. The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector. This system creates page pools for each of the different nodes and can swap pages from each of these nodes using a swapper thread. The page pools contain free lists that hold the available pages; the active and inactive lists are used to manage page reclamation.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
* * demand fetching&lt;br /&gt;
* * prefetching&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
* * Fixed-Node&lt;br /&gt;
* * Preferred-Node&lt;br /&gt;
* * Random-Node&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
* * Per-Task&lt;br /&gt;
* * Per-Computation&lt;br /&gt;
* * Global&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* local to first access - waits &lt;br /&gt;
* local to first request&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82427</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82427"/>
		<updated>2013-11-12T17:08:18Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Different Strategies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&lt;br /&gt;
&lt;br /&gt;
Non-Uniform Memory (NUMA) technology has become the optimal solution for more complex systems in terms of the increase of processors. NUMA provides the functionality to distribute memory to each processor, giving each processor local access to its own share, as well as giving each processor the ability to access remote memory located in other processors. Due to the access that this memory system is allowed in order to effectively utilize it there needs to be an efficient way of handling page management.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model. The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector. This system creates page pools for each of the different nodes and can swap pages from each of these nodes using a swapper thread. The page pools contain free lists that hold the available pages; the active and inactive lists are used to manage page reclamation.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different Strategies===&lt;br /&gt;
Page Allocation strategies are broken down to three categories when concerning with NUMA:&lt;br /&gt;
* Fetch - determining which page to be brought to main memory&lt;br /&gt;
* Placement - determining where to hold the page&lt;br /&gt;
* Replacement - determining which page to remove for new pages&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* local to first access - waits &lt;br /&gt;
* local to first request&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82268</id>
		<title>CSC 456 Fall 2013/4b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82268"/>
		<updated>2013-10-31T15:48:19Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki 2&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
section 1: background&lt;br /&gt;
section 2: history&lt;br /&gt;
section 3: different strategies (general purposes and specific purposes)&lt;br /&gt;
(have charts)&lt;br /&gt;
&lt;br /&gt;
types of strategies&lt;br /&gt;
* first touch - allocates the frame on the node that incurs the page fault, i.e. on the same node where the processor that accesses it resides.&lt;br /&gt;
* round robin - pages are allocated in different memory nodes and are accessed based on time slices.&lt;br /&gt;
* local to first access - waits &lt;br /&gt;
* local to first request&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76833</id>
		<title>CSC 456 Fall 2013/1d vb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76833"/>
		<updated>2013-09-17T16:24:33Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Power Consumption vs. Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Trends in Pipelining=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Computing architectures have changed greatly over the relatively short span of a few decades. In the pursuit of good performance and economical cost, processor architectures have taken many forms. There have been many trends over the years relating to specific processor characteristics such as pipeline length. Some changes are based on technological limitations of the time period, and other decisions are based on hypothetical and real world performance research.  &lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Longer Pipeline Length==&lt;br /&gt;
With each tick of the clock, the pipeline is advanced by one stage. Having a much longer pipeline allows for each individual step to be very short. Since each individual pipeline step is relatively small it is possible for the clock speed to be much faster since each step does not require as much time or work. &lt;br /&gt;
&lt;br /&gt;
There is a secondary affect of longer pipelines as well. The resulting higher clock speed can also be used as a marketing point. The average user does not understand the metrics of raw processor power, but being able to compare two numbers such as 2.9Ghz vs 3.4Ghz is a simple way in which many attempt to understand different processors.&lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Shorter Pipeline Length==&lt;br /&gt;
&lt;br /&gt;
The issue with increased pipeline length is the problem of incorrect branch predictions. The longer a pipeline is, the more stages of wasted processing have been wasted when a different branch is taken. Decreasing the pipeline length has resulted in lower clock frequencies, but equal or better IPC. A smaller pipeline suffers less of a loss for every bad prediction, and the overall performance is improved. With all processor properties, there is no simple &amp;quot;best&amp;quot; pipeline, there is always a bell curve pointing to the the most effective pipeline pipeline length for a given setup.&lt;br /&gt;
&lt;br /&gt;
Latch delays can also play a role when you increase pipeline Length. When you attempt to improve performance by increasing the number of stages more than 90% of the optimum performance, problems occur. The performance does not increase at this point unless the latch overhead time is addressed, requiring that the increasable latch overhead time is less than the total overhead time. [5]&lt;br /&gt;
&lt;br /&gt;
==Power Consumption vs. Performance==&lt;br /&gt;
Along with performance, power is another concern in microarchitectural design. There have been multiple studies on what optimal pipeline depth when considering both performance and power. Srinivasan stated that majority of power used is related to latches, including clocking and the leakage of power per latch. The number of latches grows super linearly with the number of pipeline stages according to Srinivasan. The overall power/performance is improved with the number of pipeline stages, as illustrated in the graph.&lt;br /&gt;
&lt;br /&gt;
[[File:Pipeline_stage_vs_metric.png]]&lt;br /&gt;
&lt;br /&gt;
==Examples of Pipeline changes in Different Processors==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pipeline Specifications of Cray Systems&lt;br /&gt;
|-&lt;br /&gt;
! Year&lt;br /&gt;
! Name&lt;br /&gt;
! Pipeline Length&lt;br /&gt;
! Number of Pipelines&lt;br /&gt;
|-&lt;br /&gt;
| 1976&lt;br /&gt;
| Cray 1 &lt;br /&gt;
| 3 [2]&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
|2006&lt;br /&gt;
|IBM Cell BE&lt;br /&gt;
|23 [6]&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
| 2012&lt;br /&gt;
| Cray XK7&lt;br /&gt;
| 12 for scalar , 17 for vector [3]&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/power/library/pa-cellperf/figure2.gif A visual example of the Cell Pipeline]&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CE4QFjAA&amp;amp;url=http%3A%2F%2Fclasses.soe.ucsc.edu%2Fcmpe202%2FFall04%2Fpapers%2Fopteron.pdf&amp;amp;ei=hQsmUv6LKMnJsASb8IGACQ&amp;amp;usg=AFQjCNHvPcgDLJjfk0ufcd7HRA6aDAgU8w&amp;amp;sig2=fZvAhhwalsuZAs7GuamDHg&amp;amp;bvm=bv.51495398,d.cWc The AMD Opteron Processor for Multiprocessor Servers]  Chetana N. Keltcher, Kevin J. McGrath, Ardsher Ahmed, Pat Conway &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/Cray-1 Cray 1] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/XK7 Cray XK7] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.93.4333%26rep%3Drep1%26type%3Dpdf&amp;amp;ei=BwwmUtX-D7OgsQSrxYCgDw&amp;amp;usg=AFQjCNFrDohjVe-SefuaJvLAJwXEFVgWYw&amp;amp;sig2=Hfx9Gs6MI8XtOVT3PvoDlw&amp;amp;bvm=bv.51495398,d.cWc The Optimum Pipeline Depth for a Microprocessor] A. Hartstein, 	Thomas R. Puzak&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.readcube.com/articles/10.1002/ecjc.20127?locale=en An Analysis about Increasable Latch Overheard time for Processor Pipeline Depth Increase] Magoshi &amp;amp; Murakami&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.ibm.com/developerworks/power/library/pa-cellperf/ Cell Broadband Engine Architecture] Dr.Thomas Chen, Dr.Ram Raghavan, Jason Dale, Eiji Iwata&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Pipeline_stage_vs_metric.png&amp;diff=76832</id>
		<title>File:Pipeline stage vs metric.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Pipeline_stage_vs_metric.png&amp;diff=76832"/>
		<updated>2013-09-17T16:24:04Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76830</id>
		<title>CSC 456 Fall 2013/1d vb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76830"/>
		<updated>2013-09-17T16:22:52Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Power Consumption vs. Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Trends in Pipelining=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Computing architectures have changed greatly over the relatively short span of a few decades. In the pursuit of good performance and economical cost, processor architectures have taken many forms. There have been many trends over the years relating to specific processor characteristics such as pipeline length. Some changes are based on technological limitations of the time period, and other decisions are based on hypothetical and real world performance research.  &lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Longer Pipeline Length==&lt;br /&gt;
With each tick of the clock, the pipeline is advanced by one stage. Having a much longer pipeline allows for each individual step to be very short. Since each individual pipeline step is relatively small it is possible for the clock speed to be much faster since each step does not require as much time or work. &lt;br /&gt;
&lt;br /&gt;
There is a secondary affect of longer pipelines as well. The resulting higher clock speed can also be used as a marketing point. The average user does not understand the metrics of raw processor power, but being able to compare two numbers such as 2.9Ghz vs 3.4Ghz is a simple way in which many attempt to understand different processors.&lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Shorter Pipeline Length==&lt;br /&gt;
&lt;br /&gt;
The issue with increased pipeline length is the problem of incorrect branch predictions. The longer a pipeline is, the more stages of wasted processing have been wasted when a different branch is taken. Decreasing the pipeline length has resulted in lower clock frequencies, but equal or better IPC. A smaller pipeline suffers less of a loss for every bad prediction, and the overall performance is improved. With all processor properties, there is no simple &amp;quot;best&amp;quot; pipeline, there is always a bell curve pointing to the the most effective pipeline pipeline length for a given setup.&lt;br /&gt;
&lt;br /&gt;
Latch delays can also play a role when you increase pipeline Length. When you attempt to improve performance by increasing the number of stages more than 90% of the optimum performance, problems occur. The performance does not increase at this point unless the latch overhead time is addressed, requiring that the increasable latch overhead time is less than the total overhead time. [5]&lt;br /&gt;
&lt;br /&gt;
==Power Consumption vs. Performance==&lt;br /&gt;
Along with performance, power is another concern in microarchitectural design. There have been multiple studies on what optimal pipeline depth when considering both performance and power. Srinivasan stated that majority of power used is related to latches, including clocking and the leakage of power per latch. The number of latches grows super linearly with the number of pipeline stages according to Srinivasan. The overall power/performance is improved with the number of pipeline stages, as illustrated in the graph.&lt;br /&gt;
&lt;br /&gt;
[[File:Example.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Examples of Pipeline changes in Different Processors==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pipeline Specifications of Cray Systems&lt;br /&gt;
|-&lt;br /&gt;
! Year&lt;br /&gt;
! Name&lt;br /&gt;
! Pipeline Length&lt;br /&gt;
! Number of Pipelines&lt;br /&gt;
|-&lt;br /&gt;
| 1976&lt;br /&gt;
| Cray 1 &lt;br /&gt;
| 3 [2]&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
|2006&lt;br /&gt;
|IBM Cell BE&lt;br /&gt;
|23 [6]&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
| 2012&lt;br /&gt;
| Cray XK7&lt;br /&gt;
| 12 for scalar , 17 for vector [3]&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/power/library/pa-cellperf/figure2.gif A visual example of the Cell Pipeline]&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CE4QFjAA&amp;amp;url=http%3A%2F%2Fclasses.soe.ucsc.edu%2Fcmpe202%2FFall04%2Fpapers%2Fopteron.pdf&amp;amp;ei=hQsmUv6LKMnJsASb8IGACQ&amp;amp;usg=AFQjCNHvPcgDLJjfk0ufcd7HRA6aDAgU8w&amp;amp;sig2=fZvAhhwalsuZAs7GuamDHg&amp;amp;bvm=bv.51495398,d.cWc The AMD Opteron Processor for Multiprocessor Servers]  Chetana N. Keltcher, Kevin J. McGrath, Ardsher Ahmed, Pat Conway &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/Cray-1 Cray 1] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/XK7 Cray XK7] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.93.4333%26rep%3Drep1%26type%3Dpdf&amp;amp;ei=BwwmUtX-D7OgsQSrxYCgDw&amp;amp;usg=AFQjCNFrDohjVe-SefuaJvLAJwXEFVgWYw&amp;amp;sig2=Hfx9Gs6MI8XtOVT3PvoDlw&amp;amp;bvm=bv.51495398,d.cWc The Optimum Pipeline Depth for a Microprocessor] A. Hartstein, 	Thomas R. Puzak&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.readcube.com/articles/10.1002/ecjc.20127?locale=en An Analysis about Increasable Latch Overheard time for Processor Pipeline Depth Increase] Magoshi &amp;amp; Murakami&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.ibm.com/developerworks/power/library/pa-cellperf/ Cell Broadband Engine Architecture] Dr.Thomas Chen, Dr.Ram Raghavan, Jason Dale, Eiji Iwata&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76827</id>
		<title>CSC 456 Fall 2013/1d vb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76827"/>
		<updated>2013-09-17T16:22:14Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Power Consumption vs. Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Trends in Pipelining=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Computing architectures have changed greatly over the relatively short span of a few decades. In the pursuit of good performance and economical cost, processor architectures have taken many forms. There have been many trends over the years relating to specific processor characteristics such as pipeline length. Some changes are based on technological limitations of the time period, and other decisions are based on hypothetical and real world performance research.  &lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Longer Pipeline Length==&lt;br /&gt;
With each tick of the clock, the pipeline is advanced by one stage. Having a much longer pipeline allows for each individual step to be very short. Since each individual pipeline step is relatively small it is possible for the clock speed to be much faster since each step does not require as much time or work. &lt;br /&gt;
&lt;br /&gt;
There is a secondary affect of longer pipelines as well. The resulting higher clock speed can also be used as a marketing point. The average user does not understand the metrics of raw processor power, but being able to compare two numbers such as 2.9Ghz vs 3.4Ghz is a simple way in which many attempt to understand different processors.&lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Shorter Pipeline Length==&lt;br /&gt;
&lt;br /&gt;
The issue with increased pipeline length is the problem of incorrect branch predictions. The longer a pipeline is, the more stages of wasted processing have been wasted when a different branch is taken. Decreasing the pipeline length has resulted in lower clock frequencies, but equal or better IPC. A smaller pipeline suffers less of a loss for every bad prediction, and the overall performance is improved. With all processor properties, there is no simple &amp;quot;best&amp;quot; pipeline, there is always a bell curve pointing to the the most effective pipeline pipeline length for a given setup.&lt;br /&gt;
&lt;br /&gt;
Latch delays can also play a role when you increase pipeline Length. When you attempt to improve performance by increasing the number of stages more than 90% of the optimum performance, problems occur. The performance does not increase at this point unless the latch overhead time is addressed, requiring that the increasable latch overhead time is less than the total overhead time. [5]&lt;br /&gt;
&lt;br /&gt;
==Power Consumption vs. Performance==&lt;br /&gt;
Along with performance, power is another concern in microarchitectural design. There have been multiple studies on what optimal pipeline depth when considering both performance and power. Srinivasan stated that majority of power used is related to latches, including clocking and the leakage of power per latch. The number of latches grows super linearly with the number of pipeline stages according to Srinivasan. The overall power/performance is improved with the number of pipeline stages, as illustrated in the graph.&lt;br /&gt;
&lt;br /&gt;
==Examples of Pipeline changes in Different Processors==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pipeline Specifications of Cray Systems&lt;br /&gt;
|-&lt;br /&gt;
! Year&lt;br /&gt;
! Name&lt;br /&gt;
! Pipeline Length&lt;br /&gt;
! Number of Pipelines&lt;br /&gt;
|-&lt;br /&gt;
| 1976&lt;br /&gt;
| Cray 1 &lt;br /&gt;
| 3 [2]&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
|2006&lt;br /&gt;
|IBM Cell BE&lt;br /&gt;
|23 [6]&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
| 2012&lt;br /&gt;
| Cray XK7&lt;br /&gt;
| 12 for scalar , 17 for vector [3]&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/power/library/pa-cellperf/figure2.gif A visual example of the Cell Pipeline]&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CE4QFjAA&amp;amp;url=http%3A%2F%2Fclasses.soe.ucsc.edu%2Fcmpe202%2FFall04%2Fpapers%2Fopteron.pdf&amp;amp;ei=hQsmUv6LKMnJsASb8IGACQ&amp;amp;usg=AFQjCNHvPcgDLJjfk0ufcd7HRA6aDAgU8w&amp;amp;sig2=fZvAhhwalsuZAs7GuamDHg&amp;amp;bvm=bv.51495398,d.cWc The AMD Opteron Processor for Multiprocessor Servers]  Chetana N. Keltcher, Kevin J. McGrath, Ardsher Ahmed, Pat Conway &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/Cray-1 Cray 1] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/XK7 Cray XK7] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.93.4333%26rep%3Drep1%26type%3Dpdf&amp;amp;ei=BwwmUtX-D7OgsQSrxYCgDw&amp;amp;usg=AFQjCNFrDohjVe-SefuaJvLAJwXEFVgWYw&amp;amp;sig2=Hfx9Gs6MI8XtOVT3PvoDlw&amp;amp;bvm=bv.51495398,d.cWc The Optimum Pipeline Depth for a Microprocessor] A. Hartstein, 	Thomas R. Puzak&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.readcube.com/articles/10.1002/ecjc.20127?locale=en An Analysis about Increasable Latch Overheard time for Processor Pipeline Depth Increase] Magoshi &amp;amp; Murakami&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.ibm.com/developerworks/power/library/pa-cellperf/ Cell Broadband Engine Architecture] Dr.Thomas Chen, Dr.Ram Raghavan, Jason Dale, Eiji Iwata&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76821</id>
		<title>CSC 456 Fall 2013/1d vb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=76821"/>
		<updated>2013-09-17T16:10:57Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: /* Power Consumption vs. Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Trends in Pipelining=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Computing architectures have changed greatly over the relatively short span of a few decades. In the pursuit of good performance and economical cost, processor architectures have taken many forms. There have been many trends over the years relating to specific processor characteristics such as pipeline length. Some changes are based on technological limitations of the time period, and other decisions are based on hypothetical and real world performance research.  &lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Longer Pipeline Length==&lt;br /&gt;
With each tick of the clock, the pipeline is advanced by one stage. Having a much longer pipeline allows for each individual step to be very short. Since each individual pipeline step is relatively small it is possible for the clock speed to be much faster since each step does not require as much time or work. &lt;br /&gt;
&lt;br /&gt;
There is a secondary affect of longer pipelines as well. The resulting higher clock speed can also be used as a marketing point. The average user does not understand the metrics of raw processor power, but being able to compare two numbers such as 2.9Ghz vs 3.4Ghz is a simple way in which many attempt to understand different processors.&lt;br /&gt;
&lt;br /&gt;
==Factors Favoring Shorter Pipeline Length==&lt;br /&gt;
&lt;br /&gt;
The issue with increased pipeline length is the problem of incorrect branch predictions. The longer a pipeline is, the more stages of wasted processing have been wasted when a different branch is taken. Decreasing the pipeline length has resulted in lower clock frequencies, but equal or better IPC. A smaller pipeline suffers less of a loss for every bad prediction, and the overall performance is improved. With all processor properties, there is no simple &amp;quot;best&amp;quot; pipeline, there is always a bell curve pointing to the the most effective pipeline pipeline length for a given setup.&lt;br /&gt;
&lt;br /&gt;
Latch delays can also play a role when you increase pipeline Length. When you attempt to improve performance by increasing the number of stages more than 90% of the optimum performance, problems occur. The performance does not increase at this point unless the latch overhead time is addressed, requiring that the increasable latch overhead time is less than the total overhead time. [5]&lt;br /&gt;
&lt;br /&gt;
==Power Consumption vs. Performance==&lt;br /&gt;
Along with performance, power is another concern in microarchitectural design. There have been multiple studies on what optimal pipeline depth when considering both performance and power. Srinivasan stated that majority of power used is related to latches, including clocking and the leakage of power per latch. The number of latches grows super linearly with the number of pipeline stages according to Srinivasan.&lt;br /&gt;
&lt;br /&gt;
==Examples of Pipeline changes in Different Processors==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pipeline Specifications of Cray Systems&lt;br /&gt;
|-&lt;br /&gt;
! Year&lt;br /&gt;
! Name&lt;br /&gt;
! Pipeline Length&lt;br /&gt;
! Number of Pipelines&lt;br /&gt;
|-&lt;br /&gt;
| 1976&lt;br /&gt;
| Cray 1 &lt;br /&gt;
| 3 [2]&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
|2006&lt;br /&gt;
|IBM Cell BE&lt;br /&gt;
|23 [6]&lt;br /&gt;
|16&lt;br /&gt;
|-&lt;br /&gt;
| 2012&lt;br /&gt;
| Cray XK7&lt;br /&gt;
| 12 for scalar , 17 for vector [3]&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/power/library/pa-cellperf/figure2.gif A visual example of the Cell Pipeline]&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CE4QFjAA&amp;amp;url=http%3A%2F%2Fclasses.soe.ucsc.edu%2Fcmpe202%2FFall04%2Fpapers%2Fopteron.pdf&amp;amp;ei=hQsmUv6LKMnJsASb8IGACQ&amp;amp;usg=AFQjCNHvPcgDLJjfk0ufcd7HRA6aDAgU8w&amp;amp;sig2=fZvAhhwalsuZAs7GuamDHg&amp;amp;bvm=bv.51495398,d.cWc The AMD Opteron Processor for Multiprocessor Servers]  Chetana N. Keltcher, Kevin J. McGrath, Ardsher Ahmed, Pat Conway &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/Cray-1 Cray 1] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://en.wikipedia.org/wiki/XK7 Cray XK7] Wikipedia&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.93.4333%26rep%3Drep1%26type%3Dpdf&amp;amp;ei=BwwmUtX-D7OgsQSrxYCgDw&amp;amp;usg=AFQjCNFrDohjVe-SefuaJvLAJwXEFVgWYw&amp;amp;sig2=Hfx9Gs6MI8XtOVT3PvoDlw&amp;amp;bvm=bv.51495398,d.cWc The Optimum Pipeline Depth for a Microprocessor] A. Hartstein, 	Thomas R. Puzak&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.readcube.com/articles/10.1002/ecjc.20127?locale=en An Analysis about Increasable Latch Overheard time for Processor Pipeline Depth Increase] Magoshi &amp;amp; Murakami&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.ibm.com/developerworks/power/library/pa-cellperf/ Cell Broadband Engine Architecture] Dr.Thomas Chen, Dr.Ram Raghavan, Jason Dale, Eiji Iwata&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=75449</id>
		<title>CSC 456 Fall 2013/1d vb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=75449"/>
		<updated>2013-09-10T18:36:00Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Trends in Pipelining=&lt;br /&gt;
&lt;br /&gt;
==Trends of Increasing Pipeline Length==&lt;br /&gt;
With each tick of the clock, the pipeline is advanced by one stage. Having a much longer pipeline allows for each individual step to be very small and precise. Since each individual pipeline step is relatively small it is possible for the clock speed to be much faster since each step does not require as much time or work. &lt;br /&gt;
&lt;br /&gt;
There is a secondary affect of longer pipelines as well. The resulting higher clock speed can also be used as a marketing point. The average user does not understand the metrics of raw processor power, but being able to compare two numbers such as 2.9Ghz vs 3.4Ghz is a simple way in which many attempt to understand different processors.&lt;br /&gt;
&lt;br /&gt;
==Trends of Decreasing Pipeline Length==&lt;br /&gt;
&lt;br /&gt;
The issue with increased pipeline length is the problem of incorrect branch predictions. The longer a pipeline is, the more stages of wasted processing have been wasted when a different branch is taken. Decreasing the pipeline length has resulted in lower clock frequencies, but equal or better IPC. A smaller pipeline suffers less of a loss for every bad prediction, and the overall performance is improved. With all processor properties, there is no simple &amp;quot;best&amp;quot; pipeline, there is always a bell curve pointing to the the most effective pipeline pipeline length for a given setup.&lt;br /&gt;
&lt;br /&gt;
Latch delays can also play a role when you increase pipeline Length..&lt;br /&gt;
&amp;quot; When a performance increase is attempted by further increasing the number of stages for a processor in which  the  number  of  stages  is  more  than  90%  of  the optimum for performance, the performance is found not to be increased unless the increasable latch overhead time is less than the overhead time. &amp;quot; [5] - An Analysis about Increasable Latch Overhead Time for Processor Pipeline Depth Increase&lt;br /&gt;
&lt;br /&gt;
==Power Consumption vs. Performance==&lt;br /&gt;
Along with performance, power is another concern in microarchitectural design. There have been multiple studies on what optimal pipeline depth when considering both performance and power. Srinivasan stated that majority of power used is related to latches, including clocking and the leakage of power per latch. The number of latches grows super linearly with the number of pipeline stages according to Srinivasan, &lt;br /&gt;
&lt;br /&gt;
==An Example of Pipeline changes in Cray Systems==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pipeline Specifications of Cray Systems&lt;br /&gt;
|-&lt;br /&gt;
! Year&lt;br /&gt;
! Name&lt;br /&gt;
! Pipeline Length&lt;br /&gt;
! Number of Pipelines&lt;br /&gt;
|-&lt;br /&gt;
| 1976&lt;br /&gt;
| Cray 1 [2]&lt;br /&gt;
| 3&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
|2006&lt;br /&gt;
|IBM Cell BE&lt;br /&gt;
|23&lt;br /&gt;
|8 SPEs * 2 threads&lt;br /&gt;
|-&lt;br /&gt;
| 2012&lt;br /&gt;
| Cray XK7 [3]&lt;br /&gt;
| 12 for scalar , 17 for vector&lt;br /&gt;
| 500 cabinets * 24 blades * 4 cores * 3 pipelines per chip&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/power/library/pa-cellperf/figure2.gif An example of the Cell Pipeline]&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CE4QFjAA&amp;amp;url=http%3A%2F%2Fclasses.soe.ucsc.edu%2Fcmpe202%2FFall04%2Fpapers%2Fopteron.pdf&amp;amp;ei=hQsmUv6LKMnJsASb8IGACQ&amp;amp;usg=AFQjCNHvPcgDLJjfk0ufcd7HRA6aDAgU8w&amp;amp;sig2=fZvAhhwalsuZAs7GuamDHg&amp;amp;bvm=bv.51495398,d.cWc&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://en.wikipedia.org/wiki/Cray-1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://en.wikipedia.org/wiki/XK7&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.93.4333%26rep%3Drep1%26type%3Dpdf&amp;amp;ei=BwwmUtX-D7OgsQSrxYCgDw&amp;amp;usg=AFQjCNFrDohjVe-SefuaJvLAJwXEFVgWYw&amp;amp;sig2=Hfx9Gs6MI8XtOVT3PvoDlw&amp;amp;bvm=bv.51495398,d.cWc&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.readcube.com/articles/10.1002/ecjc.20127?locale=en&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://dl.acm.org/citation.cfm?id=956566&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=75448</id>
		<title>CSC 456 Fall 2013/1d vb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1d_vb&amp;diff=75448"/>
		<updated>2013-09-10T18:34:55Z</updated>

		<summary type="html">&lt;p&gt;Bvuong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Trends in Pipelining=&lt;br /&gt;
&lt;br /&gt;
==Trends of Increasing Pipeline Length==&lt;br /&gt;
With each tick of the clock, the pipeline is advanced by one stage. Having a much longer pipeline allows for each individual step to be very small and precise. Since each individual pipeline step is relatively small it is possible for the clock speed to be much faster since each step does not require as much time or work. &lt;br /&gt;
&lt;br /&gt;
There is a secondary affect of longer pipelines as well. The resulting higher clock speed can also be used as a marketing point. The average user does not understand the metrics of raw processor power, but being able to compare two numbers such as 2.9Ghz vs 3.4Ghz is a simple way in which many attempt to understand different processors.&lt;br /&gt;
&lt;br /&gt;
==Trends of Decreasing Pipeline Length==&lt;br /&gt;
&lt;br /&gt;
The issue with increased pipeline length is the problem of incorrect branch predictions. The longer a pipeline is, the more stages of wasted processing have been wasted when a different branch is taken. Decreasing the pipeline length has resulted in lower clock frequencies, but equal or better IPC. A smaller pipeline suffers less of a loss for every bad prediction, and the overall performance is improved. With all processor properties, there is no simple &amp;quot;best&amp;quot; pipeline, there is always a bell curve pointing to the the most effective pipeline pipeline length for a given setup.&lt;br /&gt;
&lt;br /&gt;
Latch delays can also play a role when you increase pipeline Length..&lt;br /&gt;
&amp;quot; When a performance increase is attempted by further increasing the number of stages for a processor in which  the  number  of  stages  is  more  than  90%  of  the optimum for performance, the performance is found not to be increased unless the increasable latch overhead time is less than the overhead time. &amp;quot; [5] - An Analysis about Increasable Latch Overhead Time for Processor Pipeline Depth Increase&lt;br /&gt;
&lt;br /&gt;
==Power Consumption vs. Performance==&lt;br /&gt;
Along with performance, power is another concern in microarchitectural design. There have been multiple studies on what optimal pipeline depth when considering both performance and power. Srinivasan stated that majority of power used is related to latches, including clocking and the leakage of power per latch. The number of latches grows super linearly with the number of pipeline stages according to Srinivasan, &lt;br /&gt;
&lt;br /&gt;
==An Example of Pipeline changes in Cray Systems==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pipeline Specifications of Cray Systems&lt;br /&gt;
|-&lt;br /&gt;
! Year&lt;br /&gt;
! Name&lt;br /&gt;
! Pipeline Length&lt;br /&gt;
! Number of Pipelines&lt;br /&gt;
|-&lt;br /&gt;
| 1976&lt;br /&gt;
| Cray 1 [2]&lt;br /&gt;
| 3&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
|2006&lt;br /&gt;
|IBM Cell BE&lt;br /&gt;
|23&lt;br /&gt;
|8 SPEs * 2 threads&lt;br /&gt;
|-&lt;br /&gt;
| 2012&lt;br /&gt;
| Cray XK7 [3]&lt;br /&gt;
| 12 for scalar , 17 for vector&lt;br /&gt;
| 500 cabinets * 24 blades * 4 cores * 3 pipelines per chip&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/power/library/pa-cellperf/figure2.gif An example of the Cell Pipeline]&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CE4QFjAA&amp;amp;url=http%3A%2F%2Fclasses.soe.ucsc.edu%2Fcmpe202%2FFall04%2Fpapers%2Fopteron.pdf&amp;amp;ei=hQsmUv6LKMnJsASb8IGACQ&amp;amp;usg=AFQjCNHvPcgDLJjfk0ufcd7HRA6aDAgU8w&amp;amp;sig2=fZvAhhwalsuZAs7GuamDHg&amp;amp;bvm=bv.51495398,d.cWc&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://en.wikipedia.org/wiki/Cray-1&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://en.wikipedia.org/wiki/XK7&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.93.4333%26rep%3Drep1%26type%3Dpdf&amp;amp;ei=BwwmUtX-D7OgsQSrxYCgDw&amp;amp;usg=AFQjCNFrDohjVe-SefuaJvLAJwXEFVgWYw&amp;amp;sig2=Hfx9Gs6MI8XtOVT3PvoDlw&amp;amp;bvm=bv.51495398,d.cWc&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.readcube.com/articles/10.1002/ecjc.20127?locale=en&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bvuong</name></author>
	</entry>
</feed>