<?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; pennyliang</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/pennyliang/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +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>多核编程之流水线技术</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/07/20/400004475/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/07/20/400004475/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 01:14:16 +0000</pubDate>
		<dc:creator>pennyliang</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[intel]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/07/20/400004475/</guid>
		<description><![CDATA[假定一个工作(work)，可以切分成n段工序(task)，每段工序独立完成，下一个工序依赖上一个工序，但上一个工序不会依赖下一个工序（依赖仅限于最终结果的依赖，工序间的依赖不一定必然，可有可无没有限制），即 W[0,n]=T[0,1]T[1,2]T[2,3]...T[n-1,n] Cost(T[i,j] ) = C（假定每个工序的划分最佳，完成工序的代价相等为一个常数C） 则如果串行执行，完成m个相同工作，需要mnC个工时。 如果采用n级流水的方式来进行处理。 第一个work完成，需要nC个工时， 此后每一个C工时后，完成一个任务。 因此完成全部工时的时间代价为nC+(m-1)C=(n+m-1)C 则加速比 = mnC/(n+m-1)C = mn/(m+n-1) 如果考虑到m远大于n，则近似 = mn/m = n 则n级流水比1级流水提高n倍，多核的优势完全发挥。 但问题是每个工序执行时间相当，在编程上几乎不可能，流水线的流速受到最慢工序的拖累，工序切分过细也不可能CPU核有线，切分过细来回切换成本也大。 但流水线技术是计算高并发的一种常用方法，更多请参见参考文献。 参考文献： http://www.sccas.cn/gb/learn/download/presentation.pdf]]></description>
			<content:encoded><![CDATA[<p>假定一个工作(work)，可以切分成n段工序(task)，每段工序独立完成，下一个工序依赖上一个工序，但上一个工序不会依赖下一个工序（依赖仅限于最终结果的依赖，工序间的依赖不一定必然，可有可无没有限制），即</p>
<p>W[0,n]=T[0,1]T[1,2]T[2,3]...T[n-1,n]</p>
<p>Cost(T[i,j] ) = C（假定每个工序的划分最佳，完成工序的代价相等为一个常数C）</p>
<p>则如果串行执行，完成m个相同工作，需要mnC个工时。</p>
<p>如果采用n级流水的方式来进行处理。</p>
<p>第一个work完成，需要nC个工时，</p>
<p>此后每一个C工时后，完成一个任务。</p>
<p>因此完成全部工时的时间代价为nC+(m-1)C=(n+m-1)C</p>
<p>则加速比 = mnC/(n+m-1)C = mn/(m+n-1)</p>
<p>如果考虑到m远大于n，则近似 = mn/m = n</p>
<p>则n级流水比1级流水提高n倍，多核的优势完全发挥。</p>
<p>但问题是每个工序执行时间相当，在编程上几乎不可能，流水线的流速受到最慢工序的拖累，工序切分过细也不可能CPU核有线，切分过细来回切换成本也大。</p>
<p>但流水线技术是计算高并发的一种常用方法，更多请参见参考文献。</p>
<p>参考文献：</p>
<p>http://www.sccas.cn/gb/learn/download/presentation.pdf</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/07/20/400004475/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

