<?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=Rlcude</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=Rlcude"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Rlcude"/>
	<updated>2026-08-22T02:30:38Z</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=82547</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=82547"/>
		<updated>2013-11-21T23:34:59Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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&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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82546</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=82546"/>
		<updated>2013-11-21T23:27:49Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82545</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=82545"/>
		<updated>2013-11-21T23:07:32Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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;
====Advantages/Disadvantages====&lt;br /&gt;
As previously stated one of the main advantages from using the NUMA system is the fast local memory access due to the location of the memory. This can cause some issues however when the processors are sharing threads. &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;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UMA%26NUMA.jpg&amp;diff=82544</id>
		<title>File:UMA&amp;NUMA.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UMA%26NUMA.jpg&amp;diff=82544"/>
		<updated>2013-11-21T23:06:49Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: The cross between the UMA and NUMA configurations.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cross between the UMA and NUMA configurations.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:NUMA.jpg&amp;diff=82543</id>
		<title>File:NUMA.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:NUMA.jpg&amp;diff=82543"/>
		<updated>2013-11-21T23:03:32Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: A diagram of the NUMA memory configuration.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A diagram of the NUMA memory configuration.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82542</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=82542"/>
		<updated>2013-11-21T23:03:07Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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|Left]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:left&amp;quot;&amp;gt;'''Figure 1.1 Diagram of the UMA 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;
====Advantages/Disadvantages====&lt;br /&gt;
As previously stated one of the main advantages from using the NUMA system is the fast local memory access due to the location of the memory. This can cause some issues however when the processors are sharing threads. &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;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UMA.jpg&amp;diff=82541</id>
		<title>File:UMA.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UMA.jpg&amp;diff=82541"/>
		<updated>2013-11-21T23:00:42Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: A diagram of the UMA system configuration.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A diagram of the UMA system configuration.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82540</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=82540"/>
		<updated>2013-11-21T22:59:18Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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;
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;
====Advantages/Disadvantages====&lt;br /&gt;
As previously stated one of the main advantages from using the NUMA system is the fast local memory access due to the location of the memory. This can cause some issues however when the processors are sharing threads. &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;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82539</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=82539"/>
		<updated>2013-11-21T17:22:48Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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) has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2) 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.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model(see figure 1.3). 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;
====Advantages/Disadvantages====&lt;br /&gt;
As previously stated one of the main advantages from using the NUMA system is the fast local memory access due to the location of the memory. This can cause some issues however when the processors are sharing threads. &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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82538</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=82538"/>
		<updated>2013-11-21T17:13:55Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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) has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2) 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.&lt;br /&gt;
&lt;br /&gt;
The NUMA system memory is managed in a node based model(see figure 1.3). The nodes consist CPUs, cache lines, and local memory that can communicate via a NUMA connector, this design is commonly found in modern architectures and blends NUMA and UMA. The 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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82537</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=82537"/>
		<updated>2013-11-21T17:11:57Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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) has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2) 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.&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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82536</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=82536"/>
		<updated>2013-11-21T17:04:47Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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) has a bus inbetween the processors/cache and the memory for each processor. NUMA(see figure 1.2) however has a directl connection between the processor/cache and the memory for the processor, the bus is then connected to the memory. &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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82535</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=82535"/>
		<updated>2013-11-21T16:57:33Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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. 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;
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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82534</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=82534"/>
		<updated>2013-11-21T14:48:08Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82533</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=82533"/>
		<updated>2013-11-21T14:47:05Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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;br /&gt;
&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82371</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=82371"/>
		<updated>2013-11-06T02:26:55Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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. 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;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82370</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=82370"/>
		<updated>2013-11-06T02:26:30Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &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;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82369</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=82369"/>
		<updated>2013-11-06T02:16:18Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&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. Page allocation is especially important to a NUMA memory system because in order to maximize it's potential pages need to be efficiently manage the memory.&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82368</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=82368"/>
		<updated>2013-11-06T02:03:59Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Background===&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. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
===Different 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>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82267</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=82267"/>
		<updated>2013-10-31T15:47:21Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki 2&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/4b_cv&amp;diff=82266</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=82266"/>
		<updated>2013-10-31T15:44:29Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: Created page with &amp;quot;Wiki 2&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki 2&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_cv&amp;diff=82265</id>
		<title>CSC 456 Fall 2013/1b cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_cv&amp;diff=82265"/>
		<updated>2013-10-31T15:43:50Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: Created page with &amp;quot;Wiki 2&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki 2&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78668</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78668"/>
		<updated>2013-09-24T15:17:31Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Quiz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache architecture that has fallen out of common use since its first implementation due to inferior performance against other more common cache architectures. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache architectures. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures, a relatively new technology of the time. What they discovered was that, while there was still no performance gain for the majority of multi-level cache designs, there could be a significant performance gain in one specific case. Since sectored caching allows for fairly small tag sizes, the tags themselves could be stored in a very small and fast first-level cache while the sectored data they reference could be stored on a much larger but slower second-level cache. In their analysis, this design allowed for a much higher hit ratio (and thus performance level) compared to Smith and Rothman's theoretical targets than any other cache architecture.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]&lt;br /&gt;
The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Miss_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.6 Graph of conflict misses avoided by miss cache'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Victim_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.7 Graph of conflict misses avoided by victim cache''' &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Line_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.8 Graph of victim cache performance in respect to line size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contrast however, the original form of the victim cache does not improve when only the cache size is improved Jouppi discovered&amp;lt;ref name =&amp;quot;Jouppi&amp;quot;/&amp;gt;. As the graph in Figure 2.9 demonstrates the victim cache starts off strong but the looses it's performance the more space you simply just add onto the cache. This shows that while the need for this type of memory management was required for that time as our computers continue to develop so must our methods of memory hierarchy management continue to evolve.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Cache_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.9 Graph of victim cache performance in respect to primary cache size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Victim caching is also gaining popularity in mobile systems in order to decrease their latency time. One example of this is the NAND IXP system which is used for software embedded systems for a low-cost but high density performance. &amp;lt;ref name=&amp;quot;NAND&amp;quot;&amp;gt;Chanik Park, Jaeyu Seo, Sunghwan Bae, Hyojun Kim, Shinhan Kim and Bumsoo Kim. A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
 |      title = A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems.&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seoul, Korea&lt;br /&gt;
 |       date =October 2003&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This system uses the victim cache to store high-priority pages from the system's main flash memory so that the latency upon requesting the page again is decreased dramatically&amp;lt;ref name = &amp;quot;NAND&amp;quot;/&amp;gt;. The other user that the system gets from having a victim cache is when it is using it's XIP(execute-in-place) functionality the victim cache is used to prefetch information based on profiling information gathered earlier&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;. This allows the system to again reduce the latency of obtaining the data it needs to execute some piece of code. In figure 2.10 it shows the organization of the NAND structure that includes the victim cache&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NAND_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.10 The NAND Architecture cache organization.'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Quiz==&lt;br /&gt;
