<?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>Blogs &#187; Matthew Wolf</title>
	<atom:link href="http://software.intel.com/en-us/blogs/author/matthew-wolf/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/en-us/blogs</link>
	<description></description>
	<lastBuildDate>Fri, 25 May 2012 22:49:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Parallelism Education Workshop @ SC 2011 -- An open invitation</title>
		<link>http://software.intel.com/en-us/blogs/2011/11/09/parallelism-education-workshop-sc-2011-an-open-invitation/</link>
		<comments>http://software.intel.com/en-us/blogs/2011/11/09/parallelism-education-workshop-sc-2011-an-open-invitation/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 19:54:56 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>
		<category><![CDATA[Benedict Gaster]]></category>
		<category><![CDATA[Clay Breshears]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Daniel Ernst]]></category>
		<category><![CDATA[Dick Brown]]></category>
		<category><![CDATA[EAPF]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[James Reinders]]></category>
		<category><![CDATA[Kevin Goldsmith]]></category>
		<category><![CDATA[Matthew Wolf]]></category>
		<category><![CDATA[Michael Wrinn]]></category>
		<category><![CDATA[Mike McCool]]></category>
		<category><![CDATA[parallelism]]></category>
		<category><![CDATA[SC11]]></category>
		<category><![CDATA[Supercomputing]]></category>
		<category><![CDATA[Supercomputing 2011]]></category>
		<category><![CDATA[Tim Mattson]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2011/11/09/parallelism-education-workshop-sc-2011-an-open-invitation/</guid>
		<description><![CDATA[It’s that time again -- I and my colleagues from the Educational Alliance for a Parallel Future (EAPF) which included Adobe, AMD, Intel, Microsoft and a host of other academic and industry partners are happily out challenging the status quo again!  We are running a session on the trials, tribulations, and possibilities in teaching about [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://software.intel.com/en-us/blogs/wordpress/wp-content/uploads/2011/11/SC11.png"><img src="http://software.intel.com/en-us/blogs/wordpress/wp-content/uploads/2011/11/SC11-300x220.png" alt="SC11" title="SC11" width="300" height="220" class="alignleft size-medium wp-image-40561" /></a>
<div>It’s that time again -- I and my colleagues from the <a href="http://eapf.org/">Educational Alliance for a Parallel Future (EAPF)</a> which included Adobe, AMD, Intel, Microsoft and a host of other academic and industry partners are happily out challenging the status quo again!  We are running a session on the trials, tribulations, and possibilities in teaching about parallelism and other advanced architecture capabilities at the SuperComputing conference next week. For those of you who are going to be there in person, please join us!&nbsp;</p>
<p>The schedule link is here:<br />
<a href="http://sc11.supercomputing.org/schedule/event_detail.php?evid=wfpan102">Parallelism, the Cloud, &amp; the Tools of the Future for the next generation of practitioners </a></p>
<p>This is part of a continuing series of panels, and follows on from the very successful panel at IDF this past September that my partner in crime, Paul Steinberg, <a href="http://software.intel.com/en-us/blogs/2011/08/31/what-makes-the-cut-for-parallel-education-let-us-know-and-then-take-the-conversation-to-idf-2011/">described in an earlier post</a>. For SC this year, we have a sizzling panel to open up the discussion, with Dick Brown (St. Olaf College), Kevin Goldsmith (Adobe), Ben Gaster (AMD), Simon Mcintosh-Smith(Bristol), and Michael McCool (Intel) leading the charge.</p>
<p>Unlike normal panels, where the audience has to ask questions from the dark auditorium of the speakers up at the podium, for the “question” portion of these meetings we have the panelists disperse out into the crowd for small group discussions.  We have a number of additional luminaries joining in for these breakouts, including Michael Wrinn (Intel), Sushil Prasad (GSU/IEEE TCPP), Steve Teixera (Microsoft), James Reinders (Intel), Tim Matson (Intel), Charlie Peck (Earlham College), and Dan Ernst (Cray).</p>
<p>I have the pleasure of chairing the session and getting the discussion moving.  One of the things that we all agree on is that parallelism, virtualization, deep memory hierarchies, and cloud computing are here to stay.  All of the communities that have been investigating and developing these technologies separately have a lot to learn from each other.  We  agree that we need  a steady state in the future.  When you go to asking how we should be training people today for that future, however, the gloves come off.</p>
<p>Just to get the conversation started, here are some of the key position points from the various contributors.  Tell us what you think in the comments section below, and we’ll be sure that they are included in the discussions in Seattle next week.  We’ll also post follow-up summaries for everyone to continue the discussions -- we need a whole community of developers, educators and hardware innovators to chime in if we’re going to keep ecosystem healthy and moving forward!</p>
<p>In alphabetical order:</p>
<p><strong>Dick Brown</strong><br />
The workforce-development buck stops with college and university professors, who must design and implement classroom, lab, and project experiences intended to give undergraduates the knowledge, experience, and attitudes they need to start their careers.	As a professor, I can’t teach everything.  But I might need to:  our students might need anything, especially in times of computational revolution such as the present.<br />
To prepare them for their unforeseeable careers, I want students to learn at least something about high-level and low-level, HPC and cloud/mobile, heterogeneous and homogeneous and serial, etc., and to learn how to go deeper and broader on their own.   Although research in the 80’s and 90’s provides a starting point for curriculum, teaching parallelism is decades behind teaching sequential computing.  Some of today’s most popular tools are so close to hardware that they feel like assembly language.</p>
<ul>
<li>Parallel (and/or distributed and/or heterogeneous) computing belongs in practically every undergraduate CS course.  Henceforth, we do a disservice to our students if we let them think sequential computing is enough.</li>
<li>Incrementally adding a day or two of parallelism in each course, including hands-on exercises, is a feasible and sufficient strategy for rapidly introducing breadth in parallelism throughout the curriculum.  A spiral approach to key issues adds depth.</li>
<li>Applications beyond CS with hands-on experience of speedup will increase student interest in parallel computing.</li>
<li>Design patterns deliver encapsulated expertise to students.  Identify them whenever parallelism appears, and structure problem solving with them in upper-level courses.</li>
</ul>
<p><strong>Daniel Ernst</strong><br />
At conferences like SC, it's interesting as a trained computer scientist to watch computational scientists work.  Of particular interest, these researchers - very few of which have any formal computer science training - live and breathe parallelism.  Many of the education, outreach, and training efforts they sponsor (such as NCSI workshops and SC Education and Broader Engagement Programs) focus on bootstrapping people into reasoning about parallel codes (and writing them) with most of the participants having only basic procedural programming experience.  The results have largely been very good.</p>
<p>Among HPC practitioners, there is no fear of parallelism - of the coordination involved, of resource scheduling/allocation problems, and of reasoning about performance.  If these "novices" can clearly handle reasoning about parallelism - what are Computer Science faculty afraid of?  Is it time for members of the scientific community to take a more active role in bringing the 'old' HPC technology of parallelism to the 'new' audience of Computer Science faculty and students?</p>
<p><strong>Benedict Gaster:</strong><br />
Programming is hard and many people argue that parallel programming is harder still. My personal view is that, like so many things, if one late comes to parallel programming and more generally concurrency, then it will be hard to adapt from the ingrained sequential view but this does not need to be the case. If we teach students parallel and concurrency concepts as an afterthought,  continue to leave it as an optional computer science module or two, then yes we will fail to educate future generations, but if we adopt it as a core, integrate it into all aspects of schooling, then all future developers will handle it as they handle Python, Haskell, C++, Java or whatever today.</p>
<p>Concurrency and parallelism is everywhere, we do it all the time in our lives... my 6 year old daughter programs MIT's Scratch, an explicitly parallel programming model, and if someone this young can, then I take exception when a dean or professor, who should know better, say it is too hard, or what about other parts of course, or what should we drop? Stop it! This is what you are paid to answer, think out of the box, do something that will benefit us all.</p>
<p><strong>Kevin Goldsmith:</strong><br />
The team I manage is building a single, modern, software product. A few years ago, that would have meant a desktop application written primarily in C++, mostly likely single-threaded. Today, it means software that runs on the desktop, but also on mobile devices and in the cloud. Working in my organization are developers who write shaders for the GPU, developers who write SSE (both x86 and ARM), developers using distributed computing techniques on EC2 and threads everywhere throughout the clients and server code. We write code in C, C++, ObjC, assembly, Lua, Java, C#, Perl, Python, Ruby and GLSL. We leverage Grand Central Dispatch, pThreads, TBB and boost threads.  How many of the technologies that we use today in professional software development existed when we went to school? Nearly none. How many will still be used in a few years from now? Who knows.  The reason we can continue to work in the field is that our education was grounded not just in programming techniques for the technology of the time, but also in computer architecture, operating systems, and programming languages (high level, low level and domain-specific).</p>
<p>Learning GPGPU was much easier for me because I could understand the architecture of graphics processors. I was able to understand Java's garbage collection because I understood how memory management worked in C.  I chose TBB over Grand Central Dispatch to solve a specific threading problem because I could evaluate both technologies given my experience<br />
with pThreads.</p>
<p>We're doing students a disservice if we teach them the concepts using high-level abstractions or only teach them a single programming language. Having an understanding of computer architecture is also critical to a computer science education.</p>
<p>These fundamentals of computer science do not necessarily need to be broken out into their own classes. They can and should be integrated throughout the curriculum. Threading should be part of every course. It is a critical part of modern software development. Different courses should use different programming languages to give students exposure to different programming models.</p>
<p>If I was a Dean of Computer Science somewhere, I¹d look to creating a curriculum where parallel programming using higher-level abstractions was part of the introductory courses using something like C++11, OpenMP or TBB. Mid-level requirements would include some computer architecture instruction. Specifically, how computer architecture maps to the software that runs on top of it. This may also include some lower level instruction in things like pThreads, Race conditions, lock-free programming or even GPU or heterogenous programming techniques using OpenCL. In later courses focused more on software engineering, specific areas like graphics, or<br />
larger projects: I¹d encourage the students to use whichever tools they found most appropriate to the tasks at hand. This might even include very high level proprietary abstractions like DirectCompute or C++AMP as long as the students could make the tradeoffs intelligently because of their understanding of the area from previous courses.</p>
<p><strong>Tim Matson</strong><br />
As educators, we are providing a service to our students.  For a small fraction of our students, we are preparing them for pursuit of  a Ph.D.  That’s fine and we all love to work with those students.  But the majority of students in a computer science major are seeking a degree that will help them build and sustain fulfilling and stable careers.  To that end, it is our duty to help them acquire the tools they need to succeed.  And to do that, we need to teach them what they will need professionally 5, 10 and 20 years down the road.</p>
<p>The trends in computing are crystal clear.  High level programming languages such as Python, Ruby, and Matlab have made domain-specialists into programmers.  If the physicists, chemists, biologists, game-artists, etc. are all creating their own code, what do we need computer scientists for?  We need them to be the experts of the low level tools that support the Python, Ruby and Matlab programmers.  We need them to write assembly code to optimize essential kernels.  We need them to master how algorithms map onto hardware.  We need them to create code transformation tools that take high level code and map it onto hardware.  We need them to understand floating point arithmetic and how round-off error propagates through numerical algorithms.</p>
<p>In my humble opinion, to teach a computer scientist Java or Python or any functional language as their primary programming language is “criminally negligent”.   OK, “criminally” is the wrong word here.  Let’s say is “professionally negligent”.   Computer Science education needs to get back to the basics and stay there.  It needs to build a foundation in C and assembly code layered on top of a solid background in computer architecture.  On top of that, they need computer arithmetic and numerical analysis skills so they can support the end-user programmers of the future.</p>
<p>Or we can ignore this and educate computer scientists unsuited to the jobs of the coming decades.  And the center of the world in computing will shift to countries that get their act together and educate the workforce industry needs.  You know … all a worker needs is a modem and phone line.  Don’t you love our global economy?</p>
<p><strong>Michael McCool:</strong><br />
Software developers do not have to be computer architects, but they do need to have a clear mental model of how computer systems operate, and that includes everything from networks to operating system stacks to cache behaviour.   At the same time, they need a high-level framework, of ideas and of tools, to manage the complexity.   One of these tools should be programming languages.   Programming languages can be seen as an integrated set of abstractions.   Abstractions are necessary (programming everything in machine language is interesting but unproductive), but should be seen as automation of well-understood implementation strategies, not information hiding: white boxes vs. black boxes.   Regarding new languages vs. augmenting additional languages: there have actually been a host of new parallel programming languages lately... and they all look like C.   I think we can do better.  There is an opportunity to extend the C++ standard to better support parallelism.   We should consider carefully how to do this in a way that benefits the largest number of developers.   Regardling HPC vs. mobile: while at opposite ends of the scale, these two communities have much in common and could, and should, learn from each other.   I think we should seek out and foster the development of technologies that can be deployed across the entire scale of computing.</p>
<p><strong>Simon McIntosh-Smith:</strong></p>
<ul>
<li>Every CS student needs a thorough grounding in parallel programming. It's now ubiquitous and has already become an essential (and valuable) skill.</li>
<li>Being good at parallel programming means being good at optimising performance, and that requires the ability to understand how the hardware works, from the chip level up to the system level. Trying to teach parallelism only at a high-level of abstraction doesn't work because of this.</li>
<li>Focusing on proprietary technologies is wrong, even if they're technically superior to more standard, open alternatives. It leaves many students with too narrow a view of what the right answer is. We're seeing a big example of this right now in the latest heterogeneous many-core developments.</li>
</ul>
<p><strong>James Reinders:</strong></p>
<ul>
<li>It’s time for C/C++ to become <a href="http://software.intel.com/en-us/blogs/2011/08/09/parallelism-as-a-first-class-citizen-in-c-and-c-the-time-has-come/">parallel programming languages</a>.</li>
<li>We need to learn to teach parallel programming without relying on teaching parallel computer architecture first.  (Coming in conjunction with our new book – watch in Spring)</li>
<li>Adding new restrictions in high level programming to match weaknesses in target hardware is a big step backwards, and a waste of time.  (Available only in my talks today, expect a blog in the future)</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2011/11/09/parallelism-education-workshop-sc-2011-an-open-invitation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sea of cores: Updates from the Beagle&#039;s journey</title>
		<link>http://software.intel.com/en-us/blogs/2010/09/14/sea-of-cores-updates-from-the-beagles-journey/</link>
		<comments>http://software.intel.com/en-us/blogs/2010/09/14/sea-of-cores-updates-from-the-beagles-journey/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 01:03:10 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[parallelism]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2010/09/14/sea-of-cores-updates-from-the-beagles-journey/</guid>
		<description><![CDATA[We just had our IDF panel a few hours ago, as promised in the earlier blog post.  I made a comparison of our current state of the art in parallel computing to a quote that I got out of Charles Darwin's Origin of Species, and it led to some interesting ripples in the subsequent discussion [...]]]></description>
			<content:encoded><![CDATA[<p>We just had our IDF panel a few hours ago, as promised in the <a href="http://software.intel.com/en-us/blogs/2010/08/30/a-sea-change-in-computer-science-education/">earlier blog post</a>.  I made a comparison of our current state of the art in parallel computing to a quote that I got out of Charles Darwin's Origin of Species, and it led to some interesting ripples in the subsequent discussion that I thought I'd share.</p>
<p>First, the quote I was referencing from Darwin was the following: "A part developed in any species in an extraordinary degree or manner ... tends to be highly variable."  If you replaces species with computer language, operating system, library, etc., I think that you get a very apt statement of what we see going on in the educational and developer communities today with respect to parallelism.</p>
<p>First, what did Darwin mean?  It took me quite a while the first time I read that section of the book to puzzle through it.  In effect, what it is saying is that if there has been a substantial development to take advantage of some new niche, that that act of change and development will inevitably result in a lot of variations and choices that take advantage of that niche.  It takes a long time for the dust to settle after that big effort so that there are distinct winners and losers.</p>
<p>This is where we come back to parallelism.  Although parallel computing has been around for a long time, it was a very limited (ecological) niche.  Now that there's a big market for growth in it, we see a lot of innovation and variations, and from an educational perspective that's very hard.  We can't just teach our students pthreads, or MPI, or OpenMP, or TBB, or CUDA, or any of the other "old" models.  There are many languages, libraries, OSes, application frameworks, and so on that have made it across the 'parallel' threshold.  Sorting out what's "good" in some absolute or even relative sense is going to take some time... more time than we have to wait before adapting our curricula.</p>
<p>So we need to write the curricula to acknowledge that lack of a single known "best way", even to embrace it.  Our students are the ones that will be making the decisions in the years to come as to what types of parallel architectures and languages make the most sense in industry and academia -- we need to focus on giving them the tools to make those decisions, rather than the tools to just program them.  Diversity is good -- it means this parallel thing is something big and important.  And we can have impact.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2010/09/14/sea-of-cores-updates-from-the-beagles-journey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Concurrency is Dead</title>
		<link>http://software.intel.com/en-us/blogs/2010/08/13/why-concurrency-is-dead/</link>
		<comments>http://software.intel.com/en-us/blogs/2010/08/13/why-concurrency-is-dead/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 01:47:10 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2010/08/13/why-concurrency-is-dead/</guid>
		<description><![CDATA[OK... Now that I have you hooked, let me explain what I mean.  I don't mean that the concept of concurrency is dead -- far from it.  What I mean, instead, is that we should stop using the word as if it means some sort of distinctive programming model.  It's all parallel, folks. This is [...]]]></description>
			<content:encoded><![CDATA[<p>OK... Now that I have you hooked, let me explain what I mean.  I  don't mean that the concept of concurrency is dead -- far from it.  What  I mean, instead, is that we should stop using the word as if it means  some sort of distinctive programming model.  It's all parallel, folks.</p>
<p>This is all prompted by a series of comments I've gotten over the  summer from several different sources, complaining that when I was  discussing parallelism in education that sometimes I was talking about  concurrency instead.  Not to be overly harsh on those who put forward  those complaints, but they seemed to be stuck in a time loop  where  there were some very real differences between the tools and programming  models that one would use depending on the type of problem.  If  fork/exec solves your issues, then your problem is likely concurrent.   If it doesn't, or if you have to do something funky once you've used  fork/exec like used SysV-style shared memory, then you're writing  parallel code.  However... those distinctions don't make as much sense  today.</p>
<p>So what happened?  Time.  And some really good thinking on what it  means to be parallel in the first place.  And a complete retooling of  the way operating systems and languages deal with shared state between  processes and/or threads and/or tasks.  And development of much more complete  programming infrastructures for dealing with parallelism.  With  copy-on-write and read-copy-update techniques (already inside your favorite OS), template- and  library-based inherent parallelism (like TBB or math libraries), novel  models with implicit parallelism (like Map-Reduce), and language  extensions for parallelism (like OpenMP), we're operating in a very  different *software* world from where we were 25 years ago, let alone  the hardware changes.</p>
<p>So let's lay this to rest.  Concurrency is  still a useful term in the same way that phlegmatic is -- useful  descriptions, but not diagnostic states in and of themselves.  Modern  medicine has moved beyond worrying about bleeding out the ill humors... I  believe that we in CS can move beyond concerns of separating our "parallel" from our  "concurrent" as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2010/08/13/why-concurrency-is-dead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calling all parallel languages &amp; libraries!</title>
		<link>http://software.intel.com/en-us/blogs/2009/12/14/calling-all-parallel-languages-amp-libraries/</link>
		<comments>http://software.intel.com/en-us/blogs/2009/12/14/calling-all-parallel-languages-amp-libraries/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 00:13:11 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>
		<category><![CDATA[Curriculum]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[Libraries]]></category>
		<category><![CDATA[parallelism]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2009/12/14/calling-all-parallel-languages-amp-libraries/</guid>
		<description><![CDATA[As I mentioned in my previous post, I have a set of lectures on pthreads that I've reworked to try to challenge students, since it turned out that several of my colleagues and I were doing almost the same content several classes in a row.  There's another things I do there, though, that I thought [...]]]></description>
			<content:encoded><![CDATA[<p>As I mentioned in my previous post, I have a set of lectures on pthreads that I've reworked to try to challenge students, since it turned out that several of my colleagues and I were doing almost the same content several classes in a row.  There's another things I do there, though, that I thought I'd save for a separate post.</p>
<p>I also have a section where we go through and look at alternative ways to write a simple data-parallel code -- the core of which comes from work that Michael Wrinn and his team put together. Nothing makes the trade-off between ease of programming vs ease of implementation clear like having to look at a set of alternatives.  (or paging through multiple pages of pthreads code vs fitting the whole OpenMP code on one screen.)</p>
<p>As I tell class, everyone knows that the integral from 0 to 1 of 4/1+x^2 is pi, and pi is just 3.1415926535897932384626 and a bit. (yes, that's from memory.  And yes, it was a *very* long study hall my freshman year in high school)  Since they've survived Calc 1, as well, the idea of a Riemann sum should also be old hat.  So we take a look at what that simple numerical integration code looks like in pthreads, OpenMP, CUDA, MPI, and so on.</p>
<p>The core pseudo-C looks like this:</p>
<ul> dx = 1.0/1000000<br />
for ( i=0; i&lt;1000000; i++) {<br />
x=(i+.5)*dx;<br />
sum += 4/(1 + x*x);<br />
}<br />
pi = dx*sum;</ul>
<p>I'm working on adding a couple of more during this break -- maybe adding a SysV shared memory IPC version, maybe brush up on UPC.  But I open up the call -- anyone want to submit an example in OpenCL, Ct, Concurrent Collections, X10, ... ?</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2009/12/14/calling-all-parallel-languages-amp-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multicore in Systems Classes -- #2 Beyond &quot;Parallel&quot;</title>
		<link>http://software.intel.com/en-us/blogs/2009/12/08/multicore-in-systems-classes-2-beyond-parallel/</link>
		<comments>http://software.intel.com/en-us/blogs/2009/12/08/multicore-in-systems-classes-2-beyond-parallel/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 20:11:17 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>
		<category><![CDATA[Curriculum]]></category>
		<category><![CDATA[Matthew Wolf]]></category>
		<category><![CDATA[parallelism]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2009/12/08/multicore-in-systems-classes-2-beyond-parallel/</guid>
		<description><![CDATA[This topic has been mulling around in my head for a while, but it was really only in discussions with several people at SuperComputing a couple of weeks ago that I figured out how to explain what was bothering me.  As I mentioned in the last post in this series, I'm teaching a junior-level systems [...]]]></description>
			<content:encoded><![CDATA[<p>This topic has been mulling around in my head for a while, but it was really only in discussions with several people at SuperComputing a couple of weeks ago that I figured out how to explain what was bothering me.  As I mentioned in the last post in this series, I'm teaching a junior-level systems course this semester (and next).  There was already a certain amount of "parallel" content in that course before I took on my reform/upgrade/enhancement challenge... specifically, there was a series of lectures on pthreads hidden somewhere in the middle, and some discussion about concurrency issues in OS threads.</p>
<p>This is good stuff... and much of it is still in there in some form.  But Steven Parker of NVidia mentioned in a panel discussion at SC that, before he left academia,  he was doing something similar in one of his classes. Out of curiousity, he did an informal poll of many of his colleagues, and found that they, too, were trying to "be good" to their students by covering parallelism... and almost all of them were covering the exact same pthreads lectures.  Depending on your institution's choice of languages, you could equally well substitute java threads or windows threads in there, too.</p>
<p>(shameless plug -- you can watch the panel here: http://software.intel.com/en-us/videos/preparing-the-world-for-ubiquitous-parallelism-at-sc09-part-1/)</p>
<p>So, as important as it is to transition from no parallelism to having some parallelism in your curriculum, it's also very important that you make sure that you balance that with some depth and breadth of exposure.  So, concretely, I took the pthreads section (which, incidentally, mirrored what was in both their sophomore- &amp; senior-level class) and tried to deconstruct it.  I grabbed a copy of the slides from the sophomore class, replayed a subset of them (the simple banker's mutex example), and then asked them to explain <strong>how</strong> the OS could be offering this service.</p>
<p>We (eventually, with some professorial prodding) dug all the way down to discussions of atomic instructions, and the cooperation between the memory &amp; cpu that they require.  I then challenged them, as they walked out the door, to think about what happens in multicore systems where it may no longer be practical to think about locking the whole memory bus -- i.e. what happens to mutexes (and the whole pthreads model) if compare-and-swap dies?</p>
<p>The point here is to emphasize that parallelism as we in the community are used to defining it is a good starting point... but isn't necessarily sufficient for where our students need to go.  As useful as the multi-threaded web server is as a project (for example), it's not likely to be typical of the way students have to think about parallelism in the future in order to deal with multicore chips.  So we have to stretch... find some ways to channel new challenges and opportunities into the classroom, even if we don't know which way the technological ball will end up bouncing.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2009/12/08/multicore-in-systems-classes-2-beyond-parallel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Musings on social media in education</title>
		<link>http://software.intel.com/en-us/blogs/2009/10/23/musings-on-social-media-in-education/</link>
		<comments>http://software.intel.com/en-us/blogs/2009/10/23/musings-on-social-media-in-education/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 20:38:40 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2009/10/23/musings-on-social-media-in-education/</guid>
		<description><![CDATA[Initially, this post was going to be titled "To blog or not to blog", but that seemed to perhaps cut a little too close to my perhaps overly infrequent updates here.  What I wanted to muse about a bit, however, was the sudden currency of the issues around higher education and the use of social [...]]]></description>
			<content:encoded><![CDATA[<p>Initially, this post was going to be titled "To blog or not to blog", but that seemed to perhaps cut a little too close to my perhaps overly infrequent updates here.  What I wanted to muse about a bit, however, was the sudden currency of the issues around higher education and the use of social media.</p>
<p>If you have tracked this for a while, you find that there is always a set of articles about higher education right around this time of year in the press -- I think it's a matter of those mid-career journalists reacting to their 1st -&gt; nth child going off the college each August/September.  Or their reaction to writing the tuition check.  This year, the buzz has been very heavy over the use of online tools.  Even here inside Georgia Tech there's been an interesting tit-for-tat argument among professors, each side citing studies on whether video lectures, blogs, tweets, etc. enhance or distract from the learning process.</p>
<p>On the one side -- yes, there is a revolution in content delivery that is on-going, and higher education will have to react.  And there is good evidence that ignoring this makes for poorer student results as well as being a poor pedagogical (and economic) choice.  Some studies have even shown that using social media (in a very broad definition) can have a strong positive impact.  This is what journalists tend to pick up on -- after all, if you can just put your kids in front of youtube and get them a university education, isn't that a much better choice?  (For your pocket books at least...)</p>
<p>The other side fires back with their own studies, though, and those tend not to get heard as much.  There's evidence, they say (and I'm just passing this along, since I haven't done any demographic studies myself), that the higher student grades tend to be because the retention rates in the heavily web-driven courses drops way down.  Students who would get A's if you just stood up front and hummed the theme to "Shaft" all day will stick it out, but the students that really need the benefit of the full educational experience walk away unsatisfied, thereby raising the average grades.  So, the traditionalists argue, the whole things should be ignored.</p>
<p>As with many things in life, I think that the truth lies somewhere in the middle.  I was involved with an experiment with full online lectures, online daily quizzes, coupled with small weekly recitation sessions back over 10 years ago.  Much has changed in the interim, but I think some of the core observations are the same -- students really liked having the resources available, but they procrastinate unless they have a driver function like "show up at 12:00 on Mondays, Wednesdays, and Fridays".  The online quizzes were nice because they could be that forcing function.  But the lectures tended to be a mess -- students wouldn't keep up, and so the servers would get completely slammed by them trying to watch 3 weeks of lectures in the 24 hours before the next test.  And, of course, students just could parse that much material in such a short time, so their grades and long-term retention of information suffered.</p>
<p>So anyone have any thoughts?  Are brick-and-mortar universities doomed?  Or, more importantly, are they missing out on something they *could* be doing for their students and alumni?</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2009/10/23/musings-on-social-media-in-education/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multicore in Systems Classes -- #1</title>
		<link>http://software.intel.com/en-us/blogs/2009/10/23/multicore-in-systems-classes-1/</link>
		<comments>http://software.intel.com/en-us/blogs/2009/10/23/multicore-in-systems-classes-1/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 20:38:23 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2009/10/23/multicore-in-systems-classes-1/</guid>
		<description><![CDATA[I'm giving this a very leading title -- with any luck this is the first of a series of blog entries about my experiences weaving multicore concepts and issues into the junior-level Operating Systems course that I'm teaching this semester.  The title is specifically "Design of Operating Systems", which is really a perfect way to [...]]]></description>
			<content:encoded><![CDATA[<p>I'm giving this a very leading title -- with any luck this is the first of a series of blog entries about my experiences weaving multicore concepts and issues into the junior-level Operating Systems course that I'm teaching this semester.  The title is specifically "Design of Operating Systems", which is really a perfect way to think about parallelism and multicore -- these are platform opportunities which the OS designers needs to consider in the <em>design</em>.  I hope that these blogs might spark some thoughts amongst those of you who are just starting to include parallelism in your curriculum, and I hope that I'll get some new ideas and suggestions that I can bring back to my classroom, too!</p>
<p>We're right in the middle of talking about synchronization and how you go about building semaphores or mutexes at the kernel level, so it's pretty natural that we talk about parallelism in pretty much every lecture at the moment.  But it's amazing how many times it comes up even when you aren't dealing with explicitly parallel topics -- library design, memory management, file systems.  Not to mention the interesting issues that shared vs partitioned L3 caches, NUMA, and other multicore-related architecture trends cause for scheduling algorithms, paging table management, etc.</p>
<p>For those of you who are just starting down the road of adding parallelism, I have a very simple suggestion that I like doing at least once a week (in some guise or another).  Just stop somewhere in your lecture, look out at the class, and ask "Do you think this will still make sense in two years?  Will the next-next generation of multicore chips still do things this way?"  Sometimes the answer's yes, sometimes it's no... but the discussion is almost always interesting.</p>
<p>I'll try to lay out some of the specific things I've done in my class in subsequent entries -- little modules and small self-contained units that try to weave multicore/parallel topics into the curriculum in bite-sized chunks.  Questions, suggestions, and contributions are very welcome!</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2009/10/23/multicore-in-systems-classes-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Know Multicore?  How can I tell?</title>
		<link>http://software.intel.com/en-us/blogs/2009/06/02/know-multicore-how-can-i-tell/</link>
		<comments>http://software.intel.com/en-us/blogs/2009/06/02/know-multicore-how-can-i-tell/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 18:35:56 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2009/06/02/know-multicore-how-can-i-tell/</guid>
		<description><![CDATA[Hello, all. The semester's finally over, and I now have some time to write up the various things that have been ruminating in the back of my mind.  Tom's earlier blog post resonates nicely with one of those... namely, what is it that I, as an educator, could measure that would let me tell if [...]]]></description>
			<content:encoded><![CDATA[<p>Hello, all.</p>
<p>The semester's finally over, and I now have some time to write up the various things that have been ruminating in the back of my mind.  Tom's <a href="http://software.intel.com/en-us/blogs/2009/05/28/instruction-level-lock-step-parallelism-on-desert-islands/">earlier blog post</a> resonates nicely with one of those... namely, what is it that I, as an educator, could <strong>measure</strong> that would let me tell if students did or did not understand multicore.  (There's a more general analog, too... what should your interviewers focus on when talking to the next generation of developers?)  Think of this as being a concept inventory for multicore computing -- what are the basic things about multicore that every student should just know.</p>
<p>For comparison, the sorts of things that show up in, say, a 1st year Physics concept inventory would be conservation of energy, conservation of momentum, short circuit as a special case of Kirchoff's Laws, etc.  You should be able to throw up a picture of three light bulbs with a short circuit across the third, and the students should immediately be able to tell you whether the 3rd light bulb would light up or not.</p>
<p>What's the corresponding set of ideas/concepts/building blocks for multicore computing?  There are a few of the bits that we bring over whole hog from HPC &amp; traditional parallelism -- Amdahl's Law.  The price of synchronization.  But... what else?  I have colleagues here who preach the line that multicore is just about parallel performance... but I think that that sells the current revolution short. Multicore programming is about more than just traditional concepts of parallelism, if for no other reason than that we have to now deal with a lot of algorithms and situations that I/we have never had to deal with on the big HPC machines.  (You want to put <strong><em>what</em> </strong>on my cable box?)</p>
<p>Here's a short (non-authoritative) list of some of the things I've been thinking about -- give me another cup of coffee, and I could probably double or triple it, but what fun would that be?  What are your suggestions?</p>
<ul>
<li>Amdahl's Law (look at the whole problem)</li>
<li>Gustafson's Law (bigger problems may be more parallel problems)</li>
<li>Lock synchronization  (sometimes you have to check on your neighbors)</li>
<li>Atomic primitives (you have to start somewhere)</li>
<li>Power is constrained (why are we going multicore in the first place?)</li>
<li>Planning for power (Can you arrange code to allow for altered power states?)</li>
<li>Memory has location (multiple layers of cache &amp; NUMA access to main memory)</li>
<li>Threads vs Tasks (What is the right state to carry around?)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2009/06/02/know-multicore-how-can-i-tell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multicore in the classroom -- say it three times</title>
		<link>http://software.intel.com/en-us/blogs/2007/12/20/multicore-in-the-classroom-say-it-three-times/</link>
		<comments>http://software.intel.com/en-us/blogs/2007/12/20/multicore-in-the-classroom-say-it-three-times/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 19:19:24 +0000</pubDate>
		<dc:creator>Matthew Wolf</dc:creator>
				<category><![CDATA[Academic]]></category>
		<category><![CDATA[Parallel Programming]]></category>

		<guid isPermaLink="false">http://software.intel.com/en-us/blogs/2007/12/20/multicore-in-the-classroom-say-it-three-times/</guid>
		<description><![CDATA[I have been invited into the Intel Blogosphere to come give a perspective on the academic impact of the on-coming grand revolution in computing – the transition to multicore. A deliberately provocative description, I admit; I expect many of you are like me and hear a "the world will be transformed" announcement about once a [...]]]></description>
			<content:encoded><![CDATA[<p>I have been invited into the Intel Blogosphere to come give a perspective on the academic impact of the on-coming grand revolution in computing – the transition to multicore. A deliberately provocative description, I admit; I expect many of you are like me and hear a "the world will be transformed" announcement about once a week. However, I think this transformation does have some special issues for those of us in the academic world (as well as out in the developer community) that make it worth exploring some more.</p>
<p>Multicore breaks a fundamental link in how we prepare our current and future developers – teach them to break a problem down into pieces and find a nice logical progression to solve each individual piece sequentially. A normal CS curriculum gets around to telling people about the idea of concurrent execution only as they have one foot out the door (senior-level systems courses, if then). Unfortunately, the current and forth-coming generations of multicore don't allow us that luxury.</p>
<p>The laptop that students lug into class will be multicore – two today, four to eight in the very near future. And the performance of those cores is increasingly tied to the parallel architecture – the shared cache infrastructure, OS optimization for thread teaming, and so on. Even when teaching would reasonably call for single threaded execution, performance can be difficult to assess without teaching students how to go through the extra steps to pin processes to processors, etc.</p>
<p>At Georgia Tech we've been trying to tackle this by trying to integrate bits of multi-core through out the curriculum – introduced gently into the entry classes as "my isn't it interesting when that happens", and getting increasingly more focused as time goes on. This admittedly means we have to forgo teaching some things to make space in the curriculum, but so far it has been surprisingly little. You can keep track of some of our evolving efforts at <a href="http://www.cc.gatech.edu/cercs/multicore">http://www.cc.gatech.edu/cercs/multicore</a>. This approach also has the pleasant advantage of following through on a bit of wisdom on teaching passed down to me by my father, "If it's worth saying once, it's worth saying at least three times." I think multicore fits in the "at least three" category – I'd love to hear what others may think!</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/en-us/blogs/2007/12/20/multicore-in-the-classroom-say-it-three-times/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

