Прогнозирование ветвей на php

просто прочитайте отличный пост о предсказания ветвлений. Я пытался воспроизвести его с помощью языка 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 встроил оптимизацию для предсказателя ветвей?

UPD:

Я сделал изменения кода в соответствии с комментариями и измерил время на моей локальной машине.

не отсортированный массив: 1.108197927475

отсортированном массиве: 1.6477839946747

разница: 0.539586067.

Я думаю, что эта разница тратится на сортировку. Похоже, что предсказатель ветвей не влияет на скорость.

1 ответов


вы не будете реплицировать это в PHP. Конец истории. Причина в том, что Java RTS использует методы компиляции JiT для компиляции промежуточного кода Java вплоть до базового кода порядка X86. Этот базовый код заказа будет предоставлять эти артефакты прогнозирования ветвей.

система выполнения PHP компилирует PHP до байт-кода, который является псевдо-машинным кодом, который интерпретируется. Этот интерпретатор будет выполнять порядка 0,5 м opcodes / sec на типичном одном ядре - это каждый PHP-код принимает, возможно, 2-6K собственные инструкции. В этом будут потеряны все тонкости ветвления.