<?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=Pzwong</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=Pzwong"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Pzwong"/>
	<updated>2026-09-11T17:15:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/10b_CP&amp;diff=62602</id>
		<title>CSC 456 Spring 2012/10b CP</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/10b_CP&amp;diff=62602"/>
		<updated>2012-04-23T17:03:29Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Romanescu, Lebeck, and Sorin make a great point that &amp;quot;The most important feature of a computer is correct execution.&amp;quot; Computers are expected to produce correct output consistently. Memory consistency -- the intentional ordering of all reads and writes to memory addresses (Solihin) -- plays a crucial role in guaranteeing that the results of running a program are the results intended by the programmer. Maintaining memory consistency is a problem on all multiprocessor machines (Solihin).&lt;br /&gt;
&lt;br /&gt;
== Models in Use ==&lt;br /&gt;
Strict Consistency&lt;br /&gt;
Sequential Consistency&lt;br /&gt;
Weak Consistency&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
From best to worst:&lt;br /&gt;
Weak Consistency&lt;br /&gt;
Sequential Consistency&lt;br /&gt;
Strict Consistency&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60587</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60587"/>
		<updated>2012-03-26T18:09:07Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: the source is copyright me, pzwong, 2012&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold &amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). Gustafson referred to this as [http://en.wikipedia.org/wiki/Gustafson%27s_law scaled speedup]. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
Amdahl's law assumes that the problem size is constant. A different expression, Gustafson's law, can be derived if the total time used to execute a workload is kept constant instead.&amp;lt;ref name=&amp;quot;derivation&amp;quot; /&amp;gt; This source contains the derivation.&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as [http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup superlinear speedup]. This controversy is the product of differences in interpretations of the basis of what constitutes speedup, making this an ideological disagreement.&amp;lt;ref name = &amp;quot;controversy&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;derivation&amp;quot;&amp;gt;http://expertiza.csc.ncsu.edu/wiki/images/5/5f/Ohai.png&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name = &amp;quot;controversy&amp;quot;&amp;gt;http://www.sciencedirect.com/science/article/pii/0167819187900536&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60586</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60586"/>
		<updated>2012-03-26T18:07:16Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Derivation from Amdahl's Law */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold &amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). Gustafson referred to this as [http://en.wikipedia.org/wiki/Gustafson%27s_law scaled speedup]. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
Amdahl's law assumes that the problem size is constant. A different expression, Gustafson's law, can be derived if the total time used to execute a workload is kept constant instead.&amp;lt;ref name=&amp;quot;derivation&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as [http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup superlinear speedup]. This controversy is the product of differences in interpretations of the basis of what constitutes speedup, making this an ideological disagreement.&amp;lt;ref name = &amp;quot;controversy&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;derivation&amp;quot;&amp;gt;http://expertiza.csc.ncsu.edu/wiki/images/5/5f/Ohai.png&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name = &amp;quot;controversy&amp;quot;&amp;gt;http://www.sciencedirect.com/science/article/pii/0167819187900536&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60585</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60585"/>
		<updated>2012-03-26T18:01:52Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Gustafson's Law */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold &amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). Gustafson referred to this as [http://en.wikipedia.org/wiki/Gustafson%27s_law scaled speedup]. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
It is possible to derive Gustafson's Law from Amdahl's Law, by not holding to the assumption that Amdahl's law makes (that problem size is constant).&amp;lt;ref name=&amp;quot;derivation&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as [http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup superlinear speedup]. This controversy is the product of differences in interpretations of the basis of what constitutes speedup, making this an ideological disagreement.&amp;lt;ref name = &amp;quot;controversy&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;derivation&amp;quot;&amp;gt;http://expertiza.csc.ncsu.edu/wiki/images/5/5f/Ohai.png&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name = &amp;quot;controversy&amp;quot;&amp;gt;http://www.sciencedirect.com/science/article/pii/0167819187900536&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60584</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60584"/>
		<updated>2012-03-26T17:59:14Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [&amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). Gustafson referred to this as [http://en.wikipedia.org/wiki/Gustafson%27s_law scaled speedup]. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
It is possible to derive Gustafson's Law from Amdahl's Law, by not holding to the assumption that Amdahl's law makes (that problem size is constant).&amp;lt;ref name=&amp;quot;derivation&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as [http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup superlinear speedup]. This controversy is the product of differences in interpretations of the basis of what constitutes speedup, making this an ideological disagreement.&amp;lt;ref name = &amp;quot;controversy&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;derivation&amp;quot;&amp;gt;http://expertiza.csc.ncsu.edu/wiki/images/5/5f/Ohai.png&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name = &amp;quot;controversy&amp;quot;&amp;gt;http://www.sciencedirect.com/science/article/pii/0167819187900536&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60583</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60583"/>
		<updated>2012-03-26T17:55:24Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [&amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). Gustafson referred to this as [http://en.wikipedia.org/wiki/Gustafson%27s_law scaled speedup]. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
It is possible to derive Gustafson's Law from Amdahl's Law, by not holding to the assumption that Amdahl's law makes (that problem size is constant).&amp;lt;ref name=&amp;quot;derivation&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial&amp;lt;ref name = &amp;quot;controversy&amp;quot; /&amp;gt; topic known as [http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup superlinear speedup].&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;derivation&amp;quot;&amp;gt;http://expertiza.csc.ncsu.edu/wiki/images/5/5f/Ohai.png&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name = &amp;quot;controversy&amp;quot;&amp;gt;http://www.sciencedirect.com/science/article/pii/0167819187900536&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60582</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60582"/>
		<updated>2012-03-26T17:33:02Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [&amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). Gustafson referred to this as [http://en.wikipedia.org/wiki/Gustafson%27s_law scaled speedup]. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
It is possible to derive Gustafson's Law from Amdahl's Law, by not holding to the assumption that Amdahl's law makes (that problem size is constant).&amp;lt;ref name=&amp;quot;derivation&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as [http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup superlinear speedup].&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;derivation&amp;quot;&amp;gt;http://expertiza.csc.ncsu.edu/wiki/images/5/5f/Ohai.png&amp;lt;/ref&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60492</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60492"/>
		<updated>2012-03-22T01:08:20Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Derivation from Amdahl's Law */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gustafson's Law==&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times.&amp;lt;ref name=&amp;quot;karp&amp;quot; /&amp;gt; &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [&amp;lt;ref name=&amp;quot;published speedup&amp;quot; /&amp;gt;, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program.&amp;lt;ref name=&amp;quot;IBM&amp;quot; /&amp;gt; He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Derivation from Amdahl's Law===&lt;br /&gt;
[[File:Ohai.png|left|Derivation of Gustafson Scaled Speedup]]&lt;br /&gt;
&lt;br /&gt;
==Superlinear Speedup==&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as &amp;quot;superlinear speedup&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup can most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&amp;lt;ref name=&amp;quot;SS&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
===Lack of a Serial Equivalent===&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm. While it is possible for one processor to have a cache size large enough to encompass a problem's working set, the usage of cache manipulation in achieving superlinear speedup relies on parallel execution, which a single processor is incapable of doing. Also, the monetary cost of such a cache would be so high as to make this implementation practically unfeasible.&lt;br /&gt;
&lt;br /&gt;
Additionally, a serial algorithm could be constructed that would reduce the total problem size, but it would be much slower than its parallel counterpart. E.g., you could take this serial algorithm and parallelize it and both instances would do the same amount of work (less than the original problem size), but the parallel version would still do it much faster, achieving the superlinear speedup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;karp&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;IBM&amp;quot;&amp;gt;http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;published speedup&amp;quot;&amp;gt;http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;SS&amp;quot;&amp;gt;http://en.wikipedia.org/wiki/Speedup#Super_linear_speedup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ohai.png&amp;diff=60491</id>
		<title>File:Ohai.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ohai.png&amp;diff=60491"/>
		<updated>2012-03-22T01:07:48Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60055</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60055"/>
		<updated>2012-03-19T18:07:20Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Regular speedup(p) = T1 / Tparallel = 1/(s+(1-s)/p) -&amp;gt; Assumes a fixed problem size (T1 = 1)&lt;br /&gt;
Gustafson's speedup(p) = T1 / Tparallel = (T1)/(s+(1-s)) = (T1) -&amp;gt; Assumes a fixed execution time (Tparallel = 1)&lt;br /&gt;
How to calculate T1?&lt;br /&gt;
&lt;br /&gt;
Examine the work graph:&lt;br /&gt;
Tparallel =&lt;br /&gt;
[s][1-s  ]&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
     ...&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
Total execution time: s+(1-s) = 1 = Tparallel&lt;br /&gt;
Serial fraction: s = 0.3 (3 of 10 units)&lt;br /&gt;
&lt;br /&gt;
T1 =&lt;br /&gt;
[s][1-s  ][1-s  ] ... [1-s  ]&lt;br /&gt;
By inspection, the execution time is a single serial portion + p parallel portions.&lt;br /&gt;
Total execution time: s (serial) + p*(1-s) (parallel) = 0.3 + p*(1-0.3) = 0.3+0.7p&lt;br /&gt;
&lt;br /&gt;
Gustafson's speedup(p) = s + p*(1-s) / (s+(1-s)) = p + s - p*s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Superlinear Speedup&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as &amp;quot;superlinear speedup&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
However, it is not possible to serialize the parallel algorithm used in achieving superlinear speedup in order to get a better serial algorithm.&lt;br /&gt;
&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
[1] http://books.google.com/books? id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60051</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60051"/>
		<updated>2012-03-19T18:03:14Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Regular speedup(p) = T1 / Tparallel = 1/(s+(1-s)/p) -&amp;gt; Assumes a fixed problem size (T1 = 1)&lt;br /&gt;
Gustafson's speedup(p) = T1 / Tparallel = (T1)/(s+(1-s)) = (T1) -&amp;gt; Assumes a fixed execution time (Tparallel = 1)&lt;br /&gt;
How to calculate T1?&lt;br /&gt;
&lt;br /&gt;
Examine the work graph:&lt;br /&gt;
Tparallel =&lt;br /&gt;
[s][1-s  ]&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
     ...&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
Total execution time: s+(1-s) = 1 = Tparallel&lt;br /&gt;
Serial fraction: s = 0.3 (3 of 10 units)&lt;br /&gt;
&lt;br /&gt;
T1 =&lt;br /&gt;
[s][1-s  ][1-s  ] ... [1-s  ]&lt;br /&gt;
By inspection, the execution time is a single serial portion + p parallel portions.&lt;br /&gt;
Total execution time: s (serial) + p*(1-s) (parallel) = 0.3 + p*(1-0.3) = 0.3+0.7p&lt;br /&gt;
&lt;br /&gt;
Gustafson's speedup(p) = s + p*(1-s) / (s+(1-s)) = p + s - p*s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Superlinear Speedup&lt;br /&gt;
&lt;br /&gt;
If a problem were 100% parallelizable, then under ideal circumstances one would expect the speedup for a 4-processor system running the same problem to be 4. However, there are cases where such a system might achieve a speedup of, say, 4.3, or 5. This seems counter intuitive, and is a controversial topic known as &amp;quot;superlinear speedup&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Superlinear speedup most easily be attained by taking advantage of the combined cache size of all the processors. If the total cache size is greater than the problem's total working set, the problem can be placed inside the cache and executed much more quickly, allowing faster execution while doing the same amount of work.&lt;br /&gt;
&lt;br /&gt;
Another explanation for superlinear speedup is that the parallel execution of the problem does less total work than a uniprocessor system. This can be done by clever usage of algorithms such that the problem size is reduced, resulted in less total work. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
[1] http://books.google.com/books? id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60006</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60006"/>
		<updated>2012-03-19T17:43:14Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Regular speedup(p) = T1 / Tparallel = 1/(s+(1-s)/p) -&amp;gt; Assumes a fixed problem size (T1 = 1)&lt;br /&gt;
Gustafson's speedup(p) = T1 / Tparallel = (T1)/(s+(1-s)) = (T1) -&amp;gt; Assumes a fixed execution time (Tparallel = 1)&lt;br /&gt;
How to calculate T1?&lt;br /&gt;
&lt;br /&gt;
Examine the work graph:&lt;br /&gt;
Tparallel =&lt;br /&gt;
[s][1-s  ]&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
     ...&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
Total execution time: s+(1-s) = 1 = Tparallel&lt;br /&gt;
Serial fraction: s = 0.3 (3 of 10 units)&lt;br /&gt;
&lt;br /&gt;
T1 =&lt;br /&gt;
[s][1-s  ][1-s  ] ... [1-s  ]&lt;br /&gt;
By inspection, the execution time is a single serial portion + p parallel portions.&lt;br /&gt;
Total execution time: s (serial) + p*(1-s) (parallel) = 0.3 + p*(1-0.3) = 0.3+0.7p&lt;br /&gt;
&lt;br /&gt;
Gustafson's speedup(p) = s + p*(1-s) / (s+(1-s)) = p + s - p*s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Superlinear Speedup&lt;br /&gt;
&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
[1] http://books.google.com/books? id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60005</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=60005"/>
		<updated>2012-03-19T17:42:22Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
Regular speedup(p) = T1 / Tparallel = 1/(s+(1-s)/p) -&amp;gt; Assumes a fixed problem size (T1 = 1)&lt;br /&gt;
Gustafson's speedup(p) = T1 / Tparallel = (T1)/(s+(1-s)) = (T1) -&amp;gt; Assumes a fixed execution time (Tparallel = 1)&lt;br /&gt;
How to calculate T1?&lt;br /&gt;
&lt;br /&gt;
Examine the work graph:&lt;br /&gt;
Tparallel =&lt;br /&gt;
[s][1-s  ]&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
     ...&lt;br /&gt;
   [1-s  ]&lt;br /&gt;
Total execution time: s+(1-s) = 1 = Tparallel&lt;br /&gt;
Serial fraction: s = 0.3 (3 of 10 units)&lt;br /&gt;
&lt;br /&gt;
T1 =&lt;br /&gt;
[s][1-s  ][1-s  ] ... [1-s  ]&lt;br /&gt;
By inspection, the execution time is a single serial portion + p parallel portions.&lt;br /&gt;
Total execution time: s (serial) + p*(1-s) (parallel) = 0.3 + p*(1-0.3) = 0.3+0.7p&lt;br /&gt;
&lt;br /&gt;
Gustafson's speedup(p) = s + p*(1-s) / (s+(1-s)) = p + s - p*s&lt;br /&gt;
&lt;br /&gt;
Superlinear Speedup&lt;br /&gt;
&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
[1] http://books.google.com/books? id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59984</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59984"/>
		<updated>2012-03-19T16:59:54Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: sources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
speedup(p) = p - s(p-1)&lt;br /&gt;
&lt;br /&gt;
Superlinear Speedup&lt;br /&gt;
&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
[1] http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9Cpublished+speedups%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9Cpublished%20speedups%E2%80%9D&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59982</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59982"/>
		<updated>2012-03-19T16:59:15Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: sources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
speedup(p) = p - s(p-1)&lt;br /&gt;
&lt;br /&gt;
Superlinear Speedup&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
[1] http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=&amp;quot;published+speedups&amp;quot;&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=&amp;quot;published%20speedups&amp;quot;&lt;br /&gt;
[2] http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59979</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59979"/>
		<updated>2012-03-19T16:56:53Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold [1, first paragraph, second column, first page], and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed a limitation in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases (i.e., big machines do big problems, bigger problems means smaller portions of serial code, which means that there is more room for processors to parallelize). This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
speedup(p) = p - s(p-1)&lt;br /&gt;
&lt;br /&gt;
Superlinear Speedup&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59564</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59564"/>
		<updated>2012-03-14T18:04:59Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold, and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed the flaw in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
SOURCE http://books.google.com/books?id=Hm6LaufVKFEC&amp;amp;pg=PA55&amp;amp;lpg=PA55&amp;amp;dq=%E2%80%9CKarp+Challenge%E2%80%9D&amp;amp;source=bl&amp;amp;ots=uCAOgSzfmR&amp;amp;sig=KpvmL85rJHqoFuBZlXNL_e_thbs&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=ZNRgT4HxL4KatweYz5y7BQ&amp;amp;ved=0CFAQ6AEwBw#v=onepage&amp;amp;q=%E2%80%9CKarp%20Challenge%E2%80%9D&amp;amp;f=false&lt;br /&gt;
SOURCE http://techresearch.intel.com/ResearcherDetails.aspx?Id=182&lt;br /&gt;
&lt;br /&gt;
speedup(p) = p - s(p-1)&lt;br /&gt;
&lt;br /&gt;
Superlinear Speedup&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59562</id>
		<title>CSC 456 Spring 2012/ch4b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC_456_Spring_2012/ch4b&amp;diff=59562"/>
		<updated>2012-03-14T18:00:44Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: Created page with &amp;quot;Gustafson's Law  In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gustafson's Law&lt;br /&gt;
&lt;br /&gt;
In 1985, IBM scientist Alan Karp issued a challenge to anyone who could produce a speedup of over 200 times. &amp;quot;Karp's Challenge&amp;quot;, as it became known, highlighted the limitations of Amdahl's Law. Prevailing speedups at the time were less than tenfold, and were for applications with little real-world value. C. Gordon Bell decided to up the ante, offering a $1000 award for the same challenge, issued annually to the winner, but only if the speedup was at least twice that of the previous award. He initially expected the first winner to have a speedup close to ten times, and that it would be difficult to advance beyond that.&lt;br /&gt;
  &lt;br /&gt;
John Gustafson won the 1988 Gordon Bell prize by demonstrating a 1000x speedup on a parallel program. He noticed the flaw in Amdahl's Law, which assumed a constant serial fraction of the problem, regardless of problem size. Gustafson realized that when you scale the problem size up proportional to the number of processors, the non-parallelizable fraction of work decreases. This provided the basis of what became known as &amp;quot;Gustafson's Law&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
speedup(p) = p - s(p-1)&lt;br /&gt;
&lt;br /&gt;
Superlinear Speedup&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59004</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59004"/>
		<updated>2012-02-21T03:17:09Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared. In the 1990's there was a resurgence of in sectored caches. This is because sector caches have the feature that large numbers of bytes can be tagged using relatively small numbers of tag bits, while still only transferring small blocks when a miss occurs. This  suggests the use of sector caches for multilevel cache designs. In such a design, the cache tags can be placed at a higher level (e.g., on the processor chip) and the cache data array can be placed at a lower level  (e.g., off-chip).&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png|tumb|100px|980px|This is taken from reference 1]]&lt;br /&gt;
Image taken from reference 1.&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses which use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic (ie. run slower) than direct mapped caches; direct mapped caches are faster but less efficient. One solution is to use a more associative cache, giving each line higher associativity, but this is expensive in cache logic. In actual workloads, it was discovered that high associativity is only really needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache. Traditional victim caches are usually between 4 and 16 entries and run a little slower than the parent cache due to the fully associative feature of a victim cache.&lt;br /&gt;
&lt;br /&gt;
[[File:ch6_pzwong.png|tumb|100px|768px|A graphical representation of how a Victim Cache works]]&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache, which was no longer fully associative. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
[[File:Yarr.png|tumb|100px|800px|A diagram of old and new victim cache structure]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59003</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59003"/>
		<updated>2012-02-21T03:15:19Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared. In the 1990's there was a resurgence of in sectored caches. This is because sector caches have the feature that large numbers of bytes can be tagged using relatively small numbers of tag bits, while still only transferring small blocks when a miss occurs. This  suggests the use of sector caches for multilevel cache designs. In such a design, the cache tags can be placed at a higher level (e.g., on the processor chip) and the cache data array can be placed at a lower level  (e.g., off-chip).&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png|tumb|100px|980px|This is taken from reference 1]]&lt;br /&gt;
Image taken from reference 1.&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses which use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic (ie. run slower) than direct mapped caches; direct mapped caches are faster but less efficient. One solution is to use a more associative cache, giving each line higher associativity, but this is expensive in cache logic. In actual workloads, it was discovered that high associativity is only really needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache. Traditional victim caches are usually between 4 and 16 entries and run a little slower than the parent cache due to the fully associative feature of a victim cache.&lt;br /&gt;
&lt;br /&gt;
[[File:ch6_pzwong.png|tumb|100px|768px|A graphical representation of how a Victim Cache works]]&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
[[File:Yarr.png|tumb|100px|800px|A diagram of old and new victim cache structure]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Yarr.png&amp;diff=59002</id>
		<title>File:Yarr.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Yarr.png&amp;diff=59002"/>
		<updated>2012-02-21T03:14:38Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59001</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59001"/>
		<updated>2012-02-21T03:00:57Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared. In the 1990's there was a resurgence of in sectored caches. This is because sector caches have the feature that large numbers of bytes can be tagged using relatively small numbers of tag bits, while still only transferring small blocks when a miss occurs. This  suggests the use of sector caches for multilevel cache designs. In such a design, the cache tags can be placed at a higher level (e.g., on the processor chip) and the cache data array can be placed at a lower level  (e.g., off-chip).&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png|tumb|100px|980px|This is taken from reference 1]]&lt;br /&gt;
Image taken from reference 1.&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses which use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic (ie. run slower) than direct mapped caches; direct mapped caches are faster but less efficient. One solution is to use a more associative cache, giving each line higher associativity, but this is expensive in cache logic. In actual workloads, it was discovered that high associativity is only really needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache. Traditional victim caches are usually between 4 and 16 entries and run a little slower than the parent cache due to the fully associative feature of a victim cache.&lt;br /&gt;
&lt;br /&gt;
[[File:ch6_pzwong.png|tumb|100px|768px|A graphical representation of how a Victim Cache works]]&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59000</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=59000"/>
		<updated>2012-02-21T03:00:26Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared. In the 1990's there was a resurgence of in sectored caches. This is because sector caches have the feature that large numbers of bytes can be tagged using relatively small numbers of tag bits, while still only transferring small blocks when a miss occurs. This  suggests the use of sector caches for multilevel cache designs. In such a design, the cache tags can be placed at a higher level (e.g., on the processor chip) and the cache data array can be placed at a lower level  (e.g., off-chip).&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png|tumb|100px|980px|This is taken from reference 1]]&lt;br /&gt;
Image taken from reference 1.&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses which use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic (ie. run slower) than direct mapped caches; direct mapped caches are faster but less efficient. One solution is to use a more associative cache, giving each line higher associativity, but this is expensive in cache logic. In actual workloads, it was discovered that high associativity is only really needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache. Traditional victim caches are usually between 4 and 16 entries and run a little slower than the parent cache due to the fully associative feature of a victim cache.&lt;br /&gt;
&lt;br /&gt;
[[File:ch6_pzwong.png|tumb|100px|980px|A graphical representation of how a Victim Cache works]]&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ch6_pzwong.png&amp;diff=58999</id>
		<title>File:Ch6 pzwong.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ch6_pzwong.png&amp;diff=58999"/>
		<updated>2012-02-21T02:59:08Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58973</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58973"/>
		<updated>2012-02-20T19:03:21Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared. In the 1990's there was a resurgence of in sectored caches. aches. This is because sector caches have the feature that large numbers of bytes can be tagged using relatively small numbers of tag bits, while still only transferring small blocks when a miss occurs. This  suggests the use of sector caches for multilevel cache designs. In such a design, the cache tags can be placed at a higher level (e.g., on the processor chip) and the cache data array can be placed at a lower level  (e.g., off-chip).&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png|tumb|100px|980px|This is taken from reference 1]]&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses which use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic (ie. run slower) than direct mapped caches; direct mapped caches are faster but less efficient. One solution is to use a more associative cache, giving each line higher associativity, but this is expensive in cache logic. In actual workloads, it was discovered that high associativity is only really needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache. Traditional victim caches are usually between 4 and 16 entries and run a little slower than the parent cache due to the fully associative feature of a victim cache.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58964</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58964"/>
		<updated>2012-02-20T18:56:12Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png]]&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses which use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic (ie. run slower) than direct mapped caches; direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache. Traditional victim caches are usually between 4 and 16 entries and run a little slower than the parent cache due to the fully associative feature of a victim cache.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58961</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58961"/>
		<updated>2012-02-20T18:51:27Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png]]&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small: 8 entries (512 bytes at 64 bytes per line).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58957</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58957"/>
		<updated>2012-02-20T18:45:16Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png]]&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series. The AMD and Intel implementations will be examined in the next section.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small, usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58955</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58955"/>
		<updated>2012-02-20T18:44:44Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png]]&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small, usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58954</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58954"/>
		<updated>2012-02-20T18:44:11Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
