Подтвердить что ты не робот

Прогнозирование ветвления на 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.

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

4b9b3361

Ответ 1

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

Система времени выполнения PHP компилирует PHP до байт-кода, который является псевдо-машинным кодом, который интерпретируется. Этот интерпретатор будет выполнять порядка 0.5M opcodes/sec на типичном одноядерном ядре - каждый PHP-код может содержать 2-6K собственных инструкций. Любые тонкости ветвления будут потеряны в этом.