<?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>中文</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 12:20:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Metro Web应用开发中页面通信问题解决方法</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/#comments</comments>
		<pubDate>Tue, 15 May 2012 12:20:13 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[Ultrabook]]></category>
		<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[PostMessage]]></category>
		<category><![CDATA[Win8]]></category>
		<category><![CDATA[Windows 8]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/</guid>
		<description><![CDATA[最近在开发Win8应用，遇到Win8 native context和web context 通信的问题，这里将相应的方法分析一下。Win8的介绍和详细信息可以在MSDN上面获得，也可以参考本人介绍开发者预览版时的系列博客 Win8 应用开发介绍（一） Win8新特性\Win8 应用开发介绍（二） Win8应用为王\Win8 应用开发介绍（三） Win8开发者工具\Win8 应用开发介绍（四） Win8应用开发步骤\Win8 应用开发介绍（五） Win8硬件支持和安全性\Win8 应用开发介绍（六） Win8伴你随行\ 1. 问题描述 Win8可是使用HTML, JavaScript方式来开发Metro Style App。那么传统的HTML网页中，加载web端的JavaScript文件采用的代码方式仍然可以使用吗？如： &#60;script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&#62;&#60;/script&#62; 答案是不可以，因为处于安全考虑，Win8不允许在开发Web Metro应用的时候不允许在Local context中加载一个remote URL。及即使把这个文件下载下来放在本地也是不可以的，因为它会操作HTML页面中的DOM。 在编译的时候会报错。 2.解决方法 将需要加载的页面放在Local Context的iFrame中。这样当Metro应用在运行的时候，iFrame中的页面其实可以理解为运行在Metro IE浏览器中，所以不存在Local Context不允许加载Remote URL的问题。 代码参考如下： &#60;!DOCTYPE html&#62; &#60;html&#62; &#60;head&#62; &#60;meta charset="utf-8" /&#62; &#60;meta name="viewport" content="width=1024, height=768" /&#62; &#60;title&#62;WinWebApp1&#60;/title&#62; &#60;!-- WinJS references [...]]]></description>
			<content:encoded><![CDATA[<p align="left">最近在开发Win8应用，遇到Win8 native context和web context 通信的问题，这里将相应的方法分析一下。Win8的介绍和详细信息可以在MSDN上面获得，也可以参考本人介绍开发者预览版时的系列博客</p>
<p><a href="http://software.intel.com/zh-cn/blogs/2011/12/17/win8-win8/"><b>Win8 </b><b>应用开发介绍（一） Win8</b><b>新特性</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-2/"><b>Win8 </b><b>应用开发介绍（二） Win8</b><b>应用为王</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-3/"><b>Win8 </b><b>应用开发介绍（三） Win8</b><b>开发者工具</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-4/"><b>Win8 </b><b>应用开发介绍（四） Win8</b><b>应用开发步骤</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-5/"><b>Win8 </b><b>应用开发介绍（五） Win8</b><b>硬件支持和安全性</b></a><strong>\</strong><b><br /></b><a href="http://software.intel.com/zh-cn/blogs/2011/12/18/win8-win8-6/"><b>Win8 </b><b>应用开发介绍（六） Win8</b><b>伴你随行</b></a><strong>\</strong></p>
<p align="left"><b>1. </b><b>问题描述</b><b></b></p>
<p align="left">Win8可是使用HTML, JavaScript方式来开发Metro Style App。那么传统的HTML网页中，加载web端的JavaScript文件采用的代码方式仍然可以使用吗？如：</p>
<p align="left"><em>&lt;script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&gt;&lt;/script&gt;</em></p>
<p align="left">答案是不可以，因为处于安全考虑，Win8不允许在开发Web Metro应用的时候不允许在Local context中加载一个remote URL。及即使把这个文件下载下来放在本地也是不可以的，因为它会操作HTML页面中的DOM。</p>
<p align="left">在编译的时候会报错。</p>
<p align="left">
<p align="left"> <b>2.解决方法</b><b></b></p>
<p align="left">将需要加载的页面放在Local Context的iFrame中。这样当Metro应用在运行的时候，iFrame中的页面其实可以理解为运行在Metro IE浏览器中，所以不存在Local Context不允许加载Remote URL的问题。</p>
<p align="left">代码参考如下：</p>
<p align="left">
<p align="left">
<pre name="code" class="cpp">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta name="viewport" content="width=1024, height=768" /&gt;
    &lt;title&gt;WinWebApp1&lt;/title&gt;
    &lt;!-- WinJS references --&gt;
    &lt;link rel="stylesheet" href="/winjs/css/ui-dark.css" /&gt;
    &lt;script src="/winjs/js/base.js"&gt;&lt;/script&gt;
    &lt;script src="/winjs/js/wwaapp.js"&gt;&lt;/script&gt;
    &lt;script src="/winjs/js/ui.js"&gt;&lt;/script&gt;
    &lt;script src="/winjs/js/controls.js"&gt;&lt;/script&gt;
    &lt;!-- WinWebApp1 references --&gt;
    &lt;link rel="stylesheet" href="/css/default.css" /&gt;
    &lt;script src="/js/default.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;header role="banner" aria-label="Header content"&gt;
        &lt;div class="titleArea"&gt;
            &lt;h1 class="pageTitle win-title" role="button" aria-label="Groups" tabindex="0"&gt;
                Metro Map App&lt;/h1&gt;
        &lt;/div&gt;
    &lt;/header&gt;
    &lt;div&gt;
      &lt;iframe id="mapIframe" src="file:///****.html" width="1280px" height="800px"&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p align="left">
<p align="left"><i>src=file:///****.html </i>或者src=http://****.html 是需要加载web context 的页面，在相应的html文件中可以自由加载remote URL的内容。</p>
<p align="left">在页面中的关系图如下：</p>
<p align="left"> <img height="432" width="585" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/w1.jpg" /></p>
<p align="left">
<p align="left"><b>通信</b><b></b></p>
<p align="left">现在的问题出现了，Web Context如何和Local Context通信了。Win8 IE全面支持了HTML5，在HTML5中可以使用HTML5 postMessage method在不通的页面中进行通信。</p>
<p align="left">假设我们在Local Context中新建一个button，代码如下：</p>
<p align="left">&lt;button onclick="ZoomOut();"&gt;Zoom Out&lt;/button&gt;</p>
<p align="left">在JavaScript中，添加ZoomOut函数：</p>
<p align="left">
<pre name="code" class="cpp">&lt;script&gt;
function ZoomOut(dx, dy) {
    var xMsg = { method: 'zoomout' };
    mapIframe.postMessage( “ ***** Post your message ”);
}
&lt;/script&gt;</pre>
<p align="left">
<p align="left">在Web Context中，添加receiveMessage(event) 参考代码如下：</p>
<p align="left">
<pre name="code" class="cpp">function receiveMessage(event) {
  switch (event.data.method) {

	......

    case 'zoomout':
      var currentZoom = map.getZoom();
      map.setView({ zoom: currentZoom - 1 });
      break;
  }
}
</pre>
</p>
<p>本篇完。 <br /> 参考文章：http://alastaira.wordpress.com/2011/09/26/creating-a-windows-8-metro-slippy-map-application/</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/15/metro-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>海量数据</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/15/400010268/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/15/400010268/#comments</comments>
		<pubDate>Tue, 15 May 2012 04:55:18 +0000</pubDate>
		<dc:creator>Bruce Chen 陈宇达 (Intel)</dc:creator>
				<category><![CDATA[企业应用开发]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/15/400010268/</guid>
		<description><![CDATA[随着数据中心的不断发展，数据量日益扩大，如何有效地处理海量数据成为了浮出水面的新问题。在过去的IDF上，Intel介绍了海量数据处理的一些现状和经验，供大家参考。 http://intelstudios.edgesuite.net/idf/2012/bj/keynotes/idf2012_db-en/main.htm]]></description>
			<content:encoded><![CDATA[<p>随着数据中心的不断发展，数据量日益扩大，如何有效地处理海量数据成为了浮出水面的新问题。在过去的IDF上，Intel介绍了海量数据处理的一些现状和经验，供大家参考。</p>
<p>http://intelstudios.edgesuite.net/idf/2012/bj/keynotes/idf2012_db-en/main.htm</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/15/400010268/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>高性能的E5-2600</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/15/e5-2600/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/15/e5-2600/#comments</comments>
		<pubDate>Tue, 15 May 2012 04:42:22 +0000</pubDate>
		<dc:creator>Bruce Chen 陈宇达 (Intel)</dc:creator>
				<category><![CDATA[企业应用开发]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/15/e5-2600/</guid>
		<description><![CDATA[附件是E5-2600的一篇白皮书，介绍了高性能的E5-2600的应用，供参考。 高性能的E5-2600]]></description>
			<content:encoded><![CDATA[<p>附件是E5-2600的一篇白皮书，介绍了高性能的E5-2600的应用，供参考。<br />
<a href='http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/2012412103626.pdf'>高性能的E5-2600</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/15/e5-2600/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>美国航空航天管理局的云架构</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/15/400010261/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/15/400010261/#comments</comments>
		<pubDate>Tue, 15 May 2012 04:36:45 +0000</pubDate>
		<dc:creator>Bruce Chen 陈宇达 (Intel)</dc:creator>
				<category><![CDATA[企业应用开发]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/15/400010261/</guid>
		<description><![CDATA[这里是美国航空航天管理局的云架构白皮书，供参考。 美国航空航天管理局的云架构]]></description>
			<content:encoded><![CDATA[<p>这里是美国航空航天管理局的云架构白皮书，供参考。<br />
<a href='http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/20125111454421.pdf'>美国航空航天管理局的云架构</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/15/400010261/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安全的云计算</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/15/400010258/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/15/400010258/#comments</comments>
		<pubDate>Tue, 15 May 2012 04:23:29 +0000</pubDate>
		<dc:creator>Bruce Chen 陈宇达 (Intel)</dc:creator>
				<category><![CDATA[企业应用开发]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/15/400010258/</guid>
		<description><![CDATA[云计算越来越火，安全也日益为人关注，这里是一篇关于云计算安全的白皮书，供大家参考。 安全的云计算]]></description>
			<content:encoded><![CDATA[<p>云计算越来越火，安全也日益为人关注，这里是一篇关于云计算安全的白皮书，供大家参考。<br />
<a href='http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/2012511143636.pdf'>安全的云计算</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/15/400010258/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安装 Win 8 双系统 硬盘AHCI模式不兼容问题 解决方法</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/14/win-8-ahci/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/14/win-8-ahci/#comments</comments>
		<pubDate>Mon, 14 May 2012 10:22:10 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[Ultrabook]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[AHCI]]></category>
		<category><![CDATA[Win8]]></category>
		<category><![CDATA[双系统]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/14/win-8-ahci/</guid>
		<description><![CDATA[网上看到很多帖子说Win8双系统安装时候出现硬盘AHCI模式不兼容的问题，每次Win7和Win8切换时还得去BIOS切换硬盘IDE模式和AHCI模式，非常不方便。在此提供一个采用VHD方式的完美解决方案。 1. 安装硬件配置 安装机器：超级本（Ultrabook）Acer S3-951-2464G52iss 配置： 屏幕尺寸：13.3英寸 1366x768 CPU型号：Intel 酷睿i5 2467M CPU主频：1.6GHz 内存容量：4GB DDR3 1333MHz 硬盘容量：20GB+500GB SDD+5400转，SATA 显卡芯片：Intel GMA HD 3000 操作系统：Windows 7 Home Premium 64bit（... 摄像头：集成130万像素摄像头 光驱类型：无内置光驱 无线网卡：支持802.11b/g/n无线协议 笔记本重量：1.35Kg 蓝牙：支持，蓝牙4.0模块 2. 安装Win7 部分Win7的版本安装时提示找不到硬盘，这时进入BIOS，将硬盘加载方式设为IDE兼容模式，然后安装Win7。安装步骤这里不再叙述。 安装完成之后，在注册列表里面找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci 下的 start ，把3改为0；然后重启，打开bios中的ahci 选择；保存退出。开机后系统自动安装AHCI驱动后，再次重启，即可。 3. 配置VHD 安装好AHCI驱动之后，右击我的电脑，管理 -&#62; 磁盘管理，选择菜单栏 Action -&#62; Create VHD， 然后按照步骤一路next即可，建议大小设置为60GB以上，以备足够空间安装开发工具。 创建VHD时间非常漫长，大约需要15-20分钟，创建完成之后，在磁盘管理中会看到disk 1，右击disk 1，选择初始化，初始化完成后，右击右边区域创建新加卷，然后一路next，并快速格式化。建议选择NTFS格式。 4. 安装Win8 接下来的过程就是从U盘或者光盘启动安装Win8，到选择安装硬盘的时候选择我们之前创建的VHD [...]]]></description>
			<content:encoded><![CDATA[<p align="left">网上看到很多帖子说Win8双系统安装时候出现硬盘AHCI模式不兼容的问题，每次Win7和Win8切换时还得去BIOS切换硬盘IDE模式和AHCI模式，非常不方便。在此提供一个采用VHD方式的完美解决方案。</p>
<p align="left"><b>1. </b><b>安装硬件配置</b><b></b></p>
<p align="left">安装机器：超级本（Ultrabook）Acer S3-951-2464G52iss</p>
<p align="left">
<p align="left">配置：</p>
<p align="left">屏幕尺寸：13.3英寸 1366x768</p>
<p align="left">CPU型号：Intel 酷睿i5 2467M</p>
<p align="left">CPU主频：1.6GHz</p>
<p align="left">内存容量：4GB DDR3 1333MHz</p>
<p align="left">硬盘容量：20GB+500GB SDD+5400转，SATA</p>
<p align="left">显卡芯片：Intel GMA HD 3000</p>
<p align="left">操作系统：Windows 7 Home Premium 64bit（...</p>
<p align="left">摄像头：集成130万像素摄像头</p>
<p align="left">光驱类型：无内置光驱</p>
<p align="left">无线网卡：支持802.11b/g/n无线协议</p>
<p align="left">笔记本重量：1.35Kg</p>
<p align="left">蓝牙：支持，蓝牙4.0模块</p>
<p align="left"><a name="OLE_LINK3"></a><a name="OLE_LINK2"><b>2. </b></a><b>安装</b><b>Win7</b></p>
<p align="left">部分Win7的版本安装时提示找不到硬盘，这时进入BIOS，将硬盘加载方式设为IDE兼容模式，然后安装Win7。安装步骤这里不再叙述。</p>
<p align="left">安装完成之后，在注册列表里面找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci 下的 start ，把3改为0；然后重启，打开bios中的ahci 选择；保存退出。开机后系统自动安装AHCI驱动后，再次重启，即可。</p>
<p align="left"><a name="OLE_LINK5"></a><a name="OLE_LINK4"><b>3. </b></a><b>配置</b><b>VHD</b></p>
<p align="left">安装好AHCI驱动之后，右击我的电脑，管理 -&gt; 磁盘管理，选择菜单栏 Action -&gt; Create VHD， 然后按照步骤一路next即可，建议大小设置为60GB以上，以备足够空间安装开发工具。</p>
<p align="left">创建VHD时间非常漫长，大约需要15-20分钟，创建完成之后，在磁盘管理中会看到disk 1，右击disk 1，选择初始化，初始化完成后，右击右边区域创建新加卷，然后一路next，并快速格式化。建议选择NTFS格式。</p>
<p align="left"><b>4. </b><b>安装</b><b>Win8</b></p>
<p align="left">接下来的过程就是从U盘或者光盘启动安装Win8，到选择安装硬盘的时候选择我们之前创建的VHD disk 1即可。之后的安装过程就不再叙述了。</p>
<p align="left">
<p align="left"><b>5. </b><b>启动引导</b><b></b></p>
<p align="left">安装好Win8之后，Win8会自动接管启动引导项。这里建议各位网友将启动引导项改为Win7的，出于安全和稳定的考虑。改回Win7 的方法就是 启动到选择系统页面，点击最下面更改默认启动方式，将默认启动方式改为Win7，则Win7会接管启动引导项。</p>
<p align="left">
<p align="left"><b>6. </b><b>总结</b><b></b></p>
<p align="left">尤其最新的笔记本基本都是AHCI方式的硬盘，在安装双系统的过程中经常碰到找不到硬盘等问题。安装以上五步安装即可完美解决上述问题， 保证双系统都在AHCI方式下面运行，保持电脑硬盘高效运行。</p>
<p align="left">注意点：</p>
<p>1. 第二步中，以下步骤和第三步不能颠倒，否则安装的Win8只能在IDE的方式下工作：</p>
<p>安装完成之后，在注册列表里面找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci 下的 start ，把3改为0；然后重启，打开bios中的ahci 选择；保存退出。开机后系统自动安装AHCI驱动后，再次重启，即可。</p>
<p>2. 强烈建议在第五步中，设置为Win7接管启动项目。Win8接管启动项，如果电脑有任何小症状，会带来不稳定性。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/14/win-8-ahci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android NDK for X86 - 两点解释</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/13/android-ndk-for-x86/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/13/android-ndk-for-x86/#comments</comments>
		<pubDate>Sun, 13 May 2012 13:59:41 +0000</pubDate>
		<dc:creator>Li Zhang (Intel)</dc:creator>
				<category><![CDATA[其他]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/13/android-ndk-for-x86/</guid>
		<description><![CDATA[今年4月的IDF中，我的同事和我主持过一个实验课，讲解为x86平台进行android NDK应用的开发和移植，实验室都是基础性的，旨在让对NDK并不熟悉的开发人员对此有一个概念并能利用在实际的开发工作中。之前的一段偶尔发现有人对实验课发博客进行了描述【1】。 可惜其中有些信息并非完全一样，所以发此博客解释一下，并且想针对x86下的NDK相关开发进行一系列解释说明，也欢迎大家指正。 针对【1】中提到的内容，解释几点如下： 1）开发平台和环境： 并非必须linux系统才可以，所有android原有的开发环境里面都可以进行。 2）模拟器镜像的获取方式： 英特尔并未提供专门供大家下载的地方，还是建议使用官方提供的模拟器管理器来下载，当然也可以从source code中直接编译出。 3）有关模拟器的运行效率： 如果开发环境使用的是linux系统，由于采用了KVM技术其运行速度是很好的，如果大家有兴趣，可以试试，对软硬件都有部分要求，硬件最好能支持VT，系统里面要加载kvm模块。 当然针对windows和mac，x86平台都进行了优化工作，具体参见【2】，我后面也会再次提到相关的一些内容。 【1】http://www.eefocus.com/yuanqian926/blog/12-04/246454_3812b.html 【2】http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager/]]></description>
			<content:encoded><![CDATA[<p>今年4月的IDF中，我的同事和我主持过一个实验课，讲解为x86平台进行android NDK应用的开发和移植，实验室都是基础性的，旨在让对NDK并不熟悉的开发人员对此有一个概念并能利用在实际的开发工作中。之前的一段偶尔发现有人对实验课发博客进行了描述【1】。  可惜其中有些信息并非完全一样，所以发此博客解释一下，并且想针对x86下的NDK相关开发进行一系列解释说明，也欢迎大家指正。</p>
<p>针对【1】中提到的内容，解释几点如下：<br />
1）开发平台和环境： 并非必须linux系统才可以，所有android原有的开发环境里面都可以进行。<br />
2）模拟器镜像的获取方式： 英特尔并未提供专门供大家下载的地方，还是建议使用官方提供的模拟器管理器来下载，当然也可以从source code中直接编译出。<br />
3）有关模拟器的运行效率： 如果开发环境使用的是linux系统，由于采用了KVM技术其运行速度是很好的，如果大家有兴趣，可以试试，对软硬件都有部分要求，硬件最好能支持VT，系统里面要加载kvm模块。 当然针对windows和mac，x86平台都进行了优化工作，具体参见【2】，我后面也会再次提到相关的一些内容。</p>
<p>【1】http://www.eefocus.com/yuanqian926/blog/12-04/246454_3812b.html<br />
【2】http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager/</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/13/android-ndk-for-x86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动Web应用程序开发 高性能JavaScript篇 (三) JavaScript 加载解析和部署</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/#comments</comments>
		<pubDate>Thu, 10 May 2012 15:53:27 +0000</pubDate>
		<dc:creator>Dawei Cheng 程大伟 (Intel)</dc:creator>
				<category><![CDATA[全国大学生软件创新大赛专栏]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[软件技术学习及认证]]></category>
		<category><![CDATA[高校博客大奖赛]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[移动开发]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/</guid>
		<description><![CDATA[介绍  本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。博文也分为三个大部分： 1. 众望所归的HTML5将主要介绍HTML5的前世今生，主要功能和API以及相关Demo，Demo的代码都可以在文章附件中下载到； 2. 高性能JavaScript将主要介绍如何让JavaScript更流畅，JavaScript debug和分析工具，可以说，没有JavaScript就不可能有互联网的今天，更不可能有移动互联网的明天，编写高性能的JavaScript至关重要； 3. 变化万千的CSS3将主要介绍如今异常强大的CSS3，结合HTML5编写动态的Web应用。熟练使用异常Fashion &#38; Cool &#38; 炫的CSS3将使Web应用增色不少。 本篇是高性能JavaScript介绍的第三篇，将给大家结合实例例子及分析工具介绍在加载JavaScript代码时，如何编程可以让Web应用或者网页更加高效。 相关文章  移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈 移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具 加载JavaScript 当Browser在遇到&#60;script&#62;标签的时候，整个页面会因为脚本解析、运行而出现等待，不论实际load的JavaScript代码是内联的还是包含在不相干的外部文件中。页面会因为JavaScript文件的下载，解析而停止，等待脚本完成了才能继续。所以对比以下两段代码看谁能高效： 代码片段一 &#60;html&#62; &#60;head&#62; &#60;title&#62;Script Example&#60;/title&#62; &#60;-- Example of inefficient script positioning --&#62; &#60;script type="text/javascript" src="file1.js"&#62;&#60;/script&#62; &#60;script type="text/javascript" src="file2.js"&#62;&#60;/script&#62; &#60;script type="text/javascript" src="file3.js"&#62;&#60;/script&#62; &#60;link rel="stylesheet" type="text/css" href="styles.css"&#62; &#60;/head&#62; &#60;body&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>介绍</strong><strong> </strong></p>
<p>本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具：HTML5，JavaScript， CSS3。博文也分为三个大部分：</p>
<p>1. 众望所归的HTML5将主要介绍HTML5的前世今生，主要功能和API以及相关Demo，Demo的代码都可以在文章附件中下载到；</p>
<p>2. 高性能JavaScript将主要介绍如何让JavaScript更流畅，JavaScript debug和分析工具，可以说，没有JavaScript就不可能有互联网的今天，更不可能有移动互联网的明天，编写高性能的JavaScript至关重要；</p>
<p>3. 变化万千的CSS3将主要介绍如今异常强大的CSS3，结合HTML5编写动态的Web应用。熟练使用异常Fashion &amp; Cool &amp; 炫的CSS3将使Web应用增色不少。</p>
<p>本篇是高性能JavaScript介绍的第三篇，将给大家结合实例例子及分析工具介绍在加载JavaScript代码时，如何编程可以让Web应用或者网页更加高效。</p>
<p><strong>相关文章</strong><strong> </strong></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/">移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/">移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具</a></p>
<p><strong>加载JavaScript</strong><strong></strong></p>
<p>当Browser在遇到&lt;script&gt;标签的时候，整个页面会因为脚本解析、运行而出现等待，不论实际load的JavaScript代码是内联的还是包含在不相干的外部文件中。页面会因为JavaScript文件的下载，解析而停止，等待脚本完成了才能继续。所以对比以下两段代码看谁能高效：</p>
<p>代码片段一</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;-- Example of inefficient script positioning --&gt;
		&lt;script type="text/javascript" src="file1.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file2.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file3.js"&gt;&lt;/script&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>代码片段二</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
		&lt;-- Example of recommend script positioning --&gt;
		&lt;script type="text/javascript" src="file1.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file2.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="file3.js"&gt;&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>很显然，代码片段二更高效。因为页面显示部分和JavaScript脚本没有直接的关系，所以完全可以先把界面渲染了再去load脚本。三个JS脚本加载时间我们可以从Chrome分析工具中获得，如下图所示：</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/31.jpg" alt="" width="313" height="330" /></p>
<p><strong></strong></p>
<p><strong>将脚本成组加载</strong></p>
<p>由于每个&lt;script&gt;标签在下载时都会阻塞页面解析的过程，所以限制页面&lt;script&gt;总数也可以改善性能。所以成组加载JavaScript脚本可以提升页面整体性能，这个规则不仅对内联脚本有效，对外部脚本同样适用。</p>
<p>原因是在于每个HTTP 请求都会产生额外的性能负担，下载一个100KB的脚本远比下载4个25KB的脚本要快。</p>
<p>下面我们用两个demo来证明一下：demo源代码可在本文结尾处下载。</p>
<p>代码片段一：</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
		&lt;-- Example of not recommended script positioning --&gt;
		&lt;script type="text/javascript" src="
		http://yui.yahooapis.com/combo?2.7.0/build/yahoo/yahoo-min.js"&gt;
		&lt;/script&gt;
		&lt;script type="text/javascript" src="
		http://yui.yahooapis.com/combo?2.7.0/build/event/event-min.js "&gt;
		&lt;/script&gt;
	&lt;/body&gt;</pre>
<p>代码片段二：</p>
<pre name="code" class="xhtml">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Script Example&lt;/title&gt;
		&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;p&gt;Hello world!&lt;/p&gt;
		&lt;-- Example of recommended script positioning --&gt;
		&lt;script type="text/javascript" src="

http://yui.yahooapis.com/combo?2.7.0/build/yahoo/yahoo-min.js&#038;

		2.7.0/build/event/event-min.js "&gt;&lt;/script&gt;
	&lt;/body&gt;</pre>
<p>两段代码运行后，分别用Chrome开发者工具里面的TimeLine进行分析结果如下图：代码片段二要更加高效。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/32.jpg" alt="" width="584" height="197" /></p>
<p><strong>动态加载脚本</strong><strong></strong></p>
<p>文件对象模型（DOM）允许用户使用JavaScript创建HTML文档中几乎全部的元素和内容。&lt;script&gt;元素也不例外。所以，使用DOM可以动态的在JavaScript动创建，移动，删除脚本文件，这样可以比较JavaScript在加载时对UI页面的阻塞。</p>
<p>参见代码片段：</p>
<pre name="code" class="xhtml">&lt;script &gt;
	var script = document.createElement("script")
	script.type = "text/javascript";
	//Firefox, Opera, Chrome, Safari 3+
	script.onload = function(){
		alert("Script loaded!");
	};
	script.src = "file1.js";
	document.getElementsByTagName("head")[0].appendChild(script);
&lt;/script&gt;</pre>
<p>运行后使用TimeLine分析如下图所示：可以看出JavaScript的加载并没有阻塞UI页面。</p>
<p><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/33.jpg" alt="" /></p>
<p><strong>XHR</strong><strong>脚本</strong><strong></strong></p>
<p>另外一种非阻塞方式加载脚本的方法就是将XMLHttpRequest（XHR）对象加入到页面中。这种方式首先需要创建一个XHR对象，然后下载JavaScript文件，再使用一个动态的&lt;script&gt;元素将JavaScript代码加入到页面里面。</p>
<p>具体参加代码示例：</p>
<pre name="code" class="xhtml">var xhr = new XMLHttpRequest();
xhr.open("get", "file1.js", true);
xhr.onreadystatechange = function(){
    if (xhr.readyState == 4){
        if (xhr.status &gt;= 200 &amp;&amp; xhr.status &lt; 300 || xhr.status == 304){
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.text = xhr.responseText;
	document.body.appendChild(script);
        }
    }
};
xhr.send(null);</pre>
<p><strong>部署</strong><strong>JavaScript</strong></p>
<p>为了让客户端Web应用更加高效和便捷，不仅仅在客户端编程时可以高效地使用JavaScript，同样在Server端可以通过以下途径来使Web页面的加载更高快速。</p>
<p>1. 尽可能地合并JavaScript文件，降低HTTP请求数量</p>
<p>2. 压缩JavaScript文件，缩小下载文件的大小，可以使用gzip的方式进行压缩。</p>
<p>3. 通过设定合适的HTTP 回复头文件来使客户端缓存一些大的JavaScript文件。一旦脚本被缓存，则用户下次打开时，可以显著降低加下载和解析时间。</p>
<p>4. 对于服务范围很广的公司，可以考虑使用CDN（Content Delivery Network）来部署JavaScript文件。</p>
<p>源代码下载地址：<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/LoadDeploy.zip"> 下载</a></p>
<p>参考文章：High performance JavaScript O'Reilly Yahoo Press</p>
<p>在下一篇文章中将给大家介绍在JavaScript编程的过程中，如何通过一些编程技巧来提升Web应用的性能，缩短其处理时间。</p>
<p><strong>相关文章</strong><strong></strong></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/03/26/web-javascript-javascript/">移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈</a></p>
<p><a href="http://software.intel.com/zh-cn/blogs/2012/04/07/web-javascript-javascript-2/">移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/10/web-javascript-javascript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>多种方法过滤Inspector XE 2011结果</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/10/inspector-xe-2011-2/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/10/inspector-xe-2011-2/#comments</comments>
		<pubDate>Thu, 10 May 2012 03:05:13 +0000</pubDate>
		<dc:creator>Peter Wang (Intel)</dc:creator>
				<category><![CDATA[并行计算]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>
		<category><![CDATA[Inspector XE Filter]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/10/inspector-xe-2011-2/</guid>
		<description><![CDATA[提供了多种常用手段过滤Inspector XE的结果。使用户专注于那些引起严重后果的内存访问和线程访问]]></description>
			<content:encoded><![CDATA[<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter1.jpg"></a><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter31.jpg"></a><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter2.jpg"></a><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter41.png"></a>使用Intel® Inspector XE 2011帮助开发人员动态检查运行程序的内存访问错误和线程访问错误（甚至是潜在的错误）。有的用户认为，Inspector XE报的错误基本不会发生，不必担心；有的用户认为，报错在第三方软件，无源代码可修改，可以跳过；有的用户认为，只需知道增量错误，老的错误不要再报。</p>
<p>这一切都可使用工具本身的Suppression功能来完成。</p>
<p>情形1. 假设用户是测试人员，每次只要关心有无新的报错。</p>
<p>步骤1. 检查内存错误或线程错误，结果放在指定目录， 如</p>
<p>inspxe-cl –collect mi2 –result-dir myRes -- ./tachyon_find_and_fix_memory_errors dat/simlpeball.dat</p>
<p>步骤2. 将结果产生于.sup 文件， 如</p>
<p>inspxe-cl –create-suppression-file default.sup –result-dir myRes</p>
<p>步骤3. 再次测试，过滤掉上次的已知结果， 如</p>
<p>inspxe-cl –collect mi2 –suppression-file default.sup –result-dir myRes1 -- ./tachyon_find_and_fix_memory_errors dat/simlpeball.dat</p>
<p>*.sup 文件不可以手工编辑，如用户想要有选择的选取“过滤”内容，可以把.sup文件加入Inspector XE的Project Properties – 在图形界面上取舍内容。本文最后有描述。</p>
<p>情形2. 有些报错内容来自第三方的软件，或暂时不关心的库文件</p>
<p>请参阅此文 - <a href="http://software.intel.com/zh-cn/blogs/2011/08/08/include/">http://software.intel.com/zh-cn/blogs/2011/08/08/include/</a></p>
<p>“include”模式：报告的错误，来自指定的模块。</p>
<p>“exclude”模式：报告所有的错误，除了列出的模块。</p>
<p>上文中，例子中使用的是命令行的方式，用户也可以在图形界面上设定。</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter1.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter1.jpg" alt="" width="560" height="420" /></a></p>
<p>情形3.分析前次结果，去掉“不合理”的报告项。以后运行Inspector XE再也不会出现这些项。</p>
<p>步骤1.运行完整的检查，浏览报告，找出“不合理”的项，按右键，选“Suppress…”</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter31.jpg"></a><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter2.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter2.jpg" alt="" width="553" height="343" /></a><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter31.jpg"></a></p>
<div>
<p>步骤2.选中过滤的问题行（可多选），再按“Create”按钮，内容加入到.sup文件中</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter31.jpg"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter31.jpg" alt="" width="465" height="355" /></a></p>
<div>
<p>步骤3.下次运行时使用此.sup文件，如</p>
</div>
<p>inspxe-cl –collect ti3 –suppression-file default.sup –result-dir myRes1 -- ./tachyon_find_and_fix_memory_errors dat/simlpeball.dat</p>
<p>最后再次提请大家注意，.sup 文件是不可手工编辑的。可以加入到Inspector XE的项目（图形界面），再对所有项进行管理。修改后的.sup文件是可以在命令行被使用的！</p>
<p><a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter41.png"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/05/filter41.png" alt="" width="555" height="383" /></a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/10/inspector-xe-2011-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVX指令集中的32种浮点比较关系详解</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/05/09/avx32/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/05/09/avx32/#comments</comments>
		<pubDate>Wed, 09 May 2012 06:54:21 +0000</pubDate>
		<dc:creator>zyl910</dc:creator>
				<category><![CDATA[并行计算]]></category>
		<category><![CDATA[AVX]]></category>
		<category><![CDATA[cmp]]></category>
		<category><![CDATA[SIMD]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/05/09/avx32/</guid>
		<description><![CDATA[　　在传统印象中，数字的比较关系只有6种。但在AVX指令集中，Intel一下给出了32种浮点比较谓词，详见下图—— （Intel手册：Table 3-9. Comparison Predicate for VCMPPD and VCMPPS Instructions） 　　为什么会有这么多种比较谓词呢？我为此困惑困惑了很久。 　　直到最近翻阅了不少资料后，才终于将它们弄懂了。 一、浮点数据类型 　　Intel使用的是IEEE 754规范的浮点数据类型。对于浮点数据类型来说，除了可以存储数字、无穷之外，还可以存储 NaN（not a number。非数）。 　　NaN（非数）分为两大类—— 1.QNaN：quiet NaN，静默非数。当禁止异常时，若浮点运算无效（例如 “零除以零”、“对负数开方”等），就返回QNaN表示运算无效。 2.SNaN：signaling NaN，信号非数。当浮点运算遇到SNaN时，会立即抛出异常。例如可以用来检查变量是否被初始化（定义变量时设为SNaN，如果用户没有将它初始化就调用浮点运算，会抛出异常）。 　　在Intel手册上有张浮点数编码表，位于“Volume 1: Basic Architecture ”\“Chapter 4 Data Types”\“4.2 Numeric Data Types”\“4.2.2 Floating-Point Data Types”—— （Intel手册：Table 4-3. Floating-Point Number and NaN Encodings） 　　从上表中可以得知—— 1.NaN的阶码为全1，符号位被忽略。通过尾数来判断是SNaN或QNaN。 2.SNaN的尾数的最高为0，其他位非0。 3.QNaN的尾数的最高为1，其他位非0。 4.还存在一个特殊的QNaN——QNaN Floating-Point Indefinite：表示“不确定浮点值”的静默非数。可参考周明德《64位微处理器应用编程》“5.4.4数的编码”中“3、不确定值”。 　　关于NaN的运算细节，可参考Intel手册中“4.8.3.4 NaNs”至“4.8.3.7 QNaN [...]]]></description>
			<content:encoded><![CDATA[<p>　　在传统印象中，数字的比较关系只有6种。但在AVX指令集中，Intel一下给出了32种浮点比较谓词，详见下图——<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/avx_cmppred32.png"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/avx_cmppred32.png" alt="" width="750" height="768" class="alignnone size-full wp-image-400010148" /></a><br />
（Intel手册：Table 3-9. Comparison Predicate for VCMPPD and VCMPPS Instructions）</p>
<p>　　为什么会有这么多种比较谓词呢？我为此困惑困惑了很久。<br />
　　直到最近翻阅了不少资料后，才终于将它们弄懂了。</p>
<p><strong>一、浮点数据类型</strong></p>
<p>　　Intel使用的是IEEE 754规范的浮点数据类型。对于浮点数据类型来说，除了可以存储数字、无穷之外，还可以存储 NaN（not a number。非数）。</p>
<p>　　NaN（非数）分为两大类——<br />
1.QNaN：quiet NaN，静默非数。当禁止异常时，若浮点运算无效（例如 “零除以零”、“对负数开方”等），就返回QNaN表示运算无效。<br />
2.SNaN：signaling NaN，信号非数。当浮点运算遇到SNaN时，会立即抛出异常。例如可以用来检查变量是否被初始化（定义变量时设为SNaN，如果用户没有将它初始化就调用浮点运算，会抛出异常）。</p>
<p>　　在Intel手册上有张浮点数编码表，位于“Volume 1: Basic Architecture ”\“Chapter 4 Data Types”\“4.2 Numeric Data Types”\“4.2.2 Floating-Point Data Types”——<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/floatType0.png"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/floatType0.png" alt="" width="750" height="768" class="alignnone size-full wp-image-400010149" /></a><br />
（Intel手册：Table 4-3. Floating-Point Number and NaN Encodings）</p>
<p>　　从上表中可以得知——<br />
1.NaN的阶码为全1，符号位被忽略。通过尾数来判断是SNaN或QNaN。<br />
2.SNaN的尾数的最高为0，其他位非0。<br />
3.QNaN的尾数的最高为1，其他位非0。<br />
4.还存在一个特殊的QNaN——QNaN Floating-Point Indefinite：表示“不确定浮点值”的静默非数。可参考周明德《64位微处理器应用编程》“5.4.4数的编码”中“3、不确定值”。</p>
<p>　　关于NaN的运算细节，可参考Intel手册中“4.8.3.4 NaNs”至“4.8.3.7 QNaN Floating-Point Indefinite”的内容。</p>
<p><strong>二、两种特殊的比较关系——“无序”、“有序”</strong></p>
<p>　　传统的数字的比较关系是这6种——<br />
1.等于（Equal）。谓词缩写为“EQ”。C语言运算符为“==”。<br />
2.小于（Less than）。谓词缩写为“LT”。C语言运算符为“&lt;”。<br />
3.小于等于（Less than or equal）。谓词缩写为“LE”。C语言运算符为“”。<br />
5.大于等于（Greater than or equal）。谓词缩写为“GE”。C语言运算符为“&gt;=”。<br />
6.不等于（Not equal）。谓词缩写为“NEQ”。C语言运算符为“!=”。</p>
<p>　　一般来说，上面的6种比较关系只对数字（包括无穷大）有效。即两边的操作数都必须是数字，任何一个都不能为NaN。<br />
　　若任一操作数是NaN（非数），那么将无法进行比较，前5种比较关系都返回False。包括“NaN==NaN”的返回值都是False。<br />
　　而“不等于”就有点微妙，因为它是“等于”的相反值。所以当任一操作数是NaN时，“不等于”也返回True。因此，将它称为“不等于或无序”将会更好。</p>
<p>　　“无序”是专门为NaN而设计的比较关系，详细定义如下——<br />
无序（Unordered）。当至少一个操作数是NaN时，返回True。若操作数都不是NaN时，返回False。谓词缩写为“UNORD”。一般借用符号“?”表示“无序”关系。</p>
<p>　　既然有了“无序”，那么可以定义一个跟它效果相反的运算符“有序”——<br />
有序（Ordered）。当操作数都不是Nan时，返回True。若至少一个操作数是NaN时，返回False。谓词缩写为“ORD”。一般借用符号“!?”表示“有序”关系。</p>
<p>　　可这样理解——<br />
有序：能比较大小。<br />
无序：不能比较大小。</p>
<p><strong>三、SIMD（SSE/AVX）中的NaN与异常</strong></p>
<p>　　在使用AVX指令集时，依然是靠MXCSR寄存器来控制浮点运算的。在Intel手册“10.2.3 MXCSR Control and Status Register”中有该寄存器的详细定义——<br />
（Intel手册：Figure 10-3. MXCSR Control/Status Register）</p>
<p>　　当CPU发现浮点运算无效时——<br />
1. 首先将MXCSR寄存器的最低位（IE：Invalid Operation Flag）设为1。<br />
2. 随后CPU检查MXCSR寄存器的第7位（IM：Invalid Operation Mask），若IM为1（masked，屏蔽），就返回QNaN（或特殊值）；若IM为0（unmasked，非屏蔽），就触发#IA异常。<br />
注：#IA是无效算术操作异常，详见Intel手册“8.5.1.2 Invalid Arithmetic Operand Exception (#IA)”。</p>
<p>　　一般来说，等于、小于等比较操作遇到NaN时会引发上述流程——<br />
1.将IE设为1。<br />
2.若IM为1，不会触发异常，返回比较结果；若IM为0，会触发异常。</p>
<p>　　而对于“无序”比较来说，因为它本来就是用来检查NaN，不希望触发异常。所以CPU对这一类操作做了特殊处理，不会执行上述操作。</p>
<p>　　即浮点比较会因是否抛出异常而分为两类——<br />
1.signaling（发信号）：遇到NaN时，设置IE，根据IM决定是返回比较结果，还是抛出异常。<br />
2.non-signaling（不发信号）： 遇到NaN时，总是返回比较结果，从不抛出异常。</p>
<p><strong>四、32种浮点比较关系详解</strong></p>
<p>　　学习了上面那些知识点后，现在可以读懂AVX指令集中的32种浮点比较关系了。<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/avx_cmppred32.png"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/avx_cmppred32.png" alt="" width="750" height="768" class="alignnone size-full wp-image-400010148" /></a><br />
Predicate：比较谓词。<br />
imm8 Value：8位立即数。<br />
Description：描述。<br />
Result: A Is 1st Operand, B Is 2nd Operand：返回值：A是第一个操作数，B是第二个操作数。<br />
A &gt; B：大于。<br />
A &lt; B：小于。<br />
A = B：等于。<br />
Unordered：无序。<br />
Signals #IA on QNAN：当遇到QNaN时是否发信号#IA。<br />
注：较复杂的比较关系可以由“大于”、“小于”、“等于”、“无序”这四种基本关系所组成。例如“小于等于”由“小于”、“等于”组成。</p>
<p>　　我将该表格翻译了一下，并增加了符号形式描述——<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/avx_cmppred32_my.png"><img src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2012/04/avx_cmppred32_my.png" alt="" width="755" height="594" class="alignnone size-full wp-image-400010150" /></a><br />
谓词：比较谓词。<br />
imm8：8位立即数。<br />
符：符号形式描述。<br />
描述：文字形式描述。<br />
符2：另一种符号形式描述。<br />
描述2：另一种文字形式描述。<br />
A &gt; B：大于。<br />
A &lt; B：小于。<br />
A = B：等于。<br />
无序：无序。<br />
#IA：Signals #IA on QNAN。</p>
<p>　　观察这张表格，会发现谓词的命名是有规则的，它由三部分组成，格式大致为“①_②③”，含义如下——<br />
①.下划线前的是第一部分，它是谓词缩写，用于描述功能。例如“EQ_OQ”中的“EQ”代表“等于”。<br />
②.在下划线与最后字母之间的是第二部分，只能是O、U或忽略。O代表有序，U代表无序。<br />
③.最后的那个字母是第三部分，只能是Q或S，分别代表non-signaling和signaling。例如“EQ_OQ”中的“Q”代表“non-signaling”。该字母其实代表的是#IA这一列，为“Q”时“#IA”列为“No”，为“S”时“#IA”列为“Yes”。</p>
<p>　　AVX指令集中的VCMPPS等比较指令是继承自SSE指令集中的CMPPS等指令的，它们靠一个8位立即数（imm8）来区分比较谓词。<br />
　　SSE指令集只定义了前8种比较谓词，所以imm8只有最低3位有效。上表“谓词”后面括号内的就是SSE时代的谓词名称。<br />
　　AVX指令集将其扩展到32种比较谓词，所以imm8只有最低5位有效。</p>
<p>　　Intel在设计AVX指令集的比较谓词时，先根据无序、有序和FALSE、TRUE，将比较谓词扩充到16种。然后再反转non-signaling/signaling，又定义了16种比较谓词。合计32种比较谓词。</p>
<p>参考文献——<br />
《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B &amp; 2C): Instruction Set Reference, A-Z》. December 2011. http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.html<br />
《IEEE Standard for Floating-Point Arithmetic (IEEE 754-2008)》。 Institute of Electrical and Electronics Engineers (IEEE)。2008年8月。<br />
《GB/T 17966-2000 微处理器系统的二进制浮点运算》。国家质量技术监督局。2000年1月。<br />
《Pentium Ⅱ/Ⅲ体系结构及扩展技术》。刘清森、马鸣锦、吴灏等著。国防工业出版社，2000年7月。<br />
《64位微处理器应用编程》。周明德著。清华大学出版社，2005 年9月。<br />
NaN：http://en.wikipedia.org/wiki/NaN</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/05/09/avx32/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

