<?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>Thu, 06 Aug 2009 16:54:35 GMT</pubDate>
    <generator>Clearspace 1.10.7 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2009-08-06T16:54:35Z</dc:date>
    <item>
      <title>Draft Specification of Transactional Language Constructs for C++</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/11/11/draft-specification-of-transactional-language-constructs-for-c</link>
      <description>Hello all, over the last year, a group of Transactional Memory experts from Sun, Intel, and IBM have been getting together every Friday to discuss how to create a uniform syntax for Transactional Memory.&lt;br /&gt;
&lt;br /&gt;
We are happy to release the first version of the Draft Specification of Transactional Language Constructs for C++. This specification is the result of a joint work by a group of people from Intel, IBM and Sun, and is based on our experience working with transactional language constructs. We would like to encourage people to implement this specification and we welcome feedback on the document. Please direct any such feedback to this discussion group &lt;a class="jive-link-external" href="http://groups.google.com/group/tm-languages"&gt;TM &amp;#38; Languages&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can find the specification in the Resource Library/Articles, Presentation, Ebooks under the &lt;a class="jive-link-external" href="http://www-949.ibm.com/software/rational/cafe/docs/DOC-2607"&gt;Parallel Section&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If you have any comments, I invite you to post them here or in the Discussion forum.&lt;br /&gt;
&lt;br /&gt;
TM Specification Drafting Group</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">transacational</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">memory</category>
      <pubDate>Wed, 11 Nov 2009 15:58:43 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/11/11/draft-specification-of-transactional-language-constructs-for-c</guid>
      <dc:date>2009-11-11T15:58:43Z</dc:date>
      <clearspace:dateToText>3 months, 2 weeks ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/draft-specification-of-transactional-language-constructs-for-c</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1230</wfw:commentRss>
    </item>
    <item>
      <title>IBM's Alphaworks Software Transactional Memory Compiler</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/08/11/ibms-alphaworks-software-transactional-memory-compiler</link>
      <description>Transactional Memory (TM) is a high level abstraction for supporting a safe mutable shared state, such that the user does not have to worry about the low-level details of locking and sharing of global resources. It is basically a class of optimistic speculation techniques such that groups of memory operations are bundled as an atomic operation such that it can resolves the problems with locks, possibly support composability. &lt;br /&gt;
&lt;br /&gt;
The basic idea is to move your group of atomic operations through, assuming that it will be successful, and only rollback when a conflict actually occurs. &lt;br /&gt;
&lt;br /&gt;
At the moment, much of the ideas of TM are there as a way to test out the idea, and possibly be integrated into some future hybrid system. Even practitioners of TM knows there is a certain amount of hype that we have to deal with in any new technology before it drops to a trough and rebounds back to a realistic plateau.&lt;br /&gt;
&lt;br /&gt;
A number of vendors have planned both hardware and software implementations of Transactional Memory. &lt;br /&gt;
&lt;br /&gt;
The software transactional memory compilers from different vendors all use different syntax, and this creates a basic problem with interoperability, and common porting of code. I will deal with this in the next post.&lt;br /&gt;
&lt;br /&gt;
IBM is also working in this area, and has released an Alphaworks compiler supporting Software Transaction, actually last year.&lt;br /&gt;
&lt;br /&gt;
The &lt;a class="jive-link-external" href="http://www.alphaworks.ibm.com/tech/xlcstm"&gt;IBM XL C/C++ for Transactional Memory for AIX&lt;/a&gt; is also accessible from the &lt;a class="jive-link-external" href="http://www-949.ibm.com/software/rational/cafe/docs/DOC-2608"&gt;Resource Library&lt;/a&gt; of the C/C++ Cafe.&lt;br /&gt;
&lt;p /&gt;
The public domain STM runtime is compatible with the AlphaWorks XLC STM release.&lt;br /&gt;
It was released through the &lt;a class="jive-link-external" href="http://sourceforge.net/projects/amino-cbbs/"&gt;Amino Concurrency Building Blocks project&lt;/a&gt;&lt;br /&gt;
The source code is &lt;a class="jive-link-external" href="http://sourceforge.net/projects/amino-cbbs/files/cbbs/0.5.3/cbbs-cpp-src-0.5.3.tar.gz/download"&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I will have more to say about the Amino Building Blocks in a future post.</description>
      <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">stm</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">amino</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">concurrency</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">building</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">blocks</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">c/c++</category>
      <pubDate>Tue, 11 Aug 2009 17:02:44 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/08/11/ibms-alphaworks-software-transactional-memory-compiler</guid>
      <dc:date>2009-08-11T17:02:44Z</dc:date>
      <clearspace:dateToText>3 months, 2 weeks ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/ibms-alphaworks-software-transactional-memory-compiler</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1231</wfw:commentRss>
    </item>
    <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, 1 day 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>Where is OpenCL and OpenMP headed?</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/01/25/where-is-opencl-and-openmp-headed</link>
      <description>The following is a a private communication from an IBM engineer Matthew Markland who asked a great question. I do not claim great expertise but I feel that there is enough of an opinion piece that some folks may like to see this discussion or continue it. I have edited the response somewhat but it is largely in tact and reprinted with Matthew's permission. Note I have no insight into PGI or any other product other then what I read in public articles, and as such makes no product claim. Any opinion regarding other company remain necessarily my own and is not IBM's position.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="jive-quote"&gt;Michael:&lt;br /&gt;
