刚刚阅读了一篇关于分支预测的精彩文章。我试图用 php 语言重现它。
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$count = 300000;
$sum = 0;
for ($i = 0; $i <= $count; $i++) {
$array[] = rand(0, $count);
}
sort($array);
for ($i = 0; $i <= $count; $i++) {
if ($array[$i] <= 150000) {
$sum += $array[$i];
}
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo $sum . '<br />';
echo 'End:' . $time;
?>
但是我总是在排序和没有排序的情况下得到相同的结果。也许我做错了什么?或者也许 php 已经内置了分支预测器的优化?
升级版:
我根据注释对代码进行了修改,并在本地机器上测量了时间。
未排序的数组:1.108197927475
排序数组:1.6477839946747
差异:0.539586067。
我认为这种差异用于排序。分支预测器似乎对速度没有影响。