| 1 | soker | 5 |
| 2 | ooloo | 1 |
| 3 | qq007 | 1 |
| 4 | aple | 0 |
| 5 | andyhwa | 0 |
| 6 | kang | 0 |
| 7 | wxdmini123 | 0 |
| 8 | zhixia | 0 |
| 9 | jiankun | 0 |
| 10 | grennwhite | 0 |
在运行程序时,我们总希望多次运行的结果,是完全一致,甚至在不同的机器与不同的OS中,程序运行的结果每一位都完全相同。
事实上,程序往往很难保证做到这一点。 为什么呢? 我们先看一个简单的例子: 当程序使用单精度或者双精度的浮点数时, 浮点数有一定的精度的限制。 单精度的浮点数,使用23位二进制表示的尾数。 双精度浮点数,使用52位的二进制(http://en.wikipedia.org/wiki/IEEE_754-1985)。
如果,程序中计算下面的表达式:
double d1,d2,d3,d4,d5;
d1 = 1e-63;
d2 = 1;
d3= -1;
d4 = (d1+ d2) +d3;
d5 = d1+ (d2 +d3);
printf("d4=%e\n",d4);
printf("d5=%e\n",d5);
通常,它的结果为:
d4=0.000000e+000
d5=1.000000e-063
尽管数学表达上, d4 应该有和d5 完全相同的计算结果。但是,由于浮点数的有限精度,(d1+d2),在计算机的值为1. 最终,d4,d5的结果并不完全相同。
如果程序调用Intel MKL 函数,下面的一些因素,往往会对我们的计算结果产生影响:
1> 内存对齐:我们的处理器往往提供了一些专门的指令,对16 byte 或 32 byte (AVX ) 对齐内存地址进行存取操作。 当程序运行时,对齐或不对齐输入数据的地址,运行的代码可能有略微差别。最终,程序的计算结果,可能不是完全一致。
2> 多线程的设置: Intel MKL 函数已经是多核优化后的函数,程序运行多线的数目不同,带来相应的数值精度上也会细微的误差。
3> 针对不同处理器的优化代码: Intel MKL 能够充分利用处理器的指令集,来取得程序的最高性能。 这样在不同的处理器上, 程序运行的代码可能并不是完全一致,从而最终的的结果,可能也略有差别。
新的MKL 11.0提供了conditional bitwise reproducible (CBWR)的特性。 在满足一定的条件下,它能保证MKL函数有相同的结果。如果 1)输入/输出的数据地址按照16或 32字节对齐 ( 选择执行SSE指令需要16 byte 对齐,AVX1指令32 byte 对齐)2)运行的线程数目相同 3)在同一可执行文件中被调用, 那么Intel MKL函数可以在多次执行中,有相同的计算结果。
程序不同处理器上运行的时候,可能运行不同的优化代码。比如, 在较旧Intel® Pentium® 4 处理器上, MKL可能运行SSE2 优化代码,而在支持的AXV指令的新的机器上,MKL 的函数可能运行AVX指令的优化代码。 这样,Intel MKL函数能够根据不同处理器的特性,提供高效的优化代码。但是,当这些代码,有不完全相同的数据处理顺序时,不完全一致的代码可能产生的最有的数值结果可能也不完全一致。 在MKL 11.0 中, 提供的一些新的函数,与环境变量。能够帮助用户来来控制取得一致的计算结果。
下面我们看一下例子:
1> 为确保在Intel 以及Intel 兼容的支持SSE2 指令的处理上,有一致的计算结果, 我们可以将程序须设置固定的线程数目, 保证输入输出数据的地址对齐, 并调用以下的MKL 函数:
mkl_cbwr_set(MKL_CBWR_COMPATIBLE) 或设置环境变量:MKL_CBWR_BRANCH = "COMPATIBLE"
2>在支持SSE4.1 Intel 的处理器上, 为确保MKL 函数有相同的结果。我们可以将程序须设置固定的线程数目,保证输入输出数据的地址对齐, 并调用以下的MKL 函数:
mkl_cbwr_set(MKL_CBWR_SSE4_1) 或设置环境变量: MKL_CBWR_BRANCH = "SSE4_1"
需要说明的是, 如果我们选择了特定CPU优化的代码, 很自然,针对一些新的处理器,MKL 可能会有一些性能开销。 比如,对于矩阵与矩阵乘法的函数(xGEMM), AVX 优化代码的性能有近乎SSE2优化代码的两倍性能。在支持AVX机器上,我们指定,该函数运行SSE2的代码,会有不少的性能损失。对于其他的一些例子,选择特定的优化代码,可能有10%-20%的性能开销。
相关培训材料: http://software.intel.com/en-us/artic ... -bitwise-reproducibility/
下载与测试Intel MKL 11.0 Beta:
之前也发了一系列关于Win8的博客,今天给大家分享的不是Win8本身,而是Win8 Metro的应用。Win8 的极简主义设计理念被很多人批评做出来的东西太粗糙,不好看,甚至记得一度非常火的一个帖子,详细对比Win8和iOS在各个界面的美观度。经过这篇博客给大家分享的内容,我想回改变很多人的看法。
坦白讲,作为一个学习了四年专业交互和界面设计本科课程的我,看到人人网Win8的Metro设计,也被深深地惊艳到了。惊艳到的不仅仅是一个一个界面,同样还有其优秀的交互设计。鉴于在博客中无法让大家感受到交互设计的部分。我就给大家列出主要界面的UI设计,配上口试交互方式,供大家尝鲜。
郑重申明:本文仅供参考,转载请注明出处,其中涉及部分个人隐私,请勿用于其他目的。
1. 新鲜事

