<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>OpenMP and parallel programming</title>
        <link>http://www.openmp.net/blog/</link>
        <description></description>
        <language>en</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Fri, 11 Jan 2008 13:29:06 +0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>c和c++ 使用openmp的对比</title>
            <description><![CDATA[<b>系统 : 2 x Xeon 5130 2.00GHz 1333MHz FSB (4 cores) - Woodcrest B2, 64-bit, dual-core, 65nm, L2: 4MB</b><br /><br />testc.c:<br />&nbsp;&nbsp;&nbsp; 1 #include &lt;omp.h&gt;<br />&nbsp;&nbsp;&nbsp; 2 #include &lt;stdio.h&gt;<br />&nbsp;&nbsp;&nbsp; 3 <br />&nbsp;&nbsp;&nbsp; 4 int main()<br />&nbsp;&nbsp;&nbsp; 5 {<br />&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp; int j = 0;<br />&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"omp max: %d\n",<b>omp_get_max_threads</b>());<br />&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp; <b>omp_set_num_threads</b>(4);<br />&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; 11 <b>#pragma omp parallel for</b><br />&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp; for(i = 0; i&lt; 10;i++)<br />&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"omp get: (%d) %d\n",i,<b>omp_get_num_threads</b>());<br />&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (j = 0;j&lt;10000;j++)<br />&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"%d\n",i);<br />&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />&nbsp;&nbsp; 19&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />&nbsp;&nbsp; 20 }&nbsp;&nbsp; <br /><br />testcpp.cpp<br />&nbsp;&nbsp;&nbsp; 1 #include &lt;omp.h&gt;<br />&nbsp;&nbsp;&nbsp; 2 #include &lt;iostream&gt;<br />&nbsp;&nbsp;&nbsp; 3 <br />&nbsp;&nbsp;&nbsp; 4 using namespace std;<br />&nbsp;&nbsp;&nbsp; 5 <br />&nbsp;&nbsp;&nbsp; 6 int main()<br />&nbsp;&nbsp;&nbsp; 7 {<br />&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp; int j = 0;<br />&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp; cerr &lt;&lt; "omp max: " &lt;&lt; <b>omp_get_max_threads</b>() &lt;&lt; endl;<br />&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp; <b>omp_set_num_threads(</b>4);<br />&nbsp;&nbsp; 12 <br />&nbsp;&nbsp; 13 <b>#pragma omp parallel for</b><br />&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp; for(i = 0; i&lt; 10;i++)<br />&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cerr &lt;&lt; "omp get: (" &lt;&lt; i &lt;&lt; ") " &lt;&lt;&nbsp; <b>omp_get_num_threads</b>() &lt;&lt; endl;<br />&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (j = 0;j&lt;10000;j++)<br />&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />&nbsp;&nbsp; 19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cerr &lt;&lt; i &lt;&lt; endl;<br />&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; 21 &nbsp;&nbsp;&nbsp; return 0;<br />&nbsp;&nbsp; 22 }<br /><br />Makefile:<br />&nbsp;&nbsp;&nbsp; 1 all:<br />&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; g++42 -o testcpp testcpp.cpp -lgomp -lpthread -fopenmp<br />&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; gcc42 -o testc testc.c -lgomp -lpthread -fopenmp<br /><br />两段程序几乎一样,除了对信息的输出对于结果的现实却相差很远:<br />[~workspace]$ time ./testc<br />omp max: 4<br />omp get: (3) 4<br />omp get: (0) 4<br />omp get: (6) 4<br />omp get: (9) 4<br />0<br />3<br />6<br />omp get: (1) 4<br />omp get: (4) 4<br />9<br />omp get: (7) 4<br />1<br />omp get: (2) 4<br />4<br />2<br />7<br />omp get: (5) 4<br />omp get: (8) 4<br />8<br />5<br /><br />real&nbsp;&nbsp;&nbsp; 0m0.003s<br />user&nbsp;&nbsp;&nbsp; 0m0.003s<br />sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.001s<br /><br />而:<br />[~workspace]$ time ./testcpp<br />omp max: 4<br />omp get: (omp get: (omp get: (omp get: (0693) ) ) ) 4444<br /><br /><br /><br />06<br /><br />omp get: (9omp get: (317<br /><br />) ) 4omp get: (4<br />4<br />) 14<br /><br />7<br />omp get: (42omp get: (<br />) 8omp get: (4) 5<br />4) <br />42<br /><br />8<br />5<br /><br />real&nbsp;&nbsp;&nbsp; 0m0.008s<br />user&nbsp;&nbsp;&nbsp; 0m0.004s<br />sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.007s<br /><br /><br />看来openmp对c的支持要更规矩一些。<br /><br /><br /><br /><br /><br /><br /> ]]></description>
            <link>http://www.openmp.net/blog/2008/01/cc-openmp.html</link>
            <guid>http://www.openmp.net/blog/2008/01/cc-openmp.html</guid>
            
            
            <pubDate>Fri, 11 Jan 2008 13:29:06 +0800</pubDate>
        </item>
        
        <item>
            <title>OpenMP 与 游戏</title>
            <description><![CDATA[<p>OpenMP并行库在多核机的大量计算中尤其是序列无关的循环计算中显示出极大的性能提升。看到05年xbox的说明中已经支持了OpenMP. OpenMP大量使用在图形的渲染和着色上。<br /><br /><span class="caps">MSDN </span>上有一篇文章介绍关于在OpenMP支持Xbox的文章 :<br /><br /><a href="http://msdn2.microsoft.com/en-us/library/bb204834.aspx">Coding For Multiple Cores on Xbox 360 and Microsoft Windows</a><br /><br />这里有一片文章介绍OpenMP在游戏中渲染地形的使用:<br /><br /><a href="http://gamasutra.com/features/20060531/gruen_02.shtml"><font style="font-size: 1em;" size="+2">Multi-Threaded Terrain Smoothing</font></a><br /><br />也许当未来出现多核手机的时候OpenMP可以简化手机的线程处理, 看电池的好坏了...<br /><br /><font style="font-size: 1.5625em;"><b>Parallel computing is the wave of the future…and always will be.</b></font><br /><br /><br /><br /> </p> ]]></description>
            <link>http://www.openmp.net/blog/2007/12/openmp-1.html</link>
            <guid>http://www.openmp.net/blog/2007/12/openmp-1.html</guid>
            
            
            <pubDate>Thu, 06 Dec 2007 17:53:55 +0800</pubDate>
        </item>
        
        <item>
            <title>openMP Vendors</title>
            <description><![CDATA[AMD<br />Cray<br />Fujitsu/Lahey<br />HP<br />IBM<br />Intel<br />Microsoft<br />NEC<br />The Portland Group, Inc.<br />SGI<br />Sun Microsystems<br />Totalview Technologies<br />Vast from Crescent Bay Software ]]></description>
            <link>http://www.openmp.net/blog/2007/12/openmp-vendors-1.html</link>
            <guid>http://www.openmp.net/blog/2007/12/openmp-vendors-1.html</guid>
            
            
            <pubDate>Wed, 05 Dec 2007 14:10:20 +0800</pubDate>
        </item>
        
        <item>
            <title>gcc 4.2 支持openMP</title>
            <description><![CDATA[gcc 4.2支持 openMP, 可以尝试在 multi processor 环境下编写简单的MP程序.<br /><br />更新说明: <a href="http://gcc.gnu.org/gcc-4.2/changes.html">http://gcc.gnu.org/gcc-4.2/changes.html</a><br />gomp:&nbsp; <a href="http://gcc.gnu.org/projects/gomp/">http://gcc.gnu.org/projects/gomp/</a><br /><br />The GOMP project is developing an implementation of
<a href="http://www.openmp.org/drupal/">OpenMP</a>
for the C, C++, and <a href="http://gcc.gnu.org/fortran/">Fortran
95</a> compilers in the <a href="http://gcc.gnu.org/">GNU
Compiler Collection</a>. As part of the <a href="http://gcc.gnu.org/">GNU Project</a>, GOMP will 
simplify parallel programming for all GNU system variants. This
effort operates in an open environment to attract developers and
ensure applicability across multiple architectures and
applications....<br />  ]]></description>
            <link>http://www.openmp.net/blog/2007/12/gcc-42-openmp-1.html</link>
            <guid>http://www.openmp.net/blog/2007/12/gcc-42-openmp-1.html</guid>
            
            
            <pubDate>Sat, 01 Dec 2007 23:55:43 +0800</pubDate>
        </item>
        
        <item>
            <title>openMP 3.0 API</title>
            <description><![CDATA[come from <a href="http://www.openmp.org/">www.openmp.org</a>&nbsp;&nbsp; <span class="mt-enclosure mt-enclosure-file"><br /><a href="http://www.openmp.net/blog/2007/12/01/spec30_draft.pdf">API documents</a></span> ]]></description>
            <link>http://www.openmp.net/blog/2007/12/openmp-30-api-1.html</link>
            <guid>http://www.openmp.net/blog/2007/12/openmp-30-api-1.html</guid>
            
            
            <pubDate>Sat, 01 Dec 2007 23:10:43 +0800</pubDate>
        </item>
        
        <item>
            <title>The Birth of OpenMP 3.0</title>
            <description><![CDATA[<br />
The first entry: <a href="http://www.openmp.org/blog/wp-content/uploads/2007/11/omp30.pdf">The Birth of OpenMP 3.0</a><br /><br />come from the openMP official website <a href="http://www.openmp.org/">www.openmp.org</a><br />  ]]></description>
            <link>http://www.openmp.net/blog/2007/12/the-birth-of-openmp-30-1.html</link>
            <guid>http://www.openmp.net/blog/2007/12/the-birth-of-openmp-30-1.html</guid>
            
            
            <pubDate>Sat, 01 Dec 2007 22:50:33 +0800</pubDate>
        </item>
        
    </channel>
</rss>
