<?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; CPU</title>
	<atom:link href="http://www.lingcc.com/tag/cpu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lingcc.com</link>
	<description>编译器、虚拟机、程序设计语言、体系结构、软件调试、操作系统等等</description>
	<lastBuildDate>Sat, 04 Feb 2012 06:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>IBM在其商用芯片中引入事务内存(Transaction Memory)支持</title>
		<link>http://www.lingcc.com/2011/08/28/11694/</link>
		<comments>http://www.lingcc.com/2011/08/28/11694/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 08:54:24 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[CPU]]></category>
		<category><![CDATA[IBM PowerPC]]></category>
		<category><![CDATA[后端优化与处理器]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Power]]></category>
		<category><![CDATA[transactional memory]]></category>
		<category><![CDATA[事务内存]]></category>
		<category><![CDATA[处理器技术]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11694</guid>
		<description><![CDATA[事务内存(Transaction Memory)是最近几年非常火热的研究方向之一.如果成功,IBM将是首个引入该支持的.IBM是在HotChip 2011上宣布这一消息的.支持事务内存的芯片PowerPC A2将用来攒BlueGene/Q,一款将在2012年完工的IBM超级计算机.Sun曾在一款已经流产的芯片(Rock) 中实现了该技术.曾经参与此项发言的工程师表示,对于某些特定的应用,事务内存能带来很大的好处,但对其他应用基本没有什么作用. 事务内存是将多个相关任务进行组织以便完成高效处理的技术.它是Herlihy和Moss于1993年在ISCA会议上提出的一种基于硬件实现的无锁同步机制。该机制基于SMP结构，通过增加事务Cache，并修改 Cache一致性协议来实现。事务内存不仅避免了传统锁机制带来的一系列问题，增强了线程间的并行度，而且简化了并行程序开发的过程，更利于程序模块的组合。斯坦福大学于2004年提出了一种新的基于硬件的TM系统TCC（Transaction Memory Coherence and Consistency），该系统将事务作为并行工作任务、通信和内存一致性的基本单元。现在，除了基于硬件实现的HTM（Hardware Transactional Memory），还有用软件方法实现的STM（Software Transactional Memory），以及软硬件结合实现的Hybrid TM。有了事务内存,多线程程序的编写将更加简单. IBM通过在L2 cache中增加一个tagging机制来实现.这些tag可以用来检测任何数据load/store冲突.若无冲突,动作继续执行.若出现冲突,芯片会通过中断让系统软件解决.IBM的L2 cache采用其嵌入式DRAM处理技术实现. 这种新的技术,需要编译器,码农们充分的利用才能发挥作用.IBM现在还没公布任何数据,但定性的评价是”Thanks to its use of fast on-chip memory, the IBM approach lowers latency when compared to traditional locking schemes even under conditions where there is high data contention” 参考: http://www.eetimes.com/electronics-news/4218914/IBM-plants-transactional-memory-in-CPU http://grid.hust.edu.cn/news.php?id=1231 http://en.wikipedia.org/wiki/Rock_processor http://en.wikipedia.org/wiki/Transactional_memory 相关文章： 反汇编器和汇编器 超线程技术适合什么样的程序？ <a href='http://www.lingcc.com/2011/08/28/11694/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F09%2F14%2F11718%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Some notes about IBM  XL C Compiler</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F13%2F11318%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Linux内存的属性</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11217%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">EDG-五个人的传奇</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F22%2F11151%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Linux内存管理中的分页</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F03%2F04%2F9921%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">杨元庆谈三年变化:IBM到底给联想带来什么</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/01/09/10623/' rel='bookmark' title='反汇编器和汇编器'>反汇编器和汇编器</a></li>
<li><a href='http://www.lingcc.com/2010/12/10/11425/' rel='bookmark' title='超线程技术适合什么样的程序？'>超线程技术适合什么样的程序？</a></li>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2010/08/22/11151/' rel='bookmark' title='Linux内存管理中的分页'>Linux内存管理中的分页</a></li>
<li><a href='http://www.lingcc.com/2011/09/09/11708/' rel='bookmark' title='Stencil codes'>Stencil codes</a></li>
<li><a href='http://www.lingcc.com/2010/09/17/11227/' rel='bookmark' title='向量处理器VS标量处理器中的向量扩展'>向量处理器VS标量处理器中的向量扩展</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>事务内存(Transaction Memory)是最近几年非常火热的研究方向之一.如果成功,IBM将是首个引入该支持的.IBM是在HotChip 2011上宣布这一消息的.支持事务内存的芯片PowerPC A2将用来攒BlueGene/Q,一款将在2012年完工的IBM超级计算机.Sun曾在一款已经流产的芯片(Rock) 中实现了该技术.曾经参与此项发言的工程师表示,对于某些特定的应用,事务内存能带来很大的好处,但对其他应用基本没有什么作用.<span id="more-11694"></span></p>
<p>事务内存是将多个相关任务进行组织以便完成高效处理的技术.它是Herlihy和Moss于1993年在ISCA会议上提出的一种基于硬件实现的无锁同步机制。该机制基于SMP结构，通过增加事务Cache，并修改 Cache一致性协议来实现。事务内存不仅避免了传统锁机制带来的一系列问题，增强了线程间的并行度，而且简化了并行程序开发的过程，更利于程序模块的组合。斯坦福大学于2004年提出了一种新的基于硬件的TM系统TCC（Transaction Memory Coherence and Consistency），该系统将事务作为并行工作任务、通信和内存一致性的基本单元。现在，除了基于硬件实现的HTM（Hardware Transactional Memory），还有用软件方法实现的STM（Software Transactional Memory），以及软硬件结合实现的Hybrid TM。有了事务内存,多线程程序的编写将更加简单.</p>
<p>IBM通过在L2 cache中增加一个tagging机制来实现.这些tag可以用来检测任何数据load/store冲突.若无冲突,动作继续执行.若出现冲突,芯片会通过中断让系统软件解决.IBM的L2 cache采用其嵌入式DRAM处理技术实现.</p>
<p>这种新的技术,需要编译器,码农们充分的利用才能发挥作用.IBM现在还没公布任何数据,但定性的评价是”Thanks to its use of fast on-chip memory, the IBM approach lowers latency when compared to traditional locking schemes even under conditions where there is high data contention”</p>
<p>参考:</p>
<ul>
<li><a href="http://www.eetimes.com/electronics-news/4218914/IBM-plants-transactional-memory-in-CPU">http://www.eetimes.com/electronics-news/4218914/IBM-plants-transactional-memory-in-CPU</a></li>
<li><a href="http://grid.hust.edu.cn/news.php?id=1231">http://grid.hust.edu.cn/news.php?id=1231</a></li>
<li><a href="http://en.wikipedia.org/wiki/Rock_processor">http://en.wikipedia.org/wiki/Rock_processor</a></li>
<li><a href="http://en.wikipedia.org/wiki/Transactional_memory">http://en.wikipedia.org/wiki/Transactional_memory</a></li>
</ul>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F09%2F14%2F11718%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Some notes about IBM  XL C Compiler</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F10%2F13%2F11318%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Linux内存的属性</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F16%2F11217%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">EDG-五个人的传奇</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F08%2F22%2F11151%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Linux内存管理中的分页</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F03%2F04%2F9921%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F28%2F11694%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">杨元庆谈三年变化:IBM到底给联想带来什么</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/01/09/10623/' rel='bookmark' title='反汇编器和汇编器'>反汇编器和汇编器</a></li>
<li><a href='http://www.lingcc.com/2010/12/10/11425/' rel='bookmark' title='超线程技术适合什么样的程序？'>超线程技术适合什么样的程序？</a></li>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2010/08/22/11151/' rel='bookmark' title='Linux内存管理中的分页'>Linux内存管理中的分页</a></li>
<li><a href='http://www.lingcc.com/2011/09/09/11708/' rel='bookmark' title='Stencil codes'>Stencil codes</a></li>
<li><a href='http://www.lingcc.com/2010/09/17/11227/' rel='bookmark' title='向量处理器VS标量处理器中的向量扩展'>向量处理器VS标量处理器中的向量扩展</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/08/28/11694/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Intel Sandy Bridge怎么给力</title>
		<link>http://www.lingcc.com/2011/01/25/11531/</link>
		<comments>http://www.lingcc.com/2011/01/25/11531/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 13:04:57 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[CPU]]></category>
		<category><![CDATA[X86]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[sandy bridge]]></category>
		<category><![CDATA[后端]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=11531</guid>
		<description><![CDATA[CES展可谓如火如荼。各大厂商纷纷上台。先是出了Intel的Sandy Bridge， AMD Fusion的一系列终端产品，笔记本电脑、台式机、平板。然后MS坐不住了，说windows支持ARM了。NVIDIA也没闲着，说要进军ARM处理器。b Sandy Bridge是Intel在此次CES上的重拳。各大评测也接踵而至。什么图形计算给力，什么视频编解码牛逼等等。这篇文章，《编译点滴》就来学习一下Sandy Bridge的新特性。 Table of Contents 1 Sandy Bridge的新特性 1.1 CPU功能集成方面 1.1.1 集成图形处理单元 1.1.2 采用 环总线结构 1.2 性能方面 1.2.1 新增微操作解码Cache 1.2.2 重新设计了分支预测器 1.2.3 新的AVX向量指令集。 1.3 功耗方面 1.3.1 下一代Turbo Boost技术 2 分析 1 Sandy Bridge的新特性1 如下图所示，为Intel Sandy Bridge的版图概览，从中可以看到Sandy Bridge的新特性，下面简单归类，一一道来。 1.1 CPU功能集成方面 CPU芯片集成北桥功能。北桥的功能主要有：主存控制器、图像控制器和PCI Express控制器。重新设计了DDR3双通道内存控制器，支持DDR3-1333 1.1.1 集成图形处理单元 也就是一个芯片里，除了控制功能复杂的核，还继承了控制功能简单，计算功能强大的GPU。上图 的“Display”和”Graphics”就是。基本上一个处理2D、一个处理3D.比较牛的一点是，它们和CPU核心共享最后一级cache。这样编程使用GPU的时候，就不用向CUDA那样把数据搬来搬去了。而且cache命中的话，直接不用访存。只是还不能把图形处理单元做的很强。 1.1.2 采用 环总线结构2 说白了，用环实现CPU内部部件间通信。使用环通信的是CPU的每个core，最后一级cache，集成内存控制器、PCI Express控制器、图形控制器等。上图给出了环总线的连接和通信方式。值得注意的是虽然最后一级cache有四个，但这四个cache和四个core并不是一一对应的，而是多对多的关系。 <a href='http://www.lingcc.com/2011/01/25/11531/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">大尾端和小尾端</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F25%2F10698%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">好大一筐梅普斯(MIPS)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F04%2F10224%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">《多核编译技术研讨会》记一</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F14%2F11639%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Intel 的AVX2指令集解读</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9889%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz 龙芯之火，可以燎原（上）</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/06/14/11639/' rel='bookmark' title='Intel 的AVX2指令集解读'>Intel 的AVX2指令集解读</a></li>
<li><a href='http://www.lingcc.com/2011/06/01/11600/' rel='bookmark' title='通用微处理中的SIMD指令扩展'>通用微处理中的SIMD指令扩展</a></li>
<li><a href='http://www.lingcc.com/2011/06/02/11605/' rel='bookmark' title='SIMD硬件的发展'>SIMD硬件的发展</a></li>
<li><a href='http://www.lingcc.com/2010/05/07/10916/' rel='bookmark' title='期待未来-一张趣图'>期待未来-一张趣图</a></li>
<li><a href='http://www.lingcc.com/2011/01/21/11515/' rel='bookmark' title='看图说话'>看图说话</a></li>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>CES展可谓如火如荼。各大厂商纷纷上台。先是出了Intel的Sandy Bridge， AMD Fusion的一系列终端产品，笔记本电脑、台式机、平板。然后MS坐不住了，说windows支持ARM了。NVIDIA也没闲着，说要进军ARM处理器。b</p>
<p>Sandy Bridge是Intel在此次CES上的重拳。各大评测也接踵而至。什么图形计算给力，什么视频编解码牛逼等等。这篇文章，《编译点滴》就来学习一下Sandy Bridge的新特性。<span id="more-11531"></span></p>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1 Sandy Bridge的新特性 </a>
<ul>
<li><a href="#sec-1_1">1.1 CPU功能集成方面 </a>
<ul>
<li><a href="#sec-1_1_1">1.1.1 集成图形处理单元 </a></li>
<li><a href="#sec-1_1_2">1.1.2 采用 环总线结构 </a></li>
</ul>
</li>
<li><a href="#sec-1_2">1.2 性能方面 </a>
<ul>
<li><a href="#sec-1_2_1">1.2.1 新增微操作解码Cache </a></li>
<li><a href="#sec-1_2_2">1.2.2 重新设计了分支预测器 </a></li>
<li><a href="#sec-1_2_3">1.2.3 新的AVX向量指令集。 </a></li>
</ul>
</li>
<li><a href="#sec-1_3">1.3 功耗方面 </a>
<ul>
<li><a href="#sec-1_3_1">1.3.1 下一代Turbo Boost技术 </a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#sec-2">2 分析 </a></li>
</ul>
</div>
</div>
<div id="outline-container-1" class="outline-2">
<h2 id="sec-1"><span class="section-number-2">1</span> Sandy Bridge的新特性<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup></h2>
<div id="text-1" class="outline-text-2">
<p>如下图所示，为Intel Sandy Bridge的版图概览，从中可以看到Sandy Bridge的新特性，下面简单归类，一一道来。</p>
<div id="attachment_11532" class="wp-caption alignnone" style="width: 810px"><a rel="attachment wp-att-11532" href="http://www.lingcc.com/2011/01/25/11531/sandy-bridge/"><img class="size-full wp-image-11532" title="sandy-bridge" src="http://www.lingcc.com/wp-content/uploads/2011/01/sandy-bridge.jpg" alt="" width="800" height="566" /></a><p class="wp-caption-text">Sandy Bridge新特性</p></div>
</div>
<div id="outline-container-1_1" class="outline-3">
<h3 id="sec-1_1"><span class="section-number-3">1.1</span> CPU功能集成方面</h3>
<div id="text-1_1" class="outline-text-3">
<p>CPU芯片集成北桥功能。北桥的功能主要有：主存控制器、图像控制器和PCI Express控制器。重新设计了DDR3双通道内存控制器，支持DDR3-1333</p>
</div>
<div id="outline-container-1_1_1" class="outline-4">
<h4 id="sec-1_1_1"><span class="section-number-4">1.1.1</span> 集成图形处理单元</h4>
<div id="text-1_1_1" class="outline-text-4">
<p>也就是一个芯片里，除了控制功能复杂的核，还继承了控制功能简单，计算功能强大的GPU。上图 的“Display”和”Graphics”就是。基本上一个处理2D、一个处理3D.比较牛的一点是，它们和CPU核心共享最后一级cache。这样编程使用GPU的时候，就不用向CUDA那样把数据搬来搬去了。而且cache命中的话，直接不用访存。只是还不能把图形处理单元做的很强。</p>
</div>
</div>
<div id="outline-container-1_1_2" class="outline-4">
<h4 id="sec-1_1_2"><span class="section-number-4">1.1.2</span> 采用 环总线结构<sup><a class="footref" name="fnr.2" href="#fn.2">2</a></sup></h4>
<div id="text-1_1_2" class="outline-text-4">
<p>说白了，用环实现CPU内部部件间通信。使用环通信的是CPU的每个core，最后一级cache，集成内存控制器、PCI Express控制器、图形控制器等。上图给出了环总线的连接和通信方式。值得注意的是虽然最后一级cache有四个，但这四个cache和四个core并不是一一对应的，而是多对多的关系。<br />
整个环通信的内容有：</p>
<ul>
<li> 数据</li>
<li> 请求</li>
<li> 答复</li>
<li> 探听<br />
有了这四个动作，这些部件之间的通信过程也就不言而喻了。</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-1_2" class="outline-3">
<h3 id="sec-1_2"><span class="section-number-3">1.2</span> 性能方面</h3>
<p>性能方面主要针对每个单核而做。如图，为Sandy Bridge的单核结构。其中黄色部分是改进部分。</p>
<div id="attachment_11533" class="wp-caption alignnone" style="width: 810px"><a rel="attachment wp-att-11533" href="http://www.lingcc.com/2011/01/25/11531/sandy-bridge-micro/"><img class="size-full wp-image-11533" title="sandy-bridge-micro" src="http://www.lingcc.com/wp-content/uploads/2011/01/sandy-bridge-micro.jpe" alt="" width="800" height="549" /></a><p class="wp-caption-text">Sandy Bridge 单核结构</p></div>
<div id="outline-container-1_2_1" class="outline-4">
<h4 id="sec-1_2_1"><span class="section-number-4">1.2.1</span> 新增微操作解码Cache</h4>
<div id="text-1_2_1" class="outline-text-4">
<p>增加一个新的微操作(Uop)解码cache.我们知道X86指令先会被分解成微操作，微操作再作指令解码。有cache后，若cache命中，就能减少指令解码代价，提升指令带宽，降低延时。但目前这个cache的替换策略很低级，尽管如此，还是有80%的命中率。这样在进入循环之类的操作后，就可以直接命中cache，这样就可以让L1 cache和指令解码器少干点活。此处不解，现在的处理器都有指令流水线，若使用cache减小了解码时间，而其他时间还是不变的话，唯一带来的好处是少点解码动作，降低功耗？</p>
</div>
</div>
<div id="outline-container-1_2_2" class="outline-4">
<h4 id="sec-1_2_2"><span class="section-number-4">1.2.2</span> 重新设计了分支预测器</h4>
<div id="text-1_2_2" class="outline-text-4">
<p>CPU中，有指令分支预测技术，通过预测即将解码的分支指令的真假，从而提前作动作，得到相关操作数。</p>
</div>
</div>
<div id="outline-container-1_2_3" class="outline-4">
<h4 id="sec-1_2_3"><span class="section-number-4">1.2.3</span> 新的AVX向量指令集。</h4>
<div id="text-1_2_3" class="outline-text-4">
<p>这套向量指令集在原MMX、SSE、SSE2的基础上，增加了对256位单精度、双精度浮点 和 AES加密指令支持，共12条新指令，其他不变。。256位的向量数据要想在寄存器、运算功能部件之间来去自如，各个环节都要做些调整</p>
<ul>
<li id="sec-1_2_3_1">运算部件更新新增了几个针对AVX向量指令的浮点运算部件。指令调度器调度使用这些运算部件。因为AVX指令的操作数为256位，而这些运算部件只有128位宽，所以在执行AVX指令时，会将一个调度端口内，两个运算部件合并完成运算。如下图所示：
<div id="attachment_11534" class="wp-caption alignnone" style="width: 810px"><a rel="attachment wp-att-11534" href="http://www.lingcc.com/2011/01/25/11531/sandy-bridge2/"><img class="size-full wp-image-11534" title="sandy-bridge2" src="http://www.lingcc.com/wp-content/uploads/2011/01/sandy-bridge2.jpe" alt="" width="800" height="595" /></a><p class="wp-caption-text">AVX运算部件融合</p></div>
<p>为了尽可能不搬移数据，Sandy Bridge还修改了运算结果数传递机制。直接给出一个已得结果数列表，而不是直接存回re-order buffer。</p>
<p>虽然新增的浮点指令不多，但Sandy Bridge这一系列调整，为更多的向量支持打好了基础。更多的指令，只是时间问题。关于AVX的更多东西，可以参考这个网站<sup><a class="footref" name="fnr.3" href="#fn.3">3</a></sup></li>
</ul>
<ul>
<li id="sec-1_2_3_2">访存部件原来Intel CPU有三个访存通道，分别完成：取数据、存数据和存地址操作。现在取数据和存地址两个通道既可以取数据也可以存地址。这样取数速度更快，更主要的是AVX的数据宽256位，访存宽128，这样原来需要两拍才能完成的访存操作，现在用两个访存通道，一拍就能搞定。</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-1_3" class="outline-3">
<h3 id="sec-1_3"><span class="section-number-3">1.3</span> 功耗方面</h3>
<div id="outline-container-1_3_1" class="outline-4">
<h4 id="sec-1_3_1"><span class="section-number-4">1.3.1</span> 下一代Turbo Boost技术</h4>
<div id="text-1_3_1" class="outline-text-4">
<p>说白了，就是自动超频。换个角度就是Intel为了避免出错，把频率预设低点，卖的便宜的不让超频，稍微贵点的，可以超频。这个超频过程是自动的，量温度，温度不高，就多超点，温度高了，就不超。所谓下一代，就是几个core，以及图形控制器分别控制各自的频率和电压。</p>
</div>
</div>
</div>
</div>
<div id="outline-container-2" class="outline-2">
<h2 id="sec-2"><span class="section-number-2">2</span> 分析</h2>
<div id="text-2" class="outline-text-2">
<p>Intel基本已经形成了两年一次微架构更新，两年一次生产工艺更新的发展趋势。这次Sandy Bridge的微结构更新确，在功能、性能和功耗上都带来不少变化。整个计算机系统都是建立在CPU基础上，CPU大的技术升级，需要很长一段时间才能被上层软件消化吸收。<br />
从编译器和操作系统的角度，可能有如下机会：</p>
<ul>
<li> 取数据和存地址通道复用，意味着需要调整机器模型，如何作指令排序</li>
<li> AVX 256浮点向量运算指令也需要合并两个运算通道，这也需要指令排序调整</li>
<li> 微操作cache会给编译器带来什么影响，指令cache的缺失会变化吗？</li>
<li> 集成的图形处理单元，需要怎样的编程环境支持。编译器如何调整指令的生成，计算的调度。或者操作系统来做。</li>
<li> 功耗方面，可以加入软件预测吗？</li>
</ul>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes:</h2>
<div id="text-footnotes">
<p class="footnote"><sup><a class="footnum" name="fn.1" href="#fnr.1">1</a></sup> <a href="http://www.hardwaresecrets.com/article/Inside-the-Intel-Sandy-Bridge-Microarchitecture/1161/1">http://www.hardwaresecrets.com/article/Inside-the-Intel-Sandy-Bridge-Microarchitecture/1161/1</a></p>
<p class="footnote"><sup><a class="footnum" name="fn.2" href="#fnr.2">2</a></sup> <a href="http://www.anandtech.com/show/3922/intels-sandy-bridge-architecture-exposed/4">http://www.anandtech.com/show/3922/intels-sandy-bridge-architecture-exposed/4</a></p>
<p class="footnote"><sup><a class="footnum" name="fn.3" href="#fnr.3">3</a></sup> <a href="http://software.intel.com/en-us/avx/">http://software.intel.com/en-us/avx/</a></p>
</div>
</div>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">大尾端和小尾端</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F25%2F10698%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">好大一筐梅普斯(MIPS)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F04%2F10224%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">《多核编译技术研讨会》记一</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F14%2F11639%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Intel 的AVX2指令集解读</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9889%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2011%2F01%2F25%2F11531%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz 龙芯之火，可以燎原（上）</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2011/06/14/11639/' rel='bookmark' title='Intel 的AVX2指令集解读'>Intel 的AVX2指令集解读</a></li>
<li><a href='http://www.lingcc.com/2011/06/01/11600/' rel='bookmark' title='通用微处理中的SIMD指令扩展'>通用微处理中的SIMD指令扩展</a></li>
<li><a href='http://www.lingcc.com/2011/06/02/11605/' rel='bookmark' title='SIMD硬件的发展'>SIMD硬件的发展</a></li>
<li><a href='http://www.lingcc.com/2010/05/07/10916/' rel='bookmark' title='期待未来-一张趣图'>期待未来-一张趣图</a></li>
<li><a href='http://www.lingcc.com/2011/01/21/11515/' rel='bookmark' title='看图说话'>看图说话</a></li>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2011/01/25/11531/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>前瞻-拿起SIMD的武器II</title>
		<link>http://www.lingcc.com/2010/05/12/10931/</link>
		<comments>http://www.lingcc.com/2010/05/12/10931/#comments</comments>
		<pubDate>Wed, 12 May 2010 14:17:39 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[后端优化与处理器]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[3dnow]]></category>
		<category><![CDATA[avx]]></category>
		<category><![CDATA[Backend 编译器后端]]></category>
		<category><![CDATA[builtin]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[MIPS]]></category>
		<category><![CDATA[mmx]]></category>
		<category><![CDATA[MPI]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[sse]]></category>
		<category><![CDATA[sse2]]></category>
		<category><![CDATA[sse3]]></category>
		<category><![CDATA[vectorization]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[多媒体处理]]></category>
		<category><![CDATA[并行]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[整点]]></category>
		<category><![CDATA[编程技术]]></category>
		<category><![CDATA[编译器]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=10931</guid>
		<description><![CDATA[上篇文章《前瞻-主流处理器中的数据并行支持(SIMD)&#62;和《前瞻-拿起SIMD的武器I》分别介绍了当今主流CPU中的SIMD扩展 ，以及前人是如何利用SIMD来做优化的，本文&#60;前瞻-拿起SIMD的武器II&#62;将探讨如何使用CPU的向量指令为程序做优化 如何实现？ 编程环境 在现在CPU设计中都加入SIMD扩展并不是解决应用性能问题的好方法。如果没有很好的利用途径，再强大的SIMD扩展指令集都是徒劳。接下来，我们从编译器技术和编程方法论上探讨如何使用SIMD指令来实现应用加速。 编译器的局限 尽管现在SIMD扩展在大部分处理器中都已具备，但目前编译器仍难生成基于SIMD指令的高效代码序列，因为从以控制流为主体的C语言中自动抽象并行化很难。仅仅有几个商业编译器能自动产生SIMD并行，但往往需要很高的代价，结构也很不令人满意。这一块依然是研究开发的热点。SWAR(SIMD within a register)是曾经比较典型的比那一起。一开始作为一个兼容面向多种处理器，之后又转化为一个能识别简单高层并行语言SWARC(一个为使用SIMD指令而生的数据并行C语言).但是，因为SIMD指令的限制，数据并行语言的成功取决于应用领域中高效的并行方法和能很好描述这种应用的语言。SWARC在语言设计阶段，缺乏对特定并行方法的假设使得它使用范围很有限。 也有人针对图像处理任务，提出了一种对C语言的并行扩展和对应的SIMD编译器，并用它实现SIMD加速。作者使用这种语言实现了图像滤波器，并使用SIMD编译器在奔腾处理器上得到了图像滤波器的高效代码序列。通过与最新C编译器中编译得到的代码对比，SIMD编译器得到的代码有4x的加速.也有人专门就如何降低用户学习新编程语言的复杂性进行研究，并提出了一个编程语言原型和相应的编译器。自动向量化的工作也有人在继续奋斗。有人提供了在编译C代码时自动使用SIMD指令代替的技术，使用它让跨平台的源代码使用SIMD指令。这种技术基于经典的代码树结构，并在其上收集数据流图信息以便生成SIMD指令，对目前的主流处理器，这样实现还行，但是很多新的SIMD结构都在趋于提供较高层的并行了。 在某些应用中，通过使用编译器内部的函数来插入一组SIMD指令实现数据在寄存器中的重排，可以实现更高度的并行。这种编译器内部函数都对应一个或多个特定的SIMD指令，通过插入这些函数，程序员告诉编译器需要选择哪个SIMD指令，编译器则负责寄存器分配和指令调度。最近有人描述了SIMD指令如何从常规代码中产生，如何决定SIMD操作的书讯，并每个SIMD指令组。在该提议中，独立的存储访问都组织称SIMD操作，SIMD数据流图根据访存的数据依赖构建，接着SIMD操作的顺序复制到数据六图中。这种机制并不依赖特定的体系结构，在SSE实现该提议，对于某些应用核心，加速比达到35%。 另外也有人研究了使用SIMD并行操作和使用串行操作的能耗问题。通过比较多个benchmark，作者的结论是：使用SIMD指令能节省72%的能耗，提升76%的性能。 编程方法论 虽然没有编译器令人满意的支持，但SIMD依然是有效的提升性能的方法，接下来介绍三种使用SIMD扩展的途径。 汇编语言：这是最高效的使用方式，因为这种编程方式能直接从硬件平台获得性能。但很容易出错，而且可移植性不强。 共享库：这些库通常处理器生产商提供的，但这些库只能覆盖特等的函数，而且只能用在特定的处理器上。比如，Intel的汇编库就提供了很多常用信号处理，向量计算和图像处理的汇编函数库供C函数调用,但通常，这种方式会造成库中的可用函数和目标应用需要的不匹配。 向量化编译器：最理想的情况下，高级语言编译器能自动识别代码中的并行部分，并生成相应的SIMD指令串。但是虽然现在有很多自动SIMD向量化的提议，但成功的很少。值得一提的是Intel C++ Compiler中的intrinsic支持，把括MMX，SSE，SSE2的SIMD指令支持，C++ SIMD向量类，还有一个自动的向量化工具能自动从循环中得到SIMD并行。它为Microsoft Windows和Linux操作系统环境带来明显性能提升。ICC的二进制文件，在Windows环境下能与Visual C++二进制兼容，在Linux能与GCC相应版本的二进制兼容。现在通过intrinsic库和C++来编程要比汇编语言容易的多，因为不再需要维护寄存器，可以方便的开发较大的软件，但因为编译器要完成寄存器分配和指令调度，所以相对于汇编，性能可能会有下降，但并不绝对。 GNU Gcc 4.2也支持了包括AtliVec,SSE2和3DNow！在内的一些多媒体扩展。 数据对齐 对齐就是把数据和代码放在主存中能让硬件更高效访问的地址的技术，也就是存储地址的一种属性。一个地址是X对齐的，如果它的地址能表示为Xn+0的形式。其中X是2的某次幂，n为任意整数。一个存储向量数据的内存块，若其边界是非对齐的，那访问它的开销将会非常大，因为需要使用数据重排机制。这种机制通常需要产生很多额外的存储访问。为了避免这种过高代价，已经有了一些技术，如循环分割，动态/静态对齐检测。很多CPU，如基于Alpha, IA-64, IA-32,MIPS和SuperH的结构，都禁止访问非对齐数据，如果程序请求访问了非对齐的数据，则抛出异常。 数据对齐是开发自动使用SIMD扩展必须要解决的基础问题之一。掌控对齐会大大增加自动向量化的难度，并限制其应用范围。为了能对向量数据高效存储，存储访问必须正确对齐。 选择合适的SIMD扩展 SIMD扩展在现在的PC中几乎都有，为啥不用呢？但，再者之前，得先回答几个问题： 现在的代码能从MMX，SSE,SSE2或SSE3中获益吗？ 代码是整点运算还是浮点？ 需要什么样的编程技术？ 如何组织数据类型，如何对齐？ 另外，为了能从SIMD扩展中获得最大收益，下面几点一定要好好评估： 计算敏感的程序段 足够给程序性能产生影响的程序段 几乎没有数据依赖控制流图的程序段 需要浮点运算的程序段 使用少量指令就能编写的计算代码段 需要额外调整才能高效利用cache结构的代码段 一款商业软件Intel VTune能较好到检测出可以并行的程序段。协助程序员优化性能。 总的来说，一个能做SIMD优化的程序段，应该是循环体较小，循环操作一个数组，该数组由8、16或者32位对齐整数，单精度32位浮点，或双精度64位浮点组成。再加上使用尽可能少的数据类型，更长的向量数据，并且小心的控制内存访问。能做到这些，SIMD扩展就能为你的程序带来不小的性能提升了：） 个人总计： 至此，对目前最低级的并行&#8211;单指令多数据并行。算是有了点认识。SIMD几乎所有的主流CPU上都有，从Alpha的MVI，IBM PowerPC上的AltiVec和SPE，HP PA-RISC 多媒体加速扩展(MAX), Intel的MMX，iwMMX，SSE，SSE2，SSE3，SSSE3；AMD的3DNow!, ARC的ARC视频处理子系统，SPARC的VIS， Sun的MAJC， <a href='http://www.lingcc.com/2010/05/12/10931/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F09%2F14%2F11718%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Some notes about IBM  XL C Compiler</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">前瞻-拿起SIMD的武器I</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F20%2F10372%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Expected unqualified-id before﻿ 查错</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/05/10/10928/' rel='bookmark' title='前瞻-拿起SIMD的武器I'>前瞻-拿起SIMD的武器I</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2009/11/18/10000/' rel='bookmark' title='Open64课程-简介，概述和中间表示'>Open64课程-简介，概述和中间表示</a></li>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4><span style="font-weight: normal;">上篇文章</span><a href="http://www.lingcc.com/2010/05/04/10878/" target="_blank"><span style="font-weight: normal;">《</span></a><a href="http://www.lingcc.com/2010/05/04/10878/" target="_blank"><span style="font-weight: normal;">前瞻-主流处理器中的数据并行支持(SIMD)</span></a><span style="font-weight: normal;">&gt;和《</span><a href="http://www.lingcc.com/2010/05/10/10928/" target="_blank"><span style="font-weight: normal;">前瞻-拿起SIMD的武器I</span></a><span style="font-weight: normal;">》分别介绍了当今主流CPU中的SIMD扩展 ，以及前人是如何利用SIMD来做优化的，本文&lt;前</span><span style="font-weight: normal;">瞻-拿起SIMD的武器II</span><span style="font-weight: normal;">&gt;将探讨如何使用CPU的向量指令为程序做优化</span></h4>
<h3>如何实现？</h3>
<h4><a name="_3698829783465135"></a>编程环境</h4>
<p>在现在CPU设计中都加入SIMD扩展并不是解决应用性能问题的好方法。如果没有很好的利用途径，再强大的SIMD扩展指令集都是徒劳。接下来，我们从编译器技术和编程方法论上探讨如何使用SIMD指令来实现应用加速。<span id="more-10931"></span></p>
<h4><a name="_42636573218531726"></a>编译器的局限</h4>
<p>尽管现在SIMD扩展在大部分处理器中都已具备，但目前编译器仍难生成基于SIMD指令的高效代码序列，因为从以控制流为主体的C语言中自动抽象并行化很难。仅仅有几个商业编译器能自动产生SIMD并行，但往往需要很高的代价，结构也很不令人满意。这一块依然是研究开发的热点。SWAR(SIMD within a register)是曾经比较典型的比那一起。一开始作为一个兼容面向多种处理器，之后又转化为一个能识别简单高层并行语言SWARC(一个为使用SIMD指令而生的数据并行C语言).但是，因为SIMD指令的限制，数据并行语言的成功取决于应用领域中高效的并行方法和能很好描述这种应用的语言。SWARC在语言设计阶段，缺乏对特定并行方法的假设使得它使用范围很有限。<br />
也有人针对图像处理任务，提出了一种对C语言的并行扩展和对应的SIMD编译器，并用它实现SIMD加速。作者使用这种语言实现了图像滤波器，并使用SIMD编译器在奔腾处理器上得到了图像滤波器的高效代码序列。通过与最新C编译器中编译得到的代码对比，SIMD编译器得到的代码有4x的加速.也有人专门就如何降低用户学习新编程语言的复杂性进行研究，并提出了一个编程语言原型和相应的编译器。自动向量化的工作也有人在继续奋斗。有人提供了在编译C代码时自动使用SIMD指令代替的技术，使用它让跨平台的源代码使用SIMD指令。这种技术基于经典的代码树结构，并在其上收集数据流图信息以便生成SIMD指令，对目前的主流处理器，这样实现还行，但是很多新的SIMD结构都在趋于提供较高层的并行了。<br />
在某些应用中，通过使用编译器内部的函数来插入一组SIMD指令实现数据在寄存器中的重排，可以实现更高度的并行。这种编译器内部函数都对应一个或多个特定的SIMD指令，通过插入这些函数，程序员告诉编译器需要选择哪个SIMD指令，编译器则负责寄存器分配和指令调度。最近有人描述了SIMD指令如何从常规代码中产生，如何决定SIMD操作的书讯，并每个SIMD指令组。在该提议中，独立的存储访问都组织称SIMD操作，SIMD数据流图根据访存的数据依赖构建，接着SIMD操作的顺序复制到数据六图中。这种机制并不依赖特定的体系结构，在SSE实现该提议，对于某些应用核心，加速比达到35%。<br />
另外也有人研究了使用SIMD并行操作和使用串行操作的能耗问题。通过比较多个benchmark，作者的结论是：使用SIMD指令能节省72%的能耗，提升76%的性能。</p>
<h4>编程方法论</h4>
<p>虽然没有编译器令人满意的支持，但SIMD依然是有效的提升性能的方法，接下来介绍三种使用SIMD扩展的途径。</p>
<ol>
<li><a name="__7473931998985098"></a>汇编语言：这是最高效的使用方式，因为这种编程方式能直接从硬件平台获得性能。但很容易出错，而且可移植性不强。</li>
<li>共享库：这些库通常处理器生产商提供的，但这些库只能覆盖特等的函数，而且只能用在特定的处理器上。比如，Intel的汇编库就提供了很多常用信号处理，向量计算和图像处理的汇编函数库供C函数调用,但通常，这种方式会造成库中的可用函数和目标应用需要的不匹配。</li>
<li>向量化编译器：最理想的情况下，高级语言编译器能自动识别代码中的并行部分，并生成相应的SIMD指令串。但是虽然现在有很多自动SIMD向量化的提议，但成功的很少。值得一提的是Intel C++ Compiler中的intrinsic支持，把括MMX，SSE，SSE2的SIMD指令支持，C++ SIMD向量类，还有一个自动的向量化工具能自动从循环中得到SIMD并行。它为Microsoft Windows和Linux操作系统环境带来明显性能提升。ICC的二进制文件，在Windows环境下能与Visual C++二进制兼容，在Linux能与GCC相应版本的二进制兼容。现在通过intrinsic库和C++来编程要比汇编语言容易的多，因为不再需要维护寄存器，可以方便的开发较大的软件，但因为编译器要完成寄存器分配和指令调度，所以相对于汇编，性能可能会有下降，但并不绝对。 GNU Gcc 4.2也支持了包括AtliVec,SSE2和3DNow！在内的一些多媒体扩展。</li>
</ol>
<h4><a name="_8764728304827076"></a>数据对齐</h4>
<p>对齐就是把数据和代码放在主存中能让硬件更高效访问的地址的技术，也就是存储地址的一种属性。一个地址是X对齐的，如果它的地址能表示为Xn+0的形式。其中X是2的某次幂，n为任意整数。一个存储向量数据的内存块，若其边界是非对齐的，那访问它的开销将会非常大，因为需要使用数据重排机制。这种机制通常需要产生很多额外的存储访问。为了避免这种过高代价，已经有了一些技术，如循环分割，动态/静态对齐检测。很多CPU，如基于Alpha, IA-64, IA-32,MIPS和SuperH的结构，都禁止访问非对齐数据，如果程序请求访问了非对齐的数据，则抛出异常。</p>
<p>数据对齐是开发自动使用SIMD扩展必须要解决的基础问题之一。掌控对齐会大大增加自动向量化的难度，并限制其应用范围。为了能对向量数据高效存储，存储访问必须正确对齐。</p>
<h4>选择合适的SIMD扩展</h4>
<p>SIMD扩展在现在的PC中几乎都有，为啥不用呢？但，再者之前，得先回答几个问题：</p>
<ol>
<li>现在的代码能从MMX，SSE,SSE2或SSE3中获益吗？</li>
<li>代码是整点运算还是浮点？</li>
<li>需要什么样的编程技术？</li>
<li>如何组织数据类型，如何对齐？</li>
</ol>
<p>另外，为了能从SIMD扩展中获得最大收益，下面几点一定要好好评估：</p>
<ol>
<li>计算敏感的程序段</li>
<li>足够给程序性能产生影响的程序段</li>
<li>几乎没有数据依赖控制流图的程序段</li>
<li>需要浮点运算的程序段</li>
<li>使用少量指令就能编写的计算代码段</li>
<li>需要额外调整才能高效利用cache结构的代码段</li>
</ol>
<p>一款商业软件Intel VTune能较好到检测出可以并行的程序段。协助程序员优化性能。</p>
<p>总的来说，一个能做SIMD优化的程序段，应该是循环体较小，循环操作一个数组，该数组由8、16或者32位对齐整数，单精度32位浮点，或双精度64位浮点组成。再加上使用尽可能少的数据类型，更长的向量数据，并且小心的控制内存访问。能做到这些，SIMD扩展就能为你的程序带来不小的性能提升了：）</p>
<p>个人总计：</p>
<p>至此，对目前最低级的并行&#8211;单指令多数据并行。算是有了点认识。SIMD几乎所有的主流CPU上都有，从Alpha的MVI，IBM PowerPC上的AltiVec和SPE，HP PA-RISC 多媒体加速扩展(MAX), Intel的MMX，iwMMX，SSE，SSE2，SSE3，SSSE3；AMD的3DNow!, ARC的ARC视频处理子系统，SPARC的VIS， Sun的MAJC， ARM的NEON， MIPS的MDMX和MIPS-3D， Cell的SPU， Philips的Xetal 到GPU上SIMD的普遍使用，从64位到128位，256位的数据并行。SIMD的硬件支持越来约强大。</p>
<p>另一方面，高品质的多媒体处理需求，也使得我们的计算机应用中数据处理越来越庞大。但唯独编译器很难为SIMD加速做贡献。SIMD的并行需要很弱的数据依赖，数据流的统一。而这种统一很难靠编译器来提取。高效的方式还得靠人工来做。人工来做，就意味着人要了解他要优化的这个算法，哪里数据计算比较多，哪里跳转，控制语句比较多。能不能使用SIMD优化，如何使用SIMD优化。</p>
<p>SIMD的硬件支持因为各个CPU厂商的设计目标不同，而且还有知识产权的问题。这样SIMD标准很难统一起来。针对每一个特定的CPU型号，都要做特定的SIMD优化，这也给软件的可移植性带来了挑战。</p>
<p>编译器能提取数据依赖吗？编译器能为程序员做点什么？编译器能在多大程度上协助程序员的工作？主流编译器已经有了对MMX，SSE，SSE2的intrinsic支持，编程在稍微损失性能的条件下编程更加容易了。Intel的VTune能帮助我们更好的发现并行机会。但很明显，这些还不够。幸好，GCC也引入了<a href="http://gcc.gnu.org/wiki/Graphite" target="_blank">Graphite</a>，或许在不久的将来，会有一些机会吧。现在影响SIMD，最多的不是找到一系列指令串来操作数据，而是如何高效的把数据组织成一个向量数据，在计算完成以后，高效的把这些数据都拿出来。</p>
<p>未来，我们还有很多值得期待，还有许多可以努力！</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F09%2F14%2F11718%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Some notes about IBM  XL C Compiler</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">前瞻-拿起SIMD的武器I</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F20%2F10372%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Expected unqualified-id before﻿ 查错</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/05/10/10928/' rel='bookmark' title='前瞻-拿起SIMD的武器I'>前瞻-拿起SIMD的武器I</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2009/11/18/10000/' rel='bookmark' title='Open64课程-简介，概述和中间表示'>Open64课程-简介，概述和中间表示</a></li>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/05/12/10931/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>前瞻-拿起SIMD的武器I</title>
		<link>http://www.lingcc.com/2010/05/10/10928/</link>
		<comments>http://www.lingcc.com/2010/05/10/10928/#comments</comments>
		<pubDate>Mon, 10 May 2010 14:27:28 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[后端优化与处理器]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[mit]]></category>
		<category><![CDATA[mmx]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[sse]]></category>
		<category><![CDATA[vectorization]]></category>
		<category><![CDATA[多媒体处理]]></category>
		<category><![CDATA[多核]]></category>
		<category><![CDATA[并行]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[数据安全]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[科学计算]]></category>
		<category><![CDATA[编译器]]></category>
		<category><![CDATA[链接]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=10928</guid>
		<description><![CDATA[上篇文章《前瞻-主流处理器中的数据并行支持(SIMD)》 介绍了当今主流CPU中的SIMD扩展，本文将介绍前人是物和利用SIMD来做优化的，下篇&#60;前瞻-拿起SIMD的武器II&#62;将探讨如何使用CPU的向量指令为程序做优化 已有在SIMD上的优化工作： 正如之前提到的，SIMD对具有以下特性的程序性能提升明显：天然数据并行，访存模式重复、在局部数据上重复操作、控制流数据无关。很多应用有这方面的特性，并能通过使用SIMD扩展提高性能，但实际仅有小部分从中获益，接下来将介绍在单核处理器上，利用Intel的SIMD扩展针对某些应用提升性能的研究，如多媒体，数据安全，数据库和一些科学计算应用。 多媒体处理 多媒体处理需要软件和硬件的很多支持。如MPEG-1，MPEG-2，MPEG-4，MPEG-7，H.263,JPEG2000等需要实时做复杂的媒体处理.3D图像和立体视频处理都需要更强劲的实时处理.因为各种媒体都需要不同的处理方式，技术支持、算法和硬件，因此针对他们的SIMD扩展改进也很不同。 离散小波变换(DWT)主要用于很多图像/视频压缩(如JPEG2000和MPEG-4)，已经有学者使用SIMD扩展减少二维和三维小波变换的执行时间。最新的研究结果显示，使用MMX为一层二维DWT实现提升策略相对于C语言实现在奔四单核处理器上，性能提升4倍.使用SSE实现Daub-4则比C语言版本提升2.5倍.而且，当发生64k别名时(???),相对于没有发生时，有明显的高加速比，这是因为MMX和SSE大大降低了访存(四分之一).也有人在卫星图像处理中使用MMX扩展，并对一些常用操作分别用MMX汇编和C语言实现并做成库，也为很多数字图像处理程序带来很大性能提升。 几何结构处理也是天生的并行任务，因为每个定点都能独立处理。有人在SIMD-PF中使用了Intel SSE，可以一次并行处理四个定点。试验结果显示，SSE为几何结构处理流水线带来了显著的性能提升，加速高达3.0x到3.8x.定点在主存中的分布对SIMD-PF的性能影响很大，预取的影响也不能忽略。 SIMD扩展还用于在其他多媒体应用优化中，如快速傅立叶变换、H.264编解码。其中H.264编解码中，作者首先在奔四单核处理器上使用SIMD扩展获得3x加速，后采用多线程在多核上运行，加速高达4.6x. 与此同时，也有芯片厂商根据实际应用，提出了几个新指令，这些新指令用于加速绝对差值求和运算(Sum-of-Absolute Difference,SAD).使用这些新指令，相对C语言能为SAD带来10x-14x的加速，而MMX的加速只有4x-7x。这些指令用于生成图像柱状图时，与C语言相比，有8x和11x的加速，而MMX只有3x和4x。 数据安全 目前的数据加密技术和工具在健壮性和性能上都无法满足下一代信息技术(个人移动通信，电子商务和互联网)的需求。现在的加解密算法通常是一个串行的数据操作序列，加密和哈希运算往往是瓶颈。椭圆曲线密码体制因安全性高，密钥长度短，计算速度快而受欢迎，也有使用SIMD扩展加速椭圆曲线密码体制的研究工作，在奔三处理器上，使用SIMD 得到了4.4x的加速. 安全哈希算法(SHA):SHA-1,SHA-256,SHA-384,SHA-512.也有人在调研之后，表示SIMD能大大提升其性能。ASE加密算法已经有了SIMD扩展加速版本，加速1.7x 数据库 随着数据库的普及和数据量的增加，高速数据库管理系统的需求越来越大。许多数据库查询，数据仓库和数据挖掘都依赖数据和计算，因此需要很高的处理能力。现在使用SIMD加速查询的研究还不多，但已经有人开始注意到可以使用SIMD实现很多数据库中的操作，如顺序扫描，聚合索引查找和链接等，使用SIMD扩展，取得的加速从10%到4x不等。 科学计算应用 虽然SIMD扩展大量用于多媒体应用加速，但针对科学计算的SIMD扩展研究还很少，而且都处于起步阶段。 DNA和蛋白质序列的比较和对齐在分子生物学，生物信息学中都很重要。其中最重要的字符串匹配操作是Smith-Waterman算法(SW)，但因为它是个计算密集算法，所以很多研究者都选择使用启发式策略来避免使用该算法，不过有人利用Intel的SIMD扩展(MMX和SSE)加速了该算法。 矩阵计算是很多科学计算应用，尤其是数值算法的核心。对矩阵乘的改进会给科学计算带来性能提升。有人使用SIMD扩展在奔三处理器上实现了矩阵乘，比常用算法快2.09x.另外一个比较典型的是线性方程求解，有人使用Intel的SSE改写LU分解算法，能轻松获得2.5x的加速.另外使用Intel的C编译器，添加几个特殊数据结构和相关的intrinsic调用后，也能提升80%的性能。 多项式求根算法是计算密集的，将其并行化也能获得可观的收益，有人选了4种常用多项式求根算法，使用C++，汇编语言和SIMD指令获得3x以上的加速. 其他科学计算，如标准化交叉相关，寻找数组中的最大/最小值.也有人针对如何方便的使用SIMD，并和原有C/C++兼容，并给出了具体应用实现，见《SIMD Correlator librart for GNSS software receivers》。 相关文章： 前瞻-主流处理器中的数据并行支持(SIMD) 前瞻-拿起SIMD的武器II 并行计算前景- 应用和小矮人 Open64课程-简介，概述和中间表示 小例子&#8211;回眸一笑百媚生 探秘CPU性能测试：Spec CPU2000之整点篇<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">前瞻-拿起SIMD的武器II</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F14%2F11639%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Intel 的AVX2指令集解读</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F20%2F10372%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Expected unqualified-id before﻿ 查错</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2010/05/12/10931/' rel='bookmark' title='前瞻-拿起SIMD的武器II'>前瞻-拿起SIMD的武器II</a></li>
<li><a href='http://www.lingcc.com/2009/11/22/10090/' rel='bookmark' title='并行计算前景- 应用和小矮人'>并行计算前景- 应用和小矮人</a></li>
<li><a href='http://www.lingcc.com/2009/11/18/10000/' rel='bookmark' title='Open64课程-简介，概述和中间表示'>Open64课程-简介，概述和中间表示</a></li>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>上篇文章<span style="color: #000000;"><a href="http://www.lingcc.com/2010/05/04/10878/" target="_blank">《</a></span><span style="color: #000000;"><a href="http://www.lingcc.com/2010/05/04/10878/" target="_blank">前瞻-主流处理器中的数据并行支持(SIMD)》</a> 介绍了当今主流CPU中的SIMD扩展，本文将介绍前人是物和利用SIMD来做优化的，下篇&lt;<a href="http://www.lingcc.com/2010/05/12/10931/">前瞻-拿起SIMD的武器II</a>&gt;将探讨如何使用CPU的向量指令为程序做优化</span></p>
<h4>已有在SIMD上的优化工作：</h4>
<p>正如之前提到的，SIMD对具有以下特性的程序性能提升明显：天然数据并行，访存模式重复、在局部数据上重复操作、控制流数据无关。很多应用有这方面的特性，并能通过使用SIMD扩展提高性能，但实际仅有小部分从中获益，接下来将介绍在单核处理器上，利用Intel的SIMD扩展针对某些应用提升性能的研究，如多媒体，数据安全，数据库和一些科学计算应用。</p>
<h5><a name="_5810484889520076_477723367654_1559512633830309"></a>多媒体处理</h5>
<p>多媒体处理需要软件和硬件的很多支持。如MPEG-1，MPEG-2，MPEG-4，MPEG-7，H.263,JPEG2000等需要实时做复杂的媒体处理.3D图像和立体视频处理都需要更强劲的实时处理.因为各种媒体都需要不同的处理方式，技术支持、算法和硬件，因此针对他们的SIMD扩展改进也很不同。<span id="more-10928"></span><br />
离散小波变换(DWT)主要用于很多图像/视频压缩(如JPEG2000和MPEG-4)，已经有学者使用SIMD扩展减少二维和三维小波变换的执行时间。最新的研究结果显示，使用MMX为一层二维DWT实现提升策略相对于C语言实现在奔四单核处理器上，性能提升4倍.使用SSE实现Daub-4则比C语言版本提升2.5倍.而且，当发生64k别名时(???),相对于没有发生时，有明显的高加速比，这是因为MMX和SSE大大降低了访存(四分之一).也有人在卫星图像处理中使用MMX扩展，并对一些常用操作分别用MMX汇编和C语言实现并做成库，也为很多数字图像处理程序带来很大性能提升。<br />
几何结构处理也是天生的并行任务，因为每个定点都能独立处理。有人在SIMD-PF中使用了Intel SSE，可以一次并行处理四个定点。试验结果显示，SSE为几何结构处理流水线带来了显著的性能提升，加速高达3.0x到3.8x.定点在主存中的分布对SIMD-PF的性能影响很大，预取的影响也不能忽略。<br />
SIMD扩展还用于在其他多媒体应用优化中，如快速傅立叶变换、H.264编解码。其中H.264编解码中，作者首先在奔四单核处理器上使用SIMD扩展获得3x加速，后采用多线程在多核上运行，加速高达4.6x.<br />
与此同时，也有芯片厂商根据实际应用，提出了几个新指令，这些新指令用于加速绝对差值求和运算(Sum-of-Absolute Difference,SAD).使用这些新指令，相对C语言能为SAD带来10x-14x的加速，而MMX的加速只有4x-7x。这些指令用于生成图像柱状图时，与C语言相比，有8x和11x的加速，而MMX只有3x和4x。</p>
<h5><a name="_43172942148112503_25010120611_5354417450726032"></a>数据安全</h5>
<p>目前的数据加密技术和工具在健壮性和性能上都无法满足下一代信息技术(个人移动通信，电子商务和互联网)的需求。现在的加解密算法通常是一个串行的数据操作序列，加密和哈希运算往往是瓶颈。椭圆曲线密码体制因安全性高，密钥长度短，计算速度快而受欢迎，也有使用SIMD扩展加速椭圆曲线密码体制的研究工作，在奔三处理器上，使用SIMD 得到了4.4x的加速.<br />
安全哈希算法(SHA):SHA-1,SHA-256,SHA-384,SHA-512.也有人在调研之后，表示SIMD能大大提升其性能。ASE加密算法已经有了SIMD扩展加速版本，加速1.7x</p>
<h5><a name="_659544001197848_4105998532982"></a>数据库</h5>
<p>随着数据库的普及和数据量的增加，高速数据库管理系统的需求越来越大。许多数据库查询，数据仓库和数据挖掘都依赖数据和计算，因此需要很高的处理能力。现在使用SIMD加速查询的研究还不多，但已经有人开始注意到可以使用SIMD实现很多数据库中的操作，如顺序扫描，聚合索引查找和链接等，使用SIMD扩展，取得的加速从10%到4x不等。</p>
<h5><a name="_41587631762723754_6645359694957733"></a>科学计算应用</h5>
<p>虽然SIMD扩展大量用于多媒体应用加速，但针对科学计算的SIMD扩展研究还很少，而且都处于起步阶段。<br />
DNA和蛋白质序列的比较和对齐在分子生物学，生物信息学中都很重要。其中最重要的字符串匹配操作是Smith-Waterman算法(SW)，但因为它是个计算密集算法，所以很多研究者都选择使用启发式策略来避免使用该算法，不过有人利用Intel的SIMD扩展(MMX和SSE)加速了该算法。<br />
矩阵计算是很多科学计算应用，尤其是数值算法的核心。对矩阵乘的改进会给科学计算带来性能提升。有人使用SIMD扩展在奔三处理器上实现了矩阵乘，比常用算法快2.09x.另外一个比较典型的是线性方程求解，有人使用Intel的SSE改写LU分解算法，能轻松获得2.5x的加速.另外使用Intel的C编译器，添加几个特殊数据结构和相关的intrinsic调用后，也能提升80%的性能。<br />
多项式求根算法是计算密集的，将其并行化也能获得可观的收益，有人选了4种常用多项式求根算法，使用C++，汇编语言和SIMD指令获得3x以上的加速.<br />
其他科学计算，如标准化交叉相关，寻找数组中的最大/最小值.也有人针对如何方便的使用SIMD，并和原有C/C++兼容，并给出了具体应用实现，见《SIMD Correlator librart for GNSS software receivers》。</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F12%2F10931%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">前瞻-拿起SIMD的武器II</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F14%2F11639%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Intel 的AVX2指令集解读</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F20%2F10372%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F10%2F10928%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Expected unqualified-id before﻿ 查错</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2010/05/12/10931/' rel='bookmark' title='前瞻-拿起SIMD的武器II'>前瞻-拿起SIMD的武器II</a></li>
<li><a href='http://www.lingcc.com/2009/11/22/10090/' rel='bookmark' title='并行计算前景- 应用和小矮人'>并行计算前景- 应用和小矮人</a></li>
<li><a href='http://www.lingcc.com/2009/11/18/10000/' rel='bookmark' title='Open64课程-简介，概述和中间表示'>Open64课程-简介，概述和中间表示</a></li>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/05/10/10928/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>期待未来-一张趣图</title>
		<link>http://www.lingcc.com/2010/05/07/10916/</link>
		<comments>http://www.lingcc.com/2010/05/07/10916/#comments</comments>
		<pubDate>Fri, 07 May 2010 06:42:09 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[编译前沿]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[x86]]></category>
		<category><![CDATA[云计算]]></category>
		<category><![CDATA[多核]]></category>
		<category><![CDATA[并行]]></category>
		<category><![CDATA[系统健壮性]]></category>
		<category><![CDATA[编译器]]></category>
		<category><![CDATA[计算技术未来]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=10916</guid>
		<description><![CDATA[先看图 图片来自《科学松鼠会》，很棒的探索新知的网站：） 生物信息学里把DNA序列看成生物体的操作系统，这张图左侧是大肠杆菌的控制网络，右侧是Linux系统的。 生物体系统本身是非常健壮的，这张图显示，在底层，大肠杆菌有很多层次的供调用资源，因此自恢复能力很强，而我们的计算机系统庞大的上层软件都依赖一个小小的CPU和之上的操作系统内核。 于是，操作系统，编译器中，稍微一个小bug都会导致上层出错，进而整个系统不再可靠。当我们还在抱怨CISC指令系统多么多么复杂，X86指令集和体系结构多么多么混乱，RISC多么多么简洁的时候，有没有想过，简单的系统设计往往意味着健壮性的缺失。我个人非常喜欢简单高效的实现，但我们必须接受一个健壮的系统需要臃肿和冗余的现实。 我们的多核CPU就是实现冗余的契机。又多了一个程序员必须学习并行编程的有利论据！当然也别想着我们的计算机系统能简单的让所有的核都能时刻在我们需要他的时候，对我们的请求快速反应。不需要它时，自觉的自我运行，优化我们计算机中的程序。难！ 又或许，所谓的云集算才是真正的冗余保证，云计算系统内部的健壮性又如何保证呢？大量的测试？抑或是继续冗余的CPU和虚拟化技术，最后这些都要回归到那些010101010的bit流，哪里才是回归简洁的地方，就像DNA中的四个碱基一样。 未来太令人期待了！ 我们必须要系统健壮起来，只有这样，才能让它更有效率更健壮的运转下去。可靠性设计将会越来越重要。多核，众核，云计算来吧！ PS：现在的多核的核数还远远不够，而且现在的半导体制造技术也很落后。其实8核的CPU在出厂时，至少是有9个以上的核的，因为有成品率问题，到了用户手里时，已经经过检测，只打开了8个核而已。以后咱不超频了，超核！ 相关文章： 探秘CPU性能测试：Spec CPU2000之整点篇 《多核编译技术研讨会》记二 认识静态链接库 前瞻-LLVM大事记(2004-2010) 前瞻-主流处理器中的数据并行支持(SIMD) GCC初窥<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F04%2F12%2F9985%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">并行计算前景-摘要</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F04%2F19%2F9986%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">并行计算前景-引言</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F06%2F01%2F9989%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">并行计算前景-研究动机</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F06%2F13%2F10970%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">关于并行貌似正确的废话-程序语言发展的启示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F10%2F10625%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">小议并行计算</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
<li><a href='http://www.lingcc.com/2009/12/05/10234/' rel='bookmark' title='《多核编译技术研讨会》记二'>《多核编译技术研讨会》记二</a></li>
<li><a href='http://www.lingcc.com/2010/05/25/10951/' rel='bookmark' title='认识静态链接库'>认识静态链接库</a></li>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>先看图</p>
<div id="attachment_11764" class="wp-caption alignnone" style="width: 310px"><a href="http://www.lingcc.com/2010/05/07/10916/colibacillus-vs-linux/" rel="attachment wp-att-11764"><img class="size-medium wp-image-11764" title="大肠杆菌和Linux系统的控制网络对比" src="http://www.lingcc.com/wp-content/uploads/2010/05/colibacillus-vs-linux-300x191.jpg" alt="大肠杆菌和Linux系统的控制网络对比" width="300" height="191" /></a><p class="wp-caption-text">大肠杆菌和Linux系统的控制网络对比</p></div>
<p>图片来自<a href="http://songshuhui.net/archives/37513.html" target="_blank">《科学松鼠会》</a>，很棒的探索新知的网站：）</p>
<p>生物信息学里把DNA序列看成生物体的操作系统，这张图左侧是大肠杆菌的控制网络，右侧是Linux系统的。<span id="more-10916"></span></p>
<p>生物体系统本身是非常健壮的，这张图显示，在底层，大肠杆菌有很多层次的供调用资源，因此自恢复能力很强，而我们的计算机系统庞大的上层软件都依赖一个小小的CPU和之上的操作系统内核。</p>
<p>于是，操作系统，编译器中，稍微一个小bug都会导致上层出错，进而整个系统不再可靠。当我们还在抱怨CISC指令系统多么多么复杂，X86指令集和体系结构多么多么混乱，RISC多么多么简洁的时候，有没有想过，简单的系统设计往往意味着健壮性的缺失。我个人非常喜欢简单高效的实现，但我们必须接受一个健壮的系统需要臃肿和冗余的现实。</p>
<p>我们的多核CPU就是实现冗余的契机。又多了一个程序员必须学习并行编程的有利论据！当然也别想着我们的计算机系统能简单的让所有的核都能时刻在我们需要他的时候，对我们的请求快速反应。不需要它时，自觉的自我运行，优化我们计算机中的程序。难！</p>
<p>又或许，所谓的云集算才是真正的冗余保证，云计算系统内部的健壮性又如何保证呢？大量的测试？抑或是继续冗余的CPU和虚拟化技术，最后这些都要回归到那些010101010的bit流，哪里才是回归简洁的地方，就像DNA中的四个碱基一样。 未来太令人期待了！</p>
<p>我们必须要系统健壮起来，只有这样，才能让它更有效率更健壮的运转下去。可靠性设计将会越来越重要。多核，众核，云计算来吧！</p>
<p>PS：现在的多核的核数还远远不够，而且现在的半导体制造技术也很落后。其实8核的CPU在出厂时，至少是有9个以上的核的，因为有成品率问题，到了用户手里时，已经经过检测，只打开了8个核而已。以后咱不超频了，超核！</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F04%2F12%2F9985%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">并行计算前景-摘要</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F04%2F19%2F9986%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">并行计算前景-引言</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F06%2F01%2F9989%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">并行计算前景-研究动机</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F06%2F13%2F10970%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">关于并行貌似正确的废话-程序语言发展的启示</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F01%2F10%2F10625%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F07%2F10916%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">小议并行计算</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
<li><a href='http://www.lingcc.com/2009/12/05/10234/' rel='bookmark' title='《多核编译技术研讨会》记二'>《多核编译技术研讨会》记二</a></li>
<li><a href='http://www.lingcc.com/2010/05/25/10951/' rel='bookmark' title='认识静态链接库'>认识静态链接库</a></li>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/05/07/10916/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>前瞻-主流处理器中的数据并行支持(SIMD)</title>
		<link>http://www.lingcc.com/2010/05/04/10878/</link>
		<comments>http://www.lingcc.com/2010/05/04/10878/#comments</comments>
		<pubDate>Tue, 04 May 2010 12:46:15 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[后端优化与处理器]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[3dnow]]></category>
		<category><![CDATA[amd]]></category>
		<category><![CDATA[avx]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mmx]]></category>
		<category><![CDATA[portage]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[sse]]></category>
		<category><![CDATA[sse2]]></category>
		<category><![CDATA[sse3]]></category>
		<category><![CDATA[sse4]]></category>
		<category><![CDATA[sse5]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[多媒体处理]]></category>
		<category><![CDATA[并行]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[整点]]></category>
		<category><![CDATA[科学计算]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=10878</guid>
		<description><![CDATA[引言部分： 多媒体处理算法应用在很多媒体处理环境中，如对文本，手写数据，2D/3D图形和音频对象的捕捉、制造、存储和传输等。过去 都是使用昂贵的多媒体处理硬件协同工作来加速。现在，通用处理器通过在体系结构上增加媒体处理支持来减少使用协同处理器分配和返回带来的开销。在通用处理 器上一个基本的操作能同时作用多个元素的支持成为SIMD并行处理。通过SIMD扩展，通用护理器通过捕捉多媒体算法中潜在的并行特性来加速应用。 自 Intel在Pentium II和Pentium 处理器引入了MMX技术以来，IA-32架构已经引入了许多SIMD扩展，分别是：MMX，流SIMD扩展(SSE), 流SIMD扩展(SSE2)和流SIMD扩展(SSE3)，SSSE3，SSE4和高级向量扩展(AVX).这些扩展都提供了一组指令，能够为封装好的整点或浮点数据提供SIMD类型的操作。其他结构也 有自己的SIMD扩展。如AMD的3DNow！，Cell和PowerPC的AltiVec等等。 可惜的是，和CPU提供的其他技术一样，多媒体 指令系统扩展的潜能并没有完全的发挥出来。目前，已经有一些论文在倡导科学家，软件开发人员使用这些指令加速程序。 这篇评论试图更深入的介绍 Intel的SIMD扩展，回顾努力使用这些扩展的一些研究，讨论阻碍多媒体扩展广泛应用的问题，并试图给出一些针对行的解决方法，和潜在的性能提升点。 SIMD 技术： SIMD是最早提出的并行处理模式之一，也是最简单最普遍的并行方法，试图用一个指令对数据集合中的每个数据作相同的操作。如下 图所示： 虽然SIMD技术还没有广泛应用，但也没有完全小时。因为SIMD扩 展对于特定的应用仍然很有意义，这些应用的特点是本身有并行的任务，需要大量的独立数据运算，包括3D图形运算，图像处理，语音识别，科学计算，数据库查 询等。 MMX技术： MMX是在第五代奔腾处理器中作为附加扩展引入的，最早用在提升图像生成，加密，视频编解码和I/O处理 上，相对于无MMX技术的处理器，通常能带来1.5到2倍的加速.MMX能处理64位封装的整型，引入了8个64位寄存器来实现、四种MMX数据类型(封 装的字节，半字，字，双字）和57条MMX指令. 8个MMX寄存器是通用寄存器，是浮点寄存器(ST0-ST7)的低64位的重用.MMX的数据 类型可以是8个字节整型元素的数组，4个半字整型元素的数组，2个字整型元素的数组或者1个双字整数.做SIMD运算时，SIMD指令取两个MMX寄存器 中的操作数，作相应的SIMD运算，并将结果存入结果寄存器中。MMX的指令系统由57条指令构成.包括基本算术操作、比较操作、转换操作、逻辑操作、移 位操作、访存及寄存器间移动操作和状态指令。因为MMX寄存器复用浮点寄存器，必要时，需要对MMX寄存器清空以便正常的浮点运算可以进行。 MMX 引入了一种新的溢出方式：饱和溢出(Saturation overflow).传统的溢出很多都是反转溢出(wraparound overflow).对于反转溢出，即溢出高位。但对于图像处理，这样做就不合适，比如两个白色的像素点相加，因为溢出，取低位，可能会是一个黑色的点， 显然和实际不符。饱和移除就是为解决这个问题，即若溢出则保留最值，而不是简单的取最低的几位。MMX提供有符号和无符号两种饱和溢出。 流 SIMD扩展技术(SSE) SSE在Intel 奔腾III中引入，作MMX技术的升级，并保持向后兼容。SSE扩展包括增加对128位寄存器內封装的或者普通的单精度浮点值的操作。SSE扩展引入了一 个新数据类型：128位封装单精度浮点类型，有4个IEEE标准的32位单精度浮点类型组成.该单精度数可以在XMM寄存器內或者主存中。SSE引入5类 新寄存器：XMM寄存器：8个128位寄存器支持单精度运算(XMM0-XMM7),能被x87 FPU，MMX寄存器或通用寄存器访问；MXCSR寄存器：32位寄存器包含SIMD浮点操作的控制和状态信息；MMX寄存器：用于64位封装整型，或者 为某些在MMX和XMM寄存器之间运算的操作提供操作数；通用寄存器：因为MMX和XMM寄存器不能用于存地址，8个32位的通用寄存器就被引入用于保存 SSE模式下的操作数的存储地址；EFLAGS寄存器：用于记录某些比较结果的32位寄存器. SSE也引入了70条新指令，可以分为4 类：SIMD单精度浮点运算；MXCSR状态管理指令；64位SIMD整点指令(扩展原MMX指令集);cache控制，预取和取值指令。 目前很 多的图形软件采用了这项技术，如Adobe Photoshop会在有SSE扩展的机器上用SSE加速，微软也在DirectX 6.1和之后的音/视频驱动中加入了SSE，这些都已经包含在Windows 98,Me,2000,NT和XP。 流SIMD扩展技术 2(SSE2) SSE2在奔四和Xeon处理器中引入，SSE2允许更多的计算并行，并扩展了MMX和SSE中的指令，而且引入了两个双精度浮 点数据类型。具体引入特性如下：六中数据类型、支持新数据类型的指令和对已有SIMD整型操作的扩展、修改已有指令以便支持SSE2. 双精度 <a href='http://www.lingcc.com/2010/05/04/10878/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F17%2F11227%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">向量处理器VS标量处理器中的向量扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">自动向量化</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F14%2F11639%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Intel 的AVX2指令集解读</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/05/12/10931/' rel='bookmark' title='前瞻-拿起SIMD的武器II'>前瞻-拿起SIMD的武器II</a></li>
<li><a href='http://www.lingcc.com/2011/06/01/11600/' rel='bookmark' title='通用微处理中的SIMD指令扩展'>通用微处理中的SIMD指令扩展</a></li>
<li><a href='http://www.lingcc.com/2010/05/10/10928/' rel='bookmark' title='前瞻-拿起SIMD的武器I'>前瞻-拿起SIMD的武器I</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4>引言部分：</h4>
<p>多媒体处理算法应用在很多媒体处理环境中，如对文本，手写数据，2D/3D图形和音频对象的捕捉、制造、存储和传输等。过去 都是使用昂贵的多媒体处理硬件协同工作来加速。现在，通用处理器通过在体系结构上增加媒体处理支持来减少使用协同处理器分配和返回带来的开销。在通用处理 器上一个基本的操作能同时作用多个元素的支持成为SIMD并行处理。通过SIMD扩展，通用护理器通过捕捉多媒体算法中潜在的并行特性来加速应用。</p>
<div>自 Intel在Pentium II和Pentium 处理器引入了MMX技术以来，IA-32架构已经引入了许多SIMD扩展，分别是：MMX，流SIMD扩展(SSE),  流SIMD扩展(SSE2)和流SIMD扩展(SSE3)，SSSE3，SSE4和高级向量扩展(AVX).这些扩展都提供了一组指令，能够为封装好的整点或浮点数据提供SIMD类型的操作。其他结构也 有自己的SIMD扩展。如AMD的3DNow！，Cell和PowerPC的AltiVec等等。<span id="more-10878"></span><br />
可惜的是，和CPU提供的其他技术一样，多媒体 指令系统扩展的潜能并没有完全的发挥出来。目前，已经有一些论文在倡导科学家，软件开发人员使用这些指令加速程序。<br />
这篇评论试图更深入的介绍 Intel的SIMD扩展，回顾努力使用这些扩展的一些研究，讨论阻碍多媒体扩展广泛应用的问题，并试图给出一些针对行的解决方法，和潜在的性能提升点。</p>
<h4>SIMD 技术：</h4>
<p>SIMD是最早提出的并行处理模式之一，也是最简单最普遍的并行方法，试图用一个指令对数据集合中的每个数据作相同的操作。如下 图所示：</p>
</div>
<div id="attachment_10879" class="wp-caption alignnone" style="width: 310px"><a href="http://www.lingcc.com/wp-content/uploads/2010/05/simd-model.jpg"><img class="size-medium wp-image-10879" title="simd-model" src="http://www.lingcc.com/wp-content/uploads/2010/05/simd-model-300x140.jpg" alt="" width="300" height="140" /></a><p class="wp-caption-text">单指令流多数据流模型</p></div>
<p>虽然SIMD技术还没有广泛应用，但也没有完全小时。因为SIMD扩 展对于特定的应用仍然很有意义，这些应用的特点是本身有并行的任务，需要大量的独立数据运算，包括3D图形运算，图像处理，语音识别，科学计算，数据库查 询等。</p>
<h5>MMX技术：</h5>
<p>MMX是在第五代奔腾处理器中作为附加扩展引入的，最早用在提升图像生成，加密，视频编解码和I/O处理 上，相对于无MMX技术的处理器，通常能带来1.5到2倍的加速.MMX能处理64位封装的整型，引入了8个64位寄存器来实现、四种MMX数据类型(封 装的字节，半字，字，双字）和57条MMX指令.<br />
8个MMX寄存器是通用寄存器，是浮点寄存器(ST0-ST7)的低64位的重用.MMX的数据 类型可以是8个字节整型元素的数组，4个半字整型元素的数组，2个字整型元素的数组或者1个双字整数.做SIMD运算时，SIMD指令取两个MMX寄存器 中的操作数，作相应的SIMD运算，并将结果存入结果寄存器中。MMX的指令系统由57条指令构成.包括基本算术操作、比较操作、转换操作、逻辑操作、移 位操作、访存及寄存器间移动操作和状态指令。因为MMX寄存器复用浮点寄存器，必要时，需要对MMX寄存器清空以便正常的浮点运算可以进行。<br />
MMX 引入了一种新的溢出方式：饱和溢出(Saturation overflow).传统的溢出很多都是反转溢出(wraparound  overflow).对于反转溢出，即溢出高位。但对于图像处理，这样做就不合适，比如两个白色的像素点相加，因为溢出，取低位，可能会是一个黑色的点， 显然和实际不符。饱和移除就是为解决这个问题，即若溢出则保留最值，而不是简单的取最低的几位。MMX提供有符号和无符号两种饱和溢出。</p>
<h5>流 SIMD扩展技术(SSE)</h5>
<p>SSE在Intel  奔腾III中引入，作MMX技术的升级，并保持向后兼容。SSE扩展包括增加对128位寄存器內封装的或者普通的单精度浮点值的操作。SSE扩展引入了一 个新数据类型：128位封装单精度浮点类型，有4个IEEE标准的32位单精度浮点类型组成.该单精度数可以在XMM寄存器內或者主存中。SSE引入5类 新寄存器：XMM寄存器：8个128位寄存器支持单精度运算(XMM0-XMM7),能被x87  FPU，MMX寄存器或通用寄存器访问；MXCSR寄存器：32位寄存器包含SIMD浮点操作的控制和状态信息；MMX寄存器：用于64位封装整型，或者 为某些在MMX和XMM寄存器之间运算的操作提供操作数；通用寄存器：因为MMX和XMM寄存器不能用于存地址，8个32位的通用寄存器就被引入用于保存 SSE模式下的操作数的存储地址；EFLAGS寄存器：用于记录某些比较结果的32位寄存器.<br />
SSE也引入了70条新指令，可以分为4 类：SIMD单精度浮点运算；MXCSR状态管理指令；64位SIMD整点指令(扩展原MMX指令集);cache控制，预取和取值指令。<br />
目前很 多的图形软件采用了这项技术，如Adobe Photoshop会在有SSE扩展的机器上用SSE加速，微软也在DirectX  6.1和之后的音/视频驱动中加入了SSE，这些都已经包含在Windows 98,Me,2000,NT和XP。</p>
<h5>流SIMD扩展技术 2(SSE2)</h5>
<p>SSE2在奔四和Xeon处理器中引入，SSE2允许更多的计算并行，并扩展了MMX和SSE中的指令，而且引入了两个双精度浮 点数据类型。具体引入特性如下：六中数据类型、支持新数据类型的指令和对已有SIMD整型操作的扩展、修改已有指令以便支持SSE2.<br />
双精度 SIMD运算的支持增强了在XMM寄存器上作高精度计算的能力。SSE2也让XMM寄存器可以作128封装整型的运算。现在程序员可以使用完备的SIMD 寄存器、数据类型和指令来开发混合单/双精度浮点，64位/128位整点的数据.SSE2并没有引入新的寄存器，只是做了功能扩展。</p>
<h5>流 SIMD扩展技术3(SSE3,SSSE3)</h5>
<p>SSE3在奔腾四为了支持超线程而引入。SSE3扩展包括13条新指令.SSE3并没有引入新的数据类型和寄存 器.</p>
<p>SSSE3在Intel Core架构中引入，增加了16条指令，每条指令都能在64位的MMX寄存器或128位的XMMS寄存器上运算</p>
<h5>流 SIMD扩展技术4(SSE4)</h5>
<p>SSE4 2006年9月发布，AMD k10和Intel Core中有使用，包括54条新指令。SSE4中增加了并非特定于多媒体应用的指令，如STTNI指令可以加速文本和字 符串处理；ATA能加速冗余校验。</p>
<h5>流 SIMD扩展技5(SSE5)</h5>
<p>SSE5是AMD 2007年8月发布的，作为AMD64结构在128 SSE基础上的补充。</p>
<h5>高级向量扩展 (AVX)</h5>
<p>Intel  2008年3月发布的SIMD扩展.寄存器从128位扩展为256位，并使用新的寄存器名YMM0-YMM15，已有的128位指令使用256位寄存器的 低128位.使用无副作用指令格式，即所有形如a=a+b的操作都会会被替换为c=a+b，这样操作数计算的结构不会污染原操作数，所有的有两个操作数的 XMM指令都会用这种方式扩展为3个操作数的形式.访存中对SIMD数据对齐的要求放宽。<br />
AVX中指令的编码方式也有改变，通过 修改前缀使得无副作用指令格式得意实现。AVX扩展适用于多媒体、科学计算和经济方面的应用，能有效增加并行性和浮点SIMD运算的吞吐率，降低寄存器载 入开销。目前Linux 2.6.30、Windows 7 SP1和Windows Server 2008 R2 SP1都有AVX增强.</p>
<h5>3DNow!技术</h5>
<p>3DNow！是AMD在MMX的基础上作的扩展，和SSE对MMX的扩展相似。最早用在 AMD-K6-2处理器上，之后在AMD-K6-III和AMD  Athlon处理器上实现。3DNow！是一组指令，有效缓解了传统多浮点运算和多媒体应用的瓶颈。3DNow！使用MMX寄存器但增加了45条浮点指 令，能同时对1个或2个单精度浮点值作运算.3DNow！支持加、减、乘、除、和整点之间的转换、比较、绝对值、数据预取等操作。根据AMD提供的资 料，3DNow！的带来，如同SSE为MMX带来的同等提升，但指令和复杂度降低。但SSE和3DNow！不兼容。目前微软的Windows  9X，NT和所有最新系统，DirectX 6.x可以使用3DNow！加速，<a href="http://www.amd.com/us-en/Corporate/VirtualPressRoom/0,,51_104_557_560,00.html" target="_blank">OpenGL也可以使用3DNow！加速.</a><br />
3DNow！为高分辨率的显示提高了帧频率，更接近 现场的高保真音频等等。</p>
<h5>小小结：</h5>
<p>操作系统对某个体系结构的支持，已经远远不是单纯的某个指令集能解决的问题。为了用户体验和应用性能提升，需要更多的软/硬件协同的设计。软件设计中需要哪条指令更高效的运行，哪些指令用不到，都可以给硬件设计作参考。这也是Wintel联盟如此紧密的原因。与CPU架构密切相关的SIMD指令，作为改进普通中端用户多媒体体验的关键，更是在Windows系统中占据不可替代的作用。</p>
<p>在Gentoo portage中做了个简单的调研，发现现在使用SIMD加速的包很少，如mplayer，ffmpeg，gimp，大多数都为多媒体应用程序，支持最多的也只有sse，sse2,3DNow和mmx，再新的根本没有。而且Intel等芯片设计厂商也有一些未公开的特殊指令，只提供给某些合作伙伴使用，再加上开源爱好者们没有那么多的时间和精力去根据已有的程序和算法，按照某个芯片独特的SIMD支持，设计并验证针对它的软件修改。那很多开源软都难用到这些特性。性能也就没办法和Windows下的相比。</p>
<p>这小小结，只是愤青的一点感慨而已。既得利益集团是不会在乎这些的。</p>
<p>敬请期待SIMD系列下文《前瞻-拿起SIMD的武器!》</p>
<p>PS：原文根据ayaya的评论做了很多更正，谢谢ayaya：）</p>
<p>参考：<br />
<a href="http://comjnl.oxfordjournals.org/cgi/content/abstract/bxm099">A Review of SIMD Multimedia Extensions and their Usage in Scientific and Engineering Applications.</a></p>
<p>http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions</p>
<p>http://en.wikipedia.org/wiki/SSSE3</p>
<p>http://en.wikipedia.org/wiki/SSE4</p>
<p>http://en.wikipedia.org/wiki/SSE5</p>
<p>http://en.wikipedia.org/wiki/Advanced_Vector_Extensions</p>
<p>http://en.wikipedia.org/wiki/CVT16_instruction_set</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F02%2F11605%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">SIMD硬件的发展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F01%2F11600%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">通用微处理中的SIMD指令扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F17%2F11227%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">向量处理器VS标量处理器中的向量扩展</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F03%2F11619%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">自动向量化</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F06%2F14%2F11639%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F05%2F04%2F10878%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Intel 的AVX2指令集解读</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/05/12/10931/' rel='bookmark' title='前瞻-拿起SIMD的武器II'>前瞻-拿起SIMD的武器II</a></li>
<li><a href='http://www.lingcc.com/2011/06/01/11600/' rel='bookmark' title='通用微处理中的SIMD指令扩展'>通用微处理中的SIMD指令扩展</a></li>
<li><a href='http://www.lingcc.com/2010/05/10/10928/' rel='bookmark' title='前瞻-拿起SIMD的武器I'>前瞻-拿起SIMD的武器I</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/04/14/10736/' rel='bookmark' title='探秘CPU性能测试：Spec CPU2000之整点篇'>探秘CPU性能测试：Spec CPU2000之整点篇</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/05/04/10878/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>探秘CPU性能测试：Spec CPU2000之整点篇</title>
		<link>http://www.lingcc.com/2010/04/14/10736/</link>
		<comments>http://www.lingcc.com/2010/04/14/10736/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 14:18:42 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[编译前沿]]></category>
		<category><![CDATA[编译技术]]></category>
		<category><![CDATA[编译理论实践和应用]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[MPI]]></category>
		<category><![CDATA[openmp]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[spec]]></category>
		<category><![CDATA[SPEC2000]]></category>
		<category><![CDATA[学术前沿]]></category>
		<category><![CDATA[并行]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[整点]]></category>
		<category><![CDATA[编译器]]></category>
		<category><![CDATA[计算技术未来]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=10736</guid>
		<description><![CDATA[概览SPEC Standard Performance Evaluation Corporation:标准性能测试协会，一个致力于发布管理计算机性能标准化测试的组织.建立于1988年，会员包括Apple，Dell，IBM，Intel，Microsoft和Sun。Spec的测试例子被光感应用于计算机系统的性能测试中。 SPEC的测试例子是为了测试实际生活中的场景，如SPEC web2005通过并发HTTP请求测试web服务器的性能.SPEC CPU通过多个例子的运行时间长短衡量CPU的性能。SPEC的测试例子都采用平台无关代码编写，以便能使用各种编译器和平台来测试。现在的工业界更是针对SPEC中的测试例子做优化来证明编译器，CPU，web服务器等等的性能提升。 SPEC发布了以下性能测试集： SPEC CPU2006/2000用来测试CPU，存储和编译器的性能 SPEC jms 2007,用于测试JAVA消息服务的性能 SPEC web 2005 用于测试PHP或者JSP的性能 SPEC Viewperf，用于测试OpenGL 3D图形系统的性能 SPEC apc，用于测试给定系统中多个3D交互应用的性能 SPEC OMP2001 使用OpenMP测试并行系统的性能 SPEC MPI2007 使用MPI测试并行系统的性能 SPEC JVM 2008,测试Java Runtime Environment(JAVA运行时环境，JRE)在不同客户和服务器系统上的JAVA性能 SPEC jAppServer2004, 测试JAVA 2 Enterprise Edition应用服务器的性能 SPEC jbb2005，同样测试JAVA系统的性能，但测试的是﻿a three-tier client/server system (with emphasis on the middle tier) SPEC Mail2001，测试邮件服务器的 SPEC CPU <a href='http://www.lingcc.com/2010/04/14/10736/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F14%2F11697%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">what are base and peak metric  in SPEC CPU result?</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F03%2F17%2F9957%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">胡伟武：龙芯5年内改变全球CPU格局</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9889%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz 龙芯之火，可以燎原（上）</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F03%2F05%2F9923%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz漫谈.Net中的自动垃圾收集机制</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F04%2F10224%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">《多核编译技术研讨会》记一</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
<li><a href='http://www.lingcc.com/2009/12/04/10224/' rel='bookmark' title='《多核编译技术研讨会》记一'>《多核编译技术研讨会》记一</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/05/12/10931/' rel='bookmark' title='前瞻-拿起SIMD的武器II'>前瞻-拿起SIMD的武器II</a></li>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2011/08/14/11697/' rel='bookmark' title='what are base and peak metric  in SPEC CPU result?'>what are base and peak metric  in SPEC CPU result?</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<h4><span style="color: #000000;">概览SPEC</span></h4>
<p><span style="color: #000000;">Standard Performance Evaluation Corporation:标准性能测试协会，一个致力于发布管理计算机性能标准化测试的组织.建立于1988年，会员包括Apple，Dell，IBM，Intel，Microsoft和Sun。Spec的测试例子被光感应用于计算机系统的性能测试中。</span></p>
<p><span style="color: #000000;">SPEC的测试例子是为了测试实际生活中的场景，如SPEC web2005通过并发HTTP请求测试web服务器的性能.SPEC CPU通过多个例子的运行时间长短衡量CPU的性能。SPEC的测试例子都采用平台无关代码编写，以便能使用各种编译器和平台来测试。现在的工业界更是针对SPEC中的测试例子做优化来证明编译器，CPU，web服务器等等的性能提升。</span></p>
<p><span style="color: #000000;">SPEC发布了以下性能测试集：</span></p>
<ul>
<li><span style="color: #000000;">SPEC CPU2006/2000用来测试CPU，存储和编译器的性能</span></li>
<li><span style="color: #000000;">SPEC jms 2007,用于测试JAVA消息服务的性能</span></li>
<li><span style="color: #000000;">SPEC web 2005 用于测试PHP或者JSP的性能</span></li>
<li><span style="color: #000000;">SPEC Viewperf，用于测试OpenGL 3D图形系统的性能</span></li>
<li><span style="color: #000000;">SPEC apc，用于测试给定系统中多个3D交互应用的性能</span></li>
<li><span style="color: #000000;">SPEC OMP2001 使用OpenMP测试并行系统的性能</span></li>
<li><span style="color: #000000;">SPEC MPI2007 使用MPI测试并行系统的性能</span></li>
<li><span style="color: #000000;">SPEC JVM 2008,测试Java Runtime Environment(JAVA运行时环境，JRE)在不同客户和服务器系统上的JAVA性能</span></li>
<li><span style="color: #000000;">SPEC jAppServer2004, 测试JAVA 2 Enterprise Edition应用服务器的性能</span></li>
<li><span style="color: #000000;">SPEC jbb2005，同样测试JAVA系统的性能，但测试的是﻿a three-tier client/server system (with emphasis on the middle tier)</span></li>
<li><span style="color: #000000;">SPEC Mail2001，测试邮件服务器的<span id="more-10736"></span><br />
</span></li>
</ul>
<h4><span style="color: #000000;">SPEC CPU 2000：</span></h4>
<p><span style="color: #000000;">SPEC CPU 2000是SPEC用于测试CPU，编译器和存储性能的，包括整点CINT2000和浮点CFP2000两部分，选取了常用的一些应用作为测试标准，SPEC PU 2000曾是CPU，编译器和存储研究人员证明自己成果的标准，现在已经被SPEC CPU 2006代替，关于2006，本博以后也将会有文章介绍之，敬请期待。</span></p>
<h4><span style="color: #000000;">CINT2000</span></h4>
<p><span style="color: #000000;">这是用于整点测试的，测试整点算术的性能，包括编译器，压缩，象棋等程序。具体包括以下几个例子：</span></p>
<ul>
<li><span style="color: #000000;">164.gzip：C语言编写，很流行的数据压缩程序，使用Lempel-Ziv coding(LZ77)作为压缩算法。SPEC中的gzip除了读入集外没有其他文件I/O操作，所有压缩和解压都在主存中进行，方便测试CPU和存储子系统。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输入：</span></strong></span><span style="color: #000000;">SPEC中的gzip有五个输入，一个TIFF图像，一个web服务器的log，一个程序二进制文件，一个随机数据和一个源码tar包。每个输入集都使用多个不同的压缩级别压缩解压，每次完成之后都会做输入输出对比。</span></li>
<li><span style="color: #000000;">175.vpr:C语言编写，FPGA中的电路定位和路由程序,用于计算机辅助电路设计领域。它自动在一个FPGA芯片上实现技术映射，在算法上属于组合优化类的程序。VPR在电路定位中使用了模拟退火法(simulated annealing),初始的随机定位通过本地的被当前位置的干扰反复修正来提高定位质量，这种方式和金属通过自然冷却来增强韧性比较相似。路由在最内层路由循环使用Dijkstra算法的变种来将一个网中的多个终点连接起来。冲突检测与避免在该最内层算法的上层用于解决不同 电路信号连接超过FPGA内部连接上限的问题。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输入：</span></strong></span><span style="color: #000000;">net.in文件提供一个电路网表，包括电路的定位和路由信息，该网表来自MCNC电路公司的benchmark。arch.in文件描述FPGA的架构，也就是电路将要基于的。place.in文件提供电路定位，VPR将用它执行路由。在VPR执行定位时，该文件被屏蔽。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输出</span></strong></span><span style="color: #000000;">：place_log.out,route_log.out,route.out,place,out.SPEC将会根据前三个文件判断是否输出正确，第四个文件因为随机数会有不同，所以无法判断。VPR被执行两侧，第一次执行定位，第二次执行路由。</span></li>
<li><span style="color: #000000;">176.gcc:C语言编写，C语言优化编译器。该GCC基于GCC 2.7.2.2版本，为摩托罗拉88100处理器生成机器码.该gcc就是一个实际运行的编译器，并开启了很多优化。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输入：</span></strong><span style="color: #000000;"><span style="color: #000000;">有5个输入，都是预处理过的C代码，integrate.i和expr.i来自GCC自身，166.i通过并置SPEC int2000中的一个Fortran源文件并使用f2c转换为c代码,200.i以同样的方式产生自SPEC fp2000的200.sixtrack,scilib.i以同样的方式产生自Scilib某个版本中。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输出：</span></strong></span><span style="color: #000000;">88100行汇编代码文件.</span></span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">181.mcf:C语言编写，组合优化/单点轮换调度(Single-depot vehicle scheduling),派生自使用单站轮换调度的公共物流应用程序。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;"><span style="color: #000000;">186.crafty：C语言编写，国际象棋游戏程序。这是一个在64位机上设计的高性能计算机国际象棋程序，在32位机上可以使用long long来表示该数据类型。主要是一个整点程序，大量的逻辑运算。通过配置，能生成不同的搜索集，可以对处理器的整点运算，转移预测和流水线等做测试。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输入：</span></strong></span><span style="color: #000000;">搜索5个不同的国际象棋残局，并有不同的搜索深度。</span><span style="color: #ff0000;"><strong><span style="color: #000000;">输出：</span></strong></span><span style="color: #000000;">由搜索树每一层可能的移动集合组成。</span></span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">197.parser:C，字处理程序。连接语法分析器(Link Grammar Parser)是一个基于连接语法的英语句法分析器。连接语法时英语语法的较早理论。给定一个句子，系统能给它赋予一个词法结构，这个结构是两个词之间被标记的连接。该分析器有大约60000个词表的字典.<strong>输入：</strong>一个给定的句串，一行一个句子。<strong>输出：</strong>对给定输入句子的分析结果，保罗一个连接集合，和标号集合。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">252.eon：C++，计算机可视化。eon是一个基于概率的射线跟踪程序，基于Kajiya 1986 ACM SIGGRAPH会议的论文。它将一定数量的3D射线发射到一个3D多面体中，计算射线和多边形的交点，并通过计算入射光和交点生成新射线。最终的计算结果时一个能在照相机内看到的图片。程序中的计算需求和基本计算机图形学中介绍的传统确定性射线跟踪程序很相似，但是它有较少的存储一致性需求，因为很多在同一个位置生成的随机射线横切3D空间中完全不同的区域.<strong>输入：</strong>eon渲染一个150&#215;150像素的一把椅子在房间前脚的图片。输入文件通过定义位置，大小，发射率和亮度指定空间中的目标。eon会被运行3遍，每边都渲染相同的场景，只是渲染算法不同，渲染算法包括kajiya,Cook,Rushmeier。<strong>输出：</strong>三个输出文件是ppm格式的图片分别对应三个算法。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">253.perlbmk:C,Perl语言解释器。这是一个Perl v5.005_03版本的删减版，删除了很多操作系统相关的特性，并增加了一些第三方的模块，包括MD5 v1.7, MHonArc v2.3.3, IO-stringy v1.205,MailTools v1.11,TimeData v1.08。<strong>输入：</strong>由四个perl脚本组成，一个email-to-HTML 转换器，占用时间最长；一个spec CPU2000用来对比较输出的diff脚本，一个通过迭代算法寻找合格数字的脚本，一个用于测试伪随机数按照预定顺序生成的脚本。<strong>输出</strong>分别对应各个输入。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">254.gap:C，群论，解释器中常用。它实现一个语言和库用于做群论计算。GAP是(Groups,Algorithms和Programming的缩写)。<strong>输入：</strong>有多个部分，先是标准gab速度测试，通过执行组合函数和库，然后有限域，置换群，子群指数计算的中的测试函数；接着时比较寻找可解群正规化子的算法，最后执行一个所谓的ag-group搜集器，这是解释器的一部分，但其容积还没有被很好的计算出来(?)。<strong>输出：</strong>以上测试的输出。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">255.vortex,C,单用户面向对象数据库中事务处理的benchmark。SPEC中的vortex来自完整面向对象数据库程序VORTEx的一个子集。输入和输入数据库的事务都会被转换成一个方案。<strong>输入：</strong>预先配置用于邮件列表，零件目录表和几何数据的三个方案。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">256.bzip2：C，压缩。基于Julian Seward的bzip2 v0.1，唯一的不同是SPEC中的bzip2除了输入外，无文件I/O。所有的压缩和解压都在内存中进行。输入，输出都和gzip的相似。</span></span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">300.twolf：C，定位和路由模拟。twolf来自TimberWolfSC定位和全局路由，它被用于创建微处理器产品印刷电路布局的流程中，确定晶体管的位置和组内的全局连接。定位问题是一个排列，穷举法耗时太长，TimberWolfSC程序则使用模拟退火作为启发来找到较优解。有三个输入</span></span></li>
</ul>
<p>以上就是SPEC 2000 CINT的所有例子，包括两个压缩程序(gzip,bzip2)，两个电路设计程序(vpr,twolf),两个编程语言相关程序(gcc,perlbmk),一个组合优化(mcf),一个象棋搜索(crafty),一个词处理(parser),一个计算机图形(eon),一个群论(gap),一个数据库(vortex).</p>
<p>每个程序都有其自己的热点，在实际的编译优化中就可以根据自己的优化，选择合适的例子作为衡量标准。或根据例子的特点做优化。跟SPEC例子死磕的方式做编译优化，是否得当现在还有争议。但目前这可能是唯一可行的路了。因为普适性，原理性的优化几乎已经做完了，除了多面体模型用于循环优化。剩下的一类是机器相关的优化，比如CPU中的特殊指令，SIMD指令等。</p>
<p>编译优化未来的路在何方？并行？异构？还是更精彩的未知？</p>
<p>参考：</p>
<p><a href="http://www.spec.org/cpu2000/CINT2000/">http://www.spec.org/cpu2000/CINT2000/</a></p>
<p><a href="http://en.wikipedia.org/wiki/Standard_Performance_Evaluation_Corporation">http://en.wikipedia.org/wiki/Standard_Performance_Evaluation_Corporation</a></p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2011%2F08%2F14%2F11697%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">what are base and peak metric  in SPEC CPU result?</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F03%2F17%2F9957%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">胡伟武：龙芯5年内改变全球CPU格局</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9889%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz 龙芯之火，可以燎原（上）</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F03%2F05%2F9923%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz漫谈.Net中的自动垃圾收集机制</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2009%2F12%2F04%2F10224%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F04%2F14%2F10736%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">《多核编译技术研讨会》记一</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/04/30/10822/' rel='bookmark' title='前瞻-LLVM大事记(2004-2010)'>前瞻-LLVM大事记(2004-2010)</a></li>
<li><a href='http://www.lingcc.com/2009/12/04/10224/' rel='bookmark' title='《多核编译技术研讨会》记一'>《多核编译技术研讨会》记一</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
<li><a href='http://www.lingcc.com/2010/05/12/10931/' rel='bookmark' title='前瞻-拿起SIMD的武器II'>前瞻-拿起SIMD的武器II</a></li>
<li><a href='http://www.lingcc.com/2010/05/04/10878/' rel='bookmark' title='前瞻-主流处理器中的数据并行支持(SIMD)'>前瞻-主流处理器中的数据并行支持(SIMD)</a></li>
<li><a href='http://www.lingcc.com/2011/08/14/11697/' rel='bookmark' title='what are base and peak metric  in SPEC CPU result?'>what are base and peak metric  in SPEC CPU result?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/04/14/10736/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>大尾端和小尾端</title>
		<link>http://www.lingcc.com/2010/02/26/10701/</link>
		<comments>http://www.lingcc.com/2010/02/26/10701/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 13:52:22 +0000</pubDate>
		<dc:creator>erlv</dc:creator>
				<category><![CDATA[编译技术]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[MIPS]]></category>
		<category><![CDATA[x86]]></category>
		<category><![CDATA[大尾端]]></category>
		<category><![CDATA[小尾端]]></category>
		<category><![CDATA[虚拟机]]></category>
		<category><![CDATA[龙芯]]></category>

		<guid isPermaLink="false">http://www.lingcc.com/?p=10701</guid>
		<description><![CDATA[大尾端(big endian)和小尾端(little endian)的问题类似于写字时是从右往左写还是从左往右写的问题。说起来不难，但是在计算机世界中，我们必须要规定采用哪种形式，而并无优劣之分，所以演变到现在，就既有大尾又有小尾.X86就是小尾的，龙芯也用的小尾，早期的MIPS使用的是大尾端,这决定了访存的方向问题。 精确的讲，大尾端和小尾端的区别是系统里整数是从右往左表示还是从左往右表示。表示的不同就意味着重要性不同的位位置不同，大尾端从左往右表示，那么权重大的字节在左边即在低地址处，而小尾端相反。不管时处理器，虚拟机还是网路协议都需要规定大小尾端问题。 如图是X86的存储形式，若大小尾端混用，则会一团糟。 对于网络协议，大小尾端必须统一，我们的TCP/IP使用大尾端，也就是说所有电脑的网络端口都要是大尾端，对于电脑CPU是大尾端的，无须太多处理；但若是小尾端的机器，则需要在接受报文时做转换，幸好已经有比较高效的宏来实现，使得这种转换无须太多代价。宏定义如下，实现字节重拍序. #if defined(BIG_ENDIAN) &#038;&#038; !defined(LITTLE_ENDIAN) #define htons(A) (A) #define htonl(A) (A) #define ntohs(A) (A) #define ntohl(A) (A) #elif defined(LITTLE_ENDIAN) &#038;&#038; !defined(BIG_ENDIAN) #define htons(A) ((((uint16_t)(A) &#038; 0xff00) >> 8) &#124; \ (((uint16_t)(A) &#038; 0x00ff) > 24) &#124; \ (((uint32_t)(A) &#038; 0x00ff0000) >> 8) &#124; \ (((uint32_t)(A) &#038; 0x0000ff00) 相关文章： 小例子&#8211;回眸一笑百媚生 WebKit和Firefox的JavaScript性能对比 <a href='http://www.lingcc.com/2010/02/26/10701/'>[...]</a><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F25%2F10698%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">好大一筐梅普斯(MIPS)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F07%2F09%2F11055%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">龙芯中科公司招聘JAVA虚拟机开发工程师</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F19%2F11208%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC即将支持龙芯3A</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9890%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zzzz龙芯之火，可以燎原（下）</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9889%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz 龙芯之火，可以燎原（上）</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
<h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/01/22/10668/' rel='bookmark' title='WebKit和Firefox的JavaScript性能对比'>WebKit和Firefox的JavaScript性能对比</a></li>
<li><a href='http://www.lingcc.com/2010/01/07/10594/' rel='bookmark' title='使用crossdev安装龙芯的O32 gnu交叉工具链'>使用crossdev安装龙芯的O32 gnu交叉工具链</a></li>
<li><a href='http://www.lingcc.com/2010/01/05/10588/' rel='bookmark' title='用crossdev装龙芯的n32 gnu交叉工具链'>用crossdev装龙芯的n32 gnu交叉工具链</a></li>
<li><a href='http://www.lingcc.com/2010/10/13/11318/' rel='bookmark' title='Linux内存的属性'>Linux内存的属性</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>大尾端(big endian)和小尾端(little endian)的问题类似于写字时是从右往左写还是从左往右写的问题。说起来不难，但是在计算机世界中，我们必须要规定采用哪种形式，而并无优劣之分，所以演变到现在，就既有大尾又有小尾.X86就是小尾的，龙芯也用的小尾，早期的MIPS使用的是大尾端,这决定了访存的方向问题。</p>
<p>精确的讲，大尾端和小尾端的区别是系统里整数是从右往左表示还是从左往右表示。表示的不同就意味着重要性不同的位位置不同，大尾端从左往右表示，那么权重大的字节在左边即在低地址处，而小尾端相反。不管时处理器，虚拟机还是网路协议都需要规定大小尾端问题。<br />
如图是X86的存储形式，若大小尾端混用，则会一团糟。</p>
<p><a href="http://www.lingcc.com/wp-content/uploads/2010/02/L_EndiannessFigure1.gif"><img class="alignnone size-medium wp-image-10702" title="L_EndiannessFigure1" src="http://www.lingcc.com/wp-content/uploads/2010/02/L_EndiannessFigure1-300x45.gif" alt="" width="300" height="45" /></a><br />
<span id="more-10701"></span><br />
对于网络协议，大小尾端必须统一，我们的TCP/IP使用大尾端，也就是说所有电脑的网络端口都要是大尾端，对于电脑CPU是大尾端的，无须太多处理；但若是小尾端的机器，则需要在接受报文时做转换，幸好已经有比较高效的宏来实现，使得这种转换无须太多代价。宏定义如下，实现字节重拍序.</p>
<p><code><br />
#if defined(BIG_ENDIAN) &#038;&#038; !defined(LITTLE_ENDIAN)</p>
<p>  #define htons(A) (A)<br />
  #define htonl(A) (A)<br />
  #define ntohs(A) (A)<br />
  #define ntohl(A) (A)</p>
<p>#elif defined(LITTLE_ENDIAN) &#038;&#038; !defined(BIG_ENDIAN)</p>
<p>  #define htons(A) ((((uint16_t)(A) &#038; 0xff00) >> 8) | \<br />
                    (((uint16_t)(A) &#038; 0x00ff) << 8))<br />
  #define htonl(A) ((((uint32_t)(A) &#038; 0xff000000) >> 24) | \<br />
                    (((uint32_t)(A) &#038; 0x00ff0000) >> 8)  | \<br />
                    (((uint32_t)(A) &#038; 0x0000ff00) << 8)  | \<br />
                    (((uint32_t)(A) &#038; 0x000000ff) << 24))</p>
<p>  #define ntohs  htons<br />
  #define ntohl  htonl</p>
<p>#else</p>
<p>  #error "Must define one of BIG_ENDIAN or LITTLE_ENDIAN"</p>
<p>#endif</code></p>
<p>参考</p>
<p>http://www.netrino.com/Embedded-Systems/How-To/Big-Endian-Little-Endian</p>
<div style=float:left><!-- JiaThis Button BEGIN -->
<div id="jiathis_style_32x32">
	<a class="jiathis_button_qzone"></a>
	<a class="jiathis_button_tsina"></a>
	<a class="jiathis_button_tqq"></a>
	<a class="jiathis_button_renren"></a>
	<a class="jiathis_button_kaixin001"></a>
	<a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
	<a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>
<!-- JiaThis Button END --></div><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F25%2F10698%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">好大一筐梅普斯(MIPS)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F07%2F09%2F11055%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">龙芯中科公司招聘JAVA虚拟机开发工程师</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2010%2F09%2F19%2F11208%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">GCC即将支持龙芯3A</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9890%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zzzz龙芯之火，可以燎原（下）</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.lingcc.com%2F2008%2F01%2F23%2F9889%2F&from=http%3A%2F%2Fwww.lingcc.com%2F2010%2F02%2F26%2F10701%2F">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">zz 龙芯之火，可以燎原（上）</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><p><h3>相关文章：</h3><ul>
<li><a href='http://www.lingcc.com/2010/01/21/10663/' rel='bookmark' title='小例子&#8211;回眸一笑百媚生'>小例子&#8211;回眸一笑百媚生</a></li>
<li><a href='http://www.lingcc.com/2010/01/22/10668/' rel='bookmark' title='WebKit和Firefox的JavaScript性能对比'>WebKit和Firefox的JavaScript性能对比</a></li>
<li><a href='http://www.lingcc.com/2010/01/07/10594/' rel='bookmark' title='使用crossdev安装龙芯的O32 gnu交叉工具链'>使用crossdev安装龙芯的O32 gnu交叉工具链</a></li>
<li><a href='http://www.lingcc.com/2010/01/05/10588/' rel='bookmark' title='用crossdev装龙芯的n32 gnu交叉工具链'>用crossdev装龙芯的n32 gnu交叉工具链</a></li>
<li><a href='http://www.lingcc.com/2010/10/13/11318/' rel='bookmark' title='Linux内存的属性'>Linux内存的属性</a></li>
<li><a href='http://www.lingcc.com/2009/12/29/10503/' rel='bookmark' title='GCC初窥'>GCC初窥</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.lingcc.com/2010/02/26/10701/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

