<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" version="2.0">
  <channel>
    <title>Parallel and Multi-Core Computing with C/C++</title>
    <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore</link>
    <description />
    <pubDate>Mon, 25 May 2009 23:24:00 GMT</pubDate>
    <generator>Clearspace 1.10.7 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2009-05-25T23:24:00Z</dc:date>
    <item>
      <title>The View (trip report) from BoostCon09</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/05/27/the-view-trip-report-from-boostcon09</link>
      <description>I apologize for lack of updates recently as an addition to the family has kept me hopping. &lt;br /&gt;
&lt;br /&gt;
I have still been keeping up my parallel programming work by a recent talk on C++0x Multithreading at BoostCon 09:&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.boostcon.com/program#schedule"&gt;http://www.boostcon.com/program#schedule&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
My two talks (the other one was an overview of C++0x and compiler support which can be seen here: &lt;br /&gt;
&lt;a class="jive-link-external" href="http://www-949.ibm.com/software/rational/cafe/blogs/cpp-standard/2009/05/26/the-view-or-trip-report-from-the-mar-2009-c-standard-meeting"&gt;http://www-949.ibm.com/software/rational/cafe/blogs/cpp-standard/2009/05/26/the-view-or-trip-report-from-the-mar-2009-c-standard-meeting&lt;/a&gt;)  seem packed with about 60 people in an auditorium for about 90 minutes. Here is a trip report from a fellow speaker Justin Gottschlich who attended my talks:&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://par-con.blogspot.com/"&gt;http://par-con.blogspot.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The slides and video should be online soon.&lt;br /&gt;
A second trip report review is by Emil Dotchevski:&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://revergestudios.com/reblog/index.php?n=ReCode.BoostCon09"&gt;http://revergestudios.com/reblog/index.php?n=ReCode.BoostCon09&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Justin gave an excellent talk on a proposed Boost Transactional Memory Library which he is collaborating with the Father of TM: Maurice Herlihy. &lt;br /&gt;
&lt;br /&gt;
I have been involved in Transactional Memory for a few years now and knows its hype, promise and pitfalls. Still I felt I was stirred by Justin's excellent oratory skills, pitching this technology. The idea of doing TM as a pure library is not easy, although it does get the technology into the hands of everyone as fast as possible.  Language changes take time to get right. I should know and will discuss in a future post.&lt;br /&gt;
&lt;br /&gt;
Please read their excellent trip reports for the details. I will turn my discussion on something else that is also interesting to me personally, but may not have much to do with Parallel programming.&lt;br /&gt;
&lt;br /&gt;
BoostCon 09, as with previous BoostCon was an exciting experience. Without intentionally touting my own horn, BoostCon09 is rich with speakers of experience in the field. They choose their speaker carefully from the pantheon of C++. Last year was Bjarne Stroustrup. This year was Andrei Alexandrescu, whose topic is Iterators Must Go.&lt;br /&gt;
&lt;br /&gt;
Andrei gave many reasons why iterators, once a good idea,  are unsuitable as we move forward. For me, the most interesting argument is that iterators are not well suited to multithreaded programming, because many of the idea of stack pop and push can only work in single thread unless we change the interface.&lt;br /&gt;
&lt;br /&gt;
BoostCon, in my opinion is rapidly becoming the leading C++ conference, in  direct competition with SD West, and ACCU. All are packed with workshops, and knowledgeable speakers.&lt;br /&gt;
&lt;br /&gt;
This year, there was a distinct track of parallel programming theme, which included:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Joel Falcou: High-Level Parallel Programming EDSL - A BOOST libraries use case&lt;/li&gt;
&lt;li&gt;Stephan T. Lavavej: Parallel Patterns Library in Visual Studio 2010&lt;/li&gt;
&lt;li&gt;Justin Gottschlich, Jeremy Siek: Boost + Software Transactional Memory&lt;/li&gt;
&lt;li&gt;Troy Straszheim: Kamasu: Parallel computing on the GPU with boost::proto&lt;/li&gt;
&lt;/ul&gt;
and of course, yours truly's:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Michael Wong: Multithreaded C++0x: The Dawn of a New Standard&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
All this makes me want to suggest a special track for parallel programming for Boost in future years.&lt;br /&gt;
&lt;br /&gt;
I attended some of the 0x tutorials and found that I still had things that I didn't know. This is not surprising given the depth of C++0x.&lt;br /&gt;
&lt;br /&gt;
The other interesting part was the Cmake tutorial. Boost build has used bjam since the beginning. This build tool, while interesting in its own right has many peculiarities which makes its adoption not a trivial task for building Boost on IBM systems. From the stories we heard around Boostcon, the same seems to apply to other environments.&lt;br /&gt;
&lt;br /&gt;
Recently, there has been a move towards using cmake as a truly better build tool. From what I can see from the workshop, they are right and I am eager to move our Boost build to a cmake system, especially if Boost is moving in that direction, to rid us of the problems that bjam has caused.&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.cmake.org/"&gt;http://www.cmake.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
How does cmake differ form the traditional unix make?&lt;br /&gt;
Unlike make, it does not actually do the software build, but instead generates standard build scripts (makefiles on Unix, project file for Windows, workspaces for Eclipse/CDT), that makes it easier to adopt to various systems. &lt;br /&gt;
&lt;br /&gt;
Cmake was started as part of the Insight visual ToolKit build from Kitware, and has since migrated into many products. The real explosion occurred with adoption of cmake by KDE. Since then, even more software is converting to cmake.&lt;br /&gt;
&lt;br /&gt;
Cmake is so far able to build Boost, but is not able yet to run its builtin tests. This is a problem that I am sure will be rectified.&lt;br /&gt;
&lt;br /&gt;
The beauty is that cmake is available already as a binary on AIX systems.&lt;br /&gt;
&lt;br /&gt;
I worked with Troy Straszheim and Brad King to try getting cmake working on our Boost build. I got half way but found a problem which I hope to resolve.&lt;br /&gt;
&lt;br /&gt;
We support Boost because IBM AIX and Linux xlC++ compilers have been tested with Boost with support in V8 with 1.32, then V9 with 1.34, and V10.1 with 1.34.1.&lt;br /&gt;
&lt;br /&gt;
You can see our Boost test results here:&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.ibm.com/support/docview.wss?rs=2239&amp;#38;context=SSJT9L&amp;#38;uid=swg27006911"&gt;http://www.ibm.com/support/docview.wss?rs=2239&amp;#38;context=SSJT9L&amp;#38;uid=swg27006911&lt;/a&gt;</description>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">c++</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">boost</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">boostcon</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">conference</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">cmake</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">transactional_memory</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">parallel_programming</category>
      <pubDate>Thu, 28 May 2009 00:47:16 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/05/27/the-view-trip-report-from-boostcon09</guid>
      <dc:date>2009-05-28T00:47:16Z</dc:date>
      <clearspace:dateToText>6 months, 2 days ago</clearspace:dateToText>
      <clearspace:replyCount>2</clearspace:replyCount>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/the-view-trip-report-from-boostcon09</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1203</wfw:commentRss>
    </item>
    <item>
      <title>OpenMP Booth at SuperComputing 08</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/26/openmp-booth-at-supercomputing-08</link>
      <description>I should include an obligatory photo of the OpenMP Booth with our CEO Larry Meadows. Many members worked tirelessly, especially Larry at making sure the Booth was put up, taken down and staffed properly. &lt;br /&gt;
&lt;br /&gt;
We also met many people who specifically dropped by to see what was going on, in this first year where we had a booth.&lt;br /&gt;
&lt;br /&gt;
Many Thanks.&lt;br /&gt;
&lt;br /&gt;
 &lt;img src="http://www-949.ibm.com/software/rational/cafe/servlet/JiveServlet/downloadImage/38-1103-1120/IMG_1422.JPG" alt="IMG_1422.JPG" width="620" class="jive-image-thumbnail jive-image" onclick="myJiveImage.start(this, 'http://www-949.ibm.com/software/rational/cafe/servlet/JiveServlet/downloadImage/38-1103-1120/IMG_1422.JPG');return false;"/&gt;</description>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">openmp</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">supercomputing</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">conference</category>
      <pubDate>Wed, 26 Nov 2008 22:21:44 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/26/openmp-booth-at-supercomputing-08</guid>
      <dc:date>2008-11-26T22:21:44Z</dc:date>
      <clearspace:dateToText>12 months, 2 days ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/openmp-booth-at-supercomputing-08</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1103</wfw:commentRss>
    </item>
    <item>
      <title>Questions on C/C++ volatile from SC08 Tutorial S08: A Hands-on Introduction to OpenMP</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/20/questions-on-cc-volatile-from-sc08-tutorial-s08-a-handson-introduction-to-openmp</link>
      <description>On Sunday, I attended the OpenMP Tutorial hosted by some of my colleagues from the OpenMP committee, Tim Mattson and Larry Meadows. It was an excellent tutorial, full of features and pointing out the behavioral differences between OpenMP 2.5 and 3.0. Tim has been doing this tutorial for almost 20 years and Larry, as the OpenMP CEO has been involved in this for the same amount of time. &lt;br /&gt;
&lt;br /&gt;
I must point out that IBM xl C/C++ 10.1 compiler for AIX and Linux both have support for OpenMP 3.0, in addiiton to the compilers mentioned during the tutorial. In fact, this compiler was one of the first to have support for OpenMP 3.0 in the industry since the ratification of the specification in May, 2008. &lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www-01.ibm.com/software/awdtools/xlcpp/aix/"&gt;http://www-01.ibm.com/software/awdtools/xlcpp/aix/&lt;/a&gt;&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www-01.ibm.com/software/awdtools/xlcpp/linux/"&gt;http://www-01.ibm.com/software/awdtools/xlcpp/linux/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You can get a trial version from the link above.&lt;br /&gt;
&lt;br /&gt;
There were a few C++ specific questions. During the discussion on OpenMP memory model, one questions involves how volatile in C/C++ is used in multithreaded program.&lt;br /&gt;
&lt;br /&gt;
The C++ 0x Standard  will clarify that the volatile keyword continues to have nothing to do with multithreading. It merely indicates that something from the environment may change the value.  The role of an atomic variable will be used to indicate that another thread may change the value of this variable. It is possible to say that a variable is an atomic volatile to indicate that something from the environment AND another thread may change the value. The C standard, when it supports concurrency in C1x will likely adapt the same meaning. &lt;br /&gt;
&lt;br /&gt;
So in short, C++ Volatile !=Jave volatile and C++ Volatile!= C++ atomic. During C++0x concurrency deliberations, we discussed at length and felt that there is too much history and presumed meanings involved with volatile. In fact, it may even have different meanings varying from compilers to platforms. So it was felt wiser to leave it alone, allowing implementers to retain whatever meaning they are used to, and adapt a new way of naming truly atomic types. &lt;br /&gt;
&lt;br /&gt;
I hope this helps to answer one of the question regarding the role of volatile.&lt;br /&gt;
&lt;br /&gt;
There was another question about how OpenMP 3.0 changed the role of what constructor (default, copy, assignment) is called by each of the private/threadprivate/first/lastprivate variable. Tim was right that we worked very hard to clarify this aspect, but the rules while somewhat intuitive is still fairly tedious to enumerate, given the many ways that C++ does initialization. I will clarify that in a subsequent post.</description>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">c</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">c++</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">openmp</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">tutorial</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">supercomputing</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">conference</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">volatile</category>
      <pubDate>Thu, 20 Nov 2008 16:53:19 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/20/questions-on-cc-volatile-from-sc08-tutorial-s08-a-handson-introduction-to-openmp</guid>
      <dc:date>2008-11-20T16:53:19Z</dc:date>
      <clearspace:dateToText>1 year, 6 days ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/questions-on-cc-volatile-from-sc08-tutorial-s08-a-handson-introduction-to-openmp</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1089</wfw:commentRss>
    </item>
    <item>
      <title>Supercomputing 08</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/15/supercomputing-08</link>
      <description>Hi, all. This is Michael Wong. I am at the International Conference for High Performance Computing, Networking, Storage and Analysis, commonly called SC 08, courtesy of IBM&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://sc08.supercomputing.org/"&gt;http://sc08.supercomputing.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://sc08.supercomputing.org/images/sc08_logo.jpg" alt="http://sc08.supercomputing.org/images/sc08_logo.jpg" class="jive-image"  /&gt;&lt;br /&gt;
&lt;br /&gt;
I am specifically here to participate in the OpenMP sessions, where we have a booth, a BOF, and other discussion panels.&lt;br /&gt;
&lt;br /&gt;
Over the next few posts, I hope to bring you some of the exciting events that are going on at this conference. &lt;br /&gt;
&lt;br /&gt;
Looking at the program, there are a number of sessions aimed at Parallel Computing. If there are sessions you would like me to report from, drop me a note through this post and I can see what I can do.&lt;br /&gt;
&lt;br /&gt;
On the flight down, let me just say that the last direct flight from Toronto (where I come from) to Austin was like a reunion of technologists as nearly everyone on the plane was attending SC 08. I recognized people from almost every software/hardware company that is active in this area. It was an interesting high-tech flight. &lt;br /&gt;
&lt;br /&gt;
Normally, there is no direct flight from Toronto to Austin, and it takes multiple stops to get here. I am sure they didn't put together a direct flight just for us for SC 08.  &lt;br /&gt;
&lt;br /&gt;
(Actually, I learned on the plane that the direct flight started a year ago by Air Canada!)</description>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">parallel</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">supercomputing</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">conference</category>
      <pubDate>Sat, 15 Nov 2008 14:57:53 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/15/supercomputing-08</guid>
      <dc:date>2008-11-15T14:57:53Z</dc:date>
      <clearspace:dateToText>1 year, 1 week ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/supercomputing-08</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1087</wfw:commentRss>
    </item>
  </channel>
</rss>

