<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Matt's Amazing Developer Blog 3000 Comments</title>
    <link>http://www.devblog3000.com/</link>
    <description>Comments from Observations, commentary and rants on Software Development</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.0.1 - http://www.s9y.org/</generator>
    <pubDate>Thu, 20 Nov 2008 14:36:25 GMT</pubDate>

    <image>
        <url>http://www.devblog3000.com/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Matt's Amazing Developer Blog 3000 Comments - Comments from Observations, commentary and rants on Software Development</title>
        <link>http://www.devblog3000.com/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Manish: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Manish)</author>
    <content:encoded>
    Good article.  About memory pools, I think the book Modern C++ Design (http://www.amazon.com/Modern-Design-Programming-Patterns-Depth/dp/0201704315/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1219507495&amp;sr=8-1_ already has good abstraction and template implementation for pools (See chapter &quot;Small Object Allocation&quot;) 
    </content:encoded>

    <pubDate>Sat, 23 Aug 2008 12:07:02 -0400</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c29</guid>
    
</item>
<item>
    <title>Hadi Moshayedi: Practicing Programming</title>
    <link>http://www.devblog3000.com/archives/2-Practicing-Programming.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/2-Practicing-Programming.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=2</wfw:comment>

    

    <author>nospam@example.com (Hadi Moshayedi)</author>
    <content:encoded>
    There are some interviews with start topcoders at: http://www.topcoder.com/tc?module=Static&amp;d1=features&amp;d2=archive&lt;br /&gt;
You may find some other resources and ways to practice by reading those articles. &lt;br /&gt;
There are some very good Algorithm Tutorials at http://www.topcoder.com/tc?module=Static&amp;d1=tutorials&amp;d2=alg_index .&lt;br /&gt;
I usually use acm.sgu.ru , acm.zju.edu.cn , acm.pku.edu.cn , acm.timus.ru for practicing.&lt;br /&gt;
I don&#039;t usually choose problems to solve randomly, I usually choose a past contest, and solve problems of that contest as much as I can. I think this way I can learn more and have a more accurate assessment of my skills.&lt;br /&gt;
&lt;br /&gt;
You can also do Component Development competitions at topcoder, and earn some money while competing &lt;img src=&quot;http://www.devblog3000.com/templates/default/img/emoticons/laugh.png&quot; alt=&quot;:-D&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; (I haven&#039;t done this) 
    </content:encoded>

    <pubDate>Mon, 14 Jul 2008 04:36:51 -0400</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/2-guid.html#c27</guid>
    
</item>
<item>
    <title>Andrew: Practicing Programming</title>
    <link>http://www.devblog3000.com/archives/2-Practicing-Programming.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/2-Practicing-Programming.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=2</wfw:comment>

    

    <author>nospam@example.com (Andrew)</author>
    <content:encoded>
    Googled practice programming projects and got here.  thanks for the cool post.  here&#039;s another one:&lt;br /&gt;
&lt;br /&gt;
http://www.pythonchallenge.com/ 
    </content:encoded>

    <pubDate>Sun, 25 May 2008 03:51:56 -0400</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/2-guid.html#c26</guid>
    
</item>
<item>
    <title>Matt Kimmel: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Matt Kimmel)</author>
    <content:encoded>
    When I say cache coherency, what I mean is attempting to keep related data, and hopefully entire data structures, in contiguous memory so that when it&#039;s accessed by your code, it can all load into the CPU cache at once (or close to all at once) and reduce the number of cache misses you encounter while performing operations on it.  This is critical on modern game consoles, where memory access is quite slow relative to cache access.&lt;br /&gt;
&lt;br /&gt;
You have a good point, though--there are other meanings to the term &quot;cache coherency&quot; as well. 
    </content:encoded>

    <pubDate>Mon, 18 Feb 2008 10:11:37 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c25</guid>
    
</item>
<item>
    <title>Peter Lund: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Peter Lund)</author>
    <content:encoded>
    This is not cache coherency!&lt;br /&gt;
&lt;br /&gt;
(It is important stuff, though.)&lt;br /&gt;
&lt;br /&gt;
Cache coherency is about the hardware making sure that all the entities that talk to memory (be they CPUs or devices) have the same idea of what&#039;s actually /in/ the memory.  That&#039;s not easy when caches are involved but it&#039;s crucial for keeping down the complexity of operating systems (and user-space programs that try to be smart). 
    </content:encoded>

    <pubDate>Mon, 18 Feb 2008 05:46:01 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c24</guid>
    
</item>
<item>
    <title>Matt Kimmel: Practicing Programming</title>
    <link>http://www.devblog3000.com/archives/2-Practicing-Programming.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/2-Practicing-Programming.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=2</wfw:comment>

    

    <author>nospam@example.com (Matt Kimmel)</author>
    <content:encoded>
    Thanks for posting this site!  I thought it was fairly buggy when I originally wrote this article, but I went back and revisited it and it looks like it&#039;s in much better shape.  I believe it also contains most of the problems from the Programming Practices book I mentioned in the article. 
    </content:encoded>

    <pubDate>Tue, 04 Dec 2007 10:14:38 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/2-guid.html#c23</guid>
    
</item>
<item>
    <title>Matt Kimmel: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Matt Kimmel)</author>
    <content:encoded>
    Good points.  I&#039;m certainly not saying that vectors are a magic bullet that are going to solve all your cache-coherency problems; I&#039;m just saying that they&#039;re a tool in your toolbox that can be very effective when you understand the problem you&#039;re facing.  A vector is certainly more likely to be contained within a page or two than a data structure made up of dynamically allocated nodes--but it depends on the size of the vector, the way you access the data structure, and all kinds of factors.  It&#039;s some food for thought. 
    </content:encoded>

    <pubDate>Tue, 04 Dec 2007 10:11:12 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c22</guid>
    
