<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Multicore Techniques &#187; Foundations</title>
	<atom:link href="http://www.ncoredesign.com/blog/index.php/archive/category/foundations/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ncoredesign.com/blog</link>
	<description>An Applied Approach to Multicore</description>
	<lastBuildDate>Mon, 26 Apr 2010 22:05:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Multicore Body of Knowledge Poster</title>
		<link>http://www.ncoredesign.com/blog/index.php/archive/multicore-body-of-knowledge-poster/</link>
		<comments>http://www.ncoredesign.com/blog/index.php/archive/multicore-body-of-knowledge-poster/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 01:46:35 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Foundations]]></category>

		<guid isPermaLink="false">http://www.ncoredesign.com/blog/?p=61</guid>
		<description><![CDATA[
I&#8217;ve revised the Multicore Body of Knowledge map and it&#8217;s now available in an A3 size (fits on Tabloid paper also) poster. Click here to download the PDF.
        ]]></description>
			<content:encoded><![CDATA[<p></p><div>
<p>I&#8217;ve revised the Multicore Body of Knowledge map and it&#8217;s now available in an A3 size (fits on Tabloid paper also) poster. Click <a title="Multicore Body of Knowledge A3" href="http://www.ncoredesign.com/pdf/ncore_multicore_body_of_knowledge_a3.pdf" target="_self">here</a> to download the PDF.</div>
<a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Digg" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/digg.png" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/facebook.png" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/delicious.png" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/linkedin.png" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/plaxo_pulse?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Plaxo Pulse" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/plaxo.png" alt="Plaxo Pulse"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/technorati.png" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/google.png" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/twitter.png" alt="Twitter"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fmulticore-body-of-knowledge-poster%2F&amp;linkname=Multicore%20Body%20of%20Knowledge%20Poster"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.ncoredesign.com/blog/index.php/archive/multicore-body-of-knowledge-poster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jump into Multicore &#8211; Part One</title>
		<link>http://www.ncoredesign.com/blog/index.php/archive/jump-into-multicore-part-one/</link>
		<comments>http://www.ncoredesign.com/blog/index.php/archive/jump-into-multicore-part-one/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 23:40:54 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Foundations]]></category>
		<category><![CDATA[Getting Started]]></category>

		<guid isPermaLink="false">http://www.ncoredesign.com/blog/?p=27</guid>
		<description><![CDATA[The Multicore Association recently finished their 4th annual Multicore Expo show.  The association was formed to foster industry standardization efforts amongst vendors including the exploration of potential multicore programming APIs. Aside from some of the most talked about reasons for the rise of multicore (power consumption, transistor geometry, manufacturing limitations, clock rates and Moore&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>The <a href="http://www.multicore-association.org/">Multicore Association</a> recently finished their 4th annual <a href="http://www.multicore-expo.com/">Multicore Expo</a> show.  The association was formed to foster industry standardization efforts amongst vendors including the exploration of potential multicore programming APIs. Aside from some of the most talked about reasons for the rise of multicore (power consumption, transistor geometry, manufacturing limitations, clock rates and Moore&#8217;s Law), the continuation of this expo is a good indicator of broad industry support for multicore computing and its adoption by scientific, commercial and military organizations.</p>
<p>Most major microprocessor vendors like Intel, AMD and Sun have already turned their fabrication facilities towards manufacturing products with ever an increasing number of cores. The variety of multicore architectures &#8211; GPU included &#8211; is expanding rapidly. In fact we may see single core processors disappear from the menu altogether in the not too distant future.</p>
<p>If you&#8217;re one of the few people who hasn&#8217;t heard about multicore processors or multicore programming (parallel programming), now might be a good time to brush-up. <span id="more-27"></span> Without a plan to transition your products to multicore, your organization&#8217;s competitive advantage may be at risk. In the past, parallel programming was a little known domain occupied by of a handful of specialists and researchers working on sophisticated problems. This is no longer the case. If necessary, you must learn to create and adapt software to run efficiently on many cores. Even if you&#8217;re an old hand at parallel software construction, current multicore architectures offer a host of benefits that can translate to increased performance for existing software.</p>
<p>Since current commercial compilers possess a limited ability to automatically parallelize software for multicore architectures, developers must prepare to tackle multicore by learning some new skills and techniques. Until compilers become clever enough to analyze a program&#8217;s structure and content in order to make multicore-aware parallelization decisions, you are an integral part of parallelization process. Of course <em>What</em> to do and <em>How</em> to do it is very important, but <em>Where</em> to do it can be the difference between success and failure.  Careful analysis using acquired skills and a solid methodology is the key to extracting every last ounce of parallelism from your application.</p>
<p>I get a lot of questions from developers asking how they can learn multicore programming &#8211; the <em>What</em>, <em>Where</em> and <em>How</em>. Recently I gave an invited talk to a group of performance engineers where much like Steven Covey&#8217;s <em>Seven Habits</em>, I outlined five steps that can help developers assess and direct their multicore efforts.  I&#8217;m going to cover these five steps in a three part series on this blog.</p>
<h2>1. What&#8217;s in your toolbox?</h2>
<p>In any serious pursuit, it&#8217;s important to understand where you want to be in relation to where you are. The first questions should be &#8220;What role do I play?&#8221; and its equally important twin &#8220;What&#8217;s my overriding goal?&#8221;.</p>
<p>This slide, extracted from the talk presentation, indicates three broad categories of people and their roles. (click the chart to view a larger version):</p>
<p><a title="Practitioners" rel="lightbox[x]" href="/images/blog/ncore_practitioners.png"><br />
<img class="alignleft size-thumbnail wp-image-72" title="nCore Multicore Body of Knowledge" src="/images/blog/ncore_practitioners_thumb.png" alt="Practitioners" /><br />
</a></p>
<p><strong><em>Developers</em></strong> Most developers don&#8217;t need to create complex synchronization primitives or task queues themselves &#8211; in fact it&#8217;s extremely difficult and potentially counter productive. Creating low level software objects just isn&#8217;t necessary (think time-to-market, ROI focus, shrinking development budgets, delivery deadlines) and just diverts precious time and resources away from working on the project&#8217;s core problems.  I&#8217;ve seen countless hours wasted by teams developing their version of a low-level, cross-platform library because they thought it was project critical or a unique piece of intellectual property. In most cases, development managers and teams in the trenches just need to know how to get their software working effectively on multicore. A basic understanding of the options, means and methods is all one needs. This typically includes some basic tools such as a nice compiler/debugger, a thread analysis tool and a thread abstraction method. More on those later.</p>
<p><strong><em>Researchers</em></strong> Conversely, if you&#8217;re a scientist with special computing requirements, you&#8217;ll want to delve much deeper to understand the minutiae. Academics involved in parallel computing research may even publish their work in peer reviewed journals thereby hopefully advancing the state of the art. High-performance computing (HPC) researchers involved in unique physical simulations and visualization projects may need to develop purpose-built tools and techniques to realize peak performance when running on thousands and thousands of processing cores spread across hundreds of compute nodes.</p>
<p><strong><em>Practitioners</em></strong> Some of you fall, perhaps not so squarely, into the middle ground between Developers and Researchers. You&#8217;ll need a broad background and a certain depth of experience with advanced tools and techniques on many platforms. You might be called upon to develop some time critical low-level code, a memory allocator or a kernel module. Practitioners may be responsible for overall application performance, lead the development team of a mission critical OS abstraction layer or the implementation of high-performance software like a database. These projects require more specialized methods as well as a thorough grounding in parallel programming theory and operating systems.</p>
<p>This three level segmentation is a good rule of thumb to help decide which tools should be in your multicore toolbox. That being said, it&#8217;s a very simple guide. If you have the time and energy it&#8217;s always a good idea to push the limits and expand your comfort zone &#8211; my advice is to learn as much as you can. You never know when working knowledge of a concept or tool might help land a new job or get a coveted promotion.</p>
<h2>2. Body of Knowledge</h2>
<p>Most people new to the world of parallel programming (and even some with experience) haven&#8217;t touched on any parallel/multicore programming topics during their tenure as serial software engineers. Coming to grips with the subject matter can be a daunting task and books like &#8220;Learn Multicore Programming in 21 days&#8221; don&#8217;t begin to cover it.</p>
<p>I&#8217;ve made an initial attempt to categorize these subjects into eight discreet subject areas.  Depending on your goal you may need to acquire a familiarity with some or all of the eight areas.</p>
<ul>
<li><strong>Foundations</strong> &#8211; The basic knowledge necessary to understand parallel programming</li>
<li><strong>Mutual Exclusion</strong> &#8211; Simultaneous use of common resources like memory</li>
<li><strong>Synchronization</strong> &#8211; Coordination of actions during program execution</li>
<li><strong>Algorithms/Methods</strong> &#8211; Patterns and algorithms used to construct parallel programs including the method of application</li>
<li><strong>Parallel Problems</strong> &#8211; Problems and pitfalls that arise during parallel program development</li>
<li><strong>Languages</strong> &#8211; Programming languages used to express parallel software</li>
<li><strong>Tools</strong> &#8211; Tools to help construct software, compile programs and analyze performance</li>
<li><strong>Optimization</strong> &#8211; Methods and techniques to optimize the serial parts of a program</li>
</ul>
<p>I&#8217;ve put together a map of these major knowledge areas that I call the &#8220;Multicore Body of Knowledge&#8221;.</p>
<p><a title="Multicore Body of Knowledge" rel="lightbox" href="/images/blog/ncore_multicore_body_of_knowledge_1024.jpg"><br />
<img class="alignleft size-thumbnail wp-image-72" title="nCore Multicore Body of Knowledge" src="/images/blog/ncore_multicore_body_of_knowledge_1024_thumb.png" alt="nCore Multicore Body of Knowledge" /><br />
</a></p>
<p>Click the image above for a larger version or you can download an A4 size PDF from <a onclick="javascript:wtslog('al178399','3','http','ncore_multicore_body_of_knowledge_pdf','event_track');" href="http://www.ncoredesign.com/pdf/ncore_multicore_body_of_knowledge.pdf">here</a> to print out and tack on your wall.  The document is a work in progress so if you have any suggestions or comments please feel free to contact me.</p>
<p>We&#8217;ll cover the remaining three steps before jumping into multicore in a soon to appear blog post &#8211; stay tuned!</p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a rel="tag" href="http://technorati.com/tag/Multicore">Multicore</a>, <a rel="tag" href="http://technorati.com/tag/Software%20Development">Software Development</a>, <a rel="tag" href="http://technorati.com/tag/Compilers">Compilers</a></p>
<p><!-- Technorati Tags End --></p>
<a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Digg" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/digg.png" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/facebook.png" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/delicious.png" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/linkedin.png" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/plaxo_pulse?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Plaxo Pulse" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/plaxo.png" alt="Plaxo Pulse"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/technorati.png" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/google.png" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/icons/twitter.png" alt="Twitter"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.ncoredesign.com%2Fblog%2Findex.php%2Farchive%2Fjump-into-multicore-part-one%2F&amp;linkname=Jump%20into%20Multicore%20%26%238211%3B%20Part%20One"><img src="http://www.ncoredesign.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.ncoredesign.com/blog/index.php/archive/jump-into-multicore-part-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
