cpu分支预测

cpu分支预测,很高大上的哦。

今天翻到一片博客为什么处理排序的数组要比非排序的快? 很感兴趣;就自己写了个js的测试例子代码如下:

var arr = [], NUM = 1000000;
for (var i = 0; i < NUM; i++) {
	arr[i] = Math.random() * NUM * 100;
}
var sum = 0;
function sort(a, b) {
	return a - b;
}
var timeStart = new Date();
for (var i = 0; i < NUM; i++) {
	if (arr[i] > 500) {
		sum += arr[i];
	}
}
var timeStart_sort = new Date();
arr.sort(sort); //
var timeStop_sort = new Date();

var timeStop = new Date();
var timeStart1 = new Date();
for (var i = 0; i < NUM; i++) {
	if (arr[i] > 500) {
		sum += arr[i];
	}
}
var timeStop1 = new Date();
if (console.log) {
	console.log(timeStop - timeStart);
	console.log(timeStop_sort - timeStart_sort);
	console.log(timeStop1 - timeStart1);
}

想看看效果请点击这里 在firefox下看效果差别不大,但是在chrome下会看见排完序的数组的处理速度很快很快,看来v8确实很威武啊

因为本人很菜,对c以及底层的东西知道的很少。
看了相关的文章,明白这个玩意专业术语叫cpu分支预测 这个东西是cpu级别的优化,各个语言都可以利用,我也做一下传播,对以后的编程以及脚本优化啥的很有帮助啊哈哈.

分支预测(Branch Prediction):   

从P5时代开始的一种先进的,解决处理分支指令(if-then-else)导致流水线失败的数据处理方法,由CPU来判断程序分支的进行方向,能够加快运算速度。 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕。流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。   

分支预测技术便是为解决这一问题而出现的。   

分支预测技术包含编译时进行的静态分支预测和硬件在执行时进行的动态分支预测.

(个人理解):

简单的讲,就是在处理完毕排序的数组,for循环里if经过多次为true/false 之后,会预测下次依然是这个结果,并且预处理下一条语句,这样就达到了高效的目的.

参考资料如下:

  1. http://blog.sina.com.cn/s/blog_6c673e570100zfmo.html
  2. http://www.cnblogs.com/dongliqian/archive/2012/04/05/2433847.html
  3. http://en.wikipedia.org/wiki/Branch_predictor
  4. Why is processing a sorted array faster than an unsorted array?
...话说js的sort的排序速度好慢。。。泪奔。。。。。
本文标题:cpu分支预测
本文链接:https://56way.com/p/3.html
作者授权:除特别说明外,本文由 无路 原创编译并授权 小无路 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。