最左边是新鲜事,极简主义发挥到极致,背景渐变色块,优雅的微软Segoe字体,有图片的区域较大,直接显示图片,文字区域较小,配以不同颜色的色块,搭配非常简洁和干净。从未发现微软Segoe字体这么漂亮过。注意背景色块的渐变区域,如果是纯蓝色,会显得很呆板,加上一点点的渐变,和右边30%的分隔,将整个画面激活。
2. 我的照片

我的照片和最近来访在新鲜事右边,直接滑动即可看到这部分内容。每个图片会动态变化。请注意看我的照片区域的分栏设计,设计得非常精巧,中间加以宽度适中的分隔,是否想起了Van der Rohe 的名言"less is more" 。最右边的竖条照片刚好显示一张全身照,不知是巧合还是有图片识别算法进行优化排列的。
3. 最近来访

继续向右推动,就会出现这幅界面,这里面的联系人会像来回翻动,可惜无法动态展示。
4. 个人主页

依然只有色块区域,文字和图片,组成了个人主页区域。上端三个字的字体和颜色搭配得非常漂亮。依次点击可以跳到对应的界面。这边我想很多网友会拿和iOs相对比,iOs的设计理念,一般会放个Button在这里,各有各的好处,但是我想说人人网这里的设计真的很惊艳。
5. 我

点击我可以看到详细信息。在这个页面可以仔细看出背景设计的巧妙之处,仔细欣赏这个背景一会吧,真的很棒。我想这就是教科书上面说的"简约不简单"吧。
6. 浏览图片

浏览图片的界面,在前端的这个图片可以随意拖动,当拖到边框外的时候,就回到后端的页面。交互很好。这张图片来自马蜂窝的,应该不存在个人隐私的问题,大家尽可多多欣赏。哈哈。
7. 个人新鲜事

再给大家详细欣赏一下个人新鲜事页面。
8. 快速回复

快速回复非常方便。
9. 我的日志
我的日子页面,大家是否看到了本人去年9月16日发的日志?哈哈,这也算这页UI的亮点吧。
10. 我的好友页面

11. 快速分享@页面

12. 总结
已经无法用言语表达我对这个设计的喜爱了。如果你还在怀疑Windows8设计师Sam在 如何重塑信仰 中对于Win8的期待和描述,我想,这篇博客是最好的答案。
最近在开发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文件采用的代码方式仍然可以使用吗?如:
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0></script>
答案是不可以,因为处于安全考虑,Win8不允许在开发Web Metro应用的时候不允许在Local context中加载一个remote URL。及即使把这个文件下载下来放在本地也是不可以的,因为它会操作HTML页面中的DOM。
在编译的时候会报错。
2.解决方法
将需要加载的页面放在Local Context的iFrame中。这样当Metro应用在运行的时候,iFrame中的页面其实可以理解为运行在Metro IE浏览器中,所以不存在Local Context不允许加载Remote URL的问题。
代码参考如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=1024, height=768" />
<title>WinWebApp1</title>
<!-- WinJS references -->
<link rel="stylesheet" href="/winjs/css/ui-dark.css" />
<script src="/winjs/js/base.js"></script>
<script src="/winjs/js/wwaapp.js"></script>
<script src="/winjs/js/ui.js"></script>
<script src="/winjs/js/controls.js"></script>
<!-- WinWebApp1 references -->
<link rel="stylesheet" href="/css/default.css" />
<script src="/js/default.js"></script>
</head>
<body>
<header role="banner" aria-label="Header content">
<div class="titleArea">
<h1 class="pageTitle win-title" role="button" aria-label="Groups" tabindex="0">
Metro Map App</h1>
</div>
</header>
<div>
<iframe id="mapIframe" src="file:///****.html" width="1280px" height="800px"></iframe>
</div>
</body>
</html>
src=file:///****.html 或者src=http://****.html 是需要加载web context 的页面,在相应的html文件中可以自由加载remote URL的内容。
在页面中的关系图如下:

