<?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>中文 &#187; Yolanda Chen (Intel)</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/yolanda-chen/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +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>用 Intel(r) Cilk™Plus 关键字并行化递归算法</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/06/28/intelr-cilkplus/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/06/28/intelr-cilkplus/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 01:09:01 +0000</pubDate>
		<dc:creator>Yolanda Chen (Intel)</dc:creator>
				<category><![CDATA[并行计算]]></category>
		<category><![CDATA[软件开发工具]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/06/28/intelr-cilkplus/</guid>
		<description><![CDATA[虽然和OpenMP类似的，Intel(r) Cilk™Plus也是基于任务并行，共享存储的并行模式，但精简的语法结构却增加了使用的灵活性。与OpenMP不同的是，Intel(r) Cilk™Plus对于开发动态，和高度异步的并行问题尤其高效，而OpenMP则在静态模型下运行效率较高。对于一些约束较少的计算环境，如递归问题，用OpenMP是很难描述的，相反的，而使用Intel(r) Cilk™Plus中的cilk_spawn关键字却很容易。]]></description>
			<content:encoded><![CDATA[<p>Intel(r) Cilk™Plus源自于美国麻省理工大学15年的研究成果，它将语法结构简化成三个关键字：cilk_spawn, cilk_sync 和 cilk_for，并同时支持C和C++语言。</p>
<p>虽然和OpenMP类似的，Intel(r) Cilk™Plus也是基于任务并行，共享存储的并行模式，但精简的语法结构却增加了使用的灵活性。与OpenMP不同的是，Intel(r) Cilk™Plus对于开发动态，和高度异步的并行问题尤其高效，而OpenMP则在静态模型下运行效率较高。对于一些约束较少的计算环境，如递归问题，用OpenMP是很难描述的，相反的，而使用Intel(r) Cilk™Plus中的cilk_spawn关键字却很容易。</p>
<p>下面是一个实现快速排序的递归函数：<br />
<code>void qsort(int* begin, int* end)<br />
{<br />
if (begin != end) {<br />
int* pivot = end – 1;<br />
int* middle = std::partition(begin, pivot,<br />
std::bind2nd(std::less(), *pivot));<br />
using std::swap;<br />
swap(*pivot, *middle); // move pivot to middle<br />
qsort(begin, middle);<br />
qsort(middle + 1, end);<br />
}<br />
}</code></p>
<p>用Cilk将它并行化，函数改写如下：<br />
<code>void qsort(int* begin, int* end)<br />
{<br />
if (begin != end) {<br />
int* pivot = end – 1;<br />
int* middle = std::partition(begin, pivot,<br />
std::bind2nd(std::less(), *pivot));<br />
using std::swap;<br />
swap(*pivot, *middle); // move pivot to middle<br />
<strong>cilk_spawn </strong>qsort(begin, middle);<br />
qsort(middle + 1, end);<br />
<strong>cilk_sync</strong>;<br />
}<br />
}</code></p>
<p>可以看到，函数只是简单的增加了两条关键字，就完成了对快速排序算法的并行表示。支持Intel(r) Cilk™Plus的编译器会根据当前工作线程的个数动态的实现递归函数的调度，此时衍生发生的次数也就是递归调用的深度，而实际发生的工作密取则由运行时动态决定。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/06/28/intelr-cilkplus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