&lt;br /&gt;
1. What was the first system to use sector caching?&lt;br /&gt;
A) Macbook&lt;br /&gt;
B) Pentium 4&lt;br /&gt;
C) IBM Model 85&lt;br /&gt;
D) Commodore 64&lt;br /&gt;
&lt;br /&gt;
2. On the system from the previous question what percentile of maximum efficiency did it achieve compared to what the designers expected?&lt;br /&gt;
A)63%&lt;br /&gt;
B)81%&lt;br /&gt;
C)92%&lt;br /&gt;
D)11%&lt;br /&gt;
&lt;br /&gt;
3. In sectored caching what bit decided if a subsector has data loaded or not? &lt;br /&gt;
A) Validity&lt;br /&gt;
B) Dirty&lt;br /&gt;
C) The Second One&lt;br /&gt;
D) Parity&lt;br /&gt;
&lt;br /&gt;
4. When are sectors removed from the cache in sectored caching?&lt;br /&gt;
A) When the system needs the space&lt;br /&gt;
B) When the data it has is used&lt;br /&gt;
C) Whenever it wants to&lt;br /&gt;
D) When it's parity bit is set to 0&lt;br /&gt;
&lt;br /&gt;
5. Who first introduced victim caching?&lt;br /&gt;
A) Verma&lt;br /&gt;
B) Zhang&lt;br /&gt;
C) Gates&lt;br /&gt;
D) Jouppi&lt;br /&gt;
&lt;br /&gt;
6. In selective victim caching what extra block of memory is integral to it's cache scheme?&lt;br /&gt;
A Transitory&lt;br /&gt;
B) Transistor&lt;br /&gt;
C) Miss Cache&lt;br /&gt;
D) Level-Two Cache&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78636</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78636"/>
		<updated>2013-09-24T14:40:22Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache architecture that has fallen out of common use since its first implementation due to inferior performance against other more common cache architectures. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache architectures. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures, a relatively new technology of the time. What they discovered was that, while there was still no performance gain for the majority of multi-level cache designs, there could be a significant performance gain in one specific case. Since sectored caching allows for fairly small tag sizes, the tags themselves could be stored in a very small and fast first-level cache while the sectored data they reference could be stored on a much larger but slower second-level cache. In their analysis, this design allowed for a much higher hit ratio (and thus performance level) compared to Smith and Rothman's theoretical targets than any other cache architecture.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Miss_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.6 Graph of conflict misses avoided by miss cache'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Victim_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.7 Graph of conflict misses avoided by victim cache''' &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Line_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.8 Graph of victim cache performance in respect to line size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contrast however, the original form of the victim cache does not improve when only the cache size is improved Jouppi discovered&amp;lt;ref name =&amp;quot;Jouppi&amp;quot;/&amp;gt;. As the graph in Figure 2.9 demonstrates the victim cache starts off strong but the looses it's performance the more space you simply just add onto the cache. This shows that while the need for this type of memory management was required for that time as our computers continue to develop so must our methods of memory hierarchy management continue to evolve.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Cache_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.9 Graph of victim cache performance in respect to primary cache size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Victim caching is also gaining popularity in mobile systems in order to decrease their latency time. One example of this is the NAND IXP system which is used for software embedded systems for a low-cost but high density performance. &amp;lt;ref name=&amp;quot;NAND&amp;quot;&amp;gt;Chanik Park, Jaeyu Seo, Sunghwan Bae, Hyojun Kim, Shinhan Kim and Bumsoo Kim. A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
 |      title = A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems.&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seoul, Korea&lt;br /&gt;
 |       date =October 2003&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This system uses the victim cache to store high-priority pages from the system's main flash memory so that the latency upon requesting the page again is decreased dramatically&amp;lt;ref name = &amp;quot;NAND&amp;quot;/&amp;gt;. The other user that the system gets from having a victim cache is when it is using it's XIP(execute-in-place) functionality the victim cache is used to prefetch information based on profiling information gathered earlier&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;. This allows the system to again reduce the latency of obtaining the data it needs to execute some piece of code. In figure 2.10 it shows the organization of the NAND structure that includes the victim cache&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NAND_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.10 The NAND Architecture cache organization.'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Quiz==&lt;br /&gt;
&lt;br /&gt;
1. What was the first system to use sector caching?&lt;br /&gt;
A) Macbook&lt;br /&gt;
B) Pentium 4&lt;br /&gt;
C) IBM 360 Model 85&lt;br /&gt;
D) Commodore 64&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78634</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78634"/>
		<updated>2013-09-24T14:37:53Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Architectures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache architecture that has fallen out of common use since its first implementation due to inferior performance against other more common cache architectures. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache architectures. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures, a relatively new technology of the time. What they discovered was that, while there was still no performance gain for the majority of multi-level cache designs, there could be a significant performance gain in one specific case. Since sectored caching allows for fairly small tag sizes, the tags themselves could be stored in a very small and fast first-level cache while the sectored data they reference could be stored on a much larger but slower second-level cache. In their analysis, this design allowed for a much higher hit ratio (and thus performance level) compared to Smith and Rothman's theoretical targets than any other cache architecture.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Miss_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.6 Graph of conflict misses avoided by miss cache'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Victim_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.7 Graph of conflict misses avoided by victim cache''' &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Line_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.8 Graph of victim cache performance in respect to line size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contrast however, the original form of the victim cache does not improve when only the cache size is improved Jouppi discovered&amp;lt;ref name =&amp;quot;Jouppi&amp;quot;/&amp;gt;. As the graph in Figure 2.9 demonstrates the victim cache starts off strong but the looses it's performance the more space you simply just add onto the cache. This shows that while the need for this type of memory management was required for that time as our computers continue to develop so must our methods of memory hierarchy management continue to evolve.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Cache_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.9 Graph of victim cache performance in respect to primary cache size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Victim caching is also gaining popularity in mobile systems in order to decrease their latency time. One example of this is the NAND IXP system which is used for software embedded systems for a low-cost but high density performance. &amp;lt;ref name=&amp;quot;NAND&amp;quot;&amp;gt;Chanik Park, Jaeyu Seo, Sunghwan Bae, Hyojun Kim, Shinhan Kim and Bumsoo Kim. A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
 |      title = A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems.&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seoul, Korea&lt;br /&gt;
 |       date =October 2003&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This system uses the victim cache to store high-priority pages from the system's main flash memory so that the latency upon requesting the page again is decreased dramatically&amp;lt;ref name = &amp;quot;NAND&amp;quot;/&amp;gt;. The other user that the system gets from having a victim cache is when it is using it's XIP(execute-in-place) functionality the victim cache is used to prefetch information based on profiling information gathered earlier&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;. This allows the system to again reduce the latency of obtaining the data it needs to execute some piece of code. In figure 2.10 it shows the organization of the NAND structure that includes the victim cache&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NAND_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.10 The NAND Architecture cache organization.'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:NAND_Organization.png&amp;diff=78633</id>
		<title>File:NAND Organization.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:NAND_Organization.png&amp;diff=78633"/>
		<updated>2013-09-24T14:36:00Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This is the organizational structure of the NAND IXP embedded mobile system. Taken from A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems by Chanik Park, Jaeyu Seo, Sunghwan Bae, Hyojun Kim, Shinhan Kim and Bumsoo Kim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the organizational structure of the NAND IXP embedded mobile system. Taken from A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems by Chanik Park, Jaeyu Seo, Sunghwan Bae, Hyojun Kim, Shinhan Kim and Bumsoo Kim&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78632</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78632"/>
		<updated>2013-09-24T14:34:25Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Architectures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache architecture that has fallen out of common use since its first implementation due to inferior performance against other more common cache architectures. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache architectures. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures, a relatively new technology of the time. What they discovered was that, while there was still no performance gain for the majority of multi-level cache designs, there could be a significant performance gain in one specific case. Since sectored caching allows for fairly small tag sizes, the tags themselves could be stored in a very small and fast first-level cache while the sectored data they reference could be stored on a much larger but slower second-level cache. In their analysis, this design allowed for a much higher hit ratio (and thus performance level) compared to Smith and Rothman's theoretical targets than any other cache architecture.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Miss_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.6 Graph of conflict misses avoided by miss cache'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Victim_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.7 Graph of conflict misses avoided by victim cache''' &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Line_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.8 Graph of victim cache performance in respect to line size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contrast however, the original form of the victim cache does not improve when only the cache size is improved Jouppi discovered&amp;lt;ref name =&amp;quot;Jouppi&amp;quot;/&amp;gt;. As the graph in Figure 2.9 demonstrates the victim cache starts off strong but the looses it's performance the more space you simply just add onto the cache. This shows that while the need for this type of memory management was required for that time as our computers continue to develop so must our methods of memory hierarchy management continue to evolve.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Cache_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.9 Graph of victim cache performance in respect to primary cache size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Victim caching is also gaining popularity in mobile systems in order to decrease their latency time. One example of this is the NAND IXP system which is used for software embedded systems for a low-cost but high density performance. &amp;lt;ref name=&amp;quot;NAND&amp;quot;&amp;gt;Chanik Park, Jaeyu Seo, Sunghwan Bae, Hyojun Kim, Shinhan Kim and Bumsoo Kim. A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.1129&amp;amp;rep=rep1&amp;amp;type=pdf&lt;br /&gt;
 |      title = A Low-cost Memory Architecture with NAND XIP for Mobile Embedded Systems.&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seoul, Korea&lt;br /&gt;
 |       date =October 2003&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This system uses the victim cache to store high-priority pages from the system's main flash memory so that the latency upon requesting the page again is decreased dramatically&amp;lt;ref name = &amp;quot;NAND&amp;quot;/&amp;gt;. The other user that the system gets from having a victim cache is when it is using it's XIP(execute-in-place) functionality the victim cache is used to prefetch information based on profiling information gathered earlier&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;. This allows the system to again reduce the latency of obtaining the data it needs to execute some piece of code. In figure 2.10 it shows the organization of the NAND structure that includes the victim cache&amp;lt;ref name=&amp;quot;NAND&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78624</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78624"/>
		<updated>2013-09-24T14:17:08Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures, a relatively new technology of the time. What they discovered was that, while there was still no performance gain for the majority of multi-level cache designs, there could be a significant performance gain in one specific case. Since sectored caching allows for fairly small tag sizes, the tags themselves could be stored in a very small and fast first-level cache while the sectored data they reference could be stored on a much larger but slower second-level cache. In their analysis, this design allowed for a much higher hit ratio (and thus performance level) compared to Smith and Rothman's theoretical targets than any other cache architecture.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Miss_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.6 Graph of conflict misses avoided by miss cache'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Victim_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.7 Graph of conflict misses avoided by victim cache''' &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Line_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.8 Graph of victim cache performance in respect to line size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contrast however, the original form of the victim cache does not improve when only the cache size is improved Jouppi discovered&amp;lt;ref name =&amp;quot;Jouppi&amp;quot;/&amp;gt;. As the graph in Figure 2.9 demonstrates the victim cache starts off strong but the looses it's performance the more space you simply just add onto the cache. This shows that while the need for this type of memory management was required for that time as our computers continue to develop so must our methods of memory hierarchy management continue to evolve.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Cache_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.9 Graph of victim cache performance in respect to primary cache size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Victim_Cache_Cache_Size.png&amp;diff=78623</id>
		<title>File:Victim Cache Cache Size.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Victim_Cache_Cache_Size.png&amp;diff=78623"/>
		<updated>2013-09-24T14:16:06Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This graph demonstrates the correlation between victim cache performance and the size of the primary cache. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This graph demonstrates the correlation between victim cache performance and the size of the primary cache. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78622</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78622"/>
		<updated>2013-09-24T14:13:46Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Advantages/Disadvantages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures, a relatively new technology of the time. What they discovered was that, while there was still no performance gain for the majority of multi-level cache designs, there could be a significant performance gain in one specific case. Since sectored caching allows for fairly small tag sizes, the tags themselves could be stored in a very small and fast first-level cache while the sectored data they reference could be stored on a much larger but slower second-level cache. In their analysis, this design allowed for a much higher hit ratio (and thus performance level) compared to Smith and Rothman's theoretical targets than any other cache architecture.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Miss_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.6 Graph of conflict misses avoided by miss cache'''&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:Victim_Cache_Miss_Ratios.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.7 Graph of conflict misses avoided by victim cache''' &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Line_Size.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.8 Graph of victim cache performance in respect to line size'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In contrast however, the original form of the victim cache does not improve when only the cache size is improved Jouppi discovered&amp;lt;ref name =&amp;quot;Jouppi&amp;quot;/&amp;gt;. As the graph in Figure 2.9 demonstrates the victim cache starts off strong but the looses it's performance the more space you simply just add onto the cache. This shows that while the need for this type of memory management was required for that time as our computers continue to develop so must our methods of memory hierarchy management continue to evolve.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Miss_Cache_Miss_Ratios.png&amp;diff=78616</id>
		<title>File:Miss Cache Miss Ratios.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Miss_Cache_Miss_Ratios.png&amp;diff=78616"/>
		<updated>2013-09-24T13:58:36Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This graph illustrates the conflict misses avoided by using the miss cache scheme. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This graph illustrates the conflict misses avoided by using the miss cache scheme. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Victim_Cache_Line_Size.png&amp;diff=78615</id>
		<title>File:Victim Cache Line Size.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Victim_Cache_Line_Size.png&amp;diff=78615"/>
		<updated>2013-09-24T13:57:19Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This graph depicts the increase in productivity of the victim cache scheme as the line sizes increase. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This graph depicts the increase in productivity of the victim cache scheme as the line sizes increase. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Victim_Cache_Miss_Ratios.png&amp;diff=78614</id>
		<title>File:Victim Cache Miss Ratios.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Victim_Cache_Miss_Ratios.png&amp;diff=78614"/>
		<updated>2013-09-24T13:56:32Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: A graph depicting the amount of conflict misses that were avoided by using victim caching. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A graph depicting the amount of conflict misses that were avoided by using victim caching. Taken from Improving Direct-Mapped Cache Performance by the Addition of a Small Fully-Associative Cache and Prefetch Buffers by Jouppi.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78613</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78613"/>
		<updated>2013-09-24T13:54:57Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Advantages/Disadvantages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Some of the biggest advantages of simple victim caching can be seen in the work the Jouppi did in 1990[[CSC 456 Fall 2013/1b ra#Victim Cache|| Victim Cache Background]]. One of the biggest advantages for using this cache scheme is the number of conflict misses that it removes. This breakthrough in memory management helped provide the way for more sophisticated processors to not be hampered by the memory organizations that were previously used&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;. Figure 2.6 and 2.7 are from Jouppi's paper and demonstrate the differences between the miss cache and the victim cache,respectively, conflict miss reduction rates&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another advantage provided by Jouppi is the ability for the victim caches performance to only improve as technology improves. As computers advance caches and line sizes will only get bigger and some memory organizations will either maintain the same level miss ratio or even get worse the more data they have to handle. Jouppi tested the effects of increasing the line size and how it affected the victim cache's abilities&amp;lt;ref name = &amp;quot;Jouppi/&amp;gt;. In his article he showed that the victim cache only improves with the increased space as illustrated in Figure 2.8&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78608</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78608"/>
		<updated>2013-09-24T13:25:35Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* XOR-Based Placement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
[[File: XOR_Miss_Ratio_Table.png|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.5 XOR Miss Ratio Comparison Table'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:XOR_Miss_Ratio_Table.png&amp;diff=78607</id>
		<title>File:XOR Miss Ratio Table.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:XOR_Miss_Ratio_Table.png&amp;diff=78607"/>
		<updated>2013-09-24T13:23:23Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This is a table taken from Eliminating Cache Conflict Misses Through XOR-Based Placement Functions by Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. It illustrates the miss ratio differences between standard victim caching and combin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a table taken from Eliminating Cache Conflict Misses Through XOR-Based Placement Functions by Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. It illustrates the miss ratio differences between standard victim caching and combing it with XOR mapping.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78605</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78605"/>
		<updated>2013-09-24T13:21:51Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching in 1990 to the present day there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]] is described which is one of the variations with the least amount of change to how the victim cache works. This section will describe a few others that vary a little more to show how this caching scheme has evolved.&lt;br /&gt;
&lt;br /&gt;
====XOR-Based Placement====&lt;br /&gt;
&lt;br /&gt;
Not long after the article on Selective Victim Caching was published another article, in July of 1997, detailing how the use of XOR mapping techniques could improve many different caching techniques, victim caching included. The XOR-mapping scheme for victim caching entails using several XOR operations in order to obtain a cache index. Since the XOR operations can be completed in parallel the delay associated with this is one XOR gate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;XOR&amp;quot;&amp;gt;Antonio González, Mateo Valero, Nigel Topham and Joan M. Parcerisa. Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.ac.upc.edu/jmanel/papers/ics97.pdf&lt;br /&gt;
 |      title = Eliminating Cache Conflict Misses Through XOR-Based Placement Functions. &lt;br /&gt;
 |      last1 = González&lt;br /&gt;
 |     first1 = Antonio&lt;br /&gt;
 |      last2 = Valero&lt;br /&gt;
 |     first2 = Mateo&lt;br /&gt;
 |      last3 = Topham&lt;br /&gt;
 |     first3 = Nigel&lt;br /&gt;
 |      last4 = Parcerisa&lt;br /&gt;
 |     first4 = Joan&lt;br /&gt;
 |   location = Barcelona, Spain and Edinburgh, UK&lt;br /&gt;
 |       date =July 1997&lt;br /&gt;
 | accessdate = September 21, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
These XOR operations typically take place in the end of the address computation stage which it usually not a very critical point in the pipeline cycle thus not really creating a lot of time delay. This allows for quicker access to memory blocks and reduce the chance of hitting issues later in the pipelining process&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. XOR mapping also uses a bit to check whether a block has been used since it's last miss or not and switches the block around accordingly, similar to the Selective Victim Cache method&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. Upon completion of mixing the the new XOR mapping technique with the Victim Cache Scheme it had a miss ratio similar to a two-way skewed-associative cache&amp;lt;ref name = &amp;quot;XOR&amp;quot;/&amp;gt;. The only points during their tests where it made almost no difference was during the points when the miss ratios were lower than normal as seen in Figure 2.5 below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Victim Replication====&lt;br /&gt;
&lt;br /&gt;
Victim Replication is a newer cache management scheme, first presented in 2005, by Zhang and Asanovic for use in level-two caches with in a tiled chip multiprocessor &amp;lt;ref name=&amp;quot;Zhang1&amp;quot;&amp;gt;Michael Zhang and Krste Asanovic´. Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors. http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://people.cs.pitt.edu/~cho/cs2410/papers/zhang-isca05.pdf&lt;br /&gt;
 |      title = Victim Replication: Maximizing Capacity while Hiding Wire Delay in Tiled Chip Multiprocessors.&lt;br /&gt;
 |      last1 = Zhang&lt;br /&gt;
 |     first1 = Michael&lt;br /&gt;
 |      last2 = Asanovic&lt;br /&gt;
 |     first2 = Krste&lt;br /&gt;
 |   location = MIT Cambridge, Mass.&lt;br /&gt;
 |       date = June 2005&lt;br /&gt;
 | accessdate = September 23, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This variation focuses on combining the positive qualities of private and shared level-two caching schemes. The private scheme uses a slice of the level-two cache as a private cache so that the level-one cache can communicate directly to it&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The benefit to using this strategy is that since the level-one and the level-two communicate directly to each other it reduces the need for off-chip requests&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. This choice can be costly however if a request off-chip is needed since it become a three-way communication. The shared scheme uses all the level-two slices as a shared cache which can be useful due a level-one request not having to only rely on one slice of the level-two cache however it can experience latency issues depending on the amount of requests that it is handling at one time&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. The Victim Replication method combines the two by creating a shared level-two cache and some private level-two slices. When a victim is brought in a replication of it is stored in the private slices from the shared cache&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;. If there is a miss in the level-two cache it is sent to the primary cache, if that does not provide the needed date the private level-two slices are then inspected. From all of these checks it was shown that using victim replication the latency of level-two caches in mutli-threaded benchmarking decreased by 16% and single-threaded benchmarking decreased by 21%&amp;lt;ref name = &amp;quot;Zhang1&amp;quot;/&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78604</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78604"/>
		<updated>2013-09-24T12:20:57Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
From the time of Jouppi first introducing the idea of victim caching to the present there have been many modifications and adaptations of this caching technique. In the above section [[CSC 456 Fall 2013/1b ra#Selective Victim Cache|Selective Victim Caching]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78603</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78603"/>
		<updated>2013-09-24T12:14:48Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78602</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78602"/>
		<updated>2013-09-24T12:14:29Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78601</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78601"/>
		<updated>2013-09-24T12:11:32Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Selective Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
An improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78597</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78597"/>
		<updated>2013-09-24T12:00:15Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Selective Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 2.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Transitory_Block_Sequential_Predictor.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Sequential State Machine for Selective Victim Caching'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 2.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Selective_Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.4 Selective Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78592</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78592"/>
		<updated>2013-09-24T11:57:09Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 1.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 1.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Selective_Victim_Cache_Organization.png&amp;diff=78591</id>
		<title>File:Selective Victim Cache Organization.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Selective_Victim_Cache_Organization.png&amp;diff=78591"/>
		<updated>2013-09-24T11:55:44Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This is an illustration of the organization of the selective victim caching process that was introduced in the paper Selective victim caching: a method to improve the performance of direct-mapped caches by Dimitrios Stiliadis and Anujan Varma.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an illustration of the organization of the selective victim caching process that was introduced in the paper Selective victim caching: a method to improve the performance of direct-mapped caches by Dimitrios Stiliadis and Anujan Varma.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Transitory_Block_Sequential_Predictor.png&amp;diff=78589</id>
		<title>File:Transitory Block Sequential Predictor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Transitory_Block_Sequential_Predictor.png&amp;diff=78589"/>
		<updated>2013-09-24T11:54:12Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: This is an illustration of the interchange between the transitory block and the main cache when deciding if a block is part of a repeated sequential access from Selective victim caching: a method to improve the performance of direct-mapped caches by Dimit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an illustration of the interchange between the transitory block and the main cache when deciding if a block is part of a repeated sequential access from Selective victim caching: a method to improve the performance of direct-mapped caches by Dimitrios Stiliadis and Anujan Varma.&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78587</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78587"/>
		<updated>2013-09-24T11:51:53Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Selective Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jouppi discovered a way of helping to optimize the miss cache by using a victim caching organization instead. The idea of the victim cache is to use the same hardware of the miss cache technique but use a different replacement algorithm to make sure that there would be no repeated lines between the direct-mapped cache and the victim cache. When a system using victim caching encounters a miss instead of the new line being placed in both the direct-mapped cache and the victim cache (like the previous method), the line is put into the direct-mapped cache only and the victim cache replaces the least used line with the line that was taken out of the direct mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. After this process when a miss would occur in the direct-mapped cache but a hit occurred in the victim cache the line from the victim cache would be swapped with a line from the direct-mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. This technique is always more efficient than the miss cache due to the redundancy of data between the two different caches, which the miss cache's efficiency was dependent upon. In the figure(Figure 2.3) below is an illustration from Jouppi's 1990 paper that details the organization of the victim cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 1.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 1.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78586</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78586"/>
		<updated>2013-09-24T11:51:18Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Selective Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jouppi discovered a way of helping to optimize the miss cache by using a victim caching organization instead. The idea of the victim cache is to use the same hardware of the miss cache technique but use a different replacement algorithm to make sure that there would be no repeated lines between the direct-mapped cache and the victim cache. When a system using victim caching encounters a miss instead of the new line being placed in both the direct-mapped cache and the victim cache (like the previous method), the line is put into the direct-mapped cache only and the victim cache replaces the least used line with the line that was taken out of the direct mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. After this process when a miss would occur in the direct-mapped cache but a hit occurred in the victim cache the line from the victim cache would be swapped with a line from the direct-mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. This technique is always more efficient than the miss cache due to the redundancy of data between the two different caches, which the miss cache's efficiency was dependent upon. In the figure(Figure 2.3) below is an illustration from Jouppi's 1990 paper that details the organization of the victim cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 1.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 1.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache(ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78585</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78585"/>
		<updated>2013-09-24T11:50:17Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 2.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 1.2 Miss Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jouppi discovered a way of helping to optimize the miss cache by using a victim caching organization instead. The idea of the victim cache is to use the same hardware of the miss cache technique but use a different replacement algorithm to make sure that there would be no repeated lines between the direct-mapped cache and the victim cache. When a system using victim caching encounters a miss instead of the new line being placed in both the direct-mapped cache and the victim cache (like the previous method), the line is put into the direct-mapped cache only and the victim cache replaces the least used line with the line that was taken out of the direct mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. After this process when a miss would occur in the direct-mapped cache but a hit occurred in the victim cache the line from the victim cache would be swapped with a line from the direct-mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. This technique is always more efficient than the miss cache due to the redundancy of data between the two different caches, which the miss cache's efficiency was dependent upon. In the figure(Figure 2.3) below is an illustration from Jouppi's 1990 paper that details the organization of the victim cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Victim_Cache_Organization.png|center]]&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align:center&amp;quot;&amp;gt;'''Figure 2.3 Victim Cache Organization'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 1.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name&amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 1.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache(ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78584</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78584"/>
		<updated>2013-09-24T11:47:26Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure(Figure 2.1) below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;text-align: center;&amp;quot;&amp;gt;'''Figure 2.1 Cache Miss'''&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 1.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&lt;br /&gt;