&lt;p /&gt;
I hope that the new year finds everything well for you and yours. &lt;br /&gt;
I'm enjoying the C/C++ Cafe posts you guys put out immensely. &lt;img class="jive-emoticon" border="0" src="http://www-949.ibm.com/software/rational/cafe/images/emoticons/happy.gif" alt=":-)" /&gt;&lt;/div&gt;
Please join in the discussion, or even bring this up as other experts will chime in.&lt;br /&gt;
&lt;div class="jive-quote"&gt; &lt;br /&gt;
I just wanted to get your opinion on some things that have been &lt;br /&gt;
going through my mind with respect to the multicore/hybrid &lt;br /&gt;
programming models that are being put out by various entities. It &lt;br /&gt;
seems that many people believe that the best model is an extension &lt;br /&gt;
to the language model, be it a pure language extension like what &lt;br /&gt;
CUDA and OpenCL have, or with a new model of pragmas like PGI is &lt;/div&gt;
&lt;br /&gt;
OpenCL/CUDA is mostly a library based model and a language extension(modulo the 4 memory annotations). But yes I see where you are going with this ...&lt;br /&gt;
&lt;br /&gt;
&lt;div class="jive-quote"&gt;adding. I'm wondering, especially in the case of the PGI extensions,&lt;/div&gt;
I am assuming this is the pragma directives available in their technology preview:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-plain"&gt;#pragma acc directive-name [clause [,clause] ...] 
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="jive-quote"&gt;whether they make sense given the existing OpenMP spec &lt;br /&gt;
Where do you &lt;/div&gt;
So there has been parallel languages that are directive based, language extensions, and library based. Usually they start off with library based because they are easy to port, and works on many vendors' compiler. Language-based solutions are harder to implement, and can not be easily corrected if wrong. Directive-based like OpenMP makes it easily adapted in an incremental manner, and keeps the base program running even on platforms that don't accept the directive. Today, we have examples of all three. MPI is a pure library based solution. Cilk is a pure language based solution and OpenMP is a directive-based solution (although it too has a library part).&lt;br /&gt;
&lt;br /&gt;
A mostly library based language like OpenCL is in a sense a step backwards. So PGI is trying a directive based approach to send the computational kernel to the accelerator/GPGPU. This is a bet from their part. I am familiar with their chief compiler engineer on the OpenMP Committee Michael Wolfe, and respects his opinion.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="jive-quote"&gt;see this headed from a personal perspective.&lt;/div&gt;
&lt;br /&gt;
Having some involvement in OpenCL, I can see where it falls somewhat short, but is nevertheless a tremendous accomplishment. It is designed for today's GPGPU architecture, assumes a weak memory model, implicitly have a dual layer of scheduling policy between the host (outer asynchronous layer) and the thread processors (inner synchronous processors with local memory). This is in addition to it being still relatively hard to program,( though easier then DirectX or OpenGL) and for people who have to port a 100,000 line of code is a large commitment on a technology that may not be around. OpenCL, is still a stream processing language and as such is limited in the scope of the parallel programs it can speed-up. What PGI is probably looking for is a more generalized programming model which works in broader situation. That is why they introduced the scheduling clause, and tied it to OpenMP. I would not be surprised if some kind of heterogenous programming support would be in OpenMP in future.&lt;br /&gt;
&lt;br /&gt;
I don't have any significant personal insight but also is involved in adapting the OpenMP paradigm to fit in the next programming model without knowing where to go. &lt;br /&gt;
&lt;br /&gt;
In the end (and this is based on Michael Wolfe's excellent analogy in an HPC paper), OpenCL is basically designed for a hardware that is a large wide body air carrier that can handle massive number of passengers in one run, but requires special airport transportation to get the passengers to the plane because the plane doesn't fit in the terminal. So the speed it has (in terms of # of passenger-miles) is mitigated by the wait time (DMA access)of loading the plane. It works when everything fits.&lt;br /&gt;
&lt;br /&gt;
If you don't have that many passengers, or have a variable number of passengers, it doesn't buy you any extra benefit and may penalize you with a super wide-body jet. And there are lots of other kinds of air carriers out there, including the super-fast kind for the payload just has to get there by 9 am the next day and the medium sized ones that can carry your particular amount of load.&lt;br /&gt;
As such, there will still be a place for OpenMP, MPI, TBB, futures, UPC, TM. We are suffering under an alarming number of these so-called parallel languages/extension/libraries lately and I can only see more as we all search for the right model. At one point, we had the same in terms of sequential languages, and over time we have dwindled down into a few General Purpose languages with many domain-specific languages. The same will likely happen in the parallel language world.</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">opencl</category>
      <pubDate>Mon, 26 Jan 2009 01:55:49 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/01/25/where-is-opencl-and-openmp-headed</guid>
      <dc:date>2009-01-26T01:55:49Z</dc:date>
      <clearspace:dateToText>10 months, 23 hours ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/where-is-opencl-and-openmp-headed</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1143</wfw:commentRss>
    </item>
    <item>
      <title>OpenCL 1.0 released</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/01/05/opencl-10-released</link>
      <description>One of the most important thing that happened in the last month of 2008, was the release of the OpenCL specification by Khronos:&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.khronos.org/registry/cl/"&gt;http://www.khronos.org/registry/cl/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
An &lt;a class="jive-link-external" href="http://www.khronos.org/developers/library/overview/opencl_overview.pdf"&gt;in-depth overview&lt;/a&gt; which breaksdown by Clause of the specification shows some of the capabilities of this specification. A shorter &lt;a class="jive-link-external" href="http://www.khronos.org/opencl/presentations/OpenCL_Summary_Nov08.pdf"&gt;summary&lt;/a&gt; will provide an overview.&lt;br /&gt;
&lt;br /&gt;
IBM is part of the group that wrote this specification.&lt;br /&gt;
&lt;br /&gt;
What is OpenCL? &lt;br /&gt;
&lt;br /&gt;
The original intent of OpenCL was to raise the abstraction of graphics programming. Game programmers will recall the battle for graphic programming using DirectX and OpenGL, which are specialized graphics languages. Now they can speak OpenCL and never have to learn these specialized graphics languages.&lt;br /&gt;
NVIDIA's vendor-specialized language CUDA was meant to do this using C, and to some extent, AMD's Close-To-Metal, and of course Microsoft's DIRECTX 11 Compute.. But an open, royal-free specification makes it far easier for everyone to invest their programming time to this. Apple, AMD, NVIDIA, and Intel are also members who participated in this specification. I wonder if Intel's Larrabee will support this.&lt;br /&gt;
&lt;br /&gt;
For parallel programming, this specification enables both data-based and task-based parallelism. It enables programmers to exploit the powers of Graphics Processing Units as General Computing Devices (GPGPU), which has recently been known to give significant speedup in specific applications.&lt;br /&gt;
&lt;br /&gt;
Unlike other parallel languages, OpenCL is aimed towards supporting heterogenous computing.</description>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">opencl</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">cell</category>
      <pubDate>Mon, 05 Jan 2009 14:22:06 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2009/01/05/opencl-10-released</guid>
      <dc:date>2009-01-05T14:22:06Z</dc:date>
      <clearspace:dateToText>10 months, 3 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/opencl-10-released</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1136</wfw:commentRss>
    </item>
    <item>
      <title>How does OpenMP 3.0 work better with C++ (Part 3)?</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/12/12/how-does-openmp-30-work-better-with-c-part-3</link>
      <description>Let's get to the good stuff. OpenMP 2.5 did not really specify what constructors should be called with various private/first/lastprivate/threadprivate:&lt;br /&gt;
&lt;br /&gt;
In some cases, it did not even specify that they should apply to non-PODs (Plain'ol Data, i.e. C structs).&lt;br /&gt;
&lt;br /&gt;
OpenMP 3.0 changed that. Beside specifying non-PODs, it also specified precise rules for the constructor sequence that is in line with what the semantics would require. &lt;br /&gt;
&lt;br /&gt;
Firstprivate:&lt;br /&gt;
For instance, it would specify that a firstprivate for a class type variable should expect an accessible copy constructor, since it is required to initialize each of the one or more list items private to a  thread with the value that the corresponding original item has when the construct is encountered.&lt;br /&gt;
&lt;br /&gt;
Lastprivate:&lt;br /&gt;
For a class type variable, it requires an accessible, unambiguous copy assignment operator for the class type. And it requires an accessible, unambiguous default constructor for the class type unless the variable is also specified in a firstprivate clause.&lt;br /&gt;
&lt;br /&gt;
Threadprivate:&lt;br /&gt;
This is the most interesting as it differentiates three kinds of initializaton in C++.&lt;br /&gt;
1. Without initialization: Object1 o;&lt;br /&gt;
&lt;ul class="jive-dash"&gt;
&lt;li&gt;Default constructor is called&lt;/li&gt;
&lt;/ul&gt;
2. Direct initialization: Object1 o( (int)23 );&lt;br /&gt;
&lt;ul class="jive-dash"&gt;
&lt;li&gt;Constructor accepting the argument is called&lt;/li&gt;
&lt;/ul&gt;
3. Copy initialization: Object1 o = other_instance;&lt;br /&gt;
&lt;ul class="jive-dash"&gt;
&lt;li&gt;Copy constructor is called&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
The semantics of this is that for the master thread, global static objects and static class members are constructed before main() is entered in an undefined order.&lt;br /&gt;
&lt;br /&gt;
For the slave threads, the exact point in time of object construction is unspecified, but is has to happen before the thread references it the first time&lt;br /&gt;
&lt;br /&gt;
These changes were a long time coming. It causes what used to be vaguely implied by the 2.5 specification, now to be clearly specified so all compilers can conform. It also allows the users of C++ with OpenMP to have more consistent behavior.</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">c++</category>
      <pubDate>Fri, 12 Dec 2008 05:33:06 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/12/12/how-does-openmp-30-work-better-with-c-part-3</guid>
      <dc:date>2008-12-12T05:33:06Z</dc:date>
      <clearspace:dateToText>11 months, 2 weeks ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/how-does-openmp-30-work-better-with-c-part-3</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1124</wfw:commentRss>
    </item>
    <item>
      <title>OpenMP at SuperComputing 08</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/12/08/openmp-at-supercomputing-08</link>
      <description>The OpenMP Birds-of-a-Feather session at SC08 was very well attended. The room was full to overflowing, with approximately 60-80 people. while OpenMP had BOFs at SC in prior years, this is actually the first year that OpenMP has had a Booth on the Exhibitor floor as well.&lt;br /&gt;
&lt;br /&gt;
The BOF had many elements, including what is new in OpenMP 3.0. They were:&lt;br /&gt;
1. Welcome and summary of ARB news&lt;br /&gt;
    - 5 mins&lt;br /&gt;
    - Larry Meadows&lt;br /&gt;
&lt;br /&gt;
2. The three greatest things about OpenMP 3.0 and the three most&lt;br /&gt;
    important things left out of OpenMP 3.0&lt;br /&gt;
    - 15 mins&lt;br /&gt;
    - Tim Mattson&lt;br /&gt;
&lt;br /&gt;
3. Tasking&lt;br /&gt;
    - 10 to 15 mins&lt;br /&gt;
    - Alex Duran&lt;br /&gt;
&lt;br /&gt;
4. Extending the OpenMP profiling API for OpenMP 3.0&lt;br /&gt;
    - 10 to 15 mins&lt;br /&gt;
    - Oleg Mazurov &lt;br /&gt;
&lt;br /&gt;
5. Announcements:&lt;br /&gt;
    - 5 mins total&lt;br /&gt;
    - IWOMP'09 announcement - Matthias Mueller&lt;br /&gt;
    - OpenMP book examples - Ruud van der Pas&lt;br /&gt;
&lt;br /&gt;
6. Panel "How to kill OpenMP by 2011"&lt;br /&gt;
    - 35 mins&lt;br /&gt;
    - Moderator:&lt;br /&gt;
         Larry Meadows&lt;br /&gt;
    - Panelists:&lt;br /&gt;
         Tim Mattson&lt;br /&gt;
         Bronis de Supinski&lt;br /&gt;
         Christian Terboven&lt;br /&gt;
         Jesus Labarta&lt;br /&gt;
&lt;br /&gt;
7. Wrap up&lt;br /&gt;
     - 5 mins&lt;br /&gt;
     - Larry Meadows&lt;br /&gt;
&lt;br /&gt;
For a description, you can find lots of detail here, including a downloadable summary card of the 3.0 Specification.&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://openmp.org/"&gt;http://openmp.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I met a number of people during my afternoon session manning the booth on Wednesday 2-6 pm, including one of the original founder of OpenMP, an instructor on using OpenMP in graduate courses as well as a consultant, among many others.  I invite them all to drop me a note here so we can continue our discussion.&lt;br /&gt;
&lt;br /&gt;
One thing that was surprising to many folks was the many compilers that already have 3.0 implementation, despite the specification ratifying only in May 2008. The companies with 3.0 implementation includes IBM, Sun, PGI, and soon Intel. Note I am just reading this from the net and have no insight into other company's or even my own company's release schedule. GNU should have something by 4.4. Same disclaimer.&lt;br /&gt;
&lt;br /&gt;
One thing that happened at the OpenMP BOF was a panel discussion on How to Kill OpenMP by 2012. This is kind of a fun session, especially at the end of a long day to not take yourself too seriously. The point is to showcase all the wrong ways in spreading a de-facto standard.&lt;br /&gt;
&lt;br /&gt;
I have had some experience working with language designs through my various roles as standard rep, and compiler writer.  So I thought I would give my $0.02 here on How to Kill OpenMP by 2012:&lt;br /&gt;
10. Don't implement the specification as stated.&lt;br /&gt;
9. Make it impossible to nail down ambiguities by having no way of addressing defects.&lt;br /&gt;
8. Ignore the user forum or suggestions&lt;br /&gt;
7. Add everyone's favorite feature, no matter how marginally useful.&lt;br /&gt;
6. Make the process as non-transparent as possible, so no one knows when you are ratifying, or even what you are doing.&lt;br /&gt;
5. Debate endlessly, on anything, not necessarily having anything to do with the language.&lt;br /&gt;
4. Design a feature as completely as possible before releasing it&lt;br /&gt;
3. Make no concession when taking a stance on objecting to someone's feature.&lt;br /&gt;
2. Form close-nit elitist groups and follow the NIH syndrome.&lt;br /&gt;
1. Don't organize any meetings, and when there are meetings, don't follow any rules.&lt;br /&gt;
&lt;br /&gt;
Seriously, I have not found this to be a problem in any of the committees that I am a part of. Otherwise, we would not have made any progress. But we can always do better.</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">bofs</category>
      <pubDate>Mon, 08 Dec 2008 15:16:30 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/12/08/openmp-at-supercomputing-08</guid>
      <dc:date>2008-12-08T15:16:30Z</dc:date>
      <clearspace:dateToText>1 year, 2 days ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/openmp-at-supercomputing-08</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1092</wfw:commentRss>
    </item>
    <item>
      <title>How does OpenMP 3.0 work better with C++?</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/12/03/how-does-openmp-30-work-better-with-c</link>
      <description>This was one of the question asked at SC 08. I will try to answer that here. I will start and add more as I move through the various topics.&lt;br /&gt;
&lt;br /&gt;
OpenMP 3.0 had better support for C++ in the following areas:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Parallelization of RandomAccess Iterator loops with strict canonical operators&lt;/li&gt;
&lt;li&gt;Threadprivatization of static class members&lt;/li&gt;
&lt;li&gt;Unsigned loop control variable support&lt;/li&gt;
&lt;li&gt;Fully specify constructor call requirement in private/first/lastprivate/threadprivate&lt;/li&gt;
&lt;li&gt;better match with the C++0x memory model&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
For-Worksharing with Iterator loops:&lt;br /&gt;
&lt;br /&gt;
We specifically enabled C++ RandomAccess iterators and C pointeres to be parallelized with explicit directives.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-plain"&gt;#include &amp;lt;vector&amp;gt;
void iterator_example()
{
   std::vector&amp;lt;int&amp;gt; vec(23);
   std::vector&amp;lt;int&amp;gt;::iterator it;
   #pragma omp parallel for default(none) shared(vec)
   for (it = vec.begin(); it &amp;lt; vec.end(); it++)
   {
   // do work with *it //
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
I will follow up with more examples.</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">c++0x</category>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">memory_model</category>
      <pubDate>Thu, 04 Dec 2008 02:51:20 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/12/03/how-does-openmp-30-work-better-with-c</guid>
      <dc:date>2008-12-04T02:51:20Z</dc:date>
      <clearspace:dateToText>12 months, 1 day ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/how-does-openmp-30-work-better-with-c</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1104</wfw:commentRss>
    </item>
    <item>
      <title>How does OpenMP 3.0 work better with C++ (Part 2)?</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/28/how-does-openmp-30-work-better-with-c-part-2</link>
      <description>This part will talk about enabling threadprivatization of static class member variables.&lt;br /&gt;
&lt;br /&gt;
In 2.5, as a result of ambiguous language, the support for this was inconsistent. In general, it would claim that a threadprivate variable must be namespace, file or block scope.&lt;br /&gt;
&lt;br /&gt;
In 3.0, this code is now allowed:&lt;br /&gt;
&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-plain"&gt;class T {
   public:
      static int i;
      #pragma omp threadprivate(i)
};
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
This may seem a trivial change, but for C++, it enables a powerful idiom of singletons and allocators, which all rely on static class member variable.&lt;br /&gt;
&lt;br /&gt;
Next posting will continue with the semantics of private, first/lastprivate, threadprivate+copyin/copyprivate for C++.</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">c++</category>
      <pubDate>Fri, 28 Nov 2008 17:04:13 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/28/how-does-openmp-30-work-better-with-c-part-2</guid>
      <dc:date>2008-11-28T17:04:13Z</dc:date>
      <clearspace:dateToText>11 months, 4 weeks ago</clearspace:dateToText>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/how-does-openmp-30-work-better-with-c-part-2</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1106</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, 1 day 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>TOP500 SuperComputer for November 2008 released at SC08</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/20/top500-supercomputer-for-november-2008-released-at-sc08</link>
      <description>Of course, we are very proud that the new list for TOP500 computers has been released here at SC08 on Tuesday at an evening BOF.&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.top500.org/blog/2008/11/20/top500_bof_session_slides_now_available"&gt;http://www.top500.org/blog/2008/11/20/top500_bof_session_slides_now_available&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This is the list of the fastest supercomputers in the world. IBM's Roadrunner has been on this list for some time.&lt;br /&gt;
&lt;br /&gt;
The rumor before the conference was whether Oakridge's Cray Jaguar would catch a RoadRunner. Now we know that a Jaguar is not faster then a RoadRunner.&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.top500.org/lists/2008/11/press-release"&gt;http://www.top500.org/lists/2008/11/press-release&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Also of importance in today's energy conscious world, is that IBM's RoadRunner is also #3 on the TOP500 GREEN list of supercomputers:&lt;br /&gt;
&lt;br /&gt;
&lt;a class="jive-link-external" href="http://www.green500.org/lists/2008/06/list.php"&gt;http://www.green500.org/lists/2008/06/list.php&lt;/a&gt;</description>
      <category domain="http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/tags">top500</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">green</category>
      <pubDate>Thu, 20 Nov 2008 17:08:08 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/20/top500-supercomputer-for-november-2008-released-at-sc08</guid>
      <dc:date>2008-11-20T17:08:08Z</dc:date>
      <clearspace:dateToText>1 year, 2 days ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <wfw:comment>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/comment/top500-supercomputer-for-november-2008-released-at-sc08</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1091</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, 5 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>
    <item>
      <title>Next Generation Systems</title>
      <link>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/12/next-generation-systems</link>
      <description>&lt;br /&gt;
&lt;span style="color:#ff0000"&gt;TANSTAAFL&lt;/span&gt;="&lt;i&gt;There ain't no such thing as a free lunch&lt;/i&gt;" with apologies to Robert Heinlein in &lt;u&gt;"The Moon is a Harsh Mistress"&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
One noted author quotes this in reference to the end of the free&lt;br /&gt;
performance improvement that Moore's Law offers on single chip clock&lt;br /&gt;
speed every 18 months.&lt;br /&gt;
&lt;br /&gt;
This heralds performance improvement in future will need to do more&lt;br /&gt;
then just sit on your hands waiting for the next clock speedup, but&lt;br /&gt;
that you have to program in latent parallelism into your code to take&lt;br /&gt;
advantage of more cores as they come out.&lt;br /&gt;
&lt;br /&gt;
This requires a new mind set, in everything.&lt;br /&gt;
&lt;br /&gt;
Hi, my name is Michael Wong and I am IBM's OpenMP and C++ Standard&lt;br /&gt;
representative. I and my colleagues will bring through this blog some&lt;br /&gt;
of the key industry trends related to Parallel and Multi-Core&lt;br /&gt;
Computing. We have been involved through our roles as implementers,&lt;br /&gt;
academic liasions, representatives on various standard committees and&lt;br /&gt;
consortiums.&lt;br /&gt;
&lt;br /&gt;
The fact of it is that times have never been better for Parallel &amp;#38;&lt;br /&gt;
Multi-Core Computing, with almost every standard, specification,&lt;br /&gt;
manufacturer coming out with support for multicores in programming&lt;br /&gt;
models, applications, and hardware. Some recent examples are Cell,&lt;br /&gt;
OpenMP 3.0, new Java Memory model, UPC and co-array Fortran, C++0x&lt;br /&gt;
concurrency, Cilk, transactional memory, auto-parallelization, Altivec and various proprietary or research projects&lt;br /&gt;
&lt;br /&gt;
There is no question that multi-core is a renaissance in systems and&lt;br /&gt;
processor design. But it is also a software issue with implications&lt;br /&gt;
throughout the entire software development stack.&lt;br /&gt;
&lt;br /&gt;
So come back often and see how this story evolves.</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">multicore</category>
      <pubDate>Wed, 12 Nov 2008 14:15:12 GMT</pubDate>
      <author>Michael_Wong</author>
      <guid>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2008/11/12/next-generation-systems</guid>
      <dc:date>2008-11-12T14:15:12Z</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/next-generation-systems</wfw:comment>
      <wfw:commentRss>http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/feeds/comments?blogPostID=1071</wfw:commentRss>
    </item>
  </channel>
</rss>