[[File:examples_of_sectored_cache.png]]&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series.&lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache as a buffer between levels of cache.&lt;br /&gt;
&lt;br /&gt;
Traditional Victim Caches are implemented in AMD's older architectures, such as the K7 and K8. In K7, the cache was located on a very slow external bus, and the victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache. In K8 and later iterations of K7, the L2 cache was fast because it was integrated on-chip, but transferring data between the L1 and L2 cache was still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core. The victim caches on these CPUs was very small, usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, AMD used the &amp;quot;victim cache&amp;quot; idea and evolved it into a large &amp;quot;victim cache&amp;quot; capable of serving more than two CPUs. In AMD's K10 architecture, a three-level cache hierarchy was used, with the new victim cache at the third level. A smaller, faster, and more associative L1 and L2 cache was dedicated to each CPU, coupled to a large, slow L3 victim cache. This victim cache was shared between all of the CPUs on the package and was 2-6 MB, an order of magnitude larger than earlier victim caches. The higher associativities of lower level caches reduces the effectiveness of the traditional victim cache. Thus, the evolution of the victim cache to fulfill the demands of multiprocessing is natural.&lt;br /&gt;
&lt;br /&gt;
Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system (the cache line is just re-fetched from the lower level cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58937</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58937"/>
		<updated>2012-02-20T18:19:05Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
===Examples===&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series.&lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache.&lt;br /&gt;
&lt;br /&gt;
However, the motivation behind the victim cache between the architectures could not be more different.&lt;br /&gt;
&lt;br /&gt;
In K7, the cache was located on a very slow external bus. The victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache.&lt;br /&gt;
&lt;br /&gt;
In K8, and later iterations of K7, the L2 cache was integrated on-chip, but transferring data between the L1 and L2 cache is still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core.&lt;br /&gt;
&lt;br /&gt;
K10 adopted a three-level cache hierarchy, using smaller but faster L1 and L2 caches coupled to a large, slow L3 &amp;quot;victim cache&amp;quot;. The &amp;quot;victim cache&amp;quot; is 2-6 MB, an order of magnitude larger than most victim cache implementations, which are usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, the creation of K10's large L3 &amp;quot;victim cache&amp;quot; served to make it possible to design a large and relatively fast cache capable of serving more than two CPUs. Similarly, Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches to improve cache performance for multiple CPUs. Intel's cache hierarchy is inclusive, so no prior Intel CPU has implemented this feature, as there is no good reason to use a victim cache for a inclusive cache on a uniprocessor system. It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58928</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58928"/>
		<updated>2012-02-20T18:05:30Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section, sectored caches were all but abandoned due to the inferiority to other designs; this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
===Implementations===&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series.&lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache.&lt;br /&gt;
&lt;br /&gt;
However, the motivation behind the victim cache between the architectures could not be more different.&lt;br /&gt;
&lt;br /&gt;
In K7, the cache was located on a very slow external bus. The victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache.&lt;br /&gt;
&lt;br /&gt;
In K8, and later iterations of K7, the L2 cache was integrated on-chip, but transferring data between the L1 and L2 cache is still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core.&lt;br /&gt;
&lt;br /&gt;
K10 adopted a three-level cache hierarchy, using smaller but faster L1 and L2 caches coupled to a large, slow L3 &amp;quot;victim cache&amp;quot;. The &amp;quot;victim cache&amp;quot; is 2-6 MB, an order of magnitude larger than most victim cache implementations, which are usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, the creation of K10's large L3 &amp;quot;victim cache&amp;quot; served to make it possible to design a large and relatively fast cache capable of serving more than two CPUs. Similarly, Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches, although the cache hierarchy is inclusive (for which there is no good reason to use a victim cache if only considering uniprocessing). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58086</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58086"/>
		<updated>2012-02-06T19:07:03Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section sectored caches were all but abandoned due to the inferiority to other designs, this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series.&lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache.&lt;br /&gt;
&lt;br /&gt;
However, the motivation behind the victim cache between the architectures could not be more different.&lt;br /&gt;
&lt;br /&gt;
In K7, the cache was located on a very slow external bus. The victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache.&lt;br /&gt;
&lt;br /&gt;
In K8, and later iterations of K7, the L2 cache was integrated on-chip, but transferring data between the L1 and L2 cache is still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core.&lt;br /&gt;
&lt;br /&gt;
K10 adopted a three-level cache hierarchy, using smaller but faster L1 and L2 caches coupled to a large, slow L3 &amp;quot;victim cache&amp;quot;. The &amp;quot;victim cache&amp;quot; is 2-6 MB, an order of magnitude larger than most victim cache implementations, which are usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, the creation of K10's large L3 &amp;quot;victim cache&amp;quot; served to make it possible to design a large and relatively fast cache capable of serving more than two CPUs. Similarly, Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches, although the cache hierarchy is inclusive (for which there is no good reason to use a victim cache). It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf &amp;lt;br/&amp;gt;&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58081</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=58081"/>
		<updated>2012-02-06T19:05:10Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
One of the first commercially available PCs that used a cache, IBM 360/85, used a sectored cache. The primary reason for a sectored cache is that during the time of the IBM 360/85 it was easier to build than current non-sectored designs. However, the sectored design proved to be much less efficient then the non-sectored designs (of the time) and thus largely disappeared.&lt;br /&gt;
&lt;br /&gt;
===How they work===&lt;br /&gt;
A sectored cache is broken up into sectors (hence the name) each of which has an address tag associated with it. Each sector is further broken down into subsectors, each of which has a &amp;quot;valid&amp;quot; bit allowing for some subsectors to remain empty while others are full. [[File:sectored_diagram.png|thumb|alt=This is a picture of a sectored cache|This is a diagram of a sectored cache taken from Jeffry B. Rotham&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.]]When there is a miss to a sector, a resident sector is evicted, an address tag is set to point to the missed sector and a single subsector is fetched. When a subsector is missing but the sector &amp;quot;containing&amp;quot; it is present then only the subsector needs to be fetched. As mentioned in the history section sectored caches were all but abandoned due to the inferiority to other designs, this inferiority came mainly to the design flaw that a sector would often be evicted before all subsectors had been loaded thus at any given time much of the cache was not utilized.Sector caches do have, however, one important advantage. In a normal, (non-sectored) cache, the only way to  have a  very large cache capacity with a relatively small numb er  of tag bits is to make the cache blocks (lines) very large; the problem in that case is that every miss requires that a large block be fetched in its entirety. With a sector cache, it is possible to fetch only a portion of a block (or sector), and thus the time to handle a miss, and the bus traffic, can both be significantly reduced. Thus, although it is likely that sector caches will have higher miss ratios than normal caches, there is the possibility that when timing is considered, the sector cache will be found to have better performance.&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern where a cache line conflict occurs. These types of memory patterns cause conflict misses, a cache miss caused by subsequent accesses use and evict the same cache line.&lt;br /&gt;
&lt;br /&gt;
In general, the solution to conflict misses is a cache of higher associativity. However, associative caches require more logic than direct mapped caches, implying that direct mapped caches are faster but less efficient.&lt;br /&gt;
In actual workloads, it was discovered that high associativity is only needed for very few cache lines. The victim cache's effect is to extend the associativity of cache lines which need them. The associativity of that particular direct mapped cache line increases by the number of entries in the victim cache.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, AMD K10, and the Intel Core i7 series.&lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data by ensuring that data is only available at one cache level. When a line of cache is evicted from a lower level cache, it is added to a higher level cache. Therefore, a victim cache is a natural development from implementation of an exclusive cache.&lt;br /&gt;
&lt;br /&gt;
However, the motivation behind the victim cache between the architectures could not be more different.&lt;br /&gt;
&lt;br /&gt;
In K7, the cache was located on a very slow external bus. The victim cache acted as a buffer between evicted lines from L1 cache and slow L2 cache.&lt;br /&gt;
&lt;br /&gt;
In K8, and later iterations of K7, the L2 cache was integrated on-chip, but transferring data between the L1 and L2 cache is still an expensive (powerwise) operation that the victim cache helped mitigate. In addition, the hardware is already there from the K7 core.&lt;br /&gt;
&lt;br /&gt;
K10 adopted a three-level cache hierarchy, using smaller but faster L1 and L2 caches coupled to a large, slow L3 &amp;quot;victim cache&amp;quot;. The &amp;quot;victim cache&amp;quot; is 2-6 MB, an order of magnitude larger than most victim cache implementations, which are usually no more than 16 entries (1024 bytes).&lt;br /&gt;
&lt;br /&gt;
With the increasing focus on multiprocessing, the creation of K10's large L3 &amp;quot;victim cache&amp;quot; served to make it possible to design a large and relatively fast cache capable of serving more than two CPUs. Similarly, Intel's Core i7 uses the L3 &amp;quot;victim cache&amp;quot; with non-shared L2 caches, although the cache hierarchy is inclusive. It marks the first time that an Intel chip has implemented a victim cache.&lt;br /&gt;
&lt;br /&gt;
Look into:&lt;br /&gt;
non-x86 victim caches, herp&lt;br /&gt;
&lt;br /&gt;
Actual *implications* of victim caches for inclusive vs. exclusive cache hierarchies... yep&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
1. http://www.eecs.berkeley.edu/Pubs/TechRpts/1999/CSD-99-1034.pdf&lt;br /&gt;
2. http://delivery.acm.org/10.1145/200000/192072/p384-seznec.pdf?ip=152.14.244.199&amp;amp;acc=ACTIVE%20SERVICE&amp;amp;CFID=83457235&amp;amp;CFTOKEN=35168855&amp;amp;__acm__=1328554043_50f74be9f1a9f6d72939aa9190e069e7&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57325</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57325"/>
		<updated>2012-01-30T18:59:29Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern (of which a cache line conflict occurs). In effect, this extends the associativity of would-be conflict misses by the number of entries in the victim cache for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, and finally the AMD K10. &lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data. Therefore, a victim cache is a natural development from implementation of an exclusive cache. &lt;br /&gt;
&lt;br /&gt;
In K7, the cache is on a very slow external bus. The victim cache acted as a buffer between evicted lines from L1 cache, and slow L2 cache.&lt;br /&gt;
&lt;br /&gt;
The K10's &amp;quot;victim cache&amp;quot; deserves some more inspection, as it is 2-6 MB, an order of magnitude larger than most victim cache implementations. It is more of a buffer for efficient implementation of AMD's exclusive cache hierarchy. It is possible that AMD decided that the L3 cache was fast enough to act as a victim cache.&lt;br /&gt;
&lt;br /&gt;
Look into:&lt;br /&gt;
non-x86 victim caches, herp&lt;br /&gt;
&lt;br /&gt;
Actual *implications* of victim caches for inclusive vs. exclusive cache hierarchies... yep&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57318</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57318"/>
		<updated>2012-01-30T18:53:41Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. This cache is usually highly associative and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern (of which a cache line conflict occurs). In effect, this extends the associativity of would-be conflict misses by the number of entries in the victim cache for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, and finally the AMD K10. &lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data. Therefore, a victim cache is a natural development from implementation of an exclusive cache. &lt;br /&gt;
&lt;br /&gt;
The K10's &amp;quot;victim cache&amp;quot; deserves some more inspection, as it is at least 2MB big and 32-way set associative; at this point, it is no longer a traditional victim cache and more of a buffer for efficient implementation of AMD's exclusive cache hierarchy. It is possible that AMD decided a traditional, fast victim cache was not beneficial on the K10 architecture and elected to directly use L3 cache as a victim cache.&lt;br /&gt;
&lt;br /&gt;
Look into:&lt;br /&gt;
non-x86 victim caches, herp&lt;br /&gt;
&lt;br /&gt;
Actual *implications* of victim caches for inclusive vs. exclusive cache hierarchies... yep&lt;br /&gt;
&lt;br /&gt;
actual cache organization of victim cache (my source said direct mapped but some are fully/especially-highly- associative)&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57315</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57315"/>
		<updated>2012-01-30T18:51:42Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. For speed reasons, this cache is usually direct-mapped and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern (of which a cache line conflict occurs). In effect, this extends the associativity of would-be conflict misses by an extra way for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, and finally the AMD K10. &lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data. Therefore, a victim cache is a natural development from implementation of an exclusive cache. &lt;br /&gt;
&lt;br /&gt;
The K10's &amp;quot;victim cache&amp;quot; deserves some more inspection, as it is at least 2MB big and 32-way set associative; at this point, it is no longer a traditional victim cache and more of a buffer for efficient implementation of AMD's exclusive cache hierarchy. It is possible that AMD decided a traditional, fast victim cache was not beneficial on the K10 architecture and elected to directly use L3 cache as a victim cache.&lt;br /&gt;
&lt;br /&gt;
Look into:&lt;br /&gt;
non-x86 victim caches, herp&lt;br /&gt;
&lt;br /&gt;
Actual *implications* of victim caches for inclusive vs. exclusive cache hierarchies... yep&lt;br /&gt;
&lt;br /&gt;
actual cache organization of victim cache (my source said direct mapped but some are fully/especially-highly- associative)&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57314</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57314"/>
		<updated>2012-01-30T18:49:49Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. For speed reasons, this cache is usually direct-mapped and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern (of which a cache line conflict occurs). In effect, this extends the associativity of would-be conflict misses by an extra way for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, and finally the AMD K10. &lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data. Therefore, a victim cache is a natural development from implementation of an exclusive cache. &lt;br /&gt;
&lt;br /&gt;
The K10's &amp;quot;victim cache&amp;quot; deserves some more inspection, as it is at least 2MB big and 32-way set associative; at this point, it is no longer a traditional victim cache and more of a buffer for efficient implementation of AMD's exclusive cache hierarchy. It is possible that AMD decided a traditional, fast victim cache was not beneficial on the K10 architecture and elected to directly use L3 cache as a victim cache.&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57308</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57308"/>
		<updated>2012-01-30T18:44:31Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. For speed reasons, this cache is usually direct-mapped and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern (of which a cache line conflict occurs). In effect, this extends the associativity of would-be conflict misses by an extra way for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the Transmeta Efficeon, AMD K7, AMD K8, and finally the AMD K10. &lt;br /&gt;
&lt;br /&gt;
AMD has traditionally implemented an exclusive cache hierarchy, a form of cache that avoids duplication of data. Therefore, a victim cache is a natural development from implementation of an exclusive cache. &lt;br /&gt;
&lt;br /&gt;
The K10's victim cache deserves some more inspection, as it is at least 2MB big and 32-way set associative; at this point, it is no longer a traditional victim cache and more of a buffer for efficient implementation of AMD's exclusive cache hierarchy.&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57307</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57307"/>
		<updated>2012-01-30T18:38:58Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Victim Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. For speed reasons, this cache is usually direct-mapped and has very few entries, but solves one of the pathological cases for direct-mapped caches, the alternating memory access pattern (of which a cache line conflict occurs). In effect, this extends the associativity of would-be conflict misses by an extra way for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the AMD K7, K8, and finally K10 (a variant of K8). The Transmeta Efficeon also implemented a victim cache.&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57306</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57306"/>
		<updated>2012-01-30T18:37:55Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: /* Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. For speed reasons, this cache is usually direct-mapped and has very few entries, but solves one of the pathological cases for direct-mapped caches, the just-evicted memory access pattern. In effect, this extends the associativity of would-be conflict misses by an extra way for very low cost.&lt;br /&gt;
&lt;br /&gt;
Architectures implementing victim cache for x86 include the AMD K7, K8, and finally K10 (a variant of K8). The Transmeta Efficeon also implemented a victim cache.&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57302</id>
		<title>Chapter 6: Joshua Mohundro, Patrick Wong</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Chapter_6:_Joshua_Mohundro,_Patrick_Wong&amp;diff=57302"/>
		<updated>2012-01-30T18:26:30Z</updated>

		<summary type="html">&lt;p&gt;Pzwong: herp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sectored Cache ==&lt;br /&gt;
Hard section&lt;br /&gt;
&lt;br /&gt;
== Victim Cache ==&lt;br /&gt;
The Victim Cache, in architectures with them, stores just-evicted lines from another level of cache. For speed reasons, this cache is usually direct-mapped and has very few entries, but solves one of the pathological cases for direct-mapped caches.&lt;/div&gt;</summary>
		<author><name>Pzwong</name></author>
	</entry>
</feed>