Jouppi discovered a way of helping to optimize the miss cache by using a victim caching organization instead. The idea of the victim cache is to use the same hardware of the miss cache technique but use a different replacement algorithm to make sure that there would be no repeated lines between the direct-mapped cache and the victim cache. When a system using victim caching encounters a miss instead of the new line being placed in both the direct-mapped cache and the victim cache (like the previous method), the line is put into the direct-mapped cache only and the victim cache replaces the least used line with the line that was taken out of the direct mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. After this process when a miss would occur in the direct-mapped cache but a hit occurred in the victim cache the line from the victim cache would be swapped with a line from the direct-mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. This technique is always more efficient than the miss cache due to the redundancy of data between the two different caches, which the miss cache's efficiency was dependent upon. In the figure below is an illustration from Jouppi's 1990 paper that details the organization of the victim cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Victim_Cache_Organization.png|center]]&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 1.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name&amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 1.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache(ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78583</id>
		<title>CSC 456 Fall 2013/1b ra</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Fall_2013/1b_ra&amp;diff=78583"/>
		<updated>2013-09-24T11:44:47Z</updated>

		<summary type="html">&lt;p&gt;Rlcude: /* Selective Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sector Cache==&lt;br /&gt;
Sectored caching was one type of early CPU cache organization that has risen and fallen in popularity over the years. Sectored caching involves dividing a cache up into sectors to allow for faster searching and more efficient use of space than some other cache organizations. &lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
====IBM Model 85====&lt;br /&gt;
Sectored caching was first used on the IBM System/360 Model 85, which was the earliest commercial system that used a CPU data cache of any kind. Sectored caching allowed for smaller tag sizes in the addresses, which made searching in cache easier and quicker, without requiring cache lines to be excessively long; and it was easier to build than other kinds of cache organizations with the circuit technology of the time.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rothman&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
 |      title = Sector Cache Design and Performance&lt;br /&gt;
 |      last1 = Rothman&lt;br /&gt;
 |     first1 = Jeffrey&lt;br /&gt;
 |    middle1 = B.&lt;br /&gt;
 |      last2 = Smith&lt;br /&gt;
 |     first2 = Alan&lt;br /&gt;
 |    middle2 = Jay&lt;br /&gt;
 |   location = University of California Berkeley, CA&lt;br /&gt;
 |       date = January 1999&lt;br /&gt;
 | accessdate = September 10, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Released in 1968, the Model 85 was one of the first computers to have a CPU data cache, which at the time was known as &amp;quot;buffer storage&amp;quot;, come as a standard feature. As with most caches, the cache on the Model 85 attempts to fetch data from the cache first before fetching from main memory. This allowed for much faster data fetching and storage, reducing the average system storage cycle time to about one third or one quarter what it would be if using main memory alone.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;IBM. IBM System/360 Model 85 Functional Characteristics. http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
{{cite manual&lt;br /&gt;
 |     author = IBM&lt;br /&gt;
 |      title = IBM System/360 Model 85 Functional Characteristics&lt;br /&gt;
 |         id = A22-6916-1&lt;br /&gt;
 |        url = http://www.bitsavers.org/pdf/ibm/360/funcChar/A22-6916-1_360-85_funcChar_Jun68.pdf&lt;br /&gt;
 |    version = SECOND EDITION&lt;br /&gt;
 |       date = June, 1968&lt;br /&gt;
 | accessdate = September 11, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
This new type of cache organization represented a significant departure from cache organizations used previously in the IBM System/360 line of computers. In testing during the design of the Model 85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Liptay&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
{{cite journal&lt;br /&gt;
 |           url = http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5388402&amp;amp;isnumber=5388400&lt;br /&gt;
 |         title = Structural Aspects of the System/360 Model 85, Part II: The Cache&lt;br /&gt;
 |         last1 = Liptay&lt;br /&gt;
 |        first1 = J.&lt;br /&gt;
 |       middle1 = S.&lt;br /&gt;
 |          year = 1968&lt;br /&gt;
 |       journal = IBM Systems Journal&lt;br /&gt;
 |        volume = 7&lt;br /&gt;
 |         issue = 1&lt;br /&gt;
 |         pages = 15,21&lt;br /&gt;
 |     publisher = IBM&lt;br /&gt;
 |           doi = 10.1147/sj.71.0015&lt;br /&gt;
 |    accessdate = September 21, 2013&lt;br /&gt;
 |     separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
After the release of the Model 85, however, it soon became clear that sectored caching was less effective than set-associative caching for computer and chip architectures at that time and fell out of common use.&amp;lt;ref name=&amp;quot;Rothman&amp;quot;/&amp;gt;&lt;br /&gt;
====Reappearance====&lt;br /&gt;
In a 1999 article, Alan Jay Smith and Jeffrey B. Rothman revisited the idea of sectored caching to determine if changes in technology from 1968 had made sectored caching useful. They looked at whether there would be any performance gain if sectored caching was used in multi-level cache architectures.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One early cache organization technique was sector cache. It was used on the IBM 360/85, which was one of the earliest commercial CPUs&amp;lt;ref name=&amp;quot;rot99&amp;quot;&amp;gt;Rothman, Jeffrey B. and Alan Jay Smith. Sector Cache Design and Performance&amp;lt;/ref&amp;gt;. Sector cache allowed for smaller tag sizes, which made searching in cache easier and quicker, without requiring cache lines to be excessively long.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; It was also easier to build with the circuit technology of the time.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt; In testing during the design of the IBM 360/85, it was found to run at 81% of the maximum ideal efficiency calculated by IBM's designers.&amp;lt;ref name=&amp;quot;lip68&amp;quot;&amp;gt;Liptay, J. S. Structural Aspects of the System/360 Model 85, Part II: The Cache.&amp;lt;/ref&amp;gt; Sector caches were later replaced by set associative caches, which were found to be more efficient.&amp;lt;ref name=&amp;quot;rot99&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Image:Sectorcache.png|thumb|right|199px|link=http://wiki.expertiza.ncsu.edu/images/1/15/Sectorcache.png|alt=generalized setored cache address|Sectors in cache are made of subsectors. Each subsector has a validity bit indicating whether or not it has been loaded with data.]]The cache is divided into sectors, which correspond to logical sectors on the main storage device.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When sectors are needed, they are not loaded into cache all at once, but in smaller pieces known as subsectors.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Subsectors are similar to the lines in a direct mapped cache, and are only loaded into cache when needed. This prevents large amounts of data from having to be transferred for every memory reference. Subsectors have a validity bit that indicates whether they are loaded with data or not.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Miss Handling===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a process requests data from a disk sector that is not in the cache, a cache sector is assigned to the sector on the main storage device where the requested data is stored.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Then the subsector where the data is located is loaded into the cache. The subsector's validity bit is then set to reflect that it has been loaded from the main storage.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; When data from other subsectors within a loaded sector are requested, the system loads those subsectors into the cache sector and sets their validity bits.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt; Sectors are not removed from the cache until the system needs to reclaim the space to process another request.&amp;lt;ref name=&amp;quot;lip68&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Old work]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Architectures===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
===Evolution===&lt;br /&gt;
[New stuff here]&lt;br /&gt;
&lt;br /&gt;
==Victim Cache==&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990. Victim caching implements a small, fully-associative cache between direct-mapped L1 memory and the next level of memory. The cache allows lines evicted from the L1 cache a “second-chance” by loading them into the victim cache. Victim caches decrease the overall conflict miss rate&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Jouppi&amp;quot;&amp;gt;Jouppi, Norman P. Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=134547&lt;br /&gt;
 |      title = Improving direct-mapped cache performance by the addition of a small fully-associative cache and prefetch buffers&lt;br /&gt;
 |      last1 = Jouppi&lt;br /&gt;
 |     first1 = Norman&lt;br /&gt;
 |    middle1 = P.&lt;br /&gt;
 |   location = Seattle, WA&lt;br /&gt;
 |       date =May 1990&lt;br /&gt;
 | accessdate = September 22, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Direct-mapped caches can especially benefit from victim caching due to their large miss rates. Victim caching allows direct-mapped caches to still be used in order to take advantage of their speed while decreasing the miss rate to an even lower rate than the miss rate found in set-associative caches &amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Victim caches were first proposed by Norman P. Jouppi in 1990 at the 17th Annual International Symposium on Computer Architecture. During this time the performance of processors was increasing drastically, however memory hierarchies had not advanced in the same manner. Jouppi observed that if this trend continued the newer machines would easily lose half of their potential performance due to the short comings of the state of memory hierarchy at the time. This is illustrated in the figure below which is from Jouppi's 1990 paper.which shows how the cost of cache misses was dramatically increasing&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Cost_of_cache_misses_from_Jouppi.png|center]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Organization===&lt;br /&gt;
====Victim Cache====&lt;br /&gt;
   &lt;br /&gt;
In order for a system to use a victim cache it needs to be use a direct-mapping cache system. Victim caching is a technique of optimizing the use of a miss cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. A miss cache is a small on-chip cache between the first-level cache and the access point to the second-level cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. The miss cache would typically store two to five lines, when a miss would occur the data would not only be loaded into the direct-mapped cache but also into the miss cache replacing the least recently used item&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. While this did help with reducing the amount of conflict misses the optimization of that small cache was not very good considering it could have a lot of the same lines in the direct-mapped cache. The organization of the miss cache can be seen below in the Figure 1.2 which was shown in the 1990 paper by Jouppi&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[File:Miss_Cache_Organization.png|center]]&lt;br /&gt;
&lt;br /&gt;
Jouppi discovered a way of helping to optimize the miss cache by using a victim caching organization instead. The idea of the victim cache is to use the same hardware of the miss cache technique but use a different replacement algorithm to make sure that there would be no repeated lines between the direct-mapped cache and the victim cache. When a system using victim caching encounters a miss instead of the new line being placed in both the direct-mapped cache and the victim cache (like the previous method), the line is put into the direct-mapped cache only and the victim cache replaces the least used line with the line that was taken out of the direct mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. After this process when a miss would occur in the direct-mapped cache but a hit occurred in the victim cache the line from the victim cache would be swapped with a line from the direct-mapped cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;. This technique is always more efficient than the miss cache due to the redundancy of data between the two different caches, which the miss cache's efficiency was dependent upon. In the figure below is an illustration from Jouppi's 1990 paper that details the organization of the victim cache&amp;lt;ref name = &amp;quot;Jouppi&amp;quot;/&amp;gt;.&lt;br /&gt;
[[File:Victim_Cache_Organization.png|center]]&lt;br /&gt;
====Selective Victim Cache====&lt;br /&gt;
&lt;br /&gt;
Another improvement made upon the victim caching technique came from Stiliadis and Verma in 1997 with their introduction of selective victim caching in 1997 &amp;lt;ref name=&amp;quot;Verma&amp;quot;&amp;gt;Dimitrios Stiliadis and Anujan Verma. Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches. http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
{{cite web&lt;br /&gt;
 |        url = http://ieeexplore.ieee.org.prox.lib.ncsu.edu/xpl/articleDetails.jsp?arnumber=589235&amp;amp;tag=1&lt;br /&gt;
 |      title = Selective Victim Caching: A Method to Improve the Performance of Direct-Mapped Caches.&lt;br /&gt;
 |      last1 = Stiliadis&lt;br /&gt;
 |     first1 = Dimitrios&lt;br /&gt;
 |      last2 = Verma&lt;br /&gt;
 |     first2 = Anujan&lt;br /&gt;
 |   location = AT&amp;amp;T Bell Labs, Holmdel, NJ&lt;br /&gt;
 |       date = May 1997&lt;br /&gt;
 | accessdate = September 20, 2013&lt;br /&gt;
 |  separator = ,&lt;br /&gt;
 }}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.&lt;br /&gt;
This cache management organization is similar to the initial victim cache system proposed by Jouppi but instead of the pushing replaced block into the victim and automatically interchanging between the two if the main cache need a block it uses a prediction algorithm based on the past usage of the block&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This is accomplished by adding an additional block to the main cache called the &amp;quot;transitory block&amp;quot;&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. This block in the main cache is used both predict sequential references by determining repeated patterns of access and act as a buffer between the main and victim caches during an interchange to predict if it is necessary&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. The below figure(Figure 1.3) shows a Sequential State Machine that switches between the normal state which is when the memory is decoded from the main cache and the special state which is when access is directed towards the transitory block&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other important function of the algorithm is the cache block swapping prediction based on past usage. This is used when a miss occurs in the main cache but the block is found in the victim cache. The first step is to load the block into the transitory block&amp;lt;ref name&amp;quot;Verma&amp;quot;/&amp;gt;. The algorithm then looks at the prediction bits in the transitory block and compares them to those found in the block store in the main cache&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. If the blocks in the main cache are more likely to be used again before the buffered block the block in the transitory section is accessed and then sent back to the victim cache&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. If the block is more likely to be accessed again than another block in the main cache the normal victim cache swapping occurs&amp;lt;ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. This process can be seen in the figure(Figure 1.4) below which illustrates the movement of memory blocks between the level-one cache,the victim cache, the CPU, and the level-two cache(ref name = &amp;quot;Verma&amp;quot;/&amp;gt;. In the paper by Stiliadis and Verma they showed that this new modification to the victim caching set-up improved performance in both smaller and larger cache size. For example when a simulation was run using ten instruction traces it showed an average improvement of 21% in miss rates and 70% reduction in exchanges between the main and victim caches&amp;lt;ref name=&amp;quot;Verma&amp;quot;/&amp;gt;. &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Implementation===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Advantages/Disadvantages===&lt;br /&gt;
----&lt;br /&gt;
===Architectures===&lt;br /&gt;
Victim caching can be found in AMD's Opteron processor series produced specifically for servers and workstations. &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Opteron&amp;lt;/ref&amp;gt; Opteron processors use a victim cache that is capable of holding eight victim blocks. &amp;lt;ref&amp;gt; Hennessy, John L., and David A. Patterson.  ''Computer Architecture: A Quantitative Approach''. Elsevier, Inc., 2012, p. B-14.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Evolution===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/a/ncsu.edu/document/d/19acy0RuLCAJRSTmVj8T0l5Cy7hCPgOLbBnIksbdmRqQ/edit Topics Page]&lt;br /&gt;
&lt;br /&gt;
Topic 1b: Sectored Caches &amp;amp; Victim Caches&lt;br /&gt;
&lt;br /&gt;
Sectored Cache:&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
[http://en.wikipedia.org/wiki/CPU_cache#First_data_cache Wikipedia page saying IBM 360/85]&lt;br /&gt;
--[[User:Taolande|Taolande]] 11:31, 3 September 2013 (EDT)&lt;/div&gt;</summary>
		<author><name>Rlcude</name></author>
	</entry>
</feed>