通信
现在的问题出现了,Web Context如何和Local Context通信了。Win8 IE全面支持了HTML5,在HTML5中可以使用HTML5 postMessage method在不通的页面中进行通信。
假设我们在Local Context中新建一个button,代码如下:
<button onclick="ZoomOut();">Zoom Out</button>
在JavaScript中,添加ZoomOut函数:
<script>
function ZoomOut(dx, dy) {
var xMsg = { method: 'zoomout' };
mapIframe.postMessage( “ ***** Post your message ”);
}
</script>
在Web Context中,添加receiveMessage(event) 参考代码如下:
function receiveMessage(event) {
switch (event.data.method) {
......
case 'zoomout':
var currentZoom = map.getZoom();
map.setView({ zoom: currentZoom - 1 });
break;
}
}
本篇完。
参考文章:http://alastaira.wordpress.com/2011/0 ... o-slippy-map-application/
随着数据中心的不断发展,数据量日益扩大,如何有效地处理海量数据成为了浮出水面的新问题。在过去的IDF上,Intel介绍了海量数据处理的一些现状和经验,供大家参考。
http://intelstudios.edgesuite.net/idf ... es/idf2012_db-en/main.htm
附件是E5-2600的一篇白皮书,介绍了高性能的E5-2600的应用,供参考。
高性能的E5-2600
这里是美国航空航天管理局的云架构白皮书,供参考。
美国航空航天管理局的云架构
云计算越来越火,安全也日益为人关注,这里是一篇关于云计算安全的白皮书,供大家参考。
安全的云计算
网上看到很多帖子说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驱动之后,右击我的电脑,管理 -> 磁盘管理,选择菜单栏 Action -> Create VHD, 然后按照步骤一路next即可,建议大小设置为60GB以上,以备足够空间安装开发工具。
创建VHD时间非常漫长,大约需要15-20分钟,创建完成之后,在磁盘管理中会看到disk 1,右击disk 1,选择初始化,初始化完成后,右击右边区域创建新加卷,然后一路next,并快速格式化。建议选择NTFS格式。
4. 安装Win8
接下来的过程就是从U盘或者光盘启动安装Win8,到选择安装硬盘的时候选择我们之前创建的VHD disk 1即可。之后的安装过程就不再叙述了。
5. 启动引导
安装好Win8之后,Win8会自动接管启动引导项。这里建议各位网友将启动引导项改为Win7的,出于安全和稳定的考虑。改回Win7 的方法就是 启动到选择系统页面,点击最下面更改默认启动方式,将默认启动方式改为Win7,则Win7会接管启动引导项。
6. 总结
尤其最新的笔记本基本都是AHCI方式的硬盘,在安装双系统的过程中经常碰到找不到硬盘等问题。安装以上五步安装即可完美解决上述问题, 保证双系统都在AHCI方式下面运行,保持电脑硬盘高效运行。
注意点:
1. 第二步中,以下步骤和第三步不能颠倒,否则安装的Win8只能在IDE的方式下工作:
安装完成之后,在注册列表里面找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci 下的 start ,把3改为0;然后重启,打开bios中的ahci 选择;保存退出。开机后系统自动安装AHCI驱动后,再次重启,即可。
2. 强烈建议在第五步中,设置为Win7接管启动项目。Win8接管启动项,如果电脑有任何小症状,会带来不稳定性。
今年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/artic ... erated-execution-manager/
介绍
本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3。博文也分为三个大部分:
1. 众望所归的HTML5将主要介绍HTML5的前世今生,主要功能和API以及相关Demo,Demo的代码都可以在文章附件中下载到;
2. 高性能JavaScript将主要介绍如何让JavaScript更流畅,JavaScript debug和分析工具,可以说,没有JavaScript就不可能有互联网的今天,更不可能有移动互联网的明天,编写高性能的JavaScript至关重要;
3. 变化万千的CSS3将主要介绍如今异常强大的CSS3,结合HTML5编写动态的Web应用。熟练使用异常Fashion & Cool & 炫的CSS3将使Web应用增色不少。
本篇是高性能JavaScript介绍的第三篇,将给大家结合实例例子及分析工具介绍在加载JavaScript代码时,如何编程可以让Web应用或者网页更加高效。
相关文章
移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈
移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具
加载JavaScript
当Browser在遇到<script>标签的时候,整个页面会因为脚本解析、运行而出现等待,不论实际load的JavaScript代码是内联的还是包含在不相干的外部文件中。页面会因为JavaScript文件的下载,解析而停止,等待脚本完成了才能继续。所以对比以下两段代码看谁能高效:
代码片段一
<html>
<head>
<title>Script Example</title>
<-- Example of inefficient script positioning -->
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file3.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
</body>
</html>
代码片段二
<html>
<head>
<title>Script Example</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
<-- Example of recommend script positioning -->
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file3.js"></script>
</body>
</html>
很显然,代码片段二更高效。因为页面显示部分和JavaScript脚本没有直接的关系,所以完全可以先把界面渲染了再去load脚本。三个JS脚本加载时间我们可以从Chrome分析工具中获得,如下图所示:

将脚本成组加载
由于每个<script>标签在下载时都会阻塞页面解析的过程,所以限制页面<script>总数也可以改善性能。所以成组加载JavaScript脚本可以提升页面整体性能,这个规则不仅对内联脚本有效,对外部脚本同样适用。
原因是在于每个HTTP 请求都会产生额外的性能负担,下载一个100KB的脚本远比下载4个25KB的脚本要快。
下面我们用两个demo来证明一下:demo源代码可在本文结尾处下载。
代码片段一:
<html>
<head>
<title>Script Example</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
<-- Example of not recommended script positioning -->
<script type="text/javascript" src="
http://yui.yahooapis.com/combo?2.7.0/build/yahoo/yahoo-min.js">
</script>
<script type="text/javascript" src="
http://yui.yahooapis.com/combo?2.7.0/build/event/event-min.js ">
</script>
</body>
代码片段二:
<html>
<head>
<title>Script Example</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
<-- Example of recommended script positioning -->
<script type="text/javascript" src="
http://yui.yahooapis.com/combo?2.7.0/ ... /yahoo/yahoo-min.js&
2.7.0/build/event/event-min.js "></script>
</body>
两段代码运行后,分别用Chrome开发者工具里面的TimeLine进行分析结果如下图:代码片段二要更加高效。

动态加载脚本
文件对象模型(DOM)允许用户使用JavaScript创建HTML文档中几乎全部的元素和内容。<script>元素也不例外。所以,使用DOM可以动态的在JavaScript动创建,移动,删除脚本文件,这样可以比较JavaScript在加载时对UI页面的阻塞。
参见代码片段:
<script >
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);
</script>
运行后使用TimeLine分析如下图所示:可以看出JavaScript的加载并没有阻塞UI页面。

XHR脚本
另外一种非阻塞方式加载脚本的方法就是将XMLHttpRequest(XHR)对象加入到页面中。这种方式首先需要创建一个XHR对象,然后下载JavaScript文件,再使用一个动态的<script>元素将JavaScript代码加入到页面里面。
具体参加代码示例:
var xhr = new XMLHttpRequest();
xhr.open("get", "file1.js", true);
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
var script = document.createElement("script");
script.type = "text/javascript";
script.text = xhr.responseText;
document.body.appendChild(script);
}
}
};
xhr.send(null);
部署JavaScript
为了让客户端Web应用更加高效和便捷,不仅仅在客户端编程时可以高效地使用JavaScript,同样在Server端可以通过以下途径来使Web页面的加载更高快速。
1. 尽可能地合并JavaScript文件,降低HTTP请求数量
2. 压缩JavaScript文件,缩小下载文件的大小,可以使用gzip的方式进行压缩。
3. 通过设定合适的HTTP 回复头文件来使客户端缓存一些大的JavaScript文件。一旦脚本被缓存,则用户下次打开时,可以显著降低加下载和解析时间。
4. 对于服务范围很广的公司,可以考虑使用CDN(Content Delivery Network)来部署JavaScript文件。
源代码下载地址: 下载
参考文章:High performance JavaScript O'Reilly Yahoo Press
在下一篇文章中将给大家介绍在JavaScript编程的过程中,如何通过一些编程技巧来提升Web应用的性能,缩短其处理时间。
相关文章
移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈
移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具