https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Cache-oblivious_algorithm Cache-oblivious algorithm - Revision history 2025-05-26T02:32:08Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.2 https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1255108940&oldid=prev Citation bot: Alter: title, template type. Add: chapter-url, volume, series, chapter. Removed or converted URL. | Use this bot. Report bugs. | Suggested by Dominic3203 | Category:Analysis of algorithms | #UCB_Category 34/47 2024-11-03T05:14:29Z <p>Alter: title, template type. Add: chapter-url, volume, series, chapter. Removed or converted URL. | <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">Use this bot</a>. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs</a>. | Suggested by Dominic3203 | <a href="/wiki/Category:Analysis_of_algorithms" title="Category:Analysis of algorithms">Category:Analysis of algorithms</a> | #UCB_Category 34/47</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 05:14, 3 November 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 10:</td> <td colspan="2" class="diff-lineno">Line 10:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Idealized cache model==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Idealized cache model==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>In general, a [[computer program|program]] can be made more cache-conscious:&lt;ref name="nick05"&gt;{{cite <del style="font-weight: bold; text-decoration: none;">journal</del> |journal=International Symposium on String Processing and Information Retrieval |title=<del style="font-weight: bold; text-decoration: none;">Cache-Conscious</del> <del style="font-weight: bold; text-decoration: none;">Collision</del> <del style="font-weight: bold; text-decoration: none;">Resolution</del> <del style="font-weight: bold; text-decoration: none;">in</del> <del style="font-weight: bold; text-decoration: none;">String Hash Tables</del> |last1=Askitis |first1=Nikolas |last2=Zobel |first2=Justin |publisher=[[Springer Publishing |Springer]] |isbn=978-3-540-29740-6 |year=2005 |page=93 |doi=10.1007/11575832_1 |url=https://link.springer.com/chapter/10.1007/11575832_11}}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>In general, a [[computer program|program]] can be made more cache-conscious:&lt;ref name="nick05"&gt;{{cite <ins style="font-weight: bold; text-decoration: none;">book</ins> |journal=International Symposium on String Processing and Information Retrieval |title=<ins style="font-weight: bold; text-decoration: none;">String</ins> <ins style="font-weight: bold; text-decoration: none;">Processing</ins> <ins style="font-weight: bold; text-decoration: none;">and</ins> <ins style="font-weight: bold; text-decoration: none;">Information</ins> <ins style="font-weight: bold; text-decoration: none;">Retrieval</ins> |last1=Askitis |first1=Nikolas |last2=Zobel |first2=Justin<ins style="font-weight: bold; text-decoration: none;"> |chapter=Enhanced Byte Codes with Restricted Prefix Properties |series=Lecture Notes in Computer Science</ins> |publisher=[[Springer Publishing |Springer]] |isbn=978-3-540-29740-6 |year=2005<ins style="font-weight: bold; text-decoration: none;"> |volume=3772</ins> |page=93 |doi=10.1007/11575832_1 |<ins style="font-weight: bold; text-decoration: none;">chapter-</ins>url=https://link.springer.com/chapter/10.1007/11575832_11}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''[[Locality of reference#Types of locality|Temporal locality]]'', where the algorithm fetches the same pieces of memory multiple times;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''[[Locality of reference#Types of locality|Temporal locality]]'', where the algorithm fetches the same pieces of memory multiple times;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''Spatial locality'', where the subsequent memory accesses are adjacent or nearby [[memory address]]es.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''Spatial locality'', where the subsequent memory accesses are adjacent or nearby [[memory address]]es.</div></td> </tr> </table> Citation bot https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1217288325&oldid=prev A876: _complex_. sorted. 2024-04-04T23:05:23Z <p>_complex_. sorted.</p> <a href="//en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&amp;diff=1217288325&amp;oldid=1120865123">Show changes</a> A876 https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1120865123&oldid=prev Jruderman: /* Practicality */ 2022-11-09T06:51:03Z <p><span class="autocomment">Practicality</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 06:51, 9 November 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 56:</td> <td colspan="2" class="diff-lineno">Line 56:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An empirical comparison of 2 RAM-based, 1 cache-aware, and 2 cache-oblivious algorithms implementing [[priority queue]]s found that:&lt;ref&gt;{{cite thesis|url=http://hjemmesider.diku.dk/~jyrki/PE-lab/Publications/olsen-skov02.pdf |access-date=3 January 2022|title=Cache-Oblivious Algorithms in Practice|type=Master's|first1=Jesper Holm|last1=Olsen|first2=Søren Christian|last2=Skov|publisher=University of Copenhagen</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An empirical comparison of 2 RAM-based, 1 cache-aware, and 2 cache-oblivious algorithms implementing [[priority queue]]s found that:&lt;ref&gt;{{cite thesis|url=http://hjemmesider.diku.dk/~jyrki/PE-lab/Publications/olsen-skov02.pdf |access-date=3 January 2022|title=Cache-Oblivious Algorithms in Practice|type=Master's|first1=Jesper Holm|last1=Olsen|first2=Søren Christian|last2=Skov|publisher=University of Copenhagen</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|date=2 December 2002}}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|date=2 December 2002}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Cache-oblivious algorithms performed worse than RAM-based and cache-aware algorithms when data fits into main memory</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Cache-oblivious algorithms performed worse than RAM-based and cache-aware algorithms when data fits into main memory<ins style="font-weight: bold; text-decoration: none;">.</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The cache-aware algorithm did not seem significantly more complex to implement than the cache-oblivious algorithms, and offered the best performance in all cases tested in the study.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The cache-aware algorithm did not seem significantly more complex to implement than the cache-oblivious algorithms, and offered the best performance in all cases tested in the study.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Cache oblivious algorithms outperformed RAM-based algorithms when data size exceeded the size of main memory.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Cache oblivious algorithms outperformed RAM-based algorithms when data size exceeded the size of main memory.</div></td> </tr> </table> Jruderman https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1107260139&oldid=prev Mathnerd314159: /* Practicality */ date 2022-08-29T01:58:59Z <p><span class="autocomment">Practicality: </span> date</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 01:58, 29 August 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 60:</td> <td colspan="2" class="diff-lineno">Line 60:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Cache oblivious algorithms outperformed RAM-based algorithms when data size exceeded the size of main memory.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Cache oblivious algorithms outperformed RAM-based algorithms when data size exceeded the size of main memory.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Another study compared [[hash table]]s (as RAM-based or cache-unaware), [[B-tree]]s (as cache-aware), and a cache-oblivious data structure referred to as a "Bender set". For both execution time and memory usage, the hash table was best, followed by the B-tree, with the Bender set the worst in all cases. The memory usage for all tests did not exceed main memory. The hash tables were described as easy to implement, while the Bender set "required a greater amount of effort to implement correctly".&lt;ref&gt;{{cite web |last1=Verver |first1=Maks |title=Evaluation of a Cache-Oblivious Data Structure |url=https://fmt.ewi.utwente.nl/media/61.pdf |access-date=3 January 2022}}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Another study compared [[hash table]]s (as RAM-based or cache-unaware), [[B-tree]]s (as cache-aware), and a cache-oblivious data structure referred to as a "Bender set". For both execution time and memory usage, the hash table was best, followed by the B-tree, with the Bender set the worst in all cases. The memory usage for all tests did not exceed main memory. The hash tables were described as easy to implement, while the Bender set "required a greater amount of effort to implement correctly".&lt;ref&gt;{{cite web |last1=Verver |first1=Maks |title=Evaluation of a Cache-Oblivious Data Structure |url=https://fmt.ewi.utwente.nl/media/61.pdf |access-date=3 January 2022<ins style="font-weight: bold; text-decoration: none;">|date=23 June 2008</ins>}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==See also==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==See also==</div></td> </tr> </table> Mathnerd314159 https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1107157366&oldid=prev David Eppstein: Undid revision 1107134946 by Gnash (talk) Not a typo. You changed the meaning to the wrong word. "Provably" means "It can be proven". Learn it. Use it. Stop incorrectly changing it. 2022-08-28T13:28:00Z <p>Undid revision 1107134946 by <a href="/wiki/Special:Contributions/Gnash" title="Special:Contributions/Gnash">Gnash</a> (<a href="/wiki/User_talk:Gnash" title="User talk:Gnash">talk</a>) Not a typo. You changed the meaning to the wrong word. &quot;Provably&quot; means &quot;It can be proven&quot;. Learn it. Use it. Stop incorrectly changing it.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 13:28, 28 August 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 14:</td> <td colspan="2" class="diff-lineno">Line 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''Spatial locality'', where the subsequent memory accesses are adjacent or nearby [[memory address]]es.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''Spatial locality'', where the subsequent memory accesses are adjacent or nearby [[memory address]]es.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Cache-oblivious algorithms are typically analyzed using an idealized model of the cache, sometimes called the '''cache-oblivious model'''. This model is much easier to analyze than a real cache's characteristics (which have complicated associativity, replacement policies, etc.), but in many cases is <del style="font-weight: bold; text-decoration: none;">probably</del> within a constant factor of a more realistic cache's performance. It is different than the [[external memory model]] because cache-oblivious algorithms do not know the [[block (data storage)|block size]] or the [[cache (computing)|cache]] size.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Cache-oblivious algorithms are typically analyzed using an idealized model of the cache, sometimes called the '''cache-oblivious model'''. This model is much easier to analyze than a real cache's characteristics (which have complicated associativity, replacement policies, etc.), but in many cases is <ins style="font-weight: bold; text-decoration: none;">{{not a typo|provably}}</ins> within a constant factor of a more realistic cache's performance. It is different than the [[external memory model]] because cache-oblivious algorithms do not know the [[block (data storage)|block size]] or the [[cache (computing)|cache]] size.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In particular, the cache-oblivious model is an [[abstract machine]] (i.e., a theoretical [[model of computation]]). It is similar to the [[RAM model|RAM machine model]] which replaces the [[Turing machine]]'s infinite tape with an infinite array. Each location within the array can be accessed in &lt;math&gt;O(1)&lt;/math&gt; time, similar to the [[random-access memory]] on a real computer. Unlike the RAM machine model, it also introduces a cache: the second level of storage between the RAM and the CPU. The other differences between the two models are listed below. In the cache-oblivious model:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In particular, the cache-oblivious model is an [[abstract machine]] (i.e., a theoretical [[model of computation]]). It is similar to the [[RAM model|RAM machine model]] which replaces the [[Turing machine]]'s infinite tape with an infinite array. Each location within the array can be accessed in &lt;math&gt;O(1)&lt;/math&gt; time, similar to the [[random-access memory]] on a real computer. Unlike the RAM machine model, it also introduces a cache: the second level of storage between the RAM and the CPU. The other differences between the two models are listed below. In the cache-oblivious model:</div></td> </tr> </table> David Eppstein https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1107134946&oldid=prev Gnash: /* Idealized cache model */typo 2022-08-28T10:11:52Z <p><span class="autocomment">Idealized cache model: </span>typo</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 10:11, 28 August 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 14:</td> <td colspan="2" class="diff-lineno">Line 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''Spatial locality'', where the subsequent memory accesses are adjacent or nearby [[memory address]]es.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>*''Spatial locality'', where the subsequent memory accesses are adjacent or nearby [[memory address]]es.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Cache-oblivious algorithms are typically analyzed using an idealized model of the cache, sometimes called the '''cache-oblivious model'''. This model is much easier to analyze than a real cache's characteristics (which have complicated associativity, replacement policies, etc.), but in many cases is <del style="font-weight: bold; text-decoration: none;">provably</del> within a constant factor of a more realistic cache's performance. It is different than the [[external memory model]] because cache-oblivious algorithms do not know the [[block (data storage)|block size]] or the [[cache (computing)|cache]] size.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Cache-oblivious algorithms are typically analyzed using an idealized model of the cache, sometimes called the '''cache-oblivious model'''. This model is much easier to analyze than a real cache's characteristics (which have complicated associativity, replacement policies, etc.), but in many cases is <ins style="font-weight: bold; text-decoration: none;">probably</ins> within a constant factor of a more realistic cache's performance. It is different than the [[external memory model]] because cache-oblivious algorithms do not know the [[block (data storage)|block size]] or the [[cache (computing)|cache]] size.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In particular, the cache-oblivious model is an [[abstract machine]] (i.e., a theoretical [[model of computation]]). It is similar to the [[RAM model|RAM machine model]] which replaces the [[Turing machine]]'s infinite tape with an infinite array. Each location within the array can be accessed in &lt;math&gt;O(1)&lt;/math&gt; time, similar to the [[random-access memory]] on a real computer. Unlike the RAM machine model, it also introduces a cache: the second level of storage between the RAM and the CPU. The other differences between the two models are listed below. In the cache-oblivious model:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In particular, the cache-oblivious model is an [[abstract machine]] (i.e., a theoretical [[model of computation]]). It is similar to the [[RAM model|RAM machine model]] which replaces the [[Turing machine]]'s infinite tape with an infinite array. Each location within the array can be accessed in &lt;math&gt;O(1)&lt;/math&gt; time, similar to the [[random-access memory]] on a real computer. Unlike the RAM machine model, it also introduces a cache: the second level of storage between the RAM and the CPU. The other differences between the two models are listed below. In the cache-oblivious model:</div></td> </tr> </table> Gnash https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1083020282&oldid=prev 84.245.121.189: /* Idealized cache model */ clarify statement 2022-04-16T14:41:03Z <p><span class="autocomment">Idealized cache model: </span> clarify statement</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 14:41, 16 April 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 34:</td> <td colspan="2" class="diff-lineno">Line 34:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |citeseerx=10.1.1.150.5426</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |citeseerx=10.1.1.150.5426</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> }}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> }}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>*The replacement policy is optimal. In other words, the cache is assumed to be given the entire sequence of memory accesses during algorithm execution. If it needs to evict a line at time &lt;math&gt;t&lt;/math&gt;, it will look into its sequence of future requests and evict the line <del style="font-weight: bold; text-decoration: none;">that</del> <del style="font-weight: bold; text-decoration: none;">is</del> <del style="font-weight: bold; text-decoration: none;">accessed</del> furthest in the future. This can be emulated in practice with the [[Least Recently Used]] policy, which is shown to be within a small constant factor of the offline optimal replacement strategy&lt;ref name="Frigo99"&gt;{{cite conference |first1=M. |last1=Frigo |first2=C. E. |last2=Leiserson |authorlink2=Charles Leiserson |first3=H. |last3=Prokop |authorlink3=Harald Prokop |first4=S. |last4=Ramachandran |title=Cache-oblivious algorithms |conference=Proc. IEEE Symp. on Foundations of Computer Science (FOCS) |pages=285–297 |year=1999 |url=http://supertech.csail.mit.edu/papers/FrigoLePr99.pdf}}&lt;/ref&gt;&lt;ref name="Sleator"&gt;Daniel Sleator, Robert Tarjan. [https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.367.6317&amp;rep=rep1&amp;type=pdf Amortized Efficiency of List Update and Paging Rules]. In ''Communications of the ACM'', Volume 28, Number 2, pp. 202–208. Feb 1985.&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>*The replacement policy is optimal. In other words, the cache is assumed to be given the entire sequence of memory accesses during algorithm execution. If it needs to evict a line at time &lt;math&gt;t&lt;/math&gt;, it will look into its sequence of future requests and evict the line <ins style="font-weight: bold; text-decoration: none;">whose</ins> <ins style="font-weight: bold; text-decoration: none;">first</ins> <ins style="font-weight: bold; text-decoration: none;">access is</ins> furthest in the future. This can be emulated in practice with the [[Least Recently Used]] policy, which is shown to be within a small constant factor of the offline optimal replacement strategy&lt;ref name="Frigo99"&gt;{{cite conference |first1=M. |last1=Frigo |first2=C. E. |last2=Leiserson |authorlink2=Charles Leiserson |first3=H. |last3=Prokop |authorlink3=Harald Prokop |first4=S. |last4=Ramachandran |title=Cache-oblivious algorithms |conference=Proc. IEEE Symp. on Foundations of Computer Science (FOCS) |pages=285–297 |year=1999 |url=http://supertech.csail.mit.edu/papers/FrigoLePr99.pdf}}&lt;/ref&gt;&lt;ref name="Sleator"&gt;Daniel Sleator, Robert Tarjan. [https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.367.6317&amp;rep=rep1&amp;type=pdf Amortized Efficiency of List Update and Paging Rules]. In ''Communications of the ACM'', Volume 28, Number 2, pp. 202–208. Feb 1985.&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>To measure the complexity of an algorithm that executes within the cache-oblivious model, we measure the number of [[cache miss]]es that the algorithm experiences. Because the model captures the fact that accessing elements in the [[cache (computing)|cache]] is much faster than accessing things in [[main memory]], the [[running time]] of the algorithm is defined only by the number of memory transfers between the cache and main memory. This is similar to the [[external memory model]], which all of the features above, but cache-oblivious algorithms are independent of cache parameters (&lt;math&gt;B&lt;/math&gt; and &lt;math&gt;M&lt;/math&gt;).&lt;ref name="Demaine02"&gt;[[Erik Demaine]]. [http://erikdemaine.org/papers/BRICS2002/ Cache-Oblivious Algorithms and Data Structures], in Lecture Notes from the EEF Summer School on Massive Data Sets, BRICS, University of Aarhus, Denmark, June 27–July 1, 2002.&lt;/ref&gt; The benefit of such an algorithm is that what is efficient on a cache-oblivious machine is likely to be efficient across many real machines without fine-tuning for particular real machine parameters. For many problems, an optimal cache-oblivious algorithm will also be optimal for a machine with more than two [[memory hierarchy]] levels.&lt;ref name="Frigo99"/&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>To measure the complexity of an algorithm that executes within the cache-oblivious model, we measure the number of [[cache miss]]es that the algorithm experiences. Because the model captures the fact that accessing elements in the [[cache (computing)|cache]] is much faster than accessing things in [[main memory]], the [[running time]] of the algorithm is defined only by the number of memory transfers between the cache and main memory. This is similar to the [[external memory model]], which all of the features above, but cache-oblivious algorithms are independent of cache parameters (&lt;math&gt;B&lt;/math&gt; and &lt;math&gt;M&lt;/math&gt;).&lt;ref name="Demaine02"&gt;[[Erik Demaine]]. [http://erikdemaine.org/papers/BRICS2002/ Cache-Oblivious Algorithms and Data Structures], in Lecture Notes from the EEF Summer School on Massive Data Sets, BRICS, University of Aarhus, Denmark, June 27–July 1, 2002.&lt;/ref&gt; The benefit of such an algorithm is that what is efficient on a cache-oblivious machine is likely to be efficient across many real machines without fine-tuning for particular real machine parameters. For many problems, an optimal cache-oblivious algorithm will also be optimal for a machine with more than two [[memory hierarchy]] levels.&lt;ref name="Frigo99"/&gt;</div></td> </tr> </table> 84.245.121.189 https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1068118321&oldid=prev David Eppstein: short description 2022-01-26T18:50:24Z <p>short description</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 18:50, 26 January 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{Short description|I/O-efficient algorithm regardless of cache size}}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In [[computing]], a '''cache-oblivious algorithm''' (or cache-transcendent algorithm) is an [[algorithm]] designed to take advantage of a processor [[CPU cache|cache]] without having the size of the cache (or the length of the [[cache line]]s, etc.) as an explicit parameter. An '''optimal cache-oblivious algorithm''' is a cache-oblivious algorithm that uses the cache optimally (in an [[asymptotic notation|asymptotic]] sense, ignoring constant factors). Thus, a cache-oblivious algorithm is designed to perform well, without modification, on multiple machines with different cache sizes, or for a [[memory hierarchy]] with different levels of cache having different sizes. Cache-oblivious algorithms are contrasted with explicit ''[[loop tiling]]'', which explicitly breaks a problem into blocks that are optimally sized for a given cache.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In [[computing]], a '''cache-oblivious algorithm''' (or cache-transcendent algorithm) is an [[algorithm]] designed to take advantage of a processor [[CPU cache|cache]] without having the size of the cache (or the length of the [[cache line]]s, etc.) as an explicit parameter. An '''optimal cache-oblivious algorithm''' is a cache-oblivious algorithm that uses the cache optimally (in an [[asymptotic notation|asymptotic]] sense, ignoring constant factors). Thus, a cache-oblivious algorithm is designed to perform well, without modification, on multiple machines with different cache sizes, or for a [[memory hierarchy]] with different levels of cache having different sizes. Cache-oblivious algorithms are contrasted with explicit ''[[loop tiling]]'', which explicitly breaks a problem into blocks that are optimally sized for a given cache.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> David Eppstein https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1068096132&oldid=prev AnomieBOT: Dating maintenance tags: {{Cn}} 2022-01-26T16:28:35Z <p>Dating maintenance tags: {{Cn}}</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:28, 26 January 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 3:</td> <td colspan="2" class="diff-lineno">Line 3:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Optimal cache-oblivious algorithms are known for [[cache-oblivious matrix multiplication|matrix multiplication]], [[matrix transposition]], [[funnelsort|sorting]], and several other problems. Some more general algorithms, such as [[Cooley–Tukey FFT algorithm|Cooley–Tukey FFT]], are optimally cache-oblivious under certain choices of parameters. As these algorithms are only optimal in an asymptotic sense (ignoring constant factors), further machine-specific [[performance tuning|tuning]] may be required to obtain nearly optimal performance in an absolute sense. The goal of cache-oblivious algorithms is to reduce the amount of such tuning that is required.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Optimal cache-oblivious algorithms are known for [[cache-oblivious matrix multiplication|matrix multiplication]], [[matrix transposition]], [[funnelsort|sorting]], and several other problems. Some more general algorithms, such as [[Cooley–Tukey FFT algorithm|Cooley–Tukey FFT]], are optimally cache-oblivious under certain choices of parameters. As these algorithms are only optimal in an asymptotic sense (ignoring constant factors), further machine-specific [[performance tuning|tuning]] may be required to obtain nearly optimal performance in an absolute sense. The goal of cache-oblivious algorithms is to reduce the amount of such tuning that is required.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Typically, a cache-oblivious algorithm works by a [[recursion|recursive]] [[divide-and-conquer algorithm]], where the problem is divided into smaller and smaller subproblems. Eventually, one reaches a subproblem size that fits into the cache, regardless of the cache size. For example, an optimal cache-oblivious matrix multiplication is obtained by recursively dividing each matrix into four sub-matrices to be multiplied, multiplying the submatrices in a [[depth-first]] fashion.{{cn}} In tuning for a specific machine, one may use a [[hybrid algorithm]] which uses loop tiling tuned for the specific cache sizes at the bottom level but otherwise uses the cache-oblivious algorithm.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Typically, a cache-oblivious algorithm works by a [[recursion|recursive]] [[divide-and-conquer algorithm]], where the problem is divided into smaller and smaller subproblems. Eventually, one reaches a subproblem size that fits into the cache, regardless of the cache size. For example, an optimal cache-oblivious matrix multiplication is obtained by recursively dividing each matrix into four sub-matrices to be multiplied, multiplying the submatrices in a [[depth-first]] fashion.{{cn<ins style="font-weight: bold; text-decoration: none;">|date=January 2022</ins>}} In tuning for a specific machine, one may use a [[hybrid algorithm]] which uses loop tiling tuned for the specific cache sizes at the bottom level but otherwise uses the cache-oblivious algorithm.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==History==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==History==</div></td> </tr> </table> AnomieBOT https://en.wikipedia.org/w/index.php?title=Cache-oblivious_algorithm&diff=1068074972&oldid=prev 158.174.22.130: Redundant. 2022-01-26T14:27:48Z <p>Redundant.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 14:27, 26 January 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>In [[computing]], a '''cache-oblivious algorithm''' (or cache-transcendent algorithm) is an [[algorithm]] designed to take advantage of a processor [[CPU cache|cache]] without having the size of the cache (or the length of the [[cache line]]s, etc.) as an explicit parameter. An '''optimal cache-oblivious algorithm''' is a cache-oblivious algorithm that uses the cache optimally (in an [[asymptotic notation|asymptotic]] sense, ignoring constant factors). Thus, a cache-oblivious algorithm is designed to perform well, without modification, on multiple machines with different cache sizes, or for a [[memory hierarchy]] with different levels of cache having different sizes. Cache-oblivious algorithms are contrasted with explicit ''[[loop tiling]]<del style="font-weight: bold; text-decoration: none;">,</del>''<del style="font-weight: bold; text-decoration: none;"> as in [[loop nest optimization]]</del>, which explicitly breaks a problem into blocks that are optimally sized for a given cache.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>In [[computing]], a '''cache-oblivious algorithm''' (or cache-transcendent algorithm) is an [[algorithm]] designed to take advantage of a processor [[CPU cache|cache]] without having the size of the cache (or the length of the [[cache line]]s, etc.) as an explicit parameter. An '''optimal cache-oblivious algorithm''' is a cache-oblivious algorithm that uses the cache optimally (in an [[asymptotic notation|asymptotic]] sense, ignoring constant factors). Thus, a cache-oblivious algorithm is designed to perform well, without modification, on multiple machines with different cache sizes, or for a [[memory hierarchy]] with different levels of cache having different sizes. Cache-oblivious algorithms are contrasted with explicit ''[[loop tiling]]'', which explicitly breaks a problem into blocks that are optimally sized for a given cache.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Optimal cache-oblivious algorithms are known for [[cache-oblivious matrix multiplication|matrix multiplication]], [[matrix transposition]], [[funnelsort|sorting]], and several other problems. Some more general algorithms, such as [[Cooley–Tukey FFT algorithm|Cooley–Tukey FFT]], are optimally cache-oblivious under certain choices of parameters. As these algorithms are only optimal in an asymptotic sense (ignoring constant factors), further machine-specific [[performance tuning|tuning]] may be required to obtain nearly optimal performance in an absolute sense. The goal of cache-oblivious algorithms is to reduce the amount of such tuning that is required.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Optimal cache-oblivious algorithms are known for [[cache-oblivious matrix multiplication|matrix multiplication]], [[matrix transposition]], [[funnelsort|sorting]], and several other problems. Some more general algorithms, such as [[Cooley–Tukey FFT algorithm|Cooley–Tukey FFT]], are optimally cache-oblivious under certain choices of parameters. As these algorithms are only optimal in an asymptotic sense (ignoring constant factors), further machine-specific [[performance tuning|tuning]] may be required to obtain nearly optimal performance in an absolute sense. The goal of cache-oblivious algorithms is to reduce the amount of such tuning that is required.</div></td> </tr> </table> 158.174.22.130