</item>
<item>
    <title>Mousa Abdullah: Practicing Programming</title>
    <link>http://www.devblog3000.com/archives/2-Practicing-Programming.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/2-Practicing-Programming.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=2</wfw:comment>

    

    <author>nospam@example.com (Mousa Abdullah)</author>
    <content:encoded>
    I guess you forgot to mention about ACM UVA site: http://icpcres.ecs.baylor.edu/onlinejudge/. I was faced with programming problems here for the first time. There are simple problems to very very complex ones. 
    </content:encoded>

    <pubDate>Tue, 04 Dec 2007 10:02:58 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/2-guid.html#c21</guid>
    
</item>
<item>
    <title>Radu: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Radu)</author>
    <content:encoded>
    Addendum: you also mention STL heap algorithms, which (like binary search) are not cache-coherent on a vector.&lt;br /&gt;
&lt;br /&gt;
You also mention storing trees like red-black on top of an array. This is again far from helping the cache-coherent issues, as in general the daughters of a node will not be close to the node itself. While linearizing trees can help performance (e.g. by eliminating child pointers), it is not because it improves cache coherency.&lt;br /&gt;
&lt;br /&gt;
Also, you seem to suggest that it is important for data to span contiguous memory PAGES. This is not true; in fact, contiguous virtual memory pages probably don&#039;t even correspond to contiguous physical memory pages. Caches operate in blocks, which are of sizes on the order of 32-128 bytes; you want to minimize the number of blocks you &quot;touch&quot;. It doesn&#039;t matter if you touch 100 blocks within the same page, or 100 blocks each in a different page. So for example having a lot of arrays of size 4096 (page size) should be the same as having a single contiguous array (provided of course you can somehow ensure proper page alignment of the 4k arrays).&lt;br /&gt;
&lt;br /&gt;
With these issues in mind, I am now unsure of what &quot;advanced&quot; things you can do with a vector to ensure cache-coherency of operations. 
    </content:encoded>

    <pubDate>Sun, 02 Dec 2007 16:51:00 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c20</guid>
    
</item>
<item>
    <title>Radu: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Radu)</author>
    <content:encoded>
    Relted to the &quot;Binary Search Table&quot; structure: binary searching a vector is NOT cache-coherent; the fact that the elements are nicely put in a contiguous array is irrelevant when calling STL&#039;s lower_bound. So I don&#039;t see how binary searching on a vector is related to cache-coherent structures. Nor can I see it eve being a good idea if you have to insert or delete elements (O(n) time vs. O(log n) time for BSTs), unless of course you have a very small number of elements (though in this case, linear search might actually be better than binary search, precisely because of cache coherency). 
    </content:encoded>

    <pubDate>Sun, 02 Dec 2007 16:39:04 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c19</guid>
    
</item>
<item>
    <title>Nick Ohrn: Practicing Programming</title>
    <link>http://www.devblog3000.com/archives/2-Practicing-Programming.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/2-Practicing-Programming.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=2</wfw:comment>

    

    <author>nospam@example.com (Nick Ohrn)</author>
    <content:encoded>
    Thanks for this post.  I have been wanting to hone my skills in a variety of different languages and I was looking for some generic problems to help me do so.  This post helped me find some great resources for these things. 
    </content:encoded>

    <pubDate>Wed, 14 Nov 2007 15:22:30 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/2-guid.html#c17</guid>
    
</item>
<item>
    <title>sarah: Practicing Programming</title>
    <link>http://www.devblog3000.com/archives/2-Practicing-Programming.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/2-Practicing-Programming.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=2</wfw:comment>

    

    <author>nospam@example.com (sarah)</author>
    <content:encoded>
    Thank you so much. I was out of ideas for practice and I found your post very helpful. I just google searched programming practice and found this page. Thanks for your helpful resources. 
    </content:encoded>

    <pubDate>Fri, 22 Dec 2006 16:31:41 -0500</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/2-guid.html#c14</guid>
    
</item>
<item>
    <title>Matt Kimmel: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Matt Kimmel)</author>
    <content:encoded>
    Oops, my mix-up.  Noted and corrected.  Thanks! 
    </content:encoded>

    <pubDate>Mon, 02 Oct 2006 12:59:07 -0400</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c9</guid>
    
</item>
<item>
    <title>dp: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (dp)</author>
    <content:encoded>
    Good article, with one exception:  std::binary_search doesn&#039;t actually return an iterator to the found element, it merely returns a bool indicating if the element is found.  The stl algorithm that returns an iterator to this element is std::lower_bound (which has the complexity of a binary search).&lt;br /&gt;
&lt;br /&gt;
As for a free implementation of memory pools, check out boost&#039;s memory pool library. 
    </content:encoded>

    <pubDate>Mon, 02 Oct 2006 09:40:50 -0400</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c8</guid>
    
</item>
<item>
    <title>Stephane Duguay: Cache Coherent Data Structures in C++: A Real Page-Turner</title>
    <link>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html</link>
            <category></category>
    
    <comments>http://www.devblog3000.com/archives/3-Cache-Coherent-Data-Structures-in-C++-A-Real-Page-Turner.html#comments</comments>
    <wfw:comment>http://www.devblog3000.com/wfwcomment.php?cid=3</wfw:comment>

    

    <author>nospam@example.com (Stephane Duguay)</author>
    <content:encoded>
    Good article, I like it. Very important concept for beginner-intermediate programmers, especially in peformance critical environment. 
    </content:encoded>

    <pubDate>Mon, 02 Oct 2006 09:00:29 -0400</pubDate>
    <guid isPermaLink="false">http://www.devblog3000.com/archives/3-guid.html#c7</guid>
    
</item>

</channel>
</rss>